@vulcan-sql/core
Version:
Core package of VulcanSQL
85 lines • 3.11 kB
JavaScript
;
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