| | |
| | | Object.defineProperty(exports, "__esModule", { |
| | | value: true |
| | | }); |
| | | exports.insertBefore = insertBefore; |
| | | exports._containerInsert = _containerInsert; |
| | | exports._containerInsertBefore = _containerInsertBefore; |
| | | exports._containerInsertAfter = _containerInsertAfter; |
| | | exports.insertAfter = insertAfter; |
| | | exports.updateSiblingKeys = updateSiblingKeys; |
| | | exports._containerInsertBefore = _containerInsertBefore; |
| | | exports._verifyNodeList = _verifyNodeList; |
| | | exports.unshiftContainer = unshiftContainer; |
| | | exports.pushContainer = pushContainer; |
| | | exports.hoist = hoist; |
| | | exports.insertAfter = insertAfter; |
| | | exports.insertBefore = insertBefore; |
| | | exports.pushContainer = pushContainer; |
| | | exports.unshiftContainer = unshiftContainer; |
| | | exports.updateSiblingKeys = updateSiblingKeys; |
| | | |
| | | var _cache = require("../cache"); |
| | | |
| | |
| | | callExpression, |
| | | cloneNode, |
| | | expressionStatement, |
| | | isExpression |
| | | isAssignmentExpression, |
| | | isCallExpression, |
| | | isExpression, |
| | | isIdentifier, |
| | | isSequenceExpression, |
| | | isSuper, |
| | | thisExpression |
| | | } = _t; |
| | | |
| | | function insertBefore(nodes_) { |
| | |
| | | return this._containerInsert(this.key + 1, nodes); |
| | | } |
| | | |
| | | const last = arr => arr[arr.length - 1]; |
| | | |
| | | function isHiddenInSequenceExpression(path) { |
| | | return isSequenceExpression(path.parent) && (last(path.parent.expressions) !== path.node || isHiddenInSequenceExpression(path.parentPath)); |
| | | } |
| | | |
| | | function isAlmostConstantAssignment(node, scope) { |
| | | if (!isAssignmentExpression(node) || !isIdentifier(node.left)) { |
| | | return false; |
| | | } |
| | | |
| | | const blockScope = scope.getBlockParent(); |
| | | return blockScope.hasOwnBinding(node.left.name) && blockScope.getOwnBinding(node.left.name).constantViolations.length <= 1; |
| | | } |
| | | |
| | | function insertAfter(nodes_) { |
| | | this._assertUnremoved(); |
| | | |
| | | if (this.isSequenceExpression()) { |
| | | return last(this.get("expressions")).insertAfter(nodes_); |
| | | } |
| | | |
| | | const nodes = this._verifyNodeList(nodes_); |
| | | |
| | |
| | | return [this]; |
| | | } |
| | | |
| | | if (parentPath.isMethod({ |
| | | computed: true, |
| | | key: node |
| | | })) { |
| | | scope = scope.parent; |
| | | } |
| | | if (isHiddenInSequenceExpression(this)) { |
| | | nodes.unshift(node); |
| | | } else if (isCallExpression(node) && isSuper(node.callee)) { |
| | | nodes.unshift(node); |
| | | nodes.push(thisExpression()); |
| | | } else if (isAlmostConstantAssignment(node, scope)) { |
| | | nodes.unshift(node); |
| | | nodes.push(cloneNode(node.left)); |
| | | } else if (scope.isPure(node, true)) { |
| | | nodes.push(node); |
| | | } else { |
| | | if (parentPath.isMethod({ |
| | | computed: true, |
| | | key: node |
| | | })) { |
| | | scope = scope.parent; |
| | | } |
| | | |
| | | const temp = scope.generateDeclaredUidIdentifier(); |
| | | nodes.unshift(expressionStatement(assignmentExpression("=", cloneNode(temp), node))); |
| | | nodes.push(expressionStatement(cloneNode(temp))); |
| | | const temp = scope.generateDeclaredUidIdentifier(); |
| | | nodes.unshift(expressionStatement(assignmentExpression("=", cloneNode(temp), node))); |
| | | nodes.push(expressionStatement(cloneNode(temp))); |
| | | } |
| | | } |
| | | |
| | | return this.replaceExpressionWithStatements(nodes); |