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
package/tsconfig.json CHANGED
@@ -1,14 +1,13 @@
1
- {
2
- "compilerOptions": {
3
- "module": "esnext",
4
- "target": "es6",
5
- "strict": true,
6
- "esModuleInterop": true,
7
- "moduleResolution": "node",
8
- "outDir": "./dist",
9
- "skipLibCheck": true,
10
- "noImplicitAny": false,
11
- "strictNullChecks": false
12
- },
13
- "include": ["src/**/*"]
14
- }
1
+ {
2
+ "compilerOptions": {
3
+ "target": "esnext",
4
+ "module": "nodenext",
5
+ "outDir": "./dist",
6
+ "rootDir": "./",
7
+ "strict": false,
8
+ "noEmit": true,
9
+ "types": ["node"],
10
+ "allowImportingTsExtensions": true
11
+ },
12
+ "include": ["./src/**/*", "./index.d.ts"]
13
+ }
@@ -1 +0,0 @@
1
- "use strict";
@@ -1,230 +0,0 @@
1
- "use strict";
2
-
3
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports["default"] = void 0;
8
- var _order = require("../order");
9
- var _astUtils = require("../utils/ast-utils");
10
- var t = _interopRequireWildcard(require("@babel/types"));
11
- var _randomUtils = require("../utils/random-utils");
12
- var _probability = require("../probability");
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; }
15
- function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
16
- 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."); }
17
- function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
18
- function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
19
- 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; } } }; }
20
- 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; } }
21
- 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; }
22
- function isSafeForOutlining(path) {
23
- if (path.isIdentifier() || path.isLiteral()) return {
24
- isSafe: false
25
- };
26
-
27
- // Skip direct invocations ('this' will be different)
28
- if (path.key === "callee" && path.parentPath.isCallExpression()) {
29
- return {
30
- isSafe: false
31
- };
32
- }
33
-
34
- // Skip typeof and delete expressions (identifier behavior is different)
35
- if (path.key === "argument" && path.parentPath.isUnaryExpression()) {
36
- return {
37
- isSafe: false
38
- };
39
- }
40
- if (path.isReturnStatement() || path.isYieldExpression() || path.isAwaitExpression() || path.isContinueStatement() || path.isBreakStatement() || path.isThrowStatement() || path.isDebuggerStatement() || path.isImportDeclaration() || path.isExportDeclaration()) {
41
- return {
42
- isSafe: false
43
- };
44
- }
45
- var isSafe = true;
46
- var bindings = [];
47
- var fnPath = path.getFunctionParent();
48
- var visitor = {
49
- ThisExpression: function ThisExpression(path) {
50
- isSafe = false;
51
- path.stop();
52
- },
53
- Identifier: function Identifier(path) {
54
- if (["arguments", "eval"].includes(path.node.name)) {
55
- isSafe = false;
56
- path.stop();
57
- }
58
- },
59
- BindingIdentifier: function BindingIdentifier(path) {
60
- var binding = path.scope.getBinding(path.node.name);
61
- if (binding) {
62
- bindings.push(binding);
63
- }
64
- },
65
- // Function flow guard
66
- "ReturnStatement|YieldExpression|AwaitExpression": function ReturnStatementYieldExpressionAwaitExpression(path) {
67
- if (path.getFunctionParent() === fnPath) {
68
- isSafe = false;
69
- path.stop();
70
- }
71
- }
72
- };
73
-
74
- // Exclude 'ThisExpression' and semantic 'Identifier' nodes
75
- if (visitor[path.type]) return {
76
- isSafe: false
77
- };
78
- path.traverse(visitor);
79
- return {
80
- isSafe: isSafe,
81
- bindings: bindings
82
- };
83
- }
84
- var _default = exports["default"] = function _default(_ref) {
85
- var Plugin = _ref.Plugin;
86
- var me = Plugin(_order.Order.FunctionOutlining, {
87
- changeData: {
88
- functionsMade: 0
89
- }
90
- });
91
- var changesMade = 0;
92
- function checkProbability() {
93
- if (!(0, _probability.computeProbabilityMap)(me.options.functionOutlining)) return false;
94
- if (changesMade > 100 && (0, _randomUtils.chance)(changesMade - 100)) return false;
95
- return true;
96
- }
97
- return {
98
- visitor: {
99
- Block: {
100
- exit: function exit(blockPath) {
101
- if (blockPath.isProgram()) {
102
- blockPath.scope.crawl();
103
- }
104
- if (blockPath.find(function (p) {
105
- return me.isSkipped(p);
106
- })) return;
107
- if (!checkProbability()) return;
108
-
109
- // Extract a random number of statements
110
-
111
- var statements = blockPath.get("body");
112
- // var startIndex = getRandomInteger(0, statements.length);
113
- // var endIndex = getRandomInteger(startIndex, statements.length);
114
-
115
- var startIndex = 0;
116
- var endIndex = statements.length;
117
- var extractedStatements = statements.slice(startIndex, endIndex);
118
- if (!extractedStatements.length) return;
119
- var bindings = [];
120
- var _iterator = _createForOfIteratorHelper(extractedStatements),
121
- _step;
122
- try {
123
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
124
- var statement = _step.value;
125
- // Don't override the control node
126
- if (me.isSkipped(statement)) return;
127
- var result = isSafeForOutlining(statement);
128
- if (!result.isSafe) {
129
- return;
130
- }
131
- bindings.push.apply(bindings, _toConsumableArray(result.bindings));
132
- }
133
- } catch (err) {
134
- _iterator.e(err);
135
- } finally {
136
- _iterator.f();
137
- }
138
- var extractedStatementSet = new Set(extractedStatements);
139
- for (var _i = 0, _bindings = bindings; _i < _bindings.length; _i++) {
140
- var binding = _bindings[_i];
141
- var _iterator2 = _createForOfIteratorHelper(binding.referencePaths),
142
- _step2;
143
- try {
144
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
145
- var referencePath = _step2.value;
146
- var found = referencePath.find(function (p) {
147
- return extractedStatementSet.has(p);
148
- });
149
- if (!found) {
150
- return;
151
- }
152
- }
153
- } catch (err) {
154
- _iterator2.e(err);
155
- } finally {
156
- _iterator2.f();
157
- }
158
- var _iterator3 = _createForOfIteratorHelper(binding.constantViolations),
159
- _step3;
160
- try {
161
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
162
- var constantViolation = _step3.value;
163
- var found = constantViolation.find(function (p) {
164
- return extractedStatementSet.has(p);
165
- });
166
- if (!found) {
167
- return;
168
- }
169
- }
170
- } catch (err) {
171
- _iterator3.e(err);
172
- } finally {
173
- _iterator3.f();
174
- }
175
- }
176
- changesMade++;
177
- var isFirst = true;
178
- var _iterator4 = _createForOfIteratorHelper(extractedStatements),
179
- _step4;
180
- try {
181
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
182
- var statement = _step4.value;
183
- if (isFirst) {
184
- isFirst = false;
185
- var memberExpression = me.getControlObject(blockPath).addProperty(t.functionExpression(null, [], t.blockStatement(extractedStatements.map(function (x) {
186
- return x.node;
187
- }))));
188
- me.changeData.functionsMade++;
189
- var callExpression = t.callExpression(memberExpression, []);
190
- statement.replaceWith(callExpression);
191
- continue;
192
- }
193
- statement.remove();
194
- }
195
- } catch (err) {
196
- _iterator4.e(err);
197
- } finally {
198
- _iterator4.f();
199
- }
200
- }
201
- },
202
- Expression: {
203
- exit: function exit(path) {
204
- // Skip assignment left
205
- if (path.find(function (p) {
206
- var _p$parentPath;
207
- return p.key === "left" && ((_p$parentPath = p.parentPath) === null || _p$parentPath === void 0 ? void 0 : _p$parentPath.type) === "AssignmentExpression";
208
- })) {
209
- return;
210
- }
211
- if (!checkProbability()) return;
212
- if (path.find(function (p) {
213
- return me.isSkipped(p);
214
- })) return;
215
- if (!isSafeForOutlining(path).isSafe) return;
216
- changesMade++;
217
- var blockPath = path.find(function (p) {
218
- return p.isBlock();
219
- });
220
- var memberExpression = me.getControlObject(blockPath).addProperty(t.functionExpression(null, [], t.blockStatement([t.returnStatement(t.cloneNode(path.node))])));
221
- me.changeData.functionsMade++;
222
- var callExpression = t.callExpression(memberExpression, []);
223
- (0, _astUtils.ensureComputedExpression)(path);
224
- path.replaceWith(callExpression);
225
- me.skip(path);
226
- }
227
- }
228
- }
229
- };
230
- };
@@ -1,125 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = void 0;
7
- var t = _interopRequireWildcard(require("@babel/types"));
8
- var _NameGen = require("./NameGen");
9
- var _astUtils = require("./ast-utils");
10
- var _randomUtils = require("./random-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; }
13
- 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); }
14
- function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
15
- function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
16
- function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
17
- 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; }
18
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
19
- function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
20
- /**
21
- * A Control Object is an object that is used to store properties that are used in multiple places.
22
- */
23
- var ControlObject = exports["default"] = /*#__PURE__*/function () {
24
- function ControlObject(me, blockPath) {
25
- _classCallCheck(this, ControlObject);
26
- _defineProperty(this, "propertyNames", new Set());
27
- _defineProperty(this, "objectName", null);
28
- _defineProperty(this, "objectPath", null);
29
- _defineProperty(this, "objectExpression", null);
30
- this.me = me;
31
- this.blockPath = blockPath;
32
- this.nameGen = new _NameGen.NameGen(me.options.identifierGenerator, {
33
- avoidReserved: true,
34
- avoidObjectPrototype: true
35
- });
36
- }
37
- return _createClass(ControlObject, [{
38
- key: "createMemberExpression",
39
- value: function createMemberExpression(propertyName) {
40
- return t.memberExpression(t.identifier(this.objectName), t.stringLiteral(propertyName), true);
41
- }
42
- }, {
43
- key: "createPredicate",
44
- value: function createPredicate() {
45
- this.ensureCreated();
46
- var propertyName = (0, _randomUtils.choice)(Array.from(this.propertyNames));
47
- if (!propertyName || (0, _randomUtils.chance)(50)) {
48
- propertyName = this.nameGen.generate();
49
- }
50
- return {
51
- node: t.binaryExpression("in", t.stringLiteral(propertyName), t.identifier(this.objectName)),
52
- value: this.propertyNames.has(propertyName)
53
- };
54
- }
55
- }, {
56
- key: "createTruePredicate",
57
- value: function createTruePredicate() {
58
- var _this$createPredicate = this.createPredicate(),
59
- node = _this$createPredicate.node,
60
- value = _this$createPredicate.value;
61
- if (value) {
62
- return node;
63
- }
64
- return t.unaryExpression("!", node);
65
- }
66
- }, {
67
- key: "createFalsePredicate",
68
- value: function createFalsePredicate() {
69
- var _this$createPredicate2 = this.createPredicate(),
70
- node = _this$createPredicate2.node,
71
- value = _this$createPredicate2.value;
72
- if (!value) {
73
- return node;
74
- }
75
- return t.unaryExpression("!", node);
76
- }
77
- }, {
78
- key: "ensureCreated",
79
- value: function ensureCreated(node) {
80
- if (!this.objectName) {
81
- // Object hasn't been created yet
82
- this.objectName = this.me.getPlaceholder() + "_controlObject";
83
- if (node && t.isFunctionExpression(node) && !node.id) {
84
- // Use function declaration as object
85
-
86
- var newNode = node;
87
- newNode.type = "FunctionDeclaration";
88
- newNode.id = t.identifier(this.objectName);
89
- var newPath = (0, _astUtils.prepend)(this.blockPath, newNode)[0];
90
- this.me.skip(newPath);
91
- this.objectPath = newPath;
92
- return t.identifier(this.objectName);
93
- } else {
94
- // Create plain object
95
- var _newPath = (0, _astUtils.prepend)(this.blockPath, t.variableDeclaration("var", [t.variableDeclarator(t.identifier(this.objectName), t.objectExpression([]))]))[0];
96
- this.me.skip(_newPath);
97
- this.objectPath = _newPath;
98
- var objectExpression = _newPath.node.declarations[0].init;
99
- this.objectExpression = objectExpression;
100
- this.me.skip(this.objectExpression);
101
- }
102
- }
103
- }
104
- }, {
105
- key: "addProperty",
106
- value: function addProperty(node) {
107
- var initialNode = this.ensureCreated(node);
108
- if (initialNode) return initialNode;
109
- var propertyName = this.nameGen.generate();
110
- this.propertyNames.add(propertyName);
111
-
112
- // Add an initial property
113
- if (this.objectExpression) {
114
- this.objectExpression.properties.push(t.objectProperty(t.identifier(propertyName), node));
115
- } else {
116
- // Add as assignment expression
117
-
118
- var assignment = t.assignmentExpression("=", this.createMemberExpression(propertyName), node);
119
- var newPath = this.objectPath.insertAfter(t.expressionStatement(assignment))[0];
120
- this.me.skip(newPath);
121
- }
122
- return this.createMemberExpression(propertyName);
123
- }
124
- }]);
125
- }();