cosmjs-util/packages/cli/src/helpers.ts
2020-02-06 17:36:14 +01:00

34 lines
1.2 KiB
TypeScript

import { TSError } from "ts-node";
import { Context, Script } from "vm";
import { wrapInAsyncFunction } from "./async";
export function executeJavaScript(code: string, filename: string, context: Context): any {
const script = new Script(code, { filename: filename });
return script.runInContext(context);
}
export async function executeJavaScriptAsync(code: string, filename: string, context: Context): Promise<any> {
const preparedCode = code.replace(/^\s*"use strict";/, "");
// wrapped code returns a promise when executed
const wrappedCode = wrapInAsyncFunction(preparedCode);
const script = new Script(wrappedCode, { filename: filename });
const out = await script.runInContext(context);
return out;
}
export function isRecoverable(error: TSError): boolean {
const recoveryCodes: Set<number> = new Set([
1003, // "Identifier expected."
1005, // "')' expected."
1109, // "Expression expected."
1126, // "Unexpected end of text."
1160, // "Unterminated template literal."
1161, // "Unterminated regular expression literal."
2355, // "A function whose declared type is neither 'void' nor 'any' must return a value."
]);
return error.diagnosticCodes.every(code => recoveryCodes.has(code));
}