UNPKG

siphon-cli

Version:

Simple bundler for web applications. 📦🔧🧡

65 lines (64 loc) • 2.51 kB
"use strict"; 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;