js-slang
Version:
Javascript-based implementations of Source, written in Typescript
42 lines • 1.28 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.estreeDecode = exports.estreeEncode = void 0;
const __1 = require("..");
const walk = require("acorn-walk");
// A function to modify all names in the estree program.
// Prevents any name collisions with JS keywords and invalid characters.
function estreeEncode(ast) {
walk.full(ast, (node) => {
if (node.encoded === true) {
return;
}
if (node.type === "Identifier") {
node.name = (0, __1.encode)(node.name);
// ensures the conversion is only done once
node.encoded = true;
}
});
walk.full(ast, (node) => {
node.encoded = undefined;
});
return ast;
}
exports.estreeEncode = estreeEncode;
function estreeDecode(ast) {
walk.full(ast, (node) => {
if (node.decoded === true) {
return;
}
if (node.type === "Identifier") {
node.name = (0, __1.decode)(node.name);
// ensures the conversion is only done once
node.decoded = true;
}
});
walk.full(ast, (node) => {
node.decoded = undefined;
});
return ast;
}
exports.estreeDecode = estreeDecode;
//# sourceMappingURL=encoder-visitor.js.map
;