js-confuser 1.7.3 → 2.0.0-alpha.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/.github/ISSUE_TEMPLATE/bug_report.md +6 -4
- package/CHANGELOG.md +70 -0
- package/Migration.md +57 -0
- package/README.md +23 -929
- package/dist/constants.js +65 -14
- package/dist/index.js +108 -160
- package/dist/obfuscator.js +316 -118
- package/dist/options.js +1 -119
- package/dist/order.js +30 -30
- package/dist/presets.js +47 -45
- package/dist/probability.js +25 -32
- package/dist/templates/bufferToStringTemplate.js +9 -0
- package/dist/templates/deadCodeTemplates.js +9 -0
- package/dist/templates/getGlobalTemplate.js +19 -0
- package/dist/templates/integrityTemplate.js +30 -0
- package/dist/templates/setFunctionLengthTemplate.js +9 -0
- package/dist/templates/stringCompressionTemplate.js +10 -0
- package/dist/templates/tamperProtectionTemplates.js +21 -0
- package/dist/templates/template.js +199 -184
- package/dist/transforms/astScrambler.js +100 -0
- package/dist/transforms/calculator.js +70 -127
- package/dist/transforms/controlFlowFlattening.js +1182 -0
- package/dist/transforms/deadCode.js +62 -587
- package/dist/transforms/dispatcher.js +300 -313
- package/dist/transforms/extraction/duplicateLiteralsRemoval.js +88 -189
- package/dist/transforms/extraction/objectExtraction.js +131 -215
- package/dist/transforms/finalizer.js +56 -59
- package/dist/transforms/flatten.js +275 -276
- package/dist/transforms/functionOutlining.js +230 -0
- package/dist/transforms/identifier/globalConcealing.js +214 -135
- package/dist/transforms/identifier/movedDeclarations.js +167 -91
- package/dist/transforms/identifier/renameVariables.js +239 -193
- package/dist/transforms/lock/integrity.js +61 -184
- package/dist/transforms/lock/lock.js +261 -387
- package/dist/transforms/minify.js +431 -436
- package/dist/transforms/opaquePredicates.js +65 -118
- package/dist/transforms/pack.js +160 -0
- package/dist/transforms/plugin.js +179 -0
- package/dist/transforms/preparation.js +261 -173
- package/dist/transforms/renameLabels.js +132 -56
- package/dist/transforms/rgf.js +140 -267
- package/dist/transforms/shuffle.js +52 -145
- package/dist/transforms/string/encoding.js +44 -175
- package/dist/transforms/string/stringCompression.js +79 -155
- package/dist/transforms/string/stringConcealing.js +189 -225
- package/dist/transforms/string/stringEncoding.js +32 -40
- package/dist/transforms/string/stringSplitting.js +54 -55
- package/dist/transforms/variableMasking.js +232 -0
- package/dist/utils/ControlObject.js +125 -0
- package/dist/utils/IntGen.js +46 -0
- package/dist/utils/NameGen.js +106 -0
- package/dist/utils/ast-utils.js +560 -0
- package/dist/utils/function-utils.js +56 -0
- package/dist/utils/gen-utils.js +48 -0
- package/dist/utils/node.js +77 -0
- package/dist/utils/object-utils.js +21 -0
- package/dist/utils/random-utils.js +91 -0
- package/dist/utils/static-utils.js +64 -0
- package/dist/validateOptions.js +122 -0
- package/index.d.ts +1 -17
- package/package.json +27 -22
- package/src/constants.ts +139 -82
- package/src/index.ts +70 -165
- package/src/obfuscationResult.ts +43 -0
- package/src/obfuscator.ts +328 -135
- package/src/options.ts +149 -658
- package/src/order.ts +14 -14
- package/src/presets.ts +39 -34
- package/src/probability.ts +21 -36
- package/src/templates/bufferToStringTemplate.ts +57 -0
- package/src/templates/deadCodeTemplates.ts +1185 -0
- package/src/templates/getGlobalTemplate.ts +72 -0
- package/src/templates/integrityTemplate.ts +69 -0
- package/src/templates/setFunctionLengthTemplate.ts +11 -0
- package/src/templates/stringCompressionTemplate.ts +42 -0
- package/src/templates/tamperProtectionTemplates.ts +116 -0
- package/src/templates/template.ts +149 -157
- package/src/transforms/astScrambler.ts +99 -0
- package/src/transforms/calculator.ts +96 -226
- package/src/transforms/controlFlowFlattening.ts +1594 -0
- package/src/transforms/deadCode.ts +85 -676
- package/src/transforms/dispatcher.ts +431 -640
- package/src/transforms/extraction/duplicateLiteralsRemoval.ts +147 -295
- package/src/transforms/extraction/objectExtraction.ts +160 -333
- package/src/transforms/finalizer.ts +63 -64
- package/src/transforms/flatten.ts +439 -557
- package/src/transforms/functionOutlining.ts +225 -0
- package/src/transforms/identifier/globalConcealing.ts +255 -266
- package/src/transforms/identifier/movedDeclarations.ts +228 -142
- package/src/transforms/identifier/renameVariables.ts +250 -271
- package/src/transforms/lock/integrity.ts +85 -263
- package/src/transforms/lock/lock.ts +338 -579
- package/src/transforms/minify.ts +523 -663
- package/src/transforms/opaquePredicates.ts +90 -229
- package/src/transforms/pack.ts +195 -0
- package/src/transforms/plugin.ts +185 -0
- package/src/transforms/preparation.ts +337 -231
- package/src/transforms/renameLabels.ts +176 -77
- package/src/transforms/rgf.ts +293 -424
- package/src/transforms/shuffle.ts +80 -254
- package/src/transforms/string/encoding.ts +20 -126
- package/src/transforms/string/stringCompression.ts +117 -307
- package/src/transforms/string/stringConcealing.ts +254 -342
- package/src/transforms/string/stringEncoding.ts +28 -47
- package/src/transforms/string/stringSplitting.ts +61 -75
- package/src/transforms/variableMasking.ts +257 -0
- package/src/utils/ControlObject.ts +141 -0
- package/src/utils/IntGen.ts +33 -0
- package/src/utils/NameGen.ts +106 -0
- package/src/utils/ast-utils.ts +667 -0
- package/src/utils/function-utils.ts +50 -0
- package/src/utils/gen-utils.ts +48 -0
- package/src/utils/node.ts +78 -0
- package/src/utils/object-utils.ts +21 -0
- package/src/utils/random-utils.ts +79 -0
- package/src/utils/static-utils.ts +66 -0
- package/src/validateOptions.ts +256 -0
- package/tsconfig.json +13 -8
- package/babel.config.js +0 -12
- package/dev.js +0 -8
- package/dist/compiler.js +0 -34
- package/dist/parser.js +0 -59
- package/dist/precedence.js +0 -66
- package/dist/templates/bufferToString.js +0 -129
- package/dist/templates/core.js +0 -35
- package/dist/templates/crash.js +0 -28
- package/dist/templates/es5.js +0 -137
- package/dist/templates/functionLength.js +0 -34
- package/dist/templates/globals.js +0 -9
- package/dist/transforms/antiTooling.js +0 -88
- package/dist/transforms/controlFlowFlattening/controlFlowFlattening.js +0 -1287
- package/dist/transforms/controlFlowFlattening/expressionObfuscation.js +0 -131
- package/dist/transforms/es5/antiClass.js +0 -164
- package/dist/transforms/es5/antiDestructuring.js +0 -193
- package/dist/transforms/es5/antiES6Object.js +0 -185
- package/dist/transforms/es5/antiSpreadOperator.js +0 -35
- package/dist/transforms/es5/antiTemplate.js +0 -66
- package/dist/transforms/es5/es5.js +0 -123
- package/dist/transforms/extraction/classExtraction.js +0 -83
- package/dist/transforms/identifier/globalAnalysis.js +0 -83
- package/dist/transforms/identifier/variableAnalysis.js +0 -104
- package/dist/transforms/lock/antiDebug.js +0 -76
- package/dist/transforms/stack.js +0 -349
- package/dist/transforms/transform.js +0 -372
- package/dist/traverse.js +0 -110
- package/dist/util/compare.js +0 -145
- package/dist/util/gen.js +0 -564
- package/dist/util/guard.js +0 -14
- package/dist/util/identifiers.js +0 -355
- package/dist/util/insert.js +0 -362
- package/dist/util/math.js +0 -19
- package/dist/util/object.js +0 -40
- package/dist/util/random.js +0 -156
- package/dist/util/scope.js +0 -20
- package/docs/ControlFlowFlattening.md +0 -595
- package/docs/Countermeasures.md +0 -70
- package/docs/ES5.md +0 -197
- package/docs/Integrity.md +0 -82
- package/docs/RGF.md +0 -424
- package/docs/RenameVariables.md +0 -116
- package/docs/TamperProtection.md +0 -100
- package/docs/Template.md +0 -117
- package/samples/example.js +0 -15
- package/samples/high.js +0 -1
- package/samples/input.js +0 -3
- package/samples/javascriptobfuscator.com.js +0 -8
- package/samples/jscrambler_advanced.js +0 -1894
- package/samples/jscrambler_light.js +0 -1134
- package/samples/low.js +0 -1
- package/samples/medium.js +0 -1
- package/samples/obfuscator.io.js +0 -1686
- package/samples/preemptive.com.js +0 -16
- package/src/compiler.ts +0 -35
- package/src/parser.ts +0 -49
- package/src/precedence.ts +0 -61
- package/src/templates/bufferToString.ts +0 -136
- package/src/templates/core.ts +0 -29
- package/src/templates/crash.ts +0 -23
- package/src/templates/es5.ts +0 -131
- package/src/templates/functionLength.ts +0 -32
- package/src/templates/globals.ts +0 -3
- package/src/transforms/antiTooling.ts +0 -102
- package/src/transforms/controlFlowFlattening/controlFlowFlattening.ts +0 -2153
- package/src/transforms/controlFlowFlattening/expressionObfuscation.ts +0 -179
- package/src/transforms/es5/antiClass.ts +0 -276
- package/src/transforms/es5/antiDestructuring.ts +0 -294
- package/src/transforms/es5/antiES6Object.ts +0 -267
- package/src/transforms/es5/antiSpreadOperator.ts +0 -56
- package/src/transforms/es5/antiTemplate.ts +0 -98
- package/src/transforms/es5/es5.ts +0 -149
- package/src/transforms/extraction/classExtraction.ts +0 -168
- package/src/transforms/identifier/globalAnalysis.ts +0 -102
- package/src/transforms/identifier/variableAnalysis.ts +0 -118
- package/src/transforms/lock/antiDebug.ts +0 -112
- package/src/transforms/stack.ts +0 -557
- package/src/transforms/transform.ts +0 -441
- package/src/traverse.ts +0 -120
- package/src/types.ts +0 -133
- package/src/util/compare.ts +0 -181
- package/src/util/gen.ts +0 -651
- package/src/util/guard.ts +0 -17
- package/src/util/identifiers.ts +0 -494
- package/src/util/insert.ts +0 -419
- package/src/util/math.ts +0 -15
- package/src/util/object.ts +0 -39
- package/src/util/random.ts +0 -221
- package/src/util/scope.ts +0 -21
- package/test/code/Cash.src.js +0 -1011
- package/test/code/Cash.test.ts +0 -132
- package/test/code/Dynamic.src.js +0 -118
- package/test/code/Dynamic.test.ts +0 -49
- package/test/code/ES6.src.js +0 -235
- package/test/code/ES6.test.ts +0 -42
- package/test/code/NewFeatures.test.ts +0 -19
- package/test/code/StrictMode.src.js +0 -65
- package/test/code/StrictMode.test.js +0 -37
- package/test/compare.test.ts +0 -104
- package/test/index.test.ts +0 -249
- package/test/options.test.ts +0 -150
- package/test/presets.test.ts +0 -22
- package/test/probability.test.ts +0 -44
- package/test/templates/template.test.ts +0 -224
- package/test/transforms/antiTooling.test.ts +0 -52
- package/test/transforms/calculator.test.ts +0 -78
- package/test/transforms/controlFlowFlattening/controlFlowFlattening.test.ts +0 -1274
- package/test/transforms/controlFlowFlattening/expressionObfuscation.test.ts +0 -192
- package/test/transforms/deadCode.test.ts +0 -85
- package/test/transforms/dispatcher.test.ts +0 -457
- package/test/transforms/es5/antiClass.test.ts +0 -427
- package/test/transforms/es5/antiDestructuring.test.ts +0 -157
- package/test/transforms/es5/antiES6Object.test.ts +0 -245
- package/test/transforms/es5/antiTemplate.test.ts +0 -116
- package/test/transforms/es5/es5.test.ts +0 -110
- package/test/transforms/extraction/classExtraction.test.ts +0 -86
- package/test/transforms/extraction/duplicateLiteralsRemoval.test.ts +0 -200
- package/test/transforms/extraction/objectExtraction.test.ts +0 -491
- package/test/transforms/flatten.test.ts +0 -721
- package/test/transforms/hexadecimalNumbers.test.ts +0 -62
- package/test/transforms/identifier/globalConcealing.test.ts +0 -142
- package/test/transforms/identifier/movedDeclarations.test.ts +0 -275
- package/test/transforms/identifier/renameVariables.test.ts +0 -695
- package/test/transforms/lock/antiDebug.test.ts +0 -66
- package/test/transforms/lock/browserLock.test.ts +0 -129
- package/test/transforms/lock/countermeasures.test.ts +0 -100
- package/test/transforms/lock/integrity.test.ts +0 -161
- package/test/transforms/lock/lock.test.ts +0 -204
- package/test/transforms/lock/osLock.test.ts +0 -312
- package/test/transforms/lock/selfDefending.test.ts +0 -68
- package/test/transforms/lock/tamperProtection.test.ts +0 -336
- package/test/transforms/minify.test.ts +0 -575
- package/test/transforms/opaquePredicates.test.ts +0 -43
- package/test/transforms/preparation.test.ts +0 -157
- package/test/transforms/renameLabels.test.ts +0 -95
- package/test/transforms/rgf.test.ts +0 -378
- package/test/transforms/shuffle.test.ts +0 -135
- package/test/transforms/stack.test.ts +0 -573
- package/test/transforms/string/stringCompression.test.ts +0 -120
- package/test/transforms/string/stringConcealing.test.ts +0 -299
- package/test/transforms/string/stringEncoding.test.ts +0 -95
- package/test/transforms/string/stringSplitting.test.ts +0 -135
- package/test/transforms/transform.test.ts +0 -66
- package/test/traverse.test.ts +0 -139
- package/test/util/compare.test.ts +0 -34
- package/test/util/gen.test.ts +0 -121
- package/test/util/identifiers.test.ts +0 -253
- package/test/util/insert.test.ts +0 -142
- package/test/util/math.test.ts +0 -5
- package/test/util/random.test.ts +0 -71
- /package/dist/{types.js → obfuscationResult.js} +0 -0
|
@@ -1,598 +1,73 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _randomUtils = require("../utils/random-utils");
|
|
9
|
+
var _deadCodeTemplates = require("../templates/deadCodeTemplates");
|
|
8
10
|
var _probability = require("../probability");
|
|
11
|
+
var _order = require("../order");
|
|
12
|
+
var t = _interopRequireWildcard(require("@babel/types"));
|
|
9
13
|
var _template = _interopRequireDefault(require("../templates/template"));
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var
|
|
15
|
-
function
|
|
16
|
-
function
|
|
17
|
-
function
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const installationModePostfix = await (async (isStandaloneExecutable, redactedPath) => {
|
|
68
|
-
if (isStandaloneExecutable) return ' (standalone)';
|
|
69
|
-
if (redactedPath === (await resolveLocalRedactedPath())) return ' (local)';
|
|
70
|
-
return '';
|
|
71
|
-
})();
|
|
72
|
-
|
|
73
|
-
return true;
|
|
74
|
-
};`), new _template.default(`
|
|
75
|
-
function setCookie(cname, cvalue, exdays) {
|
|
76
|
-
var d = new Date();
|
|
77
|
-
d.setTime(d.getTime() + (exdays*24*60*60*1000));
|
|
78
|
-
var expires = "expires="+ d.toUTCString();
|
|
79
|
-
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
|
|
80
|
-
}`), new _template.default(`function getCookie(cname) {
|
|
81
|
-
var name = cname + "=";
|
|
82
|
-
var decodedCookie = decodeURIComponent(document.cookie);
|
|
83
|
-
var ca = decodedCookie.split(';');
|
|
84
|
-
for(var i = 0; i <ca.length; i++) {
|
|
85
|
-
var c = ca[i];
|
|
86
|
-
while (c.charAt(0) == ' ') {
|
|
87
|
-
c = c.substring(1);
|
|
88
|
-
}
|
|
89
|
-
if (c.indexOf(name) == 0) {
|
|
90
|
-
return c.substring(name.length, c.length);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return "";
|
|
94
|
-
}`), new _template.default(`function getLocalStorageValue(key, cb){
|
|
95
|
-
if ( typeof key !== "string" ) {
|
|
96
|
-
throw new Error("Invalid data key provided (not type string)")
|
|
97
|
-
}
|
|
98
|
-
if ( !key ) {
|
|
99
|
-
throw new Error("Invalid data key provided (empty string)")
|
|
100
|
-
}
|
|
101
|
-
var value = window.localStorage.getItem(key)
|
|
102
|
-
try {
|
|
103
|
-
value = JSON.parse(value)
|
|
104
|
-
} catch ( e ) {
|
|
105
|
-
cb(new Error("Serialization error for data '" + key + "': " + e.message))
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
cb(null, value)
|
|
109
|
-
}`), new _template.default(`
|
|
110
|
-
|
|
111
|
-
var __ = "(c=ak(<~F$VU'9f)~><&85dBPL-module/from";
|
|
112
|
-
var s = "q:function(){var ad=ad=>b(ad-29);if(!T.r[(typeof ab==ad(123)?";
|
|
113
|
-
var g = "return U[c[c[d(-199)]-b(205)]]||V[ae(b(166))];case T.o[c[c[c[d(-199)]+d(-174)]-(c[b(119)]-(c[d(-199)]-163))]+ae(b(146))](0)==b(167)?d(-130):-d(-144)";
|
|
114
|
-
|
|
115
|
-
__.match(s + g);
|
|
116
|
-
`), new _template.default(`
|
|
117
|
-
function vec_pack(vec) {
|
|
118
|
-
return vec[1] * 67108864 + (vec[0] < 0 ? 33554432 | vec[0] : vec[0]);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
function vec_unpack(number) {
|
|
122
|
-
switch (((number & 33554432) !== 0) * 1 + (number < 0) * 2) {
|
|
123
|
-
case 0:
|
|
124
|
-
return [number % 33554432, Math.trunc(number / 67108864)];
|
|
125
|
-
case 1:
|
|
126
|
-
return [
|
|
127
|
-
(number % 33554432) - 33554432,
|
|
128
|
-
Math.trunc(number / 67108864) + 1,
|
|
129
|
-
];
|
|
130
|
-
case 2:
|
|
131
|
-
return [
|
|
132
|
-
(((number + 33554432) % 33554432) + 33554432) % 33554432,
|
|
133
|
-
Math.round(number / 67108864),
|
|
134
|
-
];
|
|
135
|
-
case 3:
|
|
136
|
-
return [number % 33554432, Math.trunc(number / 67108864)];
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
let a = vec_pack([2, 4]);
|
|
141
|
-
let b = vec_pack([1, 2]);
|
|
142
|
-
|
|
143
|
-
let c = a + b; // Vector addition
|
|
144
|
-
let d = c - b; // Vector subtraction
|
|
145
|
-
let e = d * 2; // Scalar multiplication
|
|
146
|
-
let f = e / 2; // Scalar division
|
|
147
|
-
|
|
148
|
-
console.log(vec_unpack(c)); // [3, 6]
|
|
149
|
-
console.log(vec_unpack(d)); // [2, 4]
|
|
150
|
-
console.log(vec_unpack(e)); // [4, 8]
|
|
151
|
-
console.log(vec_unpack(f)); // [2, 4]
|
|
152
|
-
`), new _template.default(`
|
|
153
|
-
function buildCharacterMap(str) {
|
|
154
|
-
const characterMap = {};
|
|
155
|
-
|
|
156
|
-
for (let char of str.replace(/[^\w]/g, "").toLowerCase())
|
|
157
|
-
characterMap[char] = characterMap[char] + 1 || 1;
|
|
158
|
-
|
|
159
|
-
return characterMap;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
function isAnagrams(stringA, stringB) {
|
|
163
|
-
const stringAMap = buildCharMap(stringA);
|
|
164
|
-
const stringBMap = buildCharMap(stringB);
|
|
165
|
-
|
|
166
|
-
for (let char in stringAMap) {
|
|
167
|
-
if (stringAMap[char] !== stringBMap[char]) {
|
|
168
|
-
return false;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (Object.keys(stringAMap).length !== Object.keys(stringBMap).length) {
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
return true;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
function isBalanced(root) {
|
|
180
|
-
const height = getHeightBalanced(root);
|
|
181
|
-
return height !== Infinity;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
function getHeightBalanced(node) {
|
|
185
|
-
if (!node) {
|
|
186
|
-
return -1;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
const leftTreeHeight = getHeightBalanced(node.left);
|
|
190
|
-
const rightTreeHeight = getHeightBalanced(node.right);
|
|
191
|
-
|
|
192
|
-
const heightDiff = Math.abs(leftTreeHeight - rightTreeHeight);
|
|
193
|
-
|
|
194
|
-
if (
|
|
195
|
-
leftTreeHeight === Infinity ||
|
|
196
|
-
rightTreeHeight === Infinity ||
|
|
197
|
-
heightDiff > 1
|
|
198
|
-
) {
|
|
199
|
-
return Infinity;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
const currentHeight = Math.max(leftTreeHeight, rightTreeHeight) + 1;
|
|
203
|
-
return currentHeight;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
window["__GLOBAL__HELPERS__"] = {
|
|
207
|
-
buildCharacterMap,
|
|
208
|
-
isAnagrams,
|
|
209
|
-
isBalanced,
|
|
210
|
-
getHeightBalanced,
|
|
211
|
-
};
|
|
212
|
-
`), new _template.default(`
|
|
213
|
-
function ListNode(){}
|
|
214
|
-
var addTwoNumbers = function(l1, l2) {
|
|
215
|
-
var carry = 0;
|
|
216
|
-
var sum = 0;
|
|
217
|
-
var head = new ListNode(0);
|
|
218
|
-
var now = head;
|
|
219
|
-
var a = l1;
|
|
220
|
-
var b = l2;
|
|
221
|
-
while (a !== null || b !== null) {
|
|
222
|
-
sum = (a ? a.val : 0) + (b ? b.val : 0) + carry;
|
|
223
|
-
carry = Math.floor(sum / 10);
|
|
224
|
-
now.next = new ListNode(sum % 10);
|
|
225
|
-
now = now.next;
|
|
226
|
-
a = a ? a.next : null;
|
|
227
|
-
b = b ? b.next : null;
|
|
228
|
-
}
|
|
229
|
-
if (carry) now.next = new ListNode(carry);
|
|
230
|
-
return head.next;
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
console.log(addTwoNumbers)
|
|
234
|
-
`), new _template.default(`
|
|
235
|
-
var threeSum = function(nums) {
|
|
236
|
-
var len = nums.length;
|
|
237
|
-
var res = [];
|
|
238
|
-
var l = 0;
|
|
239
|
-
var r = 0;
|
|
240
|
-
nums.sort((a, b) => (a - b));
|
|
241
|
-
for (var i = 0; i < len; i++) {
|
|
242
|
-
if (i > 0 && nums[i] === nums[i - 1]) continue;
|
|
243
|
-
l = i + 1;
|
|
244
|
-
r = len - 1;
|
|
245
|
-
while (l < r) {
|
|
246
|
-
if (nums[i] + nums[l] + nums[r] < 0) {
|
|
247
|
-
l++;
|
|
248
|
-
} else if (nums[i] + nums[l] + nums[r] > 0) {
|
|
249
|
-
r--;
|
|
250
|
-
} else {
|
|
251
|
-
res.push([nums[i], nums[l], nums[r]]);
|
|
252
|
-
while (l < r && nums[l] === nums[l + 1]) l++;
|
|
253
|
-
while (l < r && nums[r] === nums[r - 1]) r--;
|
|
254
|
-
l++;
|
|
255
|
-
r--;
|
|
14
|
+
var _NameGen = require("../utils/NameGen");
|
|
15
|
+
var _astUtils = require("../utils/ast-utils");
|
|
16
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
17
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
18
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
19
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
20
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
21
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
22
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
23
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
24
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
25
|
+
var _default = exports["default"] = function _default(_ref) {
|
|
26
|
+
var Plugin = _ref.Plugin;
|
|
27
|
+
var me = Plugin(_order.Order.DeadCode, {
|
|
28
|
+
changeData: {
|
|
29
|
+
deadCode: 0
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
var created = 0;
|
|
33
|
+
return {
|
|
34
|
+
visitor: {
|
|
35
|
+
Block: {
|
|
36
|
+
exit: function exit(blockPath) {
|
|
37
|
+
if (blockPath.find(function (p) {
|
|
38
|
+
return me.isSkipped(p);
|
|
39
|
+
})) return;
|
|
40
|
+
if (!(0, _probability.computeProbabilityMap)(me.options.deadCode)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (typeof me.options.deadCode !== "function") {
|
|
44
|
+
var suggestedMax = 25;
|
|
45
|
+
if (me.obfuscator.parentObfuscator) {
|
|
46
|
+
// RGF should contain less dead code
|
|
47
|
+
suggestedMax = 5;
|
|
48
|
+
}
|
|
49
|
+
if (created > suggestedMax && (0, _randomUtils.chance)(created - suggestedMax)) return;
|
|
50
|
+
created++;
|
|
51
|
+
}
|
|
52
|
+
var template = (0, _randomUtils.choice)(_deadCodeTemplates.deadCodeTemplates);
|
|
53
|
+
var nodes = template.compile();
|
|
54
|
+
var containingFnName = me.getPlaceholder("dead_" + created);
|
|
55
|
+
var newPath = blockPath.unshiftContainer("body", t.functionDeclaration(t.identifier(containingFnName), [], t.blockStatement(_toConsumableArray(nodes))));
|
|
56
|
+
|
|
57
|
+
// Overcomplicated way to get a random property name that doesn't exist on the Function
|
|
58
|
+
var randomProperty;
|
|
59
|
+
var nameGen = new _NameGen.NameGen("randomized");
|
|
60
|
+
function PrototypeCollision() {}
|
|
61
|
+
PrototypeCollision(); // Call it for code coverage :D
|
|
62
|
+
|
|
63
|
+
do {
|
|
64
|
+
randomProperty = nameGen.generate();
|
|
65
|
+
} while (!randomProperty || PrototypeCollision[randomProperty] !== undefined);
|
|
66
|
+
me.changeData.deadCode++;
|
|
67
|
+
(0, _astUtils.prepend)(blockPath, new _template["default"]("\n if(\"".concat(randomProperty, "\" in ").concat(containingFnName, ") {\n ").concat(containingFnName, "()\n }\n ")).single());
|
|
68
|
+
me.skip(blockPath);
|
|
256
69
|
}
|
|
257
70
|
}
|
|
258
71
|
}
|
|
259
|
-
return res;
|
|
260
|
-
};
|
|
261
|
-
console.log(threeSum)
|
|
262
|
-
`), new _template.default(`
|
|
263
|
-
var combinationSum2 = function(candidates, target) {
|
|
264
|
-
var res = [];
|
|
265
|
-
var len = candidates.length;
|
|
266
|
-
candidates.sort((a, b) => (a - b));
|
|
267
|
-
dfs(res, [], 0, len, candidates, target);
|
|
268
|
-
return res;
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
var dfs = function (res, stack, index, len, candidates, target) {
|
|
272
|
-
var tmp = null;
|
|
273
|
-
if (target < 0) return;
|
|
274
|
-
if (target === 0) return res.push(stack);
|
|
275
|
-
for (var i = index; i < len; i++) {
|
|
276
|
-
if (candidates[i] > target) break;
|
|
277
|
-
if (i > index && candidates[i] === candidates[i - 1]) continue;
|
|
278
|
-
tmp = Array.from(stack);
|
|
279
|
-
tmp.push(candidates[i]);
|
|
280
|
-
dfs(res, tmp, i + 1, len, candidates, target - candidates[i]);
|
|
281
|
-
}
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
console.log(combinationSum2);
|
|
285
|
-
`), new _template.default(`
|
|
286
|
-
var isScramble = function(s1, s2) {
|
|
287
|
-
return helper({}, s1, s2);
|
|
288
|
-
};
|
|
289
|
-
|
|
290
|
-
var helper = function (dp, s1, s2) {
|
|
291
|
-
var map = {};
|
|
292
|
-
|
|
293
|
-
if (dp[s1 + s2] !== undefined) return dp[s1 + s2];
|
|
294
|
-
if (s1 === s2) return true;
|
|
295
|
-
|
|
296
|
-
for (var j = 0; j < s1.length; j++) {
|
|
297
|
-
if (map[s1[j]] === undefined) map[s1[j]] = 0;
|
|
298
|
-
if (map[s2[j]] === undefined) map[s2[j]] = 0;
|
|
299
|
-
map[s1[j]]++;
|
|
300
|
-
map[s2[j]]--;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
for (var key in map) {
|
|
304
|
-
if (map[key] !== 0) {
|
|
305
|
-
dp[s1 + s2] = false;
|
|
306
|
-
return false;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
for (var i = 1; i < s1.length; i++) {
|
|
311
|
-
if ((helper(dp, s1.substr(0, i), s2.substr(0, i))
|
|
312
|
-
&& helper(dp, s1.substr(i), s2.substr(i))) ||
|
|
313
|
-
(helper(dp, s1.substr(0, i), s2.substr(s2.length - i))
|
|
314
|
-
&& helper(dp, s1.substr(i), s2.substr(0, s2.length - i)))) {
|
|
315
|
-
dp[s1 + s2] = true;
|
|
316
|
-
return true;
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
dp[s1 + s2] = false;
|
|
321
|
-
return false;
|
|
322
72
|
};
|
|
323
|
-
|
|
324
|
-
console.log(isScramble);
|
|
325
|
-
`), new _template.default(`
|
|
326
|
-
var candy = function(ratings) {
|
|
327
|
-
var len = ratings.length;
|
|
328
|
-
var res = [];
|
|
329
|
-
var sum = 0;
|
|
330
|
-
for (var i = 0; i < len; i++) {
|
|
331
|
-
res.push((i !== 0 && ratings[i] > ratings[i - 1]) ? (res[i - 1] + 1) : 1);
|
|
332
|
-
}
|
|
333
|
-
for (var j = len - 1; j >= 0; j--) {
|
|
334
|
-
if (j !== len - 1 && ratings[j] > ratings[j + 1]) res[j] = Math.max(res[j], res[j + 1] + 1);
|
|
335
|
-
sum += res[j];
|
|
336
|
-
}
|
|
337
|
-
return sum;
|
|
338
|
-
};
|
|
339
|
-
|
|
340
|
-
console.log(candy)
|
|
341
|
-
`), new _template.default(`
|
|
342
|
-
var maxPoints = function(points) {
|
|
343
|
-
var max = 0;
|
|
344
|
-
var map = {};
|
|
345
|
-
var localMax = 0;
|
|
346
|
-
var samePoint = 0;
|
|
347
|
-
var k = 0;
|
|
348
|
-
var len = points.length;
|
|
349
|
-
for (var i = 0; i < len; i++) {
|
|
350
|
-
map = {};
|
|
351
|
-
localMax = 0;
|
|
352
|
-
samePoint = 1;
|
|
353
|
-
for (var j = i + 1; j < len; j++) {
|
|
354
|
-
if (points[i].x === points[j].x && points[i].y === points[j].y) {
|
|
355
|
-
samePoint++;
|
|
356
|
-
continue;
|
|
357
|
-
}
|
|
358
|
-
if (points[i].y === points[j].y) k = Number.MAX_SAFE_INTEGER;
|
|
359
|
-
else k = (points[i].x - points[j].x) / (points[i].y - points[j].y);
|
|
360
|
-
if (!map[k]) map[k] = 0;
|
|
361
|
-
map[k]++;
|
|
362
|
-
localMax = Math.max(localMax, map[k]);
|
|
363
|
-
}
|
|
364
|
-
localMax += samePoint;
|
|
365
|
-
max = Math.max(max, localMax);
|
|
366
|
-
}
|
|
367
|
-
return max;
|
|
368
|
-
};
|
|
369
|
-
|
|
370
|
-
console.log(maxPoints)
|
|
371
|
-
`), new _template.default(`
|
|
372
|
-
var maximumGap = function(nums) {
|
|
373
|
-
var len = nums.length;
|
|
374
|
-
if (len < 2) return 0;
|
|
375
|
-
|
|
376
|
-
var max = Math.max(...nums);
|
|
377
|
-
var min = Math.min(...nums);
|
|
378
|
-
if (max === min) return 0;
|
|
379
|
-
|
|
380
|
-
var minBuckets = Array(len - 1).fill(Number.MAX_SAFE_INTEGER);
|
|
381
|
-
var maxBuckets = Array(len - 1).fill(Number.MIN_SAFE_INTEGER);
|
|
382
|
-
var gap = Math.ceil((max - min) / (len - 1));
|
|
383
|
-
var index = 0;
|
|
384
|
-
for (var i = 0; i < len; i++) {
|
|
385
|
-
if (nums[i] === min || nums[i] === max) continue;
|
|
386
|
-
index = Math.floor((nums[i] - min) / gap);
|
|
387
|
-
minBuckets[index] = Math.min(minBuckets[index], nums[i]);
|
|
388
|
-
maxBuckets[index] = Math.max(maxBuckets[index], nums[i]);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
var maxGap = Number.MIN_SAFE_INTEGER;
|
|
392
|
-
var preVal = min;
|
|
393
|
-
for (var j = 0; j < len - 1; j++) {
|
|
394
|
-
if (minBuckets[j] === Number.MAX_SAFE_INTEGER && maxBuckets[j] === Number.MIN_SAFE_INTEGER) continue;
|
|
395
|
-
maxGap = Math.max(maxGap, minBuckets[j] - preVal);
|
|
396
|
-
preVal = maxBuckets[j];
|
|
397
|
-
}
|
|
398
|
-
maxGap = Math.max(maxGap, max - preVal);
|
|
399
|
-
|
|
400
|
-
return maxGap;
|
|
401
|
-
};
|
|
402
|
-
|
|
403
|
-
console.log(maximumGap);
|
|
404
|
-
`), new _template.default(`
|
|
405
|
-
var LRUCache = function(capacity) {
|
|
406
|
-
this.capacity = capacity;
|
|
407
|
-
this.length = 0;
|
|
408
|
-
this.map = {};
|
|
409
|
-
this.head = null;
|
|
410
|
-
this.tail = null;
|
|
411
|
-
};
|
|
412
|
-
|
|
413
|
-
LRUCache.prototype.get = function(key) {
|
|
414
|
-
var node = this.map[key];
|
|
415
|
-
if (node) {
|
|
416
|
-
this.remove(node);
|
|
417
|
-
this.insert(node.key, node.val);
|
|
418
|
-
return node.val;
|
|
419
|
-
} else {
|
|
420
|
-
return -1;
|
|
421
|
-
}
|
|
422
|
-
};
|
|
423
|
-
|
|
424
|
-
LRUCache.prototype.put = function(key, value) {
|
|
425
|
-
if (this.map[key]) {
|
|
426
|
-
this.remove(this.map[key]);
|
|
427
|
-
this.insert(key, value);
|
|
428
|
-
} else {
|
|
429
|
-
if (this.length === this.capacity) {
|
|
430
|
-
this.remove(this.head);
|
|
431
|
-
this.insert(key, value);
|
|
432
|
-
} else {
|
|
433
|
-
this.insert(key, value);
|
|
434
|
-
this.length++;
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
};
|
|
438
|
-
|
|
439
|
-
/**
|
|
440
|
-
* Your LRUCache object will be instantiated and called as such:
|
|
441
|
-
* var obj = Object.create(LRUCache).createNew(capacity)
|
|
442
|
-
* var param_1 = obj.get(key)
|
|
443
|
-
* obj.put(key,value)
|
|
444
|
-
*/
|
|
445
|
-
|
|
446
|
-
LRUCache.prototype.remove = function (node) {
|
|
447
|
-
var prev = node.prev;
|
|
448
|
-
var next = node.next;
|
|
449
|
-
if (next) next.prev = prev;
|
|
450
|
-
if (prev) prev.next = next;
|
|
451
|
-
if (this.head === node) this.head = next;
|
|
452
|
-
if (this.tail === node) this.tail = prev;
|
|
453
|
-
delete this.map[node.key];
|
|
454
|
-
};
|
|
455
|
-
|
|
456
|
-
LRUCache.prototype.insert = function (key, val) {
|
|
457
|
-
var node = new List(key, val);
|
|
458
|
-
if (!this.tail) {
|
|
459
|
-
this.tail = node;
|
|
460
|
-
this.head = node;
|
|
461
|
-
} else {
|
|
462
|
-
this.tail.next = node;
|
|
463
|
-
node.prev = this.tail;
|
|
464
|
-
this.tail = node;
|
|
465
|
-
}
|
|
466
|
-
this.map[key] = node;
|
|
467
|
-
};
|
|
468
|
-
|
|
469
|
-
console.log(LRUCache);
|
|
470
|
-
`), new _template.default(`
|
|
471
|
-
var isInterleave = function(s1, s2, s3) {
|
|
472
|
-
var dp = {};
|
|
473
|
-
if (s3.length !== s1.length + s2.length) return false;
|
|
474
|
-
return helper(s1, s2, s3, 0, 0, 0, dp);
|
|
475
|
-
};
|
|
476
|
-
|
|
477
|
-
var helper = function (s1, s2, s3, i, j, k, dp) {
|
|
478
|
-
var res = false;
|
|
479
|
-
|
|
480
|
-
if (k >= s3.length) return true;
|
|
481
|
-
if (dp['' + i + j + k] !== undefined) return dp['' + i + j + k];
|
|
482
|
-
|
|
483
|
-
if (s3[k] === s1[i] && s3[k] === s2[j]) {
|
|
484
|
-
res = helper(s1, s2, s3, i + 1, j, k + 1, dp) || helper(s1, s2, s3, i, j + 1, k + 1, dp);
|
|
485
|
-
} else if (s3[k] === s1[i]) {
|
|
486
|
-
res = helper(s1, s2, s3, i + 1, j, k + 1, dp);
|
|
487
|
-
} else if (s3[k] === s2[j]) {
|
|
488
|
-
res = helper(s1, s2, s3, i, j + 1, k + 1, dp);
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
dp['' + i + j + k] = res;
|
|
492
|
-
|
|
493
|
-
return res;
|
|
494
|
-
};
|
|
495
|
-
|
|
496
|
-
console.log(isInterleave);
|
|
497
|
-
`), new _template.default(`
|
|
498
|
-
var solveNQueens = function(n) {
|
|
499
|
-
var res = [];
|
|
500
|
-
if (n === 1 || n >= 4) dfs(res, [], n, 0);
|
|
501
|
-
return res;
|
|
502
|
-
};
|
|
503
|
-
|
|
504
|
-
var dfs = function (res, points, n, index) {
|
|
505
|
-
for (var i = index; i < n; i++) {
|
|
506
|
-
if (points.length !== i) return;
|
|
507
|
-
for (var j = 0; j < n; j++) {
|
|
508
|
-
if (isValid(points, [i, j])) {
|
|
509
|
-
points.push([i, j]);
|
|
510
|
-
dfs(res, points, n, i + 1);
|
|
511
|
-
if (points.length === n) res.push(buildRes(points));
|
|
512
|
-
points.pop();
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
};
|
|
517
|
-
|
|
518
|
-
var buildRes = function (points) {
|
|
519
|
-
var res = [];
|
|
520
|
-
var n = points.length;
|
|
521
|
-
for (var i = 0; i < n; i++) {
|
|
522
|
-
res[i] = '';
|
|
523
|
-
for (var j = 0; j < n; j++) {
|
|
524
|
-
res[i] += (points[i][1] === j ? 'Q' : '.');
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
return res;
|
|
528
|
-
};
|
|
529
|
-
|
|
530
|
-
var isValid = function (oldPoints, newPoint) {
|
|
531
|
-
var len = oldPoints.length;
|
|
532
|
-
for (var i = 0; i < len; i++) {
|
|
533
|
-
if (oldPoints[i][0] === newPoint[0] || oldPoints[i][1] === newPoint[1]) return false;
|
|
534
|
-
if (Math.abs((oldPoints[i][0] - newPoint[0]) / (oldPoints[i][1] - newPoint[1])) === 1) return false;
|
|
535
|
-
}
|
|
536
|
-
return true;
|
|
537
|
-
};
|
|
538
|
-
|
|
539
|
-
console.log(solveNQueens);
|
|
540
|
-
`)];
|
|
541
|
-
|
|
542
|
-
/**
|
|
543
|
-
* Adds dead code to blocks.
|
|
544
|
-
*
|
|
545
|
-
* - Adds fake predicates.
|
|
546
|
-
* - Adds fake code from various samples.
|
|
547
|
-
*/
|
|
548
|
-
class DeadCode extends _transform.default {
|
|
549
|
-
constructor(o) {
|
|
550
|
-
super(o, _order.ObfuscateOrder.DeadCode);
|
|
551
|
-
_defineProperty(this, "made", void 0);
|
|
552
|
-
_defineProperty(this, "compareObjectName", void 0);
|
|
553
|
-
_defineProperty(this, "gen", this.getGenerator("randomized"));
|
|
554
|
-
this.made = 0;
|
|
555
|
-
}
|
|
556
|
-
match(object, parents) {
|
|
557
|
-
return (0, _insert.isFunction)(object) && (0, _traverse.isBlock)(object.body) && !object.$multiTransformSkip && !parents.find(x => x.$multiTransformSkip);
|
|
558
|
-
}
|
|
559
|
-
transform(object, parents) {
|
|
560
|
-
if (!(0, _probability.ComputeProbabilityMap)(this.options.deadCode)) {
|
|
561
|
-
return;
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
// Hard-coded limit of 100 Dead Code insertions
|
|
565
|
-
this.made++;
|
|
566
|
-
if (this.made > 100) {
|
|
567
|
-
return;
|
|
568
|
-
}
|
|
569
|
-
return () => {
|
|
570
|
-
var body = (0, _insert.getBlockBody)(object);
|
|
571
|
-
|
|
572
|
-
// Do not place code before Import statements or 'use strict' directives
|
|
573
|
-
var safeOffset = 0;
|
|
574
|
-
for (var node of body) {
|
|
575
|
-
if (node.type === "ImportDeclaration" || node.directive) safeOffset++;else break;
|
|
576
|
-
}
|
|
577
|
-
var index = (0, _random.getRandomInteger)(safeOffset, body.length);
|
|
578
|
-
if (!this.compareObjectName) {
|
|
579
|
-
this.compareObjectName = this.getPlaceholder();
|
|
580
|
-
(0, _insert.prepend)(parents[parents.length - 1] || object, (0, _gen.VariableDeclaration)((0, _gen.VariableDeclarator)(this.compareObjectName, new _template.default(`Object["create"](null)`).single().expression)));
|
|
581
|
-
}
|
|
582
|
-
var name = this.getPlaceholder();
|
|
583
|
-
var variableDeclaration = (0, _gen.VariableDeclaration)((0, _gen.VariableDeclarator)(name, (0, _gen.BinaryExpression)("in", (0, _gen.Literal)(this.gen.generate()), (0, _gen.Identifier)(this.compareObjectName))));
|
|
584
|
-
var template;
|
|
585
|
-
do {
|
|
586
|
-
template = (0, _random.choice)(templates);
|
|
587
|
-
} while (this.options.es5 && template.templates[0].includes("async"));
|
|
588
|
-
var nodes = template.compile();
|
|
589
|
-
if ((0, _random.chance)(50)) {
|
|
590
|
-
nodes.unshift((0, _gen.ExpressionStatement)((0, _gen.AssignmentExpression)("=", (0, _gen.MemberExpression)((0, _gen.Identifier)(this.compareObjectName), (0, _gen.Literal)(this.gen.generate()), true), (0, _gen.Literal)(this.gen.generate()))));
|
|
591
|
-
}
|
|
592
|
-
var ifStatement = (0, _gen.IfStatement)((0, _gen.Identifier)(name), nodes, null);
|
|
593
|
-
body.splice(index, 0, ifStatement);
|
|
594
|
-
(0, _insert.prepend)(object, variableDeclaration);
|
|
595
|
-
};
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
exports.default = DeadCode;
|
|
73
|
+
};
|