@reckona/mreact-compiler 0.0.92 → 0.0.94

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.
@@ -46,11 +46,16 @@ export interface TopLevelExportRenderInfo {
46
46
  }
47
47
  export interface ClientRouteModuleAnalysis {
48
48
  clientRuntime: boolean;
49
+ defaultExportIdentifier: string | undefined;
49
50
  hasUseClientDirective: boolean;
50
51
  hasUseServerDirective: boolean;
51
52
  componentCallRoots: string[];
52
53
  identifierReferences: string[];
53
54
  jsxComponentRoots: string[];
55
+ reachableExportRenderedComponentNames: Record<string, string[]>;
56
+ reachableExportRenderedComponentRoots: Record<string, string[]>;
57
+ reachableRenderedComponentNames: string[];
58
+ reachableRenderedComponentRoots: string[];
54
59
  staticExports: StaticExportReference[];
55
60
  staticImports: ClientRouteStaticImportReference[];
56
61
  topLevelExportRenderInfo: TopLevelExportRenderInfo[];
@@ -78,6 +83,12 @@ export declare function hasTopLevelExportDeclaration(input: {
78
83
  filename?: string | undefined;
79
84
  names: readonly string[];
80
85
  }): boolean;
86
+ export declare function readTopLevelBooleanExport(input: {
87
+ code: string;
88
+ filename?: string | undefined;
89
+ name: string;
90
+ }): boolean | undefined;
91
+ export declare function readTopLevelBooleanExportFromContext(context: CompilerModuleContext, name: string): boolean | undefined;
81
92
  export declare function stripTopLevelExportDeclarations(input: {
82
93
  code: string;
83
94
  filename?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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"}
package/dist/internal.js CHANGED
@@ -16,6 +16,53 @@ export function hasTopLevelExportDeclaration(input) {
16
16
  const parsed = parseModule(input.code, input.filename);
17
17
  return programBody(parsed.program).some((statement) => exportedNames(statement).some((name) => names.has(name)));
18
18
  }
19
+ // Reads the value of a top-level `export const <name> = <boolean literal>`
20
+ // declaration. Returns `undefined` when the export is absent or not a boolean
21
+ // literal. AST-based so commented-out or string-literal occurrences of the same
22
+ // text are not mistaken for a real export.
23
+ export function readTopLevelBooleanExport(input) {
24
+ return readTopLevelBooleanExportFromContext(createCompilerModuleContext({ code: input.code, filename: input.filename }), input.name);
25
+ }
26
+ // Context-accepting variant so callers with a cached `CompilerModuleContext`
27
+ // (e.g. the dev server) avoid re-parsing the module per request.
28
+ export function readTopLevelBooleanExportFromContext(context, name) {
29
+ const parsed = parseModuleContext(context);
30
+ for (const statement of programBody(parsed.program)) {
31
+ if (statement.type !== "ExportNamedDeclaration") {
32
+ continue;
33
+ }
34
+ const declaration = readOptionalObject(statement.declaration);
35
+ if (declaration?.type !== "VariableDeclaration") {
36
+ continue;
37
+ }
38
+ const declarators = Array.isArray(declaration.declarations)
39
+ ? declaration.declarations.map(readObject)
40
+ : [];
41
+ for (const declarator of declarators) {
42
+ const id = readOptionalObject(declarator.id);
43
+ if (typeof id?.name !== "string" || id.name !== name) {
44
+ continue;
45
+ }
46
+ const value = booleanExpressionValue(readOptionalObject(declarator.init));
47
+ if (value !== undefined) {
48
+ return value;
49
+ }
50
+ }
51
+ }
52
+ return undefined;
53
+ }
54
+ function booleanExpressionValue(node) {
55
+ if ((node?.type === "BooleanLiteral" || node?.type === "Literal") &&
56
+ typeof node.value === "boolean") {
57
+ return node.value;
58
+ }
59
+ if (node?.type === "TSAsExpression" ||
60
+ node?.type === "TSSatisfiesExpression" ||
61
+ node?.type === "ParenthesizedExpression") {
62
+ return booleanExpressionValue(readOptionalObject(node.expression));
63
+ }
64
+ return undefined;
65
+ }
19
66
  export function stripTopLevelExportDeclarations(input) {
20
67
  const names = new Set(input.names);
21
68
  const parsed = parseModule(input.code, input.filename);
@@ -121,31 +168,49 @@ export function collectClientRouteModuleAnalysisFromContext(context) {
121
168
  const parsed = parseModuleContext(context);
122
169
  const body = programBody(parsed.program);
123
170
  const identifierReferences = new Set();
171
+ const reachableRenderedComponents = collectReachableExportRenderedComponentsFromProgram(parsed.program);
124
172
  collectIdentifierReferenceNamesFromNode(parsed.program, identifierReferences);
125
173
  return {
126
174
  clientRuntime: hasClientRuntimeSyntaxNode(parsed.program),
175
+ defaultExportIdentifier: reachableRenderedComponents.defaultExportIdentifier,
127
176
  componentCallRoots: collectComponentCallRootNamesFromSubtree(parsed.program),
128
177
  hasUseClientDirective: hasModuleDirectiveInProgram(parsed.program, "use client"),
129
178
  hasUseServerDirective: hasModuleDirectiveInProgram(parsed.program, "use server"),
130
179
  identifierReferences: Array.from(identifierReferences).sort(),
131
180
  jsxComponentRoots: collectJsxComponentRootNamesFromSubtree(parsed.program),
181
+ reachableExportRenderedComponentNames: reachableRenderedComponents.perExportNames,
182
+ reachableExportRenderedComponentRoots: reachableRenderedComponents.perExportRoots,
183
+ reachableRenderedComponentNames: reachableRenderedComponents.names,
184
+ reachableRenderedComponentRoots: reachableRenderedComponents.roots,
132
185
  staticExports: body.flatMap(staticExportReference),
133
186
  staticImports: body.flatMap(staticImportReference),
134
187
  topLevelExportRenderInfo: collectTopLevelExportRenderInfoFromProgram(parsed.program),
135
188
  };
136
189
  }
137
- function collectTopLevelExportRenderInfoFromProgram(program) {
190
+ // Builds the module's export surface: top-level declarations by name, the
191
+ // exported-name -> local-name map, and direct export declaration nodes. A
192
+ // default export that references an identifier (`export default Page`) is
193
+ // resolved through `declarations` so it behaves like `export { Page as default
194
+ // }` rather than stopping at the bare identifier node.
195
+ function collectModuleExportMap(program) {
138
196
  const declarations = new Map();
139
197
  const exported = new Map();
140
198
  const directExports = new Map();
141
199
  const aliasState = createComponentAliasState();
200
+ let defaultExportIdentifier;
142
201
  collectSimpleComponentAliasesFromNode(program, aliasState);
143
202
  for (const statement of programBody(program)) {
144
203
  collectTopLevelDeclarationReferences(statement, declarations);
145
204
  if (statement.type === "ExportDefaultDeclaration") {
146
205
  const declaration = readOptionalObject(statement.declaration);
147
- directExports.set("default", declaration);
148
- exported.set("default", "default");
206
+ if (declaration?.type === "Identifier" && typeof declaration.name === "string") {
207
+ exported.set("default", declaration.name);
208
+ defaultExportIdentifier = declaration.name;
209
+ }
210
+ else {
211
+ directExports.set("default", declaration);
212
+ exported.set("default", "default");
213
+ }
149
214
  continue;
150
215
  }
151
216
  if (statement.type !== "ExportNamedDeclaration") {
@@ -168,6 +233,10 @@ function collectTopLevelExportRenderInfoFromProgram(program) {
168
233
  }
169
234
  }
170
235
  }
236
+ return { aliasState, declarations, defaultExportIdentifier, directExports, exported };
237
+ }
238
+ function collectTopLevelExportRenderInfoFromProgram(program) {
239
+ const { aliasState, declarations, directExports, exported } = collectModuleExportMap(program);
171
240
  return [...exported.entries()]
172
241
  .map(([name, localName]) => {
173
242
  const node = directExports.get(name) ?? declarations.get(localName);
@@ -197,6 +266,62 @@ function collectTopLevelExportRenderInfoFromProgram(program) {
197
266
  .filter((item) => item !== undefined)
198
267
  .sort((left, right) => left.name.localeCompare(right.name));
199
268
  }
269
+ // Collects the JSX components that are actually reachable from the module's
270
+ // exports, walking transitively through same-file declarations (including
271
+ // non-exported helper components). Unlike the file-wide `jsxComponentRoots`,
272
+ // this excludes components rendered only inside dead/unreachable code, so it
273
+ // reflects what the route's server-rendered tree truly contains. Per-export
274
+ // breakdowns let callers attribute a rendered component to the specific export
275
+ // whose subtree renders it (e.g. to keep barrel re-exports precise).
276
+ function collectReachableExportRenderedComponentsFromProgram(program) {
277
+ const { aliasState, declarations, defaultExportIdentifier, directExports, exported } = collectModuleExportMap(program);
278
+ const names = new Set();
279
+ const roots = new Set();
280
+ const perExportNames = {};
281
+ const perExportRoots = {};
282
+ const visit = (node, exportRoots, exportNames, seen) => {
283
+ const renderedRoots = collectJsxComponentRootNamesFromSubtree(node, aliasState.aliases);
284
+ for (const root of renderedRoots) {
285
+ exportRoots.add(root);
286
+ roots.add(root);
287
+ }
288
+ const renderedNames = collectJsxComponentNamesFromSubtree(node, aliasState.aliases);
289
+ for (const name of renderedNames) {
290
+ exportNames.add(name);
291
+ names.add(name);
292
+ }
293
+ const calledRoots = collectComponentCallRootNamesFromSubtree(node, aliasState.aliases);
294
+ for (const root of [...renderedRoots, ...calledRoots]) {
295
+ const resolved = aliasState.aliases.get(root) ?? root;
296
+ if (seen.has(resolved)) {
297
+ continue;
298
+ }
299
+ seen.add(resolved);
300
+ const declaration = declarations.get(resolved);
301
+ if (declaration !== undefined) {
302
+ visit(declaration, exportRoots, exportNames, seen);
303
+ }
304
+ }
305
+ };
306
+ for (const [name, localName] of exported.entries()) {
307
+ const node = directExports.get(name) ?? declarations.get(localName);
308
+ if (node === undefined) {
309
+ continue;
310
+ }
311
+ const exportRoots = new Set();
312
+ const exportNames = new Set();
313
+ visit(node, exportRoots, exportNames, new Set([localName]));
314
+ perExportRoots[name] = Array.from(exportRoots).sort();
315
+ perExportNames[name] = Array.from(exportNames).sort();
316
+ }
317
+ return {
318
+ defaultExportIdentifier,
319
+ names: Array.from(names).sort(),
320
+ roots: Array.from(roots).sort(),
321
+ perExportNames,
322
+ perExportRoots,
323
+ };
324
+ }
200
325
  function hasReachableLocalClientRuntime(options) {
201
326
  for (const root of options.roots) {
202
327
  const resolved = options.aliases.get(root) ?? root;
@@ -784,6 +909,43 @@ function collectJsxComponentRootNamesFromNode(node, names) {
784
909
  collectJsxComponentRootNamesFromNode(value, names);
785
910
  }
786
911
  }
912
+ function collectJsxComponentNamesFromNode(node, names) {
913
+ if (Array.isArray(node)) {
914
+ for (const child of node) {
915
+ collectJsxComponentNamesFromNode(child, names);
916
+ }
917
+ return;
918
+ }
919
+ const object = readOptionalObject(node);
920
+ if (object === undefined) {
921
+ return;
922
+ }
923
+ if (object.type === "JSXElement") {
924
+ const opening = readOptionalObject(object.openingElement);
925
+ const nameNode = readOptionalObject(opening?.name);
926
+ const root = jsxNameRoot(nameNode);
927
+ const name = jsxTagName(nameNode);
928
+ if (name !== "" &&
929
+ root !== undefined &&
930
+ (nameNode?.type === "JSXMemberExpression" || /^[A-Z]/.test(root))) {
931
+ names.add(name);
932
+ }
933
+ }
934
+ for (const [key, value] of Object.entries(object)) {
935
+ if (key === "type" || key === "start" || key === "end" || key === "loc") {
936
+ continue;
937
+ }
938
+ collectJsxComponentNamesFromNode(value, names);
939
+ }
940
+ }
941
+ function collectJsxComponentNamesFromSubtree(node, outerAliases) {
942
+ const names = new Set();
943
+ const aliasState = createComponentAliasState(outerAliases);
944
+ collectJsxComponentNamesFromNode(node, names);
945
+ collectSimpleComponentAliasesFromNode(node, aliasState);
946
+ expandJsxComponentAliasRoots(names, aliasState.aliases);
947
+ return Array.from(names).sort();
948
+ }
787
949
  function collectJsxComponentRootNamesFromSubtree(node, outerAliases) {
788
950
  const names = new Set();
789
951
  const aliasState = createComponentAliasState(outerAliases);
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModuleIr } from \"./ir.js\";\nimport {\n analyzeCompilerModuleContextWithOxc,\n analyzeWithOxc,\n} from \"./oxc.js\";\nimport {\n createCompilerModuleContextWithOxc,\n type CompilerModuleContext,\n} from \"./compiler-module-context.js\";\nexport { transformCompilerModuleContext } from \"./transform.js\";\nexport { stripTypeScriptWithOxc } from \"./oxc-transform.js\";\nexport type { CompilerModuleContext } from \"./compiler-module-context.js\";\nimport type {\n AnalyzeModuleOptions,\n CompileTarget,\n Diagnostic,\n} from \"./types.js\";\n\nexport interface AnalyzeToIrInput {\n code: string;\n filename: string;\n target: CompileTarget;\n options?: AnalyzeModuleOptions;\n}\n\nexport interface AnalyzeToIrOutput {\n ir: ModuleIr;\n diagnostics: Diagnostic[];\n usedTypescriptFallback?: boolean;\n}\n\nexport interface StaticImportReference {\n localNames: string[];\n sideEffect: boolean;\n source: string;\n}\n\nexport interface StaticImportSpecifierReference {\n importedName: string;\n kind: \"default\" | \"named\" | \"namespace\";\n localName: string;\n}\n\nexport interface ClientRouteStaticImportReference extends StaticImportReference {\n specifiers: StaticImportSpecifierReference[];\n}\n\nexport interface StaticExportReference {\n exportedNames: string[];\n exportAll: boolean;\n specifiers: StaticExportSpecifierReference[];\n source: string;\n}\n\nexport interface StaticExportSpecifierReference {\n exportedName: string;\n localName: string;\n}\n\nexport interface TopLevelExportRenderInfo {\n calledComponentRoots: string[];\n clientRuntime: boolean;\n name: string;\n renderedComponentRoots: string[];\n}\n\nexport interface ClientRouteModuleAnalysis {\n clientRuntime: boolean;\n hasUseClientDirective: boolean;\n hasUseServerDirective: boolean;\n componentCallRoots: string[];\n identifierReferences: string[];\n jsxComponentRoots: string[];\n staticExports: StaticExportReference[];\n staticImports: ClientRouteStaticImportReference[];\n topLevelExportRenderInfo: TopLevelExportRenderInfo[];\n}\n\nexport interface FormActionReference {\n end: number;\n name: string;\n start: number;\n}\n\nexport interface FormActionExpressionReference {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n start: number;\n}\n\ninterface ComponentAliasState {\n aliases: Map<string, string>;\n stringConstants: Map<string, string>;\n}\n\nexport function analyzeToIr(input: AnalyzeToIrInput): AnalyzeToIrOutput {\n return analyzeWithOxc(input);\n}\n\nexport function analyzeCompilerModuleContextToIr(\n context: CompilerModuleContext,\n input: Omit<AnalyzeToIrInput, \"code\" | \"filename\">,\n): AnalyzeToIrOutput {\n return analyzeCompilerModuleContextWithOxc(context, input);\n}\n\nexport function createCompilerModuleContext(input: {\n code: string;\n filename?: string | undefined;\n}): CompilerModuleContext {\n return createCompilerModuleContextWithOxc(input);\n}\n\nexport function hasTopLevelExportDeclaration(input: {\n code: string;\n filename?: string | undefined;\n names: readonly string[];\n}): boolean {\n const names = new Set(input.names);\n const parsed = parseModule(input.code, input.filename);\n\n return programBody(parsed.program).some((statement) =>\n exportedNames(statement).some((name) => names.has(name)),\n );\n}\n\nexport function stripTopLevelExportDeclarations(input: {\n code: string;\n filename?: string | undefined;\n names: readonly string[];\n}): string {\n const names = new Set(input.names);\n const parsed = parseModule(input.code, input.filename);\n const replacements = programBody(parsed.program)\n .map((statement) => exportDeclarationReplacement(input.code, statement, names))\n .filter((replacement): replacement is Replacement => replacement !== undefined)\n .sort((left, right) => right.start - left.start);\n let code = input.code;\n\n for (const replacement of replacements) {\n code = `${code.slice(0, replacement.start)}${replacement.text}${code.slice(replacement.end)}`;\n }\n\n return code;\n}\n\nexport function demoteTopLevelExportDeclarations(input: {\n code: string;\n filename?: string | undefined;\n names: readonly string[];\n}): string {\n const names = new Set(input.names);\n const parsed = parseModule(input.code, input.filename);\n const replacements = programBody(parsed.program)\n .map((statement) => exportDeclarationDemotion(input.code, statement, names))\n .filter((replacement): replacement is Replacement => replacement !== undefined)\n .sort((left, right) => right.start - left.start);\n let code = input.code;\n\n for (const replacement of replacements) {\n code = `${code.slice(0, replacement.start)}${replacement.text}${code.slice(replacement.end)}`;\n }\n\n return code;\n}\n\nexport function stripUnusedStaticValueImports(input: {\n code: string;\n filename?: string | undefined;\n}): string {\n const parsed = parseModule(input.code, input.filename);\n const referencedNames = new Set(collectIdentifierReferenceNames(input));\n const replacements = programBody(parsed.program)\n .map((statement) =>\n unusedStaticValueImportReplacement(input.code, statement, referencedNames),\n )\n .filter((replacement): replacement is Replacement => replacement !== undefined)\n .sort((left, right) => right.start - left.start);\n let code = input.code;\n\n for (const replacement of replacements) {\n code = `${code.slice(0, replacement.start)}${replacement.text}${code.slice(replacement.end)}`;\n }\n\n return code;\n}\n\nexport function collectStaticModuleSpecifiers(input: {\n code: string;\n filename?: string | undefined;\n}): string[] {\n const parsed = parseModule(input.code, input.filename);\n\n return programBody(parsed.program).flatMap(staticModuleSpecifier);\n}\n\nexport function collectStaticImportReferences(input: {\n code: string;\n filename?: string | undefined;\n}): StaticImportReference[] {\n const parsed = parseModule(input.code, input.filename);\n\n return programBody(parsed.program).flatMap(staticImportReference);\n}\n\nexport function collectStaticExportReferences(input: {\n code: string;\n filename?: string | undefined;\n}): StaticExportReference[] {\n const parsed = parseModule(input.code, input.filename);\n\n return programBody(parsed.program).flatMap(staticExportReference);\n}\n\nexport function collectJsxComponentRootNames(input: {\n code: string;\n filename?: string | undefined;\n}): string[] {\n const parsed = parseModule(input.code, input.filename);\n const names = new Set<string>();\n const aliasState = createComponentAliasState();\n\n collectJsxComponentRootNamesFromNode(parsed.program, names);\n collectSimpleComponentAliasesFromNode(parsed.program, aliasState);\n expandJsxComponentAliasRoots(names, aliasState.aliases);\n return Array.from(names).sort();\n}\n\nexport function collectIdentifierReferenceNames(input: {\n code: string;\n filename?: string | undefined;\n}): string[] {\n const parsed = parseModule(input.code, input.filename);\n const names = new Set<string>();\n\n collectIdentifierReferenceNamesFromNode(parsed.program, names);\n return Array.from(names).sort();\n}\n\nexport function collectFormActionReferenceNames(input: {\n code: string;\n filename?: string | undefined;\n}): string[] {\n return Array.from(\n new Set(collectFormActionReferences(input).map((reference) => reference.name)),\n ).sort();\n}\n\nexport function collectFormActionReferences(input: {\n code: string;\n filename?: string | undefined;\n}): FormActionReference[] {\n const parsed = parseModule(input.code, input.filename);\n const references: FormActionReference[] = [];\n\n collectFormActionReferencesFromNode(parsed.program, references);\n return references.sort((left, right) =>\n left.start === right.start ? left.name.localeCompare(right.name) : left.start - right.start,\n );\n}\n\nexport function collectFormActionExpressionReferences(input: {\n code: string;\n filename?: string | undefined;\n}): FormActionExpressionReference[] {\n const parsed = parseModule(input.code, input.filename);\n const references: FormActionExpressionReference[] = [];\n\n collectFormActionExpressionReferencesFromNode(input.code, parsed.program, references);\n return references.sort((left, right) =>\n left.start === right.start\n ? left.expression.localeCompare(right.expression)\n : left.start - right.start,\n );\n}\n\nexport function collectTopLevelValueExportNames(input: {\n code: string;\n filename?: string | undefined;\n}): string[] {\n const parsed = parseModule(input.code, input.filename);\n const names = new Set<string>();\n\n for (const statement of programBody(parsed.program)) {\n for (const name of exportedNames(statement)) {\n names.add(name);\n }\n }\n\n return Array.from(names).sort();\n}\n\nexport function collectTopLevelExportRenderInfo(input: {\n code: string;\n filename?: string | undefined;\n}): TopLevelExportRenderInfo[] {\n const parsed = parseModule(input.code, input.filename);\n\n return collectTopLevelExportRenderInfoFromProgram(parsed.program);\n}\n\nexport function collectClientRouteModuleAnalysis(input: {\n code: string;\n filename?: string | undefined;\n}): ClientRouteModuleAnalysis {\n const parsed = parseModule(input.code, input.filename);\n\n return collectClientRouteModuleAnalysisFromContext(parsed);\n}\n\nexport function collectClientRouteModuleAnalysisFromContext(\n context: CompilerModuleContext,\n): ClientRouteModuleAnalysis {\n const parsed = parseModuleContext(context);\n const body = programBody(parsed.program);\n const identifierReferences = new Set<string>();\n\n collectIdentifierReferenceNamesFromNode(parsed.program, identifierReferences);\n\n return {\n clientRuntime: hasClientRuntimeSyntaxNode(parsed.program),\n componentCallRoots: collectComponentCallRootNamesFromSubtree(parsed.program),\n hasUseClientDirective: hasModuleDirectiveInProgram(parsed.program, \"use client\"),\n hasUseServerDirective: hasModuleDirectiveInProgram(parsed.program, \"use server\"),\n identifierReferences: Array.from(identifierReferences).sort(),\n jsxComponentRoots: collectJsxComponentRootNamesFromSubtree(parsed.program),\n staticExports: body.flatMap(staticExportReference),\n staticImports: body.flatMap(staticImportReference),\n topLevelExportRenderInfo: collectTopLevelExportRenderInfoFromProgram(parsed.program),\n };\n}\n\nfunction collectTopLevelExportRenderInfoFromProgram(program: unknown): TopLevelExportRenderInfo[] {\n const declarations = new Map<string, unknown>();\n const exported = new Map<string, string>();\n const directExports = new Map<string, unknown>();\n const aliasState = createComponentAliasState();\n\n collectSimpleComponentAliasesFromNode(program, aliasState);\n\n for (const statement of programBody(program)) {\n collectTopLevelDeclarationReferences(statement, declarations);\n\n if (statement.type === \"ExportDefaultDeclaration\") {\n const declaration = readOptionalObject(statement.declaration);\n directExports.set(\"default\", declaration);\n exported.set(\"default\", \"default\");\n continue;\n }\n\n if (statement.type !== \"ExportNamedDeclaration\") {\n continue;\n }\n\n const declaration = readOptionalObject(statement.declaration);\n if (declaration !== undefined) {\n for (const name of exportedNames(statement)) {\n exported.set(name, name);\n directExports.set(name, declarationForExportedName(declaration, name) ?? declaration);\n }\n continue;\n }\n\n const specifiers = Array.isArray(statement.specifiers) ? statement.specifiers.map(readObject) : [];\n for (const specifier of specifiers) {\n const exportedName = exportedNameForSpecifier(specifier);\n const localName = localNameForExportSpecifier(specifier);\n\n if (exportedName !== undefined && localName !== undefined) {\n exported.set(exportedName, localName);\n }\n }\n }\n\n return [...exported.entries()]\n .map(([name, localName]) => {\n const node = directExports.get(name) ?? declarations.get(localName);\n const calledComponentRoots = node === undefined\n ? []\n : collectComponentCallRootNamesFromSubtree(\n node,\n aliasState.aliases,\n );\n const renderedComponentRoots = node === undefined\n ? []\n : collectJsxComponentRootNamesFromSubtree(\n node,\n aliasState.aliases,\n );\n const clientRuntime = node === undefined\n ? false\n : hasReachableExportClientRuntime({\n aliases: aliasState.aliases,\n declarations,\n localName,\n node,\n });\n\n return node === undefined\n ? undefined\n : {\n calledComponentRoots,\n clientRuntime,\n name,\n renderedComponentRoots,\n };\n })\n .filter((item): item is TopLevelExportRenderInfo => item !== undefined)\n .sort((left, right) => left.name.localeCompare(right.name));\n}\n\nfunction hasReachableLocalClientRuntime(options: {\n aliases: ReadonlyMap<string, string>;\n declarations: ReadonlyMap<string, unknown>;\n roots: readonly string[];\n seen: Set<string>;\n}): boolean {\n for (const root of options.roots) {\n const resolved = options.aliases.get(root) ?? root;\n if (options.seen.has(resolved)) {\n continue;\n }\n\n const declaration = options.declarations.get(resolved);\n if (declaration === undefined) {\n continue;\n }\n\n if (hasClientRuntimeSyntaxNode(declaration)) {\n return true;\n }\n\n options.seen.add(resolved);\n const nestedCalledRoots = collectComponentCallRootNamesFromSubtree(\n declaration,\n options.aliases,\n );\n const nestedRenderedRoots = collectJsxComponentRootNamesFromSubtree(\n declaration,\n options.aliases,\n );\n\n if (\n hasReachableLocalClientRuntime({\n aliases: options.aliases,\n declarations: options.declarations,\n roots: [...nestedCalledRoots, ...nestedRenderedRoots],\n seen: options.seen,\n })\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction hasReachableExportClientRuntime(options: {\n aliases: ReadonlyMap<string, string>;\n declarations: ReadonlyMap<string, unknown>;\n localName: string;\n node: unknown;\n}): boolean {\n return hasReachableExportClientRuntimeNode({\n aliases: options.aliases,\n declarations: options.declarations,\n node: options.node,\n seen: new Set([options.localName]),\n });\n}\n\nfunction hasReachableExportClientRuntimeNode(options: {\n aliases: ReadonlyMap<string, string>;\n declarations: ReadonlyMap<string, unknown>;\n node: unknown;\n seen: Set<string>;\n}): boolean {\n if (hasClientRuntimeSyntaxNode(options.node)) {\n return true;\n }\n\n const references = collectRuntimeReferenceRootNamesFromSubtree(\n options.node,\n options.aliases,\n );\n\n for (const reference of references) {\n const declaration = options.declarations.get(reference);\n if (\n declaration !== undefined &&\n !isFunctionLikeClientRuntimeDeclaration(declaration) &&\n hasClientRuntimeSyntaxNode(declaration)\n ) {\n return true;\n }\n }\n\n const calledRoots = collectRuntimeCallRootNamesFromSubtree(\n options.node,\n options.aliases,\n );\n const renderedRoots = collectJsxComponentRootNamesFromSubtree(\n options.node,\n options.aliases,\n );\n\n if (\n hasReachableLocalClientRuntime({\n aliases: options.aliases,\n declarations: options.declarations,\n roots: [...calledRoots, ...renderedRoots],\n seen: options.seen,\n })\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction collectRuntimeReferenceRootNamesFromSubtree(\n node: unknown,\n aliases: ReadonlyMap<string, string>,\n): string[] {\n const names = new Set<string>();\n collectRuntimeReferenceRootNamesFromNode(\n node,\n names,\n createComponentAliasState(aliases),\n new Set(),\n undefined,\n undefined,\n );\n return Array.from(names).sort();\n}\n\nfunction collectRuntimeCallRootNamesFromSubtree(\n node: unknown,\n aliases: ReadonlyMap<string, string>,\n): string[] {\n const names = new Set<string>();\n collectRuntimeCallRootNamesFromNode(\n node,\n names,\n createComponentAliasState(aliases),\n new Set(),\n );\n return Array.from(names).sort();\n}\n\nfunction collectRuntimeReferenceRootNamesFromNode(\n node: unknown,\n names: Set<string>,\n state: ComponentAliasState,\n shadowed: ReadonlySet<string>,\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectRuntimeReferenceRootNamesFromNode(\n child,\n names,\n state,\n shadowed,\n parent,\n parentKey,\n );\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined || shouldSkipRuntimeReferenceNode(object)) {\n return;\n }\n\n if (object.type === \"Identifier\" && typeof object.name === \"string\") {\n if (\n !shadowed.has(object.name) &&\n isRuntimeReferenceIdentifier(parent, parentKey)\n ) {\n names.add(state.aliases.get(object.name) ?? object.name);\n }\n return;\n }\n\n if (isFunctionLikeClientRuntimeDeclaration(object)) {\n const nextShadowed = new Set(shadowed);\n collectBindingNamesInto(object.id, nextShadowed);\n for (const parameter of readArray(object.params)) {\n collectBindingNamesInto(parameter, nextShadowed);\n }\n collectRuntimeReferenceRootNamesFromNode(\n object.body,\n names,\n state,\n addBlockBindingNames(object.body, nextShadowed),\n object,\n \"body\",\n );\n return;\n }\n\n const childShadowed =\n object.type === \"Program\" || object.type === \"BlockStatement\"\n ? addBlockBindingNames(object, new Set(shadowed))\n : shadowed;\n\n for (const [key, value] of Object.entries(object)) {\n if (shouldSkipRuntimeReferenceProperty(object, key)) {\n continue;\n }\n\n collectRuntimeReferenceRootNamesFromNode(\n value,\n names,\n state,\n childShadowed,\n object,\n key,\n );\n }\n}\n\nfunction collectRuntimeCallRootNamesFromNode(\n node: unknown,\n names: Set<string>,\n state: ComponentAliasState,\n shadowed: ReadonlySet<string>,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectRuntimeCallRootNamesFromNode(child, names, state, shadowed);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined || shouldSkipRuntimeReferenceNode(object)) {\n return;\n }\n\n if (isFunctionLikeClientRuntimeDeclaration(object)) {\n const nextShadowed = new Set(shadowed);\n collectBindingNamesInto(object.id, nextShadowed);\n for (const parameter of readArray(object.params)) {\n collectBindingNamesInto(parameter, nextShadowed);\n }\n collectRuntimeCallRootNamesFromNode(\n object.body,\n names,\n state,\n addBlockBindingNames(object.body, nextShadowed),\n );\n return;\n }\n\n if (object.type === \"CallExpression\") {\n const root = expressionRootName(readOptionalObject(object.callee), state);\n if (root !== undefined && !shadowed.has(root)) {\n names.add(root);\n }\n }\n\n const childShadowed =\n object.type === \"Program\" || object.type === \"BlockStatement\"\n ? addBlockBindingNames(object, new Set(shadowed))\n : shadowed;\n\n for (const [key, value] of Object.entries(object)) {\n if (shouldSkipRuntimeReferenceProperty(object, key)) {\n continue;\n }\n\n collectRuntimeCallRootNamesFromNode(value, names, state, childShadowed);\n }\n}\n\nfunction shouldSkipRuntimeReferenceNode(node: Record<string, unknown>): boolean {\n return (\n (typeof node.type === \"string\" && node.type.startsWith(\"TS\")) ||\n node.type === \"ImportDeclaration\"\n );\n}\n\nfunction shouldSkipRuntimeReferenceProperty(\n node: Record<string, unknown>,\n key: string,\n): boolean {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n return true;\n }\n\n if (key === \"id\" && isDeclarationWithId(node)) {\n return true;\n }\n\n if (key === \"params\" && isFunctionLikeClientRuntimeDeclaration(node)) {\n return true;\n }\n\n if (key === \"key\" && isNonComputedPropertyKey(node)) {\n return true;\n }\n\n return false;\n}\n\nfunction isRuntimeReferenceIdentifier(\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n): boolean {\n if (parent === undefined) {\n return true;\n }\n\n if (parent.type === \"MemberExpression\" && parentKey === \"property\" && parent.computed !== true) {\n return false;\n }\n\n if (parentKey === \"id\" && isDeclarationWithId(parent)) {\n return false;\n }\n\n if (parentKey === \"params\" && isFunctionLikeClientRuntimeDeclaration(parent)) {\n return false;\n }\n\n if (parentKey === \"key\" && isNonComputedPropertyKey(parent)) {\n return false;\n }\n\n return !(\n (parent.type === \"BreakStatement\" ||\n parent.type === \"ContinueStatement\" ||\n parent.type === \"LabeledStatement\") &&\n parentKey === \"label\"\n );\n}\n\nfunction addBlockBindingNames(\n node: unknown,\n names: Set<string>,\n): ReadonlySet<string> {\n const body = readArray(readObject(node).body);\n\n for (const statement of body) {\n const object = readObject(statement);\n if (object.type === \"VariableDeclaration\") {\n for (const declaration of readArray(object.declarations)) {\n collectBindingNamesInto(readObject(declaration).id, names);\n }\n continue;\n }\n\n if (object.type === \"FunctionDeclaration\" || object.type === \"ClassDeclaration\") {\n collectBindingNamesInto(object.id, names);\n }\n }\n\n return names;\n}\n\nfunction collectBindingNamesInto(node: unknown, names: Set<string>): void {\n for (const name of bindingNames(node)) {\n names.add(name);\n }\n}\n\nfunction isFunctionLikeClientRuntimeDeclaration(node: unknown): boolean {\n const object = readObject(node);\n return (\n object.type === \"FunctionDeclaration\" ||\n object.type === \"FunctionExpression\" ||\n object.type === \"ArrowFunctionExpression\"\n );\n}\n\nfunction isDeclarationWithId(node: Record<string, unknown>): boolean {\n return (\n node.type === \"VariableDeclarator\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\" ||\n node.type === \"ClassDeclaration\" ||\n node.type === \"ClassExpression\"\n );\n}\n\nfunction isNonComputedPropertyKey(node: Record<string, unknown>): boolean {\n return (\n (node.type === \"Property\" ||\n node.type === \"ObjectProperty\" ||\n node.type === \"PropertyDefinition\" ||\n node.type === \"MethodDefinition\") &&\n node.computed !== true\n );\n}\n\nexport function hasModuleDirective(input: {\n code: string;\n directive: string;\n filename?: string | undefined;\n}): boolean {\n const parsed = parseModule(input.code, input.filename);\n\n return hasModuleDirectiveInProgram(parsed.program, input.directive);\n}\n\nfunction hasModuleDirectiveInProgram(program: unknown, expectedDirective: string): boolean {\n for (const statement of programBody(program)) {\n if (statement.type !== \"ExpressionStatement\") {\n return false;\n }\n\n const directive = statement.directive;\n if (typeof directive !== \"string\") {\n return false;\n }\n\n if (directive === expectedDirective) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function hasClientRuntimeSyntax(input: {\n code: string;\n filename?: string | undefined;\n}): boolean {\n const parsed = parseModule(input.code, input.filename);\n\n return hasClientRuntimeSyntaxNode(parsed.program);\n}\n\ninterface Replacement {\n end: number;\n start: number;\n text: string;\n}\n\nfunction parseModule(code: string, filename: string | undefined) {\n return parseModuleContext(createCompilerModuleContext({ code, filename }));\n}\n\nfunction parseModuleContext(context: CompilerModuleContext): CompilerModuleContext {\n if (context.parseErrors.length > 0) {\n throw new Error(\n `${context.filename}: ${context.parseErrors\n .map((error) => readObject(error).message)\n .filter((message): message is string => typeof message === \"string\")\n .join(\"\\n\")}`,\n );\n }\n\n return context;\n}\n\nfunction programBody(program: unknown): Record<string, unknown>[] {\n const body = readObject(program).body;\n return Array.isArray(body) ? body.map(readObject) : [];\n}\n\nfunction exportedNames(statement: Record<string, unknown>): string[] {\n if (statement.type === \"ExportDefaultDeclaration\") {\n return [\"default\"];\n }\n\n if (statement.type !== \"ExportNamedDeclaration\") {\n return [];\n }\n\n const declaration = readOptionalObject(statement.declaration);\n\n if (declaration !== undefined) {\n if (declaration.type === \"FunctionDeclaration\") {\n const name = readOptionalObject(declaration.id)?.name;\n return typeof name === \"string\" ? [name] : [];\n }\n\n if (declaration.type === \"VariableDeclaration\") {\n const declarations = Array.isArray(declaration.declarations) ? declaration.declarations : [];\n\n return declarations.flatMap((item) => bindingNames(readObject(item).id));\n }\n\n return [];\n }\n\n const specifiers = Array.isArray(statement.specifiers) ? statement.specifiers : [];\n return specifiers.flatMap((specifier) => {\n const name = exportedNameForSpecifier(readObject(specifier));\n\n return typeof name === \"string\" ? [name] : [];\n });\n}\n\nfunction collectTopLevelDeclarationReferences(\n statement: Record<string, unknown>,\n declarations: Map<string, unknown>,\n): void {\n const declaration =\n statement.type === \"ExportNamedDeclaration\"\n ? readOptionalObject(statement.declaration)\n : statement;\n\n if (declaration?.type === \"FunctionDeclaration\") {\n const name = readOptionalObject(declaration.id)?.name;\n\n if (typeof name === \"string\") {\n declarations.set(name, declaration);\n }\n return;\n }\n\n if (declaration?.type !== \"VariableDeclaration\") {\n return;\n }\n\n const declarators = Array.isArray(declaration.declarations)\n ? declaration.declarations.map(readObject)\n : [];\n\n for (const declarator of declarators) {\n const id = readOptionalObject(declarator.id);\n const name = typeof id?.name === \"string\" ? id.name : undefined;\n\n if (name !== undefined) {\n declarations.set(name, readOptionalObject(declarator.init) ?? declarator);\n }\n }\n}\n\nfunction declarationForExportedName(\n declaration: Record<string, unknown>,\n name: string,\n): unknown | undefined {\n if (declaration.type === \"VariableDeclaration\") {\n const declarators = Array.isArray(declaration.declarations)\n ? declaration.declarations.map(readObject)\n : [];\n\n for (const declarator of declarators) {\n if (bindingNames(declarator.id).includes(name)) {\n return readOptionalObject(declarator.init) ?? declarator;\n }\n }\n }\n\n return declaration;\n}\n\nfunction localNameForExportSpecifier(specifier: Record<string, unknown>): string | undefined {\n const local = readOptionalObject(specifier.local);\n const name = local?.name ?? local?.value;\n\n return typeof name === \"string\" ? name : undefined;\n}\n\nfunction exportDeclarationDemotion(\n code: string,\n statement: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Replacement | undefined {\n if (statement.type !== \"ExportNamedDeclaration\") {\n return undefined;\n }\n\n const declaration = readOptionalObject(statement.declaration);\n const exported = exportedNames(statement);\n\n if (exported.length === 0 || !exported.every((name) => names.has(name))) {\n return partialSpecifierExportReplacement(code, statement, names);\n }\n\n const range = statementRange(code, statement);\n\n if (range === undefined) {\n return undefined;\n }\n\n if (declaration?.type === \"FunctionDeclaration\" || declaration?.type === \"VariableDeclaration\") {\n return { ...range, text: `${nodeText(code, declaration)}\\n` };\n }\n\n return { ...range, text: \"\" };\n}\n\nfunction exportDeclarationReplacement(\n code: string,\n statement: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Replacement | undefined {\n if (statement.type === \"ExportDefaultDeclaration\") {\n const range = statementRange(code, statement);\n return names.has(\"default\") && range !== undefined ? { ...range, text: \"\" } : undefined;\n }\n\n if (statement.type !== \"ExportNamedDeclaration\") {\n return undefined;\n }\n\n const partial = partialExportDeclarationReplacement(code, statement, names);\n\n if (partial !== undefined) {\n return partial;\n }\n\n const exported = exportedNames(statement);\n if (exported.length === 0 || !exported.every((name) => names.has(name))) {\n return undefined;\n }\n\n const range = statementRange(code, statement);\n return range === undefined ? undefined : { ...range, text: \"\" };\n}\n\nfunction partialExportDeclarationReplacement(\n code: string,\n statement: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Replacement | undefined {\n const declaration = readOptionalObject(statement.declaration);\n\n if (declaration?.type === \"VariableDeclaration\") {\n return partialVariableExportReplacement(code, statement, declaration, names);\n }\n\n if (declaration !== undefined) {\n return undefined;\n }\n\n return partialSpecifierExportReplacement(code, statement, names);\n}\n\nfunction partialVariableExportReplacement(\n code: string,\n statement: Record<string, unknown>,\n declaration: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Replacement | undefined {\n const declarations = Array.isArray(declaration.declarations)\n ? declaration.declarations.map(readObject)\n : [];\n\n if (declarations.length <= 1) {\n return undefined;\n }\n\n const kept = declarations.filter((declarator) => {\n const declaredNames = bindingNames(declarator.id);\n return declaredNames.every((name) => !names.has(name));\n });\n\n if (kept.length === declarations.length) {\n return undefined;\n }\n\n if (kept.length === 0) {\n const range = statementRange(code, statement);\n return range === undefined ? undefined : { ...range, text: \"\" };\n }\n\n const range = statementRange(code, statement);\n const kind = typeof declaration.kind === \"string\" ? declaration.kind : \"const\";\n\n return range === undefined\n ? undefined\n : {\n ...range,\n text: `export ${kind} ${kept.map((item) => nodeText(code, item)).join(\", \")};\\n`,\n };\n}\n\nfunction partialSpecifierExportReplacement(\n code: string,\n statement: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Replacement | undefined {\n const specifiers = Array.isArray(statement.specifiers)\n ? statement.specifiers.map(readObject)\n : [];\n\n if (specifiers.length <= 1) {\n return undefined;\n }\n\n const kept = specifiers.filter((specifier) => {\n const name = exportedNameForSpecifier(specifier);\n return typeof name !== \"string\" || !names.has(name);\n });\n\n if (kept.length === specifiers.length) {\n return undefined;\n }\n\n const range = statementRange(code, statement);\n if (range === undefined) {\n return undefined;\n }\n\n if (kept.length === 0) {\n return { ...range, text: \"\" };\n }\n\n const source = readOptionalObject(statement.source);\n const sourceText = source === undefined ? \"\" : ` from ${nodeText(code, source)}`;\n const exportKind = statement.exportKind === \"type\" ? \"export type\" : \"export\";\n\n return {\n ...range,\n text: `${exportKind} { ${kept.map((item) => nodeText(code, item)).join(\", \")} }${sourceText};\\n`,\n };\n}\n\nfunction unusedStaticValueImportReplacement(\n code: string,\n statement: Record<string, unknown>,\n referencedNames: ReadonlySet<string>,\n): Replacement | undefined {\n if (statement.type !== \"ImportDeclaration\" || statement.importKind === \"type\") {\n return undefined;\n }\n\n const specifiers = Array.isArray(statement.specifiers)\n ? statement.specifiers.map(readObject)\n : [];\n\n if (specifiers.length === 0) {\n return undefined;\n }\n\n const localNames = specifiers\n .filter((specifier) => specifier.importKind !== \"type\")\n .flatMap((specifier) => {\n const local = readOptionalObject(specifier.local);\n return typeof local?.name === \"string\" ? [local.name] : [];\n });\n\n if (localNames.length === 0 || localNames.some((name) => referencedNames.has(name))) {\n return undefined;\n }\n\n const range = statementRange(code, statement);\n return range === undefined ? undefined : { ...range, text: \"\" };\n}\n\nfunction staticModuleSpecifier(statement: Record<string, unknown>): string[] {\n if (statement.type === \"ImportDeclaration\") {\n if (statement.importKind === \"type\") {\n return [];\n }\n\n return sourceValue(statement);\n }\n\n if (statement.type === \"ExportAllDeclaration\" || statement.type === \"ExportNamedDeclaration\") {\n if (statement.exportKind === \"type\") {\n return [];\n }\n\n return sourceValue(statement);\n }\n\n return [];\n}\n\nfunction staticImportReference(\n statement: Record<string, unknown>,\n): ClientRouteStaticImportReference[] {\n if (statement.type !== \"ImportDeclaration\" || statement.importKind === \"type\") {\n return [];\n }\n\n const source = sourceValue(statement)[0];\n if (source === undefined) {\n return [];\n }\n\n const specifiers = Array.isArray(statement.specifiers)\n ? statement.specifiers.map(readObject)\n : [];\n const importSpecifiers = specifiers.flatMap(staticImportSpecifierReference);\n const localNames = specifiers\n .filter((specifier) => specifier.importKind !== \"type\")\n .flatMap((specifier) => {\n const local = readOptionalObject(specifier.local);\n return typeof local?.name === \"string\" ? [local.name] : [];\n });\n\n return [\n {\n localNames,\n sideEffect: localNames.length === 0,\n source,\n specifiers: importSpecifiers,\n },\n ];\n}\n\nfunction staticImportSpecifierReference(\n specifier: Record<string, unknown>,\n): StaticImportSpecifierReference[] {\n if (specifier.importKind === \"type\") {\n return [];\n }\n\n const localName = readOptionalObject(specifier.local)?.name;\n if (typeof localName !== \"string\") {\n return [];\n }\n\n if (specifier.type === \"ImportDefaultSpecifier\") {\n return [{ importedName: \"default\", kind: \"default\", localName }];\n }\n\n if (specifier.type === \"ImportNamespaceSpecifier\") {\n return [{ importedName: \"*\", kind: \"namespace\", localName }];\n }\n\n const imported = readOptionalObject(specifier.imported);\n const importedName = imported?.name ?? imported?.value;\n return typeof importedName === \"string\"\n ? [{ importedName, kind: \"named\", localName }]\n : [];\n}\n\nfunction staticExportReference(statement: Record<string, unknown>): StaticExportReference[] {\n if (statement.type === \"ExportAllDeclaration\") {\n if (statement.exportKind === \"type\") {\n return [];\n }\n\n const source = sourceValue(statement)[0];\n return source === undefined\n ? []\n : [{ exportedNames: [], exportAll: true, specifiers: [], source }];\n }\n\n if (statement.type !== \"ExportNamedDeclaration\" || statement.exportKind === \"type\") {\n return [];\n }\n\n const source = sourceValue(statement)[0];\n if (source === undefined) {\n return [];\n }\n\n return [\n {\n exportedNames: exportedNames(statement),\n exportAll: false,\n specifiers: staticExportSpecifierReferences(statement),\n source,\n },\n ];\n}\n\nfunction staticExportSpecifierReferences(\n statement: Record<string, unknown>,\n): StaticExportSpecifierReference[] {\n const specifiers = Array.isArray(statement.specifiers)\n ? statement.specifiers.map(readObject)\n : [];\n\n return specifiers.flatMap((specifier) => {\n const exportedName = exportedNameForSpecifier(specifier);\n const localName = localNameForExportSpecifier(specifier);\n\n return exportedName === undefined || localName === undefined\n ? []\n : [{ exportedName, localName }];\n });\n}\n\nfunction sourceValue(statement: Record<string, unknown>): string[] {\n const source = readOptionalObject(statement.source);\n const value = source?.value;\n\n return typeof value === \"string\" ? [value] : [];\n}\n\nfunction collectJsxComponentRootNamesFromNode(\n node: unknown,\n names: Set<string>,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectJsxComponentRootNamesFromNode(child, names);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (object.type === \"JSXElement\") {\n const opening = readOptionalObject(object.openingElement);\n const nameNode = readOptionalObject(opening?.name);\n const name = jsxNameRoot(nameNode);\n if (name !== undefined && (nameNode?.type === \"JSXMemberExpression\" || /^[A-Z]/.test(name))) {\n names.add(name);\n }\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectJsxComponentRootNamesFromNode(value, names);\n }\n}\n\nfunction collectJsxComponentRootNamesFromSubtree(\n node: unknown,\n outerAliases?: ReadonlyMap<string, string> | undefined,\n): string[] {\n const names = new Set<string>();\n const aliasState = createComponentAliasState(outerAliases);\n\n collectJsxComponentRootNamesFromNode(node, names);\n collectSimpleComponentAliasesFromNode(node, aliasState);\n expandJsxComponentAliasRoots(names, aliasState.aliases);\n return Array.from(names).sort();\n}\n\nfunction collectComponentCallRootNamesFromNode(\n node: unknown,\n names: Set<string>,\n state: ComponentAliasState,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectComponentCallRootNamesFromNode(child, names, state);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"CallExpression\") {\n const root = expressionRootName(readOptionalObject(object.callee), state);\n if (root !== undefined && /^[A-Z]/.test(root)) {\n names.add(root);\n }\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectComponentCallRootNamesFromNode(value, names, state);\n }\n}\n\nfunction collectComponentCallRootNamesFromSubtree(\n node: unknown,\n outerAliases?: ReadonlyMap<string, string> | undefined,\n): string[] {\n const names = new Set<string>();\n const aliasState = createComponentAliasState(outerAliases);\n\n collectSimpleComponentAliasesFromNode(node, aliasState);\n collectComponentCallRootNamesFromNode(node, names, aliasState);\n expandJsxComponentAliasRoots(names, aliasState.aliases);\n return Array.from(names).sort();\n}\n\nfunction jsxNameRoot(node: Record<string, unknown> | undefined): string | undefined {\n if (node === undefined) {\n return undefined;\n }\n\n if (typeof node.name === \"string\") {\n return node.name;\n }\n\n if (node.type === \"JSXMemberExpression\") {\n return jsxNameRoot(readOptionalObject(node.object));\n }\n\n return undefined;\n}\n\nfunction collectSimpleComponentAliasesFromNode(\n node: unknown,\n state: ComponentAliasState,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectSimpleComponentAliasesFromNode(child, state);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"VariableDeclaration\") {\n const constant = object.kind === \"const\";\n const declarations = Array.isArray(object.declarations) ? object.declarations : [];\n for (const declaration of declarations) {\n collectVariableDeclaratorComponentAliases(readOptionalObject(declaration), state, constant);\n }\n return;\n }\n\n if (object.type === \"VariableDeclarator\") {\n collectVariableDeclaratorComponentAliases(object, state, false);\n }\n\n if (object.type === \"AssignmentExpression\") {\n collectAssignmentComponentAlias(object, state);\n }\n\n if (object.type === \"CallExpression\") {\n collectObjectAssignComponentAliases(object, state);\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectSimpleComponentAliasesFromNode(value, state);\n }\n}\n\nfunction createComponentAliasState(\n aliases?: ReadonlyMap<string, string> | undefined,\n): ComponentAliasState {\n return {\n aliases: new Map(aliases),\n stringConstants: new Map(),\n };\n}\n\nfunction collectVariableDeclaratorComponentAliases(\n object: Record<string, unknown> | undefined,\n state: ComponentAliasState,\n constant: boolean,\n): void {\n if (object?.type !== \"VariableDeclarator\") {\n return;\n }\n\n const id = readOptionalObject(object.id);\n const init = readOptionalObject(object.init);\n const aliasName = typeof id?.name === \"string\" ? id.name : undefined;\n\n if (aliasName === undefined) {\n return;\n }\n\n if (constant) {\n const stringValue = stringExpressionValue(init, state);\n if (stringValue !== undefined) {\n state.stringConstants.set(aliasName, stringValue);\n }\n }\n\n collectObjectLiteralComponentAliases(aliasName, init, state);\n\n const rootName = expressionRootName(init, state);\n if (rootName !== undefined) {\n state.aliases.set(aliasName, rootName);\n }\n}\n\nfunction collectObjectLiteralComponentAliases(\n objectName: string | undefined,\n init: Record<string, unknown> | undefined,\n state: ComponentAliasState,\n): void {\n if (objectName === undefined || init?.type !== \"ObjectExpression\") {\n return;\n }\n\n const properties = Array.isArray(init.properties) ? init.properties : [];\n for (const propertyValue of properties) {\n const property = readOptionalObject(propertyValue);\n if (property?.type !== \"Property\") {\n continue;\n }\n\n const keyName = propertyName(readOptionalObject(property.key), property.computed === true, state);\n const valueName = expressionRootName(readOptionalObject(property.value), state);\n if (keyName !== undefined && valueName !== undefined) {\n state.aliases.set(`${objectName}.${keyName}`, valueName);\n }\n }\n}\n\nfunction collectAssignmentComponentAlias(\n node: Record<string, unknown>,\n state: ComponentAliasState,\n): void {\n if (node.operator !== \"=\") {\n return;\n }\n\n const left = readOptionalObject(node.left);\n const right = readOptionalObject(node.right);\n if (left?.type !== \"MemberExpression\") {\n return;\n }\n\n const objectRoot = expressionRootName(readOptionalObject(left.object), state);\n const memberName = propertyName(readOptionalObject(left.property), left.computed === true, state);\n const valueName = expressionRootName(right, state);\n if (objectRoot !== undefined && memberName !== undefined && valueName !== undefined) {\n state.aliases.set(`${objectRoot}.${memberName}`, valueName);\n }\n}\n\nfunction collectObjectAssignComponentAliases(\n node: Record<string, unknown>,\n state: ComponentAliasState,\n): void {\n if (!isObjectAssignCall(node)) {\n return;\n }\n\n const args = Array.isArray(node.arguments) ? node.arguments.map(readOptionalObject) : [];\n const target = expressionRootName(args[0], state);\n if (target === undefined) {\n return;\n }\n\n for (const source of args.slice(1)) {\n collectObjectLiteralComponentAliases(target, source, state);\n }\n}\n\nfunction isObjectAssignCall(node: Record<string, unknown>): boolean {\n const callee = readOptionalObject(node.callee);\n if (callee?.type !== \"MemberExpression\" || callee.computed === true) {\n return false;\n }\n\n const object = readOptionalObject(callee.object);\n const property = readOptionalObject(callee.property);\n return object?.type === \"Identifier\" && object.name === \"Object\" &&\n property?.type === \"Identifier\" && property.name === \"assign\";\n}\n\nfunction expandJsxComponentAliasRoots(\n names: Set<string>,\n aliases: ReadonlyMap<string, string>,\n): void {\n let changed = true;\n\n while (changed) {\n changed = false;\n\n for (const [alias, root] of aliases) {\n if (names.has(alias) && !names.has(root)) {\n names.add(root);\n changed = true;\n }\n }\n }\n}\n\nfunction expressionRootName(\n node: Record<string, unknown> | undefined,\n state?: ComponentAliasState | undefined,\n): string | undefined {\n if (node === undefined) {\n return undefined;\n }\n\n if (node.type === \"Identifier\" && typeof node.name === \"string\") {\n return node.name;\n }\n\n if (node.type === \"MemberExpression\") {\n const objectRoot = expressionRootName(readOptionalObject(node.object), state);\n const aliasedObjectRoot =\n objectRoot === undefined ? undefined : state?.aliases.get(objectRoot) ?? objectRoot;\n const memberName = propertyName(readOptionalObject(node.property), node.computed === true, state);\n const memberAlias =\n objectRoot !== undefined && memberName !== undefined\n ? state?.aliases.get(`${objectRoot}.${memberName}`) ??\n (aliasedObjectRoot === undefined\n ? undefined\n : state?.aliases.get(`${aliasedObjectRoot}.${memberName}`))\n : undefined;\n\n return memberAlias ??\n (node.computed === true && memberName === undefined\n ? uniqueObjectMemberAlias(aliasedObjectRoot, state)\n : aliasedObjectRoot);\n }\n\n if (node.type === \"ConditionalExpression\") {\n return uniqueDefinedString([\n expressionRootName(readOptionalObject(node.consequent), state),\n expressionRootName(readOptionalObject(node.alternate), state),\n ]);\n }\n\n if (\n node.type === \"ChainExpression\" ||\n node.type === \"TSAsExpression\" ||\n node.type === \"TSSatisfiesExpression\" ||\n node.type === \"TSNonNullExpression\" ||\n node.type === \"ParenthesizedExpression\"\n ) {\n return expressionRootName(readOptionalObject(node.expression), state);\n }\n\n return undefined;\n}\n\nfunction propertyName(\n node: Record<string, unknown> | undefined,\n computed: boolean,\n state?: ComponentAliasState | undefined,\n): string | undefined {\n if (!computed && node?.type === \"Identifier\" && typeof node.name === \"string\") {\n return node.name;\n }\n\n if (computed && node?.type === \"Identifier\" && typeof node.name === \"string\") {\n return state?.stringConstants.get(node.name);\n }\n\n return stringExpressionValue(node, state);\n}\n\nfunction stringExpressionValue(\n node: Record<string, unknown> | undefined,\n state?: ComponentAliasState | undefined,\n): string | undefined {\n if (\n (node?.type === \"StringLiteral\" || node?.type === \"Literal\") &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n if (node?.type === \"ConditionalExpression\") {\n return uniqueDefinedString([\n stringExpressionValue(readOptionalObject(node.consequent), state),\n stringExpressionValue(readOptionalObject(node.alternate), state),\n ]);\n }\n\n if (node?.type === \"Identifier\" && typeof node.name === \"string\") {\n return state?.stringConstants.get(node.name);\n }\n\n if (\n node?.type === \"ChainExpression\" ||\n node?.type === \"TSAsExpression\" ||\n node?.type === \"TSSatisfiesExpression\" ||\n node?.type === \"TSNonNullExpression\" ||\n node?.type === \"ParenthesizedExpression\"\n ) {\n return stringExpressionValue(readOptionalObject(node.expression), state);\n }\n\n return undefined;\n}\n\nfunction uniqueObjectMemberAlias(\n objectName: string | undefined,\n state?: ComponentAliasState | undefined,\n): string | undefined {\n if (objectName === undefined || state === undefined) {\n return undefined;\n }\n\n const prefix = `${objectName}.`;\n return uniqueDefinedString(\n Array.from(state.aliases.entries())\n .filter(([key]) => key.startsWith(prefix))\n .map(([, value]) => value),\n );\n}\n\nfunction uniqueDefinedString(values: readonly (string | undefined)[]): string | undefined {\n const unique = new Set(values.filter((value): value is string => value !== undefined));\n return unique.size === 1 ? Array.from(unique)[0] : undefined;\n}\n\nfunction collectIdentifierReferenceNamesFromNode(\n node: unknown,\n names: Set<string>,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectIdentifierReferenceNamesFromNode(child, names);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"ImportDeclaration\") {\n return;\n }\n\n if (\n (object.type === \"Identifier\" || object.type === \"JSXIdentifier\") &&\n typeof object.name === \"string\"\n ) {\n names.add(object.name);\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectIdentifierReferenceNamesFromNode(value, names);\n }\n}\n\nfunction collectFormActionReferencesFromNode(\n node: unknown,\n references: FormActionReference[],\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectFormActionReferencesFromNode(child, references);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"ImportDeclaration\") {\n return;\n }\n\n if (\n object.type === \"JSXOpeningElement\" &&\n jsxTagName(readOptionalObject(object.name)) === \"form\"\n ) {\n const attributes = Array.isArray(object.attributes) ? object.attributes : [];\n\n for (const attribute of attributes) {\n const attr = readObject(attribute);\n\n if (attr.type !== \"JSXAttribute\" || readObject(attr.name).name !== \"action\") {\n continue;\n }\n\n const value = readObject(attr.value);\n const expression = readObject(value.expression);\n const start = typeof object.start === \"number\" ? object.start : undefined;\n const end = typeof object.end === \"number\" ? object.end : undefined;\n\n if (\n value.type === \"JSXExpressionContainer\" &&\n typeof expression.name === \"string\" &&\n start !== undefined &&\n end !== undefined\n ) {\n references.push({ end, name: expression.name, start });\n }\n }\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectFormActionReferencesFromNode(value, references);\n }\n}\n\nfunction collectFormActionExpressionReferencesFromNode(\n code: string,\n node: unknown,\n references: FormActionExpressionReference[],\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectFormActionExpressionReferencesFromNode(code, child, references);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"ImportDeclaration\") {\n return;\n }\n\n if (\n object.type === \"JSXOpeningElement\" &&\n jsxTagName(readOptionalObject(object.name)) === \"form\"\n ) {\n const attributes = Array.isArray(object.attributes) ? object.attributes : [];\n\n for (const attribute of attributes) {\n const attr = readObject(attribute);\n\n if (attr.type !== \"JSXAttribute\" || readObject(attr.name).name !== \"action\") {\n continue;\n }\n\n const value = readObject(attr.value);\n const expression = readObject(value.expression);\n const start = typeof object.start === \"number\" ? object.start : undefined;\n const end = typeof object.end === \"number\" ? object.end : undefined;\n const expressionStart = typeof expression.start === \"number\" ? expression.start : undefined;\n const expressionEnd = typeof expression.end === \"number\" ? expression.end : undefined;\n\n if (\n value.type === \"JSXExpressionContainer\" &&\n start !== undefined &&\n end !== undefined &&\n expressionStart !== undefined &&\n expressionEnd !== undefined\n ) {\n references.push({\n end,\n expression: code.slice(expressionStart, expressionEnd).trim(),\n expressionEnd,\n expressionStart,\n start,\n });\n }\n }\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectFormActionExpressionReferencesFromNode(code, value, references);\n }\n}\n\nfunction jsxTagName(node: Record<string, unknown> | undefined): string {\n if (node === undefined) {\n return \"\";\n }\n\n if (typeof node.name === \"string\") {\n return node.name;\n }\n\n if (node.type === \"JSXIdentifier\" && typeof node.name === \"string\") {\n return node.name;\n }\n\n if (node.type === \"JSXMemberExpression\") {\n const objectName = jsxTagName(readOptionalObject(node.object));\n const propertyName = jsxTagName(readOptionalObject(node.property));\n return `${objectName}.${propertyName}`;\n }\n\n return \"\";\n}\n\nfunction hasClientRuntimeSyntaxNode(node: unknown): boolean {\n if (Array.isArray(node)) {\n return node.some(hasClientRuntimeSyntaxNode);\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return false;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return false;\n }\n\n if (object.type === \"ImportDeclaration\") {\n return false;\n }\n\n if (object.type === \"ExportAllDeclaration\") {\n return false;\n }\n\n if (object.type === \"ExportNamedDeclaration\" || object.type === \"ExportDefaultDeclaration\") {\n return hasClientRuntimeSyntaxNode(object.declaration);\n }\n\n if (object.type === \"JSXAttribute\") {\n const name = readOptionalObject(object.name)?.name;\n return typeof name === \"string\" && /^on[A-Z]/.test(name);\n }\n\n if (object.type === \"CallExpression\") {\n const callee = readOptionalObject(object.callee);\n if (callee?.type === \"Identifier\" && callee.name === \"cell\") {\n return true;\n }\n }\n\n if (object.type === \"Identifier\" && isClientRuntimeGlobal(object.name)) {\n return true;\n }\n\n if (object.type === \"MemberExpression\") {\n return (\n hasClientRuntimeSyntaxNode(object.object) ||\n (object.computed === true && hasClientRuntimeSyntaxNode(object.property))\n );\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (hasClientRuntimeSyntaxNode(value)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isClientRuntimeGlobal(name: unknown): boolean {\n return name === \"window\" || name === \"document\" || name === \"localStorage\";\n}\n\nfunction exportedNameForSpecifier(specifier: Record<string, unknown>): string | undefined {\n const exported = readOptionalObject(specifier.exported);\n const local = readOptionalObject(specifier.local);\n const name = exported?.name ?? exported?.value ?? local?.name ?? local?.value;\n\n return typeof name === \"string\" ? name : undefined;\n}\n\nfunction bindingNames(node: unknown): string[] {\n const object = readObject(node);\n\n if (typeof object.name === \"string\") {\n return [object.name];\n }\n\n if (Array.isArray(object.properties)) {\n return object.properties.flatMap((property) => bindingNames(readObject(property).value));\n }\n\n if (Array.isArray(object.elements)) {\n return object.elements.flatMap((element) => (element === null ? [] : bindingNames(element)));\n }\n\n if (object.type === \"AssignmentPattern\") {\n return bindingNames(object.left);\n }\n\n if (object.type === \"RestElement\") {\n return bindingNames(object.argument);\n }\n\n return [];\n}\n\nfunction statementRange(\n code: string,\n statement: Record<string, unknown>,\n): { end: number; start: number } | undefined {\n const start = typeof statement.start === \"number\" ? statement.start : undefined;\n const end = typeof statement.end === \"number\" ? statement.end : undefined;\n\n if (start === undefined || end === undefined) {\n return undefined;\n }\n\n let removalStart = start;\n while (removalStart > 0 && code[removalStart - 1] !== \"\\n\") {\n if (!/\\s/.test(code[removalStart - 1] ?? \"\")) {\n break;\n }\n removalStart -= 1;\n }\n\n let removalEnd = end;\n while (removalEnd < code.length && /[ \\t]/.test(code[removalEnd] ?? \"\")) {\n removalEnd += 1;\n }\n if (code[removalEnd] === \"\\r\") {\n removalEnd += 1;\n }\n if (code[removalEnd] === \"\\n\") {\n removalEnd += 1;\n }\n\n return { start: removalStart, end: removalEnd };\n}\n\nfunction nodeText(code: string, node: Record<string, unknown>): string {\n const start = typeof node.start === \"number\" ? node.start : undefined;\n const end = typeof node.end === \"number\" ? node.end : undefined;\n\n return start === undefined || end === undefined ? \"\" : code.slice(start, end);\n}\n\nfunction readObject(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null ? (value as Record<string, unknown>) : {};\n}\n\nfunction readArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction readOptionalObject(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nexport type {\n AsyncBoundaryIr,\n AttributeIr,\n ComponentIr,\n ComponentPropIr,\n ComponentRefIr,\n ConditionalIr,\n DynamicAttributeIr,\n EventAttributeIr,\n ExprIr,\n JsxElementIr,\n JsxFragmentIr,\n JsxNodeIr,\n ListIr,\n ModuleIr,\n SpreadAttributeIr,\n StaticAttributeIr,\n TextIr,\n} from \"./ir.js\";\n"]}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModuleIr } from \"./ir.js\";\nimport {\n analyzeCompilerModuleContextWithOxc,\n analyzeWithOxc,\n} from \"./oxc.js\";\nimport {\n createCompilerModuleContextWithOxc,\n type CompilerModuleContext,\n} from \"./compiler-module-context.js\";\nexport { transformCompilerModuleContext } from \"./transform.js\";\nexport { stripTypeScriptWithOxc } from \"./oxc-transform.js\";\nexport type { CompilerModuleContext } from \"./compiler-module-context.js\";\nimport type {\n AnalyzeModuleOptions,\n CompileTarget,\n Diagnostic,\n} from \"./types.js\";\n\nexport interface AnalyzeToIrInput {\n code: string;\n filename: string;\n target: CompileTarget;\n options?: AnalyzeModuleOptions;\n}\n\nexport interface AnalyzeToIrOutput {\n ir: ModuleIr;\n diagnostics: Diagnostic[];\n usedTypescriptFallback?: boolean;\n}\n\nexport interface StaticImportReference {\n localNames: string[];\n sideEffect: boolean;\n source: string;\n}\n\nexport interface StaticImportSpecifierReference {\n importedName: string;\n kind: \"default\" | \"named\" | \"namespace\";\n localName: string;\n}\n\nexport interface ClientRouteStaticImportReference extends StaticImportReference {\n specifiers: StaticImportSpecifierReference[];\n}\n\nexport interface StaticExportReference {\n exportedNames: string[];\n exportAll: boolean;\n specifiers: StaticExportSpecifierReference[];\n source: string;\n}\n\nexport interface StaticExportSpecifierReference {\n exportedName: string;\n localName: string;\n}\n\nexport interface TopLevelExportRenderInfo {\n calledComponentRoots: string[];\n clientRuntime: boolean;\n name: string;\n renderedComponentRoots: string[];\n}\n\nexport interface ClientRouteModuleAnalysis {\n clientRuntime: boolean;\n defaultExportIdentifier: string | undefined;\n hasUseClientDirective: boolean;\n hasUseServerDirective: boolean;\n componentCallRoots: string[];\n identifierReferences: string[];\n jsxComponentRoots: string[];\n reachableExportRenderedComponentNames: Record<string, string[]>;\n reachableExportRenderedComponentRoots: Record<string, string[]>;\n reachableRenderedComponentNames: string[];\n reachableRenderedComponentRoots: string[];\n staticExports: StaticExportReference[];\n staticImports: ClientRouteStaticImportReference[];\n topLevelExportRenderInfo: TopLevelExportRenderInfo[];\n}\n\nexport interface FormActionReference {\n end: number;\n name: string;\n start: number;\n}\n\nexport interface FormActionExpressionReference {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n start: number;\n}\n\ninterface ComponentAliasState {\n aliases: Map<string, string>;\n stringConstants: Map<string, string>;\n}\n\nexport function analyzeToIr(input: AnalyzeToIrInput): AnalyzeToIrOutput {\n return analyzeWithOxc(input);\n}\n\nexport function analyzeCompilerModuleContextToIr(\n context: CompilerModuleContext,\n input: Omit<AnalyzeToIrInput, \"code\" | \"filename\">,\n): AnalyzeToIrOutput {\n return analyzeCompilerModuleContextWithOxc(context, input);\n}\n\nexport function createCompilerModuleContext(input: {\n code: string;\n filename?: string | undefined;\n}): CompilerModuleContext {\n return createCompilerModuleContextWithOxc(input);\n}\n\nexport function hasTopLevelExportDeclaration(input: {\n code: string;\n filename?: string | undefined;\n names: readonly string[];\n}): boolean {\n const names = new Set(input.names);\n const parsed = parseModule(input.code, input.filename);\n\n return programBody(parsed.program).some((statement) =>\n exportedNames(statement).some((name) => names.has(name)),\n );\n}\n\n// Reads the value of a top-level `export const <name> = <boolean literal>`\n// declaration. Returns `undefined` when the export is absent or not a boolean\n// literal. AST-based so commented-out or string-literal occurrences of the same\n// text are not mistaken for a real export.\nexport function readTopLevelBooleanExport(input: {\n code: string;\n filename?: string | undefined;\n name: string;\n}): boolean | undefined {\n return readTopLevelBooleanExportFromContext(\n createCompilerModuleContext({ code: input.code, filename: input.filename }),\n input.name,\n );\n}\n\n// Context-accepting variant so callers with a cached `CompilerModuleContext`\n// (e.g. the dev server) avoid re-parsing the module per request.\nexport function readTopLevelBooleanExportFromContext(\n context: CompilerModuleContext,\n name: string,\n): boolean | undefined {\n const parsed = parseModuleContext(context);\n\n for (const statement of programBody(parsed.program)) {\n if (statement.type !== \"ExportNamedDeclaration\") {\n continue;\n }\n\n const declaration = readOptionalObject(statement.declaration);\n if (declaration?.type !== \"VariableDeclaration\") {\n continue;\n }\n\n const declarators = Array.isArray(declaration.declarations)\n ? declaration.declarations.map(readObject)\n : [];\n\n for (const declarator of declarators) {\n const id = readOptionalObject(declarator.id);\n if (typeof id?.name !== \"string\" || id.name !== name) {\n continue;\n }\n\n const value = booleanExpressionValue(readOptionalObject(declarator.init));\n if (value !== undefined) {\n return value;\n }\n }\n }\n\n return undefined;\n}\n\nfunction booleanExpressionValue(node: Record<string, unknown> | undefined): boolean | undefined {\n if (\n (node?.type === \"BooleanLiteral\" || node?.type === \"Literal\") &&\n typeof node.value === \"boolean\"\n ) {\n return node.value;\n }\n\n if (\n node?.type === \"TSAsExpression\" ||\n node?.type === \"TSSatisfiesExpression\" ||\n node?.type === \"ParenthesizedExpression\"\n ) {\n return booleanExpressionValue(readOptionalObject(node.expression));\n }\n\n return undefined;\n}\n\nexport function stripTopLevelExportDeclarations(input: {\n code: string;\n filename?: string | undefined;\n names: readonly string[];\n}): string {\n const names = new Set(input.names);\n const parsed = parseModule(input.code, input.filename);\n const replacements = programBody(parsed.program)\n .map((statement) => exportDeclarationReplacement(input.code, statement, names))\n .filter((replacement): replacement is Replacement => replacement !== undefined)\n .sort((left, right) => right.start - left.start);\n let code = input.code;\n\n for (const replacement of replacements) {\n code = `${code.slice(0, replacement.start)}${replacement.text}${code.slice(replacement.end)}`;\n }\n\n return code;\n}\n\nexport function demoteTopLevelExportDeclarations(input: {\n code: string;\n filename?: string | undefined;\n names: readonly string[];\n}): string {\n const names = new Set(input.names);\n const parsed = parseModule(input.code, input.filename);\n const replacements = programBody(parsed.program)\n .map((statement) => exportDeclarationDemotion(input.code, statement, names))\n .filter((replacement): replacement is Replacement => replacement !== undefined)\n .sort((left, right) => right.start - left.start);\n let code = input.code;\n\n for (const replacement of replacements) {\n code = `${code.slice(0, replacement.start)}${replacement.text}${code.slice(replacement.end)}`;\n }\n\n return code;\n}\n\nexport function stripUnusedStaticValueImports(input: {\n code: string;\n filename?: string | undefined;\n}): string {\n const parsed = parseModule(input.code, input.filename);\n const referencedNames = new Set(collectIdentifierReferenceNames(input));\n const replacements = programBody(parsed.program)\n .map((statement) =>\n unusedStaticValueImportReplacement(input.code, statement, referencedNames),\n )\n .filter((replacement): replacement is Replacement => replacement !== undefined)\n .sort((left, right) => right.start - left.start);\n let code = input.code;\n\n for (const replacement of replacements) {\n code = `${code.slice(0, replacement.start)}${replacement.text}${code.slice(replacement.end)}`;\n }\n\n return code;\n}\n\nexport function collectStaticModuleSpecifiers(input: {\n code: string;\n filename?: string | undefined;\n}): string[] {\n const parsed = parseModule(input.code, input.filename);\n\n return programBody(parsed.program).flatMap(staticModuleSpecifier);\n}\n\nexport function collectStaticImportReferences(input: {\n code: string;\n filename?: string | undefined;\n}): StaticImportReference[] {\n const parsed = parseModule(input.code, input.filename);\n\n return programBody(parsed.program).flatMap(staticImportReference);\n}\n\nexport function collectStaticExportReferences(input: {\n code: string;\n filename?: string | undefined;\n}): StaticExportReference[] {\n const parsed = parseModule(input.code, input.filename);\n\n return programBody(parsed.program).flatMap(staticExportReference);\n}\n\nexport function collectJsxComponentRootNames(input: {\n code: string;\n filename?: string | undefined;\n}): string[] {\n const parsed = parseModule(input.code, input.filename);\n const names = new Set<string>();\n const aliasState = createComponentAliasState();\n\n collectJsxComponentRootNamesFromNode(parsed.program, names);\n collectSimpleComponentAliasesFromNode(parsed.program, aliasState);\n expandJsxComponentAliasRoots(names, aliasState.aliases);\n return Array.from(names).sort();\n}\n\nexport function collectIdentifierReferenceNames(input: {\n code: string;\n filename?: string | undefined;\n}): string[] {\n const parsed = parseModule(input.code, input.filename);\n const names = new Set<string>();\n\n collectIdentifierReferenceNamesFromNode(parsed.program, names);\n return Array.from(names).sort();\n}\n\nexport function collectFormActionReferenceNames(input: {\n code: string;\n filename?: string | undefined;\n}): string[] {\n return Array.from(\n new Set(collectFormActionReferences(input).map((reference) => reference.name)),\n ).sort();\n}\n\nexport function collectFormActionReferences(input: {\n code: string;\n filename?: string | undefined;\n}): FormActionReference[] {\n const parsed = parseModule(input.code, input.filename);\n const references: FormActionReference[] = [];\n\n collectFormActionReferencesFromNode(parsed.program, references);\n return references.sort((left, right) =>\n left.start === right.start ? left.name.localeCompare(right.name) : left.start - right.start,\n );\n}\n\nexport function collectFormActionExpressionReferences(input: {\n code: string;\n filename?: string | undefined;\n}): FormActionExpressionReference[] {\n const parsed = parseModule(input.code, input.filename);\n const references: FormActionExpressionReference[] = [];\n\n collectFormActionExpressionReferencesFromNode(input.code, parsed.program, references);\n return references.sort((left, right) =>\n left.start === right.start\n ? left.expression.localeCompare(right.expression)\n : left.start - right.start,\n );\n}\n\nexport function collectTopLevelValueExportNames(input: {\n code: string;\n filename?: string | undefined;\n}): string[] {\n const parsed = parseModule(input.code, input.filename);\n const names = new Set<string>();\n\n for (const statement of programBody(parsed.program)) {\n for (const name of exportedNames(statement)) {\n names.add(name);\n }\n }\n\n return Array.from(names).sort();\n}\n\nexport function collectTopLevelExportRenderInfo(input: {\n code: string;\n filename?: string | undefined;\n}): TopLevelExportRenderInfo[] {\n const parsed = parseModule(input.code, input.filename);\n\n return collectTopLevelExportRenderInfoFromProgram(parsed.program);\n}\n\nexport function collectClientRouteModuleAnalysis(input: {\n code: string;\n filename?: string | undefined;\n}): ClientRouteModuleAnalysis {\n const parsed = parseModule(input.code, input.filename);\n\n return collectClientRouteModuleAnalysisFromContext(parsed);\n}\n\nexport function collectClientRouteModuleAnalysisFromContext(\n context: CompilerModuleContext,\n): ClientRouteModuleAnalysis {\n const parsed = parseModuleContext(context);\n const body = programBody(parsed.program);\n const identifierReferences = new Set<string>();\n const reachableRenderedComponents = collectReachableExportRenderedComponentsFromProgram(\n parsed.program,\n );\n\n collectIdentifierReferenceNamesFromNode(parsed.program, identifierReferences);\n\n return {\n clientRuntime: hasClientRuntimeSyntaxNode(parsed.program),\n defaultExportIdentifier: reachableRenderedComponents.defaultExportIdentifier,\n componentCallRoots: collectComponentCallRootNamesFromSubtree(parsed.program),\n hasUseClientDirective: hasModuleDirectiveInProgram(parsed.program, \"use client\"),\n hasUseServerDirective: hasModuleDirectiveInProgram(parsed.program, \"use server\"),\n identifierReferences: Array.from(identifierReferences).sort(),\n jsxComponentRoots: collectJsxComponentRootNamesFromSubtree(parsed.program),\n reachableExportRenderedComponentNames: reachableRenderedComponents.perExportNames,\n reachableExportRenderedComponentRoots: reachableRenderedComponents.perExportRoots,\n reachableRenderedComponentNames: reachableRenderedComponents.names,\n reachableRenderedComponentRoots: reachableRenderedComponents.roots,\n staticExports: body.flatMap(staticExportReference),\n staticImports: body.flatMap(staticImportReference),\n topLevelExportRenderInfo: collectTopLevelExportRenderInfoFromProgram(parsed.program),\n };\n}\n\ninterface ModuleExportMap {\n aliasState: ComponentAliasState;\n declarations: Map<string, unknown>;\n // Local name when the default export is a bare identifier\n // (`export default Page`), including when that identifier is an import\n // binding. Such an identifier is the route's rendered component even though\n // the module body contains no JSX for it.\n defaultExportIdentifier: string | undefined;\n directExports: Map<string, unknown>;\n exported: Map<string, string>;\n}\n\n// Builds the module's export surface: top-level declarations by name, the\n// exported-name -> local-name map, and direct export declaration nodes. A\n// default export that references an identifier (`export default Page`) is\n// resolved through `declarations` so it behaves like `export { Page as default\n// }` rather than stopping at the bare identifier node.\nfunction collectModuleExportMap(program: unknown): ModuleExportMap {\n const declarations = new Map<string, unknown>();\n const exported = new Map<string, string>();\n const directExports = new Map<string, unknown>();\n const aliasState = createComponentAliasState();\n let defaultExportIdentifier: string | undefined;\n\n collectSimpleComponentAliasesFromNode(program, aliasState);\n\n for (const statement of programBody(program)) {\n collectTopLevelDeclarationReferences(statement, declarations);\n\n if (statement.type === \"ExportDefaultDeclaration\") {\n const declaration = readOptionalObject(statement.declaration);\n\n if (declaration?.type === \"Identifier\" && typeof declaration.name === \"string\") {\n exported.set(\"default\", declaration.name);\n defaultExportIdentifier = declaration.name;\n } else {\n directExports.set(\"default\", declaration);\n exported.set(\"default\", \"default\");\n }\n continue;\n }\n\n if (statement.type !== \"ExportNamedDeclaration\") {\n continue;\n }\n\n const declaration = readOptionalObject(statement.declaration);\n if (declaration !== undefined) {\n for (const name of exportedNames(statement)) {\n exported.set(name, name);\n directExports.set(name, declarationForExportedName(declaration, name) ?? declaration);\n }\n continue;\n }\n\n const specifiers = Array.isArray(statement.specifiers) ? statement.specifiers.map(readObject) : [];\n for (const specifier of specifiers) {\n const exportedName = exportedNameForSpecifier(specifier);\n const localName = localNameForExportSpecifier(specifier);\n\n if (exportedName !== undefined && localName !== undefined) {\n exported.set(exportedName, localName);\n }\n }\n }\n\n return { aliasState, declarations, defaultExportIdentifier, directExports, exported };\n}\n\nfunction collectTopLevelExportRenderInfoFromProgram(program: unknown): TopLevelExportRenderInfo[] {\n const { aliasState, declarations, directExports, exported } = collectModuleExportMap(program);\n\n return [...exported.entries()]\n .map(([name, localName]) => {\n const node = directExports.get(name) ?? declarations.get(localName);\n const calledComponentRoots = node === undefined\n ? []\n : collectComponentCallRootNamesFromSubtree(\n node,\n aliasState.aliases,\n );\n const renderedComponentRoots = node === undefined\n ? []\n : collectJsxComponentRootNamesFromSubtree(\n node,\n aliasState.aliases,\n );\n const clientRuntime = node === undefined\n ? false\n : hasReachableExportClientRuntime({\n aliases: aliasState.aliases,\n declarations,\n localName,\n node,\n });\n\n return node === undefined\n ? undefined\n : {\n calledComponentRoots,\n clientRuntime,\n name,\n renderedComponentRoots,\n };\n })\n .filter((item): item is TopLevelExportRenderInfo => item !== undefined)\n .sort((left, right) => left.name.localeCompare(right.name));\n}\n\ninterface ReachableExportRenderedComponents {\n defaultExportIdentifier: string | undefined;\n names: string[];\n roots: string[];\n perExportNames: Record<string, string[]>;\n perExportRoots: Record<string, string[]>;\n}\n\n// Collects the JSX components that are actually reachable from the module's\n// exports, walking transitively through same-file declarations (including\n// non-exported helper components). Unlike the file-wide `jsxComponentRoots`,\n// this excludes components rendered only inside dead/unreachable code, so it\n// reflects what the route's server-rendered tree truly contains. Per-export\n// breakdowns let callers attribute a rendered component to the specific export\n// whose subtree renders it (e.g. to keep barrel re-exports precise).\nfunction collectReachableExportRenderedComponentsFromProgram(\n program: unknown,\n): ReachableExportRenderedComponents {\n const { aliasState, declarations, defaultExportIdentifier, directExports, exported } =\n collectModuleExportMap(program);\n\n const names = new Set<string>();\n const roots = new Set<string>();\n const perExportNames: Record<string, string[]> = {};\n const perExportRoots: Record<string, string[]> = {};\n\n const visit = (\n node: unknown,\n exportRoots: Set<string>,\n exportNames: Set<string>,\n seen: Set<string>,\n ): void => {\n const renderedRoots = collectJsxComponentRootNamesFromSubtree(node, aliasState.aliases);\n for (const root of renderedRoots) {\n exportRoots.add(root);\n roots.add(root);\n }\n\n const renderedNames = collectJsxComponentNamesFromSubtree(node, aliasState.aliases);\n for (const name of renderedNames) {\n exportNames.add(name);\n names.add(name);\n }\n\n const calledRoots = collectComponentCallRootNamesFromSubtree(node, aliasState.aliases);\n for (const root of [...renderedRoots, ...calledRoots]) {\n const resolved = aliasState.aliases.get(root) ?? root;\n\n if (seen.has(resolved)) {\n continue;\n }\n\n seen.add(resolved);\n const declaration = declarations.get(resolved);\n\n if (declaration !== undefined) {\n visit(declaration, exportRoots, exportNames, seen);\n }\n }\n };\n\n for (const [name, localName] of exported.entries()) {\n const node = directExports.get(name) ?? declarations.get(localName);\n\n if (node === undefined) {\n continue;\n }\n\n const exportRoots = new Set<string>();\n const exportNames = new Set<string>();\n visit(node, exportRoots, exportNames, new Set<string>([localName]));\n perExportRoots[name] = Array.from(exportRoots).sort();\n perExportNames[name] = Array.from(exportNames).sort();\n }\n\n return {\n defaultExportIdentifier,\n names: Array.from(names).sort(),\n roots: Array.from(roots).sort(),\n perExportNames,\n perExportRoots,\n };\n}\n\nfunction hasReachableLocalClientRuntime(options: {\n aliases: ReadonlyMap<string, string>;\n declarations: ReadonlyMap<string, unknown>;\n roots: readonly string[];\n seen: Set<string>;\n}): boolean {\n for (const root of options.roots) {\n const resolved = options.aliases.get(root) ?? root;\n if (options.seen.has(resolved)) {\n continue;\n }\n\n const declaration = options.declarations.get(resolved);\n if (declaration === undefined) {\n continue;\n }\n\n if (hasClientRuntimeSyntaxNode(declaration)) {\n return true;\n }\n\n options.seen.add(resolved);\n const nestedCalledRoots = collectComponentCallRootNamesFromSubtree(\n declaration,\n options.aliases,\n );\n const nestedRenderedRoots = collectJsxComponentRootNamesFromSubtree(\n declaration,\n options.aliases,\n );\n\n if (\n hasReachableLocalClientRuntime({\n aliases: options.aliases,\n declarations: options.declarations,\n roots: [...nestedCalledRoots, ...nestedRenderedRoots],\n seen: options.seen,\n })\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction hasReachableExportClientRuntime(options: {\n aliases: ReadonlyMap<string, string>;\n declarations: ReadonlyMap<string, unknown>;\n localName: string;\n node: unknown;\n}): boolean {\n return hasReachableExportClientRuntimeNode({\n aliases: options.aliases,\n declarations: options.declarations,\n node: options.node,\n seen: new Set([options.localName]),\n });\n}\n\nfunction hasReachableExportClientRuntimeNode(options: {\n aliases: ReadonlyMap<string, string>;\n declarations: ReadonlyMap<string, unknown>;\n node: unknown;\n seen: Set<string>;\n}): boolean {\n if (hasClientRuntimeSyntaxNode(options.node)) {\n return true;\n }\n\n const references = collectRuntimeReferenceRootNamesFromSubtree(\n options.node,\n options.aliases,\n );\n\n for (const reference of references) {\n const declaration = options.declarations.get(reference);\n if (\n declaration !== undefined &&\n !isFunctionLikeClientRuntimeDeclaration(declaration) &&\n hasClientRuntimeSyntaxNode(declaration)\n ) {\n return true;\n }\n }\n\n const calledRoots = collectRuntimeCallRootNamesFromSubtree(\n options.node,\n options.aliases,\n );\n const renderedRoots = collectJsxComponentRootNamesFromSubtree(\n options.node,\n options.aliases,\n );\n\n if (\n hasReachableLocalClientRuntime({\n aliases: options.aliases,\n declarations: options.declarations,\n roots: [...calledRoots, ...renderedRoots],\n seen: options.seen,\n })\n ) {\n return true;\n }\n\n return false;\n}\n\nfunction collectRuntimeReferenceRootNamesFromSubtree(\n node: unknown,\n aliases: ReadonlyMap<string, string>,\n): string[] {\n const names = new Set<string>();\n collectRuntimeReferenceRootNamesFromNode(\n node,\n names,\n createComponentAliasState(aliases),\n new Set(),\n undefined,\n undefined,\n );\n return Array.from(names).sort();\n}\n\nfunction collectRuntimeCallRootNamesFromSubtree(\n node: unknown,\n aliases: ReadonlyMap<string, string>,\n): string[] {\n const names = new Set<string>();\n collectRuntimeCallRootNamesFromNode(\n node,\n names,\n createComponentAliasState(aliases),\n new Set(),\n );\n return Array.from(names).sort();\n}\n\nfunction collectRuntimeReferenceRootNamesFromNode(\n node: unknown,\n names: Set<string>,\n state: ComponentAliasState,\n shadowed: ReadonlySet<string>,\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectRuntimeReferenceRootNamesFromNode(\n child,\n names,\n state,\n shadowed,\n parent,\n parentKey,\n );\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined || shouldSkipRuntimeReferenceNode(object)) {\n return;\n }\n\n if (object.type === \"Identifier\" && typeof object.name === \"string\") {\n if (\n !shadowed.has(object.name) &&\n isRuntimeReferenceIdentifier(parent, parentKey)\n ) {\n names.add(state.aliases.get(object.name) ?? object.name);\n }\n return;\n }\n\n if (isFunctionLikeClientRuntimeDeclaration(object)) {\n const nextShadowed = new Set(shadowed);\n collectBindingNamesInto(object.id, nextShadowed);\n for (const parameter of readArray(object.params)) {\n collectBindingNamesInto(parameter, nextShadowed);\n }\n collectRuntimeReferenceRootNamesFromNode(\n object.body,\n names,\n state,\n addBlockBindingNames(object.body, nextShadowed),\n object,\n \"body\",\n );\n return;\n }\n\n const childShadowed =\n object.type === \"Program\" || object.type === \"BlockStatement\"\n ? addBlockBindingNames(object, new Set(shadowed))\n : shadowed;\n\n for (const [key, value] of Object.entries(object)) {\n if (shouldSkipRuntimeReferenceProperty(object, key)) {\n continue;\n }\n\n collectRuntimeReferenceRootNamesFromNode(\n value,\n names,\n state,\n childShadowed,\n object,\n key,\n );\n }\n}\n\nfunction collectRuntimeCallRootNamesFromNode(\n node: unknown,\n names: Set<string>,\n state: ComponentAliasState,\n shadowed: ReadonlySet<string>,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectRuntimeCallRootNamesFromNode(child, names, state, shadowed);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined || shouldSkipRuntimeReferenceNode(object)) {\n return;\n }\n\n if (isFunctionLikeClientRuntimeDeclaration(object)) {\n const nextShadowed = new Set(shadowed);\n collectBindingNamesInto(object.id, nextShadowed);\n for (const parameter of readArray(object.params)) {\n collectBindingNamesInto(parameter, nextShadowed);\n }\n collectRuntimeCallRootNamesFromNode(\n object.body,\n names,\n state,\n addBlockBindingNames(object.body, nextShadowed),\n );\n return;\n }\n\n if (object.type === \"CallExpression\") {\n const root = expressionRootName(readOptionalObject(object.callee), state);\n if (root !== undefined && !shadowed.has(root)) {\n names.add(root);\n }\n }\n\n const childShadowed =\n object.type === \"Program\" || object.type === \"BlockStatement\"\n ? addBlockBindingNames(object, new Set(shadowed))\n : shadowed;\n\n for (const [key, value] of Object.entries(object)) {\n if (shouldSkipRuntimeReferenceProperty(object, key)) {\n continue;\n }\n\n collectRuntimeCallRootNamesFromNode(value, names, state, childShadowed);\n }\n}\n\nfunction shouldSkipRuntimeReferenceNode(node: Record<string, unknown>): boolean {\n return (\n (typeof node.type === \"string\" && node.type.startsWith(\"TS\")) ||\n node.type === \"ImportDeclaration\"\n );\n}\n\nfunction shouldSkipRuntimeReferenceProperty(\n node: Record<string, unknown>,\n key: string,\n): boolean {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n return true;\n }\n\n if (key === \"id\" && isDeclarationWithId(node)) {\n return true;\n }\n\n if (key === \"params\" && isFunctionLikeClientRuntimeDeclaration(node)) {\n return true;\n }\n\n if (key === \"key\" && isNonComputedPropertyKey(node)) {\n return true;\n }\n\n return false;\n}\n\nfunction isRuntimeReferenceIdentifier(\n parent: Record<string, unknown> | undefined,\n parentKey: string | undefined,\n): boolean {\n if (parent === undefined) {\n return true;\n }\n\n if (parent.type === \"MemberExpression\" && parentKey === \"property\" && parent.computed !== true) {\n return false;\n }\n\n if (parentKey === \"id\" && isDeclarationWithId(parent)) {\n return false;\n }\n\n if (parentKey === \"params\" && isFunctionLikeClientRuntimeDeclaration(parent)) {\n return false;\n }\n\n if (parentKey === \"key\" && isNonComputedPropertyKey(parent)) {\n return false;\n }\n\n return !(\n (parent.type === \"BreakStatement\" ||\n parent.type === \"ContinueStatement\" ||\n parent.type === \"LabeledStatement\") &&\n parentKey === \"label\"\n );\n}\n\nfunction addBlockBindingNames(\n node: unknown,\n names: Set<string>,\n): ReadonlySet<string> {\n const body = readArray(readObject(node).body);\n\n for (const statement of body) {\n const object = readObject(statement);\n if (object.type === \"VariableDeclaration\") {\n for (const declaration of readArray(object.declarations)) {\n collectBindingNamesInto(readObject(declaration).id, names);\n }\n continue;\n }\n\n if (object.type === \"FunctionDeclaration\" || object.type === \"ClassDeclaration\") {\n collectBindingNamesInto(object.id, names);\n }\n }\n\n return names;\n}\n\nfunction collectBindingNamesInto(node: unknown, names: Set<string>): void {\n for (const name of bindingNames(node)) {\n names.add(name);\n }\n}\n\nfunction isFunctionLikeClientRuntimeDeclaration(node: unknown): boolean {\n const object = readObject(node);\n return (\n object.type === \"FunctionDeclaration\" ||\n object.type === \"FunctionExpression\" ||\n object.type === \"ArrowFunctionExpression\"\n );\n}\n\nfunction isDeclarationWithId(node: Record<string, unknown>): boolean {\n return (\n node.type === \"VariableDeclarator\" ||\n node.type === \"FunctionDeclaration\" ||\n node.type === \"FunctionExpression\" ||\n node.type === \"ClassDeclaration\" ||\n node.type === \"ClassExpression\"\n );\n}\n\nfunction isNonComputedPropertyKey(node: Record<string, unknown>): boolean {\n return (\n (node.type === \"Property\" ||\n node.type === \"ObjectProperty\" ||\n node.type === \"PropertyDefinition\" ||\n node.type === \"MethodDefinition\") &&\n node.computed !== true\n );\n}\n\nexport function hasModuleDirective(input: {\n code: string;\n directive: string;\n filename?: string | undefined;\n}): boolean {\n const parsed = parseModule(input.code, input.filename);\n\n return hasModuleDirectiveInProgram(parsed.program, input.directive);\n}\n\nfunction hasModuleDirectiveInProgram(program: unknown, expectedDirective: string): boolean {\n for (const statement of programBody(program)) {\n if (statement.type !== \"ExpressionStatement\") {\n return false;\n }\n\n const directive = statement.directive;\n if (typeof directive !== \"string\") {\n return false;\n }\n\n if (directive === expectedDirective) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function hasClientRuntimeSyntax(input: {\n code: string;\n filename?: string | undefined;\n}): boolean {\n const parsed = parseModule(input.code, input.filename);\n\n return hasClientRuntimeSyntaxNode(parsed.program);\n}\n\ninterface Replacement {\n end: number;\n start: number;\n text: string;\n}\n\nfunction parseModule(code: string, filename: string | undefined) {\n return parseModuleContext(createCompilerModuleContext({ code, filename }));\n}\n\nfunction parseModuleContext(context: CompilerModuleContext): CompilerModuleContext {\n if (context.parseErrors.length > 0) {\n throw new Error(\n `${context.filename}: ${context.parseErrors\n .map((error) => readObject(error).message)\n .filter((message): message is string => typeof message === \"string\")\n .join(\"\\n\")}`,\n );\n }\n\n return context;\n}\n\nfunction programBody(program: unknown): Record<string, unknown>[] {\n const body = readObject(program).body;\n return Array.isArray(body) ? body.map(readObject) : [];\n}\n\nfunction exportedNames(statement: Record<string, unknown>): string[] {\n if (statement.type === \"ExportDefaultDeclaration\") {\n return [\"default\"];\n }\n\n if (statement.type !== \"ExportNamedDeclaration\") {\n return [];\n }\n\n const declaration = readOptionalObject(statement.declaration);\n\n if (declaration !== undefined) {\n if (declaration.type === \"FunctionDeclaration\") {\n const name = readOptionalObject(declaration.id)?.name;\n return typeof name === \"string\" ? [name] : [];\n }\n\n if (declaration.type === \"VariableDeclaration\") {\n const declarations = Array.isArray(declaration.declarations) ? declaration.declarations : [];\n\n return declarations.flatMap((item) => bindingNames(readObject(item).id));\n }\n\n return [];\n }\n\n const specifiers = Array.isArray(statement.specifiers) ? statement.specifiers : [];\n return specifiers.flatMap((specifier) => {\n const name = exportedNameForSpecifier(readObject(specifier));\n\n return typeof name === \"string\" ? [name] : [];\n });\n}\n\nfunction collectTopLevelDeclarationReferences(\n statement: Record<string, unknown>,\n declarations: Map<string, unknown>,\n): void {\n const declaration =\n statement.type === \"ExportNamedDeclaration\"\n ? readOptionalObject(statement.declaration)\n : statement;\n\n if (declaration?.type === \"FunctionDeclaration\") {\n const name = readOptionalObject(declaration.id)?.name;\n\n if (typeof name === \"string\") {\n declarations.set(name, declaration);\n }\n return;\n }\n\n if (declaration?.type !== \"VariableDeclaration\") {\n return;\n }\n\n const declarators = Array.isArray(declaration.declarations)\n ? declaration.declarations.map(readObject)\n : [];\n\n for (const declarator of declarators) {\n const id = readOptionalObject(declarator.id);\n const name = typeof id?.name === \"string\" ? id.name : undefined;\n\n if (name !== undefined) {\n declarations.set(name, readOptionalObject(declarator.init) ?? declarator);\n }\n }\n}\n\nfunction declarationForExportedName(\n declaration: Record<string, unknown>,\n name: string,\n): unknown | undefined {\n if (declaration.type === \"VariableDeclaration\") {\n const declarators = Array.isArray(declaration.declarations)\n ? declaration.declarations.map(readObject)\n : [];\n\n for (const declarator of declarators) {\n if (bindingNames(declarator.id).includes(name)) {\n return readOptionalObject(declarator.init) ?? declarator;\n }\n }\n }\n\n return declaration;\n}\n\nfunction localNameForExportSpecifier(specifier: Record<string, unknown>): string | undefined {\n const local = readOptionalObject(specifier.local);\n const name = local?.name ?? local?.value;\n\n return typeof name === \"string\" ? name : undefined;\n}\n\nfunction exportDeclarationDemotion(\n code: string,\n statement: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Replacement | undefined {\n if (statement.type !== \"ExportNamedDeclaration\") {\n return undefined;\n }\n\n const declaration = readOptionalObject(statement.declaration);\n const exported = exportedNames(statement);\n\n if (exported.length === 0 || !exported.every((name) => names.has(name))) {\n return partialSpecifierExportReplacement(code, statement, names);\n }\n\n const range = statementRange(code, statement);\n\n if (range === undefined) {\n return undefined;\n }\n\n if (declaration?.type === \"FunctionDeclaration\" || declaration?.type === \"VariableDeclaration\") {\n return { ...range, text: `${nodeText(code, declaration)}\\n` };\n }\n\n return { ...range, text: \"\" };\n}\n\nfunction exportDeclarationReplacement(\n code: string,\n statement: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Replacement | undefined {\n if (statement.type === \"ExportDefaultDeclaration\") {\n const range = statementRange(code, statement);\n return names.has(\"default\") && range !== undefined ? { ...range, text: \"\" } : undefined;\n }\n\n if (statement.type !== \"ExportNamedDeclaration\") {\n return undefined;\n }\n\n const partial = partialExportDeclarationReplacement(code, statement, names);\n\n if (partial !== undefined) {\n return partial;\n }\n\n const exported = exportedNames(statement);\n if (exported.length === 0 || !exported.every((name) => names.has(name))) {\n return undefined;\n }\n\n const range = statementRange(code, statement);\n return range === undefined ? undefined : { ...range, text: \"\" };\n}\n\nfunction partialExportDeclarationReplacement(\n code: string,\n statement: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Replacement | undefined {\n const declaration = readOptionalObject(statement.declaration);\n\n if (declaration?.type === \"VariableDeclaration\") {\n return partialVariableExportReplacement(code, statement, declaration, names);\n }\n\n if (declaration !== undefined) {\n return undefined;\n }\n\n return partialSpecifierExportReplacement(code, statement, names);\n}\n\nfunction partialVariableExportReplacement(\n code: string,\n statement: Record<string, unknown>,\n declaration: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Replacement | undefined {\n const declarations = Array.isArray(declaration.declarations)\n ? declaration.declarations.map(readObject)\n : [];\n\n if (declarations.length <= 1) {\n return undefined;\n }\n\n const kept = declarations.filter((declarator) => {\n const declaredNames = bindingNames(declarator.id);\n return declaredNames.every((name) => !names.has(name));\n });\n\n if (kept.length === declarations.length) {\n return undefined;\n }\n\n if (kept.length === 0) {\n const range = statementRange(code, statement);\n return range === undefined ? undefined : { ...range, text: \"\" };\n }\n\n const range = statementRange(code, statement);\n const kind = typeof declaration.kind === \"string\" ? declaration.kind : \"const\";\n\n return range === undefined\n ? undefined\n : {\n ...range,\n text: `export ${kind} ${kept.map((item) => nodeText(code, item)).join(\", \")};\\n`,\n };\n}\n\nfunction partialSpecifierExportReplacement(\n code: string,\n statement: Record<string, unknown>,\n names: ReadonlySet<string>,\n): Replacement | undefined {\n const specifiers = Array.isArray(statement.specifiers)\n ? statement.specifiers.map(readObject)\n : [];\n\n if (specifiers.length <= 1) {\n return undefined;\n }\n\n const kept = specifiers.filter((specifier) => {\n const name = exportedNameForSpecifier(specifier);\n return typeof name !== \"string\" || !names.has(name);\n });\n\n if (kept.length === specifiers.length) {\n return undefined;\n }\n\n const range = statementRange(code, statement);\n if (range === undefined) {\n return undefined;\n }\n\n if (kept.length === 0) {\n return { ...range, text: \"\" };\n }\n\n const source = readOptionalObject(statement.source);\n const sourceText = source === undefined ? \"\" : ` from ${nodeText(code, source)}`;\n const exportKind = statement.exportKind === \"type\" ? \"export type\" : \"export\";\n\n return {\n ...range,\n text: `${exportKind} { ${kept.map((item) => nodeText(code, item)).join(\", \")} }${sourceText};\\n`,\n };\n}\n\nfunction unusedStaticValueImportReplacement(\n code: string,\n statement: Record<string, unknown>,\n referencedNames: ReadonlySet<string>,\n): Replacement | undefined {\n if (statement.type !== \"ImportDeclaration\" || statement.importKind === \"type\") {\n return undefined;\n }\n\n const specifiers = Array.isArray(statement.specifiers)\n ? statement.specifiers.map(readObject)\n : [];\n\n if (specifiers.length === 0) {\n return undefined;\n }\n\n const localNames = specifiers\n .filter((specifier) => specifier.importKind !== \"type\")\n .flatMap((specifier) => {\n const local = readOptionalObject(specifier.local);\n return typeof local?.name === \"string\" ? [local.name] : [];\n });\n\n if (localNames.length === 0 || localNames.some((name) => referencedNames.has(name))) {\n return undefined;\n }\n\n const range = statementRange(code, statement);\n return range === undefined ? undefined : { ...range, text: \"\" };\n}\n\nfunction staticModuleSpecifier(statement: Record<string, unknown>): string[] {\n if (statement.type === \"ImportDeclaration\") {\n if (statement.importKind === \"type\") {\n return [];\n }\n\n return sourceValue(statement);\n }\n\n if (statement.type === \"ExportAllDeclaration\" || statement.type === \"ExportNamedDeclaration\") {\n if (statement.exportKind === \"type\") {\n return [];\n }\n\n return sourceValue(statement);\n }\n\n return [];\n}\n\nfunction staticImportReference(\n statement: Record<string, unknown>,\n): ClientRouteStaticImportReference[] {\n if (statement.type !== \"ImportDeclaration\" || statement.importKind === \"type\") {\n return [];\n }\n\n const source = sourceValue(statement)[0];\n if (source === undefined) {\n return [];\n }\n\n const specifiers = Array.isArray(statement.specifiers)\n ? statement.specifiers.map(readObject)\n : [];\n const importSpecifiers = specifiers.flatMap(staticImportSpecifierReference);\n const localNames = specifiers\n .filter((specifier) => specifier.importKind !== \"type\")\n .flatMap((specifier) => {\n const local = readOptionalObject(specifier.local);\n return typeof local?.name === \"string\" ? [local.name] : [];\n });\n\n return [\n {\n localNames,\n sideEffect: localNames.length === 0,\n source,\n specifiers: importSpecifiers,\n },\n ];\n}\n\nfunction staticImportSpecifierReference(\n specifier: Record<string, unknown>,\n): StaticImportSpecifierReference[] {\n if (specifier.importKind === \"type\") {\n return [];\n }\n\n const localName = readOptionalObject(specifier.local)?.name;\n if (typeof localName !== \"string\") {\n return [];\n }\n\n if (specifier.type === \"ImportDefaultSpecifier\") {\n return [{ importedName: \"default\", kind: \"default\", localName }];\n }\n\n if (specifier.type === \"ImportNamespaceSpecifier\") {\n return [{ importedName: \"*\", kind: \"namespace\", localName }];\n }\n\n const imported = readOptionalObject(specifier.imported);\n const importedName = imported?.name ?? imported?.value;\n return typeof importedName === \"string\"\n ? [{ importedName, kind: \"named\", localName }]\n : [];\n}\n\nfunction staticExportReference(statement: Record<string, unknown>): StaticExportReference[] {\n if (statement.type === \"ExportAllDeclaration\") {\n if (statement.exportKind === \"type\") {\n return [];\n }\n\n const source = sourceValue(statement)[0];\n return source === undefined\n ? []\n : [{ exportedNames: [], exportAll: true, specifiers: [], source }];\n }\n\n if (statement.type !== \"ExportNamedDeclaration\" || statement.exportKind === \"type\") {\n return [];\n }\n\n const source = sourceValue(statement)[0];\n if (source === undefined) {\n return [];\n }\n\n return [\n {\n exportedNames: exportedNames(statement),\n exportAll: false,\n specifiers: staticExportSpecifierReferences(statement),\n source,\n },\n ];\n}\n\nfunction staticExportSpecifierReferences(\n statement: Record<string, unknown>,\n): StaticExportSpecifierReference[] {\n const specifiers = Array.isArray(statement.specifiers)\n ? statement.specifiers.map(readObject)\n : [];\n\n return specifiers.flatMap((specifier) => {\n const exportedName = exportedNameForSpecifier(specifier);\n const localName = localNameForExportSpecifier(specifier);\n\n return exportedName === undefined || localName === undefined\n ? []\n : [{ exportedName, localName }];\n });\n}\n\nfunction sourceValue(statement: Record<string, unknown>): string[] {\n const source = readOptionalObject(statement.source);\n const value = source?.value;\n\n return typeof value === \"string\" ? [value] : [];\n}\n\nfunction collectJsxComponentRootNamesFromNode(\n node: unknown,\n names: Set<string>,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectJsxComponentRootNamesFromNode(child, names);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (object.type === \"JSXElement\") {\n const opening = readOptionalObject(object.openingElement);\n const nameNode = readOptionalObject(opening?.name);\n const name = jsxNameRoot(nameNode);\n if (name !== undefined && (nameNode?.type === \"JSXMemberExpression\" || /^[A-Z]/.test(name))) {\n names.add(name);\n }\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectJsxComponentRootNamesFromNode(value, names);\n }\n}\n\nfunction collectJsxComponentNamesFromNode(node: unknown, names: Set<string>): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectJsxComponentNamesFromNode(child, names);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (object.type === \"JSXElement\") {\n const opening = readOptionalObject(object.openingElement);\n const nameNode = readOptionalObject(opening?.name);\n const root = jsxNameRoot(nameNode);\n const name = jsxTagName(nameNode);\n if (\n name !== \"\" &&\n root !== undefined &&\n (nameNode?.type === \"JSXMemberExpression\" || /^[A-Z]/.test(root))\n ) {\n names.add(name);\n }\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectJsxComponentNamesFromNode(value, names);\n }\n}\n\nfunction collectJsxComponentNamesFromSubtree(\n node: unknown,\n outerAliases?: ReadonlyMap<string, string> | undefined,\n): string[] {\n const names = new Set<string>();\n const aliasState = createComponentAliasState(outerAliases);\n\n collectJsxComponentNamesFromNode(node, names);\n collectSimpleComponentAliasesFromNode(node, aliasState);\n expandJsxComponentAliasRoots(names, aliasState.aliases);\n return Array.from(names).sort();\n}\n\nfunction collectJsxComponentRootNamesFromSubtree(\n node: unknown,\n outerAliases?: ReadonlyMap<string, string> | undefined,\n): string[] {\n const names = new Set<string>();\n const aliasState = createComponentAliasState(outerAliases);\n\n collectJsxComponentRootNamesFromNode(node, names);\n collectSimpleComponentAliasesFromNode(node, aliasState);\n expandJsxComponentAliasRoots(names, aliasState.aliases);\n return Array.from(names).sort();\n}\n\nfunction collectComponentCallRootNamesFromNode(\n node: unknown,\n names: Set<string>,\n state: ComponentAliasState,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectComponentCallRootNamesFromNode(child, names, state);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"CallExpression\") {\n const root = expressionRootName(readOptionalObject(object.callee), state);\n if (root !== undefined && /^[A-Z]/.test(root)) {\n names.add(root);\n }\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectComponentCallRootNamesFromNode(value, names, state);\n }\n}\n\nfunction collectComponentCallRootNamesFromSubtree(\n node: unknown,\n outerAliases?: ReadonlyMap<string, string> | undefined,\n): string[] {\n const names = new Set<string>();\n const aliasState = createComponentAliasState(outerAliases);\n\n collectSimpleComponentAliasesFromNode(node, aliasState);\n collectComponentCallRootNamesFromNode(node, names, aliasState);\n expandJsxComponentAliasRoots(names, aliasState.aliases);\n return Array.from(names).sort();\n}\n\nfunction jsxNameRoot(node: Record<string, unknown> | undefined): string | undefined {\n if (node === undefined) {\n return undefined;\n }\n\n if (typeof node.name === \"string\") {\n return node.name;\n }\n\n if (node.type === \"JSXMemberExpression\") {\n return jsxNameRoot(readOptionalObject(node.object));\n }\n\n return undefined;\n}\n\nfunction collectSimpleComponentAliasesFromNode(\n node: unknown,\n state: ComponentAliasState,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectSimpleComponentAliasesFromNode(child, state);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"VariableDeclaration\") {\n const constant = object.kind === \"const\";\n const declarations = Array.isArray(object.declarations) ? object.declarations : [];\n for (const declaration of declarations) {\n collectVariableDeclaratorComponentAliases(readOptionalObject(declaration), state, constant);\n }\n return;\n }\n\n if (object.type === \"VariableDeclarator\") {\n collectVariableDeclaratorComponentAliases(object, state, false);\n }\n\n if (object.type === \"AssignmentExpression\") {\n collectAssignmentComponentAlias(object, state);\n }\n\n if (object.type === \"CallExpression\") {\n collectObjectAssignComponentAliases(object, state);\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectSimpleComponentAliasesFromNode(value, state);\n }\n}\n\nfunction createComponentAliasState(\n aliases?: ReadonlyMap<string, string> | undefined,\n): ComponentAliasState {\n return {\n aliases: new Map(aliases),\n stringConstants: new Map(),\n };\n}\n\nfunction collectVariableDeclaratorComponentAliases(\n object: Record<string, unknown> | undefined,\n state: ComponentAliasState,\n constant: boolean,\n): void {\n if (object?.type !== \"VariableDeclarator\") {\n return;\n }\n\n const id = readOptionalObject(object.id);\n const init = readOptionalObject(object.init);\n const aliasName = typeof id?.name === \"string\" ? id.name : undefined;\n\n if (aliasName === undefined) {\n return;\n }\n\n if (constant) {\n const stringValue = stringExpressionValue(init, state);\n if (stringValue !== undefined) {\n state.stringConstants.set(aliasName, stringValue);\n }\n }\n\n collectObjectLiteralComponentAliases(aliasName, init, state);\n\n const rootName = expressionRootName(init, state);\n if (rootName !== undefined) {\n state.aliases.set(aliasName, rootName);\n }\n}\n\nfunction collectObjectLiteralComponentAliases(\n objectName: string | undefined,\n init: Record<string, unknown> | undefined,\n state: ComponentAliasState,\n): void {\n if (objectName === undefined || init?.type !== \"ObjectExpression\") {\n return;\n }\n\n const properties = Array.isArray(init.properties) ? init.properties : [];\n for (const propertyValue of properties) {\n const property = readOptionalObject(propertyValue);\n if (property?.type !== \"Property\") {\n continue;\n }\n\n const keyName = propertyName(readOptionalObject(property.key), property.computed === true, state);\n const valueName = expressionRootName(readOptionalObject(property.value), state);\n if (keyName !== undefined && valueName !== undefined) {\n state.aliases.set(`${objectName}.${keyName}`, valueName);\n }\n }\n}\n\nfunction collectAssignmentComponentAlias(\n node: Record<string, unknown>,\n state: ComponentAliasState,\n): void {\n if (node.operator !== \"=\") {\n return;\n }\n\n const left = readOptionalObject(node.left);\n const right = readOptionalObject(node.right);\n if (left?.type !== \"MemberExpression\") {\n return;\n }\n\n const objectRoot = expressionRootName(readOptionalObject(left.object), state);\n const memberName = propertyName(readOptionalObject(left.property), left.computed === true, state);\n const valueName = expressionRootName(right, state);\n if (objectRoot !== undefined && memberName !== undefined && valueName !== undefined) {\n state.aliases.set(`${objectRoot}.${memberName}`, valueName);\n }\n}\n\nfunction collectObjectAssignComponentAliases(\n node: Record<string, unknown>,\n state: ComponentAliasState,\n): void {\n if (!isObjectAssignCall(node)) {\n return;\n }\n\n const args = Array.isArray(node.arguments) ? node.arguments.map(readOptionalObject) : [];\n const target = expressionRootName(args[0], state);\n if (target === undefined) {\n return;\n }\n\n for (const source of args.slice(1)) {\n collectObjectLiteralComponentAliases(target, source, state);\n }\n}\n\nfunction isObjectAssignCall(node: Record<string, unknown>): boolean {\n const callee = readOptionalObject(node.callee);\n if (callee?.type !== \"MemberExpression\" || callee.computed === true) {\n return false;\n }\n\n const object = readOptionalObject(callee.object);\n const property = readOptionalObject(callee.property);\n return object?.type === \"Identifier\" && object.name === \"Object\" &&\n property?.type === \"Identifier\" && property.name === \"assign\";\n}\n\nfunction expandJsxComponentAliasRoots(\n names: Set<string>,\n aliases: ReadonlyMap<string, string>,\n): void {\n let changed = true;\n\n while (changed) {\n changed = false;\n\n for (const [alias, root] of aliases) {\n if (names.has(alias) && !names.has(root)) {\n names.add(root);\n changed = true;\n }\n }\n }\n}\n\nfunction expressionRootName(\n node: Record<string, unknown> | undefined,\n state?: ComponentAliasState | undefined,\n): string | undefined {\n if (node === undefined) {\n return undefined;\n }\n\n if (node.type === \"Identifier\" && typeof node.name === \"string\") {\n return node.name;\n }\n\n if (node.type === \"MemberExpression\") {\n const objectRoot = expressionRootName(readOptionalObject(node.object), state);\n const aliasedObjectRoot =\n objectRoot === undefined ? undefined : state?.aliases.get(objectRoot) ?? objectRoot;\n const memberName = propertyName(readOptionalObject(node.property), node.computed === true, state);\n const memberAlias =\n objectRoot !== undefined && memberName !== undefined\n ? state?.aliases.get(`${objectRoot}.${memberName}`) ??\n (aliasedObjectRoot === undefined\n ? undefined\n : state?.aliases.get(`${aliasedObjectRoot}.${memberName}`))\n : undefined;\n\n return memberAlias ??\n (node.computed === true && memberName === undefined\n ? uniqueObjectMemberAlias(aliasedObjectRoot, state)\n : aliasedObjectRoot);\n }\n\n if (node.type === \"ConditionalExpression\") {\n return uniqueDefinedString([\n expressionRootName(readOptionalObject(node.consequent), state),\n expressionRootName(readOptionalObject(node.alternate), state),\n ]);\n }\n\n if (\n node.type === \"ChainExpression\" ||\n node.type === \"TSAsExpression\" ||\n node.type === \"TSSatisfiesExpression\" ||\n node.type === \"TSNonNullExpression\" ||\n node.type === \"ParenthesizedExpression\"\n ) {\n return expressionRootName(readOptionalObject(node.expression), state);\n }\n\n return undefined;\n}\n\nfunction propertyName(\n node: Record<string, unknown> | undefined,\n computed: boolean,\n state?: ComponentAliasState | undefined,\n): string | undefined {\n if (!computed && node?.type === \"Identifier\" && typeof node.name === \"string\") {\n return node.name;\n }\n\n if (computed && node?.type === \"Identifier\" && typeof node.name === \"string\") {\n return state?.stringConstants.get(node.name);\n }\n\n return stringExpressionValue(node, state);\n}\n\nfunction stringExpressionValue(\n node: Record<string, unknown> | undefined,\n state?: ComponentAliasState | undefined,\n): string | undefined {\n if (\n (node?.type === \"StringLiteral\" || node?.type === \"Literal\") &&\n typeof node.value === \"string\"\n ) {\n return node.value;\n }\n\n if (node?.type === \"ConditionalExpression\") {\n return uniqueDefinedString([\n stringExpressionValue(readOptionalObject(node.consequent), state),\n stringExpressionValue(readOptionalObject(node.alternate), state),\n ]);\n }\n\n if (node?.type === \"Identifier\" && typeof node.name === \"string\") {\n return state?.stringConstants.get(node.name);\n }\n\n if (\n node?.type === \"ChainExpression\" ||\n node?.type === \"TSAsExpression\" ||\n node?.type === \"TSSatisfiesExpression\" ||\n node?.type === \"TSNonNullExpression\" ||\n node?.type === \"ParenthesizedExpression\"\n ) {\n return stringExpressionValue(readOptionalObject(node.expression), state);\n }\n\n return undefined;\n}\n\nfunction uniqueObjectMemberAlias(\n objectName: string | undefined,\n state?: ComponentAliasState | undefined,\n): string | undefined {\n if (objectName === undefined || state === undefined) {\n return undefined;\n }\n\n const prefix = `${objectName}.`;\n return uniqueDefinedString(\n Array.from(state.aliases.entries())\n .filter(([key]) => key.startsWith(prefix))\n .map(([, value]) => value),\n );\n}\n\nfunction uniqueDefinedString(values: readonly (string | undefined)[]): string | undefined {\n const unique = new Set(values.filter((value): value is string => value !== undefined));\n return unique.size === 1 ? Array.from(unique)[0] : undefined;\n}\n\nfunction collectIdentifierReferenceNamesFromNode(\n node: unknown,\n names: Set<string>,\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectIdentifierReferenceNamesFromNode(child, names);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"ImportDeclaration\") {\n return;\n }\n\n if (\n (object.type === \"Identifier\" || object.type === \"JSXIdentifier\") &&\n typeof object.name === \"string\"\n ) {\n names.add(object.name);\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectIdentifierReferenceNamesFromNode(value, names);\n }\n}\n\nfunction collectFormActionReferencesFromNode(\n node: unknown,\n references: FormActionReference[],\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectFormActionReferencesFromNode(child, references);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"ImportDeclaration\") {\n return;\n }\n\n if (\n object.type === \"JSXOpeningElement\" &&\n jsxTagName(readOptionalObject(object.name)) === \"form\"\n ) {\n const attributes = Array.isArray(object.attributes) ? object.attributes : [];\n\n for (const attribute of attributes) {\n const attr = readObject(attribute);\n\n if (attr.type !== \"JSXAttribute\" || readObject(attr.name).name !== \"action\") {\n continue;\n }\n\n const value = readObject(attr.value);\n const expression = readObject(value.expression);\n const start = typeof object.start === \"number\" ? object.start : undefined;\n const end = typeof object.end === \"number\" ? object.end : undefined;\n\n if (\n value.type === \"JSXExpressionContainer\" &&\n typeof expression.name === \"string\" &&\n start !== undefined &&\n end !== undefined\n ) {\n references.push({ end, name: expression.name, start });\n }\n }\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectFormActionReferencesFromNode(value, references);\n }\n}\n\nfunction collectFormActionExpressionReferencesFromNode(\n code: string,\n node: unknown,\n references: FormActionExpressionReference[],\n): void {\n if (Array.isArray(node)) {\n for (const child of node) {\n collectFormActionExpressionReferencesFromNode(code, child, references);\n }\n return;\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return;\n }\n\n if (object.type === \"ImportDeclaration\") {\n return;\n }\n\n if (\n object.type === \"JSXOpeningElement\" &&\n jsxTagName(readOptionalObject(object.name)) === \"form\"\n ) {\n const attributes = Array.isArray(object.attributes) ? object.attributes : [];\n\n for (const attribute of attributes) {\n const attr = readObject(attribute);\n\n if (attr.type !== \"JSXAttribute\" || readObject(attr.name).name !== \"action\") {\n continue;\n }\n\n const value = readObject(attr.value);\n const expression = readObject(value.expression);\n const start = typeof object.start === \"number\" ? object.start : undefined;\n const end = typeof object.end === \"number\" ? object.end : undefined;\n const expressionStart = typeof expression.start === \"number\" ? expression.start : undefined;\n const expressionEnd = typeof expression.end === \"number\" ? expression.end : undefined;\n\n if (\n value.type === \"JSXExpressionContainer\" &&\n start !== undefined &&\n end !== undefined &&\n expressionStart !== undefined &&\n expressionEnd !== undefined\n ) {\n references.push({\n end,\n expression: code.slice(expressionStart, expressionEnd).trim(),\n expressionEnd,\n expressionStart,\n start,\n });\n }\n }\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n collectFormActionExpressionReferencesFromNode(code, value, references);\n }\n}\n\nfunction jsxTagName(node: Record<string, unknown> | undefined): string {\n if (node === undefined) {\n return \"\";\n }\n\n if (typeof node.name === \"string\") {\n return node.name;\n }\n\n if (node.type === \"JSXIdentifier\" && typeof node.name === \"string\") {\n return node.name;\n }\n\n if (node.type === \"JSXMemberExpression\") {\n const objectName = jsxTagName(readOptionalObject(node.object));\n const propertyName = jsxTagName(readOptionalObject(node.property));\n return `${objectName}.${propertyName}`;\n }\n\n return \"\";\n}\n\nfunction hasClientRuntimeSyntaxNode(node: unknown): boolean {\n if (Array.isArray(node)) {\n return node.some(hasClientRuntimeSyntaxNode);\n }\n\n const object = readOptionalObject(node);\n if (object === undefined) {\n return false;\n }\n\n if (typeof object.type === \"string\" && object.type.startsWith(\"TS\")) {\n return false;\n }\n\n if (object.type === \"ImportDeclaration\") {\n return false;\n }\n\n if (object.type === \"ExportAllDeclaration\") {\n return false;\n }\n\n if (object.type === \"ExportNamedDeclaration\" || object.type === \"ExportDefaultDeclaration\") {\n return hasClientRuntimeSyntaxNode(object.declaration);\n }\n\n if (object.type === \"JSXAttribute\") {\n const name = readOptionalObject(object.name)?.name;\n return typeof name === \"string\" && /^on[A-Z]/.test(name);\n }\n\n if (object.type === \"CallExpression\") {\n const callee = readOptionalObject(object.callee);\n if (callee?.type === \"Identifier\" && callee.name === \"cell\") {\n return true;\n }\n }\n\n if (object.type === \"Identifier\" && isClientRuntimeGlobal(object.name)) {\n return true;\n }\n\n if (object.type === \"MemberExpression\") {\n return (\n hasClientRuntimeSyntaxNode(object.object) ||\n (object.computed === true && hasClientRuntimeSyntaxNode(object.property))\n );\n }\n\n for (const [key, value] of Object.entries(object)) {\n if (key === \"type\" || key === \"start\" || key === \"end\" || key === \"loc\") {\n continue;\n }\n\n if (hasClientRuntimeSyntaxNode(value)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isClientRuntimeGlobal(name: unknown): boolean {\n return name === \"window\" || name === \"document\" || name === \"localStorage\";\n}\n\nfunction exportedNameForSpecifier(specifier: Record<string, unknown>): string | undefined {\n const exported = readOptionalObject(specifier.exported);\n const local = readOptionalObject(specifier.local);\n const name = exported?.name ?? exported?.value ?? local?.name ?? local?.value;\n\n return typeof name === \"string\" ? name : undefined;\n}\n\nfunction bindingNames(node: unknown): string[] {\n const object = readObject(node);\n\n if (typeof object.name === \"string\") {\n return [object.name];\n }\n\n if (Array.isArray(object.properties)) {\n return object.properties.flatMap((property) => bindingNames(readObject(property).value));\n }\n\n if (Array.isArray(object.elements)) {\n return object.elements.flatMap((element) => (element === null ? [] : bindingNames(element)));\n }\n\n if (object.type === \"AssignmentPattern\") {\n return bindingNames(object.left);\n }\n\n if (object.type === \"RestElement\") {\n return bindingNames(object.argument);\n }\n\n return [];\n}\n\nfunction statementRange(\n code: string,\n statement: Record<string, unknown>,\n): { end: number; start: number } | undefined {\n const start = typeof statement.start === \"number\" ? statement.start : undefined;\n const end = typeof statement.end === \"number\" ? statement.end : undefined;\n\n if (start === undefined || end === undefined) {\n return undefined;\n }\n\n let removalStart = start;\n while (removalStart > 0 && code[removalStart - 1] !== \"\\n\") {\n if (!/\\s/.test(code[removalStart - 1] ?? \"\")) {\n break;\n }\n removalStart -= 1;\n }\n\n let removalEnd = end;\n while (removalEnd < code.length && /[ \\t]/.test(code[removalEnd] ?? \"\")) {\n removalEnd += 1;\n }\n if (code[removalEnd] === \"\\r\") {\n removalEnd += 1;\n }\n if (code[removalEnd] === \"\\n\") {\n removalEnd += 1;\n }\n\n return { start: removalStart, end: removalEnd };\n}\n\nfunction nodeText(code: string, node: Record<string, unknown>): string {\n const start = typeof node.start === \"number\" ? node.start : undefined;\n const end = typeof node.end === \"number\" ? node.end : undefined;\n\n return start === undefined || end === undefined ? \"\" : code.slice(start, end);\n}\n\nfunction readObject(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null ? (value as Record<string, unknown>) : {};\n}\n\nfunction readArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction readOptionalObject(value: unknown): Record<string, unknown> | undefined {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nexport type {\n AsyncBoundaryIr,\n AttributeIr,\n ComponentIr,\n ComponentPropIr,\n ComponentRefIr,\n ConditionalIr,\n DynamicAttributeIr,\n EventAttributeIr,\n ExprIr,\n JsxElementIr,\n JsxFragmentIr,\n JsxNodeIr,\n ListIr,\n ModuleIr,\n SpreadAttributeIr,\n StaticAttributeIr,\n TextIr,\n} from \"./ir.js\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reckona/mreact-compiler",
3
- "version": "0.0.92",
3
+ "version": "0.0.94",
4
4
  "description": "Compiler passes and OXC-backed JSX analysis for mreact.",
5
5
  "keywords": [
6
6
  "compiler",
@@ -50,6 +50,6 @@
50
50
  "dependencies": {
51
51
  "oxc-parser": "0.129.0",
52
52
  "oxc-transform": "0.129.0",
53
- "@reckona/mreact-shared": "0.0.92"
53
+ "@reckona/mreact-shared": "0.0.94"
54
54
  }
55
55
  }
package/src/internal.ts CHANGED
@@ -66,11 +66,16 @@ export interface TopLevelExportRenderInfo {
66
66
 
67
67
  export interface ClientRouteModuleAnalysis {
68
68
  clientRuntime: boolean;
69
+ defaultExportIdentifier: string | undefined;
69
70
  hasUseClientDirective: boolean;
70
71
  hasUseServerDirective: boolean;
71
72
  componentCallRoots: string[];
72
73
  identifierReferences: string[];
73
74
  jsxComponentRoots: string[];
75
+ reachableExportRenderedComponentNames: Record<string, string[]>;
76
+ reachableExportRenderedComponentRoots: Record<string, string[]>;
77
+ reachableRenderedComponentNames: string[];
78
+ reachableRenderedComponentRoots: string[];
74
79
  staticExports: StaticExportReference[];
75
80
  staticImports: ClientRouteStaticImportReference[];
76
81
  topLevelExportRenderInfo: TopLevelExportRenderInfo[];
@@ -126,6 +131,78 @@ export function hasTopLevelExportDeclaration(input: {
126
131
  );
127
132
  }
128
133
 
134
+ // Reads the value of a top-level `export const <name> = <boolean literal>`
135
+ // declaration. Returns `undefined` when the export is absent or not a boolean
136
+ // literal. AST-based so commented-out or string-literal occurrences of the same
137
+ // text are not mistaken for a real export.
138
+ export function readTopLevelBooleanExport(input: {
139
+ code: string;
140
+ filename?: string | undefined;
141
+ name: string;
142
+ }): boolean | undefined {
143
+ return readTopLevelBooleanExportFromContext(
144
+ createCompilerModuleContext({ code: input.code, filename: input.filename }),
145
+ input.name,
146
+ );
147
+ }
148
+
149
+ // Context-accepting variant so callers with a cached `CompilerModuleContext`
150
+ // (e.g. the dev server) avoid re-parsing the module per request.
151
+ export function readTopLevelBooleanExportFromContext(
152
+ context: CompilerModuleContext,
153
+ name: string,
154
+ ): boolean | undefined {
155
+ const parsed = parseModuleContext(context);
156
+
157
+ for (const statement of programBody(parsed.program)) {
158
+ if (statement.type !== "ExportNamedDeclaration") {
159
+ continue;
160
+ }
161
+
162
+ const declaration = readOptionalObject(statement.declaration);
163
+ if (declaration?.type !== "VariableDeclaration") {
164
+ continue;
165
+ }
166
+
167
+ const declarators = Array.isArray(declaration.declarations)
168
+ ? declaration.declarations.map(readObject)
169
+ : [];
170
+
171
+ for (const declarator of declarators) {
172
+ const id = readOptionalObject(declarator.id);
173
+ if (typeof id?.name !== "string" || id.name !== name) {
174
+ continue;
175
+ }
176
+
177
+ const value = booleanExpressionValue(readOptionalObject(declarator.init));
178
+ if (value !== undefined) {
179
+ return value;
180
+ }
181
+ }
182
+ }
183
+
184
+ return undefined;
185
+ }
186
+
187
+ function booleanExpressionValue(node: Record<string, unknown> | undefined): boolean | undefined {
188
+ if (
189
+ (node?.type === "BooleanLiteral" || node?.type === "Literal") &&
190
+ typeof node.value === "boolean"
191
+ ) {
192
+ return node.value;
193
+ }
194
+
195
+ if (
196
+ node?.type === "TSAsExpression" ||
197
+ node?.type === "TSSatisfiesExpression" ||
198
+ node?.type === "ParenthesizedExpression"
199
+ ) {
200
+ return booleanExpressionValue(readOptionalObject(node.expression));
201
+ }
202
+
203
+ return undefined;
204
+ }
205
+
129
206
  export function stripTopLevelExportDeclarations(input: {
130
207
  code: string;
131
208
  filename?: string | undefined;
@@ -316,27 +393,53 @@ export function collectClientRouteModuleAnalysisFromContext(
316
393
  const parsed = parseModuleContext(context);
317
394
  const body = programBody(parsed.program);
318
395
  const identifierReferences = new Set<string>();
396
+ const reachableRenderedComponents = collectReachableExportRenderedComponentsFromProgram(
397
+ parsed.program,
398
+ );
319
399
 
320
400
  collectIdentifierReferenceNamesFromNode(parsed.program, identifierReferences);
321
401
 
322
402
  return {
323
403
  clientRuntime: hasClientRuntimeSyntaxNode(parsed.program),
404
+ defaultExportIdentifier: reachableRenderedComponents.defaultExportIdentifier,
324
405
  componentCallRoots: collectComponentCallRootNamesFromSubtree(parsed.program),
325
406
  hasUseClientDirective: hasModuleDirectiveInProgram(parsed.program, "use client"),
326
407
  hasUseServerDirective: hasModuleDirectiveInProgram(parsed.program, "use server"),
327
408
  identifierReferences: Array.from(identifierReferences).sort(),
328
409
  jsxComponentRoots: collectJsxComponentRootNamesFromSubtree(parsed.program),
410
+ reachableExportRenderedComponentNames: reachableRenderedComponents.perExportNames,
411
+ reachableExportRenderedComponentRoots: reachableRenderedComponents.perExportRoots,
412
+ reachableRenderedComponentNames: reachableRenderedComponents.names,
413
+ reachableRenderedComponentRoots: reachableRenderedComponents.roots,
329
414
  staticExports: body.flatMap(staticExportReference),
330
415
  staticImports: body.flatMap(staticImportReference),
331
416
  topLevelExportRenderInfo: collectTopLevelExportRenderInfoFromProgram(parsed.program),
332
417
  };
333
418
  }
334
419
 
335
- function collectTopLevelExportRenderInfoFromProgram(program: unknown): TopLevelExportRenderInfo[] {
420
+ interface ModuleExportMap {
421
+ aliasState: ComponentAliasState;
422
+ declarations: Map<string, unknown>;
423
+ // Local name when the default export is a bare identifier
424
+ // (`export default Page`), including when that identifier is an import
425
+ // binding. Such an identifier is the route's rendered component even though
426
+ // the module body contains no JSX for it.
427
+ defaultExportIdentifier: string | undefined;
428
+ directExports: Map<string, unknown>;
429
+ exported: Map<string, string>;
430
+ }
431
+
432
+ // Builds the module's export surface: top-level declarations by name, the
433
+ // exported-name -> local-name map, and direct export declaration nodes. A
434
+ // default export that references an identifier (`export default Page`) is
435
+ // resolved through `declarations` so it behaves like `export { Page as default
436
+ // }` rather than stopping at the bare identifier node.
437
+ function collectModuleExportMap(program: unknown): ModuleExportMap {
336
438
  const declarations = new Map<string, unknown>();
337
439
  const exported = new Map<string, string>();
338
440
  const directExports = new Map<string, unknown>();
339
441
  const aliasState = createComponentAliasState();
442
+ let defaultExportIdentifier: string | undefined;
340
443
 
341
444
  collectSimpleComponentAliasesFromNode(program, aliasState);
342
445
 
@@ -345,8 +448,14 @@ function collectTopLevelExportRenderInfoFromProgram(program: unknown): TopLevelE
345
448
 
346
449
  if (statement.type === "ExportDefaultDeclaration") {
347
450
  const declaration = readOptionalObject(statement.declaration);
348
- directExports.set("default", declaration);
349
- exported.set("default", "default");
451
+
452
+ if (declaration?.type === "Identifier" && typeof declaration.name === "string") {
453
+ exported.set("default", declaration.name);
454
+ defaultExportIdentifier = declaration.name;
455
+ } else {
456
+ directExports.set("default", declaration);
457
+ exported.set("default", "default");
458
+ }
350
459
  continue;
351
460
  }
352
461
 
@@ -374,6 +483,12 @@ function collectTopLevelExportRenderInfoFromProgram(program: unknown): TopLevelE
374
483
  }
375
484
  }
376
485
 
486
+ return { aliasState, declarations, defaultExportIdentifier, directExports, exported };
487
+ }
488
+
489
+ function collectTopLevelExportRenderInfoFromProgram(program: unknown): TopLevelExportRenderInfo[] {
490
+ const { aliasState, declarations, directExports, exported } = collectModuleExportMap(program);
491
+
377
492
  return [...exported.entries()]
378
493
  .map(([name, localName]) => {
379
494
  const node = directExports.get(name) ?? declarations.get(localName);
@@ -411,6 +526,90 @@ function collectTopLevelExportRenderInfoFromProgram(program: unknown): TopLevelE
411
526
  .sort((left, right) => left.name.localeCompare(right.name));
412
527
  }
413
528
 
529
+ interface ReachableExportRenderedComponents {
530
+ defaultExportIdentifier: string | undefined;
531
+ names: string[];
532
+ roots: string[];
533
+ perExportNames: Record<string, string[]>;
534
+ perExportRoots: Record<string, string[]>;
535
+ }
536
+
537
+ // Collects the JSX components that are actually reachable from the module's
538
+ // exports, walking transitively through same-file declarations (including
539
+ // non-exported helper components). Unlike the file-wide `jsxComponentRoots`,
540
+ // this excludes components rendered only inside dead/unreachable code, so it
541
+ // reflects what the route's server-rendered tree truly contains. Per-export
542
+ // breakdowns let callers attribute a rendered component to the specific export
543
+ // whose subtree renders it (e.g. to keep barrel re-exports precise).
544
+ function collectReachableExportRenderedComponentsFromProgram(
545
+ program: unknown,
546
+ ): ReachableExportRenderedComponents {
547
+ const { aliasState, declarations, defaultExportIdentifier, directExports, exported } =
548
+ collectModuleExportMap(program);
549
+
550
+ const names = new Set<string>();
551
+ const roots = new Set<string>();
552
+ const perExportNames: Record<string, string[]> = {};
553
+ const perExportRoots: Record<string, string[]> = {};
554
+
555
+ const visit = (
556
+ node: unknown,
557
+ exportRoots: Set<string>,
558
+ exportNames: Set<string>,
559
+ seen: Set<string>,
560
+ ): void => {
561
+ const renderedRoots = collectJsxComponentRootNamesFromSubtree(node, aliasState.aliases);
562
+ for (const root of renderedRoots) {
563
+ exportRoots.add(root);
564
+ roots.add(root);
565
+ }
566
+
567
+ const renderedNames = collectJsxComponentNamesFromSubtree(node, aliasState.aliases);
568
+ for (const name of renderedNames) {
569
+ exportNames.add(name);
570
+ names.add(name);
571
+ }
572
+
573
+ const calledRoots = collectComponentCallRootNamesFromSubtree(node, aliasState.aliases);
574
+ for (const root of [...renderedRoots, ...calledRoots]) {
575
+ const resolved = aliasState.aliases.get(root) ?? root;
576
+
577
+ if (seen.has(resolved)) {
578
+ continue;
579
+ }
580
+
581
+ seen.add(resolved);
582
+ const declaration = declarations.get(resolved);
583
+
584
+ if (declaration !== undefined) {
585
+ visit(declaration, exportRoots, exportNames, seen);
586
+ }
587
+ }
588
+ };
589
+
590
+ for (const [name, localName] of exported.entries()) {
591
+ const node = directExports.get(name) ?? declarations.get(localName);
592
+
593
+ if (node === undefined) {
594
+ continue;
595
+ }
596
+
597
+ const exportRoots = new Set<string>();
598
+ const exportNames = new Set<string>();
599
+ visit(node, exportRoots, exportNames, new Set<string>([localName]));
600
+ perExportRoots[name] = Array.from(exportRoots).sort();
601
+ perExportNames[name] = Array.from(exportNames).sort();
602
+ }
603
+
604
+ return {
605
+ defaultExportIdentifier,
606
+ names: Array.from(names).sort(),
607
+ roots: Array.from(roots).sort(),
608
+ perExportNames,
609
+ perExportRoots,
610
+ };
611
+ }
612
+
414
613
  function hasReachableLocalClientRuntime(options: {
415
614
  aliases: ReadonlyMap<string, string>;
416
615
  declarations: ReadonlyMap<string, unknown>;
@@ -1318,6 +1517,55 @@ function collectJsxComponentRootNamesFromNode(
1318
1517
  }
1319
1518
  }
1320
1519
 
1520
+ function collectJsxComponentNamesFromNode(node: unknown, names: Set<string>): void {
1521
+ if (Array.isArray(node)) {
1522
+ for (const child of node) {
1523
+ collectJsxComponentNamesFromNode(child, names);
1524
+ }
1525
+ return;
1526
+ }
1527
+
1528
+ const object = readOptionalObject(node);
1529
+ if (object === undefined) {
1530
+ return;
1531
+ }
1532
+
1533
+ if (object.type === "JSXElement") {
1534
+ const opening = readOptionalObject(object.openingElement);
1535
+ const nameNode = readOptionalObject(opening?.name);
1536
+ const root = jsxNameRoot(nameNode);
1537
+ const name = jsxTagName(nameNode);
1538
+ if (
1539
+ name !== "" &&
1540
+ root !== undefined &&
1541
+ (nameNode?.type === "JSXMemberExpression" || /^[A-Z]/.test(root))
1542
+ ) {
1543
+ names.add(name);
1544
+ }
1545
+ }
1546
+
1547
+ for (const [key, value] of Object.entries(object)) {
1548
+ if (key === "type" || key === "start" || key === "end" || key === "loc") {
1549
+ continue;
1550
+ }
1551
+
1552
+ collectJsxComponentNamesFromNode(value, names);
1553
+ }
1554
+ }
1555
+
1556
+ function collectJsxComponentNamesFromSubtree(
1557
+ node: unknown,
1558
+ outerAliases?: ReadonlyMap<string, string> | undefined,
1559
+ ): string[] {
1560
+ const names = new Set<string>();
1561
+ const aliasState = createComponentAliasState(outerAliases);
1562
+
1563
+ collectJsxComponentNamesFromNode(node, names);
1564
+ collectSimpleComponentAliasesFromNode(node, aliasState);
1565
+ expandJsxComponentAliasRoots(names, aliasState.aliases);
1566
+ return Array.from(names).sort();
1567
+ }
1568
+
1321
1569
  function collectJsxComponentRootNamesFromSubtree(
1322
1570
  node: unknown,
1323
1571
  outerAliases?: ReadonlyMap<string, string> | undefined,