PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-bin/src
Просмотр файла: Parser.ts
export type ParserNodeValue = number | bigint | string | Buffer | Uint8Array | boolean | undefined | null;
export function isParserNodeValue(v: unknown): v is ParserNodeValue {
switch (typeof v) {
case 'undefined':
case 'boolean':
case 'number':
case 'string':
case 'bigint':
return true;
case 'object':
return v === null || Buffer.isBuffer(v) || v instanceof Uint8Array;
}
return false;
}
export type ParserNode = {
type: 'node';
label: string;
value: ParserNodeValue | undefined;
nodes: ParserNode[] | undefined;
};
export class Parser {
parseError: 'throw' | 'continue';
constructor(params: { parseError?: 'throw' | 'continue' } = {}) {
this.parseError = params.parseError ?? 'continue';
}
node(label: string | number, value: ParserNodeValue, nodes: ParserNode[] = []): ParserNode {
if (!isParserNodeValue(value)) {
throw new Error(`invalid node value ${typeof value}`);
}
return {
type: 'node',
label: String(label),
value,
nodes,
};
}
nodeCatchError(
label: string | number,
buildValue: () => ParserNodeValue | undefined,
buildNodes: () => ParserNode[] = () => []
): ParserNode {
try {
return this.node(label, buildValue?.(), buildNodes());
} catch (e) {
return this.handleParseError(e);
}
}
handleParseError(e: unknown): ParserNode {
if (this.parseError === 'throw') {
throw e;
}
return this.node('error', String(e));
}
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!