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,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
|
+
}
|