js-confuser 1.7.1 → 1.7.2

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 (123) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +12 -27
  3. package/dist/compiler.js +2 -8
  4. package/dist/constants.js +17 -10
  5. package/dist/index.js +7 -30
  6. package/dist/obfuscator.js +15 -62
  7. package/dist/options.js +21 -38
  8. package/dist/order.js +4 -7
  9. package/dist/parser.js +5 -13
  10. package/dist/precedence.js +6 -8
  11. package/dist/presets.js +4 -6
  12. package/dist/probability.js +13 -24
  13. package/dist/templates/bufferToString.js +100 -5
  14. package/dist/templates/crash.js +51 -9
  15. package/dist/templates/es5.js +125 -6
  16. package/dist/templates/functionLength.js +24 -6
  17. package/dist/templates/globals.js +9 -0
  18. package/dist/templates/template.js +71 -30
  19. package/dist/transforms/antiTooling.js +26 -22
  20. package/dist/transforms/calculator.js +18 -54
  21. package/dist/transforms/controlFlowFlattening/controlFlowFlattening.js +236 -333
  22. package/dist/transforms/controlFlowFlattening/expressionObfuscation.js +46 -25
  23. package/dist/transforms/deadCode.js +528 -27
  24. package/dist/transforms/dispatcher.js +106 -110
  25. package/dist/transforms/es5/antiClass.js +70 -44
  26. package/dist/transforms/es5/antiDestructuring.js +14 -38
  27. package/dist/transforms/es5/antiES6Object.js +39 -48
  28. package/dist/transforms/es5/antiSpreadOperator.js +5 -14
  29. package/dist/transforms/es5/antiTemplate.js +10 -19
  30. package/dist/transforms/es5/es5.js +7 -40
  31. package/dist/transforms/extraction/classExtraction.js +83 -0
  32. package/dist/transforms/extraction/duplicateLiteralsRemoval.js +41 -80
  33. package/dist/transforms/extraction/objectExtraction.js +24 -56
  34. package/dist/transforms/finalizer.js +6 -20
  35. package/dist/transforms/flatten.js +51 -99
  36. package/dist/transforms/identifier/globalAnalysis.js +8 -26
  37. package/dist/transforms/identifier/globalConcealing.js +35 -54
  38. package/dist/transforms/identifier/movedDeclarations.js +66 -38
  39. package/dist/transforms/identifier/renameVariables.js +29 -68
  40. package/dist/transforms/identifier/variableAnalysis.js +21 -48
  41. package/dist/transforms/lock/antiDebug.js +20 -25
  42. package/dist/transforms/lock/integrity.js +48 -47
  43. package/dist/transforms/lock/lock.js +62 -113
  44. package/dist/transforms/minify.js +77 -108
  45. package/dist/transforms/opaquePredicates.js +11 -48
  46. package/dist/transforms/preparation.js +17 -50
  47. package/dist/transforms/renameLabels.js +5 -22
  48. package/dist/transforms/rgf.js +93 -69
  49. package/dist/transforms/shuffle.js +41 -46
  50. package/dist/transforms/stack.js +35 -98
  51. package/dist/transforms/string/encoding.js +73 -27
  52. package/dist/transforms/string/stringCompression.js +44 -68
  53. package/dist/transforms/string/stringConcealing.js +125 -134
  54. package/dist/transforms/string/stringEncoding.js +6 -26
  55. package/dist/transforms/string/stringSplitting.js +5 -30
  56. package/dist/transforms/transform.js +50 -100
  57. package/dist/traverse.js +11 -18
  58. package/dist/util/compare.js +27 -29
  59. package/dist/util/gen.js +32 -86
  60. package/dist/util/guard.js +0 -1
  61. package/dist/util/identifiers.js +9 -72
  62. package/dist/util/insert.js +27 -77
  63. package/dist/util/math.js +0 -3
  64. package/dist/util/object.js +3 -7
  65. package/dist/util/random.js +5 -36
  66. package/dist/util/scope.js +6 -3
  67. package/package.json +3 -3
  68. package/src/constants.ts +12 -0
  69. package/src/options.ts +13 -0
  70. package/src/order.ts +2 -2
  71. package/src/templates/bufferToString.ts +49 -11
  72. package/src/templates/functionLength.ts +21 -3
  73. package/src/templates/globals.ts +3 -0
  74. package/src/templates/template.ts +85 -25
  75. package/src/transforms/antiTooling.ts +33 -11
  76. package/src/transforms/controlFlowFlattening/controlFlowFlattening.ts +2 -2
  77. package/src/transforms/controlFlowFlattening/expressionObfuscation.ts +46 -10
  78. package/src/transforms/deadCode.ts +0 -16
  79. package/src/transforms/dispatcher.ts +91 -69
  80. package/src/transforms/es5/antiClass.ts +10 -1
  81. package/src/transforms/extraction/classExtraction.ts +168 -0
  82. package/src/transforms/extraction/duplicateLiteralsRemoval.ts +9 -10
  83. package/src/transforms/extraction/objectExtraction.ts +4 -15
  84. package/src/transforms/flatten.ts +20 -5
  85. package/src/transforms/identifier/globalConcealing.ts +29 -65
  86. package/src/transforms/identifier/movedDeclarations.ts +90 -24
  87. package/src/transforms/minify.ts +27 -12
  88. package/src/transforms/rgf.ts +94 -5
  89. package/src/transforms/stack.ts +12 -3
  90. package/src/transforms/string/encoding.ts +85 -51
  91. package/src/transforms/string/stringCompression.ts +5 -8
  92. package/src/transforms/string/stringConcealing.ts +139 -113
  93. package/src/transforms/string/stringEncoding.ts +1 -2
  94. package/src/transforms/string/stringSplitting.ts +1 -2
  95. package/src/transforms/transform.ts +30 -1
  96. package/src/util/compare.ts +39 -5
  97. package/src/util/gen.ts +10 -3
  98. package/src/util/insert.ts +17 -0
  99. package/src/util/scope.ts +14 -2
  100. package/test/code/Cash.test.ts +10 -4
  101. package/test/code/StrictMode.src.js +65 -0
  102. package/test/code/StrictMode.test.js +37 -0
  103. package/test/compare.test.ts +62 -2
  104. package/test/options.test.ts +111 -55
  105. package/test/transforms/controlFlowFlattening/expressionObfuscation.test.ts +37 -18
  106. package/test/transforms/dispatcher.test.ts +55 -0
  107. package/test/transforms/extraction/classExtraction.test.ts +86 -0
  108. package/test/transforms/extraction/duplicateLiteralsRemoval.test.ts +8 -0
  109. package/test/transforms/extraction/objectExtraction.test.ts +2 -0
  110. package/test/transforms/identifier/globalConcealing.test.ts +19 -0
  111. package/test/transforms/identifier/movedDeclarations.test.ts +61 -0
  112. package/test/transforms/minify.test.ts +37 -0
  113. package/test/transforms/rgf.test.ts +50 -0
  114. package/dist/transforms/controlFlowFlattening/choiceFlowObfuscation.js +0 -62
  115. package/dist/transforms/controlFlowFlattening/controlFlowObfuscation.js +0 -159
  116. package/dist/transforms/controlFlowFlattening/switchCaseObfuscation.js +0 -106
  117. package/dist/transforms/eval.js +0 -84
  118. package/dist/transforms/hexadecimalNumbers.js +0 -63
  119. package/dist/transforms/hideInitializingCode.js +0 -270
  120. package/dist/transforms/identifier/nameRecycling.js +0 -218
  121. package/dist/transforms/label.js +0 -67
  122. package/dist/transforms/preparation/nameConflicts.js +0 -116
  123. package/dist/transforms/preparation/preparation.js +0 -188
@@ -4,115 +4,88 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _transform = _interopRequireDefault(require("./transform"));
9
-
10
8
  var _gen = require("../util/gen");
11
-
12
9
  var _random = require("../util/random");
13
-
14
10
  var _order = require("../order");
15
-
16
11
  var _insert = require("../util/insert");
17
-
18
12
  var _template = _interopRequireDefault(require("../templates/template"));
19
-
20
13
  var _probability = require("../probability");
21
-
22
14
  var _assert = require("assert");
23
-
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
27
-
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
17
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
18
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
28
19
  const testTypes = new Set(["ForStatement", "WhileStatement", "DoWhileStatement", "IfStatement", "ConditionExpression"]);
29
-
30
20
  function isTestExpression(object, parents) {
31
21
  if (!object || !parents[0]) {
32
22
  return false;
33
23
  }
34
-
35
24
  if (testTypes.has(parents[0].type) && parents[0].test === object) {
36
25
  return true;
37
26
  }
38
-
39
27
  return false;
40
28
  }
29
+
41
30
  /**
42
31
  * Changes test expression (such as if statements, for loops) to add predicates.
43
32
  *
44
33
  * Predicates are computed at runtime.
45
34
  */
46
-
47
-
48
35
  class OpaquePredicates extends _transform.default {
49
36
  constructor(o) {
50
37
  super(o, _order.ObfuscateOrder.OpaquePredicates);
51
-
52
38
  _defineProperty(this, "undefinedVar", void 0);
53
-
54
39
  _defineProperty(this, "nullVar", void 0);
55
-
56
40
  _defineProperty(this, "numberVar", void 0);
57
-
58
41
  _defineProperty(this, "predicateName", void 0);
59
-
60
42
  _defineProperty(this, "predicate", void 0);
61
-
62
43
  _defineProperty(this, "predicates", void 0);
63
-
64
44
  _defineProperty(this, "gen", void 0);
65
-
66
45
  _defineProperty(this, "made", void 0);
67
-
68
46
  this.predicates = Object.create(null);
69
47
  this.gen = this.getGenerator();
70
48
  this.made = 0;
71
49
  }
72
-
73
50
  match(object, parents) {
74
51
  return (isTestExpression(object, parents) || object.type == "SwitchCase") && !parents.find(x => x.$dispatcherSkip || x.type == "AwaitExpression");
75
52
  }
76
-
77
53
  transform(object, parents) {
78
54
  return () => {
79
55
  if (!(0, _probability.ComputeProbabilityMap)(this.options.opaquePredicates)) {
80
56
  return;
81
57
  }
82
-
83
58
  this.made++;
84
-
85
59
  if (this.made > 150) {
86
60
  return;
87
61
  }
88
-
89
62
  if (!this.predicate) {
90
63
  this.predicateName = this.getPlaceholder();
91
64
  this.predicate = (0, _gen.ObjectExpression)([]);
92
65
  var tempName = this.getPlaceholder();
93
66
  (0, _insert.prepend)(parents[parents.length - 1] || object, (0, _gen.VariableDeclaration)((0, _gen.VariableDeclarator)(this.predicateName, (0, _gen.CallExpression)((0, _gen.FunctionExpression)([], [(0, _gen.VariableDeclaration)((0, _gen.VariableDeclarator)(tempName, this.predicate)), (0, _gen.ReturnStatement)((0, _gen.Identifier)(tempName))]), []))));
94
67
  }
95
-
96
68
  var expr = (0, _random.choice)(Object.values(this.predicates));
97
-
98
69
  if (!expr || Math.random() < 0.5 / (Object.keys(this.predicates).length || 1)) {
99
70
  var prop = this.gen.generate();
100
71
  var accessor = (0, _gen.MemberExpression)((0, _gen.Identifier)(this.predicateName), (0, _gen.Identifier)(prop), false);
101
-
102
72
  switch ((0, _random.choice)(["array", "number", "string"])) {
103
73
  case "array":
104
74
  var arrayProp = this.gen.generate();
105
75
  this.predicate.properties.push((0, _gen.Property)((0, _gen.Identifier)(arrayProp), (0, _gen.ArrayExpression)([])));
106
76
  var paramName = this.getPlaceholder();
107
- this.predicate.properties.push((0, _gen.Property)((0, _gen.Identifier)(prop), (0, _gen.FunctionExpression)([(0, _gen.AssignmentPattern)((0, _gen.Identifier)(paramName), (0, _gen.Literal)("length"))], (0, _template.default)("\n if ( !".concat(this.predicateName, ".").concat(arrayProp, "[0] ) {\n ").concat(this.predicateName, ".").concat(arrayProp, ".push(").concat((0, _random.getRandomInteger)(-100, 100), ");\n }\n return ").concat(this.predicateName, ".").concat(arrayProp, "[").concat(paramName, "];\n ")).compile())));
77
+ this.predicate.properties.push((0, _gen.Property)((0, _gen.Identifier)(prop), (0, _gen.FunctionExpression)([(0, _gen.AssignmentPattern)((0, _gen.Identifier)(paramName), (0, _gen.Literal)("length"))], (0, _template.default)(`
78
+ if ( !${this.predicateName}.${arrayProp}[0] ) {
79
+ ${this.predicateName}.${arrayProp}.push(${(0, _random.getRandomInteger)(-100, 100)});
80
+ }
81
+ return ${this.predicateName}.${arrayProp}[${paramName}];
82
+ `).compile())));
108
83
  expr = (0, _gen.CallExpression)(accessor, []);
109
84
  break;
110
-
111
85
  case "number":
112
86
  this.predicate.properties.push((0, _gen.Property)((0, _gen.Identifier)(prop), (0, _gen.Literal)((0, _random.getRandomInteger)(15, 90))));
113
87
  expr = (0, _gen.BinaryExpression)(">", accessor, (0, _gen.Literal)((0, _random.getRandomInteger)(-90, 10)));
114
88
  break;
115
-
116
89
  case "string":
117
90
  var str = this.gen.generate();
118
91
  var index = (0, _random.getRandomInteger)(0, str.length);
@@ -121,21 +94,16 @@ class OpaquePredicates extends _transform.default {
121
94
  expr = (0, _gen.BinaryExpression)("==", (0, _gen.CallExpression)((0, _gen.MemberExpression)(accessor, (0, _gen.Literal)(fn), true), [(0, _gen.Literal)(index)]), (0, _gen.Literal)(str[fn](index)));
122
95
  break;
123
96
  }
124
-
125
97
  (0, _assert.ok)(expr);
126
98
  this.predicates[prop] = expr;
127
-
128
99
  if (Math.random() > 0.8) {
129
100
  (0, _random.shuffle)(this.predicate.properties);
130
101
  }
131
102
  }
132
-
133
103
  var cloned = (0, _insert.clone)(expr);
134
-
135
104
  if (object.type == "SwitchCase" && object.test) {
136
105
  var matching = (0, _gen.Identifier)((0, _random.choice)(["undefined", "null"]));
137
106
  var test = object.test;
138
-
139
107
  if (test.type == "Literal") {
140
108
  if (typeof test.value === "number") {
141
109
  matching = (0, _gen.Literal)((0, _random.getRandomInteger)(-250, 250));
@@ -143,13 +111,10 @@ class OpaquePredicates extends _transform.default {
143
111
  matching = (0, _gen.Literal)((0, _random.getRandomString)(4));
144
112
  }
145
113
  }
146
-
147
114
  var conditionalExpression = (0, _gen.ConditionalExpression)(cloned, (0, _insert.clone)(test), matching);
148
-
149
115
  if (Math.random() > 0.5) {
150
116
  conditionalExpression = (0, _gen.ConditionalExpression)((0, _gen.UnaryExpression)("!", cloned), matching, (0, _insert.clone)(test));
151
117
  }
152
-
153
118
  this.replace(test, conditionalExpression);
154
119
  } else if (isTestExpression(object, parents)) {
155
120
  if (object.type == "Literal" && !object.regex) {
@@ -164,7 +129,5 @@ class OpaquePredicates extends _transform.default {
164
129
  }
165
130
  };
166
131
  }
167
-
168
132
  }
169
-
170
133
  exports.default = OpaquePredicates;
@@ -4,23 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _transform = _interopRequireDefault(require("./transform"));
9
-
10
8
  var _gen = require("../util/gen");
11
-
12
9
  var _order = require("../order");
13
-
14
10
  var _insert = require("../util/insert");
15
-
16
11
  var _identifiers = require("../util/identifiers");
17
-
18
12
  var _compare = require("../util/compare");
19
-
20
13
  var _traverse = require("../traverse");
21
-
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
-
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
24
15
  /**
25
16
  * Preparation arranges the user's code into an AST the obfuscator can easily transform.
26
17
  *
@@ -45,23 +36,21 @@ class Preparation extends _transform.default {
45
36
  constructor(o) {
46
37
  super(o, _order.ObfuscateOrder.Preparation);
47
38
  }
48
-
49
39
  match(object, parents) {
50
40
  return !!object.type;
51
41
  }
52
-
53
42
  transform(object, parents) {
54
43
  // ExplicitIdentifiers
55
44
  if (object.type === "Identifier") {
56
45
  return this.transformExplicitIdentifiers(object, parents);
57
- } // ExplicitDeclarations
58
-
46
+ }
59
47
 
48
+ // ExplicitDeclarations
60
49
  if (object.type === "VariableDeclaration") {
61
50
  return this.transformExplicitDeclarations(object, parents);
62
- } // Block
63
-
51
+ }
64
52
 
53
+ // Block
65
54
  switch (object.type) {
66
55
  /**
67
56
  * People use shortcuts and its harder to parse.
@@ -73,13 +62,10 @@ class Preparation extends _transform.default {
73
62
  if (object.consequent.type != "BlockStatement") {
74
63
  object.consequent = (0, _gen.BlockStatement)([(0, _insert.clone)(object.consequent)]);
75
64
  }
76
-
77
65
  if (object.alternate && object.alternate.type != "BlockStatement") {
78
66
  object.alternate = (0, _gen.BlockStatement)([(0, _insert.clone)(object.alternate)]);
79
67
  }
80
-
81
68
  break;
82
-
83
69
  case "WhileStatement":
84
70
  case "WithStatement":
85
71
  case "ForStatement":
@@ -88,31 +74,27 @@ class Preparation extends _transform.default {
88
74
  if (object.body.type != "BlockStatement") {
89
75
  object.body = (0, _gen.BlockStatement)([(0, _insert.clone)(object.body)]);
90
76
  }
91
-
92
77
  break;
93
-
94
78
  case "ArrowFunctionExpression":
95
79
  if (object.body.type !== "BlockStatement" && object.expression) {
96
80
  object.body = (0, _gen.BlockStatement)([(0, _gen.ReturnStatement)((0, _insert.clone)(object.body))]);
97
81
  object.expression = false;
98
82
  }
99
-
100
83
  break;
101
- } // Label
102
-
84
+ }
103
85
 
86
+ // Label
104
87
  if ((0, _compare.isLoop)(object) || object.type == "BlockStatement" && parents[0] && parents[0].type == "LabeledStatement" && parents[0].body === object) {
105
88
  return this.transformLabel(object, parents);
106
89
  }
107
90
  }
91
+
108
92
  /**
109
93
  * Ensures every break; statement has a label to point to.
110
94
  *
111
95
  * This is because Control Flow Flattening adds For Loops which label-less break statements point to the nearest,
112
96
  * when they actually need to point to the original statement.
113
97
  */
114
-
115
-
116
98
  transformLabel(object, parents) {
117
99
  return () => {
118
100
  var currentLabel = parents[0].type == "LabeledStatement" && parents[0].label.name;
@@ -122,98 +104,85 @@ class Preparation extends _transform.default {
122
104
  function isContinuableStatement(x) {
123
105
  return (0, _compare.isLoop)(x) && x.type !== "SwitchStatement";
124
106
  }
125
-
126
107
  function isBreakableStatement(x) {
127
108
  return (0, _compare.isLoop)(x) || o.label && x.type == "BlockStatement";
128
109
  }
129
-
130
110
  var fn = o.type == "ContinueStatement" ? isContinuableStatement : isBreakableStatement;
131
111
  var loop = p.find(fn);
132
-
133
112
  if (object == loop) {
134
113
  if (!o.label) {
135
114
  o.label = (0, _gen.Identifier)(label);
136
115
  }
137
116
  }
138
117
  }
139
- }); // Append label statement as this loop has none
118
+ });
140
119
 
120
+ // Append label statement as this loop has none
141
121
  if (!currentLabel) {
142
- this.replace(object, (0, _gen.LabeledStatement)(label, { ...object
122
+ this.replace(object, (0, _gen.LabeledStatement)(label, {
123
+ ...object
143
124
  }));
144
125
  }
145
126
  };
146
127
  }
128
+
147
129
  /**
148
130
  * Transforms Identifiers (a.IDENTIFIER, {IDENTIFIER:...}) into string properties
149
131
  */
150
-
151
-
152
132
  transformExplicitIdentifiers(object, parents) {
153
133
  // Mark functions containing 'eval'
154
134
  // Some transformations avoid functions that have 'eval' to not break them
155
135
  if (object.name === "eval") {
156
136
  var fn = (0, _insert.getFunction)(object, parents);
157
-
158
137
  if (fn) {
159
138
  fn.$requiresEval = true;
160
139
  }
161
140
  }
162
-
163
141
  var info = (0, _identifiers.getIdentifierInfo)(object, parents);
164
-
165
142
  if (info.isPropertyKey || info.isAccessor) {
166
- var propIndex = parents.findIndex(x => x.type == "MethodDefinition" || x.type == "Property"); // Don't change constructor!
143
+ var propIndex = parents.findIndex(x => x.type == "MethodDefinition" || x.type == "Property");
167
144
 
145
+ // Don't change constructor!
168
146
  if (propIndex !== -1) {
169
147
  if (parents[propIndex].type == "MethodDefinition" && parents[propIndex].kind == "constructor") {
170
148
  return;
171
149
  }
172
150
  }
173
-
174
151
  this.replace(object, (0, _gen.Literal)(object.name));
175
152
  parents[0].computed = true;
176
153
  parents[0].shorthand = false;
177
154
  }
178
155
  }
156
+
179
157
  /**
180
158
  * Transforms VariableDeclaration into single declarations.
181
159
  */
182
-
183
-
184
160
  transformExplicitDeclarations(object, parents) {
185
161
  // for ( var x in ... ) {...}
186
162
  var forIndex = parents.findIndex(x => x.type == "ForInStatement" || x.type == "ForOfStatement");
187
-
188
163
  if (forIndex != -1 && parents[forIndex].left == (parents[forIndex - 1] || object)) {
189
164
  object.declarations.forEach(x => {
190
165
  x.init = null;
191
166
  });
192
167
  return;
193
168
  }
194
-
195
169
  var body = parents[0];
196
-
197
170
  if ((0, _compare.isLoop)(body) || body.type == "LabeledStatement") {
198
171
  return;
199
172
  }
200
-
201
173
  if (body.type == "ExportNamedDeclaration") {
202
174
  return;
203
175
  }
204
-
205
176
  if (!Array.isArray(body)) {
206
177
  this.error(new Error("body is " + body.type));
207
178
  }
208
-
209
179
  if (object.declarations.length > 1) {
210
180
  // Make singular
211
- var index = body.indexOf(object);
212
181
 
182
+ var index = body.indexOf(object);
213
183
  if (index == -1) {
214
184
  this.error(new Error("index is -1"));
215
185
  }
216
-
217
186
  var after = object.declarations.slice(1);
218
187
  body.splice(index + 1, 0, ...after.map(x => {
219
188
  return {
@@ -225,7 +194,5 @@ class Preparation extends _transform.default {
225
194
  object.declarations.length = 1;
226
195
  }
227
196
  }
228
-
229
197
  }
230
-
231
198
  exports.default = Preparation;
@@ -4,39 +4,28 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  var _order = require("../order");
9
-
10
8
  var _traverse = require("../traverse");
11
-
12
9
  var _compare = require("../util/compare");
13
-
14
10
  var _gen = require("../util/gen");
15
-
16
11
  var _insert = require("../util/insert");
17
-
18
12
  var _transform = _interopRequireDefault(require("./transform"));
19
-
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
23
-
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
15
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
16
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
24
17
  /**
25
18
  * Renames the labels to shorter names.
26
19
  */
27
20
  class RenameLabels extends _transform.default {
28
21
  constructor(o) {
29
22
  super(o, _order.ObfuscateOrder.RenameLabels);
30
-
31
23
  _defineProperty(this, "gen", void 0);
32
-
33
24
  this.gen = this.getGenerator("randomized");
34
25
  }
35
-
36
26
  match(object, parents) {
37
27
  return object.type == "LabeledStatement";
38
28
  }
39
-
40
29
  transform(object, parents) {
41
30
  return () => {
42
31
  var newName = null;
@@ -47,32 +36,28 @@ class RenameLabels extends _transform.default {
47
36
  function isContinuableStatement(x, stmtParents) {
48
37
  return (0, _compare.isLoop)(x) && x.type !== "SwitchStatement";
49
38
  }
50
-
51
39
  function isBreakableStatement(x, stmtParents) {
52
40
  return (0, _compare.isLoop)(x) || x.type == "BlockStatement" && o.label && stmtParents[0] && stmtParents[0].type == "LabeledStatement";
53
41
  }
54
-
55
42
  var fn = o.type == "ContinueStatement" ? isContinuableStatement : isBreakableStatement;
56
43
  var labelStatement = p.find((node, i) => {
57
44
  return fn(node, p.slice(i + 1));
58
45
  });
59
-
60
46
  if (o.label && o.label.name == object.label.name) {
61
47
  if (object.body == labelStatement && isRemovable) {
62
48
  // In same loop
49
+
63
50
  o.label = null;
64
51
  } else {
65
52
  if (!newName) {
66
53
  newName = this.gen.generate();
67
54
  }
68
-
69
55
  o.label = (0, _gen.Identifier)(newName);
70
56
  labelNeverUsed = false;
71
57
  }
72
58
  }
73
59
  }
74
60
  });
75
-
76
61
  if (newName) {
77
62
  object.label = (0, _gen.Identifier)(newName);
78
63
  } else if (isRemovable || labelNeverUsed) {
@@ -80,7 +65,5 @@ class RenameLabels extends _transform.default {
80
65
  }
81
66
  };
82
67
  }
83
-
84
68
  }
85
-
86
69
  exports.default = RenameLabels;