UNPKG

twing

Version:

First-class Twig engine for Node.js

44 lines (43 loc) 1.99 kB
"use strict"; 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;