UNPKG

@creditkarma/thrift-parser

Version:

A parser for Thrift written in TypeScript

76 lines 2.6 kB
"use strict"; function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } Object.defineProperty(exports, "__esModule", { value: true }); const fs = require("fs"); const path = require("path"); const debugger_1 = require("./debugger"); const organizer_1 = require("./organizer"); const parser_1 = require("./parser"); const scanner_1 = require("./scanner"); __export(require("./types")); __export(require("./factory")); var scanner_2 = require("./scanner"); exports.createScanner = scanner_2.createScanner; var parser_2 = require("./parser"); exports.createParser = parser_2.createParser; exports.defaultOptions = { fastFail: false, rootDir: '.', outDir: '.', files: [], }; function parseFiles(options = exports.defaultOptions) { return options.files.map((file) => { const filePath = path.resolve(process.cwd(), options.rootDir, file); const content = fs.readFileSync(filePath, 'utf-8'); return parse(content, options); }); } exports.parseFiles = parseFiles; function parse(source, options = exports.defaultOptions) { const debug = debugger_1.createDebugger(source); const scanner = scanner_1.createScanner(source, handleError); const tokens = scanner.scan(); const parser = parser_1.createParser(tokens, handleError); const intermediate = parser.parse(); const thrift = organizer_1.organize(intermediate); /** * This is a safe handler for errors that allows the parser and scanner to recover to a * reasonable state after an error and continue with the parse. If an error occurs we will * not return any output, but using this allows us to catch more errors and report them to * the user at once instead of the work flow of find error -> fix error, find error -> fix error. * * @param err */ function handleError(err) { debug.report(err); if (options.fastFail) { debug.print(); throw new Error(err.message); } else { switch (err.type) { case "ParseError" /* ParseError */: parser.synchronize(); break; case "ScanError" /* ScanError */: scanner.syncronize(); break; } } } if (debug.hasError()) { debug.print(); return { type: "ThriftErrors" /* ThriftErrors */, errors: debug.getErrors(), }; } else { return thrift; } } exports.parse = parse; //# sourceMappingURL=index.js.map