@babel/traverse 7.20.5 → 7.20.8
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.
Potentially problematic release.
This version of @babel/traverse might be problematic. Click here for more details.
- package/lib/path/conversion.js.map +1 -1
- package/lib/path/index.js.map +1 -1
- package/lib/path/introspection.js +7 -2
- package/lib/path/introspection.js.map +1 -1
- package/lib/path/modification.js +9 -4
- package/lib/path/modification.js.map +1 -1
- package/lib/scope/index.js +20 -11
- package/lib/scope/index.js.map +1 -1
- package/lib/scope/lib/renamer.js +6 -8
- package/lib/scope/lib/renamer.js.map +1 -1
- package/package.json +4 -4
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["arrowFunctionExpression","assignmentExpression","binaryExpression","blockStatement","callExpression","conditionalExpression","expressionStatement","identifier","isIdentifier","jsxIdentifier","logicalExpression","LOGICAL_OPERATORS","memberExpression","metaProperty","numericLiteral","objectExpression","restElement","returnStatement","sequenceExpression","spreadElement","stringLiteral","super","_super","thisExpression","toExpression","unaryExpression","toComputedKey","key","isMemberExpression","node","property","isProperty","isMethod","ReferenceError","computed","name","ensureBlock","body","get","bodyNode","Array","isArray","Error","isBlockStatement","statements","stringPath","listKey","isStatement","push","isFunction","parentPath","setup","arrowFunctionToShadowed","isArrowFunctionExpression","arrowFunctionToExpression","unwrapFunctionEnvironment","isFunctionExpression","isFunctionDeclaration","buildCodeFrameError","hoistFunctionEnvironment","setType","path","type","allowInsertArrow","allowInsertArrowWithRest","specCompliant","noNewArrows","thisBinding","fnPath","fn","checkBinding","scope","generateUidIdentifier","id","init","unshiftContainer","hub","addHelper","replaceWith","nameFunction","getSuperCallsVisitor","mergeVisitors","CallExpression","child","allSuperCalls","isSuper","environmentVisitor","arrowParent","thisEnvFn","findParent","p","isProgram","isClassProperty","static","isClassPrivateProperty","inConstructor","isClassMethod","kind","thisPaths","argumentsPaths","newTargetPaths","superProps","superCalls","getScopeInformation","length","traverse","superBinding","getSuperBinding","forEach","superCall","callee","loc","argumentsBinding","getBinding","args","buildUndefinedNode","argumentsChild","argsRef","newTargetBinding","targetChild","targetRef","flatSuperProps","reduce","acc","superProp","concat","standardizeSuperProperty","superParentPath","isAssignment","isAssignmentExpression","left","isCall","isCallExpression","isTaggedTemplate","isTaggedTemplateExpression","tag","getSuperPropBinding","value","right","call","getThisBinding","hasSuperClass","thisChild","thisRef","isJSX","isLogicalOp","op","includes","operator","assignmentPath","slice","isLogicalAssignment","tmp","generateDeclaredUidIdentifier","object","rightExpression","isUpdateExpression","updateExpr","computedKey","parts","prefix","superClass","assignSuperThisVisitor","supers","has","add","replaceWithMultiple","WeakSet","argsBinding","propName","argsList","fnBody","method","unshift","valueIdent","cacheKey","data","getData","setData","getScopeInformationVisitor","ThisExpression","JSXIdentifier","isJSXMemberExpression","isJSXOpeningElement","MemberExpression","Identifier","isReferencedIdentifier","curr","hasOwnBinding","rename","parent","MetaProperty"],"sources":["../../src/path/conversion.ts"],"sourcesContent":["// This file contains methods that convert the path node into another node or some other type of data.\n\nimport {\n arrowFunctionExpression,\n assignmentExpression,\n binaryExpression,\n blockStatement,\n callExpression,\n conditionalExpression,\n expressionStatement,\n identifier,\n isIdentifier,\n jsxIdentifier,\n logicalExpression,\n LOGICAL_OPERATORS,\n memberExpression,\n metaProperty,\n numericLiteral,\n objectExpression,\n restElement,\n returnStatement,\n sequenceExpression,\n spreadElement,\n stringLiteral,\n super as _super,\n thisExpression,\n toExpression,\n unaryExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport environmentVisitor from \"@babel/helper-environment-visitor\";\nimport nameFunction from \"@babel/helper-function-name\";\nimport { merge as mergeVisitors } from \"../visitors\";\nimport type NodePath from \"./index\";\n\nexport function toComputedKey(this: NodePath) {\n let key;\n if (this.isMemberExpression()) {\n key = this.node.property;\n } else if (this.isProperty() || this.isMethod()) {\n key = this.node.key;\n } else {\n throw new ReferenceError(\"todo\");\n }\n\n // @ts-expect-error todo(flow->ts) computed does not exist in ClassPrivateProperty\n if (!this.node.computed) {\n if (isIdentifier(key)) key = stringLiteral(key.name);\n }\n\n return key;\n}\n\nexport function ensureBlock(\n this: NodePath<\n t.Loop | t.WithStatement | t.Function | t.LabeledStatement | t.CatchClause\n >,\n) {\n const body = this.get(\"body\");\n const bodyNode = body.node;\n\n if (Array.isArray(body)) {\n throw new Error(\"Can't convert array path to a block statement\");\n }\n if (!bodyNode) {\n throw new Error(\"Can't convert node without a body\");\n }\n\n if (body.isBlockStatement()) {\n return bodyNode;\n }\n\n const statements: Array<t.Statement> = [];\n\n let stringPath = \"body\";\n let key;\n let listKey;\n if (body.isStatement()) {\n listKey = \"body\";\n key = 0;\n statements.push(body.node);\n } else {\n stringPath += \".body.0\";\n if (this.isFunction()) {\n key = \"argument\";\n statements.push(returnStatement(body.node as t.Expression));\n } else {\n key = \"expression\";\n statements.push(expressionStatement(body.node as t.Expression));\n }\n }\n\n this.node.body = blockStatement(statements);\n const parentPath = this.get(stringPath) as NodePath;\n body.setup(\n parentPath,\n listKey\n ? // @ts-expect-error listKey must present in parent path\n parentPath.node[listKey]\n : parentPath.node,\n listKey,\n key,\n );\n\n return this.node;\n}\n\n/**\n * Keeping this for backward-compatibility. You should use arrowFunctionToExpression() for >=7.x.\n */\n// TODO(Babel 8): Remove this\nexport function arrowFunctionToShadowed(this: NodePath) {\n if (!this.isArrowFunctionExpression()) return;\n\n this.arrowFunctionToExpression();\n}\n\n/**\n * Given an arbitrary function, process its content as if it were an arrow function, moving references\n * to \"this\", \"arguments\", \"super\", and such into the function's parent scope. This method is useful if\n * you have wrapped some set of items in an IIFE or other function, but want \"this\", \"arguments\", and super\"\n * to continue behaving as expected.\n */\nexport function unwrapFunctionEnvironment(this: NodePath) {\n if (\n !this.isArrowFunctionExpression() &&\n !this.isFunctionExpression() &&\n !this.isFunctionDeclaration()\n ) {\n throw this.buildCodeFrameError(\n \"Can only unwrap the environment of a function.\",\n );\n }\n\n hoistFunctionEnvironment(this);\n}\n\nfunction setType<N extends t.Node, T extends N[\"type\"]>(\n path: NodePath<N>,\n type: T,\n): asserts path is NodePath<Extract<N, { type: T }>> {\n path.node.type = type;\n}\n\n/**\n * Convert a given arrow function into a normal ES5 function expression.\n */\nexport function arrowFunctionToExpression(\n this: NodePath<t.ArrowFunctionExpression>,\n {\n allowInsertArrow = true,\n allowInsertArrowWithRest = allowInsertArrow,\n /** @deprecated Use `noNewArrows` instead */\n specCompliant = false,\n // TODO(Babel 8): Consider defaulting to `false` for spec compliancy\n noNewArrows = !specCompliant,\n }: {\n allowInsertArrow?: boolean | void;\n allowInsertArrowWithRest?: boolean | void;\n specCompliant?: boolean | void;\n noNewArrows?: boolean;\n } = {},\n): NodePath<\n Exclude<t.Function, t.Method | t.ArrowFunctionExpression> | t.CallExpression\n> {\n if (!this.isArrowFunctionExpression()) {\n throw (this as NodePath).buildCodeFrameError(\n \"Cannot convert non-arrow function to a function expression.\",\n );\n }\n\n const { thisBinding, fnPath: fn } = hoistFunctionEnvironment(\n this,\n noNewArrows,\n allowInsertArrow,\n allowInsertArrowWithRest,\n );\n\n // @ts-expect-error TS requires explicit fn type annotation\n fn.ensureBlock();\n setType(fn, \"FunctionExpression\");\n\n if (!noNewArrows) {\n const checkBinding = thisBinding\n ? null\n : fn.scope.generateUidIdentifier(\"arrowCheckId\");\n if (checkBinding) {\n fn.parentPath.scope.push({\n id: checkBinding,\n init: objectExpression([]),\n });\n }\n\n fn.get(\"body\").unshiftContainer(\n \"body\",\n expressionStatement(\n callExpression(this.hub.addHelper(\"newArrowCheck\"), [\n thisExpression(),\n checkBinding\n ? identifier(checkBinding.name)\n : identifier(thisBinding),\n ]),\n ),\n );\n\n fn.replaceWith(\n callExpression(\n memberExpression(\n // @ts-expect-error TS can't infer nameFunction returns CallExpression | ArrowFunctionExpression here\n nameFunction(this, true) || fn.node,\n identifier(\"bind\"),\n ),\n [checkBinding ? identifier(checkBinding.name) : thisExpression()],\n ),\n );\n\n return fn.get(\"callee.object\");\n }\n\n return fn;\n}\n\nconst getSuperCallsVisitor = mergeVisitors<{\n allSuperCalls: NodePath<t.CallExpression>[];\n}>([\n {\n CallExpression(child, { allSuperCalls }) {\n if (!child.get(\"callee\").isSuper()) return;\n allSuperCalls.push(child);\n },\n },\n environmentVisitor,\n]);\n\n/**\n * Given a function, traverse its contents, and if there are references to \"this\", \"arguments\", \"super\",\n * or \"new.target\", ensure that these references reference the parent environment around this function.\n *\n * @returns `thisBinding`: the name of the injected reference to `this`; for example \"_this\"\n * @returns `fnPath`: the new path to the function node. This is different from the fnPath\n * parameter when the function node is wrapped in another node.\n */\nfunction hoistFunctionEnvironment(\n fnPath: NodePath<t.Function>,\n // TODO(Babel 8): Consider defaulting to `false` for spec compliancy\n noNewArrows: boolean | void = true,\n allowInsertArrow: boolean | void = true,\n allowInsertArrowWithRest: boolean | void = true,\n): { thisBinding: string; fnPath: NodePath<t.Function> } {\n let arrowParent;\n let thisEnvFn: NodePath<t.Function> = fnPath.findParent(p => {\n if (p.isArrowFunctionExpression()) {\n arrowParent ??= p;\n return false;\n }\n return (\n p.isFunction() ||\n p.isProgram() ||\n p.isClassProperty({ static: false }) ||\n p.isClassPrivateProperty({ static: false })\n );\n }) as NodePath<t.Function>;\n const inConstructor = thisEnvFn.isClassMethod({ kind: \"constructor\" });\n\n if (thisEnvFn.isClassProperty() || thisEnvFn.isClassPrivateProperty()) {\n if (arrowParent) {\n thisEnvFn = arrowParent;\n } else if (allowInsertArrow) {\n // It's safe to wrap this function in another and not hoist to the\n // top level because the 'this' binding is constant in class\n // properties (since 'super()' has already been called), so we don't\n // need to capture/reassign it at the top level.\n fnPath.replaceWith(\n callExpression(\n arrowFunctionExpression([], toExpression(fnPath.node)),\n [],\n ),\n );\n thisEnvFn = fnPath.get(\"callee\") as NodePath<t.ArrowFunctionExpression>;\n fnPath = thisEnvFn.get(\"body\") as NodePath<t.FunctionExpression>;\n } else {\n throw fnPath.buildCodeFrameError(\n \"Unable to transform arrow inside class property\",\n );\n }\n }\n\n const { thisPaths, argumentsPaths, newTargetPaths, superProps, superCalls } =\n getScopeInformation(fnPath);\n\n // Convert all super() calls in the constructor, if super is used in an arrow.\n if (inConstructor && superCalls.length > 0) {\n if (!allowInsertArrow) {\n throw superCalls[0].buildCodeFrameError(\n \"When using '@babel/plugin-transform-arrow-functions', \" +\n \"it's not possible to compile `super()` in an arrow function without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n if (!allowInsertArrowWithRest) {\n // preset-env with target `since 2017` enables `transform-parameters` without `transform-classes`.\n throw superCalls[0].buildCodeFrameError(\n \"When using '@babel/plugin-transform-parameters', \" +\n \"it's not possible to compile `super()` in an arrow function with default or rest parameters without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n const allSuperCalls: NodePath<t.CallExpression>[] = [];\n thisEnvFn.traverse(getSuperCallsVisitor, { allSuperCalls });\n const superBinding = getSuperBinding(thisEnvFn);\n allSuperCalls.forEach(superCall => {\n const callee = identifier(superBinding);\n callee.loc = superCall.node.callee.loc;\n\n superCall.get(\"callee\").replaceWith(callee);\n });\n }\n\n // Convert all \"arguments\" references in the arrow to point at the alias.\n if (argumentsPaths.length > 0) {\n const argumentsBinding = getBinding(thisEnvFn, \"arguments\", () => {\n const args = () => identifier(\"arguments\");\n if (thisEnvFn.scope.path.isProgram()) {\n return conditionalExpression(\n binaryExpression(\n \"===\",\n unaryExpression(\"typeof\", args()),\n stringLiteral(\"undefined\"),\n ),\n thisEnvFn.scope.buildUndefinedNode(),\n args(),\n );\n } else {\n return args();\n }\n });\n\n argumentsPaths.forEach(argumentsChild => {\n const argsRef = identifier(argumentsBinding);\n argsRef.loc = argumentsChild.node.loc;\n\n argumentsChild.replaceWith(argsRef);\n });\n }\n\n // Convert all \"new.target\" references in the arrow to point at the alias.\n if (newTargetPaths.length > 0) {\n const newTargetBinding = getBinding(thisEnvFn, \"newtarget\", () =>\n metaProperty(identifier(\"new\"), identifier(\"target\")),\n );\n\n newTargetPaths.forEach(targetChild => {\n const targetRef = identifier(newTargetBinding);\n targetRef.loc = targetChild.node.loc;\n\n targetChild.replaceWith(targetRef);\n });\n }\n\n // Convert all \"super.prop\" references to point at aliases.\n if (superProps.length > 0) {\n if (!allowInsertArrow) {\n throw superProps[0].buildCodeFrameError(\n \"When using '@babel/plugin-transform-arrow-functions', \" +\n \"it's not possible to compile `super.prop` in an arrow function without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n\n const flatSuperProps: NodePath<t.MemberExpression>[] = superProps.reduce(\n (acc, superProp) => acc.concat(standardizeSuperProperty(superProp)),\n [],\n );\n\n flatSuperProps.forEach(superProp => {\n const key = superProp.node.computed\n ? \"\"\n : // @ts-expect-error super property must not contain private name\n superProp.get(\"property\").node.name;\n\n const superParentPath = superProp.parentPath;\n\n const isAssignment = superParentPath.isAssignmentExpression({\n left: superProp.node,\n });\n const isCall = superParentPath.isCallExpression({\n callee: superProp.node,\n });\n const isTaggedTemplate = superParentPath.isTaggedTemplateExpression({\n tag: superProp.node,\n });\n const superBinding = getSuperPropBinding(thisEnvFn, isAssignment, key);\n\n const args: t.Expression[] = [];\n if (superProp.node.computed) {\n // SuperProperty must not be a private name\n args.push(superProp.get(\"property\").node as t.Expression);\n }\n\n if (isAssignment) {\n const value = superParentPath.node.right;\n args.push(value);\n }\n\n const call = callExpression(identifier(superBinding), args);\n\n if (isCall) {\n superParentPath.unshiftContainer(\"arguments\", thisExpression());\n superProp.replaceWith(memberExpression(call, identifier(\"call\")));\n\n thisPaths.push(\n superParentPath.get(\"arguments.0\") as NodePath<t.ThisExpression>,\n );\n } else if (isAssignment) {\n // Replace not only the super.prop, but the whole assignment\n superParentPath.replaceWith(call);\n } else if (isTaggedTemplate) {\n superProp.replaceWith(\n callExpression(memberExpression(call, identifier(\"bind\"), false), [\n thisExpression(),\n ]),\n );\n\n thisPaths.push(\n superProp.get(\"arguments.0\") as NodePath<t.ThisExpression>,\n );\n } else {\n superProp.replaceWith(call);\n }\n });\n }\n\n // Convert all \"this\" references in the arrow to point at the alias.\n let thisBinding: string | null;\n if (thisPaths.length > 0 || !noNewArrows) {\n thisBinding = getThisBinding(thisEnvFn, inConstructor);\n\n if (\n noNewArrows ||\n // In subclass constructors, still need to rewrite because \"this\" can't be bound in spec mode\n // because it might not have been initialized yet.\n (inConstructor && hasSuperClass(thisEnvFn))\n ) {\n thisPaths.forEach(thisChild => {\n const thisRef = thisChild.isJSX()\n ? jsxIdentifier(thisBinding)\n : identifier(thisBinding);\n\n thisRef.loc = thisChild.node.loc;\n thisChild.replaceWith(thisRef);\n });\n\n if (!noNewArrows) thisBinding = null;\n }\n }\n\n return { thisBinding, fnPath };\n}\n\ntype LogicalOp = Parameters<typeof logicalExpression>[0];\ntype BinaryOp = Parameters<typeof binaryExpression>[0];\n\nfunction isLogicalOp(op: string): op is LogicalOp {\n return LOGICAL_OPERATORS.includes(op);\n}\n\nfunction standardizeSuperProperty(\n superProp: NodePath<t.MemberExpression>,\n):\n | [NodePath<t.MemberExpression>]\n | [NodePath<t.MemberExpression>, NodePath<t.MemberExpression>] {\n if (\n superProp.parentPath.isAssignmentExpression() &&\n superProp.parentPath.node.operator !== \"=\"\n ) {\n const assignmentPath = superProp.parentPath;\n\n const op = assignmentPath.node.operator.slice(0, -1) as\n | LogicalOp\n | BinaryOp;\n\n const value = assignmentPath.node.right;\n\n const isLogicalAssignment = isLogicalOp(op);\n\n if (superProp.node.computed) {\n // from: super[foo] **= 4;\n // to: super[tmp = foo] = super[tmp] ** 4;\n\n // from: super[foo] ??= 4;\n // to: super[tmp = foo] ?? super[tmp] = 4;\n\n const tmp = superProp.scope.generateDeclaredUidIdentifier(\"tmp\");\n\n const object = superProp.node.object;\n const property = superProp.node.property as t.Expression;\n\n assignmentPath\n .get(\"left\")\n .replaceWith(\n memberExpression(\n object,\n assignmentExpression(\"=\", tmp, property),\n true /* computed */,\n ),\n );\n\n assignmentPath\n .get(\"right\")\n .replaceWith(\n rightExpression(\n isLogicalAssignment ? \"=\" : op,\n memberExpression(object, identifier(tmp.name), true /* computed */),\n value,\n ),\n );\n } else {\n // from: super.foo **= 4;\n // to: super.foo = super.foo ** 4;\n\n // from: super.foo ??= 4;\n // to: super.foo ?? super.foo = 4;\n\n const object = superProp.node.object;\n const property = superProp.node.property as t.Identifier;\n\n assignmentPath\n .get(\"left\")\n .replaceWith(memberExpression(object, property));\n\n assignmentPath\n .get(\"right\")\n .replaceWith(\n rightExpression(\n isLogicalAssignment ? \"=\" : op,\n memberExpression(object, identifier(property.name)),\n value,\n ),\n );\n }\n\n if (isLogicalAssignment) {\n assignmentPath.replaceWith(\n logicalExpression(\n op,\n assignmentPath.node.left as t.MemberExpression,\n assignmentPath.node.right as t.Expression,\n ),\n );\n } else {\n assignmentPath.node.operator = \"=\";\n }\n\n return [\n assignmentPath.get(\"left\") as NodePath<t.MemberExpression>,\n assignmentPath.get(\"right\").get(\"left\"),\n ];\n } else if (superProp.parentPath.isUpdateExpression()) {\n const updateExpr = superProp.parentPath;\n\n const tmp = superProp.scope.generateDeclaredUidIdentifier(\"tmp\");\n const computedKey = superProp.node.computed\n ? superProp.scope.generateDeclaredUidIdentifier(\"prop\")\n : null;\n\n const parts: t.Expression[] = [\n assignmentExpression(\n \"=\",\n tmp,\n memberExpression(\n superProp.node.object,\n computedKey\n ? assignmentExpression(\n \"=\",\n computedKey,\n superProp.node.property as t.Expression,\n )\n : superProp.node.property,\n superProp.node.computed,\n ),\n ),\n assignmentExpression(\n \"=\",\n memberExpression(\n superProp.node.object,\n computedKey ? identifier(computedKey.name) : superProp.node.property,\n superProp.node.computed,\n ),\n binaryExpression(\n // map `++` to `+`, and `--` to `-`\n superProp.parentPath.node.operator[0] as \"+\" | \"-\",\n identifier(tmp.name),\n numericLiteral(1),\n ),\n ),\n ];\n\n if (!superProp.parentPath.node.prefix) {\n parts.push(identifier(tmp.name));\n }\n\n updateExpr.replaceWith(sequenceExpression(parts));\n\n const left = updateExpr.get(\n \"expressions.0.right\",\n ) as NodePath<t.MemberExpression>;\n const right = updateExpr.get(\n \"expressions.1.left\",\n ) as NodePath<t.MemberExpression>;\n return [left, right];\n }\n\n return [superProp];\n\n function rightExpression(\n op: BinaryOp | \"=\",\n left: t.MemberExpression,\n right: t.Expression,\n ) {\n if (op === \"=\") {\n return assignmentExpression(\"=\", left, right);\n } else {\n return binaryExpression(op, left, right);\n }\n }\n}\n\nfunction hasSuperClass(thisEnvFn: NodePath<t.Function>) {\n return (\n thisEnvFn.isClassMethod() &&\n !!(thisEnvFn.parentPath.parentPath.node as t.Class).superClass\n );\n}\n\nconst assignSuperThisVisitor = mergeVisitors<{\n supers: WeakSet<t.CallExpression>;\n thisBinding: string;\n}>([\n {\n CallExpression(child, { supers, thisBinding }) {\n if (!child.get(\"callee\").isSuper()) return;\n if (supers.has(child.node)) return;\n supers.add(child.node);\n\n child.replaceWithMultiple([\n child.node,\n assignmentExpression(\"=\", identifier(thisBinding), identifier(\"this\")),\n ]);\n },\n },\n environmentVisitor,\n]);\n\n// Create a binding that evaluates to the \"this\" of the given function.\nfunction getThisBinding(\n thisEnvFn: NodePath<t.Function>,\n inConstructor: boolean,\n) {\n return getBinding(thisEnvFn, \"this\", thisBinding => {\n if (!inConstructor || !hasSuperClass(thisEnvFn)) return thisExpression();\n\n thisEnvFn.traverse(assignSuperThisVisitor, {\n supers: new WeakSet(),\n thisBinding,\n });\n });\n}\n\n// Create a binding for a function that will call \"super()\" with arguments passed through.\nfunction getSuperBinding(thisEnvFn: NodePath<t.Function>) {\n return getBinding(thisEnvFn, \"supercall\", () => {\n const argsBinding = thisEnvFn.scope.generateUidIdentifier(\"args\");\n return arrowFunctionExpression(\n [restElement(argsBinding)],\n callExpression(_super(), [spreadElement(identifier(argsBinding.name))]),\n );\n });\n}\n\n// Create a binding for a function that will call \"super.foo\" or \"super[foo]\".\nfunction getSuperPropBinding(\n thisEnvFn: NodePath<t.Function>,\n isAssignment: boolean,\n propName: string,\n) {\n const op = isAssignment ? \"set\" : \"get\";\n\n return getBinding(thisEnvFn, `superprop_${op}:${propName || \"\"}`, () => {\n const argsList = [];\n\n let fnBody;\n if (propName) {\n // () => super.foo\n fnBody = memberExpression(_super(), identifier(propName));\n } else {\n const method = thisEnvFn.scope.generateUidIdentifier(\"prop\");\n // (method) => super[method]\n argsList.unshift(method);\n fnBody = memberExpression(\n _super(),\n identifier(method.name),\n true /* computed */,\n );\n }\n\n if (isAssignment) {\n const valueIdent = thisEnvFn.scope.generateUidIdentifier(\"value\");\n argsList.push(valueIdent);\n\n fnBody = assignmentExpression(\"=\", fnBody, identifier(valueIdent.name));\n }\n\n return arrowFunctionExpression(argsList, fnBody);\n });\n}\n\nfunction getBinding(\n thisEnvFn: NodePath,\n key: string,\n init: (name: string) => t.Expression,\n) {\n const cacheKey = \"binding:\" + key;\n let data: string | undefined = thisEnvFn.getData(cacheKey);\n if (!data) {\n const id = thisEnvFn.scope.generateUidIdentifier(key);\n data = id.name;\n thisEnvFn.setData(cacheKey, data);\n\n thisEnvFn.scope.push({\n id: id,\n init: init(data),\n });\n }\n\n return data;\n}\n\ntype ScopeInfo = {\n thisPaths: NodePath<t.ThisExpression | t.JSXIdentifier>[];\n superCalls: NodePath<t.CallExpression>[];\n superProps: NodePath<t.MemberExpression>[];\n argumentsPaths: NodePath<t.Identifier | t.JSXIdentifier>[];\n newTargetPaths: NodePath<t.MetaProperty>[];\n};\n\nconst getScopeInformationVisitor = mergeVisitors<ScopeInfo>([\n {\n ThisExpression(child, { thisPaths }) {\n thisPaths.push(child);\n },\n JSXIdentifier(child, { thisPaths }) {\n if (child.node.name !== \"this\") return;\n if (\n !child.parentPath.isJSXMemberExpression({ object: child.node }) &&\n !child.parentPath.isJSXOpeningElement({ name: child.node })\n ) {\n return;\n }\n\n thisPaths.push(child);\n },\n CallExpression(child, { superCalls }) {\n if (child.get(\"callee\").isSuper()) superCalls.push(child);\n },\n MemberExpression(child, { superProps }) {\n if (child.get(\"object\").isSuper()) superProps.push(child);\n },\n Identifier(child, { argumentsPaths }) {\n if (!child.isReferencedIdentifier({ name: \"arguments\" })) return;\n\n let curr = child.scope;\n do {\n if (curr.hasOwnBinding(\"arguments\")) {\n curr.rename(\"arguments\");\n return;\n }\n if (curr.path.isFunction() && !curr.path.isArrowFunctionExpression()) {\n break;\n }\n } while ((curr = curr.parent));\n\n argumentsPaths.push(child);\n },\n MetaProperty(child, { newTargetPaths }) {\n if (!child.get(\"meta\").isIdentifier({ name: \"new\" })) return;\n if (!child.get(\"property\").isIdentifier({ name: \"target\" })) return;\n\n newTargetPaths.push(child);\n },\n },\n environmentVisitor,\n]);\n\nfunction getScopeInformation(fnPath: NodePath) {\n const thisPaths: ScopeInfo[\"thisPaths\"] = [];\n const argumentsPaths: ScopeInfo[\"argumentsPaths\"] = [];\n const newTargetPaths: ScopeInfo[\"newTargetPaths\"] = [];\n const superProps: ScopeInfo[\"superProps\"] = [];\n const superCalls: ScopeInfo[\"superCalls\"] = [];\n\n fnPath.traverse(getScopeInformationVisitor, {\n thisPaths,\n argumentsPaths,\n newTargetPaths,\n superProps,\n superCalls,\n });\n\n return {\n thisPaths,\n argumentsPaths,\n newTargetPaths,\n superProps,\n superCalls,\n };\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["arrowFunctionExpression","assignmentExpression","binaryExpression","blockStatement","callExpression","conditionalExpression","expressionStatement","identifier","isIdentifier","jsxIdentifier","logicalExpression","LOGICAL_OPERATORS","memberExpression","metaProperty","numericLiteral","objectExpression","restElement","returnStatement","sequenceExpression","spreadElement","stringLiteral","super","_super","thisExpression","toExpression","unaryExpression","toComputedKey","key","isMemberExpression","node","property","isProperty","isMethod","ReferenceError","computed","name","ensureBlock","body","get","bodyNode","Array","isArray","Error","isBlockStatement","statements","stringPath","listKey","isStatement","push","isFunction","parentPath","setup","arrowFunctionToShadowed","isArrowFunctionExpression","arrowFunctionToExpression","unwrapFunctionEnvironment","isFunctionExpression","isFunctionDeclaration","buildCodeFrameError","hoistFunctionEnvironment","setType","path","type","allowInsertArrow","allowInsertArrowWithRest","specCompliant","noNewArrows","thisBinding","fnPath","fn","checkBinding","scope","generateUidIdentifier","id","init","unshiftContainer","hub","addHelper","replaceWith","nameFunction","getSuperCallsVisitor","mergeVisitors","CallExpression","child","allSuperCalls","isSuper","environmentVisitor","arrowParent","thisEnvFn","findParent","p","isProgram","isClassProperty","static","isClassPrivateProperty","inConstructor","isClassMethod","kind","thisPaths","argumentsPaths","newTargetPaths","superProps","superCalls","getScopeInformation","length","traverse","superBinding","getSuperBinding","forEach","superCall","callee","loc","argumentsBinding","getBinding","args","buildUndefinedNode","argumentsChild","argsRef","newTargetBinding","targetChild","targetRef","flatSuperProps","reduce","acc","superProp","concat","standardizeSuperProperty","superParentPath","isAssignment","isAssignmentExpression","left","isCall","isCallExpression","isTaggedTemplate","isTaggedTemplateExpression","tag","getSuperPropBinding","value","right","call","getThisBinding","hasSuperClass","thisChild","thisRef","isJSX","isLogicalOp","op","includes","operator","assignmentPath","slice","isLogicalAssignment","tmp","generateDeclaredUidIdentifier","object","rightExpression","isUpdateExpression","updateExpr","computedKey","parts","prefix","superClass","assignSuperThisVisitor","supers","has","add","replaceWithMultiple","WeakSet","argsBinding","propName","argsList","fnBody","method","unshift","valueIdent","cacheKey","data","getData","setData","getScopeInformationVisitor","ThisExpression","JSXIdentifier","isJSXMemberExpression","isJSXOpeningElement","MemberExpression","Identifier","isReferencedIdentifier","curr","hasOwnBinding","rename","parent","MetaProperty"],"sources":["../../src/path/conversion.ts"],"sourcesContent":["// This file contains methods that convert the path node into another node or some other type of data.\n\nimport {\n arrowFunctionExpression,\n assignmentExpression,\n binaryExpression,\n blockStatement,\n callExpression,\n conditionalExpression,\n expressionStatement,\n identifier,\n isIdentifier,\n jsxIdentifier,\n logicalExpression,\n LOGICAL_OPERATORS,\n memberExpression,\n metaProperty,\n numericLiteral,\n objectExpression,\n restElement,\n returnStatement,\n sequenceExpression,\n spreadElement,\n stringLiteral,\n super as _super,\n thisExpression,\n toExpression,\n unaryExpression,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport environmentVisitor from \"@babel/helper-environment-visitor\";\nimport nameFunction from \"@babel/helper-function-name\";\nimport { merge as mergeVisitors } from \"../visitors\";\nimport type NodePath from \"./index\";\n\nexport function toComputedKey(this: NodePath) {\n let key;\n if (this.isMemberExpression()) {\n key = this.node.property;\n } else if (this.isProperty() || this.isMethod()) {\n key = this.node.key;\n } else {\n throw new ReferenceError(\"todo\");\n }\n\n // @ts-expect-error todo(flow->ts) computed does not exist in ClassPrivateProperty\n if (!this.node.computed) {\n if (isIdentifier(key)) key = stringLiteral(key.name);\n }\n\n return key;\n}\n\nexport function ensureBlock(\n this: NodePath<\n t.Loop | t.WithStatement | t.Function | t.LabeledStatement | t.CatchClause\n >,\n) {\n const body = this.get(\"body\");\n const bodyNode = body.node;\n\n if (Array.isArray(body)) {\n throw new Error(\"Can't convert array path to a block statement\");\n }\n if (!bodyNode) {\n throw new Error(\"Can't convert node without a body\");\n }\n\n if (body.isBlockStatement()) {\n return bodyNode;\n }\n\n const statements: Array<t.Statement> = [];\n\n let stringPath = \"body\";\n let key;\n let listKey;\n if (body.isStatement()) {\n listKey = \"body\";\n key = 0;\n statements.push(body.node);\n } else {\n stringPath += \".body.0\";\n if (this.isFunction()) {\n key = \"argument\";\n statements.push(returnStatement(body.node as t.Expression));\n } else {\n key = \"expression\";\n statements.push(expressionStatement(body.node as t.Expression));\n }\n }\n\n this.node.body = blockStatement(statements);\n const parentPath = this.get(stringPath) as NodePath;\n body.setup(\n parentPath,\n listKey\n ? // @ts-expect-error listKey must present in parent path\n parentPath.node[listKey]\n : parentPath.node,\n listKey,\n key,\n );\n\n return this.node;\n}\n\n/**\n * Keeping this for backward-compatibility. You should use arrowFunctionToExpression() for >=7.x.\n */\n// TODO(Babel 8): Remove this\nexport function arrowFunctionToShadowed(this: NodePath) {\n if (!this.isArrowFunctionExpression()) return;\n\n this.arrowFunctionToExpression();\n}\n\n/**\n * Given an arbitrary function, process its content as if it were an arrow function, moving references\n * to \"this\", \"arguments\", \"super\", and such into the function's parent scope. This method is useful if\n * you have wrapped some set of items in an IIFE or other function, but want \"this\", \"arguments\", and super\"\n * to continue behaving as expected.\n */\nexport function unwrapFunctionEnvironment(this: NodePath) {\n if (\n !this.isArrowFunctionExpression() &&\n !this.isFunctionExpression() &&\n !this.isFunctionDeclaration()\n ) {\n throw this.buildCodeFrameError(\n \"Can only unwrap the environment of a function.\",\n );\n }\n\n hoistFunctionEnvironment(this);\n}\n\nfunction setType<N extends t.Node, T extends N[\"type\"]>(\n path: NodePath<N>,\n type: T,\n): asserts path is NodePath<Extract<N, { type: T }>> {\n path.node.type = type;\n}\n\n/**\n * Convert a given arrow function into a normal ES5 function expression.\n */\nexport function arrowFunctionToExpression(\n this: NodePath<t.ArrowFunctionExpression>,\n {\n allowInsertArrow = true,\n allowInsertArrowWithRest = allowInsertArrow,\n /** @deprecated Use `noNewArrows` instead */\n specCompliant = false,\n // TODO(Babel 8): Consider defaulting to `false` for spec compliancy\n noNewArrows = !specCompliant,\n }: {\n allowInsertArrow?: boolean | void;\n allowInsertArrowWithRest?: boolean | void;\n specCompliant?: boolean | void;\n noNewArrows?: boolean;\n } = {},\n): NodePath<\n Exclude<t.Function, t.Method | t.ArrowFunctionExpression> | t.CallExpression\n> {\n if (!this.isArrowFunctionExpression()) {\n throw (this as NodePath).buildCodeFrameError(\n \"Cannot convert non-arrow function to a function expression.\",\n );\n }\n\n const { thisBinding, fnPath: fn } = hoistFunctionEnvironment(\n this,\n noNewArrows,\n allowInsertArrow,\n allowInsertArrowWithRest,\n );\n\n // @ts-expect-error TS requires explicit fn type annotation\n fn.ensureBlock();\n setType(fn, \"FunctionExpression\");\n\n if (!noNewArrows) {\n const checkBinding = thisBinding\n ? null\n : fn.scope.generateUidIdentifier(\"arrowCheckId\");\n if (checkBinding) {\n fn.parentPath.scope.push({\n id: checkBinding,\n init: objectExpression([]),\n });\n }\n\n fn.get(\"body\").unshiftContainer(\n \"body\",\n expressionStatement(\n callExpression(this.hub.addHelper(\"newArrowCheck\"), [\n thisExpression(),\n checkBinding\n ? identifier(checkBinding.name)\n : identifier(thisBinding),\n ]),\n ),\n );\n\n fn.replaceWith(\n callExpression(\n memberExpression(\n // @ts-expect-error TS can't infer nameFunction returns CallExpression | ArrowFunctionExpression here\n nameFunction(this, true) || fn.node,\n identifier(\"bind\"),\n ),\n [checkBinding ? identifier(checkBinding.name) : thisExpression()],\n ),\n );\n\n return fn.get(\"callee.object\");\n }\n\n return fn;\n}\n\nconst getSuperCallsVisitor = mergeVisitors<{\n allSuperCalls: NodePath<t.CallExpression>[];\n}>([\n {\n CallExpression(child, { allSuperCalls }) {\n if (!child.get(\"callee\").isSuper()) return;\n allSuperCalls.push(child);\n },\n },\n environmentVisitor,\n]);\n\n/**\n * Given a function, traverse its contents, and if there are references to \"this\", \"arguments\", \"super\",\n * or \"new.target\", ensure that these references reference the parent environment around this function.\n *\n * @returns `thisBinding`: the name of the injected reference to `this`; for example \"_this\"\n * @returns `fnPath`: the new path to the function node. This is different from the fnPath\n * parameter when the function node is wrapped in another node.\n */\nfunction hoistFunctionEnvironment(\n fnPath: NodePath<t.Function>,\n // TODO(Babel 8): Consider defaulting to `false` for spec compliancy\n noNewArrows: boolean | void = true,\n allowInsertArrow: boolean | void = true,\n allowInsertArrowWithRest: boolean | void = true,\n): { thisBinding: string; fnPath: NodePath<t.Function> } {\n let arrowParent;\n let thisEnvFn: NodePath<t.Function> = fnPath.findParent(p => {\n if (p.isArrowFunctionExpression()) {\n arrowParent ??= p;\n return false;\n }\n return (\n p.isFunction() ||\n p.isProgram() ||\n p.isClassProperty({ static: false }) ||\n p.isClassPrivateProperty({ static: false })\n );\n }) as NodePath<t.Function>;\n const inConstructor = thisEnvFn.isClassMethod({ kind: \"constructor\" });\n\n if (thisEnvFn.isClassProperty() || thisEnvFn.isClassPrivateProperty()) {\n if (arrowParent) {\n thisEnvFn = arrowParent;\n } else if (allowInsertArrow) {\n // It's safe to wrap this function in another and not hoist to the\n // top level because the 'this' binding is constant in class\n // properties (since 'super()' has already been called), so we don't\n // need to capture/reassign it at the top level.\n fnPath.replaceWith(\n callExpression(\n arrowFunctionExpression([], toExpression(fnPath.node)),\n [],\n ),\n );\n thisEnvFn = fnPath.get(\"callee\") as NodePath<t.ArrowFunctionExpression>;\n fnPath = thisEnvFn.get(\"body\") as NodePath<t.FunctionExpression>;\n } else {\n throw fnPath.buildCodeFrameError(\n \"Unable to transform arrow inside class property\",\n );\n }\n }\n\n const { thisPaths, argumentsPaths, newTargetPaths, superProps, superCalls } =\n getScopeInformation(fnPath);\n\n // Convert all super() calls in the constructor, if super is used in an arrow.\n if (inConstructor && superCalls.length > 0) {\n if (!allowInsertArrow) {\n throw superCalls[0].buildCodeFrameError(\n \"When using '@babel/plugin-transform-arrow-functions', \" +\n \"it's not possible to compile `super()` in an arrow function without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n if (!allowInsertArrowWithRest) {\n // preset-env with target `since 2017` enables `transform-parameters` without `transform-classes`.\n throw superCalls[0].buildCodeFrameError(\n \"When using '@babel/plugin-transform-parameters', \" +\n \"it's not possible to compile `super()` in an arrow function with default or rest parameters without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n const allSuperCalls: NodePath<t.CallExpression>[] = [];\n thisEnvFn.traverse(getSuperCallsVisitor, { allSuperCalls });\n const superBinding = getSuperBinding(thisEnvFn);\n allSuperCalls.forEach(superCall => {\n const callee = identifier(superBinding);\n callee.loc = superCall.node.callee.loc;\n\n superCall.get(\"callee\").replaceWith(callee);\n });\n }\n\n // Convert all \"arguments\" references in the arrow to point at the alias.\n if (argumentsPaths.length > 0) {\n const argumentsBinding = getBinding(thisEnvFn, \"arguments\", () => {\n const args = () => identifier(\"arguments\");\n if (thisEnvFn.scope.path.isProgram()) {\n return conditionalExpression(\n binaryExpression(\n \"===\",\n unaryExpression(\"typeof\", args()),\n stringLiteral(\"undefined\"),\n ),\n thisEnvFn.scope.buildUndefinedNode(),\n args(),\n );\n } else {\n return args();\n }\n });\n\n argumentsPaths.forEach(argumentsChild => {\n const argsRef = identifier(argumentsBinding);\n argsRef.loc = argumentsChild.node.loc;\n\n argumentsChild.replaceWith(argsRef);\n });\n }\n\n // Convert all \"new.target\" references in the arrow to point at the alias.\n if (newTargetPaths.length > 0) {\n const newTargetBinding = getBinding(thisEnvFn, \"newtarget\", () =>\n metaProperty(identifier(\"new\"), identifier(\"target\")),\n );\n\n newTargetPaths.forEach(targetChild => {\n const targetRef = identifier(newTargetBinding);\n targetRef.loc = targetChild.node.loc;\n\n targetChild.replaceWith(targetRef);\n });\n }\n\n // Convert all \"super.prop\" references to point at aliases.\n if (superProps.length > 0) {\n if (!allowInsertArrow) {\n throw superProps[0].buildCodeFrameError(\n \"When using '@babel/plugin-transform-arrow-functions', \" +\n \"it's not possible to compile `super.prop` in an arrow function without compiling classes.\\n\" +\n \"Please add '@babel/plugin-transform-classes' to your Babel configuration.\",\n );\n }\n\n const flatSuperProps: NodePath<t.MemberExpression>[] = superProps.reduce(\n (acc, superProp) => acc.concat(standardizeSuperProperty(superProp)),\n [],\n );\n\n flatSuperProps.forEach(superProp => {\n const key = superProp.node.computed\n ? \"\"\n : // @ts-expect-error super property must not contain private name\n superProp.get(\"property\").node.name;\n\n const superParentPath = superProp.parentPath;\n\n const isAssignment = superParentPath.isAssignmentExpression({\n left: superProp.node,\n });\n const isCall = superParentPath.isCallExpression({\n callee: superProp.node,\n });\n const isTaggedTemplate = superParentPath.isTaggedTemplateExpression({\n tag: superProp.node,\n });\n const superBinding = getSuperPropBinding(thisEnvFn, isAssignment, key);\n\n const args: t.Expression[] = [];\n if (superProp.node.computed) {\n // SuperProperty must not be a private name\n args.push(superProp.get(\"property\").node as t.Expression);\n }\n\n if (isAssignment) {\n const value = superParentPath.node.right;\n args.push(value);\n }\n\n const call = callExpression(identifier(superBinding), args);\n\n if (isCall) {\n superParentPath.unshiftContainer(\"arguments\", thisExpression());\n superProp.replaceWith(memberExpression(call, identifier(\"call\")));\n\n thisPaths.push(\n superParentPath.get(\"arguments.0\") as NodePath<t.ThisExpression>,\n );\n } else if (isAssignment) {\n // Replace not only the super.prop, but the whole assignment\n superParentPath.replaceWith(call);\n } else if (isTaggedTemplate) {\n superProp.replaceWith(\n callExpression(memberExpression(call, identifier(\"bind\"), false), [\n thisExpression(),\n ]),\n );\n\n thisPaths.push(\n superProp.get(\"arguments.0\") as NodePath<t.ThisExpression>,\n );\n } else {\n superProp.replaceWith(call);\n }\n });\n }\n\n // Convert all \"this\" references in the arrow to point at the alias.\n let thisBinding: string | null;\n if (thisPaths.length > 0 || !noNewArrows) {\n thisBinding = getThisBinding(thisEnvFn, inConstructor);\n\n if (\n noNewArrows ||\n // In subclass constructors, still need to rewrite because \"this\" can't be bound in spec mode\n // because it might not have been initialized yet.\n (inConstructor && hasSuperClass(thisEnvFn))\n ) {\n thisPaths.forEach(thisChild => {\n const thisRef = thisChild.isJSX()\n ? jsxIdentifier(thisBinding)\n : identifier(thisBinding);\n\n thisRef.loc = thisChild.node.loc;\n thisChild.replaceWith(thisRef);\n });\n\n if (!noNewArrows) thisBinding = null;\n }\n }\n\n return { thisBinding, fnPath };\n}\n\ntype LogicalOp = Parameters<typeof logicalExpression>[0];\ntype BinaryOp = Parameters<typeof binaryExpression>[0];\n\nfunction isLogicalOp(op: string): op is LogicalOp {\n return LOGICAL_OPERATORS.includes(op);\n}\n\nfunction standardizeSuperProperty(\n superProp: NodePath<t.MemberExpression>,\n):\n | [NodePath<t.MemberExpression>]\n | [NodePath<t.MemberExpression>, NodePath<t.MemberExpression>] {\n if (\n superProp.parentPath.isAssignmentExpression() &&\n superProp.parentPath.node.operator !== \"=\"\n ) {\n const assignmentPath = superProp.parentPath;\n\n const op = assignmentPath.node.operator.slice(0, -1) as\n | LogicalOp\n | BinaryOp;\n\n const value = assignmentPath.node.right;\n\n const isLogicalAssignment = isLogicalOp(op);\n\n if (superProp.node.computed) {\n // from: super[foo] **= 4;\n // to: super[tmp = foo] = super[tmp] ** 4;\n\n // from: super[foo] ??= 4;\n // to: super[tmp = foo] ?? super[tmp] = 4;\n\n const tmp = superProp.scope.generateDeclaredUidIdentifier(\"tmp\");\n\n const object = superProp.node.object;\n const property = superProp.node.property as t.Expression;\n\n assignmentPath\n .get(\"left\")\n .replaceWith(\n memberExpression(\n object,\n assignmentExpression(\"=\", tmp, property),\n true /* computed */,\n ),\n );\n\n assignmentPath\n .get(\"right\")\n .replaceWith(\n rightExpression(\n isLogicalAssignment ? \"=\" : op,\n memberExpression(object, identifier(tmp.name), true /* computed */),\n value,\n ),\n );\n } else {\n // from: super.foo **= 4;\n // to: super.foo = super.foo ** 4;\n\n // from: super.foo ??= 4;\n // to: super.foo ?? super.foo = 4;\n\n const object = superProp.node.object;\n const property = superProp.node.property as t.Identifier;\n\n assignmentPath\n .get(\"left\")\n .replaceWith(memberExpression(object, property));\n\n assignmentPath\n .get(\"right\")\n .replaceWith(\n rightExpression(\n isLogicalAssignment ? \"=\" : op,\n memberExpression(object, identifier(property.name)),\n value,\n ),\n );\n }\n\n if (isLogicalAssignment) {\n assignmentPath.replaceWith(\n logicalExpression(\n op,\n assignmentPath.node.left as t.MemberExpression,\n assignmentPath.node.right,\n ),\n );\n } else {\n assignmentPath.node.operator = \"=\";\n }\n\n return [\n assignmentPath.get(\"left\") as NodePath<t.MemberExpression>,\n assignmentPath.get(\"right\").get(\"left\"),\n ];\n } else if (superProp.parentPath.isUpdateExpression()) {\n const updateExpr = superProp.parentPath;\n\n const tmp = superProp.scope.generateDeclaredUidIdentifier(\"tmp\");\n const computedKey = superProp.node.computed\n ? superProp.scope.generateDeclaredUidIdentifier(\"prop\")\n : null;\n\n const parts: t.Expression[] = [\n assignmentExpression(\n \"=\",\n tmp,\n memberExpression(\n superProp.node.object,\n computedKey\n ? assignmentExpression(\n \"=\",\n computedKey,\n superProp.node.property as t.Expression,\n )\n : superProp.node.property,\n superProp.node.computed,\n ),\n ),\n assignmentExpression(\n \"=\",\n memberExpression(\n superProp.node.object,\n computedKey ? identifier(computedKey.name) : superProp.node.property,\n superProp.node.computed,\n ),\n binaryExpression(\n // map `++` to `+`, and `--` to `-`\n superProp.parentPath.node.operator[0] as \"+\" | \"-\",\n identifier(tmp.name),\n numericLiteral(1),\n ),\n ),\n ];\n\n if (!superProp.parentPath.node.prefix) {\n parts.push(identifier(tmp.name));\n }\n\n updateExpr.replaceWith(sequenceExpression(parts));\n\n const left = updateExpr.get(\n \"expressions.0.right\",\n ) as NodePath<t.MemberExpression>;\n const right = updateExpr.get(\n \"expressions.1.left\",\n ) as NodePath<t.MemberExpression>;\n return [left, right];\n }\n\n return [superProp];\n\n function rightExpression(\n op: BinaryOp | \"=\",\n left: t.MemberExpression,\n right: t.Expression,\n ) {\n if (op === \"=\") {\n return assignmentExpression(\"=\", left, right);\n } else {\n return binaryExpression(op, left, right);\n }\n }\n}\n\nfunction hasSuperClass(thisEnvFn: NodePath<t.Function>) {\n return (\n thisEnvFn.isClassMethod() &&\n !!(thisEnvFn.parentPath.parentPath.node as t.Class).superClass\n );\n}\n\nconst assignSuperThisVisitor = mergeVisitors<{\n supers: WeakSet<t.CallExpression>;\n thisBinding: string;\n}>([\n {\n CallExpression(child, { supers, thisBinding }) {\n if (!child.get(\"callee\").isSuper()) return;\n if (supers.has(child.node)) return;\n supers.add(child.node);\n\n child.replaceWithMultiple([\n child.node,\n assignmentExpression(\"=\", identifier(thisBinding), identifier(\"this\")),\n ]);\n },\n },\n environmentVisitor,\n]);\n\n// Create a binding that evaluates to the \"this\" of the given function.\nfunction getThisBinding(\n thisEnvFn: NodePath<t.Function>,\n inConstructor: boolean,\n) {\n return getBinding(thisEnvFn, \"this\", thisBinding => {\n if (!inConstructor || !hasSuperClass(thisEnvFn)) return thisExpression();\n\n thisEnvFn.traverse(assignSuperThisVisitor, {\n supers: new WeakSet(),\n thisBinding,\n });\n });\n}\n\n// Create a binding for a function that will call \"super()\" with arguments passed through.\nfunction getSuperBinding(thisEnvFn: NodePath<t.Function>) {\n return getBinding(thisEnvFn, \"supercall\", () => {\n const argsBinding = thisEnvFn.scope.generateUidIdentifier(\"args\");\n return arrowFunctionExpression(\n [restElement(argsBinding)],\n callExpression(_super(), [spreadElement(identifier(argsBinding.name))]),\n );\n });\n}\n\n// Create a binding for a function that will call \"super.foo\" or \"super[foo]\".\nfunction getSuperPropBinding(\n thisEnvFn: NodePath<t.Function>,\n isAssignment: boolean,\n propName: string,\n) {\n const op = isAssignment ? \"set\" : \"get\";\n\n return getBinding(thisEnvFn, `superprop_${op}:${propName || \"\"}`, () => {\n const argsList = [];\n\n let fnBody;\n if (propName) {\n // () => super.foo\n fnBody = memberExpression(_super(), identifier(propName));\n } else {\n const method = thisEnvFn.scope.generateUidIdentifier(\"prop\");\n // (method) => super[method]\n argsList.unshift(method);\n fnBody = memberExpression(\n _super(),\n identifier(method.name),\n true /* computed */,\n );\n }\n\n if (isAssignment) {\n const valueIdent = thisEnvFn.scope.generateUidIdentifier(\"value\");\n argsList.push(valueIdent);\n\n fnBody = assignmentExpression(\"=\", fnBody, identifier(valueIdent.name));\n }\n\n return arrowFunctionExpression(argsList, fnBody);\n });\n}\n\nfunction getBinding(\n thisEnvFn: NodePath,\n key: string,\n init: (name: string) => t.Expression,\n) {\n const cacheKey = \"binding:\" + key;\n let data: string | undefined = thisEnvFn.getData(cacheKey);\n if (!data) {\n const id = thisEnvFn.scope.generateUidIdentifier(key);\n data = id.name;\n thisEnvFn.setData(cacheKey, data);\n\n thisEnvFn.scope.push({\n id: id,\n init: init(data),\n });\n }\n\n return data;\n}\n\ntype ScopeInfo = {\n thisPaths: NodePath<t.ThisExpression | t.JSXIdentifier>[];\n superCalls: NodePath<t.CallExpression>[];\n superProps: NodePath<t.MemberExpression>[];\n argumentsPaths: NodePath<t.Identifier | t.JSXIdentifier>[];\n newTargetPaths: NodePath<t.MetaProperty>[];\n};\n\nconst getScopeInformationVisitor = mergeVisitors<ScopeInfo>([\n {\n ThisExpression(child, { thisPaths }) {\n thisPaths.push(child);\n },\n JSXIdentifier(child, { thisPaths }) {\n if (child.node.name !== \"this\") return;\n if (\n !child.parentPath.isJSXMemberExpression({ object: child.node }) &&\n !child.parentPath.isJSXOpeningElement({ name: child.node })\n ) {\n return;\n }\n\n thisPaths.push(child);\n },\n CallExpression(child, { superCalls }) {\n if (child.get(\"callee\").isSuper()) superCalls.push(child);\n },\n MemberExpression(child, { superProps }) {\n if (child.get(\"object\").isSuper()) superProps.push(child);\n },\n Identifier(child, { argumentsPaths }) {\n if (!child.isReferencedIdentifier({ name: \"arguments\" })) return;\n\n let curr = child.scope;\n do {\n if (curr.hasOwnBinding(\"arguments\")) {\n curr.rename(\"arguments\");\n return;\n }\n if (curr.path.isFunction() && !curr.path.isArrowFunctionExpression()) {\n break;\n }\n } while ((curr = curr.parent));\n\n argumentsPaths.push(child);\n },\n MetaProperty(child, { newTargetPaths }) {\n if (!child.get(\"meta\").isIdentifier({ name: \"new\" })) return;\n if (!child.get(\"property\").isIdentifier({ name: \"target\" })) return;\n\n newTargetPaths.push(child);\n },\n },\n environmentVisitor,\n]);\n\nfunction getScopeInformation(fnPath: NodePath) {\n const thisPaths: ScopeInfo[\"thisPaths\"] = [];\n const argumentsPaths: ScopeInfo[\"argumentsPaths\"] = [];\n const newTargetPaths: ScopeInfo[\"newTargetPaths\"] = [];\n const superProps: ScopeInfo[\"superProps\"] = [];\n const superCalls: ScopeInfo[\"superCalls\"] = [];\n\n fnPath.traverse(getScopeInformationVisitor, {\n thisPaths,\n argumentsPaths,\n newTargetPaths,\n superProps,\n superCalls,\n });\n\n return {\n thisPaths,\n argumentsPaths,\n newTargetPaths,\n superProps,\n superCalls,\n };\n}\n"],"mappings":"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"}
|
package/lib/path/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"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<T extends t.Node = t.Node> {\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<string | symbol, unknown>;\n // TraversalContext is configured by setContext\n declare context: TraversalContext;\n declare scope: Scope;\n\n contexts: Array<TraversalContext> = [];\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<t.ParentMaps[T[\"type\"]]> | null = null;\n container: t.Node | Array<t.Node> | 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<NonNullable<this[\"node\"]>> {\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<T>(visitor: Visitor<T>, 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<T>\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<T>,\n ): asserts this is NodePath<T & { body: t.BlockStatement }>;\n}\n\nexport default NodePath;\n"],"mappings":"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"}
|
1
|
+
{"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 { NodePathAssertions } 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<T extends t.Node = t.Node> {\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<string | symbol, unknown>;\n // TraversalContext is configured by setContext\n declare context: TraversalContext;\n declare scope: Scope;\n\n contexts: Array<TraversalContext> = [];\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<t.ParentMaps[T[\"type\"]]> | null = null;\n container: t.Node | Array<t.Node> | 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<NonNullable<this[\"node\"]>> {\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<T>(visitor: Visitor<T>, 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<T>\n extends NodePathAssertions,\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<T>,\n ): asserts this is NodePath<T & { body: t.BlockStatement }>;\n}\n\nexport default NodePath;\n"],"mappings":"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"}
|
@@ -160,7 +160,7 @@ function willIMaybeExecuteBefore(target) {
|
|
160
160
|
return this._guessExecutionStatusRelativeTo(target) !== "after";
|
161
161
|
}
|
162
162
|
function getOuterFunction(path) {
|
163
|
-
return (path.scope.getFunctionParent() || path.scope.getProgramParent()).path;
|
163
|
+
return (path.parentPath.scope.getFunctionParent() || path.parentPath.scope.getProgramParent()).path;
|
164
164
|
}
|
165
165
|
function isExecutionUncertain(type, key) {
|
166
166
|
switch (type) {
|
@@ -267,7 +267,12 @@ function _guessExecutionStatusRelativeToCached(base, target, cache) {
|
|
267
267
|
|
268
268
|
const executionOrderCheckedNodes = new Set();
|
269
269
|
function _guessExecutionStatusRelativeToDifferentFunctionsInternal(base, target, cache) {
|
270
|
-
if (!target.isFunctionDeclaration()
|
270
|
+
if (!target.isFunctionDeclaration()) {
|
271
|
+
if (base._guessExecutionStatusRelativeTo(target) === "before") {
|
272
|
+
return "before";
|
273
|
+
}
|
274
|
+
return "unknown";
|
275
|
+
} else if (target.parentPath.isExportDeclaration()) {
|
271
276
|
return "unknown";
|
272
277
|
}
|
273
278
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["STATEMENT_OR_BLOCK_KEYS","VISITOR_KEYS","isBlockStatement","isExpression","isIdentifier","isLiteral","isStringLiteral","isType","matchesPattern","_matchesPattern","pattern","allowPartial","node","has","key","val","Array","isArray","length","isStatic","scope","is","isnt","equals","value","isNodeType","type","canHaveVariableDeclarationOrExpression","parentPath","isFor","canSwapBetweenExpressionAndStatement","replacement","isArrowFunctionExpression","isCompletionRecord","allowInsideFunction","path","first","container","isFunction","isProgram","isDoExpression","isStatementOrBlock","isLabeledStatement","includes","referencesImport","moduleSource","importName","isReferencedIdentifier","isJSXMemberExpression","property","name","isMemberExpression","isOptionalMemberExpression","computed","object","get","binding","getBinding","kind","parent","isImportDeclaration","source","isImportDefaultSpecifier","isImportNamespaceSpecifier","isImportSpecifier","imported","getSource","end","code","hub","getCode","slice","start","willIMaybeExecuteBefore","target","_guessExecutionStatusRelativeTo","getOuterFunction","getFunctionParent","getProgramParent","isExecutionUncertain","isExecutionUncertainInList","paths","maxIndex","i","parentKey","_guessExecutionStatusRelativeToCached","Map","base","cache","funcParent","this","_guessExecutionStatusRelativeToDifferentFunctionsCached","getAncestry","indexOf","commonPath","commonIndex","Error","divergence","listKey","keys","keyPosition","executionOrderCheckedNodes","Set","_guessExecutionStatusRelativeToDifferentFunctionsInternal","isFunctionDeclaration","isExportDeclaration","id","references","referencePaths","allStatus","childOfFunction","find","isCallExpression","add","status","delete","nodeMap","set","result","resolve","dangerous","resolved","_resolve","push","isVariableDeclarator","constant","ret","isTypeCastExpression","targetKey","toComputedKey","targetName","isObjectExpression","props","prop","isProperty","match","isArrayExpression","isNaN","elems","elem","isConstantExpression","isRegExpLiteral","isTemplateLiteral","every","expression","isUnaryExpression","operator","isBinaryExpression","isInStrictMode","strictParent","sourceType","isClass","body","directive","directives"],"sources":["../../src/path/introspection.ts"],"sourcesContent":["// This file contains methods responsible for introspecting the current path for certain values.\n\nimport type NodePath from \"./index\";\nimport {\n STATEMENT_OR_BLOCK_KEYS,\n VISITOR_KEYS,\n isBlockStatement,\n isExpression,\n isIdentifier,\n isLiteral,\n isStringLiteral,\n isType,\n matchesPattern as _matchesPattern,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\n/**\n * Match the current node if it matches the provided `pattern`.\n *\n * For example, given the match `React.createClass` it would match the\n * parsed nodes of `React.createClass` and `React[\"createClass\"]`.\n */\n\nexport function matchesPattern(\n this: NodePath,\n pattern: string,\n allowPartial?: boolean,\n): boolean {\n return _matchesPattern(this.node, pattern, allowPartial);\n}\n\n/**\n * Check whether we have the input `key`. If the `key` references an array then we check\n * if the array has any items, otherwise we just check if it's falsy.\n */\n\nexport function has<N extends t.Node>(\n this: NodePath<N>,\n key: keyof N,\n): boolean {\n const val = this.node && this.node[key];\n if (val && Array.isArray(val)) {\n return !!val.length;\n } else {\n return !!val;\n }\n}\n\n/**\n * Description\n */\n\nexport function isStatic(this: NodePath): boolean {\n return this.scope.isStatic(this.node);\n}\n\n/**\n * Alias of `has`.\n */\n\nexport const is = has;\n\n/**\n * Opposite of `has`.\n */\n\nexport function isnt<N extends t.Node>(\n this: NodePath<N>,\n key: keyof N,\n): boolean {\n return !this.has(key);\n}\n\n/**\n * Check whether the path node `key` strict equals `value`.\n */\n\nexport function equals<N extends t.Node>(\n this: NodePath<N>,\n key: keyof N,\n value: any,\n): boolean {\n return this.node[key] === value;\n}\n\n/**\n * Check the type against our stored internal type of the node. This is handy when a node has\n * been removed yet we still internally know the type and need it to calculate node replacement.\n */\n\nexport function isNodeType(this: NodePath, type: string): boolean {\n return isType(this.type, type);\n}\n\n/**\n * This checks whether or not we're in one of the following positions:\n *\n * for (KEY in right);\n * for (KEY;;);\n *\n * This is because these spots allow VariableDeclarations AND normal expressions so we need\n * to tell the path replacement that it's ok to replace this with an expression.\n */\n\nexport function canHaveVariableDeclarationOrExpression(this: NodePath) {\n return (\n (this.key === \"init\" || this.key === \"left\") && this.parentPath.isFor()\n );\n}\n\n/**\n * This checks whether we are swapping an arrow function's body between an\n * expression and a block statement (or vice versa).\n *\n * This is because arrow functions may implicitly return an expression, which\n * is the same as containing a block statement.\n */\n\nexport function canSwapBetweenExpressionAndStatement(\n this: NodePath,\n replacement: t.Node,\n): boolean {\n if (this.key !== \"body\" || !this.parentPath.isArrowFunctionExpression()) {\n return false;\n }\n\n if (this.isExpression()) {\n return isBlockStatement(replacement);\n } else if (this.isBlockStatement()) {\n return isExpression(replacement);\n }\n\n return false;\n}\n\n/**\n * Check whether the current path references a completion record\n */\n\nexport function isCompletionRecord(\n this: NodePath,\n allowInsideFunction?: boolean,\n): boolean {\n let path = this;\n let first = true;\n\n do {\n const { type, container } = path;\n\n // we're in a function so can't be a completion record\n if (!first && (path.isFunction() || type === \"StaticBlock\")) {\n return !!allowInsideFunction;\n }\n\n first = false;\n\n // check to see if we're the last item in the container and if we are\n // we're a completion record!\n if (Array.isArray(container) && path.key !== container.length - 1) {\n return false;\n }\n } while (\n (path = path.parentPath) &&\n !path.isProgram() &&\n !path.isDoExpression()\n );\n\n return true;\n}\n\n/**\n * Check whether or not the current `key` allows either a single statement or block statement\n * so we can explode it if necessary.\n */\n\nexport function isStatementOrBlock(this: NodePath): boolean {\n if (\n this.parentPath.isLabeledStatement() ||\n isBlockStatement(this.container)\n ) {\n return false;\n } else {\n return STATEMENT_OR_BLOCK_KEYS.includes(this.key as string);\n }\n}\n\n/**\n * Check if the currently assigned path references the `importName` of `moduleSource`.\n */\n\nexport function referencesImport(\n this: NodePath,\n moduleSource: string,\n importName: string,\n): boolean {\n if (!this.isReferencedIdentifier()) {\n if (\n (this.isJSXMemberExpression() &&\n this.node.property.name === importName) ||\n ((this.isMemberExpression() || this.isOptionalMemberExpression()) &&\n (this.node.computed\n ? isStringLiteral(this.node.property, { value: importName })\n : (this.node.property as t.Identifier).name === importName))\n ) {\n const object = (\n this as NodePath<t.MemberExpression | t.OptionalMemberExpression>\n ).get(\"object\");\n return (\n object.isReferencedIdentifier() &&\n object.referencesImport(moduleSource, \"*\")\n );\n }\n\n return false;\n }\n\n const binding = this.scope.getBinding((this.node as t.Identifier).name);\n if (!binding || binding.kind !== \"module\") return false;\n\n const path = binding.path;\n const parent = path.parentPath;\n if (!parent.isImportDeclaration()) return false;\n\n // check moduleSource\n if (parent.node.source.value === moduleSource) {\n if (!importName) return true;\n } else {\n return false;\n }\n\n if (path.isImportDefaultSpecifier() && importName === \"default\") {\n return true;\n }\n\n if (path.isImportNamespaceSpecifier() && importName === \"*\") {\n return true;\n }\n\n if (\n path.isImportSpecifier() &&\n isIdentifier(path.node.imported, { name: importName })\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Get the source code associated with this node.\n */\n\nexport function getSource(this: NodePath): string {\n const node = this.node;\n if (node.end) {\n const code = this.hub.getCode();\n if (code) return code.slice(node.start, node.end);\n }\n return \"\";\n}\n\nexport function willIMaybeExecuteBefore(\n this: NodePath,\n target: NodePath,\n): boolean {\n return this._guessExecutionStatusRelativeTo(target) !== \"after\";\n}\n\nfunction getOuterFunction(path: NodePath) {\n return (path.scope.getFunctionParent() || path.scope.getProgramParent()).path;\n}\n\nfunction isExecutionUncertain(type: t.Node[\"type\"], key: string) {\n switch (type) {\n // a && FOO\n // a || FOO\n case \"LogicalExpression\":\n return key === \"right\";\n\n // a ? FOO : FOO\n // if (a) FOO; else FOO;\n case \"ConditionalExpression\":\n case \"IfStatement\":\n return key === \"consequent\" || key === \"alternate\";\n\n // while (a) FOO;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n case \"ForInStatement\":\n case \"ForOfStatement\":\n return key === \"body\";\n\n // for (a; b; FOO) FOO;\n case \"ForStatement\":\n return key === \"body\" || key === \"update\";\n\n // switch (a) { FOO }\n case \"SwitchStatement\":\n return key === \"cases\";\n\n // try { a } catch FOO finally { b }\n case \"TryStatement\":\n return key === \"handler\";\n\n // var [ x = FOO ]\n case \"AssignmentPattern\":\n return key === \"right\";\n\n // a?.[FOO]\n case \"OptionalMemberExpression\":\n return key === \"property\";\n\n // a?.(FOO)\n case \"OptionalCallExpression\":\n return key === \"arguments\";\n\n default:\n return false;\n }\n}\n\nfunction isExecutionUncertainInList(paths: NodePath[], maxIndex: number) {\n for (let i = 0; i < maxIndex; i++) {\n const path = paths[i];\n if (isExecutionUncertain(path.parent.type, path.parentKey)) {\n return true;\n }\n }\n return false;\n}\n\n// TODO (Babel 8)\n// This can be { before: boolean, after: boolean, unknown: boolean }.\n// This allows transforms like the tdz one to treat cases when the status\n// is both before and unknown/after like if it were before.\ntype RelativeExecutionStatus = \"before\" | \"after\" | \"unknown\";\n\ntype ExecutionStatusCache = Map<t.Node, Map<t.Node, RelativeExecutionStatus>>;\n\n/**\n * Given a `target` check the execution status of it relative to the current path.\n *\n * \"Execution status\" simply refers to where or not we **think** this will execute\n * before or after the input `target` element.\n */\n\nexport function _guessExecutionStatusRelativeTo(\n this: NodePath,\n target: NodePath,\n): RelativeExecutionStatus {\n return _guessExecutionStatusRelativeToCached(this, target, new Map());\n}\n\nfunction _guessExecutionStatusRelativeToCached(\n base: NodePath,\n target: NodePath,\n cache: ExecutionStatusCache,\n): RelativeExecutionStatus {\n // check if the two paths are in different functions, we can't track execution of these\n const funcParent = {\n this: getOuterFunction(base),\n target: getOuterFunction(target),\n };\n\n // here we check the `node` equality as sometimes we may have different paths for the\n // same node due to path thrashing\n if (funcParent.target.node !== funcParent.this.node) {\n return _guessExecutionStatusRelativeToDifferentFunctionsCached(\n base,\n funcParent.target,\n cache,\n );\n }\n\n const paths = {\n target: target.getAncestry(),\n this: base.getAncestry(),\n };\n\n // If this is an ancestor of the target path,\n // e.g. f(g); where this is f and target is g.\n if (paths.target.indexOf(base) >= 0) return \"after\";\n if (paths.this.indexOf(target) >= 0) return \"before\";\n\n // get ancestor where the branches intersect\n let commonPath;\n const commonIndex = { target: 0, this: 0 };\n\n while (!commonPath && commonIndex.this < paths.this.length) {\n const path = paths.this[commonIndex.this];\n commonIndex.target = paths.target.indexOf(path);\n if (commonIndex.target >= 0) {\n commonPath = path;\n } else {\n commonIndex.this++;\n }\n }\n\n if (!commonPath) {\n throw new Error(\n \"Internal Babel error - The two compared nodes\" +\n \" don't appear to belong to the same program.\",\n );\n }\n\n if (\n isExecutionUncertainInList(paths.this, commonIndex.this - 1) ||\n isExecutionUncertainInList(paths.target, commonIndex.target - 1)\n ) {\n return \"unknown\";\n }\n\n const divergence = {\n this: paths.this[commonIndex.this - 1],\n target: paths.target[commonIndex.target - 1],\n };\n\n // container list so let's see which one is after the other\n // e.g. [ THIS, TARGET ]\n if (\n divergence.target.listKey &&\n divergence.this.listKey &&\n divergence.target.container === divergence.this.container\n ) {\n return divergence.target.key > divergence.this.key ? \"before\" : \"after\";\n }\n\n // otherwise we're associated by a parent node, check which key comes before the other\n const keys = VISITOR_KEYS[commonPath.type];\n const keyPosition = {\n this: keys.indexOf(divergence.this.parentKey as string),\n target: keys.indexOf(divergence.target.parentKey as string),\n };\n return keyPosition.target > keyPosition.this ? \"before\" : \"after\";\n}\n\n// Used to avoid infinite recursion in cases like\n// function f() { if (false) f(); }\n// f();\n// It also works with indirect recursion.\nconst executionOrderCheckedNodes = new Set();\n\nfunction _guessExecutionStatusRelativeToDifferentFunctionsInternal(\n base: NodePath,\n target: NodePath,\n cache: ExecutionStatusCache,\n): RelativeExecutionStatus {\n if (\n !target.isFunctionDeclaration() ||\n target.parentPath.isExportDeclaration()\n ) {\n return \"unknown\";\n }\n\n // so we're in a completely different function, if this is a function declaration\n // then we can be a bit smarter and handle cases where the function is either\n // a. not called at all (part of an export)\n // b. called directly\n const binding = target.scope.getBinding(target.node.id.name);\n\n // no references!\n if (!binding.references) return \"before\";\n\n const referencePaths: Array<NodePath> = binding.referencePaths;\n\n let allStatus;\n\n // verify that all the calls have the same execution status\n for (const path of referencePaths) {\n // if a reference is a child of the function we're checking against then we can\n // safely ignore it\n const childOfFunction = !!path.find(path => path.node === target.node);\n if (childOfFunction) continue;\n\n if (path.key !== \"callee\" || !path.parentPath.isCallExpression()) {\n // This function is passed as a reference, so we don't\n // know when it will be called.\n return \"unknown\";\n }\n\n // Prevent infinite loops in recursive functions\n if (executionOrderCheckedNodes.has(path.node)) continue;\n executionOrderCheckedNodes.add(path.node);\n try {\n const status = _guessExecutionStatusRelativeToCached(base, path, cache);\n\n if (allStatus && allStatus !== status) {\n return \"unknown\";\n } else {\n allStatus = status;\n }\n } finally {\n executionOrderCheckedNodes.delete(path.node);\n }\n }\n\n return allStatus;\n}\n\nfunction _guessExecutionStatusRelativeToDifferentFunctionsCached(\n base: NodePath,\n target: NodePath,\n cache: ExecutionStatusCache,\n): RelativeExecutionStatus {\n let nodeMap = cache.get(base.node);\n if (!nodeMap) {\n cache.set(base.node, (nodeMap = new Map()));\n } else if (nodeMap.has(target.node)) {\n return nodeMap.get(target.node);\n }\n\n const result = _guessExecutionStatusRelativeToDifferentFunctionsInternal(\n base,\n target,\n cache,\n );\n\n nodeMap.set(target.node, result);\n return result;\n}\n\n/**\n * Resolve a \"pointer\" `NodePath` to it's absolute path.\n */\nexport function resolve(\n this: NodePath,\n dangerous?: boolean,\n resolved?: NodePath[],\n) {\n return this._resolve(dangerous, resolved) || this;\n}\n\nexport function _resolve(\n this: NodePath,\n dangerous?: boolean,\n resolved?: NodePath[],\n): NodePath | undefined | null {\n // detect infinite recursion\n // todo: possibly have a max length on this just to be safe\n if (resolved && resolved.indexOf(this) >= 0) return;\n\n // we store all the paths we've \"resolved\" in this array to prevent infinite recursion\n resolved = resolved || [];\n resolved.push(this);\n\n if (this.isVariableDeclarator()) {\n if (this.get(\"id\").isIdentifier()) {\n return this.get(\"init\").resolve(dangerous, resolved);\n } else {\n // otherwise it's a request for a pattern and that's a bit more tricky\n }\n } else if (this.isReferencedIdentifier()) {\n const binding = this.scope.getBinding(this.node.name);\n if (!binding) return;\n\n // reassigned so we can't really resolve it\n if (!binding.constant) return;\n\n // todo - lookup module in dependency graph\n if (binding.kind === \"module\") return;\n\n if (binding.path !== this) {\n const ret = binding.path.resolve(dangerous, resolved);\n // If the identifier resolves to parent node then we can't really resolve it.\n if (this.find(parent => parent.node === ret.node)) return;\n return ret;\n }\n } else if (this.isTypeCastExpression()) {\n // @ ts-ignore todo: babel-types\n return this.get(\"expression\").resolve(dangerous, resolved);\n } else if (dangerous && this.isMemberExpression()) {\n // this is dangerous, as non-direct target assignments will mutate it's state\n // making this resolution inaccurate\n\n const targetKey = this.toComputedKey();\n if (!isLiteral(targetKey)) return;\n\n // @ts-expect-error todo(flow->ts): NullLiteral\n const targetName = targetKey.value;\n\n const target = this.get(\"object\").resolve(dangerous, resolved);\n\n if (target.isObjectExpression()) {\n const props = target.get(\"properties\");\n for (const prop of props as any[]) {\n if (!prop.isProperty()) continue;\n\n const key = prop.get(\"key\");\n\n // { foo: obj }\n let match =\n prop.isnt(\"computed\") && key.isIdentifier({ name: targetName });\n\n // { \"foo\": \"obj\" } or { [\"foo\"]: \"obj\" }\n match = match || key.isLiteral({ value: targetName });\n\n if (match) return prop.get(\"value\").resolve(dangerous, resolved);\n }\n } else if (target.isArrayExpression() && !isNaN(+targetName)) {\n const elems = target.get(\"elements\");\n const elem = elems[targetName];\n if (elem) return elem.resolve(dangerous, resolved);\n }\n }\n}\n\nexport function isConstantExpression(this: NodePath): boolean {\n if (this.isIdentifier()) {\n const binding = this.scope.getBinding(this.node.name);\n if (!binding) return false;\n return binding.constant;\n }\n\n if (this.isLiteral()) {\n if (this.isRegExpLiteral()) {\n return false;\n }\n\n if (this.isTemplateLiteral()) {\n return this.get(\"expressions\").every(expression =>\n expression.isConstantExpression(),\n );\n }\n\n return true;\n }\n\n if (this.isUnaryExpression()) {\n if (this.node.operator !== \"void\") {\n return false;\n }\n\n return this.get(\"argument\").isConstantExpression();\n }\n\n if (this.isBinaryExpression()) {\n const { operator } = this.node;\n return (\n operator !== \"in\" &&\n operator !== \"instanceof\" &&\n this.get(\"left\").isConstantExpression() &&\n this.get(\"right\").isConstantExpression()\n );\n }\n\n return false;\n}\n\nexport function isInStrictMode(this: NodePath) {\n const start = this.isProgram() ? this : this.parentPath;\n\n const strictParent = start.find(path => {\n if (path.isProgram({ sourceType: \"module\" })) return true;\n\n if (path.isClass()) return true;\n\n if (\n path.isArrowFunctionExpression() &&\n !path.get(\"body\").isBlockStatement()\n ) {\n return false;\n }\n\n let body: t.BlockStatement | t.Program;\n if (path.isFunction()) {\n body = path.node.body as t.BlockStatement;\n } else if (path.isProgram()) {\n body = path.node;\n } else {\n return false;\n }\n\n for (const directive of body.directives) {\n if (directive.value.value === \"use strict\") {\n return true;\n }\n }\n });\n\n return !!strictParent;\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["STATEMENT_OR_BLOCK_KEYS","VISITOR_KEYS","isBlockStatement","isExpression","isIdentifier","isLiteral","isStringLiteral","isType","matchesPattern","_matchesPattern","pattern","allowPartial","node","has","key","val","Array","isArray","length","isStatic","scope","is","isnt","equals","value","isNodeType","type","canHaveVariableDeclarationOrExpression","parentPath","isFor","canSwapBetweenExpressionAndStatement","replacement","isArrowFunctionExpression","isCompletionRecord","allowInsideFunction","path","first","container","isFunction","isProgram","isDoExpression","isStatementOrBlock","isLabeledStatement","includes","referencesImport","moduleSource","importName","isReferencedIdentifier","isJSXMemberExpression","property","name","isMemberExpression","isOptionalMemberExpression","computed","object","get","binding","getBinding","kind","parent","isImportDeclaration","source","isImportDefaultSpecifier","isImportNamespaceSpecifier","isImportSpecifier","imported","getSource","end","code","hub","getCode","slice","start","willIMaybeExecuteBefore","target","_guessExecutionStatusRelativeTo","getOuterFunction","getFunctionParent","getProgramParent","isExecutionUncertain","isExecutionUncertainInList","paths","maxIndex","i","parentKey","_guessExecutionStatusRelativeToCached","Map","base","cache","funcParent","this","_guessExecutionStatusRelativeToDifferentFunctionsCached","getAncestry","indexOf","commonPath","commonIndex","Error","divergence","listKey","keys","keyPosition","executionOrderCheckedNodes","Set","_guessExecutionStatusRelativeToDifferentFunctionsInternal","isFunctionDeclaration","isExportDeclaration","id","references","referencePaths","allStatus","childOfFunction","find","isCallExpression","add","status","delete","nodeMap","set","result","resolve","dangerous","resolved","_resolve","push","isVariableDeclarator","constant","ret","isTypeCastExpression","targetKey","toComputedKey","targetName","isObjectExpression","props","prop","isProperty","match","isArrayExpression","isNaN","elems","elem","isConstantExpression","isRegExpLiteral","isTemplateLiteral","every","expression","isUnaryExpression","operator","isBinaryExpression","isInStrictMode","strictParent","sourceType","isClass","body","directive","directives"],"sources":["../../src/path/introspection.ts"],"sourcesContent":["// This file contains methods responsible for introspecting the current path for certain values.\n\nimport type NodePath from \"./index\";\nimport {\n STATEMENT_OR_BLOCK_KEYS,\n VISITOR_KEYS,\n isBlockStatement,\n isExpression,\n isIdentifier,\n isLiteral,\n isStringLiteral,\n isType,\n matchesPattern as _matchesPattern,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\n/**\n * Match the current node if it matches the provided `pattern`.\n *\n * For example, given the match `React.createClass` it would match the\n * parsed nodes of `React.createClass` and `React[\"createClass\"]`.\n */\n\nexport function matchesPattern(\n this: NodePath,\n pattern: string,\n allowPartial?: boolean,\n): boolean {\n return _matchesPattern(this.node, pattern, allowPartial);\n}\n\n/**\n * Check whether we have the input `key`. If the `key` references an array then we check\n * if the array has any items, otherwise we just check if it's falsy.\n */\n\nexport function has<N extends t.Node>(\n this: NodePath<N>,\n key: keyof N,\n): boolean {\n const val = this.node && this.node[key];\n if (val && Array.isArray(val)) {\n return !!val.length;\n } else {\n return !!val;\n }\n}\n\n/**\n * Description\n */\n\nexport function isStatic(this: NodePath): boolean {\n return this.scope.isStatic(this.node);\n}\n\n/**\n * Alias of `has`.\n */\n\nexport const is = has;\n\n/**\n * Opposite of `has`.\n */\n\nexport function isnt<N extends t.Node>(\n this: NodePath<N>,\n key: keyof N,\n): boolean {\n return !this.has(key);\n}\n\n/**\n * Check whether the path node `key` strict equals `value`.\n */\n\nexport function equals<N extends t.Node>(\n this: NodePath<N>,\n key: keyof N,\n value: any,\n): boolean {\n return this.node[key] === value;\n}\n\n/**\n * Check the type against our stored internal type of the node. This is handy when a node has\n * been removed yet we still internally know the type and need it to calculate node replacement.\n */\n\nexport function isNodeType(this: NodePath, type: string): boolean {\n return isType(this.type, type);\n}\n\n/**\n * This checks whether or not we're in one of the following positions:\n *\n * for (KEY in right);\n * for (KEY;;);\n *\n * This is because these spots allow VariableDeclarations AND normal expressions so we need\n * to tell the path replacement that it's ok to replace this with an expression.\n */\n\nexport function canHaveVariableDeclarationOrExpression(this: NodePath) {\n return (\n (this.key === \"init\" || this.key === \"left\") && this.parentPath.isFor()\n );\n}\n\n/**\n * This checks whether we are swapping an arrow function's body between an\n * expression and a block statement (or vice versa).\n *\n * This is because arrow functions may implicitly return an expression, which\n * is the same as containing a block statement.\n */\n\nexport function canSwapBetweenExpressionAndStatement(\n this: NodePath,\n replacement: t.Node,\n): boolean {\n if (this.key !== \"body\" || !this.parentPath.isArrowFunctionExpression()) {\n return false;\n }\n\n if (this.isExpression()) {\n return isBlockStatement(replacement);\n } else if (this.isBlockStatement()) {\n return isExpression(replacement);\n }\n\n return false;\n}\n\n/**\n * Check whether the current path references a completion record\n */\n\nexport function isCompletionRecord(\n this: NodePath,\n allowInsideFunction?: boolean,\n): boolean {\n let path = this;\n let first = true;\n\n do {\n const { type, container } = path;\n\n // we're in a function so can't be a completion record\n if (!first && (path.isFunction() || type === \"StaticBlock\")) {\n return !!allowInsideFunction;\n }\n\n first = false;\n\n // check to see if we're the last item in the container and if we are\n // we're a completion record!\n if (Array.isArray(container) && path.key !== container.length - 1) {\n return false;\n }\n } while (\n (path = path.parentPath) &&\n !path.isProgram() &&\n !path.isDoExpression()\n );\n\n return true;\n}\n\n/**\n * Check whether or not the current `key` allows either a single statement or block statement\n * so we can explode it if necessary.\n */\n\nexport function isStatementOrBlock(this: NodePath): boolean {\n if (\n this.parentPath.isLabeledStatement() ||\n isBlockStatement(this.container)\n ) {\n return false;\n } else {\n return STATEMENT_OR_BLOCK_KEYS.includes(this.key as string);\n }\n}\n\n/**\n * Check if the currently assigned path references the `importName` of `moduleSource`.\n */\n\nexport function referencesImport(\n this: NodePath,\n moduleSource: string,\n importName: string,\n): boolean {\n if (!this.isReferencedIdentifier()) {\n if (\n (this.isJSXMemberExpression() &&\n this.node.property.name === importName) ||\n ((this.isMemberExpression() || this.isOptionalMemberExpression()) &&\n (this.node.computed\n ? isStringLiteral(this.node.property, { value: importName })\n : (this.node.property as t.Identifier).name === importName))\n ) {\n const object = (\n this as NodePath<t.MemberExpression | t.OptionalMemberExpression>\n ).get(\"object\");\n return (\n object.isReferencedIdentifier() &&\n object.referencesImport(moduleSource, \"*\")\n );\n }\n\n return false;\n }\n\n const binding = this.scope.getBinding((this.node as t.Identifier).name);\n if (!binding || binding.kind !== \"module\") return false;\n\n const path = binding.path;\n const parent = path.parentPath;\n if (!parent.isImportDeclaration()) return false;\n\n // check moduleSource\n if (parent.node.source.value === moduleSource) {\n if (!importName) return true;\n } else {\n return false;\n }\n\n if (path.isImportDefaultSpecifier() && importName === \"default\") {\n return true;\n }\n\n if (path.isImportNamespaceSpecifier() && importName === \"*\") {\n return true;\n }\n\n if (\n path.isImportSpecifier() &&\n isIdentifier(path.node.imported, { name: importName })\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Get the source code associated with this node.\n */\n\nexport function getSource(this: NodePath): string {\n const node = this.node;\n if (node.end) {\n const code = this.hub.getCode();\n if (code) return code.slice(node.start, node.end);\n }\n return \"\";\n}\n\nexport function willIMaybeExecuteBefore(\n this: NodePath,\n target: NodePath,\n): boolean {\n return this._guessExecutionStatusRelativeTo(target) !== \"after\";\n}\n\nfunction getOuterFunction(path: NodePath) {\n return (\n path.parentPath.scope.getFunctionParent() ||\n path.parentPath.scope.getProgramParent()\n ).path;\n}\n\nfunction isExecutionUncertain(type: t.Node[\"type\"], key: string) {\n switch (type) {\n // a && FOO\n // a || FOO\n case \"LogicalExpression\":\n return key === \"right\";\n\n // a ? FOO : FOO\n // if (a) FOO; else FOO;\n case \"ConditionalExpression\":\n case \"IfStatement\":\n return key === \"consequent\" || key === \"alternate\";\n\n // while (a) FOO;\n case \"WhileStatement\":\n case \"DoWhileStatement\":\n case \"ForInStatement\":\n case \"ForOfStatement\":\n return key === \"body\";\n\n // for (a; b; FOO) FOO;\n case \"ForStatement\":\n return key === \"body\" || key === \"update\";\n\n // switch (a) { FOO }\n case \"SwitchStatement\":\n return key === \"cases\";\n\n // try { a } catch FOO finally { b }\n case \"TryStatement\":\n return key === \"handler\";\n\n // var [ x = FOO ]\n case \"AssignmentPattern\":\n return key === \"right\";\n\n // a?.[FOO]\n case \"OptionalMemberExpression\":\n return key === \"property\";\n\n // a?.(FOO)\n case \"OptionalCallExpression\":\n return key === \"arguments\";\n\n default:\n return false;\n }\n}\n\nfunction isExecutionUncertainInList(paths: NodePath[], maxIndex: number) {\n for (let i = 0; i < maxIndex; i++) {\n const path = paths[i];\n if (isExecutionUncertain(path.parent.type, path.parentKey)) {\n return true;\n }\n }\n return false;\n}\n\n// TODO (Babel 8)\n// This can be { before: boolean, after: boolean, unknown: boolean }.\n// This allows transforms like the tdz one to treat cases when the status\n// is both before and unknown/after like if it were before.\ntype RelativeExecutionStatus = \"before\" | \"after\" | \"unknown\";\n\ntype ExecutionStatusCache = Map<t.Node, Map<t.Node, RelativeExecutionStatus>>;\n\n/**\n * Given a `target` check the execution status of it relative to the current path.\n *\n * \"Execution status\" simply refers to where or not we **think** this will execute\n * before or after the input `target` element.\n */\n\nexport function _guessExecutionStatusRelativeTo(\n this: NodePath,\n target: NodePath,\n): RelativeExecutionStatus {\n return _guessExecutionStatusRelativeToCached(this, target, new Map());\n}\n\nfunction _guessExecutionStatusRelativeToCached(\n base: NodePath,\n target: NodePath,\n cache: ExecutionStatusCache,\n): RelativeExecutionStatus {\n // check if the two paths are in different functions, we can't track execution of these\n const funcParent = {\n this: getOuterFunction(base),\n target: getOuterFunction(target),\n };\n\n // here we check the `node` equality as sometimes we may have different paths for the\n // same node due to path thrashing\n if (funcParent.target.node !== funcParent.this.node) {\n return _guessExecutionStatusRelativeToDifferentFunctionsCached(\n base,\n funcParent.target,\n cache,\n );\n }\n\n const paths = {\n target: target.getAncestry(),\n this: base.getAncestry(),\n };\n\n // If this is an ancestor of the target path,\n // e.g. f(g); where this is f and target is g.\n if (paths.target.indexOf(base) >= 0) return \"after\";\n if (paths.this.indexOf(target) >= 0) return \"before\";\n\n // get ancestor where the branches intersect\n let commonPath;\n const commonIndex = { target: 0, this: 0 };\n\n while (!commonPath && commonIndex.this < paths.this.length) {\n const path = paths.this[commonIndex.this];\n commonIndex.target = paths.target.indexOf(path);\n if (commonIndex.target >= 0) {\n commonPath = path;\n } else {\n commonIndex.this++;\n }\n }\n\n if (!commonPath) {\n throw new Error(\n \"Internal Babel error - The two compared nodes\" +\n \" don't appear to belong to the same program.\",\n );\n }\n\n if (\n isExecutionUncertainInList(paths.this, commonIndex.this - 1) ||\n isExecutionUncertainInList(paths.target, commonIndex.target - 1)\n ) {\n return \"unknown\";\n }\n\n const divergence = {\n this: paths.this[commonIndex.this - 1],\n target: paths.target[commonIndex.target - 1],\n };\n\n // container list so let's see which one is after the other\n // e.g. [ THIS, TARGET ]\n if (\n divergence.target.listKey &&\n divergence.this.listKey &&\n divergence.target.container === divergence.this.container\n ) {\n return divergence.target.key > divergence.this.key ? \"before\" : \"after\";\n }\n\n // otherwise we're associated by a parent node, check which key comes before the other\n const keys = VISITOR_KEYS[commonPath.type];\n const keyPosition = {\n this: keys.indexOf(divergence.this.parentKey),\n target: keys.indexOf(divergence.target.parentKey),\n };\n return keyPosition.target > keyPosition.this ? \"before\" : \"after\";\n}\n\n// Used to avoid infinite recursion in cases like\n// function f() { if (false) f(); }\n// f();\n// It also works with indirect recursion.\nconst executionOrderCheckedNodes = new Set();\n\nfunction _guessExecutionStatusRelativeToDifferentFunctionsInternal(\n base: NodePath,\n target: NodePath,\n cache: ExecutionStatusCache,\n): RelativeExecutionStatus {\n if (!target.isFunctionDeclaration()) {\n if (base._guessExecutionStatusRelativeTo(target) === \"before\") {\n return \"before\";\n }\n return \"unknown\";\n } else if (target.parentPath.isExportDeclaration()) {\n return \"unknown\";\n }\n\n // so we're in a completely different function, if this is a function declaration\n // then we can be a bit smarter and handle cases where the function is either\n // a. not called at all (part of an export)\n // b. called directly\n const binding = target.scope.getBinding(target.node.id.name);\n\n // no references!\n if (!binding.references) return \"before\";\n\n const referencePaths: Array<NodePath> = binding.referencePaths;\n\n let allStatus;\n\n // verify that all the calls have the same execution status\n for (const path of referencePaths) {\n // if a reference is a child of the function we're checking against then we can\n // safely ignore it\n const childOfFunction = !!path.find(path => path.node === target.node);\n if (childOfFunction) continue;\n\n if (path.key !== \"callee\" || !path.parentPath.isCallExpression()) {\n // This function is passed as a reference, so we don't\n // know when it will be called.\n return \"unknown\";\n }\n\n // Prevent infinite loops in recursive functions\n if (executionOrderCheckedNodes.has(path.node)) continue;\n executionOrderCheckedNodes.add(path.node);\n try {\n const status = _guessExecutionStatusRelativeToCached(base, path, cache);\n\n if (allStatus && allStatus !== status) {\n return \"unknown\";\n } else {\n allStatus = status;\n }\n } finally {\n executionOrderCheckedNodes.delete(path.node);\n }\n }\n\n return allStatus;\n}\n\nfunction _guessExecutionStatusRelativeToDifferentFunctionsCached(\n base: NodePath,\n target: NodePath,\n cache: ExecutionStatusCache,\n): RelativeExecutionStatus {\n let nodeMap = cache.get(base.node);\n if (!nodeMap) {\n cache.set(base.node, (nodeMap = new Map()));\n } else if (nodeMap.has(target.node)) {\n return nodeMap.get(target.node);\n }\n\n const result = _guessExecutionStatusRelativeToDifferentFunctionsInternal(\n base,\n target,\n cache,\n );\n\n nodeMap.set(target.node, result);\n return result;\n}\n\n/**\n * Resolve a \"pointer\" `NodePath` to it's absolute path.\n */\nexport function resolve(\n this: NodePath,\n dangerous?: boolean,\n resolved?: NodePath[],\n) {\n return this._resolve(dangerous, resolved) || this;\n}\n\nexport function _resolve(\n this: NodePath,\n dangerous?: boolean,\n resolved?: NodePath[],\n): NodePath | undefined | null {\n // detect infinite recursion\n // todo: possibly have a max length on this just to be safe\n if (resolved && resolved.indexOf(this) >= 0) return;\n\n // we store all the paths we've \"resolved\" in this array to prevent infinite recursion\n resolved = resolved || [];\n resolved.push(this);\n\n if (this.isVariableDeclarator()) {\n if (this.get(\"id\").isIdentifier()) {\n return this.get(\"init\").resolve(dangerous, resolved);\n } else {\n // otherwise it's a request for a pattern and that's a bit more tricky\n }\n } else if (this.isReferencedIdentifier()) {\n const binding = this.scope.getBinding(this.node.name);\n if (!binding) return;\n\n // reassigned so we can't really resolve it\n if (!binding.constant) return;\n\n // todo - lookup module in dependency graph\n if (binding.kind === \"module\") return;\n\n if (binding.path !== this) {\n const ret = binding.path.resolve(dangerous, resolved);\n // If the identifier resolves to parent node then we can't really resolve it.\n if (this.find(parent => parent.node === ret.node)) return;\n return ret;\n }\n } else if (this.isTypeCastExpression()) {\n // @ ts-ignore todo: babel-types\n return this.get(\"expression\").resolve(dangerous, resolved);\n } else if (dangerous && this.isMemberExpression()) {\n // this is dangerous, as non-direct target assignments will mutate it's state\n // making this resolution inaccurate\n\n const targetKey = this.toComputedKey();\n if (!isLiteral(targetKey)) return;\n\n // @ts-expect-error todo(flow->ts): NullLiteral\n const targetName = targetKey.value;\n\n const target = this.get(\"object\").resolve(dangerous, resolved);\n\n if (target.isObjectExpression()) {\n const props = target.get(\"properties\");\n for (const prop of props as any[]) {\n if (!prop.isProperty()) continue;\n\n const key = prop.get(\"key\");\n\n // { foo: obj }\n let match =\n prop.isnt(\"computed\") && key.isIdentifier({ name: targetName });\n\n // { \"foo\": \"obj\" } or { [\"foo\"]: \"obj\" }\n match = match || key.isLiteral({ value: targetName });\n\n if (match) return prop.get(\"value\").resolve(dangerous, resolved);\n }\n } else if (target.isArrayExpression() && !isNaN(+targetName)) {\n const elems = target.get(\"elements\");\n const elem = elems[targetName];\n if (elem) return elem.resolve(dangerous, resolved);\n }\n }\n}\n\nexport function isConstantExpression(this: NodePath): boolean {\n if (this.isIdentifier()) {\n const binding = this.scope.getBinding(this.node.name);\n if (!binding) return false;\n return binding.constant;\n }\n\n if (this.isLiteral()) {\n if (this.isRegExpLiteral()) {\n return false;\n }\n\n if (this.isTemplateLiteral()) {\n return this.get(\"expressions\").every(expression =>\n expression.isConstantExpression(),\n );\n }\n\n return true;\n }\n\n if (this.isUnaryExpression()) {\n if (this.node.operator !== \"void\") {\n return false;\n }\n\n return this.get(\"argument\").isConstantExpression();\n }\n\n if (this.isBinaryExpression()) {\n const { operator } = this.node;\n return (\n operator !== \"in\" &&\n operator !== \"instanceof\" &&\n this.get(\"left\").isConstantExpression() &&\n this.get(\"right\").isConstantExpression()\n );\n }\n\n return false;\n}\n\nexport function isInStrictMode(this: NodePath) {\n const start = this.isProgram() ? this : this.parentPath;\n\n const strictParent = start.find(path => {\n if (path.isProgram({ sourceType: \"module\" })) return true;\n\n if (path.isClass()) return true;\n\n if (\n path.isArrowFunctionExpression() &&\n !path.get(\"body\").isBlockStatement()\n ) {\n return false;\n }\n\n let body: t.BlockStatement | t.Program;\n if (path.isFunction()) {\n body = path.node.body as t.BlockStatement;\n } else if (path.isProgram()) {\n body = path.node;\n } else {\n return false;\n }\n\n for (const directive of body.directives) {\n if (directive.value.value === \"use strict\") {\n return true;\n }\n }\n });\n\n return !!strictParent;\n}\n"],"mappings":"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"}
|
package/lib/path/modification.js
CHANGED
@@ -27,6 +27,7 @@ const {
|
|
27
27
|
expressionStatement,
|
28
28
|
isAssignmentExpression,
|
29
29
|
isCallExpression,
|
30
|
+
isExportNamedDeclaration,
|
30
31
|
isExpression,
|
31
32
|
isIdentifier,
|
32
33
|
isSequenceExpression,
|
@@ -38,9 +39,11 @@ function insertBefore(nodes_) {
|
|
38
39
|
this._assertUnremoved();
|
39
40
|
const nodes = this._verifyNodeList(nodes_);
|
40
41
|
const {
|
41
|
-
parentPath
|
42
|
+
parentPath,
|
43
|
+
parent
|
42
44
|
} = this;
|
43
|
-
if (parentPath.isExpressionStatement() || parentPath.isLabeledStatement() ||
|
45
|
+
if (parentPath.isExpressionStatement() || parentPath.isLabeledStatement() ||
|
46
|
+
isExportNamedDeclaration(parent) || parentPath.isExportDefaultDeclaration() && this.isDeclaration()) {
|
44
47
|
return parentPath.insertBefore(nodes);
|
45
48
|
} else if (this.isNodeType("Expression") && !this.isJSXElement() || parentPath.isForStatement() && this.key === "init") {
|
46
49
|
if (this.node) nodes.push(this.node);
|
@@ -107,9 +110,11 @@ function insertAfter(nodes_) {
|
|
107
110
|
}
|
108
111
|
const nodes = this._verifyNodeList(nodes_);
|
109
112
|
const {
|
110
|
-
parentPath
|
113
|
+
parentPath,
|
114
|
+
parent
|
111
115
|
} = this;
|
112
|
-
if (parentPath.isExpressionStatement() || parentPath.isLabeledStatement() ||
|
116
|
+
if (parentPath.isExpressionStatement() || parentPath.isLabeledStatement() ||
|
117
|
+
isExportNamedDeclaration(parent) || parentPath.isExportDefaultDeclaration() && this.isDeclaration()) {
|
113
118
|
return parentPath.insertAfter(nodes.map(node => {
|
114
119
|
return isExpression(node) ? expressionStatement(node) : node;
|
115
120
|
}));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["arrowFunctionExpression","assertExpression","assignmentExpression","blockStatement","callExpression","cloneNode","expressionStatement","isAssignmentExpression","isCallExpression","isExpression","isIdentifier","isSequenceExpression","isSuper","thisExpression","insertBefore","nodes_","_assertUnremoved","nodes","_verifyNodeList","parentPath","isExpressionStatement","isLabeledStatement","isExportNamedDeclaration","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","to","path","getSibling","context","queue","pushContext","contexts","_getQueueContexts","setScope","debug","maybeQueue","_containerInsertAfter","last","arr","isHiddenInSequenceExpression","parent","expressions","isAlmostConstantAssignment","scope","left","blockScope","getBlockParent","hasOwnBinding","name","getOwnBinding","constantViolations","insertAfter","get","map","isPattern","unshift","callee","isPure","isMethod","computed","temp","generateDeclaredUidIdentifier","pushContainer","fromIndex","incrementBy","pathCache","msg","type","NodePath","listKey","setContext","verifiedNodes","replaceWithMultiple","hoist","hoister","PathHoister","run"],"sources":["../../src/path/modification.ts"],"sourcesContent":["// This file contains methods that modify the path/node in some ways.\n\nimport { path as pathCache } from \"../cache\";\nimport PathHoister from \"./lib/hoister\";\nimport NodePath from \"./index\";\nimport {\n arrowFunctionExpression,\n assertExpression,\n assignmentExpression,\n blockStatement,\n callExpression,\n cloneNode,\n expressionStatement,\n isAssignmentExpression,\n isCallExpression,\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\";\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 this._assertUnremoved();\n\n const nodes = this._verifyNodeList(nodes_);\n\n const { parentPath } = this;\n\n if (\n parentPath.isExpressionStatement() ||\n parentPath.isLabeledStatement() ||\n parentPath.isExportNamedDeclaration() ||\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 this._containerInsertBefore(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 this.updateSiblingKeys(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 && this.context.queue) {\n path.pushContext(this.context);\n }\n }\n\n const contexts = this._getQueueContexts();\n\n for (const path of paths) {\n path.setScope();\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 this._containerInsert(this.key as number, nodes);\n}\n\nexport function _containerInsertAfter<N extends t.Node>(\n this: NodePath,\n nodes: N[],\n) {\n return this._containerInsert((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 this._assertUnremoved();\n\n if (this.isSequenceExpression()) {\n return last(this.get(\"expressions\")).insertAfter(nodes_);\n }\n\n const nodes = this._verifyNodeList(nodes_);\n\n const { parentPath } = this;\n if (\n parentPath.isExpressionStatement() ||\n parentPath.isLabeledStatement() ||\n parentPath.isExportNamedDeclaration() ||\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 if (this.node) {\n const node = this.node as t.Expression | t.VariableDeclaration;\n let { scope } = this;\n\n if (scope.path.isPattern()) {\n assertExpression(node);\n\n this.replaceWith(callExpression(arrowFunctionExpression([], node), []));\n (this.get(\"callee.body\") as NodePath<t.Expression>).insertAfter(nodes);\n return [this];\n }\n\n if (isHiddenInSequenceExpression(this)) {\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 // declaraion 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 this._containerInsertAfter(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 = pathCache.get(this.parent);\n for (const [, path] of paths) {\n if (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 this._assertUnremoved();\n\n // @ts-expect-error fixme\n nodes = this._verifyNodeList(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[listKey] as unknown as t.Node | t.Node[],\n listKey,\n key: 0,\n }).setContext(this.context);\n\n return path._containerInsertBefore(\n // @ts-expect-error typings needed to narrow down nodes as t.Node[]\n nodes,\n );\n}\n\nexport function pushContainer<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 this._assertUnremoved();\n\n const verifiedNodes = this._verifyNodeList(\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[listKey];\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 // @ts-expect-error TS cannot infer that container is t.Node[]\n key: container.length,\n }).setContext(this.context);\n\n return path.replaceWithMultiple(verifiedNodes);\n}\n\n/**\n * Hoist the current node to the highest scope possible and return a UID\n * referencing it.\n */\nexport 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"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["arrowFunctionExpression","assertExpression","assignmentExpression","blockStatement","callExpression","cloneNode","expressionStatement","isAssignmentExpression","isCallExpression","isExportNamedDeclaration","isExpression","isIdentifier","isSequenceExpression","isSuper","thisExpression","insertBefore","nodes_","_assertUnremoved","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","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","isPattern","unshift","callee","isPure","isMethod","computed","temp","generateDeclaredUidIdentifier","pushContainer","fromIndex","incrementBy","pathCache","msg","type","NodePath","listKey","setContext","verifiedNodes","replaceWithMultiple","hoist","hoister","PathHoister","run"],"sources":["../../src/path/modification.ts"],"sourcesContent":["// This file contains methods that modify the path/node in some ways.\n\nimport { path as pathCache } from \"../cache\";\nimport PathHoister from \"./lib/hoister\";\nimport NodePath from \"./index\";\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\";\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 this._assertUnremoved();\n\n const nodes = this._verifyNodeList(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 this._containerInsertBefore(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 this.updateSiblingKeys(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 && this.context.queue) {\n path.pushContext(this.context);\n }\n }\n\n const contexts = this._getQueueContexts();\n\n for (const path of paths) {\n path.setScope();\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 this._containerInsert(this.key as number, nodes);\n}\n\nexport function _containerInsertAfter<N extends t.Node>(\n this: NodePath,\n nodes: N[],\n) {\n return this._containerInsert((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 this._assertUnremoved();\n\n if (this.isSequenceExpression()) {\n return last(this.get(\"expressions\")).insertAfter(nodes_);\n }\n\n const nodes = this._verifyNodeList(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 if (this.node) {\n const node = this.node as t.Expression | t.VariableDeclaration;\n let { scope } = this;\n\n if (scope.path.isPattern()) {\n assertExpression(node);\n\n this.replaceWith(callExpression(arrowFunctionExpression([], node), []));\n (this.get(\"callee.body\") as NodePath<t.Expression>).insertAfter(nodes);\n return [this];\n }\n\n if (isHiddenInSequenceExpression(this)) {\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 // declaraion 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 this._containerInsertAfter(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 = pathCache.get(this.parent);\n for (const [, path] of paths) {\n if (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 this._assertUnremoved();\n\n // @ts-expect-error fixme\n nodes = this._verifyNodeList(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[listKey] as unknown as t.Node | t.Node[],\n listKey,\n key: 0,\n }).setContext(this.context);\n\n return path._containerInsertBefore(\n // @ts-expect-error typings needed to narrow down nodes as t.Node[]\n nodes,\n );\n}\n\nexport function pushContainer<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 this._assertUnremoved();\n\n const verifiedNodes = this._verifyNodeList(\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[listKey];\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 // @ts-expect-error TS cannot infer that container is t.Node[]\n key: container.length,\n }).setContext(this.context);\n\n return path.replaceWithMultiple(verifiedNodes);\n}\n\n/**\n * Hoist the current node to the highest scope possible and return a UID\n * referencing it.\n */\nexport 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"],"mappings":"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"}
|
package/lib/scope/index.js
CHANGED
@@ -29,7 +29,6 @@ const {
|
|
29
29
|
isImportDeclaration,
|
30
30
|
isLiteral,
|
31
31
|
isMethod,
|
32
|
-
isModuleDeclaration,
|
33
32
|
isModuleSpecifier,
|
34
33
|
isNullLiteral,
|
35
34
|
isObjectExpression,
|
@@ -54,12 +53,13 @@ const {
|
|
54
53
|
isObjectProperty,
|
55
54
|
isTopicReference,
|
56
55
|
isMetaProperty,
|
57
|
-
isPrivateName
|
56
|
+
isPrivateName,
|
57
|
+
isExportDeclaration
|
58
58
|
} = _t;
|
59
59
|
function gatherNodeParts(node, parts) {
|
60
60
|
switch (node == null ? void 0 : node.type) {
|
61
61
|
default:
|
62
|
-
if (
|
62
|
+
if (isImportDeclaration(node) || isExportDeclaration(node)) {
|
63
63
|
if ((isExportAllDeclaration(node) || isExportNamedDeclaration(node) || isImportDeclaration(node)) && node.source) {
|
64
64
|
gatherNodeParts(node.source, parts);
|
65
65
|
} else if ((isExportNamedDeclaration(node) || isImportDeclaration(node)) && node.specifiers && node.specifiers.length) {
|
@@ -508,9 +508,11 @@ class Scope {
|
|
508
508
|
if (path.node.declare) return;
|
509
509
|
this.registerBinding("let", path);
|
510
510
|
} else if (path.isImportDeclaration()) {
|
511
|
+
const isTypeDeclaration = path.node.importKind === "type" || path.node.importKind === "typeof";
|
511
512
|
const specifiers = path.get("specifiers");
|
512
513
|
for (const specifier of specifiers) {
|
513
|
-
|
514
|
+
const isTypeSpecifier = isTypeDeclaration || specifier.isImportSpecifier() && (specifier.node.importKind === "type" || specifier.node.importKind === "typeof");
|
515
|
+
this.registerBinding(isTypeSpecifier ? "unknown" : "module", specifier);
|
514
516
|
}
|
515
517
|
} else if (path.isExportDeclaration()) {
|
516
518
|
const declar = path.get("declaration");
|
@@ -863,18 +865,25 @@ class Scope {
|
|
863
865
|
hasOwnBinding(name) {
|
864
866
|
return !!this.getOwnBinding(name);
|
865
867
|
}
|
866
|
-
|
868
|
+
|
869
|
+
hasBinding(name, opts) {
|
870
|
+
var _opts, _opts2, _opts3;
|
867
871
|
if (!name) return false;
|
868
872
|
if (this.hasOwnBinding(name)) return true;
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
+
{
|
874
|
+
if (typeof opts === "boolean") opts = {
|
875
|
+
noGlobals: opts
|
876
|
+
};
|
877
|
+
}
|
878
|
+
if (this.parentHasBinding(name, opts)) return true;
|
879
|
+
if (!((_opts = opts) != null && _opts.noUids) && this.hasUid(name)) return true;
|
880
|
+
if (!((_opts2 = opts) != null && _opts2.noGlobals) && Scope.globals.includes(name)) return true;
|
881
|
+
if (!((_opts3 = opts) != null && _opts3.noGlobals) && Scope.contextVariables.includes(name)) return true;
|
873
882
|
return false;
|
874
883
|
}
|
875
|
-
parentHasBinding(name,
|
884
|
+
parentHasBinding(name, opts) {
|
876
885
|
var _this$parent;
|
877
|
-
return (_this$parent = this.parent) == null ? void 0 : _this$parent.hasBinding(name,
|
886
|
+
return (_this$parent = this.parent) == null ? void 0 : _this$parent.hasBinding(name, opts);
|
878
887
|
}
|
879
888
|
|
880
889
|
moveBindingTo(name, scope) {
|
package/lib/scope/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["NOT_LOCAL_BINDING","callExpression","cloneNode","getBindingIdentifiers","identifier","isArrayExpression","isBinary","isClass","isClassBody","isClassDeclaration","isExportAllDeclaration","isExportDefaultDeclaration","isExportNamedDeclaration","isFunctionDeclaration","isIdentifier","isImportDeclaration","isLiteral","isMethod","isModuleDeclaration","isModuleSpecifier","isNullLiteral","isObjectExpression","isProperty","isPureish","isRegExpLiteral","isSuper","isTaggedTemplateExpression","isTemplateLiteral","isThisExpression","isUnaryExpression","isVariableDeclaration","matchesPattern","memberExpression","numericLiteral","toIdentifier","unaryExpression","variableDeclaration","variableDeclarator","isRecordExpression","isTupleExpression","isObjectProperty","isTopicReference","isMetaProperty","isPrivateName","gatherNodeParts","node","parts","type","source","specifiers","length","e","declaration","local","push","value","object","property","name","callee","properties","argument","key","left","id","expression","meta","openingElement","openingFragment","namespace","collectorVisitor","ForStatement","path","declar","get","isVar","scope","parentScope","getFunctionParent","getProgramParent","registerBinding","Declaration","isBlockScoped","isExportDeclaration","parent","registerDeclaration","ImportDeclaration","getBlockParent","ReferencedIdentifier","state","references","ForXStatement","isPattern","constantViolations","ExportDeclaration","exit","binding","getBinding","reference","decl","declarations","Object","keys","LabeledStatement","AssignmentExpression","assignments","UpdateExpression","UnaryExpression","operator","BlockScoped","bindings","CatchClause","Function","params","param","isFunctionExpression","has","ClassExpression","uid","Scope","constructor","block","labels","inited","globals","uids","data","crawling","cached","scopeCache","set","Map","shouldSkip","listKey","parentPath","isScope","parentBlock","hub","traverse","opts","generateDeclaredUidIdentifier","generateUidIdentifier","generateUid","replace","i","_generateUid","hasLabel","hasBinding","hasGlobal","hasReference","program","generateUidBasedOnNode","defaultName","join","slice","generateUidIdentifierBasedOnNode","isStatic","constant","maybeGenerateMemoised","dontPush","checkBlockScopedCollisions","kind","duplicate","buildError","TypeError","rename","oldName","newName","Renamer","_renameFromMap","map","dump","sep","repeat","console","log","violations","toArray","arrayLikeIsIterable","isGenericType","helperName","args","unshift","addHelper","getLabel","registerLabel","label","isLabeledStatement","declare","specifier","buildUndefinedNode","registerConstantViolation","ids","reassign","bindingPath","ReferenceError","declarators","getOuterBindingIdentifiers","getOwnBinding","Binding","addGlobal","hasUid","isPure","constantsOnly","superClass","decorators","body","method","right","elem","elements","prop","computed","static","tag","quasi","expressions","setData","val","getData","removeData","init","crawl","create","programParent","_exploded","visit","enter","typeVisitors","ref","getPatternParent","isBlockStatement","isProgram","isSwitchStatement","isLoop","isCatchClause","isFunction","ensureBlock","unique","blockHoist","_blockHoist","dataKey","declarPath","unshiftContainer","declarator","len","Error","isFunctionParent","isBlockParent","getAllBindings","getAllBindingsOfKind","kinds","bindingIdentifierEquals","getBindingIdentifier","previousPath","isArrowFunctionExpression","getOwnBindingIdentifier","hasOwnBinding","noGlobals","parentHasBinding","includes","contextVariables","moveBindingTo","info","removeOwnBinding","removeBinding","builtin"],"sources":["../../src/scope/index.ts"],"sourcesContent":["import Renamer from \"./lib/renamer\";\nimport type NodePath from \"../path\";\nimport traverse from \"../index\";\nimport type { TraverseOptions } from \"../index\";\nimport Binding from \"./binding\";\nimport type { BindingKind } from \"./binding\";\nimport globals from \"globals\";\nimport {\n NOT_LOCAL_BINDING,\n callExpression,\n cloneNode,\n getBindingIdentifiers,\n identifier,\n isArrayExpression,\n isBinary,\n isClass,\n isClassBody,\n isClassDeclaration,\n isExportAllDeclaration,\n isExportDefaultDeclaration,\n isExportNamedDeclaration,\n isFunctionDeclaration,\n isIdentifier,\n isImportDeclaration,\n isLiteral,\n isMethod,\n isModuleDeclaration,\n isModuleSpecifier,\n isNullLiteral,\n isObjectExpression,\n isProperty,\n isPureish,\n isRegExpLiteral,\n isSuper,\n isTaggedTemplateExpression,\n isTemplateLiteral,\n isThisExpression,\n isUnaryExpression,\n isVariableDeclaration,\n matchesPattern,\n memberExpression,\n numericLiteral,\n toIdentifier,\n unaryExpression,\n variableDeclaration,\n variableDeclarator,\n isRecordExpression,\n isTupleExpression,\n isObjectProperty,\n isTopicReference,\n isMetaProperty,\n isPrivateName,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { scope as scopeCache } from \"../cache\";\nimport type { Visitor } from \"../types\";\n\ntype NodePart = string | number | boolean;\n// Recursively gathers the identifying names of a node.\nfunction gatherNodeParts(node: t.Node, parts: NodePart[]) {\n switch (node?.type) {\n default:\n if (isModuleDeclaration(node)) {\n if (\n (isExportAllDeclaration(node) ||\n isExportNamedDeclaration(node) ||\n isImportDeclaration(node)) &&\n node.source\n ) {\n gatherNodeParts(node.source, parts);\n } else if (\n (isExportNamedDeclaration(node) || isImportDeclaration(node)) &&\n node.specifiers &&\n node.specifiers.length\n ) {\n for (const e of node.specifiers) gatherNodeParts(e, parts);\n } else if (\n (isExportDefaultDeclaration(node) ||\n isExportNamedDeclaration(node)) &&\n node.declaration\n ) {\n gatherNodeParts(node.declaration, parts);\n }\n } else if (isModuleSpecifier(node)) {\n // todo(flow->ts): should condition instead be:\n // ```\n // t.isExportSpecifier(node) ||\n // t.isImportDefaultSpecifier(node) ||\n // t.isImportNamespaceSpecifier(node) ||\n // t.isImportSpecifier(node)\n // ```\n // allowing only nodes with `.local`?\n // @ts-expect-error todo(flow->ts)\n gatherNodeParts(node.local, parts);\n } else if (\n isLiteral(node) &&\n !isNullLiteral(node) &&\n !isRegExpLiteral(node) &&\n !isTemplateLiteral(node)\n ) {\n parts.push(node.value);\n }\n break;\n\n case \"MemberExpression\":\n case \"OptionalMemberExpression\":\n case \"JSXMemberExpression\":\n gatherNodeParts(node.object, parts);\n gatherNodeParts(node.property, parts);\n break;\n\n case \"Identifier\":\n case \"JSXIdentifier\":\n parts.push(node.name);\n break;\n\n case \"CallExpression\":\n case \"OptionalCallExpression\":\n case \"NewExpression\":\n gatherNodeParts(node.callee, parts);\n break;\n\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n for (const e of node.properties) {\n gatherNodeParts(e, parts);\n }\n break;\n\n case \"SpreadElement\":\n case \"RestElement\":\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"ObjectProperty\":\n case \"ObjectMethod\":\n case \"ClassProperty\":\n case \"ClassMethod\":\n case \"ClassPrivateProperty\":\n case \"ClassPrivateMethod\":\n gatherNodeParts(node.key, parts);\n break;\n\n case \"ThisExpression\":\n parts.push(\"this\");\n break;\n\n case \"Super\":\n parts.push(\"super\");\n break;\n\n case \"Import\":\n parts.push(\"import\");\n break;\n\n case \"DoExpression\":\n parts.push(\"do\");\n break;\n\n case \"YieldExpression\":\n parts.push(\"yield\");\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"AwaitExpression\":\n parts.push(\"await\");\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"AssignmentExpression\":\n gatherNodeParts(node.left, parts);\n break;\n\n case \"VariableDeclarator\":\n gatherNodeParts(node.id, parts);\n break;\n\n case \"FunctionExpression\":\n case \"FunctionDeclaration\":\n case \"ClassExpression\":\n case \"ClassDeclaration\":\n gatherNodeParts(node.id, parts);\n break;\n\n case \"PrivateName\":\n gatherNodeParts(node.id, parts);\n break;\n\n case \"ParenthesizedExpression\":\n gatherNodeParts(node.expression, parts);\n break;\n\n case \"UnaryExpression\":\n case \"UpdateExpression\":\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"MetaProperty\":\n gatherNodeParts(node.meta, parts);\n gatherNodeParts(node.property, parts);\n break;\n\n case \"JSXElement\":\n gatherNodeParts(node.openingElement, parts);\n break;\n\n case \"JSXOpeningElement\":\n gatherNodeParts(node.name, parts);\n break;\n\n case \"JSXFragment\":\n gatherNodeParts(node.openingFragment, parts);\n break;\n\n case \"JSXOpeningFragment\":\n parts.push(\"Fragment\");\n break;\n\n case \"JSXNamespacedName\":\n gatherNodeParts(node.namespace, parts);\n gatherNodeParts(node.name, parts);\n break;\n }\n}\n\n//\ninterface CollectVisitorState {\n assignments: NodePath<t.AssignmentExpression>[];\n references: NodePath<t.Identifier | t.JSXIdentifier>[];\n constantViolations: NodePath[];\n}\n\nconst collectorVisitor: Visitor<CollectVisitorState> = {\n ForStatement(path) {\n const declar = path.get(\"init\");\n // delegate block scope handling to the `BlockScoped` method\n if (declar.isVar()) {\n const { scope } = path;\n const parentScope = scope.getFunctionParent() || scope.getProgramParent();\n parentScope.registerBinding(\"var\", declar);\n }\n },\n\n Declaration(path) {\n // delegate block scope handling to the `BlockScoped` method\n if (path.isBlockScoped()) return;\n\n // delegate import handing to the `ImportDeclaration` method\n if (path.isImportDeclaration()) return;\n\n // this will be hit again once we traverse into it after this iteration\n if (path.isExportDeclaration()) return;\n\n // we've ran into a declaration!\n const parent =\n path.scope.getFunctionParent() || path.scope.getProgramParent();\n parent.registerDeclaration(path);\n },\n\n ImportDeclaration(path) {\n // import may only appear in the top level or inside a module/namespace (for TS/flow)\n const parent = path.scope.getBlockParent();\n\n parent.registerDeclaration(path);\n },\n\n ReferencedIdentifier(path, state) {\n state.references.push(path);\n },\n\n ForXStatement(path, state) {\n const left = path.get(\"left\");\n if (left.isPattern() || left.isIdentifier()) {\n state.constantViolations.push(path);\n }\n // delegate block scope handling to the `BlockScoped` method\n else if (left.isVar()) {\n const { scope } = path;\n const parentScope = scope.getFunctionParent() || scope.getProgramParent();\n parentScope.registerBinding(\"var\", left);\n }\n },\n\n ExportDeclaration: {\n exit(path) {\n const { node, scope } = path;\n // ExportAllDeclaration does not have `declaration`\n if (isExportAllDeclaration(node)) return;\n const declar = node.declaration;\n if (isClassDeclaration(declar) || isFunctionDeclaration(declar)) {\n const id = declar.id;\n if (!id) return;\n\n const binding = scope.getBinding(id.name);\n binding?.reference(path);\n } else if (isVariableDeclaration(declar)) {\n for (const decl of declar.declarations) {\n for (const name of Object.keys(getBindingIdentifiers(decl))) {\n const binding = scope.getBinding(name);\n binding?.reference(path);\n }\n }\n }\n },\n },\n\n LabeledStatement(path) {\n path.scope.getBlockParent().registerDeclaration(path);\n },\n\n AssignmentExpression(path, state) {\n state.assignments.push(path);\n },\n\n UpdateExpression(path, state) {\n state.constantViolations.push(path);\n },\n\n UnaryExpression(path, state) {\n if (path.node.operator === \"delete\") {\n state.constantViolations.push(path);\n }\n },\n\n BlockScoped(path) {\n let scope = path.scope;\n if (scope.path === path) scope = scope.parent;\n\n const parent = scope.getBlockParent();\n parent.registerDeclaration(path);\n\n // Register class identifier in class' scope if this is a class declaration.\n if (path.isClassDeclaration() && path.node.id) {\n const id = path.node.id;\n const name = id.name;\n\n path.scope.bindings[name] = path.scope.parent.getBinding(name);\n }\n },\n\n CatchClause(path) {\n path.scope.registerBinding(\"let\", path);\n },\n\n Function(path) {\n const params: Array<NodePath> = path.get(\"params\");\n for (const param of params) {\n path.scope.registerBinding(\"param\", param);\n }\n\n // Register function expression id after params. When the id\n // collides with a function param, the id effectively can't be\n // referenced: here we registered it as a constantViolation\n if (\n path.isFunctionExpression() &&\n path.has(\"id\") &&\n // @ts-expect-error Fixme: document symbol ast properties\n !path.get(\"id\").node[NOT_LOCAL_BINDING]\n ) {\n path.scope.registerBinding(\"local\", path.get(\"id\"), path);\n }\n },\n\n ClassExpression(path) {\n if (\n path.has(\"id\") &&\n // @ts-expect-error Fixme: document symbol ast properties\n !path.get(\"id\").node[NOT_LOCAL_BINDING]\n ) {\n path.scope.registerBinding(\"local\", path);\n }\n },\n};\n\nlet uid = 0;\n\nexport type { Binding };\n\nexport default class Scope {\n uid;\n\n path: NodePath;\n block: t.Pattern | t.Scopable;\n\n labels;\n inited;\n\n bindings: { [name: string]: Binding };\n references: { [name: string]: true };\n globals: { [name: string]: t.Identifier | t.JSXIdentifier };\n uids: { [name: string]: boolean };\n data: { [key: string | symbol]: unknown };\n crawling: boolean;\n\n /**\n * This searches the current \"scope\" and collects all references/bindings\n * within.\n */\n constructor(path: NodePath<t.Pattern | t.Scopable>) {\n const { node } = path;\n const cached = scopeCache.get(node);\n // Sometimes, a scopable path is placed higher in the AST tree.\n // In these cases, have to create a new Scope.\n if (cached?.path === path) {\n return cached;\n }\n scopeCache.set(node, this);\n\n this.uid = uid++;\n\n this.block = node;\n this.path = path;\n\n this.labels = new Map();\n this.inited = false;\n }\n\n /**\n * Globals.\n */\n\n static globals = Object.keys(globals.builtin);\n\n /**\n * Variables available in current context.\n */\n\n static contextVariables = [\"arguments\", \"undefined\", \"Infinity\", \"NaN\"];\n\n get parent() {\n let parent,\n path = this.path;\n do {\n // Skip method scope if coming from inside computed key or decorator expression\n const shouldSkip = path.key === \"key\" || path.listKey === \"decorators\";\n path = path.parentPath;\n if (shouldSkip && path.isMethod()) path = path.parentPath;\n if (path && path.isScope()) parent = path;\n } while (path && !parent);\n\n return parent?.scope;\n }\n\n get parentBlock() {\n return this.path.parent;\n }\n\n get hub() {\n return this.path.hub;\n }\n\n traverse<S>(\n node: t.Node | t.Node[],\n opts: TraverseOptions<S>,\n state: S,\n ): void;\n traverse(node: t.Node | t.Node[], opts?: TraverseOptions, state?: any): void;\n /**\n * Traverse node with current scope and path.\n */\n traverse<S>(node: any, opts: any, state?: S) {\n traverse(node, opts, this, state, this.path);\n }\n\n /**\n * Generate a unique identifier and add it to the current scope.\n */\n\n generateDeclaredUidIdentifier(name?: string) {\n const id = this.generateUidIdentifier(name);\n this.push({ id });\n return cloneNode(id);\n }\n\n /**\n * Generate a unique identifier.\n */\n\n generateUidIdentifier(name?: string) {\n return identifier(this.generateUid(name));\n }\n\n /**\n * Generate a unique `_id1` binding.\n */\n\n generateUid(name: string = \"temp\"): string {\n name = toIdentifier(name)\n .replace(/^_+/, \"\")\n .replace(/[0-9]+$/g, \"\");\n\n let uid;\n let i = 1;\n do {\n uid = this._generateUid(name, i);\n i++;\n } while (\n this.hasLabel(uid) ||\n this.hasBinding(uid) ||\n this.hasGlobal(uid) ||\n this.hasReference(uid)\n );\n\n const program = this.getProgramParent();\n program.references[uid] = true;\n program.uids[uid] = true;\n\n return uid;\n }\n\n /**\n * Generate an `_id1`.\n */\n\n _generateUid(name: string, i: number) {\n let id = name;\n if (i > 1) id += i;\n return `_${id}`;\n }\n\n generateUidBasedOnNode(node: t.Node, defaultName?: string) {\n const parts: NodePart[] = [];\n gatherNodeParts(node, parts);\n\n let id = parts.join(\"$\");\n id = id.replace(/^_/, \"\") || defaultName || \"ref\";\n\n return this.generateUid(id.slice(0, 20));\n }\n\n /**\n * Generate a unique identifier based on a node.\n */\n\n generateUidIdentifierBasedOnNode(node: t.Node, defaultName?: string) {\n return identifier(this.generateUidBasedOnNode(node, defaultName));\n }\n\n /**\n * Determine whether evaluating the specific input `node` is a consequenceless reference. ie.\n * evaluating it wont result in potentially arbitrary code from being ran. The following are\n * allowed and determined not to cause side effects:\n *\n * - `this` expressions\n * - `super` expressions\n * - Bound identifiers\n */\n\n isStatic(node: t.Node): boolean {\n if (isThisExpression(node) || isSuper(node) || isTopicReference(node)) {\n return true;\n }\n\n if (isIdentifier(node)) {\n const binding = this.getBinding(node.name);\n if (binding) {\n return binding.constant;\n } else {\n return this.hasBinding(node.name);\n }\n }\n\n return false;\n }\n\n /**\n * Possibly generate a memoised identifier if it is not static and has consequences.\n */\n\n maybeGenerateMemoised(node: t.Node, dontPush?: boolean) {\n if (this.isStatic(node)) {\n return null;\n } else {\n const id = this.generateUidIdentifierBasedOnNode(node);\n if (!dontPush) {\n this.push({ id });\n return cloneNode(id);\n }\n return id;\n }\n }\n\n checkBlockScopedCollisions(\n local: Binding,\n kind: BindingKind,\n name: string,\n id: any,\n ) {\n // ignore parameters\n if (kind === \"param\") return;\n\n // Ignore existing binding if it's the name of the current function or\n // class expression\n if (local.kind === \"local\") return;\n\n const duplicate =\n // don't allow duplicate bindings to exist alongside\n kind === \"let\" ||\n local.kind === \"let\" ||\n local.kind === \"const\" ||\n local.kind === \"module\" ||\n // don't allow a local of param with a kind of let\n (local.kind === \"param\" && kind === \"const\");\n\n if (duplicate) {\n throw this.hub.buildError(\n id,\n `Duplicate declaration \"${name}\"`,\n TypeError,\n );\n }\n }\n\n rename(oldName: string, newName?: string, block?: t.Pattern | t.Scopable) {\n const binding = this.getBinding(oldName);\n if (binding) {\n newName = newName || this.generateUidIdentifier(oldName).name;\n return new Renamer(binding, oldName, newName).rename(block);\n }\n }\n\n /** @deprecated Not used in our codebase */\n _renameFromMap(\n map: Record<string | symbol, unknown>,\n oldName: string | symbol,\n newName: string | symbol,\n value: unknown,\n ) {\n if (map[oldName]) {\n map[newName] = value;\n map[oldName] = null;\n }\n }\n\n dump() {\n const sep = \"-\".repeat(60);\n console.log(sep);\n let scope: Scope = this;\n do {\n console.log(\"#\", scope.block.type);\n for (const name of Object.keys(scope.bindings)) {\n const binding = scope.bindings[name];\n console.log(\" -\", name, {\n constant: binding.constant,\n references: binding.references,\n violations: binding.constantViolations.length,\n kind: binding.kind,\n });\n }\n } while ((scope = scope.parent));\n console.log(sep);\n }\n\n // TODO: (Babel 8) Split i in two parameters, and use an object of flags\n toArray(\n node: t.Node,\n i?: number | boolean,\n arrayLikeIsIterable?: boolean | void,\n ) {\n if (isIdentifier(node)) {\n const binding = this.getBinding(node.name);\n if (binding?.constant && binding.path.isGenericType(\"Array\")) {\n return node;\n }\n }\n\n if (isArrayExpression(node)) {\n return node;\n }\n\n if (isIdentifier(node, { name: \"arguments\" })) {\n return callExpression(\n memberExpression(\n memberExpression(\n memberExpression(identifier(\"Array\"), identifier(\"prototype\")),\n identifier(\"slice\"),\n ),\n identifier(\"call\"),\n ),\n [node],\n );\n }\n\n let helperName;\n const args = [node];\n if (i === true) {\n // Used in array-spread to create an array.\n helperName = \"toConsumableArray\";\n } else if (typeof i === \"number\") {\n args.push(numericLiteral(i));\n\n // Used in array-rest to create an array from a subset of an iterable.\n helperName = \"slicedToArray\";\n // TODO if (this.hub.isLoose(\"es6.forOf\")) helperName += \"-loose\";\n } else {\n // Used in array-rest to create an array\n helperName = \"toArray\";\n }\n\n if (arrayLikeIsIterable) {\n args.unshift(this.hub.addHelper(helperName));\n helperName = \"maybeArrayLike\";\n }\n\n // @ts-expect-error todo(flow->ts): t.Node is not valid to use in args, function argument typeneeds to be clarified\n return callExpression(this.hub.addHelper(helperName), args);\n }\n\n hasLabel(name: string) {\n return !!this.getLabel(name);\n }\n\n getLabel(name: string) {\n return this.labels.get(name);\n }\n\n registerLabel(path: NodePath<t.LabeledStatement>) {\n this.labels.set(path.node.label.name, path);\n }\n\n registerDeclaration(path: NodePath) {\n if (path.isLabeledStatement()) {\n this.registerLabel(path);\n } else if (path.isFunctionDeclaration()) {\n this.registerBinding(\"hoisted\", path.get(\"id\"), path);\n } else if (path.isVariableDeclaration()) {\n const declarations = path.get(\"declarations\");\n const { kind } = path.node;\n for (const declar of declarations) {\n this.registerBinding(kind === \"using\" ? \"const\" : kind, declar);\n }\n } else if (path.isClassDeclaration()) {\n if (path.node.declare) return;\n this.registerBinding(\"let\", path);\n } else if (path.isImportDeclaration()) {\n const specifiers = path.get(\"specifiers\");\n for (const specifier of specifiers) {\n this.registerBinding(\"module\", specifier);\n }\n } else if (path.isExportDeclaration()) {\n // todo: improve babel-types\n const declar = path.get(\"declaration\") as NodePath;\n if (\n declar.isClassDeclaration() ||\n declar.isFunctionDeclaration() ||\n declar.isVariableDeclaration()\n ) {\n this.registerDeclaration(declar);\n }\n } else {\n this.registerBinding(\"unknown\", path);\n }\n }\n\n buildUndefinedNode() {\n return unaryExpression(\"void\", numericLiteral(0), true);\n }\n\n registerConstantViolation(path: NodePath) {\n const ids = path.getBindingIdentifiers();\n for (const name of Object.keys(ids)) {\n const binding = this.getBinding(name);\n if (binding) binding.reassign(path);\n }\n }\n\n registerBinding(\n kind: Binding[\"kind\"],\n path: NodePath,\n bindingPath: NodePath = path,\n ) {\n if (!kind) throw new ReferenceError(\"no `kind`\");\n\n if (path.isVariableDeclaration()) {\n const declarators: Array<NodePath> = path.get(\"declarations\");\n for (const declar of declarators) {\n this.registerBinding(kind, declar);\n }\n return;\n }\n\n const parent = this.getProgramParent();\n const ids = path.getOuterBindingIdentifiers(true);\n\n for (const name of Object.keys(ids)) {\n parent.references[name] = true;\n\n for (const id of ids[name]) {\n const local = this.getOwnBinding(name);\n\n if (local) {\n // same identifier so continue safely as we're likely trying to register it\n // multiple times\n if (local.identifier === id) continue;\n\n this.checkBlockScopedCollisions(local, kind, name, id);\n }\n\n // A redeclaration of an existing variable is a modification\n if (local) {\n this.registerConstantViolation(bindingPath);\n } else {\n this.bindings[name] = new Binding({\n identifier: id,\n scope: this,\n path: bindingPath,\n kind: kind,\n });\n }\n }\n }\n }\n\n addGlobal(node: t.Identifier | t.JSXIdentifier) {\n this.globals[node.name] = node;\n }\n\n hasUid(name: string): boolean {\n let scope: Scope = this;\n\n do {\n if (scope.uids[name]) return true;\n } while ((scope = scope.parent));\n\n return false;\n }\n\n hasGlobal(name: string): boolean {\n let scope: Scope = this;\n\n do {\n if (scope.globals[name]) return true;\n } while ((scope = scope.parent));\n\n return false;\n }\n\n hasReference(name: string): boolean {\n return !!this.getProgramParent().references[name];\n }\n\n isPure(node: t.Node, constantsOnly?: boolean): boolean {\n if (isIdentifier(node)) {\n const binding = this.getBinding(node.name);\n if (!binding) return false;\n if (constantsOnly) return binding.constant;\n return true;\n } else if (\n isThisExpression(node) ||\n isMetaProperty(node) ||\n isTopicReference(node) ||\n isPrivateName(node)\n ) {\n return true;\n } else if (isClass(node)) {\n if (node.superClass && !this.isPure(node.superClass, constantsOnly)) {\n return false;\n }\n if (node.decorators?.length > 0) {\n return false;\n }\n return this.isPure(node.body, constantsOnly);\n } else if (isClassBody(node)) {\n for (const method of node.body) {\n if (!this.isPure(method, constantsOnly)) return false;\n }\n return true;\n } else if (isBinary(node)) {\n return (\n this.isPure(node.left, constantsOnly) &&\n this.isPure(node.right, constantsOnly)\n );\n } else if (isArrayExpression(node) || isTupleExpression(node)) {\n for (const elem of node.elements) {\n if (elem !== null && !this.isPure(elem, constantsOnly)) return false;\n }\n return true;\n } else if (isObjectExpression(node) || isRecordExpression(node)) {\n for (const prop of node.properties) {\n if (!this.isPure(prop, constantsOnly)) return false;\n }\n return true;\n } else if (isMethod(node)) {\n if (node.computed && !this.isPure(node.key, constantsOnly)) return false;\n if (node.decorators?.length > 0) {\n return false;\n }\n return true;\n } else if (isProperty(node)) {\n // @ts-expect-error todo(flow->ts): computed in not present on private properties\n if (node.computed && !this.isPure(node.key, constantsOnly)) return false;\n if (node.decorators?.length > 0) {\n return false;\n }\n if (isObjectProperty(node) || node.static) {\n if (node.value !== null && !this.isPure(node.value, constantsOnly)) {\n return false;\n }\n }\n return true;\n } else if (isUnaryExpression(node)) {\n return this.isPure(node.argument, constantsOnly);\n } else if (isTaggedTemplateExpression(node)) {\n return (\n matchesPattern(node.tag, \"String.raw\") &&\n !this.hasBinding(\"String\", true) &&\n this.isPure(node.quasi, constantsOnly)\n );\n } else if (isTemplateLiteral(node)) {\n for (const expression of node.expressions) {\n if (!this.isPure(expression, constantsOnly)) return false;\n }\n return true;\n } else {\n return isPureish(node);\n }\n }\n\n /**\n * Set some arbitrary data on the current scope.\n */\n\n setData(key: string | symbol, val: any) {\n return (this.data[key] = val);\n }\n\n /**\n * Recursively walk up scope tree looking for the data `key`.\n */\n\n getData(key: string | symbol): any {\n let scope: Scope = this;\n do {\n const data = scope.data[key];\n if (data != null) return data;\n } while ((scope = scope.parent));\n }\n\n /**\n * Recursively walk up scope tree looking for the data `key` and if it exists,\n * remove it.\n */\n\n removeData(key: string) {\n let scope: Scope = this;\n do {\n const data = scope.data[key];\n if (data != null) scope.data[key] = null;\n } while ((scope = scope.parent));\n }\n\n init() {\n if (!this.inited) {\n this.inited = true;\n this.crawl();\n }\n }\n\n crawl() {\n const path = this.path;\n\n this.references = Object.create(null);\n this.bindings = Object.create(null);\n this.globals = Object.create(null);\n this.uids = Object.create(null);\n this.data = Object.create(null);\n\n const programParent = this.getProgramParent();\n if (programParent.crawling) return;\n\n const state: CollectVisitorState = {\n references: [],\n constantViolations: [],\n assignments: [],\n };\n\n this.crawling = true;\n // traverse does not visit the root node, here we explicitly collect\n // root node binding info when the root is not a Program.\n if (path.type !== \"Program\" && collectorVisitor._exploded) {\n // @ts-expect-error when collectorVisitor is exploded, `enter` always exists\n for (const visit of collectorVisitor.enter) {\n visit(path, state);\n }\n const typeVisitors = collectorVisitor[path.type];\n if (typeVisitors) {\n // @ts-expect-error when collectorVisitor is exploded, `enter` always exists\n for (const visit of typeVisitors.enter) {\n visit(path, state);\n }\n }\n }\n path.traverse(collectorVisitor, state);\n this.crawling = false;\n\n // register assignments\n for (const path of state.assignments) {\n // register undeclared bindings as globals\n const ids = path.getBindingIdentifiers();\n for (const name of Object.keys(ids)) {\n if (path.scope.getBinding(name)) continue;\n programParent.addGlobal(ids[name]);\n }\n\n // register as constant violation\n path.scope.registerConstantViolation(path);\n }\n\n // register references\n for (const ref of state.references) {\n const binding = ref.scope.getBinding(ref.node.name);\n if (binding) {\n binding.reference(ref);\n } else {\n programParent.addGlobal(ref.node);\n }\n }\n\n // register constant violations\n for (const path of state.constantViolations) {\n path.scope.registerConstantViolation(path);\n }\n }\n\n push(opts: {\n id: t.LVal;\n init?: t.Expression;\n unique?: boolean;\n _blockHoist?: number | undefined;\n kind?: \"var\" | \"let\" | \"const\";\n }) {\n let path = this.path;\n\n if (path.isPattern()) {\n path = this.getPatternParent().path;\n } else if (!path.isBlockStatement() && !path.isProgram()) {\n path = this.getBlockParent().path;\n }\n\n if (path.isSwitchStatement()) {\n path = (this.getFunctionParent() || this.getProgramParent()).path;\n }\n\n if (path.isLoop() || path.isCatchClause() || path.isFunction()) {\n // @ts-expect-error TS can not infer NodePath<Loop> | NodePath<CatchClause> as NodePath<Loop | CatchClause>\n path.ensureBlock();\n // @ts-expect-error todo(flow->ts): improve types\n path = path.get(\"body\");\n }\n\n const unique = opts.unique;\n const kind = opts.kind || \"var\";\n const blockHoist = opts._blockHoist == null ? 2 : opts._blockHoist;\n\n const dataKey = `declaration:${kind}:${blockHoist}`;\n let declarPath = !unique && path.getData(dataKey);\n\n if (!declarPath) {\n const declar = variableDeclaration(kind, []);\n // @ts-expect-error todo(flow->ts): avoid modifying nodes\n declar._blockHoist = blockHoist;\n\n [declarPath] = (path as NodePath<t.BlockStatement>).unshiftContainer(\n \"body\",\n [declar],\n );\n if (!unique) path.setData(dataKey, declarPath);\n }\n\n const declarator = variableDeclarator(opts.id, opts.init);\n const len = declarPath.node.declarations.push(declarator);\n path.scope.registerBinding(kind, declarPath.get(\"declarations\")[len - 1]);\n }\n\n /**\n * Walk up to the top of the scope tree and get the `Program`.\n */\n\n getProgramParent() {\n let scope: Scope = this;\n do {\n if (scope.path.isProgram()) {\n return scope;\n }\n } while ((scope = scope.parent));\n throw new Error(\"Couldn't find a Program\");\n }\n\n /**\n * Walk up the scope tree until we hit either a Function or return null.\n */\n\n getFunctionParent(): Scope | null {\n let scope: Scope = this;\n do {\n if (scope.path.isFunctionParent()) {\n return scope;\n }\n } while ((scope = scope.parent));\n return null;\n }\n\n /**\n * Walk up the scope tree until we hit either a BlockStatement/Loop/Program/Function/Switch or reach the\n * very top and hit Program.\n */\n\n getBlockParent() {\n let scope: Scope = this;\n do {\n if (scope.path.isBlockParent()) {\n return scope;\n }\n } while ((scope = scope.parent));\n throw new Error(\n \"We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...\",\n );\n }\n\n /**\n * Walk up from a pattern scope (function param initializer) until we hit a non-pattern scope,\n * then returns its block parent\n * @returns An ancestry scope whose path is a block parent\n */\n getPatternParent() {\n let scope: Scope = this;\n do {\n if (!scope.path.isPattern()) {\n return scope.getBlockParent();\n }\n } while ((scope = scope.parent.parent));\n throw new Error(\n \"We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...\",\n );\n }\n\n /**\n * Walks the scope tree and gathers **all** bindings.\n */\n\n getAllBindings(): Record<string, Binding> {\n const ids = Object.create(null);\n\n let scope: Scope = this;\n do {\n for (const key of Object.keys(scope.bindings)) {\n if (key in ids === false) {\n ids[key] = scope.bindings[key];\n }\n }\n scope = scope.parent;\n } while (scope);\n\n return ids;\n }\n\n /**\n * Walks the scope tree and gathers all declarations of `kind`.\n */\n\n getAllBindingsOfKind(...kinds: string[]): Record<string, Binding> {\n const ids = Object.create(null);\n\n for (const kind of kinds) {\n let scope: Scope = this;\n do {\n for (const name of Object.keys(scope.bindings)) {\n const binding = scope.bindings[name];\n if (binding.kind === kind) ids[name] = binding;\n }\n scope = scope.parent;\n } while (scope);\n }\n\n return ids;\n }\n\n bindingIdentifierEquals(name: string, node: t.Node): boolean {\n return this.getBindingIdentifier(name) === node;\n }\n\n getBinding(name: string): Binding | undefined {\n let scope: Scope = this;\n let previousPath;\n\n do {\n const binding = scope.getOwnBinding(name);\n if (binding) {\n // Check if a pattern is a part of parameter expressions.\n // Note: for performance reason we skip checking previousPath.parentPath.isFunction()\n // because `scope.path` is validated as scope in packages/babel-types/src/validators/isScope.js\n // That is, if a scope path is pattern, its parent must be Function/CatchClause\n\n // Spec 9.2.10.28: The closure created by this expression should not have visibility of\n // declarations in the function body. If the binding is not a `param`-kind (as function parameters)\n // or `local`-kind (as id in function expression),\n // then it must be defined inside the function body, thus it should be skipped\n if (\n previousPath?.isPattern() &&\n binding.kind !== \"param\" &&\n binding.kind !== \"local\"\n ) {\n // do nothing\n } else {\n return binding;\n }\n } else if (\n !binding &&\n name === \"arguments\" &&\n scope.path.isFunction() &&\n !scope.path.isArrowFunctionExpression()\n ) {\n break;\n }\n previousPath = scope.path;\n } while ((scope = scope.parent));\n }\n\n getOwnBinding(name: string): Binding | undefined {\n return this.bindings[name];\n }\n\n // todo: return probably can be undefined…\n getBindingIdentifier(name: string): t.Identifier {\n return this.getBinding(name)?.identifier;\n }\n\n // todo: flow->ts return probably can be undefined\n getOwnBindingIdentifier(name: string): t.Identifier {\n const binding = this.bindings[name];\n return binding?.identifier;\n }\n\n hasOwnBinding(name: string) {\n return !!this.getOwnBinding(name);\n }\n\n hasBinding(name: string, noGlobals?: boolean) {\n if (!name) return false;\n if (this.hasOwnBinding(name)) return true;\n if (this.parentHasBinding(name, noGlobals)) return true;\n if (this.hasUid(name)) return true;\n if (!noGlobals && Scope.globals.includes(name)) return true;\n if (!noGlobals && Scope.contextVariables.includes(name)) return true;\n return false;\n }\n\n parentHasBinding(name: string, noGlobals?: boolean) {\n return this.parent?.hasBinding(name, noGlobals);\n }\n\n /**\n * Move a binding of `name` to another `scope`.\n */\n\n moveBindingTo(name: string, scope: Scope) {\n const info = this.getBinding(name);\n if (info) {\n info.scope.removeOwnBinding(name);\n info.scope = scope;\n scope.bindings[name] = info;\n }\n }\n\n removeOwnBinding(name: string) {\n delete this.bindings[name];\n }\n\n removeBinding(name: string) {\n // clear literal binding\n this.getBinding(name)?.scope.removeOwnBinding(name);\n\n // clear uids with this name - https://github.com/babel/babel/issues/2101\n let scope: Scope = this;\n do {\n if (scope.uids[name]) {\n scope.uids[name] = false;\n }\n } while ((scope = scope.parent));\n }\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["NOT_LOCAL_BINDING","callExpression","cloneNode","getBindingIdentifiers","identifier","isArrayExpression","isBinary","isClass","isClassBody","isClassDeclaration","isExportAllDeclaration","isExportDefaultDeclaration","isExportNamedDeclaration","isFunctionDeclaration","isIdentifier","isImportDeclaration","isLiteral","isMethod","isModuleSpecifier","isNullLiteral","isObjectExpression","isProperty","isPureish","isRegExpLiteral","isSuper","isTaggedTemplateExpression","isTemplateLiteral","isThisExpression","isUnaryExpression","isVariableDeclaration","matchesPattern","memberExpression","numericLiteral","toIdentifier","unaryExpression","variableDeclaration","variableDeclarator","isRecordExpression","isTupleExpression","isObjectProperty","isTopicReference","isMetaProperty","isPrivateName","isExportDeclaration","gatherNodeParts","node","parts","type","source","specifiers","length","e","declaration","local","push","value","object","property","name","callee","properties","argument","key","left","id","expression","meta","openingElement","openingFragment","namespace","collectorVisitor","ForStatement","path","declar","get","isVar","scope","parentScope","getFunctionParent","getProgramParent","registerBinding","Declaration","isBlockScoped","parent","registerDeclaration","ImportDeclaration","getBlockParent","ReferencedIdentifier","state","references","ForXStatement","isPattern","constantViolations","ExportDeclaration","exit","binding","getBinding","reference","decl","declarations","Object","keys","LabeledStatement","AssignmentExpression","assignments","UpdateExpression","UnaryExpression","operator","BlockScoped","bindings","CatchClause","Function","params","param","isFunctionExpression","has","ClassExpression","uid","Scope","constructor","block","labels","inited","globals","uids","data","crawling","cached","scopeCache","set","Map","shouldSkip","listKey","parentPath","isScope","parentBlock","hub","traverse","opts","generateDeclaredUidIdentifier","generateUidIdentifier","generateUid","replace","i","_generateUid","hasLabel","hasBinding","hasGlobal","hasReference","program","generateUidBasedOnNode","defaultName","join","slice","generateUidIdentifierBasedOnNode","isStatic","constant","maybeGenerateMemoised","dontPush","checkBlockScopedCollisions","kind","duplicate","buildError","TypeError","rename","oldName","newName","Renamer","_renameFromMap","map","dump","sep","repeat","console","log","violations","toArray","arrayLikeIsIterable","isGenericType","helperName","args","unshift","addHelper","getLabel","registerLabel","label","isLabeledStatement","declare","isTypeDeclaration","importKind","specifier","isTypeSpecifier","isImportSpecifier","buildUndefinedNode","registerConstantViolation","ids","reassign","bindingPath","ReferenceError","declarators","getOuterBindingIdentifiers","getOwnBinding","Binding","addGlobal","hasUid","isPure","constantsOnly","superClass","decorators","body","method","right","elem","elements","prop","computed","static","tag","quasi","expressions","setData","val","getData","removeData","init","crawl","create","programParent","_exploded","visit","enter","typeVisitors","ref","getPatternParent","isBlockStatement","isProgram","isSwitchStatement","isLoop","isCatchClause","isFunction","ensureBlock","unique","blockHoist","_blockHoist","dataKey","declarPath","unshiftContainer","declarator","len","Error","isFunctionParent","isBlockParent","getAllBindings","getAllBindingsOfKind","kinds","bindingIdentifierEquals","getBindingIdentifier","previousPath","isArrowFunctionExpression","getOwnBindingIdentifier","hasOwnBinding","noGlobals","parentHasBinding","noUids","includes","contextVariables","moveBindingTo","info","removeOwnBinding","removeBinding","builtin"],"sources":["../../src/scope/index.ts"],"sourcesContent":["import Renamer from \"./lib/renamer\";\nimport type NodePath from \"../path\";\nimport traverse from \"../index\";\nimport type { TraverseOptions } from \"../index\";\nimport Binding from \"./binding\";\nimport type { BindingKind } from \"./binding\";\nimport globals from \"globals\";\nimport {\n NOT_LOCAL_BINDING,\n callExpression,\n cloneNode,\n getBindingIdentifiers,\n identifier,\n isArrayExpression,\n isBinary,\n isClass,\n isClassBody,\n isClassDeclaration,\n isExportAllDeclaration,\n isExportDefaultDeclaration,\n isExportNamedDeclaration,\n isFunctionDeclaration,\n isIdentifier,\n isImportDeclaration,\n isLiteral,\n isMethod,\n isModuleSpecifier,\n isNullLiteral,\n isObjectExpression,\n isProperty,\n isPureish,\n isRegExpLiteral,\n isSuper,\n isTaggedTemplateExpression,\n isTemplateLiteral,\n isThisExpression,\n isUnaryExpression,\n isVariableDeclaration,\n matchesPattern,\n memberExpression,\n numericLiteral,\n toIdentifier,\n unaryExpression,\n variableDeclaration,\n variableDeclarator,\n isRecordExpression,\n isTupleExpression,\n isObjectProperty,\n isTopicReference,\n isMetaProperty,\n isPrivateName,\n isExportDeclaration,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { scope as scopeCache } from \"../cache\";\nimport type { Visitor } from \"../types\";\n\ntype NodePart = string | number | boolean;\n// Recursively gathers the identifying names of a node.\nfunction gatherNodeParts(node: t.Node, parts: NodePart[]) {\n switch (node?.type) {\n default:\n if (isImportDeclaration(node) || isExportDeclaration(node)) {\n if (\n (isExportAllDeclaration(node) ||\n isExportNamedDeclaration(node) ||\n isImportDeclaration(node)) &&\n node.source\n ) {\n gatherNodeParts(node.source, parts);\n } else if (\n (isExportNamedDeclaration(node) || isImportDeclaration(node)) &&\n node.specifiers &&\n node.specifiers.length\n ) {\n for (const e of node.specifiers) gatherNodeParts(e, parts);\n } else if (\n (isExportDefaultDeclaration(node) ||\n isExportNamedDeclaration(node)) &&\n node.declaration\n ) {\n gatherNodeParts(node.declaration, parts);\n }\n } else if (isModuleSpecifier(node)) {\n // todo(flow->ts): should condition instead be:\n // ```\n // t.isExportSpecifier(node) ||\n // t.isImportDefaultSpecifier(node) ||\n // t.isImportNamespaceSpecifier(node) ||\n // t.isImportSpecifier(node)\n // ```\n // allowing only nodes with `.local`?\n // @ts-expect-error todo(flow->ts)\n gatherNodeParts(node.local, parts);\n } else if (\n isLiteral(node) &&\n !isNullLiteral(node) &&\n !isRegExpLiteral(node) &&\n !isTemplateLiteral(node)\n ) {\n parts.push(node.value);\n }\n break;\n\n case \"MemberExpression\":\n case \"OptionalMemberExpression\":\n case \"JSXMemberExpression\":\n gatherNodeParts(node.object, parts);\n gatherNodeParts(node.property, parts);\n break;\n\n case \"Identifier\":\n case \"JSXIdentifier\":\n parts.push(node.name);\n break;\n\n case \"CallExpression\":\n case \"OptionalCallExpression\":\n case \"NewExpression\":\n gatherNodeParts(node.callee, parts);\n break;\n\n case \"ObjectExpression\":\n case \"ObjectPattern\":\n for (const e of node.properties) {\n gatherNodeParts(e, parts);\n }\n break;\n\n case \"SpreadElement\":\n case \"RestElement\":\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"ObjectProperty\":\n case \"ObjectMethod\":\n case \"ClassProperty\":\n case \"ClassMethod\":\n case \"ClassPrivateProperty\":\n case \"ClassPrivateMethod\":\n gatherNodeParts(node.key, parts);\n break;\n\n case \"ThisExpression\":\n parts.push(\"this\");\n break;\n\n case \"Super\":\n parts.push(\"super\");\n break;\n\n case \"Import\":\n parts.push(\"import\");\n break;\n\n case \"DoExpression\":\n parts.push(\"do\");\n break;\n\n case \"YieldExpression\":\n parts.push(\"yield\");\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"AwaitExpression\":\n parts.push(\"await\");\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"AssignmentExpression\":\n gatherNodeParts(node.left, parts);\n break;\n\n case \"VariableDeclarator\":\n gatherNodeParts(node.id, parts);\n break;\n\n case \"FunctionExpression\":\n case \"FunctionDeclaration\":\n case \"ClassExpression\":\n case \"ClassDeclaration\":\n gatherNodeParts(node.id, parts);\n break;\n\n case \"PrivateName\":\n gatherNodeParts(node.id, parts);\n break;\n\n case \"ParenthesizedExpression\":\n gatherNodeParts(node.expression, parts);\n break;\n\n case \"UnaryExpression\":\n case \"UpdateExpression\":\n gatherNodeParts(node.argument, parts);\n break;\n\n case \"MetaProperty\":\n gatherNodeParts(node.meta, parts);\n gatherNodeParts(node.property, parts);\n break;\n\n case \"JSXElement\":\n gatherNodeParts(node.openingElement, parts);\n break;\n\n case \"JSXOpeningElement\":\n gatherNodeParts(node.name, parts);\n break;\n\n case \"JSXFragment\":\n gatherNodeParts(node.openingFragment, parts);\n break;\n\n case \"JSXOpeningFragment\":\n parts.push(\"Fragment\");\n break;\n\n case \"JSXNamespacedName\":\n gatherNodeParts(node.namespace, parts);\n gatherNodeParts(node.name, parts);\n break;\n }\n}\n\n//\ninterface CollectVisitorState {\n assignments: NodePath<t.AssignmentExpression>[];\n references: NodePath<t.Identifier | t.JSXIdentifier>[];\n constantViolations: NodePath[];\n}\n\nconst collectorVisitor: Visitor<CollectVisitorState> = {\n ForStatement(path) {\n const declar = path.get(\"init\");\n // delegate block scope handling to the `BlockScoped` method\n if (declar.isVar()) {\n const { scope } = path;\n const parentScope = scope.getFunctionParent() || scope.getProgramParent();\n parentScope.registerBinding(\"var\", declar);\n }\n },\n\n Declaration(path) {\n // delegate block scope handling to the `BlockScoped` method\n if (path.isBlockScoped()) return;\n\n // delegate import handing to the `ImportDeclaration` method\n if (path.isImportDeclaration()) return;\n\n // this will be hit again once we traverse into it after this iteration\n if (path.isExportDeclaration()) return;\n\n // we've ran into a declaration!\n const parent =\n path.scope.getFunctionParent() || path.scope.getProgramParent();\n parent.registerDeclaration(path);\n },\n\n ImportDeclaration(path) {\n // import may only appear in the top level or inside a module/namespace (for TS/flow)\n const parent = path.scope.getBlockParent();\n\n parent.registerDeclaration(path);\n },\n\n ReferencedIdentifier(path, state) {\n state.references.push(path);\n },\n\n ForXStatement(path, state) {\n const left = path.get(\"left\");\n if (left.isPattern() || left.isIdentifier()) {\n state.constantViolations.push(path);\n }\n // delegate block scope handling to the `BlockScoped` method\n else if (left.isVar()) {\n const { scope } = path;\n const parentScope = scope.getFunctionParent() || scope.getProgramParent();\n parentScope.registerBinding(\"var\", left);\n }\n },\n\n ExportDeclaration: {\n exit(path) {\n const { node, scope } = path;\n // ExportAllDeclaration does not have `declaration`\n if (isExportAllDeclaration(node)) return;\n const declar = node.declaration;\n if (isClassDeclaration(declar) || isFunctionDeclaration(declar)) {\n const id = declar.id;\n if (!id) return;\n\n const binding = scope.getBinding(id.name);\n binding?.reference(path);\n } else if (isVariableDeclaration(declar)) {\n for (const decl of declar.declarations) {\n for (const name of Object.keys(getBindingIdentifiers(decl))) {\n const binding = scope.getBinding(name);\n binding?.reference(path);\n }\n }\n }\n },\n },\n\n LabeledStatement(path) {\n path.scope.getBlockParent().registerDeclaration(path);\n },\n\n AssignmentExpression(path, state) {\n state.assignments.push(path);\n },\n\n UpdateExpression(path, state) {\n state.constantViolations.push(path);\n },\n\n UnaryExpression(path, state) {\n if (path.node.operator === \"delete\") {\n state.constantViolations.push(path);\n }\n },\n\n BlockScoped(path) {\n let scope = path.scope;\n if (scope.path === path) scope = scope.parent;\n\n const parent = scope.getBlockParent();\n parent.registerDeclaration(path);\n\n // Register class identifier in class' scope if this is a class declaration.\n if (path.isClassDeclaration() && path.node.id) {\n const id = path.node.id;\n const name = id.name;\n\n path.scope.bindings[name] = path.scope.parent.getBinding(name);\n }\n },\n\n CatchClause(path) {\n path.scope.registerBinding(\"let\", path);\n },\n\n Function(path) {\n const params: Array<NodePath> = path.get(\"params\");\n for (const param of params) {\n path.scope.registerBinding(\"param\", param);\n }\n\n // Register function expression id after params. When the id\n // collides with a function param, the id effectively can't be\n // referenced: here we registered it as a constantViolation\n if (\n path.isFunctionExpression() &&\n path.has(\"id\") &&\n // @ts-expect-error Fixme: document symbol ast properties\n !path.get(\"id\").node[NOT_LOCAL_BINDING]\n ) {\n path.scope.registerBinding(\"local\", path.get(\"id\"), path);\n }\n },\n\n ClassExpression(path) {\n if (\n path.has(\"id\") &&\n // @ts-expect-error Fixme: document symbol ast properties\n !path.get(\"id\").node[NOT_LOCAL_BINDING]\n ) {\n path.scope.registerBinding(\"local\", path);\n }\n },\n};\n\nlet uid = 0;\n\nexport type { Binding };\n\nexport default class Scope {\n uid;\n\n path: NodePath;\n block: t.Pattern | t.Scopable;\n\n labels;\n inited;\n\n bindings: { [name: string]: Binding };\n references: { [name: string]: true };\n globals: { [name: string]: t.Identifier | t.JSXIdentifier };\n uids: { [name: string]: boolean };\n data: { [key: string | symbol]: unknown };\n crawling: boolean;\n\n /**\n * This searches the current \"scope\" and collects all references/bindings\n * within.\n */\n constructor(path: NodePath<t.Pattern | t.Scopable>) {\n const { node } = path;\n const cached = scopeCache.get(node);\n // Sometimes, a scopable path is placed higher in the AST tree.\n // In these cases, have to create a new Scope.\n if (cached?.path === path) {\n return cached;\n }\n scopeCache.set(node, this);\n\n this.uid = uid++;\n\n this.block = node;\n this.path = path;\n\n this.labels = new Map();\n this.inited = false;\n }\n\n /**\n * Globals.\n */\n\n static globals = Object.keys(globals.builtin);\n\n /**\n * Variables available in current context.\n */\n\n static contextVariables = [\"arguments\", \"undefined\", \"Infinity\", \"NaN\"];\n\n get parent() {\n let parent,\n path = this.path;\n do {\n // Skip method scope if coming from inside computed key or decorator expression\n const shouldSkip = path.key === \"key\" || path.listKey === \"decorators\";\n path = path.parentPath;\n if (shouldSkip && path.isMethod()) path = path.parentPath;\n if (path && path.isScope()) parent = path;\n } while (path && !parent);\n\n return parent?.scope;\n }\n\n get parentBlock() {\n return this.path.parent;\n }\n\n get hub() {\n return this.path.hub;\n }\n\n traverse<S>(\n node: t.Node | t.Node[],\n opts: TraverseOptions<S>,\n state: S,\n ): void;\n traverse(node: t.Node | t.Node[], opts?: TraverseOptions, state?: any): void;\n /**\n * Traverse node with current scope and path.\n *\n * !!! WARNING !!!\n * This method assumes that `this.path` is the NodePath representing `node`.\n * After running the traversal, the `.parentPath` of the NodePaths\n * corresponding to `node`'s children will be set to `this.path`.\n *\n * There is no good reason to use this method, since the only safe way to use\n * it is equivalent to `scope.path.traverse(opts, state)`.\n */\n traverse<S>(node: any, opts: any, state?: S) {\n traverse(node, opts, this, state, this.path);\n }\n\n /**\n * Generate a unique identifier and add it to the current scope.\n */\n\n generateDeclaredUidIdentifier(name?: string) {\n const id = this.generateUidIdentifier(name);\n this.push({ id });\n return cloneNode(id);\n }\n\n /**\n * Generate a unique identifier.\n */\n\n generateUidIdentifier(name?: string) {\n return identifier(this.generateUid(name));\n }\n\n /**\n * Generate a unique `_id1` binding.\n */\n\n generateUid(name: string = \"temp\"): string {\n name = toIdentifier(name)\n .replace(/^_+/, \"\")\n .replace(/[0-9]+$/g, \"\");\n\n let uid;\n let i = 1;\n do {\n uid = this._generateUid(name, i);\n i++;\n } while (\n this.hasLabel(uid) ||\n this.hasBinding(uid) ||\n this.hasGlobal(uid) ||\n this.hasReference(uid)\n );\n\n const program = this.getProgramParent();\n program.references[uid] = true;\n program.uids[uid] = true;\n\n return uid;\n }\n\n /**\n * Generate an `_id1`.\n */\n\n _generateUid(name: string, i: number) {\n let id = name;\n if (i > 1) id += i;\n return `_${id}`;\n }\n\n generateUidBasedOnNode(node: t.Node, defaultName?: string) {\n const parts: NodePart[] = [];\n gatherNodeParts(node, parts);\n\n let id = parts.join(\"$\");\n id = id.replace(/^_/, \"\") || defaultName || \"ref\";\n\n return this.generateUid(id.slice(0, 20));\n }\n\n /**\n * Generate a unique identifier based on a node.\n */\n\n generateUidIdentifierBasedOnNode(node: t.Node, defaultName?: string) {\n return identifier(this.generateUidBasedOnNode(node, defaultName));\n }\n\n /**\n * Determine whether evaluating the specific input `node` is a consequenceless reference. ie.\n * evaluating it wont result in potentially arbitrary code from being ran. The following are\n * allowed and determined not to cause side effects:\n *\n * - `this` expressions\n * - `super` expressions\n * - Bound identifiers\n */\n\n isStatic(node: t.Node): boolean {\n if (isThisExpression(node) || isSuper(node) || isTopicReference(node)) {\n return true;\n }\n\n if (isIdentifier(node)) {\n const binding = this.getBinding(node.name);\n if (binding) {\n return binding.constant;\n } else {\n return this.hasBinding(node.name);\n }\n }\n\n return false;\n }\n\n /**\n * Possibly generate a memoised identifier if it is not static and has consequences.\n */\n\n maybeGenerateMemoised(node: t.Node, dontPush?: boolean) {\n if (this.isStatic(node)) {\n return null;\n } else {\n const id = this.generateUidIdentifierBasedOnNode(node);\n if (!dontPush) {\n this.push({ id });\n return cloneNode(id);\n }\n return id;\n }\n }\n\n checkBlockScopedCollisions(\n local: Binding,\n kind: BindingKind,\n name: string,\n id: any,\n ) {\n // ignore parameters\n if (kind === \"param\") return;\n\n // Ignore existing binding if it's the name of the current function or\n // class expression\n if (local.kind === \"local\") return;\n\n const duplicate =\n // don't allow duplicate bindings to exist alongside\n kind === \"let\" ||\n local.kind === \"let\" ||\n local.kind === \"const\" ||\n local.kind === \"module\" ||\n // don't allow a local of param with a kind of let\n (local.kind === \"param\" && kind === \"const\");\n\n if (duplicate) {\n throw this.hub.buildError(\n id,\n `Duplicate declaration \"${name}\"`,\n TypeError,\n );\n }\n }\n\n rename(oldName: string, newName?: string, block?: t.Pattern | t.Scopable) {\n const binding = this.getBinding(oldName);\n if (binding) {\n newName = newName || this.generateUidIdentifier(oldName).name;\n return new Renamer(binding, oldName, newName).rename(block);\n }\n }\n\n /** @deprecated Not used in our codebase */\n _renameFromMap(\n map: Record<string | symbol, unknown>,\n oldName: string | symbol,\n newName: string | symbol,\n value: unknown,\n ) {\n if (map[oldName]) {\n map[newName] = value;\n map[oldName] = null;\n }\n }\n\n dump() {\n const sep = \"-\".repeat(60);\n console.log(sep);\n let scope: Scope = this;\n do {\n console.log(\"#\", scope.block.type);\n for (const name of Object.keys(scope.bindings)) {\n const binding = scope.bindings[name];\n console.log(\" -\", name, {\n constant: binding.constant,\n references: binding.references,\n violations: binding.constantViolations.length,\n kind: binding.kind,\n });\n }\n } while ((scope = scope.parent));\n console.log(sep);\n }\n\n // TODO: (Babel 8) Split i in two parameters, and use an object of flags\n toArray(\n node: t.Node,\n i?: number | boolean,\n arrayLikeIsIterable?: boolean | void,\n ) {\n if (isIdentifier(node)) {\n const binding = this.getBinding(node.name);\n if (binding?.constant && binding.path.isGenericType(\"Array\")) {\n return node;\n }\n }\n\n if (isArrayExpression(node)) {\n return node;\n }\n\n if (isIdentifier(node, { name: \"arguments\" })) {\n return callExpression(\n memberExpression(\n memberExpression(\n memberExpression(identifier(\"Array\"), identifier(\"prototype\")),\n identifier(\"slice\"),\n ),\n identifier(\"call\"),\n ),\n [node],\n );\n }\n\n let helperName;\n const args = [node];\n if (i === true) {\n // Used in array-spread to create an array.\n helperName = \"toConsumableArray\";\n } else if (typeof i === \"number\") {\n args.push(numericLiteral(i));\n\n // Used in array-rest to create an array from a subset of an iterable.\n helperName = \"slicedToArray\";\n // TODO if (this.hub.isLoose(\"es6.forOf\")) helperName += \"-loose\";\n } else {\n // Used in array-rest to create an array\n helperName = \"toArray\";\n }\n\n if (arrayLikeIsIterable) {\n args.unshift(this.hub.addHelper(helperName));\n helperName = \"maybeArrayLike\";\n }\n\n // @ts-expect-error todo(flow->ts): t.Node is not valid to use in args, function argument typeneeds to be clarified\n return callExpression(this.hub.addHelper(helperName), args);\n }\n\n hasLabel(name: string) {\n return !!this.getLabel(name);\n }\n\n getLabel(name: string) {\n return this.labels.get(name);\n }\n\n registerLabel(path: NodePath<t.LabeledStatement>) {\n this.labels.set(path.node.label.name, path);\n }\n\n registerDeclaration(path: NodePath) {\n if (path.isLabeledStatement()) {\n this.registerLabel(path);\n } else if (path.isFunctionDeclaration()) {\n this.registerBinding(\"hoisted\", path.get(\"id\"), path);\n } else if (path.isVariableDeclaration()) {\n const declarations = path.get(\"declarations\");\n const { kind } = path.node;\n for (const declar of declarations) {\n this.registerBinding(kind === \"using\" ? \"const\" : kind, declar);\n }\n } else if (path.isClassDeclaration()) {\n if (path.node.declare) return;\n this.registerBinding(\"let\", path);\n } else if (path.isImportDeclaration()) {\n const isTypeDeclaration =\n path.node.importKind === \"type\" || path.node.importKind === \"typeof\";\n const specifiers = path.get(\"specifiers\");\n for (const specifier of specifiers) {\n const isTypeSpecifier =\n isTypeDeclaration ||\n (specifier.isImportSpecifier() &&\n (specifier.node.importKind === \"type\" ||\n specifier.node.importKind === \"typeof\"));\n\n this.registerBinding(isTypeSpecifier ? \"unknown\" : \"module\", specifier);\n }\n } else if (path.isExportDeclaration()) {\n // todo: improve babel-types\n const declar = path.get(\"declaration\") as NodePath;\n if (\n declar.isClassDeclaration() ||\n declar.isFunctionDeclaration() ||\n declar.isVariableDeclaration()\n ) {\n this.registerDeclaration(declar);\n }\n } else {\n this.registerBinding(\"unknown\", path);\n }\n }\n\n buildUndefinedNode() {\n return unaryExpression(\"void\", numericLiteral(0), true);\n }\n\n registerConstantViolation(path: NodePath) {\n const ids = path.getBindingIdentifiers();\n for (const name of Object.keys(ids)) {\n const binding = this.getBinding(name);\n if (binding) binding.reassign(path);\n }\n }\n\n registerBinding(\n kind: Binding[\"kind\"],\n path: NodePath,\n bindingPath: NodePath = path,\n ) {\n if (!kind) throw new ReferenceError(\"no `kind`\");\n\n if (path.isVariableDeclaration()) {\n const declarators: Array<NodePath> = path.get(\"declarations\");\n for (const declar of declarators) {\n this.registerBinding(kind, declar);\n }\n return;\n }\n\n const parent = this.getProgramParent();\n const ids = path.getOuterBindingIdentifiers(true);\n\n for (const name of Object.keys(ids)) {\n parent.references[name] = true;\n\n for (const id of ids[name]) {\n const local = this.getOwnBinding(name);\n\n if (local) {\n // same identifier so continue safely as we're likely trying to register it\n // multiple times\n if (local.identifier === id) continue;\n\n this.checkBlockScopedCollisions(local, kind, name, id);\n }\n\n // A redeclaration of an existing variable is a modification\n if (local) {\n this.registerConstantViolation(bindingPath);\n } else {\n this.bindings[name] = new Binding({\n identifier: id,\n scope: this,\n path: bindingPath,\n kind: kind,\n });\n }\n }\n }\n }\n\n addGlobal(node: t.Identifier | t.JSXIdentifier) {\n this.globals[node.name] = node;\n }\n\n hasUid(name: string): boolean {\n let scope: Scope = this;\n\n do {\n if (scope.uids[name]) return true;\n } while ((scope = scope.parent));\n\n return false;\n }\n\n hasGlobal(name: string): boolean {\n let scope: Scope = this;\n\n do {\n if (scope.globals[name]) return true;\n } while ((scope = scope.parent));\n\n return false;\n }\n\n hasReference(name: string): boolean {\n return !!this.getProgramParent().references[name];\n }\n\n isPure(node: t.Node, constantsOnly?: boolean): boolean {\n if (isIdentifier(node)) {\n const binding = this.getBinding(node.name);\n if (!binding) return false;\n if (constantsOnly) return binding.constant;\n return true;\n } else if (\n isThisExpression(node) ||\n isMetaProperty(node) ||\n isTopicReference(node) ||\n isPrivateName(node)\n ) {\n return true;\n } else if (isClass(node)) {\n if (node.superClass && !this.isPure(node.superClass, constantsOnly)) {\n return false;\n }\n if (node.decorators?.length > 0) {\n return false;\n }\n return this.isPure(node.body, constantsOnly);\n } else if (isClassBody(node)) {\n for (const method of node.body) {\n if (!this.isPure(method, constantsOnly)) return false;\n }\n return true;\n } else if (isBinary(node)) {\n return (\n this.isPure(node.left, constantsOnly) &&\n this.isPure(node.right, constantsOnly)\n );\n } else if (isArrayExpression(node) || isTupleExpression(node)) {\n for (const elem of node.elements) {\n if (elem !== null && !this.isPure(elem, constantsOnly)) return false;\n }\n return true;\n } else if (isObjectExpression(node) || isRecordExpression(node)) {\n for (const prop of node.properties) {\n if (!this.isPure(prop, constantsOnly)) return false;\n }\n return true;\n } else if (isMethod(node)) {\n if (node.computed && !this.isPure(node.key, constantsOnly)) return false;\n if (node.decorators?.length > 0) {\n return false;\n }\n return true;\n } else if (isProperty(node)) {\n // @ts-expect-error todo(flow->ts): computed in not present on private properties\n if (node.computed && !this.isPure(node.key, constantsOnly)) return false;\n if (node.decorators?.length > 0) {\n return false;\n }\n if (isObjectProperty(node) || node.static) {\n if (node.value !== null && !this.isPure(node.value, constantsOnly)) {\n return false;\n }\n }\n return true;\n } else if (isUnaryExpression(node)) {\n return this.isPure(node.argument, constantsOnly);\n } else if (isTaggedTemplateExpression(node)) {\n return (\n matchesPattern(node.tag, \"String.raw\") &&\n !this.hasBinding(\"String\", true) &&\n this.isPure(node.quasi, constantsOnly)\n );\n } else if (isTemplateLiteral(node)) {\n for (const expression of node.expressions) {\n if (!this.isPure(expression, constantsOnly)) return false;\n }\n return true;\n } else {\n return isPureish(node);\n }\n }\n\n /**\n * Set some arbitrary data on the current scope.\n */\n\n setData(key: string | symbol, val: any) {\n return (this.data[key] = val);\n }\n\n /**\n * Recursively walk up scope tree looking for the data `key`.\n */\n\n getData(key: string | symbol): any {\n let scope: Scope = this;\n do {\n const data = scope.data[key];\n if (data != null) return data;\n } while ((scope = scope.parent));\n }\n\n /**\n * Recursively walk up scope tree looking for the data `key` and if it exists,\n * remove it.\n */\n\n removeData(key: string) {\n let scope: Scope = this;\n do {\n const data = scope.data[key];\n if (data != null) scope.data[key] = null;\n } while ((scope = scope.parent));\n }\n\n init() {\n if (!this.inited) {\n this.inited = true;\n this.crawl();\n }\n }\n\n crawl() {\n const path = this.path;\n\n this.references = Object.create(null);\n this.bindings = Object.create(null);\n this.globals = Object.create(null);\n this.uids = Object.create(null);\n this.data = Object.create(null);\n\n const programParent = this.getProgramParent();\n if (programParent.crawling) return;\n\n const state: CollectVisitorState = {\n references: [],\n constantViolations: [],\n assignments: [],\n };\n\n this.crawling = true;\n // traverse does not visit the root node, here we explicitly collect\n // root node binding info when the root is not a Program.\n if (path.type !== \"Program\" && collectorVisitor._exploded) {\n // @ts-expect-error when collectorVisitor is exploded, `enter` always exists\n for (const visit of collectorVisitor.enter) {\n visit(path, state);\n }\n const typeVisitors = collectorVisitor[path.type];\n if (typeVisitors) {\n // @ts-expect-error when collectorVisitor is exploded, `enter` always exists\n for (const visit of typeVisitors.enter) {\n visit(path, state);\n }\n }\n }\n path.traverse(collectorVisitor, state);\n this.crawling = false;\n\n // register assignments\n for (const path of state.assignments) {\n // register undeclared bindings as globals\n const ids = path.getBindingIdentifiers();\n for (const name of Object.keys(ids)) {\n if (path.scope.getBinding(name)) continue;\n programParent.addGlobal(ids[name]);\n }\n\n // register as constant violation\n path.scope.registerConstantViolation(path);\n }\n\n // register references\n for (const ref of state.references) {\n const binding = ref.scope.getBinding(ref.node.name);\n if (binding) {\n binding.reference(ref);\n } else {\n programParent.addGlobal(ref.node);\n }\n }\n\n // register constant violations\n for (const path of state.constantViolations) {\n path.scope.registerConstantViolation(path);\n }\n }\n\n push(opts: {\n id: t.LVal;\n init?: t.Expression;\n unique?: boolean;\n _blockHoist?: number | undefined;\n kind?: \"var\" | \"let\" | \"const\";\n }) {\n let path = this.path;\n\n if (path.isPattern()) {\n path = this.getPatternParent().path;\n } else if (!path.isBlockStatement() && !path.isProgram()) {\n path = this.getBlockParent().path;\n }\n\n if (path.isSwitchStatement()) {\n path = (this.getFunctionParent() || this.getProgramParent()).path;\n }\n\n if (path.isLoop() || path.isCatchClause() || path.isFunction()) {\n // @ts-expect-error TS can not infer NodePath<Loop> | NodePath<CatchClause> as NodePath<Loop | CatchClause>\n path.ensureBlock();\n // @ts-expect-error todo(flow->ts): improve types\n path = path.get(\"body\");\n }\n\n const unique = opts.unique;\n const kind = opts.kind || \"var\";\n const blockHoist = opts._blockHoist == null ? 2 : opts._blockHoist;\n\n const dataKey = `declaration:${kind}:${blockHoist}`;\n let declarPath = !unique && path.getData(dataKey);\n\n if (!declarPath) {\n const declar = variableDeclaration(kind, []);\n // @ts-expect-error todo(flow->ts): avoid modifying nodes\n declar._blockHoist = blockHoist;\n\n [declarPath] = (path as NodePath<t.BlockStatement>).unshiftContainer(\n \"body\",\n [declar],\n );\n if (!unique) path.setData(dataKey, declarPath);\n }\n\n const declarator = variableDeclarator(opts.id, opts.init);\n const len = declarPath.node.declarations.push(declarator);\n path.scope.registerBinding(kind, declarPath.get(\"declarations\")[len - 1]);\n }\n\n /**\n * Walk up to the top of the scope tree and get the `Program`.\n */\n\n getProgramParent() {\n let scope: Scope = this;\n do {\n if (scope.path.isProgram()) {\n return scope;\n }\n } while ((scope = scope.parent));\n throw new Error(\"Couldn't find a Program\");\n }\n\n /**\n * Walk up the scope tree until we hit either a Function or return null.\n */\n\n getFunctionParent(): Scope | null {\n let scope: Scope = this;\n do {\n if (scope.path.isFunctionParent()) {\n return scope;\n }\n } while ((scope = scope.parent));\n return null;\n }\n\n /**\n * Walk up the scope tree until we hit either a BlockStatement/Loop/Program/Function/Switch or reach the\n * very top and hit Program.\n */\n\n getBlockParent() {\n let scope: Scope = this;\n do {\n if (scope.path.isBlockParent()) {\n return scope;\n }\n } while ((scope = scope.parent));\n throw new Error(\n \"We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...\",\n );\n }\n\n /**\n * Walk up from a pattern scope (function param initializer) until we hit a non-pattern scope,\n * then returns its block parent\n * @returns An ancestry scope whose path is a block parent\n */\n getPatternParent() {\n let scope: Scope = this;\n do {\n if (!scope.path.isPattern()) {\n return scope.getBlockParent();\n }\n } while ((scope = scope.parent.parent));\n throw new Error(\n \"We couldn't find a BlockStatement, For, Switch, Function, Loop or Program...\",\n );\n }\n\n /**\n * Walks the scope tree and gathers **all** bindings.\n */\n\n getAllBindings(): Record<string, Binding> {\n const ids = Object.create(null);\n\n let scope: Scope = this;\n do {\n for (const key of Object.keys(scope.bindings)) {\n if (key in ids === false) {\n ids[key] = scope.bindings[key];\n }\n }\n scope = scope.parent;\n } while (scope);\n\n return ids;\n }\n\n /**\n * Walks the scope tree and gathers all declarations of `kind`.\n */\n\n getAllBindingsOfKind(...kinds: string[]): Record<string, Binding> {\n const ids = Object.create(null);\n\n for (const kind of kinds) {\n let scope: Scope = this;\n do {\n for (const name of Object.keys(scope.bindings)) {\n const binding = scope.bindings[name];\n if (binding.kind === kind) ids[name] = binding;\n }\n scope = scope.parent;\n } while (scope);\n }\n\n return ids;\n }\n\n bindingIdentifierEquals(name: string, node: t.Node): boolean {\n return this.getBindingIdentifier(name) === node;\n }\n\n getBinding(name: string): Binding | undefined {\n let scope: Scope = this;\n let previousPath;\n\n do {\n const binding = scope.getOwnBinding(name);\n if (binding) {\n // Check if a pattern is a part of parameter expressions.\n // Note: for performance reason we skip checking previousPath.parentPath.isFunction()\n // because `scope.path` is validated as scope in packages/babel-types/src/validators/isScope.js\n // That is, if a scope path is pattern, its parent must be Function/CatchClause\n\n // Spec 9.2.10.28: The closure created by this expression should not have visibility of\n // declarations in the function body. If the binding is not a `param`-kind (as function parameters)\n // or `local`-kind (as id in function expression),\n // then it must be defined inside the function body, thus it should be skipped\n if (\n previousPath?.isPattern() &&\n binding.kind !== \"param\" &&\n binding.kind !== \"local\"\n ) {\n // do nothing\n } else {\n return binding;\n }\n } else if (\n !binding &&\n name === \"arguments\" &&\n scope.path.isFunction() &&\n !scope.path.isArrowFunctionExpression()\n ) {\n break;\n }\n previousPath = scope.path;\n } while ((scope = scope.parent));\n }\n\n getOwnBinding(name: string): Binding | undefined {\n return this.bindings[name];\n }\n\n // todo: return probably can be undefined…\n getBindingIdentifier(name: string): t.Identifier {\n return this.getBinding(name)?.identifier;\n }\n\n // todo: flow->ts return probably can be undefined\n getOwnBindingIdentifier(name: string): t.Identifier {\n const binding = this.bindings[name];\n return binding?.identifier;\n }\n\n hasOwnBinding(name: string) {\n return !!this.getOwnBinding(name);\n }\n\n // By default, we consider generated UIDs as bindings.\n // This is because they are almost always used to declare variables,\n // and since the scope isn't always up-to-date it's better to assume that\n // there is a variable with that name. The `noUids` option can be used to\n // turn off this behavior, for example if you know that the generate UID\n // was used to declare a variable in a different scope.\n hasBinding(\n name: string,\n opts?: boolean | { noGlobals?: boolean; noUids?: boolean },\n ) {\n if (!name) return false;\n if (this.hasOwnBinding(name)) return true;\n {\n // TODO: Only accept the object form.\n if (typeof opts === \"boolean\") opts = { noGlobals: opts };\n }\n if (this.parentHasBinding(name, opts)) return true;\n if (!opts?.noUids && this.hasUid(name)) return true;\n if (!opts?.noGlobals && Scope.globals.includes(name)) return true;\n if (!opts?.noGlobals && Scope.contextVariables.includes(name)) return true;\n return false;\n }\n\n parentHasBinding(\n name: string,\n opts?: { noGlobals?: boolean; noUids?: boolean },\n ) {\n return this.parent?.hasBinding(name, opts);\n }\n\n /**\n * Move a binding of `name` to another `scope`.\n */\n\n moveBindingTo(name: string, scope: Scope) {\n const info = this.getBinding(name);\n if (info) {\n info.scope.removeOwnBinding(name);\n info.scope = scope;\n scope.bindings[name] = info;\n }\n }\n\n removeOwnBinding(name: string) {\n delete this.bindings[name];\n }\n\n removeBinding(name: string) {\n // clear literal binding\n this.getBinding(name)?.scope.removeOwnBinding(name);\n\n // clear uids with this name - https://github.com/babel/babel/issues/2101\n let scope: Scope = this;\n do {\n if (scope.uids[name]) {\n scope.uids[name] = false;\n }\n } while ((scope = scope.parent));\n }\n}\n"],"mappings":"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"}
|
package/lib/scope/lib/renamer.js
CHANGED
@@ -7,6 +7,8 @@ exports.default = void 0;
|
|
7
7
|
var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration");
|
8
8
|
var t = require("@babel/types");
|
9
9
|
var _helperEnvironmentVisitor = require("@babel/helper-environment-visitor");
|
10
|
+
var _traverseNode = require("../../traverse-node");
|
11
|
+
var _visitors = require("../../visitors");
|
10
12
|
const renameVisitor = {
|
11
13
|
ReferencedIdentifier({
|
12
14
|
node
|
@@ -82,14 +84,10 @@ class Renamer {
|
|
82
84
|
this.maybeConvertFromExportDeclaration(parentDeclar);
|
83
85
|
}
|
84
86
|
}
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
});
|
90
|
-
} else {
|
91
|
-
scope.traverse(blockToTraverse, renameVisitor, this);
|
92
|
-
}
|
87
|
+
(0, _traverseNode.traverseNode)(block || scope.block, (0, _visitors.explode)(renameVisitor), scope, this, scope.path,
|
88
|
+
{
|
89
|
+
discriminant: true
|
90
|
+
});
|
93
91
|
if (!block) {
|
94
92
|
scope.removeOwnBinding(oldName);
|
95
93
|
scope.bindings[newName] = binding;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["renameVisitor","ReferencedIdentifier","node","state","name","oldName","newName","Scope","path","scope","bindingIdentifierEquals","binding","identifier","skip","isMethod","requeueComputedKeyAndDecorators","isVariableDeclaration","ids","getOuterBindingIdentifiers","Renamer","constructor","maybeConvertFromExportDeclaration","parentDeclar","maybeExportDeclar","parentPath","isExportDeclaration","isExportDefaultDeclaration","declaration","t","isDeclaration","id","isExportAllDeclaration","splitExportDeclaration","maybeConvertFromClassFunctionDeclaration","maybeConvertFromClassFunctionExpression","rename","block","find","isFunctionExpression","isClassExpression","bindingIds","
|
1
|
+
{"version":3,"names":["renameVisitor","ReferencedIdentifier","node","state","name","oldName","newName","Scope","path","scope","bindingIdentifierEquals","binding","identifier","skip","isMethod","requeueComputedKeyAndDecorators","isVariableDeclaration","ids","getOuterBindingIdentifiers","Renamer","constructor","maybeConvertFromExportDeclaration","parentDeclar","maybeExportDeclar","parentPath","isExportDeclaration","isExportDefaultDeclaration","declaration","t","isDeclaration","id","isExportAllDeclaration","splitExportDeclaration","maybeConvertFromClassFunctionDeclaration","maybeConvertFromClassFunctionExpression","rename","block","find","isFunctionExpression","isClassExpression","bindingIds","traverseNode","explode","discriminant","removeOwnBinding","bindings"],"sources":["../../../src/scope/lib/renamer.ts"],"sourcesContent":["import type Binding from \"../binding\";\nimport splitExportDeclaration from \"@babel/helper-split-export-declaration\";\nimport * as t from \"@babel/types\";\nimport type { NodePath, Visitor } from \"../..\";\nimport { requeueComputedKeyAndDecorators } from \"@babel/helper-environment-visitor\";\nimport { traverseNode } from \"../../traverse-node\";\nimport { explode } from \"../../visitors\";\n\nconst renameVisitor: Visitor<Renamer> = {\n ReferencedIdentifier({ node }, state) {\n if (node.name === state.oldName) {\n node.name = state.newName;\n }\n },\n\n Scope(path, state) {\n if (\n !path.scope.bindingIdentifierEquals(\n state.oldName,\n state.binding.identifier,\n )\n ) {\n path.skip();\n if (path.isMethod()) {\n requeueComputedKeyAndDecorators(path);\n }\n }\n },\n\n \"AssignmentExpression|Declaration|VariableDeclarator\"(\n path: NodePath<t.AssignmentPattern | t.Declaration | t.VariableDeclarator>,\n state,\n ) {\n if (path.isVariableDeclaration()) return;\n const ids = path.getOuterBindingIdentifiers();\n\n for (const name in ids) {\n if (name === state.oldName) ids[name].name = state.newName;\n }\n },\n};\n\nexport default class Renamer {\n constructor(binding: Binding, oldName: string, newName: string) {\n this.newName = newName;\n this.oldName = oldName;\n this.binding = binding;\n }\n\n declare oldName: string;\n declare newName: string;\n declare binding: Binding;\n\n maybeConvertFromExportDeclaration(parentDeclar: NodePath) {\n const maybeExportDeclar = parentDeclar.parentPath;\n\n if (!maybeExportDeclar.isExportDeclaration()) {\n return;\n }\n\n if (maybeExportDeclar.isExportDefaultDeclaration()) {\n const { declaration } = maybeExportDeclar.node;\n if (t.isDeclaration(declaration) && !declaration.id) {\n return;\n }\n }\n\n if (maybeExportDeclar.isExportAllDeclaration()) {\n return;\n }\n\n splitExportDeclaration(\n maybeExportDeclar as NodePath<\n Exclude<t.ExportDeclaration, t.ExportAllDeclaration>\n >,\n );\n }\n\n maybeConvertFromClassFunctionDeclaration(path: NodePath) {\n return path; // TODO\n\n // // retain the `name` of a class/function declaration\n\n // if (!path.isFunctionDeclaration() && !path.isClassDeclaration()) return;\n // if (this.binding.kind !== \"hoisted\") return;\n\n // path.node.id = identifier(this.oldName);\n // path.node._blockHoist = 3;\n\n // path.replaceWith(\n // variableDeclaration(\"let\", [\n // variableDeclarator(identifier(this.newName), toExpression(path.node)),\n // ]),\n // );\n }\n\n maybeConvertFromClassFunctionExpression(path: NodePath) {\n return path; // TODO\n\n // // retain the `name` of a class/function expression\n\n // if (!path.isFunctionExpression() && !path.isClassExpression()) return;\n // if (this.binding.kind !== \"local\") return;\n\n // path.node.id = identifier(this.oldName);\n\n // this.binding.scope.parent.push({\n // id: identifier(this.newName),\n // });\n\n // path.replaceWith(\n // assignmentExpression(\"=\", identifier(this.newName), path.node),\n // );\n }\n\n // TODO(Babel 8): Remove this `block` parameter. It's not needed anywhere.\n rename(block?: t.Pattern | t.Scopable) {\n const { binding, oldName, newName } = this;\n const { scope, path } = binding;\n\n const parentDeclar = path.find(\n path =>\n path.isDeclaration() ||\n path.isFunctionExpression() ||\n path.isClassExpression(),\n );\n if (parentDeclar) {\n const bindingIds = parentDeclar.getOuterBindingIdentifiers();\n if (bindingIds[oldName] === binding.identifier) {\n // When we are renaming an exported identifier, we need to ensure that\n // the exported binding keeps the old name.\n this.maybeConvertFromExportDeclaration(parentDeclar);\n }\n }\n\n traverseNode(\n block || scope.block,\n explode(renameVisitor),\n scope,\n this,\n scope.path,\n // When blockToTraverse is a SwitchStatement, the discriminant\n // is not part of the current scope and thus should be skipped.\n { discriminant: true },\n );\n\n if (!block) {\n scope.removeOwnBinding(oldName);\n scope.bindings[newName] = binding;\n this.binding.identifier.name = newName;\n }\n\n if (parentDeclar) {\n this.maybeConvertFromClassFunctionDeclaration(path);\n this.maybeConvertFromClassFunctionExpression(path);\n }\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@babel/traverse",
|
3
|
-
"version": "7.20.
|
3
|
+
"version": "7.20.8",
|
4
4
|
"description": "The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes",
|
5
5
|
"author": "The Babel Team (https://babel.dev/team)",
|
6
6
|
"homepage": "https://babel.dev/docs/en/next/babel-traverse",
|
@@ -17,13 +17,13 @@
|
|
17
17
|
"main": "./lib/index.js",
|
18
18
|
"dependencies": {
|
19
19
|
"@babel/code-frame": "^7.18.6",
|
20
|
-
"@babel/generator": "^7.20.
|
20
|
+
"@babel/generator": "^7.20.7",
|
21
21
|
"@babel/helper-environment-visitor": "^7.18.9",
|
22
22
|
"@babel/helper-function-name": "^7.19.0",
|
23
23
|
"@babel/helper-hoist-variables": "^7.18.6",
|
24
24
|
"@babel/helper-split-export-declaration": "^7.18.6",
|
25
|
-
"@babel/parser": "^7.20.
|
26
|
-
"@babel/types": "^7.20.
|
25
|
+
"@babel/parser": "^7.20.7",
|
26
|
+
"@babel/types": "^7.20.7",
|
27
27
|
"debug": "^4.1.0",
|
28
28
|
"globals": "^11.1.0"
|
29
29
|
},
|