diff options
Diffstat (limited to 'node_modules/babel-helper-explode-assignable-expression/lib/index.js')
-rw-r--r-- | node_modules/babel-helper-explode-assignable-expression/lib/index.js | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/node_modules/babel-helper-explode-assignable-expression/lib/index.js b/node_modules/babel-helper-explode-assignable-expression/lib/index.js new file mode 100644 index 0000000..3604315 --- /dev/null +++ b/node_modules/babel-helper-explode-assignable-expression/lib/index.js @@ -0,0 +1,72 @@ +"use strict"; + +exports.__esModule = true; + +exports.default = function (node, nodes, file, scope, allowedSingleIdent) { + var obj = void 0; + if (t.isIdentifier(node) && allowedSingleIdent) { + obj = node; + } else { + obj = getObjRef(node, nodes, file, scope); + } + + var ref = void 0, + uid = void 0; + + if (t.isIdentifier(node)) { + ref = node; + uid = obj; + } else { + var prop = getPropRef(node, nodes, file, scope); + var computed = node.computed || t.isLiteral(prop); + uid = ref = t.memberExpression(obj, prop, computed); + } + + return { + uid: uid, + ref: ref + }; +}; + +var _babelTypes = require("babel-types"); + +var t = _interopRequireWildcard(_babelTypes); + +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; } } + +function getObjRef(node, nodes, file, scope) { + var ref = void 0; + if (t.isSuper(node)) { + return node; + } else if (t.isIdentifier(node)) { + if (scope.hasBinding(node.name)) { + return node; + } else { + ref = node; + } + } else if (t.isMemberExpression(node)) { + ref = node.object; + + if (t.isSuper(ref) || t.isIdentifier(ref) && scope.hasBinding(ref.name)) { + return ref; + } + } else { + throw new Error("We can't explode this node type " + node.type); + } + + var temp = scope.generateUidIdentifierBasedOnNode(ref); + nodes.push(t.variableDeclaration("var", [t.variableDeclarator(temp, ref)])); + return temp; +} + +function getPropRef(node, nodes, file, scope) { + var prop = node.property; + var key = t.toComputedKey(node, prop); + if (t.isLiteral(key) && t.isPureish(key)) return key; + + var temp = scope.generateUidIdentifierBasedOnNode(prop); + nodes.push(t.variableDeclaration("var", [t.variableDeclarator(temp, prop)])); + return temp; +} + +module.exports = exports["default"];
\ No newline at end of file |