siphon-cli
Version:
Simple bundler for web applications. 📦🔧🧡
65 lines (64 loc) • 2.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isNotRenamable = void 0;
var __1 = require("../..");
var types_1 = require("../../../../../types");
function isNotRenamable(node, path) {
if (path.parent.type === "MemberExpression" &&
path.parent.property === node) {
return true;
}
if (/Property/.test(path.parent.type) && path.value !== node) {
if (path.parent.shorthand)
path.parent.shorthand = false;
return true;
}
return false;
}
exports.isNotRenamable = isNotRenamable;
var letters = "abcdefghijklmnopqrstuvwxyz$_";
function default_1(ast) {
var i = 0;
var globalVarTracker = new Map();
function rename_vars(node, path) {
path.scope.variables.forEach(function (variable) {
do {
variable.name =
letters[i++ % 25] + Math.random().toString(16).slice(13);
} while (globalVarTracker.has(variable.name));
globalVarTracker.set(variable.name, true);
});
}
__1.default.traverse(ast, {
Program: rename_vars,
BlockStatement: rename_vars,
Identifier: function (node, path) {
var _a;
if (isNotRenamable(node, path))
return;
if (path.scope.variables.has(node.name))
return path.scope.variables.get(node.name);
else
for (var _i = 0, _b = path.scope.ancestors; _i < _b.length; _i++) {
var ancestor = _b[_i];
if ((_a = ancestor.variables) === null || _a === void 0 ? void 0 : _a.has(node.name)) {
return ancestor.variables.get(node.name);
}
}
},
VariableDeclaration: function (node, path) {
var _a;
if (/Block|Program/.test(path.parent.type)) {
var body = path.parent.body;
var index = path.parent.body.indexOf(node) - 1;
while (((_a = body[index]) === null || _a === void 0 ? void 0 : _a.type) === "VariableDeclaration" &&
body[index].kind === node.kind) {
node.declarations = body[index].declarations.concat(node.declarations);
body[index] = new types_1.EmptyNode(0);
index--;
}
}
},
});
}
exports.default = default_1;