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,154 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");
6
+
7
+ var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
8
+
9
+ var _binding = require("../binding");
10
+
11
+ var _binding2 = _interopRequireDefault(_binding);
12
+
13
+ var _babelTypes = require("babel-types");
14
+
15
+ var t = _interopRequireWildcard(_babelTypes);
16
+
17
+ 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; } }
18
+
19
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
+
21
+ var renameVisitor = {
22
+ ReferencedIdentifier: function ReferencedIdentifier(_ref, state) {
23
+ var node = _ref.node;
24
+
25
+ if (node.name === state.oldName) {
26
+ node.name = state.newName;
27
+ }
28
+ },
29
+ Scope: function Scope(path, state) {
30
+ if (!path.scope.bindingIdentifierEquals(state.oldName, state.binding.identifier)) {
31
+ path.skip();
32
+ }
33
+ },
34
+ "AssignmentExpression|Declaration": function AssignmentExpressionDeclaration(path, state) {
35
+ var ids = path.getOuterBindingIdentifiers();
36
+
37
+ for (var name in ids) {
38
+ if (name === state.oldName) ids[name].name = state.newName;
39
+ }
40
+ }
41
+ };
42
+
43
+ var Renamer = function () {
44
+ function Renamer(binding, oldName, newName) {
45
+ (0, _classCallCheck3.default)(this, Renamer);
46
+
47
+ this.newName = newName;
48
+ this.oldName = oldName;
49
+ this.binding = binding;
50
+ }
51
+
52
+ Renamer.prototype.maybeConvertFromExportDeclaration = function maybeConvertFromExportDeclaration(parentDeclar) {
53
+ var exportDeclar = parentDeclar.parentPath.isExportDeclaration() && parentDeclar.parentPath;
54
+ if (!exportDeclar) return;
55
+
56
+ // build specifiers that point back to this export declaration
57
+ var isDefault = exportDeclar.isExportDefaultDeclaration();
58
+
59
+ if (isDefault && (parentDeclar.isFunctionDeclaration() || parentDeclar.isClassDeclaration()) && !parentDeclar.node.id) {
60
+ // Ensure that default class and function exports have a name so they have a identifier to
61
+ // reference from the export specifier list.
62
+ parentDeclar.node.id = parentDeclar.scope.generateUidIdentifier("default");
63
+ }
64
+
65
+ var bindingIdentifiers = parentDeclar.getOuterBindingIdentifiers();
66
+ var specifiers = [];
67
+
68
+ for (var name in bindingIdentifiers) {
69
+ var localName = name === this.oldName ? this.newName : name;
70
+ var exportedName = isDefault ? "default" : name;
71
+ specifiers.push(t.exportSpecifier(t.identifier(localName), t.identifier(exportedName)));
72
+ }
73
+
74
+ var aliasDeclar = t.exportNamedDeclaration(null, specifiers);
75
+
76
+ // hoist to the top if it's a function
77
+ if (parentDeclar.isFunctionDeclaration()) {
78
+ aliasDeclar._blockHoist = 3;
79
+ }
80
+
81
+ exportDeclar.insertAfter(aliasDeclar);
82
+ exportDeclar.replaceWith(parentDeclar.node);
83
+ };
84
+
85
+ Renamer.prototype.maybeConvertFromClassFunctionDeclaration = function maybeConvertFromClassFunctionDeclaration(path) {
86
+ return; // TODO
87
+
88
+ // retain the `name` of a class/function declaration
89
+
90
+ if (!path.isFunctionDeclaration() && !path.isClassDeclaration()) return;
91
+ if (this.binding.kind !== "hoisted") return;
92
+
93
+ path.node.id = t.identifier(this.oldName);
94
+ path.node._blockHoist = 3;
95
+
96
+ path.replaceWith(t.variableDeclaration("let", [t.variableDeclarator(t.identifier(this.newName), t.toExpression(path.node))]));
97
+ };
98
+
99
+ Renamer.prototype.maybeConvertFromClassFunctionExpression = function maybeConvertFromClassFunctionExpression(path) {
100
+ return; // TODO
101
+
102
+ // retain the `name` of a class/function expression
103
+
104
+ if (!path.isFunctionExpression() && !path.isClassExpression()) return;
105
+ if (this.binding.kind !== "local") return;
106
+
107
+ path.node.id = t.identifier(this.oldName);
108
+
109
+ this.binding.scope.parent.push({
110
+ id: t.identifier(this.newName)
111
+ });
112
+
113
+ path.replaceWith(t.assignmentExpression("=", t.identifier(this.newName), path.node));
114
+ };
115
+
116
+ Renamer.prototype.rename = function rename(block) {
117
+ var binding = this.binding;
118
+ var oldName = this.oldName;
119
+ var newName = this.newName;
120
+ var scope = binding.scope;
121
+ var path = binding.path;
122
+
123
+
124
+ var parentDeclar = path.find(function (path) {
125
+ return path.isDeclaration() || path.isFunctionExpression();
126
+ });
127
+ if (parentDeclar) {
128
+ this.maybeConvertFromExportDeclaration(parentDeclar);
129
+ }
130
+
131
+ scope.traverse(block || scope.block, renameVisitor, this);
132
+
133
+ if (!block) {
134
+ scope.removeOwnBinding(oldName);
135
+ scope.bindings[newName] = binding;
136
+ this.binding.identifier.name = newName;
137
+ }
138
+
139
+ if (binding.type === "hoisted") {
140
+ // https://github.com/babel/babel/issues/2435
141
+ // todo: hoist and convert function to a let
142
+ }
143
+
144
+ if (parentDeclar) {
145
+ this.maybeConvertFromClassFunctionDeclaration(parentDeclar);
146
+ this.maybeConvertFromClassFunctionExpression(parentDeclar);
147
+ }
148
+ };
149
+
150
+ return Renamer;
151
+ }();
152
+
153
+ exports.default = Renamer;
154
+ module.exports = exports["default"];
@@ -0,0 +1,360 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _typeof2 = require("babel-runtime/helpers/typeof");
6
+
7
+ var _typeof3 = _interopRequireDefault(_typeof2);
8
+
9
+ var _keys = require("babel-runtime/core-js/object/keys");
10
+
11
+ var _keys2 = _interopRequireDefault(_keys);
12
+
13
+ var _getIterator2 = require("babel-runtime/core-js/get-iterator");
14
+
15
+ var _getIterator3 = _interopRequireDefault(_getIterator2);
16
+
17
+ exports.explode = explode;
18
+ exports.verify = verify;
19
+ exports.merge = merge;
20
+
21
+ var _virtualTypes = require("./path/lib/virtual-types");
22
+
23
+ var virtualTypes = _interopRequireWildcard(_virtualTypes);
24
+
25
+ var _babelMessages = require("babel-messages");
26
+
27
+ var messages = _interopRequireWildcard(_babelMessages);
28
+
29
+ var _babelTypes = require("babel-types");
30
+
31
+ var t = _interopRequireWildcard(_babelTypes);
32
+
33
+ var _clone = require("lodash/clone");
34
+
35
+ var _clone2 = _interopRequireDefault(_clone);
36
+
37
+ 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; } }
38
+
39
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
40
+
41
+ /**
42
+ * explode() will take a visitor object with all of the various shorthands
43
+ * that we support, and validates & normalizes it into a common format, ready
44
+ * to be used in traversal
45
+ *
46
+ * The various shorthands are:
47
+ * * `Identifier() { ... }` -> `Identifier: { enter() { ... } }`
48
+ * * `"Identifier|NumericLiteral": { ... }` -> `Identifier: { ... }, NumericLiteral: { ... }`
49
+ * * Aliases in `babel-types`: e.g. `Property: { ... }` -> `ObjectProperty: { ... }, ClassProperty: { ... }`
50
+ *
51
+ * Other normalizations are:
52
+ * * Visitors of virtual types are wrapped, so that they are only visited when
53
+ * their dynamic check passes
54
+ * * `enter` and `exit` functions are wrapped in arrays, to ease merging of
55
+ * visitors
56
+ */
57
+ function explode(visitor) {
58
+ if (visitor._exploded) return visitor;
59
+ visitor._exploded = true;
60
+
61
+ // normalise pipes
62
+ for (var nodeType in visitor) {
63
+ if (shouldIgnoreKey(nodeType)) continue;
64
+
65
+ var parts = nodeType.split("|");
66
+ if (parts.length === 1) continue;
67
+
68
+ var fns = visitor[nodeType];
69
+ delete visitor[nodeType];
70
+
71
+ for (var _iterator = parts, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
72
+ var _ref;
73
+
74
+ if (_isArray) {
75
+ if (_i >= _iterator.length) break;
76
+ _ref = _iterator[_i++];
77
+ } else {
78
+ _i = _iterator.next();
79
+ if (_i.done) break;
80
+ _ref = _i.value;
81
+ }
82
+
83
+ var part = _ref;
84
+
85
+ visitor[part] = fns;
86
+ }
87
+ }
88
+
89
+ // verify data structure
90
+ verify(visitor);
91
+
92
+ // make sure there's no __esModule type since this is because we're using loose mode
93
+ // and it sets __esModule to be enumerable on all modules :(
94
+ delete visitor.__esModule;
95
+
96
+ // ensure visitors are objects
97
+ ensureEntranceObjects(visitor);
98
+
99
+ // ensure enter/exit callbacks are arrays
100
+ ensureCallbackArrays(visitor);
101
+
102
+ // add type wrappers
103
+ for (var _iterator2 = (0, _keys2.default)(visitor), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) {
104
+ var _ref2;
105
+
106
+ if (_isArray2) {
107
+ if (_i2 >= _iterator2.length) break;
108
+ _ref2 = _iterator2[_i2++];
109
+ } else {
110
+ _i2 = _iterator2.next();
111
+ if (_i2.done) break;
112
+ _ref2 = _i2.value;
113
+ }
114
+
115
+ var _nodeType3 = _ref2;
116
+
117
+ if (shouldIgnoreKey(_nodeType3)) continue;
118
+
119
+ var wrapper = virtualTypes[_nodeType3];
120
+ if (!wrapper) continue;
121
+
122
+ // wrap all the functions
123
+ var _fns2 = visitor[_nodeType3];
124
+ for (var type in _fns2) {
125
+ _fns2[type] = wrapCheck(wrapper, _fns2[type]);
126
+ }
127
+
128
+ // clear it from the visitor
129
+ delete visitor[_nodeType3];
130
+
131
+ if (wrapper.types) {
132
+ for (var _iterator4 = wrapper.types, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) {
133
+ var _ref4;
134
+
135
+ if (_isArray4) {
136
+ if (_i4 >= _iterator4.length) break;
137
+ _ref4 = _iterator4[_i4++];
138
+ } else {
139
+ _i4 = _iterator4.next();
140
+ if (_i4.done) break;
141
+ _ref4 = _i4.value;
142
+ }
143
+
144
+ var _type = _ref4;
145
+
146
+ // merge the visitor if necessary or just put it back in
147
+ if (visitor[_type]) {
148
+ mergePair(visitor[_type], _fns2);
149
+ } else {
150
+ visitor[_type] = _fns2;
151
+ }
152
+ }
153
+ } else {
154
+ mergePair(visitor, _fns2);
155
+ }
156
+ }
157
+
158
+ // add aliases
159
+ for (var _nodeType in visitor) {
160
+ if (shouldIgnoreKey(_nodeType)) continue;
161
+
162
+ var _fns = visitor[_nodeType];
163
+
164
+ var aliases = t.FLIPPED_ALIAS_KEYS[_nodeType];
165
+
166
+ var deprecratedKey = t.DEPRECATED_KEYS[_nodeType];
167
+ if (deprecratedKey) {
168
+ console.trace("Visitor defined for " + _nodeType + " but it has been renamed to " + deprecratedKey);
169
+ aliases = [deprecratedKey];
170
+ }
171
+
172
+ if (!aliases) continue;
173
+
174
+ // clear it from the visitor
175
+ delete visitor[_nodeType];
176
+
177
+ for (var _iterator3 = aliases, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) {
178
+ var _ref3;
179
+
180
+ if (_isArray3) {
181
+ if (_i3 >= _iterator3.length) break;
182
+ _ref3 = _iterator3[_i3++];
183
+ } else {
184
+ _i3 = _iterator3.next();
185
+ if (_i3.done) break;
186
+ _ref3 = _i3.value;
187
+ }
188
+
189
+ var alias = _ref3;
190
+
191
+ var existing = visitor[alias];
192
+ if (existing) {
193
+ mergePair(existing, _fns);
194
+ } else {
195
+ visitor[alias] = (0, _clone2.default)(_fns);
196
+ }
197
+ }
198
+ }
199
+
200
+ for (var _nodeType2 in visitor) {
201
+ if (shouldIgnoreKey(_nodeType2)) continue;
202
+
203
+ ensureCallbackArrays(visitor[_nodeType2]);
204
+ }
205
+
206
+ return visitor;
207
+ }
208
+
209
+ function verify(visitor) {
210
+ if (visitor._verified) return;
211
+
212
+ if (typeof visitor === "function") {
213
+ throw new Error(messages.get("traverseVerifyRootFunction"));
214
+ }
215
+
216
+ for (var nodeType in visitor) {
217
+ if (nodeType === "enter" || nodeType === "exit") {
218
+ validateVisitorMethods(nodeType, visitor[nodeType]);
219
+ }
220
+
221
+ if (shouldIgnoreKey(nodeType)) continue;
222
+
223
+ if (t.TYPES.indexOf(nodeType) < 0) {
224
+ throw new Error(messages.get("traverseVerifyNodeType", nodeType));
225
+ }
226
+
227
+ var visitors = visitor[nodeType];
228
+ if ((typeof visitors === "undefined" ? "undefined" : (0, _typeof3.default)(visitors)) === "object") {
229
+ for (var visitorKey in visitors) {
230
+ if (visitorKey === "enter" || visitorKey === "exit") {
231
+ // verify that it just contains functions
232
+ validateVisitorMethods(nodeType + "." + visitorKey, visitors[visitorKey]);
233
+ } else {
234
+ throw new Error(messages.get("traverseVerifyVisitorProperty", nodeType, visitorKey));
235
+ }
236
+ }
237
+ }
238
+ }
239
+
240
+ visitor._verified = true;
241
+ }
242
+
243
+ function validateVisitorMethods(path, val) {
244
+ var fns = [].concat(val);
245
+ for (var _iterator5 = fns, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) {
246
+ var _ref5;
247
+
248
+ if (_isArray5) {
249
+ if (_i5 >= _iterator5.length) break;
250
+ _ref5 = _iterator5[_i5++];
251
+ } else {
252
+ _i5 = _iterator5.next();
253
+ if (_i5.done) break;
254
+ _ref5 = _i5.value;
255
+ }
256
+
257
+ var fn = _ref5;
258
+
259
+ if (typeof fn !== "function") {
260
+ throw new TypeError("Non-function found defined in " + path + " with type " + (typeof fn === "undefined" ? "undefined" : (0, _typeof3.default)(fn)));
261
+ }
262
+ }
263
+ }
264
+
265
+ function merge(visitors) {
266
+ var states = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];
267
+
268
+ var rootVisitor = {};
269
+
270
+ for (var i = 0; i < visitors.length; i++) {
271
+ var visitor = visitors[i];
272
+ var state = states[i];
273
+
274
+ explode(visitor);
275
+
276
+ for (var type in visitor) {
277
+ var visitorType = visitor[type];
278
+
279
+ // if we have state then overload the callbacks to take it
280
+ if (state) visitorType = wrapWithState(visitorType, state);
281
+
282
+ var nodeVisitor = rootVisitor[type] = rootVisitor[type] || {};
283
+ mergePair(nodeVisitor, visitorType);
284
+ }
285
+ }
286
+
287
+ return rootVisitor;
288
+ }
289
+
290
+ function wrapWithState(oldVisitor, state) {
291
+ var newVisitor = {};
292
+
293
+ for (var key in oldVisitor) {
294
+ var fns = oldVisitor[key];
295
+
296
+ // not an enter/exit array of callbacks
297
+ if (!Array.isArray(fns)) continue;
298
+
299
+ fns = fns.map(function (fn) {
300
+ var newFn = function newFn(path) {
301
+ return fn.call(state, path, state);
302
+ };
303
+ newFn.toString = function () {
304
+ return fn.toString();
305
+ };
306
+ return newFn;
307
+ });
308
+
309
+ newVisitor[key] = fns;
310
+ }
311
+
312
+ return newVisitor;
313
+ }
314
+
315
+ function ensureEntranceObjects(obj) {
316
+ for (var key in obj) {
317
+ if (shouldIgnoreKey(key)) continue;
318
+
319
+ var fns = obj[key];
320
+ if (typeof fns === "function") {
321
+ obj[key] = { enter: fns };
322
+ }
323
+ }
324
+ }
325
+
326
+ function ensureCallbackArrays(obj) {
327
+ if (obj.enter && !Array.isArray(obj.enter)) obj.enter = [obj.enter];
328
+ if (obj.exit && !Array.isArray(obj.exit)) obj.exit = [obj.exit];
329
+ }
330
+
331
+ function wrapCheck(wrapper, fn) {
332
+ var newFn = function newFn(path) {
333
+ if (wrapper.checkPath(path)) {
334
+ return fn.apply(this, arguments);
335
+ }
336
+ };
337
+ newFn.toString = function () {
338
+ return fn.toString();
339
+ };
340
+ return newFn;
341
+ }
342
+
343
+ function shouldIgnoreKey(key) {
344
+ // internal/hidden key
345
+ if (key[0] === "_") return true;
346
+
347
+ // ignore function keys
348
+ if (key === "enter" || key === "exit" || key === "shouldSkip") return true;
349
+
350
+ // ignore other options
351
+ if (key === "blacklist" || key === "noScope" || key === "skipKeys") return true;
352
+
353
+ return false;
354
+ }
355
+
356
+ function mergePair(dest, src) {
357
+ for (var key in src) {
358
+ dest[key] = [].concat(dest[key] || [], src[key]);
359
+ }
360
+ }