{"version":3,"file":"compiler-helpers.cjs","names":[],"sources":["../../src/compiler-helpers.ts"],"sourcesContent":["import * as t from '@babel/types'\n\ntype CompilerNodePath<TNode extends t.Node = t.Node> = {\n  node: TNode\n  parentPath: CompilerNodePath | null\n  isVariableDeclarator: () => boolean\n}\n\ntype ReplacePathNode<TPath, TNode extends t.Node> = Omit<TPath, 'node'> & {\n  node: TNode\n}\n\ntype IdentifierScopeFrame = {\n  kind: 'program' | 'function' | 'block'\n  bindings: Set<string>\n}\ntype IdentifierScopeStack = Array<IdentifierScopeFrame>\n\nexport type ModuleInfoBinding =\n  | {\n      type: 'import'\n      source: string\n      importedName: string\n    }\n  | {\n      type: 'var'\n      init: t.Expression | null\n    }\n\nexport interface ExtractedModuleInfo {\n  bindings: Map<string, ModuleInfoBinding>\n  exports: Map<string, string>\n  reExportAllSources: Array<string>\n}\n\nfunction getTransparentWrapperExpression(node: t.Node): t.Expression | null {\n  if (\n    t.isTSAsExpression(node) ||\n    t.isTSSatisfiesExpression(node) ||\n    t.isTSTypeAssertion(node) ||\n    t.isTSNonNullExpression(node) ||\n    t.isParenthesizedExpression(node)\n  ) {\n    return node.expression\n  }\n\n  return null\n}\n\nexport function unwrapExpression(expr: t.Expression): t.Expression {\n  let inner = getTransparentWrapperExpression(expr)\n  while (inner) {\n    expr = inner\n    inner = getTransparentWrapperExpression(expr)\n  }\n\n  return expr\n}\n\nexport function getVariableDeclaratorForExpressionPath<\n  TPath extends CompilerNodePath<t.Expression>,\n>(path: TPath): ReplacePathNode<TPath, t.VariableDeclarator> | null {\n  let currentPath: CompilerNodePath = path\n  let parentPath = currentPath.parentPath\n\n  while (\n    parentPath &&\n    getTransparentWrapperExpression(parentPath.node) === currentPath.node\n  ) {\n    currentPath = parentPath\n    parentPath = parentPath.parentPath\n  }\n\n  if (\n    parentPath?.isVariableDeclarator() &&\n    t.isVariableDeclarator(parentPath.node) &&\n    parentPath.node.init === currentPath.node\n  ) {\n    return parentPath as ReplacePathNode<TPath, t.VariableDeclarator>\n  }\n\n  return null\n}\n\nfunction getModuleExportName(node: t.Identifier | t.StringLiteral) {\n  return t.isIdentifier(node) ? node.name : node.value\n}\n\nfunction addVariableDeclarationModuleInfo(\n  declaration: t.VariableDeclaration,\n  bindings: Map<string, ModuleInfoBinding>,\n  exportMap?: Map<string, string>,\n) {\n  for (const declarator of declaration.declarations) {\n    for (const name of collectIdentifiersFromPattern(declarator.id)) {\n      bindings.set(name, {\n        type: 'var',\n        init: declarator.init ?? null,\n      })\n      exportMap?.set(name, name)\n    }\n  }\n}\n\nfunction addDeclarationModuleInfo(\n  declaration: t.Declaration,\n  bindings: Map<string, ModuleInfoBinding>,\n  exportMap?: Map<string, string>,\n) {\n  if (t.isVariableDeclaration(declaration)) {\n    addVariableDeclarationModuleInfo(declaration, bindings, exportMap)\n    return\n  }\n\n  if (\n    (t.isFunctionDeclaration(declaration) ||\n      t.isClassDeclaration(declaration)) &&\n    declaration.id\n  ) {\n    bindings.set(declaration.id.name, {\n      type: 'var',\n      init: null,\n    })\n    exportMap?.set(declaration.id.name, declaration.id.name)\n  }\n}\n\nfunction hasIdentifierBinding(scopes: IdentifierScopeStack, name: string) {\n  for (let i = scopes.length - 1; i >= 0; i--) {\n    if (scopes[i]!.bindings.has(name)) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction currentIdentifierScope(scopes: IdentifierScopeStack) {\n  return scopes[scopes.length - 1]!\n}\n\nfunction nearestFunctionIdentifierScope(scopes: IdentifierScopeStack) {\n  for (let i = scopes.length - 1; i >= 0; i--) {\n    const scope = scopes[i]!\n    if (scope.kind === 'function' || scope.kind === 'program') {\n      return scope\n    }\n  }\n  return currentIdentifierScope(scopes)\n}\n\nfunction addIdentifierPatternBindings(\n  pattern: t.LVal | t.Node | null | undefined,\n  scope: IdentifierScopeFrame,\n) {\n  for (const name of collectIdentifiersFromPattern(pattern)) {\n    scope.bindings.add(name)\n  }\n}\n\nfunction addIdentifierDeclarationBindings(\n  declaration: t.Node,\n  scopes: IdentifierScopeStack,\n) {\n  if (t.isVariableDeclaration(declaration)) {\n    const scope =\n      declaration.kind === 'var'\n        ? nearestFunctionIdentifierScope(scopes)\n        : currentIdentifierScope(scopes)\n    for (const declarator of declaration.declarations) {\n      addIdentifierPatternBindings(declarator.id, scope)\n    }\n    return\n  }\n\n  if (\n    (t.isFunctionDeclaration(declaration) ||\n      t.isClassDeclaration(declaration) ||\n      t.isTSTypeAliasDeclaration(declaration) ||\n      t.isTSInterfaceDeclaration(declaration) ||\n      t.isTSEnumDeclaration(declaration)) &&\n    declaration.id\n  ) {\n    currentIdentifierScope(scopes).bindings.add(declaration.id.name)\n  }\n}\n\nfunction addIdentifierImportBindings(\n  node: t.ImportDeclaration,\n  scope: IdentifierScopeFrame,\n) {\n  for (const specifier of node.specifiers) {\n    scope.bindings.add(specifier.local.name)\n  }\n}\n\nfunction createNestedIdentifierScope(\n  kind: IdentifierScopeFrame['kind'],\n  scopes: IdentifierScopeStack,\n): IdentifierScopeStack {\n  return [...scopes, { kind, bindings: new Set() }]\n}\n\nfunction addIdentifierBlockBindings(\n  body: Array<t.Node>,\n  scopes: IdentifierScopeStack,\n) {\n  for (const statement of body) {\n    if (t.isImportDeclaration(statement)) {\n      addIdentifierImportBindings(statement, currentIdentifierScope(scopes))\n    } else if (t.isExportNamedDeclaration(statement) && statement.declaration) {\n      addIdentifierDeclarationBindings(statement.declaration, scopes)\n    } else {\n      addIdentifierDeclarationBindings(statement, scopes)\n    }\n  }\n}\n\nfunction walkIdentifierChildren(\n  current: t.Node,\n  parent: t.Node | undefined,\n  scopes: IdentifierScopeStack,\n  ids: Set<string>,\n) {\n  for (const key of t.VISITOR_KEYS[current.type] ?? []) {\n    const child = (current as any)[key]\n    if (Array.isArray(child)) {\n      for (const item of child) {\n        if (item && typeof item.type === 'string') {\n          walkIdentifierNode(item, current, parent, key, scopes, ids)\n        }\n      }\n    } else if (child && typeof child.type === 'string') {\n      walkIdentifierNode(child, current, parent, key, scopes, ids)\n    }\n  }\n}\n\nfunction walkIdentifierNode(\n  current: t.Node | null | undefined,\n  parent: t.Node | undefined,\n  grandparent: t.Node | undefined,\n  parentKey: string | undefined,\n  scopes: IdentifierScopeStack,\n  ids: Set<string>,\n) {\n  if (!current) return\n\n  if (t.isIdentifier(current)) {\n    if (\n      (!parent || t.isReferenced(current, parent, grandparent)) &&\n      !hasIdentifierBinding(scopes, current.name)\n    ) {\n      ids.add(current.name)\n    }\n    return\n  }\n\n  if (t.isJSXIdentifier(current)) {\n    if (parent && t.isJSXAttribute(parent) && parentKey === 'name') {\n      return\n    }\n\n    if (parent && t.isJSXMemberExpression(parent) && parentKey === 'property') {\n      return\n    }\n\n    const first = current.name[0]\n    if (first && first === first.toLowerCase()) {\n      return\n    }\n\n    if (!hasIdentifierBinding(scopes, current.name)) {\n      ids.add(current.name)\n    }\n    return\n  }\n\n  if (t.isProgram(current)) {\n    const nestedScopes = createNestedIdentifierScope('program', scopes)\n    addIdentifierBlockBindings(current.body, nestedScopes)\n    for (const child of current.body) {\n      walkIdentifierNode(child, current, parent, 'body', nestedScopes, ids)\n    }\n    return\n  }\n\n  if (t.isBlockStatement(current)) {\n    const nestedScopes = createNestedIdentifierScope('block', scopes)\n    addIdentifierBlockBindings(current.body, nestedScopes)\n    for (const child of current.body) {\n      walkIdentifierNode(child, current, parent, 'body', nestedScopes, ids)\n    }\n    return\n  }\n\n  if (\n    t.isFunctionDeclaration(current) ||\n    t.isFunctionExpression(current) ||\n    t.isArrowFunctionExpression(current) ||\n    t.isObjectMethod(current) ||\n    t.isClassMethod(current) ||\n    t.isClassPrivateMethod(current)\n  ) {\n    if (t.isFunctionDeclaration(current) && current.id) {\n      currentIdentifierScope(scopes).bindings.add(current.id.name)\n    }\n\n    const nestedScopes = createNestedIdentifierScope('function', scopes)\n    if (\n      (t.isFunctionDeclaration(current) || t.isFunctionExpression(current)) &&\n      current.id\n    ) {\n      currentIdentifierScope(nestedScopes).bindings.add(current.id.name)\n    }\n    for (const param of current.params) {\n      addIdentifierPatternBindings(param, currentIdentifierScope(nestedScopes))\n    }\n\n    walkIdentifierChildren(current, parent, nestedScopes, ids)\n    return\n  }\n\n  if (t.isCatchClause(current)) {\n    const nestedScopes = createNestedIdentifierScope('block', scopes)\n    addIdentifierPatternBindings(\n      current.param,\n      currentIdentifierScope(nestedScopes),\n    )\n    walkIdentifierNode(\n      current.param,\n      current,\n      parent,\n      'param',\n      nestedScopes,\n      ids,\n    )\n    walkIdentifierNode(current.body, current, parent, 'body', nestedScopes, ids)\n    return\n  }\n\n  if (t.isImportDeclaration(current)) {\n    addIdentifierImportBindings(current, currentIdentifierScope(scopes))\n    return\n  }\n\n  if (t.isClassDeclaration(current) || t.isClassExpression(current)) {\n    if (t.isClassDeclaration(current) && current.id) {\n      currentIdentifierScope(scopes).bindings.add(current.id.name)\n    }\n\n    const nestedScopes = current.id\n      ? createNestedIdentifierScope('block', scopes)\n      : scopes\n    if (current.id) {\n      currentIdentifierScope(nestedScopes).bindings.add(current.id.name)\n    }\n\n    walkIdentifierChildren(current, parent, nestedScopes, ids)\n    return\n  }\n\n  if (t.isVariableDeclaration(current)) {\n    addIdentifierDeclarationBindings(current, scopes)\n  } else if (t.isVariableDeclarator(current)) {\n    const scope =\n      parent && t.isVariableDeclaration(parent) && parent.kind === 'var'\n        ? nearestFunctionIdentifierScope(scopes)\n        : currentIdentifierScope(scopes)\n    addIdentifierPatternBindings(current.id, scope)\n  } else if (\n    t.isTSTypeAliasDeclaration(current) ||\n    t.isTSInterfaceDeclaration(current) ||\n    t.isTSEnumDeclaration(current)\n  ) {\n    currentIdentifierScope(scopes).bindings.add(current.id.name)\n  }\n\n  walkIdentifierChildren(current, parent, scopes, ids)\n}\n\n/**\n * Recursively walk an AST node and collect referenced identifier-like names.\n * This avoids Babel path/scope allocation for module-level dependency scans.\n */\nexport function collectIdentifiersFromNode(node: t.Node): Set<string> {\n  const ids = new Set<string>()\n  walkIdentifierNode(\n    node,\n    undefined,\n    undefined,\n    undefined,\n    [{ kind: 'program', bindings: new Set() }],\n    ids,\n  )\n  return ids\n}\n\nexport function collectIdentifiersFromPattern(\n  node: t.LVal | t.Node | null | undefined,\n): Array<string> {\n  if (!node) {\n    return []\n  }\n\n  if (t.isIdentifier(node)) {\n    return [node.name]\n  }\n\n  if (t.isAssignmentPattern(node)) {\n    return collectIdentifiersFromPattern(node.left)\n  }\n\n  if (t.isRestElement(node)) {\n    return collectIdentifiersFromPattern(node.argument)\n  }\n\n  if (t.isObjectPattern(node)) {\n    return node.properties.flatMap((prop) => {\n      if (t.isObjectProperty(prop)) {\n        return collectIdentifiersFromPattern(prop.value as t.LVal)\n      }\n      if (t.isRestElement(prop)) {\n        return collectIdentifiersFromPattern(prop.argument)\n      }\n      return []\n    })\n  }\n\n  if (t.isArrayPattern(node)) {\n    return node.elements.flatMap((element) =>\n      collectIdentifiersFromPattern(element),\n    )\n  }\n\n  return []\n}\n\nexport function collectLocalBindingsFromStatement(\n  node: t.Statement | t.ModuleDeclaration,\n  bindings: Set<string>,\n) {\n  const declaration =\n    t.isExportNamedDeclaration(node) && node.declaration\n      ? node.declaration\n      : t.isExportDefaultDeclaration(node)\n        ? node.declaration\n        : node\n\n  if (t.isVariableDeclaration(declaration)) {\n    for (const declarator of declaration.declarations) {\n      for (const name of collectIdentifiersFromPattern(declarator.id)) {\n        bindings.add(name)\n      }\n    }\n  } else if (t.isFunctionDeclaration(declaration) && declaration.id) {\n    bindings.add(declaration.id.name)\n  } else if (t.isClassDeclaration(declaration) && declaration.id) {\n    bindings.add(declaration.id.name)\n  }\n}\n\nexport function extractModuleInfoFromAst(ast: t.File): ExtractedModuleInfo {\n  const bindings = new Map<string, ModuleInfoBinding>()\n  const exportMap = new Map<string, string>()\n  const reExportAllSources: Array<string> = []\n\n  for (const node of ast.program.body) {\n    if (t.isImportDeclaration(node)) {\n      const source = node.source.value\n      for (const specifier of node.specifiers) {\n        if (t.isImportSpecifier(specifier)) {\n          bindings.set(specifier.local.name, {\n            type: 'import',\n            source,\n            importedName: getModuleExportName(specifier.imported),\n          })\n        } else if (t.isImportDefaultSpecifier(specifier)) {\n          bindings.set(specifier.local.name, {\n            type: 'import',\n            source,\n            importedName: 'default',\n          })\n        } else if (t.isImportNamespaceSpecifier(specifier)) {\n          bindings.set(specifier.local.name, {\n            type: 'import',\n            source,\n            importedName: '*',\n          })\n        }\n      }\n      continue\n    }\n\n    if (t.isVariableDeclaration(node)) {\n      addVariableDeclarationModuleInfo(node, bindings)\n      continue\n    }\n\n    if (t.isFunctionDeclaration(node) || t.isClassDeclaration(node)) {\n      addDeclarationModuleInfo(node, bindings)\n      continue\n    }\n\n    if (t.isExportNamedDeclaration(node)) {\n      if (node.declaration) {\n        addDeclarationModuleInfo(node.declaration, bindings, exportMap)\n      }\n\n      for (const specifier of node.specifiers) {\n        if (t.isExportNamespaceSpecifier(specifier)) {\n          const exported = getModuleExportName(specifier.exported)\n          exportMap.set(exported, exported)\n          if (node.source) {\n            bindings.set(exported, {\n              type: 'import',\n              source: node.source.value,\n              importedName: '*',\n            })\n          }\n        } else if (t.isExportSpecifier(specifier)) {\n          const local = getModuleExportName(specifier.local)\n          const exported = getModuleExportName(specifier.exported)\n          exportMap.set(exported, local)\n\n          if (node.source) {\n            bindings.set(local, {\n              type: 'import',\n              source: node.source.value,\n              importedName: local,\n            })\n          }\n        }\n      }\n      continue\n    }\n\n    if (t.isExportDefaultDeclaration(node)) {\n      const declaration = node.declaration\n      if (t.isIdentifier(declaration)) {\n        exportMap.set('default', declaration.name)\n      } else if (\n        (t.isFunctionDeclaration(declaration) ||\n          t.isClassDeclaration(declaration)) &&\n        declaration.id\n      ) {\n        bindings.set(declaration.id.name, {\n          type: 'var',\n          init: null,\n        })\n        exportMap.set('default', declaration.id.name)\n      } else {\n        const synth = '__default_export__'\n        bindings.set(synth, {\n          type: 'var',\n          init: t.isExpression(declaration) ? declaration : null,\n        })\n        exportMap.set('default', synth)\n      }\n      continue\n    }\n\n    if (t.isExportAllDeclaration(node)) {\n      reExportAllSources.push(node.source.value)\n    }\n  }\n\n  return {\n    bindings,\n    exports: exportMap,\n    reExportAllSources,\n  }\n}\n\nexport function buildDeclarationMap(ast: t.File): Map<string, t.Node> {\n  const map = new Map<string, t.Node>()\n\n  for (const statement of ast.program.body) {\n    const declaration =\n      t.isExportNamedDeclaration(statement) && statement.declaration\n        ? statement.declaration\n        : t.isExportDefaultDeclaration(statement)\n          ? statement.declaration\n          : statement\n\n    if (t.isVariableDeclaration(declaration)) {\n      for (const declarator of declaration.declarations) {\n        for (const name of collectIdentifiersFromPattern(declarator.id)) {\n          map.set(name, declarator)\n        }\n      }\n    } else if (t.isFunctionDeclaration(declaration) && declaration.id) {\n      map.set(declaration.id.name, declaration)\n    } else if (t.isClassDeclaration(declaration) && declaration.id) {\n      map.set(declaration.id.name, declaration)\n    }\n  }\n\n  return map\n}\n\nexport function buildDependencyGraph(\n  declarationMap: Map<string, t.Node>,\n  localBindings: Set<string>,\n): Map<string, Set<string>> {\n  const graph = new Map<string, Set<string>>()\n\n  for (const [name, declarationNode] of declarationMap) {\n    if (!localBindings.has(name)) continue\n\n    const dependencies = new Set<string>()\n    for (const id of collectIdentifiersFromNode(declarationNode)) {\n      if (id !== name && localBindings.has(id)) {\n        dependencies.add(id)\n      }\n    }\n    graph.set(name, dependencies)\n  }\n\n  return graph\n}\n\nexport function collectModuleLevelRefsFromNode(\n  node: t.Node,\n  localModuleLevelBindings: Set<string>,\n): Set<string> {\n  const refs = new Set<string>()\n\n  for (const name of collectIdentifiersFromNode(node)) {\n    if (localModuleLevelBindings.has(name)) {\n      refs.add(name)\n    }\n  }\n\n  return refs\n}\n\nexport function expandTransitively(\n  bindings: Set<string>,\n  dependencyGraph: Map<string, Set<string>>,\n) {\n  const queue = [...bindings]\n  const visited = new Set<string>()\n\n  while (queue.length > 0) {\n    const name = queue.pop()!\n    if (visited.has(name)) continue\n    visited.add(name)\n\n    const dependencies = dependencyGraph.get(name)\n    if (!dependencies) continue\n\n    for (const dependency of dependencies) {\n      if (!bindings.has(dependency)) {\n        bindings.add(dependency)\n        queue.push(dependency)\n      }\n    }\n  }\n}\n\nexport function expandSharedDestructuredDeclarators(\n  ast: t.File,\n  refsByGroup: Map<string, Set<number>>,\n  sharedBindings: Set<string>,\n) {\n  for (const statement of ast.program.body) {\n    const declaration =\n      t.isExportNamedDeclaration(statement) && statement.declaration\n        ? statement.declaration\n        : statement\n\n    if (!t.isVariableDeclaration(declaration)) continue\n\n    for (const declarator of declaration.declarations) {\n      if (\n        !t.isObjectPattern(declarator.id) &&\n        !t.isArrayPattern(declarator.id)\n      ) {\n        continue\n      }\n\n      const names = collectIdentifiersFromPattern(declarator.id)\n      const usedGroups = new Set<number>()\n\n      for (const name of names) {\n        const groups = refsByGroup.get(name)\n        if (!groups) continue\n        for (const group of groups) {\n          usedGroups.add(group)\n        }\n      }\n\n      if (usedGroups.size >= 2) {\n        for (const name of names) {\n          sharedBindings.add(name)\n        }\n      }\n    }\n  }\n}\n\nexport function expandDestructuredDeclarations(\n  ast: t.File,\n  bindings: Set<string>,\n) {\n  for (const statement of ast.program.body) {\n    const declaration =\n      t.isExportNamedDeclaration(statement) && statement.declaration\n        ? statement.declaration\n        : statement\n\n    if (!t.isVariableDeclaration(declaration)) continue\n\n    for (const declarator of declaration.declarations) {\n      if (\n        !t.isObjectPattern(declarator.id) &&\n        !t.isArrayPattern(declarator.id)\n      ) {\n        continue\n      }\n\n      const names = collectIdentifiersFromPattern(declarator.id)\n      if (names.some((name) => bindings.has(name))) {\n        for (const name of names) {\n          bindings.add(name)\n        }\n      }\n    }\n  }\n}\n\nexport function removeBindingsTransitivelyDependingOn(\n  bindings: Set<string>,\n  dependencyGraph: Map<string, Set<string>>,\n  roots: Iterable<string>,\n) {\n  const reverseGraph = new Map<string, Set<string>>()\n\n  for (const [name, dependencies] of dependencyGraph) {\n    for (const dependency of dependencies) {\n      let parents = reverseGraph.get(dependency)\n      if (!parents) {\n        parents = new Set()\n        reverseGraph.set(dependency, parents)\n      }\n      parents.add(name)\n    }\n  }\n\n  const visited = new Set<string>()\n  const queue = [...roots]\n\n  while (queue.length > 0) {\n    const current = queue.pop()!\n    if (visited.has(current)) continue\n    visited.add(current)\n\n    const parents = reverseGraph.get(current)\n    if (!parents) continue\n\n    for (const parent of parents) {\n      if (!visited.has(parent)) {\n        queue.push(parent)\n      }\n    }\n  }\n\n  for (const name of [...bindings]) {\n    if (visited.has(name)) {\n      bindings.delete(name)\n    }\n  }\n}\n\nexport function removeModuleLevelBindings(\n  ast: t.File,\n  namesToRemove: Set<string>,\n) {\n  ast.program.body = ast.program.body.filter((statement) => {\n    const declaration =\n      t.isExportNamedDeclaration(statement) && statement.declaration\n        ? statement.declaration\n        : statement\n\n    if (t.isVariableDeclaration(declaration)) {\n      declaration.declarations = declaration.declarations.filter(\n        (declarator) =>\n          !collectIdentifiersFromPattern(declarator.id).some((name) =>\n            namesToRemove.has(name),\n          ),\n      )\n      return declaration.declarations.length > 0\n    }\n\n    if (t.isFunctionDeclaration(declaration) && declaration.id) {\n      return !namesToRemove.has(declaration.id.name)\n    }\n\n    if (t.isClassDeclaration(declaration) && declaration.id) {\n      return !namesToRemove.has(declaration.id.name)\n    }\n\n    if (t.isExportDefaultDeclaration(statement)) {\n      const defaultDeclaration = statement.declaration\n      if (\n        (t.isFunctionDeclaration(defaultDeclaration) ||\n          t.isClassDeclaration(defaultDeclaration)) &&\n        defaultDeclaration.id\n      ) {\n        return !namesToRemove.has(defaultDeclaration.id.name)\n      }\n    }\n\n    return true\n  })\n}\n\nexport function retainModuleLevelDeclarations(\n  ast: t.File,\n  bindingsToKeep: Set<string>,\n) {\n  ast.program.body = ast.program.body.filter((statement) => {\n    if (t.isImportDeclaration(statement)) return true\n\n    const declaration =\n      t.isExportNamedDeclaration(statement) && statement.declaration\n        ? statement.declaration\n        : statement\n\n    if (t.isVariableDeclaration(declaration)) {\n      declaration.declarations = declaration.declarations.filter((declarator) =>\n        collectIdentifiersFromPattern(declarator.id).some((name) =>\n          bindingsToKeep.has(name),\n        ),\n      )\n      return declaration.declarations.length > 0\n    }\n\n    if (t.isFunctionDeclaration(declaration) && declaration.id) {\n      return bindingsToKeep.has(declaration.id.name)\n    }\n\n    if (t.isClassDeclaration(declaration) && declaration.id) {\n      return bindingsToKeep.has(declaration.id.name)\n    }\n\n    return false\n  })\n}\n\nexport function unwrapExportedDeclarations(ast: t.File) {\n  const body: Array<t.Statement | t.ModuleDeclaration> = []\n\n  for (const statement of ast.program.body) {\n    if (t.isExportNamedDeclaration(statement)) {\n      if (statement.declaration) {\n        body.push(statement.declaration)\n      }\n      continue\n    }\n\n    if (t.isExportDefaultDeclaration(statement)) {\n      const declaration = statement.declaration\n      if (\n        (t.isFunctionDeclaration(declaration) ||\n          t.isClassDeclaration(declaration)) &&\n        declaration.id\n      ) {\n        body.push(declaration)\n      }\n      continue\n    }\n\n    if (t.isExportAllDeclaration(statement)) {\n      continue\n    }\n\n    body.push(statement)\n  }\n\n  ast.program.body = body\n}\n\nexport function stripUnreferencedTopLevelExpressionStatements(ast: t.File) {\n  const locallyBound = new Set<string>()\n\n  for (const statement of ast.program.body) {\n    collectLocalBindingsFromStatement(statement, locallyBound)\n  }\n\n  ast.program.body = ast.program.body.filter((statement) => {\n    if (!t.isExpressionStatement(statement)) return true\n\n    for (const name of collectIdentifiersFromNode(statement)) {\n      if (locallyBound.has(name)) {\n        return true\n      }\n    }\n\n    return false\n  })\n}\n"],"mappings":"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"}