UNPKG

sql-formatter

Version:

Format whitespace in a SQL query to make it more readable

43 lines 1.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createParser = void 0; const nearley_1 = __importDefault(require("nearley")); const disambiguateTokens_js_1 = require("../lexer/disambiguateTokens.js"); const grammar_js_1 = __importDefault(require("./grammar.js")); const LexerAdapter_js_1 = __importDefault(require("./LexerAdapter.js")); const token_js_1 = require("../lexer/token.js"); const { Parser: NearleyParser, Grammar } = nearley_1.default; /** * Creates a parser object which wraps the setup of Nearley parser */ function createParser(tokenizer) { let paramTypesOverrides = {}; const lexer = new LexerAdapter_js_1.default(chunk => [ ...(0, disambiguateTokens_js_1.disambiguateTokens)(tokenizer.tokenize(chunk, paramTypesOverrides)), (0, token_js_1.createEofToken)(chunk.length), ]); const parser = new NearleyParser(Grammar.fromCompiled(grammar_js_1.default), { lexer }); return { parse: (sql, paramTypes) => { // share paramTypesOverrides with Tokenizer paramTypesOverrides = paramTypes; const { results } = parser.feed(sql); if (results.length === 1) { return results[0]; } else if (results.length === 0) { // Ideally we would report a line number where the parser failed, // but I haven't found a way to get this info from Nearley :( throw new Error('Parse error: Invalid SQL'); } else { throw new Error(`Parse error: Ambiguous grammar\n${JSON.stringify(results, undefined, 2)}`); } }, }; } exports.createParser = createParser; //# sourceMappingURL=createParser.js.map