@reckona/mreact-compiler 0.0.135 → 0.0.137

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.
@@ -123,6 +123,10 @@ export declare function collectIdentifierReferenceNames(input: {
123
123
  code: string;
124
124
  filename?: string | undefined;
125
125
  }): string[];
126
+ export declare function hasUnguardedBrowserGlobalReference(input: {
127
+ code: string;
128
+ filename?: string | undefined;
129
+ }): boolean;
126
130
  export declare function collectFormActionReferenceNames(input: {
127
131
  code: string;
128
132
  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
@@ -129,6 +129,19 @@ export function collectIdentifierReferenceNames(input) {
129
129
  collectIdentifierReferenceNamesFromNode(parsed.program, names);
130
130
  return Array.from(names).sort();
131
131
  }
132
+ // Returns true when the module references a browser global (`window`,
133
+ // `document`, `localStorage`) in a position that may execute during server
134
+ // rendering. A reference is considered guarded -- and therefore server-safe --
135
+ // when it can only evaluate behind a `typeof window !== "undefined"` style
136
+ // check: the guarded branch of an if/ternary, the short-circuited side of a
137
+ // logical expression, or statements following a guarded early exit. A guard on
138
+ // any one browser global covers the others, matching how isomorphic modules
139
+ // are written in practice. Alias-tracked guards (`const isBrowser = ...`) are
140
+ // not followed; they conservatively report an unguarded reference.
141
+ export function hasUnguardedBrowserGlobalReference(input) {
142
+ const parsed = parseModule(input.code, input.filename);
143
+ return hasUnguardedBrowserGlobalReferenceInNode(parsed.program, false);
144
+ }
132
145
  export function collectFormActionReferenceNames(input) {
133
146
  return Array.from(new Set(collectFormActionReferences(input).map((reference) => reference.name))).sort();
134
147
  }
@@ -1248,6 +1261,166 @@ function collectIdentifierReferenceNamesFromNode(node, names) {
1248
1261
  collectIdentifierReferenceNamesFromNode(value, names);
1249
1262
  }
1250
1263
  }
1264
+ const browserGlobalNames = new Set(["window", "document", "localStorage"]);
1265
+ function hasUnguardedBrowserGlobalReferenceInNode(node, browserOnly) {
1266
+ if (Array.isArray(node)) {
1267
+ return node.some((child) => hasUnguardedBrowserGlobalReferenceInNode(child, browserOnly));
1268
+ }
1269
+ const object = readOptionalObject(node);
1270
+ if (object === undefined) {
1271
+ return false;
1272
+ }
1273
+ if (typeof object.type === "string" && object.type.startsWith("TS")) {
1274
+ return false;
1275
+ }
1276
+ if (object.type === "ImportDeclaration") {
1277
+ return false;
1278
+ }
1279
+ if (object.type === "Identifier") {
1280
+ return !browserOnly && typeof object.name === "string" && browserGlobalNames.has(object.name);
1281
+ }
1282
+ // `typeof window` itself never throws on the server; a bare identifier
1283
+ // operand is the guard syntax rather than a real use.
1284
+ if (object.type === "UnaryExpression" &&
1285
+ object.operator === "typeof" &&
1286
+ readOptionalObject(object.argument)?.type === "Identifier") {
1287
+ return false;
1288
+ }
1289
+ // `settings.window` reads a property name, not the global.
1290
+ if (object.type === "MemberExpression" && object.computed !== true) {
1291
+ return hasUnguardedBrowserGlobalReferenceInNode(object.object, browserOnly);
1292
+ }
1293
+ // `{ window: value }` declares a key, not a global reference; shorthand
1294
+ // (`{ window }`) keeps its value identifier and is still walked.
1295
+ if (object.type === "Property" && object.computed !== true) {
1296
+ return hasUnguardedBrowserGlobalReferenceInNode(object.value, browserOnly);
1297
+ }
1298
+ if (object.type === "IfStatement" || object.type === "ConditionalExpression") {
1299
+ const consequentBrowserOnly = browserOnly || guardImpliesBrowser(object.test, true);
1300
+ const alternateBrowserOnly = browserOnly || guardImpliesBrowser(object.test, false);
1301
+ return (hasUnguardedBrowserGlobalReferenceInNode(object.test, browserOnly) ||
1302
+ hasUnguardedBrowserGlobalReferenceInNode(object.consequent, consequentBrowserOnly) ||
1303
+ hasUnguardedBrowserGlobalReferenceInNode(object.alternate, alternateBrowserOnly));
1304
+ }
1305
+ if (object.type === "LogicalExpression") {
1306
+ const rightBrowserOnly = browserOnly ||
1307
+ (object.operator === "&&" && guardImpliesBrowser(object.left, true)) ||
1308
+ (object.operator === "||" && guardImpliesBrowser(object.left, false));
1309
+ return (hasUnguardedBrowserGlobalReferenceInNode(object.left, browserOnly) ||
1310
+ hasUnguardedBrowserGlobalReferenceInNode(object.right, rightBrowserOnly));
1311
+ }
1312
+ // Statement lists track guarded early exits: past an
1313
+ // `if (typeof window === "undefined") return;` statement the rest of the
1314
+ // block only executes in the browser.
1315
+ if (object.type === "Program" || object.type === "BlockStatement") {
1316
+ let scopedBrowserOnly = browserOnly;
1317
+ for (const statement of readArray(object.body)) {
1318
+ if (hasUnguardedBrowserGlobalReferenceInNode(statement, scopedBrowserOnly)) {
1319
+ return true;
1320
+ }
1321
+ if (!scopedBrowserOnly && isBrowserOnlyEarlyExitGuard(statement)) {
1322
+ scopedBrowserOnly = true;
1323
+ }
1324
+ }
1325
+ return false;
1326
+ }
1327
+ for (const [key, value] of Object.entries(object)) {
1328
+ if (key === "type" || key === "start" || key === "end" || key === "loc") {
1329
+ continue;
1330
+ }
1331
+ if (hasUnguardedBrowserGlobalReferenceInNode(value, browserOnly)) {
1332
+ return true;
1333
+ }
1334
+ }
1335
+ return false;
1336
+ }
1337
+ // Does `test === whenTruthy` imply the code runs in a browser? Recognizes
1338
+ // `typeof <browser global> !== "undefined"` comparisons in either operand
1339
+ // order, `!` negation, and the logical compositions whose overall value pins
1340
+ // every operand: a truthy `&&` pins both sides truthy, a falsy `||` pins both
1341
+ // sides falsy.
1342
+ function guardImpliesBrowser(test, whenTruthy) {
1343
+ const object = readOptionalObject(test);
1344
+ if (object === undefined) {
1345
+ return false;
1346
+ }
1347
+ if (object.type === "ParenthesizedExpression" ||
1348
+ object.type === "TSAsExpression" ||
1349
+ object.type === "TSSatisfiesExpression" ||
1350
+ object.type === "TSNonNullExpression") {
1351
+ return guardImpliesBrowser(object.expression, whenTruthy);
1352
+ }
1353
+ if (object.type === "UnaryExpression" && object.operator === "!") {
1354
+ return guardImpliesBrowser(object.argument, !whenTruthy);
1355
+ }
1356
+ if (object.type === "LogicalExpression") {
1357
+ if (object.operator === "&&" && whenTruthy) {
1358
+ return guardImpliesBrowser(object.left, true) || guardImpliesBrowser(object.right, true);
1359
+ }
1360
+ if (object.operator === "||" && !whenTruthy) {
1361
+ return guardImpliesBrowser(object.left, false) || guardImpliesBrowser(object.right, false);
1362
+ }
1363
+ return false;
1364
+ }
1365
+ if (object.type !== "BinaryExpression" || typeof object.operator !== "string") {
1366
+ return false;
1367
+ }
1368
+ const comparesTypeofToUndefined = (isTypeofBrowserGlobal(object.left) && isUndefinedStringLiteral(object.right)) ||
1369
+ (isTypeofBrowserGlobal(object.right) && isUndefinedStringLiteral(object.left));
1370
+ if (!comparesTypeofToUndefined) {
1371
+ return false;
1372
+ }
1373
+ if (object.operator === "!==" || object.operator === "!=") {
1374
+ return whenTruthy;
1375
+ }
1376
+ if (object.operator === "===" || object.operator === "==") {
1377
+ return !whenTruthy;
1378
+ }
1379
+ return false;
1380
+ }
1381
+ function isTypeofBrowserGlobal(node) {
1382
+ const object = readOptionalObject(node);
1383
+ if (object?.type !== "UnaryExpression" || object.operator !== "typeof") {
1384
+ return false;
1385
+ }
1386
+ const argument = readOptionalObject(object.argument);
1387
+ return (argument?.type === "Identifier" &&
1388
+ typeof argument.name === "string" &&
1389
+ browserGlobalNames.has(argument.name));
1390
+ }
1391
+ function isUndefinedStringLiteral(node) {
1392
+ const object = readOptionalObject(node);
1393
+ return ((object?.type === "Literal" || object?.type === "StringLiteral") &&
1394
+ object.value === "undefined");
1395
+ }
1396
+ // A statement after which the enclosing block only executes in the browser:
1397
+ // an alternate-free `if` whose test pins the server case and whose consequent
1398
+ // always exits (`return`, `throw`, `break`, `continue`, or a block ending in
1399
+ // one of those).
1400
+ function isBrowserOnlyEarlyExitGuard(statement) {
1401
+ const object = readOptionalObject(statement);
1402
+ if (object?.type !== "IfStatement" || readOptionalObject(object.alternate) !== undefined) {
1403
+ return false;
1404
+ }
1405
+ return guardImpliesBrowser(object.test, false) && consequentAlwaysExits(object.consequent);
1406
+ }
1407
+ function consequentAlwaysExits(node) {
1408
+ const object = readOptionalObject(node);
1409
+ if (object === undefined) {
1410
+ return false;
1411
+ }
1412
+ if (object.type === "ReturnStatement" ||
1413
+ object.type === "ThrowStatement" ||
1414
+ object.type === "BreakStatement" ||
1415
+ object.type === "ContinueStatement") {
1416
+ return true;
1417
+ }
1418
+ if (object.type === "BlockStatement") {
1419
+ const body = readArray(object.body);
1420
+ return body.length > 0 && consequentAlwaysExits(body[body.length - 1]);
1421
+ }
1422
+ return false;
1423
+ }
1251
1424
  function collectFormActionReferencesFromNode(node, references) {
1252
1425
  if (Array.isArray(node)) {
1253
1426
  for (const child of node) {
@@ -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 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.map(parseErrorMessage).join(\"\\n\")}`,\n );\n }\n\n return context;\n}\n\nfunction parseErrorMessage(error: unknown): string {\n const object = readObject(error);\n const message = typeof object.message === \"string\" ? object.message : \"Parse error\";\n const codeframe = typeof object.codeframe === \"string\" ? object.codeframe.trimEnd() : undefined;\n\n return codeframe === undefined ? message : `${message}\\n${codeframe}`;\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"]}
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\n// Returns true when the module references a browser global (`window`,\n// `document`, `localStorage`) in a position that may execute during server\n// rendering. A reference is considered guarded -- and therefore server-safe --\n// when it can only evaluate behind a `typeof window !== \"undefined\"` style\n// check: the guarded branch of an if/ternary, the short-circuited side of a\n// logical expression, or statements following a guarded early exit. A guard on\n// any one browser global covers the others, matching how isomorphic modules\n// are written in practice. Alias-tracked guards (`const isBrowser = ...`) are\n// not followed; they conservatively report an unguarded reference.\nexport function hasUnguardedBrowserGlobalReference(input: {\n code: string;\n filename?: string | undefined;\n}): boolean {\n const parsed = parseModule(input.code, input.filename);\n\n return hasUnguardedBrowserGlobalReferenceInNode(parsed.program, false);\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.map(parseErrorMessage).join(\"\\n\")}`,\n );\n }\n\n return context;\n}\n\nfunction parseErrorMessage(error: unknown): string {\n const object = readObject(error);\n const message = typeof object.message === \"string\" ? object.message : \"Parse error\";\n const codeframe = typeof object.codeframe === \"string\" ? object.codeframe.trimEnd() : undefined;\n\n return codeframe === undefined ? message : `${message}\\n${codeframe}`;\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\nconst browserGlobalNames = new Set([\"window\", \"document\", \"localStorage\"]);\n\nfunction hasUnguardedBrowserGlobalReferenceInNode(node: unknown, browserOnly: boolean): boolean {\n if (Array.isArray(node)) {\n return node.some((child) => hasUnguardedBrowserGlobalReferenceInNode(child, browserOnly));\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 === \"Identifier\") {\n return !browserOnly && typeof object.name === \"string\" && browserGlobalNames.has(object.name);\n }\n\n // `typeof window` itself never throws on the server; a bare identifier\n // operand is the guard syntax rather than a real use.\n if (\n object.type === \"UnaryExpression\" &&\n object.operator === \"typeof\" &&\n readOptionalObject(object.argument)?.type === \"Identifier\"\n ) {\n return false;\n }\n\n // `settings.window` reads a property name, not the global.\n if (object.type === \"MemberExpression\" && object.computed !== true) {\n return hasUnguardedBrowserGlobalReferenceInNode(object.object, browserOnly);\n }\n\n // `{ window: value }` declares a key, not a global reference; shorthand\n // (`{ window }`) keeps its value identifier and is still walked.\n if (object.type === \"Property\" && object.computed !== true) {\n return hasUnguardedBrowserGlobalReferenceInNode(object.value, browserOnly);\n }\n\n if (object.type === \"IfStatement\" || object.type === \"ConditionalExpression\") {\n const consequentBrowserOnly = browserOnly || guardImpliesBrowser(object.test, true);\n const alternateBrowserOnly = browserOnly || guardImpliesBrowser(object.test, false);\n\n return (\n hasUnguardedBrowserGlobalReferenceInNode(object.test, browserOnly) ||\n hasUnguardedBrowserGlobalReferenceInNode(object.consequent, consequentBrowserOnly) ||\n hasUnguardedBrowserGlobalReferenceInNode(object.alternate, alternateBrowserOnly)\n );\n }\n\n if (object.type === \"LogicalExpression\") {\n const rightBrowserOnly =\n browserOnly ||\n (object.operator === \"&&\" && guardImpliesBrowser(object.left, true)) ||\n (object.operator === \"||\" && guardImpliesBrowser(object.left, false));\n\n return (\n hasUnguardedBrowserGlobalReferenceInNode(object.left, browserOnly) ||\n hasUnguardedBrowserGlobalReferenceInNode(object.right, rightBrowserOnly)\n );\n }\n\n // Statement lists track guarded early exits: past an\n // `if (typeof window === \"undefined\") return;` statement the rest of the\n // block only executes in the browser.\n if (object.type === \"Program\" || object.type === \"BlockStatement\") {\n let scopedBrowserOnly = browserOnly;\n\n for (const statement of readArray(object.body)) {\n if (hasUnguardedBrowserGlobalReferenceInNode(statement, scopedBrowserOnly)) {\n return true;\n }\n if (!scopedBrowserOnly && isBrowserOnlyEarlyExitGuard(statement)) {\n scopedBrowserOnly = true;\n }\n }\n\n return false;\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 (hasUnguardedBrowserGlobalReferenceInNode(value, browserOnly)) {\n return true;\n }\n }\n\n return false;\n}\n\n// Does `test === whenTruthy` imply the code runs in a browser? Recognizes\n// `typeof <browser global> !== \"undefined\"` comparisons in either operand\n// order, `!` negation, and the logical compositions whose overall value pins\n// every operand: a truthy `&&` pins both sides truthy, a falsy `||` pins both\n// sides falsy.\nfunction guardImpliesBrowser(test: unknown, whenTruthy: boolean): boolean {\n const object = readOptionalObject(test);\n if (object === undefined) {\n return false;\n }\n\n if (\n object.type === \"ParenthesizedExpression\" ||\n object.type === \"TSAsExpression\" ||\n object.type === \"TSSatisfiesExpression\" ||\n object.type === \"TSNonNullExpression\"\n ) {\n return guardImpliesBrowser(object.expression, whenTruthy);\n }\n\n if (object.type === \"UnaryExpression\" && object.operator === \"!\") {\n return guardImpliesBrowser(object.argument, !whenTruthy);\n }\n\n if (object.type === \"LogicalExpression\") {\n if (object.operator === \"&&\" && whenTruthy) {\n return guardImpliesBrowser(object.left, true) || guardImpliesBrowser(object.right, true);\n }\n if (object.operator === \"||\" && !whenTruthy) {\n return guardImpliesBrowser(object.left, false) || guardImpliesBrowser(object.right, false);\n }\n return false;\n }\n\n if (object.type !== \"BinaryExpression\" || typeof object.operator !== \"string\") {\n return false;\n }\n\n const comparesTypeofToUndefined =\n (isTypeofBrowserGlobal(object.left) && isUndefinedStringLiteral(object.right)) ||\n (isTypeofBrowserGlobal(object.right) && isUndefinedStringLiteral(object.left));\n\n if (!comparesTypeofToUndefined) {\n return false;\n }\n\n if (object.operator === \"!==\" || object.operator === \"!=\") {\n return whenTruthy;\n }\n if (object.operator === \"===\" || object.operator === \"==\") {\n return !whenTruthy;\n }\n\n return false;\n}\n\nfunction isTypeofBrowserGlobal(node: unknown): boolean {\n const object = readOptionalObject(node);\n if (object?.type !== \"UnaryExpression\" || object.operator !== \"typeof\") {\n return false;\n }\n\n const argument = readOptionalObject(object.argument);\n\n return (\n argument?.type === \"Identifier\" &&\n typeof argument.name === \"string\" &&\n browserGlobalNames.has(argument.name)\n );\n}\n\nfunction isUndefinedStringLiteral(node: unknown): boolean {\n const object = readOptionalObject(node);\n\n return (\n (object?.type === \"Literal\" || object?.type === \"StringLiteral\") &&\n object.value === \"undefined\"\n );\n}\n\n// A statement after which the enclosing block only executes in the browser:\n// an alternate-free `if` whose test pins the server case and whose consequent\n// always exits (`return`, `throw`, `break`, `continue`, or a block ending in\n// one of those).\nfunction isBrowserOnlyEarlyExitGuard(statement: unknown): boolean {\n const object = readOptionalObject(statement);\n\n if (object?.type !== \"IfStatement\" || readOptionalObject(object.alternate) !== undefined) {\n return false;\n }\n\n return guardImpliesBrowser(object.test, false) && consequentAlwaysExits(object.consequent);\n}\n\nfunction consequentAlwaysExits(node: unknown): boolean {\n const object = readOptionalObject(node);\n if (object === undefined) {\n return false;\n }\n\n if (\n object.type === \"ReturnStatement\" ||\n object.type === \"ThrowStatement\" ||\n object.type === \"BreakStatement\" ||\n object.type === \"ContinueStatement\"\n ) {\n return true;\n }\n\n if (object.type === \"BlockStatement\") {\n const body = readArray(object.body);\n\n return body.length > 0 && consequentAlwaysExits(body[body.length - 1]);\n }\n\n return false;\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.135",
3
+ "version": "0.0.137",
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.135"
53
+ "@reckona/mreact-shared": "0.0.137"
54
54
  }
55
55
  }
package/src/internal.ts CHANGED
@@ -316,6 +316,24 @@ export function collectIdentifierReferenceNames(input: {
316
316
  return Array.from(names).sort();
317
317
  }
318
318
 
319
+ // Returns true when the module references a browser global (`window`,
320
+ // `document`, `localStorage`) in a position that may execute during server
321
+ // rendering. A reference is considered guarded -- and therefore server-safe --
322
+ // when it can only evaluate behind a `typeof window !== "undefined"` style
323
+ // check: the guarded branch of an if/ternary, the short-circuited side of a
324
+ // logical expression, or statements following a guarded early exit. A guard on
325
+ // any one browser global covers the others, matching how isomorphic modules
326
+ // are written in practice. Alias-tracked guards (`const isBrowser = ...`) are
327
+ // not followed; they conservatively report an unguarded reference.
328
+ export function hasUnguardedBrowserGlobalReference(input: {
329
+ code: string;
330
+ filename?: string | undefined;
331
+ }): boolean {
332
+ const parsed = parseModule(input.code, input.filename);
333
+
334
+ return hasUnguardedBrowserGlobalReferenceInNode(parsed.program, false);
335
+ }
336
+
319
337
  export function collectFormActionReferenceNames(input: {
320
338
  code: string;
321
339
  filename?: string | undefined;
@@ -1999,6 +2017,223 @@ function collectIdentifierReferenceNamesFromNode(
1999
2017
  }
2000
2018
  }
2001
2019
 
2020
+ const browserGlobalNames = new Set(["window", "document", "localStorage"]);
2021
+
2022
+ function hasUnguardedBrowserGlobalReferenceInNode(node: unknown, browserOnly: boolean): boolean {
2023
+ if (Array.isArray(node)) {
2024
+ return node.some((child) => hasUnguardedBrowserGlobalReferenceInNode(child, browserOnly));
2025
+ }
2026
+
2027
+ const object = readOptionalObject(node);
2028
+ if (object === undefined) {
2029
+ return false;
2030
+ }
2031
+
2032
+ if (typeof object.type === "string" && object.type.startsWith("TS")) {
2033
+ return false;
2034
+ }
2035
+
2036
+ if (object.type === "ImportDeclaration") {
2037
+ return false;
2038
+ }
2039
+
2040
+ if (object.type === "Identifier") {
2041
+ return !browserOnly && typeof object.name === "string" && browserGlobalNames.has(object.name);
2042
+ }
2043
+
2044
+ // `typeof window` itself never throws on the server; a bare identifier
2045
+ // operand is the guard syntax rather than a real use.
2046
+ if (
2047
+ object.type === "UnaryExpression" &&
2048
+ object.operator === "typeof" &&
2049
+ readOptionalObject(object.argument)?.type === "Identifier"
2050
+ ) {
2051
+ return false;
2052
+ }
2053
+
2054
+ // `settings.window` reads a property name, not the global.
2055
+ if (object.type === "MemberExpression" && object.computed !== true) {
2056
+ return hasUnguardedBrowserGlobalReferenceInNode(object.object, browserOnly);
2057
+ }
2058
+
2059
+ // `{ window: value }` declares a key, not a global reference; shorthand
2060
+ // (`{ window }`) keeps its value identifier and is still walked.
2061
+ if (object.type === "Property" && object.computed !== true) {
2062
+ return hasUnguardedBrowserGlobalReferenceInNode(object.value, browserOnly);
2063
+ }
2064
+
2065
+ if (object.type === "IfStatement" || object.type === "ConditionalExpression") {
2066
+ const consequentBrowserOnly = browserOnly || guardImpliesBrowser(object.test, true);
2067
+ const alternateBrowserOnly = browserOnly || guardImpliesBrowser(object.test, false);
2068
+
2069
+ return (
2070
+ hasUnguardedBrowserGlobalReferenceInNode(object.test, browserOnly) ||
2071
+ hasUnguardedBrowserGlobalReferenceInNode(object.consequent, consequentBrowserOnly) ||
2072
+ hasUnguardedBrowserGlobalReferenceInNode(object.alternate, alternateBrowserOnly)
2073
+ );
2074
+ }
2075
+
2076
+ if (object.type === "LogicalExpression") {
2077
+ const rightBrowserOnly =
2078
+ browserOnly ||
2079
+ (object.operator === "&&" && guardImpliesBrowser(object.left, true)) ||
2080
+ (object.operator === "||" && guardImpliesBrowser(object.left, false));
2081
+
2082
+ return (
2083
+ hasUnguardedBrowserGlobalReferenceInNode(object.left, browserOnly) ||
2084
+ hasUnguardedBrowserGlobalReferenceInNode(object.right, rightBrowserOnly)
2085
+ );
2086
+ }
2087
+
2088
+ // Statement lists track guarded early exits: past an
2089
+ // `if (typeof window === "undefined") return;` statement the rest of the
2090
+ // block only executes in the browser.
2091
+ if (object.type === "Program" || object.type === "BlockStatement") {
2092
+ let scopedBrowserOnly = browserOnly;
2093
+
2094
+ for (const statement of readArray(object.body)) {
2095
+ if (hasUnguardedBrowserGlobalReferenceInNode(statement, scopedBrowserOnly)) {
2096
+ return true;
2097
+ }
2098
+ if (!scopedBrowserOnly && isBrowserOnlyEarlyExitGuard(statement)) {
2099
+ scopedBrowserOnly = true;
2100
+ }
2101
+ }
2102
+
2103
+ return false;
2104
+ }
2105
+
2106
+ for (const [key, value] of Object.entries(object)) {
2107
+ if (key === "type" || key === "start" || key === "end" || key === "loc") {
2108
+ continue;
2109
+ }
2110
+
2111
+ if (hasUnguardedBrowserGlobalReferenceInNode(value, browserOnly)) {
2112
+ return true;
2113
+ }
2114
+ }
2115
+
2116
+ return false;
2117
+ }
2118
+
2119
+ // Does `test === whenTruthy` imply the code runs in a browser? Recognizes
2120
+ // `typeof <browser global> !== "undefined"` comparisons in either operand
2121
+ // order, `!` negation, and the logical compositions whose overall value pins
2122
+ // every operand: a truthy `&&` pins both sides truthy, a falsy `||` pins both
2123
+ // sides falsy.
2124
+ function guardImpliesBrowser(test: unknown, whenTruthy: boolean): boolean {
2125
+ const object = readOptionalObject(test);
2126
+ if (object === undefined) {
2127
+ return false;
2128
+ }
2129
+
2130
+ if (
2131
+ object.type === "ParenthesizedExpression" ||
2132
+ object.type === "TSAsExpression" ||
2133
+ object.type === "TSSatisfiesExpression" ||
2134
+ object.type === "TSNonNullExpression"
2135
+ ) {
2136
+ return guardImpliesBrowser(object.expression, whenTruthy);
2137
+ }
2138
+
2139
+ if (object.type === "UnaryExpression" && object.operator === "!") {
2140
+ return guardImpliesBrowser(object.argument, !whenTruthy);
2141
+ }
2142
+
2143
+ if (object.type === "LogicalExpression") {
2144
+ if (object.operator === "&&" && whenTruthy) {
2145
+ return guardImpliesBrowser(object.left, true) || guardImpliesBrowser(object.right, true);
2146
+ }
2147
+ if (object.operator === "||" && !whenTruthy) {
2148
+ return guardImpliesBrowser(object.left, false) || guardImpliesBrowser(object.right, false);
2149
+ }
2150
+ return false;
2151
+ }
2152
+
2153
+ if (object.type !== "BinaryExpression" || typeof object.operator !== "string") {
2154
+ return false;
2155
+ }
2156
+
2157
+ const comparesTypeofToUndefined =
2158
+ (isTypeofBrowserGlobal(object.left) && isUndefinedStringLiteral(object.right)) ||
2159
+ (isTypeofBrowserGlobal(object.right) && isUndefinedStringLiteral(object.left));
2160
+
2161
+ if (!comparesTypeofToUndefined) {
2162
+ return false;
2163
+ }
2164
+
2165
+ if (object.operator === "!==" || object.operator === "!=") {
2166
+ return whenTruthy;
2167
+ }
2168
+ if (object.operator === "===" || object.operator === "==") {
2169
+ return !whenTruthy;
2170
+ }
2171
+
2172
+ return false;
2173
+ }
2174
+
2175
+ function isTypeofBrowserGlobal(node: unknown): boolean {
2176
+ const object = readOptionalObject(node);
2177
+ if (object?.type !== "UnaryExpression" || object.operator !== "typeof") {
2178
+ return false;
2179
+ }
2180
+
2181
+ const argument = readOptionalObject(object.argument);
2182
+
2183
+ return (
2184
+ argument?.type === "Identifier" &&
2185
+ typeof argument.name === "string" &&
2186
+ browserGlobalNames.has(argument.name)
2187
+ );
2188
+ }
2189
+
2190
+ function isUndefinedStringLiteral(node: unknown): boolean {
2191
+ const object = readOptionalObject(node);
2192
+
2193
+ return (
2194
+ (object?.type === "Literal" || object?.type === "StringLiteral") &&
2195
+ object.value === "undefined"
2196
+ );
2197
+ }
2198
+
2199
+ // A statement after which the enclosing block only executes in the browser:
2200
+ // an alternate-free `if` whose test pins the server case and whose consequent
2201
+ // always exits (`return`, `throw`, `break`, `continue`, or a block ending in
2202
+ // one of those).
2203
+ function isBrowserOnlyEarlyExitGuard(statement: unknown): boolean {
2204
+ const object = readOptionalObject(statement);
2205
+
2206
+ if (object?.type !== "IfStatement" || readOptionalObject(object.alternate) !== undefined) {
2207
+ return false;
2208
+ }
2209
+
2210
+ return guardImpliesBrowser(object.test, false) && consequentAlwaysExits(object.consequent);
2211
+ }
2212
+
2213
+ function consequentAlwaysExits(node: unknown): boolean {
2214
+ const object = readOptionalObject(node);
2215
+ if (object === undefined) {
2216
+ return false;
2217
+ }
2218
+
2219
+ if (
2220
+ object.type === "ReturnStatement" ||
2221
+ object.type === "ThrowStatement" ||
2222
+ object.type === "BreakStatement" ||
2223
+ object.type === "ContinueStatement"
2224
+ ) {
2225
+ return true;
2226
+ }
2227
+
2228
+ if (object.type === "BlockStatement") {
2229
+ const body = readArray(object.body);
2230
+
2231
+ return body.length > 0 && consequentAlwaysExits(body[body.length - 1]);
2232
+ }
2233
+
2234
+ return false;
2235
+ }
2236
+
2002
2237
  function collectFormActionReferencesFromNode(
2003
2238
  node: unknown,
2004
2239
  references: FormActionReference[],