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.
@@ -1,4 +1,4 @@
1
- import { N as getStreamingResumeBootstrapScriptContent$1, _ as beginSSRContainer, b as collectPendingSuspenseBoundaryIds, g as beginAsyncSSRContainer, k as getResumePayloadScriptContent, nt as toResumePayloadSubset, pt as createComponentBoundaryHtmlComment, tt as toResumePayload, ut as withRuntimeContainer } from "./action-DCc4fBhy.mjs";
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-DCc4fBhy.mjs").then((n) => n.an);
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-DCc4fBhy.mjs").then((n) => n.an);
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-lXZqUHZs.mjs.map
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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"}
@@ -1,6 +1,6 @@
1
- import { $t as APP_HOOKS_ELEMENT_ID, An as resolveReroute, At as primeActionState, Cn as createRequestFetch, Dn as markPublicError, Dt as getActionFormSubmissionId, Fn as withServerRequestContext, Gn as escapeInlineScriptText, Kn as escapeJSONScriptText, Mn as serializePublicValue, Nn as toPublicError, On as registerClientHooks, Ot as getNormalizedActionInput, Pt as primeLocationState, Q as hasLoader, Sn as attachRequestFetch, Tt as executeAction, Vt as RESUME_FINAL_STATE_ELEMENT_ID, Wn as deserializeValue, Xt as composeRouteMetadata, Z as executeLoader, Zt as renderRouteMetadataHead, _n as ServerHooksModule, an as BaseAppVariables, at as ACTION_CONTENT_TYPE, en as AppContext, fn as PublicError, gn as ResolvedHooks, hn as Reroute, it as resolvePendingLoaders, jn as runHandleError, kt as hasAction, ln as HandleFetch, mn as RequestFetch, nn as AppHooksManifest, nt as primeLoaderState, on as Handle, rn as AppHooksModule, sn as HandleError, wn as deserializePublicValue, xn as WithAppEnv, yn as Transport } from "../../internal-1QlldZaD.mjs";
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-wXShLrdB.mjs";
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;
@@ -1,4 +1,4 @@
1
- import { $n as deserializeValue, Bn as createRequestFetch, Ct as RESUME_FINAL_STATE_ELEMENT_ID, Fn as applyActionCsrfCookie, Gn as registerClientHooks, In as ensureActionCsrfToken, Jn as runHandleError, L as primeLocationState, Qn as withServerRequestContext, Rn as APP_HOOKS_ELEMENT_ID, Vn as deserializePublicValue, Wn as markPublicError, Xn as toPublicError, Yn as serializePublicValue, bn as composeRouteMetadata, c as getActionFormSubmissionId, d as primeActionState, er as escapeInlineScriptText, l as getNormalizedActionInput, ln as resolvePendingLoaders, nn as hasLoader, o as executeAction, qn as resolveReroute, sn as primeLoaderState, t as ACTION_CONTENT_TYPE, tn as executeLoader, tr as escapeJSONScriptText, u as hasAction, xn as renderRouteMetadataHead, zn as attachRequestFetch } from "../../action-DCc4fBhy.mjs";
2
- import { a as jsxDEV, t as Fragment } from "../../jsx-dev-runtime-DpbWQ4Q0.mjs";
3
- import { a as serializeResumePayload, i as renderSSRStream, n as renderSSR, r as renderSSRAsync, t as getStreamingResumeBootstrapScriptContent } from "../../ssr-lXZqUHZs.mjs";
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 { Bn as createRequestFetch, Fn as applyActionCsrfCookie, In as ensureActionCsrfToken, Jn as runHandleError, L as primeLocationState, Qn as withServerRequestContext, Rn as APP_HOOKS_ELEMENT_ID, Wn as markPublicError, bn as composeRouteMetadata, dn as ROUTE_DATA_REQUEST_HEADER, gn as ROUTE_PREFLIGHT_REQUEST_HEADER, hn as ROUTE_PREFLIGHT_ENDPOINT, pn as ROUTE_MANIFEST_ELEMENT_ID, qn as resolveReroute, un as ROUTE_DATA_ENDPOINT, vn as ROUTE_RPC_URL_HEADER, xn as renderRouteMetadataHead, zn as attachRequestFetch } from "../action-DCc4fBhy.mjs";
2
- import { a as jsxDEV, t as Fragment } from "../jsx-dev-runtime-DpbWQ4Q0.mjs";
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 createBuildSymbolUrl = (symbolId) => `/entries/symbol__${symbolId}.js`;
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
- const pathname = normalizeRoutePath(getRequestUrl(c.req.raw).pathname);
2804
- const match = matchRoute(pathname);
2805
- if (!match || match.route !== routes[pageRouteEntry.routeIndex]) {
2806
- return c.text("Not Found", 404);
2807
- }
2808
- return composeRouteMiddlewares(
2809
- match.route,
2810
- c,
2811
- match.params,
2812
- async () =>
2813
- c.req.header(ROUTE_PREFLIGHT_REQUEST_HEADER) === "1"
2814
- ? c.body(null, 204)
2815
- : c.req.header(ROUTE_DATA_REQUEST_HEADER) === "1"
2816
- ? renderRouteData(match.route, pathname, match.params, c, match.route.page, "page")
2817
- : renderMatchedPage(match, c),
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
- const href = c.req.query("href");
2884
- if (!href) {
2885
- return c.json({ document: true, ok: false }, 400);
2886
- }
2887
- return resolveRoutePreflight(href, c);
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
- const href = c.req.query("href");
2892
- if (!href) {
2893
- return c.json({ document: true, ok: false }, 400);
2894
- }
2895
- return resolveRouteData(href, c);
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
- const pathname = normalizeRoutePath(getRequestUrl(c.req.raw).pathname);
2900
- const match = matchRoute(pathname);
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
- if (!match) {
2903
- const fallback = findSpecialRoute(pathname, "notFound");
2904
- if (fallback?.route?.notFound) {
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
- fallback.route,
2907
- c,
2908
- fallback.params,
2956
+ match.route,
2957
+ requestContext,
2958
+ match.params,
2909
2959
  async () =>
2910
- c.req.header(ROUTE_PREFLIGHT_REQUEST_HEADER) === "1"
2911
- ? c.body(null, 204)
2912
- : c.req.header(ROUTE_DATA_REQUEST_HEADER) === "1"
2913
- ? renderRouteData(fallback.route, pathname, fallback.params, c, fallback.route.notFound, "not-found")
2914
- : renderRouteResponse(fallback.route, pathname, fallback.params, c, fallback.route.notFound, 404),
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
- return c.text("Not Found", 404);
2918
- }
2919
-
2920
- if ((c.req.method === "GET" || c.req.method === "HEAD") && match.route.page) {
2921
- return composeRouteMiddlewares(
2922
- match.route,
2923
- c,
2924
- match.params,
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
- c.req.header(ROUTE_PREFLIGHT_REQUEST_HEADER) === "1"
2927
- ? c.body(null, 204)
2928
- : c.req.header(ROUTE_DATA_REQUEST_HEADER) === "1"
2929
- ? renderRouteData(match.route, pathname, match.params, c, match.route.page, "page")
2930
- : renderMatchedPage(match, c),
2931
- );
2932
- }
2933
- if (c.req.method === "POST" && match.route.page) {
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) => [`symbol__${symbol.id}`, createSymbolRequestId(symbol.filePath, symbol.id)]),
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([