Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@babel/plugin-transform-block-scoping

Package Overview
Dependencies
Maintainers
4
Versions
136
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-beta.4
to
8.0.0-rc.1
+4
-2
lib/index.d.ts
import * as _babel_core from '@babel/core';
import { PluginPass } from '@babel/core';
import { PluginPass, Scope } from '@babel/core';

@@ -10,2 +10,4 @@ interface Options {

export { type Options, _default as default };
declare function isVarScope(scope: Scope): boolean;
export { type Options, _default as default, isVarScope };
import { declare } from '@babel/helper-plugin-utils';
import { types, template, traverse } from '@babel/core';
import { types, template } from '@babel/core';

@@ -408,64 +408,4 @@ const collectLoopBodyBindingsVisitor = {

const annexB33FunctionsVisitor = {
VariableDeclaration(path) {
if (isStrict(path)) return;
if (path.node.kind !== "var") return;
const varScope = path.scope.getFunctionParent() || path.scope.getProgramParent();
varScope.path.traverse(functionsToVarVisitor, {
names: Object.keys(path.getBindingIdentifiers())
});
}
};
function maybeTransformBlockScopedFunction(path) {
const {
node,
parentPath: {
scope
}
} = path;
const {
id
} = node;
scope.removeOwnBinding(id.name);
node.id = null;
const varNode = types.variableDeclaration("var", [types.variableDeclarator(id, types.toExpression(node))]);
varNode._blockHoist = 2;
const [varPath] = path.replaceWith(varNode);
scope.registerDeclaration(varPath);
}
const functionsToVarVisitor = {
Scope(path, {
names
}) {
for (const name of names) {
const binding = path.scope.getOwnBinding(name);
if (binding?.kind === "hoisted") {
maybeTransformBlockScopedFunction(binding.path);
}
}
},
"Expression|Declaration"(path) {
path.skip();
}
};
function isVarScope(scope) {
return scope.path.isFunctionParent() || scope.path.isProgram();
}
function isStrict(path) {
return !!path.find(({
node
}) => {
if (types.isProgram(node)) {
if (node.sourceType === "module") return true;
} else if (types.isClass(node)) {
return true;
} else if (!types.isBlockStatement(node)) {
return false;
}
return node.directives?.some(directive => directive.value.value === "use strict");
});
}
var index = declare((api, opts) => {
api.assertVersion("^7.0.0-0 || ^8.0.0 || 8.0.0-beta.4");
api.assertVersion("^7.0.0-0 || ^8.0.0 || 8.0.0-rc.1");
const {

@@ -483,3 +423,3 @@ throwIfClosureRequired = false,

name: "transform-block-scoping",
visitor: traverse.visitors.merge([annexB33FunctionsVisitor, {
visitor: {
Loop(path, state) {

@@ -563,3 +503,3 @@ const isForStatement = path.isForStatement();

}
}])
}
};

@@ -645,4 +585,7 @@ });

}
function isVarScope(scope) {
return scope.path.isFunctionParent() || scope.path.isProgram();
}
export { index as default };
export { index as default, isVarScope };
//# sourceMappingURL=index.js.map

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

{"version":3,"file":"index.js","sources":["../src/loop.ts","../src/validation.ts","../src/annex-B_3_3.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\nconst collectCompletionsAndVarsVisitor: Visitor<CompletionsAndVarsState> = {\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(\"Assertion failure. Please report this bug to Babel.\");\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\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(collectCompletionsAndVarsVisitor, state);\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;\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 = [];\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 || path.scope.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 { types as t } from \"@babel/core\";\nimport type { NodePath, Visitor, Scope } from \"@babel/core\";\n\n// Whenever a function declaration in a nested block scope\n// doesn't conflict with a block-scoped binding from an outer\n// scope, we transform it to a variable declaration.\n//\n// This implements the Annex B.3.3 behavior.\n//\n// TODO(Babel 8): Figure out how this should interact with\n// the transform-block-scoped functions plugin (it feels\n// wrong to handle this transform here), and what we want\n// to do with Annex B behavior in general.\n\n// To avoid confusing block-scoped variables transformed to\n// var with original vars, this transformation happens in two\n// different places:\n// 1. For functions that \"conflict\" with var-variables, in\n// the VariableDeclaration visitor.\n// 2. For functions that don't conflict with any variable,\n// in the FunctionDeclaration visitor.\n\nexport const annexB33FunctionsVisitor: Visitor = {\n VariableDeclaration(path) {\n if (isStrict(path)) return;\n if (path.node.kind !== \"var\") return;\n\n const varScope =\n path.scope.getFunctionParent() || path.scope.getProgramParent();\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n varScope.path.traverse(functionsToVarVisitor, {\n names: Object.keys(path.getBindingIdentifiers()),\n });\n },\n};\n\nfunction maybeTransformBlockScopedFunction(\n path: NodePath<t.FunctionDeclaration>,\n) {\n const {\n node,\n parentPath: { scope },\n } = path;\n\n const { id } = node;\n scope.removeOwnBinding(id.name);\n node.id = null;\n\n const varNode = t.variableDeclaration(\"var\", [\n t.variableDeclarator(id, t.toExpression(node)),\n ]);\n // @ts-expect-error undocumented property\n varNode._blockHoist = 2;\n\n const [varPath] = path.replaceWith(varNode);\n scope.registerDeclaration(varPath);\n}\n\nconst functionsToVarVisitor: 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 maybeTransformBlockScopedFunction(\n binding.path as NodePath<t.FunctionDeclaration>,\n );\n }\n }\n },\n \"Expression|Declaration\"(path) {\n path.skip();\n },\n};\n\nexport function isVarScope(scope: Scope) {\n return scope.path.isFunctionParent() || scope.path.isProgram();\n}\n\nfunction isStrict(path: NodePath) {\n return !!path.find(({ node }) => {\n if (t.isProgram(node)) {\n if (node.sourceType === \"module\") return true;\n } else if (t.isClass(node)) {\n return true;\n } else if (!t.isBlockStatement(node)) {\n return false;\n }\n\n return node.directives?.some(\n directive => directive.value.value === \"use strict\",\n );\n });\n}\n","import { declare } from \"@babel/helper-plugin-utils\";\nimport type { NodePath, Scope, Visitor, PluginPass } from \"@babel/core\";\nimport { types as t, traverse } from \"@babel/core\";\n\nimport {\n getLoopBodyBindings,\n getUsageInBody,\n isVarInLoopHead,\n wrapLoopBody,\n} from \"./loop.ts\";\nimport { validateUsage } from \"./validation.ts\";\nimport { annexB33FunctionsVisitor, isVarScope } from \"./annex-B_3_3.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));\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: traverse.visitors.merge<PluginPass>([\n // TODO: Consider adding an option to control Annex B behavior.\n annexB33FunctionsVisitor,\n {\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;\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 varPath.get(\"declarations.0.init\").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});\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 ??= path.scope.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>,\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"],"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","collectCompletionsAndVarsVisitor","Function","LabeledStatement","enter","labelsStack","label","exit","popped","pop","Loop","_","labellessContinueTargets","labellessBreakTargets","SwitchStatement","BreakStatement|ContinueStatement","includes","isBreakStatement","breaksContinues","ReturnStatement","returns","VariableDeclaration","parent","loopNode","isVarInLoopHead","vars","wrapLoopBody","captured","updatedBindingsUsages","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","annexB33FunctionsVisitor","isStrict","varScope","getFunctionParent","getProgramParent","functionsToVarVisitor","names","maybeTransformBlockScopedFunction","removeOwnBinding","varNode","toExpression","_blockHoist","registerDeclaration","getOwnBinding","Expression|Declaration","isVarScope","isProgram","find","sourceType","isBlockStatement","directives","some","directive","value","declare","api","opts","assertVersion","throwIfClosureRequired","tdz","visitor","visitors","merge","headPath","needsBodyWrap","markNeedsBodyWrap","buildCodeFrameError","bodyScope","Map","isBlockScoped","headScope","hasOwnBinding","crawl","hasBinding","hasGlobal","newName","rename","set","transformBlockScopedVariable","unwrapFunctionEnvironment","ClassDeclaration","noUids","conflictingFunctionsVisitor","bindingNames","isInLoop","blockScope","moveBindingTo","isLetOrConst","isLoop"],"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\nconst collectCompletionsAndVarsVisitor: Visitor<CompletionsAndVarsState> = {\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(\"Assertion failure. Please report this bug to Babel.\");\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\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(collectCompletionsAndVarsVisitor, state);\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;\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 = [];\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 || path.scope.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));\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;\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 varPath.get(\"declarations.0.init\").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 ??= path.scope.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>,\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","collectCompletionsAndVarsVisitor","Function","LabeledStatement","enter","labelsStack","label","exit","popped","pop","Loop","_","labellessContinueTargets","labellessBreakTargets","SwitchStatement","BreakStatement|ContinueStatement","includes","isBreakStatement","breaksContinues","ReturnStatement","returns","VariableDeclaration","parent","loopNode","isVarInLoopHead","vars","wrapLoopBody","captured","updatedBindingsUsages","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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"}
{
"name": "@babel/plugin-transform-block-scoping",
"version": "8.0.0-beta.4",
"version": "8.0.0-rc.1",
"description": "Compile ES2015 block scoping (const and let) to ES5",

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

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

@@ -27,5 +27,5 @@ "keywords": [

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

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