twing
Version:
First-class Twig engine for Node.js
44 lines (43 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createSetTagHandler = void 0;
const parsing_1 = require("../error/parsing");
const set_1 = require("../node/set");
const node_1 = require("../node");
const createSetTagHandler = () => {
const tag = 'set';
return {
tag,
initialize: (parser) => {
return (token, stream) => {
const { line, column } = token;
const names = parser.parseAssignmentExpression(stream);
let capture = false;
let values;
if (stream.nextIf("OPERATOR", '=')) {
values = parser.parseMultiTargetExpression(stream);
stream.expect("TAG_END");
if ((0, node_1.getChildrenCount)(names) !== (0, node_1.getChildrenCount)(values)) {
const { line, column } = stream.current;
throw (0, parsing_1.createParsingError)('When using set, you must have the same number of variables and assignments.', { line, column }, stream.source);
}
}
else {
capture = true;
if ((0, node_1.getChildrenCount)(names) > 1) {
const { line, column } = stream.current;
throw (0, parsing_1.createParsingError)('When using set with a block, you cannot have a multi-target.', { line, column }, stream.source);
}
stream.expect("TAG_END");
values = parser.subparse(stream, tag, (token) => {
return token.test("NAME", 'endset');
});
stream.next();
stream.expect("TAG_END");
}
return (0, set_1.createSetNode)(capture, names, values, line, column, tag);
};
}
};
};
exports.createSetTagHandler = createSetTagHandler;