webfuscator 1.0.1 → 1.1.0
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 +0 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/obfuscator.d.ts.map +1 -1
- package/dist/obfuscator.js +14 -0
- package/dist/obfuscator.js.map +1 -1
- package/dist/options.d.ts +14 -2
- package/dist/options.d.ts.map +1 -1
- package/dist/transforms/optional-chaining-to-ternary.js +5 -2
- package/dist/transforms/optional-chaining-to-ternary.js.map +1 -1
- package/dist/transforms/pack.d.ts +33 -0
- package/dist/transforms/pack.d.ts.map +1 -0
- package/dist/transforms/pack.js +266 -0
- package/dist/transforms/pack.js.map +1 -0
- package/dist/utils/ast.d.ts.map +1 -1
- package/dist/utils/ast.js +5 -1
- package/dist/utils/ast.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +6 -1
- package/src/obfuscator.ts +16 -0
- package/src/options.ts +15 -1
- package/src/transforms/optional-chaining-to-ternary.ts +5 -2
- package/src/transforms/pack.ts +336 -0
- package/src/utils/ast.ts +7 -1
package/README.md
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# webfuscator
|
|
2
|
-
|
|
3
1
|
`webfuscator` is a Babel-based JavaScript obfuscator. It parses a JavaScript source string, applies configurable transforms, and returns JavaScript source.
|
|
4
2
|
|
|
5
3
|
[Read the documentation](https://webfuscator.mintlify.app/) for the quickstart, configuration guides, API details, and a reference page for every transform.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { obfuscate } from './obfuscator.js';
|
|
2
|
-
export type { ManglePropertiesOptions, ObfuscatorOptions, PropertyNameGenerator } from './options.js';
|
|
2
|
+
export type { ManglePropertiesOptions, ObfuscatorOptions, PackOptions, PropertyNameGenerator, } from './options.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,YAAY,EACV,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,qBAAqB,GACtB,MAAM,aAAa,CAAA"}
|
package/dist/obfuscator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obfuscator.d.ts","sourceRoot":"","sources":["../src/obfuscator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAmC,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"obfuscator.d.ts","sourceRoot":"","sources":["../src/obfuscator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAmC,MAAM,aAAa,CAAA;AA0IrF,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CA6D/E"}
|
package/dist/obfuscator.js
CHANGED
|
@@ -29,6 +29,7 @@ import { nullishCoalescingToTernary } from './transforms/nullish-coalescing-to-t
|
|
|
29
29
|
import { numbersToStrings } from './transforms/numbers-to-strings.js';
|
|
30
30
|
import { objectMethodToProperty } from './transforms/object-method-to-property.js';
|
|
31
31
|
import { optionalChainingToTernary } from './transforms/optional-chaining-to-ternary.js';
|
|
32
|
+
import { pack } from './transforms/pack.js';
|
|
32
33
|
import { packDeclarationsIntoParameters } from './transforms/pack-declarations-into-parameters.js';
|
|
33
34
|
import { removeAnonymousFunctionNames } from './transforms/remove-anonymous-function-names.js';
|
|
34
35
|
import { removeUnreachableCode } from './transforms/remove-unreachable-code.js';
|
|
@@ -114,6 +115,10 @@ const POST_PROCESS = [
|
|
|
114
115
|
];
|
|
115
116
|
// Renaming runs last because later transforms depend on recognizable bindings.
|
|
116
117
|
const RENAME = [['renameIdentifiers', renameIdentifiers]];
|
|
118
|
+
// Packing serializes the finished program to a string and rebuilds it through
|
|
119
|
+
// the Function constructor. It must see final names and shapes, so it runs after
|
|
120
|
+
// every other rewrite, including renaming.
|
|
121
|
+
const PACK = [['pack', pack]];
|
|
117
122
|
/** Parses, transforms, and prints JavaScript without mutating external state. */
|
|
118
123
|
export function obfuscate(code, options = {}) {
|
|
119
124
|
const log = options.verbose ? makeLogger() : null;
|
|
@@ -156,6 +161,12 @@ export function obfuscate(code, options = {}) {
|
|
|
156
161
|
}
|
|
157
162
|
run(log, name, () => fn(ast, ctxFor(name, options, baseCtx)));
|
|
158
163
|
}
|
|
164
|
+
for (const [name, fn] of PACK) {
|
|
165
|
+
if (!isEnabled(name, options)) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
run(log, name, () => fn(ast, ctxFor(name, options, baseCtx)));
|
|
169
|
+
}
|
|
159
170
|
return run(log, 'generate', () => generate(ast, { minified: options.minify ?? false, shouldPrintComment }).code);
|
|
160
171
|
}
|
|
161
172
|
function isEnabled(name, options) {
|
|
@@ -172,6 +183,9 @@ function ctxFor(name, options, base) {
|
|
|
172
183
|
if (name === 'mangleProperties' && entry && typeof entry === 'object') {
|
|
173
184
|
return { ...context, mangleProperties: entry };
|
|
174
185
|
}
|
|
186
|
+
if (name === 'pack' && entry && typeof entry === 'object') {
|
|
187
|
+
return { ...context, pack: entry };
|
|
188
|
+
}
|
|
175
189
|
return context;
|
|
176
190
|
}
|
|
177
191
|
function runFixedPoint(ast, options, ctx, log) {
|
package/dist/obfuscator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"obfuscator.js","sourceRoot":"","sources":["../src/obfuscator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"obfuscator.js","sourceRoot":"","sources":["../src/obfuscator.ts"],"names":[],"mappings":"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"}
|
package/dist/options.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { StringGeneratorModeOption } from './utils/string-generator.js';
|
|
|
3
3
|
* Exported transform entry points. Preparation passes are always enabled and
|
|
4
4
|
* do not appear here.
|
|
5
5
|
*/
|
|
6
|
-
export type TransformName = 'dropConsole' | 'dropDebugger' | 'constToLet' | 'constLetToVar' | 'argumentsToParameters' | 'objectMethodToProperty' | 'foldConstants' | 'foldBuiltinMethods' | 'extractObjectProperties' | 'inlineFunctions' | 'removeUnreachableCode' | 'removeUnusedCode' | 'removeAnonymousFunctionNames' | 'collapseSingleUseTemps' | 'arrowToFunction' | 'functionDeclarationToExpression' | 'switchToIf' | 'forToWhile' | 'doWhileToWhile' | 'updateToAssignment' | 'expandBinaryAssignment' | 'expandLogicalAssignment' | 'optionalChainingToTernary' | 'nullishCoalescingToTernary' | 'logicalToTernary' | 'ternaryToIf' | 'packDeclarationsIntoParameters' | 'yodifyConditions' | 'specialsToStrings' | 'numbersToStrings' | 'mangleProperties' | 'renameIdentifiers';
|
|
6
|
+
export type TransformName = 'dropConsole' | 'dropDebugger' | 'constToLet' | 'constLetToVar' | 'argumentsToParameters' | 'objectMethodToProperty' | 'foldConstants' | 'foldBuiltinMethods' | 'extractObjectProperties' | 'inlineFunctions' | 'removeUnreachableCode' | 'removeUnusedCode' | 'removeAnonymousFunctionNames' | 'collapseSingleUseTemps' | 'arrowToFunction' | 'functionDeclarationToExpression' | 'switchToIf' | 'forToWhile' | 'doWhileToWhile' | 'updateToAssignment' | 'expandBinaryAssignment' | 'expandLogicalAssignment' | 'optionalChainingToTernary' | 'nullishCoalescingToTernary' | 'logicalToTernary' | 'ternaryToIf' | 'packDeclarationsIntoParameters' | 'yodifyConditions' | 'specialsToStrings' | 'numbersToStrings' | 'mangleProperties' | 'renameIdentifiers' | 'pack';
|
|
7
7
|
type TransformEntry = boolean | {
|
|
8
8
|
stringGeneratorMode?: StringGeneratorModeOption;
|
|
9
9
|
};
|
|
@@ -40,9 +40,20 @@ export interface ManglePropertiesOptions {
|
|
|
40
40
|
/** Mangle accesses rooted at undeclared identifiers. Default `false`. */
|
|
41
41
|
undeclared?: boolean;
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
/** Options for the `Function`-constructor packing transform. */
|
|
44
|
+
export interface PackOptions {
|
|
45
|
+
/**
|
|
46
|
+
* Skip the strict-mode directive so the packed body runs sloppy even when the
|
|
47
|
+
* source is strict. This deliberately changes behavior. Default `false`.
|
|
48
|
+
*/
|
|
49
|
+
escapeStrict?: boolean;
|
|
50
|
+
/** Override the default string-generator mode for the names pack creates. */
|
|
51
|
+
stringGeneratorMode?: StringGeneratorModeOption;
|
|
52
|
+
}
|
|
53
|
+
type SimpleTransform = Exclude<TransformName, 'mangleProperties' | 'pack' | 'renameIdentifiers' | 'specialsToStrings'>;
|
|
44
54
|
type TransformsMap = Partial<Record<SimpleTransform, boolean>> & {
|
|
45
55
|
mangleProperties?: boolean | ManglePropertiesOptions;
|
|
56
|
+
pack?: boolean | PackOptions;
|
|
46
57
|
renameIdentifiers?: TransformEntry;
|
|
47
58
|
specialsToStrings?: TransformEntry;
|
|
48
59
|
};
|
|
@@ -67,6 +78,7 @@ export interface ObfuscatorOptions {
|
|
|
67
78
|
}
|
|
68
79
|
export interface TransformContext {
|
|
69
80
|
mangleProperties?: ManglePropertiesOptions;
|
|
81
|
+
pack?: PackOptions;
|
|
70
82
|
seed: number;
|
|
71
83
|
stringGeneratorMode: StringGeneratorModeOption;
|
|
72
84
|
}
|
package/dist/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAE3E;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,cAAc,GACd,YAAY,GACZ,eAAe,GACf,uBAAuB,GACvB,wBAAwB,GACxB,eAAe,GACf,oBAAoB,GACpB,yBAAyB,GACzB,iBAAiB,GACjB,uBAAuB,GACvB,kBAAkB,GAClB,8BAA8B,GAC9B,wBAAwB,GACxB,iBAAiB,GACjB,iCAAiC,GACjC,YAAY,GACZ,YAAY,GACZ,gBAAgB,GAChB,oBAAoB,GACpB,wBAAwB,GACxB,yBAAyB,GACzB,2BAA2B,GAC3B,4BAA4B,GAC5B,kBAAkB,GAClB,aAAa,GACb,gCAAgC,GAChC,kBAAkB,GAClB,mBAAmB,GACnB,kBAAkB,GAClB,kBAAkB,GAClB,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -155,7 +155,10 @@ function transformChain(path) {
|
|
|
155
155
|
}
|
|
156
156
|
let check;
|
|
157
157
|
if (path.scope.isStatic(chain)) {
|
|
158
|
-
check
|
|
158
|
+
// The receiver stays in the member expression, so the check needs its own
|
|
159
|
+
// node. One node under two parents is visited twice, and a later in-place
|
|
160
|
+
// rewrite such as renameIdentifiers then applies itself twice to it.
|
|
161
|
+
check = t.cloneNode(chain);
|
|
159
162
|
}
|
|
160
163
|
else {
|
|
161
164
|
const tmp = path.scope.generateUidIdentifierBasedOnNode(chain);
|
|
@@ -193,7 +196,7 @@ function transformChain(path) {
|
|
|
193
196
|
if (isDelete && i === optionals.length - 1) {
|
|
194
197
|
alternate = t.unaryExpression('delete', alternate);
|
|
195
198
|
}
|
|
196
|
-
const newTernary = t.conditionalExpression(condition, shortCircuit, alternate);
|
|
199
|
+
const newTernary = t.conditionalExpression(condition, t.cloneNode(shortCircuit), alternate);
|
|
197
200
|
const replaced = replacementPath.replaceWith(newTernary)[0];
|
|
198
201
|
replacementPath = replaced.get('alternate');
|
|
199
202
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optional-chaining-to-ternary.js","sourceRoot":"","sources":["../../src/transforms/optional-chaining-to-ternary.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"optional-chaining-to-ternary.js","sourceRoot":"","sources":["../../src/transforms/optional-chaining-to-ternary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { File } from '@babel/types';
|
|
2
|
+
import type { TransformContext } from '../options.js';
|
|
3
|
+
/**
|
|
4
|
+
* Serializes the whole program to a string and rebuilds it at runtime through
|
|
5
|
+
* the `Function` constructor. A detached function body only reaches true globals
|
|
6
|
+
* and its own parameters. A free name might instead be a CommonJS `require`, a
|
|
7
|
+
* bundler-injected binding, or a live import, none reachable from the body and
|
|
8
|
+
* none distinguishable from a global at build time, so free names are routed
|
|
9
|
+
* through a parameter object whose accessors run in the original top-level scope
|
|
10
|
+
* and resolve each name there. Import declarations return above the call. `eval`
|
|
11
|
+
* is left un-routed so a direct eval still reads the body scope. Names inside a
|
|
12
|
+
* `with` stay un-routed too, since they may resolve against the with object at
|
|
13
|
+
* runtime. Export statements cannot live inside a Function body, so pack throws
|
|
14
|
+
* on them. It packs everything else as written. Code that needs `import.meta`,
|
|
15
|
+
* top-level await, dynamic `import()`, or a top-level `arguments` will not run
|
|
16
|
+
* once moved into a Function body.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // ◀️ before
|
|
20
|
+
* console.log(value);
|
|
21
|
+
*
|
|
22
|
+
* // ▶️ after
|
|
23
|
+
* Function("M", "return M[\"b\"].log(M[\"_\"]);")({
|
|
24
|
+
* get "b"() {
|
|
25
|
+
* return console;
|
|
26
|
+
* },
|
|
27
|
+
* get "_"() {
|
|
28
|
+
* return value;
|
|
29
|
+
* }
|
|
30
|
+
* });
|
|
31
|
+
*/
|
|
32
|
+
export declare function pack(ast: File, ctx: TransformContext): boolean;
|
|
33
|
+
//# sourceMappingURL=pack.d.ts.map
|
|
@@ -0,0 +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,aAAa,CAAA;AAMnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAY9D"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import generate from '@babel/generator';
|
|
2
|
+
import traverse from '@babel/traverse';
|
|
3
|
+
import * as t from '@babel/types';
|
|
4
|
+
import { isInsideWith } from '../utils/ast.js';
|
|
5
|
+
import { isCalleeOrTagOf, isInStrictContext, referencesOrWritesVariable } from '../utils/paths.js';
|
|
6
|
+
import { mulberry32 } from '../utils/random.js';
|
|
7
|
+
import { StringGenerator } from '../utils/string-generator.js';
|
|
8
|
+
/**
|
|
9
|
+
* Serializes the whole program to a string and rebuilds it at runtime through
|
|
10
|
+
* the `Function` constructor. A detached function body only reaches true globals
|
|
11
|
+
* and its own parameters. A free name might instead be a CommonJS `require`, a
|
|
12
|
+
* bundler-injected binding, or a live import, none reachable from the body and
|
|
13
|
+
* none distinguishable from a global at build time, so free names are routed
|
|
14
|
+
* through a parameter object whose accessors run in the original top-level scope
|
|
15
|
+
* and resolve each name there. Import declarations return above the call. `eval`
|
|
16
|
+
* is left un-routed so a direct eval still reads the body scope. Names inside a
|
|
17
|
+
* `with` stay un-routed too, since they may resolve against the with object at
|
|
18
|
+
* runtime. Export statements cannot live inside a Function body, so pack throws
|
|
19
|
+
* on them. It packs everything else as written. Code that needs `import.meta`,
|
|
20
|
+
* top-level await, dynamic `import()`, or a top-level `arguments` will not run
|
|
21
|
+
* once moved into a Function body.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* // ◀️ before
|
|
25
|
+
* console.log(value);
|
|
26
|
+
*
|
|
27
|
+
* // ▶️ after
|
|
28
|
+
* Function("M", "return M[\"b\"].log(M[\"_\"]);")({
|
|
29
|
+
* get "b"() {
|
|
30
|
+
* return console;
|
|
31
|
+
* },
|
|
32
|
+
* get "_"() {
|
|
33
|
+
* return value;
|
|
34
|
+
* }
|
|
35
|
+
* });
|
|
36
|
+
*/
|
|
37
|
+
export function pack(ast, ctx) {
|
|
38
|
+
let programPath = null;
|
|
39
|
+
traverse(ast, {
|
|
40
|
+
Program(path) {
|
|
41
|
+
programPath = path;
|
|
42
|
+
path.stop();
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
if (!programPath) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return packProgram(programPath, ctx);
|
|
49
|
+
}
|
|
50
|
+
function packProgram(programPath, ctx) {
|
|
51
|
+
assertNoExports(programPath);
|
|
52
|
+
const importPaths = collectImportDeclarations(programPath);
|
|
53
|
+
const importDeclarations = importPaths.map((path) => path.node);
|
|
54
|
+
// An import named `Function` shadows the constructor at the output top level,
|
|
55
|
+
// so the wrap reaches the real one through a function instance instead.
|
|
56
|
+
const shadowedConstructor = importDeclarations.some((declaration) => bindsFunctionConstructor(declaration));
|
|
57
|
+
const programNode = programPath.node;
|
|
58
|
+
const wasModule = programNode.sourceType === 'module';
|
|
59
|
+
// Escaping strict is a deliberate opt-in: drop the directive so the packed
|
|
60
|
+
// body runs sloppy even when the source was strict.
|
|
61
|
+
const escapeStrict = ctx.pack?.escapeStrict ?? false;
|
|
62
|
+
const bodyStrict = !escapeStrict && isInStrictContext(programPath);
|
|
63
|
+
// Detaching imports drops their bindings, so their names read as free and are
|
|
64
|
+
// routed like any other global. The declarations return at the output top
|
|
65
|
+
// level, where the accessors close over them.
|
|
66
|
+
for (const path of importPaths) {
|
|
67
|
+
path.remove();
|
|
68
|
+
}
|
|
69
|
+
programPath.scope.crawl();
|
|
70
|
+
const usedNames = collectUsedNames(programNode, importDeclarations);
|
|
71
|
+
const generator = new StringGenerator(ctx.stringGeneratorMode, mulberry32(ctx.seed));
|
|
72
|
+
const freshIdentifier = () => {
|
|
73
|
+
let name;
|
|
74
|
+
do {
|
|
75
|
+
name = generator.next();
|
|
76
|
+
} while (usedNames.has(name));
|
|
77
|
+
usedNames.add(name);
|
|
78
|
+
return name;
|
|
79
|
+
};
|
|
80
|
+
const objectName = freshIdentifier();
|
|
81
|
+
const setterParam = freshIdentifier();
|
|
82
|
+
const readProperties = new Map();
|
|
83
|
+
const typeofProperties = new Map();
|
|
84
|
+
const settable = new Set();
|
|
85
|
+
const propertyFor = (registry, name) => {
|
|
86
|
+
let property = registry.get(name);
|
|
87
|
+
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__');
|
|
93
|
+
registry.set(name, property);
|
|
94
|
+
}
|
|
95
|
+
return property;
|
|
96
|
+
};
|
|
97
|
+
const memberFor = (property) => t.memberExpression(t.identifier(objectName), t.stringLiteral(property), true);
|
|
98
|
+
const isRoutable = (path) => {
|
|
99
|
+
const { name } = path.node;
|
|
100
|
+
// The wrapper parameter stays as written. `arguments` and `eval` are never
|
|
101
|
+
// routed: `arguments` binds to its own function's object, and leaving `eval`
|
|
102
|
+
// bare keeps a direct eval reading the body scope rather than the global one.
|
|
103
|
+
if (name === objectName || name === 'arguments' || name === 'eval') {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
// Inside `with`, a free name may resolve to a property of the with object at
|
|
107
|
+
// runtime, so routing it to the top-level accessor would change behavior.
|
|
108
|
+
if (isInsideWith(path)) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
if (!referencesOrWritesVariable(path)) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
return !path.scope.getBinding(name);
|
|
115
|
+
};
|
|
116
|
+
const routingVisitor = {
|
|
117
|
+
UnaryExpression(path) {
|
|
118
|
+
if (path.node.operator !== 'typeof') {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const argument = path.get('argument');
|
|
122
|
+
// A bare `typeof name` must not throw for an undeclared global, so it maps
|
|
123
|
+
// to an accessor that applies `typeof` in the original scope.
|
|
124
|
+
if (!argument.isIdentifier() || !isRoutable(argument)) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
path.replaceWith(memberFor(propertyFor(typeofProperties, argument.node.name)));
|
|
128
|
+
},
|
|
129
|
+
Identifier(path) {
|
|
130
|
+
// `delete name` must keep hitting the global binding; `delete obj[prop]`
|
|
131
|
+
// would drop the accessor instead. A real global stays reachable bare.
|
|
132
|
+
if (isBareDeleteArgument(path) || !isRoutable(path)) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const { name } = path.node;
|
|
136
|
+
if (isWriteReference(path)) {
|
|
137
|
+
settable.add(name);
|
|
138
|
+
}
|
|
139
|
+
const member = memberFor(propertyFor(readProperties, name));
|
|
140
|
+
// A member callee would bind `this` to the object; the comma discards the
|
|
141
|
+
// base and keeps the original receiver.
|
|
142
|
+
path.replaceWith(isCalleeOrTagOf(path) ? t.sequenceExpression([t.numericLiteral(0), member]) : member);
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
programPath.traverse(routingVisitor);
|
|
146
|
+
// The script completion value is its trailing expression; returning it keeps
|
|
147
|
+
// `eval` of the packed output producing the same value.
|
|
148
|
+
const { body } = programNode;
|
|
149
|
+
const lastStatement = body.at(-1);
|
|
150
|
+
if (lastStatement && t.isExpressionStatement(lastStatement)) {
|
|
151
|
+
body[body.length - 1] = t.returnStatement(lastStatement.expression);
|
|
152
|
+
}
|
|
153
|
+
const innerDirectives = bodyStrict ? [t.directive(t.directiveLiteral('use strict'))] : [];
|
|
154
|
+
const innerCode = generate(t.program(body, innerDirectives, 'script'), {
|
|
155
|
+
minified: true,
|
|
156
|
+
comments: false,
|
|
157
|
+
}).code;
|
|
158
|
+
const objectExpression = buildAccessorObject({
|
|
159
|
+
readProperties,
|
|
160
|
+
typeofProperties,
|
|
161
|
+
settable,
|
|
162
|
+
setterParam,
|
|
163
|
+
strict: bodyStrict,
|
|
164
|
+
});
|
|
165
|
+
const constructorReference = shadowedConstructor
|
|
166
|
+
? t.memberExpression(t.functionExpression(null, [], t.blockStatement([])), t.identifier('constructor'))
|
|
167
|
+
: t.identifier('Function');
|
|
168
|
+
const wrapper = t.callExpression(constructorReference, [
|
|
169
|
+
t.stringLiteral(objectName),
|
|
170
|
+
t.stringLiteral(innerCode),
|
|
171
|
+
]);
|
|
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]);
|
|
181
|
+
programNode.body = [...importDeclarations, t.expressionStatement(invocation)];
|
|
182
|
+
programNode.directives = [];
|
|
183
|
+
programNode.sourceType = importDeclarations.length > 0 ? 'module' : 'script';
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
// Export statements are module-only syntax and cannot exist inside a Function
|
|
187
|
+
// body. Pack throws rather than emit output that fails to parse at runtime.
|
|
188
|
+
function assertNoExports(programPath) {
|
|
189
|
+
const hasExport = programPath.node.body.some((statement) => t.isExportNamedDeclaration(statement) ||
|
|
190
|
+
t.isExportDefaultDeclaration(statement) ||
|
|
191
|
+
t.isExportAllDeclaration(statement));
|
|
192
|
+
if (hasExport) {
|
|
193
|
+
throw new Error('pack cannot wrap a program that uses export statements');
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function collectImportDeclarations(programPath) {
|
|
197
|
+
return programPath
|
|
198
|
+
.get('body')
|
|
199
|
+
.filter((statement) => statement.isImportDeclaration());
|
|
200
|
+
}
|
|
201
|
+
function bindsFunctionConstructor(declaration) {
|
|
202
|
+
return declaration.specifiers.some((specifier) => specifier.local.name === 'Function');
|
|
203
|
+
}
|
|
204
|
+
function isBareDeleteArgument(path) {
|
|
205
|
+
const parent = path.parentPath;
|
|
206
|
+
return (parent != null &&
|
|
207
|
+
parent.isUnaryExpression({ operator: 'delete' }) &&
|
|
208
|
+
parent.node.argument === path.node);
|
|
209
|
+
}
|
|
210
|
+
function isWriteReference(path) {
|
|
211
|
+
const parent = path.parentPath;
|
|
212
|
+
if (!parent) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
const { node } = path;
|
|
216
|
+
if (parent.isAssignmentExpression() && parent.node.left === node) {
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
if (parent.isUpdateExpression() && parent.node.argument === node) {
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
if ((parent.isForInStatement() || parent.isForOfStatement()) && parent.node.left === node) {
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
// Destructuring assignment targets bind through patterns Babel flags here.
|
|
226
|
+
return path.isBindingIdentifier();
|
|
227
|
+
}
|
|
228
|
+
function collectUsedNames(program, importDeclarations) {
|
|
229
|
+
// The wrapper parameter and setter parameter must avoid every name the body
|
|
230
|
+
// uses, so no nested binding can shadow their accesses.
|
|
231
|
+
const names = new Set(['Function']);
|
|
232
|
+
for (const declaration of importDeclarations) {
|
|
233
|
+
for (const specifier of declaration.specifiers) {
|
|
234
|
+
names.add(specifier.local.name);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
t.traverseFast(program, (node) => {
|
|
238
|
+
if (t.isIdentifier(node)) {
|
|
239
|
+
names.add(node.name);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
return names;
|
|
243
|
+
}
|
|
244
|
+
function buildAccessorObject(spec) {
|
|
245
|
+
const { readProperties, setterParam, settable, strict, typeofProperties } = spec;
|
|
246
|
+
const properties = [];
|
|
247
|
+
for (const [name, property] of readProperties) {
|
|
248
|
+
properties.push(t.objectMethod('get', t.stringLiteral(property), [], t.blockStatement([t.returnStatement(t.identifier(name))])));
|
|
249
|
+
if (settable.has(name)) {
|
|
250
|
+
const setterBody = t.blockStatement([
|
|
251
|
+
t.expressionStatement(t.assignmentExpression('=', t.identifier(name), t.identifier(setterParam))),
|
|
252
|
+
]);
|
|
253
|
+
// A strict script becomes a sloppy output script, so the setter stays
|
|
254
|
+
// strict to keep an undeclared-global write throwing.
|
|
255
|
+
if (strict) {
|
|
256
|
+
setterBody.directives.push(t.directive(t.directiveLiteral('use strict')));
|
|
257
|
+
}
|
|
258
|
+
properties.push(t.objectMethod('set', t.stringLiteral(property), [t.identifier(setterParam)], setterBody));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
for (const [name, property] of typeofProperties) {
|
|
262
|
+
properties.push(t.objectMethod('get', t.stringLiteral(property), [], t.blockStatement([t.returnStatement(t.unaryExpression('typeof', t.identifier(name)))])));
|
|
263
|
+
}
|
|
264
|
+
return t.objectExpression(properties);
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/transforms/pack.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/ast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/utils/ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAGjC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAsB7D;AAGD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAQzF;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAW5E;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,OAAO,CAK/C;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAKpD;AAID,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAYnE;AAyCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/utils/ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAGjC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAsB7D;AAGD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAQzF;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO,CAW5E;AAID,wBAAgB,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,OAAO,CAK/C;AAGD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAKpD;AAID,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAYnE;AAyCD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,OAAO,CAQtD"}
|
package/dist/utils/ast.js
CHANGED
|
@@ -107,6 +107,10 @@ function ownScopeHasDirectEval(owner) {
|
|
|
107
107
|
return found;
|
|
108
108
|
}
|
|
109
109
|
export function isDirectEvalCall(node) {
|
|
110
|
-
|
|
110
|
+
// `eval?.(...)` is an OptionalCallExpression yet still a direct eval, so both
|
|
111
|
+
// call node shapes count.
|
|
112
|
+
return ((t.isCallExpression(node) || t.isOptionalCallExpression(node)) &&
|
|
113
|
+
t.isIdentifier(node.callee) &&
|
|
114
|
+
node.callee.name === 'eval');
|
|
111
115
|
}
|
|
112
116
|
//# sourceMappingURL=ast.js.map
|
package/dist/utils/ast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/utils/ast.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC,iFAAiF;AACjF,MAAM,UAAU,qBAAqB,CAAC,IAAc;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAA;IAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,MAAM,GACV,MAAM,CAAC,SAAS,EAAE;QAClB,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAA;IAC5F,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAA;IACd,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAW,CAAA;QACtC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAChF,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,QAAgC;IACjF,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC,CAAA;QAChB,CAAC;QACD,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IACrD,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,4EAA4E;AAC5E,iDAAiD;AACjD,MAAM,UAAU,sBAAsB,CAAC,MAA4B;IACjE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,0EAA0E;AAC1E,wBAAwB;AACxB,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,CACL,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC;QACjD,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,CAAC,CACtD,CAAA;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1F,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,KAAK,IAAI,CAAA;AAC3E,CAAC;AAED,iFAAiF;AACjF,kBAAkB;AAClB,MAAM,UAAU,2BAA2B,CAAC,IAAc;IACxD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC/F,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,GAAoB,IAAI,CAAA;IACnC,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzF,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAA;IAC9B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,gFAAgF;AAChF,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAmB,CAAA;AACxD,MAAM,WAAW,GAAG,IAAI,OAAO,EAAmB,CAAA;AAElD,SAAS,eAAe,CACtB,WAAmB,EACnB,KAA+B,EAC/B,OAAkC;IAElC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACrC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAA;IACf,CAAC;IACD,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,OAAM;QACR,CAAC;QACD,KAAK,GAAG,IAAI,CAAA;QACZ,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAA;IAC5B,CAAC,CAAC,CAAA;IACF,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;IAC7B,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,IAAI,KAAK,GAAG,KAAK,CAAA;IACjB,mEAAmE;IACnE,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;QAC7B,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,KAAK,GAAG,IAAI,CAAA;YACZ,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAA;QAC5B,CAAC;QACD,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAC/E,CAAC,CAAC,CAAA;IACF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/utils/ast.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
1
|
export { obfuscate } from 'src/obfuscator'
|
|
2
|
-
export type {
|
|
2
|
+
export type {
|
|
3
|
+
ManglePropertiesOptions,
|
|
4
|
+
ObfuscatorOptions,
|
|
5
|
+
PackOptions,
|
|
6
|
+
PropertyNameGenerator,
|
|
7
|
+
} from 'src/options'
|
package/src/obfuscator.ts
CHANGED
|
@@ -33,6 +33,7 @@ import { nullishCoalescingToTernary } from 'src/transforms/nullish-coalescing-to
|
|
|
33
33
|
import { numbersToStrings } from 'src/transforms/numbers-to-strings'
|
|
34
34
|
import { objectMethodToProperty } from 'src/transforms/object-method-to-property'
|
|
35
35
|
import { optionalChainingToTernary } from 'src/transforms/optional-chaining-to-ternary'
|
|
36
|
+
import { pack } from 'src/transforms/pack'
|
|
36
37
|
import { packDeclarationsIntoParameters } from 'src/transforms/pack-declarations-into-parameters'
|
|
37
38
|
import { removeAnonymousFunctionNames } from 'src/transforms/remove-anonymous-function-names'
|
|
38
39
|
import { removeUnreachableCode } from 'src/transforms/remove-unreachable-code'
|
|
@@ -135,6 +136,11 @@ const POST_PROCESS: readonly ConfigurablePhase[] = [
|
|
|
135
136
|
// Renaming runs last because later transforms depend on recognizable bindings.
|
|
136
137
|
const RENAME: readonly ConfigurablePhase[] = [['renameIdentifiers', renameIdentifiers]]
|
|
137
138
|
|
|
139
|
+
// Packing serializes the finished program to a string and rebuilds it through
|
|
140
|
+
// the Function constructor. It must see final names and shapes, so it runs after
|
|
141
|
+
// every other rewrite, including renaming.
|
|
142
|
+
const PACK: readonly ConfigurablePhase[] = [['pack', pack]]
|
|
143
|
+
|
|
138
144
|
/** Parses, transforms, and prints JavaScript without mutating external state. */
|
|
139
145
|
export function obfuscate(code: string, options: ObfuscatorOptions = {}): string {
|
|
140
146
|
const log = options.verbose ? makeLogger() : null
|
|
@@ -185,6 +191,13 @@ export function obfuscate(code: string, options: ObfuscatorOptions = {}): string
|
|
|
185
191
|
run(log, name, () => fn(ast, ctxFor(name, options, baseCtx)))
|
|
186
192
|
}
|
|
187
193
|
|
|
194
|
+
for (const [name, fn] of PACK) {
|
|
195
|
+
if (!isEnabled(name, options)) {
|
|
196
|
+
continue
|
|
197
|
+
}
|
|
198
|
+
run(log, name, () => fn(ast, ctxFor(name, options, baseCtx)))
|
|
199
|
+
}
|
|
200
|
+
|
|
188
201
|
return run(
|
|
189
202
|
log,
|
|
190
203
|
'generate',
|
|
@@ -211,6 +224,9 @@ function ctxFor(
|
|
|
211
224
|
if (name === 'mangleProperties' && entry && typeof entry === 'object') {
|
|
212
225
|
return { ...context, mangleProperties: entry }
|
|
213
226
|
}
|
|
227
|
+
if (name === 'pack' && entry && typeof entry === 'object') {
|
|
228
|
+
return { ...context, pack: entry }
|
|
229
|
+
}
|
|
214
230
|
return context
|
|
215
231
|
}
|
|
216
232
|
|
package/src/options.ts
CHANGED
|
@@ -37,6 +37,7 @@ export type TransformName =
|
|
|
37
37
|
| 'numbersToStrings'
|
|
38
38
|
| 'mangleProperties'
|
|
39
39
|
| 'renameIdentifiers'
|
|
40
|
+
| 'pack'
|
|
40
41
|
|
|
41
42
|
// An override enables the transform and replaces its string-generator mode.
|
|
42
43
|
type TransformEntry = boolean | { stringGeneratorMode?: StringGeneratorModeOption }
|
|
@@ -76,13 +77,25 @@ export interface ManglePropertiesOptions {
|
|
|
76
77
|
undeclared?: boolean
|
|
77
78
|
}
|
|
78
79
|
|
|
80
|
+
/** Options for the `Function`-constructor packing transform. */
|
|
81
|
+
export interface PackOptions {
|
|
82
|
+
/**
|
|
83
|
+
* Skip the strict-mode directive so the packed body runs sloppy even when the
|
|
84
|
+
* source is strict. This deliberately changes behavior. Default `false`.
|
|
85
|
+
*/
|
|
86
|
+
escapeStrict?: boolean
|
|
87
|
+
/** Override the default string-generator mode for the names pack creates. */
|
|
88
|
+
stringGeneratorMode?: StringGeneratorModeOption
|
|
89
|
+
}
|
|
90
|
+
|
|
79
91
|
type SimpleTransform = Exclude<
|
|
80
92
|
TransformName,
|
|
81
|
-
'mangleProperties' | 'renameIdentifiers' | 'specialsToStrings'
|
|
93
|
+
'mangleProperties' | 'pack' | 'renameIdentifiers' | 'specialsToStrings'
|
|
82
94
|
>
|
|
83
95
|
|
|
84
96
|
type TransformsMap = Partial<Record<SimpleTransform, boolean>> & {
|
|
85
97
|
mangleProperties?: boolean | ManglePropertiesOptions
|
|
98
|
+
pack?: boolean | PackOptions
|
|
86
99
|
renameIdentifiers?: TransformEntry
|
|
87
100
|
specialsToStrings?: TransformEntry
|
|
88
101
|
}
|
|
@@ -110,6 +123,7 @@ export interface ObfuscatorOptions {
|
|
|
110
123
|
// Resolved per-call defaults handed to every transform.
|
|
111
124
|
export interface TransformContext {
|
|
112
125
|
mangleProperties?: ManglePropertiesOptions
|
|
126
|
+
pack?: PackOptions
|
|
113
127
|
seed: number
|
|
114
128
|
stringGeneratorMode: StringGeneratorModeOption
|
|
115
129
|
}
|
|
@@ -175,7 +175,10 @@ function transformChain(path: OptionalPath): boolean {
|
|
|
175
175
|
let check: t.Expression
|
|
176
176
|
|
|
177
177
|
if (path.scope.isStatic(chain)) {
|
|
178
|
-
check
|
|
178
|
+
// The receiver stays in the member expression, so the check needs its own
|
|
179
|
+
// node. One node under two parents is visited twice, and a later in-place
|
|
180
|
+
// rewrite such as renameIdentifiers then applies itself twice to it.
|
|
181
|
+
check = t.cloneNode(chain)
|
|
179
182
|
} else {
|
|
180
183
|
const tmp = path.scope.generateUidIdentifierBasedOnNode(chain)
|
|
181
184
|
path.scope.push({ id: t.cloneNode(tmp) })
|
|
@@ -212,7 +215,7 @@ function transformChain(path: OptionalPath): boolean {
|
|
|
212
215
|
alternate = t.unaryExpression('delete', alternate)
|
|
213
216
|
}
|
|
214
217
|
|
|
215
|
-
const newTernary = t.conditionalExpression(condition, shortCircuit, alternate)
|
|
218
|
+
const newTernary = t.conditionalExpression(condition, t.cloneNode(shortCircuit), alternate)
|
|
216
219
|
const replaced: NodePath<t.ConditionalExpression> = replacementPath.replaceWith(newTernary)[0]
|
|
217
220
|
replacementPath = replaced.get('alternate')
|
|
218
221
|
}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
import generate from '@babel/generator'
|
|
2
|
+
import traverse from '@babel/traverse'
|
|
3
|
+
import type { NodePath, Visitor } from '@babel/traverse'
|
|
4
|
+
import * as t from '@babel/types'
|
|
5
|
+
import type { File } from '@babel/types'
|
|
6
|
+
|
|
7
|
+
import type { TransformContext } from 'src/options'
|
|
8
|
+
import { isInsideWith } from 'src/utils/ast'
|
|
9
|
+
import { isCalleeOrTagOf, isInStrictContext, referencesOrWritesVariable } from 'src/utils/paths'
|
|
10
|
+
import { mulberry32 } from 'src/utils/random'
|
|
11
|
+
import { StringGenerator } from 'src/utils/string-generator'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Serializes the whole program to a string and rebuilds it at runtime through
|
|
15
|
+
* the `Function` constructor. A detached function body only reaches true globals
|
|
16
|
+
* and its own parameters. A free name might instead be a CommonJS `require`, a
|
|
17
|
+
* bundler-injected binding, or a live import, none reachable from the body and
|
|
18
|
+
* none distinguishable from a global at build time, so free names are routed
|
|
19
|
+
* through a parameter object whose accessors run in the original top-level scope
|
|
20
|
+
* and resolve each name there. Import declarations return above the call. `eval`
|
|
21
|
+
* is left un-routed so a direct eval still reads the body scope. Names inside a
|
|
22
|
+
* `with` stay un-routed too, since they may resolve against the with object at
|
|
23
|
+
* runtime. Export statements cannot live inside a Function body, so pack throws
|
|
24
|
+
* on them. It packs everything else as written. Code that needs `import.meta`,
|
|
25
|
+
* top-level await, dynamic `import()`, or a top-level `arguments` will not run
|
|
26
|
+
* once moved into a Function body.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* // ◀️ before
|
|
30
|
+
* console.log(value);
|
|
31
|
+
*
|
|
32
|
+
* // ▶️ after
|
|
33
|
+
* Function("M", "return M[\"b\"].log(M[\"_\"]);")({
|
|
34
|
+
* get "b"() {
|
|
35
|
+
* return console;
|
|
36
|
+
* },
|
|
37
|
+
* get "_"() {
|
|
38
|
+
* return value;
|
|
39
|
+
* }
|
|
40
|
+
* });
|
|
41
|
+
*/
|
|
42
|
+
export function pack(ast: File, ctx: TransformContext): boolean {
|
|
43
|
+
let programPath: NodePath<t.Program> | null = null
|
|
44
|
+
traverse(ast, {
|
|
45
|
+
Program(path) {
|
|
46
|
+
programPath = path
|
|
47
|
+
path.stop()
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
if (!programPath) {
|
|
51
|
+
return false
|
|
52
|
+
}
|
|
53
|
+
return packProgram(programPath, ctx)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function packProgram(programPath: NodePath<t.Program>, ctx: TransformContext): boolean {
|
|
57
|
+
assertNoExports(programPath)
|
|
58
|
+
const importPaths = collectImportDeclarations(programPath)
|
|
59
|
+
const importDeclarations = importPaths.map((path) => path.node)
|
|
60
|
+
// An import named `Function` shadows the constructor at the output top level,
|
|
61
|
+
// so the wrap reaches the real one through a function instance instead.
|
|
62
|
+
const shadowedConstructor = importDeclarations.some((declaration) =>
|
|
63
|
+
bindsFunctionConstructor(declaration),
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
const programNode = programPath.node
|
|
67
|
+
const wasModule = programNode.sourceType === 'module'
|
|
68
|
+
// Escaping strict is a deliberate opt-in: drop the directive so the packed
|
|
69
|
+
// body runs sloppy even when the source was strict.
|
|
70
|
+
const escapeStrict = ctx.pack?.escapeStrict ?? false
|
|
71
|
+
const bodyStrict = !escapeStrict && isInStrictContext(programPath)
|
|
72
|
+
|
|
73
|
+
// Detaching imports drops their bindings, so their names read as free and are
|
|
74
|
+
// routed like any other global. The declarations return at the output top
|
|
75
|
+
// level, where the accessors close over them.
|
|
76
|
+
for (const path of importPaths) {
|
|
77
|
+
path.remove()
|
|
78
|
+
}
|
|
79
|
+
programPath.scope.crawl()
|
|
80
|
+
|
|
81
|
+
const usedNames = collectUsedNames(programNode, importDeclarations)
|
|
82
|
+
const generator = new StringGenerator(ctx.stringGeneratorMode, mulberry32(ctx.seed))
|
|
83
|
+
const freshIdentifier = (): string => {
|
|
84
|
+
let name: string
|
|
85
|
+
do {
|
|
86
|
+
name = generator.next()
|
|
87
|
+
} while (usedNames.has(name))
|
|
88
|
+
usedNames.add(name)
|
|
89
|
+
return name
|
|
90
|
+
}
|
|
91
|
+
const objectName = freshIdentifier()
|
|
92
|
+
const setterParam = freshIdentifier()
|
|
93
|
+
|
|
94
|
+
const readProperties = new Map<string, string>()
|
|
95
|
+
const typeofProperties = new Map<string, string>()
|
|
96
|
+
const settable = new Set<string>()
|
|
97
|
+
const propertyFor = (registry: Map<string, string>, name: string): string => {
|
|
98
|
+
let property = registry.get(name)
|
|
99
|
+
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__')
|
|
105
|
+
registry.set(name, property)
|
|
106
|
+
}
|
|
107
|
+
return property
|
|
108
|
+
}
|
|
109
|
+
const memberFor = (property: string): t.MemberExpression =>
|
|
110
|
+
t.memberExpression(t.identifier(objectName), t.stringLiteral(property), true)
|
|
111
|
+
|
|
112
|
+
const isRoutable = (path: NodePath<t.Identifier>): boolean => {
|
|
113
|
+
const { name } = path.node
|
|
114
|
+
// The wrapper parameter stays as written. `arguments` and `eval` are never
|
|
115
|
+
// routed: `arguments` binds to its own function's object, and leaving `eval`
|
|
116
|
+
// bare keeps a direct eval reading the body scope rather than the global one.
|
|
117
|
+
if (name === objectName || name === 'arguments' || name === 'eval') {
|
|
118
|
+
return false
|
|
119
|
+
}
|
|
120
|
+
// Inside `with`, a free name may resolve to a property of the with object at
|
|
121
|
+
// runtime, so routing it to the top-level accessor would change behavior.
|
|
122
|
+
if (isInsideWith(path)) {
|
|
123
|
+
return false
|
|
124
|
+
}
|
|
125
|
+
if (!referencesOrWritesVariable(path)) {
|
|
126
|
+
return false
|
|
127
|
+
}
|
|
128
|
+
return !path.scope.getBinding(name)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const routingVisitor: Visitor = {
|
|
132
|
+
UnaryExpression(path) {
|
|
133
|
+
if (path.node.operator !== 'typeof') {
|
|
134
|
+
return
|
|
135
|
+
}
|
|
136
|
+
const argument = path.get('argument')
|
|
137
|
+
// A bare `typeof name` must not throw for an undeclared global, so it maps
|
|
138
|
+
// to an accessor that applies `typeof` in the original scope.
|
|
139
|
+
if (!argument.isIdentifier() || !isRoutable(argument)) {
|
|
140
|
+
return
|
|
141
|
+
}
|
|
142
|
+
path.replaceWith(memberFor(propertyFor(typeofProperties, argument.node.name)))
|
|
143
|
+
},
|
|
144
|
+
Identifier(path) {
|
|
145
|
+
// `delete name` must keep hitting the global binding; `delete obj[prop]`
|
|
146
|
+
// would drop the accessor instead. A real global stays reachable bare.
|
|
147
|
+
if (isBareDeleteArgument(path) || !isRoutable(path)) {
|
|
148
|
+
return
|
|
149
|
+
}
|
|
150
|
+
const { name } = path.node
|
|
151
|
+
if (isWriteReference(path)) {
|
|
152
|
+
settable.add(name)
|
|
153
|
+
}
|
|
154
|
+
const member = memberFor(propertyFor(readProperties, name))
|
|
155
|
+
// A member callee would bind `this` to the object; the comma discards the
|
|
156
|
+
// base and keeps the original receiver.
|
|
157
|
+
path.replaceWith(
|
|
158
|
+
isCalleeOrTagOf(path) ? t.sequenceExpression([t.numericLiteral(0), member]) : member,
|
|
159
|
+
)
|
|
160
|
+
},
|
|
161
|
+
}
|
|
162
|
+
programPath.traverse(routingVisitor)
|
|
163
|
+
|
|
164
|
+
// The script completion value is its trailing expression; returning it keeps
|
|
165
|
+
// `eval` of the packed output producing the same value.
|
|
166
|
+
const { body } = programNode
|
|
167
|
+
const lastStatement = body.at(-1)
|
|
168
|
+
if (lastStatement && t.isExpressionStatement(lastStatement)) {
|
|
169
|
+
body[body.length - 1] = t.returnStatement(lastStatement.expression)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const innerDirectives = bodyStrict ? [t.directive(t.directiveLiteral('use strict'))] : []
|
|
173
|
+
const innerCode = generate(t.program(body, innerDirectives, 'script'), {
|
|
174
|
+
minified: true,
|
|
175
|
+
comments: false,
|
|
176
|
+
}).code
|
|
177
|
+
|
|
178
|
+
const objectExpression = buildAccessorObject({
|
|
179
|
+
readProperties,
|
|
180
|
+
typeofProperties,
|
|
181
|
+
settable,
|
|
182
|
+
setterParam,
|
|
183
|
+
strict: bodyStrict,
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
const constructorReference = shadowedConstructor
|
|
187
|
+
? t.memberExpression(
|
|
188
|
+
t.functionExpression(null, [], t.blockStatement([])),
|
|
189
|
+
t.identifier('constructor'),
|
|
190
|
+
)
|
|
191
|
+
: t.identifier('Function')
|
|
192
|
+
const wrapper = t.callExpression(constructorReference, [
|
|
193
|
+
t.stringLiteral(objectName),
|
|
194
|
+
t.stringLiteral(innerCode),
|
|
195
|
+
])
|
|
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])
|
|
206
|
+
|
|
207
|
+
programNode.body = [...importDeclarations, t.expressionStatement(invocation)]
|
|
208
|
+
programNode.directives = []
|
|
209
|
+
programNode.sourceType = importDeclarations.length > 0 ? 'module' : 'script'
|
|
210
|
+
return true
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Export statements are module-only syntax and cannot exist inside a Function
|
|
214
|
+
// body. Pack throws rather than emit output that fails to parse at runtime.
|
|
215
|
+
function assertNoExports(programPath: NodePath<t.Program>): void {
|
|
216
|
+
const hasExport = programPath.node.body.some(
|
|
217
|
+
(statement) =>
|
|
218
|
+
t.isExportNamedDeclaration(statement) ||
|
|
219
|
+
t.isExportDefaultDeclaration(statement) ||
|
|
220
|
+
t.isExportAllDeclaration(statement),
|
|
221
|
+
)
|
|
222
|
+
if (hasExport) {
|
|
223
|
+
throw new Error('pack cannot wrap a program that uses export statements')
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function collectImportDeclarations(
|
|
228
|
+
programPath: NodePath<t.Program>,
|
|
229
|
+
): NodePath<t.ImportDeclaration>[] {
|
|
230
|
+
return programPath
|
|
231
|
+
.get('body')
|
|
232
|
+
.filter((statement): statement is NodePath<t.ImportDeclaration> =>
|
|
233
|
+
statement.isImportDeclaration(),
|
|
234
|
+
)
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function bindsFunctionConstructor(declaration: t.ImportDeclaration): boolean {
|
|
238
|
+
return declaration.specifiers.some((specifier) => specifier.local.name === 'Function')
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function isBareDeleteArgument(path: NodePath<t.Identifier>): boolean {
|
|
242
|
+
const parent = path.parentPath
|
|
243
|
+
return (
|
|
244
|
+
parent != null &&
|
|
245
|
+
parent.isUnaryExpression({ operator: 'delete' }) &&
|
|
246
|
+
parent.node.argument === path.node
|
|
247
|
+
)
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function isWriteReference(path: NodePath<t.Identifier>): boolean {
|
|
251
|
+
const parent = path.parentPath
|
|
252
|
+
if (!parent) {
|
|
253
|
+
return false
|
|
254
|
+
}
|
|
255
|
+
const { node } = path
|
|
256
|
+
if (parent.isAssignmentExpression() && parent.node.left === node) {
|
|
257
|
+
return true
|
|
258
|
+
}
|
|
259
|
+
if (parent.isUpdateExpression() && parent.node.argument === node) {
|
|
260
|
+
return true
|
|
261
|
+
}
|
|
262
|
+
if ((parent.isForInStatement() || parent.isForOfStatement()) && parent.node.left === node) {
|
|
263
|
+
return true
|
|
264
|
+
}
|
|
265
|
+
// Destructuring assignment targets bind through patterns Babel flags here.
|
|
266
|
+
return path.isBindingIdentifier()
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function collectUsedNames(
|
|
270
|
+
program: t.Program,
|
|
271
|
+
importDeclarations: t.ImportDeclaration[],
|
|
272
|
+
): Set<string> {
|
|
273
|
+
// The wrapper parameter and setter parameter must avoid every name the body
|
|
274
|
+
// uses, so no nested binding can shadow their accesses.
|
|
275
|
+
const names = new Set<string>(['Function'])
|
|
276
|
+
for (const declaration of importDeclarations) {
|
|
277
|
+
for (const specifier of declaration.specifiers) {
|
|
278
|
+
names.add(specifier.local.name)
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
t.traverseFast(program, (node) => {
|
|
282
|
+
if (t.isIdentifier(node)) {
|
|
283
|
+
names.add(node.name)
|
|
284
|
+
}
|
|
285
|
+
})
|
|
286
|
+
return names
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
interface AccessorObjectSpec {
|
|
290
|
+
readProperties: Map<string, string>
|
|
291
|
+
setterParam: string
|
|
292
|
+
settable: Set<string>
|
|
293
|
+
strict: boolean
|
|
294
|
+
typeofProperties: Map<string, string>
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function buildAccessorObject(spec: AccessorObjectSpec): t.ObjectExpression {
|
|
298
|
+
const { readProperties, setterParam, settable, strict, typeofProperties } = spec
|
|
299
|
+
const properties: t.ObjectMethod[] = []
|
|
300
|
+
for (const [name, property] of readProperties) {
|
|
301
|
+
properties.push(
|
|
302
|
+
t.objectMethod(
|
|
303
|
+
'get',
|
|
304
|
+
t.stringLiteral(property),
|
|
305
|
+
[],
|
|
306
|
+
t.blockStatement([t.returnStatement(t.identifier(name))]),
|
|
307
|
+
),
|
|
308
|
+
)
|
|
309
|
+
if (settable.has(name)) {
|
|
310
|
+
const setterBody = t.blockStatement([
|
|
311
|
+
t.expressionStatement(
|
|
312
|
+
t.assignmentExpression('=', t.identifier(name), t.identifier(setterParam)),
|
|
313
|
+
),
|
|
314
|
+
])
|
|
315
|
+
// A strict script becomes a sloppy output script, so the setter stays
|
|
316
|
+
// strict to keep an undeclared-global write throwing.
|
|
317
|
+
if (strict) {
|
|
318
|
+
setterBody.directives.push(t.directive(t.directiveLiteral('use strict')))
|
|
319
|
+
}
|
|
320
|
+
properties.push(
|
|
321
|
+
t.objectMethod('set', t.stringLiteral(property), [t.identifier(setterParam)], setterBody),
|
|
322
|
+
)
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
for (const [name, property] of typeofProperties) {
|
|
326
|
+
properties.push(
|
|
327
|
+
t.objectMethod(
|
|
328
|
+
'get',
|
|
329
|
+
t.stringLiteral(property),
|
|
330
|
+
[],
|
|
331
|
+
t.blockStatement([t.returnStatement(t.unaryExpression('typeof', t.identifier(name)))]),
|
|
332
|
+
),
|
|
333
|
+
)
|
|
334
|
+
}
|
|
335
|
+
return t.objectExpression(properties)
|
|
336
|
+
}
|
package/src/utils/ast.ts
CHANGED
|
@@ -125,5 +125,11 @@ function ownScopeHasDirectEval(owner: t.Node): boolean {
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
export function isDirectEvalCall(node: t.Node): boolean {
|
|
128
|
-
|
|
128
|
+
// `eval?.(...)` is an OptionalCallExpression yet still a direct eval, so both
|
|
129
|
+
// call node shapes count.
|
|
130
|
+
return (
|
|
131
|
+
(t.isCallExpression(node) || t.isOptionalCallExpression(node)) &&
|
|
132
|
+
t.isIdentifier(node.callee) &&
|
|
133
|
+
node.callee.name === 'eval'
|
|
134
|
+
)
|
|
129
135
|
}
|