@reckona/mreact-compiler 0.0.81 → 0.0.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +15 -0
  2. package/dist/boundary-graph.d.ts +66 -0
  3. package/dist/boundary-graph.d.ts.map +1 -0
  4. package/dist/boundary-graph.js +568 -0
  5. package/dist/boundary-graph.js.map +1 -0
  6. package/dist/emit-boundary-lowering.d.ts +43 -0
  7. package/dist/emit-boundary-lowering.d.ts.map +1 -0
  8. package/dist/emit-boundary-lowering.js +63 -0
  9. package/dist/emit-boundary-lowering.js.map +1 -0
  10. package/dist/emit-code-builder.d.ts +9 -0
  11. package/dist/emit-code-builder.d.ts.map +1 -0
  12. package/dist/emit-code-builder.js +17 -0
  13. package/dist/emit-code-builder.js.map +1 -0
  14. package/dist/emit-server-stream.d.ts.map +1 -1
  15. package/dist/emit-server-stream.js +64 -84
  16. package/dist/emit-server-stream.js.map +1 -1
  17. package/dist/emit-server.d.ts.map +1 -1
  18. package/dist/emit-server.js +12 -1
  19. package/dist/emit-server.js.map +1 -1
  20. package/dist/index.d.ts +3 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/internal.d.ts +5 -0
  25. package/dist/internal.d.ts.map +1 -1
  26. package/dist/internal.js +14 -1
  27. package/dist/internal.js.map +1 -1
  28. package/dist/types.d.ts +16 -69
  29. package/dist/types.d.ts.map +1 -1
  30. package/dist/types.js.map +1 -1
  31. package/package.json +2 -2
  32. package/src/boundary-graph.ts +904 -0
  33. package/src/emit-boundary-lowering.ts +165 -0
  34. package/src/emit-code-builder.ts +27 -0
  35. package/src/emit-server-stream.ts +61 -152
  36. package/src/emit-server.ts +12 -1
  37. package/src/index.ts +16 -0
  38. package/src/internal.ts +25 -1
  39. package/src/types.ts +32 -79
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary-graph.js","sourceRoot":"","sources":["../src/boundary-graph.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n collectClientRouteModuleAnalysis,\n collectFormActionExpressionReferences,\n hasModuleDirective,\n} from \"./internal.js\";\nimport type {\n ClientRouteModuleAnalysis,\n ClientRouteStaticImportReference,\n StaticExportReference,\n StaticImportSpecifierReference,\n TopLevelExportRenderInfo,\n} from \"./internal.js\";\nimport type { Diagnostic } from \"./types.js\";\n\nexport type BoundaryGraphEntryKind =\n | \"module\"\n | \"route-layout\"\n | \"route-page\"\n | \"route-template\";\n\nexport type BoundaryClassification =\n | \"client-boundary\"\n | \"client-route\"\n | \"server-action\"\n | \"server-only\"\n | \"server-render\"\n | \"shared\"\n | \"unknown\";\n\nexport interface BoundaryGraphEntry {\n file: string;\n kind: BoundaryGraphEntryKind;\n}\n\nexport interface BoundaryGraphInput {\n entries: readonly BoundaryGraphEntry[];\n readModule(file: string): Promise<string | undefined> | string | undefined;\n resolveModule(input: {\n importer: string;\n source: string;\n }): Promise<string | undefined> | string | undefined;\n}\n\nexport interface BoundaryGraphExport {\n classification: BoundaryClassification;\n name: string;\n}\n\nexport interface BoundaryGraphModule {\n classification: BoundaryClassification;\n exports: BoundaryGraphExport[];\n file: string;\n}\n\nexport interface BoundaryGraphClientBoundary {\n exportNames?: readonly string[];\n importerFile: string;\n moduleFile: string;\n source: string;\n}\n\nexport interface BoundaryGraphServerActionSite {\n end: number;\n exportName: string;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n file: string;\n inferred: boolean;\n moduleFile: string;\n start: number;\n}\n\nexport type BoundaryGraphTraceKind =\n | \"client-boundary\"\n | \"export\"\n | \"module\"\n | \"server-action\";\n\nexport type BoundaryGraphTraceReason =\n | \"client-runtime-export\"\n | \"module-classification\"\n | \"node-builtin-import\"\n | \"rendered-import\"\n | \"server-action-expression\"\n | \"server-render-export\"\n | \"static-export\"\n | \"use-client-directive\"\n | \"unknown-module\"\n | \"use-server-directive\";\n\nexport interface BoundaryGraphTraceEvent {\n classification: BoundaryClassification;\n exportName?: string;\n exportNames?: readonly string[];\n expression?: string;\n file: string;\n importerFile?: string;\n inferred?: boolean;\n kind: BoundaryGraphTraceKind;\n moduleFile?: string;\n reason: BoundaryGraphTraceReason;\n source?: string;\n viaExportName?: string;\n}\n\nexport interface BoundaryGraphResult {\n clientBoundaries: BoundaryGraphClientBoundary[];\n diagnostics: Diagnostic[];\n modules: BoundaryGraphModule[];\n serverActions: BoundaryGraphServerActionSite[];\n trace: BoundaryGraphTraceEvent[];\n}\n\ninterface ResolvedServerActionTarget {\n exportName: string;\n inferred: boolean;\n moduleFile: string;\n}\n\nexport async function analyzeBoundaryGraph(\n input: BoundaryGraphInput,\n): Promise<BoundaryGraphResult> {\n const modules = new Map<string, BoundaryGraphModule>();\n const clientBoundaries: BoundaryGraphClientBoundary[] = [];\n const diagnostics: Diagnostic[] = [];\n const serverActions: BoundaryGraphServerActionSite[] = [];\n const trace: BoundaryGraphTraceEvent[] = [];\n const visiting = new Set<string>();\n\n for (const entry of input.entries) {\n await analyzeModule({\n diagnostics,\n entryKind: entry.kind,\n file: entry.file,\n input,\n clientBoundaries,\n modules,\n serverActions,\n trace,\n visiting,\n });\n }\n\n return {\n clientBoundaries,\n diagnostics,\n modules: Array.from(modules.values()),\n serverActions,\n trace,\n };\n}\n\nasync function analyzeModule(options: {\n diagnostics: Diagnostic[];\n entryKind: BoundaryGraphEntryKind;\n file: string;\n input: BoundaryGraphInput;\n clientBoundaries: BoundaryGraphClientBoundary[];\n modules: Map<string, BoundaryGraphModule>;\n serverActions: BoundaryGraphServerActionSite[];\n trace: BoundaryGraphTraceEvent[];\n visiting: Set<string>;\n}): Promise<void> {\n if (options.modules.has(options.file) || options.visiting.has(options.file)) {\n return;\n }\n\n options.visiting.add(options.file);\n\n try {\n const code = await options.input.readModule(options.file);\n\n if (code === undefined) {\n options.diagnostics.push({\n code: \"MR_BOUNDARY_GRAPH_MODULE_NOT_FOUND\",\n level: \"warn\",\n message: `Boundary graph could not read module ${JSON.stringify(options.file)}.`,\n });\n options.modules.set(options.file, {\n classification: \"unknown\",\n exports: [],\n file: options.file,\n });\n options.trace.push({\n classification: \"unknown\",\n file: options.file,\n kind: \"module\",\n reason: \"unknown-module\",\n });\n return;\n }\n\n const analysis = collectClientRouteModuleAnalysis({\n code,\n filename: options.file,\n });\n const serverOnly = isServerOnlyModule(analysis);\n const explicitClient = analysis.hasUseClientDirective;\n const exports = analysis.topLevelExportRenderInfo.map((info) => ({\n classification: serverOnly\n ? \"server-only\"\n : exportClassification({\n explicitClient,\n info,\n entryKind: options.entryKind,\n }),\n name: info.name,\n }));\n\n options.modules.set(options.file, {\n classification: moduleClassification(exports.map((item) => item.classification)),\n exports,\n file: options.file,\n });\n const module = options.modules.get(options.file);\n\n if (module !== undefined) {\n options.trace.push({\n classification: module.classification,\n file: options.file,\n kind: \"module\",\n reason: \"module-classification\",\n });\n }\n options.trace.push(\n ...analysis.topLevelExportRenderInfo.map((info) => {\n const classification = serverOnly\n ? \"server-only\"\n : exportClassification({\n explicitClient,\n info,\n entryKind: options.entryKind,\n });\n\n return {\n classification,\n exportName: info.name,\n file: options.file,\n kind: \"export\" as const,\n reason: exportTraceReason({ analysis, classification, explicitClient, serverOnly }),\n };\n }),\n );\n\n const inferredServerActions = await inferServerActionSites({\n analysis,\n code,\n file: options.file,\n input: options.input,\n });\n options.serverActions.push(...inferredServerActions);\n options.trace.push(\n ...inferredServerActions.map((action) => ({\n classification: \"server-action\" as const,\n exportName: action.exportName,\n expression: action.expression,\n file: action.file,\n inferred: action.inferred,\n kind: \"server-action\" as const,\n moduleFile: action.moduleFile,\n reason: \"server-action-expression\" as const,\n })),\n );\n await analyzeStaticExports({\n analysis,\n diagnostics: options.diagnostics,\n file: options.file,\n input: options.input,\n clientBoundaries: options.clientBoundaries,\n modules: options.modules,\n serverActions: options.serverActions,\n trace: options.trace,\n visiting: options.visiting,\n });\n await analyzeRenderedImports({\n analysis,\n diagnostics: options.diagnostics,\n file: options.file,\n input: options.input,\n clientBoundaries: options.clientBoundaries,\n modules: options.modules,\n serverActions: options.serverActions,\n trace: options.trace,\n visiting: options.visiting,\n });\n } finally {\n options.visiting.delete(options.file);\n }\n}\n\nfunction exportTraceReason(options: {\n analysis: ClientRouteModuleAnalysis;\n classification: BoundaryClassification;\n explicitClient: boolean;\n serverOnly: boolean;\n}): BoundaryGraphTraceReason {\n if (options.serverOnly) {\n return options.analysis.hasUseServerDirective ? \"use-server-directive\" : \"node-builtin-import\";\n }\n\n if (options.explicitClient) {\n return \"use-client-directive\";\n }\n\n return options.classification === \"server-render\"\n ? \"server-render-export\"\n : \"client-runtime-export\";\n}\n\nfunction isServerOnlyModule(analysis: ClientRouteModuleAnalysis): boolean {\n return (\n analysis.hasUseServerDirective ||\n analysis.staticImports.some((reference) => nodeBuiltinPackages.has(reference.source))\n );\n}\n\nconst nodeBuiltinPackages = new Set([\n \"assert\",\n \"async_hooks\",\n \"buffer\",\n \"child_process\",\n \"cluster\",\n \"console\",\n \"crypto\",\n \"dgram\",\n \"diagnostics_channel\",\n \"dns\",\n \"domain\",\n \"events\",\n \"fs\",\n \"fs/promises\",\n \"http\",\n \"http2\",\n \"https\",\n \"module\",\n \"net\",\n \"os\",\n \"path\",\n \"perf_hooks\",\n \"process\",\n \"punycode\",\n \"querystring\",\n \"readline\",\n \"repl\",\n \"stream\",\n \"stream/consumers\",\n \"stream/promises\",\n \"stream/web\",\n \"string_decoder\",\n \"timers\",\n \"timers/promises\",\n \"tls\",\n \"trace_events\",\n \"tty\",\n \"url\",\n \"util\",\n \"v8\",\n \"vm\",\n \"wasi\",\n \"worker_threads\",\n \"zlib\",\n].flatMap((name) => [name, `node:${name}`]));\n\nasync function inferServerActionSites(options: {\n analysis: ClientRouteModuleAnalysis;\n code: string;\n file: string;\n input: BoundaryGraphInput;\n}): Promise<BoundaryGraphServerActionSite[]> {\n const actions: BoundaryGraphServerActionSite[] = [];\n const references = collectFormActionExpressionReferences({\n code: options.code,\n filename: options.file,\n });\n\n for (const reference of references) {\n const target = await resolveServerActionExpression({\n analysis: options.analysis,\n code: options.code,\n expression: reference.expression,\n file: options.file,\n input: options.input,\n seen: new Set(),\n });\n\n if (target !== undefined) {\n actions.push({\n end: reference.end,\n exportName: target.exportName,\n expression: reference.expression,\n expressionEnd: reference.expressionEnd,\n expressionStart: reference.expressionStart,\n file: options.file,\n inferred: target.inferred,\n moduleFile: target.moduleFile,\n start: reference.start,\n });\n }\n }\n\n return actions;\n}\n\nasync function resolveServerActionExpression(options: {\n analysis: ClientRouteModuleAnalysis;\n code: string;\n expression: string;\n file: string;\n input: BoundaryGraphInput;\n seen: Set<string>;\n}): Promise<ResolvedServerActionTarget | undefined> {\n const expression = options.expression.trim();\n\n if (options.seen.has(expression)) {\n return undefined;\n }\n\n options.seen.add(expression);\n\n if (identifierPattern.test(expression)) {\n const imported = await importedActionReference({\n analysis: options.analysis,\n expression,\n file: options.file,\n input: options.input,\n });\n\n if (imported !== undefined) {\n return imported;\n }\n\n const alias = localAliasExpression(options.code, expression);\n\n return alias === undefined\n ? undefined\n : await resolveServerActionExpression({\n ...options,\n expression: alias,\n });\n }\n\n const member = memberExpressionPattern.exec(expression);\n\n if (member !== null) {\n const objectName = member.groups?.object;\n const propertyName = member.groups?.property;\n const namespace =\n objectName === undefined || propertyName === undefined\n ? undefined\n : await namespaceActionReference({\n analysis: options.analysis,\n exportName: propertyName,\n file: options.file,\n input: options.input,\n localName: objectName,\n });\n\n if (namespace !== undefined) {\n return namespace;\n }\n\n const propertyExpression =\n objectName === undefined || propertyName === undefined\n ? undefined\n : objectLiteralPropertyExpression(options.code, objectName, propertyName);\n\n return propertyExpression === undefined\n ? undefined\n : await resolveServerActionExpression({\n ...options,\n expression: propertyExpression,\n });\n }\n\n return undefined;\n}\n\nasync function namespaceActionReference(options: {\n analysis: ClientRouteModuleAnalysis;\n exportName: string;\n file: string;\n input: BoundaryGraphInput;\n localName: string;\n}): Promise<ResolvedServerActionTarget | undefined> {\n for (const staticImport of options.analysis.staticImports) {\n const specifier = staticImport.specifiers.find(\n (candidate) => candidate.kind === \"namespace\" && candidate.localName === options.localName,\n );\n\n if (specifier === undefined) {\n continue;\n }\n\n const moduleFile = await options.input.resolveModule({\n importer: options.file,\n source: staticImport.source,\n });\n\n if (moduleFile === undefined) {\n continue;\n }\n\n return {\n exportName: options.exportName,\n inferred: await isInferredServerAction(options.input, moduleFile),\n moduleFile,\n };\n }\n\n return undefined;\n}\n\nasync function importedActionReference(options: {\n analysis: ClientRouteModuleAnalysis;\n expression: string;\n file: string;\n input: BoundaryGraphInput;\n}): Promise<ResolvedServerActionTarget | undefined> {\n for (const staticImport of options.analysis.staticImports) {\n const specifier = staticImport.specifiers.find(\n (candidate) => candidate.localName === options.expression,\n );\n\n if (specifier === undefined || specifier.kind === \"namespace\") {\n continue;\n }\n\n const moduleFile = await options.input.resolveModule({\n importer: options.file,\n source: staticImport.source,\n });\n\n if (moduleFile === undefined) {\n continue;\n }\n\n return {\n exportName: importedActionExportName(specifier),\n inferred: await isInferredServerAction(options.input, moduleFile),\n moduleFile,\n };\n }\n\n return undefined;\n}\n\nfunction localAliasExpression(code: string, name: string): string | undefined {\n const match = new RegExp(\n String.raw`\\b(?:const|let|var)\\s+${escapeRegExp(name)}\\s*=\\s*(?<expression>[^;]+);`,\n ).exec(code);\n const expression = match?.groups?.expression;\n\n return expression === undefined ? undefined : expression.trim();\n}\n\nfunction objectLiteralPropertyExpression(\n code: string,\n objectName: string,\n propertyName: string,\n): string | undefined {\n const object = new RegExp(\n String.raw`\\b(?:const|let|var)\\s+${escapeRegExp(objectName)}\\s*=\\s*\\{(?<body>[\\s\\S]*?)\\}\\s*;`,\n ).exec(code);\n const body = object?.groups?.body;\n\n if (body === undefined) {\n return undefined;\n }\n\n const property = escapeRegExp(propertyName);\n const assignment = new RegExp(\n String.raw`(?:^|,)\\s*${property}\\s*:\\s*(?<expression>[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*)?)\\s*(?:,|$)`,\n ).exec(body);\n\n if (assignment?.groups?.expression !== undefined) {\n return assignment.groups.expression;\n }\n\n const shorthand = new RegExp(String.raw`(?:^|,)\\s*(?<name>${property})\\s*(?:,|$)`).exec(body);\n\n return shorthand?.groups?.name;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction importedActionExportName(specifier: StaticImportSpecifierReference): string {\n return specifier.kind === \"default\" ? \"default\" : specifier.importedName;\n}\n\nasync function isInferredServerAction(\n input: BoundaryGraphInput,\n moduleFile: string,\n): Promise<boolean> {\n const code = await input.readModule(moduleFile);\n\n if (code === undefined) {\n return true;\n }\n\n return !hasModuleDirective({ code, directive: \"use server\", filename: moduleFile });\n}\n\nconst identifierPattern = /^[A-Za-z_$][\\w$]*$/;\nconst memberExpressionPattern =\n /^(?<object>[A-Za-z_$][\\w$]*)\\.(?<property>[A-Za-z_$][\\w$]*)$/;\n\nasync function analyzeStaticExports(options: {\n analysis: ClientRouteModuleAnalysis;\n diagnostics: Diagnostic[];\n file: string;\n input: BoundaryGraphInput;\n clientBoundaries: BoundaryGraphClientBoundary[];\n modules: Map<string, BoundaryGraphModule>;\n serverActions: BoundaryGraphServerActionSite[];\n trace: BoundaryGraphTraceEvent[];\n visiting: Set<string>;\n}): Promise<void> {\n for (const reference of options.analysis.staticExports) {\n const resolved = await options.input.resolveModule({\n importer: options.file,\n source: reference.source,\n });\n\n if (resolved === undefined) {\n continue;\n }\n\n await analyzeModule({\n diagnostics: options.diagnostics,\n entryKind: \"module\",\n file: resolved,\n input: options.input,\n clientBoundaries: options.clientBoundaries,\n modules: options.modules,\n serverActions: options.serverActions,\n trace: options.trace,\n visiting: options.visiting,\n });\n\n propagateStaticExport({\n file: options.file,\n modules: options.modules,\n reference,\n resolved,\n trace: options.trace,\n });\n }\n}\n\nfunction propagateStaticExport(options: {\n file: string;\n modules: Map<string, BoundaryGraphModule>;\n reference: StaticExportReference;\n resolved: string;\n trace: BoundaryGraphTraceEvent[];\n}): void {\n const module = options.modules.get(options.file);\n const exported = options.modules.get(options.resolved);\n\n if (module === undefined || exported === undefined) {\n return;\n }\n\n const propagated = propagatedStaticExports(options.reference, exported);\n\n if (propagated.length === 0) {\n return;\n }\n\n const exportsByName = new Map(module.exports.map((item) => [item.name, item]));\n\n for (const item of propagated) {\n exportsByName.set(item.export.name, item.export);\n options.trace.push({\n classification: item.export.classification,\n exportName: item.export.name,\n file: options.file,\n kind: \"export\",\n moduleFile: options.resolved,\n reason: \"static-export\",\n source: options.reference.source,\n viaExportName: item.viaExportName,\n });\n }\n\n const exports = Array.from(exportsByName.values()).sort((left, right) =>\n left.name.localeCompare(right.name),\n );\n const classification = moduleClassification(exports.map((item) => item.classification));\n options.modules.set(options.file, {\n ...module,\n classification,\n exports,\n });\n options.trace.push({\n classification,\n file: options.file,\n kind: \"module\",\n moduleFile: options.resolved,\n reason: \"static-export\",\n source: options.reference.source,\n });\n}\n\nfunction propagatedStaticExports(\n reference: StaticExportReference,\n exported: BoundaryGraphModule,\n): { export: BoundaryGraphExport; viaExportName: string }[] {\n if (reference.exportAll) {\n return exported.exports.map((item) => ({\n export: item,\n viaExportName: item.name,\n }));\n }\n\n if (reference.specifiers.length === 0) {\n return exported.exports\n .filter((item) => reference.exportedNames.includes(item.name))\n .map((item) => ({\n export: item,\n viaExportName: item.name,\n }));\n }\n\n return reference.specifiers.flatMap((specifier) => {\n const item = exported.exports.find((candidate) => candidate.name === specifier.localName);\n\n return item === undefined\n ? []\n : [\n {\n export: { ...item, name: specifier.exportedName },\n viaExportName: specifier.localName,\n },\n ];\n });\n}\n\nasync function analyzeRenderedImports(options: {\n analysis: ClientRouteModuleAnalysis;\n diagnostics: Diagnostic[];\n file: string;\n input: BoundaryGraphInput;\n clientBoundaries: BoundaryGraphClientBoundary[];\n modules: Map<string, BoundaryGraphModule>;\n serverActions: BoundaryGraphServerActionSite[];\n trace: BoundaryGraphTraceEvent[];\n visiting: Set<string>;\n}): Promise<void> {\n const renderedRoots = new Set(\n options.analysis.topLevelExportRenderInfo.flatMap((info) => [\n ...info.renderedComponentRoots,\n ...info.calledComponentRoots,\n ]),\n );\n\n for (const reference of options.analysis.staticImports) {\n if (reference.sideEffect && isStyleModuleSpecifier(reference.source)) {\n continue;\n }\n\n if (!isRenderedImport(reference, renderedRoots)) {\n continue;\n }\n\n const resolved = await options.input.resolveModule({\n importer: options.file,\n source: reference.source,\n });\n\n if (resolved === undefined) {\n continue;\n }\n\n const exportNames = renderedImportedExportNames(reference, renderedRoots);\n await analyzeModule({\n diagnostics: options.diagnostics,\n entryKind: \"module\",\n file: resolved,\n input: options.input,\n clientBoundaries: options.clientBoundaries,\n modules: options.modules,\n serverActions: options.serverActions,\n trace: options.trace,\n visiting: options.visiting,\n });\n\n const module = options.modules.get(resolved);\n\n if (module !== undefined && hasClientBoundaryExport(module, exportNames)) {\n options.clientBoundaries.push({\n ...(exportNames === undefined ? {} : { exportNames }),\n importerFile: options.file,\n moduleFile: resolved,\n source: reference.source,\n });\n options.trace.push({\n classification: \"client-boundary\",\n ...(exportNames === undefined ? {} : { exportNames }),\n file: options.file,\n importerFile: options.file,\n kind: \"client-boundary\",\n moduleFile: resolved,\n reason: \"rendered-import\",\n source: reference.source,\n });\n }\n }\n}\n\nfunction renderedImportedExportNames(\n reference: ClientRouteStaticImportReference,\n renderedRoots: ReadonlySet<string>,\n): string[] | undefined {\n if (reference.sideEffect) {\n return undefined;\n }\n\n const names: string[] = [];\n\n for (const specifier of reference.specifiers) {\n if (!renderedRoots.has(specifier.localName)) {\n continue;\n }\n\n if (specifier.kind === \"namespace\") {\n return undefined;\n }\n\n names.push(specifier.kind === \"default\" ? \"default\" : specifier.importedName);\n }\n\n return names;\n}\n\nfunction hasClientBoundaryExport(\n module: BoundaryGraphModule,\n exportNames: readonly string[] | undefined,\n): boolean {\n return module.exports.some(\n (item) =>\n item.classification === \"client-boundary\" &&\n (exportNames === undefined || exportNames.includes(item.name)),\n );\n}\n\nfunction isRenderedImport(\n reference: ClientRouteStaticImportReference,\n renderedRoots: ReadonlySet<string>,\n): boolean {\n return (\n reference.sideEffect ||\n reference.localNames.some((localName) => renderedRoots.has(localName))\n );\n}\n\nfunction isStyleModuleSpecifier(source: string): boolean {\n return /\\.(?:css|less|sass|scss|styl|stylus)(?:[?#].*)?$/u.test(source);\n}\n\nfunction exportClassification(options: {\n explicitClient: boolean;\n info: TopLevelExportRenderInfo;\n entryKind: BoundaryGraphEntryKind;\n}): BoundaryClassification {\n if (!options.explicitClient && !options.info.clientRuntime) {\n return \"server-render\";\n }\n\n return isRouteEntryKind(options.entryKind) ? \"client-route\" : \"client-boundary\";\n}\n\nfunction isRouteEntryKind(kind: BoundaryGraphEntryKind): boolean {\n return kind === \"route-layout\" || kind === \"route-page\" || kind === \"route-template\";\n}\n\nfunction moduleClassification(\n classifications: readonly BoundaryClassification[],\n): BoundaryClassification {\n if (classifications.includes(\"client-route\")) {\n return \"client-route\";\n }\n\n if (classifications.includes(\"client-boundary\")) {\n return \"client-boundary\";\n }\n\n if (classifications.includes(\"server-action\")) {\n return \"server-action\";\n }\n\n if (classifications.includes(\"unknown\")) {\n return \"unknown\";\n }\n\n if (classifications.includes(\"server-only\")) {\n return \"server-only\";\n }\n\n return \"server-render\";\n}\n"]}
@@ -0,0 +1,43 @@
1
+ export type NestedAppendEmitter<Part> = (parts: readonly Part[], sinkName: string, compatRenderToStringHelperName: string) => string;
2
+ export interface BoundaryLoweringContext<Part> {
3
+ compatRenderToStringHelperName: string;
4
+ emitNestedAppendStatements: NestedAppendEmitter<Part>;
5
+ sinkName: string;
6
+ }
7
+ export interface AsyncBoundaryPart<Part> {
8
+ awaitId?: string;
9
+ catchName?: string;
10
+ catchParts?: readonly Part[];
11
+ parts: readonly Part[];
12
+ valueCode: string;
13
+ valueName: string;
14
+ }
15
+ export interface OutOfOrderBoundaryPart<Part> extends AsyncBoundaryPart<Part> {
16
+ id: string;
17
+ hydration: boolean;
18
+ placeholderParts: readonly Part[];
19
+ placeholderTagCode?: string;
20
+ }
21
+ export interface ReactSuspenseBoundaryPart<Part> {
22
+ parts: readonly Part[];
23
+ }
24
+ export interface ReactSuspenseOutOfOrderBoundaryPart<Part> extends AsyncBoundaryPart<Part> {
25
+ boundaryId: string;
26
+ fallbackParts: readonly Part[];
27
+ nonce?: string;
28
+ scriptSrc?: string;
29
+ segmentId: string;
30
+ }
31
+ export declare function emitAsyncBoundary<Part>(part: AsyncBoundaryPart<Part>, context: BoundaryLoweringContext<Part> & {
32
+ asyncBoundaryHelperName: string;
33
+ }): string;
34
+ export declare function emitOutOfOrderBoundary<Part>(part: OutOfOrderBoundaryPart<Part>, context: BoundaryLoweringContext<Part> & {
35
+ outOfOrderBoundaryHelperName: string;
36
+ }): string;
37
+ export declare function emitReactSuspenseBoundary<Part>(part: ReactSuspenseBoundaryPart<Part>, context: BoundaryLoweringContext<Part> & {
38
+ reactSuspenseBoundaryHelperName: string;
39
+ }): string;
40
+ export declare function emitReactSuspenseOutOfOrderBoundary<Part>(part: ReactSuspenseOutOfOrderBoundaryPart<Part>, context: BoundaryLoweringContext<Part> & {
41
+ reactSuspenseOutOfOrderBoundaryHelperName: string;
42
+ }): string;
43
+ //# sourceMappingURL=emit-boundary-lowering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-boundary-lowering.d.ts","sourceRoot":"","sources":["../src/emit-boundary-lowering.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,CAAC,IAAI,IAAI,CACtC,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,QAAQ,EAAE,MAAM,EAChB,8BAA8B,EAAE,MAAM,KACnC,MAAM,CAAC;AAEZ,MAAM,WAAW,uBAAuB,CAAC,IAAI;IAC3C,8BAA8B,EAAE,MAAM,CAAC;IACvC,0BAA0B,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB,CAAC,IAAI;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB,CAAC,IAAI,CAAE,SAAQ,iBAAiB,CAAC,IAAI,CAAC;IAC3E,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,SAAS,IAAI,EAAE,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB,CAAC,IAAI;IAC7C,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,mCAAmC,CAAC,IAAI,CAAE,SAAQ,iBAAiB,CAAC,IAAI,CAAC;IACxF,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,SAAS,IAAI,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EACpC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAC7B,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG;IACvC,uBAAuB,EAAE,MAAM,CAAC;CACjC,GACA,MAAM,CAwBR;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EACzC,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAClC,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG;IACvC,4BAA4B,EAAE,MAAM,CAAC;CACtC,GACA,MAAM,CA6BR;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAC5C,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,EACrC,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG;IACvC,+BAA+B,EAAE,MAAM,CAAC;CACzC,GACA,MAAM,CAUR;AAED,wBAAgB,mCAAmC,CAAC,IAAI,EACtD,IAAI,EAAE,mCAAmC,CAAC,IAAI,CAAC,EAC/C,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,GAAG;IACvC,yCAAyC,EAAE,MAAM,CAAC;CACnD,GACA,MAAM,CAmCR"}
@@ -0,0 +1,63 @@
1
+ export function emitAsyncBoundary(part, context) {
2
+ const optionFields = [];
3
+ if (part.catchName !== undefined && part.catchParts !== undefined) {
4
+ optionFields.push(`catch: (${context.sinkName}, ${part.catchName}) => {\n${context.emitNestedAppendStatements(part.catchParts, context.sinkName, context.compatRenderToStringHelperName)}\n }`);
5
+ }
6
+ if (part.awaitId !== undefined) {
7
+ optionFields.push(`hydrationAwaitId: ${JSON.stringify(part.awaitId)}`);
8
+ }
9
+ const optionsExpression = optionFields.length === 0 ? "" : `, { ${optionFields.join(", ")} }`;
10
+ return [
11
+ ` await ${context.asyncBoundaryHelperName}(${context.sinkName}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,
12
+ context.emitNestedAppendStatements(part.parts, context.sinkName, context.compatRenderToStringHelperName),
13
+ ` }${optionsExpression});`,
14
+ ].join("\n");
15
+ }
16
+ export function emitOutOfOrderBoundary(part, context) {
17
+ const catchOption = part.catchName === undefined || part.catchParts === undefined
18
+ ? ""
19
+ : `,\n catch: (${context.sinkName}, ${part.catchName}) => {\n${context.emitNestedAppendStatements(part.catchParts, context.sinkName, context.compatRenderToStringHelperName)}\n }`;
20
+ const hydrationAwaitIdOption = part.awaitId === undefined ? "" : `,\n hydrationAwaitId: ${JSON.stringify(part.awaitId)}`;
21
+ const placeholderTagOption = part.placeholderTagCode === undefined ? "" : `,\n placeholderTag: (${part.placeholderTagCode})`;
22
+ return [
23
+ ` ${context.outOfOrderBoundaryHelperName}(${context.sinkName}, ${JSON.stringify(part.id)}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,
24
+ context.emitNestedAppendStatements(part.parts, context.sinkName, context.compatRenderToStringHelperName),
25
+ ` }, {`,
26
+ ...(part.hydration ? [` hydration: true,`] : []),
27
+ ` placeholder: (${context.sinkName}) => {`,
28
+ context.emitNestedAppendStatements(part.placeholderParts, context.sinkName, context.compatRenderToStringHelperName),
29
+ ` }${catchOption}${hydrationAwaitIdOption}${placeholderTagOption}`,
30
+ ` });`,
31
+ ].join("\n");
32
+ }
33
+ export function emitReactSuspenseBoundary(part, context) {
34
+ return [
35
+ ` await ${context.reactSuspenseBoundaryHelperName}(${context.sinkName}, async (${context.sinkName}) => {`,
36
+ context.emitNestedAppendStatements(part.parts, context.sinkName, context.compatRenderToStringHelperName),
37
+ ` });`,
38
+ ].join("\n");
39
+ }
40
+ export function emitReactSuspenseOutOfOrderBoundary(part, context) {
41
+ const options = [
42
+ ` fallback: (${context.sinkName}) => {`,
43
+ context.emitNestedAppendStatements(part.fallbackParts, context.sinkName, context.compatRenderToStringHelperName),
44
+ ` },`,
45
+ ...(part.catchName === undefined || part.catchParts === undefined
46
+ ? []
47
+ : [
48
+ ` catch: (${context.sinkName}, ${part.catchName}) => {`,
49
+ context.emitNestedAppendStatements(part.catchParts, context.sinkName, context.compatRenderToStringHelperName),
50
+ ` },`,
51
+ ]),
52
+ ...(part.nonce === undefined ? [] : [` nonce: ${JSON.stringify(part.nonce)},`]),
53
+ ...(part.scriptSrc === undefined ? [] : [` src: ${JSON.stringify(part.scriptSrc)},`]),
54
+ ];
55
+ return [
56
+ ` ${context.reactSuspenseOutOfOrderBoundaryHelperName}(${context.sinkName}, ${JSON.stringify(part.boundaryId)}, ${JSON.stringify(part.segmentId)}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,
57
+ context.emitNestedAppendStatements(part.parts, context.sinkName, context.compatRenderToStringHelperName),
58
+ ` }, {`,
59
+ ...options,
60
+ ` });`,
61
+ ].join("\n");
62
+ }
63
+ //# sourceMappingURL=emit-boundary-lowering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-boundary-lowering.js","sourceRoot":"","sources":["../src/emit-boundary-lowering.ts"],"names":[],"mappings":"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","sourcesContent":["export type NestedAppendEmitter<Part> = (\n parts: readonly Part[],\n sinkName: string,\n compatRenderToStringHelperName: string,\n) => string;\n\nexport interface BoundaryLoweringContext<Part> {\n compatRenderToStringHelperName: string;\n emitNestedAppendStatements: NestedAppendEmitter<Part>;\n sinkName: string;\n}\n\nexport interface AsyncBoundaryPart<Part> {\n awaitId?: string;\n catchName?: string;\n catchParts?: readonly Part[];\n parts: readonly Part[];\n valueCode: string;\n valueName: string;\n}\n\nexport interface OutOfOrderBoundaryPart<Part> extends AsyncBoundaryPart<Part> {\n id: string;\n hydration: boolean;\n placeholderParts: readonly Part[];\n placeholderTagCode?: string;\n}\n\nexport interface ReactSuspenseBoundaryPart<Part> {\n parts: readonly Part[];\n}\n\nexport interface ReactSuspenseOutOfOrderBoundaryPart<Part> extends AsyncBoundaryPart<Part> {\n boundaryId: string;\n fallbackParts: readonly Part[];\n nonce?: string;\n scriptSrc?: string;\n segmentId: string;\n}\n\nexport function emitAsyncBoundary<Part>(\n part: AsyncBoundaryPart<Part>,\n context: BoundaryLoweringContext<Part> & {\n asyncBoundaryHelperName: string;\n },\n): string {\n const optionFields: string[] = [];\n\n if (part.catchName !== undefined && part.catchParts !== undefined) {\n optionFields.push(\n `catch: (${context.sinkName}, ${part.catchName}) => {\\n${context.emitNestedAppendStatements(part.catchParts, context.sinkName, context.compatRenderToStringHelperName)}\\n }`,\n );\n }\n\n if (part.awaitId !== undefined) {\n optionFields.push(`hydrationAwaitId: ${JSON.stringify(part.awaitId)}`);\n }\n\n const optionsExpression = optionFields.length === 0 ? \"\" : `, { ${optionFields.join(\", \")} }`;\n\n return [\n ` await ${context.asyncBoundaryHelperName}(${context.sinkName}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,\n context.emitNestedAppendStatements(\n part.parts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` }${optionsExpression});`,\n ].join(\"\\n\");\n}\n\nexport function emitOutOfOrderBoundary<Part>(\n part: OutOfOrderBoundaryPart<Part>,\n context: BoundaryLoweringContext<Part> & {\n outOfOrderBoundaryHelperName: string;\n },\n): string {\n const catchOption =\n part.catchName === undefined || part.catchParts === undefined\n ? \"\"\n : `,\\n catch: (${context.sinkName}, ${part.catchName}) => {\\n${context.emitNestedAppendStatements(part.catchParts, context.sinkName, context.compatRenderToStringHelperName)}\\n }`;\n\n const hydrationAwaitIdOption =\n part.awaitId === undefined ? \"\" : `,\\n hydrationAwaitId: ${JSON.stringify(part.awaitId)}`;\n const placeholderTagOption =\n part.placeholderTagCode === undefined ? \"\" : `,\\n placeholderTag: (${part.placeholderTagCode})`;\n\n return [\n ` ${context.outOfOrderBoundaryHelperName}(${context.sinkName}, ${JSON.stringify(part.id)}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,\n context.emitNestedAppendStatements(\n part.parts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` }, {`,\n ...(part.hydration ? [` hydration: true,`] : []),\n ` placeholder: (${context.sinkName}) => {`,\n context.emitNestedAppendStatements(\n part.placeholderParts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` }${catchOption}${hydrationAwaitIdOption}${placeholderTagOption}`,\n ` });`,\n ].join(\"\\n\");\n}\n\nexport function emitReactSuspenseBoundary<Part>(\n part: ReactSuspenseBoundaryPart<Part>,\n context: BoundaryLoweringContext<Part> & {\n reactSuspenseBoundaryHelperName: string;\n },\n): string {\n return [\n ` await ${context.reactSuspenseBoundaryHelperName}(${context.sinkName}, async (${context.sinkName}) => {`,\n context.emitNestedAppendStatements(\n part.parts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` });`,\n ].join(\"\\n\");\n}\n\nexport function emitReactSuspenseOutOfOrderBoundary<Part>(\n part: ReactSuspenseOutOfOrderBoundaryPart<Part>,\n context: BoundaryLoweringContext<Part> & {\n reactSuspenseOutOfOrderBoundaryHelperName: string;\n },\n): string {\n const options = [\n ` fallback: (${context.sinkName}) => {`,\n context.emitNestedAppendStatements(\n part.fallbackParts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` },`,\n ...(part.catchName === undefined || part.catchParts === undefined\n ? []\n : [\n ` catch: (${context.sinkName}, ${part.catchName}) => {`,\n context.emitNestedAppendStatements(\n part.catchParts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` },`,\n ]),\n ...(part.nonce === undefined ? [] : [` nonce: ${JSON.stringify(part.nonce)},`]),\n ...(part.scriptSrc === undefined ? [] : [` src: ${JSON.stringify(part.scriptSrc)},`]),\n ];\n\n return [\n ` ${context.reactSuspenseOutOfOrderBoundaryHelperName}(${context.sinkName}, ${JSON.stringify(part.boundaryId)}, ${JSON.stringify(part.segmentId)}, (${part.valueCode}), async (${context.sinkName}, ${part.valueName}) => {`,\n context.emitNestedAppendStatements(\n part.parts,\n context.sinkName,\n context.compatRenderToStringHelperName,\n ),\n ` }, {`,\n ...options,\n ` });`,\n ].join(\"\\n\");\n}\n"]}
@@ -0,0 +1,9 @@
1
+ export interface CodeBuilder {
2
+ section(code: string | undefined, options?: CodeBuilderSectionOptions): void;
3
+ toString(): string;
4
+ }
5
+ export interface CodeBuilderSectionOptions {
6
+ leadingBlankLines?: number;
7
+ }
8
+ export declare function createCodeBuilder(): CodeBuilder;
9
+ //# sourceMappingURL=emit-code-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-code-builder.d.ts","sourceRoot":"","sources":["../src/emit-code-builder.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC7E,QAAQ,IAAI,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAiB/C"}
@@ -0,0 +1,17 @@
1
+ export function createCodeBuilder() {
2
+ const sections = [];
3
+ return {
4
+ section(code, options = {}) {
5
+ if (code === undefined || code === "") {
6
+ return;
7
+ }
8
+ const leadingBlankLines = options.leadingBlankLines ?? 1;
9
+ const prefix = sections.length === 0 ? "" : "\n".repeat(leadingBlankLines + 1);
10
+ sections.push(`${prefix}${code}`);
11
+ },
12
+ toString() {
13
+ return sections.length === 0 ? "\n" : `${sections.join("")}\n`;
14
+ },
15
+ };
16
+ }
17
+ //# sourceMappingURL=emit-code-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-code-builder.js","sourceRoot":"","sources":["../src/emit-code-builder.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,OAAO;QACL,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE;YACxB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBACtC,OAAO;YACT,CAAC;YAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;YAC/E,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,QAAQ;YACN,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["export interface CodeBuilder {\n section(code: string | undefined, options?: CodeBuilderSectionOptions): void;\n toString(): string;\n}\n\nexport interface CodeBuilderSectionOptions {\n leadingBlankLines?: number;\n}\n\nexport function createCodeBuilder(): CodeBuilder {\n const sections: string[] = [];\n\n return {\n section(code, options = {}) {\n if (code === undefined || code === \"\") {\n return;\n }\n\n const leadingBlankLines = options.leadingBlankLines ?? 1;\n const prefix = sections.length === 0 ? \"\" : \"\\n\".repeat(leadingBlankLines + 1);\n sections.push(`${prefix}${code}`);\n },\n toString() {\n return sections.length === 0 ? \"\\n\" : `${sections.join(\"\")}\\n`;\n },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"emit-server-stream.d.ts","sourceRoot":"","sources":["../src/emit-server-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAMV,QAAQ,EACT,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAc1F,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACzC,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC;AAcD,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CA+HxB"}
1
+ {"version":3,"file":"emit-server-stream.d.ts","sourceRoot":"","sources":["../src/emit-server-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAMV,QAAQ,EACT,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAqB1F,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,MAAM,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IACzC,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC;AAcD,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAqIxB"}
@@ -1,4 +1,6 @@
1
1
  import { emitEscapeHtmlHelper } from "./emit-escape-helper.js";
2
+ import { createCodeBuilder } from "./emit-code-builder.js";
3
+ import { emitAsyncBoundary as emitLoweredAsyncBoundary, emitOutOfOrderBoundary as emitLoweredOutOfOrderBoundary, emitReactSuspenseBoundary as emitLoweredReactSuspenseBoundary, emitReactSuspenseOutOfOrderBoundary as emitLoweredReactSuspenseOutOfOrderBoundary, } from "./emit-boundary-lowering.js";
2
4
  import { escapeHtmlAttribute as escapeHtml } from "@reckona/mreact-shared/html-escape";
3
5
  import { htmlAttributeName, isDangerousHtmlAttribute, isStaticUrlValueUnsafe, isUrlAttribute, parseStaticStyleObjectLiteral, parseStyleLiteralValue, simpleSideEffectFreeExpression, } from "./emit-server-shared.js";
4
6
  import { oxcServerStringReactNodeRenderHelperPlaceholder } from "./oxc-runtime-emit.js";
@@ -101,20 +103,26 @@ export function emitServerStream(ir, options = {}) {
101
103
  const moduleStatements = emitModuleStatements(ir);
102
104
  const importsBlock = [importLine, escapeImport, userImports, moduleStatements].filter(Boolean).join("\n");
103
105
  const needsSpreadAttributesHelper = components.includes(spreadAttributesHelperName);
104
- const urlSafeBlock = components.includes(urlSafeHelperName) || needsSpreadAttributesHelper
105
- ? `\n\n${urlSafeHelper}`
106
- : "";
106
+ const urlSafeBlock = components.includes(urlSafeHelperName) || needsSpreadAttributesHelper ? urlSafeHelper : "";
107
107
  const clientBoundaryBlock = clientBoundaryHelperName === undefined || !components.includes(clientBoundaryHelperName)
108
108
  ? ""
109
- : `\n\n${emitClientBoundaryHelper(clientBoundaryHelperName)}`;
109
+ : emitClientBoundaryHelper(clientBoundaryHelperName);
110
110
  const spreadAttributesBlock = needsSpreadAttributesHelper
111
- ? `\n\n${emitSpreadAttributesHelper(spreadAttributesHelperName, escapeHelperName, urlSafeHelperName)}`
111
+ ? emitSpreadAttributesHelper(spreadAttributesHelperName, escapeHelperName, urlSafeHelperName)
112
112
  : "";
113
113
  const streamNodeBlock = components.includes(streamNodeHelperName)
114
- ? `\n\n${emitStreamNodeHelper(streamNodeHelperName)}`
114
+ ? emitStreamNodeHelper(streamNodeHelperName)
115
115
  : "";
116
+ const code = createCodeBuilder();
117
+ code.section(importsBlock);
118
+ code.section(helper);
119
+ code.section(urlSafeBlock);
120
+ code.section(clientBoundaryBlock);
121
+ code.section(spreadAttributesBlock);
122
+ code.section(streamNodeBlock);
123
+ code.section(components);
116
124
  return {
117
- code: `${importsBlock === "" ? "" : `${importsBlock}\n\n`}${helper}${urlSafeBlock}${clientBoundaryBlock}${spreadAttributesBlock}${streamNodeBlock}\n\n${components}\n`,
125
+ code: code.toString(),
118
126
  imports,
119
127
  };
120
128
  }
@@ -360,16 +368,36 @@ function emitAppendStatements(node, sinkName, escapeHelperName, asyncBoundaryHel
360
368
  try {
361
369
  return coalesceAdjacentStaticParts(collected).map((part) => {
362
370
  if (part.kind === "async-boundary") {
363
- return emitAsyncBoundary(part, sinkName, asyncBoundaryHelperName, compatRenderToStringHelperName);
371
+ return emitLoweredAsyncBoundary(part, {
372
+ asyncBoundaryHelperName,
373
+ compatRenderToStringHelperName,
374
+ emitNestedAppendStatements,
375
+ sinkName,
376
+ });
364
377
  }
365
378
  if (part.kind === "out-of-order-boundary") {
366
- return emitOutOfOrderBoundary(part, sinkName, outOfOrderBoundaryHelperName, compatRenderToStringHelperName);
379
+ return emitLoweredOutOfOrderBoundary(part, {
380
+ compatRenderToStringHelperName,
381
+ emitNestedAppendStatements,
382
+ outOfOrderBoundaryHelperName,
383
+ sinkName,
384
+ });
367
385
  }
368
386
  if (part.kind === "react-suspense-boundary") {
369
- return emitReactSuspenseBoundary(part, sinkName, reactSuspenseBoundaryHelperName, compatRenderToStringHelperName);
387
+ return emitLoweredReactSuspenseBoundary(part, {
388
+ compatRenderToStringHelperName,
389
+ emitNestedAppendStatements,
390
+ reactSuspenseBoundaryHelperName,
391
+ sinkName,
392
+ });
370
393
  }
371
394
  if (part.kind === "react-suspense-out-of-order-boundary") {
372
- return emitReactSuspenseOutOfOrderBoundary(part, sinkName, reactSuspenseOutOfOrderBoundaryHelperName, compatRenderToStringHelperName);
395
+ return emitLoweredReactSuspenseOutOfOrderBoundary(part, {
396
+ compatRenderToStringHelperName,
397
+ emitNestedAppendStatements,
398
+ reactSuspenseOutOfOrderBoundaryHelperName,
399
+ sinkName,
400
+ });
373
401
  }
374
402
  if (part.kind === "component") {
375
403
  if (part.runtime === "compat") {
@@ -565,76 +593,8 @@ function emitListPartAsStringExpression(part, compatRenderToStringHelperName) {
565
593
  const concatLines = stringExpressions.map((expr) => `_listOut += ${expr};`);
566
594
  return `(() => { const _arr = (${part.itemsCode}); let _listOut = ""; for (let _i = 0, _len = _arr.length; _i < _len; _i++) { const ${part.itemName} = _arr[_i];${part.indexName === undefined ? "" : ` const ${part.indexName} = _i;`}${part.arrayName === undefined ? "" : ` const ${part.arrayName} = _arr;`}${part.bodyStatements.length === 0 ? "" : ` ${part.bodyStatements.join(" ")}`} ${concatLines.join(" ")} } return _listOut; })()`;
567
595
  }
568
- function emitAsyncBoundary(part, sinkName, asyncBoundaryHelperName, compatRenderToStringHelperName) {
569
- const optionFields = [];
570
- if (part.catchName !== undefined && part.catchParts !== undefined) {
571
- optionFields.push(`catch: (${sinkName}, ${part.catchName}) => {\n${emitNestedAppendStatements(part.catchParts, sinkName, compatRenderToStringHelperName)}\n }`);
572
- }
573
- if (part.awaitId !== undefined) {
574
- optionFields.push(`hydrationAwaitId: ${JSON.stringify(part.awaitId)}`);
575
- }
576
- const optionsExpression = optionFields.length === 0
577
- ? ""
578
- : `, { ${optionFields.join(", ")} }`;
579
- return [
580
- ` await ${asyncBoundaryHelperName}(${sinkName}, (${part.valueCode}), async (${sinkName}, ${part.valueName}) => {`,
581
- emitNestedAppendStatements(part.parts, sinkName, compatRenderToStringHelperName),
582
- ` }${optionsExpression});`,
583
- ].join("\n");
584
- }
585
- function emitOutOfOrderBoundary(part, sinkName, outOfOrderBoundaryHelperName, compatRenderToStringHelperName) {
586
- const catchOption = part.catchName === undefined || part.catchParts === undefined
587
- ? ""
588
- : `,\n catch: (${sinkName}, ${part.catchName}) => {\n${emitNestedAppendStatements(part.catchParts, sinkName, compatRenderToStringHelperName)}\n }`;
589
- const hydrationAwaitIdOption = part.awaitId === undefined
590
- ? ""
591
- : `,\n hydrationAwaitId: ${JSON.stringify(part.awaitId)}`;
592
- const placeholderTagOption = part.placeholderTagCode === undefined
593
- ? ""
594
- : `,\n placeholderTag: (${part.placeholderTagCode})`;
595
- return [
596
- ` ${outOfOrderBoundaryHelperName}(${sinkName}, ${JSON.stringify(part.id)}, (${part.valueCode}), async (${sinkName}, ${part.valueName}) => {`,
597
- emitNestedAppendStatements(part.parts, sinkName, compatRenderToStringHelperName),
598
- ` }, {`,
599
- ...(part.hydration ? [` hydration: true,`] : []),
600
- ` placeholder: (${sinkName}) => {`,
601
- emitNestedAppendStatements(part.placeholderParts, sinkName, compatRenderToStringHelperName),
602
- ` }${catchOption}${hydrationAwaitIdOption}${placeholderTagOption}`,
603
- ` });`,
604
- ].join("\n");
605
- }
606
- function emitReactSuspenseBoundary(part, sinkName, reactSuspenseBoundaryHelperName, compatRenderToStringHelperName) {
607
- return [
608
- ` await ${reactSuspenseBoundaryHelperName}(${sinkName}, async (${sinkName}) => {`,
609
- emitNestedAppendStatements(part.parts, sinkName, compatRenderToStringHelperName),
610
- ` });`,
611
- ].join("\n");
612
- }
613
- function emitReactSuspenseOutOfOrderBoundary(part, sinkName, reactSuspenseOutOfOrderBoundaryHelperName, compatRenderToStringHelperName) {
614
- const options = [
615
- ` fallback: (${sinkName}) => {`,
616
- emitNestedAppendStatements(part.fallbackParts, sinkName, compatRenderToStringHelperName),
617
- ` },`,
618
- ...(part.catchName === undefined || part.catchParts === undefined
619
- ? []
620
- : [
621
- ` catch: (${sinkName}, ${part.catchName}) => {`,
622
- emitNestedAppendStatements(part.catchParts, sinkName, compatRenderToStringHelperName),
623
- ` },`,
624
- ]),
625
- ...(part.nonce === undefined ? [] : [` nonce: ${stringLiteral(part.nonce)},`]),
626
- ...(part.scriptSrc === undefined ? [] : [` src: ${stringLiteral(part.scriptSrc)},`]),
627
- ];
628
- return [
629
- ` ${reactSuspenseOutOfOrderBoundaryHelperName}(${sinkName}, ${JSON.stringify(part.boundaryId)}, ${JSON.stringify(part.segmentId)}, (${part.valueCode}), async (${sinkName}, ${part.valueName}) => {`,
630
- emitNestedAppendStatements(part.parts, sinkName, compatRenderToStringHelperName),
631
- ` }, {`,
632
- ...options,
633
- ` });`,
634
- ].join("\n");
635
- }
636
596
  function emitNestedAppendStatements(parts, sinkName, compatRenderToStringHelperName) {
637
- return coalesceAdjacentStaticParts(parts)
597
+ return coalesceAdjacentStaticParts([...parts])
638
598
  .map((part) => emitSyncPartAsAppendStatement(part, sinkName, compatRenderToStringHelperName, " "))
639
599
  .join("\n");
640
600
  }
@@ -642,16 +602,36 @@ function emitNestedStreamAppendStatements(parts, sinkName, compatRenderToStringH
642
602
  return coalesceAdjacentStaticParts(parts)
643
603
  .map((part) => {
644
604
  if (part.kind === "async-boundary") {
645
- return emitAsyncBoundary(part, sinkName, currentAsyncBoundaryHelperName, compatRenderToStringHelperName).replace(/^/gm, " ");
605
+ return emitLoweredAsyncBoundary(part, {
606
+ asyncBoundaryHelperName: currentAsyncBoundaryHelperName,
607
+ compatRenderToStringHelperName,
608
+ emitNestedAppendStatements,
609
+ sinkName,
610
+ }).replace(/^/gm, " ");
646
611
  }
647
612
  if (part.kind === "out-of-order-boundary") {
648
- return emitOutOfOrderBoundary(part, sinkName, currentOutOfOrderBoundaryHelperName, compatRenderToStringHelperName).replace(/^/gm, " ");
613
+ return emitLoweredOutOfOrderBoundary(part, {
614
+ compatRenderToStringHelperName,
615
+ emitNestedAppendStatements,
616
+ outOfOrderBoundaryHelperName: currentOutOfOrderBoundaryHelperName,
617
+ sinkName,
618
+ }).replace(/^/gm, " ");
649
619
  }
650
620
  if (part.kind === "react-suspense-boundary") {
651
- return emitReactSuspenseBoundary(part, sinkName, currentReactSuspenseBoundaryHelperName, compatRenderToStringHelperName).replace(/^/gm, " ");
621
+ return emitLoweredReactSuspenseBoundary(part, {
622
+ compatRenderToStringHelperName,
623
+ emitNestedAppendStatements,
624
+ reactSuspenseBoundaryHelperName: currentReactSuspenseBoundaryHelperName,
625
+ sinkName,
626
+ }).replace(/^/gm, " ");
652
627
  }
653
628
  if (part.kind === "react-suspense-out-of-order-boundary") {
654
- return emitReactSuspenseOutOfOrderBoundary(part, sinkName, currentReactSuspenseOutOfOrderBoundaryHelperName, compatRenderToStringHelperName).replace(/^/gm, " ");
629
+ return emitLoweredReactSuspenseOutOfOrderBoundary(part, {
630
+ compatRenderToStringHelperName,
631
+ emitNestedAppendStatements,
632
+ reactSuspenseOutOfOrderBoundaryHelperName: currentReactSuspenseOutOfOrderBoundaryHelperName,
633
+ sinkName,
634
+ }).replace(/^/gm, " ");
655
635
  }
656
636
  return emitSyncPartAsAppendStatement(part, sinkName, compatRenderToStringHelperName, " ");
657
637
  })