js-confuser 2.0.0-alpha.5 → 2.0.1
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 +43 -43
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
- package/.github/workflows/node.js.yml +28 -28
- package/.prettierrc +4 -4
- package/CHANGELOG.md +1015 -989
- package/CODE_OF_CONDUCT.md +131 -131
- package/CONTRIBUTING.md +52 -52
- package/LICENSE +21 -21
- package/Migration.md +72 -71
- package/README.md +86 -78
- package/dist/constants.js +43 -43
- package/dist/index.js +14 -23
- package/dist/obfuscator.js +31 -25
- package/dist/order.js +4 -4
- package/dist/presets.js +31 -31
- package/dist/templates/integrityTemplate.js +4 -4
- package/dist/templates/template.js +1 -2
- package/dist/transforms/astScrambler.js +1 -2
- package/dist/transforms/calculator.js +1 -2
- package/dist/transforms/controlFlowFlattening.js +93 -63
- package/dist/transforms/deadCode.js +1 -2
- package/dist/transforms/dispatcher.js +4 -5
- package/dist/transforms/extraction/duplicateLiteralsRemoval.js +1 -2
- package/dist/transforms/extraction/objectExtraction.js +1 -2
- package/dist/transforms/finalizer.js +1 -2
- package/dist/transforms/flatten.js +1 -2
- package/dist/transforms/identifier/globalConcealing.js +15 -2
- package/dist/transforms/identifier/movedDeclarations.js +8 -7
- package/dist/transforms/identifier/renameVariables.js +7 -7
- package/dist/transforms/lock/integrity.js +11 -10
- package/dist/transforms/lock/lock.js +2 -3
- package/dist/transforms/minify.js +11 -29
- package/dist/transforms/opaquePredicates.js +1 -2
- package/dist/transforms/pack.js +5 -2
- package/dist/transforms/plugin.js +18 -19
- package/dist/transforms/preparation.js +16 -16
- package/dist/transforms/renameLabels.js +1 -2
- package/dist/transforms/rgf.js +8 -9
- package/dist/transforms/shuffle.js +1 -2
- package/dist/transforms/string/encoding.js +1 -2
- package/dist/transforms/string/stringCompression.js +3 -4
- package/dist/transforms/string/stringConcealing.js +8 -3
- package/dist/transforms/string/stringEncoding.js +1 -2
- package/dist/transforms/variableMasking.js +1 -2
- package/dist/utils/NameGen.js +2 -2
- package/dist/utils/PredicateGen.js +1 -2
- package/dist/utils/ast-utils.js +87 -88
- package/dist/utils/function-utils.js +8 -8
- package/dist/utils/node.js +5 -6
- package/dist/utils/object-utils.js +4 -4
- package/dist/utils/random-utils.js +20 -20
- package/dist/utils/static-utils.js +1 -2
- package/dist/validateOptions.js +4 -7
- package/index.d.ts +17 -17
- package/package.json +61 -59
- package/src/constants.ts +168 -168
- package/src/index.ts +118 -118
- package/src/obfuscationResult.ts +49 -49
- package/src/obfuscator.ts +501 -497
- package/src/options.ts +407 -407
- package/src/order.ts +54 -54
- package/src/presets.ts +125 -125
- package/src/templates/bufferToStringTemplate.ts +57 -57
- package/src/templates/deadCodeTemplates.ts +1185 -1185
- package/src/templates/getGlobalTemplate.ts +76 -76
- package/src/templates/integrityTemplate.ts +64 -64
- package/src/templates/setFunctionLengthTemplate.ts +11 -11
- package/src/templates/stringCompressionTemplate.ts +20 -20
- package/src/templates/tamperProtectionTemplates.ts +120 -120
- package/src/templates/template.ts +224 -224
- package/src/transforms/astScrambler.ts +99 -99
- package/src/transforms/calculator.ts +99 -99
- package/src/transforms/controlFlowFlattening.ts +1716 -1664
- package/src/transforms/deadCode.ts +82 -82
- package/src/transforms/dispatcher.ts +450 -450
- package/src/transforms/extraction/duplicateLiteralsRemoval.ts +156 -158
- package/src/transforms/extraction/objectExtraction.ts +186 -186
- package/src/transforms/finalizer.ts +74 -74
- package/src/transforms/flatten.ts +421 -420
- package/src/transforms/identifier/globalConcealing.ts +315 -295
- package/src/transforms/identifier/movedDeclarations.ts +252 -251
- package/src/transforms/identifier/renameVariables.ts +328 -321
- package/src/transforms/lock/integrity.ts +117 -114
- package/src/transforms/lock/lock.ts +418 -425
- package/src/transforms/minify.ts +615 -629
- package/src/transforms/opaquePredicates.ts +100 -100
- package/src/transforms/pack.ts +239 -231
- package/src/transforms/plugin.ts +173 -173
- package/src/transforms/preparation.ts +349 -347
- package/src/transforms/renameLabels.ts +175 -175
- package/src/transforms/rgf.ts +322 -322
- package/src/transforms/shuffle.ts +82 -82
- package/src/transforms/string/encoding.ts +144 -144
- package/src/transforms/string/stringCompression.ts +128 -128
- package/src/transforms/string/stringConcealing.ts +312 -298
- package/src/transforms/string/stringEncoding.ts +80 -80
- package/src/transforms/string/stringSplitting.ts +77 -77
- package/src/transforms/variableMasking.ts +257 -257
- package/src/utils/IntGen.ts +33 -33
- package/src/utils/NameGen.ts +116 -116
- package/src/utils/PredicateGen.ts +61 -61
- package/src/utils/ast-utils.ts +663 -663
- package/src/utils/function-utils.ts +50 -50
- package/src/utils/gen-utils.ts +48 -48
- package/src/utils/node.ts +78 -78
- package/src/utils/object-utils.ts +21 -21
- package/src/utils/random-utils.ts +93 -93
- package/src/utils/static-utils.ts +66 -66
- package/src/validateOptions.ts +256 -259
- package/tsconfig.json +13 -14
- package/dist/probability.js +0 -1
- package/dist/transforms/functionOutlining.js +0 -230
- package/dist/utils/ControlObject.js +0 -125
|
@@ -16,8 +16,7 @@ var _assert = require("assert");
|
|
|
16
16
|
var _NameGen = require("../utils/NameGen");
|
|
17
17
|
var _constants = require("../constants");
|
|
18
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
19
|
-
function
|
|
20
|
-
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 _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
21
20
|
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); }
|
|
22
21
|
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
23
22
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -39,18 +38,18 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
39
38
|
// Function deemed unsafe for CFF
|
|
40
39
|
var CFF_UNSAFE = Symbol("CFF_UNSAFE");
|
|
41
40
|
|
|
42
|
-
/**
|
|
43
|
-
* Breaks functions into DAGs (Directed Acyclic Graphs)
|
|
44
|
-
*
|
|
45
|
-
* - 1. Break functions into chunks
|
|
46
|
-
* - 2. Shuffle chunks but remember their original position
|
|
47
|
-
* - 3. Create a Switch statement inside a While loop, each case is a chunk, and the while loops exits on the last transition.
|
|
48
|
-
*
|
|
49
|
-
* The Switch statement:
|
|
50
|
-
*
|
|
51
|
-
* - 1. The state variable controls which case will run next
|
|
52
|
-
* - 2. At the end of each case, the state variable is updated to the next block of code.
|
|
53
|
-
* - 3. The while loop continues until the the state variable is the end state.
|
|
41
|
+
/**
|
|
42
|
+
* Breaks functions into DAGs (Directed Acyclic Graphs)
|
|
43
|
+
*
|
|
44
|
+
* - 1. Break functions into chunks
|
|
45
|
+
* - 2. Shuffle chunks but remember their original position
|
|
46
|
+
* - 3. Create a Switch statement inside a While loop, each case is a chunk, and the while loops exits on the last transition.
|
|
47
|
+
*
|
|
48
|
+
* The Switch statement:
|
|
49
|
+
*
|
|
50
|
+
* - 1. The state variable controls which case will run next
|
|
51
|
+
* - 2. At the end of each case, the state variable is updated to the next block of code.
|
|
52
|
+
* - 3. The while loop continues until the the state variable is the end state.
|
|
54
53
|
*/
|
|
55
54
|
var _default = exports["default"] = function _default(_ref) {
|
|
56
55
|
var Plugin = _ref.Plugin;
|
|
@@ -76,21 +75,23 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
76
75
|
var mangleNumericalLiterals = true; // 50 => state + X
|
|
77
76
|
var mangleBooleanLiterals = true; // true => state == X
|
|
78
77
|
var addWithStatement = true; // Disabling not supported yet
|
|
78
|
+
var addGeneratorFunction = true; // Wrap in generator function?
|
|
79
79
|
|
|
80
80
|
var cffPrefix = me.getPlaceholder();
|
|
81
81
|
|
|
82
82
|
// Amount of blocks changed by Control Flow Flattening
|
|
83
83
|
var cffCounter = 0;
|
|
84
|
-
var functionsModified =
|
|
84
|
+
var functionsModified = [];
|
|
85
85
|
function flagFunctionToAvoid(path, reason) {
|
|
86
86
|
var fnOrProgram = (0, _astUtils.getParentFunctionOrProgram)(path);
|
|
87
87
|
fnOrProgram.node[CFF_UNSAFE] = reason;
|
|
88
88
|
}
|
|
89
89
|
return {
|
|
90
90
|
post: function post() {
|
|
91
|
-
functionsModified.
|
|
91
|
+
for (var _i = 0, _functionsModified = functionsModified; _i < _functionsModified.length; _i++) {
|
|
92
|
+
var node = _functionsModified[_i];
|
|
92
93
|
node[_constants.UNSAFE] = true;
|
|
93
|
-
}
|
|
94
|
+
}
|
|
94
95
|
},
|
|
95
96
|
visitor: {
|
|
96
97
|
// Unsafe detection
|
|
@@ -330,8 +331,8 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
330
331
|
});
|
|
331
332
|
};
|
|
332
333
|
var scopeToScopeManager = new Map();
|
|
333
|
-
/**
|
|
334
|
-
* A Basic Block is a sequence of instructions with no diversion except at the entry and exit points.
|
|
334
|
+
/**
|
|
335
|
+
* A Basic Block is a sequence of instructions with no diversion except at the entry and exit points.
|
|
335
336
|
*/
|
|
336
337
|
var BasicBlock = /*#__PURE__*/function () {
|
|
337
338
|
function BasicBlock(label, parentPath) {
|
|
@@ -489,16 +490,16 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
489
490
|
}
|
|
490
491
|
}]);
|
|
491
492
|
}();
|
|
492
|
-
/**
|
|
493
|
-
* Stage 1: Flatten the code into Basic Blocks
|
|
494
|
-
*
|
|
495
|
-
* This involves transforming the Control Flow / Scopes into blocks with 'goto' statements
|
|
496
|
-
*
|
|
497
|
-
* - A block is simply a sequence of statements
|
|
498
|
-
* - A block can have a 'goto' statement to another block
|
|
499
|
-
* - A block original scope is preserved
|
|
500
|
-
*
|
|
501
|
-
* 'goto' & Scopes are transformed in Stage 2
|
|
493
|
+
/**
|
|
494
|
+
* Stage 1: Flatten the code into Basic Blocks
|
|
495
|
+
*
|
|
496
|
+
* This involves transforming the Control Flow / Scopes into blocks with 'goto' statements
|
|
497
|
+
*
|
|
498
|
+
* - A block is simply a sequence of statements
|
|
499
|
+
* - A block can have a 'goto' statement to another block
|
|
500
|
+
* - A block original scope is preserved
|
|
501
|
+
*
|
|
502
|
+
* 'goto' & Scopes are transformed in Stage 2
|
|
502
503
|
*/
|
|
503
504
|
var switchLabel = me.getPlaceholder();
|
|
504
505
|
var breakStatement = function breakStatement() {
|
|
@@ -654,7 +655,8 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
654
655
|
}
|
|
655
656
|
if (Number(index) === body.length - 1 && statement.isExpressionStatement() && statement.findParent(function (p) {
|
|
656
657
|
return p.isBlock();
|
|
657
|
-
}) === blockPath
|
|
658
|
+
}) === blockPath && programPath // <- ONLY APPLY TO TOP-LEVEL NEVER FUNCTIONS!
|
|
659
|
+
) {
|
|
658
660
|
// Return the result of the last expression for eval() purposes
|
|
659
661
|
currentBasicBlock.insertAfter(t.returnStatement(statement.get("expression").node));
|
|
660
662
|
return 0; // continue
|
|
@@ -741,7 +743,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
741
743
|
me.changeData.deadCode++;
|
|
742
744
|
}
|
|
743
745
|
};
|
|
744
|
-
for (var
|
|
746
|
+
for (var _i2 = 0; _i2 < cloneChunkCount; _i2++) {
|
|
745
747
|
_loop2();
|
|
746
748
|
}
|
|
747
749
|
}
|
|
@@ -759,11 +761,11 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
759
761
|
}
|
|
760
762
|
}
|
|
761
763
|
|
|
762
|
-
/**
|
|
763
|
-
* Stage 2: Transform 'goto' statements into valid JavaScript
|
|
764
|
-
*
|
|
765
|
-
* - 'goto' is replaced with equivalent state updates and break statements
|
|
766
|
-
* - Original identifiers are converted into member expressions
|
|
764
|
+
/**
|
|
765
|
+
* Stage 2: Transform 'goto' statements into valid JavaScript
|
|
766
|
+
*
|
|
767
|
+
* - 'goto' is replaced with equivalent state updates and break statements
|
|
768
|
+
* - Original identifiers are converted into member expressions
|
|
767
769
|
*/
|
|
768
770
|
|
|
769
771
|
// Remap 'GotoStatement' to actual state assignments and Break statements
|
|
@@ -913,19 +915,38 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
913
915
|
var fakeProperty = scopeNameGen.generate();
|
|
914
916
|
assignments.push(t.assignmentExpression("=", (0, _node.deepClone)(withMemberExpression), t.memberExpression((0, _node.deepClone)(scopeVar), t.stringLiteral(fakeProperty), true)));
|
|
915
917
|
}
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
var
|
|
918
|
+
var mutatingStateValues = _toConsumableArray(currentStateValues);
|
|
919
|
+
var _loop5 = function _loop5(_i9) {
|
|
920
|
+
var oldValue = currentStateValues[_i9];
|
|
921
|
+
var newValue = newStateValues[_i9];
|
|
919
922
|
|
|
920
923
|
// console.log(oldValue, newValue);
|
|
921
|
-
if (oldValue === newValue)
|
|
924
|
+
if (oldValue === newValue) return 1; // continue
|
|
925
|
+
// No diff needed if the value doesn't change
|
|
922
926
|
|
|
923
|
-
var assignment = t.assignmentExpression("=", (0, _node.deepClone)(stateVars[
|
|
927
|
+
var assignment = t.assignmentExpression("=", (0, _node.deepClone)(stateVars[_i9]), (0, _node.numericLiteral)(newValue));
|
|
924
928
|
if (!isDebug && addRelativeAssignments) {
|
|
925
|
-
// Use diffs to create confusing code
|
|
926
|
-
|
|
929
|
+
// Use two level of diffs to create confusing code:
|
|
930
|
+
// stateVar += anotherStateVar - diff
|
|
931
|
+
// has the effect of:
|
|
932
|
+
// stateVar = newState
|
|
933
|
+
var mangledNumericLiteral = function mangledNumericLiteral(value) {
|
|
934
|
+
var stateVarIndex;
|
|
935
|
+
do {
|
|
936
|
+
stateVarIndex = (0, _randomUtils.getRandomInteger)(0, stateVars.length);
|
|
937
|
+
} while (stateVarIndex === _i9 && stateVars.length > 1);
|
|
938
|
+
var stateVarId = stateVars[stateVarIndex];
|
|
939
|
+
var stateVarValue = mutatingStateValues[stateVarIndex];
|
|
940
|
+
var diff = stateVarValue - value;
|
|
941
|
+
return t.binaryExpression("-", (0, _node.deepClone)(stateVarId), (0, _node.numericLiteral)(diff));
|
|
942
|
+
};
|
|
943
|
+
assignment = t.assignmentExpression("+=", (0, _node.deepClone)(stateVars[_i9]), mangledNumericLiteral(newValue - oldValue));
|
|
927
944
|
}
|
|
945
|
+
mutatingStateValues[_i9] = newValue;
|
|
928
946
|
assignments.push(assignment);
|
|
947
|
+
};
|
|
948
|
+
for (var _i9 = 0; _i9 < stateVars.length; _i9++) {
|
|
949
|
+
if (_loop5(_i9)) continue;
|
|
929
950
|
}
|
|
930
951
|
|
|
931
952
|
// Add debug label
|
|
@@ -946,11 +967,11 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
946
967
|
_loop4();
|
|
947
968
|
}
|
|
948
969
|
|
|
949
|
-
/**
|
|
950
|
-
* Stage 3: Create a switch statement to handle the control flow
|
|
951
|
-
*
|
|
952
|
-
* - Add fake / impossible blocks
|
|
953
|
-
* - Add fake / predicates to the switch cases tests
|
|
970
|
+
/**
|
|
971
|
+
* Stage 3: Create a switch statement to handle the control flow
|
|
972
|
+
*
|
|
973
|
+
* - Add fake / impossible blocks
|
|
974
|
+
* - Add fake / predicates to the switch cases tests
|
|
954
975
|
*/
|
|
955
976
|
|
|
956
977
|
// Create global numbers for predicates
|
|
@@ -962,8 +983,8 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
962
983
|
var mainScope = basicBlocks.get(startLabel).scopeManager;
|
|
963
984
|
var predicateNumbers = new Map();
|
|
964
985
|
var predicateNumberCount = isDebug || !addPredicateTests ? 0 : (0, _randomUtils.getRandomInteger)(1, 4);
|
|
965
|
-
for (var
|
|
966
|
-
var name = mainScope.getNewName(me.getPlaceholder("predicate_" +
|
|
986
|
+
for (var _i3 = 0; _i3 < predicateNumberCount; _i3++) {
|
|
987
|
+
var name = mainScope.getNewName(me.getPlaceholder("predicate_" + _i3));
|
|
967
988
|
var number = (0, _randomUtils.getRandomInteger)(-250, 250);
|
|
968
989
|
predicateNumbers.set(name, number);
|
|
969
990
|
}
|
|
@@ -984,7 +1005,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
984
1005
|
|
|
985
1006
|
// Add random assignments to impossible blocks
|
|
986
1007
|
var fakeAssignmentCount = (0, _randomUtils.getRandomInteger)(1, 3);
|
|
987
|
-
for (var
|
|
1008
|
+
for (var _i4 = 0; _i4 < fakeAssignmentCount; _i4++) {
|
|
988
1009
|
var impossibleBlock = (0, _randomUtils.choice)(getImpossibleBasicBlocks());
|
|
989
1010
|
if (impossibleBlock) {
|
|
990
1011
|
var _impossibleBlock$body;
|
|
@@ -1018,7 +1039,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1018
1039
|
(0, _randomUtils.shuffle)(blocks);
|
|
1019
1040
|
}
|
|
1020
1041
|
var _loop3 = function _loop3() {
|
|
1021
|
-
var block = _blocks[
|
|
1042
|
+
var block = _blocks[_i5];
|
|
1022
1043
|
if (block.label === endLabel) {
|
|
1023
1044
|
// ok(block.body.length === 0);
|
|
1024
1045
|
return 1; // continue
|
|
@@ -1083,19 +1104,19 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1083
1104
|
if (!isDebug && addFakeTests && (0, _randomUtils.chance)(50)) {
|
|
1084
1105
|
// Add fake tests
|
|
1085
1106
|
var fakeTestCount = (0, _randomUtils.getRandomInteger)(1, 3);
|
|
1086
|
-
for (var
|
|
1107
|
+
for (var _i6 = 0; _i6 < fakeTestCount; _i6++) {
|
|
1087
1108
|
tests.push((0, _node.numericLiteral)(stateIntGen.generate()));
|
|
1088
1109
|
}
|
|
1089
1110
|
(0, _randomUtils.shuffle)(tests);
|
|
1090
1111
|
}
|
|
1091
1112
|
var lastTest = tests.pop();
|
|
1092
|
-
for (var
|
|
1093
|
-
var _test = _tests[
|
|
1113
|
+
for (var _i7 = 0, _tests = tests; _i7 < _tests.length; _i7++) {
|
|
1114
|
+
var _test = _tests[_i7];
|
|
1094
1115
|
switchCases.push(t.switchCase(_test, []));
|
|
1095
1116
|
}
|
|
1096
1117
|
switchCases.push(t.switchCase(lastTest, block.thisPath.node.body));
|
|
1097
1118
|
};
|
|
1098
|
-
for (var
|
|
1119
|
+
for (var _i5 = 0, _blocks = blocks; _i5 < _blocks.length; _i5++) {
|
|
1099
1120
|
if (_loop3()) continue;
|
|
1100
1121
|
}
|
|
1101
1122
|
if (!isDebug && addFakeTests) {
|
|
@@ -1125,8 +1146,8 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1125
1146
|
var parametersNames = parameters.map(function (id) {
|
|
1126
1147
|
return id.name;
|
|
1127
1148
|
});
|
|
1128
|
-
for (var
|
|
1129
|
-
var _functionExpressions$ = _slicedToArray(_functionExpressions[
|
|
1149
|
+
for (var _i8 = 0, _functionExpressions = functionExpressions; _i8 < _functionExpressions.length; _i8++) {
|
|
1150
|
+
var _functionExpressions$ = _slicedToArray(_functionExpressions[_i8], 4),
|
|
1130
1151
|
originalFnName = _functionExpressions$[0],
|
|
1131
1152
|
fnLabel = _functionExpressions$[1],
|
|
1132
1153
|
basicBlock = _functionExpressions$[2],
|
|
@@ -1164,7 +1185,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1164
1185
|
}
|
|
1165
1186
|
usedArgVar = true;
|
|
1166
1187
|
Object.assign(fn, new _template["default"]("\n (function (...".concat(argumentsRestName, "){\n ").concat(isDebug ? "\"Calling ".concat(originalFnName, ", Label: ").concat(fnLabel, "\";") : "", "\n return {callExpression}\n })\n \n ")).expression({
|
|
1167
|
-
callExpression:
|
|
1188
|
+
callExpression: createCallExpression(argumentsNodes)
|
|
1168
1189
|
}));
|
|
1169
1190
|
}
|
|
1170
1191
|
var startProgramObjectExpression = basicBlocks.get(startLabel).scopeManager.getObjectExpression(startLabel);
|
|
@@ -1180,13 +1201,22 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1180
1201
|
if (!usedArgVar) {
|
|
1181
1202
|
mainParameters.pop();
|
|
1182
1203
|
}
|
|
1183
|
-
var mainFnDeclaration = t.functionDeclaration((0, _node.deepClone)(mainFnName), parameters, t.blockStatement([whileStatement]));
|
|
1204
|
+
var mainFnDeclaration = t.functionDeclaration((0, _node.deepClone)(mainFnName), parameters, t.blockStatement([whileStatement]), addGeneratorFunction);
|
|
1184
1205
|
|
|
1185
1206
|
// The main function is always called with same number of arguments
|
|
1186
1207
|
mainFnDeclaration[_constants.PREDICTABLE] = true;
|
|
1187
|
-
|
|
1208
|
+
function createCallExpression(argumentNodes) {
|
|
1209
|
+
var callExpression = t.callExpression((0, _node.deepClone)(mainFnName), argumentNodes);
|
|
1210
|
+
if (!addGeneratorFunction) {
|
|
1211
|
+
return callExpression;
|
|
1212
|
+
}
|
|
1213
|
+
return new _template["default"]("\n ({callExpression})[\"next\"]()[\"value\"];\n ").expression({
|
|
1214
|
+
callExpression: callExpression
|
|
1215
|
+
});
|
|
1216
|
+
}
|
|
1217
|
+
var startProgramExpression = createCallExpression(startStateValues.map(function (stateValue) {
|
|
1188
1218
|
return (0, _node.numericLiteral)(stateValue);
|
|
1189
|
-
}))
|
|
1219
|
+
}));
|
|
1190
1220
|
var _resultVar = withIdentifier("result");
|
|
1191
1221
|
var isTopLevel = blockPath.isProgram();
|
|
1192
1222
|
var allowReturns = !isTopLevel && blockPath.find(function (p) {
|
|
@@ -1203,7 +1233,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
1203
1233
|
}
|
|
1204
1234
|
});
|
|
1205
1235
|
blockPath.node.body = [].concat(prependNodes, [mainFnDeclaration], _toConsumableArray(startProgramStatements));
|
|
1206
|
-
functionsModified.
|
|
1236
|
+
functionsModified.push(programOrFunctionPath.node);
|
|
1207
1237
|
|
|
1208
1238
|
// Reset all bindings here
|
|
1209
1239
|
blockPath.scope.bindings = Object.create(null);
|
|
@@ -12,8 +12,7 @@ var _template = _interopRequireDefault(require("../templates/template"));
|
|
|
12
12
|
var _astUtils = require("../utils/ast-utils");
|
|
13
13
|
var _PredicateGen = _interopRequireDefault(require("../utils/PredicateGen"));
|
|
14
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
15
|
-
function
|
|
16
|
-
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; }
|
|
15
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
17
16
|
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
18
17
|
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."); }
|
|
19
18
|
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; } }
|
|
@@ -16,8 +16,7 @@ var _setFunctionLengthTemplate = require("../templates/setFunctionLengthTemplate
|
|
|
16
16
|
var _node = require("../utils/node");
|
|
17
17
|
var _astUtils = require("../utils/ast-utils");
|
|
18
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
19
|
-
function
|
|
20
|
-
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 _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
21
20
|
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
22
21
|
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."); }
|
|
23
22
|
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
@@ -327,9 +326,9 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
327
326
|
});
|
|
328
327
|
dispatcher[_constants.PREDICTABLE] = true;
|
|
329
328
|
|
|
330
|
-
/**
|
|
331
|
-
* Prepends the node into the block. (And registers the declaration)
|
|
332
|
-
* @param node
|
|
329
|
+
/**
|
|
330
|
+
* Prepends the node into the block. (And registers the declaration)
|
|
331
|
+
* @param node
|
|
333
332
|
*/
|
|
334
333
|
function prepend(node) {
|
|
335
334
|
var newPath = blockStatement.unshiftContainer("body", node)[0];
|
|
@@ -10,8 +10,7 @@ var _assert = require("assert");
|
|
|
10
10
|
var _order = require("../../order");
|
|
11
11
|
var _astUtils = require("../../utils/ast-utils");
|
|
12
12
|
var _node = require("../../utils/node");
|
|
13
|
-
function
|
|
14
|
-
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; }
|
|
13
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
15
14
|
function fail() {
|
|
16
15
|
throw new Error("Assertion failed");
|
|
17
16
|
}
|
|
@@ -8,8 +8,7 @@ exports["default"] = void 0;
|
|
|
8
8
|
var _order = require("../../order");
|
|
9
9
|
var t = _interopRequireWildcard(require("@babel/types"));
|
|
10
10
|
var _astUtils = require("../../utils/ast-utils");
|
|
11
|
-
function
|
|
12
|
-
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; }
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
13
12
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
14
13
|
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; } }
|
|
15
14
|
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; }
|
|
@@ -10,8 +10,7 @@ var _stringEncoding = _interopRequireDefault(require("./string/stringEncoding"))
|
|
|
10
10
|
var _constants = require("../constants");
|
|
11
11
|
var _assert = require("assert");
|
|
12
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
13
|
-
function
|
|
14
|
-
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; }
|
|
13
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
15
14
|
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); }
|
|
16
15
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
17
16
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -11,8 +11,7 @@ var _order = require("../order");
|
|
|
11
11
|
var _constants = require("../constants");
|
|
12
12
|
var _functionUtils = require("../utils/function-utils");
|
|
13
13
|
var _NameGen = require("../utils/NameGen");
|
|
14
|
-
function
|
|
15
|
-
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; }
|
|
14
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
16
15
|
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
17
16
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
18
17
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
@@ -15,8 +15,7 @@ var _getGlobalTemplate = require("../../templates/getGlobalTemplate");
|
|
|
15
15
|
var _randomUtils = require("../../utils/random-utils");
|
|
16
16
|
var _assert = require("assert");
|
|
17
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
18
|
-
function
|
|
19
|
-
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; }
|
|
18
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
20
19
|
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
21
20
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
22
21
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
@@ -79,6 +78,9 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
79
78
|
if (!identifierPath.scope.hasGlobal(identifierName)) {
|
|
80
79
|
return;
|
|
81
80
|
}
|
|
81
|
+
|
|
82
|
+
// Do not transform:
|
|
83
|
+
// identifier = "value"
|
|
82
84
|
var assignmentChild = identifierPath.find(function (p) {
|
|
83
85
|
var _p$parentPath;
|
|
84
86
|
return (_p$parentPath = p.parentPath) === null || _p$parentPath === void 0 ? void 0 : _p$parentPath.isAssignmentExpression();
|
|
@@ -87,6 +89,17 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
87
89
|
illegalGlobals.add(identifierName);
|
|
88
90
|
return;
|
|
89
91
|
}
|
|
92
|
+
|
|
93
|
+
// Do not transform:
|
|
94
|
+
// for(identifier in object) or for(identifier of object)
|
|
95
|
+
var forInOfChild = identifierPath.find(function (p) {
|
|
96
|
+
var _p$parentPath2, _p$parentPath3;
|
|
97
|
+
return p.key === "left" && (((_p$parentPath2 = p.parentPath) === null || _p$parentPath2 === void 0 ? void 0 : _p$parentPath2.isForInStatement()) || ((_p$parentPath3 = p.parentPath) === null || _p$parentPath3 === void 0 ? void 0 : _p$parentPath3.isForOfStatement()));
|
|
98
|
+
});
|
|
99
|
+
if (forInOfChild && (t.isForInStatement(forInOfChild.parent) || t.isForOfStatement(forInOfChild.parent)) && forInOfChild.parent.left === forInOfChild.node) {
|
|
100
|
+
illegalGlobals.add(identifierName);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
90
103
|
if (!pendingReplacements.has(identifierName)) {
|
|
91
104
|
pendingReplacements.set(identifierName, [identifierPath]);
|
|
92
105
|
} else {
|
|
@@ -12,13 +12,12 @@ var _staticUtils = require("../../utils/static-utils");
|
|
|
12
12
|
var _astUtils = require("../../utils/ast-utils");
|
|
13
13
|
var _template = _interopRequireDefault(require("../../templates/template"));
|
|
14
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* 2) Move variables as unused function parameters
|
|
15
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
16
|
+
/**
|
|
17
|
+
* Moved Declarations moves variables in two ways:
|
|
18
|
+
*
|
|
19
|
+
* 1) Move variables to top of the current block
|
|
20
|
+
* 2) Move variables as unused function parameters
|
|
22
21
|
*/
|
|
23
22
|
var _default = exports["default"] = function _default(_ref) {
|
|
24
23
|
var Plugin = _ref.Plugin;
|
|
@@ -96,9 +95,11 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
96
95
|
},
|
|
97
96
|
VariableDeclaration: {
|
|
98
97
|
exit: function exit(path) {
|
|
98
|
+
var _path$parentPath;
|
|
99
99
|
if (me.isSkipped(path)) return;
|
|
100
100
|
if (path.node.kind !== "var") return;
|
|
101
101
|
if (path.node.declarations.length !== 1) return;
|
|
102
|
+
if ((_path$parentPath = path.parentPath) !== null && _path$parentPath !== void 0 && _path$parentPath.isExportDeclaration()) return;
|
|
102
103
|
var insertionMethod = "variableDeclaration";
|
|
103
104
|
var functionPath = path.findParent(function (path) {
|
|
104
105
|
return path.isFunction();
|
|
@@ -10,8 +10,7 @@ var _order = require("../../order");
|
|
|
10
10
|
var _constants = require("../../constants");
|
|
11
11
|
var _astUtils = require("../../utils/ast-utils");
|
|
12
12
|
var _functionUtils = require("../../utils/function-utils");
|
|
13
|
-
function
|
|
14
|
-
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; }
|
|
13
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
15
14
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
16
15
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
17
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; }
|
|
@@ -49,16 +48,17 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
49
48
|
if (!(0, _astUtils.isVariableIdentifier)(path)) return;
|
|
50
49
|
var contextPaths = [(0, _astUtils.getParentFunctionOrProgram)(path)];
|
|
51
50
|
var isDefined = false;
|
|
52
|
-
var isParameter = false;
|
|
53
51
|
if (path.isBindingIdentifier() && (0, _astUtils.isDefiningIdentifier)(path)) {
|
|
54
52
|
isDefined = true;
|
|
55
53
|
var binding = path.scope.getBinding(path.node.name);
|
|
56
|
-
if ((binding === null || binding === void 0 ? void 0 : binding.kind) === "param") isParameter = true;
|
|
57
54
|
|
|
58
55
|
// Function ID is defined in the parent's function declaration
|
|
59
56
|
if (path.key === "id" && path.parentPath.isFunctionDeclaration()) {
|
|
60
57
|
contextPaths = [(0, _astUtils.getParentFunctionOrProgram)(path.parentPath)];
|
|
61
58
|
}
|
|
59
|
+
if (binding && binding.kind === "let" && binding.path.key === "handler" && binding.path.isCatchClause()) {
|
|
60
|
+
contextPaths = [path];
|
|
61
|
+
}
|
|
62
62
|
}
|
|
63
63
|
contextPaths.forEach(function (contextPath) {
|
|
64
64
|
// console.log(contextPath.node.type, path.node.name, isDefined);
|
|
@@ -93,9 +93,9 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
93
93
|
if (!(0, _astUtils.isVariableIdentifier)(identifierPath)) return;
|
|
94
94
|
var node = identifierPath.node;
|
|
95
95
|
var identifierName = node.name;
|
|
96
|
-
if (node[RENAMED])
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
if (node[RENAMED]) return;
|
|
97
|
+
if (node[_constants.WITH_STATEMENT]) return; // Exclude CFF identifiers
|
|
98
|
+
|
|
99
99
|
var contextPaths = identifierPath.getAncestry();
|
|
100
100
|
|
|
101
101
|
// A Function ID is not in the same context as it's body
|
|
@@ -12,16 +12,15 @@ var t = _interopRequireWildcard(require("@babel/types"));
|
|
|
12
12
|
var _template = _interopRequireDefault(require("../../templates/template"));
|
|
13
13
|
var _NameGen = require("../../utils/NameGen");
|
|
14
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
15
|
-
function
|
|
16
|
-
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; }
|
|
15
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
17
16
|
var INTEGRITY = exports.INTEGRITY = Symbol("Integrity");
|
|
18
|
-
/**
|
|
19
|
-
* Integrity has two passes:
|
|
20
|
-
*
|
|
21
|
-
* - First in the 'lock' plugin to select functions and prepare them for Integrity
|
|
22
|
-
* - Secondly here to apply the integrity check
|
|
23
|
-
*
|
|
24
|
-
* This transformation must run last as any changes to the code will break the hash
|
|
17
|
+
/**
|
|
18
|
+
* Integrity has two passes:
|
|
19
|
+
*
|
|
20
|
+
* - First in the 'lock' plugin to select functions and prepare them for Integrity
|
|
21
|
+
* - Secondly here to apply the integrity check
|
|
22
|
+
*
|
|
23
|
+
* This transformation must run last as any changes to the code will break the hash
|
|
25
24
|
*/
|
|
26
25
|
var _default = exports["default"] = function _default(_ref) {
|
|
27
26
|
var Plugin = _ref.Plugin;
|
|
@@ -68,8 +67,10 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
68
67
|
|
|
69
68
|
// me.log(codeTrimmed, hashCode);
|
|
70
69
|
me.changeData.functions++;
|
|
71
|
-
|
|
70
|
+
var hashName = nameGen.generate();
|
|
71
|
+
funcDecPath.node.body = t.blockStatement(new _template["default"]("\n var {hashName} = ".concat(selfCacheString, " || (").concat(selfCacheString, " = ").concat(obfuscatedHashFnName, "(").concat(newFunctionDeclaration.id.name, ", ").concat(seed, "));\n if({hashName} === ").concat(hashCode, ") {\n {originalBody}\n } else {\n {countermeasures} \n }\n ")).compile({
|
|
72
72
|
originalBody: funcDecPath.node.body.body,
|
|
73
|
+
hashName: hashName,
|
|
73
74
|
countermeasures: function countermeasures() {
|
|
74
75
|
return me.globalState.lock.createCountermeasuresCode();
|
|
75
76
|
}
|
|
@@ -14,8 +14,7 @@ var _integrity = require("./integrity");
|
|
|
14
14
|
var _integrityTemplate = require("../../templates/integrityTemplate");
|
|
15
15
|
var _constants = require("../../constants");
|
|
16
16
|
var _tamperProtectionTemplates = require("../../templates/tamperProtectionTemplates");
|
|
17
|
-
function
|
|
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; }
|
|
17
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
19
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
20
19
|
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
21
20
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
@@ -79,7 +78,7 @@ var _default = exports["default"] = function _default(_ref) {
|
|
|
79
78
|
}
|
|
80
79
|
if (me.options.lock.selfDefending) {
|
|
81
80
|
me.options.lock.customLocks.push({
|
|
82
|
-
code: "\n (\n function(){\n // Breaks any code formatter\n var namedFunction = function(){\n const test = function(){\n const regExp=new RegExp('\\n');\n return regExp['test'](namedFunction)\n };\n\n if(test()) {\n {countermeasures}\n }\n }\n\n
|
|
81
|
+
code: "\n (\n function(){\n // Breaks any code formatter\n var namedFunction = function(){\n const test = function(){\n const regExp= new RegExp('\\n');\n return regExp['test'](namedFunction)\n };\n\n if(test()) {\n {countermeasures}\n }\n }\n\n return namedFunction();\n }\n )();\n ",
|
|
83
82
|
percentagePerBlock: 0.5
|
|
84
83
|
});
|
|
85
84
|
}
|