babel-schmooze-sprockets 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/bin/console +14 -0
  3. data/bin/export-external-helpers +3 -0
  4. data/bin/setup +6 -0
  5. data/bin/update-npm-deps +8 -0
  6. data/examples/myapp/Gemfile +4 -5
  7. data/examples/myapp/Gemfile.lock +69 -93
  8. data/examples/myapp/app/assets/javascripts/code/hello.es6 +5 -1
  9. data/examples/myapp/app/views/layouts/application.html.erb +1 -0
  10. data/examples/myapp/app/views/site/home.html.erb +0 -1
  11. data/lib/babel-schmooze-sprockets/babel_processor.rb +6 -4
  12. data/lib/babel-schmooze-sprockets/engine.rb +1 -4
  13. data/lib/babel-schmooze-sprockets/version.rb +1 -1
  14. data/node_modules/amdefine/package.json +8 -1
  15. data/node_modules/babel-core/node_modules/babel-runtime/package.json +9 -5
  16. data/node_modules/babel-core/node_modules/babel-traverse/.npmignore +3 -0
  17. data/node_modules/babel-core/node_modules/babel-traverse/README.md +1 -0
  18. data/node_modules/babel-core/node_modules/babel-traverse/lib/cache.js +20 -0
  19. data/node_modules/babel-core/node_modules/babel-traverse/lib/context.js +219 -0
  20. data/node_modules/babel-core/node_modules/babel-traverse/lib/hub.js +19 -0
  21. data/node_modules/babel-core/node_modules/babel-traverse/lib/index.js +250 -0
  22. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/ancestry.js +317 -0
  23. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/comments.js +55 -0
  24. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/context.js +297 -0
  25. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/conversion.js +48 -0
  26. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/evaluation.js +406 -0
  27. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/family.js +168 -0
  28. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/index.js +245 -0
  29. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/inference/index.js +151 -0
  30. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/inference/inferer-reference.js +225 -0
  31. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/inference/inferers.js +198 -0
  32. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/introspection.js +518 -0
  33. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/lib/hoister.js +166 -0
  34. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/lib/removal-hooks.js +64 -0
  35. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/lib/virtual-types.js +141 -0
  36. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/modification.js +293 -0
  37. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/removal.js +72 -0
  38. data/node_modules/babel-core/node_modules/babel-traverse/lib/path/replacement.js +302 -0
  39. data/node_modules/babel-core/node_modules/babel-traverse/lib/scope/binding.js +105 -0
  40. data/node_modules/babel-core/node_modules/babel-traverse/lib/scope/index.js +1222 -0
  41. data/node_modules/babel-core/node_modules/babel-traverse/lib/scope/lib/renamer.js +154 -0
  42. data/node_modules/babel-core/node_modules/babel-traverse/lib/visitors.js +360 -0
  43. data/node_modules/babel-core/node_modules/babel-traverse/package.json +107 -0
  44. data/node_modules/babel-core/node_modules/core-js/package.json +20 -2
  45. data/node_modules/babel-core/package.json +31 -24
  46. data/node_modules/babel-generator/lib/buffer.js +69 -70
  47. data/node_modules/babel-generator/lib/generators/base.js +16 -12
  48. data/node_modules/babel-generator/lib/generators/classes.js +28 -19
  49. data/node_modules/babel-generator/lib/generators/expressions.js +76 -99
  50. data/node_modules/babel-generator/lib/generators/flow.js +178 -119
  51. data/node_modules/babel-generator/lib/generators/jsx.js +38 -29
  52. data/node_modules/babel-generator/lib/generators/methods.js +34 -25
  53. data/node_modules/babel-generator/lib/generators/modules.js +67 -40
  54. data/node_modules/babel-generator/lib/generators/statements.js +93 -76
  55. data/node_modules/babel-generator/lib/generators/template-literals.js +12 -11
  56. data/node_modules/babel-generator/lib/generators/types.js +56 -49
  57. data/node_modules/babel-generator/lib/index.js +52 -39
  58. data/node_modules/babel-generator/lib/node/index.js +12 -18
  59. data/node_modules/babel-generator/lib/node/parentheses.js +23 -27
  60. data/node_modules/babel-generator/lib/node/whitespace.js +20 -26
  61. data/node_modules/babel-generator/lib/position.js +5 -5
  62. data/node_modules/babel-generator/lib/printer.js +52 -81
  63. data/node_modules/babel-generator/lib/source-map.js +9 -11
  64. data/node_modules/babel-generator/lib/whitespace.js +13 -13
  65. data/node_modules/babel-generator/node_modules/babel-runtime/package.json +19 -6
  66. data/node_modules/babel-generator/node_modules/babel-types/.npmignore +3 -0
  67. data/node_modules/babel-generator/node_modules/babel-types/README.md +1141 -0
  68. data/node_modules/babel-generator/node_modules/babel-types/lib/constants.js +40 -0
  69. data/node_modules/babel-generator/node_modules/babel-types/lib/converters.js +378 -0
  70. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/core.js +704 -0
  71. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/es2015.js +354 -0
  72. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/experimental.js +85 -0
  73. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/flow.js +319 -0
  74. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/index.js +247 -0
  75. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/init.js +15 -0
  76. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/jsx.js +137 -0
  77. data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/misc.js +21 -0
  78. data/node_modules/babel-generator/node_modules/babel-types/lib/flow.js +129 -0
  79. data/node_modules/babel-generator/node_modules/babel-types/lib/index.js +848 -0
  80. data/node_modules/babel-generator/node_modules/babel-types/lib/react.js +83 -0
  81. data/node_modules/babel-generator/node_modules/babel-types/lib/retrievers.js +123 -0
  82. data/node_modules/babel-generator/node_modules/babel-types/lib/validators.js +276 -0
  83. data/node_modules/babel-generator/node_modules/babel-types/package.json +103 -0
  84. data/node_modules/babel-generator/node_modules/core-js/package.json +10 -5
  85. data/node_modules/babel-generator/package.json +19 -16
  86. data/node_modules/babel-helpers/node_modules/babel-runtime/package.json +19 -3
  87. data/node_modules/babel-helpers/node_modules/core-js/package.json +20 -4
  88. data/node_modules/babel-helpers/package.json +8 -1
  89. data/node_modules/babel-register/node_modules/babel-runtime/package.json +19 -3
  90. data/node_modules/babel-register/node_modules/core-js/package.json +20 -4
  91. data/node_modules/babel-register/package.json +8 -1
  92. data/node_modules/balanced-match/package.json +8 -1
  93. data/node_modules/brace-expansion/package.json +19 -12
  94. data/node_modules/concat-map/package.json +9 -2
  95. data/node_modules/convert-source-map/package.json +8 -1
  96. data/node_modules/detect-indent/package.json +8 -1
  97. data/node_modules/get-stdin/package.json +8 -1
  98. data/node_modules/home-or-tmp/package.json +9 -2
  99. data/node_modules/is-finite/package.json +8 -2
  100. data/node_modules/json5/package.json +8 -1
  101. data/node_modules/minimatch/README.md +2 -9
  102. data/node_modules/minimatch/minimatch.js +15 -3
  103. data/node_modules/minimatch/package.json +29 -21
  104. data/node_modules/minimist/package.json +8 -1
  105. data/node_modules/mkdirp/node_modules/minimist/package.json +8 -1
  106. data/node_modules/mkdirp/package.json +8 -1
  107. data/node_modules/number-is-nan/package.json +8 -1
  108. data/node_modules/os-tmpdir/package.json +8 -1
  109. data/node_modules/path-exists/package.json +8 -1
  110. data/node_modules/path-is-absolute/package.json +8 -1
  111. data/node_modules/repeating/package.json +15 -11
  112. data/node_modules/shebang-regex/package.json +8 -1
  113. data/node_modules/slash/package.json +8 -1
  114. data/node_modules/source-map-support/node_modules/source-map/package.json +8 -1
  115. data/node_modules/source-map-support/package.json +8 -1
  116. data/node_modules/source-map/package.json +8 -1
  117. data/node_modules/user-home/package.json +8 -1
  118. data/package.json +1 -1
  119. metadata +54 -6
  120. data/node_modules/brace-expansion/.npmignore +0 -3
  121. data/node_modules/brace-expansion/example.js +0 -8
  122. data/node_modules/minimatch/browser.js +0 -1159
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.NOT_LOCAL_BINDING = exports.BLOCK_SCOPED_SYMBOL = exports.INHERIT_KEYS = exports.UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = exports.BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = exports.UPDATE_OPERATORS = exports.LOGICAL_OPERATORS = exports.COMMENT_KEYS = exports.FOR_INIT_KEYS = exports.FLATTENABLE_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = undefined;
5
+
6
+ var _for = require("babel-runtime/core-js/symbol/for");
7
+
8
+ var _for2 = _interopRequireDefault(_for);
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ /* eslint max-len: 0 */
13
+
14
+ var STATEMENT_OR_BLOCK_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = ["consequent", "body", "alternate"];
15
+ var FLATTENABLE_KEYS = exports.FLATTENABLE_KEYS = ["body", "expressions"];
16
+ var FOR_INIT_KEYS = exports.FOR_INIT_KEYS = ["left", "init"];
17
+ var COMMENT_KEYS = exports.COMMENT_KEYS = ["leadingComments", "trailingComments", "innerComments"];
18
+
19
+ var LOGICAL_OPERATORS = exports.LOGICAL_OPERATORS = ["||", "&&"];
20
+ var UPDATE_OPERATORS = exports.UPDATE_OPERATORS = ["++", "--"];
21
+
22
+ var BOOLEAN_NUMBER_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = [">", "<", ">=", "<="];
23
+ var EQUALITY_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = ["==", "===", "!=", "!=="];
24
+ var COMPARISON_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = [].concat(EQUALITY_BINARY_OPERATORS, ["in", "instanceof"]);
25
+ var BOOLEAN_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = [].concat(COMPARISON_BINARY_OPERATORS, BOOLEAN_NUMBER_BINARY_OPERATORS);
26
+ var NUMBER_BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = ["-", "/", "%", "*", "**", "&", "|", ">>", ">>>", "<<", "^"];
27
+ var BINARY_OPERATORS = exports.BINARY_OPERATORS = ["+"].concat(NUMBER_BINARY_OPERATORS, BOOLEAN_BINARY_OPERATORS);
28
+
29
+ var BOOLEAN_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = ["delete", "!"];
30
+ var NUMBER_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = ["+", "-", "++", "--", "~"];
31
+ var STRING_UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = ["typeof"];
32
+ var UNARY_OPERATORS = exports.UNARY_OPERATORS = ["void"].concat(BOOLEAN_UNARY_OPERATORS, NUMBER_UNARY_OPERATORS, STRING_UNARY_OPERATORS);
33
+
34
+ var INHERIT_KEYS = exports.INHERIT_KEYS = {
35
+ optional: ["typeAnnotation", "typeParameters", "returnType"],
36
+ force: ["start", "loc", "end"]
37
+ };
38
+
39
+ var BLOCK_SCOPED_SYMBOL = exports.BLOCK_SCOPED_SYMBOL = (0, _for2.default)("var used to be block scoped");
40
+ var NOT_LOCAL_BINDING = exports.NOT_LOCAL_BINDING = (0, _for2.default)("should not be considered a local binding");
@@ -0,0 +1,378 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _maxSafeInteger = require("babel-runtime/core-js/number/max-safe-integer");
6
+
7
+ var _maxSafeInteger2 = _interopRequireDefault(_maxSafeInteger);
8
+
9
+ var _stringify = require("babel-runtime/core-js/json/stringify");
10
+
11
+ var _stringify2 = _interopRequireDefault(_stringify);
12
+
13
+ var _getIterator2 = require("babel-runtime/core-js/get-iterator");
14
+
15
+ var _getIterator3 = _interopRequireDefault(_getIterator2);
16
+
17
+ exports.toComputedKey = toComputedKey;
18
+ exports.toSequenceExpression = toSequenceExpression;
19
+ exports.toKeyAlias = toKeyAlias;
20
+ exports.toIdentifier = toIdentifier;
21
+ exports.toBindingIdentifierName = toBindingIdentifierName;
22
+ exports.toStatement = toStatement;
23
+ exports.toExpression = toExpression;
24
+ exports.toBlock = toBlock;
25
+ exports.valueToNode = valueToNode;
26
+
27
+ var _isPlainObject = require("lodash/isPlainObject");
28
+
29
+ var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
30
+
31
+ var _isNumber = require("lodash/isNumber");
32
+
33
+ var _isNumber2 = _interopRequireDefault(_isNumber);
34
+
35
+ var _isRegExp = require("lodash/isRegExp");
36
+
37
+ var _isRegExp2 = _interopRequireDefault(_isRegExp);
38
+
39
+ var _isString = require("lodash/isString");
40
+
41
+ var _isString2 = _interopRequireDefault(_isString);
42
+
43
+ var _index = require("./index");
44
+
45
+ var t = _interopRequireWildcard(_index);
46
+
47
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
48
+
49
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
50
+
51
+ function toComputedKey(node) {
52
+ var key = arguments.length <= 1 || arguments[1] === undefined ? node.key || node.property : arguments[1];
53
+
54
+ if (!node.computed) {
55
+ if (t.isIdentifier(key)) key = t.stringLiteral(key.name);
56
+ }
57
+ return key;
58
+ }
59
+
60
+ /**
61
+ * Turn an array of statement `nodes` into a `SequenceExpression`.
62
+ *
63
+ * Variable declarations are turned into simple assignments and their
64
+ * declarations hoisted to the top of the current scope.
65
+ *
66
+ * Expression statements are just resolved to their expression.
67
+ */
68
+
69
+ function toSequenceExpression(nodes, scope) {
70
+ if (!nodes || !nodes.length) return;
71
+
72
+ var declars = [];
73
+ var bailed = false;
74
+
75
+ var result = convert(nodes);
76
+ if (bailed) return;
77
+
78
+ for (var i = 0; i < declars.length; i++) {
79
+ scope.push(declars[i]);
80
+ }
81
+
82
+ return result;
83
+
84
+ function convert(nodes) {
85
+ var ensureLastUndefined = false;
86
+ var exprs = [];
87
+
88
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
89
+ var _ref;
90
+
91
+ if (_isArray) {
92
+ if (_i >= _iterator.length) break;
93
+ _ref = _iterator[_i++];
94
+ } else {
95
+ _i = _iterator.next();
96
+ if (_i.done) break;
97
+ _ref = _i.value;
98
+ }
99
+
100
+ var node = _ref;
101
+
102
+ if (t.isExpression(node)) {
103
+ exprs.push(node);
104
+ } else if (t.isExpressionStatement(node)) {
105
+ exprs.push(node.expression);
106
+ } else if (t.isVariableDeclaration(node)) {
107
+ if (node.kind !== "var") return bailed = true; // bailed
108
+
109
+ for (var _iterator2 = node.declarations, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) {
110
+ var _ref2;
111
+
112
+ if (_isArray2) {
113
+ if (_i2 >= _iterator2.length) break;
114
+ _ref2 = _iterator2[_i2++];
115
+ } else {
116
+ _i2 = _iterator2.next();
117
+ if (_i2.done) break;
118
+ _ref2 = _i2.value;
119
+ }
120
+
121
+ var declar = _ref2;
122
+
123
+ var bindings = t.getBindingIdentifiers(declar);
124
+ for (var key in bindings) {
125
+ declars.push({
126
+ kind: node.kind,
127
+ id: bindings[key]
128
+ });
129
+ }
130
+
131
+ if (declar.init) {
132
+ exprs.push(t.assignmentExpression("=", declar.id, declar.init));
133
+ }
134
+ }
135
+
136
+ ensureLastUndefined = true;
137
+ continue;
138
+ } else if (t.isIfStatement(node)) {
139
+ var consequent = node.consequent ? convert([node.consequent]) : scope.buildUndefinedNode();
140
+ var alternate = node.alternate ? convert([node.alternate]) : scope.buildUndefinedNode();
141
+ if (!consequent || !alternate) return bailed = true;
142
+
143
+ exprs.push(t.conditionalExpression(node.test, consequent, alternate));
144
+ } else if (t.isBlockStatement(node)) {
145
+ exprs.push(convert(node.body));
146
+ } else if (t.isEmptyStatement(node)) {
147
+ // empty statement so ensure the last item is undefined if we're last
148
+ ensureLastUndefined = true;
149
+ continue;
150
+ } else {
151
+ // bailed, we can't turn this statement into an expression
152
+ return bailed = true;
153
+ }
154
+
155
+ ensureLastUndefined = false;
156
+ }
157
+
158
+ if (ensureLastUndefined || exprs.length === 0) {
159
+ exprs.push(scope.buildUndefinedNode());
160
+ }
161
+
162
+ //
163
+
164
+ if (exprs.length === 1) {
165
+ return exprs[0];
166
+ } else {
167
+ return t.sequenceExpression(exprs);
168
+ }
169
+ }
170
+ }
171
+
172
+ // Can't use import because of cyclic dependency between babel-traverse
173
+ // and this module (babel-types). This require needs to appear after
174
+ // we export the TYPES constant, so we lazy-initialize it before use.
175
+ var traverse = void 0;
176
+
177
+ function toKeyAlias(node) {
178
+ var key = arguments.length <= 1 || arguments[1] === undefined ? node.key : arguments[1];
179
+
180
+ if (!traverse) traverse = require("babel-traverse").default;
181
+
182
+ var alias = void 0;
183
+
184
+ if (node.kind === "method") {
185
+ return toKeyAlias.increment() + "";
186
+ } else if (t.isIdentifier(key)) {
187
+ alias = key.name;
188
+ } else if (t.isStringLiteral(key)) {
189
+ alias = (0, _stringify2.default)(key.value);
190
+ } else {
191
+ alias = (0, _stringify2.default)(traverse.removeProperties(t.cloneDeep(key)));
192
+ }
193
+
194
+ if (node.computed) {
195
+ alias = "[" + alias + "]";
196
+ }
197
+
198
+ if (node.static) {
199
+ alias = "static:" + alias;
200
+ }
201
+
202
+ return alias;
203
+ }
204
+
205
+ toKeyAlias.uid = 0;
206
+
207
+ toKeyAlias.increment = function () {
208
+ if (toKeyAlias.uid >= _maxSafeInteger2.default) {
209
+ return toKeyAlias.uid = 0;
210
+ } else {
211
+ return toKeyAlias.uid++;
212
+ }
213
+ };
214
+
215
+ function toIdentifier(name) {
216
+ name = name + "";
217
+
218
+ // replace all non-valid identifiers with dashes
219
+ name = name.replace(/[^a-zA-Z0-9$_]/g, "-");
220
+
221
+ // remove all dashes and numbers from start of name
222
+ name = name.replace(/^[-0-9]+/, "");
223
+
224
+ // camel case
225
+ name = name.replace(/[-\s]+(.)?/g, function (match, c) {
226
+ return c ? c.toUpperCase() : "";
227
+ });
228
+
229
+ if (!t.isValidIdentifier(name)) {
230
+ name = "_" + name;
231
+ }
232
+
233
+ return name || "_";
234
+ }
235
+
236
+ function toBindingIdentifierName(name) {
237
+ name = toIdentifier(name);
238
+ if (name === "eval" || name === "arguments") name = "_" + name;
239
+ return name;
240
+ }
241
+
242
+ /**
243
+ * [Please add a description.]
244
+ * @returns {Object|Boolean}
245
+ */
246
+
247
+ function toStatement(node, ignore) {
248
+ if (t.isStatement(node)) {
249
+ return node;
250
+ }
251
+
252
+ var mustHaveId = false;
253
+ var newType = void 0;
254
+
255
+ if (t.isClass(node)) {
256
+ mustHaveId = true;
257
+ newType = "ClassDeclaration";
258
+ } else if (t.isFunction(node)) {
259
+ mustHaveId = true;
260
+ newType = "FunctionDeclaration";
261
+ } else if (t.isAssignmentExpression(node)) {
262
+ return t.expressionStatement(node);
263
+ }
264
+
265
+ if (mustHaveId && !node.id) {
266
+ newType = false;
267
+ }
268
+
269
+ if (!newType) {
270
+ if (ignore) {
271
+ return false;
272
+ } else {
273
+ throw new Error("cannot turn " + node.type + " to a statement");
274
+ }
275
+ }
276
+
277
+ node.type = newType;
278
+
279
+ return node;
280
+ }
281
+
282
+ function toExpression(node) {
283
+ if (t.isExpressionStatement(node)) {
284
+ node = node.expression;
285
+ }
286
+
287
+ if (t.isClass(node)) {
288
+ node.type = "ClassExpression";
289
+ } else if (t.isFunction(node)) {
290
+ node.type = "FunctionExpression";
291
+ }
292
+
293
+ if (t.isExpression(node)) {
294
+ return node;
295
+ } else {
296
+ throw new Error("cannot turn " + node.type + " to an expression");
297
+ }
298
+ }
299
+
300
+ function toBlock(node, parent) {
301
+ if (t.isBlockStatement(node)) {
302
+ return node;
303
+ }
304
+
305
+ if (t.isEmptyStatement(node)) {
306
+ node = [];
307
+ }
308
+
309
+ if (!Array.isArray(node)) {
310
+ if (!t.isStatement(node)) {
311
+ if (t.isFunction(parent)) {
312
+ node = t.returnStatement(node);
313
+ } else {
314
+ node = t.expressionStatement(node);
315
+ }
316
+ }
317
+
318
+ node = [node];
319
+ }
320
+
321
+ return t.blockStatement(node);
322
+ }
323
+
324
+ function valueToNode(value) {
325
+ // undefined
326
+ if (value === undefined) {
327
+ return t.identifier("undefined");
328
+ }
329
+
330
+ // boolean
331
+ if (value === true || value === false) {
332
+ return t.booleanLiteral(value);
333
+ }
334
+
335
+ // null
336
+ if (value === null) {
337
+ return t.nullLiteral();
338
+ }
339
+
340
+ // strings
341
+ if ((0, _isString2.default)(value)) {
342
+ return t.stringLiteral(value);
343
+ }
344
+
345
+ // numbers
346
+ if ((0, _isNumber2.default)(value)) {
347
+ return t.numericLiteral(value);
348
+ }
349
+
350
+ // regexes
351
+ if ((0, _isRegExp2.default)(value)) {
352
+ var pattern = value.source;
353
+ var flags = value.toString().match(/\/([a-z]+|)$/)[1];
354
+ return t.regExpLiteral(pattern, flags);
355
+ }
356
+
357
+ // array
358
+ if (Array.isArray(value)) {
359
+ return t.arrayExpression(value.map(t.valueToNode));
360
+ }
361
+
362
+ // object
363
+ if ((0, _isPlainObject2.default)(value)) {
364
+ var props = [];
365
+ for (var key in value) {
366
+ var nodeKey = void 0;
367
+ if (t.isValidIdentifier(key)) {
368
+ nodeKey = t.identifier(key);
369
+ } else {
370
+ nodeKey = t.stringLiteral(key);
371
+ }
372
+ props.push(t.objectProperty(nodeKey, t.valueToNode(value[key])));
373
+ }
374
+ return t.objectExpression(props);
375
+ }
376
+
377
+ throw new Error("don't know how to turn this value into a node");
378
+ }
@@ -0,0 +1,704 @@
1
+ "use strict";
2
+
3
+ var _index = require("../index");
4
+
5
+ var t = _interopRequireWildcard(_index);
6
+
7
+ var _constants = require("../constants");
8
+
9
+ var _index2 = require("./index");
10
+
11
+ var _index3 = _interopRequireDefault(_index2);
12
+
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+
15
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
16
+
17
+ (0, _index3.default)("ArrayExpression", {
18
+ fields: {
19
+ elements: {
20
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeOrValueType)("null", "Expression", "SpreadElement"))),
21
+ default: []
22
+ }
23
+ },
24
+ visitor: ["elements"],
25
+ aliases: ["Expression"]
26
+ }); /* eslint max-len: 0 */
27
+
28
+ (0, _index3.default)("AssignmentExpression", {
29
+ fields: {
30
+ operator: {
31
+ validate: (0, _index2.assertValueType)("string")
32
+ },
33
+ left: {
34
+ validate: (0, _index2.assertNodeType)("LVal")
35
+ },
36
+ right: {
37
+ validate: (0, _index2.assertNodeType)("Expression")
38
+ }
39
+ },
40
+ builder: ["operator", "left", "right"],
41
+ visitor: ["left", "right"],
42
+ aliases: ["Expression"]
43
+ });
44
+
45
+ (0, _index3.default)("BinaryExpression", {
46
+ builder: ["operator", "left", "right"],
47
+ fields: {
48
+ operator: {
49
+ validate: _index2.assertOneOf.apply(undefined, _constants.BINARY_OPERATORS)
50
+ },
51
+ left: {
52
+ validate: (0, _index2.assertNodeType)("Expression")
53
+ },
54
+ right: {
55
+ validate: (0, _index2.assertNodeType)("Expression")
56
+ }
57
+ },
58
+ visitor: ["left", "right"],
59
+ aliases: ["Binary", "Expression"]
60
+ });
61
+
62
+ (0, _index3.default)("Directive", {
63
+ visitor: ["value"],
64
+ fields: {
65
+ value: {
66
+ validate: (0, _index2.assertNodeType)("DirectiveLiteral")
67
+ }
68
+ }
69
+ });
70
+
71
+ (0, _index3.default)("DirectiveLiteral", {
72
+ builder: ["value"],
73
+ fields: {
74
+ value: {
75
+ validate: (0, _index2.assertValueType)("string")
76
+ }
77
+ }
78
+ });
79
+
80
+ (0, _index3.default)("BlockStatement", {
81
+ builder: ["body", "directives"],
82
+ visitor: ["directives", "body"],
83
+ fields: {
84
+ directives: {
85
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Directive"))),
86
+ default: []
87
+ },
88
+ body: {
89
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Statement")))
90
+ }
91
+ },
92
+ aliases: ["Scopable", "BlockParent", "Block", "Statement"]
93
+ });
94
+
95
+ (0, _index3.default)("BreakStatement", {
96
+ visitor: ["label"],
97
+ fields: {
98
+ label: {
99
+ validate: (0, _index2.assertNodeType)("Identifier"),
100
+ optional: true
101
+ }
102
+ },
103
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"]
104
+ });
105
+
106
+ (0, _index3.default)("CallExpression", {
107
+ visitor: ["callee", "arguments"],
108
+ fields: {
109
+ callee: {
110
+ validate: (0, _index2.assertNodeType)("Expression")
111
+ },
112
+ arguments: {
113
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Expression", "SpreadElement")))
114
+ }
115
+ },
116
+ aliases: ["Expression"]
117
+ });
118
+
119
+ (0, _index3.default)("CatchClause", {
120
+ visitor: ["param", "body"],
121
+ fields: {
122
+ param: {
123
+ validate: (0, _index2.assertNodeType)("Identifier")
124
+ },
125
+ body: {
126
+ validate: (0, _index2.assertNodeType)("BlockStatement")
127
+ }
128
+ },
129
+ aliases: ["Scopable"]
130
+ });
131
+
132
+ (0, _index3.default)("ConditionalExpression", {
133
+ visitor: ["test", "consequent", "alternate"],
134
+ fields: {
135
+ test: {
136
+ validate: (0, _index2.assertNodeType)("Expression")
137
+ },
138
+ consequent: {
139
+ validate: (0, _index2.assertNodeType)("Expression")
140
+ },
141
+ alternate: {
142
+ validate: (0, _index2.assertNodeType)("Expression")
143
+ }
144
+ },
145
+ aliases: ["Expression", "Conditional"]
146
+ });
147
+
148
+ (0, _index3.default)("ContinueStatement", {
149
+ visitor: ["label"],
150
+ fields: {
151
+ label: {
152
+ validate: (0, _index2.assertNodeType)("Identifier"),
153
+ optional: true
154
+ }
155
+ },
156
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"]
157
+ });
158
+
159
+ (0, _index3.default)("DebuggerStatement", {
160
+ aliases: ["Statement"]
161
+ });
162
+
163
+ (0, _index3.default)("DoWhileStatement", {
164
+ visitor: ["test", "body"],
165
+ fields: {
166
+ test: {
167
+ validate: (0, _index2.assertNodeType)("Expression")
168
+ },
169
+ body: {
170
+ validate: (0, _index2.assertNodeType)("Statement")
171
+ }
172
+ },
173
+ aliases: ["Statement", "BlockParent", "Loop", "While", "Scopable"]
174
+ });
175
+
176
+ (0, _index3.default)("EmptyStatement", {
177
+ aliases: ["Statement"]
178
+ });
179
+
180
+ (0, _index3.default)("ExpressionStatement", {
181
+ visitor: ["expression"],
182
+ fields: {
183
+ expression: {
184
+ validate: (0, _index2.assertNodeType)("Expression")
185
+ }
186
+ },
187
+ aliases: ["Statement", "ExpressionWrapper"]
188
+ });
189
+
190
+ (0, _index3.default)("File", {
191
+ builder: ["program", "comments", "tokens"],
192
+ visitor: ["program"],
193
+ fields: {
194
+ program: {
195
+ validate: (0, _index2.assertNodeType)("Program")
196
+ }
197
+ }
198
+ });
199
+
200
+ (0, _index3.default)("ForInStatement", {
201
+ visitor: ["left", "right", "body"],
202
+ aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement"],
203
+ fields: {
204
+ left: {
205
+ validate: (0, _index2.assertNodeType)("VariableDeclaration", "LVal")
206
+ },
207
+ right: {
208
+ validate: (0, _index2.assertNodeType)("Expression")
209
+ },
210
+ body: {
211
+ validate: (0, _index2.assertNodeType)("Statement")
212
+ }
213
+ }
214
+ });
215
+
216
+ (0, _index3.default)("ForStatement", {
217
+ visitor: ["init", "test", "update", "body"],
218
+ aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop"],
219
+ fields: {
220
+ init: {
221
+ validate: (0, _index2.assertNodeType)("VariableDeclaration", "Expression"),
222
+ optional: true
223
+ },
224
+ test: {
225
+ validate: (0, _index2.assertNodeType)("Expression"),
226
+ optional: true
227
+ },
228
+ update: {
229
+ validate: (0, _index2.assertNodeType)("Expression"),
230
+ optional: true
231
+ },
232
+ body: {
233
+ validate: (0, _index2.assertNodeType)("Statement")
234
+ }
235
+ }
236
+ });
237
+
238
+ (0, _index3.default)("FunctionDeclaration", {
239
+ builder: ["id", "params", "body", "generator", "async"],
240
+ visitor: ["id", "params", "body", "returnType", "typeParameters"],
241
+ fields: {
242
+ id: {
243
+ validate: (0, _index2.assertNodeType)("Identifier")
244
+ },
245
+ params: {
246
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("LVal")))
247
+ },
248
+ body: {
249
+ validate: (0, _index2.assertNodeType)("BlockStatement")
250
+ },
251
+ generator: {
252
+ default: false,
253
+ validate: (0, _index2.assertValueType)("boolean")
254
+ },
255
+ async: {
256
+ default: false,
257
+ validate: (0, _index2.assertValueType)("boolean")
258
+ }
259
+ },
260
+ aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Statement", "Pureish", "Declaration"]
261
+ });
262
+
263
+ (0, _index3.default)("FunctionExpression", {
264
+ inherits: "FunctionDeclaration",
265
+ aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Expression", "Pureish"],
266
+ fields: {
267
+ id: {
268
+ validate: (0, _index2.assertNodeType)("Identifier"),
269
+ optional: true
270
+ },
271
+ params: {
272
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("LVal")))
273
+ },
274
+ body: {
275
+ validate: (0, _index2.assertNodeType)("BlockStatement")
276
+ },
277
+ generator: {
278
+ default: false,
279
+ validate: (0, _index2.assertValueType)("boolean")
280
+ },
281
+ async: {
282
+ default: false,
283
+ validate: (0, _index2.assertValueType)("boolean")
284
+ }
285
+ }
286
+ });
287
+
288
+ (0, _index3.default)("Identifier", {
289
+ builder: ["name"],
290
+ visitor: ["typeAnnotation"],
291
+ aliases: ["Expression", "LVal"],
292
+ fields: {
293
+ name: {
294
+ validate: function validate(node, key, val) {
295
+ if (!t.isValidIdentifier(val)) {
296
+ // todo
297
+ }
298
+ }
299
+ },
300
+ decorators: {
301
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Decorator")))
302
+ }
303
+ }
304
+ });
305
+
306
+ (0, _index3.default)("IfStatement", {
307
+ visitor: ["test", "consequent", "alternate"],
308
+ aliases: ["Statement", "Conditional"],
309
+ fields: {
310
+ test: {
311
+ validate: (0, _index2.assertNodeType)("Expression")
312
+ },
313
+ consequent: {
314
+ validate: (0, _index2.assertNodeType)("Statement")
315
+ },
316
+ alternate: {
317
+ optional: true,
318
+ validate: (0, _index2.assertNodeType)("Statement")
319
+ }
320
+ }
321
+ });
322
+
323
+ (0, _index3.default)("LabeledStatement", {
324
+ visitor: ["label", "body"],
325
+ aliases: ["Statement"],
326
+ fields: {
327
+ label: {
328
+ validate: (0, _index2.assertNodeType)("Identifier")
329
+ },
330
+ body: {
331
+ validate: (0, _index2.assertNodeType)("Statement")
332
+ }
333
+ }
334
+ });
335
+
336
+ (0, _index3.default)("StringLiteral", {
337
+ builder: ["value"],
338
+ fields: {
339
+ value: {
340
+ validate: (0, _index2.assertValueType)("string")
341
+ }
342
+ },
343
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
344
+ });
345
+
346
+ (0, _index3.default)("NumericLiteral", {
347
+ builder: ["value"],
348
+ deprecatedAlias: "NumberLiteral",
349
+ fields: {
350
+ value: {
351
+ validate: (0, _index2.assertValueType)("number")
352
+ }
353
+ },
354
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
355
+ });
356
+
357
+ (0, _index3.default)("NullLiteral", {
358
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
359
+ });
360
+
361
+ (0, _index3.default)("BooleanLiteral", {
362
+ builder: ["value"],
363
+ fields: {
364
+ value: {
365
+ validate: (0, _index2.assertValueType)("boolean")
366
+ }
367
+ },
368
+ aliases: ["Expression", "Pureish", "Literal", "Immutable"]
369
+ });
370
+
371
+ (0, _index3.default)("RegExpLiteral", {
372
+ builder: ["pattern", "flags"],
373
+ deprecatedAlias: "RegexLiteral",
374
+ aliases: ["Expression", "Literal"],
375
+ fields: {
376
+ pattern: {
377
+ validate: (0, _index2.assertValueType)("string")
378
+ },
379
+ flags: {
380
+ validate: (0, _index2.assertValueType)("string"),
381
+ default: ""
382
+ }
383
+ }
384
+ });
385
+
386
+ (0, _index3.default)("LogicalExpression", {
387
+ builder: ["operator", "left", "right"],
388
+ visitor: ["left", "right"],
389
+ aliases: ["Binary", "Expression"],
390
+ fields: {
391
+ operator: {
392
+ validate: _index2.assertOneOf.apply(undefined, _constants.LOGICAL_OPERATORS)
393
+ },
394
+ left: {
395
+ validate: (0, _index2.assertNodeType)("Expression")
396
+ },
397
+ right: {
398
+ validate: (0, _index2.assertNodeType)("Expression")
399
+ }
400
+ }
401
+ });
402
+
403
+ (0, _index3.default)("MemberExpression", {
404
+ builder: ["object", "property", "computed"],
405
+ visitor: ["object", "property"],
406
+ aliases: ["Expression", "LVal"],
407
+ fields: {
408
+ object: {
409
+ validate: (0, _index2.assertNodeType)("Expression")
410
+ },
411
+ property: {
412
+ validate: function validate(node, key, val) {
413
+ var expectedType = node.computed ? "Expression" : "Identifier";
414
+ (0, _index2.assertNodeType)(expectedType)(node, key, val);
415
+ }
416
+ },
417
+ computed: {
418
+ default: false
419
+ }
420
+ }
421
+ });
422
+
423
+ (0, _index3.default)("NewExpression", {
424
+ visitor: ["callee", "arguments"],
425
+ aliases: ["Expression"],
426
+ fields: {
427
+ callee: {
428
+ validate: (0, _index2.assertNodeType)("Expression")
429
+ },
430
+ arguments: {
431
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Expression", "SpreadElement")))
432
+ }
433
+ }
434
+ });
435
+
436
+ (0, _index3.default)("Program", {
437
+ visitor: ["directives", "body"],
438
+ builder: ["body", "directives"],
439
+ fields: {
440
+ directives: {
441
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Directive"))),
442
+ default: []
443
+ },
444
+ body: {
445
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Statement")))
446
+ }
447
+ },
448
+ aliases: ["Scopable", "BlockParent", "Block", "FunctionParent"]
449
+ });
450
+
451
+ (0, _index3.default)("ObjectExpression", {
452
+ visitor: ["properties"],
453
+ aliases: ["Expression"],
454
+ fields: {
455
+ properties: {
456
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("ObjectMethod", "ObjectProperty", "SpreadProperty")))
457
+ }
458
+ }
459
+ });
460
+
461
+ (0, _index3.default)("ObjectMethod", {
462
+ builder: ["kind", "key", "params", "body", "computed"],
463
+ fields: {
464
+ kind: {
465
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("string"), (0, _index2.assertOneOf)("method", "get", "set")),
466
+ default: "method"
467
+ },
468
+ computed: {
469
+ validate: (0, _index2.assertValueType)("boolean"),
470
+ default: false
471
+ },
472
+ key: {
473
+ validate: function validate(node, key, val) {
474
+ var expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral", "NumericLiteral"];
475
+ _index2.assertNodeType.apply(undefined, expectedTypes)(node, key, val);
476
+ }
477
+ },
478
+ decorators: {
479
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Decorator")))
480
+ },
481
+ body: {
482
+ validate: (0, _index2.assertNodeType)("BlockStatement")
483
+ },
484
+ generator: {
485
+ default: false,
486
+ validate: (0, _index2.assertValueType)("boolean")
487
+ },
488
+ async: {
489
+ default: false,
490
+ validate: (0, _index2.assertValueType)("boolean")
491
+ }
492
+ },
493
+ visitor: ["key", "params", "body", "decorators", "returnType", "typeParameters"],
494
+ aliases: ["UserWhitespacable", "Function", "Scopable", "BlockParent", "FunctionParent", "Method", "ObjectMember"]
495
+ });
496
+
497
+ (0, _index3.default)("ObjectProperty", {
498
+ builder: ["key", "value", "computed", "shorthand", "decorators"],
499
+ fields: {
500
+ computed: {
501
+ validate: (0, _index2.assertValueType)("boolean"),
502
+ default: false
503
+ },
504
+ key: {
505
+ validate: function validate(node, key, val) {
506
+ var expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral", "NumericLiteral"];
507
+ _index2.assertNodeType.apply(undefined, expectedTypes)(node, key, val);
508
+ }
509
+ },
510
+ value: {
511
+ validate: (0, _index2.assertNodeType)("Expression")
512
+ },
513
+ shorthand: {
514
+ validate: (0, _index2.assertValueType)("boolean"),
515
+ default: false
516
+ },
517
+ decorators: {
518
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Decorator"))),
519
+ optional: true
520
+ }
521
+ },
522
+ visitor: ["key", "value", "decorators"],
523
+ aliases: ["UserWhitespacable", "Property", "ObjectMember"]
524
+ });
525
+
526
+ (0, _index3.default)("RestElement", {
527
+ visitor: ["argument", "typeAnnotation"],
528
+ aliases: ["LVal"],
529
+ fields: {
530
+ argument: {
531
+ validate: (0, _index2.assertNodeType)("LVal")
532
+ },
533
+ decorators: {
534
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Decorator")))
535
+ }
536
+ }
537
+ });
538
+
539
+ (0, _index3.default)("ReturnStatement", {
540
+ visitor: ["argument"],
541
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"],
542
+ fields: {
543
+ argument: {
544
+ validate: (0, _index2.assertNodeType)("Expression"),
545
+ optional: true
546
+ }
547
+ }
548
+ });
549
+
550
+ (0, _index3.default)("SequenceExpression", {
551
+ visitor: ["expressions"],
552
+ fields: {
553
+ expressions: {
554
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Expression")))
555
+ }
556
+ },
557
+ aliases: ["Expression"]
558
+ });
559
+
560
+ (0, _index3.default)("SwitchCase", {
561
+ visitor: ["test", "consequent"],
562
+ fields: {
563
+ test: {
564
+ validate: (0, _index2.assertNodeType)("Expression"),
565
+ optional: true
566
+ },
567
+ consequent: {
568
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Statement")))
569
+ }
570
+ }
571
+ });
572
+
573
+ (0, _index3.default)("SwitchStatement", {
574
+ visitor: ["discriminant", "cases"],
575
+ aliases: ["Statement", "BlockParent", "Scopable"],
576
+ fields: {
577
+ discriminant: {
578
+ validate: (0, _index2.assertNodeType)("Expression")
579
+ },
580
+ cases: {
581
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("SwitchCase")))
582
+ }
583
+ }
584
+ });
585
+
586
+ (0, _index3.default)("ThisExpression", {
587
+ aliases: ["Expression"]
588
+ });
589
+
590
+ (0, _index3.default)("ThrowStatement", {
591
+ visitor: ["argument"],
592
+ aliases: ["Statement", "Terminatorless", "CompletionStatement"],
593
+ fields: {
594
+ argument: {
595
+ validate: (0, _index2.assertNodeType)("Expression")
596
+ }
597
+ }
598
+ });
599
+
600
+ // todo: at least handler or finalizer should be set to be valid
601
+ (0, _index3.default)("TryStatement", {
602
+ visitor: ["block", "handler", "finalizer"],
603
+ aliases: ["Statement"],
604
+ fields: {
605
+ body: {
606
+ validate: (0, _index2.assertNodeType)("BlockStatement")
607
+ },
608
+ handler: {
609
+ optional: true,
610
+ handler: (0, _index2.assertNodeType)("BlockStatement")
611
+ },
612
+ finalizer: {
613
+ optional: true,
614
+ validate: (0, _index2.assertNodeType)("BlockStatement")
615
+ }
616
+ }
617
+ });
618
+
619
+ (0, _index3.default)("UnaryExpression", {
620
+ builder: ["operator", "argument", "prefix"],
621
+ fields: {
622
+ prefix: {
623
+ default: true
624
+ },
625
+ argument: {
626
+ validate: (0, _index2.assertNodeType)("Expression")
627
+ },
628
+ operator: {
629
+ validate: _index2.assertOneOf.apply(undefined, _constants.UNARY_OPERATORS)
630
+ }
631
+ },
632
+ visitor: ["argument"],
633
+ aliases: ["UnaryLike", "Expression"]
634
+ });
635
+
636
+ (0, _index3.default)("UpdateExpression", {
637
+ builder: ["operator", "argument", "prefix"],
638
+ fields: {
639
+ prefix: {
640
+ default: false
641
+ },
642
+ argument: {
643
+ validate: (0, _index2.assertNodeType)("Expression")
644
+ },
645
+ operator: {
646
+ validate: _index2.assertOneOf.apply(undefined, _constants.UPDATE_OPERATORS)
647
+ }
648
+ },
649
+ visitor: ["argument"],
650
+ aliases: ["Expression"]
651
+ });
652
+
653
+ (0, _index3.default)("VariableDeclaration", {
654
+ builder: ["kind", "declarations"],
655
+ visitor: ["declarations"],
656
+ aliases: ["Statement", "Declaration"],
657
+ fields: {
658
+ kind: {
659
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("string"), (0, _index2.assertOneOf)("var", "let", "const"))
660
+ },
661
+ declarations: {
662
+ validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("VariableDeclarator")))
663
+ }
664
+ }
665
+ });
666
+
667
+ (0, _index3.default)("VariableDeclarator", {
668
+ visitor: ["id", "init"],
669
+ fields: {
670
+ id: {
671
+ validate: (0, _index2.assertNodeType)("LVal")
672
+ },
673
+ init: {
674
+ optional: true,
675
+ validate: (0, _index2.assertNodeType)("Expression")
676
+ }
677
+ }
678
+ });
679
+
680
+ (0, _index3.default)("WhileStatement", {
681
+ visitor: ["test", "body"],
682
+ aliases: ["Statement", "BlockParent", "Loop", "While", "Scopable"],
683
+ fields: {
684
+ test: {
685
+ validate: (0, _index2.assertNodeType)("Expression")
686
+ },
687
+ body: {
688
+ validate: (0, _index2.assertNodeType)("BlockStatement", "Statement")
689
+ }
690
+ }
691
+ });
692
+
693
+ (0, _index3.default)("WithStatement", {
694
+ visitor: ["object", "body"],
695
+ aliases: ["Statement"],
696
+ fields: {
697
+ object: {
698
+ object: (0, _index2.assertNodeType)("Expression")
699
+ },
700
+ body: {
701
+ validate: (0, _index2.assertNodeType)("BlockStatement", "Statement")
702
+ }
703
+ }
704
+ });