@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.
- package/README.md +15 -0
- package/dist/boundary-graph.d.ts +66 -0
- package/dist/boundary-graph.d.ts.map +1 -0
- package/dist/boundary-graph.js +568 -0
- package/dist/boundary-graph.js.map +1 -0
- package/dist/emit-boundary-lowering.d.ts +43 -0
- package/dist/emit-boundary-lowering.d.ts.map +1 -0
- package/dist/emit-boundary-lowering.js +63 -0
- package/dist/emit-boundary-lowering.js.map +1 -0
- package/dist/emit-code-builder.d.ts +9 -0
- package/dist/emit-code-builder.d.ts.map +1 -0
- package/dist/emit-code-builder.js +17 -0
- package/dist/emit-code-builder.js.map +1 -0
- package/dist/emit-server-stream.d.ts.map +1 -1
- package/dist/emit-server-stream.js +64 -84
- package/dist/emit-server-stream.js.map +1 -1
- package/dist/emit-server.d.ts.map +1 -1
- package/dist/emit-server.js +12 -1
- package/dist/emit-server.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +14 -1
- package/dist/internal.js.map +1 -1
- package/dist/types.d.ts +16 -69
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/src/boundary-graph.ts +904 -0
- package/src/emit-boundary-lowering.ts +165 -0
- package/src/emit-code-builder.ts +27 -0
- package/src/emit-server-stream.ts +61 -152
- package/src/emit-server.ts +12 -1
- package/src/index.ts +16 -0
- package/src/internal.ts +25 -1
- 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":"AAwCA,MAAM,UAAU,iBAAiB,CAC/B,IAA6B,EAC7B,OAEC;IAED,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClE,YAAY,CAAC,IAAI,CACf,WAAW,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,WAAW,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,8BAA8B,CAAC,OAAO,CAC9K,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,YAAY,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAE9F,OAAO;QACL,WAAW,OAAO,CAAC,uBAAuB,IAAI,OAAO,CAAC,QAAQ,MAAM,IAAI,CAAC,SAAS,aAAa,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,QAAQ;QAC1I,OAAO,CAAC,0BAA0B,CAChC,IAAI,CAAC,KAAK,EACV,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,8BAA8B,CACvC;QACD,MAAM,iBAAiB,IAAI;KAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAkC,EAClC,OAEC;IAED,MAAM,WAAW,GACf,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;QAC3D,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,gBAAgB,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,WAAW,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,8BAA8B,CAAC,OAAO,CAAC;IAEzL,MAAM,sBAAsB,GAC1B,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7F,MAAM,oBAAoB,GACxB,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,IAAI,CAAC,kBAAkB,GAAG,CAAC;IAEnG,OAAO;QACL,KAAK,OAAO,CAAC,4BAA4B,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,SAAS,aAAa,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,QAAQ;QACrK,OAAO,CAAC,0BAA0B,CAChC,IAAI,CAAC,KAAK,EACV,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,8BAA8B,CACvC;QACD,QAAQ;QACR,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,mBAAmB,OAAO,CAAC,QAAQ,QAAQ;QAC3C,OAAO,CAAC,0BAA0B,CAChC,IAAI,CAAC,gBAAgB,EACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,8BAA8B,CACvC;QACD,MAAM,WAAW,GAAG,sBAAsB,GAAG,oBAAoB,EAAE;QACnE,OAAO;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,IAAqC,EACrC,OAEC;IAED,OAAO;QACL,WAAW,OAAO,CAAC,+BAA+B,IAAI,OAAO,CAAC,QAAQ,YAAY,OAAO,CAAC,QAAQ,QAAQ;QAC1G,OAAO,CAAC,0BAA0B,CAChC,IAAI,CAAC,KAAK,EACV,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,8BAA8B,CACvC;QACD,OAAO;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,IAA+C,EAC/C,OAEC;IAED,MAAM,OAAO,GAAG;QACd,gBAAgB,OAAO,CAAC,QAAQ,QAAQ;QACxC,OAAO,CAAC,0BAA0B,CAChC,IAAI,CAAC,aAAa,EAClB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,8BAA8B,CACvC;QACD,MAAM;QACN,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAC/D,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,aAAa,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,QAAQ;gBACxD,OAAO,CAAC,0BAA0B,CAChC,IAAI,CAAC,UAAU,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,8BAA8B,CACvC;gBACD,MAAM;aACP,CAAC;QACN,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChF,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KACvF,CAAC;IAEF,OAAO;QACL,KAAK,OAAO,CAAC,yCAAyC,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,SAAS,aAAa,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,QAAQ;QAC7N,OAAO,CAAC,0BAA0B,CAChC,IAAI,CAAC,KAAK,EACV,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,8BAA8B,CACvC;QACD,QAAQ;QACR,GAAG,OAAO;QACV,OAAO;KACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC","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;
|
|
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
|
-
:
|
|
109
|
+
: emitClientBoundaryHelper(clientBoundaryHelperName);
|
|
110
110
|
const spreadAttributesBlock = needsSpreadAttributesHelper
|
|
111
|
-
?
|
|
111
|
+
? emitSpreadAttributesHelper(spreadAttributesHelperName, escapeHelperName, urlSafeHelperName)
|
|
112
112
|
: "";
|
|
113
113
|
const streamNodeBlock = components.includes(streamNodeHelperName)
|
|
114
|
-
?
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
})
|