twing
Version:
First-class Twig engine for Node.js
45 lines (44 loc) • 1.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFromTagHandler = void 0;
const import_1 = require("../node/import");
const assignment_1 = require("../node/expression/assignment");
/**
* Imports macros.
*
* <pre>
* {% from 'forms.html' import forms %}
* </pre>
*/
const createFromTagHandler = () => {
const tag = 'from';
return {
tag,
initialize: (parser) => {
return (token, stream) => {
const templateName = parser.parseExpression(stream);
stream.expect("NAME", 'import');
const targets = new Map();
do {
let name = stream.expect("NAME").value;
let alias = name;
if (stream.nextIf("NAME", 'as')) {
alias = stream.expect("NAME").value;
}
targets.set(name, alias);
if (!stream.nextIf("PUNCTUATION", ',')) {
break;
}
} while (true);
stream.expect("TAG_END");
const aliasNode = (0, assignment_1.createAssignmentNode)(parser.getVarName(), token.line, token.column);
const importNode = (0, import_1.createImportNode)(templateName, aliasNode, true, token.line, token.column, tag);
for (const [name, alias] of targets) {
parser.addImportedSymbol("method", alias, name, aliasNode);
}
return importNode;
};
}
};
};
exports.createFromTagHandler = createFromTagHandler;