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.
Files changed (113) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +43 -43
  2. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -20
  3. package/.github/workflows/node.js.yml +28 -28
  4. package/.prettierrc +4 -4
  5. package/CHANGELOG.md +1015 -989
  6. package/CODE_OF_CONDUCT.md +131 -131
  7. package/CONTRIBUTING.md +52 -52
  8. package/LICENSE +21 -21
  9. package/Migration.md +72 -71
  10. package/README.md +86 -78
  11. package/dist/constants.js +43 -43
  12. package/dist/index.js +14 -23
  13. package/dist/obfuscator.js +31 -25
  14. package/dist/order.js +4 -4
  15. package/dist/presets.js +31 -31
  16. package/dist/templates/integrityTemplate.js +4 -4
  17. package/dist/templates/template.js +1 -2
  18. package/dist/transforms/astScrambler.js +1 -2
  19. package/dist/transforms/calculator.js +1 -2
  20. package/dist/transforms/controlFlowFlattening.js +93 -63
  21. package/dist/transforms/deadCode.js +1 -2
  22. package/dist/transforms/dispatcher.js +4 -5
  23. package/dist/transforms/extraction/duplicateLiteralsRemoval.js +1 -2
  24. package/dist/transforms/extraction/objectExtraction.js +1 -2
  25. package/dist/transforms/finalizer.js +1 -2
  26. package/dist/transforms/flatten.js +1 -2
  27. package/dist/transforms/identifier/globalConcealing.js +15 -2
  28. package/dist/transforms/identifier/movedDeclarations.js +8 -7
  29. package/dist/transforms/identifier/renameVariables.js +7 -7
  30. package/dist/transforms/lock/integrity.js +11 -10
  31. package/dist/transforms/lock/lock.js +2 -3
  32. package/dist/transforms/minify.js +11 -29
  33. package/dist/transforms/opaquePredicates.js +1 -2
  34. package/dist/transforms/pack.js +5 -2
  35. package/dist/transforms/plugin.js +18 -19
  36. package/dist/transforms/preparation.js +16 -16
  37. package/dist/transforms/renameLabels.js +1 -2
  38. package/dist/transforms/rgf.js +8 -9
  39. package/dist/transforms/shuffle.js +1 -2
  40. package/dist/transforms/string/encoding.js +1 -2
  41. package/dist/transforms/string/stringCompression.js +3 -4
  42. package/dist/transforms/string/stringConcealing.js +8 -3
  43. package/dist/transforms/string/stringEncoding.js +1 -2
  44. package/dist/transforms/variableMasking.js +1 -2
  45. package/dist/utils/NameGen.js +2 -2
  46. package/dist/utils/PredicateGen.js +1 -2
  47. package/dist/utils/ast-utils.js +87 -88
  48. package/dist/utils/function-utils.js +8 -8
  49. package/dist/utils/node.js +5 -6
  50. package/dist/utils/object-utils.js +4 -4
  51. package/dist/utils/random-utils.js +20 -20
  52. package/dist/utils/static-utils.js +1 -2
  53. package/dist/validateOptions.js +4 -7
  54. package/index.d.ts +17 -17
  55. package/package.json +61 -59
  56. package/src/constants.ts +168 -168
  57. package/src/index.ts +118 -118
  58. package/src/obfuscationResult.ts +49 -49
  59. package/src/obfuscator.ts +501 -497
  60. package/src/options.ts +407 -407
  61. package/src/order.ts +54 -54
  62. package/src/presets.ts +125 -125
  63. package/src/templates/bufferToStringTemplate.ts +57 -57
  64. package/src/templates/deadCodeTemplates.ts +1185 -1185
  65. package/src/templates/getGlobalTemplate.ts +76 -76
  66. package/src/templates/integrityTemplate.ts +64 -64
  67. package/src/templates/setFunctionLengthTemplate.ts +11 -11
  68. package/src/templates/stringCompressionTemplate.ts +20 -20
  69. package/src/templates/tamperProtectionTemplates.ts +120 -120
  70. package/src/templates/template.ts +224 -224
  71. package/src/transforms/astScrambler.ts +99 -99
  72. package/src/transforms/calculator.ts +99 -99
  73. package/src/transforms/controlFlowFlattening.ts +1716 -1664
  74. package/src/transforms/deadCode.ts +82 -82
  75. package/src/transforms/dispatcher.ts +450 -450
  76. package/src/transforms/extraction/duplicateLiteralsRemoval.ts +156 -158
  77. package/src/transforms/extraction/objectExtraction.ts +186 -186
  78. package/src/transforms/finalizer.ts +74 -74
  79. package/src/transforms/flatten.ts +421 -420
  80. package/src/transforms/identifier/globalConcealing.ts +315 -295
  81. package/src/transforms/identifier/movedDeclarations.ts +252 -251
  82. package/src/transforms/identifier/renameVariables.ts +328 -321
  83. package/src/transforms/lock/integrity.ts +117 -114
  84. package/src/transforms/lock/lock.ts +418 -425
  85. package/src/transforms/minify.ts +615 -629
  86. package/src/transforms/opaquePredicates.ts +100 -100
  87. package/src/transforms/pack.ts +239 -231
  88. package/src/transforms/plugin.ts +173 -173
  89. package/src/transforms/preparation.ts +349 -347
  90. package/src/transforms/renameLabels.ts +175 -175
  91. package/src/transforms/rgf.ts +322 -322
  92. package/src/transforms/shuffle.ts +82 -82
  93. package/src/transforms/string/encoding.ts +144 -144
  94. package/src/transforms/string/stringCompression.ts +128 -128
  95. package/src/transforms/string/stringConcealing.ts +312 -298
  96. package/src/transforms/string/stringEncoding.ts +80 -80
  97. package/src/transforms/string/stringSplitting.ts +77 -77
  98. package/src/transforms/variableMasking.ts +257 -257
  99. package/src/utils/IntGen.ts +33 -33
  100. package/src/utils/NameGen.ts +116 -116
  101. package/src/utils/PredicateGen.ts +61 -61
  102. package/src/utils/ast-utils.ts +663 -663
  103. package/src/utils/function-utils.ts +50 -50
  104. package/src/utils/gen-utils.ts +48 -48
  105. package/src/utils/node.ts +78 -78
  106. package/src/utils/object-utils.ts +21 -21
  107. package/src/utils/random-utils.ts +93 -93
  108. package/src/utils/static-utils.ts +66 -66
  109. package/src/validateOptions.ts +256 -259
  110. package/tsconfig.json +13 -14
  111. package/dist/probability.js +0 -1
  112. package/dist/transforms/functionOutlining.js +0 -230
  113. 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 _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); }
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 = new Set();
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.forEach(function (node) {
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 _i = 0; _i < cloneChunkCount; _i++) {
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
- for (var _i8 = 0; _i8 < stateVars.length; _i8++) {
917
- var oldValue = currentStateValues[_i8];
918
- var newValue = newStateValues[_i8];
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) continue; // No diff needed if the value doesn't change
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[_i8]), (0, _node.numericLiteral)(newValue));
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
- assignment = t.assignmentExpression("+=", (0, _node.deepClone)(stateVars[_i8]), (0, _node.numericLiteral)(newValue - oldValue));
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 _i2 = 0; _i2 < predicateNumberCount; _i2++) {
966
- var name = mainScope.getNewName(me.getPlaceholder("predicate_" + _i2));
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 _i3 = 0; _i3 < fakeAssignmentCount; _i3++) {
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[_i4];
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 _i5 = 0; _i5 < fakeTestCount; _i5++) {
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 _i6 = 0, _tests = tests; _i6 < _tests.length; _i6++) {
1093
- var _test = _tests[_i6];
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 _i4 = 0, _blocks = blocks; _i4 < _blocks.length; _i4++) {
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 _i7 = 0, _functionExpressions = functionExpressions; _i7 < _functionExpressions.length; _i7++) {
1129
- var _functionExpressions$ = _slicedToArray(_functionExpressions[_i7], 4),
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: t.callExpression((0, _node.deepClone)(mainFnName), argumentsNodes)
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
- var startProgramExpression = t.callExpression((0, _node.deepClone)(mainFnName), _toConsumableArray(startStateValues.map(function (stateValue) {
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.add(programOrFunctionPath.node);
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 _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); }
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 _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); }
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 _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); }
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 _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); }
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 _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); }
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 _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); }
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 _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); }
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 _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); }
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; }
17
- /**
18
- * Moved Declarations moves variables in two ways:
19
- *
20
- * 1) Move variables to top of the current block
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 _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); }
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
- return;
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 _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); }
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
- funcDecPath.node.body = t.blockStatement(new _template["default"]("\n var hash = ".concat(selfCacheString, " || (").concat(selfCacheString, " = ").concat(obfuscatedHashFnName, "(").concat(newFunctionDeclaration.id.name, ", ").concat(seed, "));\n if(hash === ").concat(hashCode, ") {\n {originalBody}\n } else {\n {countermeasures} \n }\n ")).compile({
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 _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; }
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 // Prepack Breaker\n if(Math.random() > 1) {\n while(true) {\n console.log(\"Prepack Breaker\");\n }\n }\n\n return namedFunction();\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
  }