@babel/traverse 7.19.4 → 7.20.0
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 +6 -0
- package/lib/path/conversion.js.map +1 -1
- package/lib/scope/binding.js.map +1 -1
- package/lib/scope/index.js +4 -1
- package/lib/scope/index.js.map +1 -1
- package/package.json +4 -4
- package/scripts/generators/asserts.js +0 -25
- package/scripts/generators/validators.js +0 -27
- package/scripts/package.json +0 -1
package/lib/path/conversion.js
CHANGED
@@ -265,6 +265,9 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
265
265
|
const isCall = superParentPath.isCallExpression({
|
266
266
|
callee: superProp.node
|
267
267
|
});
|
268
|
+
const isTaggedTemplate = superParentPath.isTaggedTemplateExpression({
|
269
|
+
tag: superProp.node
|
270
|
+
});
|
268
271
|
const superBinding = getSuperPropBinding(thisEnvFn, isAssignment, key);
|
269
272
|
const args = [];
|
270
273
|
|
@@ -285,6 +288,9 @@ function hoistFunctionEnvironment(fnPath, noNewArrows = true, allowInsertArrow =
|
|
285
288
|
thisPaths.push(superParentPath.get("arguments.0"));
|
286
289
|
} else if (isAssignment) {
|
287
290
|
superParentPath.replaceWith(call);
|
291
|
+
} else if (isTaggedTemplate) {
|
292
|
+
superProp.replaceWith(callExpression(memberExpression(call, identifier("bind"), false), [thisExpression()]));
|
293
|
+
thisPaths.push(superProp.get("arguments.0"));
|
288
294
|
} else {
|
289
295
|
superProp.replaceWith(call);
|
290
296
|
}
|
@@ -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","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","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 /** @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 specCompliant?: boolean | void;\n noNewArrows?: boolean;\n } = {},\n): NodePath<Exclude<t.Function, t.Method | t.ArrowFunctionExpression>> {\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 );\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): { 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 \"Unable to handle nested super() usage in arrow\",\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 \"Unable to handle nested super.prop usage\",\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 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 {\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","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 /** @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 specCompliant?: boolean | void;\n noNewArrows?: boolean;\n } = {},\n): NodePath<Exclude<t.Function, t.Method | t.ArrowFunctionExpression>> {\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 );\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): { 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 \"Unable to handle nested super() usage in arrow\",\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 \"Unable to handle nested super.prop usage\",\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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"}
|
package/lib/scope/binding.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["Binding","constructor","identifier","scope","path","kind","constantViolations","constant","referencePaths","referenced","references","isDeclaredInLoop","Error","reassign","clearValue","deoptValue","hasDeoptedValue","setValue","value","hasValue","indexOf","push","reference","dereference","parentPath","key","isFunctionParent","isWhile","isForXStatement","isForStatement"],"sources":["../../src/scope/binding.ts"],"sourcesContent":["import type NodePath from \"../path\";\nimport type * as t from \"@babel/types\";\nimport type Scope from \"./index\";\n\nexport type BindingKind =\n | \"var\" /* var declarator */\n | \"let\" /* let declarator, class declaration id, catch clause parameters */\n | \"const\" /* const declarator */\n | \"module\" /* import specifiers */\n | \"hoisted\" /* function declaration id */\n | \"param\" /* function declaration parameters */\n | \"local\" /* function expression id, class expression id */\n | \"unknown\"; /* export specifiers */\n/**\n * This class is responsible for a binding inside of a scope.\n *\n * It tracks the following:\n *\n * * Node path.\n * * Amount of times referenced by other nodes.\n * * Paths to nodes that reassign or modify this binding.\n * * The kind of binding. (Is it a parameter, declaration etc)\n */\n\nexport default class Binding {\n identifier: t.Identifier;\n scope: Scope;\n path: NodePath;\n kind: BindingKind;\n\n constructor({\n identifier,\n scope,\n path,\n kind,\n }: {\n identifier: t.Identifier;\n scope: Scope;\n path: NodePath;\n kind: BindingKind;\n }) {\n this.identifier = identifier;\n this.scope = scope;\n this.path = path;\n this.kind = kind;\n\n if (\n (kind === \"var\" || kind === \"hoisted\") &&\n // https://github.com/rollup/rollup/issues/4654\n // Rollup removes the path argument from this call. Add an\n // unreachable IIFE (that rollup doesn't know is unreachable)\n // with side effects, to prevent it from messing up with arguments.\n // You can reproduce this with\n // BABEL_8_BREAKING=true make prepublish-build\n isDeclaredInLoop(\n path ||\n (() => {\n throw new Error(\"Internal Babel error: unreachable \");\n })(),\n )\n ) {\n this.reassign(path);\n }\n\n this.clearValue();\n }\n\n constantViolations: Array<NodePath> = [];\n constant: boolean = true;\n\n referencePaths: Array<NodePath> = [];\n referenced: boolean = false;\n references: number = 0;\n\n declare hasDeoptedValue: boolean;\n declare hasValue: boolean;\n declare value: any;\n\n deoptValue() {\n this.clearValue();\n this.hasDeoptedValue = true;\n }\n\n setValue(value: any) {\n if (this.hasDeoptedValue) return;\n this.hasValue = true;\n this.value = value;\n }\n\n clearValue() {\n this.hasDeoptedValue = false;\n this.hasValue = false;\n this.value = null;\n }\n\n /**\n * Register a constant violation with the provided `path`.\n */\n\n reassign(path: NodePath) {\n this.constant = false;\n if (this.constantViolations.indexOf(path) !== -1) {\n return;\n }\n this.constantViolations.push(path);\n }\n\n /**\n * Increment the amount of references to this binding.\n */\n\n reference(path: NodePath) {\n if (this.referencePaths.indexOf(path) !== -1) {\n return;\n }\n this.referenced = true;\n this.references++;\n this.referencePaths.push(path);\n }\n\n /**\n * Decrement the amount of references to this binding.\n */\n\n dereference() {\n this.references--;\n this.referenced = !!this.references;\n }\n}\n\nfunction isDeclaredInLoop(path: NodePath) {\n for (\n let { parentPath, key } = path;\n parentPath;\n { parentPath, key } = parentPath\n ) {\n if (parentPath.isFunctionParent()) return false;\n if (\n parentPath.isWhile() ||\n parentPath.isForXStatement() ||\n (parentPath.isForStatement() && key === \"body\")\n ) {\n return true;\n }\n }\n return false;\n}\n"],"mappings":";;;;;;;AAwBe,MAAMA,OAAN,CAAc;EAM3BC,WAAW,CAAC;IACVC,UADU;IAEVC,KAFU;IAGVC,IAHU;IAIVC;EAJU,CAAD,EAUR;IAAA,KAfHH,UAeG;IAAA,KAdHC,KAcG;IAAA,KAbHC,IAaG;IAAA,KAZHC,IAYG;IAAA,KA2BHC,kBA3BG,GA2BmC,EA3BnC;IAAA,KA4BHC,QA5BG,GA4BiB,IA5BjB;IAAA,KA8BHC,cA9BG,GA8B+B,EA9B/B;IAAA,KA+BHC,UA/BG,GA+BmB,KA/BnB;IAAA,KAgCHC,UAhCG,GAgCkB,CAhClB;IACD,KAAKR,UAAL,GAAkBA,UAAlB;IACA,KAAKC,KAAL,GAAaA,KAAb;IACA,KAAKC,IAAL,GAAYA,IAAZ;IACA,KAAKC,IAAL,GAAYA,IAAZ;;IAEA,IACE,CAACA,IAAI,KAAK,KAAT,IAAkBA,IAAI,KAAK,SAA5B,KAOAM,gBAAgB,CACdP,IAAI,IACF,CAAC,MAAM;MACL,MAAM,IAAIQ,KAAJ,CAAU,oCAAV,CAAN;IACD,CAFD,GAFY,CARlB,EAcE;MACA,KAAKC,QAAL,CAAcT,IAAd;IACD;;IAED,KAAKU,UAAL;EACD;;EAaDC,UAAU,GAAG;IACX,KAAKD,UAAL;IACA,KAAKE,eAAL,GAAuB,IAAvB;EACD;;EAEDC,QAAQ,CAACC,KAAD,EAAa;IACnB,IAAI,KAAKF,eAAT,EAA0B;IAC1B,KAAKG,QAAL,GAAgB,IAAhB;IACA,KAAKD,KAAL,GAAaA,KAAb;EACD;;EAEDJ,UAAU,GAAG;IACX,KAAKE,eAAL,GAAuB,KAAvB;IACA,KAAKG,QAAL,GAAgB,KAAhB;IACA,KAAKD,KAAL,GAAa,IAAb;EACD;;EAMDL,QAAQ,CAACT,IAAD,EAAiB;IACvB,KAAKG,QAAL,GAAgB,KAAhB;;IACA,IAAI,KAAKD,kBAAL,CAAwBc,OAAxB,CAAgChB,IAAhC,MAA0C,CAAC,CAA/C,EAAkD;MAChD;IACD;;IACD,KAAKE,kBAAL,CAAwBe,IAAxB,CAA6BjB,IAA7B;EACD;;EAMDkB,SAAS,CAAClB,IAAD,EAAiB;IACxB,IAAI,KAAKI,cAAL,CAAoBY,OAApB,CAA4BhB,IAA5B,MAAsC,CAAC,CAA3C,EAA8C;MAC5C;IACD;;IACD,KAAKK,UAAL,GAAkB,IAAlB;IACA,KAAKC,UAAL;IACA,KAAKF,cAAL,CAAoBa,IAApB,CAAyBjB,IAAzB;EACD;;EAMDmB,WAAW,GAAG;IACZ,KAAKb,UAAL;IACA,KAAKD,UAAL,GAAkB,CAAC,CAAC,KAAKC,UAAzB;EACD;;AAvG0B;;;;AA0G7B,SAASC,gBAAT,CAA0BP,IAA1B,EAA0C;EACxC,KACE,IAAI;IAAEoB,UAAF;IAAcC;EAAd,IAAsBrB,IAD5B,EAEEoB,UAFF,GAGE;IAAEA,UAAF;IAAcC;EAAd,IAAsBD,UAHxB,GAIE;IACA,IAAIA,UAAU,CAACE,gBAAX,EAAJ,EAAmC,OAAO,KAAP;;IACnC,IACEF,UAAU,CAACG,OAAX,MACAH,UAAU,CAACI,eAAX,EADA,IAECJ,UAAU,CAACK,cAAX,MAA+BJ,GAAG,KAAK,MAH1C,EAIE;MACA,OAAO,IAAP;IACD;EACF;;EACD,OAAO,KAAP;AACD"}
|
1
|
+
{"version":3,"names":["Binding","constructor","identifier","scope","path","kind","constantViolations","constant","referencePaths","referenced","references","isDeclaredInLoop","Error","reassign","clearValue","deoptValue","hasDeoptedValue","setValue","value","hasValue","indexOf","push","reference","dereference","parentPath","key","isFunctionParent","isWhile","isForXStatement","isForStatement"],"sources":["../../src/scope/binding.ts"],"sourcesContent":["import type NodePath from \"../path\";\nimport type * as t from \"@babel/types\";\nimport type Scope from \"./index\";\n\nexport type BindingKind =\n | \"var\" /* var declarator */\n | \"let\" /* let declarator, class declaration id, catch clause parameters */\n | \"const\" /* const/using declarator */\n | \"module\" /* import specifiers */\n | \"hoisted\" /* function declaration id */\n | \"param\" /* function declaration parameters */\n | \"local\" /* function expression id, class expression id */\n | \"unknown\"; /* export specifiers */\n/**\n * This class is responsible for a binding inside of a scope.\n *\n * It tracks the following:\n *\n * * Node path.\n * * Amount of times referenced by other nodes.\n * * Paths to nodes that reassign or modify this binding.\n * * The kind of binding. (Is it a parameter, declaration etc)\n */\n\nexport default class Binding {\n identifier: t.Identifier;\n scope: Scope;\n path: NodePath;\n kind: BindingKind;\n\n constructor({\n identifier,\n scope,\n path,\n kind,\n }: {\n identifier: t.Identifier;\n scope: Scope;\n path: NodePath;\n kind: BindingKind;\n }) {\n this.identifier = identifier;\n this.scope = scope;\n this.path = path;\n this.kind = kind;\n\n if (\n (kind === \"var\" || kind === \"hoisted\") &&\n // https://github.com/rollup/rollup/issues/4654\n // Rollup removes the path argument from this call. Add an\n // unreachable IIFE (that rollup doesn't know is unreachable)\n // with side effects, to prevent it from messing up with arguments.\n // You can reproduce this with\n // BABEL_8_BREAKING=true make prepublish-build\n isDeclaredInLoop(\n path ||\n (() => {\n throw new Error(\"Internal Babel error: unreachable \");\n })(),\n )\n ) {\n this.reassign(path);\n }\n\n this.clearValue();\n }\n\n constantViolations: Array<NodePath> = [];\n constant: boolean = true;\n\n referencePaths: Array<NodePath> = [];\n referenced: boolean = false;\n references: number = 0;\n\n declare hasDeoptedValue: boolean;\n declare hasValue: boolean;\n declare value: any;\n\n deoptValue() {\n this.clearValue();\n this.hasDeoptedValue = true;\n }\n\n setValue(value: any) {\n if (this.hasDeoptedValue) return;\n this.hasValue = true;\n this.value = value;\n }\n\n clearValue() {\n this.hasDeoptedValue = false;\n this.hasValue = false;\n this.value = null;\n }\n\n /**\n * Register a constant violation with the provided `path`.\n */\n\n reassign(path: NodePath) {\n this.constant = false;\n if (this.constantViolations.indexOf(path) !== -1) {\n return;\n }\n this.constantViolations.push(path);\n }\n\n /**\n * Increment the amount of references to this binding.\n */\n\n reference(path: NodePath) {\n if (this.referencePaths.indexOf(path) !== -1) {\n return;\n }\n this.referenced = true;\n this.references++;\n this.referencePaths.push(path);\n }\n\n /**\n * Decrement the amount of references to this binding.\n */\n\n dereference() {\n this.references--;\n this.referenced = !!this.references;\n }\n}\n\nfunction isDeclaredInLoop(path: NodePath) {\n for (\n let { parentPath, key } = path;\n parentPath;\n { parentPath, key } = parentPath\n ) {\n if (parentPath.isFunctionParent()) return false;\n if (\n parentPath.isWhile() ||\n parentPath.isForXStatement() ||\n (parentPath.isForStatement() && key === \"body\")\n ) {\n return true;\n }\n }\n return false;\n}\n"],"mappings":";;;;;;;AAwBe,MAAMA,OAAN,CAAc;EAM3BC,WAAW,CAAC;IACVC,UADU;IAEVC,KAFU;IAGVC,IAHU;IAIVC;EAJU,CAAD,EAUR;IAAA,KAfHH,UAeG;IAAA,KAdHC,KAcG;IAAA,KAbHC,IAaG;IAAA,KAZHC,IAYG;IAAA,KA2BHC,kBA3BG,GA2BmC,EA3BnC;IAAA,KA4BHC,QA5BG,GA4BiB,IA5BjB;IAAA,KA8BHC,cA9BG,GA8B+B,EA9B/B;IAAA,KA+BHC,UA/BG,GA+BmB,KA/BnB;IAAA,KAgCHC,UAhCG,GAgCkB,CAhClB;IACD,KAAKR,UAAL,GAAkBA,UAAlB;IACA,KAAKC,KAAL,GAAaA,KAAb;IACA,KAAKC,IAAL,GAAYA,IAAZ;IACA,KAAKC,IAAL,GAAYA,IAAZ;;IAEA,IACE,CAACA,IAAI,KAAK,KAAT,IAAkBA,IAAI,KAAK,SAA5B,KAOAM,gBAAgB,CACdP,IAAI,IACF,CAAC,MAAM;MACL,MAAM,IAAIQ,KAAJ,CAAU,oCAAV,CAAN;IACD,CAFD,GAFY,CARlB,EAcE;MACA,KAAKC,QAAL,CAAcT,IAAd;IACD;;IAED,KAAKU,UAAL;EACD;;EAaDC,UAAU,GAAG;IACX,KAAKD,UAAL;IACA,KAAKE,eAAL,GAAuB,IAAvB;EACD;;EAEDC,QAAQ,CAACC,KAAD,EAAa;IACnB,IAAI,KAAKF,eAAT,EAA0B;IAC1B,KAAKG,QAAL,GAAgB,IAAhB;IACA,KAAKD,KAAL,GAAaA,KAAb;EACD;;EAEDJ,UAAU,GAAG;IACX,KAAKE,eAAL,GAAuB,KAAvB;IACA,KAAKG,QAAL,GAAgB,KAAhB;IACA,KAAKD,KAAL,GAAa,IAAb;EACD;;EAMDL,QAAQ,CAACT,IAAD,EAAiB;IACvB,KAAKG,QAAL,GAAgB,KAAhB;;IACA,IAAI,KAAKD,kBAAL,CAAwBc,OAAxB,CAAgChB,IAAhC,MAA0C,CAAC,CAA/C,EAAkD;MAChD;IACD;;IACD,KAAKE,kBAAL,CAAwBe,IAAxB,CAA6BjB,IAA7B;EACD;;EAMDkB,SAAS,CAAClB,IAAD,EAAiB;IACxB,IAAI,KAAKI,cAAL,CAAoBY,OAApB,CAA4BhB,IAA5B,MAAsC,CAAC,CAA3C,EAA8C;MAC5C;IACD;;IACD,KAAKK,UAAL,GAAkB,IAAlB;IACA,KAAKC,UAAL;IACA,KAAKF,cAAL,CAAoBa,IAApB,CAAyBjB,IAAzB;EACD;;EAMDmB,WAAW,GAAG;IACZ,KAAKb,UAAL;IACA,KAAKD,UAAL,GAAkB,CAAC,CAAC,KAAKC,UAAzB;EACD;;AAvG0B;;;;AA0G7B,SAASC,gBAAT,CAA0BP,IAA1B,EAA0C;EACxC,KACE,IAAI;IAAEoB,UAAF;IAAcC;EAAd,IAAsBrB,IAD5B,EAEEoB,UAFF,GAGE;IAAEA,UAAF;IAAcC;EAAd,IAAsBD,UAHxB,GAIE;IACA,IAAIA,UAAU,CAACE,gBAAX,EAAJ,EAAmC,OAAO,KAAP;;IACnC,IACEF,UAAU,CAACG,OAAX,MACAH,UAAU,CAACI,eAAX,EADA,IAECJ,UAAU,CAACK,cAAX,MAA+BJ,GAAG,KAAK,MAH1C,EAIE;MACA,OAAO,IAAP;IACD;EACF;;EACD,OAAO,KAAP;AACD"}
|
package/lib/scope/index.js
CHANGED
@@ -578,9 +578,12 @@ class Scope {
|
|
578
578
|
this.registerBinding("hoisted", path.get("id"), path);
|
579
579
|
} else if (path.isVariableDeclaration()) {
|
580
580
|
const declarations = path.get("declarations");
|
581
|
+
const {
|
582
|
+
kind
|
583
|
+
} = path.node;
|
581
584
|
|
582
585
|
for (const declar of declarations) {
|
583
|
-
this.registerBinding(
|
586
|
+
this.registerBinding(kind === "using" ? "const" : kind, declar);
|
584
587
|
}
|
585
588
|
} else if (path.isClassDeclaration()) {
|
586
589
|
if (path.node.declare) return;
|
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 (i) {\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 for (const declar of declarations) {\n this.registerBinding(path.node.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","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 (i) {\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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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@babel/traverse",
|
3
|
-
"version": "7.
|
3
|
+
"version": "7.20.0",
|
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
|
+
"@babel/generator": "^7.20.0",
|
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.
|
26
|
-
"@babel/types": "^7.
|
25
|
+
"@babel/parser": "^7.20.0",
|
26
|
+
"@babel/types": "^7.20.0",
|
27
27
|
"debug": "^4.1.0",
|
28
28
|
"globals": "^11.1.0"
|
29
29
|
},
|
@@ -1,25 +0,0 @@
|
|
1
|
-
import * as t from "@babel/types";
|
2
|
-
|
3
|
-
export default function generateAsserts() {
|
4
|
-
let output = `/*
|
5
|
-
* This file is auto-generated! Do not modify it directly.
|
6
|
-
* To re-generate run 'make build'
|
7
|
-
*/
|
8
|
-
import type * as t from "@babel/types";
|
9
|
-
import type NodePath from "../index";
|
10
|
-
|
11
|
-
|
12
|
-
export interface NodePathAssetions {`;
|
13
|
-
|
14
|
-
for (const type of [...t.TYPES].sort()) {
|
15
|
-
output += `
|
16
|
-
assert${type}(
|
17
|
-
opts?: object,
|
18
|
-
): asserts this is NodePath<t.${type}>;`;
|
19
|
-
}
|
20
|
-
|
21
|
-
output += `
|
22
|
-
}`;
|
23
|
-
|
24
|
-
return output;
|
25
|
-
}
|
@@ -1,27 +0,0 @@
|
|
1
|
-
import * as t from "@babel/types";
|
2
|
-
|
3
|
-
export default function generateValidators() {
|
4
|
-
let output = `/*
|
5
|
-
* This file is auto-generated! Do not modify it directly.
|
6
|
-
* To re-generate run 'make build'
|
7
|
-
*/
|
8
|
-
import type * as t from "@babel/types";
|
9
|
-
import type NodePath from "../index";
|
10
|
-
import type { VirtualTypeNodePathValidators } from "../lib/virtual-types-validator";
|
11
|
-
|
12
|
-
interface BaseNodePathValidators {
|
13
|
-
`;
|
14
|
-
|
15
|
-
for (const type of [...t.TYPES].sort()) {
|
16
|
-
output += `is${type}<T extends t.Node>(this: NodePath<T>, opts?: object): this is NodePath<T & t.${type}>;`;
|
17
|
-
}
|
18
|
-
|
19
|
-
output += `
|
20
|
-
}
|
21
|
-
|
22
|
-
export interface NodePathValidators
|
23
|
-
extends BaseNodePathValidators, VirtualTypeNodePathValidators {}
|
24
|
-
`;
|
25
|
-
|
26
|
-
return output;
|
27
|
-
}
|
package/scripts/package.json
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{ "type": "module" }
|