Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

babel-plugin-minify-mangle-names

Package Overview
Dependencies
Maintainers
5
Versions
87
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

babel-plugin-minify-mangle-names - npm Package Compare versions

Comparing version 0.5.0-alpha.1cb46b73 to 0.5.0-alpha.2e0de171

102

lib/index.js

@@ -277,2 +277,38 @@ "use strict";

/**
* Tells if the name can be mangled in the current observed scope with
* the input binding
*
* @param {string} oldName the old name that needs to be mangled
* @param {Binding} binding Binding of the name
* @param {Scope} scope The current scope the mangler is run
*/
canMangle(oldName, binding, scope) {
const cannotMangle = // arguments - for non-strict mode
oldName === "arguments" || // labels
binding.path.isLabeledStatement() || // ClassDeclaration has binding in two scopes
// 1. The scope in which it is declared
// 2. The class's own scope
binding.path.isClassDeclaration() && binding.path === scope.path || // excluded
this.isExcluded(oldName) || ( // function names
this.keepFnName ? isFunction(binding.path) : false) || ( // class names
this.keepClassName ? isClass(binding.path) : false) || // named export
this.isExportedWithName(binding);
return !cannotMangle;
}
/**
* Tells if the newName can be used as a valid name for the input binding
* in the input scope
*
* @param {string} newName the old name that needs to be mangled
* @param {Binding} binding Binding of the name that this new name will replace
* @param {Scope} scope The current scope the mangler is run
*/
isValidName(newName, binding, scope) {
return t.isValidIdentifier(newName) && !this.scopeTracker.hasBinding(scope, newName) && !scope.hasGlobal(newName) && !this.scopeTracker.hasReference(scope, newName) && this.scopeTracker.canUseInReferencedScopes(binding, newName);
}
/**
* Mangle the scope

@@ -300,16 +336,8 @@ * @param {Scope} scope

mangler.visitedScopes.add(scope); // Helpers to generate names
mangler.visitedScopes.add(scope);
const bindings = scopeTracker.bindings.get(scope);
const names = [...bindings.keys()]; // A counter to generate names and reset
// so we can reuse removed names
let i = 0;
function getNext() {
return mangler.charset.getIdentifier(i++);
}
function resetNext() {
i = 0;
}
const bindings = scopeTracker.bindings.get(scope);
const names = [...bindings.keys()];
let counter = 0;
/**

@@ -319,32 +347,36 @@ * 1. Iterate through the list of BindingIdentifiers

* 3. Update the scope tree.
*
* We cannot use a for..of loop over bindings.keys()
* because (2) we rename in place and update the bindings
* as we traverse through the keys
*/
for (let i = 0; i < names.length; i++) {
const oldName = names[i];
const binding = bindings.get(oldName); // Names which should NOT be mangled
for (var _i = 0; _i < names.length; _i++) {
const oldName = names[_i];
const binding = bindings.get(oldName);
if ( // arguments - for non-strict mode
oldName === "arguments" || // labels
binding.path.isLabeledStatement() || // ClassDeclaration has binding in two scopes
// 1. The scope in which it is declared
// 2. The class's own scope
binding.path.isClassDeclaration() && binding.path === scope.path || // excluded
mangler.isExcluded(oldName) || ( // function names
mangler.keepFnName ? isFunction(binding.path) : false) || ( // class names
mangler.keepClassName ? isClass(binding.path) : false) || // named export
mangler.isExportedWithName(binding)) {
continue;
}
if (mangler.canMangle(oldName, binding, scope)) {
let next;
let next;
do {
next = mangler.charset.getIdentifier(counter++);
} while (!mangler.isValidName(next, binding, scope)); // Reset so variables which are removed can be reused
//
// the following is an assumtion (for perf)
// the length 3 is an assumption that if the oldName isn't
// 1 or 2 characters, then probably we are not going to find
// a name - because for almost all usecases we have 1 or 2
// character new names only. And for the edge cases where
// one scope has lots and lots of variables, it's okay to
// name something with 3 characters instead of 1
do {
next = getNext();
} while (!t.isValidIdentifier(next) || scopeTracker.hasBinding(scope, next) || scope.hasGlobal(next) || scopeTracker.hasReference(scope, next) || !scopeTracker.canUseInReferencedScopes(binding, next)); // Reset so variables which are removed can be reused
if (oldName.length < 3) {
counter = 0;
} // Once we detected a valid `next` Identifier which could be used,
// call the renamer
resetNext(); // Once we detected a valid `next` Identifier which could be used,
// call the renamer
mangler.rename(scope, binding, oldName, next);
mangler.rename(scope, binding, oldName, next);
}
}

@@ -351,0 +383,0 @@ }

{
"name": "babel-plugin-minify-mangle-names",
"version": "0.5.0-alpha.1cb46b73",
"version": "0.5.0-alpha.2e0de171",
"description": "",

@@ -15,4 +15,4 @@ "keywords": [

"dependencies": {
"babel-helper-mark-eval-scopes": "^0.5.0-alpha.1cb46b73"
"babel-helper-mark-eval-scopes": "^0.5.0-alpha.2e0de171"
}
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc