1 | "use strict";
|
2 |
|
3 | exports.__esModule = true;
|
4 |
|
5 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
6 |
|
7 | exports.isBinding = isBinding;
|
8 | exports.isReferenced = isReferenced;
|
9 | exports.isValidIdentifier = isValidIdentifier;
|
10 | exports.isLet = isLet;
|
11 | exports.isBlockScoped = isBlockScoped;
|
12 | exports.isVar = isVar;
|
13 | exports.isSpecifierDefault = isSpecifierDefault;
|
14 | exports.isScope = isScope;
|
15 | exports.isImmutable = isImmutable;
|
16 | exports.isNodesEquivalent = isNodesEquivalent;
|
17 |
|
18 | var _retrievers = require("./retrievers");
|
19 |
|
20 | var _esutils = require("esutils");
|
21 |
|
22 | var _esutils2 = _interopRequireDefault(_esutils);
|
23 |
|
24 | var _index = require("./index");
|
25 |
|
26 | var t = _interopRequireWildcard(_index);
|
27 |
|
28 | var _constants = require("./constants");
|
29 |
|
30 | 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; } }
|
31 |
|
32 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
33 |
|
34 | function isBinding(node, parent) {
|
35 | var keys = _retrievers.getBindingIdentifiers.keys[parent.type];
|
36 | if (keys) {
|
37 | for (var i = 0; i < keys.length; i++) {
|
38 | var key = keys[i];
|
39 | var val = parent[key];
|
40 | if (Array.isArray(val)) {
|
41 | if (val.indexOf(node) >= 0) return true;
|
42 | } else {
|
43 | if (val === node) return true;
|
44 | }
|
45 | }
|
46 | }
|
47 |
|
48 | return false;
|
49 | }
|
50 |
|
51 | function isReferenced(node, parent) {
|
52 | switch (parent.type) {
|
53 | case "BindExpression":
|
54 | return parent.object === node || parent.callee === node;
|
55 |
|
56 | case "MemberExpression":
|
57 | case "JSXMemberExpression":
|
58 | if (parent.property === node && parent.computed) {
|
59 | return true;
|
60 | } else if (parent.object === node) {
|
61 | return true;
|
62 | } else {
|
63 | return false;
|
64 | }
|
65 |
|
66 | case "MetaProperty":
|
67 | return false;
|
68 |
|
69 | case "ObjectProperty":
|
70 | if (parent.key === node) {
|
71 | return parent.computed;
|
72 | }
|
73 |
|
74 | case "VariableDeclarator":
|
75 | return parent.id !== node;
|
76 |
|
77 | case "ArrowFunctionExpression":
|
78 | case "FunctionDeclaration":
|
79 | case "FunctionExpression":
|
80 | for (var _iterator = parent.params, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
81 | var _ref;
|
82 |
|
83 | if (_isArray) {
|
84 | if (_i >= _iterator.length) break;
|
85 | _ref = _iterator[_i++];
|
86 | } else {
|
87 | _i = _iterator.next();
|
88 | if (_i.done) break;
|
89 | _ref = _i.value;
|
90 | }
|
91 |
|
92 | var param = _ref;
|
93 |
|
94 | if (param === node) return false;
|
95 | }
|
96 |
|
97 | return parent.id !== node;
|
98 |
|
99 | case "ExportSpecifier":
|
100 | if (parent.source) {
|
101 | return false;
|
102 | } else {
|
103 | return parent.local === node;
|
104 | }
|
105 |
|
106 | case "ExportNamespaceSpecifier":
|
107 | case "ExportDefaultSpecifier":
|
108 | return false;
|
109 |
|
110 | case "JSXAttribute":
|
111 | return parent.name !== node;
|
112 |
|
113 | case "ClassProperty":
|
114 | if (parent.key === node) {
|
115 | return parent.computed;
|
116 | } else {
|
117 | return parent.value === node;
|
118 | }
|
119 |
|
120 | case "ImportDefaultSpecifier":
|
121 | case "ImportNamespaceSpecifier":
|
122 | case "ImportSpecifier":
|
123 | return false;
|
124 |
|
125 | case "ClassDeclaration":
|
126 | case "ClassExpression":
|
127 | return parent.id !== node;
|
128 |
|
129 | case "ClassMethod":
|
130 | case "ObjectMethod":
|
131 | return parent.key === node && parent.computed;
|
132 |
|
133 | case "LabeledStatement":
|
134 | return false;
|
135 |
|
136 | case "CatchClause":
|
137 | return parent.param !== node;
|
138 |
|
139 | case "RestElement":
|
140 | return false;
|
141 |
|
142 | case "AssignmentExpression":
|
143 | return parent.right === node;
|
144 |
|
145 | case "AssignmentPattern":
|
146 | return parent.right === node;
|
147 |
|
148 | case "ObjectPattern":
|
149 | case "ArrayPattern":
|
150 | return false;
|
151 | }
|
152 |
|
153 | return true;
|
154 | }
|
155 |
|
156 | function isValidIdentifier(name) {
|
157 | if (typeof name !== "string" || _esutils2.default.keyword.isReservedWordES6(name, true)) {
|
158 | return false;
|
159 | } else if (name === "await") {
|
160 | return false;
|
161 | } else {
|
162 | return _esutils2.default.keyword.isIdentifierNameES6(name);
|
163 | }
|
164 | }
|
165 |
|
166 | function isLet(node) {
|
167 | return t.isVariableDeclaration(node) && (node.kind !== "var" || node[_constants.BLOCK_SCOPED_SYMBOL]);
|
168 | }
|
169 |
|
170 | function isBlockScoped(node) {
|
171 | return t.isFunctionDeclaration(node) || t.isClassDeclaration(node) || t.isLet(node);
|
172 | }
|
173 |
|
174 | function isVar(node) {
|
175 | return t.isVariableDeclaration(node, { kind: "var" }) && !node[_constants.BLOCK_SCOPED_SYMBOL];
|
176 | }
|
177 |
|
178 | function isSpecifierDefault(specifier) {
|
179 | return t.isImportDefaultSpecifier(specifier) || t.isIdentifier(specifier.imported || specifier.exported, { name: "default" });
|
180 | }
|
181 |
|
182 | function isScope(node, parent) {
|
183 | if (t.isBlockStatement(node) && t.isFunction(parent, { body: node })) {
|
184 | return false;
|
185 | }
|
186 |
|
187 | return t.isScopable(node);
|
188 | }
|
189 |
|
190 | function isImmutable(node) {
|
191 | if (t.isType(node.type, "Immutable")) return true;
|
192 |
|
193 | if (t.isIdentifier(node)) {
|
194 | if (node.name === "undefined") {
|
195 | return true;
|
196 | } else {
|
197 | return false;
|
198 | }
|
199 | }
|
200 |
|
201 | return false;
|
202 | }
|
203 |
|
204 | function isNodesEquivalent(a, b) {
|
205 | if ((typeof a === "undefined" ? "undefined" : _typeof(a)) !== "object" || (typeof a === "undefined" ? "undefined" : _typeof(a)) !== "object" || a == null || b == null) {
|
206 | return a === b;
|
207 | }
|
208 |
|
209 | if (a.type !== b.type) {
|
210 | return false;
|
211 | }
|
212 |
|
213 | var fields = Object.keys(t.NODE_FIELDS[a.type] || a.type);
|
214 |
|
215 | for (var _iterator2 = fields, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
|
216 | var _ref2;
|
217 |
|
218 | if (_isArray2) {
|
219 | if (_i2 >= _iterator2.length) break;
|
220 | _ref2 = _iterator2[_i2++];
|
221 | } else {
|
222 | _i2 = _iterator2.next();
|
223 | if (_i2.done) break;
|
224 | _ref2 = _i2.value;
|
225 | }
|
226 |
|
227 | var field = _ref2;
|
228 |
|
229 | if (_typeof(a[field]) !== _typeof(b[field])) {
|
230 | return false;
|
231 | }
|
232 |
|
233 | if (Array.isArray(a[field])) {
|
234 | if (!Array.isArray(b[field])) {
|
235 | return false;
|
236 | }
|
237 | if (a[field].length !== b[field].length) {
|
238 | return false;
|
239 | }
|
240 |
|
241 | for (var i = 0; i < a[field].length; i++) {
|
242 | if (!isNodesEquivalent(a[field][i], b[field][i])) {
|
243 | return false;
|
244 | }
|
245 | }
|
246 | continue;
|
247 | }
|
248 |
|
249 | if (!isNodesEquivalent(a[field], b[field])) {
|
250 | return false;
|
251 | }
|
252 | }
|
253 |
|
254 | return true;
|
255 | } |
\ | No newline at end of file |