@babel/traverse 7.25.6 → 7.25.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -61,7 +61,7 @@ function _call(fns) {
61
61
  function isDenylisted() {
62
62
  var _this$opts$denylist;
63
63
  const denylist = (_this$opts$denylist = this.opts.denylist) != null ? _this$opts$denylist : this.opts.blacklist;
64
- return denylist && denylist.indexOf(this.node.type) > -1;
64
+ return denylist == null ? void 0 : denylist.includes(this.node.type);
65
65
  }
66
66
  {
67
67
  exports.isBlacklisted = isDenylisted;
@@ -1 +1 @@
1
- {"version":3,"names":["_traverseNode","require","_index","_removal","t","call","key","opts","debug","node","_call","_opts$this$node$type","type","fns","fn","ret","state","then","Error","_traverseFlags","isDenylisted","_this$opts$denylist","denylist","blacklist","indexOf","exports","isBlacklisted","restoreContext","path","context","visit","_this$opts$shouldSkip","_this$opts","shouldSkip","currentContext","shouldStop","traverseNode","scope","skipKeys","skip","skipKey","stop","SHOULD_SKIP","SHOULD_STOP","setScope","_this$opts2","_this$scope","noScope","parentPath","listKey","isMethod","isSwitchStatement","target","_path$opts","getScope","init","setContext","resync","removed","_resyncParent","_resyncList","_resyncKey","parent","container","Array","isArray","i","length","setKey","Object","keys","inList","newContainer","_resyncRemoved","_markRemoved","popContext","contexts","pop","undefined","pushContext","push","setup","_this$node","requeue","pathToQueue","maybeQueue","requeueComputedKeyAndDecorators","isPrivate","computed","get","decorators","decorator","_getQueueContexts"],"sources":["../../src/path/context.ts"],"sourcesContent":["// This file contains methods responsible for maintaining a TraversalContext.\n\nimport { traverseNode } from \"../traverse-node.ts\";\nimport { SHOULD_SKIP, SHOULD_STOP } from \"./index.ts\";\nimport { _markRemoved } from \"./removal.ts\";\nimport type TraversalContext from \"../context.ts\";\nimport type { VisitPhase } from \"../types.ts\";\nimport type NodePath from \"./index.ts\";\nimport * as t from \"@babel/types\";\n\nexport function call(this: NodePath, key: VisitPhase): boolean {\n const opts = this.opts;\n\n this.debug(key);\n\n if (this.node) {\n if (_call.call(this, opts[key])) return true;\n }\n\n if (this.node) {\n return _call.call(this, opts[this.node.type]?.[key]);\n }\n\n return false;\n}\n\nexport function _call(this: NodePath, fns?: Array<Function>): boolean {\n if (!fns) return false;\n\n for (const fn of fns) {\n if (!fn) continue;\n\n const node = this.node;\n if (!node) return true;\n\n const ret = fn.call(this.state, this, this.state);\n if (ret && typeof ret === \"object\" && typeof ret.then === \"function\") {\n throw new Error(\n `You appear to be using a plugin with an async traversal visitor, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, you may need to upgrade ` +\n `your @babel/core version.`,\n );\n }\n if (ret) {\n throw new Error(`Unexpected return value from visitor method ${fn}`);\n }\n\n // node has been replaced, it will have been requeued\n if (this.node !== node) return true;\n\n // this.shouldSkip || this.shouldStop || this.removed\n if (this._traverseFlags > 0) return true;\n }\n\n return false;\n}\n\nexport function isDenylisted(this: NodePath): boolean {\n // @ts-expect-error TODO(Babel 8): Remove blacklist\n const denylist = this.opts.denylist ?? this.opts.blacklist;\n return denylist && denylist.indexOf(this.node.type) > -1;\n}\n\nif (!process.env.BABEL_8_BREAKING && !USE_ESM) {\n // eslint-disable-next-line no-restricted-globals\n exports.isBlacklisted = isDenylisted;\n}\n\nfunction restoreContext(path: NodePath, context: TraversalContext) {\n if (path.context !== context) {\n path.context = context;\n path.state = context.state;\n path.opts = context.opts;\n }\n}\n\nexport function visit(this: NodePath): boolean {\n if (!this.node) {\n return false;\n }\n\n if (this.isDenylisted()) {\n return false;\n }\n\n if (this.opts.shouldSkip?.(this)) {\n return false;\n }\n\n const currentContext = this.context;\n // Note: We need to check \"this.shouldSkip\" first because\n // another visitor can set it to true. Usually .shouldSkip is false\n // before calling the enter visitor, but it can be true in case of\n // a requeued node (e.g. by .replaceWith()) that is then marked\n // with .skip().\n if (this.shouldSkip || call.call(this, \"enter\")) {\n this.debug(\"Skip...\");\n return this.shouldStop;\n }\n restoreContext(this, currentContext);\n\n this.debug(\"Recursing into...\");\n this.shouldStop = traverseNode(\n this.node,\n this.opts,\n this.scope,\n this.state,\n this,\n this.skipKeys,\n );\n\n restoreContext(this, currentContext);\n\n call.call(this, \"exit\");\n\n return this.shouldStop;\n}\n\nexport function skip(this: NodePath) {\n this.shouldSkip = true;\n}\n\nexport function skipKey(this: NodePath, key: string) {\n if (this.skipKeys == null) {\n this.skipKeys = {};\n }\n this.skipKeys[key] = true;\n}\n\nexport function stop(this: NodePath) {\n // this.shouldSkip = true; this.shouldStop = true;\n this._traverseFlags |= SHOULD_SKIP | SHOULD_STOP;\n}\n\nexport function setScope(this: NodePath) {\n if (this.opts?.noScope) return;\n\n let path = this.parentPath;\n\n if (\n // Skip method scope if is computed method key or decorator expression\n ((this.key === \"key\" || this.listKey === \"decorators\") &&\n path.isMethod()) ||\n // Skip switch scope if for discriminant (`x` in `switch (x) {}`).\n (this.key === \"discriminant\" && path.isSwitchStatement())\n ) {\n path = path.parentPath;\n }\n\n let target;\n while (path && !target) {\n if (path.opts?.noScope) return;\n\n target = path.scope;\n path = path.parentPath;\n }\n\n this.scope = this.getScope(target);\n this.scope?.init();\n}\n\nexport function setContext<S = unknown>(\n this: NodePath,\n context?: TraversalContext<S>,\n) {\n if (this.skipKeys != null) {\n this.skipKeys = {};\n }\n // this.shouldSkip = false; this.shouldStop = false; this.removed = false;\n this._traverseFlags = 0;\n\n if (context) {\n this.context = context;\n this.state = context.state;\n // Discard the S type parameter from context.opts\n this.opts = context.opts as typeof this.opts;\n }\n\n setScope.call(this);\n\n return this;\n}\n\n/**\n * Here we resync the node paths `key` and `container`. If they've changed according\n * to what we have stored internally then we attempt to resync by crawling and looking\n * for the new values.\n */\n\nexport function resync(this: NodePath) {\n if (this.removed) return;\n\n _resyncParent.call(this);\n _resyncList.call(this);\n _resyncKey.call(this);\n //this._resyncRemoved();\n}\n\nexport function _resyncParent(this: NodePath) {\n if (this.parentPath) {\n this.parent = this.parentPath.node;\n }\n}\n\nexport function _resyncKey(this: NodePath) {\n if (!this.container) return;\n\n if (\n this.node ===\n // @ts-expect-error this.key should present in this.container\n this.container[this.key]\n ) {\n return;\n }\n\n // grrr, path key is out of sync. this is likely due to a modification to the AST\n // not done through our path APIs\n\n if (Array.isArray(this.container)) {\n for (let i = 0; i < this.container.length; i++) {\n if (this.container[i] === this.node) {\n setKey.call(this, i);\n return;\n }\n }\n } else {\n for (const key of Object.keys(this.container)) {\n // @ts-expect-error this.key should present in this.container\n if (this.container[key] === this.node) {\n setKey.call(this, key);\n return;\n }\n }\n }\n\n // ¯\\_(ツ)_/¯ who knows where it's gone lol\n this.key = null;\n}\n\nexport function _resyncList(this: NodePath) {\n if (!this.parent || !this.inList) return;\n\n const newContainer =\n // @ts-expect-error this.listKey should present in this.parent\n this.parent[this.listKey];\n if (this.container === newContainer) return;\n\n // container is out of sync. this is likely the result of it being reassigned\n this.container = newContainer || null;\n}\n\nexport function _resyncRemoved(this: NodePath) {\n if (\n this.key == null ||\n !this.container ||\n // @ts-expect-error this.key should present in this.container\n this.container[this.key] !== this.node\n ) {\n _markRemoved.call(this);\n }\n}\n\nexport function popContext(this: NodePath) {\n this.contexts.pop();\n if (this.contexts.length > 0) {\n this.setContext(this.contexts[this.contexts.length - 1]);\n } else {\n this.setContext(undefined);\n }\n}\n\nexport function pushContext(this: NodePath, context: TraversalContext) {\n this.contexts.push(context);\n this.setContext(context);\n}\n\nexport function setup(\n this: NodePath,\n parentPath: NodePath | undefined,\n container: t.Node | t.Node[],\n listKey: string,\n key: string | number,\n) {\n this.listKey = listKey;\n this.container = container;\n\n this.parentPath = parentPath || this.parentPath;\n setKey.call(this, key);\n}\n\nexport function setKey(this: NodePath, key: string | number) {\n this.key = key;\n this.node =\n // @ts-expect-error this.key must present in this.container\n this.container[this.key];\n this.type = this.node?.type;\n}\n\nexport function requeue(this: NodePath, pathToQueue = this) {\n if (pathToQueue.removed) return;\n\n // If a path is skipped, and then replaced with a\n // new one, the new one shouldn't probably be skipped.\n if (process.env.BABEL_8_BREAKING) {\n pathToQueue.shouldSkip = false;\n }\n\n // TODO(loganfsmyth): This should be switched back to queue in parent contexts\n // automatically once #2892 and #4135 have been resolved. See #4140.\n // let contexts = this._getQueueContexts();\n const contexts = this.contexts;\n\n for (const context of contexts) {\n context.maybeQueue(pathToQueue);\n }\n}\n\nexport function requeueComputedKeyAndDecorators(\n this: NodePath<t.Method | t.Property>,\n) {\n const { context, node } = this;\n if (!t.isPrivate(node) && node.computed) {\n context.maybeQueue(this.get(\"key\"));\n }\n if (node.decorators) {\n for (const decorator of this.get(\"decorators\")) {\n context.maybeQueue(decorator);\n }\n }\n}\n\nexport function _getQueueContexts(this: NodePath) {\n let path = this;\n let contexts = this.contexts;\n while (!contexts.length) {\n path = path.parentPath;\n if (!path) break;\n contexts = path.contexts;\n }\n return contexts;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_traverseNode","require","_index","_removal","t","call","key","opts","debug","node","_call","_opts$this$node$type","type","fns","fn","ret","state","then","Error","_traverseFlags","isDenylisted","_this$opts$denylist","denylist","blacklist","includes","exports","isBlacklisted","restoreContext","path","context","visit","_this$opts$shouldSkip","_this$opts","shouldSkip","currentContext","shouldStop","traverseNode","scope","skipKeys","skip","skipKey","stop","SHOULD_SKIP","SHOULD_STOP","setScope","_this$opts2","_this$scope","noScope","parentPath","listKey","isMethod","isSwitchStatement","target","_path$opts","getScope","init","setContext","resync","removed","_resyncParent","_resyncList","_resyncKey","parent","container","Array","isArray","i","length","setKey","Object","keys","inList","newContainer","_resyncRemoved","_markRemoved","popContext","contexts","pop","undefined","pushContext","push","setup","_this$node","requeue","pathToQueue","maybeQueue","requeueComputedKeyAndDecorators","isPrivate","computed","get","decorators","decorator","_getQueueContexts"],"sources":["../../src/path/context.ts"],"sourcesContent":["// This file contains methods responsible for maintaining a TraversalContext.\n\nimport { traverseNode } from \"../traverse-node.ts\";\nimport { SHOULD_SKIP, SHOULD_STOP } from \"./index.ts\";\nimport { _markRemoved } from \"./removal.ts\";\nimport type TraversalContext from \"../context.ts\";\nimport type { VisitPhase } from \"../types.ts\";\nimport type NodePath from \"./index.ts\";\nimport * as t from \"@babel/types\";\n\nexport function call(this: NodePath, key: VisitPhase): boolean {\n const opts = this.opts;\n\n this.debug(key);\n\n if (this.node) {\n if (_call.call(this, opts[key])) return true;\n }\n\n if (this.node) {\n return _call.call(this, opts[this.node.type]?.[key]);\n }\n\n return false;\n}\n\nexport function _call(this: NodePath, fns?: Array<Function>): boolean {\n if (!fns) return false;\n\n for (const fn of fns) {\n if (!fn) continue;\n\n const node = this.node;\n if (!node) return true;\n\n const ret = fn.call(this.state, this, this.state);\n if (ret && typeof ret === \"object\" && typeof ret.then === \"function\") {\n throw new Error(\n `You appear to be using a plugin with an async traversal visitor, ` +\n `which your current version of Babel does not support. ` +\n `If you're using a published plugin, you may need to upgrade ` +\n `your @babel/core version.`,\n );\n }\n if (ret) {\n throw new Error(`Unexpected return value from visitor method ${fn}`);\n }\n\n // node has been replaced, it will have been requeued\n if (this.node !== node) return true;\n\n // this.shouldSkip || this.shouldStop || this.removed\n if (this._traverseFlags > 0) return true;\n }\n\n return false;\n}\n\nexport function isDenylisted(this: NodePath): boolean {\n // @ts-expect-error TODO(Babel 8): Remove blacklist\n const denylist = this.opts.denylist ?? this.opts.blacklist;\n return denylist?.includes(this.node.type);\n}\n\nif (!process.env.BABEL_8_BREAKING && !USE_ESM) {\n // eslint-disable-next-line no-restricted-globals\n exports.isBlacklisted = isDenylisted;\n}\n\nfunction restoreContext(path: NodePath, context: TraversalContext) {\n if (path.context !== context) {\n path.context = context;\n path.state = context.state;\n path.opts = context.opts;\n }\n}\n\nexport function visit(this: NodePath): boolean {\n if (!this.node) {\n return false;\n }\n\n if (this.isDenylisted()) {\n return false;\n }\n\n if (this.opts.shouldSkip?.(this)) {\n return false;\n }\n\n const currentContext = this.context;\n // Note: We need to check \"this.shouldSkip\" first because\n // another visitor can set it to true. Usually .shouldSkip is false\n // before calling the enter visitor, but it can be true in case of\n // a requeued node (e.g. by .replaceWith()) that is then marked\n // with .skip().\n if (this.shouldSkip || call.call(this, \"enter\")) {\n this.debug(\"Skip...\");\n return this.shouldStop;\n }\n restoreContext(this, currentContext);\n\n this.debug(\"Recursing into...\");\n this.shouldStop = traverseNode(\n this.node,\n this.opts,\n this.scope,\n this.state,\n this,\n this.skipKeys,\n );\n\n restoreContext(this, currentContext);\n\n call.call(this, \"exit\");\n\n return this.shouldStop;\n}\n\nexport function skip(this: NodePath) {\n this.shouldSkip = true;\n}\n\nexport function skipKey(this: NodePath, key: string) {\n if (this.skipKeys == null) {\n this.skipKeys = {};\n }\n this.skipKeys[key] = true;\n}\n\nexport function stop(this: NodePath) {\n // this.shouldSkip = true; this.shouldStop = true;\n this._traverseFlags |= SHOULD_SKIP | SHOULD_STOP;\n}\n\nexport function setScope(this: NodePath) {\n if (this.opts?.noScope) return;\n\n let path = this.parentPath;\n\n if (\n // Skip method scope if is computed method key or decorator expression\n ((this.key === \"key\" || this.listKey === \"decorators\") &&\n path.isMethod()) ||\n // Skip switch scope if for discriminant (`x` in `switch (x) {}`).\n (this.key === \"discriminant\" && path.isSwitchStatement())\n ) {\n path = path.parentPath;\n }\n\n let target;\n while (path && !target) {\n if (path.opts?.noScope) return;\n\n target = path.scope;\n path = path.parentPath;\n }\n\n this.scope = this.getScope(target);\n this.scope?.init();\n}\n\nexport function setContext<S = unknown>(\n this: NodePath,\n context?: TraversalContext<S>,\n) {\n if (this.skipKeys != null) {\n this.skipKeys = {};\n }\n // this.shouldSkip = false; this.shouldStop = false; this.removed = false;\n this._traverseFlags = 0;\n\n if (context) {\n this.context = context;\n this.state = context.state;\n // Discard the S type parameter from context.opts\n this.opts = context.opts as typeof this.opts;\n }\n\n setScope.call(this);\n\n return this;\n}\n\n/**\n * Here we resync the node paths `key` and `container`. If they've changed according\n * to what we have stored internally then we attempt to resync by crawling and looking\n * for the new values.\n */\n\nexport function resync(this: NodePath) {\n if (this.removed) return;\n\n _resyncParent.call(this);\n _resyncList.call(this);\n _resyncKey.call(this);\n //this._resyncRemoved();\n}\n\nexport function _resyncParent(this: NodePath) {\n if (this.parentPath) {\n this.parent = this.parentPath.node;\n }\n}\n\nexport function _resyncKey(this: NodePath) {\n if (!this.container) return;\n\n if (\n this.node ===\n // @ts-expect-error this.key should present in this.container\n this.container[this.key]\n ) {\n return;\n }\n\n // grrr, path key is out of sync. this is likely due to a modification to the AST\n // not done through our path APIs\n\n if (Array.isArray(this.container)) {\n for (let i = 0; i < this.container.length; i++) {\n if (this.container[i] === this.node) {\n setKey.call(this, i);\n return;\n }\n }\n } else {\n for (const key of Object.keys(this.container)) {\n // @ts-expect-error this.key should present in this.container\n if (this.container[key] === this.node) {\n setKey.call(this, key);\n return;\n }\n }\n }\n\n // ¯\\_(ツ)_/¯ who knows where it's gone lol\n this.key = null;\n}\n\nexport function _resyncList(this: NodePath) {\n if (!this.parent || !this.inList) return;\n\n const newContainer =\n // @ts-expect-error this.listKey should present in this.parent\n this.parent[this.listKey];\n if (this.container === newContainer) return;\n\n // container is out of sync. this is likely the result of it being reassigned\n this.container = newContainer || null;\n}\n\nexport function _resyncRemoved(this: NodePath) {\n if (\n this.key == null ||\n !this.container ||\n // @ts-expect-error this.key should present in this.container\n this.container[this.key] !== this.node\n ) {\n _markRemoved.call(this);\n }\n}\n\nexport function popContext(this: NodePath) {\n this.contexts.pop();\n if (this.contexts.length > 0) {\n this.setContext(this.contexts[this.contexts.length - 1]);\n } else {\n this.setContext(undefined);\n }\n}\n\nexport function pushContext(this: NodePath, context: TraversalContext) {\n this.contexts.push(context);\n this.setContext(context);\n}\n\nexport function setup(\n this: NodePath,\n parentPath: NodePath | undefined,\n container: t.Node | t.Node[],\n listKey: string,\n key: string | number,\n) {\n this.listKey = listKey;\n this.container = container;\n\n this.parentPath = parentPath || this.parentPath;\n setKey.call(this, key);\n}\n\nexport function setKey(this: NodePath, key: string | number) {\n this.key = key;\n this.node =\n // @ts-expect-error this.key must present in this.container\n this.container[this.key];\n this.type = this.node?.type;\n}\n\nexport function requeue(this: NodePath, pathToQueue = this) {\n if (pathToQueue.removed) return;\n\n // If a path is skipped, and then replaced with a\n // new one, the new one shouldn't probably be skipped.\n if (process.env.BABEL_8_BREAKING) {\n pathToQueue.shouldSkip = false;\n }\n\n // TODO(loganfsmyth): This should be switched back to queue in parent contexts\n // automatically once #2892 and #4135 have been resolved. See #4140.\n // let contexts = this._getQueueContexts();\n const contexts = this.contexts;\n\n for (const context of contexts) {\n context.maybeQueue(pathToQueue);\n }\n}\n\nexport function requeueComputedKeyAndDecorators(\n this: NodePath<t.Method | t.Property>,\n) {\n const { context, node } = this;\n if (!t.isPrivate(node) && node.computed) {\n context.maybeQueue(this.get(\"key\"));\n }\n if (node.decorators) {\n for (const decorator of this.get(\"decorators\")) {\n context.maybeQueue(decorator);\n }\n }\n}\n\nexport function _getQueueContexts(this: NodePath) {\n let path = this;\n let contexts = this.contexts;\n while (!contexts.length) {\n path = path.parentPath;\n if (!path) break;\n contexts = path.contexts;\n }\n return contexts;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -163,7 +163,7 @@ function updateSiblingKeys(fromIndex, incrementBy) {
163
163
  if (!this.parent) return;
164
164
  const paths = (0, _cache.getCachedPaths)(this.hub, this.parent) || [];
165
165
  for (const [, path] of paths) {
166
- if (typeof path.key === "number" && path.key >= fromIndex) {
166
+ if (typeof path.key === "number" && path.container === this.container && path.key >= fromIndex) {
167
167
  path.key += incrementBy;
168
168
  }
169
169
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_cache","require","_hoister","_index","_context","_removal","_t","arrowFunctionExpression","assertExpression","assignmentExpression","blockStatement","callExpression","cloneNode","expressionStatement","isAssignmentExpression","isCallExpression","isExportNamedDeclaration","isExpression","isIdentifier","isSequenceExpression","isSuper","thisExpression","insertBefore","nodes_","_assertUnremoved","call","nodes","_verifyNodeList","parentPath","parent","isExpressionStatement","isLabeledStatement","isExportDefaultDeclaration","isDeclaration","isNodeType","isJSXElement","isForStatement","key","node","push","replaceExpressionWithStatements","Array","isArray","container","_containerInsertBefore","isStatementOrBlock","shouldInsertCurrentNode","expression","replaceWith","unshiftContainer","Error","_containerInsert","from","updateSiblingKeys","length","paths","splice","i","_this$context","to","path","getSibling","context","queue","pushContext","contexts","_getQueueContexts","setScope","debug","maybeQueue","_containerInsertAfter","last","arr","isHiddenInSequenceExpression","expressions","isAlmostConstantAssignment","scope","left","blockScope","getBlockParent","hasOwnBinding","name","getOwnBinding","constantViolations","insertAfter","get","map","self","isPattern","unshift","callee","isPure","isMethod","computed","temp","generateDeclaredUidIdentifier","pushContainer","fromIndex","incrementBy","getCachedPaths","hub","msg","type","NodePath","listKey","setContext","verifiedNodes","replaceWithMultiple","exports","hoist","hoister","PathHoister","run"],"sources":["../../src/path/modification.ts"],"sourcesContent":["// This file contains methods that modify the path/node in some ways.\n\nimport { getCachedPaths } from \"../cache.ts\";\nimport PathHoister from \"./lib/hoister.ts\";\nimport NodePath from \"./index.ts\";\nimport { _getQueueContexts, pushContext, setScope } from \"./context.ts\";\nimport { _assertUnremoved } from \"./removal.ts\";\nimport {\n arrowFunctionExpression,\n assertExpression,\n assignmentExpression,\n blockStatement,\n callExpression,\n cloneNode,\n expressionStatement,\n isAssignmentExpression,\n isCallExpression,\n isExportNamedDeclaration,\n isExpression,\n isIdentifier,\n isSequenceExpression,\n isSuper,\n thisExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type Scope from \"../scope/index.ts\";\n\n/**\n * Insert the provided nodes before the current one.\n */\n\nexport function insertBefore(\n this: NodePath,\n nodes_: t.Node | t.Node[],\n): NodePath[] {\n _assertUnremoved.call(this);\n\n const nodes = _verifyNodeList.call(this, nodes_);\n\n const { parentPath, parent } = this;\n\n if (\n parentPath.isExpressionStatement() ||\n parentPath.isLabeledStatement() ||\n // https://github.com/babel/babel/issues/15293\n // When Babel transforms `export class String { field }`, the class properties plugin will inject the defineProperty\n // helper, which depends on the builtins e.g. String, Number, Symbol, etc. To prevent them from being shadowed by local\n // exports, the helper injector replaces the named export into `class _String { field }; export { _String as String }`,\n // with `parentPath` here changed to the moved ClassDeclaration, causing rare inconsistency between `parent` and `parentPath`.\n // Here we retrieve the parent type from the `parent` property. This is a temporary fix and we should revisit when\n // helpers should get injected.\n isExportNamedDeclaration(parent) ||\n (parentPath.isExportDefaultDeclaration() && this.isDeclaration())\n ) {\n return parentPath.insertBefore(nodes);\n } else if (\n (this.isNodeType(\"Expression\") && !this.isJSXElement()) ||\n (parentPath.isForStatement() && this.key === \"init\")\n ) {\n if (this.node) nodes.push(this.node);\n // @ts-expect-error todo(flow->ts): check that nodes is an array of statements\n return this.replaceExpressionWithStatements(nodes);\n } else if (Array.isArray(this.container)) {\n return _containerInsertBefore.call(this, nodes);\n } else if (this.isStatementOrBlock()) {\n const node = this.node as t.Statement;\n const shouldInsertCurrentNode =\n node &&\n (!this.isExpressionStatement() ||\n (node as t.ExpressionStatement).expression != null);\n\n this.replaceWith(blockStatement(shouldInsertCurrentNode ? [node] : []));\n return (this as NodePath<t.BlockStatement>).unshiftContainer(\n \"body\",\n // @ts-expect-error Fixme: refine nodes to t.BlockStatement[\"body\"] when this is a BlockStatement path\n nodes,\n );\n } else {\n throw new Error(\n \"We don't know what to do with this node type. \" +\n \"We were previously a Statement but we can't fit in here?\",\n );\n }\n}\n\nexport function _containerInsert<N extends t.Node>(\n this: NodePath,\n from: number,\n nodes: N[],\n): NodePath<N>[] {\n updateSiblingKeys.call(this, from, nodes.length);\n\n const paths: NodePath<N>[] = [];\n\n // @ts-expect-error todo(flow->ts): this.container could be a NodePath\n this.container.splice(from, 0, ...nodes);\n for (let i = 0; i < nodes.length; i++) {\n const to = from + i;\n const path = this.getSibling(to) as NodePath<N>;\n paths.push(path);\n\n if (this.context?.queue) {\n pushContext.call(path, this.context);\n }\n }\n\n const contexts = _getQueueContexts.call(this);\n\n for (const path of paths) {\n setScope.call(path);\n path.debug(\"Inserted.\");\n\n for (const context of contexts) {\n context.maybeQueue(path, true);\n }\n }\n\n return paths;\n}\n\nexport function _containerInsertBefore<N extends t.Node>(\n this: NodePath,\n nodes: N[],\n) {\n return _containerInsert.call(this, this.key as number, nodes);\n}\n\nexport function _containerInsertAfter<N extends t.Node>(\n this: NodePath,\n nodes: N[],\n) {\n return _containerInsert.call(this, (this.key as number) + 1, nodes);\n}\n\nconst last = <T>(arr: T[]) => arr[arr.length - 1];\n\nfunction isHiddenInSequenceExpression(path: NodePath): boolean {\n return (\n isSequenceExpression(path.parent) &&\n (last(path.parent.expressions) !== path.node ||\n isHiddenInSequenceExpression(path.parentPath))\n );\n}\n\nfunction isAlmostConstantAssignment(\n node: t.Node,\n scope: Scope,\n): node is t.AssignmentExpression & { left: t.Identifier } {\n if (!isAssignmentExpression(node) || !isIdentifier(node.left)) {\n return false;\n }\n\n // Not every scope can contain variables. For example, we might be in\n // a ClassScope either in the ClassHeritage or in a computed key.\n const blockScope = scope.getBlockParent();\n\n // If the variable is defined in the current scope and only assigned here,\n // we can be sure that its value won't change.\n return (\n blockScope.hasOwnBinding(node.left.name) &&\n blockScope.getOwnBinding(node.left.name).constantViolations.length <= 1\n );\n}\n\n/**\n * Insert the provided nodes after the current one. When inserting nodes after an\n * expression, ensure that the completion record is correct by pushing the current node.\n */\n\nexport function insertAfter(\n this: NodePath,\n nodes_: t.Node | t.Node[],\n): NodePath[] {\n _assertUnremoved.call(this);\n\n if (this.isSequenceExpression()) {\n return last(this.get(\"expressions\")).insertAfter(nodes_);\n }\n\n const nodes = _verifyNodeList.call(this, nodes_);\n\n const { parentPath, parent } = this;\n if (\n parentPath.isExpressionStatement() ||\n parentPath.isLabeledStatement() ||\n // see insertBefore\n isExportNamedDeclaration(parent) ||\n (parentPath.isExportDefaultDeclaration() && this.isDeclaration())\n ) {\n return parentPath.insertAfter(\n nodes.map(node => {\n // Usually after an expression we can safely insert another expression:\n // A.insertAfter(B)\n // foo = A; -> foo = (A, B);\n // If A is an expression statement, it isn't safe anymore so we need to\n // convert B to an expression statement\n // A; -> A; B // No semicolon! It could break if followed by [!\n return isExpression(node) ? expressionStatement(node) : node;\n }),\n );\n } else if (\n (this.isNodeType(\"Expression\") &&\n !this.isJSXElement() &&\n !parentPath.isJSXElement()) ||\n (parentPath.isForStatement() && this.key === \"init\")\n ) {\n const self = this as NodePath<t.Expression | t.VariableDeclaration>;\n if (self.node) {\n const node = self.node;\n let { scope } = this;\n\n if (scope.path.isPattern()) {\n assertExpression(node);\n\n self.replaceWith(callExpression(arrowFunctionExpression([], node), []));\n (self.get(\"callee.body\") as NodePath<t.Expression>).insertAfter(nodes);\n return [self];\n }\n\n if (isHiddenInSequenceExpression(self)) {\n nodes.unshift(node);\n }\n // We need to preserve the value of this expression.\n else if (isCallExpression(node) && isSuper(node.callee)) {\n nodes.unshift(node);\n // `super(...)` always evaluates to `this`.\n nodes.push(thisExpression());\n } else if (isAlmostConstantAssignment(node, scope)) {\n nodes.unshift(node);\n nodes.push(cloneNode(node.left));\n } else if (scope.isPure(node, true)) {\n // Insert the nodes before rather than after; it's not observable.\n nodes.push(node);\n } else {\n // Inserting after the computed key of a method should insert the\n // temporary binding in the method's parent's scope.\n if (parentPath.isMethod({ computed: true, key: node })) {\n scope = scope.parent;\n }\n const temp = scope.generateDeclaredUidIdentifier();\n nodes.unshift(\n expressionStatement(\n // @ts-expect-error todo(flow->ts): This can be a variable\n // declaration in the \"init\" of a for statement, but that's\n // invalid here.\n assignmentExpression(\"=\", cloneNode(temp), node),\n ),\n );\n nodes.push(expressionStatement(cloneNode(temp)));\n }\n }\n // @ts-expect-error todo(flow->ts): check that nodes is an array of statements\n return this.replaceExpressionWithStatements(nodes);\n } else if (Array.isArray(this.container)) {\n return _containerInsertAfter.call(this, nodes);\n } else if (this.isStatementOrBlock()) {\n const node = this.node as t.Statement;\n const shouldInsertCurrentNode =\n node &&\n (!this.isExpressionStatement() ||\n (node as t.ExpressionStatement).expression != null);\n\n this.replaceWith(blockStatement(shouldInsertCurrentNode ? [node] : []));\n // @ts-expect-error Fixme: refine nodes to t.BlockStatement[\"body\"] when this is a BlockStatement path\n return this.pushContainer(\"body\", nodes);\n } else {\n throw new Error(\n \"We don't know what to do with this node type. \" +\n \"We were previously a Statement but we can't fit in here?\",\n );\n }\n}\n\n/**\n * Update all sibling node paths after `fromIndex` by `incrementBy`.\n */\n\nexport function updateSiblingKeys(\n this: NodePath,\n fromIndex: number,\n incrementBy: number,\n) {\n if (!this.parent) return;\n\n const paths = getCachedPaths(this.hub, this.parent) || ([] as never[]);\n\n for (const [, path] of paths) {\n if (typeof path.key === \"number\" && path.key >= fromIndex) {\n path.key += incrementBy;\n }\n }\n}\n\nexport function _verifyNodeList<N extends t.Node>(\n this: NodePath,\n nodes: N | N[],\n): N[] {\n if (!nodes) {\n return [];\n }\n\n if (!Array.isArray(nodes)) {\n nodes = [nodes];\n }\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n let msg;\n\n if (!node) {\n msg = \"has falsy node\";\n } else if (typeof node !== \"object\") {\n msg = \"contains a non-object node\";\n } else if (!node.type) {\n msg = \"without a type\";\n } else if (node instanceof NodePath) {\n msg = \"has a NodePath when it expected a raw object\";\n }\n\n if (msg) {\n const type = Array.isArray(node) ? \"array\" : typeof node;\n throw new Error(\n `Node list ${msg} with the index of ${i} and type of ${type}`,\n );\n }\n }\n\n return nodes;\n}\n\nexport function unshiftContainer<N extends t.Node, K extends keyof N & string>(\n this: NodePath<N>,\n listKey: K,\n nodes: N[K] extends (infer E)[]\n ? E | E[]\n : // todo: refine to t.Node[]\n // ? E extends t.Node\n // ? E | E[]\n // : never\n never,\n) {\n // todo: NodePaths<Nodes>\n _assertUnremoved.call(this);\n\n // @ts-expect-error fixme\n nodes = _verifyNodeList.call(this, nodes);\n\n // get the first path and insert our nodes before it, if it doesn't exist then it\n // doesn't matter, our nodes will be inserted anyway\n const path = NodePath.get({\n parentPath: this,\n parent: this.node,\n container: (this.node as N)[listKey] as unknown as t.Node | t.Node[],\n listKey,\n key: 0,\n }).setContext(this.context);\n\n return _containerInsertBefore.call(\n path,\n // @ts-expect-error typings needed to narrow down nodes as t.Node[]\n nodes,\n );\n}\n\nexport function pushContainer<\n P extends NodePath,\n K extends string & keyof P[\"node\"],\n>(\n this: P,\n listKey: K,\n nodes: P[\"node\"][K] extends (infer E)[]\n ? E | E[]\n : // todo: refine to t.Node[]\n // ? E extends t.Node\n // ? E | E[]\n // : never\n never,\n) {\n _assertUnremoved.call(this);\n\n const verifiedNodes = _verifyNodeList.call(\n this,\n // @ts-expect-error refine typings\n nodes,\n );\n\n // get an invisible path that represents the last node + 1 and replace it with our\n // nodes, effectively inlining it\n\n const container = (this.node as P[\"node\"])[listKey] as t.Node[];\n const path = NodePath.get({\n parentPath: this,\n parent: this.node,\n container: container as unknown as t.Node | t.Node[],\n listKey,\n key: container.length,\n }).setContext(this.context);\n\n return path.replaceWithMultiple(verifiedNodes);\n}\n\nif (!process.env.BABEL_8_BREAKING && !USE_ESM) {\n /**\n * Hoist the current node to the highest scope possible and return a UID\n * referencing it.\n */\n // eslint-disable-next-line no-restricted-globals\n exports.hoist = function hoist<T extends t.Node>(\n this: NodePath<T>,\n scope: Scope = this.scope,\n ) {\n const hoister = new PathHoister<T>(this, scope);\n return hoister.run();\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_cache","require","_hoister","_index","_context","_removal","_t","arrowFunctionExpression","assertExpression","assignmentExpression","blockStatement","callExpression","cloneNode","expressionStatement","isAssignmentExpression","isCallExpression","isExportNamedDeclaration","isExpression","isIdentifier","isSequenceExpression","isSuper","thisExpression","insertBefore","nodes_","_assertUnremoved","call","nodes","_verifyNodeList","parentPath","parent","isExpressionStatement","isLabeledStatement","isExportDefaultDeclaration","isDeclaration","isNodeType","isJSXElement","isForStatement","key","node","push","replaceExpressionWithStatements","Array","isArray","container","_containerInsertBefore","isStatementOrBlock","shouldInsertCurrentNode","expression","replaceWith","unshiftContainer","Error","_containerInsert","from","updateSiblingKeys","length","paths","splice","i","_this$context","to","path","getSibling","context","queue","pushContext","contexts","_getQueueContexts","setScope","debug","maybeQueue","_containerInsertAfter","last","arr","isHiddenInSequenceExpression","expressions","isAlmostConstantAssignment","scope","left","blockScope","getBlockParent","hasOwnBinding","name","getOwnBinding","constantViolations","insertAfter","get","map","self","isPattern","unshift","callee","isPure","isMethod","computed","temp","generateDeclaredUidIdentifier","pushContainer","fromIndex","incrementBy","getCachedPaths","hub","msg","type","NodePath","listKey","setContext","verifiedNodes","replaceWithMultiple","exports","hoist","hoister","PathHoister","run"],"sources":["../../src/path/modification.ts"],"sourcesContent":["// This file contains methods that modify the path/node in some ways.\n\nimport { getCachedPaths } from \"../cache.ts\";\nimport PathHoister from \"./lib/hoister.ts\";\nimport NodePath from \"./index.ts\";\nimport { _getQueueContexts, pushContext, setScope } from \"./context.ts\";\nimport { _assertUnremoved } from \"./removal.ts\";\nimport {\n arrowFunctionExpression,\n assertExpression,\n assignmentExpression,\n blockStatement,\n callExpression,\n cloneNode,\n expressionStatement,\n isAssignmentExpression,\n isCallExpression,\n isExportNamedDeclaration,\n isExpression,\n isIdentifier,\n isSequenceExpression,\n isSuper,\n thisExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport type Scope from \"../scope/index.ts\";\n\n/**\n * Insert the provided nodes before the current one.\n */\n\nexport function insertBefore(\n this: NodePath,\n nodes_: t.Node | t.Node[],\n): NodePath[] {\n _assertUnremoved.call(this);\n\n const nodes = _verifyNodeList.call(this, nodes_);\n\n const { parentPath, parent } = this;\n\n if (\n parentPath.isExpressionStatement() ||\n parentPath.isLabeledStatement() ||\n // https://github.com/babel/babel/issues/15293\n // When Babel transforms `export class String { field }`, the class properties plugin will inject the defineProperty\n // helper, which depends on the builtins e.g. String, Number, Symbol, etc. To prevent them from being shadowed by local\n // exports, the helper injector replaces the named export into `class _String { field }; export { _String as String }`,\n // with `parentPath` here changed to the moved ClassDeclaration, causing rare inconsistency between `parent` and `parentPath`.\n // Here we retrieve the parent type from the `parent` property. This is a temporary fix and we should revisit when\n // helpers should get injected.\n isExportNamedDeclaration(parent) ||\n (parentPath.isExportDefaultDeclaration() && this.isDeclaration())\n ) {\n return parentPath.insertBefore(nodes);\n } else if (\n (this.isNodeType(\"Expression\") && !this.isJSXElement()) ||\n (parentPath.isForStatement() && this.key === \"init\")\n ) {\n if (this.node) nodes.push(this.node);\n // @ts-expect-error todo(flow->ts): check that nodes is an array of statements\n return this.replaceExpressionWithStatements(nodes);\n } else if (Array.isArray(this.container)) {\n return _containerInsertBefore.call(this, nodes);\n } else if (this.isStatementOrBlock()) {\n const node = this.node as t.Statement;\n const shouldInsertCurrentNode =\n node &&\n (!this.isExpressionStatement() ||\n (node as t.ExpressionStatement).expression != null);\n\n this.replaceWith(blockStatement(shouldInsertCurrentNode ? [node] : []));\n return (this as NodePath<t.BlockStatement>).unshiftContainer(\n \"body\",\n // @ts-expect-error Fixme: refine nodes to t.BlockStatement[\"body\"] when this is a BlockStatement path\n nodes,\n );\n } else {\n throw new Error(\n \"We don't know what to do with this node type. \" +\n \"We were previously a Statement but we can't fit in here?\",\n );\n }\n}\n\nexport function _containerInsert<N extends t.Node>(\n this: NodePath,\n from: number,\n nodes: N[],\n): NodePath<N>[] {\n updateSiblingKeys.call(this, from, nodes.length);\n\n const paths: NodePath<N>[] = [];\n\n // @ts-expect-error todo(flow->ts): this.container could be a NodePath\n this.container.splice(from, 0, ...nodes);\n for (let i = 0; i < nodes.length; i++) {\n const to = from + i;\n const path = this.getSibling(to) as NodePath<N>;\n paths.push(path);\n\n if (this.context?.queue) {\n pushContext.call(path, this.context);\n }\n }\n\n const contexts = _getQueueContexts.call(this);\n\n for (const path of paths) {\n setScope.call(path);\n path.debug(\"Inserted.\");\n\n for (const context of contexts) {\n context.maybeQueue(path, true);\n }\n }\n\n return paths;\n}\n\nexport function _containerInsertBefore<N extends t.Node>(\n this: NodePath,\n nodes: N[],\n) {\n return _containerInsert.call(this, this.key as number, nodes);\n}\n\nexport function _containerInsertAfter<N extends t.Node>(\n this: NodePath,\n nodes: N[],\n) {\n return _containerInsert.call(this, (this.key as number) + 1, nodes);\n}\n\nconst last = <T>(arr: T[]) => arr[arr.length - 1];\n\nfunction isHiddenInSequenceExpression(path: NodePath): boolean {\n return (\n isSequenceExpression(path.parent) &&\n (last(path.parent.expressions) !== path.node ||\n isHiddenInSequenceExpression(path.parentPath))\n );\n}\n\nfunction isAlmostConstantAssignment(\n node: t.Node,\n scope: Scope,\n): node is t.AssignmentExpression & { left: t.Identifier } {\n if (!isAssignmentExpression(node) || !isIdentifier(node.left)) {\n return false;\n }\n\n // Not every scope can contain variables. For example, we might be in\n // a ClassScope either in the ClassHeritage or in a computed key.\n const blockScope = scope.getBlockParent();\n\n // If the variable is defined in the current scope and only assigned here,\n // we can be sure that its value won't change.\n return (\n blockScope.hasOwnBinding(node.left.name) &&\n blockScope.getOwnBinding(node.left.name).constantViolations.length <= 1\n );\n}\n\n/**\n * Insert the provided nodes after the current one. When inserting nodes after an\n * expression, ensure that the completion record is correct by pushing the current node.\n */\n\nexport function insertAfter(\n this: NodePath,\n nodes_: t.Node | t.Node[],\n): NodePath[] {\n _assertUnremoved.call(this);\n\n if (this.isSequenceExpression()) {\n return last(this.get(\"expressions\")).insertAfter(nodes_);\n }\n\n const nodes = _verifyNodeList.call(this, nodes_);\n\n const { parentPath, parent } = this;\n if (\n parentPath.isExpressionStatement() ||\n parentPath.isLabeledStatement() ||\n // see insertBefore\n isExportNamedDeclaration(parent) ||\n (parentPath.isExportDefaultDeclaration() && this.isDeclaration())\n ) {\n return parentPath.insertAfter(\n nodes.map(node => {\n // Usually after an expression we can safely insert another expression:\n // A.insertAfter(B)\n // foo = A; -> foo = (A, B);\n // If A is an expression statement, it isn't safe anymore so we need to\n // convert B to an expression statement\n // A; -> A; B // No semicolon! It could break if followed by [!\n return isExpression(node) ? expressionStatement(node) : node;\n }),\n );\n } else if (\n (this.isNodeType(\"Expression\") &&\n !this.isJSXElement() &&\n !parentPath.isJSXElement()) ||\n (parentPath.isForStatement() && this.key === \"init\")\n ) {\n const self = this as NodePath<t.Expression | t.VariableDeclaration>;\n if (self.node) {\n const node = self.node;\n let { scope } = this;\n\n if (scope.path.isPattern()) {\n assertExpression(node);\n\n self.replaceWith(callExpression(arrowFunctionExpression([], node), []));\n (self.get(\"callee.body\") as NodePath<t.Expression>).insertAfter(nodes);\n return [self];\n }\n\n if (isHiddenInSequenceExpression(self)) {\n nodes.unshift(node);\n }\n // We need to preserve the value of this expression.\n else if (isCallExpression(node) && isSuper(node.callee)) {\n nodes.unshift(node);\n // `super(...)` always evaluates to `this`.\n nodes.push(thisExpression());\n } else if (isAlmostConstantAssignment(node, scope)) {\n nodes.unshift(node);\n nodes.push(cloneNode(node.left));\n } else if (scope.isPure(node, true)) {\n // Insert the nodes before rather than after; it's not observable.\n nodes.push(node);\n } else {\n // Inserting after the computed key of a method should insert the\n // temporary binding in the method's parent's scope.\n if (parentPath.isMethod({ computed: true, key: node })) {\n scope = scope.parent;\n }\n const temp = scope.generateDeclaredUidIdentifier();\n nodes.unshift(\n expressionStatement(\n // @ts-expect-error todo(flow->ts): This can be a variable\n // declaration in the \"init\" of a for statement, but that's\n // invalid here.\n assignmentExpression(\"=\", cloneNode(temp), node),\n ),\n );\n nodes.push(expressionStatement(cloneNode(temp)));\n }\n }\n // @ts-expect-error todo(flow->ts): check that nodes is an array of statements\n return this.replaceExpressionWithStatements(nodes);\n } else if (Array.isArray(this.container)) {\n return _containerInsertAfter.call(this, nodes);\n } else if (this.isStatementOrBlock()) {\n const node = this.node as t.Statement;\n const shouldInsertCurrentNode =\n node &&\n (!this.isExpressionStatement() ||\n (node as t.ExpressionStatement).expression != null);\n\n this.replaceWith(blockStatement(shouldInsertCurrentNode ? [node] : []));\n // @ts-expect-error Fixme: refine nodes to t.BlockStatement[\"body\"] when this is a BlockStatement path\n return this.pushContainer(\"body\", nodes);\n } else {\n throw new Error(\n \"We don't know what to do with this node type. \" +\n \"We were previously a Statement but we can't fit in here?\",\n );\n }\n}\n\n/**\n * Update all sibling node paths after `fromIndex` by `incrementBy`.\n */\n\nexport function updateSiblingKeys(\n this: NodePath,\n fromIndex: number,\n incrementBy: number,\n) {\n if (!this.parent) return;\n\n const paths = getCachedPaths(this.hub, this.parent) || ([] as never[]);\n\n for (const [, path] of paths) {\n if (\n typeof path.key === \"number\" &&\n path.container === this.container &&\n path.key >= fromIndex\n ) {\n path.key += incrementBy;\n }\n }\n}\n\nexport function _verifyNodeList<N extends t.Node>(\n this: NodePath,\n nodes: N | N[],\n): N[] {\n if (!nodes) {\n return [];\n }\n\n if (!Array.isArray(nodes)) {\n nodes = [nodes];\n }\n\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n let msg;\n\n if (!node) {\n msg = \"has falsy node\";\n } else if (typeof node !== \"object\") {\n msg = \"contains a non-object node\";\n } else if (!node.type) {\n msg = \"without a type\";\n } else if (node instanceof NodePath) {\n msg = \"has a NodePath when it expected a raw object\";\n }\n\n if (msg) {\n const type = Array.isArray(node) ? \"array\" : typeof node;\n throw new Error(\n `Node list ${msg} with the index of ${i} and type of ${type}`,\n );\n }\n }\n\n return nodes;\n}\n\nexport function unshiftContainer<N extends t.Node, K extends keyof N & string>(\n this: NodePath<N>,\n listKey: K,\n nodes: N[K] extends (infer E)[]\n ? E | E[]\n : // todo: refine to t.Node[]\n // ? E extends t.Node\n // ? E | E[]\n // : never\n never,\n) {\n // todo: NodePaths<Nodes>\n _assertUnremoved.call(this);\n\n // @ts-expect-error fixme\n nodes = _verifyNodeList.call(this, nodes);\n\n // get the first path and insert our nodes before it, if it doesn't exist then it\n // doesn't matter, our nodes will be inserted anyway\n const path = NodePath.get({\n parentPath: this,\n parent: this.node,\n container: (this.node as N)[listKey] as unknown as t.Node | t.Node[],\n listKey,\n key: 0,\n }).setContext(this.context);\n\n return _containerInsertBefore.call(\n path,\n // @ts-expect-error typings needed to narrow down nodes as t.Node[]\n nodes,\n );\n}\n\nexport function pushContainer<\n P extends NodePath,\n K extends string & keyof P[\"node\"],\n>(\n this: P,\n listKey: K,\n nodes: P[\"node\"][K] extends (infer E)[]\n ? E | E[]\n : // todo: refine to t.Node[]\n // ? E extends t.Node\n // ? E | E[]\n // : never\n never,\n) {\n _assertUnremoved.call(this);\n\n const verifiedNodes = _verifyNodeList.call(\n this,\n // @ts-expect-error refine typings\n nodes,\n );\n\n // get an invisible path that represents the last node + 1 and replace it with our\n // nodes, effectively inlining it\n\n const container = (this.node as P[\"node\"])[listKey] as t.Node[];\n const path = NodePath.get({\n parentPath: this,\n parent: this.node,\n container: container as unknown as t.Node | t.Node[],\n listKey,\n key: container.length,\n }).setContext(this.context);\n\n return path.replaceWithMultiple(verifiedNodes);\n}\n\nif (!process.env.BABEL_8_BREAKING && !USE_ESM) {\n /**\n * Hoist the current node to the highest scope possible and return a UID\n * referencing it.\n */\n // eslint-disable-next-line no-restricted-globals\n exports.hoist = function hoist<T extends t.Node>(\n this: NodePath<T>,\n scope: Scope = this.scope,\n ) {\n const hoister = new PathHoister<T>(this, scope);\n return hoister.run();\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -290,8 +290,8 @@ class Scope {
290
290
  this.uid = void 0;
291
291
  this.path = void 0;
292
292
  this.block = void 0;
293
- this.labels = void 0;
294
293
  this.inited = void 0;
294
+ this.labels = void 0;
295
295
  this.bindings = void 0;
296
296
  this.references = void 0;
297
297
  this.globals = void 0;
@@ -325,15 +325,6 @@ class Scope {
325
325
  } while (path && !parent);
326
326
  return (_parent = parent) == null ? void 0 : _parent.scope;
327
327
  }
328
- get parentBlock() {
329
- return this.path.parent;
330
- }
331
- get hub() {
332
- return this.path.hub;
333
- }
334
- traverse(node, opts, state) {
335
- (0, _index.default)(node, opts, this, state, this.path);
336
- }
337
328
  generateDeclaredUidIdentifier(name) {
338
329
  const id = this.generateUidIdentifier(name);
339
330
  this.push({
@@ -349,7 +340,8 @@ class Scope {
349
340
  let uid;
350
341
  let i = 1;
351
342
  do {
352
- uid = this._generateUid(name, i);
343
+ uid = `_${name}`;
344
+ if (i > 1) uid += i;
353
345
  i++;
354
346
  } while (this.hasLabel(uid) || this.hasBinding(uid) || this.hasGlobal(uid) || this.hasReference(uid));
355
347
  const program = this.getProgramParent();
@@ -357,11 +349,6 @@ class Scope {
357
349
  program.uids[uid] = true;
358
350
  return uid;
359
351
  }
360
- _generateUid(name, i) {
361
- let id = name;
362
- if (i > 1) id += i;
363
- return `_${id}`;
364
- }
365
352
  generateUidBasedOnNode(node, defaultName) {
366
353
  const parts = [];
367
354
  gatherNodeParts(node, parts);
@@ -405,7 +392,7 @@ class Scope {
405
392
  if (local.kind === "local") return;
406
393
  const duplicate = kind === "let" || local.kind === "let" || local.kind === "const" || local.kind === "module" || local.kind === "param" && kind === "const";
407
394
  if (duplicate) {
408
- throw this.hub.buildError(id, `Duplicate declaration "${name}"`, TypeError);
395
+ throw this.path.hub.buildError(id, `Duplicate declaration "${name}"`, TypeError);
409
396
  }
410
397
  }
411
398
  rename(oldName, newName) {
@@ -418,12 +405,6 @@ class Scope {
418
405
  }
419
406
  }
420
407
  }
421
- _renameFromMap(map, oldName, newName, value) {
422
- if (map[oldName]) {
423
- map[newName] = value;
424
- map[oldName] = null;
425
- }
426
- }
427
408
  dump() {
428
409
  const sep = "-".repeat(60);
429
410
  console.log(sep);
@@ -442,37 +423,6 @@ class Scope {
442
423
  } while (scope = scope.parent);
443
424
  console.log(sep);
444
425
  }
445
- toArray(node, i, arrayLikeIsIterable) {
446
- if (isIdentifier(node)) {
447
- const binding = this.getBinding(node.name);
448
- if (binding != null && binding.constant && binding.path.isGenericType("Array")) {
449
- return node;
450
- }
451
- }
452
- if (isArrayExpression(node)) {
453
- return node;
454
- }
455
- if (isIdentifier(node, {
456
- name: "arguments"
457
- })) {
458
- return callExpression(memberExpression(memberExpression(memberExpression(identifier("Array"), identifier("prototype")), identifier("slice")), identifier("call")), [node]);
459
- }
460
- let helperName;
461
- const args = [node];
462
- if (i === true) {
463
- helperName = "toConsumableArray";
464
- } else if (typeof i === "number") {
465
- args.push(numericLiteral(i));
466
- helperName = "slicedToArray";
467
- } else {
468
- helperName = "toArray";
469
- }
470
- if (arrayLikeIsIterable) {
471
- args.unshift(this.hub.addHelper(helperName));
472
- helperName = "maybeArrayLike";
473
- }
474
- return callExpression(this.hub.addHelper(helperName), args);
475
- }
476
426
  hasLabel(name) {
477
427
  return !!this.getLabel(name);
478
428
  }
@@ -812,20 +762,6 @@ class Scope {
812
762
  } while (scope);
813
763
  return ids;
814
764
  }
815
- getAllBindingsOfKind(...kinds) {
816
- const ids = Object.create(null);
817
- for (const kind of kinds) {
818
- let scope = this;
819
- do {
820
- for (const name of Object.keys(scope.bindings)) {
821
- const binding = scope.bindings[name];
822
- if (binding.kind === kind) ids[name] = binding;
823
- }
824
- scope = scope.parent;
825
- } while (scope);
826
- }
827
- return ids;
828
- }
829
765
  bindingIdentifierEquals(name, node) {
830
766
  return this.getBindingIdentifier(name) === node;
831
767
  }
@@ -958,5 +894,82 @@ class Scope {
958
894
  exports.default = Scope;
959
895
  Scope.globals = Object.keys(_globals.builtin);
960
896
  Scope.contextVariables = ["arguments", "undefined", "Infinity", "NaN"];
897
+ {
898
+ Scope.prototype._renameFromMap = function _renameFromMap(map, oldName, newName, value) {
899
+ if (map[oldName]) {
900
+ map[newName] = value;
901
+ map[oldName] = null;
902
+ }
903
+ };
904
+ Scope.prototype.traverse = function (node, opts, state) {
905
+ (0, _index.default)(node, opts, this, state, this.path);
906
+ };
907
+ Scope.prototype._generateUid = function _generateUid(name, i) {
908
+ let id = name;
909
+ if (i > 1) id += i;
910
+ return `_${id}`;
911
+ };
912
+ Scope.prototype.toArray = function toArray(node, i, arrayLikeIsIterable) {
913
+ if (isIdentifier(node)) {
914
+ const binding = this.getBinding(node.name);
915
+ if (binding != null && binding.constant && binding.path.isGenericType("Array")) {
916
+ return node;
917
+ }
918
+ }
919
+ if (isArrayExpression(node)) {
920
+ return node;
921
+ }
922
+ if (isIdentifier(node, {
923
+ name: "arguments"
924
+ })) {
925
+ return callExpression(memberExpression(memberExpression(memberExpression(identifier("Array"), identifier("prototype")), identifier("slice")), identifier("call")), [node]);
926
+ }
927
+ let helperName;
928
+ const args = [node];
929
+ if (i === true) {
930
+ helperName = "toConsumableArray";
931
+ } else if (typeof i === "number") {
932
+ args.push(numericLiteral(i));
933
+ helperName = "slicedToArray";
934
+ } else {
935
+ helperName = "toArray";
936
+ }
937
+ if (arrayLikeIsIterable) {
938
+ args.unshift(this.path.hub.addHelper(helperName));
939
+ helperName = "maybeArrayLike";
940
+ }
941
+ return callExpression(this.path.hub.addHelper(helperName), args);
942
+ };
943
+ Scope.prototype.getAllBindingsOfKind = function getAllBindingsOfKind(...kinds) {
944
+ const ids = Object.create(null);
945
+ for (const kind of kinds) {
946
+ let scope = this;
947
+ do {
948
+ for (const name of Object.keys(scope.bindings)) {
949
+ const binding = scope.bindings[name];
950
+ if (binding.kind === kind) ids[name] = binding;
951
+ }
952
+ scope = scope.parent;
953
+ } while (scope);
954
+ }
955
+ return ids;
956
+ };
957
+ Object.defineProperties(Scope.prototype, {
958
+ parentBlock: {
959
+ configurable: true,
960
+ enumerable: true,
961
+ get() {
962
+ return this.path.parent;
963
+ }
964
+ },
965
+ hub: {
966
+ configurable: true,
967
+ enumerable: true,
968
+ get() {
969
+ return this.path.hub;
970
+ }
971
+ }
972
+ });
973
+ }
961
974
 
962
975
  //# sourceMappingURL=index.js.map