1 | ;
|
2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4 | return new (P || (P = Promise))(function (resolve, reject) {
|
5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8 | step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9 | });
|
10 | };
|
11 | var __importStar = (this && this.__importStar) || function (mod) {
|
12 | if (mod && mod.__esModule) return mod;
|
13 | var result = {};
|
14 | if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
15 | result["default"] = mod;
|
16 | return result;
|
17 | };
|
18 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
19 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
20 | };
|
21 | Object.defineProperty(exports, "__esModule", { value: true });
|
22 | const fs = __importStar(require("fs"));
|
23 | const util_1 = require("util");
|
24 | const p_settle_1 = __importDefault(require("p-settle"));
|
25 | const readFile = util_1.promisify(fs.readFile);
|
26 | const lexer_1 = require("./lexer");
|
27 | const parser_1 = require("./parser");
|
28 | const PP = __importStar(require("./preprocessor"));
|
29 | exports.preprocessor = PP;
|
30 | const BrsTypes = __importStar(require("./brsTypes"));
|
31 | exports.types = BrsTypes;
|
32 | const BrsError = __importStar(require("./Error"));
|
33 | const interpreter_1 = require("./interpreter");
|
34 | function getLexerParserFn(manifest, options) {
|
35 | const executionOptions = Object.assign(interpreter_1.defaultExecutionOptions, options);
|
36 | return function parse(filenames) {
|
37 | return __awaiter(this, void 0, void 0, function* () {
|
38 | let parsedFiles = yield p_settle_1.default(filenames.map((filename) => __awaiter(this, void 0, void 0, function* () {
|
39 | let contents;
|
40 | try {
|
41 | contents = yield readFile(filename, "utf-8");
|
42 | }
|
43 | catch (err) {
|
44 | return Promise.reject({
|
45 | message: `brs: can't open file '${filename}': [Errno ${err.errno}]`,
|
46 | });
|
47 | }
|
48 | let lexer = new lexer_1.Lexer();
|
49 | let preprocessor = new PP.Preprocessor();
|
50 | let parser = new parser_1.Parser();
|
51 | [lexer, preprocessor, parser].forEach(emitter => emitter.onError(BrsError.getLoggerUsing(executionOptions.stderr)));
|
52 | let scanResults = lexer.scan(contents, filename);
|
53 | if (scanResults.errors.length > 0) {
|
54 | return Promise.reject({
|
55 | message: "Error occurred during lexing",
|
56 | });
|
57 | }
|
58 | let preprocessResults = preprocessor.preprocess(scanResults.tokens, manifest);
|
59 | if (preprocessResults.errors.length > 0) {
|
60 | return Promise.reject({
|
61 | message: "Error occurred during pre-processing",
|
62 | });
|
63 | }
|
64 | let parseResults = parser.parse(preprocessResults.processedTokens);
|
65 | if (parseResults.errors.length > 0) {
|
66 | return Promise.reject({
|
67 | message: "Error occurred parsing",
|
68 | });
|
69 | }
|
70 | return Promise.resolve(parseResults.statements);
|
71 | })));
|
72 | // don't execute anything if there were reading, lexing, or parsing errors
|
73 | if (parsedFiles.some(file => file.isRejected)) {
|
74 | return Promise.reject({
|
75 | messages: parsedFiles
|
76 | .filter(file => file.isRejected)
|
77 | .map(rejection => rejection.reason.message),
|
78 | });
|
79 | }
|
80 | // combine statements from all files into one array
|
81 | return parsedFiles
|
82 | .map(file => file.value || [])
|
83 | .reduce((allStatements, fileStatements) => [...allStatements, ...fileStatements], []);
|
84 | });
|
85 | };
|
86 | }
|
87 | exports.getLexerParserFn = getLexerParserFn;
|
88 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGV4ZXJQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTGV4ZXJQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUNBQXlCO0FBQ3pCLCtCQUFpQztBQUNqQyx3REFBK0I7QUFDL0IsTUFBTSxRQUFRLEdBQUcsZ0JBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFeEMsbUNBQWdDO0FBQ2hDLHFDQUF3QztBQUN4QyxtREFBcUM7QUFJdEIsMEJBQVk7QUFGM0IscURBQXVDO0FBQ2xCLHlCQUFLO0FBRzFCLGtEQUFvQztBQUNwQywrQ0FBMEU7QUFFMUUsU0FBZ0IsZ0JBQWdCLENBQzVCLFFBQW9DLEVBQ3BDLE9BQWtDO0lBRWxDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQ0FBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RSxPQUFPLFNBQWUsS0FBSyxDQUFDLFNBQW1COztZQUMzQyxJQUFJLFdBQVcsR0FBRyxNQUFNLGtCQUFPLENBQzNCLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBTSxRQUFRLEVBQUMsRUFBRTtnQkFDM0IsSUFBSSxRQUFRLENBQUM7Z0JBQ2IsSUFBSTtvQkFDQSxRQUFRLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUNoRDtnQkFBQyxPQUFPLEdBQUcsRUFBRTtvQkFDVixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ2xCLE9BQU8sRUFBRSx5QkFBeUIsUUFBUSxhQUFhLEdBQUcsQ0FBQyxLQUFLLEdBQUc7cUJBQ3RFLENBQUMsQ0FBQztpQkFDTjtnQkFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLGFBQUssRUFBRSxDQUFDO2dCQUN4QixJQUFJLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxNQUFNLEdBQUcsSUFBSSxlQUFNLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUM1QyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDcEUsQ0FBQztnQkFFRixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDakQsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQy9CLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDbEIsT0FBTyxFQUFFLDhCQUE4QjtxQkFDMUMsQ0FBQyxDQUFDO2lCQUNOO2dCQUVELElBQUksaUJBQWlCLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNyQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ2xCLE9BQU8sRUFBRSxzQ0FBc0M7cUJBQ2xELENBQUMsQ0FBQztpQkFDTjtnQkFFRCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDaEMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNsQixPQUFPLEVBQUUsd0JBQXdCO3FCQUNwQyxDQUFDLENBQUM7aUJBQ047Z0JBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUEsQ0FBQyxDQUNMLENBQUM7WUFFRiwwRUFBMEU7WUFDMUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ2xCLFFBQVEsRUFBRSxXQUFXO3lCQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO3lCQUMvQixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztpQkFDbEQsQ0FBQyxDQUFDO2FBQ047WUFFRCxtREFBbUQ7WUFDbkQsT0FBTyxXQUFXO2lCQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2lCQUM3QixNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUYsQ0FBQztLQUFBLENBQUM7QUFDTixDQUFDO0FBL0RELDRDQStEQyJ9 |
\ | No newline at end of file |