UNPKG

twing

Version:

First-class Twig engine for Node.js

56 lines (55 loc) 2.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createTokenStream = void 0; const parsing_1 = require("./error/parsing"); const twig_lexer_1 = require("twig-lexer"); const lexer_1 = require("./lexer"); const createTokenStream = (tokens, source) => { const stream = new twig_lexer_1.TokenStream(tokens); const tokenStream = { get current() { return stream.current; }, get source() { return source; }, injectTokens: (tokens) => { stream.injectTokens(tokens); }, next: () => { return stream.next(); }, nextIf: (primary, secondary) => { return stream.nextIf(primary, secondary); }, expect: (type, value = null, message = null) => { let token = tokenStream.current; if (!token.test(type, value || undefined)) { const { line, column } = token; throw (0, parsing_1.createParsingError)(`${message ? message + '. ' : ''}Unexpected token "${(0, lexer_1.typeToEnglish)(token.type)}" of value "${token.value}" ("${(0, lexer_1.typeToEnglish)(type)}" expected${value ? ` with value "${value}"` : ''}).`, { line, column }, source); } tokenStream.next(); return token; }, look: (number) => { return stream.look(number); }, test: (type, value) => { return stream.test(type, value); }, isEOF: () => { return tokenStream.current.type === "EOF"; }, toAst: () => { return stream.traverse((token, stream) => { token = (0, twig_lexer_1.astVisitor)(token, stream); if (token && token.test("TEST_OPERATOR")) { token = new twig_lexer_1.Token("OPERATOR", token.value, token.line, token.column); } return token; }); } }; return tokenStream; }; exports.createTokenStream = createTokenStream;