webfuscator 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  `webfuscator` is a Babel-based JavaScript obfuscator. It parses a JavaScript source string, applies configurable transforms, and returns JavaScript source.
2
2
 
3
- [Read the documentation](https://webfuscator.mintlify.app/) for the quickstart, configuration guides, API details, and a reference page for every transform.
3
+ [Read the documentation](https://docs.webfuscator.dev) for the quickstart, configuration guides, API details, and a reference page for every transform. To try it without installing anything, open the [playground](https://playground.webfuscator.dev) and obfuscate a file in your browser.
4
4
 
5
5
  ## Install
6
6
 
@@ -34,24 +34,29 @@ Configurable transforms are disabled by default; preparation passes always run.
34
34
 
35
35
  ## Documentation
36
36
 
37
- - [Quickstart](https://webfuscator.mintlify.app/getting-started/quickstart)
38
- - [JavaScript API](https://webfuscator.mintlify.app/reference/api)
39
- - [Configure transforms](https://webfuscator.mintlify.app/guides/configure-transforms)
40
- - [Obfuscator options](https://webfuscator.mintlify.app/reference/options)
41
- - [Property mangling](https://webfuscator.mintlify.app/reference/property-mangling-options)
42
- - [String generator modes](https://webfuscator.mintlify.app/reference/string-generator-modes)
43
- - [Report a bug](https://webfuscator.mintlify.app/troubleshooting/report-a-bug)
37
+ - [Playground](https://playground.webfuscator.dev)
38
+ - [Quickstart](https://docs.webfuscator.dev/getting-started/quickstart)
39
+ - [JavaScript API](https://docs.webfuscator.dev/reference/api)
40
+ - [Configure transforms](https://docs.webfuscator.dev/guides/configure-transforms)
41
+ - [Obfuscator options](https://docs.webfuscator.dev/reference/options)
42
+ - [Property mangling](https://docs.webfuscator.dev/reference/property-mangling-options)
43
+ - [String generator modes](https://docs.webfuscator.dev/reference/string-generator-modes)
44
+ - [Report a bug](https://docs.webfuscator.dev/troubleshooting/report-a-bug)
44
45
 
45
46
  ## Development
46
47
 
48
+ Every task runs from the repository root.
49
+
47
50
  ```sh
48
51
  pnpm install
49
- pnpm test
50
- pnpm check
51
- pnpm docs:check
52
+ pnpm dev # playground at localhost:5173
53
+ pnpm docs:dev # documentation site
54
+ pnpm test # the full suite
55
+ pnpm check # typecheck, lint, format, knip, generated docs, tests
56
+ pnpm docs:check # links, snippets, redirects, accessibility
52
57
  ```
53
58
 
54
- Read [AGENTS.md](./AGENTS.md) before changing transforms or analysis code.
59
+ [AGENTS.md](./AGENTS.md) lists the rest and explains which workspace owns what. Read it before changing transforms or analysis code.
55
60
 
56
61
  ## Responsible use
57
62
 
@@ -1 +1 @@
1
- {"version":3,"file":"inlineability.d.ts","sourceRoot":"","sources":["../../src/analysis/inlineability.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAW,MAAM,iBAAiB,CAAA;AACjE,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAKxC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAA;IAClB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,eAAe,EAAE,QAAQ,CAAA;CAC1B;AAGD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAuF5E"}
1
+ {"version":3,"file":"inlineability.d.ts","sourceRoot":"","sources":["../../src/analysis/inlineability.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAW,MAAM,iBAAiB,CAAA;AACjE,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAIxC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAA;IAClB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,eAAe,EAAE,QAAQ,CAAA;CAC1B;AAMD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAuE5E"}
@@ -1,8 +1,10 @@
1
1
  import traverse from '@babel/traverse';
2
2
  import * as t from '@babel/types';
3
- import { walkOwnFunctionScope } from '../utils/ast.js';
4
3
  import { hasAnnexBFunctionAlias, referencesOrWritesVariable } from '../utils/paths.js';
5
- // Tarjan SCC removal prevents endless expansion of mutually recursive bodies.
4
+ // Inlining splices a deep clone of the callee body, so any call that clone
5
+ // contains expands again. Expansion stops only when the graph below is acyclic,
6
+ // so this pass drops every candidate on a cycle before the inliner reaches a
7
+ // call site.
6
8
  export function analyzeInlineability(ast) {
7
9
  const rawCandidates = [];
8
10
  // Earlier passes can leave `binding.referencePaths` on detached nodes.
@@ -54,29 +56,41 @@ export function analyzeInlineability(ast) {
54
56
  for (const candidate of rawCandidates) {
55
57
  candidateByName.set(candidate.name, candidate);
56
58
  }
57
- // Self-reference is already excluded, leaving Tarjan to remove larger cycles.
59
+ const edges = buildExpansionGraph(candidateByName);
60
+ for (const scc of tarjanSCC([...candidateByName.keys()], edges)) {
61
+ // Tarjan reports an acyclic node as a singleton too, so a self-recursive
62
+ // candidate shows up only as an edge back to itself.
63
+ if (scc.length === 1 && !edges.get(scc[0]).has(scc[0])) {
64
+ continue;
65
+ }
66
+ for (const name of scc) {
67
+ candidateByName.delete(name);
68
+ }
69
+ }
70
+ return candidateByName;
71
+ }
72
+ // A clone keeps the whole body, so a reference inside a closure, an object
73
+ // method, or a getter is as live in the copy as one at the top level. Walking
74
+ // out to every enclosing candidate, rather than stopping at the innermost, also
75
+ // covers a candidate declared inside another candidate's body.
76
+ function buildExpansionGraph(candidateByName) {
77
+ const nameByFnNode = new Map();
58
78
  const edges = new Map();
59
- for (const candidate of rawCandidates) {
60
- const callees = new Set();
61
- walkOwnFunctionScope(candidate.fnNode.body, (node) => {
62
- if (t.isIdentifier(node) && node.name !== candidate.name && candidateByName.has(node.name)) {
63
- callees.add(node.name);
64
- }
65
- });
66
- edges.set(candidate.name, callees);
79
+ for (const [name, candidate] of candidateByName) {
80
+ nameByFnNode.set(candidate.fnNode, name);
81
+ edges.set(name, new Set());
67
82
  }
68
- const inCycle = new Set();
69
- for (const scc of tarjanSCC(rawCandidates.map((candidate) => candidate.name), edges)) {
70
- if (scc.length > 1) {
71
- for (const name of scc) {
72
- inCycle.add(name);
83
+ for (const [name, candidate] of candidateByName) {
84
+ for (const ref of candidate.binding.referencePaths) {
85
+ for (let owner = ref.parentPath; owner; owner = owner.parentPath) {
86
+ const ownerName = owner.isFunction() ? nameByFnNode.get(owner.node) : undefined;
87
+ if (ownerName !== undefined) {
88
+ edges.get(ownerName).add(name);
89
+ }
73
90
  }
74
91
  }
75
92
  }
76
- for (const name of inCycle) {
77
- candidateByName.delete(name);
78
- }
79
- return candidateByName;
93
+ return edges;
80
94
  }
81
95
  function checkCandidate(name, binding, fnNode, fnPath, declarationPath) {
82
96
  if (fnNode.generator || fnNode.async) {
@@ -105,7 +119,7 @@ function checkCandidate(name, binding, fnNode, fnPath, declarationPath) {
105
119
  if (params.some((param) => param === null)) {
106
120
  return null;
107
121
  }
108
- const analysis = analyzeBody(name, fnPath);
122
+ const analysis = analyzeBody(fnPath);
109
123
  if (analysis.unsafe || analysis.closureCapture) {
110
124
  return null;
111
125
  }
@@ -152,9 +166,8 @@ function validateCallSites(binding) {
152
166
  }
153
167
  return true;
154
168
  }
155
- function analyzeBody(name, fnPath) {
169
+ function analyzeBody(fnPath) {
156
170
  const state = {
157
- candidateName: name,
158
171
  outerScope: fnPath.scope,
159
172
  innerFnDepth: 0,
160
173
  unsafe: false,
@@ -208,8 +221,7 @@ const analyzeBodyVisitor = {
208
221
  },
209
222
  Identifier(path, state) {
210
223
  const name = path.node.name;
211
- if (state.innerFnDepth === 0 &&
212
- (name === 'arguments' || name === 'eval' || name === state.candidateName)) {
224
+ if (state.innerFnDepth === 0 && (name === 'arguments' || name === 'eval')) {
213
225
  state.unsafe = true;
214
226
  path.stop();
215
227
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"inlineability.js","sourceRoot":"","sources":["../../src/analysis/inlineability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inlineability.js","sourceRoot":"","sources":["../../src/analysis/inlineability.ts"],"names":[],"mappings":"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"}
package/dist/options.d.ts CHANGED
@@ -47,6 +47,13 @@ export interface PackOptions {
47
47
  * source is strict. This deliberately changes behavior. Default `false`.
48
48
  */
49
49
  escapeStrict?: boolean;
50
+ /**
51
+ * Free names to leave un-routed because they resolve to the real global from
52
+ * inside a detached Function body. `true` uses the built-in standard-globals
53
+ * list; an array names your own set. Stripped imports always route regardless,
54
+ * since a Function body cannot reach them. Default routes every free name.
55
+ */
56
+ skipGlobals?: boolean | readonly string[];
50
57
  /** Override the default string-generator mode for the names pack creates. */
51
58
  stringGeneratorMode?: StringGeneratorModeOption;
52
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../../src/transforms/pack.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAExC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAMlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAY9D"}
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../../src/transforms/pack.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAExC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAuGlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAY9D"}
@@ -5,6 +5,102 @@ import { isInsideWith } from '../utils/ast.js';
5
5
  import { isCalleeOrTagOf, isInStrictContext, referencesOrWritesVariable } from '../utils/paths.js';
6
6
  import { mulberry32 } from '../utils/random.js';
7
7
  import { StringGenerator } from '../utils/string-generator.js';
8
+ // The ECMAScript intrinsics and the common host globals. A detached Function
9
+ // body reaches every one of them and gets the same value, so pack can leave them
10
+ // bare. The CommonJS wrapper names (require, module, exports, __dirname,
11
+ // __filename) are left out on purpose. They are function parameters, not
12
+ // properties of the global object, so a Function body cannot see them and pack
13
+ // routes them like any other free name. `skipGlobals: true` opts into this list.
14
+ const STANDARD_GLOBALS = [
15
+ 'globalThis',
16
+ 'self',
17
+ 'Infinity',
18
+ 'NaN',
19
+ 'undefined',
20
+ 'parseInt',
21
+ 'parseFloat',
22
+ 'isNaN',
23
+ 'isFinite',
24
+ 'decodeURI',
25
+ 'decodeURIComponent',
26
+ 'encodeURI',
27
+ 'encodeURIComponent',
28
+ 'escape',
29
+ 'unescape',
30
+ 'btoa',
31
+ 'atob',
32
+ 'structuredClone',
33
+ 'fetch',
34
+ 'queueMicrotask',
35
+ 'setTimeout',
36
+ 'clearTimeout',
37
+ 'setInterval',
38
+ 'clearInterval',
39
+ 'setImmediate',
40
+ 'clearImmediate',
41
+ 'Object',
42
+ 'Function',
43
+ 'Boolean',
44
+ 'Symbol',
45
+ 'BigInt',
46
+ 'Number',
47
+ 'Math',
48
+ 'Date',
49
+ 'String',
50
+ 'RegExp',
51
+ 'JSON',
52
+ 'Promise',
53
+ 'Proxy',
54
+ 'Reflect',
55
+ 'Error',
56
+ 'EvalError',
57
+ 'RangeError',
58
+ 'ReferenceError',
59
+ 'SyntaxError',
60
+ 'TypeError',
61
+ 'URIError',
62
+ 'AggregateError',
63
+ 'Array',
64
+ 'Map',
65
+ 'Set',
66
+ 'WeakMap',
67
+ 'WeakSet',
68
+ 'WeakRef',
69
+ 'FinalizationRegistry',
70
+ 'ArrayBuffer',
71
+ 'SharedArrayBuffer',
72
+ 'DataView',
73
+ 'Atomics',
74
+ 'Int8Array',
75
+ 'Uint8Array',
76
+ 'Uint8ClampedArray',
77
+ 'Int16Array',
78
+ 'Uint16Array',
79
+ 'Int32Array',
80
+ 'Uint32Array',
81
+ 'Float32Array',
82
+ 'Float64Array',
83
+ 'BigInt64Array',
84
+ 'BigUint64Array',
85
+ 'console',
86
+ 'crypto',
87
+ 'performance',
88
+ 'Intl',
89
+ 'URL',
90
+ 'URLSearchParams',
91
+ 'TextEncoder',
92
+ 'TextDecoder',
93
+ 'WebAssembly',
94
+ 'window',
95
+ 'document',
96
+ 'location',
97
+ 'postMessage',
98
+ 'alert',
99
+ 'confirm',
100
+ 'global',
101
+ 'process',
102
+ 'Buffer',
103
+ ];
8
104
  /**
9
105
  * Serializes the whole program to a string and rebuilds it at runtime through
10
106
  * the `Function` constructor. A detached function body only reaches true globals
@@ -82,19 +178,41 @@ function packProgram(programPath, ctx) {
82
178
  const readProperties = new Map();
83
179
  const typeofProperties = new Map();
84
180
  const settable = new Set();
181
+ const freshProperty = () => {
182
+ let property;
183
+ do {
184
+ // `__proto__` as an object-literal key would set the prototype rather
185
+ // than name an accessor.
186
+ property = generator.next();
187
+ } while (property === '__proto__');
188
+ return property;
189
+ };
85
190
  const propertyFor = (registry, name) => {
86
191
  let property = registry.get(name);
87
192
  if (property === undefined) {
88
- do {
89
- // `__proto__` as an object-literal key would set the prototype rather
90
- // than name an accessor.
91
- property = generator.next();
92
- } while (property === '__proto__');
193
+ property = freshProperty();
93
194
  registry.set(name, property);
94
195
  }
95
196
  return property;
96
197
  };
97
198
  const memberFor = (property) => t.memberExpression(t.identifier(objectName), t.stringLiteral(property), true);
199
+ // Import locals read as free once detached but are unreachable from a Function
200
+ // body, so they route even when the caller lists them in skipGlobals.
201
+ const importedNames = new Set();
202
+ for (const declaration of importDeclarations) {
203
+ for (const specifier of declaration.specifiers) {
204
+ importedNames.add(specifier.local.name);
205
+ }
206
+ }
207
+ const skipOption = ctx.pack?.skipGlobals ?? false;
208
+ let skipNames = [];
209
+ if (skipOption === true) {
210
+ skipNames = STANDARD_GLOBALS;
211
+ }
212
+ else if (skipOption !== false) {
213
+ skipNames = skipOption;
214
+ }
215
+ const skip = new Set(skipNames);
98
216
  const isRoutable = (path) => {
99
217
  const name = path.node.name;
100
218
  // The wrapper parameter stays as written. `arguments` and `eval` are never
@@ -111,9 +229,26 @@ function packProgram(programPath, ctx) {
111
229
  if (!referencesOrWritesVariable(path)) {
112
230
  return false;
113
231
  }
114
- return !path.scope.getBinding(name);
232
+ if (path.scope.getBinding(name)) {
233
+ return false;
234
+ }
235
+ return importedNames.has(name) || !skip.has(name);
115
236
  };
237
+ // A strict script's top-level `this` is the global object, but a strict
238
+ // Function called plainly sees `undefined`. Rather than reach for `.call`,
239
+ // route top-level `this` through a captured property like any free name.
240
+ const routeTopLevelThis = bodyStrict && !wasModule;
241
+ let thisProperty = null;
116
242
  const routingVisitor = {
243
+ ThisExpression(path) {
244
+ if (!routeTopLevelThis || !isTopLevelThis(path)) {
245
+ return;
246
+ }
247
+ if (thisProperty === null) {
248
+ thisProperty = freshProperty();
249
+ }
250
+ path.replaceWith(memberFor(thisProperty));
251
+ },
117
252
  UnaryExpression(path) {
118
253
  if (path.node.operator !== 'typeof') {
119
254
  return;
@@ -161,6 +296,7 @@ function packProgram(programPath, ctx) {
161
296
  settable,
162
297
  setterParam,
163
298
  strict: bodyStrict,
299
+ thisProperty,
164
300
  });
165
301
  const constructorReference = shadowedConstructor
166
302
  ? t.memberExpression(t.functionExpression(null, [], t.blockStatement([])), t.identifier('constructor'))
@@ -169,15 +305,7 @@ function packProgram(programPath, ctx) {
169
305
  t.stringLiteral(objectName),
170
306
  t.stringLiteral(innerCode),
171
307
  ]);
172
- // A strict script keeps top-level `this` bound to the global object. A plainly
173
- // called strict function would instead see `undefined`, so pass the global
174
- // `this` of the sloppy output script.
175
- const invocation = bodyStrict && !wasModule
176
- ? t.callExpression(t.memberExpression(wrapper, t.identifier('call')), [
177
- t.thisExpression(),
178
- objectExpression,
179
- ])
180
- : t.callExpression(wrapper, [objectExpression]);
308
+ const invocation = t.callExpression(wrapper, [objectExpression]);
181
309
  programNode.body = [...importDeclarations, t.expressionStatement(invocation)];
182
310
  programNode.directives = [];
183
311
  programNode.sourceType = importDeclarations.length > 0 ? 'module' : 'script';
@@ -201,6 +329,41 @@ function collectImportDeclarations(programPath) {
201
329
  function bindsFunctionConstructor(declaration) {
202
330
  return declaration.specifiers.some((specifier) => specifier.local.name === 'Function');
203
331
  }
332
+ // A `this` refers to the top-level `this` when no enclosing non-arrow function,
333
+ // class field, or static block captures it before the program does. A computed
334
+ // member key is the exception: it evaluates in the scope surrounding its method
335
+ // or field, not that member's `this`, so a `this` reached through a boundary's
336
+ // `key` skips it and keeps looking outward. `thisBinding` keeps every path
337
+ // predicate off the walked `current`, whose narrowed union would otherwise trip
338
+ // NodePath's invariant generic when reassigned to `child`.
339
+ function isTopLevelThis(path) {
340
+ let child = path;
341
+ let current = path.parentPath;
342
+ while (current) {
343
+ const binding = thisBinding(current);
344
+ if (binding === 'program') {
345
+ return true;
346
+ }
347
+ if (binding === 'captured' && child.key !== 'key') {
348
+ return false;
349
+ }
350
+ child = current;
351
+ current = current.parentPath;
352
+ }
353
+ return false;
354
+ }
355
+ function thisBinding(boundary) {
356
+ if (boundary.isProgram()) {
357
+ return 'program';
358
+ }
359
+ if ((boundary.isFunction() && !boundary.isArrowFunctionExpression()) ||
360
+ boundary.isClassProperty() ||
361
+ boundary.isClassPrivateProperty() ||
362
+ boundary.isStaticBlock()) {
363
+ return 'captured';
364
+ }
365
+ return null;
366
+ }
204
367
  function isBareDeleteArgument(path) {
205
368
  const parent = path.parentPath;
206
369
  return (parent != null &&
@@ -260,6 +423,12 @@ function buildAccessorObject(spec) {
260
423
  for (const [name, property] of spec.typeofProperties) {
261
424
  properties.push(t.objectMethod('get', t.stringLiteral(property), [], t.blockStatement([t.returnStatement(t.unaryExpression('typeof', t.identifier(name)))])));
262
425
  }
426
+ // This is a data property. Its `this` value evaluates in the output script's
427
+ // top-level scope, where `this` is the global object. A getter would bind
428
+ // `this` to the accessor object instead.
429
+ if (spec.thisProperty !== null) {
430
+ properties.push(t.objectProperty(t.stringLiteral(spec.thisProperty), t.thisExpression()));
431
+ }
263
432
  return t.objectExpression(properties);
264
433
  }
265
434
  //# sourceMappingURL=pack.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/transforms/pack.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,kBAAkB,CAAA;AACvC,OAAO,QAAQ,MAAM,iBAAiB,CAAA;AAEtC,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAIjC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,IAAI,CAAC,GAAS,EAAE,GAAqB;IACnD,IAAI,WAAW,GAA+B,IAAI,CAAA;IAClD,QAAQ,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,IAAI;YACV,WAAW,GAAG,IAAI,CAAA;YAClB,IAAI,CAAC,IAAI,EAAE,CAAA;QACb,CAAC;KACF,CAAC,CAAA;IACF,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,WAAW,CAAC,WAAgC,EAAE,GAAqB;IAC1E,eAAe,CAAC,WAAW,CAAC,CAAA;IAC5B,MAAM,WAAW,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAA;IAC1D,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/D,8EAA8E;IAC9E,wEAAwE;IACxE,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAClE,wBAAwB,CAAC,WAAW,CAAC,CACtC,CAAA;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAA;IACpC,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,KAAK,QAAQ,CAAA;IACrD,2EAA2E;IAC3E,oDAAoD;IACpD,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI,KAAK,CAAA;IACpD,MAAM,UAAU,GAAG,CAAC,YAAY,IAAI,iBAAiB,CAAC,WAAW,CAAC,CAAA;IAElE,8EAA8E;IAC9E,0EAA0E;IAC1E,8CAA8C;IAC9C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAA;IACf,CAAC;IACD,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAEzB,MAAM,SAAS,GAAG,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;IACnE,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,mBAAmB,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;IACpF,MAAM,eAAe,GAAG,GAAW,EAAE;QACnC,IAAI,IAAY,CAAA;QAChB,GAAG,CAAC;YACF,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;QACzB,CAAC,QAAQ,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAC;QAC7B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,MAAM,UAAU,GAAG,eAAe,EAAE,CAAA;IACpC,MAAM,WAAW,GAAG,eAAe,EAAE,CAAA;IAErC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAA;IAChD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAA;IAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;IAClC,MAAM,WAAW,GAAG,CAAC,QAA6B,EAAE,IAAY,EAAU,EAAE;QAC1E,IAAI,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,GAAG,CAAC;gBACF,sEAAsE;gBACtE,yBAAyB;gBACzB,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;YAC7B,CAAC,QAAQ,QAAQ,KAAK,WAAW,EAAC;YAClC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC,CAAA;IACD,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAsB,EAAE,CACzD,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAA;IAE/E,MAAM,UAAU,GAAG,CAAC,IAA4B,EAAW,EAAE;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;QAC3B,2EAA2E;QAC3E,6EAA6E;QAC7E,8EAA8E;QAC9E,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACnE,OAAO,KAAK,CAAA;QACd,CAAC;QACD,6EAA6E;QAC7E,0EAA0E;QAC1E,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC,CAAA;IAED,MAAM,cAAc,GAAY;QAC9B,eAAe,CAAC,IAAI;YAClB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACpC,OAAM;YACR,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YACrC,2EAA2E;YAC3E,8DAA8D;YAC9D,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtD,OAAM;YACR,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAChF,CAAC;QACD,UAAU,CAAC,IAAI;YACb,yEAAyE;YACzE,uEAAuE;YACvE,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpD,OAAM;YACR,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;YAC3B,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACpB,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAA;YAC3D,0EAA0E;YAC1E,wCAAwC;YACxC,IAAI,CAAC,WAAW,CACd,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CACrF,CAAA;QACH,CAAC;KACF,CAAA;IACD,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;IAEpC,6EAA6E;IAC7E,wDAAwD;IACxD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;IAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,IAAI,aAAa,IAAI,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACzF,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE;QACrE,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC,IAAI,CAAA;IAEP,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;QAC3C,cAAc;QACd,gBAAgB;QAChB,QAAQ;QACR,WAAW;QACX,MAAM,EAAE,UAAU;KACnB,CAAC,CAAA;IAEF,MAAM,oBAAoB,GAAG,mBAAmB;QAC9C,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAChB,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,EACpD,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAC5B;QACH,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;IAC5B,MAAM,OAAO,GAAG,CAAC,CAAC,cAAc,CAAC,oBAAoB,EAAE;QACrD,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC;QAC3B,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC;KAC3B,CAAC,CAAA;IACF,+EAA+E;IAC/E,2EAA2E;IAC3E,sCAAsC;IACtC,MAAM,UAAU,GACd,UAAU,IAAI,CAAC,SAAS;QACtB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;YAClE,CAAC,CAAC,cAAc,EAAE;YAClB,gBAAgB;SACjB,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAEnD,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,kBAAkB,EAAE,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAA;IAC7E,WAAW,CAAC,UAAU,GAAG,EAAE,CAAA;IAC3B,WAAW,CAAC,UAAU,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;IAC5E,OAAO,IAAI,CAAA;AACb,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,SAAS,eAAe,CAAC,WAAgC;IACvD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAC1C,CAAC,SAAS,EAAE,EAAE,CACZ,CAAC,CAAC,wBAAwB,CAAC,SAAS,CAAC;QACrC,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC;QACvC,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,CACtC,CAAA;IACD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAA;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,WAAgC;IAEhC,OAAO,WAAW;SACf,GAAG,CAAC,MAAM,CAAC;SACX,MAAM,CAAC,CAAC,SAAS,EAA8C,EAAE,CAChE,SAAS,CAAC,mBAAmB,EAAE,CAChC,CAAA;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,WAAgC;IAChE,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;AACxF,CAAC;AAED,SAAS,oBAAoB,CAAC,IAA4B;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAA;IAC9B,OAAO,CACL,MAAM,IAAI,IAAI;QACd,MAAM,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CACnC,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA4B;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAA;IAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IACtB,IAAI,MAAM,CAAC,sBAAsB,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACjE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,MAAM,CAAC,kBAAkB,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QACjE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC1F,OAAO,IAAI,CAAA;IACb,CAAC;IACD,2EAA2E;IAC3E,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAA;AACnC,CAAC;AAED,SAAS,gBAAgB,CACvB,OAAkB,EAClB,kBAAyC;IAEzC,4EAA4E;IAC5E,wDAAwD;IACxD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,UAAU,CAAC,CAAC,CAAA;IAC3C,KAAK,MAAM,WAAW,IAAI,kBAAkB,EAAE,CAAC;QAC7C,KAAK,MAAM,SAAS,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YAC/C,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IACD,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,KAAK,CAAA;AACd,CAAC;AAUD,SAAS,mBAAmB,CAAC,IAAwB;IACnD,MAAM,UAAU,GAAqB,EAAE,CAAA;IACvC,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACnD,UAAU,CAAC,IAAI,CACb,CAAC,CAAC,YAAY,CACZ,KAAK,EACL,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EACzB,EAAE,EACF,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAC1D,CACF,CAAA;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,CAAC,CAAC,cAAc,CAAC;gBAClC,CAAC,CAAC,mBAAmB,CACnB,CAAC,CAAC,oBAAoB,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAChF;aACF,CAAC,CAAA;YACF,sEAAsE;YACtE,sDAAsD;YACtD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;YAC3E,CAAC;YACD,UAAU,CAAC,IAAI,CACb,CAAC,CAAC,YAAY,CACZ,KAAK,EACL,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EACzB,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAChC,UAAU,CACX,CACF,CAAA;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACrD,UAAU,CAAC,IAAI,CACb,CAAC,CAAC,YAAY,CACZ,KAAK,EACL,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EACzB,EAAE,EACF,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACvF,CACF,CAAA;IACH,CAAC;IACD,OAAO,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;AACvC,CAAC"}
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/transforms/pack.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webfuscator",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "JavaScript obfuscator built on Babel",
5
5
  "keywords": [
6
6
  "babel",
@@ -35,7 +35,8 @@
35
35
  "source": "./src/index.ts",
36
36
  "types": "./dist/index.d.ts",
37
37
  "default": "./dist/index.js"
38
- }
38
+ },
39
+ "./package.json": "./package.json"
39
40
  },
40
41
  "publishConfig": {
41
42
  "access": "public"
@@ -44,8 +45,8 @@
44
45
  "prepublishOnly": "pnpm --workspace-root check",
45
46
  "prepack": "pnpm run build",
46
47
  "build": "node --eval \"require('node:fs').rmSync('dist', { force: true, recursive: true })\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && node scripts/verify-dist.mjs",
47
- "check": "pnpm run typecheck && pnpm run test",
48
48
  "test": "vitest run",
49
+ "test:watch": "vitest",
49
50
  "typecheck": "tsc --noEmit"
50
51
  },
51
52
  "dependencies": {
@@ -3,7 +3,6 @@ import type { Binding, NodePath, Visitor } from '@babel/traverse'
3
3
  import * as t from '@babel/types'
4
4
  import type { File } from '@babel/types'
5
5
 
6
- import { walkOwnFunctionScope } from '../utils/ast'
7
6
  import { hasAnnexBFunctionAlias, referencesOrWritesVariable } from '../utils/paths'
8
7
 
9
8
  export interface InlineCandidate {
@@ -15,7 +14,10 @@ export interface InlineCandidate {
15
14
  declarationPath: NodePath
16
15
  }
17
16
 
18
- // Tarjan SCC removal prevents endless expansion of mutually recursive bodies.
17
+ // Inlining splices a deep clone of the callee body, so any call that clone
18
+ // contains expands again. Expansion stops only when the graph below is acyclic,
19
+ // so this pass drops every candidate on a cycle before the inliner reaches a
20
+ // call site.
19
21
  export function analyzeInlineability(ast: File): Map<string, InlineCandidate> {
20
22
  const rawCandidates: InlineCandidate[] = []
21
23
 
@@ -75,34 +77,45 @@ export function analyzeInlineability(ast: File): Map<string, InlineCandidate> {
75
77
  candidateByName.set(candidate.name, candidate)
76
78
  }
77
79
 
78
- // Self-reference is already excluded, leaving Tarjan to remove larger cycles.
80
+ const edges = buildExpansionGraph(candidateByName)
81
+ for (const scc of tarjanSCC([...candidateByName.keys()], edges)) {
82
+ // Tarjan reports an acyclic node as a singleton too, so a self-recursive
83
+ // candidate shows up only as an edge back to itself.
84
+ if (scc.length === 1 && !edges.get(scc[0]!)!.has(scc[0]!)) {
85
+ continue
86
+ }
87
+ for (const name of scc) {
88
+ candidateByName.delete(name)
89
+ }
90
+ }
91
+ return candidateByName
92
+ }
93
+
94
+ // A clone keeps the whole body, so a reference inside a closure, an object
95
+ // method, or a getter is as live in the copy as one at the top level. Walking
96
+ // out to every enclosing candidate, rather than stopping at the innermost, also
97
+ // covers a candidate declared inside another candidate's body.
98
+ function buildExpansionGraph(
99
+ candidateByName: Map<string, InlineCandidate>,
100
+ ): Map<string, Set<string>> {
101
+ const nameByFnNode = new Map<t.Function, string>()
79
102
  const edges = new Map<string, Set<string>>()
80
- for (const candidate of rawCandidates) {
81
- const callees = new Set<string>()
82
- walkOwnFunctionScope(candidate.fnNode.body, (node) => {
83
- if (t.isIdentifier(node) && node.name !== candidate.name && candidateByName.has(node.name)) {
84
- callees.add(node.name)
85
- }
86
- })
87
- edges.set(candidate.name, callees)
103
+ for (const [name, candidate] of candidateByName) {
104
+ nameByFnNode.set(candidate.fnNode, name)
105
+ edges.set(name, new Set())
88
106
  }
89
107
 
90
- const inCycle = new Set<string>()
91
- for (const scc of tarjanSCC(
92
- rawCandidates.map((candidate) => candidate.name),
93
- edges,
94
- )) {
95
- if (scc.length > 1) {
96
- for (const name of scc) {
97
- inCycle.add(name)
108
+ for (const [name, candidate] of candidateByName) {
109
+ for (const ref of candidate.binding.referencePaths) {
110
+ for (let owner = ref.parentPath; owner; owner = owner.parentPath) {
111
+ const ownerName = owner.isFunction() ? nameByFnNode.get(owner.node) : undefined
112
+ if (ownerName !== undefined) {
113
+ edges.get(ownerName)!.add(name)
114
+ }
98
115
  }
99
116
  }
100
117
  }
101
-
102
- for (const name of inCycle) {
103
- candidateByName.delete(name)
104
- }
105
- return candidateByName
118
+ return edges
106
119
  }
107
120
 
108
121
  function checkCandidate(
@@ -142,7 +155,7 @@ function checkCandidate(
142
155
  return null
143
156
  }
144
157
 
145
- const analysis = analyzeBody(name, fnPath as NodePath<t.Function>)
158
+ const analysis = analyzeBody(fnPath as NodePath<t.Function>)
146
159
  if (analysis.unsafe || analysis.closureCapture) {
147
160
  return null
148
161
  }
@@ -200,9 +213,8 @@ interface BodyAnalysis {
200
213
  closureCapture: boolean
201
214
  }
202
215
 
203
- function analyzeBody(name: string, fnPath: NodePath<t.Function>): BodyAnalysis {
216
+ function analyzeBody(fnPath: NodePath<t.Function>): BodyAnalysis {
204
217
  const state: AnalyzeBodyState = {
205
- candidateName: name,
206
218
  outerScope: fnPath.scope,
207
219
  innerFnDepth: 0,
208
220
  unsafe: false,
@@ -216,7 +228,6 @@ function analyzeBody(name: string, fnPath: NodePath<t.Function>): BodyAnalysis {
216
228
  }
217
229
 
218
230
  interface AnalyzeBodyState {
219
- candidateName: string
220
231
  outerScope: NodePath<t.Function>['scope']
221
232
  innerFnDepth: number
222
233
  unsafe: boolean
@@ -268,10 +279,7 @@ const analyzeBodyVisitor: Visitor<AnalyzeBodyState> = {
268
279
  },
269
280
  Identifier(path, state) {
270
281
  const name = path.node.name
271
- if (
272
- state.innerFnDepth === 0 &&
273
- (name === 'arguments' || name === 'eval' || name === state.candidateName)
274
- ) {
282
+ if (state.innerFnDepth === 0 && (name === 'arguments' || name === 'eval')) {
275
283
  state.unsafe = true
276
284
  path.stop()
277
285
  return
package/src/options.ts CHANGED
@@ -84,6 +84,13 @@ export interface PackOptions {
84
84
  * source is strict. This deliberately changes behavior. Default `false`.
85
85
  */
86
86
  escapeStrict?: boolean
87
+ /**
88
+ * Free names to leave un-routed because they resolve to the real global from
89
+ * inside a detached Function body. `true` uses the built-in standard-globals
90
+ * list; an array names your own set. Stripped imports always route regardless,
91
+ * since a Function body cannot reach them. Default routes every free name.
92
+ */
93
+ skipGlobals?: boolean | readonly string[]
87
94
  /** Override the default string-generator mode for the names pack creates. */
88
95
  stringGeneratorMode?: StringGeneratorModeOption
89
96
  }
@@ -10,6 +10,103 @@ import { isCalleeOrTagOf, isInStrictContext, referencesOrWritesVariable } from '
10
10
  import { mulberry32 } from '../utils/random'
11
11
  import { StringGenerator } from '../utils/string-generator'
12
12
 
13
+ // The ECMAScript intrinsics and the common host globals. A detached Function
14
+ // body reaches every one of them and gets the same value, so pack can leave them
15
+ // bare. The CommonJS wrapper names (require, module, exports, __dirname,
16
+ // __filename) are left out on purpose. They are function parameters, not
17
+ // properties of the global object, so a Function body cannot see them and pack
18
+ // routes them like any other free name. `skipGlobals: true` opts into this list.
19
+ const STANDARD_GLOBALS: readonly string[] = [
20
+ 'globalThis',
21
+ 'self',
22
+ 'Infinity',
23
+ 'NaN',
24
+ 'undefined',
25
+ 'parseInt',
26
+ 'parseFloat',
27
+ 'isNaN',
28
+ 'isFinite',
29
+ 'decodeURI',
30
+ 'decodeURIComponent',
31
+ 'encodeURI',
32
+ 'encodeURIComponent',
33
+ 'escape',
34
+ 'unescape',
35
+ 'btoa',
36
+ 'atob',
37
+ 'structuredClone',
38
+ 'fetch',
39
+ 'queueMicrotask',
40
+ 'setTimeout',
41
+ 'clearTimeout',
42
+ 'setInterval',
43
+ 'clearInterval',
44
+ 'setImmediate',
45
+ 'clearImmediate',
46
+ 'Object',
47
+ 'Function',
48
+ 'Boolean',
49
+ 'Symbol',
50
+ 'BigInt',
51
+ 'Number',
52
+ 'Math',
53
+ 'Date',
54
+ 'String',
55
+ 'RegExp',
56
+ 'JSON',
57
+ 'Promise',
58
+ 'Proxy',
59
+ 'Reflect',
60
+ 'Error',
61
+ 'EvalError',
62
+ 'RangeError',
63
+ 'ReferenceError',
64
+ 'SyntaxError',
65
+ 'TypeError',
66
+ 'URIError',
67
+ 'AggregateError',
68
+ 'Array',
69
+ 'Map',
70
+ 'Set',
71
+ 'WeakMap',
72
+ 'WeakSet',
73
+ 'WeakRef',
74
+ 'FinalizationRegistry',
75
+ 'ArrayBuffer',
76
+ 'SharedArrayBuffer',
77
+ 'DataView',
78
+ 'Atomics',
79
+ 'Int8Array',
80
+ 'Uint8Array',
81
+ 'Uint8ClampedArray',
82
+ 'Int16Array',
83
+ 'Uint16Array',
84
+ 'Int32Array',
85
+ 'Uint32Array',
86
+ 'Float32Array',
87
+ 'Float64Array',
88
+ 'BigInt64Array',
89
+ 'BigUint64Array',
90
+ 'console',
91
+ 'crypto',
92
+ 'performance',
93
+ 'Intl',
94
+ 'URL',
95
+ 'URLSearchParams',
96
+ 'TextEncoder',
97
+ 'TextDecoder',
98
+ 'WebAssembly',
99
+ 'window',
100
+ 'document',
101
+ 'location',
102
+ 'postMessage',
103
+ 'alert',
104
+ 'confirm',
105
+ 'global',
106
+ 'process',
107
+ 'Buffer',
108
+ ]
109
+
13
110
  /**
14
111
  * Serializes the whole program to a string and rebuilds it at runtime through
15
112
  * the `Function` constructor. A detached function body only reaches true globals
@@ -94,14 +191,19 @@ function packProgram(programPath: NodePath<t.Program>, ctx: TransformContext): b
94
191
  const readProperties = new Map<string, string>()
95
192
  const typeofProperties = new Map<string, string>()
96
193
  const settable = new Set<string>()
194
+ const freshProperty = (): string => {
195
+ let property: string
196
+ do {
197
+ // `__proto__` as an object-literal key would set the prototype rather
198
+ // than name an accessor.
199
+ property = generator.next()
200
+ } while (property === '__proto__')
201
+ return property
202
+ }
97
203
  const propertyFor = (registry: Map<string, string>, name: string): string => {
98
204
  let property = registry.get(name)
99
205
  if (property === undefined) {
100
- do {
101
- // `__proto__` as an object-literal key would set the prototype rather
102
- // than name an accessor.
103
- property = generator.next()
104
- } while (property === '__proto__')
206
+ property = freshProperty()
105
207
  registry.set(name, property)
106
208
  }
107
209
  return property
@@ -109,6 +211,23 @@ function packProgram(programPath: NodePath<t.Program>, ctx: TransformContext): b
109
211
  const memberFor = (property: string): t.MemberExpression =>
110
212
  t.memberExpression(t.identifier(objectName), t.stringLiteral(property), true)
111
213
 
214
+ // Import locals read as free once detached but are unreachable from a Function
215
+ // body, so they route even when the caller lists them in skipGlobals.
216
+ const importedNames = new Set<string>()
217
+ for (const declaration of importDeclarations) {
218
+ for (const specifier of declaration.specifiers) {
219
+ importedNames.add(specifier.local.name)
220
+ }
221
+ }
222
+ const skipOption = ctx.pack?.skipGlobals ?? false
223
+ let skipNames: readonly string[] = []
224
+ if (skipOption === true) {
225
+ skipNames = STANDARD_GLOBALS
226
+ } else if (skipOption !== false) {
227
+ skipNames = skipOption
228
+ }
229
+ const skip = new Set<string>(skipNames)
230
+
112
231
  const isRoutable = (path: NodePath<t.Identifier>): boolean => {
113
232
  const name = path.node.name
114
233
  // The wrapper parameter stays as written. `arguments` and `eval` are never
@@ -125,10 +244,28 @@ function packProgram(programPath: NodePath<t.Program>, ctx: TransformContext): b
125
244
  if (!referencesOrWritesVariable(path)) {
126
245
  return false
127
246
  }
128
- return !path.scope.getBinding(name)
247
+ if (path.scope.getBinding(name)) {
248
+ return false
249
+ }
250
+ return importedNames.has(name) || !skip.has(name)
129
251
  }
130
252
 
253
+ // A strict script's top-level `this` is the global object, but a strict
254
+ // Function called plainly sees `undefined`. Rather than reach for `.call`,
255
+ // route top-level `this` through a captured property like any free name.
256
+ const routeTopLevelThis = bodyStrict && !wasModule
257
+ let thisProperty: string | null = null
258
+
131
259
  const routingVisitor: Visitor = {
260
+ ThisExpression(path) {
261
+ if (!routeTopLevelThis || !isTopLevelThis(path)) {
262
+ return
263
+ }
264
+ if (thisProperty === null) {
265
+ thisProperty = freshProperty()
266
+ }
267
+ path.replaceWith(memberFor(thisProperty))
268
+ },
132
269
  UnaryExpression(path) {
133
270
  if (path.node.operator !== 'typeof') {
134
271
  return
@@ -181,6 +318,7 @@ function packProgram(programPath: NodePath<t.Program>, ctx: TransformContext): b
181
318
  settable,
182
319
  setterParam,
183
320
  strict: bodyStrict,
321
+ thisProperty,
184
322
  })
185
323
 
186
324
  const constructorReference = shadowedConstructor
@@ -193,16 +331,7 @@ function packProgram(programPath: NodePath<t.Program>, ctx: TransformContext): b
193
331
  t.stringLiteral(objectName),
194
332
  t.stringLiteral(innerCode),
195
333
  ])
196
- // A strict script keeps top-level `this` bound to the global object. A plainly
197
- // called strict function would instead see `undefined`, so pass the global
198
- // `this` of the sloppy output script.
199
- const invocation =
200
- bodyStrict && !wasModule
201
- ? t.callExpression(t.memberExpression(wrapper, t.identifier('call')), [
202
- t.thisExpression(),
203
- objectExpression,
204
- ])
205
- : t.callExpression(wrapper, [objectExpression])
334
+ const invocation = t.callExpression(wrapper, [objectExpression])
206
335
 
207
336
  programNode.body = [...importDeclarations, t.expressionStatement(invocation)]
208
337
  programNode.directives = []
@@ -238,6 +367,45 @@ function bindsFunctionConstructor(declaration: t.ImportDeclaration): boolean {
238
367
  return declaration.specifiers.some((specifier) => specifier.local.name === 'Function')
239
368
  }
240
369
 
370
+ // A `this` refers to the top-level `this` when no enclosing non-arrow function,
371
+ // class field, or static block captures it before the program does. A computed
372
+ // member key is the exception: it evaluates in the scope surrounding its method
373
+ // or field, not that member's `this`, so a `this` reached through a boundary's
374
+ // `key` skips it and keeps looking outward. `thisBinding` keeps every path
375
+ // predicate off the walked `current`, whose narrowed union would otherwise trip
376
+ // NodePath's invariant generic when reassigned to `child`.
377
+ function isTopLevelThis(path: NodePath<t.ThisExpression>): boolean {
378
+ let child: NodePath = path
379
+ let current: NodePath | null = path.parentPath
380
+ while (current) {
381
+ const binding = thisBinding(current)
382
+ if (binding === 'program') {
383
+ return true
384
+ }
385
+ if (binding === 'captured' && child.key !== 'key') {
386
+ return false
387
+ }
388
+ child = current
389
+ current = current.parentPath
390
+ }
391
+ return false
392
+ }
393
+
394
+ function thisBinding(boundary: NodePath): 'captured' | 'program' | null {
395
+ if (boundary.isProgram()) {
396
+ return 'program'
397
+ }
398
+ if (
399
+ (boundary.isFunction() && !boundary.isArrowFunctionExpression()) ||
400
+ boundary.isClassProperty() ||
401
+ boundary.isClassPrivateProperty() ||
402
+ boundary.isStaticBlock()
403
+ ) {
404
+ return 'captured'
405
+ }
406
+ return null
407
+ }
408
+
241
409
  function isBareDeleteArgument(path: NodePath<t.Identifier>): boolean {
242
410
  const parent = path.parentPath
243
411
  return (
@@ -291,11 +459,12 @@ interface AccessorObjectSpec {
291
459
  setterParam: string
292
460
  settable: Set<string>
293
461
  strict: boolean
462
+ thisProperty: string | null
294
463
  typeofProperties: Map<string, string>
295
464
  }
296
465
 
297
466
  function buildAccessorObject(spec: AccessorObjectSpec): t.ObjectExpression {
298
- const properties: t.ObjectMethod[] = []
467
+ const properties: (t.ObjectMethod | t.ObjectProperty)[] = []
299
468
  for (const [name, property] of spec.readProperties) {
300
469
  properties.push(
301
470
  t.objectMethod(
@@ -336,5 +505,11 @@ function buildAccessorObject(spec: AccessorObjectSpec): t.ObjectExpression {
336
505
  ),
337
506
  )
338
507
  }
508
+ // This is a data property. Its `this` value evaluates in the output script's
509
+ // top-level scope, where `this` is the global object. A getter would bind
510
+ // `this` to the accessor object instead.
511
+ if (spec.thisProperty !== null) {
512
+ properties.push(t.objectProperty(t.stringLiteral(spec.thisProperty), t.thisExpression()))
513
+ }
339
514
  return t.objectExpression(properties)
340
515
  }