@sudoo/marked
Version:
JavaScript & TypeScript code runner in JavaScript, safe with marked territory, asynchronous
64 lines (63 loc) • 2.9 kB
JavaScript
;
/**
* @author WMXPY
* @namespace Parse_Script
* @description Parse Script
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseScript = void 0;
const error_code_1 = require("../../declare/error-code");
const raw_1 = require("../../source-map/location-finder/raw");
const segment_1 = require("../../source-map/location-finder/segment");
const error_1 = require("../../util/error/error");
const transform_1 = require("../emit/transform");
const parse_estree_1 = require("../parse-estree");
const parseScript = (script, language) => __awaiter(void 0, void 0, void 0, function* () {
if (language === "javascript") {
return yield parseJavaScript(script);
}
else if (language === "typescript") {
return yield parseTypeScript(script);
}
throw (0, error_1.error)(error_code_1.ERROR_CODE.UNKNOWN_LANGUAGE);
});
exports.parseScript = parseScript;
const parseJavaScript = (script) => __awaiter(void 0, void 0, void 0, function* () {
try {
const estree = yield Promise.resolve((0, parse_estree_1.parseCodeToESTree)(script));
return {
estree: estree.estree,
comments: estree.comments,
locationFinder: raw_1.RawSourceMapLocationFinder.fromEmpty(),
};
}
catch (err) {
const syntaxError = err;
throw (0, error_1.error)(error_code_1.ERROR_CODE.PARSE_ERROR, syntaxError.message, `POS:${syntaxError.pos}, RAISEDAT:${syntaxError.raisedAt}`);
}
});
const parseTypeScript = (script) => __awaiter(void 0, void 0, void 0, function* () {
try {
const transformResult = yield (0, transform_1.emitTypeScriptTransform)(script);
const estree = yield Promise.resolve((0, parse_estree_1.parseCodeToESTree)(transformResult.source));
const locationFinder = segment_1.SegmentSourceMapLocationFinder.fromSourceMap(transformResult.sourceMap);
return {
estree: estree.estree,
comments: estree.comments,
locationFinder,
};
// eslint-disable-next-line @typescript-eslint/no-unused-vars
}
catch (err) {
throw (0, error_1.error)(error_code_1.ERROR_CODE.TYPESCRIPT_COMPILE_ERROR);
}
});