@generaltranslation/vue-extractor 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/LICENSE.md +105 -0
  2. package/dist/config.d.ts +2 -0
  3. package/dist/config.js +2 -0
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.js +2 -0
  6. package/dist/internal/compilerAst.d.ts +43 -0
  7. package/dist/internal/compilerAst.js +77 -0
  8. package/dist/internal/compilerAst.js.map +1 -0
  9. package/dist/internal/config/resolveVueCompilerOptions.d.ts +23 -0
  10. package/dist/internal/config/resolveVueCompilerOptions.js +987 -0
  11. package/dist/internal/config/resolveVueCompilerOptions.js.map +1 -0
  12. package/dist/internal/extractFromVueSource.d.ts +9 -0
  13. package/dist/internal/extractFromVueSource.js +332 -0
  14. package/dist/internal/extractFromVueSource.js.map +1 -0
  15. package/dist/internal/script/analyze.d.ts +13 -0
  16. package/dist/internal/script/analyze.js +4761 -0
  17. package/dist/internal/script/analyze.js.map +1 -0
  18. package/dist/internal/script/jsx.d.ts +36 -0
  19. package/dist/internal/script/jsx.js +667 -0
  20. package/dist/internal/script/jsx.js.map +1 -0
  21. package/dist/internal/script/knownValues.d.ts +14 -0
  22. package/dist/internal/script/knownValues.js +148 -0
  23. package/dist/internal/script/knownValues.js.map +1 -0
  24. package/dist/internal/script/localModules.d.ts +80 -0
  25. package/dist/internal/script/localModules.js +364 -0
  26. package/dist/internal/script/localModules.js.map +1 -0
  27. package/dist/internal/script/model.d.ts +317 -0
  28. package/dist/internal/script/model.js +1 -0
  29. package/dist/internal/script/parser.d.ts +3 -0
  30. package/dist/internal/script/parser.js +21 -0
  31. package/dist/internal/script/parser.js.map +1 -0
  32. package/dist/internal/script/replay.d.ts +53 -0
  33. package/dist/internal/script/replay.js +1611 -0
  34. package/dist/internal/script/replay.js.map +1 -0
  35. package/dist/internal/script/snapshot.d.ts +25 -0
  36. package/dist/internal/script/snapshot.js +293 -0
  37. package/dist/internal/script/snapshot.js.map +1 -0
  38. package/dist/internal/script/syntax.d.ts +21 -0
  39. package/dist/internal/script/syntax.js +46 -0
  40. package/dist/internal/script/syntax.js.map +1 -0
  41. package/dist/internal/script.d.ts +2 -0
  42. package/dist/internal/script.js +2 -0
  43. package/dist/internal/stringCalls.d.ts +7 -0
  44. package/dist/internal/stringCalls.js +82 -0
  45. package/dist/internal/stringCalls.js.map +1 -0
  46. package/dist/internal/template.d.ts +4 -0
  47. package/dist/internal/template.js +2198 -0
  48. package/dist/internal/template.js.map +1 -0
  49. package/dist/internal/templatePath.d.ts +12 -0
  50. package/dist/internal/templatePath.js +23 -0
  51. package/dist/internal/templatePath.js.map +1 -0
  52. package/dist/internal/types.d.ts +69 -0
  53. package/dist/internal/types.js +1 -0
  54. package/dist/internal/utils.d.ts +19 -0
  55. package/dist/internal/utils.js +149 -0
  56. package/dist/internal/utils.js.map +1 -0
  57. package/dist/internal/vueCompiler.d.ts +35 -0
  58. package/dist/internal/vueCompiler.js +320 -0
  59. package/dist/internal/vueCompiler.js.map +1 -0
  60. package/dist/types.d.ts +80 -0
  61. package/dist/types.js +1 -0
  62. package/package.json +78 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","names":["currentAccumulator"],"sources":["../../../src/internal/script/analyze.ts"],"sourcesContent":["import traverseModule, {\n type Binding,\n type NodePath,\n type Scope,\n} from '@babel/traverse';\nimport type * as t from '@babel/types';\nimport { processVueStringCall } from '../stringCalls.js';\nimport {\n appendTemplatePath,\n unknownTemplatePathSegment,\n} from '../templatePath.js';\nimport type {\n TemplateBindings,\n TemplateContainerKind,\n VueExtractionContext,\n} from '../types.js';\nimport {\n addVueError,\n babelLocation,\n readStaticPrimitive,\n type StaticPrimitiveResult,\n unwrapExpression,\n} from '../utils.js';\nimport type {\n CollectedObjectEntries,\n ComponentFactoryCandidate,\n ComponentKind,\n ComponentMemberCandidate,\n ContainerWrapperKind,\n ContainerWritePolicy,\n GTContainerExposure,\n KnownValue,\n ObjectEntryResult,\n ScopedExpression,\n ScriptState,\n TemplateExposure,\n TemplateKnownValue,\n VueScriptAnalysis,\n VueScriptAnalysisStats,\n} from './model.js';\nimport { createReplayAnalysis } from './replay.js';\nimport { createSnapshotAnalysis } from './snapshot.js';\nimport {\n COMPONENT_IMPORTS,\n knownExport,\n knownValueKey,\n ORDINARY_GLOBAL_VALUES,\n READONLY_ARRAY_TRANSFORMS,\n VUE_BUILTIN_IMPORTS,\n} from './knownValues.js';\nimport {\n extractVueJSXTranslation,\n isNestedInVueJSXTranslation,\n resolveVueJSXElementIdentity,\n validateVueJSXVariableComponent,\n type VueJSXAnalysis,\n} from './jsx.js';\nimport type { LocalExportTarget, LocalModuleRecord } from './localModules.js';\nimport { parseScriptAst } from './parser.js';\nimport {\n isAssignmentTargetWrapper,\n isBindingPattern,\n isStaticallyUndefined,\n patternContains,\n readMemberProperty,\n readPatternIdentifier,\n readPropertyKey,\n} from './syntax.js';\n\nexport type { VueScriptAnalysis, VueScriptAnalysisStats } from './model.js';\n\nconst traverse = traverseModule.default || traverseModule;\n\nconst staticBindingResults = new WeakMap<\n VueScriptAnalysis,\n Map<Binding, Map<boolean, StaticPrimitiveResult>>\n>();\nconst staticBindingsInProgress = new WeakMap<\n VueScriptAnalysis,\n Map<Binding, Set<boolean>>\n>();\n\n/** Creates opt-in counters for deterministic analyzer complexity tests. */\nexport function createVueScriptAnalysisStats(): VueScriptAnalysisStats {\n return {\n arrayEntryVisits: 0,\n containerKindVisits: 0,\n finalContainerSnapshotReads: 0,\n knownExpressionVisits: 0,\n stringFunctionVisits: 0,\n transformArrayEntryVisits: 0,\n };\n}\n\n/** Creates the per-SFC state used to resolve cross-block imports safely. */\nexport function createVueScriptAnalysis(\n stats?: VueScriptAnalysisStats\n): VueScriptAnalysis {\n return {\n ...(stats && { stats }),\n arrayLengths: new Map(),\n componentFactories: new Set(),\n containerKinds: new Map(),\n directBindings: new Set(),\n gtComponentFactories: new Set(),\n gtContainerFactories: new Set(),\n possibleGTContainers: new Set(),\n possibleStaticStrings: new Map(),\n staticValues: new Map(),\n templateValues: new Map(),\n uncertainComponents: new Set(),\n uncertainGTComponents: new Set(),\n uncertainStringFunctions: new Set(),\n uncertainTranslationHelpers: new Set(),\n values: new Map(),\n };\n}\n\n/** Exposes imports from a normal script when the SFC also has script setup. */\nexport function exposeVueScriptImportsToTemplate(\n analysis: VueScriptAnalysis,\n templateBindings: TemplateBindings\n): void {\n for (const localName of analysis.directBindings) {\n templateBindings.directBindings.add(localName);\n }\n for (const [localName, value] of analysis.values) {\n templateBindings.directBindings.add(localName);\n exposeKnownValue(localName, value, templateBindings, analysis);\n }\n for (const [localName, value] of analysis.templateValues) {\n templateBindings.directBindings.add(localName);\n exposeKnownValue(localName, value, templateBindings, analysis);\n }\n for (const [localName, value] of analysis.staticValues) {\n templateBindings.directBindings.add(localName);\n templateBindings.staticValues.set(localName, value);\n }\n for (const localName of analysis.componentFactories) {\n templateBindings.componentFactories.add(localName);\n }\n for (const [localName, kind] of analysis.containerKinds) {\n templateBindings.containerKinds.set(localName, kind);\n }\n for (const [localName, length] of analysis.arrayLengths) {\n templateBindings.arrayLengths.set(localName, length);\n }\n for (const [localName, values] of analysis.possibleStaticStrings) {\n templateBindings.possibleStaticStrings.set(localName, new Set(values));\n }\n for (const localName of analysis.possibleGTContainers) {\n templateBindings.possibleGTContainers.add(localName);\n }\n for (const localName of analysis.gtContainerFactories) {\n templateBindings.gtContainerFactories.add(localName);\n }\n for (const localName of analysis.gtComponentFactories) {\n templateBindings.gtComponentFactories.add(localName);\n }\n for (const localName of analysis.uncertainComponents) {\n templateBindings.uncertainComponents.add(localName);\n }\n for (const localName of analysis.uncertainGTComponents) {\n templateBindings.uncertainGTComponents.add(localName);\n }\n for (const localName of analysis.uncertainStringFunctions) {\n templateBindings.uncertainStringFunctions.add(localName);\n }\n}\n\n/** Collects imports before either SFC script block is fully analyzed. */\nexport function collectVueScriptImports(\n source: string,\n language: string | undefined,\n analysis: VueScriptAnalysis\n): void {\n if (!source.trim()) return;\n try {\n const ast = parseScriptAst(source, language);\n const state = createScriptState(ast, analysis);\n collectImports(ast, state);\n } catch {\n // The full analysis pass reports the parser diagnostic once.\n }\n}\n\n/** Extracts calls and component bindings from one padded Vue script block. */\nexport function parseVueScript(\n source: string,\n language: string | undefined,\n context: VueExtractionContext,\n templateBindings: TemplateBindings,\n exposeToTemplate: boolean,\n analysis: VueScriptAnalysis = createVueScriptAnalysis(),\n analyzeOptionsApi = true\n): boolean {\n if (!source.trim()) return true;\n\n let ast: t.File;\n try {\n ast = parseScriptAst(source, language);\n } catch (error) {\n const syntaxError = error as SyntaxError & {\n loc?: { column: number; line: number };\n };\n addVueError(\n context,\n syntaxError.loc\n ? {\n start: {\n column: syntaxError.loc.column + 1,\n line: syntaxError.loc.line,\n offset: 0,\n },\n end: {\n column: syntaxError.loc.column + 1,\n line: syntaxError.loc.line,\n offset: 0,\n },\n }\n : undefined,\n `Could not parse a gt-vue script block: ${syntaxError.message}`,\n 'Fix the script syntax before extracting translations'\n );\n return false;\n }\n\n const state = createScriptState(ast, analysis);\n collectImports(ast, state);\n analyzeMutableNamespaceSafety(ast, state);\n\n const jsxAnalysis: VueJSXAnalysis = {\n customPragma: ast.comments?.find((comment) =>\n /\\*?\\s*@jsx\\s+([^\\s]+)/.test(comment.value)\n ),\n readStaticPrimitive: (expression, scope) =>\n readStaticFromScope(\n expression,\n scope,\n new Set(),\n expression.start ?? Number.POSITIVE_INFINITY,\n state.analysis\n ),\n resolveKnownValue: (expression, scope) =>\n resolveKnownExpression(expression, scope, state, new Set()),\n resolveStaticObject: (expression, scope) =>\n resolveObjectExpression(\n expression,\n scope,\n new Set(),\n expression.start ?? Number.POSITIVE_INFINITY\n ),\n scopeForNode: (node, fallback) => state.scopes.get(node) ?? fallback,\n };\n\n if (exposeToTemplate) {\n recordCrossBlockWrites(ast, state, templateBindings);\n exposeProgramBindings(ast, state, templateBindings);\n } else {\n recordProgramAnalysis(ast, state);\n if (analyzeOptionsApi) {\n exposeOptionsApiBindings(ast, state, templateBindings, context);\n }\n }\n type StringCallPath = {\n node: t.CallExpression | t.OptionalCallExpression;\n scope: Scope;\n };\n\n const processCallAtLocation = (\n path: StringCallPath,\n consumerLocation = babelLocation(path.node.loc)\n ): void => {\n if (\n state.activeTranslationFunctions.size > 0 &&\n resolveKnownCallTargetWithoutParameterSubstitutions(\n path.node.callee,\n path.scope,\n path.node.start ?? Number.POSITIVE_INFINITY,\n state\n ).value?.type === 'string'\n ) {\n return;\n }\n const vueHelper = readImportedFunctionName(\n path.node.callee,\n path.scope,\n 'vue',\n state\n );\n const firstArgument = path.node.arguments[0];\n if (\n vueHelper &&\n ['createVNode', 'h'].includes(vueHelper) &&\n firstArgument &&\n firstArgument.type !== 'ArgumentPlaceholder' &&\n firstArgument.type !== 'SpreadElement' &&\n expressionContainsGTReference(firstArgument, path.scope, state)\n ) {\n addVueError(\n context,\n consumerLocation,\n 'Found an unsupported gt-vue <T> component in a Vue render function',\n 'Move the rich translation into a Vue single-file component template'\n );\n }\n if (\n vueHelper === 'defineAsyncComponent' &&\n firstArgument &&\n firstArgument.type !== 'ArgumentPlaceholder' &&\n firstArgument.type !== 'SpreadElement' &&\n expressionContainsGTReference(firstArgument, path.scope, state)\n ) {\n addVueError(\n context,\n consumerLocation,\n 'Could not statically extract a gt-vue <T> component behind defineAsyncComponent()',\n 'Use a direct gt-vue component binding in the Vue template'\n );\n }\n const callTarget = resolveKnownCallTargetAtPosition(\n path.node.callee,\n path.scope,\n path.node.start ?? Number.POSITIVE_INFINITY,\n state\n );\n const value = callTarget.value;\n if (value?.type !== 'string') {\n const localCallable = resolveCalledFunction(\n path.node.callee,\n path.scope,\n state,\n new Set()\n );\n const calleePath = readResolvedMemberPath(\n path.node.callee,\n path.scope,\n state\n );\n const uncertainTranslationHelper = Boolean(\n calleePath &&\n pathMayReferenceUncertainTranslationHelper(\n path.node.callee,\n calleePath,\n path.scope,\n state\n ) &&\n callArgumentsMayProvideTranslationFunction(path.node, path.scope, state)\n );\n if (\n !callTarget.definitelyOrdinary &&\n !localCallable &&\n calleePath &&\n (callTarget.possibleStringFunction ||\n uncertainTranslationHelper ||\n templateBindings.uncertainStringFunctions.has(calleePath) ||\n state.analysis.uncertainStringFunctions.has(calleePath) ||\n (calleePath.endsWith('.value') &&\n templateBindings.uncertainStringFunctions.has(\n calleePath.slice(0, -'.value'.length)\n )))\n ) {\n addVueError(\n context,\n consumerLocation,\n `Could not statically resolve possible gt-vue string function alias \"${calleePath}\"`,\n 'Use a direct, immutable alias of useGT(), useMessages(), or msg()'\n );\n }\n processForwardedTranslationCalls(path, consumerLocation);\n return;\n }\n processVueStringCall(\n path.node,\n value.kind,\n consumerLocation,\n context,\n (node) => {\n if (!node) return { ok: false };\n const materialized = materializeParameterExpression(\n node,\n path.scope,\n state\n );\n return readStaticFromScope(\n materialized.node,\n materialized.scope,\n new Set(),\n materialized.node.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n }\n );\n processForwardedTranslationCalls(path, consumerLocation);\n };\n\n const processForwardedTranslationCalls = (\n path: StringCallPath,\n consumerLocation: ReturnType<typeof babelLocation>\n ): void => {\n const called = resolveCalledFunction(\n path.node.callee,\n path.scope,\n state,\n new Set()\n );\n if (\n !called ||\n state.activeTranslationFunctions.has(called.node) ||\n !callMayCarryTranslationFunction(path.node, path.scope, state)\n )\n return;\n const functionPath = state.paths.get(called.node);\n if (!functionPath) return;\n state.activeTranslationFunctions.add(called.node);\n try {\n withCallParameterSubstitutions(\n path.node,\n called,\n path.scope,\n state,\n () => {\n functionPath.traverse({\n Function(nestedPath) {\n nestedPath.skip();\n },\n CallExpression(callPath) {\n processCallAtLocation(callPath, consumerLocation);\n },\n OptionalCallExpression(callPath) {\n processCallAtLocation(callPath, consumerLocation);\n },\n });\n }\n );\n } finally {\n state.activeTranslationFunctions.delete(called.node);\n }\n };\n\n const processCall = (path: StringCallPath): void => {\n processCallAtLocation(path);\n };\n\n traverse(ast, {\n CallExpression: processCall,\n OptionalCallExpression: processCall,\n TaggedTemplateExpression(path) {\n const value = resolveKnownExpression(\n path.node.tag,\n path.scope,\n state,\n new Set()\n );\n if (value?.type !== 'string') return;\n addVueError(\n context,\n babelLocation(path.node.loc),\n 'Found an unsupported tagged template translation in gt-vue',\n 'Call the translation function with a string literal instead'\n );\n },\n JSXElement(path) {\n const value = resolveVueJSXElementIdentity(\n path.node.openingElement.name,\n path.scope,\n jsxAnalysis\n );\n if (\n value?.type === 'component' &&\n (value.name === 'Var' ||\n value.name === 'Num' ||\n value.name === 'DateTime' ||\n value.name === 'Currency')\n ) {\n validateVueJSXVariableComponent(path.node, value.name, context);\n }\n if (value?.type !== 'component' || value.name !== 'T') return;\n if (isNestedInVueJSXTranslation(path, jsxAnalysis)) return;\n extractVueJSXTranslation(path, context, jsxAnalysis);\n },\n });\n return true;\n}\n\n/** Indexes Babel's lexical scopes so deferred function analysis stays exact. */\nfunction createScriptState(\n ast: t.File,\n analysis: VueScriptAnalysis\n): ScriptState {\n const state: ScriptState = {\n activeComponentFunctions: new Set(),\n activeReplayFunctions: new Set(),\n activeStringFunctions: new Set(),\n activeTranslationFunctions: new Set(),\n analysis,\n attachedLocalModules: new Set(),\n arrayEntries: new Map(),\n arrayEntriesInProgress: new Set(),\n componentPossibilities: new Map(),\n componentFactoryCandidates: new Map(),\n componentFactoryCandidatesInProgress: new Set(),\n bindings: new Map(),\n containerKindSnapshots: new Map(),\n containerKindSnapshotsInProgress: new Set(),\n containerIdentityReplays: new WeakMap(),\n containerWritePolicies: new Map(),\n definiteNonStringFunctionBindings: new Set(),\n definiteNonStringFunctionBindingsInProgress: new Set(),\n entryProgram: ast.program,\n finalContainerSnapshots: new Map(),\n finalContainerSnapshotsInProgress: new Set(),\n gtContainerPossibilities: new Map(),\n gtContainerPossibilitiesInProgress: new Set(),\n gtContainerPaths: new Map(),\n gtContainerPathsInProgress: new Set(),\n localCallableBindings: new Map(),\n mutationGTContainerPaths: new Map(),\n mutationGTContainerPathsInProgress: new Set(),\n mutationPossibleStaticStrings: new Map(),\n mutationPossibleStaticStringsInProgress: new Set(),\n mutableImportSources: new Map(),\n nextReplayIdentityKey: 0,\n parameterSubstitutions: [],\n paths: new WeakMap(),\n possibleStaticStrings: new Map(),\n possibleStaticStringsInProgress: new Set(),\n possibleStaticStringMembers: new Map(),\n possibleStaticStringMembersInProgress: new Set(),\n readonlyContainerUses: new Map(),\n readonlyContainerUsesInProgress: new Set(),\n replayIdentityKeys: new WeakMap(),\n resolvedBindings: new Set(),\n scopes: new WeakMap(),\n thisSubstitutions: [],\n transformArrayEntries: new Map(),\n transformArrayEntriesInProgress: new Set(),\n uncertainTranslationHelperBindings: new Set(),\n unsafeMutableNamespaceSources: new Set(),\n };\n traverse(ast, {\n enter(path) {\n state.paths.set(path.node, path as NodePath<t.Node>);\n state.scopes.set(path.node, path.scope);\n },\n });\n return state;\n}\n\n/** Marks a CommonJS module unsafe when any retained alias mutates or escapes it. */\nfunction analyzeMutableNamespaceSafety(ast: t.File, state: ScriptState): void {\n for (const [binding, value] of state.bindings) {\n if (\n value.type === 'namespace' &&\n value.mutable &&\n !isSafeMutableNamespaceBinding(binding)\n ) {\n state.unsafeMutableNamespaceSources.add(value.source);\n }\n }\n traverse(ast, {\n CallExpression(path) {\n const namespace = readRequireNamespace(path.node, path.scope);\n if (namespace && directRequireCanMutate(path)) {\n state.unsafeMutableNamespaceSources.add(namespace.source);\n }\n },\n OptionalCallExpression(path) {\n const namespace = readRequireNamespace(path.node, path.scope);\n if (namespace && directRequireCanMutate(path)) {\n state.unsafeMutableNamespaceSources.add(namespace.source);\n }\n },\n });\n}\n\n/** Distinguishes a fresh export read from mutation of the require result. */\nfunction directRequireCanMutate(\n path: NodePath<t.CallExpression | t.OptionalCallExpression>\n): boolean {\n const parent = path.parentPath;\n if (!parent) return true;\n if (parent.isVariableDeclarator() && parent.node.init === path.node) {\n return false;\n }\n if (\n (parent.isMemberExpression() || parent.isOptionalMemberExpression()) &&\n parent.node.object === path.node\n ) {\n return memberChainWrites(parent);\n }\n return true;\n}\n\n/** Allows export reads while rejecting writes or escape of the namespace object. */\nfunction isSafeMutableNamespaceBinding(binding: Binding): boolean {\n return (\n binding.constant &&\n binding.referencePaths.every((reference) => {\n const parent = reference.parentPath;\n return Boolean(\n parent &&\n (parent.isMemberExpression() || parent.isOptionalMemberExpression()) &&\n parent.node.object === reference.node &&\n !memberChainWrites(parent)\n );\n })\n );\n}\n\n/** Detects writes through a member chain rooted in a namespace object. */\nfunction memberChainWrites(\n memberPath: NodePath<t.MemberExpression | t.OptionalMemberExpression>\n): boolean {\n let current: NodePath<t.Node> = memberPath;\n while (\n current.parentPath &&\n (current.parentPath.isMemberExpression() ||\n current.parentPath.isOptionalMemberExpression()) &&\n current.parentPath.node.object === current.node\n ) {\n current = current.parentPath;\n }\n const parent = current.parentPath;\n return Boolean(\n parent &&\n ((parent.isAssignmentExpression() && parent.node.left === current.node) ||\n (parent.isUpdateExpression() && parent.node.argument === current.node) ||\n (parent.isUnaryExpression({ operator: 'delete' }) &&\n parent.node.argument === current.node) ||\n ((parent.isForInStatement() || parent.isForOfStatement()) &&\n parent.node.left === current.node))\n );\n}\n\nfunction collectImports(\n ast: t.File,\n state: ScriptState,\n importerFile = state.analysis.entryFile\n): void {\n traverse(ast, {\n ImportDeclaration(path) {\n if (path.node.importKind === 'type') return;\n const source = path.node.source.value;\n if (source !== 'gt-vue' && source !== 'vue') {\n registerLocalImportDeclaration(\n path.node,\n path.scope,\n importerFile,\n state\n );\n return;\n }\n\n for (const specifierPath of path.get('specifiers')) {\n const specifier = specifierPath.node;\n if (specifier.type === 'ImportNamespaceSpecifier') {\n registerImport(\n specifier.local.name,\n { type: 'namespace', source, mutable: false },\n specifierPath.scope,\n state\n );\n continue;\n }\n if (\n specifier.type !== 'ImportSpecifier' ||\n specifier.importKind === 'type'\n ) {\n continue;\n }\n const importedName =\n specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value;\n const value = knownExport(source, importedName);\n if (value) {\n registerImport(\n specifier.local.name,\n value,\n specifierPath.scope,\n state\n );\n }\n }\n },\n TSImportEqualsDeclaration(path) {\n const reference = path.node.moduleReference;\n if (\n reference.type !== 'TSExternalModuleReference' ||\n reference.expression.type !== 'StringLiteral'\n ) {\n return;\n }\n const source = reference.expression.value;\n if (source !== 'gt-vue' && source !== 'vue') return;\n registerImport(\n path.node.id.name,\n { type: 'namespace', source, mutable: true },\n path.scope,\n state\n );\n },\n VariableDeclarator(path) {\n const dynamicImport = readDynamicImport(path.node.init);\n if (dynamicImport) {\n recordDynamicImportPattern(\n path.node.id,\n dynamicImport.source,\n path.scope,\n importerFile,\n state\n );\n return;\n }\n const namespace = readRequireNamespace(path.node.init, path.scope);\n if (!namespace) return;\n registerRequirePattern(path.node.id, namespace, path.scope, state);\n },\n });\n propagateUncertainTranslationHelperAliases(ast, state);\n}\n\n/** Retains unresolved-helper provenance through simple immutable aliases. */\nfunction propagateUncertainTranslationHelperAliases(\n ast: t.File,\n state: ScriptState\n): void {\n const candidates: Array<{\n binding: Binding;\n source: t.Node;\n sourcePath: string;\n sourceScope: Scope;\n targetName: string;\n }> = [];\n traverse(ast, {\n VariableDeclarator(path) {\n if (!path.node.init) return;\n const sourcePath = readResolvedMemberPath(\n path.node.init,\n path.scope,\n state\n );\n if (!sourcePath) return;\n for (const targetName of collectPatternBindingNames(path.node.id)) {\n const binding = path.scope.getBinding(targetName);\n if (binding?.constant) {\n candidates.push({\n binding,\n source: path.node.init,\n sourcePath,\n sourceScope: path.scope,\n targetName,\n });\n }\n }\n },\n });\n\n let changed = true;\n while (changed) {\n changed = false;\n for (const candidate of candidates) {\n if (\n state.uncertainTranslationHelperBindings.has(candidate.binding) ||\n !pathMayReferenceUncertainTranslationHelper(\n candidate.source,\n candidate.sourcePath,\n candidate.sourceScope,\n state\n )\n ) {\n continue;\n }\n state.analysis.uncertainTranslationHelpers.add(candidate.targetName);\n state.uncertainTranslationHelperBindings.add(candidate.binding);\n changed = true;\n }\n }\n}\n\n/** Reads an import() source, including a single surrounding await. */\nfunction readDynamicImport(\n node: t.Node | null | undefined\n): { source?: string } | undefined {\n let expression = unwrapExpression(node);\n if (expression?.type === 'AwaitExpression') {\n expression = unwrapExpression(expression.argument);\n }\n if (!expression) return undefined;\n if (expression.type === 'ImportExpression') {\n const source = unwrapExpression(expression.source);\n return {\n source: source?.type === 'StringLiteral' ? source.value : undefined,\n };\n }\n if (\n expression.type !== 'CallExpression' ||\n expression.callee.type !== 'Import'\n ) {\n return undefined;\n }\n const source = unwrapExpression(expression.arguments[0]);\n return {\n source: source?.type === 'StringLiteral' ? source.value : undefined,\n };\n}\n\n/** Marks GT-shaped values selected from a dynamic namespace as unresolved. */\nfunction recordDynamicImportPattern(\n pattern: t.LVal | t.VoidPattern,\n source: string | undefined,\n scope: Scope,\n importerFile: string | undefined,\n state: ScriptState\n): void {\n if (pattern.type === 'VoidPattern') return;\n const resolver = state.analysis.localModules;\n const modulePath =\n source && source !== 'gt-vue' && source !== 'vue' && importerFile\n ? resolver?.resolveModule(importerFile, source)\n : undefined;\n if (source === 'vue') return;\n if (source && source !== 'gt-vue' && !modulePath) return;\n if (pattern.type === 'Identifier') {\n if (modulePath && resolver) {\n for (const exportName of [\n ...COMPONENT_IMPORTS,\n 'msg',\n 'useGT',\n 'useMessages',\n ]) {\n recordDynamicImportBinding(\n appendTemplatePath(pattern.name, exportName),\n exportName,\n modulePath,\n state\n );\n }\n } else {\n for (const component of COMPONENT_IMPORTS) {\n const path = appendTemplatePath(pattern.name, component);\n state.analysis.uncertainComponents.add(path);\n state.analysis.uncertainGTComponents.add(path);\n }\n for (const name of ['msg', 'useGT', 'useMessages']) {\n state.analysis.uncertainStringFunctions.add(\n appendTemplatePath(pattern.name, name)\n );\n }\n }\n return;\n }\n if (pattern.type !== 'ObjectPattern') return;\n for (const property of pattern.properties) {\n if (property.type !== 'ObjectProperty') continue;\n const exportedName = readPropertyKey(property);\n const localName = readPatternIdentifier(property.value);\n if (exportedName && localName) {\n if (modulePath) {\n recordDynamicImportBinding(localName, exportedName, modulePath, state);\n } else {\n recordUnresolvedGTShapedBinding(localName, exportedName, state);\n }\n }\n }\n // Resolve computed destructuring only when its key is static. Dynamic keys\n // and object-rest aliases intentionally remain unusable for GT extraction.\n for (const property of pattern.properties) {\n if (property.type !== 'ObjectProperty' || !property.computed) continue;\n const exportedName = readResolvedPropertyKey(property, scope, state);\n const localName = readPatternIdentifier(property.value);\n if (exportedName && localName) {\n if (modulePath) {\n recordDynamicImportBinding(localName, exportedName, modulePath, state);\n } else {\n recordUnresolvedGTShapedBinding(localName, exportedName, state);\n }\n }\n }\n}\n\n/** Marks only GT roles proven reachable from one static dynamic import. */\nfunction recordDynamicImportBinding(\n localName: string,\n exportName: string,\n modulePath: string,\n state: ScriptState\n): void {\n const resolution = state.analysis.localModules?.resolveExport(\n modulePath,\n exportName\n );\n if (!resolution || resolution.status === 'absent') return;\n if (resolution.status !== 'resolved') {\n recordUnresolvedGTShapedBinding(localName, exportName, state);\n return;\n }\n recordMaterializedLocalUncertainty(\n localName,\n materializeLocalExport(resolution.target, state),\n state,\n true\n );\n}\n\n/** Resolves one ESM import through a local, read-only source module graph. */\nfunction registerLocalImportDeclaration(\n declaration: t.ImportDeclaration,\n scope: Scope,\n importerFile: string | undefined,\n state: ScriptState\n): void {\n const resolver = state.analysis.localModules;\n const source = declaration.source.value;\n const modulePath =\n resolver && importerFile\n ? resolver.resolveModule(importerFile, source)\n : undefined;\n if (!modulePath || !resolver?.getRecord(modulePath)) {\n recordUnresolvedTranslationHelperImports(declaration, scope, state);\n if (\n source.startsWith('.') ||\n source.startsWith('/') ||\n resolver?.hasCustomResolver\n ) {\n recordUnresolvedGTShapedImports(declaration, state);\n }\n return;\n }\n\n for (const specifier of declaration.specifiers) {\n if (\n specifier.type === 'ImportSpecifier' &&\n specifier.importKind === 'type'\n ) {\n continue;\n }\n if (specifier.type === 'ImportNamespaceSpecifier') {\n const value: KnownValue = { type: 'local-namespace', modulePath };\n registerImport(specifier.local.name, value, scope, state);\n if (importerFile === state.analysis.entryFile) {\n recordLocalNamespaceMembers(specifier.local.name, modulePath, state);\n }\n continue;\n }\n const exportName =\n specifier.type === 'ImportDefaultSpecifier'\n ? 'default'\n : specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value;\n const resolution = resolver.resolveExport(modulePath, exportName);\n if (resolution.status !== 'resolved') {\n recordUncertainTranslationHelperBinding(\n specifier.local.name,\n scope,\n state\n );\n if (resolution.status === 'ambiguous') {\n recordAmbiguousLocalBinding(specifier.local.name, state);\n } else {\n recordUnresolvedGTShapedBinding(\n specifier.local.name,\n exportName,\n state\n );\n }\n continue;\n }\n const materialized = materializeLocalExport(resolution.target, state);\n const binding = scope.getBinding(specifier.local.name);\n if (materialized.value) {\n registerImport(specifier.local.name, materialized.value, scope, state);\n if (\n materialized.value.type === 'local-namespace' &&\n importerFile === state.analysis.entryFile\n ) {\n recordLocalNamespaceMembers(\n specifier.local.name,\n materialized.value.modulePath,\n state\n );\n }\n }\n if (binding && materialized.callable) {\n state.localCallableBindings.set(binding, materialized.callable);\n }\n recordMaterializedLocalUncertainty(\n specifier.local.name,\n materialized,\n state\n );\n if (binding && materialized.unsafeCallable) {\n state.uncertainTranslationHelperBindings.add(binding);\n }\n }\n}\n\n/** Indexes an imported module's scopes and its own static imports once. */\nfunction attachLocalModule(\n record: LocalModuleRecord,\n state: ScriptState\n): void {\n if (state.attachedLocalModules.has(record.filePath)) return;\n state.attachedLocalModules.add(record.filePath);\n traverse(record.ast, {\n enter(path) {\n state.paths.set(path.node, path as NodePath<t.Node>);\n state.scopes.set(path.node, path.scope);\n },\n });\n collectImports(record.ast, state, record.filePath);\n}\n\n/** Converts a graph export into an analyzer identity or callable. */\nfunction materializeLocalExport(\n target: LocalExportTarget,\n state: ScriptState\n): {\n callable?: ScopedExpression & { node: t.Function };\n possibleGTComponent?: boolean;\n possibleStringFunction?: boolean;\n unsafeCallable?: boolean;\n value?: KnownValue;\n} {\n if (target.type === 'external') {\n return { value: knownExport(target.source, target.exportName) };\n }\n if (target.type === 'external-namespace') {\n return {\n value: { mutable: false, source: target.source, type: 'namespace' },\n };\n }\n if (target.type === 'namespace') {\n return {\n value: { type: 'local-namespace', modulePath: target.modulePath },\n };\n }\n attachLocalModule(target.record, state);\n if (target.type === 'expression') {\n return {\n callable: resolveCalledFunction(\n target.node,\n target.record.programScope,\n state,\n new Set()\n ),\n value: resolveKnownExpression(\n target.node,\n target.record.programScope,\n state,\n new Set()\n ),\n possibleGTComponent: expressionMayProduceComponent(\n target.node,\n target.record.programScope,\n state,\n new Set(),\n 'translation'\n ),\n possibleStringFunction: expressionMayProduceStringFunction(\n target.node,\n target.record.programScope,\n state,\n new Set()\n ),\n };\n }\n const binding = target.record.programScope.getBinding(target.exportName);\n if (!binding) return {};\n const possibleGTComponent = expressionMayProduceComponent(\n binding.identifier,\n target.record.programScope,\n state,\n new Set(),\n 'translation'\n );\n const possibleStringFunction = expressionMayProduceStringFunction(\n binding.identifier,\n target.record.programScope,\n state,\n new Set()\n );\n if (!binding.constant) {\n return {\n possibleGTComponent,\n possibleStringFunction,\n unsafeCallable: bindingMayReferenceLocalCallable(binding, state),\n };\n }\n return {\n callable: resolveCalledFunction(\n binding.identifier,\n target.record.programScope,\n state,\n new Set()\n ),\n possibleGTComponent,\n possibleStringFunction,\n value: resolveKnownBinding(binding, state, new Set()),\n };\n}\n\n/** Makes statically known members of a local namespace visible to templates. */\nfunction recordLocalNamespaceMembers(\n localName: string,\n modulePath: string,\n state: ScriptState\n): void {\n const resolver = state.analysis.localModules;\n if (!resolver) return;\n const exportNames = new Set<string>([\n ...resolver.listExportNames(modulePath),\n ...COMPONENT_IMPORTS,\n 'msg',\n 'useGT',\n 'useMessages',\n ]);\n for (const exportName of exportNames) {\n const memberPath = appendTemplatePath(localName, exportName);\n const resolution = resolver.resolveExport(modulePath, exportName);\n if (resolution.status === 'absent') continue;\n if (resolution.status !== 'resolved') {\n state.analysis.uncertainTranslationHelpers.add(memberPath);\n if (resolution.status === 'ambiguous') {\n recordAmbiguousLocalBinding(memberPath, state);\n } else {\n recordUnresolvedGTShapedBinding(memberPath, exportName, state);\n }\n continue;\n }\n const materialized = materializeLocalExport(resolution.target, state);\n if (materialized.value) {\n state.analysis.values.set(memberPath, materialized.value);\n }\n recordMaterializedLocalUncertainty(memberPath, materialized, state);\n }\n}\n\n/** Records unresolved roles only when a local export can actually be GT. */\nfunction recordMaterializedLocalUncertainty(\n localName: string,\n materialized: ReturnType<typeof materializeLocalExport>,\n state: ScriptState,\n forceKnownValues = false\n): void {\n if (\n materialized.possibleGTComponent ||\n (forceKnownValues && materialized.value?.type === 'component')\n ) {\n state.analysis.uncertainComponents.add(localName);\n state.analysis.uncertainGTComponents.add(localName);\n }\n if (\n materialized.possibleStringFunction ||\n (forceKnownValues && materialized.value?.type === 'string')\n ) {\n state.analysis.uncertainStringFunctions.add(localName);\n }\n if (materialized.unsafeCallable) {\n state.analysis.uncertainTranslationHelpers.add(localName);\n }\n}\n\n/** Detects a mutable export that may still be invoked as a local helper. */\nfunction bindingMayReferenceLocalCallable(\n binding: Binding,\n state: ScriptState\n): boolean {\n const declaration = binding.path.node;\n if (\n declaration.type === 'VariableDeclarator' &&\n declaration.init &&\n resolveCalledFunction(\n declaration.init,\n binding.path.scope,\n state,\n new Set()\n )\n ) {\n return true;\n }\n return binding.constantViolations.some(\n (violation) =>\n violation.isAssignmentExpression() &&\n patternContains(violation.node.left, binding.identifier.name) &&\n resolveCalledFunction(\n violation.node.right,\n violation.scope,\n state,\n new Set()\n ) !== undefined\n );\n}\n\n/** Marks only GT-shaped imports when a custom or bare module is unresolved. */\nfunction recordUnresolvedGTShapedImports(\n declaration: t.ImportDeclaration,\n state: ScriptState\n): void {\n for (const specifier of declaration.specifiers) {\n if (specifier.type === 'ImportNamespaceSpecifier') {\n for (const component of COMPONENT_IMPORTS) {\n const path = appendTemplatePath(specifier.local.name, component);\n state.analysis.uncertainComponents.add(path);\n state.analysis.uncertainGTComponents.add(path);\n }\n for (const name of ['msg', 'useGT', 'useMessages']) {\n state.analysis.uncertainStringFunctions.add(\n appendTemplatePath(specifier.local.name, name)\n );\n }\n continue;\n }\n if (\n specifier.type === 'ImportSpecifier' &&\n specifier.importKind === 'type'\n ) {\n continue;\n }\n const importedName =\n specifier.type === 'ImportDefaultSpecifier'\n ? specifier.local.name\n : specifier.imported.type === 'Identifier'\n ? specifier.imported.name\n : specifier.imported.value;\n recordUnresolvedGTShapedBinding(specifier.local.name, importedName, state);\n }\n}\n\n/** Marks unresolved imports only when a call later passes a translator. */\nfunction recordUnresolvedTranslationHelperImports(\n declaration: t.ImportDeclaration,\n scope: Scope,\n state: ScriptState\n): void {\n for (const specifier of declaration.specifiers) {\n if (\n specifier.type === 'ImportSpecifier' &&\n specifier.importKind === 'type'\n ) {\n continue;\n }\n recordUncertainTranslationHelperBinding(specifier.local.name, scope, state);\n }\n}\n\n/** Records one unresolved helper name together with its lexical binding. */\nfunction recordUncertainTranslationHelperBinding(\n localName: string,\n scope: Scope,\n state: ScriptState\n): void {\n state.analysis.uncertainTranslationHelpers.add(localName);\n const binding = scope.getBinding(localName);\n if (binding) state.uncertainTranslationHelperBindings.add(binding);\n}\n\n/** Records the conservative GT roles implied by an unresolved export name. */\nfunction recordUnresolvedGTShapedBinding(\n localName: string,\n exportName: string,\n state: ScriptState\n): void {\n if (COMPONENT_IMPORTS.has(exportName as never)) {\n state.analysis.uncertainComponents.add(localName);\n state.analysis.uncertainGTComponents.add(localName);\n }\n if (\n exportName === 'msg' ||\n exportName === 'useGT' ||\n exportName === 'useMessages'\n ) {\n state.analysis.uncertainStringFunctions.add(localName);\n }\n}\n\n/** Fails closed when a resolved local export is ambiguous or mutable. */\nfunction recordAmbiguousLocalBinding(\n localName: string,\n state: ScriptState\n): void {\n state.analysis.uncertainComponents.add(localName);\n state.analysis.uncertainGTComponents.add(localName);\n state.analysis.uncertainStringFunctions.add(localName);\n}\n\n/** Reads the original name of one direct or namespace ESM import. */\nfunction readImportedFunctionName(\n node: t.Node,\n scope: Scope,\n source: 'gt-vue' | 'vue',\n state: ScriptState\n): string | undefined {\n const known = resolveKnownExpression(node, scope, state, new Set());\n if (source === 'vue' && known?.type === 'vue-call') return known.name;\n const expression = unwrapExpression(node);\n if (!expression) return undefined;\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n const importPath = binding?.path;\n const declaration = importPath?.parentPath;\n if (\n !importPath?.isImportSpecifier() ||\n !declaration?.isImportDeclaration() ||\n declaration.node.source.value !== source\n ) {\n return undefined;\n }\n return importPath.node.imported.type === 'Identifier'\n ? importPath.node.imported.name\n : importPath.node.imported.value;\n }\n if (\n expression.type !== 'MemberExpression' &&\n expression.type !== 'OptionalMemberExpression'\n ) {\n return undefined;\n }\n const property = readMemberProperty(expression);\n const object = unwrapExpression(expression.object);\n if (!property || object?.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(object.name);\n const importPath = binding?.path;\n const declaration = importPath?.parentPath;\n return importPath?.isImportNamespaceSpecifier() &&\n declaration?.isImportDeclaration() &&\n declaration.node.source.value === source\n ? property\n : undefined;\n}\n\n/** Detects an imported T anywhere inside an unsupported wrapper expression. */\nfunction expressionContainsGTReference(\n node: t.Node,\n scope: Scope,\n state: ScriptState\n): boolean {\n const direct = resolveKnownExpression(node, scope, state, new Set());\n if (direct?.type === 'component' && direct.name === 'T') return true;\n const path = state.paths.get(node);\n if (!path) return false;\n let found = false;\n path.traverse({\n Identifier(identifierPath) {\n const value = resolveKnownExpression(\n identifierPath.node,\n identifierPath.scope,\n state,\n new Set()\n );\n if (value?.type === 'component' && value.name === 'T') {\n found = true;\n identifierPath.stop();\n }\n },\n });\n return found;\n}\n\nfunction registerImport(\n localName: string,\n value: KnownValue,\n scope: Scope,\n state: ScriptState\n): void {\n const binding = scope.getBinding(localName);\n if (!binding || binding.constant) {\n if (binding) state.bindings.set(binding, value);\n if (\n binding?.scope.block === state.entryProgram &&\n (value.type !== 'namespace' || !value.mutable)\n ) {\n state.analysis.values.set(localName, value);\n }\n }\n}\n\nfunction registerRequirePattern(\n pattern: t.Node,\n namespace: Extract<KnownValue, { type: 'namespace' }>,\n scope: Scope,\n state: ScriptState\n): void {\n if (pattern.type === 'Identifier') {\n registerImport(pattern.name, namespace, scope, state);\n const binding = scope.getBinding(pattern.name);\n if (binding) state.mutableImportSources.set(binding, namespace.source);\n return;\n }\n if (pattern.type !== 'ObjectPattern') return;\n for (const property of pattern.properties) {\n if (property.type !== 'ObjectProperty') continue;\n const importedName = readResolvedPropertyKey(property, scope, state);\n const localName = readPatternIdentifier(property.value);\n const value = importedName\n ? knownExport(namespace.source, importedName)\n : undefined;\n if (localName && value) {\n registerImport(localName, value, scope, state);\n const binding = scope.getBinding(localName);\n if (binding) state.mutableImportSources.set(binding, namespace.source);\n }\n }\n}\n\nfunction exposeProgramBindings(\n ast: t.File,\n state: ScriptState,\n templateBindings: TemplateBindings\n): void {\n for (const name of state.analysis.uncertainComponents) {\n templateBindings.uncertainComponents.add(name);\n }\n for (const name of state.analysis.uncertainGTComponents) {\n templateBindings.uncertainGTComponents.add(name);\n }\n for (const name of state.analysis.uncertainStringFunctions) {\n templateBindings.uncertainStringFunctions.add(name);\n }\n traverse(ast, {\n Program(path) {\n for (const [name, binding] of Object.entries(path.scope.bindings)) {\n clearTemplateBinding(name, templateBindings);\n templateBindings.directBindings.add(name);\n if (state.analysis.uncertainComponents.has(name)) {\n templateBindings.uncertainComponents.add(name);\n }\n if (state.analysis.uncertainGTComponents.has(name)) {\n templateBindings.uncertainGTComponents.add(name);\n }\n if (state.analysis.uncertainStringFunctions.has(name)) {\n templateBindings.uncertainStringFunctions.add(name);\n }\n const replayLeaf = readReplayLeafState(binding, state);\n const exactReplayLeaf = readSafeReplayLeafOverride(\n binding,\n replayLeaf,\n state\n );\n const value = exactReplayLeaf\n ? exactReplayLeaf.value.knownValue\n : resolveTemplateKnownBinding(binding, state);\n const unsafeMutableImport = readUnsafeMutableImport(binding, state);\n const unsafeReplaySource = bindingReadsUnsafeMutableImport(\n binding,\n state\n );\n const exactReplayComponents =\n Boolean(exactReplayLeaf) ||\n (!unsafeReplaySource &&\n readReplayComponentCandidates(binding, name, state) !== undefined);\n if (value && !unsafeMutableImport) {\n exposeKnownValue(name, value, templateBindings, state.analysis);\n } else if (replayLeaf?.status === 'unsafe') {\n templateBindings.uncertainComponents.add(name);\n templateBindings.uncertainGTComponents.add(name);\n templateBindings.uncertainStringFunctions.add(name);\n } else if (unsafeMutableImport) {\n exposeUncertainKnownValue(\n name,\n unsafeMutableImport,\n templateBindings.uncertainComponents,\n templateBindings.uncertainGTComponents,\n templateBindings.uncertainStringFunctions\n );\n } else if (\n !exactReplayComponents &&\n bindingMayReferenceComponent(binding, state)\n ) {\n templateBindings.uncertainComponents.add(name);\n }\n if (\n replayLeaf?.status !== 'unsafe' &&\n !exactReplayComponents &&\n bindingMayReferenceComponent(binding, state, 'translation')\n ) {\n templateBindings.uncertainGTComponents.add(name);\n }\n if (\n !value &&\n !exactReplayLeaf &&\n replayLeaf?.status !== 'unsafe' &&\n bindingMayReferenceStringFunction(binding, state)\n ) {\n templateBindings.uncertainStringFunctions.add(name);\n }\n exposeProgramComponentMembers(name, binding, state, templateBindings);\n exposeProgramComponentFactory(name, binding, state, templateBindings);\n exposeProgramContainerKinds(name, binding, state, templateBindings);\n const gtContainer = readBindingGTContainerExposure(binding, state);\n for (const path of gtContainer.containers) {\n templateBindings.possibleGTContainers.add(path);\n }\n for (const path of gtContainer.factories) {\n templateBindings.gtContainerFactories.add(path);\n }\n exposeProgramStaticMembers(name, binding, state, templateBindings);\n exposeProgramPossibleStaticStrings(\n name,\n binding,\n state,\n templateBindings\n );\n const staticValue = readStaticFromScope(\n binding.identifier,\n path.scope,\n new Set(),\n Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (staticValue.ok) {\n templateBindings.staticValues.set(name, staticValue.value);\n }\n }\n path.stop();\n },\n });\n}\n\n/** Invalidates normal-script values written from the script-setup block. */\nfunction recordCrossBlockWrites(\n ast: t.File,\n state: ScriptState,\n templateBindings: TemplateBindings\n): void {\n const applyWrite = (target: t.Node, scope: Scope, value?: t.Node): void => {\n for (const path of collectCrossBlockWritePaths(target, scope, state)) {\n const existingValues = [...readAnalysisPathValues(path, state.analysis)];\n const hadComponent =\n existingValues.some(\n (entry) => entry.type === 'component' || entry.type === 'vue-builtin'\n ) || setHasPath(state.analysis.uncertainComponents, path);\n const hadGTComponent =\n existingValues.some((entry) => entry.type === 'component') ||\n setHasPath(state.analysis.uncertainGTComponents, path);\n const hadString =\n existingValues.some((entry) => entry.type === 'string') ||\n setHasPath(state.analysis.uncertainStringFunctions, path);\n invalidateAnalysisPath(path, state.analysis);\n clearTemplateBinding(path, templateBindings);\n\n const valueHasComponent = Boolean(\n value &&\n (expressionMayProduceComponent(value, scope, state, new Set()) ||\n containerMayContainComponent(value, scope, state, new Set()))\n );\n const valueHasGTComponent = Boolean(\n value &&\n (expressionMayProduceComponent(\n value,\n scope,\n state,\n new Set(),\n 'translation'\n ) ||\n containerMayContainComponent(\n value,\n scope,\n state,\n new Set(),\n 'translation'\n ))\n );\n const valueHasString = Boolean(\n value &&\n (expressionMayProduceStringFunction(value, scope, state, new Set()) ||\n containerMayContainStringFunction(value, scope, state, new Set()))\n );\n if (hadComponent || valueHasComponent) {\n state.analysis.uncertainComponents.add(path);\n templateBindings.uncertainComponents.add(path);\n }\n if (hadGTComponent || valueHasGTComponent) {\n state.analysis.uncertainGTComponents.add(path);\n templateBindings.uncertainGTComponents.add(path);\n }\n if (hadString || valueHasString) {\n state.analysis.uncertainStringFunctions.add(path);\n templateBindings.uncertainStringFunctions.add(path);\n }\n }\n };\n\n traverse(ast, {\n AssignmentExpression(path) {\n applyWrite(path.node.left, path.scope, path.node.right);\n },\n UpdateExpression(path) {\n applyWrite(path.node.argument, path.scope);\n },\n UnaryExpression(path) {\n if (path.node.operator === 'delete') {\n applyWrite(path.node.argument, path.scope);\n }\n },\n ForInStatement(path) {\n applyWrite(path.node.left, path.scope, path.node.right);\n },\n ForOfStatement(path) {\n applyWrite(path.node.left, path.scope, path.node.right);\n },\n });\n}\n\nfunction collectCrossBlockWritePaths(\n node: t.Node,\n scope: Scope,\n state: ScriptState\n): string[] {\n const expression = unwrapExpression(node);\n if (!expression) return [];\n if (expression.type === 'Identifier') {\n return !scope.getBinding(expression.name) &&\n state.analysis.directBindings.has(expression.name)\n ? [expression.name]\n : [];\n }\n if (\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ) {\n const root = readMemberRootName(expression);\n if (\n !root ||\n scope.getBinding(root) ||\n !state.analysis.directBindings.has(root)\n ) {\n return [];\n }\n return [readResolvedMemberPath(expression, scope, state) ?? root];\n }\n if (expression.type === 'ObjectPattern') {\n return expression.properties.flatMap((property) =>\n collectCrossBlockWritePaths(\n property.type === 'RestElement' ? property.argument : property.value,\n scope,\n state\n )\n );\n }\n if (expression.type === 'ArrayPattern') {\n return expression.elements.flatMap((element) =>\n element ? collectCrossBlockWritePaths(element, scope, state) : []\n );\n }\n if (expression.type === 'RestElement') {\n return collectCrossBlockWritePaths(expression.argument, scope, state);\n }\n if (expression.type === 'AssignmentPattern') {\n return collectCrossBlockWritePaths(expression.left, scope, state);\n }\n return [];\n}\n\nfunction readMemberRootName(node: t.Node): string | undefined {\n const expression = unwrapExpression(node);\n if (!expression) return undefined;\n if (expression.type === 'Identifier') return expression.name;\n return expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ? readMemberRootName(expression.object)\n : undefined;\n}\n\nfunction readAnalysisPathValues(\n path: string,\n analysis: VueScriptAnalysis\n): KnownValue[] {\n const values: KnownValue[] = [];\n for (const source of [analysis.values, analysis.templateValues]) {\n for (const [name, value] of source) {\n if (name === path || name.startsWith(`${path}.`)) values.push(value);\n }\n }\n return values;\n}\n\nfunction setHasPath(values: Set<string>, path: string): boolean {\n return [...values].some(\n (name) => name === path || name.startsWith(`${path}.`)\n );\n}\n\n/** Checks whether a dotted path is nested under one retained set entry. */\nfunction pathHasSetPrefix(values: Set<string>, path: string): boolean {\n return [...values].some(\n (name) => name === path || path.startsWith(`${name}.`)\n );\n}\n\n/** Checks helper uncertainty against the active lexical binding when present. */\nfunction pathMayReferenceUncertainTranslationHelper(\n node: t.Node,\n path: string,\n scope: Scope,\n state: ScriptState\n): boolean {\n const rootName = readMemberRootName(node);\n const binding = rootName ? scope.getBinding(rootName) : undefined;\n if (!binding) {\n return pathHasSetPrefix(state.analysis.uncertainTranslationHelpers, path);\n }\n if (state.uncertainTranslationHelperBindings.has(binding)) return true;\n\n const known = state.bindings.get(binding);\n const isLocalNamespace = known?.type === 'local-namespace';\n return (\n (binding.path.isImportNamespaceSpecifier() || isLocalNamespace) &&\n pathHasSetPrefix(state.analysis.uncertainTranslationHelpers, path)\n );\n}\n\nfunction invalidateAnalysisPath(\n path: string,\n analysis: VueScriptAnalysis\n): void {\n for (const map of [\n analysis.arrayLengths,\n analysis.possibleStaticStrings,\n analysis.values,\n analysis.templateValues,\n analysis.staticValues,\n analysis.containerKinds,\n ]) {\n for (const name of map.keys()) {\n if (name === path || name.startsWith(`${path}.`)) map.delete(name);\n }\n }\n for (const values of [\n analysis.componentFactories,\n analysis.gtComponentFactories,\n analysis.gtContainerFactories,\n analysis.possibleGTContainers,\n analysis.uncertainComponents,\n analysis.uncertainGTComponents,\n analysis.uncertainStringFunctions,\n ]) {\n for (const name of values) {\n if (name === path || name.startsWith(`${path}.`)) values.delete(name);\n }\n }\n}\n\n/** Removes a normal-script exposure shadowed by a script-setup binding. */\nfunction clearTemplateBinding(\n localName: string,\n templateBindings: TemplateBindings\n): void {\n for (const bindings of [\n templateBindings.arrayLengths,\n templateBindings.possibleStaticStrings,\n templateBindings.staticValues,\n templateBindings.containerKinds,\n ]) {\n for (const name of bindings.keys()) {\n if (name === localName || name.startsWith(`${localName}.`)) {\n bindings.delete(name);\n }\n }\n }\n templateBindings.uncertainComponents.delete(localName);\n templateBindings.uncertainGTComponents.delete(localName);\n templateBindings.uncertainStringFunctions.delete(localName);\n for (const bindings of [\n templateBindings.components,\n templateBindings.stringFunctions,\n templateBindings.vueBuiltins,\n ]) {\n for (const name of bindings.keys()) {\n if (name === localName || name.startsWith(`${localName}.`)) {\n bindings.delete(name);\n }\n }\n }\n for (const bindings of [\n templateBindings.componentFactories,\n templateBindings.gtComponentFactories,\n templateBindings.gtContainerFactories,\n templateBindings.identityFunctions,\n templateBindings.possibleGTContainers,\n ]) {\n for (const name of bindings) {\n if (name === localName || name.startsWith(`${localName}.`)) {\n bindings.delete(name);\n }\n }\n }\n for (const name of templateBindings.uncertainComponents) {\n if (name.startsWith(`${localName}.`)) {\n templateBindings.uncertainComponents.delete(name);\n }\n }\n for (const name of templateBindings.uncertainGTComponents) {\n if (name.startsWith(`${localName}.`)) {\n templateBindings.uncertainGTComponents.delete(name);\n }\n }\n for (const name of templateBindings.uncertainStringFunctions) {\n if (name.startsWith(`${localName}.`)) {\n templateBindings.uncertainStringFunctions.delete(name);\n }\n }\n}\n\n/** Records normal-script module bindings that script setup can reference. */\nfunction recordProgramAnalysis(ast: t.File, state: ScriptState): void {\n traverse(ast, {\n Program(path) {\n for (const [name, binding] of Object.entries(path.scope.bindings)) {\n state.analysis.directBindings.add(name);\n const replayLeaf = readReplayLeafState(binding, state);\n const exactReplayLeaf = readSafeReplayLeafOverride(\n binding,\n replayLeaf,\n state\n );\n const replayKnownValue = exactReplayLeaf\n ? exactReplayLeaf.value.knownValue\n : undefined;\n const value = exactReplayLeaf\n ? replayKnownValue\n : resolveKnownBinding(binding, state, new Set());\n const templateValue = exactReplayLeaf\n ? replayKnownValue\n : resolveTemplateKnownBinding(binding, state);\n const unsafeMutableImport = readUnsafeMutableImport(binding, state);\n const unsafeReplaySource = bindingReadsUnsafeMutableImport(\n binding,\n state\n );\n const exactReplayComponents =\n Boolean(exactReplayLeaf) ||\n (!unsafeReplaySource &&\n readReplayComponentCandidates(binding, name, state) !== undefined);\n if (value && !unsafeMutableImport) {\n state.analysis.values.set(name, value);\n } else if (replayLeaf?.status === 'unsafe') {\n state.analysis.uncertainComponents.add(name);\n state.analysis.uncertainGTComponents.add(name);\n state.analysis.uncertainStringFunctions.add(name);\n } else if (unsafeMutableImport) {\n exposeUncertainKnownValue(\n name,\n unsafeMutableImport,\n state.analysis.uncertainComponents,\n state.analysis.uncertainGTComponents,\n state.analysis.uncertainStringFunctions\n );\n } else if (\n !exactReplayComponents &&\n bindingMayReferenceComponent(binding, state)\n ) {\n state.analysis.uncertainComponents.add(name);\n }\n if (\n replayLeaf?.status !== 'unsafe' &&\n !exactReplayComponents &&\n bindingMayReferenceComponent(binding, state, 'translation')\n ) {\n state.analysis.uncertainGTComponents.add(name);\n }\n if (\n !templateValue &&\n !exactReplayLeaf &&\n replayLeaf?.status !== 'unsafe' &&\n bindingMayReferenceStringFunction(binding, state)\n ) {\n state.analysis.uncertainStringFunctions.add(name);\n }\n if (\n templateValue &&\n (!value || knownValueKey(value) !== knownValueKey(templateValue))\n ) {\n state.analysis.templateValues.set(name, templateValue);\n }\n recordProgramComponentMembers(name, binding, state);\n recordProgramComponentFactory(name, binding, state);\n recordProgramContainerKinds(name, binding, state);\n const gtContainer = readBindingGTContainerExposure(binding, state);\n for (const path of gtContainer.containers) {\n state.analysis.possibleGTContainers.add(path);\n }\n for (const path of gtContainer.factories) {\n state.analysis.gtContainerFactories.add(path);\n }\n recordProgramStaticMembers(name, binding, state);\n recordProgramPossibleStaticStrings(name, binding, state);\n const staticValue = readStaticFromScope(\n binding.identifier,\n path.scope,\n new Set(),\n Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (staticValue.ok) {\n state.analysis.staticValues.set(name, staticValue.value);\n }\n }\n path.stop();\n },\n });\n}\n\nfunction exposeKnownValue(\n localName: string,\n value: KnownValue,\n templateBindings: TemplateBindings,\n analysis?: VueScriptAnalysis\n): void {\n if (value.type === 'component') {\n templateBindings.components.set(localName, value.name);\n } else if (value.type === 'string') {\n templateBindings.stringFunctions.set(localName, value.kind);\n } else if (value.type === 'namespace' && value.source === 'gt-vue') {\n for (const component of COMPONENT_IMPORTS) {\n templateBindings.components.set(\n appendTemplatePath(localName, component),\n component\n );\n }\n templateBindings.stringFunctions.set(\n appendTemplatePath(localName, 'msg'),\n 'msg'\n );\n } else if (value.type === 'namespace' && value.source === 'vue') {\n for (const builtin of VUE_BUILTIN_IMPORTS) {\n templateBindings.vueBuiltins.set(\n appendTemplatePath(localName, builtin),\n builtin\n );\n }\n templateBindings.identityFunctions.add(\n appendTemplatePath(localName, 'markRaw')\n );\n } else if (value.type === 'local-namespace' && analysis) {\n const prefix = `${localName}.`;\n for (const [path, member] of analysis.values) {\n if (path.startsWith(prefix) && path !== localName) {\n exposeKnownValue(path, member, templateBindings, analysis);\n }\n }\n for (const path of analysis.uncertainComponents) {\n if (path.startsWith(prefix)) {\n templateBindings.uncertainComponents.add(path);\n }\n }\n for (const path of analysis.uncertainGTComponents) {\n if (path.startsWith(prefix)) {\n templateBindings.uncertainGTComponents.add(path);\n }\n }\n for (const path of analysis.uncertainStringFunctions) {\n if (path.startsWith(prefix)) {\n templateBindings.uncertainStringFunctions.add(path);\n }\n }\n } else if (value.type === 'vue-builtin') {\n templateBindings.vueBuiltins.set(localName, value.name);\n } else if (value.type === 'identity') {\n templateBindings.identityFunctions.add(localName);\n }\n}\n\n/** Reads the original export identity for an unsafe CommonJS import binding. */\nfunction readUnsafeMutableImport(\n binding: Binding,\n state: ScriptState\n): KnownValue | undefined {\n const source = state.mutableImportSources.get(binding);\n const value = state.bindings.get(binding);\n if (!source || !value) return undefined;\n const unsafe =\n state.unsafeMutableNamespaceSources.has(source) ||\n (value.type === 'namespace' &&\n value.mutable &&\n !isSafeMutableNamespaceBinding(binding));\n return unsafe ? value : undefined;\n}\n\n/** Detects a derived binding whose root still comes from mutable CommonJS. */\nfunction bindingReadsUnsafeMutableImport(\n binding: Binding,\n state: ScriptState\n): boolean {\n const source = getBindingSource(binding);\n if (!source) return false;\n let expression = unwrapExpression(source.expression.node);\n while (\n expression?.type === 'MemberExpression' ||\n expression?.type === 'OptionalMemberExpression'\n ) {\n expression = unwrapExpression(expression.object);\n }\n if (expression?.type !== 'Identifier') return false;\n const rootBinding = source.expression.scope.getBinding(expression.name);\n if (!rootBinding) return false;\n const mutableSource = state.mutableImportSources.get(rootBinding);\n return Boolean(\n mutableSource &&\n (state.unsafeMutableNamespaceSources.has(mutableSource) ||\n !isSafeMutableNamespaceBinding(rootBinding))\n );\n}\n\n/** Records only the exact component names reachable from an unsafe import. */\nfunction exposeUncertainKnownValue(\n localName: string,\n value: KnownValue,\n uncertainComponents: Set<string>,\n uncertainGTComponents: Set<string>,\n uncertainStringFunctions: Set<string>\n): void {\n if (value.type === 'component') {\n uncertainComponents.add(localName);\n uncertainGTComponents.add(localName);\n } else if (value.type === 'vue-builtin') {\n uncertainComponents.add(localName);\n } else if (value.type === 'string' || value.type === 'hook') {\n uncertainStringFunctions.add(localName);\n } else if (value.type === 'namespace' && value.source === 'gt-vue') {\n for (const component of COMPONENT_IMPORTS) {\n uncertainComponents.add(appendTemplatePath(localName, component));\n uncertainGTComponents.add(appendTemplatePath(localName, component));\n }\n uncertainStringFunctions.add(appendTemplatePath(localName, 'msg'));\n } else if (value.type === 'namespace' && value.source === 'vue') {\n for (const builtin of VUE_BUILTIN_IMPORTS) {\n uncertainComponents.add(appendTemplatePath(localName, builtin));\n }\n }\n}\n\n/** Exposes a callable whose return can affect template component identity. */\nfunction exposeProgramComponentFactory(\n localName: string,\n binding: Binding,\n state: ScriptState,\n templateBindings: TemplateBindings\n): void {\n const replay = readReplayComponentFactoryCandidates(\n binding,\n localName,\n state\n );\n if (replay) {\n for (const candidate of replay) {\n templateBindings.componentFactories.add(candidate.name);\n if (candidate.gt) {\n templateBindings.gtComponentFactories.add(candidate.name);\n }\n }\n return;\n }\n const factory = readProgramComponentFactory(binding, state);\n if (factory) {\n templateBindings.componentFactories.add(localName);\n if (factory.gt) templateBindings.gtComponentFactories.add(localName);\n }\n for (const candidate of collectProgramComponentFactoryMembers(\n localName,\n binding,\n state\n )) {\n templateBindings.componentFactories.add(candidate.name);\n if (candidate.gt) {\n templateBindings.gtComponentFactories.add(candidate.name);\n }\n }\n}\n\n/** Records a normal-script component factory for script-setup templates. */\nfunction recordProgramComponentFactory(\n localName: string,\n binding: Binding,\n state: ScriptState\n): void {\n const replay = readReplayComponentFactoryCandidates(\n binding,\n localName,\n state\n );\n if (replay) {\n for (const candidate of replay) {\n state.analysis.componentFactories.add(candidate.name);\n if (candidate.gt) {\n state.analysis.gtComponentFactories.add(candidate.name);\n }\n }\n return;\n }\n const factory = readProgramComponentFactory(binding, state);\n if (factory) {\n state.analysis.componentFactories.add(localName);\n if (factory.gt) state.analysis.gtComponentFactories.add(localName);\n }\n for (const candidate of collectProgramComponentFactoryMembers(\n localName,\n binding,\n state\n )) {\n state.analysis.componentFactories.add(candidate.name);\n if (candidate.gt) state.analysis.gtComponentFactories.add(candidate.name);\n }\n}\n\n/** Determines whether a local callable may return GT and/or Vue identity. */\nfunction readProgramComponentFactory(\n binding: Binding,\n state: ScriptState\n): { gt: boolean } | undefined {\n return readComponentFactoryExpression(\n binding.identifier,\n binding.path.scope,\n state\n );\n}\n\nfunction readComponentFactoryExpression(\n node: t.Node,\n scope: Scope,\n state: ScriptState\n): { gt: boolean } | undefined {\n const called = resolveCalledFunction(node, scope, state, new Set());\n if (!called) return undefined;\n const gt = functionMayReturnComponent(\n called.node,\n called.scope,\n state,\n new Set(),\n 'translation'\n );\n const vue = functionMayReturnComponent(\n called.node,\n called.scope,\n state,\n new Set(),\n 'vue'\n );\n return gt || vue ? { gt } : undefined;\n}\n\n/** Finds callable component-producing members of an object or array binding. */\nfunction collectProgramComponentFactoryMembers(\n localName: string,\n binding: Binding,\n state: ScriptState\n): ComponentFactoryCandidate[] {\n const declaration = binding.path.node;\n if (\n declaration.type !== 'VariableDeclarator' ||\n declaration.id.type !== 'Identifier' ||\n !declaration.init\n ) {\n return [];\n }\n return collectComponentFactoryCandidates(\n declaration.init,\n binding.path.scope,\n localName,\n state,\n new Set(),\n new Set([binding])\n ).filter((candidate) => candidate.name !== localName);\n}\n\nfunction collectComponentFactoryCandidates(\n node: t.Node,\n scope: Scope,\n name: string,\n state: ScriptState,\n seenNodes: Set<t.Node>,\n seenBindings: Set<Binding>\n): ComponentFactoryCandidate[] {\n const expression = unwrapExpression(node);\n if (!expression || seenNodes.has(expression)) return [];\n const nextNodes = new Set(seenNodes).add(expression);\n const called = resolveCalledFunction(expression, scope, state, new Set());\n if (called) {\n const gt = functionMayReturnComponent(\n called.node,\n called.scope,\n state,\n new Set(),\n 'translation'\n );\n const vue = functionMayReturnComponent(\n called.node,\n called.scope,\n state,\n new Set(),\n 'vue'\n );\n return gt || vue ? [{ gt, name }] : [];\n }\n if (expression.type === 'Identifier') {\n const source = scope.getBinding(expression.name);\n if (!source || seenBindings.has(source)) return [];\n const bindingSource = getBindingSource(source);\n if (bindingSource?.pattern.type !== 'Identifier') return [];\n const cacheable = state.parameterSubstitutions.length === 0;\n const remap = (candidate: ComponentFactoryCandidate) => ({\n ...candidate,\n name:\n candidate.name === source.identifier.name\n ? name\n : `${name}${candidate.name.slice(source.identifier.name.length)}`,\n });\n const cached = cacheable\n ? state.componentFactoryCandidates.get(source)\n : undefined;\n if (cached) return cached.map(remap);\n if (cacheable && state.componentFactoryCandidatesInProgress.has(source)) {\n return [];\n }\n if (cacheable) state.componentFactoryCandidatesInProgress.add(source);\n try {\n const candidates = collectComponentFactoryCandidates(\n bindingSource.expression.node,\n bindingSource.expression.scope,\n cacheable ? source.identifier.name : name,\n state,\n nextNodes,\n new Set(seenBindings).add(source)\n );\n if (!cacheable) return candidates;\n state.componentFactoryCandidates.set(source, candidates);\n return candidates.map(remap);\n } finally {\n if (cacheable) {\n state.componentFactoryCandidatesInProgress.delete(source);\n }\n }\n }\n if (expression.type === 'ObjectExpression') {\n return expression.properties.flatMap((property) => {\n if (property.type === 'SpreadElement') {\n return collectComponentFactoryCandidates(\n property.argument,\n scope,\n name,\n state,\n nextNodes,\n seenBindings\n );\n }\n const key = readResolvedPropertyKey(property, scope, state);\n if (key === undefined) return [];\n return collectComponentFactoryCandidates(\n property.type === 'ObjectProperty' ? property.value : property,\n scope,\n appendTemplatePath(name, key),\n state,\n nextNodes,\n seenBindings\n );\n });\n }\n if (expression.type === 'ArrayExpression') {\n return expression.elements.flatMap((element, index) =>\n element\n ? collectComponentFactoryCandidates(\n element.type === 'SpreadElement' ? element.argument : element,\n scope,\n appendTemplatePath(name, String(index)),\n state,\n nextNodes,\n seenBindings\n )\n : []\n );\n }\n return [];\n}\n\n/** Exposes exact component-valued object members from one script-setup binding. */\nfunction exposeProgramComponentMembers(\n localName: string,\n binding: Binding,\n state: ScriptState,\n templateBindings: TemplateBindings\n): void {\n for (const candidate of collectProgramComponentMembers(\n localName,\n binding,\n state\n )) {\n if (candidate.certain) {\n exposeKnownValue(\n candidate.name,\n candidate.value,\n templateBindings,\n state.analysis\n );\n continue;\n }\n if (candidate.value.type === 'component') {\n templateBindings.uncertainComponents.add(candidate.name);\n templateBindings.uncertainGTComponents.add(candidate.name);\n } else if (candidate.value.type === 'string') {\n templateBindings.uncertainStringFunctions.add(candidate.name);\n } else {\n templateBindings.uncertainComponents.add(candidate.name);\n }\n }\n}\n\n/** Records exact cross-block member names without a container-wide wildcard. */\nfunction recordProgramComponentMembers(\n localName: string,\n binding: Binding,\n state: ScriptState\n): void {\n for (const candidate of collectProgramComponentMembers(\n localName,\n binding,\n state\n )) {\n if (candidate.certain) {\n state.analysis.values.set(candidate.name, candidate.value);\n continue;\n }\n if (candidate.value.type === 'component') {\n state.analysis.uncertainComponents.add(candidate.name);\n state.analysis.uncertainGTComponents.add(candidate.name);\n } else if (candidate.value.type === 'string') {\n state.analysis.uncertainStringFunctions.add(candidate.name);\n } else {\n state.analysis.uncertainComponents.add(candidate.name);\n }\n }\n}\n\n/** Finds statically named component leaves in an object or array binding. */\nfunction collectProgramComponentMembers(\n localName: string,\n binding: Binding,\n state: ScriptState\n): ComponentMemberCandidate[] {\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) return [];\n if (declaration.id.type !== 'Identifier') {\n return [\n ...collectNamespaceRestMemberCandidates(\n localName,\n binding,\n declaration.id,\n declaration.init,\n state\n ),\n ...collectRestPatternMemberCandidates(\n localName,\n binding,\n declaration.id,\n declaration.init,\n state\n ),\n ];\n }\n const replayCandidates = readReplayComponentCandidates(\n binding,\n localName,\n state\n );\n if (replayCandidates) return replayCandidates;\n const finalSnapshot = readDefiniteFinalContainerSnapshot(binding, state);\n if (finalSnapshot) {\n const entries =\n finalSnapshot.kind === 'array'\n ? finalSnapshot.entries.map(\n (value, index) => [String(index), value] as const\n )\n : [...finalSnapshot.entries];\n return entries.flatMap(([key, value]) =>\n value\n ? collectComponentMemberCandidates(\n value.node,\n value.scope,\n appendTemplatePath(localName, key),\n state,\n true,\n new Set(),\n new Set([binding])\n )\n : []\n );\n }\n const certain = isSafelyReadContainerBinding(\n binding,\n binding.identifier,\n Number.POSITIVE_INFINITY,\n false,\n state\n );\n const candidates = collectComponentMemberCandidates(\n declaration.init,\n binding.path.scope,\n localName,\n state,\n certain,\n new Set(),\n new Set([binding])\n );\n candidates.push(...collectMemberWriteCandidates(localName, binding, state));\n const byName = new Map<string, ComponentMemberCandidate>();\n for (const candidate of candidates) {\n if (candidate.name !== localName) byName.set(candidate.name, candidate);\n }\n return [...byName.values()];\n}\n\ntype DirectRestPattern =\n | { type: 'array'; start: number }\n | { type: 'object'; excluded: Set<string>; hasDynamicExclusion: boolean };\n\n/** Remaps flattened source paths to the indices/keys created by rest syntax. */\nfunction remapDirectRestPaths<T>(\n localName: string,\n rest: DirectRestPattern,\n source: Map<string, T>\n): Map<string, T> {\n const result = new Map<string, T>();\n for (const [path, value] of source) {\n if (path === localName || !path.startsWith(`${localName}.`)) continue;\n const suffix = path.slice(localName.length + 1);\n const [first, ...restPath] = suffix.split('.');\n if (rest.type === 'object') {\n if (!rest.excluded.has(first) && !rest.hasDynamicExclusion) {\n result.set(path, value);\n }\n continue;\n }\n const index = first.match(/^(0|[1-9]\\d*)$/) ? Number(first) : undefined;\n if (index === undefined || index < rest.start) continue;\n result.set(\n `${appendTemplatePath(localName, String(index - rest.start))}${\n restPath.length > 0 ? `.${restPath.join('.')}` : ''\n }`,\n value\n );\n }\n return result;\n}\n\n/** Reads a direct object/array rest target for one bound identifier. */\nfunction readDirectRestPattern(\n pattern: t.Node,\n localName: string,\n scope: Scope,\n state: ScriptState\n): DirectRestPattern | undefined {\n if (pattern.type === 'ArrayPattern') {\n const start = pattern.elements.findIndex(\n (element) =>\n element?.type === 'RestElement' &&\n element.argument.type === 'Identifier' &&\n element.argument.name === localName\n );\n return start >= 0 ? { type: 'array', start } : undefined;\n }\n if (pattern.type !== 'ObjectPattern') return undefined;\n const hasRest = pattern.properties.some(\n (property) =>\n property.type === 'RestElement' &&\n property.argument.type === 'Identifier' &&\n property.argument.name === localName\n );\n if (!hasRest) return undefined;\n const excluded = new Set<string>();\n let hasDynamicExclusion = false;\n for (const property of pattern.properties) {\n if (property.type !== 'ObjectProperty') continue;\n const key = readResolvedPropertyKey(property, scope, state);\n if (key !== undefined) excluded.add(appendTemplatePath('', key).slice(1));\n else hasDynamicExclusion = true;\n }\n return { type: 'object', excluded, hasDynamicExclusion };\n}\n\n/** Maps component/string leaves copied into a direct rest binding. */\nfunction collectRestPatternMemberCandidates(\n localName: string,\n binding: Binding,\n pattern: t.Node,\n value: t.Expression,\n state: ScriptState\n): ComponentMemberCandidate[] {\n const rest = readDirectRestPattern(\n pattern,\n localName,\n binding.path.scope,\n state\n );\n if (!rest) return [];\n const sourceIsKnown = componentContainerShapeIsKnown(\n value,\n binding.path.scope,\n state,\n new Set(),\n value.end ?? Number.POSITIVE_INFINITY\n );\n const certain =\n sourceIsKnown &&\n isSafelyReadContainerBinding(\n binding,\n binding.identifier,\n Number.POSITIVE_INFINITY,\n true,\n state\n );\n const candidates = collectComponentMemberCandidates(\n value,\n binding.path.scope,\n localName,\n state,\n certain,\n new Set(),\n new Set(),\n Number.POSITIVE_INFINITY\n );\n return candidates.flatMap((candidate) => {\n const suffix = candidate.name.slice(localName.length + 1);\n const [first, ...restPath] = suffix.split('.');\n if (rest.type === 'object') {\n return rest.excluded.has(first)\n ? []\n : [\n {\n ...candidate,\n certain: candidate.certain && !rest.hasDynamicExclusion,\n },\n ];\n }\n const index = first.match(/^(0|[1-9]\\d*)$/) ? Number(first) : undefined;\n if (index === undefined || index < rest.start) return [];\n return [\n {\n ...candidate,\n name: `${appendTemplatePath(localName, String(index - rest.start))}${\n restPath.length > 0 ? `.${restPath.join('.')}` : ''\n }`,\n },\n ];\n });\n}\n\n/** Exposes statically named exports copied by an object-rest namespace binding. */\nfunction collectNamespaceRestMemberCandidates(\n localName: string,\n binding: Binding,\n pattern: t.Node,\n value: t.Expression,\n state: ScriptState\n): ComponentMemberCandidate[] {\n if (pattern.type !== 'ObjectPattern') return [];\n const rest = pattern.properties.find(\n (property): property is t.RestElement =>\n property.type === 'RestElement' &&\n property.argument.type === 'Identifier' &&\n property.argument.name === localName\n );\n if (!rest) return [];\n const namespace = resolveNamespaceOrigin(\n value,\n binding.path.scope,\n state,\n new Set()\n );\n if (!namespace) return [];\n const excluded = new Set(\n pattern.properties.flatMap((property) => {\n if (property.type !== 'ObjectProperty') return [];\n const key = readResolvedPropertyKey(property, binding.path.scope, state);\n return key !== undefined ? [key] : [];\n })\n );\n const certain = isSafelyReadContainerBinding(\n binding,\n binding.identifier,\n Number.POSITIVE_INFINITY,\n true,\n state\n );\n const exports: TemplateKnownValue[] =\n namespace.source === 'gt-vue'\n ? [\n ...[...COMPONENT_IMPORTS].map(\n (name): TemplateKnownValue => ({ type: 'component', name })\n ),\n { type: 'string', kind: 'msg' },\n ]\n : [...VUE_BUILTIN_IMPORTS].map(\n (name): TemplateKnownValue => ({ type: 'vue-builtin', name })\n );\n return exports\n .filter((entry) => {\n const name =\n entry.type === 'component'\n ? entry.name\n : entry.type === 'string'\n ? 'msg'\n : entry.name;\n return !excluded.has(name);\n })\n .map((entry) => ({\n certain,\n name: appendTemplatePath(\n localName,\n entry.type === 'component'\n ? entry.name\n : entry.type === 'string'\n ? 'msg'\n : entry.name\n ),\n value: entry,\n }));\n}\n\n/** Exposes the static array/object shape of one script-setup binding. */\nfunction exposeProgramContainerKinds(\n localName: string,\n binding: Binding,\n state: ScriptState,\n templateBindings: TemplateBindings\n): void {\n for (const [name, kind] of collectProgramContainerKinds(\n localName,\n binding,\n state\n )) {\n templateBindings.containerKinds.set(name, kind);\n }\n for (const [name, length] of collectProgramArrayLengths(\n localName,\n binding,\n state\n )) {\n templateBindings.arrayLengths.set(name, length);\n }\n}\n\n/** Records normal-script container shapes for a combined script-setup SFC. */\nfunction recordProgramContainerKinds(\n localName: string,\n binding: Binding,\n state: ScriptState\n): void {\n for (const [name, kind] of collectProgramContainerKinds(\n localName,\n binding,\n state\n )) {\n state.analysis.containerKinds.set(name, kind);\n }\n for (const [name, length] of collectProgramArrayLengths(\n localName,\n binding,\n state\n )) {\n state.analysis.arrayLengths.set(name, length);\n }\n}\n\nfunction collectProgramContainerKinds(\n localName: string,\n binding: Binding,\n state: ScriptState\n): Map<string, TemplateContainerKind> {\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return new Map();\n }\n if (declaration.id.type !== 'Identifier') {\n const namespace = collectNamespaceRestContainerKind(\n localName,\n binding,\n declaration.id,\n declaration.init,\n state\n );\n return namespace.size > 0\n ? namespace\n : collectRestPatternContainerKinds(\n localName,\n binding,\n declaration.id,\n declaration.init,\n state\n );\n }\n const replay = readReplayContainerMetadata(binding, localName, state);\n if (replay) return replay.kinds;\n const result = collectContainerKinds(\n declaration.init,\n binding.path.scope,\n localName,\n state,\n new Set(),\n new Set([binding]),\n Number.POSITIVE_INFINITY\n );\n if (\n isSafelyReadContainerBinding(\n binding,\n binding.identifier,\n Number.POSITIVE_INFINITY,\n false,\n state\n )\n ) {\n return result;\n }\n const rootKind = result.get(localName);\n return rootKind ? new Map([[localName, rootKind]]) : new Map();\n}\n\n/** Maps statically known container paths copied by a direct rest binding. */\nfunction collectRestPatternContainerKinds(\n localName: string,\n binding: Binding,\n pattern: t.Node,\n value: t.Expression,\n state: ScriptState\n): Map<string, TemplateContainerKind> {\n const rest = readDirectRestPattern(\n pattern,\n localName,\n binding.path.scope,\n state\n );\n if (!rest) return new Map();\n const sourceKinds = collectContainerKinds(\n value,\n binding.path.scope,\n localName,\n state,\n new Set(),\n new Set(),\n Number.POSITIVE_INFINITY\n );\n const result = remapDirectRestPaths(localName, rest, sourceKinds);\n result.set(localName, rest.type);\n return result;\n}\n\n/** Records the object shape created by a namespace rest destructuring. */\nfunction collectNamespaceRestContainerKind(\n localName: string,\n binding: Binding,\n pattern: t.Node,\n value: t.Expression,\n state: ScriptState\n): Map<string, TemplateContainerKind> {\n if (\n pattern.type !== 'ObjectPattern' ||\n !pattern.properties.some(\n (property) =>\n property.type === 'RestElement' &&\n property.argument.type === 'Identifier' &&\n property.argument.name === localName\n ) ||\n !resolveNamespaceOrigin(value, binding.path.scope, state, new Set())\n ) {\n return new Map();\n }\n return new Map([[localName, 'object']]);\n}\n\nfunction collectProgramArrayLengths(\n localName: string,\n binding: Binding,\n state: ScriptState\n): Map<string, number> {\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator' || !declaration.init) {\n return new Map();\n }\n if (declaration.id.type === 'Identifier') {\n const replay = readReplayContainerMetadata(binding, localName, state);\n if (replay) return replay.arrayLengths;\n }\n if (\n !isSafelyReadContainerBinding(\n binding,\n binding.identifier,\n Number.POSITIVE_INFINITY,\n false,\n state\n )\n ) {\n return new Map();\n }\n if (declaration.id.type !== 'Identifier') {\n const rest = readDirectRestPattern(\n declaration.id,\n localName,\n binding.path.scope,\n state\n );\n if (rest?.type !== 'array') return new Map();\n const sourceLengths = new Map<string, number>();\n collectContainerKinds(\n declaration.init,\n binding.path.scope,\n localName,\n state,\n new Set(),\n new Set(),\n Number.POSITIVE_INFINITY,\n sourceLengths\n );\n const length = sourceLengths.get(localName);\n return length === undefined\n ? new Map()\n : new Map([[localName, Math.max(0, length - rest.start)]]);\n }\n const lengths = new Map<string, number>();\n collectContainerKinds(\n declaration.init,\n binding.path.scope,\n localName,\n state,\n new Set(),\n new Set([binding]),\n Number.POSITIVE_INFINITY,\n lengths\n );\n return lengths;\n}\n\n/** Exposes primitive leaves selected through a static container path. */\nfunction exposeProgramStaticMembers(\n localName: string,\n binding: Binding,\n state: ScriptState,\n templateBindings: TemplateBindings\n): void {\n for (const [name, value] of collectProgramStaticMembers(\n localName,\n binding,\n state\n )) {\n if (name !== localName) templateBindings.staticValues.set(name, value);\n }\n}\n\n/** Records primitive normal-script leaves for a combined SFC template. */\nfunction recordProgramStaticMembers(\n localName: string,\n binding: Binding,\n state: ScriptState\n): void {\n for (const [name, value] of collectProgramStaticMembers(\n localName,\n binding,\n state\n )) {\n if (name !== localName) state.analysis.staticValues.set(name, value);\n }\n}\n\nfunction collectProgramStaticMembers(\n localName: string,\n binding: Binding,\n state: ScriptState\n): Map<string, string | number | bigint | boolean | null> {\n const declaration = binding.path.node;\n if (\n declaration.type !== 'VariableDeclarator' ||\n !declaration.init ||\n !isSafelyReadContainerBinding(\n binding,\n binding.identifier,\n Number.POSITIVE_INFINITY,\n false,\n state\n )\n ) {\n return new Map();\n }\n if (declaration.id.type !== 'Identifier') {\n const rest = readDirectRestPattern(\n declaration.id,\n localName,\n binding.path.scope,\n state\n );\n if (!rest) return new Map();\n return remapDirectRestPaths(\n localName,\n rest,\n collectStaticMemberValues(\n declaration.init,\n binding.path.scope,\n localName,\n state,\n new Set(),\n new Set(),\n Number.POSITIVE_INFINITY\n )\n );\n }\n return collectStaticMemberValues(\n declaration.init,\n binding.path.scope,\n localName,\n state,\n new Set(),\n new Set([binding]),\n Number.POSITIVE_INFINITY\n );\n}\n\n/** Exposes statically visible string alternatives for template selectors. */\nfunction exposeProgramPossibleStaticStrings(\n localName: string,\n binding: Binding,\n state: ScriptState,\n templateBindings: TemplateBindings\n): void {\n const collected = collectProgramPossibleStaticStrings(\n localName,\n binding,\n state\n );\n for (const [name, values] of collected) {\n templateBindings.possibleStaticStrings.set(name, values);\n }\n}\n\n/** Records normal-script string alternatives for a combined SFC template. */\nfunction recordProgramPossibleStaticStrings(\n localName: string,\n binding: Binding,\n state: ScriptState\n): void {\n for (const [name, values] of collectProgramPossibleStaticStrings(\n localName,\n binding,\n state\n )) {\n state.analysis.possibleStaticStrings.set(name, values);\n }\n}\n\nfunction collectProgramPossibleStaticStrings(\n localName: string,\n binding: Binding,\n state: ScriptState\n): Map<string, Set<string>> {\n const result = new Map<string, Set<string>>();\n const merge = (values: Map<string, Set<string>>): void => {\n for (const [path, strings] of values) {\n const existing = result.get(path) ?? new Set<string>();\n for (const value of strings) existing.add(value);\n result.set(path, existing);\n }\n };\n const source = getBindingSource(binding);\n const finalAssignment = source\n ? undefined\n : readDefiniteFinalBindingAssignment(binding);\n const selected = source\n ? selectPatternExpression(\n source.pattern,\n source.expression.node,\n localName,\n source.expression.scope,\n source.expression.node.end ?? Number.POSITIVE_INFINITY,\n state\n )\n : finalAssignment;\n if (selected) {\n merge(\n collectPossibleStaticStringMembers(\n selected.node,\n selected.scope,\n localName,\n state,\n new Set(),\n new Set([binding]),\n Number.POSITIVE_INFINITY\n )\n );\n }\n merge(bindingMutationPossibleStaticStrings(binding, state));\n return result;\n}\n\n/** Flattens possible string results while preserving their exact member path. */\nfunction collectPossibleStaticStringMembers(\n node: t.Node,\n scope: Scope,\n name: string,\n state: ScriptState,\n seenNodes: Set<t.Node>,\n seenBindings: Set<Binding>,\n atPosition: number\n): Map<string, Set<string>> {\n const result = new Map<string, Set<string>>();\n const expression = unwrapExpression(node);\n if (!expression || seenNodes.has(expression)) return result;\n const possible = collectPossibleStaticStrings(\n expression,\n scope,\n state,\n new Set()\n );\n if (possible.size > 0) result.set(name, possible);\n const nextNodes = new Set(seenNodes).add(expression);\n const mergeValues = (values: Map<string, Set<string>>): void => {\n for (const [path, strings] of values) {\n const existing = result.get(path) ?? new Set<string>();\n for (const value of strings) existing.add(value);\n result.set(path, existing);\n }\n };\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding) {\n const prefix = `${expression.name}.`;\n for (const [path, values] of state.analysis.possibleStaticStrings) {\n if (path === expression.name || path.startsWith(prefix)) {\n result.set(`${name}${path.slice(expression.name.length)}`, values);\n }\n }\n return result;\n }\n const substitution = readParameterSubstitution(binding, state);\n if (substitution) {\n mergeValues(\n collectPossibleStaticStringMembers(\n substitution.node,\n substitution.scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n return result;\n }\n if (seenBindings.has(binding)) return result;\n const cacheable =\n binding.constant && state.parameterSubstitutions.length === 0;\n const remapValues = (\n values: Map<string, Set<string>>,\n from: string,\n to: string\n ): Map<string, Set<string>> =>\n new Map(\n [...values].map(([path, strings]) => [\n path === from ? to : `${to}${path.slice(from.length)}`,\n new Set(strings),\n ])\n );\n const cached = cacheable\n ? state.possibleStaticStringMembers.get(binding)\n : undefined;\n if (cached) {\n mergeValues(remapValues(cached, binding.identifier.name, name));\n return result;\n }\n if (cacheable && state.possibleStaticStringMembersInProgress.has(binding)) {\n return result;\n }\n if (cacheable) state.possibleStaticStringMembersInProgress.add(binding);\n const source = getBindingSource(binding);\n const finalAssignment = source\n ? undefined\n : readDefiniteFinalBindingAssignment(binding);\n const selected = source\n ? selectPatternExpression(\n source.pattern,\n source.expression.node,\n binding.identifier.name,\n source.expression.scope,\n source.expression.node.end ?? atPosition,\n state\n )\n : finalAssignment;\n try {\n const canonicalName = cacheable ? binding.identifier.name : name;\n const canonical = new Map<string, Set<string>>();\n const mergeCanonical = (path: string, values: Set<string>): void => {\n const existing = canonical.get(path) ?? new Set<string>();\n for (const value of values) existing.add(value);\n canonical.set(path, existing);\n };\n if (possible.size > 0) mergeCanonical(canonicalName, possible);\n if (selected) {\n for (const [path, values] of collectPossibleStaticStringMembers(\n selected.node,\n selected.scope,\n canonicalName,\n state,\n nextNodes,\n new Set(seenBindings).add(binding),\n atPosition\n )) {\n mergeCanonical(path, values);\n }\n }\n for (const [path, values] of bindingMutationPossibleStaticStrings(\n binding,\n state\n )) {\n const targetPath = cacheable\n ? path\n : path === binding.identifier.name\n ? name\n : `${name}${path.slice(binding.identifier.name.length)}`;\n mergeCanonical(targetPath, values);\n }\n if (cacheable) {\n state.possibleStaticStringMembers.set(binding, canonical);\n mergeValues(remapValues(canonical, binding.identifier.name, name));\n } else {\n mergeValues(canonical);\n }\n return result;\n } finally {\n if (cacheable) {\n state.possibleStaticStringMembersInProgress.delete(binding);\n }\n }\n }\n if (expression.type === 'ObjectExpression') {\n const clearMember = (key: string) => {\n const member = appendTemplatePath(name, key);\n for (const path of result.keys()) {\n if (path === member || path.startsWith(`${member}.`)) {\n result.delete(path);\n }\n }\n };\n const replaceProperty = (\n key: string,\n property: t.ObjectProperty | t.ObjectMethod,\n propertyScope: Scope\n ) => {\n clearMember(key);\n if (property.type === 'ObjectProperty') {\n mergeValues(\n collectPossibleStaticStringMembers(\n property.value,\n propertyScope,\n appendTemplatePath(name, key),\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n } else if (property.kind === 'get') {\n const strings = collectFunctionPossibleStaticStrings(\n property,\n propertyScope,\n state\n );\n if (strings.size > 0) {\n result.set(appendTemplatePath(name, key), strings);\n }\n }\n };\n\n for (const property of expression.properties) {\n if (property.type !== 'SpreadElement') {\n const key = readResolvedPropertyKey(property, scope, state);\n if (key !== undefined) {\n replaceProperty(key, property, scope);\n continue;\n }\n const unknownValues =\n property.type === 'ObjectProperty'\n ? collectPossibleStaticStringMembers(\n property.value,\n scope,\n appendTemplatePath(name, unknownTemplatePathSegment),\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n : property.kind === 'get'\n ? new Map([\n [\n appendTemplatePath(name, unknownTemplatePathSegment),\n collectFunctionPossibleStaticStrings(\n property,\n scope,\n state\n ),\n ],\n ])\n : new Map<string, Set<string>>();\n const knownMembers = new Set(\n [...result.keys()]\n .filter((path) => path.startsWith(`${name}.`))\n .map((path) => path.slice(name.length + 1).split('.', 1)[0])\n );\n for (const key of knownMembers) {\n const remapped = new Map<string, Set<string>>();\n for (const [path, strings] of unknownValues) {\n remapped.set(\n path.replace(\n appendTemplatePath(name, unknownTemplatePathSegment),\n appendTemplatePath(name, key)\n ),\n strings\n );\n }\n mergeValues(remapped);\n }\n continue;\n }\n\n const spreadEntries = collectObjectEntries(\n property.argument,\n scope,\n new Set(seenNodes),\n property.argument.end ?? atPosition,\n state\n );\n const spreadValues = collectPossibleStaticStringMembers(\n property.argument,\n scope,\n name,\n state,\n nextNodes,\n seenBindings,\n property.argument.end ?? atPosition\n );\n const definiteKeys = new Set([\n ...spreadEntries.entries.keys(),\n ...spreadEntries.unknownNames,\n ]);\n for (const key of definiteKeys) clearMember(key);\n for (const [path, strings] of spreadValues) {\n const key = path.startsWith(`${name}.`)\n ? path.slice(name.length + 1).split('.', 1)[0]\n : undefined;\n if (!key || !spreadEntries.unknownAll || definiteKeys.has(key)) {\n result.set(path, strings);\n } else {\n mergeValues(new Map([[path, strings]]));\n }\n }\n }\n return result;\n }\n if (expression.type === 'ConditionalExpression') {\n const test = readStaticFromScope(\n expression.test,\n scope,\n new Set(),\n expression.test.end ?? atPosition,\n state.analysis\n );\n const alternatives = test.ok\n ? [test.value ? expression.consequent : expression.alternate]\n : [expression.consequent, expression.alternate];\n for (const alternative of alternatives) {\n mergeValues(\n collectPossibleStaticStringMembers(\n alternative,\n scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n }\n return result;\n }\n if (expression.type === 'LogicalExpression') {\n for (const alternative of [expression.left, expression.right]) {\n mergeValues(\n collectPossibleStaticStringMembers(\n alternative,\n scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n }\n return result;\n }\n if (expression.type === 'SequenceExpression') {\n const last = expression.expressions.at(-1);\n if (last) {\n mergeValues(\n collectPossibleStaticStringMembers(\n last,\n scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n }\n return result;\n }\n if (expression.type === 'AssignmentExpression') {\n mergeValues(\n collectPossibleStaticStringMembers(\n expression.right,\n scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n return result;\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const sources = resolveVueTemplateContainerSources(\n expression,\n scope,\n state\n );\n if (sources && sources.length > 0) {\n for (const source of sources) {\n mergeValues(\n collectPossibleStaticStringMembers(\n source.node,\n source.scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n }\n return result;\n }\n const transformedEntries = collectTransformArrayEntries(\n expression,\n scope,\n state,\n new Set(),\n atPosition\n );\n if (transformedEntries) {\n transformedEntries.forEach((entry, index) => {\n if (!entry) return;\n mergeValues(\n collectPossibleStaticStringMembers(\n entry.node,\n entry.scope,\n appendTemplatePath(name, String(index)),\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n });\n return result;\n }\n const callee = unwrapExpression(expression.callee);\n if (\n callee &&\n (callee.type === 'MemberExpression' ||\n callee.type === 'OptionalMemberExpression')\n ) {\n const method = readResolvedMemberProperty(callee, scope, state);\n const receiver = readResolvedMemberPath(callee.object, scope, state);\n const collectReceiver = (): void => {\n mergeValues(\n collectPossibleStaticStringMembers(\n callee.object,\n scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n };\n if (\n receiver === 'Object' &&\n method === 'assign' &&\n !scope.getBinding('Object')\n ) {\n for (const argument of expression.arguments) {\n if (argument.type === 'ArgumentPlaceholder') continue;\n mergeValues(\n collectPossibleStaticStringMembers(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n }\n return result;\n }\n if (\n method &&\n [\n 'filter',\n 'map',\n 'reverse',\n 'slice',\n 'sort',\n 'splice',\n 'toReversed',\n 'toSorted',\n ].includes(method)\n ) {\n collectReceiver();\n }\n if (method === 'concat') {\n collectReceiver();\n for (const argument of expression.arguments) {\n if (argument.type === 'ArgumentPlaceholder') continue;\n const values = collectPossibleStaticStringMembers(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n );\n for (const [path, strings] of values) {\n const suffix = path === name ? '' : path.slice(name.length + 1);\n const separator = suffix.indexOf('.');\n const remaining = separator === -1 ? '' : suffix.slice(separator);\n const target = `${appendTemplatePath(\n name,\n unknownTemplatePathSegment\n )}${remaining}`;\n mergeValues(new Map([[target, strings]]));\n }\n }\n }\n if (\n receiver === 'Array' &&\n method === 'from' &&\n !scope.getBinding('Array')\n ) {\n const source = expression.arguments[0];\n if (source && source.type !== 'ArgumentPlaceholder') {\n mergeValues(\n collectPossibleStaticStringMembers(\n source.type === 'SpreadElement' ? source.argument : source,\n scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n }\n }\n }\n const called = resolveCalledFunction(\n expression.callee,\n scope,\n state,\n new Set()\n );\n if (called) {\n withCallParameterSubstitutions(expression, called, scope, state, () => {\n for (const returned of collectFunctionReturnExpressions(\n called.node,\n called.scope,\n state\n )) {\n mergeValues(\n collectPossibleStaticStringMembers(\n returned.node,\n returned.scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n }\n });\n } else if (callTargetsUnknownImport(expression.callee, scope)) {\n for (const argument of expression.arguments) {\n if (argument.type === 'ArgumentPlaceholder') continue;\n mergeValues(\n collectPossibleStaticStringMembers(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n }\n }\n return result;\n }\n if (expression.type === 'ArrayExpression') {\n const entries = collectArrayEntries(\n expression,\n scope,\n new Set(),\n expression.end ?? atPosition,\n state\n );\n if (entries) {\n entries.forEach((entry, index) => {\n if (!entry) return;\n for (const [path, values] of collectPossibleStaticStringMembers(\n entry.node,\n entry.scope,\n appendTemplatePath(name, String(index)),\n state,\n nextNodes,\n seenBindings,\n atPosition\n )) {\n result.set(path, values);\n }\n });\n } else {\n expression.elements.forEach((element, index) => {\n if (!element) return;\n mergeValues(\n collectPossibleStaticStringMembers(\n element.type === 'SpreadElement' ? element.argument : element,\n scope,\n element.type === 'SpreadElement'\n ? name\n : appendTemplatePath(name, String(index)),\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n });\n }\n }\n return result;\n}\n\n/** Collects static string leaves introduced through container mutations. */\nfunction bindingMutationPossibleStaticStrings(\n binding: Binding,\n state: ScriptState,\n seenAliases: Set<Binding> = new Set([binding])\n): Map<string, Set<string>> {\n const cached = state.mutationPossibleStaticStrings.get(binding);\n if (cached) {\n return new Map(\n [...cached].map(([path, values]) => [path, new Set(values)])\n );\n }\n if (state.mutationPossibleStaticStringsInProgress.has(binding)) {\n return new Map();\n }\n state.mutationPossibleStaticStringsInProgress.add(binding);\n const result = new Map<string, Set<string>>();\n const writePolicy = readBindingContainerWritePolicy(binding, state);\n const blocksWriteAtDepth = (depth: number): boolean =>\n writePolicy === 'readonly-deep' ||\n (writePolicy === 'readonly-shallow' && depth <= 1);\n const appendProperties = (properties: string[]): string =>\n properties.reduce(appendTemplatePath, binding.identifier.name);\n const merge = (values: Map<string, Set<string>>): void => {\n for (const [path, strings] of values) {\n const existing = result.get(path) ?? new Set<string>();\n for (const value of strings) existing.add(value);\n result.set(path, existing);\n }\n };\n const collectValue = (\n value: t.Node,\n scope: Scope,\n properties: string[]\n ): void => {\n merge(\n collectPossibleStaticStringMembers(\n value,\n scope,\n appendProperties(properties),\n state,\n new Set(),\n new Set([binding]),\n Number.POSITIVE_INFINITY\n )\n );\n };\n\n for (const reference of binding.referencePaths) {\n let current: NodePath<t.Node> = reference;\n const properties: string[] = [];\n while (\n current.parentPath &&\n (current.parentPath.isMemberExpression() ||\n current.parentPath.isOptionalMemberExpression()) &&\n current.parentPath.node.object === current.node\n ) {\n properties.push(\n readResolvedMemberProperty(\n current.parentPath.node,\n current.parentPath.scope,\n state\n ) ?? unknownTemplatePathSegment\n );\n current = current.parentPath;\n }\n const parent = current.parentPath;\n if (parent?.isAssignmentExpression() && parent.node.left === current.node) {\n const target =\n properties[0] === 'value' ? properties.slice(1) : properties;\n if (blocksWriteAtDepth(target.length)) continue;\n collectValue(parent.node.right, parent.scope, target);\n continue;\n }\n if (!parent?.isCallExpression() || parent.node.callee !== current.node) {\n continue;\n }\n const method = properties.at(-1);\n const target = properties\n .slice(0, -1)\n .filter((property, index) => !(index === 0 && property === 'value'));\n if (blocksWriteAtDepth(target.length + 1)) continue;\n const argumentsToCheck =\n method === 'splice'\n ? parent.node.arguments.slice(2)\n : method === 'fill'\n ? parent.node.arguments.slice(0, 1)\n : method === 'push' || method === 'unshift'\n ? parent.node.arguments\n : [];\n for (const argument of argumentsToCheck) {\n if (argument.type === 'ArgumentPlaceholder') continue;\n collectValue(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n parent.scope,\n [...target, unknownTemplatePathSegment]\n );\n }\n }\n\n for (const reference of binding.referencePaths) {\n const declarator = reference.parentPath;\n if (\n !declarator?.isVariableDeclarator() ||\n declarator.node.init !== reference.node ||\n declarator.node.id.type !== 'Identifier'\n ) {\n continue;\n }\n const alias = declarator.scope.getBinding(declarator.node.id.name);\n if (!alias || seenAliases.has(alias)) continue;\n const aliasValues = bindingMutationPossibleStaticStrings(\n alias,\n state,\n new Set(seenAliases).add(alias)\n );\n for (const [path, values] of aliasValues) {\n const remapped =\n path === alias.identifier.name\n ? binding.identifier.name\n : `${binding.identifier.name}${path.slice(alias.identifier.name.length)}`;\n merge(new Map([[remapped, values]]));\n }\n }\n state.mutationPossibleStaticStrings.set(\n binding,\n new Map([...result].map(([path, values]) => [path, new Set(values)]))\n );\n state.mutationPossibleStaticStringsInProgress.delete(binding);\n return result;\n}\n\n/** Collects statically visible string alternatives without executing code. */\nfunction collectPossibleStaticStrings(\n node: t.Node | null | undefined,\n scope: Scope,\n state: ScriptState,\n seen: Set<t.Node>\n): Set<string> {\n const result = new Set<string>();\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return result;\n const nextSeen = new Set(seen).add(expression);\n if (\n expression.type === 'Identifier' &&\n state.parameterSubstitutions.length === 0\n ) {\n const binding = scope.getBinding(expression.name);\n if (binding) {\n const cached = state.possibleStaticStrings.get(binding);\n if (cached) return new Set(cached);\n if (state.possibleStaticStringsInProgress.has(binding)) return result;\n state.possibleStaticStringsInProgress.add(binding);\n try {\n const source = getBindingSource(binding);\n if (source && binding.constant) {\n for (const value of collectPossibleStaticStrings(\n source.expression.node,\n source.expression.scope,\n state,\n nextSeen\n )) {\n result.add(value);\n }\n } else {\n const exposed = state.analysis.possibleStaticStrings.get(\n expression.name\n );\n if (exposed) {\n for (const value of exposed) result.add(value);\n }\n }\n state.possibleStaticStrings.set(binding, new Set(result));\n return result;\n } finally {\n state.possibleStaticStringsInProgress.delete(binding);\n }\n }\n }\n const staticValue = readStaticFromScope(\n expression,\n scope,\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (staticValue.ok) {\n if (typeof staticValue.value === 'string') result.add(staticValue.value);\n return result;\n }\n const add = (values: Set<string>) => {\n for (const value of values) result.add(value);\n };\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n const substitution = binding\n ? readParameterSubstitution(binding, state)\n : undefined;\n if (substitution) {\n return collectPossibleStaticStrings(\n substitution.node,\n substitution.scope,\n state,\n nextSeen\n );\n }\n const source = binding ? getBindingSource(binding) : undefined;\n if (source && binding?.constant) {\n add(\n collectPossibleStaticStrings(\n source.expression.node,\n source.expression.scope,\n state,\n nextSeen\n )\n );\n } else {\n const values = state.analysis.possibleStaticStrings.get(expression.name);\n if (values) add(values);\n }\n return result;\n }\n if (\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ) {\n const path = readExposedMemberPath(expression, scope, state);\n const exposed = path\n ? state.analysis.possibleStaticStrings.get(path)\n : undefined;\n if (exposed) add(exposed);\n const property = readResolvedMemberProperty(expression, scope, state);\n const selected = property\n ? selectStaticMemberExpression(\n expression.object,\n property,\n scope,\n state,\n expression.end ?? Number.POSITIVE_INFINITY,\n new Set()\n )\n : undefined;\n if (selected) {\n add(\n collectPossibleStaticStrings(\n selected.node,\n selected.scope,\n state,\n nextSeen\n )\n );\n } else if (!property) {\n for (const values of collectPossibleStaticStringMembers(\n expression.object,\n scope,\n '',\n state,\n new Set(),\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY\n ).values()) {\n add(values);\n }\n }\n return result;\n }\n if (expression.type === 'ConditionalExpression') {\n const test = readStaticFromScope(\n expression.test,\n scope,\n new Set(),\n expression.test.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (test.ok) {\n return collectPossibleStaticStrings(\n test.value ? expression.consequent : expression.alternate,\n scope,\n state,\n nextSeen\n );\n }\n add(\n collectPossibleStaticStrings(\n expression.consequent,\n scope,\n state,\n nextSeen\n )\n );\n add(\n collectPossibleStaticStrings(expression.alternate, scope, state, nextSeen)\n );\n return result;\n }\n if (expression.type === 'LogicalExpression') {\n add(collectPossibleStaticStrings(expression.left, scope, state, nextSeen));\n add(collectPossibleStaticStrings(expression.right, scope, state, nextSeen));\n return result;\n }\n if (expression.type === 'SequenceExpression') {\n return collectPossibleStaticStrings(\n expression.expressions.at(-1),\n scope,\n state,\n nextSeen\n );\n }\n if (expression.type === 'AssignmentExpression') {\n return collectPossibleStaticStrings(\n expression.right,\n scope,\n state,\n nextSeen\n );\n }\n if (\n expression.type === 'AwaitExpression' ||\n expression.type === 'YieldExpression'\n ) {\n return collectPossibleStaticStrings(\n expression.argument,\n scope,\n state,\n nextSeen\n );\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const wrapper = resolveKnownExpression(\n expression.callee,\n scope,\n state,\n new Set()\n );\n const first = expression.arguments[0];\n if (\n wrapper?.type === 'vue-wrapper' &&\n first &&\n first.type !== 'ArgumentPlaceholder' &&\n first.type !== 'SpreadElement'\n ) {\n if (wrapper.kind === 'ref') {\n return collectPossibleStaticStrings(first, scope, state, nextSeen);\n }\n const getter = resolveComputedGetter(first, scope, state);\n return getter\n ? collectFunctionPossibleStaticStrings(getter.node, getter.scope, state)\n : result;\n }\n const called = resolveCalledFunction(\n expression.callee,\n scope,\n state,\n new Set()\n );\n if (called) {\n withCallParameterSubstitutions(expression, called, scope, state, () => {\n for (const returned of collectFunctionReturnExpressions(\n called.node,\n called.scope,\n state\n )) {\n add(\n collectPossibleStaticStrings(\n returned.node,\n returned.scope,\n state,\n nextSeen\n )\n );\n }\n });\n }\n }\n return result;\n}\n\n/** Collects all statically visible strings returned by one local function. */\nfunction collectFunctionPossibleStaticStrings(\n fn: t.Function,\n scope: Scope,\n state: ScriptState\n): Set<string> {\n const functionScope = state.scopes.get(fn) ?? scope;\n if (\n fn.type === 'ArrowFunctionExpression' &&\n fn.body.type !== 'BlockStatement'\n ) {\n return collectPossibleStaticStrings(\n fn.body,\n functionScope,\n state,\n new Set()\n );\n }\n const result = new Set<string>();\n const functionPath = state.paths.get(fn);\n if (!functionPath || fn.body.type !== 'BlockStatement') return result;\n functionPath.traverse({\n Function(path) {\n path.skip();\n },\n ReturnStatement(path) {\n for (const value of collectPossibleStaticStrings(\n path.node.argument,\n path.scope,\n state,\n new Set()\n )) {\n result.add(value);\n }\n },\n });\n return result;\n}\n\nfunction collectStaticMemberValues(\n node: t.Node,\n scope: Scope,\n name: string,\n state: ScriptState,\n seenNodes: Set<t.Node>,\n seenBindings: Set<Binding>,\n atPosition: number\n): Map<string, string | number | bigint | boolean | null> {\n const result = new Map<string, string | number | bigint | boolean | null>();\n const expression = unwrapExpression(node);\n if (!expression || seenNodes.has(expression)) return result;\n const staticValue = readStaticFromScope(\n expression,\n scope,\n new Set(),\n atPosition,\n state.analysis\n );\n if (staticValue.ok) {\n result.set(name, staticValue.value);\n return result;\n }\n const nextNodes = new Set(seenNodes).add(expression);\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (\n !binding ||\n seenBindings.has(binding) ||\n !isSafelyReadContainerBinding(\n binding,\n expression,\n atPosition,\n false,\n state\n )\n ) {\n return result;\n }\n const source = getBindingSource(binding);\n return source?.pattern.type === 'Identifier'\n ? collectStaticMemberValues(\n source.expression.node,\n source.expression.scope,\n name,\n state,\n nextNodes,\n new Set(seenBindings).add(binding),\n atPosition\n )\n : result;\n }\n if (expression.type === 'ObjectExpression') {\n const entries = collectObjectEntries(\n expression,\n scope,\n new Set(seenNodes),\n atPosition,\n state\n );\n for (const [key, entry] of entries.entries) {\n for (const [path, value] of collectStaticMemberValues(\n entry.node,\n entry.scope,\n appendTemplatePath(name, key),\n state,\n nextNodes,\n seenBindings,\n atPosition\n )) {\n result.set(path, value);\n }\n }\n return result;\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const sources = resolveVueTemplateContainerSources(\n expression,\n scope,\n state\n );\n if (!sources || sources.length === 0) return result;\n const sourceValues = sources.map((source) =>\n collectStaticMemberValues(\n source.node,\n source.scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n for (const [path, value] of sourceValues[0] ?? []) {\n if (\n sourceValues.every(\n (values) => values.has(path) && Object.is(values.get(path), value)\n )\n ) {\n result.set(path, value);\n }\n }\n return result;\n }\n if (expression.type === 'ArrayExpression') {\n const entries = collectArrayEntries(\n expression,\n scope,\n new Set(),\n expression.end ?? atPosition,\n state\n );\n entries?.forEach((entry, index) => {\n if (!entry) return;\n for (const [path, value] of collectStaticMemberValues(\n entry.node,\n entry.scope,\n appendTemplatePath(name, String(index)),\n state,\n nextNodes,\n seenBindings,\n atPosition\n )) {\n result.set(path, value);\n }\n });\n }\n return result;\n}\n\n/** Flattens statically known container paths without executing user code. */\nfunction collectContainerKinds(\n node: t.Node,\n scope: Scope,\n name: string,\n state: ScriptState,\n seenNodes: Set<t.Node>,\n seenBindings: Set<Binding>,\n atPosition: number,\n arrayLengths?: Map<string, number>\n): Map<string, TemplateContainerKind> {\n if (state.analysis.stats) state.analysis.stats.containerKindVisits += 1;\n const result = new Map<string, TemplateContainerKind>();\n const expression = unwrapExpression(node);\n if (!expression || seenNodes.has(expression)) return result;\n // Exact GT/Vue identities and string functions are scalar values. Direct\n // aliases can legitimately be inserted into a mutable container, which\n // makes the conservative container-use cache ineligible; resolving the\n // already memoized scalar identity avoids re-walking the full alias prefix.\n if (resolveKnownExpression(expression, scope, state, new Set())) {\n return result;\n }\n const nextNodes = new Set(seenNodes).add(expression);\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n const readonlyUses = binding\n ? bindingHasOnlyReadonlyContainerUses(binding, state, new Set())\n : false;\n if (\n !binding ||\n seenBindings.has(binding) ||\n !isSafelyReadContainerBinding(\n binding,\n expression,\n atPosition,\n false,\n state\n )\n ) {\n return result;\n }\n const source = getBindingSource(binding);\n if (source?.pattern.type !== 'Identifier') return result;\n const cacheable = readonlyUses && state.parameterSubstitutions.length === 0;\n const applySnapshot = (snapshot: {\n arrayLengths: Map<string, number>;\n kinds: Map<string, TemplateContainerKind>;\n }): void => {\n const root = binding.identifier.name;\n for (const [path, kind] of snapshot.kinds) {\n result.set(\n path === root ? name : `${name}${path.slice(root.length)}`,\n kind\n );\n }\n if (arrayLengths) {\n for (const [path, length] of snapshot.arrayLengths) {\n arrayLengths.set(\n path === root ? name : `${name}${path.slice(root.length)}`,\n length\n );\n }\n }\n };\n const cached = cacheable\n ? state.containerKindSnapshots.get(binding)\n : undefined;\n if (cached) {\n applySnapshot(cached);\n return result;\n }\n if (cacheable && state.containerKindSnapshotsInProgress.has(binding)) {\n return result;\n }\n if (cacheable) state.containerKindSnapshotsInProgress.add(binding);\n try {\n const canonicalLengths = new Map<string, number>();\n const kinds = collectContainerKinds(\n source.expression.node,\n source.expression.scope,\n cacheable ? binding.identifier.name : name,\n state,\n nextNodes,\n new Set(seenBindings).add(binding),\n atPosition,\n cacheable ? canonicalLengths : arrayLengths\n );\n if (!cacheable) return kinds;\n const snapshot = {\n arrayLengths: canonicalLengths,\n kinds,\n };\n state.containerKindSnapshots.set(binding, snapshot);\n applySnapshot(snapshot);\n return result;\n } finally {\n if (cacheable) state.containerKindSnapshotsInProgress.delete(binding);\n }\n }\n if (expression.type === 'ObjectExpression') {\n result.set(name, 'object');\n const entries = collectObjectEntries(\n expression,\n scope,\n new Set(seenNodes),\n atPosition,\n state\n );\n for (const [key, entry] of entries.entries) {\n for (const [path, kind] of collectContainerKinds(\n entry.node,\n entry.scope,\n appendTemplatePath(name, key),\n state,\n nextNodes,\n seenBindings,\n atPosition,\n arrayLengths\n )) {\n result.set(path, kind);\n }\n }\n return result;\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const transformedEntries = collectTransformArrayEntries(\n expression,\n scope,\n state,\n new Set(),\n atPosition\n );\n if (transformedEntries) {\n result.set(name, 'array');\n arrayLengths?.set(name, transformedEntries.length);\n transformedEntries.forEach((entry, index) => {\n if (!entry) return;\n for (const [path, kind] of collectContainerKinds(\n entry.node,\n entry.scope,\n appendTemplatePath(name, String(index)),\n state,\n nextNodes,\n seenBindings,\n atPosition,\n arrayLengths\n )) {\n result.set(path, kind);\n }\n });\n return result;\n }\n const sources = resolveVueTemplateContainerSources(\n expression,\n scope,\n state\n );\n if (!sources || sources.length === 0) return result;\n const sourceLengths = sources.map(() => new Map<string, number>());\n const sourceKinds = sources.map((source, index) =>\n collectContainerKinds(\n source.node,\n source.scope,\n name,\n state,\n nextNodes,\n seenBindings,\n atPosition,\n sourceLengths[index]\n )\n );\n for (const [path, kind] of sourceKinds[0] ?? []) {\n if (sourceKinds.every((kinds) => kinds.get(path) === kind)) {\n result.set(path, kind);\n }\n }\n for (const [path, length] of sourceLengths[0] ?? []) {\n if (sourceLengths.every((lengths) => lengths.get(path) === length)) {\n arrayLengths?.set(path, length);\n }\n }\n return result;\n }\n if (expression.type === 'ArrayExpression') {\n result.set(name, 'array');\n const entries = collectArrayEntries(\n expression,\n scope,\n new Set(),\n expression.end ?? atPosition,\n state\n );\n if (!entries) return result;\n arrayLengths?.set(name, entries.length);\n entries.forEach((entry, index) => {\n if (!entry) return;\n for (const [path, kind] of collectContainerKinds(\n entry.node,\n entry.scope,\n appendTemplatePath(name, String(index)),\n state,\n nextNodes,\n seenBindings,\n atPosition,\n arrayLengths\n )) {\n result.set(path, kind);\n }\n });\n }\n return result;\n}\n\n/** Records values assigned through a statically named member path. */\nfunction collectMemberWriteCandidates(\n localName: string,\n binding: Binding,\n state: ScriptState\n): ComponentMemberCandidate[] {\n const candidates: ComponentMemberCandidate[] = [];\n for (const reference of binding.referencePaths) {\n let current: NodePath<t.Node> = reference;\n const properties: string[] = [];\n let dynamic = false;\n while (\n current.parentPath &&\n (current.parentPath.isMemberExpression() ||\n current.parentPath.isOptionalMemberExpression()) &&\n current.parentPath.node.object === current.node\n ) {\n const property = readResolvedMemberProperty(\n current.parentPath.node,\n current.parentPath.scope,\n state\n );\n if (property === undefined) dynamic = true;\n else properties.push(property);\n current = current.parentPath;\n }\n const assignment = current.parentPath;\n if (\n !assignment?.isAssignmentExpression() ||\n assignment.node.left !== current.node\n ) {\n continue;\n }\n const name =\n !dynamic && properties.length > 0\n ? properties.reduce(appendTemplatePath, localName)\n : localName;\n for (const value of collectPossibleTemplateValues(\n assignment.node.right,\n assignment.scope,\n state,\n new Set()\n )) {\n candidates.push({ certain: false, name, value });\n }\n }\n return candidates;\n}\n\n/** Collects known GT-relevant leaves without claiming one definite result. */\nfunction collectPossibleTemplateValues(\n node: t.Node | null | undefined,\n scope: Scope,\n state: ScriptState,\n seen: Set<t.Node>\n): Array<TemplateKnownValue> {\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return [];\n const nextSeen = new Set(seen).add(expression);\n const known = resolveKnownExpression(expression, scope, state, new Set());\n if (\n known?.type === 'component' ||\n known?.type === 'string' ||\n known?.type === 'vue-builtin'\n ) {\n return [known];\n }\n if (expression.type === 'ConditionalExpression') {\n return [\n ...collectPossibleTemplateValues(\n expression.consequent,\n scope,\n state,\n nextSeen\n ),\n ...collectPossibleTemplateValues(\n expression.alternate,\n scope,\n state,\n nextSeen\n ),\n ];\n }\n if (expression.type === 'LogicalExpression') {\n return [\n ...collectPossibleTemplateValues(expression.left, scope, state, nextSeen),\n ...collectPossibleTemplateValues(\n expression.right,\n scope,\n state,\n nextSeen\n ),\n ];\n }\n if (expression.type === 'SequenceExpression') {\n return collectPossibleTemplateValues(\n expression.expressions.at(-1),\n scope,\n state,\n nextSeen\n );\n }\n if (expression.type === 'AssignmentExpression') {\n return collectPossibleTemplateValues(\n expression.right,\n scope,\n state,\n nextSeen\n );\n }\n if (\n expression.type === 'AwaitExpression' ||\n expression.type === 'YieldExpression'\n ) {\n return collectPossibleTemplateValues(\n expression.argument,\n scope,\n state,\n nextSeen\n );\n }\n return [];\n}\n\n/** Collects GT-relevant values returned by one getter or computed source. */\nfunction collectFunctionTemplateValues(\n fn: t.Function,\n scope: Scope,\n state: ScriptState\n): Array<TemplateKnownValue> {\n const functionScope = state.scopes.get(fn) ?? scope;\n if (\n fn.type === 'ArrowFunctionExpression' &&\n fn.body.type !== 'BlockStatement'\n ) {\n return collectPossibleTemplateValues(\n fn.body,\n functionScope,\n state,\n new Set()\n );\n }\n const functionPath = state.paths.get(fn);\n if (!functionPath || fn.body.type !== 'BlockStatement') return [];\n const values: TemplateKnownValue[] = [];\n functionPath.traverse({\n Function(path) {\n path.skip();\n },\n ReturnStatement(path) {\n values.push(\n ...collectPossibleTemplateValues(\n path.node.argument,\n path.scope,\n state,\n new Set()\n )\n );\n },\n });\n return values;\n}\n\nfunction collectComponentMemberCandidates(\n node: t.Node,\n scope: Scope,\n name: string,\n state: ScriptState,\n certain: boolean,\n seenNodes: Set<t.Node>,\n seenBindings: Set<Binding>,\n atPosition = Number.POSITIVE_INFINITY\n): ComponentMemberCandidate[] {\n const expression = unwrapExpression(node);\n if (!expression || seenNodes.has(expression)) return [];\n const nextNodes = new Set(seenNodes).add(expression);\n const value = resolveKnownExpression(expression, scope, state, new Set());\n if (\n value?.type === 'component' ||\n value?.type === 'string' ||\n value?.type === 'vue-builtin'\n ) {\n return [{ certain, name, value }];\n }\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding || seenBindings.has(binding)) return [];\n const source = getBindingSource(binding);\n if (!source || source.pattern.type !== 'Identifier') return [];\n return collectComponentMemberCandidates(\n source.expression.node,\n source.expression.scope,\n name,\n state,\n certain &&\n isSafelyReadContainerBinding(\n binding,\n expression,\n atPosition,\n false,\n state\n ),\n nextNodes,\n new Set(seenBindings).add(binding),\n atPosition\n );\n }\n if (expression.type === 'ObjectExpression') {\n const candidates = new Map<string, ComponentMemberCandidate>();\n for (const property of expression.properties) {\n if (property.type === 'SpreadElement') {\n const spreadIsKnown = componentContainerShapeIsKnown(\n property.argument,\n scope,\n state,\n new Set(),\n property.argument.end ?? atPosition\n );\n if (!spreadIsKnown) {\n for (const [candidateName, candidate] of candidates) {\n candidates.set(candidateName, { ...candidate, certain: false });\n }\n }\n for (const candidate of collectComponentMemberCandidates(\n property.argument,\n scope,\n name,\n state,\n certain && spreadIsKnown,\n nextNodes,\n seenBindings,\n property.argument.end ?? atPosition\n )) {\n candidates.set(candidate.name, candidate);\n }\n continue;\n }\n const key = readResolvedPropertyKey(property, scope, state);\n if (key === undefined) {\n for (const [candidateName, candidate] of candidates) {\n candidates.set(candidateName, { ...candidate, certain: false });\n }\n continue;\n }\n const memberName = appendTemplatePath(name, key);\n for (const candidateName of candidates.keys()) {\n if (\n candidateName === memberName ||\n candidateName.startsWith(`${memberName}.`)\n ) {\n candidates.delete(candidateName);\n }\n }\n if (property.type === 'ObjectMethod' && property.kind === 'get') {\n let foundStringFunction = false;\n for (const getterValue of collectFunctionTemplateValues(\n property,\n scope,\n state\n )) {\n if (getterValue.type === 'string') foundStringFunction = true;\n candidates.set(memberName, {\n certain: false,\n name: memberName,\n value: getterValue,\n });\n }\n if (\n !foundStringFunction &&\n functionMayReturnStringFunction(property, scope, state, new Set())\n ) {\n candidates.set(memberName, {\n certain: false,\n name: memberName,\n value: { type: 'string', kind: 'msg' },\n });\n }\n continue;\n }\n if (property.type !== 'ObjectProperty') continue;\n for (const candidate of collectComponentMemberCandidates(\n property.value,\n scope,\n memberName,\n state,\n certain,\n nextNodes,\n seenBindings,\n atPosition\n )) {\n candidates.set(candidate.name, candidate);\n }\n }\n return [...candidates.values()];\n }\n if (expression.type === 'ArrayExpression') {\n const entries = collectArrayEntries(\n expression,\n scope,\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY,\n state\n );\n if (entries) {\n return entries.flatMap((entry, index) =>\n entry\n ? collectComponentMemberCandidates(\n entry.node,\n entry.scope,\n appendTemplatePath(name, String(index)),\n state,\n certain,\n nextNodes,\n seenBindings,\n atPosition\n )\n : []\n );\n }\n const firstSpread = expression.elements.findIndex(\n (element) => element?.type === 'SpreadElement'\n );\n return expression.elements.flatMap((element, index) =>\n element &&\n element.type !== 'SpreadElement' &&\n (firstSpread === -1 || index < firstSpread)\n ? collectComponentMemberCandidates(\n element,\n scope,\n appendTemplatePath(name, String(index)),\n state,\n certain,\n nextNodes,\n seenBindings,\n atPosition\n )\n : []\n );\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const transformedEntries = collectTransformArrayEntries(\n expression,\n scope,\n state,\n new Set(),\n atPosition\n );\n if (transformedEntries) {\n return transformedEntries.flatMap((entry, index) =>\n entry\n ? collectComponentMemberCandidates(\n entry.node,\n entry.scope,\n appendTemplatePath(name, String(index)),\n state,\n certain,\n nextNodes,\n seenBindings,\n atPosition\n )\n : []\n );\n }\n const containerSources = resolveVueTemplateContainerSources(\n expression,\n scope,\n state\n );\n if (containerSources) {\n return containerSources.flatMap((source) =>\n collectComponentMemberCandidates(\n source.node,\n source.scope,\n name,\n state,\n certain && containerSources.length === 1,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n }\n if (\n readResolvedMemberPath(expression.callee, scope, state) ===\n 'Object.entries'\n ) {\n return [];\n }\n return expression.arguments.flatMap((argument) =>\n argument.type === 'ArgumentPlaceholder'\n ? []\n : collectComponentMemberCandidates(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n name,\n state,\n false,\n nextNodes,\n seenBindings,\n atPosition\n )\n );\n }\n return [];\n}\n\n/** Returns whether every key and spread position in a container is known. */\nfunction componentContainerShapeIsKnown(\n node: t.Node,\n scope: Scope,\n state: ScriptState,\n seen: Set<t.Node>,\n atPosition: number\n): boolean {\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return false;\n const nextSeen = new Set(seen).add(expression);\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (\n !binding ||\n !isSafelyReadContainerBinding(\n binding,\n expression,\n atPosition,\n false,\n state\n )\n ) {\n return false;\n }\n const source = getBindingSource(binding);\n return Boolean(\n source?.pattern.type === 'Identifier' &&\n componentContainerShapeIsKnown(\n source.expression.node,\n source.expression.scope,\n state,\n nextSeen,\n atPosition\n )\n );\n }\n if (expression.type === 'ObjectExpression') {\n return expression.properties.every((property) =>\n property.type === 'SpreadElement'\n ? componentContainerShapeIsKnown(\n property.argument,\n scope,\n state,\n nextSeen,\n property.argument.end ?? atPosition\n )\n : readResolvedPropertyKey(property, scope, state) !== undefined\n );\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n return (\n collectTransformArrayEntries(\n expression,\n scope,\n state,\n new Set(seen),\n atPosition\n ) !== undefined\n );\n }\n return (\n expression.type === 'ArrayExpression' &&\n collectArrayEntries(\n expression,\n scope,\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY,\n state\n ) !== undefined\n );\n}\n\n/** Resolves a mutable string-call binding at the call's source position. */\nfunction resolveKnownCallTargetAtPosition(\n node: t.Node,\n scope: Scope,\n atPosition: number,\n state: ScriptState\n): {\n definitelyOrdinary: boolean;\n possibleStringFunction?: boolean;\n value: KnownValue | undefined;\n} {\n const expression = unwrapExpression(node);\n const replayed = evaluateReplayAtPosition(node, scope, atPosition, state);\n if (replayed?.type === 'leaf') {\n if (isReplayGetterStringLeaf(replayed)) {\n return {\n definitelyOrdinary: false,\n possibleStringFunction: true,\n value: undefined,\n };\n }\n if (replayed.knownValue?.type === 'string') {\n return { definitelyOrdinary: false, value: replayed.knownValue };\n }\n if (\n replayed.hasGT === false ||\n replayed.knownValue?.type === 'component' ||\n replayed.knownValue?.type === 'vue-builtin'\n ) {\n return { definitelyOrdinary: true, value: undefined };\n }\n }\n if (replayed?.type === 'unsafe') {\n return { definitelyOrdinary: false, value: undefined };\n }\n if (expression?.type !== 'Identifier') {\n return {\n definitelyOrdinary: false,\n value: resolveKnownExpression(node, scope, state, new Set()),\n };\n }\n const binding = scope.getBinding(expression.name);\n if (!binding || binding.constantViolations.length === 0) {\n return {\n definitelyOrdinary: false,\n value: resolveKnownExpression(expression, scope, state, new Set()),\n };\n }\n const candidates = readPossibleBindingValuesAtPosition(\n binding,\n atPosition,\n state\n );\n if (candidates.length !== 1) {\n return { definitelyOrdinary: false, value: undefined };\n }\n const candidate = candidates[0]!;\n const value = resolveKnownExpression(\n candidate.node,\n candidate.scope,\n state,\n new Set([binding])\n );\n if (value) return { definitelyOrdinary: value.type !== 'string', value };\n const materialized = unwrapExpression(candidate.node);\n const definitelyOrdinary = Boolean(\n materialized?.type === 'Identifier' &&\n !candidate.scope.getBinding(materialized.name) &&\n ORDINARY_GLOBAL_VALUES.has(materialized.name)\n );\n return { definitelyOrdinary, value: undefined };\n}\n\n/** Resolves a call using only lexical identities, ignoring active callbacks. */\nfunction resolveKnownCallTargetWithoutParameterSubstitutions(\n node: t.Node,\n scope: Scope,\n atPosition: number,\n state: ScriptState\n): ReturnType<typeof resolveKnownCallTargetAtPosition> {\n if (state.parameterSubstitutions.length === 0) {\n return resolveKnownCallTargetAtPosition(node, scope, atPosition, state);\n }\n const substitutions = state.parameterSubstitutions;\n state.parameterSubstitutions = [];\n try {\n return resolveKnownCallTargetAtPosition(node, scope, atPosition, state);\n } finally {\n state.parameterSubstitutions = substitutions;\n }\n}\n\nfunction resolveKnownExpression(\n node: t.Node | null | undefined,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>\n): KnownValue | undefined {\n if (state.analysis.stats) state.analysis.stats.knownExpressionVisits += 1;\n const expression = unwrapExpression(node);\n if (!expression) return undefined;\n\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n const substitution = binding\n ? readParameterSubstitution(binding, state)\n : undefined;\n if (substitution) {\n return resolveKnownExpression(\n substitution.node,\n substitution.scope,\n state,\n seen\n );\n }\n const value = binding\n ? resolveKnownBinding(binding, state, seen)\n : state.analysis.values.get(expression.name);\n if (\n binding &&\n value?.type === 'namespace' &&\n value.mutable &&\n (state.unsafeMutableNamespaceSources.has(value.source) ||\n !isSafeMutableNamespaceBinding(binding))\n ) {\n return undefined;\n }\n return value;\n }\n if (\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ) {\n const memberPath = readExposedMemberPath(expression, scope, state);\n const exposed = memberPath\n ? state.analysis.values.get(memberPath)\n : undefined;\n if (exposed) return exposed;\n const object = resolveKnownExpression(\n expression.object,\n scope,\n state,\n seen\n );\n const property = readResolvedMemberProperty(expression, scope, state);\n const wrappedValue =\n property === 'value'\n ? resolveVueWrappedMemberValue(expression.object, scope, state)\n : undefined;\n if (wrappedValue) return wrappedValue;\n if (object?.type === 'namespace' && property) {\n return knownExport(object.source, property);\n }\n if (object?.type === 'local-namespace' && property) {\n const resolution = state.analysis.localModules?.resolveExport(\n object.modulePath,\n property\n );\n return resolution?.status === 'resolved'\n ? materializeLocalExport(resolution.target, state).value\n : undefined;\n }\n const selected = property\n ? selectStaticMemberExpression(\n expression.object,\n property,\n scope,\n state,\n expression.end ?? Number.POSITIVE_INFINITY,\n new Set()\n )\n : undefined;\n if (selected) {\n return resolveKnownExpression(selected.node, selected.scope, state, seen);\n }\n return undefined;\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const namespace = readRequireNamespace(expression, scope);\n if (\n namespace &&\n !state.unsafeMutableNamespaceSources.has(namespace.source)\n ) {\n return namespace;\n }\n const callee = resolveKnownExpression(\n expression.callee,\n scope,\n state,\n seen\n );\n if (callee?.type === 'hook') {\n return { type: 'string', kind: callee.kind };\n }\n const argument = expression.arguments[0];\n return callee?.type === 'identity' &&\n expression.arguments.length === 1 &&\n argument &&\n argument.type !== 'SpreadElement' &&\n argument.type !== 'ArgumentPlaceholder'\n ? resolveKnownExpression(argument, scope, state, new Set(seen))\n : undefined;\n }\n if (expression.type === 'LogicalExpression') {\n const left = resolveKnownExpression(\n expression.left,\n scope,\n state,\n new Set(seen)\n );\n if (left) {\n return expression.operator === '&&'\n ? resolveKnownExpression(expression.right, scope, state, new Set(seen))\n : left;\n }\n const staticLeft = readStaticFromScope(\n expression.left,\n scope,\n new Set(),\n expression.left.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (!staticLeft.ok) return undefined;\n const selectsRight =\n expression.operator === '??'\n ? staticLeft.value == null\n : expression.operator === '||'\n ? !staticLeft.value\n : Boolean(staticLeft.value);\n return selectsRight\n ? resolveKnownExpression(expression.right, scope, state, new Set(seen))\n : undefined;\n }\n if (expression.type === 'ConditionalExpression') {\n const condition = readStaticFromScope(\n expression.test,\n scope,\n new Set(),\n expression.test.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (condition.ok) {\n return resolveKnownExpression(\n condition.value ? expression.consequent : expression.alternate,\n scope,\n state,\n new Set(seen)\n );\n }\n const consequent = resolveKnownExpression(\n expression.consequent,\n scope,\n state,\n new Set(seen)\n );\n const alternate = resolveKnownExpression(\n expression.alternate,\n scope,\n state,\n new Set(seen)\n );\n return consequent &&\n alternate &&\n knownValueKey(consequent) === knownValueKey(alternate)\n ? consequent\n : undefined;\n }\n if (expression.type === 'SequenceExpression') {\n return resolveKnownExpression(\n expression.expressions.at(-1),\n scope,\n state,\n new Set(seen)\n );\n }\n return undefined;\n}\n\n/** Resolves a safely read `.value` from a local Vue ref or computed ref. */\nfunction resolveVueWrappedMemberValue(\n node: t.Node,\n scope: Scope,\n state: ScriptState\n): KnownValue | undefined {\n const expression = unwrapExpression(node);\n if (!expression) return undefined;\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding) {\n return state.analysis.templateValues.get(expression.name);\n }\n if (\n !isSafelyReadContainerBinding(\n binding,\n expression,\n expression.end ?? Number.POSITIVE_INFINITY,\n true,\n state\n )\n ) {\n return undefined;\n }\n const source = getBindingSource(binding);\n return source?.pattern.type === 'Identifier'\n ? resolveTemplateKnownExpression(\n source.expression.node,\n source.expression.scope,\n state\n )\n : undefined;\n }\n return resolveTemplateKnownExpression(expression, scope, state);\n}\n\n/** Reads a statically keyed member path for an exposed cross-block value. */\nfunction readResolvedMemberPath(\n node: t.Node,\n scope: Scope,\n state: ScriptState\n): string | undefined {\n const expression = unwrapExpression(node);\n if (!expression) return undefined;\n if (expression.type === 'Identifier') return expression.name;\n if (\n expression.type !== 'MemberExpression' &&\n expression.type !== 'OptionalMemberExpression'\n ) {\n return undefined;\n }\n const object = readResolvedMemberPath(expression.object, scope, state);\n const property = readResolvedMemberProperty(expression, scope, state);\n return object && property !== undefined\n ? appendTemplatePath(object, property)\n : undefined;\n}\n\n/** Reads a cross-block member path only when its root is not locally bound. */\nfunction readExposedMemberPath(\n node: t.Node,\n scope: Scope,\n state: ScriptState\n): string | undefined {\n const path = readResolvedMemberPath(node, scope, state);\n const root = path?.split('.', 1)[0];\n return root && !scope.getBinding(root) ? path : undefined;\n}\n\n/** Maps a nested destructuring target to its exact cross-block member path. */\nfunction readPatternExposedMemberPath(\n pattern: t.Node,\n targetName: string,\n basePath: string,\n scope: Scope,\n state: ScriptState\n): string | undefined {\n if (pattern.type === 'Identifier') {\n return pattern.name === targetName ? basePath : undefined;\n }\n if (pattern.type === 'AssignmentPattern') {\n return readPatternExposedMemberPath(\n pattern.left,\n targetName,\n basePath,\n scope,\n state\n );\n }\n if (pattern.type === 'ObjectPattern') {\n for (const property of pattern.properties) {\n if (\n property.type !== 'ObjectProperty' ||\n !patternContains(property.value, targetName)\n ) {\n continue;\n }\n const key = readResolvedPropertyKey(property, scope, state);\n return key\n ? readPatternExposedMemberPath(\n property.value,\n targetName,\n appendTemplatePath(basePath, key),\n scope,\n state\n )\n : undefined;\n }\n }\n if (pattern.type === 'ArrayPattern') {\n for (let index = 0; index < pattern.elements.length; index += 1) {\n const element = pattern.elements[index];\n if (!element || !patternContains(element, targetName)) continue;\n return readPatternExposedMemberPath(\n element,\n targetName,\n appendTemplatePath(basePath, String(index)),\n scope,\n state\n );\n }\n }\n return undefined;\n}\n\n/** Selects one nested literal member without evaluating application code. */\nfunction selectStaticMemberExpression(\n node: t.Node,\n key: string,\n scope: Scope,\n state: ScriptState,\n atPosition: number,\n seen: Set<t.Node>\n): ScopedExpression | undefined {\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return undefined;\n const nextSeen = new Set(seen).add(expression);\n if (expression.type === 'ThisExpression') {\n const substitution = readThisSubstitution(state);\n return substitution\n ? selectStaticMemberExpression(\n substitution.node,\n key,\n substitution.scope,\n state,\n atPosition,\n nextSeen\n )\n : undefined;\n }\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n const substitution = binding\n ? readParameterSubstitution(binding, state)\n : undefined;\n if (substitution) {\n return selectStaticMemberExpression(\n substitution.node,\n key,\n substitution.scope,\n state,\n atPosition,\n nextSeen\n );\n }\n }\n if (\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ) {\n const parentKey = readResolvedMemberProperty(expression, scope, state);\n const parent = parentKey\n ? selectStaticMemberExpression(\n expression.object,\n parentKey,\n scope,\n state,\n atPosition,\n nextSeen\n )\n : undefined;\n return parent\n ? selectStaticMemberExpression(\n parent.node,\n key,\n parent.scope,\n state,\n atPosition,\n nextSeen\n )\n : undefined;\n }\n const index = key.match(/^(0|[1-9]\\d*)$/) ? Number(key) : undefined;\n if (index !== undefined) {\n const entry = readArrayEntry(\n expression,\n index,\n scope,\n new Set(),\n atPosition,\n state\n );\n return entry.status === 'known' ? entry.expression : undefined;\n }\n const entry = readObjectEntry(\n expression,\n key,\n scope,\n new Set(),\n atPosition,\n state\n );\n return entry.status === 'known' ? entry.expression : undefined;\n}\n\nfunction resolveKnownBinding(\n binding: Binding,\n state: ScriptState,\n seen: Set<Binding>\n): KnownValue | undefined {\n const cacheable = state.parameterSubstitutions.length === 0;\n const mutableSource = state.mutableImportSources.get(binding);\n if (mutableSource && state.unsafeMutableNamespaceSources.has(mutableSource)) {\n if (cacheable) state.resolvedBindings.add(binding);\n return undefined;\n }\n const existing = state.bindings.get(binding);\n if (existing) return existing;\n if (cacheable && state.resolvedBindings.has(binding)) return undefined;\n if (seen.has(binding)) return undefined;\n seen.add(binding);\n\n const source = getBindingSource(binding);\n const value = source\n ? resolvePatternKnownValue(\n source.pattern,\n source.expression.node,\n binding.identifier.name,\n source.expression.scope,\n state,\n seen,\n source.expression.node.end ?? Number.POSITIVE_INFINITY\n )\n : undefined;\n if (value) state.bindings.set(binding, value);\n if (cacheable) state.resolvedBindings.add(binding);\n return value;\n}\n\n/** Resolves values that Vue automatically unwraps at the template boundary. */\nfunction resolveTemplateKnownBinding(\n binding: Binding,\n state: ScriptState\n): KnownValue | undefined {\n const direct = resolveKnownBinding(binding, state, new Set());\n if (direct) return direct;\n const source = getBindingSource(binding);\n if (!source || source.pattern.type !== 'Identifier') return undefined;\n const value = resolveTemplateKnownExpression(\n source.expression.node,\n source.expression.scope,\n state\n );\n if (\n !value ||\n !isVueWrapperExpression(\n source.expression.node,\n source.expression.scope,\n state\n )\n ) {\n return value;\n }\n // Vue does not render a component stored in a ref/computed wrapper as an\n // exact template component alias. Keep these aliases opaque so extraction\n // fails closed instead of publishing a component shape that differs from\n // runtime behavior.\n if (value.type === 'component' || value.type === 'vue-builtin') {\n return undefined;\n }\n return isSafelyReadContainerBinding(\n binding,\n binding.identifier,\n Number.POSITIVE_INFINITY,\n true,\n state\n )\n ? value\n : undefined;\n}\n\n/** Returns whether an expression creates a Vue ref or computed ref. */\nfunction isVueWrapperExpression(\n node: t.Node,\n scope: Scope,\n state: ScriptState\n): boolean {\n const expression = unwrapExpression(node);\n if (\n !expression ||\n (expression.type !== 'CallExpression' &&\n expression.type !== 'OptionalCallExpression')\n ) {\n return false;\n }\n return (\n resolveKnownExpression(expression.callee, scope, state, new Set())?.type ===\n 'vue-wrapper'\n );\n}\n\n/** Models only Vue's top-level ref, shallowRef, and computed unwrapping. */\nfunction resolveTemplateKnownExpression(\n node: t.Node | null | undefined,\n scope: Scope,\n state: ScriptState\n): KnownValue | undefined {\n const direct = resolveKnownExpression(node, scope, state, new Set());\n if (direct) return direct;\n const expression = unwrapExpression(node);\n if (\n !expression ||\n (expression.type !== 'CallExpression' &&\n expression.type !== 'OptionalCallExpression')\n ) {\n return undefined;\n }\n const wrapper = resolveKnownExpression(\n expression.callee,\n scope,\n state,\n new Set()\n );\n if (wrapper?.type !== 'vue-wrapper') return undefined;\n const first = expression.arguments[0];\n if (\n !first ||\n first.type === 'ArgumentPlaceholder' ||\n first.type === 'SpreadElement'\n ) {\n return undefined;\n }\n if (wrapper.kind === 'ref') {\n return resolveKnownExpression(first, scope, state, new Set());\n }\n const getter = resolveComputedGetter(first, scope, state);\n return getter\n ? resolveFunctionTemplateValue(getter.node, getter.scope, state)\n : undefined;\n}\n\n/** Resolves the function Vue invokes for one computed ref. */\nfunction resolveComputedGetter(\n node: t.Node,\n scope: Scope,\n state: ScriptState\n): (ScopedExpression & { node: t.Function }) | undefined {\n const direct = resolveCalledFunction(node, scope, state, new Set());\n if (direct) return direct;\n const object = resolveObjectExpression(node, scope, new Set());\n if (!object) return undefined;\n const entry = readObjectEntry(\n object.node,\n 'get',\n object.scope,\n new Set(),\n node.end ?? Number.POSITIVE_INFINITY,\n state\n );\n return entry.status === 'known'\n ? resolveCalledFunction(\n entry.expression.node,\n entry.expression.scope,\n state,\n new Set()\n )\n : undefined;\n}\n\n/** Resolves the container values Vue exposes after wrapper unwrapping. */\nfunction resolveVueTemplateContainerSources(\n node: t.Node,\n scope: Scope,\n state: ScriptState\n): ScopedExpression[] | undefined {\n const expression = unwrapExpression(node);\n if (\n !expression ||\n (expression.type !== 'CallExpression' &&\n expression.type !== 'OptionalCallExpression')\n ) {\n return undefined;\n }\n const wrapper = resolveKnownExpression(\n expression.callee,\n scope,\n state,\n new Set()\n );\n if (\n wrapper?.type !== 'vue-wrapper' &&\n wrapper?.type !== 'container-wrapper' &&\n wrapper?.type !== 'identity'\n ) {\n return undefined;\n }\n const first = expression.arguments[0];\n if (\n !first ||\n first.type === 'ArgumentPlaceholder' ||\n first.type === 'SpreadElement'\n ) {\n return [];\n }\n if (\n wrapper.type === 'container-wrapper' ||\n wrapper.type === 'identity' ||\n wrapper.kind === 'ref'\n ) {\n return [{ node: first, scope }];\n }\n const getter = resolveComputedGetter(first, scope, state);\n return getter\n ? collectFunctionReturnExpressions(getter.node, getter.scope, state)\n : [];\n}\n\n/** Resolves whether a Vue container proxy forwards or blocks direct writes. */\nfunction readContainerWritePolicy(\n node: t.Node,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>\n): ContainerWritePolicy | undefined {\n const expression = unwrapExpression(node);\n if (!expression) return undefined;\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const wrapper = resolveKnownExpression(\n expression.callee,\n scope,\n state,\n new Set()\n );\n if (wrapper?.type !== 'container-wrapper') return undefined;\n const first = expression.arguments[0];\n const innerPolicy =\n first &&\n first.type !== 'ArgumentPlaceholder' &&\n first.type !== 'SpreadElement'\n ? readContainerWritePolicy(first, scope, state, seen)\n : undefined;\n return composeContainerWritePolicy(wrapper.kind, innerPolicy);\n }\n if (expression.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(expression.name);\n if (!binding || seen.has(binding) || !binding.constant) return undefined;\n return readBindingContainerWritePolicy(binding, state, seen);\n}\n\n/** Applies Vue's proxy-idempotence rules to a nested wrapper call. */\nfunction composeContainerWritePolicy(\n wrapper: ContainerWrapperKind,\n inner: ContainerWritePolicy | undefined\n): ContainerWritePolicy {\n if (wrapper === 'to-raw') return 'forward';\n if (wrapper === 'unref') return inner ?? 'forward';\n if (inner === 'readonly-deep' || inner === 'readonly-shallow') return inner;\n if (wrapper === 'readonly') return 'readonly-deep';\n if (wrapper === 'shallow-readonly') return 'readonly-shallow';\n return 'forward';\n}\n\n/** Reads the write behavior of a direct Vue wrapper binding or exact alias. */\nfunction readBindingContainerWritePolicy(\n binding: Binding,\n state: ScriptState,\n seen: Set<Binding> = new Set()\n): ContainerWritePolicy | undefined {\n if (state.containerWritePolicies.has(binding)) {\n return state.containerWritePolicies.get(binding);\n }\n if (seen.has(binding)) return undefined;\n state.containerWritePolicies.set(binding, undefined);\n const declaration = binding.path.node;\n const policy =\n declaration.type === 'VariableDeclarator' && declaration.init\n ? readContainerWritePolicy(\n declaration.init,\n binding.path.scope,\n state,\n new Set(seen).add(binding)\n )\n : undefined;\n state.containerWritePolicies.set(binding, policy);\n return policy;\n}\n\n/** Collects the expressions returned directly by a local function. */\nfunction collectFunctionReturnExpressions(\n fn: t.Function,\n scope: Scope,\n state: ScriptState\n): ScopedExpression[] {\n const functionScope = state.scopes.get(fn) ?? scope;\n if (\n fn.type === 'ArrowFunctionExpression' &&\n fn.body.type !== 'BlockStatement'\n ) {\n return [{ node: fn.body, scope: functionScope }];\n }\n const functionPath = state.paths.get(fn);\n if (!functionPath || fn.body.type !== 'BlockStatement') return [];\n const result: ScopedExpression[] = [];\n functionPath.traverse({\n Function(path) {\n path.skip();\n },\n ReturnStatement(path) {\n if (path.node.argument) {\n result.push({ node: path.node.argument, scope: path.scope });\n }\n },\n });\n return result;\n}\n\n/** Returns whether a local call can forward a translator or invoke a callback. */\nfunction callMayCarryTranslationFunction(\n call: t.CallExpression | t.OptionalCallExpression,\n scope: Scope,\n state: ScriptState\n): boolean {\n if (\n state.activeTranslationFunctions.size > 0 &&\n resolveCalledFunction(call.callee, scope, state, new Set())\n ) {\n return true;\n }\n return call.arguments.some((argument) => {\n if (argument.type === 'ArgumentPlaceholder') return false;\n const value =\n argument.type === 'SpreadElement' ? argument.argument : argument;\n return (\n expressionMayProduceStringFunction(value, scope, state, new Set()) ||\n containerMayContainStringFunction(value, scope, state, new Set()) ||\n resolveCalledFunction(value, scope, state, new Set()) !== undefined\n );\n });\n}\n\n/** Returns whether a call passes a translator, excluding ordinary callbacks. */\nfunction callArgumentsMayProvideTranslationFunction(\n call: t.CallExpression | t.OptionalCallExpression,\n scope: Scope,\n state: ScriptState\n): boolean {\n return call.arguments.some((argument) => {\n if (argument.type === 'ArgumentPlaceholder') return false;\n const value =\n argument.type === 'SpreadElement' ? argument.argument : argument;\n return (\n expressionMayProduceStringFunction(value, scope, state, new Set()) ||\n containerMayContainStringFunction(value, scope, state, new Set())\n );\n });\n}\n\n/** Runs analysis with simple call arguments bound to the callee parameters. */\nfunction withCallParameterSubstitutions<T>(\n call: t.CallExpression | t.OptionalCallExpression,\n called: ScopedExpression & { node: t.Function },\n callScope: Scope,\n state: ScriptState,\n analyze: () => T\n): T {\n const argumentsByPosition = call.arguments.map((argument) =>\n argument.type === 'ArgumentPlaceholder' || argument.type === 'SpreadElement'\n ? undefined\n : { node: argument, scope: callScope }\n );\n return withFunctionParameterSubstitutions(\n called,\n argumentsByPosition,\n state,\n analyze\n );\n}\n\n/** Runs analysis with scoped values bound to one local function's parameters. */\nfunction withFunctionParameterSubstitutions<T>(\n called: ScopedExpression & { node: t.Function },\n values: Array<ScopedExpression | undefined>,\n state: ScriptState,\n analyze: () => T\n): T {\n const functionScope = state.scopes.get(called.node) ?? called.scope;\n const substitutions = new Map<Binding, ScopedExpression>();\n called.node.params.forEach((parameter, index) => {\n const names = collectPatternBindingNames(parameter);\n const argument =\n parameter.type === 'RestElement'\n ? {\n node: {\n type: 'ArrayExpression',\n elements: values.slice(index).map((value) => value?.node ?? null),\n } as t.ArrayExpression,\n scope: values.slice(index).find(Boolean)?.scope ?? functionScope,\n }\n : values[index];\n for (const name of names) {\n const binding = functionScope.getBinding(name);\n if (!binding) continue;\n if (argument) {\n const selected = selectPatternExpression(\n parameter.type === 'RestElement' ? parameter.argument : parameter,\n argument.node,\n name,\n argument.scope,\n argument.node.end ?? Number.POSITIVE_INFINITY,\n state\n );\n if (selected) substitutions.set(binding, selected);\n } else if (\n parameter.type === 'AssignmentPattern' &&\n patternContains(parameter.left, name)\n ) {\n substitutions.set(binding, {\n node: parameter.right,\n scope: functionScope,\n });\n }\n }\n });\n if (substitutions.size === 0) return analyze();\n state.parameterSubstitutions.push(substitutions);\n try {\n return analyze();\n } finally {\n state.parameterSubstitutions.pop();\n }\n}\n\n/** Runs callback analysis with the built-in mapper's ordinary-function thisArg. */\nfunction withFunctionThisSubstitution<T>(\n called: ScopedExpression & { node: t.Function },\n value: ScopedExpression | undefined,\n state: ScriptState,\n analyze: () => T\n): T {\n if (!value || called.node.type === 'ArrowFunctionExpression') {\n return analyze();\n }\n state.thisSubstitutions.push(value);\n try {\n return analyze();\n } finally {\n state.thisSubstitutions.pop();\n }\n}\n\n/** Collects every identifier bound by one function parameter pattern. */\nfunction collectPatternBindingNames(pattern: t.Node): string[] {\n if (pattern.type === 'Identifier') return [pattern.name];\n if (pattern.type === 'RestElement') {\n return collectPatternBindingNames(pattern.argument);\n }\n if (pattern.type === 'AssignmentPattern') {\n return collectPatternBindingNames(pattern.left);\n }\n if (pattern.type === 'ArrayPattern') {\n return pattern.elements.flatMap((element) =>\n element ? collectPatternBindingNames(element) : []\n );\n }\n if (pattern.type === 'ObjectPattern') {\n return pattern.properties.flatMap((property) =>\n collectPatternBindingNames(\n property.type === 'RestElement' ? property.argument : property.value\n )\n );\n }\n return [];\n}\n\n/** Reads the innermost active call argument for a parameter binding. */\nfunction readParameterSubstitution(\n binding: Binding,\n state: ScriptState\n): ScopedExpression | undefined {\n for (\n let index = state.parameterSubstitutions.length - 1;\n index >= 0;\n index -= 1\n ) {\n const value = state.parameterSubstitutions[index].get(binding);\n if (value) return value;\n }\n return undefined;\n}\n\n/** Reads the active mapper thisArg for an ordinary callback function. */\nfunction readThisSubstitution(\n state: ScriptState\n): ScopedExpression | undefined {\n return state.thisSubstitutions.at(-1);\n}\n\n/** Materializes a direct parameter/member return before its call scope closes. */\nfunction materializeParameterExpression(\n node: t.Node,\n scope: Scope,\n state: ScriptState\n): ScopedExpression {\n const expression = unwrapExpression(node);\n if (!expression) return { node, scope };\n if (expression.type === 'ThisExpression') {\n return readThisSubstitution(state) ?? { node: expression, scope };\n }\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n return (\n (binding && readParameterSubstitution(binding, state)) ?? {\n node: expression,\n scope,\n }\n );\n }\n if (expression.type === 'ArrayExpression') {\n const elements = expression.elements.map((element) => {\n if (!element) return null;\n if (element.type === 'SpreadElement') {\n const value = materializeParameterExpression(\n element.argument,\n scope,\n state\n );\n return { ...element, argument: value.node as t.Expression };\n }\n return materializeParameterExpression(element, scope, state)\n .node as t.Expression;\n });\n return { node: { ...expression, elements }, scope };\n }\n if (\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ) {\n const selectedKey = readResolvedMemberProperty(expression, scope, state);\n if (selectedKey !== undefined) {\n const selected = selectStaticMemberExpression(\n expression.object,\n selectedKey,\n scope,\n state,\n expression.end ?? Number.POSITIVE_INFINITY,\n new Set()\n );\n if (selected) {\n return materializeParameterExpression(\n selected.node,\n selected.scope,\n state\n );\n }\n }\n const object = materializeParameterExpression(\n expression.object,\n scope,\n state\n ).node as typeof expression.object;\n const property = materializeParameterExpression(\n expression.property,\n scope,\n state\n ).node as typeof expression.property;\n return {\n node: { ...expression, object, property } as typeof expression,\n scope,\n };\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const callee = materializeParameterExpression(\n expression.callee,\n scope,\n state\n ).node as typeof expression.callee;\n const args = expression.arguments.map((argument) => {\n if (argument.type === 'ArgumentPlaceholder') return argument;\n if (argument.type === 'SpreadElement') {\n return {\n ...argument,\n argument: materializeParameterExpression(\n argument.argument,\n scope,\n state\n ).node as t.Expression,\n };\n }\n return materializeParameterExpression(argument, scope, state)\n .node as t.Expression;\n });\n return {\n node: { ...expression, callee, arguments: args } as typeof expression,\n scope,\n };\n }\n return { node: expression, scope };\n}\n\n/** Returns one known value only when every reachable return agrees. */\nfunction resolveFunctionTemplateValue(\n fn: t.Function,\n scope: Scope,\n state: ScriptState\n): KnownValue | undefined {\n const functionScope = state.scopes.get(fn) ?? scope;\n if (\n fn.type === 'ArrowFunctionExpression' &&\n fn.body.type !== 'BlockStatement'\n ) {\n return resolveTemplateKnownExpression(fn.body, functionScope, state);\n }\n // Block-bodied getters execute arbitrary application code. Their possible\n // GT identities are tracked separately and deliberately fail closed.\n return undefined;\n}\n\nfunction resolvePatternKnownValue(\n pattern: t.Node,\n valueNode: t.Node,\n targetName: string,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n atPosition: number\n): KnownValue | undefined {\n const exposedBase = readExposedMemberPath(valueNode, scope, state);\n const exposedPath = exposedBase\n ? readPatternExposedMemberPath(\n pattern,\n targetName,\n exposedBase,\n scope,\n state\n )\n : undefined;\n const exposed = exposedPath\n ? state.analysis.values.get(exposedPath)\n : undefined;\n if (exposed) return exposed;\n if (pattern.type === 'Identifier') {\n return pattern.name === targetName\n ? resolveKnownExpression(valueNode, scope, state, seen)\n : undefined;\n }\n if (pattern.type === 'AssignmentPattern') {\n if (isStaticallyUndefined(valueNode, scope)) {\n return resolvePatternKnownValue(\n pattern.left,\n pattern.right,\n targetName,\n scope,\n state,\n seen,\n atPosition\n );\n }\n return resolvePatternKnownValue(\n pattern.left,\n valueNode,\n targetName,\n scope,\n state,\n seen,\n atPosition\n );\n }\n if (pattern.type === 'ObjectPattern') {\n for (const property of pattern.properties) {\n if (property.type !== 'ObjectProperty') continue;\n if (!patternContains(property.value, targetName)) continue;\n const key = readResolvedPropertyKey(property, scope, state);\n if (key === undefined) return undefined;\n const namespace = resolveKnownExpression(valueNode, scope, state, seen);\n if (namespace?.type === 'namespace') {\n return knownExport(namespace.source, key);\n }\n const entry = readObjectEntry(\n valueNode,\n key,\n scope,\n new Set(),\n atPosition,\n state\n );\n return entry.status === 'known'\n ? resolvePatternKnownValue(\n property.value,\n entry.expression.node,\n targetName,\n entry.expression.scope,\n state,\n seen,\n atPosition\n )\n : entry.status === 'absent'\n ? resolveKnownPatternDefault(\n property.value,\n targetName,\n scope,\n state,\n seen,\n atPosition\n )\n : undefined;\n }\n }\n if (pattern.type === 'ArrayPattern') {\n for (let index = 0; index < pattern.elements.length; index += 1) {\n const target = pattern.elements[index];\n if (!target || !patternContains(target, targetName)) continue;\n const entry = readArrayEntry(\n valueNode,\n index,\n scope,\n new Set(),\n atPosition,\n state\n );\n if (entry.status === 'absent') {\n return resolveKnownPatternDefault(\n target,\n targetName,\n scope,\n state,\n seen,\n atPosition\n );\n }\n return entry.status === 'known'\n ? resolvePatternKnownValue(\n target,\n entry.expression.node,\n targetName,\n entry.expression.scope,\n state,\n seen,\n atPosition\n )\n : undefined;\n }\n }\n return undefined;\n}\n\nfunction resolveKnownPatternDefault(\n pattern: t.Node,\n targetName: string,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n atPosition: number\n): KnownValue | undefined {\n return pattern.type === 'AssignmentPattern' &&\n patternContains(pattern.left, targetName)\n ? resolvePatternKnownValue(\n pattern.left,\n pattern.right,\n targetName,\n scope,\n state,\n seen,\n atPosition\n )\n : undefined;\n}\n\nfunction getBindingSource(\n binding: Binding\n): { expression: ScopedExpression; pattern: t.Node } | undefined {\n const declaration = binding.path.node;\n if (declaration.type !== 'VariableDeclarator') return undefined;\n\n if (declaration.init) {\n if (!binding.constant) return undefined;\n return {\n expression: { node: declaration.init, scope: binding.path.scope },\n pattern: declaration.id,\n };\n }\n\n if (binding.constantViolations.length !== 1) return undefined;\n const violation = binding.constantViolations[0];\n if (\n !violation.isAssignmentExpression() ||\n violation.node.operator !== '=' ||\n !isBindingPattern(violation.node.left) ||\n !isUnconditionalSiblingAssignment(binding, violation)\n ) {\n return undefined;\n }\n const assignmentEnd = violation.node.end ?? Number.POSITIVE_INFINITY;\n if (\n binding.referencePaths.some(\n (reference) => (reference.node.start ?? assignmentEnd) < assignmentEnd\n )\n ) {\n return undefined;\n }\n return {\n expression: { node: violation.node.right, scope: violation.scope },\n pattern: violation.node.left,\n };\n}\n\n/**\n * Accepts a deferred initializer only when it is an unconditional sibling\n * statement of the declaration.\n *\n * Source order alone is insufficient: assignments inside branches, loops, or\n * uncalled nested functions may never execute, so treating them as definite\n * would publish a catalog under a hash the runtime does not use.\n */\nfunction isUnconditionalSiblingAssignment(\n binding: Binding,\n assignment: NodePath<t.AssignmentExpression>\n): boolean {\n const declarationStatement = binding.path.getStatementParent();\n const assignmentStatement = assignment.getStatementParent();\n const assignmentFunction = assignment.getFunctionParent()?.node;\n return Boolean(\n declarationStatement &&\n assignmentStatement?.isExpressionStatement() &&\n declarationStatement.parentPath?.node ===\n assignmentStatement.parentPath?.node &&\n binding.referencePaths.every(\n (reference) => reference.getFunctionParent()?.node === assignmentFunction\n )\n );\n}\n\nfunction exposeOptionsApiBindings(\n ast: t.File,\n state: ScriptState,\n templateBindings: TemplateBindings,\n context: VueExtractionContext\n): void {\n const stateFunctions = new Map<t.Function, 'data' | 'setup'>();\n\n traverse(ast, {\n ExportDefaultDeclaration(path) {\n const options = resolveOptionsObject(\n path.node.declaration,\n path.scope,\n state,\n new Set()\n );\n if (!options) {\n if (hasTemplateRelevantBindings(state)) {\n addVueError(\n context,\n babelLocation(path.node.loc),\n 'Could not statically resolve the Vue Options API object used with gt-vue',\n 'Use a direct, immutable options object without escaped container aliases'\n );\n }\n return;\n }\n const entries = collectObjectEntries(\n options.node,\n options.scope,\n new Set(),\n Number.POSITIVE_INFINITY,\n state\n );\n if (\n hasTemplateRelevantBindings(state) &&\n (objectEntryIsUnknown(entries, 'components') ||\n objectEntryIsUnknown(entries, 'setup'))\n ) {\n addVueError(\n context,\n babelLocation(path.node.loc),\n 'Could not statically resolve the Vue Options API components or setup used with gt-vue',\n 'Use explicit components and setup properties after any dynamic object spreads'\n );\n }\n const components = entries.entries.get('components');\n if (components) {\n const staticComponents = readStaticFromScope(\n components.node,\n components.scope,\n new Set(),\n Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (\n !isStaticallyUndefined(components.node, components.scope) &&\n !staticComponents.ok\n ) {\n exposeRegisteredComponents(\n components,\n state,\n templateBindings,\n context\n );\n }\n }\n const setup = entries.entries.get('setup');\n if (setup) {\n const setupFunction = resolveSetupFunction(\n setup.node,\n setup.scope,\n new Set()\n );\n if (setupFunction) {\n stateFunctions.set(setupFunction, 'setup');\n } else {\n const staticSetup = readStaticFromScope(\n setup.node,\n setup.scope,\n new Set(),\n Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (\n hasTemplateRelevantBindings(state) &&\n !isStaticallyUndefined(setup.node, setup.scope) &&\n !staticSetup.ok\n ) {\n addVueError(\n context,\n babelLocation(setup.node.loc),\n 'Could not statically resolve the Vue Options API setup function used with gt-vue',\n 'Use a direct function, an immutable function alias, or an explicit undefined setup value'\n );\n }\n }\n }\n const data = entries.entries.get('data');\n if (data) {\n const dataFunction = resolveSetupFunction(\n data.node,\n data.scope,\n new Set()\n );\n if (dataFunction) {\n stateFunctions.set(dataFunction, 'data');\n } else if (hasTemplateRelevantBindings(state)) {\n addVueError(\n context,\n babelLocation(data.node.loc),\n 'Could not statically resolve the Vue Options API data function used with gt-vue',\n 'Use a direct function or an immutable function alias for data()'\n );\n }\n }\n const computed = entries.entries.get('computed');\n if (computed) {\n exposeOptionsComputed(computed, state, templateBindings, context);\n }\n const methods = entries.entries.get('methods');\n if (methods) {\n exposeOptionsMethods(methods, state, templateBindings, context);\n }\n },\n });\n\n if (stateFunctions.size === 0) return;\n const stateReturns = new Map<t.Function, Array<ScopedExpression | undefined>>(\n [...stateFunctions.keys()].map((fn) => [fn, []])\n );\n traverse(ast, {\n ArrowFunctionExpression(path) {\n if (\n stateFunctions.has(path.node) &&\n path.node.body.type !== 'BlockStatement'\n ) {\n stateReturns\n .get(path.node)\n ?.push({ node: path.node.body, scope: path.scope });\n }\n },\n ReturnStatement(path) {\n const parent = path.getFunctionParent();\n if (!parent || !stateFunctions.has(parent.node)) {\n return;\n }\n stateReturns\n .get(parent.node)\n ?.push(\n path.node.argument\n ? { node: path.node.argument, scope: path.scope }\n : undefined\n );\n },\n });\n const orderedFunctions = [...stateReturns].sort(\n ([first], [second]) =>\n Number(stateFunctions.get(first) === 'setup') -\n Number(stateFunctions.get(second) === 'setup')\n );\n for (const [fn, returns] of orderedFunctions) {\n exposeConsistentSetupReturns(\n returns,\n state,\n templateBindings,\n context,\n !setupAlwaysTerminates(fn),\n stateFunctions.get(fn) ?? 'setup'\n );\n }\n}\n\n/** Returns whether a property can still be supplied by unresolved object data. */\nfunction objectEntryIsUnknown(\n entries: CollectedObjectEntries,\n name: string\n): boolean {\n return (\n !entries.entries.has(name) &&\n (entries.unknownAll || entries.unknownNames.has(name))\n );\n}\n\n/**\n * Returns whether every reachable setup path ends before falling through.\n * Template bindings are exposed only in that case because Vue receives no\n * setup state on a fallthrough path.\n */\nfunction setupAlwaysTerminates(setup: t.Function): boolean {\n return setup.body.type !== 'BlockStatement'\n ? true\n : blockAlwaysTerminates(setup.body);\n}\n\nfunction blockAlwaysTerminates(block: t.BlockStatement): boolean {\n return block.body.some(statementAlwaysTerminates);\n}\n\nfunction statementAlwaysTerminates(statement: t.Statement): boolean {\n if (\n statement.type === 'ReturnStatement' ||\n statement.type === 'ThrowStatement'\n ) {\n return true;\n }\n if (statement.type === 'BlockStatement') {\n return blockAlwaysTerminates(statement);\n }\n if (statement.type !== 'IfStatement' || !statement.alternate) return false;\n return (\n statementAlwaysTerminates(statement.consequent) &&\n statementAlwaysTerminates(statement.alternate)\n );\n}\n\n/** Exposes statically resolved Options API component registrations. */\nfunction exposeRegisteredComponents(\n object: ScopedExpression,\n state: ScriptState,\n templateBindings: TemplateBindings,\n context: VueExtractionContext\n): void {\n const entries = collectObjectEntries(\n object.node,\n object.scope,\n new Set(),\n Number.POSITIVE_INFINITY,\n state\n );\n if (\n hasTemplateRelevantBindings(state) &&\n (entries.unknownAll || entries.unknownNames.size > 0)\n ) {\n addVueError(\n context,\n babelLocation(object.node.loc),\n 'Could not statically resolve the Vue Options API components registry used with gt-vue',\n 'Use an immutable components object without dynamic spreads or escaped aliases'\n );\n }\n for (const [name, entry] of entries.entries) {\n const value = resolveKnownExpression(\n entry.node,\n entry.scope,\n state,\n new Set()\n );\n if (value?.type === 'component' || value?.type === 'vue-builtin') {\n if (value.type === 'component') {\n templateBindings.registeredComponents.set(name, value.name);\n } else {\n templateBindings.registeredVueBuiltins.set(name, value.name);\n }\n } else if (\n expressionMayProduceComponent(entry.node, entry.scope, state, new Set())\n ) {\n templateBindings.uncertainRegisteredComponents.add(name);\n if (\n expressionMayProduceComponent(\n entry.node,\n entry.scope,\n state,\n new Set(),\n 'translation'\n )\n ) {\n templateBindings.uncertainRegisteredGTComponents.add(name);\n }\n }\n }\n}\n\n/** Exposes Options API computed values after Vue's automatic unwrapping. */\nfunction exposeOptionsComputed(\n object: ScopedExpression,\n state: ScriptState,\n templateBindings: TemplateBindings,\n context: VueExtractionContext\n): void {\n const entries = collectObjectEntries(\n object.node,\n object.scope,\n new Set(),\n Number.POSITIVE_INFINITY,\n state\n );\n if (\n hasTemplateRelevantBindings(state) &&\n (entries.unknownAll || entries.unknownNames.size > 0)\n ) {\n addVueError(\n context,\n babelLocation(object.node.loc),\n 'Could not statically resolve Vue Options API computed properties used with gt-vue',\n 'Use an immutable computed object with statically named properties'\n );\n }\n for (const [name, entry] of entries.entries) {\n const getter =\n resolveCalledFunction(entry.node, entry.scope, state, new Set()) ??\n resolveComputedGetter(entry.node, entry.scope, state);\n if (!getter) continue;\n const known = resolveFunctionTemplateValue(\n getter.node,\n getter.scope,\n state\n );\n if (\n known?.type === 'component' ||\n known?.type === 'string' ||\n known?.type === 'vue-builtin'\n ) {\n clearTemplateBinding(name, templateBindings);\n exposeKnownValue(name, known, templateBindings, state.analysis);\n continue;\n }\n const component = functionMayReturnComponent(\n getter.node,\n getter.scope,\n state,\n new Set()\n );\n const gtComponent = functionMayReturnComponent(\n getter.node,\n getter.scope,\n state,\n new Set(),\n 'translation'\n );\n const stringFunction = functionMayReturnStringFunction(\n getter.node,\n getter.scope,\n state,\n new Set()\n );\n if (component) templateBindings.uncertainComponents.add(name);\n if (gtComponent) templateBindings.uncertainGTComponents.add(name);\n if (stringFunction) {\n templateBindings.uncertainStringFunctions.add(name);\n }\n const possibleStrings = collectFunctionPossibleStaticStrings(\n getter.node,\n getter.scope,\n state\n );\n if (possibleStrings.size > 0) {\n templateBindings.possibleStaticStrings.set(name, possibleStrings);\n }\n for (const returned of collectFunctionReturnExpressions(\n getter.node,\n getter.scope,\n state\n )) {\n for (const path of collectPossibleGTContainerPaths(\n returned.node,\n returned.scope,\n name,\n state,\n new Set(),\n new Set()\n )) {\n templateBindings.possibleGTContainers.add(path);\n }\n }\n }\n}\n\n/** Exposes Options API methods that may return component identity. */\nfunction exposeOptionsMethods(\n object: ScopedExpression,\n state: ScriptState,\n templateBindings: TemplateBindings,\n context: VueExtractionContext\n): void {\n const entries = collectObjectEntries(\n object.node,\n object.scope,\n new Set(),\n Number.POSITIVE_INFINITY,\n state\n );\n if (\n hasTemplateRelevantBindings(state) &&\n (entries.unknownAll || entries.unknownNames.size > 0)\n ) {\n addVueError(\n context,\n babelLocation(object.node.loc),\n 'Could not statically resolve Vue Options API methods used with gt-vue',\n 'Use an immutable methods object with statically named methods'\n );\n }\n for (const [name, entry] of entries.entries) {\n const factory = readComponentFactoryExpression(\n entry.node,\n entry.scope,\n state\n );\n if (factory) {\n templateBindings.componentFactories.add(name);\n if (factory.gt) templateBindings.gtComponentFactories.add(name);\n }\n const called = resolveCalledFunction(\n entry.node,\n entry.scope,\n state,\n new Set()\n );\n if (\n called &&\n functionMayReturnGTContainer(called.node, called.scope, state, new Set())\n ) {\n templateBindings.gtContainerFactories.add(name);\n }\n }\n}\n\n/** Exposes only setup bindings that agree across every explicit return. */\nfunction exposeConsistentSetupReturns(\n returns: Array<ScopedExpression | undefined>,\n state: ScriptState,\n templateBindings: TemplateBindings,\n context: VueExtractionContext,\n hasFallthrough: boolean,\n source: 'data' | 'setup'\n): void {\n const returnValues = returns.map((entry) => {\n if (!entry || (source === 'setup' && isSetupRenderReturn(entry))) {\n return new Map<string, TemplateExposure | undefined>();\n }\n return collectTemplateExposures(entry, state, context);\n });\n if (hasFallthrough) returnValues.push(new Map());\n const first = returnValues[0];\n if (!first) return;\n\n const names = new Set(returnValues.flatMap((values) => [...values.keys()]));\n let reportedUncertainty = false;\n for (const name of names) {\n const exposures = returnValues.map((values) => values.get(name));\n const exposure = exposures[0];\n const consistent =\n exposure !== undefined &&\n returnValues.every(\n (values) =>\n values.has(name) && equalTemplateExposure(exposure, values.get(name))\n );\n if (!consistent) {\n if (!reportedUncertainty && exposures.some(isTemplateRelevantExposure)) {\n addVueError(\n context,\n undefined,\n `Could not statically resolve consistent Options API ${source} returns used with gt-vue`,\n `Return the same translation bindings from every reachable ${source} path`\n );\n reportedUncertainty = true;\n }\n continue;\n }\n clearTemplateBinding(name, templateBindings);\n exposeTemplateExposure(name, exposure, templateBindings);\n }\n}\n\n/** Recognizes the render-function form of an Options API setup return. */\nfunction isSetupRenderReturn(entry: ScopedExpression): boolean {\n const expression = unwrapExpression(entry.node);\n return (\n expression?.type === 'ArrowFunctionExpression' ||\n expression?.type === 'FunctionExpression'\n );\n}\n\n/** Identifies exposures that can affect extraction or rich-content traversal. */\nfunction isTemplateRelevantExposure(\n exposure: TemplateExposure | undefined\n): boolean {\n if (\n exposure?.type === 'factory' ||\n exposure?.type === 'possible-static-strings' ||\n exposure?.type === 'uncertain' ||\n (exposure?.type === 'container' && exposure.possibleGT)\n ) {\n return true;\n }\n return (\n exposure?.type === 'known' &&\n (exposure.value.type === 'component' ||\n exposure.value.type === 'hook' ||\n exposure.value.type === 'string' ||\n exposure.value.type === 'vue-builtin' ||\n exposure.value.type === 'namespace')\n );\n}\n\nfunction collectTemplateExposures(\n object: ScopedExpression,\n state: ScriptState,\n context: VueExtractionContext\n): Map<string, TemplateExposure | undefined> {\n const result = new Map<string, TemplateExposure | undefined>();\n const entries = collectObjectEntries(\n object.node,\n object.scope,\n new Set(),\n Number.POSITIVE_INFINITY,\n state\n );\n if (\n hasTemplateRelevantBindings(state) &&\n (entries.unknownAll || entries.unknownNames.size > 0)\n ) {\n addVueError(\n context,\n babelLocation(object.node.loc),\n 'Could not statically resolve an Options API setup return used with gt-vue',\n 'Return an immutable object without dynamic spreads or escaped aliases'\n );\n }\n for (const [name, entry] of entries.entries) {\n const known = resolveTemplateKnownExpression(\n entry.node,\n entry.scope,\n state\n );\n if (known) {\n result.set(name, { type: 'known', value: known });\n continue;\n }\n const called = resolveCalledFunction(\n entry.node,\n entry.scope,\n state,\n new Set()\n );\n if (called) {\n const gt = functionMayReturnComponent(\n called.node,\n called.scope,\n state,\n new Set(),\n 'translation'\n );\n const vue = functionMayReturnComponent(\n called.node,\n called.scope,\n state,\n new Set(),\n 'vue'\n );\n const gtContainer = functionMayReturnGTContainer(\n called.node,\n called.scope,\n state,\n new Set()\n );\n if (gt || vue || gtContainer) {\n result.set(name, { type: 'factory', gt, gtContainer });\n continue;\n }\n }\n const lengths = new Map<string, number>();\n const kinds = collectContainerKinds(\n entry.node,\n entry.scope,\n name,\n state,\n new Set(),\n new Set(),\n Number.POSITIVE_INFINITY,\n lengths\n );\n for (const [path, kind] of kinds) {\n result.set(path, {\n type: 'container',\n kind,\n length: lengths.get(path),\n });\n }\n if (\n !componentContainerShapeIsKnown(\n entry.node,\n entry.scope,\n state,\n new Set(),\n Number.POSITIVE_INFINITY\n )\n ) {\n for (const path of collectPossibleGTContainerPaths(\n entry.node,\n entry.scope,\n name,\n state,\n new Set(),\n new Set()\n )) {\n const current = result.get(path);\n result.set(\n path,\n current?.type === 'container'\n ? { ...current, possibleGT: true }\n : { type: 'container', possibleGT: true }\n );\n }\n }\n const staticValue = readStaticFromScope(\n entry.node,\n entry.scope,\n new Set(),\n Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (staticValue.ok) {\n result.set(name, { type: 'static', value: staticValue.value });\n } else if (!result.has(name)) {\n const component = expressionMayProduceComponent(\n entry.node,\n entry.scope,\n state,\n new Set()\n );\n const gtComponent = expressionMayProduceComponent(\n entry.node,\n entry.scope,\n state,\n new Set(),\n 'translation'\n );\n const stringFunction = expressionMayProduceStringFunction(\n entry.node,\n entry.scope,\n state,\n new Set()\n );\n result.set(\n name,\n component || gtComponent || stringFunction\n ? {\n type: 'uncertain',\n component,\n gtComponent,\n stringFunction,\n }\n : undefined\n );\n }\n for (const [path, value] of collectStaticMemberValues(\n entry.node,\n entry.scope,\n name,\n state,\n new Set(),\n new Set(),\n Number.POSITIVE_INFINITY\n )) {\n result.set(path, { type: 'static', value });\n }\n for (const [path, values] of collectPossibleStaticStringMembers(\n entry.node,\n entry.scope,\n name,\n state,\n new Set(),\n new Set(),\n Number.POSITIVE_INFINITY\n )) {\n if (!result.get(path) || result.get(path)?.type !== 'static') {\n result.set(path, { type: 'possible-static-strings', values });\n }\n }\n for (const candidate of collectComponentMemberCandidates(\n entry.node,\n entry.scope,\n name,\n state,\n true,\n new Set(),\n new Set()\n )) {\n if (candidate.name === name) continue;\n result.set(\n candidate.name,\n candidate.certain\n ? { type: 'known', value: candidate.value }\n : {\n type: 'uncertain',\n component: candidate.value.type !== 'string',\n gtComponent: candidate.value.type === 'component',\n stringFunction: candidate.value.type === 'string',\n }\n );\n }\n }\n return result;\n}\n\nfunction equalTemplateExposure(\n first: TemplateExposure,\n second: TemplateExposure | undefined\n): boolean {\n if (!second || first.type !== second.type) return false;\n if (first.type === 'static' && second.type === 'static') {\n return Object.is(first.value, second.value);\n }\n if (first.type === 'factory' && second.type === 'factory') {\n return first.gt === second.gt && first.gtContainer === second.gtContainer;\n }\n if (\n first.type === 'possible-static-strings' &&\n second.type === 'possible-static-strings'\n ) {\n return (\n first.values.size === second.values.size &&\n [...first.values].every((value) => second.values.has(value))\n );\n }\n if (first.type === 'container' && second.type === 'container') {\n return (\n first.kind === second.kind &&\n first.length === second.length &&\n first.possibleGT === second.possibleGT\n );\n }\n if (first.type === 'uncertain' && second.type === 'uncertain') {\n return (\n first.component === second.component &&\n first.gtComponent === second.gtComponent &&\n first.stringFunction === second.stringFunction\n );\n }\n return (\n first.type === 'known' &&\n second.type === 'known' &&\n knownValueKey(first.value) === knownValueKey(second.value)\n );\n}\n\nfunction exposeTemplateExposure(\n name: string,\n exposure: TemplateExposure,\n templateBindings: TemplateBindings\n): void {\n if (exposure.type === 'known') {\n exposeKnownValue(name, exposure.value, templateBindings);\n } else if (exposure.type === 'container') {\n if (exposure.kind) {\n templateBindings.containerKinds.set(name, exposure.kind);\n }\n if (exposure.length !== undefined) {\n templateBindings.arrayLengths.set(name, exposure.length);\n }\n if (exposure.possibleGT) {\n templateBindings.possibleGTContainers.add(name);\n }\n } else if (exposure.type === 'uncertain') {\n if (exposure.component) {\n templateBindings.uncertainComponents.add(name);\n }\n if (exposure.gtComponent) {\n templateBindings.uncertainGTComponents.add(name);\n }\n if (exposure.stringFunction) {\n templateBindings.uncertainStringFunctions.add(name);\n }\n } else if (exposure.type === 'factory') {\n templateBindings.componentFactories.add(name);\n if (exposure.gt) templateBindings.gtComponentFactories.add(name);\n if (exposure.gtContainer) templateBindings.gtContainerFactories.add(name);\n } else if (exposure.type === 'possible-static-strings') {\n templateBindings.possibleStaticStrings.set(name, exposure.values);\n } else {\n templateBindings.staticValues.set(name, exposure.value);\n }\n}\n\n/** Reads the last value when every write is an unconditional sibling statement. */\nfunction readDefiniteFinalBindingAssignment(\n binding: Binding\n): ScopedExpression | undefined {\n if (binding.constantViolations.length === 0) return undefined;\n const assignments = binding.constantViolations.filter(\n (violation): violation is NodePath<t.AssignmentExpression> =>\n violation.isAssignmentExpression() &&\n violation.node.operator === '=' &&\n patternContains(violation.node.left, binding.identifier.name) &&\n isUnconditionalSiblingAssignment(binding, violation)\n );\n if (assignments.length !== binding.constantViolations.length) {\n return undefined;\n }\n const last = [...assignments]\n .sort((first, second) => (first.node.start ?? 0) - (second.node.start ?? 0))\n .at(-1);\n return last ? { node: last.node.right, scope: last.scope } : undefined;\n}\n\n/**\n * Reads every value a mutable binding can hold at one source position.\n * Definite sibling assignments replace earlier candidates, while an uncertain\n * write retains both branches so an alias cannot lose historical GT provenance.\n */\nfunction readPossibleBindingValuesAtPosition(\n binding: Binding,\n atPosition: number,\n state: ScriptState\n): ScopedExpression[] {\n const declaration = binding.path.node;\n if (\n declaration.type !== 'VariableDeclarator' ||\n !patternContains(declaration.id, binding.identifier.name)\n ) {\n return [];\n }\n const initial = declaration.init\n ? selectPatternExpression(\n declaration.id,\n declaration.init,\n binding.identifier.name,\n binding.path.scope,\n declaration.init.end ?? atPosition,\n state\n )\n : undefined;\n let values = initial ? [initial] : [];\n const violations = [...binding.constantViolations]\n .filter(\n (violation) =>\n (violation.node.start ?? Number.POSITIVE_INFINITY) < atPosition\n )\n .sort(\n (first, second) =>\n (first.node.start ?? Number.POSITIVE_INFINITY) -\n (second.node.start ?? Number.POSITIVE_INFINITY)\n );\n for (const violation of violations) {\n if (\n !violation.isAssignmentExpression() ||\n violation.node.operator !== '=' ||\n !isBindingPattern(violation.node.left) ||\n !patternContains(violation.node.left, binding.identifier.name)\n ) {\n continue;\n }\n const selected = selectPatternExpression(\n violation.node.left,\n violation.node.right,\n binding.identifier.name,\n violation.scope,\n violation.node.end ?? atPosition,\n state\n );\n if (!selected) continue;\n if (isUnconditionalSiblingAssignment(binding, violation)) {\n values = [selected];\n } else {\n values.push(selected);\n }\n }\n return values;\n}\n\n/** Conservatively models whether a destructuring default can execute. */\nfunction expressionMayBeUndefined(\n node: t.Node | null | undefined,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>\n): boolean {\n const expression = unwrapExpression(node);\n if (!expression) return true;\n const staticValue = readStaticFromScope(\n expression,\n scope,\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (staticValue.ok) return staticValue.value === undefined;\n if (resolveKnownExpression(expression, scope, state, new Set())) return false;\n if (expression.type === 'Identifier') {\n if (!scope.getBinding(expression.name)) {\n return expression.name === 'undefined';\n }\n const binding = scope.getBinding(expression.name)!;\n if (seen.has(binding)) return true;\n const source = getBindingSource(binding);\n if (!source) return true;\n const selected = selectPatternExpression(\n source.pattern,\n source.expression.node,\n expression.name,\n source.expression.scope,\n source.expression.node.end ?? Number.POSITIVE_INFINITY,\n state\n );\n return selected\n ? expressionMayBeUndefined(\n selected.node,\n selected.scope,\n state,\n new Set(seen).add(binding)\n )\n : true;\n }\n if (expression.type === 'ConditionalExpression') {\n return (\n expressionMayBeUndefined(expression.consequent, scope, state, seen) ||\n expressionMayBeUndefined(expression.alternate, scope, state, seen)\n );\n }\n if (expression.type === 'LogicalExpression') return true;\n if (expression.type === 'SequenceExpression') {\n return expressionMayBeUndefined(\n expression.expressions.at(-1),\n scope,\n state,\n seen\n );\n }\n if (expression.type === 'AssignmentExpression') {\n return expressionMayBeUndefined(expression.right, scope, state, seen);\n }\n if (\n expression.type === 'AwaitExpression' ||\n expression.type === 'YieldExpression'\n ) {\n return expressionMayBeUndefined(expression.argument, scope, state, seen);\n }\n if (expression.type === 'UnaryExpression') {\n return expression.operator === 'void';\n }\n return (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression' ||\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n );\n}\n\nconst {\n readDefiniteArrayInteger,\n readDefiniteFinalContainerHasGT,\n readDefiniteFinalContainerSnapshot,\n} = createSnapshotAnalysis({\n readonlyArrayTransforms: READONLY_ARRAY_TRANSFORMS,\n collectObjectEntries,\n collectTransformArrayEntries,\n memberChainIsReadOnly,\n readBindingContainerWritePolicy,\n readResolvedMemberPath,\n readResolvedMemberProperty,\n readStaticFromScope,\n resolveKnownExpression,\n resolveVueTemplateContainerSources,\n});\n\nconst {\n evaluateReplayAtPosition,\n isReplayGetterStringLeaf,\n readDefiniteReplayGTContainerPaths,\n readReplayComponentCandidates,\n readReplayComponentFactoryCandidates,\n readReplayContainerMetadata,\n readReplayLeafState,\n readSafeReplayLeafOverride,\n replayBindingRetainsUnsafeIdentity,\n} = createReplayAnalysis({\n ordinaryGlobalValues: ORDINARY_GLOBAL_VALUES,\n readonlyArrayTransforms: READONLY_ARRAY_TRANSFORMS,\n bindingReadsUnsafeMutableImport,\n collectFunctionReturnExpressions,\n collectPatternBindingNames,\n composeContainerWritePolicy,\n knownValueKey,\n readDefiniteArrayInteger,\n readResolvedMemberPath,\n readResolvedMemberProperty,\n readResolvedPropertyKey,\n readStaticFromScope,\n resolveCalledFunction,\n resolveComputedGetter,\n resolveKnownExpression,\n});\n\n/**\n * Describes whether a program binding is a container that can directly yield\n * `<T>`, or a callable that can return such a container.\n *\n * Keeping these cases separate avoids treating a function object as though\n * indexing the function itself could select one of its returned values.\n */\nfunction readBindingGTContainerExposure(\n binding: Binding,\n state: ScriptState\n): GTContainerExposure {\n const result: GTContainerExposure = {\n containers: new Set(),\n factories: new Set(),\n };\n const sources: ScopedExpression[] = [];\n const source = getBindingSource(binding);\n if (source) {\n const selected = selectPatternExpression(\n source.pattern,\n source.expression.node,\n binding.identifier.name,\n source.expression.scope,\n source.expression.node.end ?? Number.POSITIVE_INFINITY,\n state\n );\n if (selected) sources.push(selected);\n } else {\n const finalAssignment = readDefiniteFinalBindingAssignment(binding);\n if (finalAssignment) sources.push(finalAssignment);\n }\n\n for (const candidate of sources) {\n const callable = resolveCalledFunction(\n candidate.node,\n candidate.scope,\n state,\n new Set()\n );\n if (callable) {\n if (\n functionMayReturnGTContainer(\n callable.node,\n callable.scope,\n state,\n new Set()\n )\n ) {\n result.factories.add(binding.identifier.name);\n }\n } else {\n const candidatePaths = collectPossibleGTContainerPaths(\n candidate.node,\n candidate.scope,\n binding.identifier.name,\n state,\n new Set(),\n new Set([binding])\n );\n for (const path of candidatePaths) {\n result.containers.add(path);\n }\n }\n }\n\n for (const violation of binding.constantViolations) {\n if (\n !violation.isAssignmentExpression() ||\n !patternContains(violation.node.left, binding.identifier.name)\n ) {\n continue;\n }\n for (const path of collectPossibleGTContainerPaths(\n violation.node.right,\n violation.scope,\n binding.identifier.name,\n state,\n new Set(),\n new Set([binding])\n )) {\n result.containers.add(path);\n }\n }\n\n const mutationPaths = bindingMutationGTContainerPaths(binding, state);\n for (const path of mutationPaths) result.containers.add(path);\n const replayPaths = readDefiniteReplayGTContainerPaths(binding, state);\n if (replayPaths === null) {\n result.containers.add(binding.identifier.name);\n } else if (replayPaths) {\n result.containers = replayPaths;\n } else {\n const finalHasGT = readDefiniteFinalContainerHasGT(binding, state);\n if (finalHasGT === false) result.containers.clear();\n }\n const declaration = binding.path.node;\n if (\n replayPaths !== null &&\n !replayBindingRetainsUnsafeIdentity(binding, state) &&\n result.containers.size > 0 &&\n mutationPaths.size === 0 &&\n sources.length === 1 &&\n declaration.type === 'VariableDeclarator' &&\n declaration.id.type === 'Identifier' &&\n Boolean(declaration.init) &&\n binding.constant &&\n isSafelyReadContainerBinding(\n binding,\n binding.identifier,\n Number.POSITIVE_INFINITY,\n false,\n state\n ) &&\n componentContainerShapeIsKnown(\n sources[0].node,\n sources[0].scope,\n state,\n new Set(),\n Number.POSITIVE_INFINITY\n )\n ) {\n // Exact immutable leaves are already exposed by\n // collectProgramComponentMembers; a broad taint would hide that precision.\n result.containers.clear();\n }\n return result;\n}\n\n/** Returns whether a callable can return a container with an immediate T. */\nfunction functionMayReturnGTContainer(\n fn: t.Function,\n scope: Scope,\n state: ScriptState,\n seenNodes: Set<t.Node>\n): boolean {\n if (seenNodes.has(fn)) return false;\n const nextNodes = new Set(seenNodes).add(fn);\n return collectFunctionReturnExpressions(fn, scope, state).some((value) =>\n expressionMayProduceGTContainer(\n value.node,\n value.scope,\n state,\n nextNodes,\n new Set()\n )\n );\n}\n\n/** Returns whether one callback return preserves the selected parameter value. */\nfunction functionMayReturnParameter(\n fn: t.Function,\n scope: Scope,\n parameterIndex: number,\n state: ScriptState\n): boolean {\n const parameter = fn.params[parameterIndex];\n if (!parameter) return false;\n const functionScope = state.scopes.get(fn) ?? scope;\n const parameterBindings = new Set(\n collectPatternBindingNames(parameter).flatMap((name) => {\n const binding = functionScope.getBinding(name);\n return binding ? [binding] : [];\n })\n );\n return collectFunctionReturnExpressions(fn, scope, state).some((value) =>\n expressionMayResolveToBinding(\n value.node,\n value.scope,\n parameterBindings,\n new Set()\n )\n );\n}\n\n/** Tracks exact value-preserving aliases without treating member reads as identity. */\nfunction expressionMayResolveToBinding(\n node: t.Node | null | undefined,\n scope: Scope,\n targets: Set<Binding>,\n seen: Set<Binding>\n): boolean {\n const expression = unwrapExpression(node);\n if (!expression) return false;\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding) return false;\n if (targets.has(binding)) return true;\n if (seen.has(binding)) return false;\n const source = getBindingSource(binding);\n return Boolean(\n source?.pattern.type === 'Identifier' &&\n expressionMayResolveToBinding(\n source.expression.node,\n source.expression.scope,\n targets,\n new Set(seen).add(binding)\n )\n );\n }\n if (expression.type === 'ConditionalExpression') {\n return (\n expressionMayResolveToBinding(\n expression.consequent,\n scope,\n targets,\n seen\n ) ||\n expressionMayResolveToBinding(expression.alternate, scope, targets, seen)\n );\n }\n if (expression.type === 'LogicalExpression') {\n return (\n expressionMayResolveToBinding(expression.left, scope, targets, seen) ||\n expressionMayResolveToBinding(expression.right, scope, targets, seen)\n );\n }\n if (expression.type === 'SequenceExpression') {\n return expressionMayResolveToBinding(\n expression.expressions.at(-1),\n scope,\n targets,\n seen\n );\n }\n if (expression.type === 'AssignmentExpression') {\n return expressionMayResolveToBinding(\n expression.right,\n scope,\n targets,\n seen\n );\n }\n if (\n expression.type === 'AwaitExpression' ||\n expression.type === 'YieldExpression'\n ) {\n return expressionMayResolveToBinding(\n expression.argument,\n scope,\n targets,\n seen\n );\n }\n return false;\n}\n\n/**\n * Collects the flattened paths of containers that can directly yield `<T>`.\n * A path is attached to the container, not the T leaf, which preserves the\n * distinction between `[T]` and `[[T]]` across successive template indexes.\n */\nfunction collectPossibleGTContainerPaths(\n node: t.Node | null | undefined,\n scope: Scope,\n basePath: string,\n state: ScriptState,\n seenNodes: Set<t.Node>,\n seenBindings: Set<Binding>\n): Set<string> {\n const result = new Set<string>();\n const expression = unwrapExpression(node);\n if (!expression || seenNodes.has(expression)) return result;\n const nextNodes = new Set(seenNodes).add(expression);\n const transformedEntries =\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ? collectTransformArrayEntries(\n expression,\n scope,\n state,\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY\n )\n : undefined;\n if (\n transformedEntries === undefined &&\n expressionMayProduceGTContainer(\n expression,\n scope,\n state,\n seenNodes,\n seenBindings\n )\n ) {\n result.add(basePath);\n }\n const collect = (\n value: t.Node | null | undefined,\n valueScope: Scope,\n path: string\n ): void => {\n for (const candidate of collectPossibleGTContainerPaths(\n value,\n valueScope,\n path,\n state,\n nextNodes,\n seenBindings\n )) {\n result.add(candidate);\n }\n };\n\n if (transformedEntries !== undefined) {\n if (\n transformedEntries.some(\n (entry) =>\n entry &&\n expressionMayProduceComponent(\n entry.node,\n entry.scope,\n state,\n new Set(),\n 'T'\n )\n )\n ) {\n result.add(basePath);\n }\n transformedEntries.forEach((entry, index) => {\n if (entry) {\n collect(\n entry.node,\n entry.scope,\n appendTemplatePath(basePath, String(index))\n );\n }\n });\n return result;\n }\n\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding) {\n const prefix = `${expression.name}.`;\n for (const values of [\n state.analysis.values,\n state.analysis.templateValues,\n ]) {\n for (const [path, value] of values) {\n if (\n value.type !== 'component' ||\n value.name !== 'T' ||\n !path.startsWith(prefix)\n ) {\n continue;\n }\n const parent = path.slice(0, path.lastIndexOf('.'));\n result.add(`${basePath}${parent.slice(expression.name.length)}`);\n }\n }\n for (const path of state.analysis.possibleGTContainers) {\n if (path === expression.name || path.startsWith(prefix)) {\n result.add(`${basePath}${path.slice(expression.name.length)}`);\n }\n }\n return result;\n }\n const substitution = readParameterSubstitution(binding, state);\n if (substitution) {\n for (const candidate of collectPossibleGTContainerPaths(\n substitution.node,\n substitution.scope,\n basePath,\n state,\n nextNodes,\n seenBindings\n )) {\n result.add(candidate);\n }\n return result;\n }\n if (seenBindings.has(binding)) return result;\n const cacheable =\n binding.constant && state.parameterSubstitutions.length === 0;\n const remapCached = (paths: Iterable<string>): void => {\n for (const path of paths) {\n result.add(\n path === binding.identifier.name\n ? basePath\n : `${basePath}${path.slice(binding.identifier.name.length)}`\n );\n }\n };\n const cached = cacheable ? state.gtContainerPaths.get(binding) : undefined;\n if (cached) {\n remapCached(cached);\n return result;\n }\n if (cacheable && state.gtContainerPathsInProgress.has(binding)) {\n return result;\n }\n if (cacheable) state.gtContainerPathsInProgress.add(binding);\n const source = getBindingSource(binding);\n const selectedValues = source\n ? [\n selectPatternExpression(\n source.pattern,\n source.expression.node,\n binding.identifier.name,\n source.expression.scope,\n source.expression.node.end ?? Number.POSITIVE_INFINITY,\n state\n ),\n ]\n : readPossibleBindingValuesAtPosition(\n binding,\n expression.start ?? Number.POSITIVE_INFINITY,\n state\n );\n try {\n const canonicalBase = cacheable ? binding.identifier.name : basePath;\n const canonical = new Set<string>();\n if (result.has(basePath)) canonical.add(canonicalBase);\n for (const selected of selectedValues) {\n if (!selected) continue;\n for (const candidate of collectPossibleGTContainerPaths(\n selected.node,\n selected.scope,\n canonicalBase,\n state,\n nextNodes,\n new Set(seenBindings).add(binding)\n )) {\n canonical.add(candidate);\n }\n }\n for (const path of bindingMutationGTContainerPaths(\n binding,\n state,\n new Set(seenBindings).add(binding)\n )) {\n canonical.add(\n cacheable\n ? path\n : path === binding.identifier.name\n ? basePath\n : `${basePath}${path.slice(binding.identifier.name.length)}`\n );\n }\n if (cacheable) {\n state.gtContainerPaths.set(binding, canonical);\n remapCached(canonical);\n } else {\n for (const path of canonical) result.add(path);\n }\n return result;\n } finally {\n if (cacheable) state.gtContainerPathsInProgress.delete(binding);\n }\n }\n\n if (expression.type === 'ArrayExpression') {\n const entries = collectArrayEntries(\n expression,\n scope,\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY,\n state\n );\n if (entries) {\n entries.forEach((entry, index) => {\n if (entry)\n collect(\n entry.node,\n entry.scope,\n appendTemplatePath(basePath, String(index))\n );\n });\n return result;\n }\n let uncertainIndex = false;\n expression.elements.forEach((element, index) => {\n if (!element) return;\n if (element.type === 'SpreadElement') {\n uncertainIndex = true;\n collect(element.argument, scope, basePath);\n return;\n }\n collect(\n element,\n scope,\n appendTemplatePath(\n basePath,\n uncertainIndex ? unknownTemplatePathSegment : String(index)\n )\n );\n });\n return result;\n }\n\n if (expression.type === 'ObjectExpression') {\n const entries = collectObjectEntries(\n expression,\n scope,\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY,\n state\n );\n for (const [key, entry] of entries.entries) {\n collect(entry.node, entry.scope, appendTemplatePath(basePath, key));\n }\n for (const property of expression.properties) {\n if (property.type === 'SpreadElement') continue;\n if (readResolvedPropertyKey(property, scope, state) !== undefined) {\n continue;\n }\n const value =\n property.type === 'ObjectProperty' ? property.value : property;\n collect(\n value,\n scope,\n appendTemplatePath(basePath, unknownTemplatePathSegment)\n );\n }\n return result;\n }\n\n if (expression.type === 'ConditionalExpression') {\n const condition = readStaticFromScope(\n expression.test,\n scope,\n new Set(),\n expression.test.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (condition.ok) {\n collect(\n condition.value ? expression.consequent : expression.alternate,\n scope,\n basePath\n );\n } else {\n collect(expression.consequent, scope, basePath);\n collect(expression.alternate, scope, basePath);\n }\n return result;\n }\n if (expression.type === 'LogicalExpression') {\n collect(expression.left, scope, basePath);\n collect(expression.right, scope, basePath);\n return result;\n }\n if (expression.type === 'SequenceExpression') {\n collect(expression.expressions.at(-1), scope, basePath);\n return result;\n }\n if (expression.type === 'AssignmentExpression') {\n collect(expression.right, scope, basePath);\n return result;\n }\n if (\n expression.type === 'AwaitExpression' ||\n expression.type === 'YieldExpression'\n ) {\n collect(expression.argument, scope, basePath);\n return result;\n }\n if (\n expression.type !== 'CallExpression' &&\n expression.type !== 'OptionalCallExpression'\n ) {\n return result;\n }\n\n const sources = resolveVueTemplateContainerSources(expression, scope, state);\n if (sources) {\n for (const source of sources) collect(source.node, source.scope, basePath);\n return result;\n }\n const called = resolveCalledFunction(\n expression.callee,\n scope,\n state,\n new Set()\n );\n if (called) {\n withCallParameterSubstitutions(expression, called, scope, state, () => {\n for (const returned of collectFunctionReturnExpressions(\n called.node,\n called.scope,\n state\n )) {\n collect(returned.node, returned.scope, basePath);\n }\n });\n return result;\n }\n if (callTargetsUnknownImport(expression.callee, scope)) {\n for (const argument of expression.arguments) {\n if (argument.type === 'ArgumentPlaceholder') continue;\n collect(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n basePath\n );\n }\n return result;\n }\n const callee = unwrapExpression(expression.callee);\n if (\n !callee ||\n (callee.type !== 'MemberExpression' &&\n callee.type !== 'OptionalMemberExpression')\n ) {\n return result;\n }\n const method = readResolvedMemberProperty(callee, scope, state);\n if (!method) return result;\n const addPaths = (paths: Iterable<string>): void => {\n for (const path of paths) result.add(path);\n };\n const collectPaths = (\n value: t.Node,\n valueScope: Scope,\n path = basePath\n ): Set<string> =>\n collectPossibleGTContainerPaths(\n value,\n valueScope,\n path,\n state,\n nextNodes,\n seenBindings\n );\n const removeFirstChild = (path: string): string => {\n if (path === basePath) return basePath;\n const suffix = path.slice(basePath.length + 1);\n const separator = suffix.indexOf('.');\n return separator === -1\n ? basePath\n : `${basePath}.${suffix.slice(separator + 1)}`;\n };\n const replaceFirstChildWithUnknown = (path: string): string => {\n if (path === basePath) return basePath;\n const suffix = path.slice(basePath.length + 1);\n const separator = suffix.indexOf('.');\n const remaining = separator === -1 ? '' : suffix.slice(separator);\n return `${appendTemplatePath(basePath, unknownTemplatePathSegment)}${remaining}`;\n };\n const receiverPath = readResolvedMemberPath(callee.object, scope, state);\n const collectMappedPaths = (\n source: t.Node,\n callback: t.Node | undefined,\n includeSourceParameter = true\n ): Set<string> => {\n const sourcePaths = collectPaths(source, scope);\n if (!callback) return sourcePaths;\n const callbackFunction = resolveCalledFunction(\n callback,\n scope,\n state,\n new Set()\n );\n if (!callbackFunction) return sourcePaths;\n const mapped = new Set<string>();\n const sourceEntries = collectTransformArrayEntries(\n source,\n scope,\n state,\n new Set()\n );\n if (sourceEntries) {\n const childPath = appendTemplatePath(\n basePath,\n unknownTemplatePathSegment\n );\n for (const [index, entry] of sourceEntries.entries()) {\n if (!entry) continue;\n const callbackValues: Array<ScopedExpression | undefined> = [\n entry,\n {\n node: { type: 'NumericLiteral', value: index } as t.NumericLiteral,\n scope,\n },\n ];\n if (includeSourceParameter)\n callbackValues.push({ node: source, scope });\n withFunctionParameterSubstitutions(\n callbackFunction,\n callbackValues,\n state,\n () => {\n if (\n functionMayReturnComponent(\n callbackFunction.node,\n callbackFunction.scope,\n state,\n new Set(),\n 'T'\n )\n ) {\n mapped.add(basePath);\n }\n for (const returned of collectFunctionReturnExpressions(\n callbackFunction.node,\n callbackFunction.scope,\n state\n )) {\n for (const path of collectPossibleGTContainerPaths(\n returned.node,\n returned.scope,\n childPath,\n state,\n nextNodes,\n seenBindings\n )) {\n mapped.add(path);\n }\n }\n }\n );\n }\n return mapped;\n }\n if (\n functionMayReturnParameter(\n callbackFunction.node,\n callbackFunction.scope,\n 0,\n state\n )\n ) {\n for (const path of sourcePaths) mapped.add(path);\n }\n if (\n functionMayReturnComponent(\n callbackFunction.node,\n callbackFunction.scope,\n state,\n new Set(),\n 'T'\n )\n ) {\n mapped.add(basePath);\n }\n const childPath = appendTemplatePath(basePath, unknownTemplatePathSegment);\n for (const returned of collectFunctionReturnExpressions(\n callbackFunction.node,\n callbackFunction.scope,\n state\n )) {\n for (const path of collectPossibleGTContainerPaths(\n returned.node,\n returned.scope,\n childPath,\n state,\n nextNodes,\n seenBindings\n )) {\n mapped.add(path);\n }\n }\n return mapped;\n };\n if (\n receiverPath === 'Array' &&\n method === 'from' &&\n !scope.getBinding('Array')\n ) {\n const source = expression.arguments[0];\n if (\n source &&\n source.type !== 'ArgumentPlaceholder' &&\n source.type !== 'SpreadElement'\n ) {\n const mapper = expression.arguments[1];\n addPaths(\n collectMappedPaths(\n source,\n mapper &&\n mapper.type !== 'ArgumentPlaceholder' &&\n mapper.type !== 'SpreadElement'\n ? mapper\n : undefined,\n false\n )\n );\n }\n return result;\n }\n if (\n receiverPath === 'Object' &&\n method === 'assign' &&\n !scope.getBinding('Object')\n ) {\n for (const argument of expression.arguments) {\n if (argument.type === 'ArgumentPlaceholder') continue;\n collect(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n basePath\n );\n }\n return result;\n }\n if (\n receiverPath === 'Object' &&\n (method === 'values' || method === 'entries') &&\n !scope.getBinding('Object')\n ) {\n const source = expression.arguments[0];\n if (\n source &&\n source.type !== 'ArgumentPlaceholder' &&\n source.type !== 'SpreadElement'\n ) {\n for (const path of collectPaths(source, scope)) {\n const valuePath = replaceFirstChildWithUnknown(path);\n result.add(\n method === 'entries'\n ? path === basePath\n ? appendTemplatePath(basePath, unknownTemplatePathSegment)\n : appendTemplatePath(valuePath, '1')\n : valuePath\n );\n }\n }\n return result;\n }\n if (\n [\n 'concat',\n 'copyWithin',\n 'fill',\n 'filter',\n 'splice',\n 'reverse',\n 'slice',\n 'sort',\n 'toReversed',\n 'toSorted',\n 'toSpliced',\n 'with',\n ].includes(method)\n ) {\n collect(callee.object, scope, basePath);\n }\n if (method === 'concat') {\n for (const argument of expression.arguments) {\n if (argument.type === 'ArgumentPlaceholder') continue;\n collect(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n basePath\n );\n }\n }\n if (method === 'with' || method === 'toSpliced') {\n const inserted =\n method === 'with'\n ? expression.arguments.slice(1, 2)\n : expression.arguments.slice(2);\n const childPath = appendTemplatePath(basePath, unknownTemplatePathSegment);\n for (const argument of inserted) {\n if (argument.type === 'ArgumentPlaceholder') continue;\n const value =\n argument.type === 'SpreadElement' ? argument.argument : argument;\n if (expressionMayProduceComponent(value, scope, state, new Set(), 'T')) {\n result.add(basePath);\n }\n collect(value, scope, childPath);\n }\n }\n if (method === 'fill') {\n const value = expression.arguments[0];\n if (\n value &&\n value.type !== 'ArgumentPlaceholder' &&\n value.type !== 'SpreadElement'\n ) {\n if (expressionMayProduceComponent(value, scope, state, new Set(), 'T')) {\n result.add(basePath);\n }\n collect(\n value,\n scope,\n appendTemplatePath(basePath, unknownTemplatePathSegment)\n );\n }\n }\n if (method === 'map') {\n const callback = expression.arguments[0];\n addPaths(\n collectMappedPaths(\n callee.object,\n callback &&\n callback.type !== 'ArgumentPlaceholder' &&\n callback.type !== 'SpreadElement'\n ? callback\n : undefined\n )\n );\n }\n if (method === 'flat' || method === 'flatMap') {\n const mapped = new Set<string>();\n if (method === 'flat') {\n const sourcePaths = collectPaths(callee.object, scope);\n const depthArgument = expression.arguments[0];\n const depthValue =\n depthArgument &&\n depthArgument.type !== 'ArgumentPlaceholder' &&\n depthArgument.type !== 'SpreadElement'\n ? readStaticFromScope(\n depthArgument,\n scope,\n new Set(),\n depthArgument.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n )\n : { ok: true as const, value: 1 };\n if (depthValue.ok && typeof depthValue.value !== 'bigint') {\n const numericDepth = Number(depthValue.value);\n const depth = Number.isNaN(numericDepth)\n ? 0\n : numericDepth === Number.POSITIVE_INFINITY\n ? Number.POSITIVE_INFINITY\n : Math.max(0, Math.trunc(numericDepth));\n for (const sourcePath of sourcePaths) {\n let flattened = sourcePath;\n for (\n let index = 0;\n index < depth && flattened !== basePath;\n index += 1\n ) {\n flattened = removeFirstChild(flattened);\n }\n mapped.add(flattened);\n }\n } else if (!depthValue.ok) {\n for (const sourcePath of sourcePaths) {\n let flattened = sourcePath;\n mapped.add(flattened);\n while (flattened !== basePath) {\n flattened = removeFirstChild(flattened);\n mapped.add(flattened);\n }\n }\n }\n } else {\n const callback = expression.arguments[0];\n for (const path of collectMappedPaths(\n callee.object,\n callback &&\n callback.type !== 'ArgumentPlaceholder' &&\n callback.type !== 'SpreadElement'\n ? callback\n : undefined\n )) {\n mapped.add(removeFirstChild(path));\n }\n }\n addPaths(mapped);\n }\n if (method === 'reduce' || method === 'reduceRight') {\n const receiverPaths = collectPaths(callee.object, scope);\n addPaths(receiverPaths);\n if (receiverPaths.size > 0) result.add(basePath);\n const callback = expression.arguments[0];\n if (\n callback &&\n callback.type !== 'ArgumentPlaceholder' &&\n callback.type !== 'SpreadElement'\n ) {\n const callbackFunction = resolveCalledFunction(\n callback,\n scope,\n state,\n new Set()\n );\n if (callbackFunction) {\n if (\n functionMayReturnComponent(\n callbackFunction.node,\n callbackFunction.scope,\n state,\n new Set(),\n 'T'\n )\n ) {\n result.add(basePath);\n }\n for (const returned of collectFunctionReturnExpressions(\n callbackFunction.node,\n callbackFunction.scope,\n state\n )) {\n collect(returned.node, returned.scope, basePath);\n }\n }\n }\n for (const argument of expression.arguments) {\n if (argument.type === 'ArgumentPlaceholder') continue;\n const value =\n argument.type === 'SpreadElement' ? argument.argument : argument;\n addPaths(collectPaths(value, scope));\n if (expressionMayProduceComponent(value, scope, state, new Set(), 'T')) {\n result.add(basePath);\n }\n }\n }\n return result;\n}\n\n/**\n * Tracks containers whose immediate indexed/property value can be `<T>`.\n * Nested containers deliberately do not taint their parent: selecting from\n * `[[T]]` yields an array, and only a second selection can yield T.\n */\nfunction expressionMayProduceGTContainer(\n node: t.Node | null | undefined,\n scope: Scope,\n state: ScriptState,\n seenNodes: Set<t.Node>,\n seenBindings: Set<Binding>\n): boolean {\n const expression = unwrapExpression(node);\n if (!expression || seenNodes.has(expression)) return false;\n const nextNodes = new Set(seenNodes).add(expression);\n const exposedPath = readExposedMemberPath(expression, scope, state);\n if (exposedPath && state.analysis.possibleGTContainers.has(exposedPath)) {\n return true;\n }\n\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding) {\n return state.analysis.possibleGTContainers.has(expression.name);\n }\n const substitution = readParameterSubstitution(binding, state);\n if (substitution) {\n return expressionMayProduceGTContainer(\n substitution.node,\n substitution.scope,\n state,\n nextNodes,\n seenBindings\n );\n }\n const cacheable = state.parameterSubstitutions.length === 0;\n const cached = cacheable\n ? state.gtContainerPossibilities.get(binding)\n : undefined;\n if (cached !== undefined) return cached;\n if (seenBindings.has(binding)) return false;\n if (state.gtContainerPossibilitiesInProgress.has(binding)) return false;\n if (cacheable) state.gtContainerPossibilitiesInProgress.add(binding);\n try {\n const source = getBindingSource(binding);\n const finalAssignment = source\n ? undefined\n : readDefiniteFinalBindingAssignment(binding);\n const selected = source\n ? selectPatternExpression(\n source.pattern,\n source.expression.node,\n binding.identifier.name,\n source.expression.scope,\n source.expression.node.end ?? Number.POSITIVE_INFINITY,\n state\n )\n : finalAssignment;\n const result = Boolean(\n selected &&\n expressionMayProduceGTContainer(\n selected.node,\n selected.scope,\n state,\n nextNodes,\n new Set(seenBindings).add(binding)\n )\n );\n if (cacheable) state.gtContainerPossibilities.set(binding, result);\n return result;\n } finally {\n if (cacheable) state.gtContainerPossibilitiesInProgress.delete(binding);\n }\n }\n\n if (expression.type === 'ArrayExpression') {\n const entries = collectArrayEntries(\n expression,\n scope,\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY,\n state\n );\n if (entries) {\n return entries.some(\n (entry) =>\n entry &&\n expressionMayProduceComponent(\n entry.node,\n entry.scope,\n state,\n new Set(),\n 'T'\n )\n );\n }\n return expression.elements.some((element) => {\n if (!element) return false;\n return element.type === 'SpreadElement'\n ? expressionMayProduceGTContainer(\n element.argument,\n scope,\n state,\n nextNodes,\n seenBindings\n )\n : expressionMayProduceComponent(element, scope, state, new Set(), 'T');\n });\n }\n\n if (expression.type === 'ObjectExpression') {\n const entries = collectObjectEntries(\n expression,\n scope,\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY,\n state\n );\n if (\n [...entries.entries.values()].some((entry) =>\n entry.node.type === 'ObjectMethod'\n ? entry.node.kind === 'get' &&\n functionMayReturnComponent(\n entry.node,\n entry.scope,\n state,\n new Set(),\n 'T'\n )\n : expressionMayProduceComponent(\n entry.node,\n entry.scope,\n state,\n new Set(),\n 'T'\n )\n )\n ) {\n return true;\n }\n return expression.properties.some((property) => {\n if (property.type === 'SpreadElement') {\n return expressionMayProduceGTContainer(\n property.argument,\n scope,\n state,\n nextNodes,\n seenBindings\n );\n }\n return (\n property.computed &&\n readResolvedPropertyKey(property, scope, state) === undefined &&\n (property.type === 'ObjectMethod'\n ? property.kind === 'get' &&\n functionMayReturnComponent(property, scope, state, new Set(), 'T')\n : expressionMayProduceComponent(\n property.value,\n scope,\n state,\n new Set(),\n 'T'\n ))\n );\n });\n }\n\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const sources = resolveVueTemplateContainerSources(\n expression,\n scope,\n state\n );\n if (sources) {\n return sources.some((source) =>\n expressionMayProduceGTContainer(\n source.node,\n source.scope,\n state,\n nextNodes,\n seenBindings\n )\n );\n }\n const calleePath = readResolvedMemberPath(expression.callee, scope, state);\n if (calleePath && state.analysis.gtContainerFactories.has(calleePath)) {\n return true;\n }\n const called = resolveCalledFunction(\n expression.callee,\n scope,\n state,\n new Set()\n );\n if (called) {\n const mayReturnContainer = withCallParameterSubstitutions(\n expression,\n called,\n scope,\n state,\n () =>\n functionMayReturnGTContainer(\n called.node,\n called.scope,\n state,\n nextNodes\n )\n );\n if (mayReturnContainer) return true;\n }\n return callMayProduceGTContainer(\n expression,\n scope,\n state,\n nextNodes,\n seenBindings\n );\n }\n\n if (expression.type === 'ConditionalExpression') {\n const condition = readStaticFromScope(\n expression.test,\n scope,\n new Set(),\n expression.test.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n const alternatives = condition.ok\n ? [condition.value ? expression.consequent : expression.alternate]\n : [expression.consequent, expression.alternate];\n return alternatives.some((alternative) =>\n expressionMayProduceGTContainer(\n alternative,\n scope,\n state,\n nextNodes,\n seenBindings\n )\n );\n }\n if (expression.type === 'LogicalExpression') {\n const staticLeft = readStaticFromScope(\n expression.left,\n scope,\n new Set(),\n expression.left.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (staticLeft.ok) {\n const selectsRight =\n expression.operator === '??'\n ? staticLeft.value == null\n : expression.operator === '||'\n ? !staticLeft.value\n : Boolean(staticLeft.value);\n return selectsRight\n ? expressionMayProduceGTContainer(\n expression.right,\n scope,\n state,\n nextNodes,\n seenBindings\n )\n : expressionMayProduceGTContainer(\n expression.left,\n scope,\n state,\n nextNodes,\n seenBindings\n );\n }\n return (\n expressionMayProduceGTContainer(\n expression.left,\n scope,\n state,\n nextNodes,\n seenBindings\n ) ||\n expressionMayProduceGTContainer(\n expression.right,\n scope,\n state,\n nextNodes,\n seenBindings\n )\n );\n }\n if (expression.type === 'SequenceExpression') {\n return expressionMayProduceGTContainer(\n expression.expressions.at(-1),\n scope,\n state,\n nextNodes,\n seenBindings\n );\n }\n if (expression.type === 'AssignmentExpression') {\n return expressionMayProduceGTContainer(\n expression.right,\n scope,\n state,\n nextNodes,\n seenBindings\n );\n }\n if (\n expression.type === 'AwaitExpression' ||\n expression.type === 'YieldExpression'\n ) {\n return expressionMayProduceGTContainer(\n expression.argument,\n scope,\n state,\n nextNodes,\n seenBindings\n );\n }\n return false;\n}\n\n/** Models standard calls that preserve or create array registry values. */\nfunction callMayProduceGTContainer(\n call: t.CallExpression | t.OptionalCallExpression,\n scope: Scope,\n state: ScriptState,\n seenNodes: Set<t.Node>,\n seenBindings: Set<Binding>\n): boolean {\n const callee = unwrapExpression(call.callee);\n if (\n !callee ||\n (callee.type !== 'MemberExpression' &&\n callee.type !== 'OptionalMemberExpression')\n ) {\n return false;\n }\n const method = readResolvedMemberProperty(callee, scope, state);\n if (!method) return false;\n const first = call.arguments[0];\n const firstExpression =\n first &&\n first.type !== 'ArgumentPlaceholder' &&\n first.type !== 'SpreadElement'\n ? first\n : undefined;\n const receiverPath = readResolvedMemberPath(callee.object, scope, state);\n if (\n receiverPath === 'Array' &&\n method === 'from' &&\n !scope.getBinding('Array')\n ) {\n const sourceHasT = expressionMayProduceGTContainer(\n firstExpression,\n scope,\n state,\n seenNodes,\n seenBindings\n );\n const mapper = call.arguments[1];\n if (\n !mapper ||\n mapper.type === 'ArgumentPlaceholder' ||\n mapper.type === 'SpreadElement'\n ) {\n return sourceHasT;\n }\n const mapperFunction = resolveCalledFunction(\n mapper,\n scope,\n state,\n new Set()\n );\n if (!mapperFunction) return sourceHasT;\n return (\n (sourceHasT &&\n functionMayReturnParameter(\n mapperFunction.node,\n mapperFunction.scope,\n 0,\n state\n )) ||\n functionMayReturnComponent(\n mapperFunction.node,\n mapperFunction.scope,\n state,\n new Set(),\n 'T'\n )\n );\n }\n if (\n receiverPath === 'Object' &&\n method === 'assign' &&\n !scope.getBinding('Object')\n ) {\n return call.arguments.some(\n (argument) =>\n argument.type !== 'ArgumentPlaceholder' &&\n expressionMayProduceGTContainer(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n state,\n seenNodes,\n seenBindings\n )\n );\n }\n if (\n receiverPath === 'Object' &&\n ['freeze', 'seal', 'preventExtensions'].includes(method) &&\n !scope.getBinding('Object')\n ) {\n return expressionMayProduceGTContainer(\n firstExpression,\n scope,\n state,\n seenNodes,\n seenBindings\n );\n }\n const receiverHasT = expressionMayProduceGTContainer(\n callee.object,\n scope,\n state,\n seenNodes,\n seenBindings\n );\n if (\n ['filter', 'reverse', 'slice', 'sort', 'toReversed', 'toSorted'].includes(\n method\n )\n ) {\n return receiverHasT;\n }\n if (method === 'map') {\n const mapper = call.arguments[0];\n if (\n !mapper ||\n mapper.type === 'ArgumentPlaceholder' ||\n mapper.type === 'SpreadElement'\n ) {\n return receiverHasT;\n }\n const mapperFunction = resolveCalledFunction(\n mapper,\n scope,\n state,\n new Set()\n );\n if (!mapperFunction) return receiverHasT;\n return (\n (receiverHasT &&\n functionMayReturnParameter(\n mapperFunction.node,\n mapperFunction.scope,\n 0,\n state\n )) ||\n functionMayReturnComponent(\n mapperFunction.node,\n mapperFunction.scope,\n state,\n new Set(),\n 'T'\n )\n );\n }\n if (method === 'concat') {\n return (\n receiverHasT ||\n call.arguments.some(\n (argument) =>\n argument.type !== 'ArgumentPlaceholder' &&\n (expressionMayProduceComponent(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n state,\n new Set(),\n 'T'\n ) ||\n expressionMayProduceGTContainer(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n state,\n seenNodes,\n seenBindings\n ))\n )\n );\n }\n if (method === 'fill') {\n return Boolean(\n firstExpression &&\n expressionMayProduceComponent(\n firstExpression,\n scope,\n state,\n new Set(),\n 'T'\n )\n );\n }\n if (['with', 'toSpliced'].includes(method)) {\n const inserted =\n method === 'toSpliced'\n ? call.arguments.slice(2)\n : method === 'with'\n ? call.arguments.slice(1, 2)\n : [first];\n return (\n receiverHasT ||\n inserted.some(\n (argument) =>\n argument &&\n argument.type !== 'ArgumentPlaceholder' &&\n expressionMayProduceComponent(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n state,\n new Set(),\n 'T'\n )\n )\n );\n }\n return receiverHasT && method === 'copyWithin';\n}\n\n/** Collects container paths affected by in-place writes that can add T. */\nfunction bindingMutationGTContainerPaths(\n binding: Binding,\n state: ScriptState,\n seenAliases: Set<Binding> = new Set([binding])\n): Set<string> {\n const cached = state.mutationGTContainerPaths.get(binding);\n if (cached) return new Set(cached);\n if (state.mutationGTContainerPathsInProgress.has(binding)) return new Set();\n state.mutationGTContainerPathsInProgress.add(binding);\n const result = new Set<string>();\n const writePolicy = readBindingContainerWritePolicy(binding, state);\n const blocksWriteAtDepth = (depth: number): boolean =>\n writePolicy === 'readonly-deep' ||\n (writePolicy === 'readonly-shallow' && depth <= 1);\n const appendProperties = (properties: string[]): string =>\n properties.reduce(appendTemplatePath, binding.identifier.name);\n const collectAssignedContainer = (\n value: t.Node,\n scope: Scope,\n properties: string[]\n ): void => {\n for (const path of collectPossibleGTContainerPaths(\n value,\n scope,\n appendProperties(properties),\n state,\n new Set(),\n new Set([binding])\n )) {\n result.add(path);\n }\n };\n\n for (const reference of binding.referencePaths) {\n let current: NodePath<t.Node> = reference;\n const properties: string[] = [];\n while (\n current.parentPath &&\n (current.parentPath.isMemberExpression() ||\n current.parentPath.isOptionalMemberExpression()) &&\n current.parentPath.node.object === current.node\n ) {\n const property = readResolvedMemberProperty(\n current.parentPath.node,\n current.parentPath.scope,\n state\n );\n if (property === undefined) properties.push(unknownTemplatePathSegment);\n else properties.push(property);\n current = current.parentPath;\n }\n const parent = current.parentPath;\n if (parent?.isAssignmentExpression() && parent.node.left === current.node) {\n const target =\n properties[0] === 'value' ? properties.slice(1) : properties;\n if (blocksWriteAtDepth(target.length)) continue;\n if (\n target.length > 0 &&\n expressionMayProduceComponent(\n parent.node.right,\n parent.scope,\n state,\n new Set([binding]),\n 'T'\n )\n ) {\n result.add(appendProperties(target.slice(0, -1)));\n }\n collectAssignedContainer(parent.node.right, parent.scope, target);\n continue;\n }\n if (!parent?.isCallExpression()) continue;\n if (parent.node.callee !== current.node) {\n const callee = readResolvedMemberPath(\n parent.node.callee,\n parent.scope,\n state\n );\n const argumentIndex = parent.node.arguments.findIndex(\n (argument) => argument === reference.node\n );\n if (callee === 'Object.assign' && argumentIndex === 0) {\n if (blocksWriteAtDepth(1)) continue;\n for (const source of parent.node.arguments.slice(1)) {\n if (source.type === 'ArgumentPlaceholder') continue;\n collectAssignedContainer(\n source.type === 'SpreadElement' ? source.argument : source,\n parent.scope,\n []\n );\n }\n } else if (callee === 'Reflect.set' && argumentIndex === 0) {\n if (blocksWriteAtDepth(1)) continue;\n const key = parent.node.arguments[1];\n const value = parent.node.arguments[2];\n if (\n value &&\n value.type !== 'ArgumentPlaceholder' &&\n value.type !== 'SpreadElement'\n ) {\n const staticKey =\n key &&\n key.type !== 'ArgumentPlaceholder' &&\n key.type !== 'SpreadElement'\n ? readStaticFromScope(\n key,\n parent.scope,\n new Set(),\n key.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n )\n : undefined;\n const property =\n staticKey?.ok &&\n (typeof staticKey.value === 'string' ||\n typeof staticKey.value === 'number')\n ? String(staticKey.value)\n : unknownTemplatePathSegment;\n if (\n expressionMayProduceComponent(\n value,\n parent.scope,\n state,\n new Set([binding]),\n 'T'\n )\n ) {\n result.add(binding.identifier.name);\n }\n collectAssignedContainer(value, parent.scope, [property]);\n }\n }\n continue;\n }\n const method = properties.at(-1);\n const target = properties\n .slice(0, -1)\n .filter((property, index) => !(index === 0 && property === 'value'));\n if (blocksWriteAtDepth(target.length + 1)) continue;\n const argumentsToCheck =\n method === 'splice'\n ? parent.node.arguments.slice(2)\n : method === 'fill'\n ? parent.node.arguments.slice(0, 1)\n : method === 'push' || method === 'unshift'\n ? parent.node.arguments\n : [];\n for (const argument of argumentsToCheck) {\n if (argument.type === 'ArgumentPlaceholder') continue;\n const value =\n argument.type === 'SpreadElement' ? argument.argument : argument;\n if (\n expressionMayProduceComponent(\n value,\n parent.scope,\n state,\n new Set([binding]),\n 'T'\n )\n ) {\n result.add(appendProperties(target));\n }\n collectAssignedContainer(value, parent.scope, [\n ...target,\n unknownTemplatePathSegment,\n ]);\n }\n }\n for (const reference of binding.referencePaths) {\n const declarator = reference.parentPath;\n if (\n !declarator?.isVariableDeclarator() ||\n declarator.node.init !== reference.node ||\n declarator.node.id.type !== 'Identifier'\n ) {\n continue;\n }\n const alias = declarator.scope.getBinding(declarator.node.id.name);\n if (!alias || seenAliases.has(alias)) continue;\n const aliasPaths = bindingMutationGTContainerPaths(\n alias,\n state,\n new Set(seenAliases).add(alias)\n );\n for (const path of aliasPaths) {\n result.add(\n path === alias.identifier.name\n ? binding.identifier.name\n : `${binding.identifier.name}${path.slice(alias.identifier.name.length)}`\n );\n }\n }\n state.mutationGTContainerPaths.set(binding, new Set(result));\n state.mutationGTContainerPathsInProgress.delete(binding);\n return result;\n}\n\n/** Detects a component alias whose value escaped the safe static subset. */\nfunction bindingMayReferenceComponent(\n binding: Binding,\n state: ScriptState,\n kind?: ComponentKind\n): boolean {\n const cacheKey = kind ?? 'any';\n const cached =\n state.parameterSubstitutions.length === 0\n ? state.componentPossibilities.get(binding)?.get(cacheKey)\n : undefined;\n if (cached !== undefined) return cached;\n const declaration = binding.path.node;\n const result =\n declaration.type === 'VariableDeclarator' &&\n declaration.init &&\n patternMayProduceComponent(\n declaration.id,\n declaration.init,\n binding.identifier.name,\n binding.path.scope,\n state,\n new Set([binding]),\n kind\n )\n ? true\n : binding.constantViolations.some((violation) =>\n constantViolationMayAssignComponent(\n violation,\n binding.identifier.name,\n state,\n new Set([binding]),\n kind\n )\n );\n if (state.parameterSubstitutions.length === 0) {\n const possibilities =\n state.componentPossibilities.get(binding) ??\n new Map<ComponentKind | 'any', boolean>();\n possibilities.set(cacheKey, result);\n state.componentPossibilities.set(binding, possibilities);\n }\n return result;\n}\n\n/**\n * Proves a const direct-alias chain cannot itself be a string translator.\n *\n * Container contents may still mutate, but an array or object never becomes\n * callable. Caching only this positive proof avoids memoizing an unresolved\n * false result that could depend on cross-block or callback analysis.\n */\nfunction bindingIsDefinitelyNotStringFunction(\n binding: Binding,\n state: ScriptState,\n seen: Set<Binding>\n): boolean {\n if (state.definiteNonStringFunctionBindings.has(binding)) return true;\n if (\n !binding.constant ||\n seen.has(binding) ||\n state.parameterSubstitutions.length > 0 ||\n state.definiteNonStringFunctionBindingsInProgress.has(binding)\n ) {\n return false;\n }\n const source = getBindingSource(binding);\n if (source?.pattern.type !== 'Identifier') return false;\n const expression = unwrapExpression(source.expression.node);\n if (!expression) return false;\n\n state.definiteNonStringFunctionBindingsInProgress.add(binding);\n try {\n const known = resolveKnownExpression(\n expression,\n source.expression.scope,\n state,\n new Set([binding])\n );\n let result = Boolean(known && known.type !== 'string');\n if (!known && expression.type === 'Identifier') {\n const target = source.expression.scope.getBinding(expression.name);\n result = Boolean(\n target &&\n bindingIsDefinitelyNotStringFunction(\n target,\n state,\n new Set(seen).add(binding)\n )\n );\n } else if (\n !known &&\n (expression.type === 'ArrayExpression' ||\n expression.type === 'ObjectExpression')\n ) {\n result = true;\n }\n if (result) state.definiteNonStringFunctionBindings.add(binding);\n return result;\n } finally {\n state.definiteNonStringFunctionBindingsInProgress.delete(binding);\n }\n}\n\n/** Detects a string translator alias whose value escaped exact analysis. */\nfunction bindingMayReferenceStringFunction(\n binding: Binding,\n state: ScriptState\n): boolean {\n if (bindingIsDefinitelyNotStringFunction(binding, state, new Set())) {\n return false;\n }\n const finalAssignment = readDefiniteFinalBindingAssignment(binding);\n if (finalAssignment) {\n return expressionMayProduceStringFunction(\n finalAssignment.node,\n finalAssignment.scope,\n state,\n new Set([binding])\n );\n }\n const declaration = binding.path.node;\n if (\n declaration.type === 'VariableDeclarator' &&\n declaration.init &&\n patternMayProduceStringFunction(\n declaration.id,\n declaration.init,\n binding.identifier.name,\n binding.path.scope,\n state,\n new Set([binding])\n )\n ) {\n return true;\n }\n return binding.constantViolations.some(\n (violation) =>\n violation.isAssignmentExpression() &&\n patternContains(violation.node.left, binding.identifier.name) &&\n expressionMayProduceStringFunction(\n violation.node.right,\n violation.scope,\n state,\n new Set([binding])\n )\n );\n}\n\n/** Tracks expressions whose resulting value can be a gt-vue string function. */\nfunction expressionMayProduceStringFunction(\n node: t.Node | null | undefined,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>\n): boolean {\n if (state.analysis.stats) state.analysis.stats.stringFunctionVisits += 1;\n const expression = unwrapExpression(node);\n if (!expression) return false;\n const resolved = resolveKnownExpression(expression, scope, state, new Set());\n if (resolved?.type === 'string') return true;\n const exposedPath = readExposedMemberPath(expression, scope, state);\n if (exposedPath && state.analysis.uncertainStringFunctions.has(exposedPath)) {\n return true;\n }\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding) {\n return state.analysis.uncertainStringFunctions.has(expression.name);\n }\n const substitution = readParameterSubstitution(binding, state);\n if (substitution) {\n return expressionMayProduceStringFunction(\n substitution.node,\n substitution.scope,\n state,\n seen\n );\n }\n if (bindingIsDefinitelyNotStringFunction(binding, state, seen)) {\n return false;\n }\n if (seen.has(binding)) return false;\n const nextSeen = new Set(seen).add(binding);\n const declaration = binding.path.node;\n if (\n declaration.type === 'VariableDeclarator' &&\n declaration.init &&\n patternMayProduceStringFunction(\n declaration.id,\n declaration.init,\n binding.identifier.name,\n binding.path.scope,\n state,\n nextSeen\n )\n ) {\n return true;\n }\n return binding.constantViolations.some(\n (violation) =>\n violation.isAssignmentExpression() &&\n patternContains(violation.node.left, binding.identifier.name) &&\n expressionMayProduceStringFunction(\n violation.node.right,\n violation.scope,\n state,\n nextSeen\n )\n );\n }\n if (\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ) {\n const property = readResolvedMemberProperty(expression, scope, state);\n if (!property) return false;\n const entry = readObjectEntry(\n expression.object,\n property,\n scope,\n new Set(),\n expression.end ?? Number.POSITIVE_INFINITY,\n state\n );\n if (\n entry.status === 'known' &&\n expressionMayProduceStringFunction(\n entry.expression.node,\n entry.expression.scope,\n state,\n seen\n )\n ) {\n return true;\n }\n return objectGetterMayProduceStringFunction(\n expression.object,\n property,\n scope,\n state,\n seen\n );\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const callee = resolveKnownExpression(\n expression.callee,\n scope,\n state,\n new Set()\n );\n const firstArgument = expression.arguments[0];\n const first =\n firstArgument &&\n firstArgument.type !== 'ArgumentPlaceholder' &&\n firstArgument.type !== 'SpreadElement'\n ? firstArgument\n : undefined;\n if (callee?.type === 'vue-wrapper') {\n return callee.kind === 'computed'\n ? computedSourceMayProduceStringFunction(first, scope, state, seen)\n : expressionMayProduceStringFunction(first, scope, state, seen);\n }\n const called = resolveCalledFunction(\n expression.callee,\n scope,\n state,\n new Set()\n );\n if (called) {\n const mayReturnStringFunction = withCallParameterSubstitutions(\n expression,\n called,\n scope,\n state,\n () =>\n functionMayReturnStringFunction(\n called.node,\n called.scope,\n state,\n seen\n )\n );\n if (mayReturnStringFunction) return true;\n }\n return expression.arguments.some(\n (argument) =>\n argument.type !== 'ArgumentPlaceholder' &&\n (expressionMayProduceStringFunction(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n state,\n seen\n ) ||\n containerMayContainStringFunction(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n state,\n new Set()\n ))\n );\n }\n if (expression.type === 'ConditionalExpression') {\n return (\n expressionMayProduceStringFunction(\n expression.consequent,\n scope,\n state,\n seen\n ) ||\n expressionMayProduceStringFunction(\n expression.alternate,\n scope,\n state,\n seen\n )\n );\n }\n if (expression.type === 'LogicalExpression') {\n return (\n expressionMayProduceStringFunction(expression.left, scope, state, seen) ||\n expressionMayProduceStringFunction(expression.right, scope, state, seen)\n );\n }\n if (expression.type === 'SequenceExpression') {\n return expressionMayProduceStringFunction(\n expression.expressions.at(-1),\n scope,\n state,\n seen\n );\n }\n if (expression.type === 'AssignmentExpression') {\n return expressionMayProduceStringFunction(\n expression.right,\n scope,\n state,\n seen\n );\n }\n if (\n expression.type === 'AwaitExpression' ||\n expression.type === 'YieldExpression'\n ) {\n return expressionMayProduceStringFunction(\n expression.argument,\n scope,\n state,\n seen\n );\n }\n return false;\n}\n\n/** Tracks a destructured string-function value, including rest bindings. */\nfunction patternMayProduceStringFunction(\n pattern: t.Node,\n valueNode: t.Node,\n targetName: string,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>\n): boolean {\n const exposedBase = readExposedMemberPath(valueNode, scope, state);\n const exposedPath = exposedBase\n ? readPatternExposedMemberPath(\n pattern,\n targetName,\n exposedBase,\n scope,\n state\n )\n : undefined;\n if (\n exposedPath &&\n (state.analysis.values.get(exposedPath)?.type === 'string' ||\n state.analysis.uncertainStringFunctions.has(exposedPath))\n ) {\n return true;\n }\n if (pattern.type === 'Identifier') {\n return (\n pattern.name === targetName &&\n expressionMayProduceStringFunction(valueNode, scope, state, seen)\n );\n }\n if (pattern.type === 'RestElement') {\n return false;\n }\n if (pattern.type === 'AssignmentPattern') {\n return (\n patternContains(pattern.left, targetName) &&\n (expressionMayProduceStringFunction(valueNode, scope, state, seen) ||\n (expressionMayBeUndefined(valueNode, scope, state, new Set()) &&\n expressionMayProduceStringFunction(\n pattern.right,\n scope,\n state,\n seen\n )))\n );\n }\n if (pattern.type === 'ObjectPattern') {\n for (const property of pattern.properties) {\n const containsTarget =\n property.type === 'RestElement'\n ? patternContains(property.argument, targetName)\n : patternContains(property.value, targetName);\n if (!containsTarget) continue;\n if (property.type === 'RestElement') {\n return false;\n }\n const key = readResolvedPropertyKey(property, scope, state);\n if (key === undefined) return true;\n const entry = readObjectEntry(\n valueNode,\n key,\n scope,\n new Set(),\n valueNode.end ?? Number.POSITIVE_INFINITY,\n state\n );\n return entry.status === 'known'\n ? patternMayProduceStringFunction(\n property.value,\n entry.expression.node,\n targetName,\n entry.expression.scope,\n state,\n seen\n )\n : objectGetterMayProduceStringFunction(\n valueNode,\n key,\n scope,\n state,\n seen\n ) ||\n expressionMayProduceStringFunction(\n property.value.type === 'AssignmentPattern'\n ? property.value.right\n : undefined,\n scope,\n state,\n seen\n );\n }\n return false;\n }\n if (pattern.type === 'ArrayPattern') {\n for (let index = 0; index < pattern.elements.length; index += 1) {\n const target = pattern.elements[index];\n if (!target || !patternContains(target, targetName)) continue;\n if (target.type === 'RestElement') {\n return false;\n }\n const entry = readArrayEntry(\n valueNode,\n index,\n scope,\n new Set(),\n valueNode.end ?? Number.POSITIVE_INFINITY,\n state\n );\n return entry.status === 'known'\n ? patternMayProduceStringFunction(\n target,\n entry.expression.node,\n targetName,\n entry.expression.scope,\n state,\n seen\n )\n : target.type === 'AssignmentPattern' &&\n expressionMayProduceStringFunction(\n target.right,\n scope,\n state,\n seen\n );\n }\n }\n return false;\n}\n\n/** Finds string-function values nested in data containers. */\nfunction containerMayContainStringFunction(\n node: t.Node,\n scope: Scope,\n state: ScriptState,\n seen: Set<t.Node>\n): boolean {\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return false;\n const nextSeen = new Set(seen).add(expression);\n if (expression.type === 'ObjectExpression') {\n return expression.properties.some((property) => {\n if (property.type === 'SpreadElement') {\n return containerMayContainStringFunction(\n property.argument,\n scope,\n state,\n nextSeen\n );\n }\n if (property.type === 'ObjectMethod') {\n return (\n property.kind === 'get' &&\n functionMayReturnStringFunction(property, scope, state, new Set())\n );\n }\n return (\n expressionMayProduceStringFunction(\n property.value,\n scope,\n state,\n new Set()\n ) ||\n containerMayContainStringFunction(\n property.value,\n scope,\n state,\n nextSeen\n )\n );\n });\n }\n if (expression.type === 'ArrayExpression') {\n return expression.elements.some((element) => {\n if (!element) return false;\n const value =\n element.type === 'SpreadElement' ? element.argument : element;\n return (\n expressionMayProduceStringFunction(value, scope, state, new Set()) ||\n containerMayContainStringFunction(value, scope, state, nextSeen)\n );\n });\n }\n return false;\n}\n\n/** Tracks assignment and for-of writes into one top-level component alias. */\nfunction constantViolationMayAssignComponent(\n violation: NodePath<t.Node>,\n targetName: string,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n if (\n violation.isAssignmentExpression() &&\n patternContains(violation.node.left, targetName)\n ) {\n return expressionMayProduceComponent(\n violation.node.right,\n violation.scope,\n state,\n seen,\n kind\n );\n }\n if (\n violation.isForOfStatement() &&\n patternContains(violation.node.left, targetName)\n ) {\n return (\n expressionMayProduceComponent(\n violation.node.right,\n violation.scope,\n state,\n seen,\n kind\n ) ||\n containerMayContainComponent(\n violation.node.right,\n violation.scope,\n state,\n new Set(),\n kind\n )\n );\n }\n return false;\n}\n\n/** Tracks expressions whose resulting identity can be a GT/Vue component. */\nfunction expressionMayProduceComponent(\n node: t.Node | null | undefined,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n const expression = unwrapExpression(node);\n if (!expression) return false;\n const resolved = resolveKnownExpression(expression, scope, state, new Set());\n if (resolved?.type === 'component') {\n return kind !== 'vue' && (kind !== 'T' || resolved.name === 'T');\n }\n if (resolved?.type === 'vue-builtin') {\n return kind !== 'translation' && kind !== 'T';\n }\n const exposedPath = readExposedMemberPath(expression, scope, state);\n if (\n exposedPath &&\n (kind === 'translation' || kind === 'T'\n ? state.analysis.uncertainGTComponents.has(exposedPath)\n : state.analysis.uncertainComponents.has(exposedPath))\n ) {\n return true;\n }\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding) {\n return kind === 'translation' || kind === 'T'\n ? state.analysis.uncertainGTComponents.has(expression.name)\n : state.analysis.uncertainComponents.has(expression.name);\n }\n const substitution = readParameterSubstitution(binding, state);\n if (substitution) {\n return expressionMayProduceComponent(\n substitution.node,\n substitution.scope,\n state,\n seen,\n kind\n );\n }\n const cacheKey = kind ?? 'any';\n if (state.parameterSubstitutions.length === 0) {\n const cached = state.componentPossibilities.get(binding)?.get(cacheKey);\n if (cached !== undefined) return cached;\n }\n if (seen.has(binding)) return false;\n const nextSeen = new Set(seen).add(binding);\n const declaration = binding.path.node;\n const result =\n declaration.type === 'VariableDeclarator' &&\n !!declaration.init &&\n patternMayProduceComponent(\n declaration.id,\n declaration.init,\n binding.identifier.name,\n binding.path.scope,\n state,\n nextSeen,\n kind\n )\n ? true\n : bindingIterationMayProduceComponent(binding, state, nextSeen, kind)\n ? true\n : binding.constantViolations.some((violation) =>\n constantViolationMayAssignComponent(\n violation,\n binding.identifier.name,\n state,\n nextSeen,\n kind\n )\n );\n if (state.parameterSubstitutions.length === 0) {\n const possibilities =\n state.componentPossibilities.get(binding) ??\n new Map<ComponentKind | 'any', boolean>();\n possibilities.set(cacheKey, result);\n state.componentPossibilities.set(binding, possibilities);\n }\n return result;\n }\n if (\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ) {\n const property = readResolvedMemberProperty(expression, scope, state);\n const namespace = resolveNamespaceOrigin(\n expression.object,\n scope,\n state,\n new Set()\n );\n const member =\n namespace && property\n ? knownExport(namespace.source, property)\n : undefined;\n if (member?.type === 'component') {\n return kind !== 'vue' && (kind !== 'T' || member.name === 'T');\n }\n if (member?.type === 'vue-builtin') {\n return kind !== 'translation' && kind !== 'T';\n }\n const arrayIndex = property?.match(/^(0|[1-9]\\d*)$/)\n ? Number(property)\n : undefined;\n if (\n arrayIndex !== undefined &&\n arrayElementMayProduceComponent(\n expression.object,\n arrayIndex,\n scope,\n state,\n seen,\n kind\n )\n ) {\n return true;\n }\n return Boolean(\n property &&\n objectPropertyMayProduceComponent(\n expression.object,\n property,\n scope,\n state,\n seen,\n kind\n )\n );\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const callee = resolveKnownExpression(\n expression.callee,\n scope,\n state,\n new Set()\n );\n const firstArgument = expression.arguments[0];\n const first =\n firstArgument &&\n firstArgument.type !== 'ArgumentPlaceholder' &&\n firstArgument.type !== 'SpreadElement'\n ? firstArgument\n : undefined;\n if (callee?.type === 'identity' || callee?.type === 'defineComponent') {\n return expressionMayProduceComponent(first, scope, state, seen, kind);\n }\n if (callee?.type === 'vue-wrapper') {\n return callee.kind === 'computed'\n ? computedSourceMayProduceComponent(first, scope, state, seen, kind)\n : expressionMayProduceComponent(first, scope, state, seen, kind);\n }\n const calledFunction = resolveCalledFunction(\n expression.callee,\n scope,\n state,\n new Set()\n );\n if (calledFunction) {\n const mayReturnComponent = withCallParameterSubstitutions(\n expression,\n calledFunction,\n scope,\n state,\n () =>\n functionMayReturnComponent(\n calledFunction.node,\n calledFunction.scope,\n state,\n seen,\n kind\n )\n );\n if (mayReturnComponent) return true;\n }\n const memberCallee = unwrapExpression(expression.callee);\n if (\n memberCallee &&\n (memberCallee.type === 'MemberExpression' ||\n memberCallee.type === 'OptionalMemberExpression') &&\n ['reduce', 'reduceRight'].includes(\n readResolvedMemberProperty(memberCallee, scope, state) ?? ''\n )\n ) {\n const reduced = reduceCallMayProduceComponent(\n expression,\n memberCallee,\n scope,\n state,\n seen,\n kind\n );\n if (reduced !== undefined) return reduced;\n }\n return expression.arguments.some(\n (argument) =>\n argument.type !== 'ArgumentPlaceholder' &&\n expressionMayProduceComponent(\n argument.type === 'SpreadElement' ? argument.argument : argument,\n scope,\n state,\n seen,\n kind\n )\n );\n }\n if (expression.type === 'ConditionalExpression') {\n const condition = readStaticFromScope(\n expression.test,\n scope,\n new Set(),\n expression.test.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (condition.ok) {\n return expressionMayProduceComponent(\n condition.value ? expression.consequent : expression.alternate,\n scope,\n state,\n seen,\n kind\n );\n }\n return (\n expressionMayProduceComponent(\n expression.consequent,\n scope,\n state,\n seen,\n kind\n ) ||\n expressionMayProduceComponent(\n expression.alternate,\n scope,\n state,\n seen,\n kind\n )\n );\n }\n if (expression.type === 'LogicalExpression') {\n const left = resolveKnownExpression(\n expression.left,\n scope,\n state,\n new Set()\n );\n if (left) {\n return expression.operator === '&&'\n ? expressionMayProduceComponent(\n expression.right,\n scope,\n state,\n seen,\n kind\n )\n : left.type === 'component'\n ? kind !== 'vue' && (kind !== 'T' || left.name === 'T')\n : left.type === 'vue-builtin' &&\n kind !== 'translation' &&\n kind !== 'T';\n }\n const staticLeft = readStaticFromScope(\n expression.left,\n scope,\n new Set(),\n expression.left.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n if (staticLeft.ok) {\n const selectsRight =\n expression.operator === '??'\n ? staticLeft.value == null\n : expression.operator === '||'\n ? !staticLeft.value\n : Boolean(staticLeft.value);\n return selectsRight\n ? expressionMayProduceComponent(\n expression.right,\n scope,\n state,\n seen,\n kind\n )\n : false;\n }\n return (\n expressionMayProduceComponent(\n expression.left,\n scope,\n state,\n seen,\n kind\n ) ||\n expressionMayProduceComponent(expression.right, scope, state, seen, kind)\n );\n }\n if (expression.type === 'SequenceExpression') {\n return expressionMayProduceComponent(\n expression.expressions.at(-1),\n scope,\n state,\n seen,\n kind\n );\n }\n if (expression.type === 'AssignmentExpression') {\n return expressionMayProduceComponent(\n expression.right,\n scope,\n state,\n seen,\n kind\n );\n }\n if (\n expression.type === 'AwaitExpression' ||\n expression.type === 'YieldExpression'\n ) {\n return expressionMayProduceComponent(\n expression.argument,\n scope,\n state,\n seen,\n kind\n );\n }\n return false;\n}\n\n/** Models finite reduce calls whose callback invocation order is knowable. */\nfunction reduceCallMayProduceComponent(\n call: t.CallExpression | t.OptionalCallExpression,\n callee: t.MemberExpression | t.OptionalMemberExpression,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean | undefined {\n const method = readResolvedMemberProperty(callee, scope, state);\n if (method !== 'reduce' && method !== 'reduceRight') return undefined;\n const callbackNode = call.arguments[0];\n if (\n !callbackNode ||\n callbackNode.type === 'ArgumentPlaceholder' ||\n callbackNode.type === 'SpreadElement'\n ) {\n return undefined;\n }\n const callback = resolveCalledFunction(callbackNode, scope, state, new Set());\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n new Set()\n );\n if (!callback || !entries || entries.some((entry) => !entry)) {\n return undefined;\n }\n const ordered = entries.map((entry, index) => ({ entry: entry!, index }));\n if (method === 'reduceRight') ordered.reverse();\n const initialArgument = call.arguments[1];\n const initial =\n initialArgument &&\n initialArgument.type !== 'ArgumentPlaceholder' &&\n initialArgument.type !== 'SpreadElement'\n ? { node: initialArgument, scope }\n : ordered.shift()?.entry;\n if (!initial) return false;\n if (ordered.length === 0) {\n return expressionMayProduceComponent(\n initial.node,\n initial.scope,\n state,\n seen,\n kind\n );\n }\n const finalValue = ordered.at(-1)!;\n const source = { node: callee.object, scope };\n const invoke = (accumulator: ScopedExpression): boolean =>\n withFunctionParameterSubstitutions(\n callback,\n [\n accumulator,\n finalValue.entry,\n {\n node: {\n type: 'NumericLiteral',\n value: finalValue.index,\n } as t.NumericLiteral,\n scope,\n },\n source,\n ],\n state,\n () =>\n functionMayReturnComponent(\n callback.node,\n callback.scope,\n state,\n seen,\n kind\n )\n );\n if (ordered.length === 1) return invoke(initial);\n if (functionMayReturnParameter(callback.node, callback.scope, 1, state)) {\n return expressionMayProduceComponent(\n finalValue.entry.node,\n finalValue.entry.scope,\n state,\n seen,\n kind\n );\n }\n if (functionMayReturnParameter(callback.node, callback.scope, 0, state)) {\n return expressionMayProduceComponent(\n initial.node,\n initial.scope,\n state,\n seen,\n kind\n );\n }\n return invoke(initial);\n}\n\n/** Tracks a lexical variable populated from a for-of iterable. */\nfunction bindingIterationMayProduceComponent(\n binding: Binding,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n const declaration = binding.path.node;\n if (\n declaration.type !== 'VariableDeclarator' ||\n declaration.init ||\n !patternContains(declaration.id, binding.identifier.name)\n ) {\n return false;\n }\n const declarationPath = state.paths.get(declaration);\n const loop = declarationPath?.parentPath?.parentPath;\n if (!loop?.isForOfStatement()) return false;\n return (\n expressionMayProduceComponent(\n loop.node.right,\n loop.scope,\n state,\n seen,\n kind\n ) ||\n containerMayContainComponent(\n loop.node.right,\n loop.scope,\n state,\n new Set(),\n kind\n )\n );\n}\n\n/** Finds component identities nested in a data container, not function bodies. */\nfunction containerMayContainComponent(\n node: t.Node,\n scope: Scope,\n state: ScriptState,\n seen: Set<t.Node>,\n kind?: ComponentKind\n): boolean {\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return false;\n const nextSeen = new Set(seen).add(expression);\n if (expression.type === 'ObjectExpression') {\n return expression.properties.some((property) => {\n if (property.type === 'SpreadElement') {\n return containerMayContainComponent(\n property.argument,\n scope,\n state,\n nextSeen,\n kind\n );\n }\n if (property.type === 'ObjectMethod') {\n return (\n property.kind === 'get' &&\n functionMayReturnComponent(property, scope, state, new Set(), kind)\n );\n }\n return (\n expressionMayProduceComponent(\n property.value,\n scope,\n state,\n new Set(),\n kind\n ) ||\n containerMayContainComponent(\n property.value,\n scope,\n state,\n nextSeen,\n kind\n )\n );\n });\n }\n if (expression.type === 'ArrayExpression') {\n return expression.elements.some((element) => {\n if (!element) return false;\n const value =\n element.type === 'SpreadElement' ? element.argument : element;\n return (\n expressionMayProduceComponent(value, scope, state, new Set(), kind) ||\n containerMayContainComponent(value, scope, state, nextSeen, kind)\n );\n });\n }\n return false;\n}\n\n/** Tracks one array element without treating sibling values as identity. */\nfunction arrayElementMayProduceComponent(\n node: t.Node,\n index: number,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n const expression = unwrapExpression(node);\n const entry = readArrayEntry(\n node,\n index,\n scope,\n new Set(),\n expression?.end ?? Number.POSITIVE_INFINITY,\n state\n );\n if (entry.status === 'known') {\n return expressionMayProduceComponent(\n entry.expression.node,\n entry.expression.scope,\n state,\n seen,\n kind\n );\n }\n return findArrayElementOrigins(node, index, scope, new Set(), new Set()).some(\n (origin) =>\n expressionMayProduceComponent(\n origin.node,\n origin.scope,\n state,\n seen,\n kind\n )\n );\n}\n\n/** Finds an array initializer even when its retained container later escapes. */\nfunction findArrayElementOrigins(\n node: t.Node,\n index: number,\n scope: Scope,\n seenBindings: Set<Binding>,\n seenNodes: Set<t.Node>\n): ScopedExpression[] {\n const expression = unwrapExpression(node);\n if (!expression || seenNodes.has(expression)) return [];\n const nextNodes = new Set(seenNodes).add(expression);\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding || seenBindings.has(binding)) return [];\n const declaration = binding.path.node;\n return declaration.type === 'VariableDeclarator' && declaration.init\n ? findArrayElementOrigins(\n declaration.init,\n index,\n binding.path.scope,\n new Set(seenBindings).add(binding),\n nextNodes\n )\n : [];\n }\n if (\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ) {\n const member = readMemberProperty(expression);\n const memberIndex = member?.match(/^(0|[1-9]\\d*)$/)\n ? Number(member)\n : undefined;\n if (memberIndex === undefined) return [];\n return findArrayElementOrigins(\n expression.object,\n memberIndex,\n scope,\n seenBindings,\n nextNodes\n ).flatMap((origin) =>\n findArrayElementOrigins(\n origin.node,\n index,\n origin.scope,\n seenBindings,\n nextNodes\n )\n );\n }\n if (expression.type !== 'ArrayExpression') return [];\n const element = expression.elements[index];\n return element && element.type !== 'SpreadElement'\n ? [{ node: element, scope }]\n : [];\n}\n\n/** Tracks a destructured value without treating sibling object data as identity. */\nfunction patternMayProduceComponent(\n pattern: t.Node,\n valueNode: t.Node,\n targetName: string,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n const exposedBase = readExposedMemberPath(valueNode, scope, state);\n const exposedPath = exposedBase\n ? readPatternExposedMemberPath(\n pattern,\n targetName,\n exposedBase,\n scope,\n state\n )\n : undefined;\n const exposed = exposedPath\n ? state.analysis.values.get(exposedPath)\n : undefined;\n if (exposed?.type === 'component') {\n return kind !== 'vue' && (kind !== 'T' || exposed.name === 'T');\n }\n if (exposed?.type === 'vue-builtin') {\n return kind !== 'translation' && kind !== 'T';\n }\n if (\n exposedPath &&\n (kind === 'translation' || kind === 'T'\n ? state.analysis.uncertainGTComponents.has(exposedPath)\n : state.analysis.uncertainComponents.has(exposedPath))\n ) {\n return true;\n }\n if (pattern.type === 'Identifier') {\n return (\n pattern.name === targetName &&\n expressionMayProduceComponent(valueNode, scope, state, seen, kind)\n );\n }\n if (pattern.type === 'RestElement') {\n return false;\n }\n if (pattern.type === 'AssignmentPattern') {\n return patternContains(pattern.left, targetName)\n ? expressionMayProduceComponent(valueNode, scope, state, seen, kind) ||\n (expressionMayBeUndefined(valueNode, scope, state, new Set()) &&\n expressionMayProduceComponent(\n pattern.right,\n scope,\n state,\n seen,\n kind\n ))\n : false;\n }\n if (pattern.type === 'ObjectPattern') {\n for (const property of pattern.properties) {\n if (\n property.type === 'RestElement' &&\n patternContains(property.argument, targetName)\n ) {\n return false;\n }\n if (\n property.type !== 'ObjectProperty' ||\n !patternContains(property.value, targetName)\n ) {\n continue;\n }\n const key = readResolvedPropertyKey(property, scope, state);\n if (key === undefined) {\n return patternDefaultMayProduceComponent(\n property.value,\n targetName,\n scope,\n state,\n seen,\n kind\n );\n }\n const namespace = resolveNamespaceOrigin(\n valueNode,\n scope,\n state,\n new Set()\n );\n const exported = namespace\n ? knownExport(namespace.source, key)\n : undefined;\n if (\n exported?.type === 'component' &&\n kind !== 'vue' &&\n (kind !== 'T' || exported.name === 'T')\n ) {\n return true;\n }\n if (\n exported?.type === 'vue-builtin' &&\n kind !== 'translation' &&\n kind !== 'T'\n )\n return true;\n const entry = readObjectEntry(\n valueNode,\n key,\n scope,\n new Set(),\n valueNode.end ?? Number.POSITIVE_INFINITY,\n state\n );\n if (entry.status === 'known') {\n return patternMayProduceComponent(\n property.value,\n entry.expression.node,\n targetName,\n entry.expression.scope,\n state,\n seen,\n kind\n );\n }\n if (\n findObjectPropertyOrigins(\n valueNode,\n key,\n scope,\n new Set(),\n new Set(),\n state\n ).some((origin) =>\n patternMayProduceComponent(\n property.value,\n origin.node,\n targetName,\n origin.scope,\n state,\n seen,\n kind\n )\n )\n ) {\n return true;\n }\n return (\n objectGetterMayProduceComponent(\n valueNode,\n key,\n scope,\n state,\n seen,\n kind\n ) ||\n patternDefaultMayProduceComponent(\n property.value,\n targetName,\n scope,\n state,\n seen,\n kind\n )\n );\n }\n return false;\n }\n if (pattern.type === 'ArrayPattern') {\n for (let index = 0; index < pattern.elements.length; index += 1) {\n const target = pattern.elements[index];\n if (!target || !patternContains(target, targetName)) continue;\n if (target.type === 'RestElement') {\n return false;\n }\n const entry = readArrayEntry(\n valueNode,\n index,\n scope,\n new Set(),\n valueNode.end ?? Number.POSITIVE_INFINITY,\n state\n );\n if (entry.status === 'known') {\n return patternMayProduceComponent(\n target,\n entry.expression.node,\n targetName,\n entry.expression.scope,\n state,\n seen,\n kind\n );\n }\n return (\n findArrayElementOrigins(\n valueNode,\n index,\n scope,\n new Set(),\n new Set()\n ).some((origin) =>\n patternMayProduceComponent(\n target,\n origin.node,\n targetName,\n origin.scope,\n state,\n seen,\n kind\n )\n ) ||\n patternDefaultMayProduceComponent(\n target,\n targetName,\n scope,\n state,\n seen,\n kind\n )\n );\n }\n }\n return false;\n}\n\n/** Tracks a destructuring default when the selected source value is unknown. */\nfunction patternDefaultMayProduceComponent(\n pattern: t.Node,\n targetName: string,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n if (pattern.type === 'AssignmentPattern') {\n return (\n patternContains(pattern.left, targetName) &&\n expressionMayProduceComponent(pattern.right, scope, state, seen, kind)\n );\n }\n if (pattern.type === 'ObjectPattern') {\n return pattern.properties.some(\n (property) =>\n property.type === 'ObjectProperty' &&\n patternContains(property.value, targetName) &&\n patternDefaultMayProduceComponent(\n property.value,\n targetName,\n scope,\n state,\n seen,\n kind\n )\n );\n }\n if (pattern.type === 'ArrayPattern') {\n return pattern.elements.some(\n (element) =>\n !!element &&\n patternContains(element, targetName) &&\n patternDefaultMayProduceComponent(\n element,\n targetName,\n scope,\n state,\n seen,\n kind\n )\n );\n }\n return false;\n}\n\n/** Finds a namespace's source even when mutation makes its value untrusted. */\nfunction resolveNamespaceOrigin(\n node: t.Node | null | undefined,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>\n): Extract<KnownValue, { type: 'namespace' }> | undefined {\n const expression = unwrapExpression(node);\n if (!expression) return undefined;\n const required = readRequireNamespace(expression, scope);\n if (required) return required;\n if (expression.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(expression.name);\n if (!binding) {\n const value = state.analysis.values.get(expression.name);\n return value?.type === 'namespace' ? value : undefined;\n }\n if (seen.has(binding)) return undefined;\n const existing = state.bindings.get(binding);\n if (existing?.type === 'namespace') return existing;\n const declaration = binding.path.node;\n if (\n declaration.type !== 'VariableDeclarator' ||\n declaration.id.type !== 'Identifier' ||\n !declaration.init\n ) {\n return undefined;\n }\n return resolveNamespaceOrigin(\n declaration.init,\n binding.path.scope,\n state,\n new Set(seen).add(binding)\n );\n}\n\n/** Resolves one object property's resulting identity, not arbitrary siblings. */\nfunction objectPropertyMayProduceComponent(\n node: t.Node,\n key: string,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n const entry = readObjectEntry(\n node,\n key,\n scope,\n new Set(),\n node.end ?? Number.POSITIVE_INFINITY,\n state\n );\n return entry.status === 'known'\n ? expressionMayProduceComponent(\n entry.expression.node,\n entry.expression.scope,\n state,\n seen,\n kind\n )\n : objectGetterMayProduceComponent(node, key, scope, state, seen, kind) ||\n objectPropertyOriginMayProduceComponent(\n node,\n key,\n scope,\n state,\n seen,\n new Set(),\n kind\n );\n}\n\n/** Retains selected-key provenance when mutation makes a container unsafe. */\nfunction objectPropertyOriginMayProduceComponent(\n node: t.Node,\n key: string,\n scope: Scope,\n state: ScriptState,\n seenBindings: Set<Binding>,\n seenNodes: Set<t.Node>,\n kind?: ComponentKind\n): boolean {\n return findObjectPropertyOrigins(\n node,\n key,\n scope,\n seenBindings,\n seenNodes,\n state\n ).some((origin) =>\n expressionMayProduceComponent(\n origin.node,\n origin.scope,\n state,\n seenBindings,\n kind\n )\n );\n}\n\n/** Finds selected property initializers even when their container later escapes. */\nfunction findObjectPropertyOrigins(\n node: t.Node,\n key: string,\n scope: Scope,\n seenBindings: Set<Binding>,\n seenNodes: Set<t.Node>,\n state: ScriptState\n): ScopedExpression[] {\n const expression = unwrapExpression(node);\n if (!expression || seenNodes.has(expression)) return [];\n const nextNodes = new Set(seenNodes).add(expression);\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding || seenBindings.has(binding)) return [];\n const declaration = binding.path.node;\n return declaration.type === 'VariableDeclarator' && declaration.init\n ? findObjectPropertyOrigins(\n declaration.init,\n key,\n binding.path.scope,\n new Set(seenBindings).add(binding),\n nextNodes,\n state\n )\n : [];\n }\n if (\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ) {\n const member = readMemberProperty(expression);\n if (!member) return [];\n return findObjectPropertyOrigins(\n expression.object,\n member,\n scope,\n seenBindings,\n nextNodes,\n state\n ).flatMap((origin) =>\n findObjectPropertyOrigins(\n origin.node,\n key,\n origin.scope,\n seenBindings,\n nextNodes,\n state\n )\n );\n }\n if (expression.type !== 'ObjectExpression') return [];\n return expression.properties.flatMap((property) => {\n if (property.type === 'SpreadElement') {\n return findObjectPropertyOrigins(\n property.argument,\n key,\n scope,\n seenBindings,\n nextNodes,\n state\n );\n }\n return readResolvedPropertyKey(property, scope, state) === key &&\n property.type === 'ObjectProperty'\n ? [{ node: property.value, scope }]\n : [];\n });\n}\n\n/** Evaluates a literal getter only when that getter supplies the selected key. */\nfunction objectGetterMayProduceComponent(\n node: t.Node,\n key: string,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n const object = resolveObjectExpression(node, scope, new Set());\n if (!object) return false;\n for (let index = object.node.properties.length - 1; index >= 0; index -= 1) {\n const property = object.node.properties[index];\n if (property.type === 'SpreadElement') continue;\n if (readResolvedPropertyKey(property, object.scope, state) !== key) {\n continue;\n }\n return (\n property.type === 'ObjectMethod' &&\n property.kind === 'get' &&\n functionMayReturnComponent(property, object.scope, state, seen, kind)\n );\n }\n return false;\n}\n\n/** Evaluates a literal getter only for possible string-function results. */\nfunction objectGetterMayProduceStringFunction(\n node: t.Node,\n key: string,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>\n): boolean {\n const object = resolveObjectExpression(node, scope, new Set());\n if (!object) return false;\n for (let index = object.node.properties.length - 1; index >= 0; index -= 1) {\n const property = object.node.properties[index];\n if (property.type === 'SpreadElement') continue;\n if (readResolvedPropertyKey(property, object.scope, state) !== key) {\n continue;\n }\n return (\n property.type === 'ObjectMethod' &&\n property.kind === 'get' &&\n functionMayReturnStringFunction(property, object.scope, state, seen)\n );\n }\n return false;\n}\n\n/** Evaluates the value source accepted by Vue's computed wrapper. */\nfunction computedSourceMayProduceComponent(\n node: t.Node | undefined,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n const called = resolveCalledFunction(node, scope, state, new Set());\n if (called) {\n return functionMayReturnComponent(\n called.node,\n called.scope,\n state,\n seen,\n kind\n );\n }\n const object = node\n ? resolveObjectExpression(node, scope, new Set())\n : undefined;\n if (!object) return false;\n for (const property of object.node.properties) {\n if (property.type === 'SpreadElement') continue;\n if (readResolvedPropertyKey(property, object.scope, state) !== 'get') {\n continue;\n }\n if (property.type === 'ObjectMethod') {\n return functionMayReturnComponent(\n property,\n object.scope,\n state,\n seen,\n kind\n );\n }\n if (property.type === 'ObjectProperty') {\n const getter = resolveCalledFunction(\n property.value,\n object.scope,\n state,\n new Set()\n );\n return Boolean(\n getter &&\n functionMayReturnComponent(getter.node, getter.scope, state, seen, kind)\n );\n }\n }\n return false;\n}\n\n/** Evaluates the computed getter for possible string-function results. */\nfunction computedSourceMayProduceStringFunction(\n node: t.Node | undefined,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>\n): boolean {\n if (!node) return false;\n const getter = resolveComputedGetter(node, scope, state);\n return Boolean(\n getter &&\n functionMayReturnStringFunction(getter.node, getter.scope, state, seen)\n );\n}\n\n/** Resolves a statically invoked local function without invoking user code. */\nfunction resolveCalledFunction(\n node: t.Node | null | undefined,\n scope: Scope,\n state: ScriptState,\n seen: Set<t.Node>\n): (ScopedExpression & { node: t.Function }) | undefined {\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return undefined;\n seen.add(expression);\n if (\n expression.type === 'FunctionDeclaration' ||\n expression.type === 'FunctionExpression' ||\n expression.type === 'ArrowFunctionExpression' ||\n expression.type === 'ObjectMethod'\n ) {\n return { node: expression, scope };\n }\n if (\n expression.type === 'CallExpression' ||\n expression.type === 'OptionalCallExpression'\n ) {\n const callee = unwrapExpression(expression.callee);\n return callee &&\n (callee.type === 'MemberExpression' ||\n callee.type === 'OptionalMemberExpression') &&\n readResolvedMemberProperty(callee, scope, state) === 'bind'\n ? resolveCalledFunction(callee.object, scope, state, seen)\n : undefined;\n }\n if (\n expression.type === 'MemberExpression' ||\n expression.type === 'OptionalMemberExpression'\n ) {\n const property = readResolvedMemberProperty(expression, scope, state);\n if (!property) return undefined;\n const namespace = resolveKnownExpression(\n expression.object,\n scope,\n state,\n new Set()\n );\n if (namespace?.type === 'local-namespace') {\n const resolution = state.analysis.localModules?.resolveExport(\n namespace.modulePath,\n property\n );\n if (resolution?.status === 'resolved') {\n const callable = materializeLocalExport(\n resolution.target,\n state\n ).callable;\n if (callable) return callable;\n }\n }\n const object = resolveObjectExpression(expression.object, scope, new Set());\n if (object) {\n for (const candidate of object.node.properties) {\n if (\n candidate.type === 'ObjectMethod' &&\n candidate.kind === 'method' &&\n readResolvedPropertyKey(candidate, object.scope, state) === property\n ) {\n return { node: candidate, scope: object.scope };\n }\n }\n }\n for (const origin of findObjectPropertyOrigins(\n expression.object,\n property,\n scope,\n new Set(),\n new Set(),\n state\n )) {\n const called = resolveCalledFunction(\n origin.node,\n origin.scope,\n state,\n seen\n );\n if (called) return called;\n }\n return undefined;\n }\n if (expression.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(expression.name);\n const substitution = binding\n ? readParameterSubstitution(binding, state)\n : undefined;\n if (substitution) {\n return resolveCalledFunction(\n substitution.node,\n substitution.scope,\n state,\n seen\n );\n }\n const imported = binding\n ? state.localCallableBindings.get(binding)\n : undefined;\n if (imported) return imported;\n if (binding?.path.isFunctionDeclaration() && binding.constant) {\n return { node: binding.path.node, scope: binding.path.scope };\n }\n if (!binding || !binding.constant) return undefined;\n const declaration = binding?.path.node;\n if (declaration?.type !== 'VariableDeclarator' || !declaration.init) {\n return undefined;\n }\n if (declaration.id.type === 'Identifier') {\n return resolveCalledFunction(\n declaration.init,\n binding.path.scope,\n state,\n seen\n );\n }\n const selected = selectPatternExpression(\n declaration.id,\n declaration.init,\n expression.name,\n binding.path.scope,\n declaration.init.end ?? Number.POSITIVE_INFINITY,\n state\n );\n return selected\n ? resolveCalledFunction(selected.node, selected.scope, state, seen)\n : undefined;\n}\n\n/** Detects a call whose implementation is outside this source file. */\nfunction callTargetsUnknownImport(node: t.Node, scope: Scope): boolean {\n const expression = unwrapExpression(node);\n if (!expression || expression.type !== 'Identifier') return false;\n const binding = scope.getBinding(expression.name);\n const parent = binding?.path.parentPath;\n return Boolean(\n binding?.path.isImportSpecifier() ||\n binding?.path.isImportDefaultSpecifier() ||\n binding?.path.isImportNamespaceSpecifier()\n ? parent?.isImportDeclaration() &&\n parent.node.source.value !== 'gt-vue' &&\n parent.node.source.value !== 'vue'\n : false\n );\n}\n\n/** Checks only values returned by an invoked function, excluding nested bodies. */\nfunction functionMayReturnComponent(\n fn: t.Function,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n if (state.activeComponentFunctions.has(fn)) return false;\n state.activeComponentFunctions.add(fn);\n try {\n return functionBodyMayReturnComponent(fn, scope, state, seen, kind);\n } finally {\n state.activeComponentFunctions.delete(fn);\n }\n}\n\n/** Checks only values returned by a function for string-function identity. */\nfunction functionMayReturnStringFunction(\n fn: t.Function,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>\n): boolean {\n if (state.activeStringFunctions.has(fn)) return false;\n state.activeStringFunctions.add(fn);\n try {\n const functionScope = state.scopes.get(fn) ?? scope;\n if (\n fn.type === 'ArrowFunctionExpression' &&\n fn.body.type !== 'BlockStatement'\n ) {\n return expressionMayProduceStringFunction(\n fn.body,\n functionScope,\n state,\n seen\n );\n }\n const functionPath = state.paths.get(fn);\n if (!functionPath || fn.body.type !== 'BlockStatement') return false;\n let result = false;\n functionPath.traverse({\n Function(path) {\n path.skip();\n },\n ReturnStatement(path) {\n if (\n expressionMayProduceStringFunction(\n path.node.argument,\n path.scope,\n state,\n seen\n )\n ) {\n result = true;\n path.stop();\n }\n },\n });\n return result;\n } finally {\n state.activeStringFunctions.delete(fn);\n }\n}\n\nfunction functionBodyMayReturnComponent(\n fn: t.Function,\n scope: Scope,\n state: ScriptState,\n seen: Set<Binding>,\n kind?: ComponentKind\n): boolean {\n const functionScope = state.scopes.get(fn) ?? scope;\n if (\n fn.type === 'ArrowFunctionExpression' &&\n fn.body.type !== 'BlockStatement'\n ) {\n return expressionMayProduceComponent(\n fn.body,\n functionScope,\n state,\n seen,\n kind\n );\n }\n const functionPath = state.paths.get(fn);\n if (!functionPath || fn.body.type !== 'BlockStatement') return false;\n let result = false;\n functionPath.traverse({\n Function(path) {\n path.skip();\n },\n ReturnStatement(path) {\n if (\n expressionMayProduceComponent(\n path.node.argument,\n path.scope,\n state,\n seen,\n kind\n )\n ) {\n result = true;\n path.stop();\n }\n },\n });\n return result;\n}\n\n/** Returns whether unresolved Options API data can hide template GT bindings. */\nfunction hasTemplateRelevantBindings(state: ScriptState): boolean {\n return [...state.bindings.values(), ...state.analysis.values.values()].some(\n (value) =>\n value.type === 'component' ||\n value.type === 'hook' ||\n value.type === 'vue-builtin' ||\n value.type === 'namespace' ||\n value.type === 'local-namespace' ||\n value.type === 'string'\n );\n}\n\nfunction resolveOptionsObject(\n node: t.Node,\n scope: Scope,\n state: ScriptState,\n seen: Set<t.Node>\n): ScopedExpression | undefined {\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return undefined;\n seen.add(expression);\n if (expression.type === 'ObjectExpression')\n return { node: expression, scope };\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (\n !binding ||\n !isSafelyReadContainerBinding(\n binding,\n expression,\n Number.POSITIVE_INFINITY,\n false,\n state\n )\n ) {\n return undefined;\n }\n const source = getBindingSource(binding);\n return source\n ? resolveOptionsObject(\n source.expression.node,\n source.expression.scope,\n state,\n seen\n )\n : undefined;\n }\n if (\n expression.type !== 'CallExpression' &&\n expression.type !== 'OptionalCallExpression'\n ) {\n return undefined;\n }\n const callee = resolveKnownExpression(\n expression.callee,\n scope,\n state,\n new Set()\n );\n if (callee?.type !== 'defineComponent') return undefined;\n const argument = expression.arguments[0];\n return argument &&\n argument.type !== 'SpreadElement' &&\n argument.type !== 'ArgumentPlaceholder'\n ? resolveOptionsObject(argument, scope, state, seen)\n : undefined;\n}\n\nfunction resolveSetupFunction(\n node: t.Node,\n scope: Scope,\n seen: Set<t.Node>\n): t.Function | undefined {\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return undefined;\n seen.add(expression);\n if (\n expression.type === 'FunctionExpression' ||\n expression.type === 'ArrowFunctionExpression' ||\n expression.type === 'ObjectMethod'\n ) {\n return expression;\n }\n if (expression.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(expression.name);\n if (binding?.path.isFunctionDeclaration()) return binding.path.node;\n const source = binding ? getBindingSource(binding) : undefined;\n return source\n ? resolveSetupFunction(\n source.expression.node,\n source.expression.scope,\n seen\n )\n : undefined;\n}\n\nfunction collectObjectEntries(\n node: t.Node,\n scope: Scope,\n seen: Set<t.Node>,\n atPosition = node.start ?? Number.POSITIVE_INFINITY,\n state?: ScriptState\n): CollectedObjectEntries {\n const result: CollectedObjectEntries = {\n entries: new Map(),\n unknownAll: false,\n unknownNames: new Set(),\n };\n const object = resolveObjectExpression(node, scope, seen, atPosition);\n if (!object) {\n result.unknownAll = true;\n return result;\n }\n for (const property of object.node.properties) {\n if (property.type === 'SpreadElement') {\n const spreadObject = resolveObjectExpression(\n property.argument,\n object.scope,\n new Set(seen),\n property.argument.start ?? atPosition\n );\n if (!spreadObject) {\n result.entries.clear();\n result.unknownNames.clear();\n result.unknownAll = true;\n continue;\n }\n const spreadEntries = collectObjectEntries(\n spreadObject.node,\n spreadObject.scope,\n new Set(seen),\n property.argument.start ?? atPosition,\n state\n );\n if (spreadEntries.unknownAll) {\n result.entries.clear();\n result.unknownNames.clear();\n result.unknownAll = true;\n }\n for (const name of spreadEntries.unknownNames) {\n result.entries.delete(name);\n result.unknownNames.add(name);\n }\n for (const [name, entry] of spreadEntries.entries) {\n result.entries.set(name, entry);\n result.unknownNames.delete(name);\n }\n continue;\n }\n const key = state\n ? readResolvedPropertyKey(property, object.scope, state)\n : readPropertyKey(property);\n if (key === undefined) {\n result.entries.clear();\n result.unknownNames.clear();\n result.unknownAll = true;\n continue;\n }\n if (property.type === 'ObjectProperty') {\n result.entries.set(key, { node: property.value, scope: object.scope });\n result.unknownNames.delete(key);\n } else if (property.type === 'ObjectMethod' && property.kind === 'method') {\n result.entries.set(key, { node: property, scope: object.scope });\n result.unknownNames.delete(key);\n } else {\n result.entries.delete(key);\n result.unknownNames.add(key);\n }\n }\n return result;\n}\n\nfunction resolveObjectExpression(\n node: t.Node,\n scope: Scope,\n seen: Set<t.Node>,\n atPosition = node.start ?? Number.POSITIVE_INFINITY\n): { node: t.ObjectExpression; scope: Scope } | undefined {\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return undefined;\n seen.add(expression);\n if (expression.type === 'ObjectExpression')\n return { node: expression, scope };\n if (expression.type !== 'Identifier') return undefined;\n const binding = scope.getBinding(expression.name);\n if (\n !binding ||\n !isSafelyReadContainerBinding(binding, expression, atPosition)\n ) {\n return undefined;\n }\n const source = getBindingSource(binding);\n return source\n ? resolveObjectExpression(\n source.expression.node,\n source.expression.scope,\n seen,\n atPosition\n )\n : undefined;\n}\n\n/** Reads one flattened array entry while honoring spread copy timing. */\nfunction readArrayEntry(\n node: t.Node,\n index: number,\n scope: Scope,\n seen: Set<t.Node>,\n atPosition = node.end ?? Number.POSITIVE_INFINITY,\n state?: ScriptState\n): ObjectEntryResult {\n const entries = state\n ? collectTransformArrayEntries(node, scope, state, seen, atPosition)\n : collectArrayEntries(node, scope, seen, atPosition, state);\n if (!entries) return { status: 'unknown' };\n const entry = entries[index];\n return entry ? { status: 'known', expression: entry } : { status: 'absent' };\n}\n\n/** Flattens only statically knowable array literals and array spreads. */\nfunction collectArrayEntries(\n node: t.Node,\n scope: Scope,\n seen: Set<t.Node>,\n atPosition: number,\n state?: ScriptState\n): Array<ScopedExpression | undefined> | undefined {\n if (state?.analysis.stats) state.analysis.stats.arrayEntryVisits += 1;\n const expression = unwrapExpression(node);\n if (!expression || seen.has(expression)) return undefined;\n if (\n state &&\n resolveKnownExpression(expression, scope, state, new Set()) !== undefined\n ) {\n return undefined;\n }\n const nextSeen = new Set(seen).add(expression);\n if (expression.type === 'Identifier') {\n const binding = scope.getBinding(expression.name);\n if (!binding) return undefined;\n const cacheable = Boolean(\n state && binding.constant && state.parameterSubstitutions.length === 0\n );\n if (cacheable && state?.arrayEntries.has(binding)) {\n const cached = state.arrayEntries.get(binding);\n return cached ? [...cached] : undefined;\n }\n if (cacheable && state?.arrayEntriesInProgress.has(binding)) {\n return undefined;\n }\n if (cacheable) state?.arrayEntriesInProgress.add(binding);\n try {\n if (\n !isSafelyReadContainerBinding(\n binding,\n expression,\n atPosition,\n false,\n state\n )\n ) {\n if (cacheable) state?.arrayEntries.set(binding, null);\n return undefined;\n }\n const source = getBindingSource(binding);\n const entries =\n source?.pattern.type === 'Identifier'\n ? collectArrayEntries(\n source.expression.node,\n source.expression.scope,\n nextSeen,\n atPosition,\n state\n )\n : undefined;\n if (cacheable) {\n state?.arrayEntries.set(binding, entries ? [...entries] : null);\n }\n return entries;\n } finally {\n if (cacheable) state?.arrayEntriesInProgress.delete(binding);\n }\n }\n if (expression.type !== 'ArrayExpression') return undefined;\n const entries: Array<ScopedExpression | undefined> = [];\n for (const element of expression.elements) {\n if (!element) {\n entries.push(undefined);\n continue;\n }\n if (element.type !== 'SpreadElement') {\n entries.push({ node: element, scope });\n continue;\n }\n const spread = collectArrayEntries(\n element.argument,\n scope,\n nextSeen,\n element.argument.end ?? atPosition,\n state\n );\n if (!spread) return undefined;\n entries.push(...spread);\n }\n return entries;\n}\n\n/** Resolves finite array-producing transforms for callbacks and destructuring. */\nfunction collectTransformArrayEntries(\n node: t.Node,\n scope: Scope,\n state: ScriptState,\n seen: Set<t.Node>,\n atPosition = node.end ?? Number.POSITIVE_INFINITY\n): Array<ScopedExpression | undefined> | undefined {\n if (state.analysis.stats) {\n state.analysis.stats.transformArrayEntryVisits += 1;\n }\n const direct = collectArrayEntries(node, scope, seen, atPosition, state);\n if (direct) return direct;\n const expression = unwrapExpression(node);\n if (\n expression &&\n resolveKnownExpression(expression, scope, state, new Set()) !== undefined\n ) {\n return undefined;\n }\n if (expression?.type === 'Identifier' && !seen.has(expression)) {\n const binding = scope.getBinding(expression.name);\n const source = binding ? getBindingSource(binding) : undefined;\n const readonlyUses = binding\n ? bindingHasOnlyReadonlyContainerUses(binding, state, new Set())\n : false;\n if (\n binding &&\n source?.pattern.type === 'Identifier' &&\n (isSafelyReadContainerBinding(\n binding,\n expression,\n atPosition,\n true,\n state\n ) ||\n readonlyUses)\n ) {\n const cacheable =\n readonlyUses && state.parameterSubstitutions.length === 0;\n const cached = cacheable\n ? state.transformArrayEntries.get(binding)\n : undefined;\n if (cached !== undefined) {\n return cached ? [...cached] : undefined;\n }\n if (cacheable && state.transformArrayEntriesInProgress.has(binding)) {\n return undefined;\n }\n if (cacheable) state.transformArrayEntriesInProgress.add(binding);\n try {\n const entries = collectTransformArrayEntries(\n source.expression.node,\n source.expression.scope,\n state,\n new Set(seen).add(expression),\n atPosition\n );\n if (cacheable) {\n state.transformArrayEntries.set(\n binding,\n entries ? [...entries] : null\n );\n }\n return entries;\n } finally {\n if (cacheable) state.transformArrayEntriesInProgress.delete(binding);\n }\n }\n }\n if (\n !expression ||\n seen.has(expression) ||\n (expression.type !== 'CallExpression' &&\n expression.type !== 'OptionalCallExpression')\n ) {\n return undefined;\n }\n const callee = unwrapExpression(expression.callee);\n if (\n !callee ||\n (callee.type !== 'MemberExpression' &&\n callee.type !== 'OptionalMemberExpression')\n ) {\n return undefined;\n }\n const nextSeen = new Set(seen).add(expression);\n const method = readResolvedMemberProperty(callee, scope, state);\n const receiverPath = readResolvedMemberPath(callee.object, scope, state);\n const argument = (index: number): t.Node | undefined => {\n const value = expression.arguments[index];\n return value && value.type !== 'ArgumentPlaceholder'\n ? value.type === 'SpreadElement'\n ? value.argument\n : value\n : undefined;\n };\n const integerArgument = (\n index: number,\n fallback: number\n ): { ok: true; value: number } | { ok: false } => {\n const node = argument(index);\n if (!node) return { ok: true, value: fallback };\n const value = readStaticFromScope(\n node,\n scope,\n new Set(),\n node.end ?? atPosition,\n state.analysis,\n true\n );\n if (!value.ok || typeof value.value === 'bigint') return { ok: false };\n try {\n const numeric = Number(value.value);\n return {\n ok: true,\n value: Number.isNaN(numeric) ? 0 : Math.trunc(numeric),\n };\n } catch {\n return { ok: false };\n }\n };\n if (\n receiverPath === 'Array' &&\n method === 'from' &&\n !scope.getBinding('Array')\n ) {\n const source = argument(0);\n const entries = source\n ? collectTransformArrayEntries(source, scope, state, nextSeen, atPosition)\n : undefined;\n const mapperNode = argument(1);\n const mapper = mapperNode\n ? resolveCalledFunction(mapperNode, scope, state, new Set())\n : undefined;\n if (!entries || !mapperNode) return entries;\n if (!mapper) return undefined;\n const mapped: Array<ScopedExpression | undefined> = [];\n for (const [index, entry] of entries.entries()) {\n if (!entry) {\n mapped.push(undefined);\n continue;\n }\n withFunctionParameterSubstitutions(\n mapper,\n [\n entry,\n {\n node: {\n type: 'NumericLiteral',\n value: index,\n } as t.NumericLiteral,\n scope,\n },\n ],\n state,\n () =>\n withFunctionThisSubstitution(\n mapper,\n argument(2) ? { node: argument(2)!, scope } : undefined,\n state,\n () => {\n for (const returned of collectFunctionReturnExpressions(\n mapper.node,\n mapper.scope,\n state\n )) {\n mapped.push(\n materializeParameterExpression(\n returned.node,\n returned.scope,\n state\n )\n );\n }\n }\n )\n );\n }\n return mapped;\n }\n if (\n receiverPath === 'Object' &&\n (method === 'values' || method === 'entries') &&\n !scope.getBinding('Object')\n ) {\n const source = argument(0);\n if (!source) return undefined;\n const object = collectObjectEntries(\n source,\n scope,\n new Set(),\n atPosition,\n state\n );\n if (object.unknownAll || object.unknownNames.size > 0) return undefined;\n return [...object.entries].map(([key, value]) =>\n method === 'values'\n ? value\n : {\n node: {\n type: 'ArrayExpression',\n elements: [\n { type: 'StringLiteral', value: key } as t.StringLiteral,\n value.node,\n ],\n } as t.ArrayExpression,\n scope: value.scope,\n }\n );\n }\n if (!method) return undefined;\n if (method === 'concat') {\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n if (!entries) return undefined;\n const concatenated = [...entries];\n for (const value of expression.arguments) {\n if (\n value.type === 'ArgumentPlaceholder' ||\n value.type === 'SpreadElement'\n ) {\n return undefined;\n }\n const nested = collectTransformArrayEntries(\n value,\n scope,\n state,\n nextSeen,\n atPosition\n );\n if (nested) concatenated.push(...nested);\n else concatenated.push({ node: value, scope });\n }\n return concatenated;\n }\n if (method === 'reduce' || method === 'reduceRight') {\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n const callbackNode = argument(0);\n const callback = callbackNode\n ? resolveCalledFunction(callbackNode, scope, state, new Set())\n : undefined;\n if (!entries || !callback) return undefined;\n const ordered = entries\n .map((entry, index) => (entry ? { entry, index } : undefined))\n .filter(\n (entry): entry is { entry: ScopedExpression; index: number } =>\n entry !== undefined\n );\n if (method === 'reduceRight') ordered.reverse();\n const initial = argument(1);\n let accumulator: ScopedExpression | undefined = initial\n ? materializeParameterExpression(initial, scope, state)\n : ordered.shift()?.entry;\n if (!accumulator) return undefined;\n for (const current of ordered) {\n const currentAccumulator: ScopedExpression = accumulator;\n const nextAccumulator: ScopedExpression | undefined =\n withFunctionParameterSubstitutions(\n callback,\n [\n currentAccumulator,\n current.entry,\n {\n node: {\n type: 'NumericLiteral',\n value: current.index,\n } as t.NumericLiteral,\n scope,\n },\n { node: callee.object, scope },\n ],\n state,\n () => {\n const returned = collectFunctionReturnExpressions(\n callback.node,\n callback.scope,\n state\n );\n return returned.length === 1\n ? materializeParameterExpression(\n returned[0]!.node,\n returned[0]!.scope,\n state\n )\n : undefined;\n }\n );\n if (!nextAccumulator) return undefined;\n accumulator = nextAccumulator;\n }\n return collectTransformArrayEntries(\n accumulator.node,\n accumulator.scope,\n state,\n nextSeen,\n atPosition\n );\n }\n if (method === 'filter') {\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n const callbackNode = argument(0);\n const callback = callbackNode\n ? resolveCalledFunction(callbackNode, scope, state, new Set())\n : undefined;\n if (!entries || !callback) return undefined;\n const filtered: Array<ScopedExpression | undefined> = [];\n for (const [index, entry] of entries.entries()) {\n if (!entry) continue;\n const keep = withFunctionParameterSubstitutions(\n callback,\n [\n entry,\n {\n node: { type: 'NumericLiteral', value: index } as t.NumericLiteral,\n scope,\n },\n { node: callee.object, scope },\n ],\n state,\n () =>\n withFunctionThisSubstitution(\n callback,\n argument(1) ? { node: argument(1)!, scope } : undefined,\n state,\n () => {\n const returned = collectFunctionReturnExpressions(\n callback.node,\n callback.scope,\n state\n );\n if (returned.length === 0) return false;\n const decisions = returned.map((value) => {\n const materialized = materializeParameterExpression(\n value.node,\n value.scope,\n state\n );\n const result = readStaticFromScope(\n materialized.node,\n materialized.scope,\n new Set(),\n materialized.node.end ?? atPosition,\n state.analysis\n );\n return result.ok ? Boolean(result.value) : undefined;\n });\n return decisions.every((decision) => decision === false)\n ? false\n : decisions.every((decision) => decision === true)\n ? true\n : undefined;\n }\n )\n );\n if (keep === undefined) return undefined;\n if (keep) filtered.push(entry);\n }\n return filtered;\n }\n if (method === 'slice') {\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n const start = integerArgument(0, 0);\n const end = integerArgument(1, entries?.length ?? 0);\n return entries && start.ok && end.ok\n ? entries.slice(start.value, end.value)\n : undefined;\n }\n if (method === 'splice') {\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n const start = integerArgument(0, 0);\n const deleteCount = integerArgument(\n 1,\n expression.arguments.length < 2 ? Number.POSITIVE_INFINITY : 0\n );\n if (!entries || !start.ok || !deleteCount.ok) return undefined;\n const copy = [...entries];\n return copy.splice(start.value, Math.max(0, deleteCount.value));\n }\n if (method === 'toSpliced') {\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n const start = integerArgument(0, 0);\n const deleteCount = integerArgument(\n 1,\n expression.arguments.length < 2 ? Number.POSITIVE_INFINITY : 0\n );\n if (\n !entries ||\n !start.ok ||\n !deleteCount.ok ||\n expression.arguments\n .slice(2)\n .some((value) => value.type === 'SpreadElement')\n ) {\n return undefined;\n }\n const copy = [...entries];\n copy.splice(\n start.value,\n Math.max(0, deleteCount.value),\n ...expression.arguments.slice(2).map((node) => ({ node, scope }))\n );\n return copy;\n }\n if (method === 'with') {\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n const index = integerArgument(0, 0);\n const value = expression.arguments[1];\n if (\n !entries ||\n !index.ok ||\n !value ||\n value.type === 'ArgumentPlaceholder' ||\n value.type === 'SpreadElement'\n ) {\n return undefined;\n }\n const normalized =\n index.value < 0 ? entries.length + index.value : index.value;\n if (normalized < 0 || normalized >= entries.length) return [];\n const copy = [...entries];\n copy[normalized] = { node: value, scope };\n return copy;\n }\n if (method === 'fill') {\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n const start = integerArgument(1, 0);\n const end = integerArgument(2, entries?.length ?? 0);\n const value = expression.arguments[0];\n if (!entries || !start.ok || !end.ok || value?.type === 'SpreadElement') {\n return undefined;\n }\n return [...entries].fill(\n value && value.type !== 'ArgumentPlaceholder'\n ? { node: value, scope }\n : undefined,\n start.value,\n end.value\n );\n }\n if (method === 'copyWithin') {\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n const target = integerArgument(0, 0);\n const start = integerArgument(1, 0);\n const end = integerArgument(2, entries?.length ?? 0);\n return entries && target.ok && start.ok && end.ok\n ? [...entries].copyWithin(target.value, start.value, end.value)\n : undefined;\n }\n if (['reverse', 'sort', 'toReversed', 'toSorted'].includes(method)) {\n return collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n }\n if (method === 'flat') {\n let entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n if (!entries) return undefined;\n const depthNode = argument(0);\n const staticDepth = depthNode\n ? readStaticFromScope(\n depthNode,\n scope,\n new Set(),\n depthNode.end ?? atPosition,\n state.analysis,\n true\n )\n : { ok: true as const, value: 1 };\n if (!staticDepth.ok || typeof staticDepth.value === 'bigint') {\n return undefined;\n }\n const numericDepth = Number(staticDepth.value);\n const depth = Number.isNaN(numericDepth)\n ? 0\n : numericDepth === Number.POSITIVE_INFINITY\n ? 32\n : Math.max(0, Math.trunc(numericDepth));\n for (let level = 0; level < depth; level += 1) {\n const flattened: Array<ScopedExpression | undefined> = [];\n let changed = false;\n for (const entry of entries) {\n if (!entry) {\n flattened.push(undefined);\n continue;\n }\n const nested = collectTransformArrayEntries(\n entry.node,\n entry.scope,\n state,\n nextSeen,\n atPosition\n );\n if (nested) {\n flattened.push(...nested);\n changed = true;\n } else {\n flattened.push(entry);\n }\n }\n entries = flattened;\n if (!changed) break;\n }\n return entries;\n }\n if (method !== 'map' && method !== 'flatMap') return undefined;\n const entries = collectTransformArrayEntries(\n callee.object,\n scope,\n state,\n nextSeen,\n atPosition\n );\n const callbackNode = argument(0);\n const callback = callbackNode\n ? resolveCalledFunction(callbackNode, scope, state, new Set())\n : undefined;\n if (!entries || !callback) return undefined;\n const mapped: Array<ScopedExpression | undefined> = [];\n for (const [index, entry] of entries.entries()) {\n if (!entry) {\n mapped.push(undefined);\n continue;\n }\n withFunctionParameterSubstitutions(\n callback,\n [\n entry,\n {\n node: { type: 'NumericLiteral', value: index } as t.NumericLiteral,\n scope,\n },\n { node: callee.object, scope },\n ],\n state,\n () =>\n withFunctionThisSubstitution(\n callback,\n argument(1) ? { node: argument(1)!, scope } : undefined,\n state,\n () => {\n for (const returned of collectFunctionReturnExpressions(\n callback.node,\n callback.scope,\n state\n )) {\n const materialized = materializeParameterExpression(\n returned.node,\n returned.scope,\n state\n );\n if (method === 'flatMap') {\n const nested = collectTransformArrayEntries(\n materialized.node,\n materialized.scope,\n state,\n nextSeen,\n atPosition\n );\n if (nested) {\n mapped.push(\n ...nested.map((entry) =>\n entry\n ? materializeParameterExpression(\n entry.node,\n entry.scope,\n state\n )\n : undefined\n )\n );\n continue;\n }\n }\n mapped.push(materialized);\n }\n }\n )\n );\n }\n return mapped;\n}\n\nfunction readObjectEntry(\n node: t.Node,\n key: string,\n scope: Scope,\n seen: Set<t.Node>,\n atPosition = node.end ?? Number.POSITIVE_INFINITY,\n state?: ScriptState\n): ObjectEntryResult {\n const object = resolveObjectExpression(node, scope, seen, atPosition);\n if (!object) return { status: 'unknown' };\n let result: ObjectEntryResult = { status: 'absent' };\n for (const property of object.node.properties) {\n if (property.type === 'SpreadElement') {\n const spread = readObjectEntry(\n property.argument,\n key,\n object.scope,\n seen,\n property.argument.end ?? atPosition,\n state\n );\n if (spread.status !== 'absent') result = spread;\n continue;\n }\n const propertyKey = state\n ? readResolvedPropertyKey(property, object.scope, state)\n : readPropertyKey(property);\n if (!propertyKey) {\n result = { status: 'unknown' };\n } else if (propertyKey === key) {\n result =\n property.type === 'ObjectProperty' ||\n (property.type === 'ObjectMethod' && property.kind === 'method')\n ? {\n status: 'known',\n expression: {\n node:\n property.type === 'ObjectProperty'\n ? property.value\n : property,\n scope: object.scope,\n },\n }\n : { status: 'unknown' };\n }\n }\n return result;\n}\n\n/** Proves that a literal container and all of its const aliases are read-only. */\nfunction bindingHasOnlyReadonlyContainerUses(\n binding: Binding,\n state: ScriptState,\n seen: Set<Binding>\n): boolean {\n const cached = state.readonlyContainerUses.get(binding);\n if (cached !== undefined) return cached;\n if (!binding.constant || seen.has(binding)) return seen.has(binding);\n if (state.readonlyContainerUsesInProgress.has(binding)) {\n return seen.has(binding);\n }\n state.readonlyContainerUsesInProgress.add(binding);\n const nextSeen = new Set(seen).add(binding);\n try {\n const result = binding.referencePaths.every((reference) => {\n const parent = reference.parentPath;\n if (!parent) return false;\n if (\n parent.isVariableDeclarator() &&\n parent.node.init === reference.node\n ) {\n if (parent.node.id.type !== 'Identifier') return false;\n const alias = parent.scope.getBinding(parent.node.id.name);\n return Boolean(\n alias && bindingHasOnlyReadonlyContainerUses(alias, state, nextSeen)\n );\n }\n if (\n (parent.isMemberExpression() || parent.isOptionalMemberExpression()) &&\n parent.node.object === reference.node\n ) {\n let member: NodePath<t.MemberExpression | t.OptionalMemberExpression> =\n parent;\n while (\n member.parentPath &&\n (member.parentPath.isMemberExpression() ||\n member.parentPath.isOptionalMemberExpression()) &&\n member.parentPath.node.object === member.node\n ) {\n member = member.parentPath;\n }\n const call = member.parentPath;\n if (\n call &&\n (call.isCallExpression() || call.isOptionalCallExpression()) &&\n call.node.callee === member.node\n ) {\n const method = readResolvedMemberProperty(\n member.node,\n member.scope,\n state\n );\n return Boolean(method && READONLY_ARRAY_TRANSFORMS.has(method));\n }\n return memberChainIsReadOnly(parent);\n }\n if (\n (parent.isCallExpression() || parent.isOptionalCallExpression()) &&\n parent.node.arguments.some((argument) => argument === reference.node)\n ) {\n const callee = readResolvedMemberPath(\n parent.node.callee,\n parent.scope,\n state\n );\n return (\n callee === 'Array.from' ||\n callee === 'Object.entries' ||\n callee === 'Object.values'\n );\n }\n return false;\n });\n state.readonlyContainerUses.set(binding, result);\n return result;\n } finally {\n state.readonlyContainerUsesInProgress.delete(binding);\n }\n}\n\n/**\n * Rejects container aliases that can be mutated or escape static analysis.\n *\n * Babel's `binding.constant` does not account for writes through object\n * members. Following an initializer in that case can publish a catalog for a\n * value that does not exist at runtime. Only local property reads, static\n * destructuring, and object/array copies are safe to inspect.\n */\nfunction isSafelyReadContainerBinding(\n binding: Binding,\n currentReference: t.Identifier,\n atPosition: number,\n allowMemberCalls = false,\n state?: ScriptState\n): boolean {\n const currentFunction = binding.referencePaths\n .find((reference) => reference.node === currentReference)\n ?.getFunctionParent()?.node;\n return binding.referencePaths.every((reference) => {\n if (reference.node === currentReference) return true;\n if (\n reference.getFunctionParent()?.node === currentFunction &&\n (reference.node.start ?? Number.POSITIVE_INFINITY) >= atPosition\n ) {\n return true;\n }\n const parent = reference.parentPath;\n if (!parent) return false;\n\n if (\n (parent.isMemberExpression() || parent.isOptionalMemberExpression()) &&\n parent.node.object === reference.node\n ) {\n if (literalObjectMemberIsGetter(binding, parent.node)) return false;\n return (\n memberChainCallsKnownStringLeaf(binding, parent, state) ||\n !memberChainCanMutate(parent, allowMemberCalls) ||\n (memberChainIsReadOnly(parent) &&\n literalObjectMemberIsPrimitive(binding, parent.node))\n );\n }\n if (parent.isSpreadElement()) {\n return false;\n }\n if (parent.isVariableDeclarator() && parent.node.init === reference.node) {\n return false;\n }\n if (\n parent.isAssignmentExpression() &&\n parent.node.right === reference.node\n ) {\n return false;\n }\n return false;\n });\n}\n\n/**\n * Allows a proven translator leaf to be called without treating its parent\n * object as escaped. Arbitrary object methods remain unsafe because they can\n * mutate sibling properties through a closure or `this`.\n */\nfunction memberChainCallsKnownStringLeaf(\n binding: Binding,\n firstMember: NodePath<t.MemberExpression | t.OptionalMemberExpression>,\n state: ScriptState | undefined\n): boolean {\n if (!state) return false;\n const properties: string[] = [];\n let current: NodePath<t.Node> = firstMember;\n while (current.isMemberExpression() || current.isOptionalMemberExpression()) {\n const property = readResolvedMemberProperty(\n current.node,\n current.scope,\n state\n );\n if (property === undefined) return false;\n properties.push(property);\n const parent = current.parentPath;\n if (\n !parent ||\n (!parent.isMemberExpression() && !parent.isOptionalMemberExpression()) ||\n parent.node.object !== current.node\n ) {\n break;\n }\n current = parent;\n }\n const call = current.parentPath;\n if (\n !call ||\n (!call.isCallExpression() && !call.isOptionalCallExpression()) ||\n call.node.callee !== current.node\n ) {\n return false;\n }\n const declaration = binding.path.node;\n if (\n declaration.type !== 'VariableDeclarator' ||\n declaration.id.type !== 'Identifier' ||\n !declaration.init\n ) {\n return false;\n }\n let selected: ScopedExpression = {\n node: declaration.init,\n scope: binding.path.scope,\n };\n for (const property of properties) {\n const entry = readObjectEntry(\n selected.node,\n property,\n selected.scope,\n new Set(),\n call.node.start ?? Number.POSITIVE_INFINITY,\n state\n );\n if (entry.status !== 'known') return false;\n selected = entry.expression;\n }\n return (\n resolveKnownExpression(\n selected.node,\n selected.scope,\n state,\n new Set([binding])\n )?.type === 'string'\n );\n}\n\n/** Returns the direct literal property selected from a container declaration. */\nfunction readLiteralContainerProperty(\n binding: Binding,\n member: t.MemberExpression | t.OptionalMemberExpression\n): t.ObjectExpression['properties'][number] | undefined {\n const key = readMemberProperty(member);\n const declaration = binding.path.node;\n const initializer =\n declaration.type === 'VariableDeclarator'\n ? unwrapExpression(declaration.init)\n : undefined;\n if (!key || initializer?.type !== 'ObjectExpression') return undefined;\n let result: t.ObjectExpression['properties'][number] | undefined;\n for (const property of initializer.properties) {\n if (property.type === 'SpreadElement' || !readPropertyKey(property)) {\n result = undefined;\n continue;\n }\n if (readPropertyKey(property) === key) result = property;\n }\n return result;\n}\n\n/** Getter reads can mutate sibling properties before a later static read. */\nfunction literalObjectMemberIsGetter(\n binding: Binding,\n member: t.MemberExpression | t.OptionalMemberExpression\n): boolean {\n const property = readLiteralContainerProperty(binding, member);\n return property?.type === 'ObjectMethod' && property.kind === 'get';\n}\n\n/** Escaping a primitive sibling value cannot mutate the source container. */\nfunction literalObjectMemberIsPrimitive(\n binding: Binding,\n member: t.MemberExpression | t.OptionalMemberExpression\n): boolean {\n const property = readLiteralContainerProperty(binding, member);\n return (\n property?.type === 'ObjectProperty' &&\n readStaticPrimitive(property.value, () => ({ ok: false })).ok\n );\n}\n\n/** Distinguishes a harmless value read from a write or method invocation. */\nfunction memberChainIsReadOnly(\n memberPath: NodePath<t.MemberExpression | t.OptionalMemberExpression>\n): boolean {\n let current: NodePath<t.Node> = memberPath;\n while (\n current.parentPath &&\n (current.parentPath.isMemberExpression() ||\n current.parentPath.isOptionalMemberExpression()) &&\n current.parentPath.node.object === current.node\n ) {\n current = current.parentPath;\n }\n const parent = current.parentPath;\n if (!parent) return false;\n if (\n (parent.isAssignmentExpression() && parent.node.left === current.node) ||\n (parent.isUpdateExpression() && parent.node.argument === current.node) ||\n (parent.isUnaryExpression({ operator: 'delete' }) &&\n parent.node.argument === current.node) ||\n ((parent.isForInStatement() || parent.isForOfStatement()) &&\n parent.node.left === current.node) ||\n ((parent.isCallExpression() || parent.isOptionalCallExpression()) &&\n parent.node.callee === current.node) ||\n (parent.isNewExpression() && parent.node.callee === current.node) ||\n (parent.isTaggedTemplateExpression() && parent.node.tag === current.node)\n ) {\n return false;\n }\n return true;\n}\n\n/** Returns whether a member read is used to mutate or escape its container. */\nfunction memberChainCanMutate(\n memberPath: NodePath<t.MemberExpression | t.OptionalMemberExpression>,\n allowCalls: boolean\n): boolean {\n let current: NodePath<t.Node> = memberPath;\n while (\n current.parentPath &&\n (current.parentPath.isMemberExpression() ||\n current.parentPath.isOptionalMemberExpression()) &&\n current.parentPath.node.object === current.node\n ) {\n current = current.parentPath;\n }\n while (current.parentPath) {\n const parent = current.parentPath;\n if (\n (parent.isAssignmentExpression() && parent.node.left === current.node) ||\n (parent.isUpdateExpression() && parent.node.argument === current.node) ||\n (parent.isUnaryExpression({ operator: 'delete' }) &&\n parent.node.argument === current.node) ||\n ((parent.isForInStatement() || parent.isForOfStatement()) &&\n parent.node.left === current.node)\n ) {\n return true;\n }\n if (\n (parent.isCallExpression() || parent.isOptionalCallExpression()) &&\n (parent.node.callee !== current.node || !allowCalls)\n ) {\n return true;\n }\n if (\n parent.isNewExpression() &&\n (parent.node.callee !== current.node || !allowCalls)\n ) {\n return true;\n }\n if (\n parent.isTaggedTemplateExpression() &&\n (parent.node.tag !== current.node || !allowCalls)\n ) {\n return true;\n }\n if (\n (parent.isVariableDeclarator() && parent.node.init === current.node) ||\n (parent.isAssignmentExpression() && parent.node.right === current.node) ||\n (parent.isReturnStatement() && parent.node.argument === current.node) ||\n parent.isSpreadElement() ||\n (parent.isObjectProperty() && parent.node.value === current.node) ||\n (parent.isArrayExpression() &&\n parent.node.elements.some((element) => element === current.node))\n ) {\n return true;\n }\n if (!isAssignmentTargetWrapper(parent, current)) return false;\n current = parent;\n }\n return true;\n}\n\nfunction readStaticFromScope(\n node: t.Node | null | undefined,\n scope: Scope,\n seen: Set<Binding>,\n atPosition: number,\n analysis?: VueScriptAnalysis,\n allowNumericGlobals = false\n): StaticPrimitiveResult {\n return readStaticPrimitive(node, (identifier) => {\n const binding = scope.getBinding(identifier.name);\n if (!binding) {\n const value = analysis?.staticValues.get(identifier.name);\n if (analysis?.staticValues.has(identifier.name)) {\n return { ok: true, value: value! };\n }\n if (allowNumericGlobals && identifier.name === 'Infinity') {\n return { ok: true, value: Number.POSITIVE_INFINITY };\n }\n if (allowNumericGlobals && identifier.name === 'NaN') {\n return { ok: true, value: Number.NaN };\n }\n return { ok: false };\n }\n const cacheable =\n analysis !== undefined && atPosition === Number.POSITIVE_INFINITY;\n const cached = cacheable\n ? staticBindingResults\n .get(analysis)\n ?.get(binding)\n ?.get(allowNumericGlobals)\n : undefined;\n if (cached) return cached;\n if (seen.has(binding)) return { ok: false };\n if (cacheable) {\n const active = staticBindingsInProgress.get(analysis) ?? new Map();\n const modes = active.get(binding) ?? new Set<boolean>();\n if (modes.has(allowNumericGlobals)) return { ok: false };\n modes.add(allowNumericGlobals);\n active.set(binding, modes);\n staticBindingsInProgress.set(analysis, active);\n }\n const nextSeen = new Set(seen);\n nextSeen.add(binding);\n try {\n const source = getBindingSource(binding);\n const expression =\n source && (source.expression.node.end ?? 0) <= atPosition\n ? selectPatternExpression(\n source.pattern,\n source.expression.node,\n binding.identifier.name,\n source.expression.scope,\n source.expression.node.end ?? Number.POSITIVE_INFINITY\n )\n : undefined;\n const result: StaticPrimitiveResult = expression\n ? readStaticFromScope(\n expression.node,\n expression.scope,\n nextSeen,\n atPosition,\n analysis,\n allowNumericGlobals\n )\n : { ok: false };\n if (cacheable) {\n const results = staticBindingResults.get(analysis) ?? new Map();\n const modes = results.get(binding) ?? new Map();\n modes.set(allowNumericGlobals, result);\n results.set(binding, modes);\n staticBindingResults.set(analysis, results);\n }\n return result;\n } finally {\n if (cacheable) {\n const active = staticBindingsInProgress.get(analysis);\n const modes = active?.get(binding);\n modes?.delete(allowNumericGlobals);\n if (modes?.size === 0) active?.delete(binding);\n }\n }\n });\n}\n\nfunction selectPatternExpression(\n pattern: t.Node,\n value: t.Node,\n targetName: string,\n scope: Scope,\n atPosition = value.end ?? Number.POSITIVE_INFINITY,\n state?: ScriptState\n): ScopedExpression | undefined {\n if (pattern.type === 'Identifier') {\n return pattern.name === targetName ? { node: value, scope } : undefined;\n }\n if (pattern.type === 'AssignmentPattern') {\n if (isStaticallyUndefined(value, scope)) {\n return selectPatternExpression(\n pattern.left,\n pattern.right,\n targetName,\n scope,\n atPosition,\n state\n );\n }\n return selectPatternExpression(\n pattern.left,\n value,\n targetName,\n scope,\n atPosition,\n state\n );\n }\n if (pattern.type === 'ObjectPattern') {\n for (const property of pattern.properties) {\n if (property.type !== 'ObjectProperty') continue;\n if (!patternContains(property.value, targetName)) continue;\n const key = state\n ? readResolvedPropertyKey(property, scope, state)\n : readPropertyKey(property);\n if (key === undefined) return undefined;\n const entry = readObjectEntry(\n value,\n key,\n scope,\n new Set(),\n atPosition,\n state\n );\n return entry.status === 'known'\n ? selectPatternExpression(\n property.value,\n entry.expression.node,\n targetName,\n entry.expression.scope,\n atPosition,\n state\n )\n : entry.status === 'absent'\n ? selectPatternDefault(property.value, targetName, scope)\n : undefined;\n }\n }\n if (pattern.type === 'ArrayPattern') {\n for (let index = 0; index < pattern.elements.length; index += 1) {\n const target = pattern.elements[index];\n if (!target || !patternContains(target, targetName)) continue;\n const entry = readArrayEntry(\n value,\n index,\n scope,\n new Set(),\n atPosition,\n state\n );\n if (entry.status === 'absent') {\n return selectPatternDefault(target, targetName, scope);\n }\n return entry.status === 'known'\n ? selectPatternExpression(\n target,\n entry.expression.node,\n targetName,\n entry.expression.scope,\n atPosition,\n state\n )\n : undefined;\n }\n }\n return undefined;\n}\n\nfunction selectPatternDefault(\n pattern: t.Node,\n targetName: string,\n scope: Scope\n): ScopedExpression | undefined {\n return pattern.type === 'AssignmentPattern' &&\n patternContains(pattern.left, targetName)\n ? { node: pattern.right, scope }\n : undefined;\n}\n\nfunction readRequireNamespace(\n node: t.Node | null | undefined,\n scope: Scope\n): Extract<KnownValue, { type: 'namespace' }> | undefined {\n const expression = unwrapExpression(node);\n if (\n !expression ||\n (expression.type !== 'CallExpression' &&\n expression.type !== 'OptionalCallExpression') ||\n expression.callee.type !== 'Identifier' ||\n expression.callee.name !== 'require' ||\n scope.getBinding('require') ||\n expression.arguments.length !== 1\n ) {\n return undefined;\n }\n const argument = expression.arguments[0];\n if (argument?.type !== 'StringLiteral') return undefined;\n return argument.value === 'gt-vue' || argument.value === 'vue'\n ? { type: 'namespace', source: argument.value, mutable: true }\n : undefined;\n}\n\n/** Resolves a member key when its computed expression is statically primitive. */\nfunction readResolvedMemberProperty(\n node: t.MemberExpression | t.OptionalMemberExpression,\n scope: Scope,\n state: ScriptState\n): string | undefined {\n const direct = readMemberProperty(node);\n if (direct !== undefined || !node.computed) return direct;\n const computed = unwrapExpression(node.property);\n const binding =\n computed?.type === 'Identifier'\n ? scope.getBinding(computed.name)\n : undefined;\n const substitution = binding\n ? readParameterSubstitution(binding, state)\n : undefined;\n const materialized =\n !substitution && computed\n ? materializeParameterExpression(computed, scope, state)\n : undefined;\n const property = readStaticFromScope(\n substitution?.node ?? materialized?.node ?? node.property,\n substitution?.scope ?? materialized?.scope ?? scope,\n new Set(),\n node.property.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n return property.ok &&\n (typeof property.value === 'string' || typeof property.value === 'number')\n ? String(property.value)\n : undefined;\n}\n\n/** Resolves an object key whose computed expression is statically primitive. */\nfunction readResolvedPropertyKey(\n property: { computed: boolean; key: t.Node },\n scope: Scope,\n state: ScriptState\n): string | undefined {\n const direct = readPropertyKey(property);\n if (direct !== undefined || !property.computed) return direct;\n const key = readStaticFromScope(\n property.key,\n scope,\n new Set(),\n property.key.end ?? Number.POSITIVE_INFINITY,\n state.analysis\n );\n return key.ok &&\n (typeof key.value === 'string' || typeof key.value === 'number')\n ? String(key.value)\n : undefined;\n}\n"],"mappings":"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"}