"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._assertUnremoved = _assertUnremoved; exports._callRemovalHooks = _callRemovalHooks; exports._markRemoved = _markRemoved; exports._remove = _remove; exports._removeFromScope = _removeFromScope; exports.remove = remove; var _removalHooks = require("./lib/removal-hooks.js"); var _cache = require("../cache.js"); var _replacement = require("./replacement.js"); var _index = require("./index.js"); var _t = require("@babel/types"); var _modification = require("./modification.js"); var _context = require("./context.js"); const { getBindingIdentifiers } = _t; function remove() { var _this$opts; _assertUnremoved.call(this); _context.resync.call(this); if (_callRemovalHooks.call(this)) { _markRemoved.call(this); return; } if (!((_this$opts = this.opts) != null && _this$opts.noScope)) { _removeFromScope.call(this); } this.shareCommentsWithSiblings(); _remove.call(this); _markRemoved.call(this); } function _removeFromScope() { const bindings = getBindingIdentifiers(this.node, false, false, true); Object.keys(bindings).forEach(name => this.scope.removeBinding(name)); } function _callRemovalHooks() { if (this.parentPath) { for (const fn of _removalHooks.hooks) { if (fn(this, this.parentPath)) return true; } } } function _remove() { if (Array.isArray(this.container)) { this.container.splice(this.key, 1); _modification.updateSiblingKeys.call(this, this.key, -1); } else { _replacement._replaceWith.call(this, null); } } function _markRemoved() { this._traverseFlags |= _index.SHOULD_SKIP | _index.REMOVED; if (this.parent) { (0, _cache.getCachedPaths)(this.hub, this.parent).delete(this.node); } this.node = null; } function _assertUnremoved() { if (this.removed) { throw this.buildCodeFrameError("NodePath has been removed so is read-only."); } } //# sourceMappingURL=removal.js.map