{"version":3,"names":["validate","debug","buildDebug","REMOVED","SHOULD_STOP","SHOULD_SKIP","NodePath","constructor","hub","parent","contexts","state","opts","_traverseFlags","skipKeys","parentPath","container","listKey","key","node","type","data","context","scope","get","Error","targetNode","paths","pathCache","Map","set","path","setup","getScope","isScope","Scope","setData","val","Object","create","getData","def","undefined","hasNode","buildCodeFrameError","msg","SyntaxError","buildError","traverse","visitor","getPathLocation","parts","inList","unshift","join","message","enabled","toString","generator","code","parentKey","shouldSkip","v","shouldStop","removed","assign","prototype","NodePath_ancestry","NodePath_inference","NodePath_replacement","NodePath_evaluation","NodePath_conversion","NodePath_introspection","NodePath_context","NodePath_removal","NodePath_modification","NodePath_family","NodePath_comments","_guessExecutionStatusRelativeToDifferentFunctions","_guessExecutionStatusRelativeTo","t","TYPES","typeKey","fn","TypeError","NodePath_virtual_types_validator","keys","virtualTypes","includes","push"],"sources":["../../src/path/index.ts"],"sourcesContent":["import type { HubInterface } from \"../hub\";\nimport type TraversalContext from \"../context\";\nimport * as virtualTypes from \"./lib/virtual-types\";\nimport buildDebug from \"debug\";\nimport traverse from \"../index\";\nimport type { Visitor } from \"../types\";\nimport Scope from \"../scope\";\nimport { validate } from \"@babel/types\";\nimport * as t from \"@babel/types\";\nimport { path as pathCache } from \"../cache\";\nimport generator from \"@babel/generator\";\n\n// NodePath is split across many files.\nimport * as NodePath_ancestry from \"./ancestry\";\nimport * as NodePath_inference from \"./inference\";\nimport * as NodePath_replacement from \"./replacement\";\nimport * as NodePath_evaluation from \"./evaluation\";\nimport * as NodePath_conversion from \"./conversion\";\nimport * as NodePath_introspection from \"./introspection\";\nimport * as NodePath_context from \"./context\";\nimport * as NodePath_removal from \"./removal\";\nimport * as NodePath_modification from \"./modification\";\nimport * as NodePath_family from \"./family\";\nimport * as NodePath_comments from \"./comments\";\nimport * as NodePath_virtual_types_validator from \"./lib/virtual-types-validator\";\nimport type { NodePathAssetions } from \"./generated/asserts\";\nimport type { NodePathValidators } from \"./generated/validators\";\n\nconst debug = buildDebug(\"babel\");\n\nexport const REMOVED = 1 << 0;\nexport const SHOULD_STOP = 1 << 1;\nexport const SHOULD_SKIP = 1 << 2;\n\nclass NodePath {\n constructor(hub: HubInterface, parent: t.ParentMaps[T[\"type\"]]) {\n this.parent = parent;\n this.hub = hub;\n this.data = null;\n\n this.context = null;\n this.scope = null;\n }\n\n declare parent: t.ParentMaps[T[\"type\"]];\n declare hub: HubInterface;\n declare data: Record;\n // TraversalContext is configured by setContext\n declare context: TraversalContext;\n declare scope: Scope;\n\n contexts: Array = [];\n state: any = null;\n opts: any = null;\n // this.shouldSkip = false; this.shouldStop = false; this.removed = false;\n _traverseFlags: number = 0;\n skipKeys: any = null;\n parentPath: t.ParentMaps[T[\"type\"]] extends null\n ? null\n : NodePath | null = null;\n container: t.Node | Array | null = null;\n listKey: string | null = null;\n key: string | number | null = null;\n node: T = null;\n type: T[\"type\"] | null = null;\n\n static get({\n hub,\n parentPath,\n parent,\n container,\n listKey,\n key,\n }: {\n hub?: HubInterface;\n parentPath: NodePath | null;\n parent: t.Node;\n container: t.Node | t.Node[];\n listKey?: string;\n key: string | number;\n }): NodePath {\n if (!hub && parentPath) {\n hub = parentPath.hub;\n }\n\n if (!parent) {\n throw new Error(\"To get a node path the parent needs to exist\");\n }\n\n const targetNode =\n // @ts-expect-error key must present in container\n container[key];\n\n let paths = pathCache.get(parent);\n if (!paths) {\n paths = new Map();\n pathCache.set(parent, paths);\n }\n\n let path = paths.get(targetNode);\n if (!path) {\n path = new NodePath(hub, parent);\n if (targetNode) paths.set(targetNode, path);\n }\n\n path.setup(parentPath, container, listKey, key);\n\n return path;\n }\n\n getScope(scope: Scope): Scope {\n return this.isScope() ? new Scope(this) : scope;\n }\n\n setData(key: string | symbol, val: any): any {\n if (this.data == null) {\n this.data = Object.create(null);\n }\n return (this.data[key] = val);\n }\n\n getData(key: string | symbol, def?: any): any {\n if (this.data == null) {\n this.data = Object.create(null);\n }\n let val = this.data[key];\n if (val === undefined && def !== undefined) val = this.data[key] = def;\n return val;\n }\n\n hasNode(): this is NodePath> {\n return this.node != null;\n }\n\n buildCodeFrameError(\n msg: string,\n Error: new () => Error = SyntaxError,\n ): Error {\n return this.hub.buildError(this.node, msg, Error);\n }\n\n traverse(visitor: Visitor, state: T): void;\n traverse(visitor: Visitor): void;\n traverse(visitor: any, state?: any) {\n traverse(this.node, visitor, this.scope, state, this);\n }\n\n set(key: string, node: any) {\n validate(this.node, key, node);\n // @ts-expect-error key must present in this.node\n this.node[key] = node;\n }\n\n getPathLocation(): string {\n const parts = [];\n let path: NodePath = this;\n do {\n let key = path.key;\n if (path.inList) key = `${path.listKey}[${key}]`;\n parts.unshift(key);\n } while ((path = path.parentPath));\n return parts.join(\".\");\n }\n\n debug(message: string) {\n if (!debug.enabled) return;\n debug(`${this.getPathLocation()} ${this.type}: ${message}`);\n }\n\n toString() {\n return generator(this.node).code;\n }\n\n get inList() {\n return !!this.listKey;\n }\n\n set inList(inList) {\n if (!inList) {\n this.listKey = null;\n }\n // ignore inList = true as it should depend on `listKey`\n }\n\n get parentKey(): string {\n return (this.listKey || this.key) as string;\n }\n\n get shouldSkip() {\n return !!(this._traverseFlags & SHOULD_SKIP);\n }\n\n set shouldSkip(v) {\n if (v) {\n this._traverseFlags |= SHOULD_SKIP;\n } else {\n this._traverseFlags &= ~SHOULD_SKIP;\n }\n }\n\n get shouldStop() {\n return !!(this._traverseFlags & SHOULD_STOP);\n }\n\n set shouldStop(v) {\n if (v) {\n this._traverseFlags |= SHOULD_STOP;\n } else {\n this._traverseFlags &= ~SHOULD_STOP;\n }\n }\n\n get removed() {\n return !!(this._traverseFlags & REMOVED);\n }\n set removed(v) {\n if (v) {\n this._traverseFlags |= REMOVED;\n } else {\n this._traverseFlags &= ~REMOVED;\n }\n }\n}\n\nObject.assign(\n NodePath.prototype,\n NodePath_ancestry,\n NodePath_inference,\n NodePath_replacement,\n NodePath_evaluation,\n NodePath_conversion,\n NodePath_introspection,\n NodePath_context,\n NodePath_removal,\n NodePath_modification,\n NodePath_family,\n NodePath_comments,\n);\n\nif (!process.env.BABEL_8_BREAKING) {\n // @ts-expect-error The original _guessExecutionStatusRelativeToDifferentFunctions only worked for paths in\n // different functions, but _guessExecutionStatusRelativeTo works as a replacement in those cases.\n NodePath.prototype._guessExecutionStatusRelativeToDifferentFunctions =\n NodePath_introspection._guessExecutionStatusRelativeTo;\n}\n\n// we can not use `import { TYPES } from \"@babel/types\"` here\n// because the transformNamedBabelTypesImportToDestructuring plugin in babel.config.js\n// does not offer live bindings for `TYPES`\n// we can change to `import { TYPES }` when we are publishing ES modules only\nfor (const type of t.TYPES) {\n const typeKey = `is${type}`;\n // @ts-expect-error typeKey must present in t\n const fn = t[typeKey];\n // @ts-expect-error augmenting NodePath prototype\n NodePath.prototype[typeKey] = function (opts: any) {\n return fn(this.node, opts);\n };\n\n // @ts-expect-error augmenting NodePath prototype\n NodePath.prototype[`assert${type}`] = function (opts: any) {\n if (!fn(this.node, opts)) {\n throw new TypeError(`Expected node path of type ${type}`);\n }\n };\n}\n\n// Register virtual types validators after base types validators\nObject.assign(NodePath.prototype, NodePath_virtual_types_validator);\n\nfor (const type of Object.keys(virtualTypes) as (keyof typeof virtualTypes)[]) {\n if (type[0] === \"_\") continue;\n if (!t.TYPES.includes(type)) t.TYPES.push(type);\n}\n\ntype NodePathMixins = typeof NodePath_ancestry &\n typeof NodePath_inference &\n typeof NodePath_replacement &\n typeof NodePath_evaluation &\n typeof NodePath_conversion &\n typeof NodePath_introspection &\n typeof NodePath_context &\n typeof NodePath_removal &\n typeof NodePath_modification &\n typeof NodePath_family &\n typeof NodePath_comments;\n\n// @ts-expect-error TS throws because ensureBlock returns the body node path\n// however, we don't use the return value and treat it as a transform and\n// assertion utilities. For better type inference we annotate it as an\n// assertion method\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface NodePath\n extends NodePathAssetions,\n NodePathValidators,\n NodePathMixins {\n /**\n * @see ./conversion.ts for implementation\n */\n ensureBlock<\n T extends\n | t.Loop\n | t.WithStatement\n | t.Function\n | t.LabeledStatement\n | t.CatchClause,\n >(\n this: NodePath,\n ): asserts this is NodePath;\n}\n\nexport default NodePath;\n"],"mappings":"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"}