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.
- checksums.yaml +4 -4
- data/bin/console +14 -0
- data/bin/export-external-helpers +3 -0
- data/bin/setup +6 -0
- data/bin/update-npm-deps +8 -0
- data/examples/myapp/Gemfile +4 -5
- data/examples/myapp/Gemfile.lock +69 -93
- data/examples/myapp/app/assets/javascripts/code/hello.es6 +5 -1
- data/examples/myapp/app/views/layouts/application.html.erb +1 -0
- data/examples/myapp/app/views/site/home.html.erb +0 -1
- data/lib/babel-schmooze-sprockets/babel_processor.rb +6 -4
- data/lib/babel-schmooze-sprockets/engine.rb +1 -4
- data/lib/babel-schmooze-sprockets/version.rb +1 -1
- data/node_modules/amdefine/package.json +8 -1
- data/node_modules/babel-core/node_modules/babel-runtime/package.json +9 -5
- data/node_modules/babel-core/node_modules/babel-traverse/.npmignore +3 -0
- data/node_modules/babel-core/node_modules/babel-traverse/README.md +1 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/cache.js +20 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/context.js +219 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/hub.js +19 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/index.js +250 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/ancestry.js +317 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/comments.js +55 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/context.js +297 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/conversion.js +48 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/evaluation.js +406 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/family.js +168 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/index.js +245 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/inference/index.js +151 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/inference/inferer-reference.js +225 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/inference/inferers.js +198 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/introspection.js +518 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/lib/hoister.js +166 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/lib/removal-hooks.js +64 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/lib/virtual-types.js +141 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/modification.js +293 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/removal.js +72 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/path/replacement.js +302 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/scope/binding.js +105 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/scope/index.js +1222 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/scope/lib/renamer.js +154 -0
- data/node_modules/babel-core/node_modules/babel-traverse/lib/visitors.js +360 -0
- data/node_modules/babel-core/node_modules/babel-traverse/package.json +107 -0
- data/node_modules/babel-core/node_modules/core-js/package.json +20 -2
- data/node_modules/babel-core/package.json +31 -24
- data/node_modules/babel-generator/lib/buffer.js +69 -70
- data/node_modules/babel-generator/lib/generators/base.js +16 -12
- data/node_modules/babel-generator/lib/generators/classes.js +28 -19
- data/node_modules/babel-generator/lib/generators/expressions.js +76 -99
- data/node_modules/babel-generator/lib/generators/flow.js +178 -119
- data/node_modules/babel-generator/lib/generators/jsx.js +38 -29
- data/node_modules/babel-generator/lib/generators/methods.js +34 -25
- data/node_modules/babel-generator/lib/generators/modules.js +67 -40
- data/node_modules/babel-generator/lib/generators/statements.js +93 -76
- data/node_modules/babel-generator/lib/generators/template-literals.js +12 -11
- data/node_modules/babel-generator/lib/generators/types.js +56 -49
- data/node_modules/babel-generator/lib/index.js +52 -39
- data/node_modules/babel-generator/lib/node/index.js +12 -18
- data/node_modules/babel-generator/lib/node/parentheses.js +23 -27
- data/node_modules/babel-generator/lib/node/whitespace.js +20 -26
- data/node_modules/babel-generator/lib/position.js +5 -5
- data/node_modules/babel-generator/lib/printer.js +52 -81
- data/node_modules/babel-generator/lib/source-map.js +9 -11
- data/node_modules/babel-generator/lib/whitespace.js +13 -13
- data/node_modules/babel-generator/node_modules/babel-runtime/package.json +19 -6
- data/node_modules/babel-generator/node_modules/babel-types/.npmignore +3 -0
- data/node_modules/babel-generator/node_modules/babel-types/README.md +1141 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/constants.js +40 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/converters.js +378 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/core.js +704 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/es2015.js +354 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/experimental.js +85 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/flow.js +319 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/index.js +247 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/init.js +15 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/jsx.js +137 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/definitions/misc.js +21 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/flow.js +129 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/index.js +848 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/react.js +83 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/retrievers.js +123 -0
- data/node_modules/babel-generator/node_modules/babel-types/lib/validators.js +276 -0
- data/node_modules/babel-generator/node_modules/babel-types/package.json +103 -0
- data/node_modules/babel-generator/node_modules/core-js/package.json +10 -5
- data/node_modules/babel-generator/package.json +19 -16
- data/node_modules/babel-helpers/node_modules/babel-runtime/package.json +19 -3
- data/node_modules/babel-helpers/node_modules/core-js/package.json +20 -4
- data/node_modules/babel-helpers/package.json +8 -1
- data/node_modules/babel-register/node_modules/babel-runtime/package.json +19 -3
- data/node_modules/babel-register/node_modules/core-js/package.json +20 -4
- data/node_modules/babel-register/package.json +8 -1
- data/node_modules/balanced-match/package.json +8 -1
- data/node_modules/brace-expansion/package.json +19 -12
- data/node_modules/concat-map/package.json +9 -2
- data/node_modules/convert-source-map/package.json +8 -1
- data/node_modules/detect-indent/package.json +8 -1
- data/node_modules/get-stdin/package.json +8 -1
- data/node_modules/home-or-tmp/package.json +9 -2
- data/node_modules/is-finite/package.json +8 -2
- data/node_modules/json5/package.json +8 -1
- data/node_modules/minimatch/README.md +2 -9
- data/node_modules/minimatch/minimatch.js +15 -3
- data/node_modules/minimatch/package.json +29 -21
- data/node_modules/minimist/package.json +8 -1
- data/node_modules/mkdirp/node_modules/minimist/package.json +8 -1
- data/node_modules/mkdirp/package.json +8 -1
- data/node_modules/number-is-nan/package.json +8 -1
- data/node_modules/os-tmpdir/package.json +8 -1
- data/node_modules/path-exists/package.json +8 -1
- data/node_modules/path-is-absolute/package.json +8 -1
- data/node_modules/repeating/package.json +15 -11
- data/node_modules/shebang-regex/package.json +8 -1
- data/node_modules/slash/package.json +8 -1
- data/node_modules/source-map-support/node_modules/source-map/package.json +8 -1
- data/node_modules/source-map-support/package.json +8 -1
- data/node_modules/source-map/package.json +8 -1
- data/node_modules/user-home/package.json +8 -1
- data/package.json +1 -1
- metadata +54 -6
- data/node_modules/brace-expansion/.npmignore +0 -3
- data/node_modules/brace-expansion/example.js +0 -8
- 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
|
+
}
|