diff --git a/packages/babel-plugin-transform-block-scoping/src/index.ts b/packages/babel-plugin-transform-block-scoping/src/index.ts index c1a42966e16c..d0cc2d707794 100644 --- a/packages/babel-plugin-transform-block-scoping/src/index.ts +++ b/packages/babel-plugin-transform-block-scoping/src/index.ts @@ -1,6 +1,6 @@ import { declare } from "@babel/helper-plugin-utils"; import type { NodePath, Visitor, Scope, Binding } from "@babel/traverse"; -import { visitor as tdzVisitor } from "./tdz"; +import { skipTDZChecks, visitor as tdzVisitor } from "./tdz"; import type { TDZVisitorState } from "./tdz"; import { traverse, template, types as t } from "@babel/core"; import type { PluginPass } from "@babel/core"; @@ -43,8 +43,7 @@ export default declare((api, opts: Options) => { t.cloneNode(decl.id), decl.init || scope.buildUndefinedNode(), ); - // @ts-expect-error todo(flow->ts): avoid mutations - assign._ignoreBlockScopingTDZ = true; + skipTDZChecks.add(assign); nodes.push(t.expressionStatement(assign)); decl.init = this.addHelper("temporalUndefined"); } diff --git a/packages/babel-plugin-transform-block-scoping/src/tdz.ts b/packages/babel-plugin-transform-block-scoping/src/tdz.ts index 53fc5ef90174..b329d4df6cd9 100644 --- a/packages/babel-plugin-transform-block-scoping/src/tdz.ts +++ b/packages/babel-plugin-transform-block-scoping/src/tdz.ts @@ -13,7 +13,7 @@ function getTDZStatus(refPath: NodePath, bindingPath: NodePath) { } } -const skipTDZChecks = new WeakSet(); +export const skipTDZChecks = new WeakSet(); function buildTDZAssert( status: "maybe" | "inside", @@ -106,10 +106,8 @@ export const visitor: Visitor = { if (!state.tdzEnabled) return; const { node } = path; - // @ts-expect-error todo(flow->ts): avoid node mutations - if (node._ignoreBlockScopingTDZ) return; - // @ts-expect-error todo(flow->ts): avoid mutations - node._ignoreBlockScopingTDZ = true; + if (skipTDZChecks.has(node)) return; + skipTDZChecks.add(node); const arg = path.get("argument"); if (!arg.isIdentifier()) return; @@ -128,10 +126,8 @@ export const visitor: Visitor = { if (!state.tdzEnabled) return; const { node } = path; - // @ts-expect-error todo(flow->ts): avoid node mutations - if (node._ignoreBlockScopingTDZ) return; - // @ts-expect-error todo(flow->ts): avoid mutations - node._ignoreBlockScopingTDZ = true; + if (skipTDZChecks.has(node)) return; + skipTDZChecks.add(node); const nodes = []; const ids = path.getBindingIdentifiers();