UNPKG

7.46 kBJavaScriptView Raw
1"use strict";
2var __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};
11var __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};
18var __importDefault = (this && this.__importDefault) || function (mod) {
19 return (mod && mod.__esModule) ? mod : { "default": mod };
20};
21Object.defineProperty(exports, "__esModule", { value: true });
22const fs = __importStar(require("fs"));
23const util_1 = require("util");
24const p_settle_1 = __importDefault(require("p-settle"));
25const readFile = util_1.promisify(fs.readFile);
26const lexer_1 = require("./lexer");
27const parser_1 = require("./parser");
28const PP = __importStar(require("./preprocessor"));
29exports.preprocessor = PP;
30const BrsTypes = __importStar(require("./brsTypes"));
31exports.types = BrsTypes;
32const BrsError = __importStar(require("./Error"));
33const interpreter_1 = require("./interpreter");
34function 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}
87exports.getLexerParserFn = getLexerParserFn;
88//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGV4ZXJQYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTGV4ZXJQYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUNBQXlCO0FBQ3pCLCtCQUFpQztBQUNqQyx3REFBK0I7QUFDL0IsTUFBTSxRQUFRLEdBQUcsZ0JBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFeEMsbUNBQWdDO0FBQ2hDLHFDQUF3QztBQUN4QyxtREFBcUM7QUFJdEIsMEJBQVk7QUFGM0IscURBQXVDO0FBQ2xCLHlCQUFLO0FBRzFCLGtEQUFvQztBQUNwQywrQ0FBMEU7QUFFMUUsU0FBZ0IsZ0JBQWdCLENBQzVCLFFBQW9DLEVBQ3BDLE9BQWtDO0lBRWxDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQ0FBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RSxPQUFPLFNBQWUsS0FBSyxDQUFDLFNBQW1COztZQUMzQyxJQUFJLFdBQVcsR0FBRyxNQUFNLGtCQUFPLENBQzNCLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBTSxRQUFRLEVBQUMsRUFBRTtnQkFDM0IsSUFBSSxRQUFRLENBQUM7Z0JBQ2IsSUFBSTtvQkFDQSxRQUFRLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUNoRDtnQkFBQyxPQUFPLEdBQUcsRUFBRTtvQkFDVixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ2xCLE9BQU8sRUFBRSx5QkFBeUIsUUFBUSxhQUFhLEdBQUcsQ0FBQyxLQUFLLEdBQUc7cUJBQ3RFLENBQUMsQ0FBQztpQkFDTjtnQkFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLGFBQUssRUFBRSxDQUFDO2dCQUN4QixJQUFJLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxNQUFNLEdBQUcsSUFBSSxlQUFNLEVBQUUsQ0FBQztnQkFDMUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUM1QyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDcEUsQ0FBQztnQkFFRixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDakQsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQy9CLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQzt3QkFDbEIsT0FBTyxFQUFFLDhCQUE4QjtxQkFDMUMsQ0FBQyxDQUFDO2lCQUNOO2dCQUVELElBQUksaUJBQWlCLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNyQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7d0JBQ2xCLE9BQU8sRUFBRSxzQ0FBc0M7cUJBQ2xELENBQUMsQ0FBQztpQkFDTjtnQkFFRCxJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDaEMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNsQixPQUFPLEVBQUUsd0JBQXdCO3FCQUNwQyxDQUFDLENBQUM7aUJBQ047Z0JBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUEsQ0FBQyxDQUNMLENBQUM7WUFFRiwwRUFBMEU7WUFDMUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ2xCLFFBQVEsRUFBRSxXQUFXO3lCQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO3lCQUMvQixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztpQkFDbEQsQ0FBQyxDQUFDO2FBQ047WUFFRCxtREFBbUQ7WUFDbkQsT0FBTyxXQUFXO2lCQUNiLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2lCQUM3QixNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLEdBQUcsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUYsQ0FBQztLQUFBLENBQUM7QUFDTixDQUFDO0FBL0RELDRDQStEQyJ9
\No newline at end of file