eclipsa 0.1.10 → 0.1.12
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/{action-DCc4fBhy.mjs → action-Uv02N2Rx.mjs} +322 -286
- package/action-Uv02N2Rx.mjs.map +1 -0
- package/{client--uq9YZzN.mjs → client-CnFXpfUF.mjs} +4 -4
- package/{client--uq9YZzN.mjs.map → client-CnFXpfUF.mjs.map} +1 -1
- package/core/client/mod.mjs +3 -3
- package/core/dev-client/mod.mjs +3 -3
- package/core/internal.d.mts +2 -2
- package/core/internal.mjs +2 -2
- package/core/prod-client/mod.mjs +4 -4
- package/{internal-1QlldZaD.d.mts → internal-BvDZTQLb.d.mts} +22 -2
- package/jsx/jsx-dev-runtime.mjs +1 -1
- package/jsx/mod.mjs +1 -1
- package/{jsx-dev-runtime-DpbWQ4Q0.mjs → jsx-dev-runtime-BZ-o1aUQ.mjs} +11 -6
- package/jsx-dev-runtime-BZ-o1aUQ.mjs.map +1 -0
- package/mod.d.mts +3 -3
- package/mod.mjs +4 -4
- package/package.json +2 -2
- package/{signal-DoW9q--8.mjs → signal-CiJrTMGa.mjs} +2 -2
- package/{signal-DoW9q--8.mjs.map → signal-CiJrTMGa.mjs.map} +1 -1
- package/{signal-CosyYdtA.d.mts → signal-MAa64fRK.d.mts} +2 -2
- package/{ssr-wXShLrdB.d.mts → ssr-CbRIgrJ1.d.mts} +2 -2
- package/{ssr-lXZqUHZs.mjs → ssr-CdcEyS-i.mjs} +4 -4
- package/{ssr-lXZqUHZs.mjs.map → ssr-CdcEyS-i.mjs.map} +1 -1
- package/vite/build/runtime.d.mts +2 -2
- package/vite/build/runtime.mjs +3 -3
- package/vite/mod.mjs +167 -125
- package/vite/mod.mjs.map +1 -1
- package/web-utils/mod.d.mts +1 -1
- package/web-utils/mod.mjs +2 -2
- package/action-DCc4fBhy.mjs.map +0 -1
- package/jsx-dev-runtime-DpbWQ4Q0.mjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { I as getStreamingResumeBootstrapScriptContent$1, M as getResumePayloadScriptContent, _ as beginSSRContainer, _t as createComponentBoundaryHtmlComment, at as toResumePayload, b as collectPendingSuspenseBoundaryIds, g as beginAsyncSSRContainer, mt as withRuntimeContainer, ot as toResumePayloadSubset } from "./action-Uv02N2Rx.mjs";
|
|
2
2
|
import { renderToString } from "./jsx/mod.mjs";
|
|
3
3
|
//#region core/ssr.ts
|
|
4
4
|
const collectRenderedComponentIdsFromHtml = (html) => {
|
|
@@ -47,7 +47,7 @@ const renderSSRAsync = async (render, options) => {
|
|
|
47
47
|
payload: toResumePayload(container)
|
|
48
48
|
};
|
|
49
49
|
} catch (error) {
|
|
50
|
-
const { isPendingSsrLoaderError, resolvePendingLoaders } = await import("./action-
|
|
50
|
+
const { isPendingSsrLoaderError, resolvePendingLoaders } = await import("./action-Uv02N2Rx.mjs").then((n) => n.fn);
|
|
51
51
|
if (!isPendingSsrLoaderError(error)) throw error;
|
|
52
52
|
if (!(options?.resolvePendingLoaders ? await options.resolvePendingLoaders(container) : options?.context ? await resolvePendingLoaders(container, options.context) : false)) throw error;
|
|
53
53
|
seededLoaderStates.clear();
|
|
@@ -95,7 +95,7 @@ const renderStreamingAttempt = async (render, options, seededLoaderStates, async
|
|
|
95
95
|
pendingBoundaryIds: collectPendingSuspenseBoundaryIds(container)
|
|
96
96
|
};
|
|
97
97
|
} catch (error) {
|
|
98
|
-
const { isPendingSsrLoaderError, resolvePendingLoaders } = await import("./action-
|
|
98
|
+
const { isPendingSsrLoaderError, resolvePendingLoaders } = await import("./action-Uv02N2Rx.mjs").then((n) => n.fn);
|
|
99
99
|
if (!isPendingSsrLoaderError(error)) throw error;
|
|
100
100
|
if (!(options.resolvePendingLoaders ? await options.resolvePendingLoaders(container) : options.context ? await resolvePendingLoaders(container, options.context) : false)) throw error;
|
|
101
101
|
seededLoaderStates.clear();
|
|
@@ -154,4 +154,4 @@ const getStreamingResumeBootstrapScriptContent = () => getStreamingResumeBootstr
|
|
|
154
154
|
//#endregion
|
|
155
155
|
export { serializeResumePayload as a, renderSSRStream as i, renderSSR as n, renderSSRAsync as r, getStreamingResumeBootstrapScriptContent as t };
|
|
156
156
|
|
|
157
|
-
//# sourceMappingURL=ssr-
|
|
157
|
+
//# sourceMappingURL=ssr-CdcEyS-i.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssr-lXZqUHZs.mjs","names":["getStreamingResumeBootstrapScriptContentFromRuntime"],"sources":["../core/ssr.ts"],"sourcesContent":["import type { Context } from 'hono'\nimport type { JSX } from '../jsx/types.ts'\nimport { renderToString } from '../jsx/mod.ts'\nimport { createComponentBoundaryHtmlComment } from './runtime/markers.ts'\nimport {\n beginAsyncSSRContainer,\n beginSSRContainer,\n collectPendingSuspenseBoundaryIds,\n getResumePayloadScriptContent,\n getStreamingResumeBootstrapScriptContent as getStreamingResumeBootstrapScriptContentFromRuntime,\n toResumePayload,\n toResumePayloadSubset,\n type ResumePayload,\n type RuntimeContainer,\n withRuntimeContainer,\n} from './runtime.ts'\n\nexport interface SSRRenderResult {\n html: string\n payload: ResumePayload\n}\n\nexport interface SSRStreamChunk {\n boundaryId: string\n html: string\n payload: ResumePayload\n}\n\nexport interface SSRStreamRenderResult extends SSRRenderResult {\n chunks: AsyncIterable<SSRStreamChunk>\n}\n\nconst collectRenderedComponentIdsFromHtml = (html: string) => {\n const ids = new Set<string>()\n const pattern = /<!--ec:c:([^:]+):start-->/g\n for (const match of html.matchAll(pattern)) {\n const id = match[1]\n if (id) {\n ids.add(id)\n }\n }\n return ids\n}\n\nconst createStreamingResumePayload = (\n container: RuntimeContainer,\n renderedComponentIds: Set<string>,\n): ResumePayload => toResumePayloadSubset(container, ['$root', ...renderedComponentIds])\n\nconst getPendingSuspensePromises = (container: RuntimeContainer) =>\n collectPendingSuspenseBoundaryIds(container)\n .map((boundaryId) => container.components.get(boundaryId)?.suspensePromise ?? null)\n .filter((promise): promise is Promise<unknown> => !!promise)\n\nexport const renderSSR = (\n render: () => JSX.Element | JSX.Element[],\n options?: {\n symbols?: Record<string, string>\n },\n): SSRRenderResult => {\n const { container, result } = beginSSRContainer(options?.symbols ?? {}, render)\n return {\n html: withRuntimeContainer(container, () => renderToString(result)),\n payload: toResumePayload(container),\n }\n}\n\nexport const renderSSRAsync = async (\n render: () => JSX.Element | JSX.Element[],\n options?: {\n context?: Context<any>\n prepare?: (container: RuntimeContainer) => void | Promise<void>\n resolvePendingLoaders?: (container: RuntimeContainer) => void | Promise<boolean>\n symbols?: Record<string, string>\n },\n): Promise<SSRRenderResult> => {\n const asyncSignalSnapshotCache = new Map<string, unknown>()\n const externalRenderCache = new Map<\n string,\n {\n error?: unknown\n html?: string\n pending?: Promise<string>\n status: 'pending' | 'rejected' | 'resolved'\n }\n >()\n const seededLoaderStates = new Map<string, { data: unknown; error: unknown; loaded: boolean }>()\n\n for (let attempt = 0; attempt < 10; attempt += 1) {\n const { container, result } = await beginAsyncSSRContainer(\n options?.symbols ?? {},\n render,\n async (runtimeContainer) => {\n for (const [id, snapshot] of seededLoaderStates) {\n runtimeContainer.loaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n await options?.prepare?.(runtimeContainer)\n },\n {\n asyncSignalSnapshotCache,\n externalRenderCache,\n },\n )\n\n try {\n const html = withRuntimeContainer(container, () => renderToString(result))\n const pendingSuspensePromises = getPendingSuspensePromises(container)\n if (container.pendingSuspensePromises.size > 0 || pendingSuspensePromises.length > 0) {\n await Promise.allSettled([...container.pendingSuspensePromises, ...pendingSuspensePromises])\n continue\n }\n asyncSignalSnapshotCache.clear()\n return {\n html,\n payload: toResumePayload(container),\n }\n } catch (error) {\n const { isPendingSsrLoaderError, resolvePendingLoaders } = await import('./loader.ts')\n if (!isPendingSsrLoaderError(error)) {\n throw error\n }\n const resolved = options?.resolvePendingLoaders\n ? await options.resolvePendingLoaders(container)\n : options?.context\n ? await resolvePendingLoaders(container, options.context)\n : false\n if (!resolved) {\n throw error\n }\n seededLoaderStates.clear()\n for (const [id, snapshot] of container.loaderStates) {\n seededLoaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n }\n }\n\n throw new Error('SSR loader resolution did not converge.')\n}\n\nconst extractBoundaryHtml = (html: string, boundaryId: string) => {\n const startToken = createComponentBoundaryHtmlComment(boundaryId, 'start')\n const endToken = createComponentBoundaryHtmlComment(boundaryId, 'end')\n const startIndex = html.indexOf(startToken)\n if (startIndex < 0) {\n return null\n }\n const endIndex = html.indexOf(endToken, startIndex + startToken.length)\n if (endIndex < 0) {\n return null\n }\n return html.slice(startIndex + startToken.length, endIndex)\n}\n\nconst renderStreamingAttempt = async (\n render: () => JSX.Element | JSX.Element[],\n options: {\n context?: Context<any>\n prepare?: (container: RuntimeContainer) => void | Promise<void>\n resolvePendingLoaders?: (container: RuntimeContainer) => void | Promise<boolean>\n symbols?: Record<string, string>\n },\n seededLoaderStates: Map<string, { data: unknown; error: unknown; loaded: boolean }>,\n asyncSignalSnapshotCache: Map<string, unknown>,\n externalRenderCache: Map<\n string,\n {\n error?: unknown\n html?: string\n pending?: Promise<string>\n status: 'pending' | 'rejected' | 'resolved'\n }\n >,\n): Promise<{\n container: RuntimeContainer\n html: string\n payload: ResumePayload\n pendingBoundaryIds: string[]\n}> => {\n for (let attempt = 0; attempt < 10; attempt += 1) {\n const { container, result } = await beginAsyncSSRContainer(\n options.symbols ?? {},\n render,\n async (runtimeContainer) => {\n for (const [id, snapshot] of seededLoaderStates) {\n runtimeContainer.loaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n await options.prepare?.(runtimeContainer)\n },\n {\n asyncSignalSnapshotCache,\n externalRenderCache,\n },\n )\n\n try {\n const html = withRuntimeContainer(container, () => renderToString(result))\n if (container.pendingSuspensePromises.size > 0) {\n await Promise.allSettled(container.pendingSuspensePromises)\n continue\n }\n const renderedComponentIds = collectRenderedComponentIdsFromHtml(html)\n return {\n container,\n html,\n payload: createStreamingResumePayload(container, renderedComponentIds),\n pendingBoundaryIds: collectPendingSuspenseBoundaryIds(container),\n }\n } catch (error) {\n const { isPendingSsrLoaderError, resolvePendingLoaders } = await import('./loader.ts')\n if (!isPendingSsrLoaderError(error)) {\n throw error\n }\n const resolved = options.resolvePendingLoaders\n ? await options.resolvePendingLoaders(container)\n : options.context\n ? await resolvePendingLoaders(container, options.context)\n : false\n if (!resolved) {\n throw error\n }\n seededLoaderStates.clear()\n for (const [id, snapshot] of container.loaderStates) {\n seededLoaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n }\n }\n\n throw new Error('SSR loader resolution did not converge.')\n}\n\nexport const renderSSRStream = async (\n render: () => JSX.Element | JSX.Element[],\n options?: {\n context?: Context<any>\n prepare?: (container: RuntimeContainer) => void | Promise<void>\n resolvePendingLoaders?: (container: RuntimeContainer) => void | Promise<boolean>\n symbols?: Record<string, string>\n },\n): Promise<SSRStreamRenderResult> => {\n const asyncSignalSnapshotCache = new Map<string, unknown>()\n const externalRenderCache = new Map<\n string,\n {\n error?: unknown\n html?: string\n pending?: Promise<string>\n status: 'pending' | 'rejected' | 'resolved'\n }\n >()\n const seededLoaderStates = new Map<string, { data: unknown; error: unknown; loaded: boolean }>()\n const initial = await renderStreamingAttempt(\n render,\n options ?? {},\n seededLoaderStates,\n asyncSignalSnapshotCache,\n externalRenderCache,\n )\n\n if (initial.pendingBoundaryIds.length === 0) {\n asyncSignalSnapshotCache.clear()\n return {\n chunks: (async function* () {})(),\n html: initial.html,\n payload: initial.payload,\n }\n }\n\n const chunks = (async function* () {\n let current = initial\n\n try {\n while (current.pendingBoundaryIds.length > 0) {\n await Promise.race(\n current.pendingBoundaryIds.map(\n (boundaryId) =>\n current.container.components.get(boundaryId)?.suspensePromise?.then(\n () => boundaryId,\n () => boundaryId,\n ) ?? Promise.resolve(boundaryId),\n ),\n )\n\n const next = await renderStreamingAttempt(\n render,\n options ?? {},\n seededLoaderStates,\n asyncSignalSnapshotCache,\n externalRenderCache,\n )\n\n const nextPending = new Set(next.pendingBoundaryIds)\n const completedIds = current.pendingBoundaryIds\n .filter((boundaryId) => !nextPending.has(boundaryId))\n .sort((left, right) => left.split('.').length - right.split('.').length)\n\n for (const boundaryId of completedIds) {\n const boundaryHtml = extractBoundaryHtml(next.html, boundaryId)\n if (boundaryHtml === null) {\n continue\n }\n yield {\n boundaryId,\n html: boundaryHtml,\n payload: next.payload,\n }\n }\n\n current = next\n }\n } finally {\n asyncSignalSnapshotCache.clear()\n }\n })()\n\n return {\n chunks,\n html: initial.html,\n payload: initial.payload,\n }\n}\n\nexport const serializeResumePayload = (payload: ResumePayload) =>\n getResumePayloadScriptContent(payload)\n\nexport const getStreamingResumeBootstrapScriptContent = () =>\n getStreamingResumeBootstrapScriptContentFromRuntime()\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ssr-CdcEyS-i.mjs","names":["getStreamingResumeBootstrapScriptContentFromRuntime"],"sources":["../core/ssr.ts"],"sourcesContent":["import type { Context } from 'hono'\nimport type { JSX } from '../jsx/types.ts'\nimport { renderToString } from '../jsx/mod.ts'\nimport { createComponentBoundaryHtmlComment } from './runtime/markers.ts'\nimport {\n beginAsyncSSRContainer,\n beginSSRContainer,\n collectPendingSuspenseBoundaryIds,\n getResumePayloadScriptContent,\n getStreamingResumeBootstrapScriptContent as getStreamingResumeBootstrapScriptContentFromRuntime,\n toResumePayload,\n toResumePayloadSubset,\n type ResumePayload,\n type RuntimeContainer,\n withRuntimeContainer,\n} from './runtime.ts'\n\nexport interface SSRRenderResult {\n html: string\n payload: ResumePayload\n}\n\nexport interface SSRStreamChunk {\n boundaryId: string\n html: string\n payload: ResumePayload\n}\n\nexport interface SSRStreamRenderResult extends SSRRenderResult {\n chunks: AsyncIterable<SSRStreamChunk>\n}\n\nconst collectRenderedComponentIdsFromHtml = (html: string) => {\n const ids = new Set<string>()\n const pattern = /<!--ec:c:([^:]+):start-->/g\n for (const match of html.matchAll(pattern)) {\n const id = match[1]\n if (id) {\n ids.add(id)\n }\n }\n return ids\n}\n\nconst createStreamingResumePayload = (\n container: RuntimeContainer,\n renderedComponentIds: Set<string>,\n): ResumePayload => toResumePayloadSubset(container, ['$root', ...renderedComponentIds])\n\nconst getPendingSuspensePromises = (container: RuntimeContainer) =>\n collectPendingSuspenseBoundaryIds(container)\n .map((boundaryId) => container.components.get(boundaryId)?.suspensePromise ?? null)\n .filter((promise): promise is Promise<unknown> => !!promise)\n\nexport const renderSSR = (\n render: () => JSX.Element | JSX.Element[],\n options?: {\n symbols?: Record<string, string>\n },\n): SSRRenderResult => {\n const { container, result } = beginSSRContainer(options?.symbols ?? {}, render)\n return {\n html: withRuntimeContainer(container, () => renderToString(result)),\n payload: toResumePayload(container),\n }\n}\n\nexport const renderSSRAsync = async (\n render: () => JSX.Element | JSX.Element[],\n options?: {\n context?: Context<any>\n prepare?: (container: RuntimeContainer) => void | Promise<void>\n resolvePendingLoaders?: (container: RuntimeContainer) => void | Promise<boolean>\n symbols?: Record<string, string>\n },\n): Promise<SSRRenderResult> => {\n const asyncSignalSnapshotCache = new Map<string, unknown>()\n const externalRenderCache = new Map<\n string,\n {\n error?: unknown\n html?: string\n pending?: Promise<string>\n status: 'pending' | 'rejected' | 'resolved'\n }\n >()\n const seededLoaderStates = new Map<string, { data: unknown; error: unknown; loaded: boolean }>()\n\n for (let attempt = 0; attempt < 10; attempt += 1) {\n const { container, result } = await beginAsyncSSRContainer(\n options?.symbols ?? {},\n render,\n async (runtimeContainer) => {\n for (const [id, snapshot] of seededLoaderStates) {\n runtimeContainer.loaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n await options?.prepare?.(runtimeContainer)\n },\n {\n asyncSignalSnapshotCache,\n externalRenderCache,\n },\n )\n\n try {\n const html = withRuntimeContainer(container, () => renderToString(result))\n const pendingSuspensePromises = getPendingSuspensePromises(container)\n if (container.pendingSuspensePromises.size > 0 || pendingSuspensePromises.length > 0) {\n await Promise.allSettled([...container.pendingSuspensePromises, ...pendingSuspensePromises])\n continue\n }\n asyncSignalSnapshotCache.clear()\n return {\n html,\n payload: toResumePayload(container),\n }\n } catch (error) {\n const { isPendingSsrLoaderError, resolvePendingLoaders } = await import('./loader.ts')\n if (!isPendingSsrLoaderError(error)) {\n throw error\n }\n const resolved = options?.resolvePendingLoaders\n ? await options.resolvePendingLoaders(container)\n : options?.context\n ? await resolvePendingLoaders(container, options.context)\n : false\n if (!resolved) {\n throw error\n }\n seededLoaderStates.clear()\n for (const [id, snapshot] of container.loaderStates) {\n seededLoaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n }\n }\n\n throw new Error('SSR loader resolution did not converge.')\n}\n\nconst extractBoundaryHtml = (html: string, boundaryId: string) => {\n const startToken = createComponentBoundaryHtmlComment(boundaryId, 'start')\n const endToken = createComponentBoundaryHtmlComment(boundaryId, 'end')\n const startIndex = html.indexOf(startToken)\n if (startIndex < 0) {\n return null\n }\n const endIndex = html.indexOf(endToken, startIndex + startToken.length)\n if (endIndex < 0) {\n return null\n }\n return html.slice(startIndex + startToken.length, endIndex)\n}\n\nconst renderStreamingAttempt = async (\n render: () => JSX.Element | JSX.Element[],\n options: {\n context?: Context<any>\n prepare?: (container: RuntimeContainer) => void | Promise<void>\n resolvePendingLoaders?: (container: RuntimeContainer) => void | Promise<boolean>\n symbols?: Record<string, string>\n },\n seededLoaderStates: Map<string, { data: unknown; error: unknown; loaded: boolean }>,\n asyncSignalSnapshotCache: Map<string, unknown>,\n externalRenderCache: Map<\n string,\n {\n error?: unknown\n html?: string\n pending?: Promise<string>\n status: 'pending' | 'rejected' | 'resolved'\n }\n >,\n): Promise<{\n container: RuntimeContainer\n html: string\n payload: ResumePayload\n pendingBoundaryIds: string[]\n}> => {\n for (let attempt = 0; attempt < 10; attempt += 1) {\n const { container, result } = await beginAsyncSSRContainer(\n options.symbols ?? {},\n render,\n async (runtimeContainer) => {\n for (const [id, snapshot] of seededLoaderStates) {\n runtimeContainer.loaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n await options.prepare?.(runtimeContainer)\n },\n {\n asyncSignalSnapshotCache,\n externalRenderCache,\n },\n )\n\n try {\n const html = withRuntimeContainer(container, () => renderToString(result))\n if (container.pendingSuspensePromises.size > 0) {\n await Promise.allSettled(container.pendingSuspensePromises)\n continue\n }\n const renderedComponentIds = collectRenderedComponentIdsFromHtml(html)\n return {\n container,\n html,\n payload: createStreamingResumePayload(container, renderedComponentIds),\n pendingBoundaryIds: collectPendingSuspenseBoundaryIds(container),\n }\n } catch (error) {\n const { isPendingSsrLoaderError, resolvePendingLoaders } = await import('./loader.ts')\n if (!isPendingSsrLoaderError(error)) {\n throw error\n }\n const resolved = options.resolvePendingLoaders\n ? await options.resolvePendingLoaders(container)\n : options.context\n ? await resolvePendingLoaders(container, options.context)\n : false\n if (!resolved) {\n throw error\n }\n seededLoaderStates.clear()\n for (const [id, snapshot] of container.loaderStates) {\n seededLoaderStates.set(id, {\n data: snapshot.data,\n error: snapshot.error,\n loaded: snapshot.loaded,\n })\n }\n }\n }\n\n throw new Error('SSR loader resolution did not converge.')\n}\n\nexport const renderSSRStream = async (\n render: () => JSX.Element | JSX.Element[],\n options?: {\n context?: Context<any>\n prepare?: (container: RuntimeContainer) => void | Promise<void>\n resolvePendingLoaders?: (container: RuntimeContainer) => void | Promise<boolean>\n symbols?: Record<string, string>\n },\n): Promise<SSRStreamRenderResult> => {\n const asyncSignalSnapshotCache = new Map<string, unknown>()\n const externalRenderCache = new Map<\n string,\n {\n error?: unknown\n html?: string\n pending?: Promise<string>\n status: 'pending' | 'rejected' | 'resolved'\n }\n >()\n const seededLoaderStates = new Map<string, { data: unknown; error: unknown; loaded: boolean }>()\n const initial = await renderStreamingAttempt(\n render,\n options ?? {},\n seededLoaderStates,\n asyncSignalSnapshotCache,\n externalRenderCache,\n )\n\n if (initial.pendingBoundaryIds.length === 0) {\n asyncSignalSnapshotCache.clear()\n return {\n chunks: (async function* () {})(),\n html: initial.html,\n payload: initial.payload,\n }\n }\n\n const chunks = (async function* () {\n let current = initial\n\n try {\n while (current.pendingBoundaryIds.length > 0) {\n await Promise.race(\n current.pendingBoundaryIds.map(\n (boundaryId) =>\n current.container.components.get(boundaryId)?.suspensePromise?.then(\n () => boundaryId,\n () => boundaryId,\n ) ?? Promise.resolve(boundaryId),\n ),\n )\n\n const next = await renderStreamingAttempt(\n render,\n options ?? {},\n seededLoaderStates,\n asyncSignalSnapshotCache,\n externalRenderCache,\n )\n\n const nextPending = new Set(next.pendingBoundaryIds)\n const completedIds = current.pendingBoundaryIds\n .filter((boundaryId) => !nextPending.has(boundaryId))\n .sort((left, right) => left.split('.').length - right.split('.').length)\n\n for (const boundaryId of completedIds) {\n const boundaryHtml = extractBoundaryHtml(next.html, boundaryId)\n if (boundaryHtml === null) {\n continue\n }\n yield {\n boundaryId,\n html: boundaryHtml,\n payload: next.payload,\n }\n }\n\n current = next\n }\n } finally {\n asyncSignalSnapshotCache.clear()\n }\n })()\n\n return {\n chunks,\n html: initial.html,\n payload: initial.payload,\n }\n}\n\nexport const serializeResumePayload = (payload: ResumePayload) =>\n getResumePayloadScriptContent(payload)\n\nexport const getStreamingResumeBootstrapScriptContent = () =>\n getStreamingResumeBootstrapScriptContentFromRuntime()\n"],"mappings":"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"}
|
package/vite/build/runtime.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { $
|
|
1
|
+
import { $n as escapeInlineScriptText, An as attachRequestFetch, At as getActionFormSubmissionId, Bn as serializePublicValue, Bt as primeLocationState, Cn as Reroute, Dn as Transport, Fn as markPublicError, In as registerClientHooks, Mn as deserializePublicValue, Mt as hasAction, Nt as primeActionState, Ot as executeAction, Qn as deserializeValue, Rn as resolveReroute, Sn as RequestFetch, Tn as ServerHooksModule, Un as withServerRequestContext, Vn as toPublicError, Yt as RESUME_FINAL_STATE_ELEMENT_ID, _n as HandleFetch, an as renderRouteMetadataHead, at as primeLoaderState, bn as PublicError, cn as AppContext, ct as ACTION_CONTENT_TYPE, dn as AppHooksModule, er as escapeJSONScriptText, et as executeLoader, hn as HandleError, in as composeRouteMetadata, jn as createRequestFetch, jt as getNormalizedActionInput, kn as WithAppEnv, mn as Handle, pn as BaseAppVariables, sn as APP_HOOKS_ELEMENT_ID, st as resolvePendingLoaders, tt as hasLoader, un as AppHooksManifest, wn as ResolvedHooks, zn as runHandleError } from "../../internal-BvDZTQLb.mjs";
|
|
2
2
|
import { Fragment, jsxDEV } from "../../jsx/jsx-dev-runtime.mjs";
|
|
3
|
-
import { a as renderSSR, c as serializeResumePayload, i as getStreamingResumeBootstrapScriptContent, o as renderSSRAsync, s as renderSSRStream } from "../../ssr-
|
|
3
|
+
import { a as renderSSR, c as serializeResumePayload, i as getStreamingResumeBootstrapScriptContent, o as renderSSRAsync, s as renderSSRStream } from "../../ssr-CbRIgrJ1.mjs";
|
|
4
4
|
|
|
5
5
|
//#region core/action-csrf.d.ts
|
|
6
6
|
declare const ensureActionCsrfToken: (c: AppContext<any>) => string;
|
package/vite/build/runtime.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as jsxDEV, t as Fragment } from "../../jsx-dev-runtime-
|
|
3
|
-
import { a as serializeResumePayload, i as renderSSRStream, n as renderSSR, r as renderSSRAsync, t as getStreamingResumeBootstrapScriptContent } from "../../ssr-
|
|
1
|
+
import { B as primeLocationState, Dn as composeRouteMetadata, Gn as APP_HOOKS_ELEMENT_ID, Hn as applyActionCsrfCookie, Jn as deserializePublicValue, Kn as attachRequestFetch, On as renderRouteMetadataHead, Qn as registerClientHooks, Un as ensureActionCsrfToken, Zn as markPublicError, ar as withServerRequestContext, c as getActionFormSubmissionId, cn as executeLoader, cr as escapeJSONScriptText, d as primeActionState, er as resolveReroute, gn as resolvePendingLoaders, in as RESUME_FINAL_STATE_ELEMENT_ID, l as getNormalizedActionInput, ln as hasLoader, mn as primeLoaderState, nr as serializePublicValue, o as executeAction, or as deserializeValue, qn as createRequestFetch, rr as toPublicError, sr as escapeInlineScriptText, t as ACTION_CONTENT_TYPE, tr as runHandleError, u as hasAction } from "../../action-Uv02N2Rx.mjs";
|
|
2
|
+
import { a as jsxDEV, t as Fragment } from "../../jsx-dev-runtime-BZ-o1aUQ.mjs";
|
|
3
|
+
import { a as serializeResumePayload, i as renderSSRStream, n as renderSSR, r as renderSSRAsync, t as getStreamingResumeBootstrapScriptContent } from "../../ssr-CdcEyS-i.mjs";
|
|
4
4
|
export { ACTION_CONTENT_TYPE, APP_HOOKS_ELEMENT_ID, Fragment, RESUME_FINAL_STATE_ELEMENT_ID, applyActionCsrfCookie, attachRequestFetch, composeRouteMetadata, createRequestFetch, deserializePublicValue, deserializeValue, ensureActionCsrfToken, escapeInlineScriptText, escapeJSONScriptText, executeAction, executeLoader, getActionFormSubmissionId, getNormalizedActionInput, getStreamingResumeBootstrapScriptContent, hasAction, hasLoader, jsxDEV, markPublicError, primeActionState, primeLoaderState, primeLocationState, registerClientHooks, renderRouteMetadataHead, renderSSR, renderSSRAsync, renderSSRStream, resolvePendingLoaders, resolveReroute, runHandleError, serializePublicValue, serializeResumePayload, toPublicError, withServerRequestContext };
|
package/vite/mod.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as jsxDEV, t as Fragment } from "../jsx-dev-runtime-
|
|
1
|
+
import { B as primeLocationState, Cn as ROUTE_PREFLIGHT_REQUEST_HEADER, Dn as composeRouteMetadata, Gn as APP_HOOKS_ELEMENT_ID, Hn as applyActionCsrfCookie, Kn as attachRequestFetch, On as renderRouteMetadataHead, Sn as ROUTE_PREFLIGHT_ENDPOINT, Tn as ROUTE_RPC_URL_HEADER, Un as ensureActionCsrfToken, Zn as markPublicError, _n as ROUTE_DATA_ENDPOINT, ar as withServerRequestContext, bn as ROUTE_MANIFEST_ELEMENT_ID, er as resolveReroute, qn as createRequestFetch, tr as runHandleError, vn as ROUTE_DATA_REQUEST_HEADER } from "../action-Uv02N2Rx.mjs";
|
|
2
|
+
import { a as jsxDEV, t as Fragment } from "../jsx-dev-runtime-BZ-o1aUQ.mjs";
|
|
3
3
|
import { t as RESUME_HMR_EVENT } from "../resume-hmr-qTpLc5o-.mjs";
|
|
4
4
|
import { createServerModuleRunner, transformWithOxc } from "vite";
|
|
5
5
|
import { Hono } from "hono";
|
|
@@ -7,6 +7,7 @@ import * as fs from "node:fs/promises";
|
|
|
7
7
|
import fg from "fast-glob";
|
|
8
8
|
import * as path$1 from "node:path";
|
|
9
9
|
import path from "node:path";
|
|
10
|
+
import { Buffer as Buffer$1 } from "node:buffer";
|
|
10
11
|
import ts from "typescript";
|
|
11
12
|
import { runRustAnalyzeCompiler, runRustCompiler } from "@eclipsa/optimizer";
|
|
12
13
|
import { cwd } from "node:process";
|
|
@@ -447,6 +448,7 @@ const compileSSRModule = async (code, id) => {
|
|
|
447
448
|
//#region vite/compiler.ts
|
|
448
449
|
const SYMBOL_QUERY = "eclipsa-symbol";
|
|
449
450
|
const SYMBOL_LANG_QUERY = "lang.js";
|
|
451
|
+
const SIMPLE_BUILD_SYMBOL_PATTERN = /^[A-Za-z0-9_-]+$/;
|
|
450
452
|
const cache = /* @__PURE__ */ new Map();
|
|
451
453
|
const servedSources = /* @__PURE__ */ new Map();
|
|
452
454
|
const primeCompilerCache = async (filePath, source) => {
|
|
@@ -722,7 +724,8 @@ const loadSymbolModuleForSSR = async (id) => {
|
|
|
722
724
|
return compileSSRModule(symbol.code, `${parsed.filePath}?${SYMBOL_QUERY}=${parsed.symbolId}`);
|
|
723
725
|
};
|
|
724
726
|
const createDevSymbolUrl = (root, filePath, symbolId) => createSymbolRequestId(createDevSourceUrl(root, filePath), symbolId);
|
|
725
|
-
const
|
|
727
|
+
const createBuildSymbolEntryName = (symbolId) => SIMPLE_BUILD_SYMBOL_PATTERN.test(symbolId) ? `symbol__${symbolId}` : `symbol__b64_${Buffer$1.from(symbolId).toString("base64url")}`;
|
|
728
|
+
const createBuildSymbolUrl = (symbolId) => `/entries/${createBuildSymbolEntryName(symbolId)}.js`;
|
|
726
729
|
const createBuildServerActionUrl = (actionId) => `../ssr/entries/action__${actionId}.mjs`;
|
|
727
730
|
const createBuildServerLoaderUrl = (loaderId) => `../ssr/entries/loader__${loaderId}.mjs`;
|
|
728
731
|
const ANALYZABLE_SOURCE_EXTENSIONS = new Set([
|
|
@@ -2799,24 +2802,33 @@ const resolveRoutePreflight = async (href, c) => {
|
|
|
2799
2802
|
};
|
|
2800
2803
|
|
|
2801
2804
|
for (const pageRouteEntry of pageRouteEntries) {
|
|
2802
|
-
app.get(pageRouteEntry.path, async (c) =>
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
|
|
2816
|
-
|
|
2817
|
-
|
|
2818
|
-
|
|
2819
|
-
|
|
2805
|
+
app.get(pageRouteEntry.path, async (c) =>
|
|
2806
|
+
resolveRequest(c, async (requestContext) => {
|
|
2807
|
+
const pathname = normalizeRoutePath(getRequestUrl(requestContext.req.raw).pathname);
|
|
2808
|
+
const match = matchRoute(pathname);
|
|
2809
|
+
if (!match || match.route !== routes[pageRouteEntry.routeIndex]) {
|
|
2810
|
+
return requestContext.text("Not Found", 404);
|
|
2811
|
+
}
|
|
2812
|
+
return composeRouteMiddlewares(
|
|
2813
|
+
match.route,
|
|
2814
|
+
requestContext,
|
|
2815
|
+
match.params,
|
|
2816
|
+
async () =>
|
|
2817
|
+
requestContext.req.header(ROUTE_PREFLIGHT_REQUEST_HEADER) === "1"
|
|
2818
|
+
? requestContext.body(null, 204)
|
|
2819
|
+
: requestContext.req.header(ROUTE_DATA_REQUEST_HEADER) === "1"
|
|
2820
|
+
? renderRouteData(
|
|
2821
|
+
match.route,
|
|
2822
|
+
pathname,
|
|
2823
|
+
match.params,
|
|
2824
|
+
requestContext,
|
|
2825
|
+
match.route.page,
|
|
2826
|
+
"page",
|
|
2827
|
+
)
|
|
2828
|
+
: renderMatchedPage(match, requestContext),
|
|
2829
|
+
);
|
|
2830
|
+
}),
|
|
2831
|
+
);
|
|
2820
2832
|
}
|
|
2821
2833
|
|
|
2822
2834
|
app.post("/__eclipsa/action/:id", async (c) =>
|
|
@@ -2879,117 +2891,147 @@ app.get("/__eclipsa/loader/:id", async (c) =>
|
|
|
2879
2891
|
}),
|
|
2880
2892
|
);
|
|
2881
2893
|
|
|
2882
|
-
app.get(${JSON.stringify(ROUTE_PREFLIGHT_ENDPOINT)}, async (c) =>
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2894
|
+
app.get(${JSON.stringify(ROUTE_PREFLIGHT_ENDPOINT)}, async (c) =>
|
|
2895
|
+
resolveRequest(c, async (requestContext) => {
|
|
2896
|
+
const href = requestContext.req.query("href");
|
|
2897
|
+
if (!href) {
|
|
2898
|
+
return requestContext.json({ document: true, ok: false }, 400);
|
|
2899
|
+
}
|
|
2900
|
+
return resolveRoutePreflight(href, requestContext);
|
|
2901
|
+
}),
|
|
2902
|
+
);
|
|
2889
2903
|
|
|
2890
|
-
app.get(${JSON.stringify(ROUTE_DATA_ENDPOINT)}, async (c) =>
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2904
|
+
app.get(${JSON.stringify(ROUTE_DATA_ENDPOINT)}, async (c) =>
|
|
2905
|
+
resolveRequest(c, async (requestContext) => {
|
|
2906
|
+
const href = requestContext.req.query("href");
|
|
2907
|
+
if (!href) {
|
|
2908
|
+
return requestContext.json({ document: true, ok: false }, 400);
|
|
2909
|
+
}
|
|
2910
|
+
return resolveRouteData(href, requestContext);
|
|
2911
|
+
}),
|
|
2912
|
+
);
|
|
2897
2913
|
|
|
2898
|
-
app.all("*", async (c) =>
|
|
2899
|
-
|
|
2900
|
-
|
|
2914
|
+
app.all("*", async (c) =>
|
|
2915
|
+
resolveRequest(c, async (requestContext) => {
|
|
2916
|
+
const pathname = normalizeRoutePath(getRequestUrl(requestContext.req.raw).pathname);
|
|
2917
|
+
const match = matchRoute(pathname);
|
|
2901
2918
|
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2919
|
+
if (!match) {
|
|
2920
|
+
const fallback = findSpecialRoute(pathname, "notFound");
|
|
2921
|
+
if (fallback?.route?.notFound) {
|
|
2922
|
+
return composeRouteMiddlewares(
|
|
2923
|
+
fallback.route,
|
|
2924
|
+
requestContext,
|
|
2925
|
+
fallback.params,
|
|
2926
|
+
async () =>
|
|
2927
|
+
requestContext.req.header(ROUTE_PREFLIGHT_REQUEST_HEADER) === "1"
|
|
2928
|
+
? requestContext.body(null, 204)
|
|
2929
|
+
: requestContext.req.header(ROUTE_DATA_REQUEST_HEADER) === "1"
|
|
2930
|
+
? renderRouteData(
|
|
2931
|
+
fallback.route,
|
|
2932
|
+
pathname,
|
|
2933
|
+
fallback.params,
|
|
2934
|
+
requestContext,
|
|
2935
|
+
fallback.route.notFound,
|
|
2936
|
+
"not-found",
|
|
2937
|
+
)
|
|
2938
|
+
: renderRouteResponse(
|
|
2939
|
+
fallback.route,
|
|
2940
|
+
pathname,
|
|
2941
|
+
fallback.params,
|
|
2942
|
+
requestContext,
|
|
2943
|
+
fallback.route.notFound,
|
|
2944
|
+
404,
|
|
2945
|
+
),
|
|
2946
|
+
);
|
|
2947
|
+
}
|
|
2948
|
+
return requestContext.text("Not Found", 404);
|
|
2949
|
+
}
|
|
2950
|
+
|
|
2951
|
+
if (
|
|
2952
|
+
(requestContext.req.method === "GET" || requestContext.req.method === "HEAD") &&
|
|
2953
|
+
match.route.page
|
|
2954
|
+
) {
|
|
2905
2955
|
return composeRouteMiddlewares(
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
|
|
2956
|
+
match.route,
|
|
2957
|
+
requestContext,
|
|
2958
|
+
match.params,
|
|
2909
2959
|
async () =>
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
? renderRouteData(
|
|
2914
|
-
|
|
2960
|
+
requestContext.req.header(ROUTE_PREFLIGHT_REQUEST_HEADER) === "1"
|
|
2961
|
+
? requestContext.body(null, 204)
|
|
2962
|
+
: requestContext.req.header(ROUTE_DATA_REQUEST_HEADER) === "1"
|
|
2963
|
+
? renderRouteData(
|
|
2964
|
+
match.route,
|
|
2965
|
+
pathname,
|
|
2966
|
+
match.params,
|
|
2967
|
+
requestContext,
|
|
2968
|
+
match.route.page,
|
|
2969
|
+
"page",
|
|
2970
|
+
)
|
|
2971
|
+
: renderMatchedPage(match, requestContext),
|
|
2915
2972
|
);
|
|
2916
2973
|
}
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
2922
|
-
|
|
2923
|
-
|
|
2924
|
-
|
|
2974
|
+
if (requestContext.req.method === "POST" && match.route.page) {
|
|
2975
|
+
return composeRouteMiddlewares(
|
|
2976
|
+
match.route,
|
|
2977
|
+
requestContext,
|
|
2978
|
+
match.params,
|
|
2979
|
+
async () => {
|
|
2980
|
+
const actionId = await getActionFormSubmissionId(requestContext);
|
|
2981
|
+
if (!actionId) {
|
|
2982
|
+
return match.route.server
|
|
2983
|
+
? invokeRouteServer(match.route.server, requestContext, match.params)
|
|
2984
|
+
: renderMatchedPage(match, requestContext);
|
|
2985
|
+
}
|
|
2986
|
+
const routeAccess = getRouteServerAccess(match.route);
|
|
2987
|
+
if (!routeAccess.actionIds.includes(actionId)) {
|
|
2988
|
+
return requestContext.text("Not Found", 404);
|
|
2989
|
+
}
|
|
2990
|
+
const moduleUrl = actions[actionId];
|
|
2991
|
+
if (!moduleUrl) {
|
|
2992
|
+
return requestContext.text("Not Found", 404);
|
|
2993
|
+
}
|
|
2994
|
+
if (!hasAction(actionId)) {
|
|
2995
|
+
await import(moduleUrl);
|
|
2996
|
+
}
|
|
2997
|
+
const input = await getNormalizedActionInput(requestContext);
|
|
2998
|
+
const response = await executeAction(actionId, requestContext);
|
|
2999
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
3000
|
+
if (!contentType.startsWith(ACTION_CONTENT_TYPE)) {
|
|
3001
|
+
return response;
|
|
3002
|
+
}
|
|
3003
|
+
const body = await response.json();
|
|
3004
|
+
return renderMatchedPage(match, requestContext, {
|
|
3005
|
+
prepare(container) {
|
|
3006
|
+
primeActionState(container, actionId, {
|
|
3007
|
+
error: body.ok ? undefined : deserializeValue(body.error),
|
|
3008
|
+
input,
|
|
3009
|
+
result: body.ok ? deserializeValue(body.value) : undefined,
|
|
3010
|
+
});
|
|
3011
|
+
},
|
|
3012
|
+
});
|
|
3013
|
+
},
|
|
3014
|
+
);
|
|
3015
|
+
}
|
|
3016
|
+
if (match.route.server) {
|
|
3017
|
+
return composeRouteMiddlewares(match.route, requestContext, match.params, async () =>
|
|
3018
|
+
invokeRouteServer(match.route.server, requestContext, match.params),
|
|
3019
|
+
);
|
|
3020
|
+
}
|
|
3021
|
+
if (match.route.page) {
|
|
3022
|
+
return composeRouteMiddlewares(
|
|
3023
|
+
match.route,
|
|
3024
|
+
requestContext,
|
|
3025
|
+
match.params,
|
|
2925
3026
|
async () =>
|
|
2926
|
-
|
|
2927
|
-
?
|
|
2928
|
-
:
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
);
|
|
2932
|
-
}
|
|
2933
|
-
|
|
2934
|
-
return composeRouteMiddlewares(
|
|
2935
|
-
match.route,
|
|
2936
|
-
c,
|
|
2937
|
-
match.params,
|
|
2938
|
-
async () => {
|
|
2939
|
-
const actionId = await getActionFormSubmissionId(c);
|
|
2940
|
-
if (!actionId) {
|
|
2941
|
-
return match.route.server
|
|
2942
|
-
? invokeRouteServer(match.route.server, c, match.params)
|
|
2943
|
-
: renderMatchedPage(match, c);
|
|
2944
|
-
}
|
|
2945
|
-
const routeAccess = getRouteServerAccess(match.route);
|
|
2946
|
-
if (!routeAccess.actionIds.includes(actionId)) {
|
|
2947
|
-
return c.text("Not Found", 404);
|
|
2948
|
-
}
|
|
2949
|
-
const moduleUrl = actions[actionId];
|
|
2950
|
-
if (!moduleUrl) {
|
|
2951
|
-
return c.text("Not Found", 404);
|
|
2952
|
-
}
|
|
2953
|
-
if (!hasAction(actionId)) {
|
|
2954
|
-
await import(moduleUrl);
|
|
2955
|
-
}
|
|
2956
|
-
const input = await getNormalizedActionInput(c);
|
|
2957
|
-
const response = await executeAction(actionId, c);
|
|
2958
|
-
const contentType = response.headers.get("content-type") ?? "";
|
|
2959
|
-
if (!contentType.startsWith(ACTION_CONTENT_TYPE)) {
|
|
2960
|
-
return response;
|
|
2961
|
-
}
|
|
2962
|
-
const body = await response.json();
|
|
2963
|
-
return renderMatchedPage(match, c, {
|
|
2964
|
-
prepare(container) {
|
|
2965
|
-
primeActionState(container, actionId, {
|
|
2966
|
-
error: body.ok ? undefined : deserializeValue(body.error),
|
|
2967
|
-
input,
|
|
2968
|
-
result: body.ok ? deserializeValue(body.value) : undefined,
|
|
2969
|
-
});
|
|
2970
|
-
},
|
|
2971
|
-
});
|
|
2972
|
-
},
|
|
2973
|
-
);
|
|
2974
|
-
}
|
|
2975
|
-
if (match.route.server) {
|
|
2976
|
-
return composeRouteMiddlewares(match.route, c, match.params, async () =>
|
|
2977
|
-
invokeRouteServer(match.route.server, c, match.params),
|
|
2978
|
-
);
|
|
2979
|
-
}
|
|
2980
|
-
if (match.route.page) {
|
|
2981
|
-
return composeRouteMiddlewares(
|
|
2982
|
-
match.route,
|
|
2983
|
-
c,
|
|
2984
|
-
match.params,
|
|
2985
|
-
async () =>
|
|
2986
|
-
c.req.header(ROUTE_PREFLIGHT_REQUEST_HEADER) === "1"
|
|
2987
|
-
? c.body(null, 204)
|
|
2988
|
-
: renderMatchedPage(match, c),
|
|
2989
|
-
);
|
|
2990
|
-
}
|
|
2991
|
-
return c.text("Not Found", 404);
|
|
2992
|
-
});
|
|
3027
|
+
requestContext.req.header(ROUTE_PREFLIGHT_REQUEST_HEADER) === "1"
|
|
3028
|
+
? requestContext.body(null, 204)
|
|
3029
|
+
: renderMatchedPage(match, requestContext),
|
|
3030
|
+
);
|
|
3031
|
+
}
|
|
3032
|
+
return requestContext.text("Not Found", 404);
|
|
3033
|
+
}),
|
|
3034
|
+
);
|
|
2993
3035
|
|
|
2994
3036
|
export const pageRoutePatterns = [...new Set(pageRouteEntries.map((entry) => entry.path))];
|
|
2995
3037
|
export default app;
|
|
@@ -3230,7 +3272,7 @@ const createConfig = (options) => async (userConfig) => {
|
|
|
3230
3272
|
const clientInput = Object.fromEntries([
|
|
3231
3273
|
["client_boot", path.join(root, "app/+client.dev.tsx")],
|
|
3232
3274
|
...hasAppHooks ? [["app_hooks", appHooksPath]] : [],
|
|
3233
|
-
...symbols.map((symbol) => [
|
|
3275
|
+
...symbols.map((symbol) => [createBuildSymbolEntryName(symbol.id), createSymbolRequestId(symbol.filePath, symbol.id)]),
|
|
3234
3276
|
...routeModules.map((entry) => [entry.entryName, entry.filePath])
|
|
3235
3277
|
]);
|
|
3236
3278
|
const ssrInput = Object.fromEntries([
|