UNPKG

1.98 kBJavaScriptView Raw
1"use strict";
2
3exports.__esModule = true;
4
5exports.default = function (node, nodes, file, scope, allowedSingleIdent) {
6 var obj = void 0;
7 if (t.isIdentifier(node) && allowedSingleIdent) {
8 obj = node;
9 } else {
10 obj = getObjRef(node, nodes, file, scope);
11 }
12
13 var ref = void 0,
14 uid = void 0;
15
16 if (t.isIdentifier(node)) {
17 ref = node;
18 uid = obj;
19 } else {
20 var prop = getPropRef(node, nodes, file, scope);
21 var computed = node.computed || t.isLiteral(prop);
22 uid = ref = t.memberExpression(obj, prop, computed);
23 }
24
25 return {
26 uid: uid,
27 ref: ref
28 };
29};
30
31var _babelTypes = require("babel-types");
32
33var t = _interopRequireWildcard(_babelTypes);
34
35function _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; } }
36
37function getObjRef(node, nodes, file, scope) {
38 var ref = void 0;
39 if (t.isSuper(node)) {
40 return node;
41 } else if (t.isIdentifier(node)) {
42 if (scope.hasBinding(node.name)) {
43 return node;
44 } else {
45 ref = node;
46 }
47 } else if (t.isMemberExpression(node)) {
48 ref = node.object;
49
50 if (t.isSuper(ref) || t.isIdentifier(ref) && scope.hasBinding(ref.name)) {
51 return ref;
52 }
53 } else {
54 throw new Error("We can't explode this node type " + node.type);
55 }
56
57 var temp = scope.generateUidIdentifierBasedOnNode(ref);
58 nodes.push(t.variableDeclaration("var", [t.variableDeclarator(temp, ref)]));
59 return temp;
60}
61
62function getPropRef(node, nodes, file, scope) {
63 var prop = node.property;
64 var key = t.toComputedKey(node, prop);
65 if (t.isLiteral(key) && t.isPureish(key)) return key;
66
67 var temp = scope.generateUidIdentifierBasedOnNode(prop);
68 nodes.push(t.variableDeclaration("var", [t.variableDeclarator(temp, prop)]));
69 return temp;
70}
71
72module.exports = exports["default"];
\No newline at end of file