🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@babel/plugin-transform-block-scoping

Package Overview
Dependencies
Maintainers
4
Versions
138
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@babel/plugin-transform-block-scoping - npm Package Compare versions

Comparing version
8.0.0-rc.6
to
8.0.0
+1
-1
lib/index.js

@@ -408,3 +408,3 @@ import { declare } from '@babel/helper-plugin-utils';

const index = declare((api, opts) => {
api.assertVersion("^7.0.0-0 || ^8.0.0 || 8.0.0-rc.6");
api.assertVersion("^7.0.0-0 || ^8.0.0");
const {

@@ -411,0 +411,0 @@ throwIfClosureRequired = false,

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":["../src/loop.ts","../src/validation.ts","../src/index.ts"],"sourcesContent":["import { template, types as t } from \"@babel/core\";\nimport type { NodePath, Visitor, Scope } from \"@babel/core\";\n\ninterface LoopBodyBindingsState {\n blockScoped: Scope.Binding[];\n}\n\nconst collectLoopBodyBindingsVisitor: Visitor<LoopBodyBindingsState> = {\n \"Expression|Declaration|Loop\"(path) {\n path.skip();\n },\n Scope(path, state) {\n if (path.isFunctionParent()) path.skip();\n\n const { bindings } = path.scope;\n for (const name of Object.keys(bindings)) {\n const binding = bindings[name];\n if (\n binding.kind === \"let\" ||\n binding.kind === \"const\" ||\n binding.kind === \"hoisted\"\n ) {\n state.blockScoped.push(binding);\n }\n }\n },\n};\n\nexport function getLoopBodyBindings(loopPath: NodePath<t.Loop>) {\n const state: LoopBodyBindingsState = { blockScoped: [] };\n loopPath.traverse(collectLoopBodyBindingsVisitor, state);\n return state.blockScoped;\n}\n\nexport function getUsageInBody(\n binding: Scope.Binding,\n loopPath: NodePath<t.Loop>,\n) {\n // UpdateExpressions are counted both as a reference and a mutation,\n // so we need to de-duplicate them.\n const seen = new WeakSet<t.Node>();\n\n let capturedInClosure = false;\n\n const constantViolations = filterMap(binding.constantViolations, path => {\n const { inBody, inClosure } = relativeLoopLocation(path, loopPath);\n if (!inBody) return null;\n capturedInClosure ||= inClosure;\n\n const id = path.isUpdateExpression()\n ? path.get(\"argument\")\n : path.isAssignmentExpression()\n ? path.get(\"left\")\n : null;\n if (id) seen.add(id.node);\n return id as NodePath<t.Identifier> | null;\n });\n\n const references = filterMap(binding.referencePaths, path => {\n if (seen.has(path.node)) return null;\n\n const { inBody, inClosure } = relativeLoopLocation(path, loopPath);\n if (!inBody) return null;\n capturedInClosure ||= inClosure;\n\n return path as NodePath<t.Identifier>;\n });\n\n return {\n capturedInClosure,\n hasConstantViolations: constantViolations.length > 0,\n usages: references.concat(constantViolations),\n };\n}\n\nfunction relativeLoopLocation(path: NodePath, loopPath: NodePath<t.Loop>) {\n const bodyPath = loopPath.get(\"body\");\n let inClosure = false;\n\n for (let currPath = path; currPath; currPath = currPath.parentPath) {\n if (currPath.isFunction() || currPath.isClass() || currPath.isMethod()) {\n inClosure = true;\n }\n if (currPath === bodyPath) {\n return { inBody: true, inClosure };\n } else if (currPath === loopPath) {\n return { inBody: false, inClosure };\n }\n }\n\n throw new Error(\n \"Internal Babel error: path is not in loop. Please report this as a bug.\",\n );\n}\n\ninterface CompletionsAndVarsState {\n breaksContinues: NodePath<t.BreakStatement | t.ContinueStatement>[];\n returns: NodePath<t.ReturnStatement>[];\n labelsStack: string[];\n labellessContinueTargets: number;\n labellessBreakTargets: number;\n\n vars: NodePath<t.VariableDeclaration>[];\n loopNode: t.Loop;\n}\n\nexport function wrapLoopBody(\n loopPath: NodePath<t.Loop>,\n captured: string[],\n updatedBindingsUsages: Map<string, NodePath<t.Identifier>[]>,\n) {\n const loopNode = loopPath.node;\n const state: CompletionsAndVarsState = {\n breaksContinues: [],\n returns: [],\n labelsStack: [],\n labellessBreakTargets: 0,\n labellessContinueTargets: 0,\n vars: [],\n loopNode,\n };\n loopPath.traverse(\n {\n Function(path) {\n path.skip();\n },\n LabeledStatement: {\n enter({ node }, state) {\n state.labelsStack.push(node.label.name);\n },\n exit({ node }, state) {\n const popped = state.labelsStack.pop();\n if (popped !== node.label.name) {\n throw new Error(\n \"Assertion failure. Please report this bug to Babel.\",\n );\n }\n },\n },\n Loop: {\n enter(_, state) {\n state.labellessContinueTargets++;\n state.labellessBreakTargets++;\n },\n exit(_, state) {\n state.labellessContinueTargets--;\n state.labellessBreakTargets--;\n },\n },\n SwitchStatement: {\n enter(_, state) {\n state.labellessBreakTargets++;\n },\n exit(_, state) {\n state.labellessBreakTargets--;\n },\n },\n \"BreakStatement|ContinueStatement\"(\n path: NodePath<t.BreakStatement | t.ContinueStatement>,\n state,\n ) {\n const { label } = path.node;\n if (label) {\n if (state.labelsStack.includes(label.name)) return;\n } else if (\n path.isBreakStatement()\n ? state.labellessBreakTargets > 0\n : state.labellessContinueTargets > 0\n ) {\n return;\n }\n state.breaksContinues.push(path);\n },\n ReturnStatement(path, state) {\n state.returns.push(path);\n },\n VariableDeclaration(path, state) {\n if (path.parent === state.loopNode && isVarInLoopHead(path)) return;\n if (path.node.kind === \"var\") state.vars.push(path);\n },\n },\n state,\n );\n\n const callArgs = [];\n const closureParams = [];\n const updater = [];\n for (const [name, updatedUsage] of updatedBindingsUsages) {\n callArgs.push(t.identifier(name));\n\n const innerName = loopPath.scope.generateUid(name);\n closureParams.push(t.identifier(innerName));\n updater.push(\n t.assignmentExpression(\"=\", t.identifier(name), t.identifier(innerName)),\n );\n for (const path of updatedUsage) path.replaceWith(t.identifier(innerName));\n }\n for (const name of captured) {\n if (updatedBindingsUsages.has(name)) continue; // already injected\n callArgs.push(t.identifier(name));\n closureParams.push(t.identifier(name));\n }\n\n const id = loopPath.scope.generateUid(\"loop\");\n const fn = t.functionExpression(\n null,\n closureParams,\n t.toBlock(loopNode.body),\n );\n let call: t.Expression = t.callExpression(t.identifier(id), callArgs);\n\n const fnParent = loopPath.findParent(p => p.isFunction());\n if (fnParent) {\n const { async, generator } = fnParent.node as t.Function;\n fn.async = async;\n fn.generator = generator ?? false;\n if (generator) call = t.yieldExpression(call, true);\n else if (async) call = t.awaitExpression(call);\n }\n\n const updaterNode =\n updater.length > 0\n ? t.expressionStatement(t.sequenceExpression(updater))\n : null;\n if (updaterNode) fn.body.body.push(updaterNode);\n\n // NOTE: Calling .insertBefore on the loop path might cause the\n // loop to be moved in the AST. For example, in\n // if (true) for (let x of y) ...\n // .insertBefore will replace the loop with a block:\n // if (true) { var _loop = ...; for (let x of y) ... }\n // All subsequent operations in this function on the loop node\n // must not assume that loopPath still represents the loop.\n // TODO: Consider using a function declaration\n const [varPath] = loopPath.insertBefore(\n t.variableDeclaration(\"var\", [t.variableDeclarator(t.identifier(id), fn)]),\n );\n\n const bodyStmts: t.Statement[] = [];\n\n const varNames: string[] = [];\n for (const varPath of state.vars) {\n const assign: t.Expression[] = [];\n for (const decl of varPath.node.declarations) {\n varNames.push(...Object.keys(t.getBindingIdentifiers(decl.id)));\n if (decl.init) {\n assign.push(\n t.assignmentExpression(\n \"=\",\n // using/await using should be handled by the explicit-resource-management plugin\n // so decl.id must not be a void pattern\n decl.id as Exclude<t.VariableDeclarator[\"id\"], t.VoidPattern>,\n decl.init,\n ),\n );\n } else if (t.isForXStatement(varPath.parent, { left: varPath.node })) {\n assign.push(decl.id as t.Identifier);\n }\n }\n if (assign.length > 0) {\n const replacement: t.Node =\n assign.length === 1 ? assign[0] : t.sequenceExpression(assign);\n varPath.replaceWith(replacement);\n } else {\n varPath.remove();\n }\n }\n if (varNames.length) {\n varPath.pushContainer(\n \"declarations\",\n varNames.map(name => t.variableDeclarator(t.identifier(name))),\n );\n }\n\n const labelNum = state.breaksContinues.length;\n const returnNum = state.returns.length;\n if (labelNum + returnNum === 0) {\n bodyStmts.push(t.expressionStatement(call));\n } else if (labelNum === 1 && returnNum === 0) {\n for (const path of state.breaksContinues) {\n const { node } = path;\n const { type, label } = node;\n let name = type === \"BreakStatement\" ? \"break\" : \"continue\";\n if (label) name += \" \" + label.name;\n path.replaceWith(\n t.addComment(\n t.returnStatement(t.numericLiteral(1)),\n \"trailing\",\n \" \" + name,\n true,\n ),\n );\n if (updaterNode) path.insertBefore(t.cloneNode(updaterNode));\n\n bodyStmts.push(\n template.statement.ast`\n if (${call}) ${node}\n `,\n );\n }\n } else {\n const completionId = loopPath.scope.generateUid(\"ret\");\n\n if (varPath.isVariableDeclaration()) {\n varPath.pushContainer(\"declarations\", [\n t.variableDeclarator(t.identifier(completionId)),\n ]);\n bodyStmts.push(\n t.expressionStatement(\n t.assignmentExpression(\"=\", t.identifier(completionId), call),\n ),\n );\n } else {\n bodyStmts.push(\n t.variableDeclaration(\"var\", [\n t.variableDeclarator(t.identifier(completionId), call),\n ]),\n );\n }\n\n const injected: string[] = [];\n for (const path of state.breaksContinues) {\n const { node } = path;\n const { type, label } = node;\n let name = type === \"BreakStatement\" ? \"break\" : \"continue\";\n if (label) name += \" \" + label.name;\n\n let i = injected.indexOf(name);\n const hasInjected = i !== -1;\n if (!hasInjected) {\n injected.push(name);\n i = injected.length - 1;\n }\n\n path.replaceWith(\n t.addComment(\n t.returnStatement(t.numericLiteral(i)),\n \"trailing\",\n \" \" + name,\n true,\n ),\n );\n if (updaterNode) path.insertBefore(t.cloneNode(updaterNode));\n\n if (hasInjected) continue;\n\n bodyStmts.push(\n template.statement.ast`\n if (${t.identifier(completionId)} === ${t.numericLiteral(i)}) ${node}\n `,\n );\n }\n\n if (returnNum) {\n for (const path of state.returns) {\n const arg = path.node.argument || t.buildUndefinedNode();\n path.replaceWith(\n template.statement.ast`\n return { v: ${arg} };\n `,\n );\n }\n\n bodyStmts.push(\n template.statement.ast`\n if (${t.identifier(completionId)}) return ${t.identifier(\n completionId,\n )}.v;\n `,\n );\n }\n }\n\n loopNode.body = t.blockStatement(bodyStmts);\n\n return varPath;\n}\n\nexport function isVarInLoopHead(path: NodePath<t.VariableDeclaration>) {\n if (t.isForStatement(path.parent)) return path.key === \"init\";\n if (t.isForXStatement(path.parent)) return path.key === \"left\";\n return false;\n}\n\nfunction filterMap<T, U extends object>(list: T[], fn: (item: T) => U | null) {\n const result: U[] = [];\n for (const item of list) {\n const mapped = fn(item);\n if (mapped) result.push(mapped);\n }\n return result;\n}\n","import { types as t } from \"@babel/core\";\nimport type { Scope, NodePath, PluginPass } from \"@babel/core\";\n\nexport function validateUsage(\n path: NodePath<t.VariableDeclaration>,\n state: PluginPass,\n tdzEnabled: boolean,\n) {\n const dynamicTDZNames = [];\n\n for (const name of Object.keys(path.getBindingIdentifiers())) {\n const binding = path.scope.getBinding(name);\n // binding may be null. ref: https://github.com/babel/babel/issues/15300\n if (!binding) continue;\n if (tdzEnabled) {\n if (injectTDZChecks(binding, state)) dynamicTDZNames.push(name);\n }\n if (path.node.kind === \"const\") {\n disallowConstantViolations(name, binding, state);\n }\n }\n\n return dynamicTDZNames;\n}\n\nfunction disallowConstantViolations(\n name: string,\n binding: Scope.Binding,\n state: PluginPass,\n) {\n for (const violation of binding.constantViolations) {\n const readOnlyError = state.addHelper(\"readOnlyError\");\n const throwNode = t.callExpression(readOnlyError, [t.stringLiteral(name)]);\n\n if (violation.isAssignmentExpression()) {\n const { operator, left, right } = violation.node;\n if (operator === \"=\") {\n const exprs = [right];\n exprs.push(throwNode);\n violation.replaceWith(t.sequenceExpression(exprs));\n } else if ([\"&&=\", \"||=\", \"??=\"].includes(operator)) {\n violation.replaceWith(\n t.logicalExpression(\n // @ts-expect-error todo: give a better type to operator\n operator.slice(0, -1),\n left,\n t.sequenceExpression([right, throwNode]),\n ),\n );\n } else {\n violation.replaceWith(\n t.sequenceExpression([\n t.binaryExpression(\n // @ts-expect-error todo: give a better type to operator\n operator.slice(0, -1),\n left,\n right,\n ),\n throwNode,\n ]),\n );\n }\n } else if (violation.isUpdateExpression()) {\n violation.replaceWith(\n t.sequenceExpression([\n t.unaryExpression(\"+\", violation.get(\"argument\").node),\n throwNode,\n ]),\n );\n } else if (violation.isForXStatement()) {\n violation.ensureBlock();\n violation\n .get(\"left\")\n .replaceWith(\n t.variableDeclaration(\"var\", [\n t.variableDeclarator(violation.scope.generateUidIdentifier(name)),\n ]),\n );\n (violation.node.body as t.BlockStatement).body.unshift(\n t.expressionStatement(throwNode),\n );\n }\n }\n}\n\nfunction getTDZStatus(refPath: NodePath, bindingPath: NodePath) {\n const executionStatus = bindingPath._guessExecutionStatusRelativeTo(refPath);\n\n if (executionStatus === \"before\") {\n return \"outside\";\n } else if (executionStatus === \"after\") {\n return \"inside\";\n } else {\n return \"maybe\";\n }\n}\n\nconst skipTDZChecks = new WeakSet();\n\nfunction buildTDZAssert(\n status: \"maybe\" | \"inside\",\n node: t.Identifier | t.JSXIdentifier,\n state: PluginPass,\n) {\n if (status === \"maybe\") {\n const clone = t.cloneNode(node);\n skipTDZChecks.add(clone);\n return t.callExpression(state.addHelper(\"temporalRef\"), [\n // @ts-expect-error Fixme: we may need to handle JSXIdentifier\n clone,\n t.stringLiteral(node.name),\n ]);\n } else {\n return t.callExpression(state.addHelper(\"tdz\"), [\n t.stringLiteral(node.name),\n ]);\n }\n}\n\ntype TDZReplacement = { status: \"maybe\" | \"inside\"; node: t.Expression };\nfunction getTDZReplacement(\n path: NodePath<t.Identifier | t.JSXIdentifier>,\n state: PluginPass,\n): TDZReplacement | undefined;\nfunction getTDZReplacement(\n path: NodePath,\n state: PluginPass,\n id: t.Identifier | t.JSXIdentifier,\n): TDZReplacement | undefined;\nfunction getTDZReplacement(\n path: NodePath,\n state: PluginPass,\n id: t.Identifier | t.JSXIdentifier = path.node as any,\n): TDZReplacement | undefined {\n if (skipTDZChecks.has(id)) return;\n skipTDZChecks.add(id);\n\n const bindingPath = path.scope.getBinding(id.name)?.path;\n\n if (!bindingPath || bindingPath.isFunctionDeclaration()) return;\n\n const status = getTDZStatus(path, bindingPath);\n if (status === \"outside\") return;\n\n if (status === \"maybe\") {\n // add tdzThis to parent variable declarator so it's exploded\n // @ts-expect-error todo(flow->ts): avoid mutations\n bindingPath.parent._tdzThis = true;\n }\n\n return { status, node: buildTDZAssert(status, id, state) };\n}\n\nfunction injectTDZChecks(binding: Scope.Binding, state: PluginPass) {\n const allUsages = new Set(binding.referencePaths);\n binding.constantViolations.forEach(allUsages.add, allUsages);\n\n let dynamicTdz = false;\n\n for (const path of binding.constantViolations) {\n const { node } = path;\n if (skipTDZChecks.has(node)) continue;\n skipTDZChecks.add(node);\n\n if (path.isUpdateExpression()) {\n // arg is an identifier referencing the current binding\n const arg = path.get(\"argument\") as NodePath<t.Identifier>;\n\n const replacement = getTDZReplacement(path, state, arg.node);\n if (!replacement) continue;\n\n if (replacement.status === \"maybe\") {\n dynamicTdz = true;\n path.insertBefore(replacement.node);\n } else {\n path.replaceWith(replacement.node);\n }\n } else if (path.isAssignmentExpression()) {\n const nodes = [];\n const ids = path.getAssignmentIdentifiers();\n for (const name of Object.keys(ids)) {\n const replacement = getTDZReplacement(path, state, ids[name]);\n if (replacement) {\n nodes.push(t.expressionStatement(replacement.node));\n if (replacement.status === \"inside\") break;\n if (replacement.status === \"maybe\") dynamicTdz = true;\n }\n }\n\n if (nodes.length > 0) path.insertBefore(nodes);\n }\n }\n\n for (const path of binding.referencePaths as NodePath<t.Identifier>[]) {\n if (path.parentPath.isUpdateExpression()) continue;\n // It will be handled after transforming the loop\n if (path.parentPath.isForXStatement({ left: path.node })) continue;\n\n const replacement = getTDZReplacement(path, state);\n if (!replacement) continue;\n if (replacement.status === \"maybe\") dynamicTdz = true;\n\n path.replaceWith(replacement.node);\n }\n\n return dynamicTdz;\n}\n","import { declare } from \"@babel/helper-plugin-utils\";\nimport type { NodePath, Scope, Visitor, PluginPass } from \"@babel/core\";\nimport { types as t } from \"@babel/core\";\n\nimport {\n getLoopBodyBindings,\n getUsageInBody,\n isVarInLoopHead,\n wrapLoopBody,\n} from \"./loop.ts\";\nimport { validateUsage } from \"./validation.ts\";\n\nexport interface Options {\n tdz?: boolean;\n throwIfClosureRequired?: boolean;\n}\n\nexport default declare((api, opts: Options) => {\n api.assertVersion(REQUIRED_VERSION(\"^7.0.0-0 || ^8.0.0\"));\n\n const { throwIfClosureRequired = false, tdz: tdzEnabled = false } = opts;\n if (typeof throwIfClosureRequired !== \"boolean\") {\n throw new Error(`.throwIfClosureRequired must be a boolean, or undefined`);\n }\n if (typeof tdzEnabled !== \"boolean\") {\n throw new Error(`.tdz must be a boolean, or undefined`);\n }\n\n return {\n name: \"transform-block-scoping\",\n\n visitor: {\n Loop(path: NodePath<t.Loop>, state) {\n const isForStatement = path.isForStatement();\n const headPath = isForStatement\n ? path.get(\"init\")\n : path.isForXStatement()\n ? path.get(\"left\")\n : null;\n\n let needsBodyWrap = false;\n const markNeedsBodyWrap = () => {\n if (throwIfClosureRequired) {\n throw path.buildCodeFrameError(\n \"Compiling let/const in this block would add a closure \" +\n \"(throwIfClosureRequired).\",\n );\n }\n needsBodyWrap = true;\n };\n\n const body = path.get(\"body\");\n let bodyScope: Scope | null | undefined;\n if (body.isBlockStatement()) {\n bodyScope = body.scope;\n }\n const bindings = getLoopBodyBindings(path);\n for (const binding of bindings) {\n const { capturedInClosure } = getUsageInBody(binding, path);\n if (capturedInClosure) markNeedsBodyWrap();\n }\n\n const captured: string[] = [];\n const updatedBindingsUsages = new Map<\n string,\n NodePath<t.Identifier>[]\n >();\n\n if (headPath && isBlockScoped(headPath)) {\n const names = Object.keys(headPath.getBindingIdentifiers());\n const headScope = headPath.scope;\n\n for (let name of names) {\n if (bodyScope?.hasOwnBinding(name)) continue; // shadowed\n\n let binding = headScope.getOwnBinding(name);\n if (!binding) {\n headScope.crawl();\n binding = headScope.getOwnBinding(name)!;\n }\n const { usages, capturedInClosure, hasConstantViolations } =\n getUsageInBody(binding, path);\n\n if (\n headScope.parent!.hasBinding(name) ||\n headScope.parent!.hasGlobal(name)\n ) {\n // If the binding is not captured, there is no need\n // of adding it to the closure param. However, rename\n // it if it shadows an outer binding, because the\n // closure will be moved to an outer level.\n const newName = headScope.generateUid(name);\n headScope.rename(name, newName);\n name = newName;\n }\n\n if (capturedInClosure) {\n markNeedsBodyWrap();\n captured.push(name);\n }\n\n if (isForStatement && hasConstantViolations) {\n updatedBindingsUsages.set(name, usages);\n }\n }\n }\n\n if (needsBodyWrap) {\n const varPath = wrapLoopBody(path, captured, updatedBindingsUsages);\n\n if (headPath?.isVariableDeclaration()) {\n // If we wrap the loop body, we transform the var\n // declaration in the loop head now, to avoid\n // invalid references that break other plugins:\n //\n // for (let head of x) {\n // let i = head;\n // setTimeout(() => i);\n // }\n //\n // would become\n //\n // function _loop() {\n // let i = head;\n // setTimeout(() => i);\n // }\n // for (let head of x) _loop();\n //\n // which references `head` in a scope where it's not visible.\n transformBlockScopedVariable(headPath, state, tdzEnabled);\n }\n\n (\n varPath.get(\"declarations.0.init\") as NodePath<t.FunctionExpression>\n ).unwrapFunctionEnvironment();\n }\n },\n\n VariableDeclaration(path, state) {\n transformBlockScopedVariable(path, state, tdzEnabled);\n },\n\n // Class declarations are block-scoped: if there is\n // a class declaration in a nested block that conflicts\n // with an outer block-scoped binding, rename it.\n // TODO: Should this be moved to the classes plugin?\n ClassDeclaration(path) {\n const { id } = path.node;\n if (!id) return;\n\n const { scope } = path.parentPath;\n if (\n !isVarScope(scope) &&\n scope.parent!.hasBinding(id.name, { noUids: true })\n ) {\n path.scope.rename(id.name);\n }\n },\n },\n };\n});\n\nconst conflictingFunctionsVisitor: Visitor<{ names: string[] }> = {\n Scope(path, { names }) {\n for (const name of names) {\n const binding = path.scope.getOwnBinding(name);\n if (binding?.kind === \"hoisted\") {\n path.scope.rename(name);\n }\n }\n },\n \"Expression|Declaration\"(path) {\n path.skip();\n },\n};\n\nfunction transformBlockScopedVariable(\n path: NodePath<t.VariableDeclaration>,\n state: PluginPass,\n tdzEnabled: boolean,\n) {\n if (!isBlockScoped(path)) return;\n\n const dynamicTDZNames = validateUsage(path, state, tdzEnabled);\n\n path.node.kind = \"var\";\n\n const bindingNames = Object.keys(path.getBindingIdentifiers());\n for (const name of bindingNames) {\n const binding = path.scope.getOwnBinding(name);\n if (!binding) continue;\n binding.kind = \"var\";\n }\n\n if (\n (isInLoop(path) && !isVarInLoopHead(path)) ||\n dynamicTDZNames.length > 0\n ) {\n for (const decl of path.node.declarations) {\n // We explicitly add `void 0` to cases like\n // for (;;) { let a; }\n // to make sure that `a` doesn't keep the value from\n // the previous iteration.\n decl.init ??= t.buildUndefinedNode();\n }\n }\n\n const blockScope = path.scope;\n const varScope =\n blockScope.getFunctionParent() || blockScope.getProgramParent();\n\n if (varScope !== blockScope) {\n for (const name of bindingNames) {\n let newName = name;\n if (\n // We pass `noUids` true because, if `name` was a generated\n // UID, it has been used to declare the current variable in\n // a nested scope and thus we don't need to assume that it\n // may be declared (but not registered yet) in an upper one.\n blockScope.parent!.hasBinding(name, { noUids: true }) ||\n blockScope.parent!.hasGlobal(name)\n ) {\n newName = blockScope.generateUid(name);\n blockScope.rename(name, newName);\n }\n\n blockScope.moveBindingTo(newName, varScope);\n }\n }\n\n blockScope.path.traverse(conflictingFunctionsVisitor, {\n names: bindingNames,\n });\n\n for (const name of dynamicTDZNames) {\n path.scope.push({\n id: t.identifier(name),\n init: state.addHelper(\"temporalUndefined\"),\n });\n }\n}\n\nfunction isLetOrConst(\n kind: t.VariableDeclaration[\"kind\"],\n): kind is \"let\" | \"const\" {\n return kind === \"let\" || kind === \"const\";\n}\n\nfunction isInLoop(path: NodePath<t.Node>): boolean {\n if (!path.parentPath) return false;\n if (path.parentPath.isLoop()) return true;\n if (path.parentPath.isFunctionParent()) return false;\n return isInLoop(path.parentPath);\n}\n\nfunction isBlockScoped(\n path: NodePath<t.Node | null>,\n): path is NodePath<t.VariableDeclaration> {\n const { node } = path;\n if (!t.isVariableDeclaration(node)) return false;\n const { kind } = node;\n if (kind === \"using\" || kind === \"await using\") {\n throw path.buildCodeFrameError(\n `The ${kind} declaration should be first transformed by \\`@babel/plugin-transform-explicit-resource-management\\`.`,\n );\n } else if (!isLetOrConst(kind)) {\n return false;\n }\n\n return true;\n}\n\nexport function isVarScope(scope: Scope) {\n return scope.path.isFunctionParent() || scope.path.isProgram();\n}\n"],"names":["collectLoopBodyBindingsVisitor","Expression|Declaration|Loop","path","skip","Scope","state","isFunctionParent","bindings","scope","name","Object","keys","binding","kind","blockScoped","push","getLoopBodyBindings","loopPath","traverse","getUsageInBody","seen","WeakSet","capturedInClosure","constantViolations","filterMap","inBody","inClosure","relativeLoopLocation","id","isUpdateExpression","get","isAssignmentExpression","add","node","references","referencePaths","has","hasConstantViolations","length","usages","concat","bodyPath","currPath","parentPath","isFunction","isClass","isMethod","Error","wrapLoopBody","captured","updatedBindingsUsages","loopNode","breaksContinues","returns","labelsStack","labellessBreakTargets","labellessContinueTargets","vars","Function","LabeledStatement","enter","label","exit","popped","pop","Loop","_","SwitchStatement","BreakStatement|ContinueStatement","includes","isBreakStatement","ReturnStatement","VariableDeclaration","parent","isVarInLoopHead","callArgs","closureParams","updater","updatedUsage","t","identifier","innerName","generateUid","assignmentExpression","replaceWith","fn","functionExpression","toBlock","body","call","callExpression","fnParent","findParent","p","async","generator","yieldExpression","awaitExpression","updaterNode","expressionStatement","sequenceExpression","varPath","insertBefore","variableDeclaration","variableDeclarator","bodyStmts","varNames","assign","decl","declarations","getBindingIdentifiers","init","isForXStatement","left","replacement","remove","pushContainer","map","labelNum","returnNum","type","addComment","returnStatement","numericLiteral","cloneNode","template","statement","ast","completionId","isVariableDeclaration","injected","i","indexOf","hasInjected","arg","argument","buildUndefinedNode","blockStatement","isForStatement","key","list","result","item","mapped","validateUsage","tdzEnabled","dynamicTDZNames","getBinding","injectTDZChecks","disallowConstantViolations","violation","readOnlyError","addHelper","throwNode","stringLiteral","operator","right","exprs","logicalExpression","slice","binaryExpression","unaryExpression","ensureBlock","generateUidIdentifier","unshift","getTDZStatus","refPath","bindingPath","executionStatus","_guessExecutionStatusRelativeTo","skipTDZChecks","buildTDZAssert","status","clone","getTDZReplacement","isFunctionDeclaration","_tdzThis","allUsages","Set","forEach","dynamicTdz","nodes","ids","getAssignmentIdentifiers","declare","api","opts","assertVersion","throwIfClosureRequired","tdz","visitor","headPath","needsBodyWrap","markNeedsBodyWrap","buildCodeFrameError","bodyScope","isBlockStatement","Map","isBlockScoped","names","headScope","hasOwnBinding","getOwnBinding","crawl","hasBinding","hasGlobal","newName","rename","set","transformBlockScopedVariable","unwrapFunctionEnvironment","ClassDeclaration","isVarScope","noUids","conflictingFunctionsVisitor","Expression|Declaration","bindingNames","isInLoop","blockScope","varScope","getFunctionParent","getProgramParent","moveBindingTo","isLetOrConst","isLoop","isProgram"],"mappings":"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"}
{"version":3,"file":"index.js","sources":["../src/loop.ts","../src/validation.ts","../src/index.ts"],"sourcesContent":["import { template, types as t } from \"@babel/core\";\nimport type { NodePath, Visitor, Scope } from \"@babel/core\";\n\ninterface LoopBodyBindingsState {\n blockScoped: Scope.Binding[];\n}\n\nconst collectLoopBodyBindingsVisitor: Visitor<LoopBodyBindingsState> = {\n \"Expression|Declaration|Loop\"(path) {\n path.skip();\n },\n Scope(path, state) {\n if (path.isFunctionParent()) path.skip();\n\n const { bindings } = path.scope;\n for (const name of Object.keys(bindings)) {\n const binding = bindings[name];\n if (\n binding.kind === \"let\" ||\n binding.kind === \"const\" ||\n binding.kind === \"hoisted\"\n ) {\n state.blockScoped.push(binding);\n }\n }\n },\n};\n\nexport function getLoopBodyBindings(loopPath: NodePath<t.Loop>) {\n const state: LoopBodyBindingsState = { blockScoped: [] };\n loopPath.traverse(collectLoopBodyBindingsVisitor, state);\n return state.blockScoped;\n}\n\nexport function getUsageInBody(\n binding: Scope.Binding,\n loopPath: NodePath<t.Loop>,\n) {\n // UpdateExpressions are counted both as a reference and a mutation,\n // so we need to de-duplicate them.\n const seen = new WeakSet<t.Node>();\n\n let capturedInClosure = false;\n\n const constantViolations = filterMap(binding.constantViolations, path => {\n const { inBody, inClosure } = relativeLoopLocation(path, loopPath);\n if (!inBody) return null;\n capturedInClosure ||= inClosure;\n\n const id = path.isUpdateExpression()\n ? path.get(\"argument\")\n : path.isAssignmentExpression()\n ? path.get(\"left\")\n : null;\n if (id) seen.add(id.node);\n return id as NodePath<t.Identifier> | null;\n });\n\n const references = filterMap(binding.referencePaths, path => {\n if (seen.has(path.node)) return null;\n\n const { inBody, inClosure } = relativeLoopLocation(path, loopPath);\n if (!inBody) return null;\n capturedInClosure ||= inClosure;\n\n return path as NodePath<t.Identifier>;\n });\n\n return {\n capturedInClosure,\n hasConstantViolations: constantViolations.length > 0,\n usages: references.concat(constantViolations),\n };\n}\n\nfunction relativeLoopLocation(path: NodePath, loopPath: NodePath<t.Loop>) {\n const bodyPath = loopPath.get(\"body\");\n let inClosure = false;\n\n for (let currPath = path; currPath; currPath = currPath.parentPath) {\n if (currPath.isFunction() || currPath.isClass() || currPath.isMethod()) {\n inClosure = true;\n }\n if (currPath === bodyPath) {\n return { inBody: true, inClosure };\n } else if (currPath === loopPath) {\n return { inBody: false, inClosure };\n }\n }\n\n throw new Error(\n \"Internal Babel error: path is not in loop. Please report this as a bug.\",\n );\n}\n\ninterface CompletionsAndVarsState {\n breaksContinues: NodePath<t.BreakStatement | t.ContinueStatement>[];\n returns: NodePath<t.ReturnStatement>[];\n labelsStack: string[];\n labellessContinueTargets: number;\n labellessBreakTargets: number;\n\n vars: NodePath<t.VariableDeclaration>[];\n loopNode: t.Loop;\n}\n\nexport function wrapLoopBody(\n loopPath: NodePath<t.Loop>,\n captured: string[],\n updatedBindingsUsages: Map<string, NodePath<t.Identifier>[]>,\n) {\n const loopNode = loopPath.node;\n const state: CompletionsAndVarsState = {\n breaksContinues: [],\n returns: [],\n labelsStack: [],\n labellessBreakTargets: 0,\n labellessContinueTargets: 0,\n vars: [],\n loopNode,\n };\n loopPath.traverse(\n {\n Function(path) {\n path.skip();\n },\n LabeledStatement: {\n enter({ node }, state) {\n state.labelsStack.push(node.label.name);\n },\n exit({ node }, state) {\n const popped = state.labelsStack.pop();\n if (popped !== node.label.name) {\n throw new Error(\n \"Assertion failure. Please report this bug to Babel.\",\n );\n }\n },\n },\n Loop: {\n enter(_, state) {\n state.labellessContinueTargets++;\n state.labellessBreakTargets++;\n },\n exit(_, state) {\n state.labellessContinueTargets--;\n state.labellessBreakTargets--;\n },\n },\n SwitchStatement: {\n enter(_, state) {\n state.labellessBreakTargets++;\n },\n exit(_, state) {\n state.labellessBreakTargets--;\n },\n },\n \"BreakStatement|ContinueStatement\"(\n path: NodePath<t.BreakStatement | t.ContinueStatement>,\n state,\n ) {\n const { label } = path.node;\n if (label) {\n if (state.labelsStack.includes(label.name)) return;\n } else if (\n path.isBreakStatement()\n ? state.labellessBreakTargets > 0\n : state.labellessContinueTargets > 0\n ) {\n return;\n }\n state.breaksContinues.push(path);\n },\n ReturnStatement(path, state) {\n state.returns.push(path);\n },\n VariableDeclaration(path, state) {\n if (path.parent === state.loopNode && isVarInLoopHead(path)) return;\n if (path.node.kind === \"var\") state.vars.push(path);\n },\n },\n state,\n );\n\n const callArgs = [];\n const closureParams = [];\n const updater = [];\n for (const [name, updatedUsage] of updatedBindingsUsages) {\n callArgs.push(t.identifier(name));\n\n const innerName = loopPath.scope.generateUid(name);\n closureParams.push(t.identifier(innerName));\n updater.push(\n t.assignmentExpression(\"=\", t.identifier(name), t.identifier(innerName)),\n );\n for (const path of updatedUsage) path.replaceWith(t.identifier(innerName));\n }\n for (const name of captured) {\n if (updatedBindingsUsages.has(name)) continue; // already injected\n callArgs.push(t.identifier(name));\n closureParams.push(t.identifier(name));\n }\n\n const id = loopPath.scope.generateUid(\"loop\");\n const fn = t.functionExpression(\n null,\n closureParams,\n t.toBlock(loopNode.body),\n );\n let call: t.Expression = t.callExpression(t.identifier(id), callArgs);\n\n const fnParent = loopPath.findParent(p => p.isFunction());\n if (fnParent) {\n const { async, generator } = fnParent.node as t.Function;\n fn.async = async;\n fn.generator = generator ?? false;\n if (generator) call = t.yieldExpression(call, true);\n else if (async) call = t.awaitExpression(call);\n }\n\n const updaterNode =\n updater.length > 0\n ? t.expressionStatement(t.sequenceExpression(updater))\n : null;\n if (updaterNode) fn.body.body.push(updaterNode);\n\n // NOTE: Calling .insertBefore on the loop path might cause the\n // loop to be moved in the AST. For example, in\n // if (true) for (let x of y) ...\n // .insertBefore will replace the loop with a block:\n // if (true) { var _loop = ...; for (let x of y) ... }\n // All subsequent operations in this function on the loop node\n // must not assume that loopPath still represents the loop.\n // TODO: Consider using a function declaration\n const [varPath] = loopPath.insertBefore(\n t.variableDeclaration(\"var\", [t.variableDeclarator(t.identifier(id), fn)]),\n );\n\n const bodyStmts: t.Statement[] = [];\n\n const varNames: string[] = [];\n for (const varPath of state.vars) {\n const assign: t.Expression[] = [];\n for (const decl of varPath.node.declarations) {\n varNames.push(...Object.keys(t.getBindingIdentifiers(decl.id)));\n if (decl.init) {\n assign.push(\n t.assignmentExpression(\n \"=\",\n // using/await using should be handled by the explicit-resource-management plugin\n // so decl.id must not be a void pattern\n decl.id as Exclude<t.VariableDeclarator[\"id\"], t.VoidPattern>,\n decl.init,\n ),\n );\n } else if (t.isForXStatement(varPath.parent, { left: varPath.node })) {\n assign.push(decl.id as t.Identifier);\n }\n }\n if (assign.length > 0) {\n const replacement: t.Node =\n assign.length === 1 ? assign[0] : t.sequenceExpression(assign);\n varPath.replaceWith(replacement);\n } else {\n varPath.remove();\n }\n }\n if (varNames.length) {\n varPath.pushContainer(\n \"declarations\",\n varNames.map(name => t.variableDeclarator(t.identifier(name))),\n );\n }\n\n const labelNum = state.breaksContinues.length;\n const returnNum = state.returns.length;\n if (labelNum + returnNum === 0) {\n bodyStmts.push(t.expressionStatement(call));\n } else if (labelNum === 1 && returnNum === 0) {\n for (const path of state.breaksContinues) {\n const { node } = path;\n const { type, label } = node;\n let name = type === \"BreakStatement\" ? \"break\" : \"continue\";\n if (label) name += \" \" + label.name;\n path.replaceWith(\n t.addComment(\n t.returnStatement(t.numericLiteral(1)),\n \"trailing\",\n \" \" + name,\n true,\n ),\n );\n if (updaterNode) path.insertBefore(t.cloneNode(updaterNode));\n\n bodyStmts.push(\n template.statement.ast`\n if (${call}) ${node}\n `,\n );\n }\n } else {\n const completionId = loopPath.scope.generateUid(\"ret\");\n\n if (varPath.isVariableDeclaration()) {\n varPath.pushContainer(\"declarations\", [\n t.variableDeclarator(t.identifier(completionId)),\n ]);\n bodyStmts.push(\n t.expressionStatement(\n t.assignmentExpression(\"=\", t.identifier(completionId), call),\n ),\n );\n } else {\n bodyStmts.push(\n t.variableDeclaration(\"var\", [\n t.variableDeclarator(t.identifier(completionId), call),\n ]),\n );\n }\n\n const injected: string[] = [];\n for (const path of state.breaksContinues) {\n const { node } = path;\n const { type, label } = node;\n let name = type === \"BreakStatement\" ? \"break\" : \"continue\";\n if (label) name += \" \" + label.name;\n\n let i = injected.indexOf(name);\n const hasInjected = i !== -1;\n if (!hasInjected) {\n injected.push(name);\n i = injected.length - 1;\n }\n\n path.replaceWith(\n t.addComment(\n t.returnStatement(t.numericLiteral(i)),\n \"trailing\",\n \" \" + name,\n true,\n ),\n );\n if (updaterNode) path.insertBefore(t.cloneNode(updaterNode));\n\n if (hasInjected) continue;\n\n bodyStmts.push(\n template.statement.ast`\n if (${t.identifier(completionId)} === ${t.numericLiteral(i)}) ${node}\n `,\n );\n }\n\n if (returnNum) {\n for (const path of state.returns) {\n const arg = path.node.argument || t.buildUndefinedNode();\n path.replaceWith(\n template.statement.ast`\n return { v: ${arg} };\n `,\n );\n }\n\n bodyStmts.push(\n template.statement.ast`\n if (${t.identifier(completionId)}) return ${t.identifier(\n completionId,\n )}.v;\n `,\n );\n }\n }\n\n loopNode.body = t.blockStatement(bodyStmts);\n\n return varPath;\n}\n\nexport function isVarInLoopHead(path: NodePath<t.VariableDeclaration>) {\n if (t.isForStatement(path.parent)) return path.key === \"init\";\n if (t.isForXStatement(path.parent)) return path.key === \"left\";\n return false;\n}\n\nfunction filterMap<T, U extends object>(list: T[], fn: (item: T) => U | null) {\n const result: U[] = [];\n for (const item of list) {\n const mapped = fn(item);\n if (mapped) result.push(mapped);\n }\n return result;\n}\n","import { types as t } from \"@babel/core\";\nimport type { Scope, NodePath, PluginPass } from \"@babel/core\";\n\nexport function validateUsage(\n path: NodePath<t.VariableDeclaration>,\n state: PluginPass,\n tdzEnabled: boolean,\n) {\n const dynamicTDZNames = [];\n\n for (const name of Object.keys(path.getBindingIdentifiers())) {\n const binding = path.scope.getBinding(name);\n // binding may be null. ref: https://github.com/babel/babel/issues/15300\n if (!binding) continue;\n if (tdzEnabled) {\n if (injectTDZChecks(binding, state)) dynamicTDZNames.push(name);\n }\n if (path.node.kind === \"const\") {\n disallowConstantViolations(name, binding, state);\n }\n }\n\n return dynamicTDZNames;\n}\n\nfunction disallowConstantViolations(\n name: string,\n binding: Scope.Binding,\n state: PluginPass,\n) {\n for (const violation of binding.constantViolations) {\n const readOnlyError = state.addHelper(\"readOnlyError\");\n const throwNode = t.callExpression(readOnlyError, [t.stringLiteral(name)]);\n\n if (violation.isAssignmentExpression()) {\n const { operator, left, right } = violation.node;\n if (operator === \"=\") {\n const exprs = [right];\n exprs.push(throwNode);\n violation.replaceWith(t.sequenceExpression(exprs));\n } else if ([\"&&=\", \"||=\", \"??=\"].includes(operator)) {\n violation.replaceWith(\n t.logicalExpression(\n // @ts-expect-error todo: give a better type to operator\n operator.slice(0, -1),\n left,\n t.sequenceExpression([right, throwNode]),\n ),\n );\n } else {\n violation.replaceWith(\n t.sequenceExpression([\n t.binaryExpression(\n // @ts-expect-error todo: give a better type to operator\n operator.slice(0, -1),\n left,\n right,\n ),\n throwNode,\n ]),\n );\n }\n } else if (violation.isUpdateExpression()) {\n violation.replaceWith(\n t.sequenceExpression([\n t.unaryExpression(\"+\", violation.get(\"argument\").node),\n throwNode,\n ]),\n );\n } else if (violation.isForXStatement()) {\n violation.ensureBlock();\n violation\n .get(\"left\")\n .replaceWith(\n t.variableDeclaration(\"var\", [\n t.variableDeclarator(violation.scope.generateUidIdentifier(name)),\n ]),\n );\n (violation.node.body as t.BlockStatement).body.unshift(\n t.expressionStatement(throwNode),\n );\n }\n }\n}\n\nfunction getTDZStatus(refPath: NodePath, bindingPath: NodePath) {\n const executionStatus = bindingPath._guessExecutionStatusRelativeTo(refPath);\n\n if (executionStatus === \"before\") {\n return \"outside\";\n } else if (executionStatus === \"after\") {\n return \"inside\";\n } else {\n return \"maybe\";\n }\n}\n\nconst skipTDZChecks = new WeakSet();\n\nfunction buildTDZAssert(\n status: \"maybe\" | \"inside\",\n node: t.Identifier | t.JSXIdentifier,\n state: PluginPass,\n) {\n if (status === \"maybe\") {\n const clone = t.cloneNode(node);\n skipTDZChecks.add(clone);\n return t.callExpression(state.addHelper(\"temporalRef\"), [\n // @ts-expect-error Fixme: we may need to handle JSXIdentifier\n clone,\n t.stringLiteral(node.name),\n ]);\n } else {\n return t.callExpression(state.addHelper(\"tdz\"), [\n t.stringLiteral(node.name),\n ]);\n }\n}\n\ntype TDZReplacement = { status: \"maybe\" | \"inside\"; node: t.Expression };\nfunction getTDZReplacement(\n path: NodePath<t.Identifier | t.JSXIdentifier>,\n state: PluginPass,\n): TDZReplacement | undefined;\nfunction getTDZReplacement(\n path: NodePath,\n state: PluginPass,\n id: t.Identifier | t.JSXIdentifier,\n): TDZReplacement | undefined;\nfunction getTDZReplacement(\n path: NodePath,\n state: PluginPass,\n id: t.Identifier | t.JSXIdentifier = path.node as any,\n): TDZReplacement | undefined {\n if (skipTDZChecks.has(id)) return;\n skipTDZChecks.add(id);\n\n const bindingPath = path.scope.getBinding(id.name)?.path;\n\n if (!bindingPath || bindingPath.isFunctionDeclaration()) return;\n\n const status = getTDZStatus(path, bindingPath);\n if (status === \"outside\") return;\n\n if (status === \"maybe\") {\n // add tdzThis to parent variable declarator so it's exploded\n // @ts-expect-error todo(flow->ts): avoid mutations\n bindingPath.parent._tdzThis = true;\n }\n\n return { status, node: buildTDZAssert(status, id, state) };\n}\n\nfunction injectTDZChecks(binding: Scope.Binding, state: PluginPass) {\n const allUsages = new Set(binding.referencePaths);\n binding.constantViolations.forEach(allUsages.add, allUsages);\n\n let dynamicTdz = false;\n\n for (const path of binding.constantViolations) {\n const { node } = path;\n if (skipTDZChecks.has(node)) continue;\n skipTDZChecks.add(node);\n\n if (path.isUpdateExpression()) {\n // arg is an identifier referencing the current binding\n const arg = path.get(\"argument\") as NodePath<t.Identifier>;\n\n const replacement = getTDZReplacement(path, state, arg.node);\n if (!replacement) continue;\n\n if (replacement.status === \"maybe\") {\n dynamicTdz = true;\n path.insertBefore(replacement.node);\n } else {\n path.replaceWith(replacement.node);\n }\n } else if (path.isAssignmentExpression()) {\n const nodes = [];\n const ids = path.getAssignmentIdentifiers();\n for (const name of Object.keys(ids)) {\n const replacement = getTDZReplacement(path, state, ids[name]);\n if (replacement) {\n nodes.push(t.expressionStatement(replacement.node));\n if (replacement.status === \"inside\") break;\n if (replacement.status === \"maybe\") dynamicTdz = true;\n }\n }\n\n if (nodes.length > 0) path.insertBefore(nodes);\n }\n }\n\n for (const path of binding.referencePaths as NodePath<t.Identifier>[]) {\n if (path.parentPath.isUpdateExpression()) continue;\n // It will be handled after transforming the loop\n if (path.parentPath.isForXStatement({ left: path.node })) continue;\n\n const replacement = getTDZReplacement(path, state);\n if (!replacement) continue;\n if (replacement.status === \"maybe\") dynamicTdz = true;\n\n path.replaceWith(replacement.node);\n }\n\n return dynamicTdz;\n}\n","import { declare } from \"@babel/helper-plugin-utils\";\nimport type { NodePath, Scope, Visitor, PluginPass } from \"@babel/core\";\nimport { types as t } from \"@babel/core\";\n\nimport {\n getLoopBodyBindings,\n getUsageInBody,\n isVarInLoopHead,\n wrapLoopBody,\n} from \"./loop.ts\";\nimport { validateUsage } from \"./validation.ts\";\n\nexport interface Options {\n tdz?: boolean;\n throwIfClosureRequired?: boolean;\n}\n\nexport default declare((api, opts: Options) => {\n api.assertVersion(REQUIRED_VERSION(\"^7.0.0-0 || ^8.0.0\"));\n\n const { throwIfClosureRequired = false, tdz: tdzEnabled = false } = opts;\n if (typeof throwIfClosureRequired !== \"boolean\") {\n throw new Error(`.throwIfClosureRequired must be a boolean, or undefined`);\n }\n if (typeof tdzEnabled !== \"boolean\") {\n throw new Error(`.tdz must be a boolean, or undefined`);\n }\n\n return {\n name: \"transform-block-scoping\",\n\n visitor: {\n Loop(path: NodePath<t.Loop>, state) {\n const isForStatement = path.isForStatement();\n const headPath = isForStatement\n ? path.get(\"init\")\n : path.isForXStatement()\n ? path.get(\"left\")\n : null;\n\n let needsBodyWrap = false;\n const markNeedsBodyWrap = () => {\n if (throwIfClosureRequired) {\n throw path.buildCodeFrameError(\n \"Compiling let/const in this block would add a closure \" +\n \"(throwIfClosureRequired).\",\n );\n }\n needsBodyWrap = true;\n };\n\n const body = path.get(\"body\");\n let bodyScope: Scope | null | undefined;\n if (body.isBlockStatement()) {\n bodyScope = body.scope;\n }\n const bindings = getLoopBodyBindings(path);\n for (const binding of bindings) {\n const { capturedInClosure } = getUsageInBody(binding, path);\n if (capturedInClosure) markNeedsBodyWrap();\n }\n\n const captured: string[] = [];\n const updatedBindingsUsages = new Map<\n string,\n NodePath<t.Identifier>[]\n >();\n\n if (headPath && isBlockScoped(headPath)) {\n const names = Object.keys(headPath.getBindingIdentifiers());\n const headScope = headPath.scope;\n\n for (let name of names) {\n if (bodyScope?.hasOwnBinding(name)) continue; // shadowed\n\n let binding = headScope.getOwnBinding(name);\n if (!binding) {\n headScope.crawl();\n binding = headScope.getOwnBinding(name)!;\n }\n const { usages, capturedInClosure, hasConstantViolations } =\n getUsageInBody(binding, path);\n\n if (\n headScope.parent!.hasBinding(name) ||\n headScope.parent!.hasGlobal(name)\n ) {\n // If the binding is not captured, there is no need\n // of adding it to the closure param. However, rename\n // it if it shadows an outer binding, because the\n // closure will be moved to an outer level.\n const newName = headScope.generateUid(name);\n headScope.rename(name, newName);\n name = newName;\n }\n\n if (capturedInClosure) {\n markNeedsBodyWrap();\n captured.push(name);\n }\n\n if (isForStatement && hasConstantViolations) {\n updatedBindingsUsages.set(name, usages);\n }\n }\n }\n\n if (needsBodyWrap) {\n const varPath = wrapLoopBody(path, captured, updatedBindingsUsages);\n\n if (headPath?.isVariableDeclaration()) {\n // If we wrap the loop body, we transform the var\n // declaration in the loop head now, to avoid\n // invalid references that break other plugins:\n //\n // for (let head of x) {\n // let i = head;\n // setTimeout(() => i);\n // }\n //\n // would become\n //\n // function _loop() {\n // let i = head;\n // setTimeout(() => i);\n // }\n // for (let head of x) _loop();\n //\n // which references `head` in a scope where it's not visible.\n transformBlockScopedVariable(headPath, state, tdzEnabled);\n }\n\n (\n varPath.get(\"declarations.0.init\") as NodePath<t.FunctionExpression>\n ).unwrapFunctionEnvironment();\n }\n },\n\n VariableDeclaration(path, state) {\n transformBlockScopedVariable(path, state, tdzEnabled);\n },\n\n // Class declarations are block-scoped: if there is\n // a class declaration in a nested block that conflicts\n // with an outer block-scoped binding, rename it.\n // TODO: Should this be moved to the classes plugin?\n ClassDeclaration(path) {\n const { id } = path.node;\n if (!id) return;\n\n const { scope } = path.parentPath;\n if (\n !isVarScope(scope) &&\n scope.parent!.hasBinding(id.name, { noUids: true })\n ) {\n path.scope.rename(id.name);\n }\n },\n },\n };\n});\n\nconst conflictingFunctionsVisitor: Visitor<{ names: string[] }> = {\n Scope(path, { names }) {\n for (const name of names) {\n const binding = path.scope.getOwnBinding(name);\n if (binding?.kind === \"hoisted\") {\n path.scope.rename(name);\n }\n }\n },\n \"Expression|Declaration\"(path) {\n path.skip();\n },\n};\n\nfunction transformBlockScopedVariable(\n path: NodePath<t.VariableDeclaration>,\n state: PluginPass,\n tdzEnabled: boolean,\n) {\n if (!isBlockScoped(path)) return;\n\n const dynamicTDZNames = validateUsage(path, state, tdzEnabled);\n\n path.node.kind = \"var\";\n\n const bindingNames = Object.keys(path.getBindingIdentifiers());\n for (const name of bindingNames) {\n const binding = path.scope.getOwnBinding(name);\n if (!binding) continue;\n binding.kind = \"var\";\n }\n\n if (\n (isInLoop(path) && !isVarInLoopHead(path)) ||\n dynamicTDZNames.length > 0\n ) {\n for (const decl of path.node.declarations) {\n // We explicitly add `void 0` to cases like\n // for (;;) { let a; }\n // to make sure that `a` doesn't keep the value from\n // the previous iteration.\n decl.init ??= t.buildUndefinedNode();\n }\n }\n\n const blockScope = path.scope;\n const varScope =\n blockScope.getFunctionParent() || blockScope.getProgramParent();\n\n if (varScope !== blockScope) {\n for (const name of bindingNames) {\n let newName = name;\n if (\n // We pass `noUids` true because, if `name` was a generated\n // UID, it has been used to declare the current variable in\n // a nested scope and thus we don't need to assume that it\n // may be declared (but not registered yet) in an upper one.\n blockScope.parent!.hasBinding(name, { noUids: true }) ||\n blockScope.parent!.hasGlobal(name)\n ) {\n newName = blockScope.generateUid(name);\n blockScope.rename(name, newName);\n }\n\n blockScope.moveBindingTo(newName, varScope);\n }\n }\n\n blockScope.path.traverse(conflictingFunctionsVisitor, {\n names: bindingNames,\n });\n\n for (const name of dynamicTDZNames) {\n path.scope.push({\n id: t.identifier(name),\n init: state.addHelper(\"temporalUndefined\"),\n });\n }\n}\n\nfunction isLetOrConst(\n kind: t.VariableDeclaration[\"kind\"],\n): kind is \"let\" | \"const\" {\n return kind === \"let\" || kind === \"const\";\n}\n\nfunction isInLoop(path: NodePath<t.Node>): boolean {\n if (!path.parentPath) return false;\n if (path.parentPath.isLoop()) return true;\n if (path.parentPath.isFunctionParent()) return false;\n return isInLoop(path.parentPath);\n}\n\nfunction isBlockScoped(\n path: NodePath<t.Node | null>,\n): path is NodePath<t.VariableDeclaration> {\n const { node } = path;\n if (!t.isVariableDeclaration(node)) return false;\n const { kind } = node;\n if (kind === \"using\" || kind === \"await using\") {\n throw path.buildCodeFrameError(\n `The ${kind} declaration should be first transformed by \\`@babel/plugin-transform-explicit-resource-management\\`.`,\n );\n } else if (!isLetOrConst(kind)) {\n return false;\n }\n\n return true;\n}\n\nexport function isVarScope(scope: Scope) {\n return scope.path.isFunctionParent() || scope.path.isProgram();\n}\n"],"names":["Expression|Declaration|Loop","BreakStatement|ContinueStatement","t","Expression|Declaration"],"mappings":"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"}
{
"name": "@babel/plugin-transform-block-scoping",
"version": "8.0.0-rc.6",
"version": "8.0.0",
"description": "Compile ES2015 block scoping (const and let) to ES5",

@@ -17,3 +17,3 @@ "repository": {

"dependencies": {
"@babel/helper-plugin-utils": "^8.0.0-rc.6"
"@babel/helper-plugin-utils": "^8.0.0"
},

@@ -24,8 +24,8 @@ "keywords": [

"peerDependencies": {
"@babel/core": "^8.0.0-rc.6"
"@babel/core": "^8.0.0"
},
"devDependencies": {
"@babel/core": "^8.0.0-rc.6",
"@babel/helper-plugin-test-runner": "^8.0.0-rc.6",
"@babel/traverse": "^8.0.0-rc.6"
"@babel/core": "^8.0.0",
"@babel/helper-plugin-test-runner": "^8.0.0",
"@babel/traverse": "^8.0.0"
},

@@ -32,0 +32,0 @@ "engines": {