UNPKG

@vulcan-sql/core

Version:
85 lines 3.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.visitChildren = exports.walkAst = exports.generateMetadata = void 0; const nunjucks = require("nunjucks"); const generateMetadata = (providers) => { const metadata = providers.reduce((currentMetadata, provider) => { currentMetadata[provider.metadataName] = provider.getMetadata(); return currentMetadata; }, {}); return metadata; }; exports.generateMetadata = generateMetadata; const walkAst = (root, visitors) => { visitors.forEach((visitor) => visitor(root)); (0, exports.visitChildren)(root, (node) => (0, exports.walkAst)(node, visitors)); }; exports.walkAst = walkAst; const visitChildren = (root, callBack) => { if (root instanceof nunjucks.nodes.NodeList) { const indexToRemove = []; root.children.forEach((node, index) => { callBack(node, (replaced) => { if (replaced) { root.children[index] = replaced; } else { indexToRemove.push(index); } }); }); // Must delete in reverse order for (let index = indexToRemove.length - 1; index >= 0; index--) { root.children.splice(indexToRemove[index], 1); } } else if (root instanceof nunjucks.nodes.CallExtension) { if (root.args) { callBack(root.args, (replaced) => { if (!replaced) { root.args = new nunjucks.nodes.NodeList(root.args.lineno, root.args.colno); } else if (replaced instanceof nunjucks.nodes.NodeList) { root.args = replaced; } else { root.args = new nunjucks.nodes.NodeList(root.args.lineno, root.args.colno); root.args.addChild(replaced); } }); } if (root.contentArgs) { const indexToRemove = []; root.contentArgs.forEach((node, index) => { callBack(node, (replaced) => { if (replaced && root.contentArgs) { root.contentArgs[index] = replaced; } else { indexToRemove.push(index); } }); }); // Must delete in reverse order for (let index = indexToRemove.length - 1; index >= 0; index--) { root.contentArgs.splice(indexToRemove[index], 1); } } } else { root.iterFields((node, fieldName) => { if (node instanceof nunjucks.nodes.Node) { callBack(node, (replaced) => { if (replaced) { root[fieldName] = replaced; } else { delete root[fieldName]; } }); } }); } }; exports.visitChildren = visitChildren; //# sourceMappingURL=helpers.js.map