UNPKG

7.69 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _getIterator2 = require('babel-runtime/core-js/get-iterator');
6
7var _getIterator3 = _interopRequireDefault(_getIterator2);
8
9exports.simple = simple;
10exports.ancestor = ancestor;
11exports.recursive = recursive;
12
13var _babelTypes = require('babel-types');
14
15var t = _interopRequireWildcard(_babelTypes);
16
17var _explode = require('./explode.js');
18
19var _explode2 = _interopRequireDefault(_explode);
20
21function _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; } }
22
23function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
25function simple(node, visitors, state) {
26 if (!node) return;
27
28 visitors = (0, _explode2.default)(visitors);
29
30 (function c(node) {
31 if (!node) return;
32
33 var _ref = visitors[node.type] || {};
34
35 var enter = _ref.enter;
36 var exit = _ref.exit;
37
38
39 if (enter) {
40 for (var _iterator = enter, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
41 var _ref2;
42
43 if (_isArray) {
44 if (_i >= _iterator.length) break;
45 _ref2 = _iterator[_i++];
46 } else {
47 _i = _iterator.next();
48 if (_i.done) break;
49 _ref2 = _i.value;
50 }
51
52 var visitor = _ref2;
53
54 visitor(node, state);
55 }
56 }
57
58 for (var _iterator2 = t.VISITOR_KEYS[node.type] || [], _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) {
59 var _ref3;
60
61 if (_isArray2) {
62 if (_i2 >= _iterator2.length) break;
63 _ref3 = _iterator2[_i2++];
64 } else {
65 _i2 = _iterator2.next();
66 if (_i2.done) break;
67 _ref3 = _i2.value;
68 }
69
70 var key = _ref3;
71
72 var subNode = node[key];
73 if (Array.isArray(subNode)) {
74 for (var _iterator4 = subNode, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) {
75 var _ref5;
76
77 if (_isArray4) {
78 if (_i4 >= _iterator4.length) break;
79 _ref5 = _iterator4[_i4++];
80 } else {
81 _i4 = _iterator4.next();
82 if (_i4.done) break;
83 _ref5 = _i4.value;
84 }
85
86 var subSubNode = _ref5;
87
88 c(subSubNode);
89 }
90 } else {
91 c(subNode);
92 }
93 }
94
95 if (exit) {
96 for (var _iterator3 = exit, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) {
97 var _ref4;
98
99 if (_isArray3) {
100 if (_i3 >= _iterator3.length) break;
101 _ref4 = _iterator3[_i3++];
102 } else {
103 _i3 = _iterator3.next();
104 if (_i3.done) break;
105 _ref4 = _i3.value;
106 }
107
108 var _visitor = _ref4;
109
110 _visitor(node, state);
111 }
112 }
113 })(node);
114}
115
116function ancestor(node, visitors, state) {
117 if (!node) return;
118
119 visitors = (0, _explode2.default)(visitors);
120 var ancestors = [];
121
122 (function c(node) {
123 if (!node) return;
124
125 var _ref6 = visitors[node.type] || {};
126
127 var enter = _ref6.enter;
128 var exit = _ref6.exit;
129
130
131 var isNew = node != ancestors[ancestors.length - 1];
132 if (isNew) ancestors.push(node);
133
134 if (enter) {
135 for (var _iterator5 = enter, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) {
136 var _ref7;
137
138 if (_isArray5) {
139 if (_i5 >= _iterator5.length) break;
140 _ref7 = _iterator5[_i5++];
141 } else {
142 _i5 = _iterator5.next();
143 if (_i5.done) break;
144 _ref7 = _i5.value;
145 }
146
147 var visitor = _ref7;
148
149 visitor(node, state || ancestors, ancestors);
150 }
151 }
152
153 for (var _iterator6 = t.VISITOR_KEYS[node.type] || [], _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : (0, _getIterator3.default)(_iterator6);;) {
154 var _ref8;
155
156 if (_isArray6) {
157 if (_i6 >= _iterator6.length) break;
158 _ref8 = _iterator6[_i6++];
159 } else {
160 _i6 = _iterator6.next();
161 if (_i6.done) break;
162 _ref8 = _i6.value;
163 }
164
165 var key = _ref8;
166
167 var subNode = node[key];
168 if (Array.isArray(subNode)) {
169 for (var _iterator8 = subNode, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : (0, _getIterator3.default)(_iterator8);;) {
170 var _ref10;
171
172 if (_isArray8) {
173 if (_i8 >= _iterator8.length) break;
174 _ref10 = _iterator8[_i8++];
175 } else {
176 _i8 = _iterator8.next();
177 if (_i8.done) break;
178 _ref10 = _i8.value;
179 }
180
181 var subSubNode = _ref10;
182
183 c(subSubNode);
184 }
185 } else {
186 c(subNode);
187 }
188 }
189
190 if (exit) {
191 for (var _iterator7 = exit, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : (0, _getIterator3.default)(_iterator7);;) {
192 var _ref9;
193
194 if (_isArray7) {
195 if (_i7 >= _iterator7.length) break;
196 _ref9 = _iterator7[_i7++];
197 } else {
198 _i7 = _iterator7.next();
199 if (_i7.done) break;
200 _ref9 = _i7.value;
201 }
202
203 var _visitor2 = _ref9;
204
205 _visitor2(node, state || ancestors, ancestors);
206 }
207 }
208
209 if (isNew) ancestors.pop();
210 })(node);
211}
212
213function recursive(node, visitors, state) {
214 if (!node) return;
215
216 visitors = (0, _explode2.default)(visitors);
217
218 (function c(node) {
219 if (!node) return;
220
221 var _ref11 = visitors[node.type] || {};
222
223 var enter = _ref11.enter;
224
225
226 if (enter && enter.length) {
227 for (var _iterator9 = enter, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : (0, _getIterator3.default)(_iterator9);;) {
228 var _ref12;
229
230 if (_isArray9) {
231 if (_i9 >= _iterator9.length) break;
232 _ref12 = _iterator9[_i9++];
233 } else {
234 _i9 = _iterator9.next();
235 if (_i9.done) break;
236 _ref12 = _i9.value;
237 }
238
239 var visitor = _ref12;
240
241 visitor(node, state, c);
242 }
243 } else {
244 for (var _iterator10 = t.VISITOR_KEYS[node.type] || [], _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : (0, _getIterator3.default)(_iterator10);;) {
245 var _ref13;
246
247 if (_isArray10) {
248 if (_i10 >= _iterator10.length) break;
249 _ref13 = _iterator10[_i10++];
250 } else {
251 _i10 = _iterator10.next();
252 if (_i10.done) break;
253 _ref13 = _i10.value;
254 }
255
256 var key = _ref13;
257
258 var subNode = node[key];
259 if (Array.isArray(subNode)) {
260 for (var _iterator11 = subNode, _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : (0, _getIterator3.default)(_iterator11);;) {
261 var _ref14;
262
263 if (_isArray11) {
264 if (_i11 >= _iterator11.length) break;
265 _ref14 = _iterator11[_i11++];
266 } else {
267 _i11 = _iterator11.next();
268 if (_i11.done) break;
269 _ref14 = _i11.value;
270 }
271
272 var subSubNode = _ref14;
273
274 c(subSubNode);
275 }
276 } else {
277 c(subNode);
278 }
279 }
280 }
281 })(node);
282}
\No newline at end of file