twing
Version:
First-class Twig engine for Node.js
56 lines (55 loc) • 2.07 kB
JavaScript
;
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;