webfuscator 1.0.1 → 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.
Files changed (156) hide show
  1. package/README.md +0 -2
  2. package/dist/analysis/constant.js +3 -3
  3. package/dist/analysis/constant.js.map +1 -1
  4. package/dist/analysis/inlineability.js +2 -2
  5. package/dist/analysis/inlineability.js.map +1 -1
  6. package/dist/analysis/purity.js +1 -1
  7. package/dist/analysis/purity.js.map +1 -1
  8. package/dist/index.d.ts +2 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/obfuscator.d.ts.map +1 -1
  12. package/dist/obfuscator.js +14 -0
  13. package/dist/obfuscator.js.map +1 -1
  14. package/dist/options.d.ts +14 -2
  15. package/dist/options.d.ts.map +1 -1
  16. package/dist/preparation/expand-destructuring.js +4 -3
  17. package/dist/preparation/expand-destructuring.js.map +1 -1
  18. package/dist/preparation/expand-template-literals.js +3 -2
  19. package/dist/preparation/expand-template-literals.js.map +1 -1
  20. package/dist/preparation/split-sequence-expressions.js +1 -1
  21. package/dist/preparation/split-sequence-expressions.js.map +1 -1
  22. package/dist/preparation/split-variable-declarations.js +1 -1
  23. package/dist/preparation/split-variable-declarations.js.map +1 -1
  24. package/dist/preparation/stringify-object-keys.js +1 -1
  25. package/dist/preparation/stringify-object-keys.js.map +1 -1
  26. package/dist/preparation/wrap-single-statements.js +2 -2
  27. package/dist/preparation/wrap-single-statements.js.map +1 -1
  28. package/dist/transforms/arguments-to-parameters.js +1 -1
  29. package/dist/transforms/arguments-to-parameters.js.map +1 -1
  30. package/dist/transforms/arrow-to-function.js.map +1 -1
  31. package/dist/transforms/collapse-single-use-temps.js +7 -7
  32. package/dist/transforms/collapse-single-use-temps.js.map +1 -1
  33. package/dist/transforms/const-let-to-var.js +3 -3
  34. package/dist/transforms/const-let-to-var.js.map +1 -1
  35. package/dist/transforms/const-to-let.js.map +1 -1
  36. package/dist/transforms/do-while-to-while.js +3 -3
  37. package/dist/transforms/do-while-to-while.js.map +1 -1
  38. package/dist/transforms/drop-console.js +4 -3
  39. package/dist/transforms/drop-console.js.map +1 -1
  40. package/dist/transforms/drop-debugger.js.map +1 -1
  41. package/dist/transforms/expand-binary-assignment.js +5 -3
  42. package/dist/transforms/expand-binary-assignment.js.map +1 -1
  43. package/dist/transforms/expand-logical-assignment.js +5 -3
  44. package/dist/transforms/expand-logical-assignment.js.map +1 -1
  45. package/dist/transforms/extract-object-properties.js +7 -7
  46. package/dist/transforms/extract-object-properties.js.map +1 -1
  47. package/dist/transforms/fold-builtin-methods.js +16 -15
  48. package/dist/transforms/fold-builtin-methods.js.map +1 -1
  49. package/dist/transforms/fold-constants.js +2 -2
  50. package/dist/transforms/fold-constants.js.map +1 -1
  51. package/dist/transforms/for-to-while.js +5 -5
  52. package/dist/transforms/for-to-while.js.map +1 -1
  53. package/dist/transforms/function-declaration-to-expression.js +3 -3
  54. package/dist/transforms/function-declaration-to-expression.js.map +1 -1
  55. package/dist/transforms/inline-functions.js +7 -7
  56. package/dist/transforms/inline-functions.js.map +1 -1
  57. package/dist/transforms/logical-to-ternary.js +2 -2
  58. package/dist/transforms/logical-to-ternary.js.map +1 -1
  59. package/dist/transforms/mangle-properties.d.ts.map +1 -1
  60. package/dist/transforms/mangle-properties.js +35 -86
  61. package/dist/transforms/mangle-properties.js.map +1 -1
  62. package/dist/transforms/nullish-coalescing-to-ternary.js +2 -2
  63. package/dist/transforms/nullish-coalescing-to-ternary.js.map +1 -1
  64. package/dist/transforms/numbers-to-strings.js +2 -2
  65. package/dist/transforms/numbers-to-strings.js.map +1 -1
  66. package/dist/transforms/object-method-to-property.js +1 -1
  67. package/dist/transforms/object-method-to-property.js.map +1 -1
  68. package/dist/transforms/optional-chaining-to-ternary.js +7 -4
  69. package/dist/transforms/optional-chaining-to-ternary.js.map +1 -1
  70. package/dist/transforms/pack-declarations-into-parameters.js +2 -2
  71. package/dist/transforms/pack-declarations-into-parameters.js.map +1 -1
  72. package/dist/transforms/pack.d.ts +33 -0
  73. package/dist/transforms/pack.d.ts.map +1 -0
  74. package/dist/transforms/pack.js +265 -0
  75. package/dist/transforms/pack.js.map +1 -0
  76. package/dist/transforms/remove-anonymous-function-names.js +3 -3
  77. package/dist/transforms/remove-anonymous-function-names.js.map +1 -1
  78. package/dist/transforms/remove-unreachable-code.js +1 -1
  79. package/dist/transforms/remove-unreachable-code.js.map +1 -1
  80. package/dist/transforms/remove-unused-code.js +4 -4
  81. package/dist/transforms/remove-unused-code.js.map +1 -1
  82. package/dist/transforms/rename-identifiers.d.ts.map +1 -1
  83. package/dist/transforms/rename-identifiers.js +4 -3
  84. package/dist/transforms/rename-identifiers.js.map +1 -1
  85. package/dist/transforms/specials-to-strings.d.ts.map +1 -1
  86. package/dist/transforms/specials-to-strings.js +2 -2
  87. package/dist/transforms/specials-to-strings.js.map +1 -1
  88. package/dist/transforms/switch-to-if.js +7 -7
  89. package/dist/transforms/switch-to-if.js.map +1 -1
  90. package/dist/transforms/ternary-to-if.js +7 -4
  91. package/dist/transforms/ternary-to-if.js.map +1 -1
  92. package/dist/transforms/update-to-assignment.js +4 -2
  93. package/dist/transforms/update-to-assignment.js.map +1 -1
  94. package/dist/transforms/yodify-conditions.js +3 -3
  95. package/dist/transforms/yodify-conditions.js.map +1 -1
  96. package/dist/utils/ast.d.ts.map +1 -1
  97. package/dist/utils/ast.js +7 -2
  98. package/dist/utils/ast.js.map +1 -1
  99. package/dist/utils/evaluation-order.js.map +1 -1
  100. package/dist/utils/logical-lowering.js +2 -2
  101. package/dist/utils/logical-lowering.js.map +1 -1
  102. package/dist/utils/loop-lowering.js +1 -1
  103. package/dist/utils/loop-lowering.js.map +1 -1
  104. package/dist/utils/string-generator.js +1 -1
  105. package/dist/utils/string-generator.js.map +1 -1
  106. package/package.json +11 -10
  107. package/src/analysis/constant.ts +4 -4
  108. package/src/analysis/inlineability.ts +4 -4
  109. package/src/analysis/purity.ts +3 -3
  110. package/src/index.ts +9 -2
  111. package/src/obfuscator.ts +57 -41
  112. package/src/options.ts +16 -2
  113. package/src/preparation/expand-destructuring.ts +5 -4
  114. package/src/preparation/expand-template-literals.ts +4 -3
  115. package/src/preparation/split-sequence-expressions.ts +2 -2
  116. package/src/preparation/split-variable-declarations.ts +1 -1
  117. package/src/preparation/stringify-object-keys.ts +2 -2
  118. package/src/preparation/wrap-single-statements.ts +2 -2
  119. package/src/transforms/arguments-to-parameters.ts +5 -5
  120. package/src/transforms/arrow-to-function.ts +3 -3
  121. package/src/transforms/collapse-single-use-temps.ts +14 -14
  122. package/src/transforms/const-let-to-var.ts +6 -6
  123. package/src/transforms/const-to-let.ts +4 -4
  124. package/src/transforms/do-while-to-while.ts +6 -6
  125. package/src/transforms/drop-console.ts +8 -7
  126. package/src/transforms/drop-debugger.ts +2 -2
  127. package/src/transforms/expand-binary-assignment.ts +8 -6
  128. package/src/transforms/expand-logical-assignment.ts +8 -6
  129. package/src/transforms/extract-object-properties.ts +12 -12
  130. package/src/transforms/fold-builtin-methods.ts +20 -19
  131. package/src/transforms/fold-constants.ts +8 -8
  132. package/src/transforms/for-to-while.ts +8 -8
  133. package/src/transforms/function-declaration-to-expression.ts +5 -5
  134. package/src/transforms/inline-functions.ts +14 -14
  135. package/src/transforms/logical-to-ternary.ts +7 -7
  136. package/src/transforms/mangle-properties.ts +43 -97
  137. package/src/transforms/nullish-coalescing-to-ternary.ts +6 -6
  138. package/src/transforms/numbers-to-strings.ts +4 -4
  139. package/src/transforms/object-method-to-property.ts +4 -4
  140. package/src/transforms/optional-chaining-to-ternary.ts +10 -7
  141. package/src/transforms/pack-declarations-into-parameters.ts +7 -7
  142. package/src/transforms/pack.ts +340 -0
  143. package/src/transforms/remove-anonymous-function-names.ts +5 -5
  144. package/src/transforms/remove-unreachable-code.ts +3 -3
  145. package/src/transforms/remove-unused-code.ts +8 -8
  146. package/src/transforms/rename-identifiers.ts +9 -8
  147. package/src/transforms/specials-to-strings.ts +7 -7
  148. package/src/transforms/switch-to-if.ts +12 -12
  149. package/src/transforms/ternary-to-if.ts +12 -9
  150. package/src/transforms/update-to-assignment.ts +7 -5
  151. package/src/transforms/yodify-conditions.ts +6 -6
  152. package/src/utils/ast.ts +9 -2
  153. package/src/utils/evaluation-order.ts +1 -1
  154. package/src/utils/logical-lowering.ts +3 -3
  155. package/src/utils/loop-lowering.ts +1 -1
  156. package/src/utils/string-generator.ts +1 -1
@@ -2,9 +2,9 @@ import type { Visitor } from '@babel/traverse'
2
2
  import * as t from '@babel/types'
3
3
  import type { File } from '@babel/types'
4
4
 
5
- import { traverseForChanges } from 'src/utils/change-tracking'
6
- import type { ChangeState } from 'src/utils/change-tracking'
7
- import { isLiteralShaped } from 'src/utils/literal'
5
+ import { traverseForChanges } from '../utils/change-tracking'
6
+ import type { ChangeState } from '../utils/change-tracking'
7
+ import { isLiteralShaped } from '../utils/literal'
8
8
 
9
9
  /**
10
10
  * Moves a safe literal-shaped right operand to the left of a comparison.
@@ -31,7 +31,7 @@ export function yodifyConditions(ast: File): boolean {
31
31
 
32
32
  const visitor: Visitor<ChangeState> = {
33
33
  BinaryExpression(path, state) {
34
- const { node } = path
34
+ const node = path.node
35
35
  const op = node.operator
36
36
  if (!isComparisonOp(op)) {
37
37
  return
@@ -51,8 +51,8 @@ const visitor: Visitor<ChangeState> = {
51
51
  return
52
52
  }
53
53
 
54
- const { left } = node
55
- const { right } = node
54
+ const left = node.left
55
+ const right = node.right
56
56
  node.left = right
57
57
  node.right = left
58
58
  const flipped = RELATIONAL_FLIP[op]
package/src/utils/ast.ts CHANGED
@@ -13,7 +13,8 @@ export function isInDirectivePrologue(path: NodePath): boolean {
13
13
  if (!inBody) {
14
14
  return false
15
15
  }
16
- const { container, key: index } = path
16
+ const container = path.container
17
+ const index = path.key
17
18
  if (!Array.isArray(container) || typeof index !== 'number') {
18
19
  return false
19
20
  }
@@ -125,5 +126,11 @@ function ownScopeHasDirectEval(owner: t.Node): boolean {
125
126
  }
126
127
 
127
128
  export function isDirectEvalCall(node: t.Node): boolean {
128
- return t.isCallExpression(node) && t.isIdentifier(node.callee) && node.callee.name === 'eval'
129
+ // `eval?.(...)` is an OptionalCallExpression yet still a direct eval, so both
130
+ // call node shapes count.
131
+ return (
132
+ (t.isCallExpression(node) || t.isOptionalCallExpression(node)) &&
133
+ t.isIdentifier(node.callee) &&
134
+ node.callee.name === 'eval'
135
+ )
129
136
  }
@@ -1,7 +1,7 @@
1
1
  import type { NodePath } from '@babel/traverse'
2
2
  import * as t from '@babel/types'
3
3
 
4
- import { isPure } from 'src/analysis/purity'
4
+ import { isPure } from '../analysis/purity'
5
5
 
6
6
  // Moving a gated node can change whether it runs.
7
7
  export function isConditionalGate(parent: NodePath, cur: NodePath): boolean {
@@ -1,8 +1,8 @@
1
1
  import type { NodePath } from '@babel/traverse'
2
2
  import * as t from '@babel/types'
3
3
 
4
- import { isSideEffectFree } from 'src/analysis/purity'
5
- import { isStandaloneDeclaration } from 'src/utils/paths'
4
+ import { isSideEffectFree } from '../analysis/purity'
5
+ import { isStandaloneDeclaration } from './paths'
6
6
 
7
7
  // Lowers a short-circuit expression assigned to a bare identifier:
8
8
  //
@@ -15,7 +15,7 @@ export function lowerLogicalWriteStatement(
15
15
  path: NodePath<t.LogicalExpression>,
16
16
  fallbackTest: (target: t.Identifier) => t.Expression,
17
17
  ): boolean {
18
- const { node } = path
18
+ const node = path.node
19
19
  const parent = path.parentPath
20
20
  if (!parent) {
21
21
  return false
@@ -76,7 +76,7 @@ const redirectVisitor: Visitor<RedirectState> = {
76
76
  path.skip()
77
77
  },
78
78
  ContinueStatement(path, state) {
79
- const { label } = path.node
79
+ const label = path.node.label
80
80
  if (!label) {
81
81
  if (!hasInterposedLoop(path, state.rootPath)) {
82
82
  path.replaceWith(t.breakStatement(t.identifier(state.innerLabel)))
@@ -1,4 +1,4 @@
1
- import { shuffleInPlace } from 'src/utils/random'
1
+ import { shuffleInPlace } from './random'
2
2
 
3
3
  /**
4
4
  * Identifier styles supported by `StringGenerator`. An array chooses a style