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,19 @@
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
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+
11
+ var Hub = function Hub(file, options) {
12
+ (0, _classCallCheck3.default)(this, Hub);
13
+
14
+ this.file = file;
15
+ this.options = options;
16
+ };
17
+
18
+ exports.default = Hub;
19
+ module.exports = exports["default"];
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.visitors = exports.Hub = exports.Scope = exports.NodePath = undefined;
5
+
6
+ var _getOwnPropertySymbols = require("babel-runtime/core-js/object/get-own-property-symbols");
7
+
8
+ var _getOwnPropertySymbols2 = _interopRequireDefault(_getOwnPropertySymbols);
9
+
10
+ var _getIterator2 = require("babel-runtime/core-js/get-iterator");
11
+
12
+ var _getIterator3 = _interopRequireDefault(_getIterator2);
13
+
14
+ var _path = require("./path");
15
+
16
+ Object.defineProperty(exports, "NodePath", {
17
+ enumerable: true,
18
+ get: function get() {
19
+ return _interopRequireDefault(_path).default;
20
+ }
21
+ });
22
+
23
+ var _scope = require("./scope");
24
+
25
+ Object.defineProperty(exports, "Scope", {
26
+ enumerable: true,
27
+ get: function get() {
28
+ return _interopRequireDefault(_scope).default;
29
+ }
30
+ });
31
+
32
+ var _hub = require("./hub");
33
+
34
+ Object.defineProperty(exports, "Hub", {
35
+ enumerable: true,
36
+ get: function get() {
37
+ return _interopRequireDefault(_hub).default;
38
+ }
39
+ });
40
+ exports.default = traverse;
41
+
42
+ var _context = require("./context");
43
+
44
+ var _context2 = _interopRequireDefault(_context);
45
+
46
+ var _visitors = require("./visitors");
47
+
48
+ var visitors = _interopRequireWildcard(_visitors);
49
+
50
+ var _babelMessages = require("babel-messages");
51
+
52
+ var messages = _interopRequireWildcard(_babelMessages);
53
+
54
+ var _includes = require("lodash/includes");
55
+
56
+ var _includes2 = _interopRequireDefault(_includes);
57
+
58
+ var _babelTypes = require("babel-types");
59
+
60
+ var t = _interopRequireWildcard(_babelTypes);
61
+
62
+ var _cache = require("./cache");
63
+
64
+ var cache = _interopRequireWildcard(_cache);
65
+
66
+ 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; } }
67
+
68
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
69
+
70
+ exports.visitors = visitors;
71
+ function traverse(parent, opts, scope, state, parentPath) {
72
+ if (!parent) return;
73
+ if (!opts) opts = {};
74
+
75
+ if (!opts.noScope && !scope) {
76
+ if (parent.type !== "Program" && parent.type !== "File") {
77
+ throw new Error(messages.get("traverseNeedsParent", parent.type));
78
+ }
79
+ }
80
+
81
+ visitors.explode(opts);
82
+
83
+ traverse.node(parent, opts, scope, state, parentPath);
84
+ }
85
+
86
+ traverse.visitors = visitors;
87
+ traverse.verify = visitors.verify;
88
+ traverse.explode = visitors.explode;
89
+
90
+ traverse.NodePath = require("./path");
91
+ traverse.Scope = require("./scope");
92
+ traverse.Hub = require("./hub");
93
+
94
+ traverse.cheap = function (node, enter) {
95
+ if (!node) return;
96
+
97
+ var keys = t.VISITOR_KEYS[node.type];
98
+ if (!keys) return;
99
+
100
+ enter(node);
101
+
102
+ for (var _iterator = keys, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
103
+ var _ref;
104
+
105
+ if (_isArray) {
106
+ if (_i >= _iterator.length) break;
107
+ _ref = _iterator[_i++];
108
+ } else {
109
+ _i = _iterator.next();
110
+ if (_i.done) break;
111
+ _ref = _i.value;
112
+ }
113
+
114
+ var key = _ref;
115
+
116
+ var subNode = node[key];
117
+
118
+ if (Array.isArray(subNode)) {
119
+ for (var _iterator2 = subNode, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) {
120
+ var _ref2;
121
+
122
+ if (_isArray2) {
123
+ if (_i2 >= _iterator2.length) break;
124
+ _ref2 = _iterator2[_i2++];
125
+ } else {
126
+ _i2 = _iterator2.next();
127
+ if (_i2.done) break;
128
+ _ref2 = _i2.value;
129
+ }
130
+
131
+ var _node = _ref2;
132
+
133
+ traverse.cheap(_node, enter);
134
+ }
135
+ } else {
136
+ traverse.cheap(subNode, enter);
137
+ }
138
+ }
139
+ };
140
+
141
+ traverse.node = function (node, opts, scope, state, parentPath, skipKeys) {
142
+ var keys = t.VISITOR_KEYS[node.type];
143
+ if (!keys) return;
144
+
145
+ var context = new _context2.default(scope, opts, state, parentPath);
146
+ for (var _iterator3 = keys, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) {
147
+ var _ref3;
148
+
149
+ if (_isArray3) {
150
+ if (_i3 >= _iterator3.length) break;
151
+ _ref3 = _iterator3[_i3++];
152
+ } else {
153
+ _i3 = _iterator3.next();
154
+ if (_i3.done) break;
155
+ _ref3 = _i3.value;
156
+ }
157
+
158
+ var key = _ref3;
159
+
160
+ if (skipKeys && skipKeys[key]) continue;
161
+ if (context.visit(node, key)) return;
162
+ }
163
+ };
164
+
165
+ var CLEAR_KEYS = t.COMMENT_KEYS.concat(["tokens", "comments", "start", "end", "loc", "raw", "rawValue"]);
166
+
167
+ traverse.clearNode = function (node) {
168
+ for (var _iterator4 = CLEAR_KEYS, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) {
169
+ var _ref4;
170
+
171
+ if (_isArray4) {
172
+ if (_i4 >= _iterator4.length) break;
173
+ _ref4 = _iterator4[_i4++];
174
+ } else {
175
+ _i4 = _iterator4.next();
176
+ if (_i4.done) break;
177
+ _ref4 = _i4.value;
178
+ }
179
+
180
+ var _key = _ref4;
181
+
182
+ if (node[_key] != null) node[_key] = undefined;
183
+ }
184
+
185
+ for (var key in node) {
186
+ if (key[0] === "_" && node[key] != null) node[key] = undefined;
187
+ }
188
+
189
+ cache.path.delete(node);
190
+
191
+ var syms = (0, _getOwnPropertySymbols2.default)(node);
192
+ for (var _iterator5 = syms, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) {
193
+ var _ref5;
194
+
195
+ if (_isArray5) {
196
+ if (_i5 >= _iterator5.length) break;
197
+ _ref5 = _iterator5[_i5++];
198
+ } else {
199
+ _i5 = _iterator5.next();
200
+ if (_i5.done) break;
201
+ _ref5 = _i5.value;
202
+ }
203
+
204
+ var sym = _ref5;
205
+
206
+ node[sym] = null;
207
+ }
208
+ };
209
+
210
+ traverse.removeProperties = function (tree) {
211
+ traverse.cheap(tree, traverse.clearNode);
212
+ return tree;
213
+ };
214
+
215
+ function hasBlacklistedType(path, state) {
216
+ if (path.node.type === state.type) {
217
+ state.has = true;
218
+ path.stop();
219
+ }
220
+ }
221
+
222
+ traverse.hasType = function (tree, scope, type, blacklistTypes) {
223
+ // the node we're searching in is blacklisted
224
+ if ((0, _includes2.default)(blacklistTypes, tree.type)) return false;
225
+
226
+ // the type we're looking for is the same as the passed node
227
+ if (tree.type === type) return true;
228
+
229
+ var state = {
230
+ has: false,
231
+ type: type
232
+ };
233
+
234
+ traverse(tree, {
235
+ blacklist: blacklistTypes,
236
+ enter: hasBlacklistedType
237
+ }, scope, state);
238
+
239
+ return state.has;
240
+ };
241
+
242
+ traverse.clearCache = function () {
243
+ cache.clear();
244
+ };
245
+
246
+ traverse.copyCache = function (source, destination) {
247
+ if (cache.path.has(source)) {
248
+ cache.path.set(destination, cache.path.get(source));
249
+ }
250
+ };
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+
5
+ var _getIterator2 = require("babel-runtime/core-js/get-iterator");
6
+
7
+ var _getIterator3 = _interopRequireDefault(_getIterator2);
8
+
9
+ exports.findParent = findParent;
10
+ exports.find = find;
11
+ exports.getFunctionParent = getFunctionParent;
12
+ exports.getStatementParent = getStatementParent;
13
+ exports.getEarliestCommonAncestorFrom = getEarliestCommonAncestorFrom;
14
+ exports.getDeepestCommonAncestorFrom = getDeepestCommonAncestorFrom;
15
+ exports.getAncestry = getAncestry;
16
+ exports.inType = inType;
17
+ exports.inShadow = inShadow;
18
+
19
+ var _babelTypes = require("babel-types");
20
+
21
+ var t = _interopRequireWildcard(_babelTypes);
22
+
23
+ var _index = require("./index");
24
+
25
+ var _index2 = _interopRequireDefault(_index);
26
+
27
+ 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; } }
28
+
29
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
+
31
+ /**
32
+ * Call the provided `callback` with the `NodePath`s of all the parents.
33
+ * When the `callback` returns a truthy value, we return that node path.
34
+ */
35
+
36
+ // This file contains that retrieve or validate anything related to the current paths ancestry.
37
+
38
+ function findParent(callback) {
39
+ var path = this;
40
+ while (path = path.parentPath) {
41
+ if (callback(path)) return path;
42
+ }
43
+ return null;
44
+ }
45
+
46
+ /**
47
+ * Description
48
+ */
49
+
50
+ function find(callback) {
51
+ var path = this;
52
+ do {
53
+ if (callback(path)) return path;
54
+ } while (path = path.parentPath);
55
+ return null;
56
+ }
57
+
58
+ /**
59
+ * Get the parent function of the current path.
60
+ */
61
+
62
+ function getFunctionParent() {
63
+ return this.findParent(function (path) {
64
+ return path.isFunction() || path.isProgram();
65
+ });
66
+ }
67
+
68
+ /**
69
+ * Walk up the tree until we hit a parent node path in a list.
70
+ */
71
+
72
+ function getStatementParent() {
73
+ var path = this;
74
+ do {
75
+ if (Array.isArray(path.container)) {
76
+ return path;
77
+ }
78
+ } while (path = path.parentPath);
79
+ }
80
+
81
+ /**
82
+ * Get the deepest common ancestor and then from it, get the earliest relationship path
83
+ * to that ancestor.
84
+ *
85
+ * Earliest is defined as being "before" all the other nodes in terms of list container
86
+ * position and visiting key.
87
+ */
88
+
89
+ function getEarliestCommonAncestorFrom(paths) {
90
+ return this.getDeepestCommonAncestorFrom(paths, function (deepest, i, ancestries) {
91
+ var earliest = void 0;
92
+ var keys = t.VISITOR_KEYS[deepest.type];
93
+
94
+ for (var _iterator = ancestries, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
95
+ var _ref;
96
+
97
+ if (_isArray) {
98
+ if (_i >= _iterator.length) break;
99
+ _ref = _iterator[_i++];
100
+ } else {
101
+ _i = _iterator.next();
102
+ if (_i.done) break;
103
+ _ref = _i.value;
104
+ }
105
+
106
+ var ancestry = _ref;
107
+
108
+ var path = ancestry[i + 1];
109
+
110
+ // first path
111
+ if (!earliest) {
112
+ earliest = path;
113
+ continue;
114
+ }
115
+
116
+ // handle containers
117
+ if (path.listKey && earliest.listKey === path.listKey) {
118
+ // we're in the same container so check if we're earlier
119
+ if (path.key < earliest.key) {
120
+ earliest = path;
121
+ continue;
122
+ }
123
+ }
124
+
125
+ // handle keys
126
+ var earliestKeyIndex = keys.indexOf(earliest.parentKey);
127
+ var currentKeyIndex = keys.indexOf(path.parentKey);
128
+ if (earliestKeyIndex > currentKeyIndex) {
129
+ // key appears before so it's earlier
130
+ earliest = path;
131
+ }
132
+ }
133
+
134
+ return earliest;
135
+ });
136
+ }
137
+
138
+ /**
139
+ * Get the earliest path in the tree where the provided `paths` intersect.
140
+ *
141
+ * TODO: Possible optimisation target.
142
+ */
143
+
144
+ function getDeepestCommonAncestorFrom(paths, filter) {
145
+ var _this = this;
146
+
147
+ if (!paths.length) {
148
+ return this;
149
+ }
150
+
151
+ if (paths.length === 1) {
152
+ return paths[0];
153
+ }
154
+
155
+ // minimum depth of the tree so we know the highest node
156
+ var minDepth = Infinity;
157
+
158
+ // last common ancestor
159
+ var lastCommonIndex = void 0,
160
+ lastCommon = void 0;
161
+
162
+ // get the ancestors of the path, breaking when the parent exceeds ourselves
163
+ var ancestries = paths.map(function (path) {
164
+ var ancestry = [];
165
+
166
+ do {
167
+ ancestry.unshift(path);
168
+ } while ((path = path.parentPath) && path !== _this);
169
+
170
+ // save min depth to avoid going too far in
171
+ if (ancestry.length < minDepth) {
172
+ minDepth = ancestry.length;
173
+ }
174
+
175
+ return ancestry;
176
+ });
177
+
178
+ // get the first ancestry so we have a seed to assess all other ancestries with
179
+ var first = ancestries[0];
180
+
181
+ // check ancestor equality
182
+ depthLoop: for (var i = 0; i < minDepth; i++) {
183
+ var shouldMatch = first[i];
184
+
185
+ for (var _iterator2 = ancestries, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) {
186
+ var _ref2;
187
+
188
+ if (_isArray2) {
189
+ if (_i2 >= _iterator2.length) break;
190
+ _ref2 = _iterator2[_i2++];
191
+ } else {
192
+ _i2 = _iterator2.next();
193
+ if (_i2.done) break;
194
+ _ref2 = _i2.value;
195
+ }
196
+
197
+ var ancestry = _ref2;
198
+
199
+ if (ancestry[i] !== shouldMatch) {
200
+ // we've hit a snag
201
+ break depthLoop;
202
+ }
203
+ }
204
+
205
+ // next iteration may break so store these so they can be returned
206
+ lastCommonIndex = i;
207
+ lastCommon = shouldMatch;
208
+ }
209
+
210
+ if (lastCommon) {
211
+ if (filter) {
212
+ return filter(lastCommon, lastCommonIndex, ancestries);
213
+ } else {
214
+ return lastCommon;
215
+ }
216
+ } else {
217
+ throw new Error("Couldn't find intersection");
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Build an array of node paths containing the entire ancestry of the current node path.
223
+ *
224
+ * NOTE: The current node path is included in this.
225
+ */
226
+
227
+ function getAncestry() {
228
+ var path = this;
229
+ var paths = [];
230
+ do {
231
+ paths.push(path);
232
+ } while (path = path.parentPath);
233
+ return paths;
234
+ }
235
+
236
+ function inType() {
237
+ var path = this;
238
+ while (path) {
239
+ for (var _iterator3 = arguments, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) {
240
+ var _ref3;
241
+
242
+ if (_isArray3) {
243
+ if (_i3 >= _iterator3.length) break;
244
+ _ref3 = _iterator3[_i3++];
245
+ } else {
246
+ _i3 = _iterator3.next();
247
+ if (_i3.done) break;
248
+ _ref3 = _i3.value;
249
+ }
250
+
251
+ var type = _ref3;
252
+
253
+ if (path.node.type === type) return true;
254
+ }
255
+ path = path.parentPath;
256
+ }
257
+
258
+ return false;
259
+ }
260
+
261
+ /**
262
+ * Checks whether the binding for 'key' is a local binding in its current function context.
263
+ *
264
+ * Checks if the current path either is, or has a direct parent function that is, inside
265
+ * of a function that is marked for shadowing of a binding matching 'key'. Also returns
266
+ * the parent path if the parent path is an arrow, since arrow functions pass through
267
+ * binding values to their parent, meaning they have no local bindings.
268
+ *
269
+ * Shadowing means that when the given binding is transformed, it will read the binding
270
+ * value from the container containing the shadow function, rather than from inside the
271
+ * shadow function.
272
+ *
273
+ * Function shadowing is acheieved by adding a "shadow" property on "FunctionExpression"
274
+ * and "FunctionDeclaration" node types.
275
+ *
276
+ * Node's "shadow" props have the following behavior:
277
+ *
278
+ * - Boolean true will cause the function to shadow both "this" and "arguments".
279
+ * - {this: false} Shadows "arguments" but not "this".
280
+ * - {arguments: false} Shadows "this" but not "arguments".
281
+ *
282
+ * Separately, individual identifiers can be flagged with two flags:
283
+ *
284
+ * - _forceShadow - If truthy, this specific identifier will be bound in the closest
285
+ * Function that is not flagged "shadow", or the Program.
286
+ * - _shadowedFunctionLiteral - When set to a NodePath, this specific identifier will be bound
287
+ * to this NodePath/Node or the Program. If this path is not found relative to the
288
+ * starting location path, the closest function will be used.
289
+ *
290
+ * Please Note, these flags are for private internal use only and should be avoided.
291
+ * Only "shadow" is a public property that other transforms may manipulate.
292
+ */
293
+
294
+ function inShadow(key) {
295
+ var parentFn = this.isFunction() ? this : this.findParent(function (p) {
296
+ return p.isFunction();
297
+ });
298
+ if (!parentFn) return;
299
+
300
+ if (parentFn.isFunctionExpression() || parentFn.isFunctionDeclaration()) {
301
+ var shadow = parentFn.node.shadow;
302
+
303
+ // this is because sometimes we may have a `shadow` value of:
304
+ //
305
+ // { this: false }
306
+ //
307
+ // we need to catch this case if `inShadow` has been passed a `key`
308
+ if (shadow && (!key || shadow[key] !== false)) {
309
+ return parentFn;
310
+ }
311
+ } else if (parentFn.isArrowFunctionExpression()) {
312
+ return parentFn;
313
+ }
314
+
315
+ // normal function, we've found our function context
316
+ return null;
317
+ }