webfuscator 1.1.0 → 1.2.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/dist/analysis/constant.js +3 -3
- package/dist/analysis/constant.js.map +1 -1
- package/dist/analysis/inlineability.js +2 -2
- package/dist/analysis/inlineability.js.map +1 -1
- package/dist/analysis/purity.js +1 -1
- package/dist/analysis/purity.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/obfuscator.d.ts.map +1 -1
- package/dist/obfuscator.js.map +1 -1
- package/dist/options.d.ts.map +1 -1
- package/dist/preparation/expand-destructuring.js +4 -3
- package/dist/preparation/expand-destructuring.js.map +1 -1
- package/dist/preparation/expand-template-literals.js +3 -2
- package/dist/preparation/expand-template-literals.js.map +1 -1
- package/dist/preparation/split-sequence-expressions.js +1 -1
- package/dist/preparation/split-sequence-expressions.js.map +1 -1
- package/dist/preparation/split-variable-declarations.js +1 -1
- package/dist/preparation/split-variable-declarations.js.map +1 -1
- package/dist/preparation/stringify-object-keys.js +1 -1
- package/dist/preparation/stringify-object-keys.js.map +1 -1
- package/dist/preparation/wrap-single-statements.js +2 -2
- package/dist/preparation/wrap-single-statements.js.map +1 -1
- package/dist/transforms/arguments-to-parameters.js +1 -1
- package/dist/transforms/arguments-to-parameters.js.map +1 -1
- package/dist/transforms/arrow-to-function.js.map +1 -1
- package/dist/transforms/collapse-single-use-temps.js +7 -7
- package/dist/transforms/collapse-single-use-temps.js.map +1 -1
- package/dist/transforms/const-let-to-var.js +3 -3
- package/dist/transforms/const-let-to-var.js.map +1 -1
- package/dist/transforms/const-to-let.js.map +1 -1
- package/dist/transforms/do-while-to-while.js +3 -3
- package/dist/transforms/do-while-to-while.js.map +1 -1
- package/dist/transforms/drop-console.js +4 -3
- package/dist/transforms/drop-console.js.map +1 -1
- package/dist/transforms/drop-debugger.js.map +1 -1
- package/dist/transforms/expand-binary-assignment.js +5 -3
- package/dist/transforms/expand-binary-assignment.js.map +1 -1
- package/dist/transforms/expand-logical-assignment.js +5 -3
- package/dist/transforms/expand-logical-assignment.js.map +1 -1
- package/dist/transforms/extract-object-properties.js +7 -7
- package/dist/transforms/extract-object-properties.js.map +1 -1
- package/dist/transforms/fold-builtin-methods.js +16 -15
- package/dist/transforms/fold-builtin-methods.js.map +1 -1
- package/dist/transforms/fold-constants.js +2 -2
- package/dist/transforms/fold-constants.js.map +1 -1
- package/dist/transforms/for-to-while.js +5 -5
- package/dist/transforms/for-to-while.js.map +1 -1
- package/dist/transforms/function-declaration-to-expression.js +3 -3
- package/dist/transforms/function-declaration-to-expression.js.map +1 -1
- package/dist/transforms/inline-functions.js +7 -7
- package/dist/transforms/inline-functions.js.map +1 -1
- package/dist/transforms/logical-to-ternary.js +2 -2
- package/dist/transforms/logical-to-ternary.js.map +1 -1
- package/dist/transforms/mangle-properties.d.ts.map +1 -1
- package/dist/transforms/mangle-properties.js +35 -86
- package/dist/transforms/mangle-properties.js.map +1 -1
- package/dist/transforms/nullish-coalescing-to-ternary.js +2 -2
- package/dist/transforms/nullish-coalescing-to-ternary.js.map +1 -1
- package/dist/transforms/numbers-to-strings.js +2 -2
- package/dist/transforms/numbers-to-strings.js.map +1 -1
- package/dist/transforms/object-method-to-property.js +1 -1
- package/dist/transforms/object-method-to-property.js.map +1 -1
- package/dist/transforms/optional-chaining-to-ternary.js +2 -2
- package/dist/transforms/optional-chaining-to-ternary.js.map +1 -1
- package/dist/transforms/pack-declarations-into-parameters.js +2 -2
- package/dist/transforms/pack-declarations-into-parameters.js.map +1 -1
- package/dist/transforms/pack.d.ts.map +1 -1
- package/dist/transforms/pack.js +10 -11
- package/dist/transforms/pack.js.map +1 -1
- package/dist/transforms/remove-anonymous-function-names.js +3 -3
- package/dist/transforms/remove-anonymous-function-names.js.map +1 -1
- package/dist/transforms/remove-unreachable-code.js +1 -1
- package/dist/transforms/remove-unreachable-code.js.map +1 -1
- package/dist/transforms/remove-unused-code.js +4 -4
- package/dist/transforms/remove-unused-code.js.map +1 -1
- package/dist/transforms/rename-identifiers.d.ts.map +1 -1
- package/dist/transforms/rename-identifiers.js +4 -3
- package/dist/transforms/rename-identifiers.js.map +1 -1
- package/dist/transforms/specials-to-strings.d.ts.map +1 -1
- package/dist/transforms/specials-to-strings.js +2 -2
- package/dist/transforms/specials-to-strings.js.map +1 -1
- package/dist/transforms/switch-to-if.js +7 -7
- package/dist/transforms/switch-to-if.js.map +1 -1
- package/dist/transforms/ternary-to-if.js +7 -4
- package/dist/transforms/ternary-to-if.js.map +1 -1
- package/dist/transforms/update-to-assignment.js +4 -2
- package/dist/transforms/update-to-assignment.js.map +1 -1
- package/dist/transforms/yodify-conditions.js +3 -3
- package/dist/transforms/yodify-conditions.js.map +1 -1
- package/dist/utils/ast.d.ts.map +1 -1
- package/dist/utils/ast.js +2 -1
- package/dist/utils/ast.js.map +1 -1
- package/dist/utils/evaluation-order.js.map +1 -1
- package/dist/utils/logical-lowering.js +2 -2
- package/dist/utils/logical-lowering.js.map +1 -1
- package/dist/utils/loop-lowering.js +1 -1
- package/dist/utils/loop-lowering.js.map +1 -1
- package/dist/utils/string-generator.js +1 -1
- package/dist/utils/string-generator.js.map +1 -1
- package/package.json +11 -10
- package/src/analysis/constant.ts +4 -4
- package/src/analysis/inlineability.ts +4 -4
- package/src/analysis/purity.ts +3 -3
- package/src/index.ts +4 -2
- package/src/obfuscator.ts +42 -42
- package/src/options.ts +1 -1
- package/src/preparation/expand-destructuring.ts +5 -4
- package/src/preparation/expand-template-literals.ts +4 -3
- package/src/preparation/split-sequence-expressions.ts +2 -2
- package/src/preparation/split-variable-declarations.ts +1 -1
- package/src/preparation/stringify-object-keys.ts +2 -2
- package/src/preparation/wrap-single-statements.ts +2 -2
- package/src/transforms/arguments-to-parameters.ts +5 -5
- package/src/transforms/arrow-to-function.ts +3 -3
- package/src/transforms/collapse-single-use-temps.ts +14 -14
- package/src/transforms/const-let-to-var.ts +6 -6
- package/src/transforms/const-to-let.ts +4 -4
- package/src/transforms/do-while-to-while.ts +6 -6
- package/src/transforms/drop-console.ts +8 -7
- package/src/transforms/drop-debugger.ts +2 -2
- package/src/transforms/expand-binary-assignment.ts +8 -6
- package/src/transforms/expand-logical-assignment.ts +8 -6
- package/src/transforms/extract-object-properties.ts +12 -12
- package/src/transforms/fold-builtin-methods.ts +20 -19
- package/src/transforms/fold-constants.ts +8 -8
- package/src/transforms/for-to-while.ts +8 -8
- package/src/transforms/function-declaration-to-expression.ts +5 -5
- package/src/transforms/inline-functions.ts +14 -14
- package/src/transforms/logical-to-ternary.ts +7 -7
- package/src/transforms/mangle-properties.ts +43 -97
- package/src/transforms/nullish-coalescing-to-ternary.ts +6 -6
- package/src/transforms/numbers-to-strings.ts +4 -4
- package/src/transforms/object-method-to-property.ts +4 -4
- package/src/transforms/optional-chaining-to-ternary.ts +5 -5
- package/src/transforms/pack-declarations-into-parameters.ts +7 -7
- package/src/transforms/pack.ts +20 -16
- package/src/transforms/remove-anonymous-function-names.ts +5 -5
- package/src/transforms/remove-unreachable-code.ts +3 -3
- package/src/transforms/remove-unused-code.ts +8 -8
- package/src/transforms/rename-identifiers.ts +9 -8
- package/src/transforms/specials-to-strings.ts +7 -7
- package/src/transforms/switch-to-if.ts +12 -12
- package/src/transforms/ternary-to-if.ts +12 -9
- package/src/transforms/update-to-assignment.ts +7 -5
- package/src/transforms/yodify-conditions.ts +6 -6
- package/src/utils/ast.ts +2 -1
- package/src/utils/evaluation-order.ts +1 -1
- package/src/utils/logical-lowering.ts +3 -3
- package/src/utils/loop-lowering.ts +1 -1
- package/src/utils/string-generator.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluation-order.js","sourceRoot":"","sources":["../../src/utils/evaluation-order.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"evaluation-order.js","sourceRoot":"","sources":["../../src/utils/evaluation-order.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as t from '@babel/types';
|
|
2
2
|
import { isSideEffectFree } from '../analysis/purity.js';
|
|
3
|
-
import { isStandaloneDeclaration } from '
|
|
3
|
+
import { isStandaloneDeclaration } from './paths.js';
|
|
4
4
|
// Lowers a short-circuit expression assigned to a bare identifier:
|
|
5
5
|
//
|
|
6
6
|
// x = L;
|
|
@@ -9,7 +9,7 @@ import { isStandaloneDeclaration } from '../utils/paths.js';
|
|
|
9
9
|
// `fallbackTest` selects `!x`, `x`, or `x == null`. The parent must accept a
|
|
10
10
|
// multi-statement replacement.
|
|
11
11
|
export function lowerLogicalWriteStatement(path, fallbackTest) {
|
|
12
|
-
const
|
|
12
|
+
const node = path.node;
|
|
13
13
|
const parent = path.parentPath;
|
|
14
14
|
if (!parent) {
|
|
15
15
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logical-lowering.js","sourceRoot":"","sources":["../../src/utils/logical-lowering.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"logical-lowering.js","sourceRoot":"","sources":["../../src/utils/logical-lowering.ts"],"names":[],"mappings":"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"}
|
|
@@ -57,7 +57,7 @@ const redirectVisitor = {
|
|
|
57
57
|
path.skip();
|
|
58
58
|
},
|
|
59
59
|
ContinueStatement(path, state) {
|
|
60
|
-
const
|
|
60
|
+
const label = path.node.label;
|
|
61
61
|
if (!label) {
|
|
62
62
|
if (!hasInterposedLoop(path, state.rootPath)) {
|
|
63
63
|
path.replaceWith(t.breakStatement(t.identifier(state.innerLabel)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-lowering.js","sourceRoot":"","sources":["../../src/utils/loop-lowering.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA2B;IAI3D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,IAAI,SAAS,GAA0B,IAAI,CAAA;IAC3C,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAA;QACnC,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACzE,MAAK;QACP,CAAC;QACD,SAAS,GAAG,MAAM,CAAA;QAClB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA2B,EAAE,IAAY;IACzE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,IAAI,QAAQ,GAAoB,IAAI,CAAC,UAAU,CAAA;IAC/C,OAAO,QAAQ,EAAE,CAAC;QAChB,IAAI,QAAQ,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAClC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrC,CAAC;QACD,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAA;IAChC,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC;QACZ,gBAAgB,CAAC,KAAK;YACpB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;KACF,CAAC,CAAA;IACF,4EAA4E;IAC5E,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACvC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAkB,EAClB,UAAkB,EAClB,SAAsB;IAEtB,MAAM,KAAK,GAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;IAC1E,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;IACzC,OAAO,KAAK,CAAC,KAAK,CAAA;AACpB,CAAC;AASD,MAAM,eAAe,GAA2B;IAC9C,QAAQ,CAAC,IAAI;QACX,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;IACD,iBAAiB,CAAC,IAAI,EAAE,KAAK;QAC3B,MAAM,
|
|
1
|
+
{"version":3,"file":"loop-lowering.js","sourceRoot":"","sources":["../../src/utils/loop-lowering.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA2B;IAI3D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,IAAI,SAAS,GAA0B,IAAI,CAAA;IAC3C,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAA;QACnC,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACzE,MAAK;QACP,CAAC;QACD,SAAS,GAAG,MAAM,CAAA;QAClB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA2B,EAAE,IAAY;IACzE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,IAAI,QAAQ,GAAoB,IAAI,CAAC,UAAU,CAAA;IAC/C,OAAO,QAAQ,EAAE,CAAC;QAChB,IAAI,QAAQ,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAClC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrC,CAAC;QACD,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAA;IAChC,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC;QACZ,gBAAgB,CAAC,KAAK;YACpB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;KACF,CAAC,CAAA;IACF,4EAA4E;IAC5E,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACvC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAkB,EAClB,UAAkB,EAClB,SAAsB;IAEtB,MAAM,KAAK,GAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;IAC1E,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;IACzC,OAAO,KAAK,CAAC,KAAK,CAAA;AACpB,CAAC;AASD,MAAM,eAAe,GAA2B;IAC9C,QAAQ,CAAC,IAAI;QACX,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;IACD,iBAAiB,CAAC,IAAI,EAAE,KAAK;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;gBAClE,KAAK,CAAC,KAAK,EAAE,CAAA;YACf,CAAC;YACD,OAAM;QACR,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;YAClE,KAAK,CAAC,KAAK,EAAE,CAAA;QACf,CAAC;IACH,CAAC;CACF,CAAA;AAED,SAAS,iBAAiB,CAAC,IAAc,EAAE,QAAkB;IAC3D,IAAI,OAAO,GAAoB,IAAI,CAAC,UAAU,CAAA;IAC9C,OAAO,OAAO,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvC,IACE,OAAO,CAAC,cAAc,EAAE;YACxB,OAAO,CAAC,gBAAgB,EAAE;YAC1B,OAAO,CAAC,gBAAgB,EAAE;YAC1B,OAAO,CAAC,gBAAgB,EAAE;YAC1B,OAAO,CAAC,kBAAkB,EAAE,EAC5B,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAA;IAC9B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { shuffleInPlace } from '
|
|
1
|
+
import { shuffleInPlace } from './random.js';
|
|
2
2
|
// Reserved words and sensitive globals cannot be emitted bare. Zero-width mode
|
|
3
3
|
// makes entries from this same pool legal with ZWNJ padding.
|
|
4
4
|
const RESERVED = new Set([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"string-generator.js","sourceRoot":"","sources":["../../src/utils/string-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"string-generator.js","sourceRoot":"","sources":["../../src/utils/string-generator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webfuscator",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "JavaScript obfuscator built on Babel",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"babel",
|
|
@@ -17,9 +17,6 @@
|
|
|
17
17
|
},
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"author": "Esoware",
|
|
20
|
-
"contentPolicy": {
|
|
21
|
-
"class": "dual-use"
|
|
22
|
-
},
|
|
23
20
|
"repository": {
|
|
24
21
|
"type": "git",
|
|
25
22
|
"url": "git+https://github.com/esoware/webfuscator.git",
|
|
@@ -30,22 +27,23 @@
|
|
|
30
27
|
"dist",
|
|
31
28
|
"src"
|
|
32
29
|
],
|
|
33
|
-
"publishConfig": {
|
|
34
|
-
"access": "public"
|
|
35
|
-
},
|
|
36
30
|
"type": "module",
|
|
37
31
|
"main": "dist/index.js",
|
|
38
32
|
"types": "dist/index.d.ts",
|
|
39
33
|
"exports": {
|
|
40
34
|
".": {
|
|
35
|
+
"source": "./src/index.ts",
|
|
41
36
|
"types": "./dist/index.d.ts",
|
|
42
37
|
"default": "./dist/index.js"
|
|
43
38
|
}
|
|
44
39
|
},
|
|
40
|
+
"publishConfig": {
|
|
41
|
+
"access": "public"
|
|
42
|
+
},
|
|
45
43
|
"scripts": {
|
|
46
44
|
"prepublishOnly": "pnpm --workspace-root check",
|
|
47
45
|
"prepack": "pnpm run build",
|
|
48
|
-
"build": "node --eval \"require('node:fs').rmSync('dist', { force: true, recursive: true })\" && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
|
|
46
|
+
"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",
|
|
49
47
|
"check": "pnpm run typecheck && pnpm run test",
|
|
50
48
|
"test": "vitest run",
|
|
51
49
|
"typecheck": "tsc --noEmit"
|
|
@@ -57,12 +55,15 @@
|
|
|
57
55
|
"@babel/types": "^8.0.4"
|
|
58
56
|
},
|
|
59
57
|
"devDependencies": {
|
|
60
|
-
"@types/node": "
|
|
58
|
+
"@types/node": "catalog:",
|
|
61
59
|
"tsc-alias": "^1.9.2",
|
|
62
|
-
"typescript": "
|
|
60
|
+
"typescript": "catalog:",
|
|
63
61
|
"vitest": "^4.1.11"
|
|
64
62
|
},
|
|
65
63
|
"engines": {
|
|
66
64
|
"node": "^22.18.0 || >=24.11.0"
|
|
65
|
+
},
|
|
66
|
+
"contentPolicy": {
|
|
67
|
+
"class": "dual-use"
|
|
67
68
|
}
|
|
68
69
|
}
|
package/src/analysis/constant.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { Binding, NodePath, Scope } from '@babel/traverse'
|
|
2
2
|
import * as t from '@babel/types'
|
|
3
3
|
|
|
4
|
+
import { enclosingScopeHasDirectEval, isInsideWith } from '../utils/ast'
|
|
4
5
|
import {
|
|
5
6
|
declarationReaches,
|
|
6
7
|
initializerReaches,
|
|
7
8
|
readCrossesFunctionBoundary,
|
|
8
|
-
} from '
|
|
9
|
-
import { isSideEffectFree } from '
|
|
10
|
-
import { enclosingScopeHasDirectEval, isInsideWith } from 'src/utils/ast'
|
|
9
|
+
} from './document-order'
|
|
10
|
+
import { isSideEffectFree } from './purity'
|
|
11
11
|
|
|
12
12
|
export type Evaluation = { known: true; value: unknown } | { known: false }
|
|
13
13
|
|
|
@@ -48,7 +48,7 @@ const EVALUATORS: Partial<Record<t.Node['type'], Evaluator>> = {
|
|
|
48
48
|
if (template.expressions.length > 0) {
|
|
49
49
|
return UNKNOWN
|
|
50
50
|
}
|
|
51
|
-
const
|
|
51
|
+
const quasi = template.quasis[0]
|
|
52
52
|
return { known: true, value: quasi?.value.cooked ?? quasi?.value.raw ?? '' }
|
|
53
53
|
},
|
|
54
54
|
UnaryExpression: evaluateUnary,
|
|
@@ -3,8 +3,8 @@ 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 '
|
|
7
|
-
import { hasAnnexBFunctionAlias, referencesOrWritesVariable } from '
|
|
6
|
+
import { walkOwnFunctionScope } from '../utils/ast'
|
|
7
|
+
import { hasAnnexBFunctionAlias, referencesOrWritesVariable } from '../utils/paths'
|
|
8
8
|
|
|
9
9
|
export interface InlineCandidate {
|
|
10
10
|
name: string
|
|
@@ -47,7 +47,7 @@ export function analyzeInlineability(ast: File): Map<string, InlineCandidate> {
|
|
|
47
47
|
if (!t.isIdentifier(path.node.id)) {
|
|
48
48
|
return
|
|
49
49
|
}
|
|
50
|
-
const
|
|
50
|
+
const init = path.node.init
|
|
51
51
|
if (!t.isFunctionExpression(init)) {
|
|
52
52
|
return
|
|
53
53
|
}
|
|
@@ -267,7 +267,7 @@ const analyzeBodyVisitor: Visitor<AnalyzeBodyState> = {
|
|
|
267
267
|
path.stop()
|
|
268
268
|
},
|
|
269
269
|
Identifier(path, state) {
|
|
270
|
-
const
|
|
270
|
+
const name = path.node.name
|
|
271
271
|
if (
|
|
272
272
|
state.innerFnDepth === 0 &&
|
|
273
273
|
(name === 'arguments' || name === 'eval' || name === state.candidateName)
|
package/src/analysis/purity.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { Binding, NodePath, Scope } from '@babel/traverse'
|
|
2
2
|
import * as t from '@babel/types'
|
|
3
3
|
|
|
4
|
+
import { isInsideWith } from '../utils/ast'
|
|
5
|
+
import { isPrimitiveLiteral } from '../utils/literal'
|
|
4
6
|
import {
|
|
5
7
|
declarationReaches,
|
|
6
8
|
initializerReaches,
|
|
7
9
|
readCrossesFunctionBoundary,
|
|
8
|
-
} from '
|
|
9
|
-
import { isInsideWith } from 'src/utils/ast'
|
|
10
|
-
import { isPrimitiveLiteral } from 'src/utils/literal'
|
|
10
|
+
} from './document-order'
|
|
11
11
|
|
|
12
12
|
// Purity also requires deterministic repetition and no throw. Identifier reads
|
|
13
13
|
// need scope and reference paths to prove resolution, initialization, and the
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
export { obfuscate } from '
|
|
1
|
+
export { obfuscate } from './obfuscator'
|
|
2
2
|
export type {
|
|
3
3
|
ManglePropertiesOptions,
|
|
4
4
|
ObfuscatorOptions,
|
|
5
5
|
PackOptions,
|
|
6
6
|
PropertyNameGenerator,
|
|
7
|
-
|
|
7
|
+
TransformName,
|
|
8
|
+
} from './options'
|
|
9
|
+
export type { StringGeneratorMode, StringGeneratorModeOption } from './utils/string-generator'
|
package/src/obfuscator.ts
CHANGED
|
@@ -3,48 +3,48 @@ import { parse } from '@babel/parser'
|
|
|
3
3
|
import type { ParserOptions } from '@babel/parser'
|
|
4
4
|
import type { File } from '@babel/types'
|
|
5
5
|
|
|
6
|
-
import type { ObfuscatorOptions, TransformContext, TransformName } from '
|
|
7
|
-
import { dotToBracket } from '
|
|
8
|
-
import { expandDestructuring } from '
|
|
9
|
-
import { expandTemplateLiterals } from '
|
|
10
|
-
import { splitSequenceExpressions } from '
|
|
11
|
-
import { splitVariableDeclarations } from '
|
|
12
|
-
import { stringifyObjectKeys } from '
|
|
13
|
-
import { wrapSingleStatements } from '
|
|
14
|
-
import { argumentsToParameters } from '
|
|
15
|
-
import { arrowToFunction } from '
|
|
16
|
-
import { collapseSingleUseTemps } from '
|
|
17
|
-
import { constLetToVar } from '
|
|
18
|
-
import { constToLet } from '
|
|
19
|
-
import { doWhileToWhile } from '
|
|
20
|
-
import { dropConsole } from '
|
|
21
|
-
import { dropDebugger } from '
|
|
22
|
-
import { expandBinaryAssignment } from '
|
|
23
|
-
import { expandLogicalAssignment } from '
|
|
24
|
-
import { extractObjectProperties } from '
|
|
25
|
-
import { foldBuiltinMethods } from '
|
|
26
|
-
import { foldConstants } from '
|
|
27
|
-
import { forToWhile } from '
|
|
28
|
-
import { functionDeclarationToExpression } from '
|
|
29
|
-
import { inlineFunctions } from '
|
|
30
|
-
import { logicalToTernary } from '
|
|
31
|
-
import { mangleProperties } from '
|
|
32
|
-
import { nullishCoalescingToTernary } from '
|
|
33
|
-
import { numbersToStrings } from '
|
|
34
|
-
import { objectMethodToProperty } from '
|
|
35
|
-
import { optionalChainingToTernary } from '
|
|
36
|
-
import { pack } from '
|
|
37
|
-
import { packDeclarationsIntoParameters } from '
|
|
38
|
-
import { removeAnonymousFunctionNames } from '
|
|
39
|
-
import { removeUnreachableCode } from '
|
|
40
|
-
import { removeUnusedCode } from '
|
|
41
|
-
import { renameIdentifiers } from '
|
|
42
|
-
import { specialsToStrings } from '
|
|
43
|
-
import { switchToIf } from '
|
|
44
|
-
import { ternaryToIf } from '
|
|
45
|
-
import { updateToAssignment } from '
|
|
46
|
-
import { yodifyConditions } from '
|
|
47
|
-
import type { StringGeneratorModeOption } from '
|
|
6
|
+
import type { ObfuscatorOptions, TransformContext, TransformName } from './options'
|
|
7
|
+
import { dotToBracket } from './preparation/dot-to-bracket'
|
|
8
|
+
import { expandDestructuring } from './preparation/expand-destructuring'
|
|
9
|
+
import { expandTemplateLiterals } from './preparation/expand-template-literals'
|
|
10
|
+
import { splitSequenceExpressions } from './preparation/split-sequence-expressions'
|
|
11
|
+
import { splitVariableDeclarations } from './preparation/split-variable-declarations'
|
|
12
|
+
import { stringifyObjectKeys } from './preparation/stringify-object-keys'
|
|
13
|
+
import { wrapSingleStatements } from './preparation/wrap-single-statements'
|
|
14
|
+
import { argumentsToParameters } from './transforms/arguments-to-parameters'
|
|
15
|
+
import { arrowToFunction } from './transforms/arrow-to-function'
|
|
16
|
+
import { collapseSingleUseTemps } from './transforms/collapse-single-use-temps'
|
|
17
|
+
import { constLetToVar } from './transforms/const-let-to-var'
|
|
18
|
+
import { constToLet } from './transforms/const-to-let'
|
|
19
|
+
import { doWhileToWhile } from './transforms/do-while-to-while'
|
|
20
|
+
import { dropConsole } from './transforms/drop-console'
|
|
21
|
+
import { dropDebugger } from './transforms/drop-debugger'
|
|
22
|
+
import { expandBinaryAssignment } from './transforms/expand-binary-assignment'
|
|
23
|
+
import { expandLogicalAssignment } from './transforms/expand-logical-assignment'
|
|
24
|
+
import { extractObjectProperties } from './transforms/extract-object-properties'
|
|
25
|
+
import { foldBuiltinMethods } from './transforms/fold-builtin-methods'
|
|
26
|
+
import { foldConstants } from './transforms/fold-constants'
|
|
27
|
+
import { forToWhile } from './transforms/for-to-while'
|
|
28
|
+
import { functionDeclarationToExpression } from './transforms/function-declaration-to-expression'
|
|
29
|
+
import { inlineFunctions } from './transforms/inline-functions'
|
|
30
|
+
import { logicalToTernary } from './transforms/logical-to-ternary'
|
|
31
|
+
import { mangleProperties } from './transforms/mangle-properties'
|
|
32
|
+
import { nullishCoalescingToTernary } from './transforms/nullish-coalescing-to-ternary'
|
|
33
|
+
import { numbersToStrings } from './transforms/numbers-to-strings'
|
|
34
|
+
import { objectMethodToProperty } from './transforms/object-method-to-property'
|
|
35
|
+
import { optionalChainingToTernary } from './transforms/optional-chaining-to-ternary'
|
|
36
|
+
import { pack } from './transforms/pack'
|
|
37
|
+
import { packDeclarationsIntoParameters } from './transforms/pack-declarations-into-parameters'
|
|
38
|
+
import { removeAnonymousFunctionNames } from './transforms/remove-anonymous-function-names'
|
|
39
|
+
import { removeUnreachableCode } from './transforms/remove-unreachable-code'
|
|
40
|
+
import { removeUnusedCode } from './transforms/remove-unused-code'
|
|
41
|
+
import { renameIdentifiers } from './transforms/rename-identifiers'
|
|
42
|
+
import { specialsToStrings } from './transforms/specials-to-strings'
|
|
43
|
+
import { switchToIf } from './transforms/switch-to-if'
|
|
44
|
+
import { ternaryToIf } from './transforms/ternary-to-if'
|
|
45
|
+
import { updateToAssignment } from './transforms/update-to-assignment'
|
|
46
|
+
import { yodifyConditions } from './transforms/yodify-conditions'
|
|
47
|
+
import type { StringGeneratorModeOption } from './utils/string-generator'
|
|
48
48
|
|
|
49
49
|
const parserOptions: ParserOptions = { sourceType: 'unambiguous' }
|
|
50
50
|
|
package/src/options.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { NodePath, Scope } from '@babel/traverse'
|
|
|
3
3
|
import * as t from '@babel/types'
|
|
4
4
|
import type { File } from '@babel/types'
|
|
5
5
|
|
|
6
|
-
import { enclosingScopeHasDirectEval, isInsideWith } from '
|
|
6
|
+
import { enclosingScopeHasDirectEval, isInsideWith } from '../utils/ast'
|
|
7
7
|
|
|
8
8
|
type Kind = t.VariableDeclaration['kind']
|
|
9
9
|
|
|
@@ -47,12 +47,13 @@ const visitor = {
|
|
|
47
47
|
return
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
const
|
|
50
|
+
const kind = path.node.kind
|
|
51
51
|
const replacement: t.Statement[] = []
|
|
52
52
|
let changed = false
|
|
53
53
|
|
|
54
54
|
for (const declarator of path.node.declarations) {
|
|
55
|
-
const
|
|
55
|
+
const id = declarator.id
|
|
56
|
+
const init = declarator.init
|
|
56
57
|
|
|
57
58
|
if (
|
|
58
59
|
!init ||
|
|
@@ -135,7 +136,7 @@ function expandPattern(
|
|
|
135
136
|
if (t.isRestElement(prop)) {
|
|
136
137
|
continue
|
|
137
138
|
}
|
|
138
|
-
const
|
|
139
|
+
const key = prop.key
|
|
139
140
|
const useComputed = prop.computed || !t.isIdentifier(key)
|
|
140
141
|
const access = t.memberExpression(
|
|
141
142
|
t.cloneNode(src),
|
|
@@ -3,7 +3,7 @@ import type { Visitor } from '@babel/traverse'
|
|
|
3
3
|
import * as t from '@babel/types'
|
|
4
4
|
import type { File } from '@babel/types'
|
|
5
5
|
|
|
6
|
-
import { isInDirectivePrologue } from '
|
|
6
|
+
import { isInDirectivePrologue } from '../utils/ast'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Rewrites safe template literals as string concatenation. Tagged templates
|
|
@@ -31,12 +31,13 @@ export function expandTemplateLiterals(ast: File): void {
|
|
|
31
31
|
|
|
32
32
|
const visitor: Visitor = {
|
|
33
33
|
TemplateLiteral(path) {
|
|
34
|
-
const
|
|
34
|
+
const parent = path.parent
|
|
35
35
|
if (t.isTaggedTemplateExpression(parent) && parent.quasi === path.node) {
|
|
36
36
|
return
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
const
|
|
39
|
+
const quasis = path.node.quasis
|
|
40
|
+
const expressions = path.node.expressions
|
|
40
41
|
|
|
41
42
|
if (expressions.length === 0) {
|
|
42
43
|
// Rewriting a leading template as a string would create a directive.
|
|
@@ -3,7 +3,7 @@ import type { NodePath } from '@babel/traverse'
|
|
|
3
3
|
import * as t from '@babel/types'
|
|
4
4
|
import type { File } from '@babel/types'
|
|
5
5
|
|
|
6
|
-
import { isInDirectivePrologue } from '
|
|
6
|
+
import { isInDirectivePrologue } from '../utils/ast'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Splits comma-sequenced expression statements into one statement each.
|
|
@@ -30,7 +30,7 @@ const visitor = {
|
|
|
30
30
|
return
|
|
31
31
|
}
|
|
32
32
|
// Splitting a leading string out of a sequence could create a directive.
|
|
33
|
-
const
|
|
33
|
+
const first = path.node.expression.expressions[0]
|
|
34
34
|
if (t.isStringLiteral(first) && isInDirectivePrologue(path)) {
|
|
35
35
|
return
|
|
36
36
|
}
|
|
@@ -32,7 +32,7 @@ const visitor = {
|
|
|
32
32
|
if (path.node.declarations.length <= 1) {
|
|
33
33
|
return
|
|
34
34
|
}
|
|
35
|
-
const
|
|
35
|
+
const kind = path.node.kind
|
|
36
36
|
const replacements = path.node.declarations.map((decl) => t.variableDeclaration(kind, [decl]))
|
|
37
37
|
path.replaceWithMultiple(replacements)
|
|
38
38
|
},
|
|
@@ -3,7 +3,7 @@ import type { NodePath } from '@babel/traverse'
|
|
|
3
3
|
import * as t from '@babel/types'
|
|
4
4
|
import type { File } from '@babel/types'
|
|
5
5
|
|
|
6
|
-
import { isProtoKey } from '
|
|
6
|
+
import { isProtoKey } from '../utils/ast'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Rewrites property keys in object literals and classes as computed strings.
|
|
@@ -57,7 +57,7 @@ function keyOrderIsSpreadSensitive(path: NodePath<t.ObjectProperty | t.ObjectMet
|
|
|
57
57
|
if (!object || !object.isObjectExpression()) {
|
|
58
58
|
return false
|
|
59
59
|
}
|
|
60
|
-
const
|
|
60
|
+
const properties = object.node.properties
|
|
61
61
|
const hasSpread = properties.some((prop) => t.isSpreadElement(prop))
|
|
62
62
|
if (!hasSpread) {
|
|
63
63
|
return false
|
|
@@ -36,7 +36,7 @@ export function wrapSingleStatements(ast: File): void {
|
|
|
36
36
|
|
|
37
37
|
const visitor = {
|
|
38
38
|
IfStatement(path: { node: t.IfStatement }) {
|
|
39
|
-
const
|
|
39
|
+
const node = path.node
|
|
40
40
|
if (!t.isBlockStatement(node.consequent)) {
|
|
41
41
|
node.consequent = t.blockStatement([node.consequent])
|
|
42
42
|
}
|
|
@@ -48,7 +48,7 @@ const visitor = {
|
|
|
48
48
|
wrapLoopBody(path.node)
|
|
49
49
|
},
|
|
50
50
|
ArrowFunctionExpression(path: { node: t.ArrowFunctionExpression }) {
|
|
51
|
-
const
|
|
51
|
+
const node = path.node
|
|
52
52
|
if (!t.isBlockStatement(node.body)) {
|
|
53
53
|
node.body = t.blockStatement([t.returnStatement(node.body)])
|
|
54
54
|
node.expression = false
|
|
@@ -2,10 +2,10 @@ import type { NodePath, Visitor } from '@babel/traverse'
|
|
|
2
2
|
import * as t from '@babel/types'
|
|
3
3
|
import type { File } from '@babel/types'
|
|
4
4
|
|
|
5
|
-
import { hasDuplicateParamNames } from '
|
|
6
|
-
import { traverseForChanges } from '
|
|
7
|
-
import type { ChangeState } from '
|
|
8
|
-
import { isInStrictContext } from '
|
|
5
|
+
import { hasDuplicateParamNames } from '../utils/ast'
|
|
6
|
+
import { traverseForChanges } from '../utils/change-tracking'
|
|
7
|
+
import type { ChangeState } from '../utils/change-tracking'
|
|
8
|
+
import { isInStrictContext } from '../utils/paths'
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Replaces `arguments[i]` reads with their mapped parameter in sloppy functions
|
|
@@ -113,7 +113,7 @@ function processFunction(path: NodePath<t.Function>): boolean {
|
|
|
113
113
|
if (path.isArrowFunctionExpression()) {
|
|
114
114
|
return false
|
|
115
115
|
}
|
|
116
|
-
const
|
|
116
|
+
const params = path.node.params
|
|
117
117
|
// Rest, defaults, and destructuring make `arguments` unmapped.
|
|
118
118
|
if (!params.every((param) => t.isIdentifier(param))) {
|
|
119
119
|
return false
|
|
@@ -2,9 +2,9 @@ import type { NodePath, Visitor } from '@babel/traverse'
|
|
|
2
2
|
import * as t from '@babel/types'
|
|
3
3
|
import type { File } from '@babel/types'
|
|
4
4
|
|
|
5
|
-
import { enclosingScopeHasDirectEval, isInsideWith } from '
|
|
6
|
-
import { traverseForChanges } from '
|
|
7
|
-
import type { ChangeState } from '
|
|
5
|
+
import { enclosingScopeHasDirectEval, isInsideWith } from '../utils/ast'
|
|
6
|
+
import { traverseForChanges } from '../utils/change-tracking'
|
|
7
|
+
import type { ChangeState } from '../utils/change-tracking'
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Lowers arrows with Babel's capture-aware `arrowFunctionToExpression`. Arrows
|
|
@@ -3,17 +3,17 @@ import type { Binding, NodePath, Scope } from '@babel/traverse'
|
|
|
3
3
|
import * as t from '@babel/types'
|
|
4
4
|
import type { File } from '@babel/types'
|
|
5
5
|
|
|
6
|
-
import { evaluateConstant } from '
|
|
6
|
+
import { evaluateConstant } from '../analysis/constant'
|
|
7
7
|
import {
|
|
8
8
|
declarationReaches,
|
|
9
9
|
initializerReaches,
|
|
10
10
|
readCrossesFunctionBoundary,
|
|
11
|
-
} from '
|
|
12
|
-
import { isPure } from '
|
|
13
|
-
import { isInsideWith } from '
|
|
14
|
-
import { reorderableToStatement } from '
|
|
15
|
-
import { valueToLiteral } from '
|
|
16
|
-
import { isCalleeOrTagOf } from '
|
|
11
|
+
} from '../analysis/document-order'
|
|
12
|
+
import { isPure } from '../analysis/purity'
|
|
13
|
+
import { isInsideWith } from '../utils/ast'
|
|
14
|
+
import { reorderableToStatement } from '../utils/evaluation-order'
|
|
15
|
+
import { valueToLiteral } from '../utils/literal'
|
|
16
|
+
import { isCalleeOrTagOf } from '../utils/paths'
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Drops single-use temporaries through substitution, direct branch writes, or
|
|
@@ -125,7 +125,7 @@ function trySubstituteSingleUse(
|
|
|
125
125
|
binding: Binding,
|
|
126
126
|
declaratorPath: NodePath<t.VariableDeclarator>,
|
|
127
127
|
): boolean {
|
|
128
|
-
const
|
|
128
|
+
const readPath = binding.referencePaths[0]
|
|
129
129
|
if (!readPath || !isPathLive(readPath)) {
|
|
130
130
|
return false
|
|
131
131
|
}
|
|
@@ -138,7 +138,7 @@ function trySubstituteSingleUse(
|
|
|
138
138
|
return false
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
const
|
|
141
|
+
const init = declaratorPath.node.init
|
|
142
142
|
let writeStmt: NodePath
|
|
143
143
|
let writeValueOwner: NodePath
|
|
144
144
|
let writeRhs: t.Expression
|
|
@@ -255,7 +255,7 @@ function tryRenameWritesToReader(
|
|
|
255
255
|
return false
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
const
|
|
258
|
+
const readPath = binding.referencePaths[0]
|
|
259
259
|
if (!readPath || !isPathLive(readPath)) {
|
|
260
260
|
return false
|
|
261
261
|
}
|
|
@@ -389,7 +389,7 @@ function tryScatterIntoTerminator(
|
|
|
389
389
|
return false
|
|
390
390
|
}
|
|
391
391
|
|
|
392
|
-
const
|
|
392
|
+
const readPath = binding.referencePaths[0]
|
|
393
393
|
if (!readPath || !isPathLive(readPath)) {
|
|
394
394
|
return false
|
|
395
395
|
}
|
|
@@ -648,7 +648,7 @@ function combineFall(a: boolean | null, b: boolean | null): boolean | null {
|
|
|
648
648
|
// Apart from redirected writes, the span must run no user code or observations.
|
|
649
649
|
// Redirected right sides must also be pure.
|
|
650
650
|
function spanStatementIsInert(path: NodePath, tempBinding: Binding): boolean {
|
|
651
|
-
const
|
|
651
|
+
const node = path.node
|
|
652
652
|
if (t.isEmptyStatement(node) || t.isBreakStatement(node) || t.isContinueStatement(node)) {
|
|
653
653
|
return true
|
|
654
654
|
}
|
|
@@ -715,7 +715,7 @@ function tryPropagateConstant(
|
|
|
715
715
|
return false
|
|
716
716
|
}
|
|
717
717
|
|
|
718
|
-
const
|
|
718
|
+
const init = declaratorPath.node.init
|
|
719
719
|
let writeRhs: t.Expression
|
|
720
720
|
let writeRhsPath: NodePath
|
|
721
721
|
let writeStmtToRemove: NodePath | null
|
|
@@ -886,7 +886,7 @@ function subtreeReadsBinding(stmtPath: NodePath, target: Binding): boolean {
|
|
|
886
886
|
}
|
|
887
887
|
|
|
888
888
|
function isStatementMovementSafe(path: NodePath): boolean {
|
|
889
|
-
const
|
|
889
|
+
const node = path.node
|
|
890
890
|
if (t.isEmptyStatement(node)) {
|
|
891
891
|
return true
|
|
892
892
|
}
|