twing
Version:
First-class Twig engine for Node.js
89 lines (88 loc) • 2.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createExtensionSet = void 0;
const createExtensionSet = () => {
const binaryOperators = [];
const filters = new Map();
const functions = new Map();
const nodeVisitors = [];
const tagHandlers = [];
const tests = new Map();
const unaryOperators = [];
const extensionSet = {
get binaryOperators() {
return binaryOperators;
},
get filters() {
return filters;
},
get functions() {
return functions;
},
get nodeVisitors() {
return nodeVisitors;
},
get tagHandlers() {
return tagHandlers;
},
get tests() {
return tests;
},
get unaryOperators() {
return unaryOperators;
},
addExtension: (extension) => {
// filters
for (const filter of extension.filters) {
extensionSet.addFilter(filter);
}
// functions
for (const function_ of extension.functions) {
extensionSet.addFunction(function_);
}
// tests
for (const test of extension.tests) {
extensionSet.addTest(test);
}
// operators
for (const operator of extension.operators) {
extensionSet.addOperator(operator);
}
// tag handlers
for (const tagHandler of extension.tagHandlers) {
extensionSet.addTagHandler(tagHandler);
}
// node visitors
for (const nodeVisitor of extension.nodeVisitors) {
extensionSet.addNodeVisitor(nodeVisitor);
}
},
addFilter: (filter) => {
filters.set(filter.name, filter);
},
addFunction: (twingFunction) => {
functions.set(twingFunction.name, twingFunction);
},
addNodeVisitor: (nodeVisitor) => {
nodeVisitors.push(nodeVisitor);
},
addOperator: (operator) => {
let bucket;
if (operator.type === "UNARY") {
bucket = unaryOperators;
}
else {
bucket = binaryOperators;
}
bucket.push(operator);
},
addTagHandler: (tagHandler) => {
tagHandlers.push(tagHandler);
},
addTest: (test) => {
tests.set(test.name, test);
}
};
return extensionSet;
};
exports.createExtensionSet = createExtensionSet;