twing
Version:
First-class Twig engine for Node.js
41 lines (40 loc) • 1.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createUseTagHandler = void 0;
const parsing_1 = require("../error/parsing");
const constant_1 = require("../node/expression/constant");
const trait_1 = require("../node/trait");
const node_1 = require("../node");
const createUseTagHandler = () => {
const tag = 'use';
return {
tag,
initialize: (parser) => {
return (token, stream) => {
const { line, column } = token;
const template = parser.parseExpression(stream);
if (template.type !== "constant") {
throw (0, parsing_1.createParsingError)('The template references in a "use" statement must be a string.', { line, column }, stream.source);
}
const targets = {};
if (stream.nextIf("NAME", 'with')) {
do {
const name = stream.expect("NAME").value;
let alias = name;
if (stream.nextIf("NAME", 'as')) {
alias = stream.expect("NAME").value;
}
targets[name] = (0, constant_1.createConstantNode)(alias, line, column);
if (!stream.nextIf("PUNCTUATION", ',')) {
break;
}
} while (true);
}
stream.expect("TAG_END");
parser.addTrait((0, trait_1.createTraitNode)(template, (0, node_1.createNode)(targets, line, column), line, column));
return (0, node_1.createNode)({}, line, column, tag);
};
}
};
};
exports.createUseTagHandler = createUseTagHandler;