eclipsa 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/{action-CgM3EJUS.mjs → action-DqgkV3zb.mjs} +1584 -996
  2. package/action-DqgkV3zb.mjs.map +1 -0
  3. package/{client-COjBNTyt.mjs → client-DKPmN-wJ.mjs} +126 -40
  4. package/client-DKPmN-wJ.mjs.map +1 -0
  5. package/{component-D_nEtZ69.d.mts → component-yvTtnI00.d.mts} +2 -2
  6. package/core/client/mod.d.mts +2 -2
  7. package/core/client/mod.mjs +3 -3
  8. package/core/dev-client/mod.d.mts +1 -1
  9. package/core/dev-client/mod.mjs +10 -5
  10. package/core/dev-client/mod.mjs.map +1 -1
  11. package/core/internal.d.mts +2 -2
  12. package/core/internal.mjs +2 -2
  13. package/core/prod-client/mod.d.mts +3 -3
  14. package/core/prod-client/mod.mjs +4 -4
  15. package/{internal-Csbm0Qnv.d.mts → internal-CHYAJznU.d.mts} +116 -72
  16. package/jsx/jsx-dev-runtime.d.mts +8 -2
  17. package/jsx/jsx-dev-runtime.mjs +2 -2
  18. package/jsx/jsx-runtime.d.mts +1 -1
  19. package/jsx/mod.d.mts +1 -1
  20. package/jsx/mod.mjs +1 -1
  21. package/{jsx-dev-runtime-CY60yQJY.mjs → jsx-dev-runtime-DpbWQ4Q0.mjs} +8 -3
  22. package/jsx-dev-runtime-DpbWQ4Q0.mjs.map +1 -0
  23. package/{mod-DLb8ple9.d.mts → mod-aLmFvMYF.d.mts} +4 -4
  24. package/mod.d.mts +20 -38
  25. package/mod.mjs +19 -145
  26. package/mod.mjs.map +1 -1
  27. package/package.json +6 -2
  28. package/{signal-B7AfIKrr.d.mts → signal-CosyYdtA.d.mts} +1 -1
  29. package/{signal-CJtquEfo.mjs → signal-DBzloBrN.mjs} +2 -2
  30. package/{signal-CJtquEfo.mjs.map → signal-DBzloBrN.mjs.map} +1 -1
  31. package/ssr-CRg57Wn2.mjs +157 -0
  32. package/ssr-CRg57Wn2.mjs.map +1 -0
  33. package/ssr-D8F-DtCv.d.mts +37 -0
  34. package/{types-BCEY9lGp.d.mts → types-Cu9gFlEY.d.mts} +6 -2
  35. package/{types-DKpefD_u.d.mts → types-DDeNM8UH.d.mts} +1 -1
  36. package/vite/build/runtime.d.mts +4 -0
  37. package/vite/build/runtime.mjs +4 -0
  38. package/vite/mod.mjs +257 -38
  39. package/vite/mod.mjs.map +1 -1
  40. package/web-utils/mod.d.mts +1 -1
  41. package/web-utils/mod.mjs +2 -2
  42. package/action-CgM3EJUS.mjs.map +0 -1
  43. package/client-COjBNTyt.mjs.map +0 -1
  44. package/jsx-dev-runtime-CY60yQJY.mjs.map +0 -1
  45. /package/{jsx-runtime-BFDPoxFn.d.mts → jsx-runtime-QIK6ADiK.d.mts} +0 -0
package/mod.mjs CHANGED
@@ -1,11 +1,22 @@
1
- import { $t as loader, An as serializePublicValue, B as primeRouteModules, Bn as isNoSerialize, Cn as getClientHooks, Dn as resetClientHooks, En as registerClientHooks, F as getStreamingResumeBootstrapScriptContent$1, Fn as escapeInlineScriptText, H as refreshRegisteredRouteContainers, I as installResumeListeners, In as escapeJSONScriptText, Jt as __eclipsaLoader, L as notFound$1, Ln as parseSerializedJSON, Mn as transformCurrentPublicError, Nn as withServerRequestContext, O as createResumeContainer, On as resolveReroute, Pn as deserializeValue, Q as restoreResumedLocalSignalEffects, Qt as isPendingSsrLoaderError, Rn as serializeJSONScriptContent, S as collectPendingSuspenseBoundaryIds, Sn as deserializePublicValue, Tn as markPublicError, U as registerResumeContainer, Vn as noSerialize, W as registerRuntimeScopedStyle, Xt as executeLoader, Yt as consumePendingSsrLoaderIds, Z as restoreRegisteredRpcHandles, Zt as hasLoader, _n as isPendingSignalError, _t as ROUTE_MANIFEST_ELEMENT_ID, a as action, an as ROUTE_METADATA_HEAD_ATTR, bn as attachRequestFetch, c as getActionFormSubmissionId, cn as resolveRouteMetadata, ct as useRuntimeNavigate, d as primeActionState, dn as getRuntimeContextReference, f as registerAction, fn as materializeRuntimeContext, ft as withRuntimeContainer, g as applyResumeHmrUpdateToRegisteredContainers, gn as createPendingSignalError, gt as ROUTE_LINK_ATTR, hn as Suspense, i as __eclipsaAction, in as resolvePendingLoaders, it as toResumePayloadSubset, j as getResumePayloadScriptContent, jn as toPublicError, kn as runHandleError, l as getNormalizedActionInput, ln as createContext, lt as useRuntimeRouteError, m as RESUME_FINAL_STATE_ELEMENT_ID, mn as useContext, n as ACTION_FORM_ATTR, nn as primeLoaderState, o as executeAction, on as composeRouteMetadata, p as validator, pn as materializeRuntimeContextProvider, r as ACTION_FORM_FIELD, rn as registerLoader, rt as toResumePayload, s as executeActionSubmission, sn as renderRouteMetadataHead, st as useRuntimeLocation, t as ACTION_CONTENT_TYPE, tn as markPendingSsrLoader, u as hasAction, un as getContextProviderMeta, ut as useRuntimeRouteParams, v as beginAsyncSSRContainer, vn as isSuspenseType, vt as ROUTE_PREFETCH_ATTR, wn as getCurrentServerRequestContext, xn as createRequestFetch, xt as ROUTE_REPLACE_ATTR, y as beginSSRContainer, yn as APP_HOOKS_ELEMENT_ID, zn as serializeValue } from "./action-CgM3EJUS.mjs";
1
+ import { $n as IS_BROWSER, $t as consumePendingSsrLoaderIds, An as isPendingSignalError, B as refreshRegisteredRouteContainers, Bn as resetClientHooks, Cn as getContextProviderMeta, Dn as useContext, E as createResumeContainer, En as materializeRuntimeContextProvider, F as notFound$1, Fn as deserializePublicValue, G as renderSSRAttr, Gn as transformCurrentPublicError, H as registerRuntimeScopedStyle, Hn as runHandleError, In as getClientHooks, Jn as escapeInlineScriptText, K as renderSSRMap, Kn as withServerRequestContext, Ln as getCurrentServerRequestContext, Mn as APP_HOOKS_ELEMENT_ID, Nn as attachRequestFetch, On as Suspense, P as installResumeListeners, Pn as createRequestFetch, Qn as serializeValue, Qt as __eclipsaLoader, R as primeRouteModules, Rn as markPublicError, Sn as createContext, St as RESUME_FINAL_STATE_ELEMENT_ID, Tn as materializeRuntimeContext, Un as serializePublicValue, V as registerResumeContainer, Vn as resolveReroute, Wn as toPublicError, X as restoreResumedExternalComponents, Xn as parseSerializedJSON, Y as restoreRegisteredRpcHandles, Yn as escapeJSONScriptText, Z as restoreResumedLocalSignalEffects, Zn as serializeJSONScriptContent, a as action, an as markPendingSsrLoader, at as useRuntimeLocation, bn as renderRouteMetadataHead, c as getActionFormSubmissionId, cn as resolvePendingLoaders, ct as useRuntimeRouteParams, d as primeActionState, dn as ROUTE_LINK_ATTR, en as executeLoader, er as IS_SSR, f as registerAction, fn as ROUTE_MANIFEST_ELEMENT_ID, gn as ROUTE_REPLACE_ATTR, i as __eclipsaAction, jn as isSuspenseType, kn as createPendingSignalError, l as getNormalizedActionInput, m as applyResumeHmrUpdateToRegisteredContainers, n as ACTION_FORM_ATTR, nn as isPendingSsrLoaderError, nr as noSerialize, o as executeAction, on as primeLoaderState, ot as useRuntimeNavigate, p as validator, pn as ROUTE_PREFETCH_ATTR, q as renderSSRValue, qn as deserializeValue, r as ACTION_FORM_FIELD, rn as loader, s as executeActionSubmission, sn as registerLoader, st as useRuntimeRouteError, t as ACTION_CONTENT_TYPE, tn as hasLoader, tr as isNoSerialize, u as hasAction, vn as ROUTE_METADATA_HEAD_ATTR, wn as getRuntimeContextReference, xn as resolveRouteMetadata, yn as composeRouteMetadata, zn as registerClientHooks } from "./action-DqgkV3zb.mjs";
2
+ import { a as jsxDEV } from "./jsx-dev-runtime-DpbWQ4Q0.mjs";
2
3
  import { t as RESUME_HMR_EVENT } from "./resume-hmr-qTpLc5o-.mjs";
3
- import { a as signal, c as useSignal, i as onVisible, l as useWatch, n as onCleanup, o as useComputed, r as onMount, s as useComputed$, t as effect } from "./signal-CJtquEfo.mjs";
4
+ import { a as signal, c as useSignal, i as onVisible, l as useWatch, n as onCleanup, o as useComputed, r as onMount, s as useComputed$, t as effect } from "./signal-DBzloBrN.mjs";
4
5
  import { n as registerSnapshotSignal, r as withSignalSnapshot, t as consumeSnapshotValue } from "./snapshot-BdY3jcVk.mjs";
5
- import { renderToString } from "./jsx/mod.mjs";
6
- //#region core/env.ts
7
- const IS_BROWSER = typeof window !== "undefined" && typeof document !== "undefined";
8
- const IS_SSR = !IS_BROWSER;
6
+ import { a as serializeResumePayload, i as renderSSRStream, n as renderSSR, r as renderSSRAsync, t as getStreamingResumeBootstrapScriptContent } from "./ssr-CRg57Wn2.mjs";
7
+ //#region core/dynamic.ts
8
+ const omitComponentProp = (props) => {
9
+ const descriptors = Object.getOwnPropertyDescriptors(props);
10
+ delete descriptors.component;
11
+ const nextProps = {};
12
+ Object.defineProperties(nextProps, descriptors);
13
+ return nextProps;
14
+ };
15
+ const Dynamic = ((props) => {
16
+ const component = props.component;
17
+ if (component === null || component === void 0) return null;
18
+ return jsxDEV(component, omitComponentProp(props), null, false, {});
19
+ });
9
20
  //#endregion
10
21
  //#region core/router.tsx
11
22
  const Link = (props) => {
@@ -88,6 +99,7 @@ const resumeContainer = async (source = document) => {
88
99
  } else registerClientHooks({});
89
100
  await primeRouteModules(container);
90
101
  restoreRegisteredRpcHandles(container);
102
+ await restoreResumedExternalComponents(container);
91
103
  await restoreResumedLocalSignalEffects(container);
92
104
  registerResumeContainer(container);
93
105
  root.setAttribute("data-e-resume", "resumed");
@@ -97,144 +109,6 @@ const resumeContainer = async (source = document) => {
97
109
  }
98
110
  };
99
111
  //#endregion
100
- //#region core/ssr.ts
101
- const collectRenderedComponentIdsFromHtml = (html) => {
102
- const ids = /* @__PURE__ */ new Set();
103
- for (const match of html.matchAll(/<!--ec:c:([^:]+):start-->/g)) {
104
- const id = match[1];
105
- if (id) ids.add(id);
106
- }
107
- return ids;
108
- };
109
- const createStreamingResumePayload = (container, renderedComponentIds) => toResumePayloadSubset(container, ["$root", ...renderedComponentIds]);
110
- const renderSSR = (render, options) => {
111
- const { container, result } = beginSSRContainer(options?.symbols ?? {}, render);
112
- return {
113
- html: withRuntimeContainer(container, () => renderToString(result)),
114
- payload: toResumePayload(container)
115
- };
116
- };
117
- const renderSSRAsync = async (render, options) => {
118
- const asyncSignalSnapshotCache = /* @__PURE__ */ new Map();
119
- const seededLoaderStates = /* @__PURE__ */ new Map();
120
- for (let attempt = 0; attempt < 10; attempt += 1) {
121
- const { container, result } = await beginAsyncSSRContainer(options?.symbols ?? {}, render, async (runtimeContainer) => {
122
- for (const [id, snapshot] of seededLoaderStates) runtimeContainer.loaderStates.set(id, {
123
- data: snapshot.data,
124
- error: snapshot.error,
125
- loaded: snapshot.loaded
126
- });
127
- await options?.prepare?.(runtimeContainer);
128
- }, { asyncSignalSnapshotCache });
129
- try {
130
- const html = withRuntimeContainer(container, () => renderToString(result));
131
- if (container.pendingSuspensePromises.size > 0) {
132
- await Promise.allSettled(container.pendingSuspensePromises);
133
- continue;
134
- }
135
- asyncSignalSnapshotCache.clear();
136
- return {
137
- html,
138
- payload: toResumePayload(container)
139
- };
140
- } catch (error) {
141
- const { isPendingSsrLoaderError, resolvePendingLoaders } = await import("./action-CgM3EJUS.mjs").then((n) => n.en);
142
- if (!isPendingSsrLoaderError(error)) throw error;
143
- if (!(options?.resolvePendingLoaders ? await options.resolvePendingLoaders(container) : options?.context ? await resolvePendingLoaders(container, options.context) : false)) throw error;
144
- seededLoaderStates.clear();
145
- for (const [id, snapshot] of container.loaderStates) seededLoaderStates.set(id, {
146
- data: snapshot.data,
147
- error: snapshot.error,
148
- loaded: snapshot.loaded
149
- });
150
- }
151
- }
152
- throw new Error("SSR loader resolution did not converge.");
153
- };
154
- const extractBoundaryHtml = (html, boundaryId) => {
155
- const startToken = `<!--ec:c:${boundaryId}:start-->`;
156
- const endToken = `<!--ec:c:${boundaryId}:end-->`;
157
- const startIndex = html.indexOf(startToken);
158
- if (startIndex < 0) return null;
159
- const endIndex = html.indexOf(endToken, startIndex + startToken.length);
160
- if (endIndex < 0) return null;
161
- return html.slice(startIndex + startToken.length, endIndex);
162
- };
163
- const renderStreamingAttempt = async (render, options, seededLoaderStates, asyncSignalSnapshotCache) => {
164
- for (let attempt = 0; attempt < 10; attempt += 1) {
165
- const { container, result } = await beginAsyncSSRContainer(options.symbols ?? {}, render, async (runtimeContainer) => {
166
- for (const [id, snapshot] of seededLoaderStates) runtimeContainer.loaderStates.set(id, {
167
- data: snapshot.data,
168
- error: snapshot.error,
169
- loaded: snapshot.loaded
170
- });
171
- await options.prepare?.(runtimeContainer);
172
- }, { asyncSignalSnapshotCache });
173
- try {
174
- const html = withRuntimeContainer(container, () => renderToString(result));
175
- return {
176
- container,
177
- html,
178
- payload: createStreamingResumePayload(container, collectRenderedComponentIdsFromHtml(html)),
179
- pendingBoundaryIds: collectPendingSuspenseBoundaryIds(container)
180
- };
181
- } catch (error) {
182
- const { isPendingSsrLoaderError, resolvePendingLoaders } = await import("./action-CgM3EJUS.mjs").then((n) => n.en);
183
- if (!isPendingSsrLoaderError(error)) throw error;
184
- if (!(options.resolvePendingLoaders ? await options.resolvePendingLoaders(container) : options.context ? await resolvePendingLoaders(container, options.context) : false)) throw error;
185
- seededLoaderStates.clear();
186
- for (const [id, snapshot] of container.loaderStates) seededLoaderStates.set(id, {
187
- data: snapshot.data,
188
- error: snapshot.error,
189
- loaded: snapshot.loaded
190
- });
191
- }
192
- }
193
- throw new Error("SSR loader resolution did not converge.");
194
- };
195
- const renderSSRStream = async (render, options) => {
196
- const asyncSignalSnapshotCache = /* @__PURE__ */ new Map();
197
- const seededLoaderStates = /* @__PURE__ */ new Map();
198
- const initial = await renderStreamingAttempt(render, options ?? {}, seededLoaderStates, asyncSignalSnapshotCache);
199
- if (initial.pendingBoundaryIds.length === 0) {
200
- asyncSignalSnapshotCache.clear();
201
- return {
202
- chunks: (async function* () {})(),
203
- html: initial.html,
204
- payload: initial.payload
205
- };
206
- }
207
- return {
208
- chunks: (async function* () {
209
- let current = initial;
210
- try {
211
- while (current.pendingBoundaryIds.length > 0) {
212
- await Promise.race(current.pendingBoundaryIds.map((boundaryId) => current.container.components.get(boundaryId)?.suspensePromise?.then(() => boundaryId, () => boundaryId) ?? Promise.resolve(boundaryId)));
213
- const next = await renderStreamingAttempt(render, options ?? {}, seededLoaderStates, asyncSignalSnapshotCache);
214
- const nextPending = new Set(next.pendingBoundaryIds);
215
- const completedIds = current.pendingBoundaryIds.filter((boundaryId) => !nextPending.has(boundaryId)).sort((left, right) => left.split(".").length - right.split(".").length);
216
- for (const boundaryId of completedIds) {
217
- const boundaryHtml = extractBoundaryHtml(next.html, boundaryId);
218
- if (boundaryHtml === null) continue;
219
- yield {
220
- boundaryId,
221
- html: boundaryHtml,
222
- payload: next.payload
223
- };
224
- }
225
- current = next;
226
- }
227
- } finally {
228
- asyncSignalSnapshotCache.clear();
229
- }
230
- })(),
231
- html: initial.html,
232
- payload: initial.payload
233
- };
234
- };
235
- const serializeResumePayload = (payload) => getResumePayloadScriptContent(payload);
236
- const getStreamingResumeBootstrapScriptContent = () => getStreamingResumeBootstrapScriptContent$1();
237
- //#endregion
238
112
  //#region core/style.ts
239
113
  const DANGEROUSLY_SET_INNER_HTML_PROP = "dangerouslySetInnerHTML";
240
114
  const isTemplateStringsArray = (value) => Array.isArray(value) && Array.isArray(value.raw);
@@ -284,6 +158,6 @@ const Show = (props) => ({
284
158
  when: props.when
285
159
  });
286
160
  //#endregion
287
- export { ACTION_CONTENT_TYPE, ACTION_FORM_ATTR, ACTION_FORM_FIELD, APP_HOOKS_ELEMENT_ID, For, IS_BROWSER, IS_SSR, Link, RESUME_FINAL_STATE_ELEMENT_ID, ROUTE_METADATA_HEAD_ATTR, Show, Suspense, __eclipsaAction, __eclipsaLoader, action, attachRequestFetch, composeRouteMetadata, consumePendingSsrLoaderIds, consumeSnapshotValue, createContext, createPendingSignalError, createRequestFetch, deserializePublicValue, deserializeValue, effect, escapeInlineScriptText, escapeJSONScriptText, executeAction, executeActionSubmission, executeLoader, getActionFormSubmissionId, getClientHooks, getContextProviderMeta, getCurrentServerRequestContext, getNormalizedActionInput, getRuntimeContextReference, getStreamingResumeBootstrapScriptContent, hasAction, hasLoader, isNoSerialize, isPendingSignalError, isPendingSsrLoaderError, isSuspenseType, loader, markPendingSsrLoader, markPublicError, materializeRuntimeContext, materializeRuntimeContextProvider, noSerialize, notFound, onCleanup, onMount, onVisible, parseSerializedJSON, primeActionState, primeLoaderState, registerAction, registerClientHooks, registerLoader, registerSnapshotSignal, renderRouteMetadataHead, renderSSR, renderSSRAsync, renderSSRStream, resetClientHooks, resolvePendingLoaders, resolveReroute, resolveRouteMetadata, resumeContainer, runHandleError, serializeJSONScriptContent, serializePublicValue, serializeResumePayload, serializeValue, signal, toPublicError, transformCurrentPublicError, useComputed, useComputed$, useContext, useLocation, useNavigate, useRouteError, useRouteParams, useSignal, useStyleScoped, useWatch, validator, withServerRequestContext, withSignalSnapshot };
161
+ export { ACTION_CONTENT_TYPE, ACTION_FORM_ATTR, ACTION_FORM_FIELD, APP_HOOKS_ELEMENT_ID, Dynamic, For, IS_BROWSER, IS_SSR, Link, RESUME_FINAL_STATE_ELEMENT_ID, ROUTE_METADATA_HEAD_ATTR, Show, Suspense, __eclipsaAction, __eclipsaLoader, action, attachRequestFetch, composeRouteMetadata, consumePendingSsrLoaderIds, consumeSnapshotValue, createContext, createPendingSignalError, createRequestFetch, deserializePublicValue, deserializeValue, effect, escapeInlineScriptText, escapeJSONScriptText, executeAction, executeActionSubmission, executeLoader, getActionFormSubmissionId, getClientHooks, getContextProviderMeta, getCurrentServerRequestContext, getNormalizedActionInput, getRuntimeContextReference, getStreamingResumeBootstrapScriptContent, hasAction, hasLoader, isNoSerialize, isPendingSignalError, isPendingSsrLoaderError, isSuspenseType, loader, markPendingSsrLoader, markPublicError, materializeRuntimeContext, materializeRuntimeContextProvider, noSerialize, notFound, onCleanup, onMount, onVisible, parseSerializedJSON, primeActionState, primeLoaderState, registerAction, registerClientHooks, registerLoader, registerSnapshotSignal, renderRouteMetadataHead, renderSSR, renderSSRAsync, renderSSRAttr, renderSSRMap, renderSSRStream, renderSSRValue, resetClientHooks, resolvePendingLoaders, resolveReroute, resolveRouteMetadata, resumeContainer, runHandleError, serializeJSONScriptContent, serializePublicValue, serializeResumePayload, serializeValue, signal, toPublicError, transformCurrentPublicError, useComputed, useComputed$, useContext, useLocation, useNavigate, useRouteError, useRouteParams, useSignal, useStyleScoped, useWatch, validator, withServerRequestContext, withSignalSnapshot };
288
162
 
289
163
  //# sourceMappingURL=mod.mjs.map
package/mod.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"mod.mjs","names":["throwRouteNotFound","getStreamingResumeBootstrapScriptContentFromRuntime"],"sources":["../core/env.ts","../core/router.tsx","../core/resume.ts","../core/ssr.ts","../core/style.ts","../core/flow/mod.ts"],"sourcesContent":["export const IS_BROWSER = typeof window !== 'undefined' && typeof document !== 'undefined'\n\nexport const IS_SSR = !IS_BROWSER\n","import type { JSX } from '../jsx/types.ts'\nimport {\n ROUTE_LINK_ATTR,\n ROUTE_PREFETCH_ATTR,\n ROUTE_REPLACE_ATTR,\n type LinkPrefetchMode,\n type Navigate,\n type RouteLocation,\n type RouteParams,\n} from './router-shared.ts'\nimport {\n notFound as throwRouteNotFound,\n useRuntimeLocation,\n useRuntimeRouteError,\n useRuntimeNavigate,\n useRuntimeRouteParams,\n} from './runtime.ts'\n\nexport interface LinkProps extends Record<string, unknown> {\n children?: JSX.Element | JSX.Element[]\n href: string\n prefetch?: LinkPrefetchMode | boolean\n reloadDocument?: boolean\n replace?: boolean\n}\n\nexport const Link = (props: LinkProps) => {\n const reloadDocument = props.reloadDocument === true\n const prefetchMode =\n props.prefetch === undefined\n ? undefined\n : props.prefetch === true\n ? 'intent'\n : props.prefetch === false\n ? 'none'\n : props.prefetch\n\n const nextProps: Record<string, unknown> = {\n ...props,\n }\n\n if (!reloadDocument) {\n nextProps[ROUTE_LINK_ATTR] = ''\n if (prefetchMode) {\n nextProps[ROUTE_PREFETCH_ATTR] = prefetchMode\n }\n if (props.replace) {\n nextProps[ROUTE_REPLACE_ATTR] = 'true'\n }\n }\n delete nextProps.prefetch\n delete nextProps.reloadDocument\n delete nextProps.replace\n\n return {\n isStatic: true,\n props: nextProps,\n type: 'a',\n } satisfies JSX.Element\n}\n\nexport const useNavigate = (): Navigate => useRuntimeNavigate()\n\nexport const useLocation = (): RouteLocation => useRuntimeLocation()\n\nexport const useRouteParams = (): RouteParams => useRuntimeRouteParams()\n\nexport const useRouteError = <T = unknown>(): T | undefined =>\n useRuntimeRouteError() as T | undefined\n\nexport const notFound = (): never => throwRouteNotFound()\n","import {\n applyResumeHmrUpdateToRegisteredContainers,\n createResumeContainer,\n refreshRegisteredRouteContainers,\n RESUME_FINAL_STATE_ELEMENT_ID,\n installResumeListeners,\n primeRouteModules,\n RESUME_STATE_ELEMENT_ID,\n restoreRegisteredRpcHandles,\n restoreResumedLocalSignalEffects,\n registerResumeContainer,\n type ResumePayload,\n} from './runtime.ts'\nimport {\n APP_HOOKS_ELEMENT_ID,\n registerClientHooks,\n type AppHooksManifest,\n type AppHooksModule,\n} from './hooks.ts'\nimport { RESUME_HMR_EVENT, type ResumeHmrUpdatePayload } from './resume-hmr.ts'\nimport { ROUTE_MANIFEST_ELEMENT_ID, type RouteManifest } from './router-shared.ts'\n\nconst CONTENT_HMR_EVENT = 'eclipsa:content-update'\n\ninterface ViteHotContext {\n on(event: typeof CONTENT_HMR_EVENT, listener: () => void | Promise<void>): void\n on(event: string, listener: (data: ResumeHmrUpdatePayload) => void | Promise<void>): void\n}\n\nconst getResumePayload = (doc: Document): ResumePayload | null => {\n const elem =\n doc.getElementById(RESUME_FINAL_STATE_ELEMENT_ID) ?? doc.getElementById(RESUME_STATE_ELEMENT_ID)\n if (!elem?.textContent) {\n return null\n }\n\n return JSON.parse(elem.textContent) as ResumePayload\n}\n\nconst getRouteManifest = (doc: Document): RouteManifest => {\n const elem = doc.getElementById(ROUTE_MANIFEST_ELEMENT_ID)\n if (!elem?.textContent) {\n return []\n }\n\n return JSON.parse(elem.textContent) as RouteManifest\n}\n\nconst getAppHooksManifest = (doc: Document): AppHooksManifest => {\n const elem = doc.getElementById(APP_HOOKS_ELEMENT_ID)\n if (!elem?.textContent) {\n return {\n client: null,\n }\n }\n return JSON.parse(elem.textContent) as AppHooksManifest\n}\n\nconst initResumeHmr = (hot: ViteHotContext | undefined) => {\n if (!hot) {\n return\n }\n\n hot.on(RESUME_HMR_EVENT, async (payload) => {\n const result = await applyResumeHmrUpdateToRegisteredContainers(payload)\n if (result === 'reload') {\n location.reload()\n }\n })\n hot.on(CONTENT_HMR_EVENT, async () => {\n try {\n await refreshRegisteredRouteContainers()\n } catch {\n location.reload()\n }\n })\n}\n\ninitResumeHmr((import.meta as ImportMeta & { hot?: ViteHotContext }).hot)\n\nexport const resumeContainer = async (source: Document | HTMLElement = document) => {\n const doc = source instanceof Document ? source : source.ownerDocument\n const root = source instanceof Document ? doc.body : source\n const payload = getResumePayload(doc)\n\n if (!payload) {\n return\n }\n\n const container = createResumeContainer(root, payload, {\n routeManifest: getRouteManifest(doc),\n })\n let resolveResumeReady!: () => void\n container.resumeReadyPromise = new Promise<void>((resolve) => {\n resolveResumeReady = resolve\n })\n installResumeListeners(container)\n\n try {\n const appHooksManifest = getAppHooksManifest(doc)\n if (appHooksManifest.client) {\n const module = (await import(/* @vite-ignore */ appHooksManifest.client)) as AppHooksModule\n registerClientHooks({\n reroute: module.reroute,\n transport: module.transport,\n })\n } else {\n registerClientHooks({})\n }\n\n await primeRouteModules(container)\n restoreRegisteredRpcHandles(container)\n await restoreResumedLocalSignalEffects(container)\n registerResumeContainer(container)\n root.setAttribute('data-e-resume', 'resumed')\n } finally {\n resolveResumeReady()\n container.resumeReadyPromise = null\n }\n}\n","import type { Context } from 'hono'\nimport type { JSX } from '../jsx/types.ts'\nimport { renderToString } from '../jsx/mod.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\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 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 },\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 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 = `<!--ec:c:${boundaryId}:start-->`\n const endToken = `<!--ec:c:${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): 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 },\n )\n\n try {\n const html = withRuntimeContainer(container, () => renderToString(result))\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 seededLoaderStates = new Map<string, { data: unknown; error: unknown; loaded: boolean }>()\n const initial = await renderStreamingAttempt(\n render,\n options ?? {},\n seededLoaderStates,\n asyncSignalSnapshotCache,\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 )\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","import type { JSX } from '../jsx/types.ts'\nimport { registerRuntimeScopedStyle } from './runtime.ts'\n\nconst DANGEROUSLY_SET_INNER_HTML_PROP = 'dangerouslySetInnerHTML'\n\ninterface StyleElement {\n props: Record<string, unknown>\n type: 'style'\n}\n\nconst isTemplateStringsArray = (value: unknown): value is TemplateStringsArray =>\n Array.isArray(value) && Array.isArray((value as unknown as TemplateStringsArray).raw)\n\nconst isStyleElement = (value: unknown): value is StyleElement =>\n !!value &&\n typeof value === 'object' &&\n 'type' in value &&\n 'props' in value &&\n (value as StyleElement).type === 'style'\n\nconst flattenStyleText = (value: unknown): string => {\n if (Array.isArray(value)) {\n return value.map((entry) => flattenStyleText(entry)).join('')\n }\n if (value === null || value === undefined || value === false) {\n return ''\n }\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return String(value)\n }\n throw new TypeError('useStyleScoped() only accepts text children inside <style>.')\n}\n\nconst resolveTaggedTemplateCss = (strings: TemplateStringsArray, values: unknown[]) =>\n strings.reduce(\n (result, segment, index) =>\n result + segment + (index < values.length ? String(values[index]) : ''),\n '',\n )\n\nconst resolveStyleInput = (\n value: JSX.Element | string,\n): {\n attributes: Record<string, unknown>\n cssText: string\n} => {\n if (typeof value === 'string') {\n return {\n attributes: {},\n cssText: value,\n }\n }\n\n if (!isStyleElement(value)) {\n throw new TypeError(\n 'useStyleScoped() expects a CSS string, a tagged template literal, or a <style> element.',\n )\n }\n\n const attributes = { ...value.props }\n const innerHTML = attributes[DANGEROUSLY_SET_INNER_HTML_PROP]\n delete attributes.children\n delete attributes[DANGEROUSLY_SET_INNER_HTML_PROP]\n\n return {\n attributes,\n cssText:\n innerHTML !== undefined\n ? flattenStyleText(innerHTML)\n : flattenStyleText(value.props.children),\n }\n}\n\nexport function useStyleScoped(strings: TemplateStringsArray, ...values: unknown[]): void\nexport function useStyleScoped(value: JSX.Element | string): void\nexport function useStyleScoped(\n input: JSX.Element | string | TemplateStringsArray,\n ...values: unknown[]\n): void {\n const resolved = isTemplateStringsArray(input)\n ? {\n attributes: {},\n cssText: resolveTaggedTemplateCss(input, values),\n }\n : resolveStyleInput(input)\n\n registerRuntimeScopedStyle(resolved.cssText, resolved.attributes)\n}\n","import type { JSX } from '../../jsx/jsx-runtime.ts'\n\ntype Key = string | number | symbol\ntype ShowBranch<T> = JSX.Element | ((value: T) => JSX.Element)\n\ninterface ForValue<T> {\n __e_for: true\n arr: readonly T[]\n fallback?: JSX.Element\n fn: (e: T, i: number) => JSX.Element\n key?: (e: T, i: number) => Key\n}\n\ninterface ShowValue<T> {\n __e_show: true\n children: ShowBranch<T>\n fallback?: ShowBranch<T>\n when: T\n}\n\nexport const For = <T>(props: {\n arr: readonly T[]\n fallback?: JSX.Element\n fn: (e: T, i: number) => JSX.Element\n key?: (e: T, i: number) => Key\n}) =>\n ({\n __e_for: true,\n arr: props.arr,\n fallback: props.fallback,\n fn: props.fn,\n key: props.key,\n }) as ForValue<T> as unknown as JSX.Element\n\nexport const Show = <T>(props: { children: ShowBranch<T>; fallback?: ShowBranch<T>; when: T }) =>\n ({\n __e_show: true,\n children: props.children,\n fallback: props.fallback,\n when: props.when,\n }) as ShowValue<T> as unknown as JSX.Element\n"],"mappings":"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"}
1
+ {"version":3,"file":"mod.mjs","names":["throwRouteNotFound"],"sources":["../core/dynamic.ts","../core/router.tsx","../core/resume.ts","../core/style.ts","../core/flow/mod.ts"],"sourcesContent":["import { jsxDEV } from '../jsx/jsx-dev-runtime.ts'\nimport type { JSX } from '../jsx/types.ts'\nimport type { Component } from './component.ts'\n\nexport type DynamicRenderable = keyof JSX.IntrinsicElements | Component<any>\n\ntype DynamicRenderableProps<TRenderable extends DynamicRenderable> =\n TRenderable extends keyof JSX.IntrinsicElements\n ? JSX.IntrinsicElements[TRenderable]\n : TRenderable extends Component<infer TProps>\n ? TProps\n : never\n\nexport type DynamicProps<TRenderable extends DynamicRenderable> = {\n component: TRenderable | null | undefined\n} & DynamicRenderableProps<TRenderable>\n\ntype DynamicIntrinsicProps = {\n [TRenderable in keyof JSX.IntrinsicElements]: DynamicProps<TRenderable>\n}[keyof JSX.IntrinsicElements]\n\ninterface DynamicComponentFn {\n (props: DynamicIntrinsicProps): JSX.Element\n <TRenderable extends Component<any>>(props: DynamicProps<TRenderable>): JSX.Element\n}\n\nconst omitComponentProp = <TRenderable extends DynamicRenderable>(\n props: DynamicProps<TRenderable>,\n): DynamicRenderableProps<TRenderable> => {\n const descriptors = Object.getOwnPropertyDescriptors(props)\n delete descriptors.component\n\n const nextProps = {}\n Object.defineProperties(nextProps, descriptors)\n return nextProps as DynamicRenderableProps<TRenderable>\n}\n\nexport const Dynamic = ((\n props: {\n component: JSX.Type | null | undefined\n } & Record<string, unknown>,\n): JSX.Element => {\n const component = props.component\n if (component === null || component === undefined) {\n return null\n }\n\n return jsxDEV(\n component as JSX.Type,\n omitComponentProp(props) as Record<string, unknown>,\n null,\n false,\n {},\n )\n}) as DynamicComponentFn\n","import type { JSX } from '../jsx/types.ts'\nimport {\n ROUTE_LINK_ATTR,\n ROUTE_PREFETCH_ATTR,\n ROUTE_REPLACE_ATTR,\n type LinkPrefetchMode,\n type Navigate,\n type RouteLocation,\n type RouteParams,\n} from './router-shared.ts'\nimport {\n notFound as throwRouteNotFound,\n useRuntimeLocation,\n useRuntimeRouteError,\n useRuntimeNavigate,\n useRuntimeRouteParams,\n} from './runtime.ts'\n\nexport interface LinkProps extends Record<string, unknown> {\n children?: JSX.Element | JSX.Element[]\n href: string\n prefetch?: LinkPrefetchMode | boolean\n reloadDocument?: boolean\n replace?: boolean\n}\n\nexport const Link = (props: LinkProps) => {\n const reloadDocument = props.reloadDocument === true\n const prefetchMode =\n props.prefetch === undefined\n ? undefined\n : props.prefetch === true\n ? 'intent'\n : props.prefetch === false\n ? 'none'\n : props.prefetch\n\n const nextProps: Record<string, unknown> = {\n ...props,\n }\n\n if (!reloadDocument) {\n nextProps[ROUTE_LINK_ATTR] = ''\n if (prefetchMode) {\n nextProps[ROUTE_PREFETCH_ATTR] = prefetchMode\n }\n if (props.replace) {\n nextProps[ROUTE_REPLACE_ATTR] = 'true'\n }\n }\n delete nextProps.prefetch\n delete nextProps.reloadDocument\n delete nextProps.replace\n\n return {\n isStatic: true,\n props: nextProps,\n type: 'a',\n } satisfies JSX.Element\n}\n\nexport const useNavigate = (): Navigate => useRuntimeNavigate()\n\nexport const useLocation = (): RouteLocation => useRuntimeLocation()\n\nexport const useRouteParams = (): RouteParams => useRuntimeRouteParams()\n\nexport const useRouteError = <T = unknown>(): T | undefined =>\n useRuntimeRouteError() as T | undefined\n\nexport const notFound = (): never => throwRouteNotFound()\n","import {\n applyResumeHmrUpdateToRegisteredContainers,\n createResumeContainer,\n refreshRegisteredRouteContainers,\n RESUME_FINAL_STATE_ELEMENT_ID,\n installResumeListeners,\n primeRouteModules,\n RESUME_STATE_ELEMENT_ID,\n restoreRegisteredRpcHandles,\n restoreResumedExternalComponents,\n restoreResumedLocalSignalEffects,\n registerResumeContainer,\n type ResumePayload,\n} from './runtime.ts'\nimport {\n APP_HOOKS_ELEMENT_ID,\n registerClientHooks,\n type AppHooksManifest,\n type AppHooksModule,\n} from './hooks.ts'\nimport { RESUME_HMR_EVENT, type ResumeHmrUpdatePayload } from './resume-hmr.ts'\nimport { ROUTE_MANIFEST_ELEMENT_ID, type RouteManifest } from './router-shared.ts'\n\nconst CONTENT_HMR_EVENT = 'eclipsa:content-update'\n\ninterface ViteHotContext {\n on(event: typeof CONTENT_HMR_EVENT, listener: () => void | Promise<void>): void\n on(event: string, listener: (data: ResumeHmrUpdatePayload) => void | Promise<void>): void\n}\n\nconst getResumePayload = (doc: Document): ResumePayload | null => {\n const elem =\n doc.getElementById(RESUME_FINAL_STATE_ELEMENT_ID) ?? doc.getElementById(RESUME_STATE_ELEMENT_ID)\n if (!elem?.textContent) {\n return null\n }\n\n return JSON.parse(elem.textContent) as ResumePayload\n}\n\nconst getRouteManifest = (doc: Document): RouteManifest => {\n const elem = doc.getElementById(ROUTE_MANIFEST_ELEMENT_ID)\n if (!elem?.textContent) {\n return []\n }\n\n return JSON.parse(elem.textContent) as RouteManifest\n}\n\nconst getAppHooksManifest = (doc: Document): AppHooksManifest => {\n const elem = doc.getElementById(APP_HOOKS_ELEMENT_ID)\n if (!elem?.textContent) {\n return {\n client: null,\n }\n }\n return JSON.parse(elem.textContent) as AppHooksManifest\n}\n\nconst initResumeHmr = (hot: ViteHotContext | undefined) => {\n if (!hot) {\n return\n }\n\n hot.on(RESUME_HMR_EVENT, async (payload) => {\n const result = await applyResumeHmrUpdateToRegisteredContainers(payload)\n if (result === 'reload') {\n location.reload()\n }\n })\n hot.on(CONTENT_HMR_EVENT, async () => {\n try {\n await refreshRegisteredRouteContainers()\n } catch {\n location.reload()\n }\n })\n}\n\ninitResumeHmr((import.meta as ImportMeta & { hot?: ViteHotContext }).hot)\n\nexport const resumeContainer = async (source: Document | HTMLElement = document) => {\n const doc = source instanceof Document ? source : source.ownerDocument\n const root = source instanceof Document ? doc.body : source\n const payload = getResumePayload(doc)\n\n if (!payload) {\n return\n }\n\n const container = createResumeContainer(root, payload, {\n routeManifest: getRouteManifest(doc),\n })\n let resolveResumeReady!: () => void\n container.resumeReadyPromise = new Promise<void>((resolve) => {\n resolveResumeReady = resolve\n })\n installResumeListeners(container)\n\n try {\n const appHooksManifest = getAppHooksManifest(doc)\n if (appHooksManifest.client) {\n const module = (await import(/* @vite-ignore */ appHooksManifest.client)) as AppHooksModule\n registerClientHooks({\n reroute: module.reroute,\n transport: module.transport,\n })\n } else {\n registerClientHooks({})\n }\n\n await primeRouteModules(container)\n restoreRegisteredRpcHandles(container)\n await restoreResumedExternalComponents(container)\n await restoreResumedLocalSignalEffects(container)\n registerResumeContainer(container)\n root.setAttribute('data-e-resume', 'resumed')\n } finally {\n resolveResumeReady()\n container.resumeReadyPromise = null\n }\n}\n","import type { JSX } from '../jsx/types.ts'\nimport { registerRuntimeScopedStyle } from './runtime.ts'\n\nconst DANGEROUSLY_SET_INNER_HTML_PROP = 'dangerouslySetInnerHTML'\n\ninterface StyleElement {\n props: Record<string, unknown>\n type: 'style'\n}\n\nconst isTemplateStringsArray = (value: unknown): value is TemplateStringsArray =>\n Array.isArray(value) && Array.isArray((value as unknown as TemplateStringsArray).raw)\n\nconst isStyleElement = (value: unknown): value is StyleElement =>\n !!value &&\n typeof value === 'object' &&\n 'type' in value &&\n 'props' in value &&\n (value as StyleElement).type === 'style'\n\nconst flattenStyleText = (value: unknown): string => {\n if (Array.isArray(value)) {\n return value.map((entry) => flattenStyleText(entry)).join('')\n }\n if (value === null || value === undefined || value === false) {\n return ''\n }\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return String(value)\n }\n throw new TypeError('useStyleScoped() only accepts text children inside <style>.')\n}\n\nconst resolveTaggedTemplateCss = (strings: TemplateStringsArray, values: unknown[]) =>\n strings.reduce(\n (result, segment, index) =>\n result + segment + (index < values.length ? String(values[index]) : ''),\n '',\n )\n\nconst resolveStyleInput = (\n value: JSX.Element | string,\n): {\n attributes: Record<string, unknown>\n cssText: string\n} => {\n if (typeof value === 'string') {\n return {\n attributes: {},\n cssText: value,\n }\n }\n\n if (!isStyleElement(value)) {\n throw new TypeError(\n 'useStyleScoped() expects a CSS string, a tagged template literal, or a <style> element.',\n )\n }\n\n const attributes = { ...value.props }\n const innerHTML = attributes[DANGEROUSLY_SET_INNER_HTML_PROP]\n delete attributes.children\n delete attributes[DANGEROUSLY_SET_INNER_HTML_PROP]\n\n return {\n attributes,\n cssText:\n innerHTML !== undefined\n ? flattenStyleText(innerHTML)\n : flattenStyleText(value.props.children),\n }\n}\n\nexport function useStyleScoped(strings: TemplateStringsArray, ...values: unknown[]): void\nexport function useStyleScoped(value: JSX.Element | string): void\nexport function useStyleScoped(\n input: JSX.Element | string | TemplateStringsArray,\n ...values: unknown[]\n): void {\n const resolved = isTemplateStringsArray(input)\n ? {\n attributes: {},\n cssText: resolveTaggedTemplateCss(input, values),\n }\n : resolveStyleInput(input)\n\n registerRuntimeScopedStyle(resolved.cssText, resolved.attributes)\n}\n","import type { JSX } from '../../jsx/jsx-runtime.ts'\n\ntype Key = string | number | symbol\ntype ShowBranch<T> = JSX.Element | ((value: T) => JSX.Element)\n\ninterface ForValue<T> {\n __e_for: true\n arr: readonly T[]\n fallback?: JSX.Element\n fn: (e: T, i: number) => JSX.Element\n key?: (e: T, i: number) => Key\n}\n\ninterface ShowValue<T> {\n __e_show: true\n children: ShowBranch<T>\n fallback?: ShowBranch<T>\n when: T\n}\n\nexport const For = <T>(props: {\n arr: readonly T[]\n fallback?: JSX.Element\n fn: (e: T, i: number) => JSX.Element\n key?: (e: T, i: number) => Key\n}) =>\n ({\n __e_for: true,\n arr: props.arr,\n fallback: props.fallback,\n fn: props.fn,\n key: props.key,\n }) as ForValue<T> as unknown as JSX.Element\n\nexport const Show = <T>(props: { children: ShowBranch<T>; fallback?: ShowBranch<T>; when: T }) =>\n ({\n __e_show: true,\n children: props.children,\n fallback: props.fallback,\n when: props.when,\n }) as ShowValue<T> as unknown as JSX.Element\n"],"mappings":";;;;;;;AA0BA,MAAM,qBACJ,UACwC;CACxC,MAAM,cAAc,OAAO,0BAA0B,MAAM;AAC3D,QAAO,YAAY;CAEnB,MAAM,YAAY,EAAE;AACpB,QAAO,iBAAiB,WAAW,YAAY;AAC/C,QAAO;;AAGT,MAAa,YACX,UAGgB;CAChB,MAAM,YAAY,MAAM;AACxB,KAAI,cAAc,QAAQ,cAAc,KAAA,EACtC,QAAO;AAGT,QAAO,OACL,WACA,kBAAkB,MAAM,EACxB,MACA,OACA,EAAE,CACH;;;;AC3BH,MAAa,QAAQ,UAAqB;CACxC,MAAM,iBAAiB,MAAM,mBAAmB;CAChD,MAAM,eACJ,MAAM,aAAa,KAAA,IACf,KAAA,IACA,MAAM,aAAa,OACjB,WACA,MAAM,aAAa,QACjB,SACA,MAAM;CAEhB,MAAM,YAAqC,EACzC,GAAG,OACJ;AAED,KAAI,CAAC,gBAAgB;AACnB,YAAU,mBAAmB;AAC7B,MAAI,aACF,WAAU,uBAAuB;AAEnC,MAAI,MAAM,QACR,WAAU,sBAAsB;;AAGpC,QAAO,UAAU;AACjB,QAAO,UAAU;AACjB,QAAO,UAAU;AAEjB,QAAO;EACL,UAAU;EACV,OAAO;EACP,MAAM;EACP;;AAGH,MAAa,oBAA8B,oBAAoB;AAE/D,MAAa,oBAAmC,oBAAoB;AAEpE,MAAa,uBAAoC,uBAAuB;AAExE,MAAa,sBACX,sBAAsB;AAExB,MAAa,iBAAwBA,YAAoB;;;AC/CzD,MAAM,oBAAoB;AAO1B,MAAM,oBAAoB,QAAwC;CAChE,MAAM,OACJ,IAAI,eAAA,uBAA6C,IAAI,IAAI,eAAA,iBAAuC;AAClG,KAAI,CAAC,MAAM,YACT,QAAO;AAGT,QAAO,KAAK,MAAM,KAAK,YAAY;;AAGrC,MAAM,oBAAoB,QAAiC;CACzD,MAAM,OAAO,IAAI,eAAe,0BAA0B;AAC1D,KAAI,CAAC,MAAM,YACT,QAAO,EAAE;AAGX,QAAO,KAAK,MAAM,KAAK,YAAY;;AAGrC,MAAM,uBAAuB,QAAoC;CAC/D,MAAM,OAAO,IAAI,eAAe,qBAAqB;AACrD,KAAI,CAAC,MAAM,YACT,QAAO,EACL,QAAQ,MACT;AAEH,QAAO,KAAK,MAAM,KAAK,YAAY;;AAGrC,MAAM,iBAAiB,QAAoC;AACzD,KAAI,CAAC,IACH;AAGF,KAAI,GAAG,kBAAkB,OAAO,YAAY;AAE1C,MADe,MAAM,2CAA2C,QAAQ,KACzD,SACb,UAAS,QAAQ;GAEnB;AACF,KAAI,GAAG,mBAAmB,YAAY;AACpC,MAAI;AACF,SAAM,kCAAkC;UAClC;AACN,YAAS,QAAQ;;GAEnB;;AAGJ,cAAe,OAAO,KAA+C,IAAI;AAEzE,MAAa,kBAAkB,OAAO,SAAiC,aAAa;CAClF,MAAM,MAAM,kBAAkB,WAAW,SAAS,OAAO;CACzD,MAAM,OAAO,kBAAkB,WAAW,IAAI,OAAO;CACrD,MAAM,UAAU,iBAAiB,IAAI;AAErC,KAAI,CAAC,QACH;CAGF,MAAM,YAAY,sBAAsB,MAAM,SAAS,EACrD,eAAe,iBAAiB,IAAI,EACrC,CAAC;CACF,IAAI;AACJ,WAAU,qBAAqB,IAAI,SAAe,YAAY;AAC5D,uBAAqB;GACrB;AACF,wBAAuB,UAAU;AAEjC,KAAI;EACF,MAAM,mBAAmB,oBAAoB,IAAI;AACjD,MAAI,iBAAiB,QAAQ;GAC3B,MAAM,SAAU,MAAM;;IAA0B,iBAAiB;;AACjE,uBAAoB;IAClB,SAAS,OAAO;IAChB,WAAW,OAAO;IACnB,CAAC;QAEF,qBAAoB,EAAE,CAAC;AAGzB,QAAM,kBAAkB,UAAU;AAClC,8BAA4B,UAAU;AACtC,QAAM,iCAAiC,UAAU;AACjD,QAAM,iCAAiC,UAAU;AACjD,0BAAwB,UAAU;AAClC,OAAK,aAAa,iBAAiB,UAAU;WACrC;AACR,sBAAoB;AACpB,YAAU,qBAAqB;;;;;ACpHnC,MAAM,kCAAkC;AAOxC,MAAM,0BAA0B,UAC9B,MAAM,QAAQ,MAAM,IAAI,MAAM,QAAS,MAA0C,IAAI;AAEvF,MAAM,kBAAkB,UACtB,CAAC,CAAC,SACF,OAAO,UAAU,YACjB,UAAU,SACV,WAAW,SACV,MAAuB,SAAS;AAEnC,MAAM,oBAAoB,UAA2B;AACnD,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC,KAAK,GAAG;AAE/D,KAAI,UAAU,QAAQ,UAAU,KAAA,KAAa,UAAU,MACrD,QAAO;AAET,KAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU,UAC7E,QAAO,OAAO,MAAM;AAEtB,OAAM,IAAI,UAAU,8DAA8D;;AAGpF,MAAM,4BAA4B,SAA+B,WAC/D,QAAQ,QACL,QAAQ,SAAS,UAChB,SAAS,WAAW,QAAQ,OAAO,SAAS,OAAO,OAAO,OAAO,GAAG,KACtE,GACD;AAEH,MAAM,qBACJ,UAIG;AACH,KAAI,OAAO,UAAU,SACnB,QAAO;EACL,YAAY,EAAE;EACd,SAAS;EACV;AAGH,KAAI,CAAC,eAAe,MAAM,CACxB,OAAM,IAAI,UACR,0FACD;CAGH,MAAM,aAAa,EAAE,GAAG,MAAM,OAAO;CACrC,MAAM,YAAY,WAAW;AAC7B,QAAO,WAAW;AAClB,QAAO,WAAW;AAElB,QAAO;EACL;EACA,SACE,cAAc,KAAA,IACV,iBAAiB,UAAU,GAC3B,iBAAiB,MAAM,MAAM,SAAS;EAC7C;;AAKH,SAAgB,eACd,OACA,GAAG,QACG;CACN,MAAM,WAAW,uBAAuB,MAAM,GAC1C;EACE,YAAY,EAAE;EACd,SAAS,yBAAyB,OAAO,OAAO;EACjD,GACD,kBAAkB,MAAM;AAE5B,4BAA2B,SAAS,SAAS,SAAS,WAAW;;;;AClEnE,MAAa,OAAU,WAMpB;CACC,SAAS;CACT,KAAK,MAAM;CACX,UAAU,MAAM;CAChB,IAAI,MAAM;CACV,KAAK,MAAM;CACZ;AAEH,MAAa,QAAW,WACrB;CACC,UAAU;CACV,UAAU,MAAM;CAChB,UAAU,MAAM;CAChB,MAAM,MAAM;CACb"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eclipsa",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "homepage": "https://github.com/pnsk-lab/eclipsa",
5
5
  "bugs": {
6
6
  "url": "https://github.com/pnsk-lab/eclipsa/issues"
@@ -29,6 +29,10 @@
29
29
  "types": "./vite/mod.d.mts",
30
30
  "import": "./vite/mod.mjs"
31
31
  },
32
+ "./vite/build/runtime": {
33
+ "types": "./vite/build/runtime.d.mts",
34
+ "import": "./vite/build/runtime.mjs"
35
+ },
32
36
  "./jsx-runtime": {
33
37
  "types": "./jsx/jsx-runtime.d.mts",
34
38
  "import": "./jsx/jsx-runtime.mjs"
@@ -59,7 +63,7 @@
59
63
  }
60
64
  },
61
65
  "dependencies": {
62
- "@eclipsa/optimizer": "^0.1.4",
66
+ "@eclipsa/optimizer": "^0.1.5",
63
67
  "fast-glob": "^3.3.2",
64
68
  "hono": "^4.6.4"
65
69
  },
@@ -19,4 +19,4 @@ declare const useComputed: <T>(fn: () => T | Promise<T>, dependencies?: WatchDep
19
19
  declare const useComputed$: <T>(fn: () => T | Promise<T>, dependencies?: WatchDependency[]) => Signal<T>;
20
20
  //#endregion
21
21
  export { onMount as a, useComputed as c, useWatch as d, onCleanup as i, useComputed$ as l, WatchDependency as n, onVisible as o, effect as r, signal as s, Signal as t, useSignal as u };
22
- //# sourceMappingURL=signal-B7AfIKrr.d.mts.map
22
+ //# sourceMappingURL=signal-CosyYdtA.d.mts.map
@@ -1,4 +1,4 @@
1
- import { A as createWatch, D as createOnVisible, E as createOnMount, N as getRuntimeContainer, P as getRuntimeSignalId, T as createOnCleanup, V as readAsyncSignalSnapshot, _n as isPendingSignalError, dt as useRuntimeSignal, gn as createPendingSignalError, k as createStandaloneRuntimeSignal, pt as writeAsyncSignalSnapshot, w as createEffect } from "./action-CgM3EJUS.mjs";
1
+ import { An as isPendingSignalError, C as createOnCleanup, D as createStandaloneRuntimeSignal, M as getRuntimeSignalId, O as createWatch, S as createEffect, T as createOnVisible, dt as writeAsyncSignalSnapshot, j as getRuntimeContainer, kn as createPendingSignalError, lt as useRuntimeSignal, w as createOnMount, z as readAsyncSignalSnapshot } from "./action-DqgkV3zb.mjs";
2
2
  //#region core/signal.ts
3
3
  const isPromiseLike = (value) => !!value && typeof value === "object" && "then" in value && typeof value.then === "function";
4
4
  const isComputedSnapshot = (value) => !!value && typeof value === "object" && value.__e_async_computed === true;
@@ -105,4 +105,4 @@ const useComputed$ = useComputed;
105
105
  //#endregion
106
106
  export { signal as a, useSignal as c, onVisible as i, useWatch as l, onCleanup as n, useComputed as o, onMount as r, useComputed$ as s, effect as t };
107
107
 
108
- //# sourceMappingURL=signal-CJtquEfo.mjs.map
108
+ //# sourceMappingURL=signal-DBzloBrN.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"signal-CJtquEfo.mjs","names":[],"sources":["../core/signal.ts"],"sourcesContent":["import {\n createStandaloneRuntimeSignal,\n createEffect,\n createOnCleanup,\n createOnMount,\n createOnVisible,\n createWatch,\n getRuntimeContainer,\n getRuntimeSignalId,\n readAsyncSignalSnapshot,\n useRuntimeSignal,\n writeAsyncSignalSnapshot,\n} from './runtime.ts'\nimport { createPendingSignalError, isPendingSignalError } from './suspense.ts'\n\nexport interface Signal<T> {\n value: T\n}\n\ninterface SignalFactory {\n <T>(value: T): Signal<T>\n <T>(value?: T | undefined): Signal<T | undefined>\n computed<T>(value: () => T | Promise<T>, dependencies?: WatchDependency[]): Signal<T>\n}\n\ninterface ComputedSnapshot<T> {\n __e_async_computed: true\n error?: unknown\n promise?: Promise<T>\n status: 'pending' | 'rejected' | 'resolved'\n value?: T\n}\n\nexport type WatchDependency<T = unknown> = Signal<T> | (() => T)\n\nconst isPromiseLike = <T>(value: unknown): value is Promise<T> =>\n !!value && typeof value === 'object' && 'then' in value && typeof value.then === 'function'\n\nconst isComputedSnapshot = <T>(value: unknown): value is ComputedSnapshot<T> =>\n !!value && typeof value === 'object' && (value as ComputedSnapshot<T>).__e_async_computed === true\n\nconst createComputedSnapshot = <T>(\n snapshot: Omit<ComputedSnapshot<T>, '__e_async_computed'>,\n): ComputedSnapshot<T> => ({\n __e_async_computed: true,\n ...snapshot,\n})\n\nconst createComputedSignalFactory =\n (createBaseSignal: <T>(value: T) => Signal<T>): SignalFactory['computed'] =>\n <T>(fn: () => T | Promise<T>, dependencies?: WatchDependency[]) => {\n const state = createBaseSignal<ComputedSnapshot<T>>(\n createComputedSnapshot({\n status: 'pending',\n }),\n )\n const runtimeContainer = getRuntimeContainer()\n const signalId = getRuntimeSignalId(state)\n const seededSnapshot =\n signalId !== null\n ? (readAsyncSignalSnapshot(signalId, runtimeContainer) as ComputedSnapshot<T> | undefined)\n : undefined\n let useSeededSnapshot = !!seededSnapshot && seededSnapshot.status !== 'pending'\n let version = 0\n\n createEffect(\n () => {\n if (useSeededSnapshot && seededSnapshot) {\n useSeededSnapshot = false\n state.value = seededSnapshot\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, seededSnapshot, runtimeContainer)\n }\n return\n }\n\n const currentVersion = ++version\n try {\n const nextValue = fn()\n if (isPromiseLike<T>(nextValue)) {\n const pending = createComputedSnapshot<T>({\n promise: nextValue,\n status: 'pending',\n })\n state.value = pending\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, pending, runtimeContainer)\n }\n nextValue.then(\n (resolved) => {\n if (currentVersion !== version) {\n return\n }\n const completed = createComputedSnapshot<T>({\n status: 'resolved',\n value: resolved,\n })\n state.value = completed\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, completed, runtimeContainer)\n }\n },\n (error) => {\n if (currentVersion !== version) {\n return\n }\n const failed = createComputedSnapshot<T>({\n error,\n status: 'rejected',\n })\n state.value = failed\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, failed, runtimeContainer)\n }\n },\n )\n return\n }\n\n const resolved = createComputedSnapshot<T>({\n status: 'resolved',\n value: nextValue,\n })\n state.value = resolved\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, resolved, runtimeContainer)\n }\n } catch (error) {\n if (isPendingSignalError(error)) {\n const pending = createComputedSnapshot<T>({\n promise: error.promise as Promise<T>,\n status: 'pending',\n })\n state.value = pending\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, pending, runtimeContainer)\n }\n return\n }\n const failed = createComputedSnapshot<T>({\n error,\n status: 'rejected',\n })\n state.value = failed\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, failed, runtimeContainer)\n }\n }\n },\n dependencies\n ? {\n dependencies,\n errorLabel: 'useComputed',\n untracked: true,\n }\n : undefined,\n )\n\n const handle = {} as Signal<T>\n Object.defineProperty(handle, 'value', {\n configurable: true,\n enumerable: true,\n get() {\n const snapshot = state.value\n if (!isComputedSnapshot<T>(snapshot)) {\n return snapshot as T\n }\n if (snapshot.status === 'pending') {\n throw createPendingSignalError(snapshot.promise ?? Promise.resolve(undefined))\n }\n if (snapshot.status === 'rejected') {\n throw snapshot.error\n }\n return snapshot.value as T\n },\n })\n return handle\n }\n\nexport const signal = ((value) => createStandaloneRuntimeSignal(value)) as SignalFactory\n\nexport const useSignal = ((value) => useRuntimeSignal(value)) as SignalFactory\n\nsignal.computed = createComputedSignalFactory((value) => createStandaloneRuntimeSignal(value))\nuseSignal.computed = createComputedSignalFactory((value) => useRuntimeSignal(value))\n\nexport const effect = (fn: () => void) => createEffect(fn)\nexport const onCleanup = (fn: () => void) => createOnCleanup(fn)\nexport const onMount = (fn: () => void) => createOnMount(fn)\nexport const onVisible = (fn: () => void) => createOnVisible(fn)\nexport const useWatch = (fn: () => void, dependencies?: WatchDependency[]) =>\n createWatch(fn, dependencies)\n\nexport const useComputed = <T>(fn: () => T | Promise<T>, dependencies?: WatchDependency[]) =>\n useSignal.computed(fn, dependencies)\nexport const useComputed$ = useComputed\n"],"mappings":"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"}
1
+ {"version":3,"file":"signal-DBzloBrN.mjs","names":[],"sources":["../core/signal.ts"],"sourcesContent":["import {\n createStandaloneRuntimeSignal,\n createEffect,\n createOnCleanup,\n createOnMount,\n createOnVisible,\n createWatch,\n getRuntimeContainer,\n getRuntimeSignalId,\n readAsyncSignalSnapshot,\n useRuntimeSignal,\n writeAsyncSignalSnapshot,\n} from './runtime.ts'\nimport { createPendingSignalError, isPendingSignalError } from './suspense.ts'\n\nexport interface Signal<T> {\n value: T\n}\n\ninterface SignalFactory {\n <T>(value: T): Signal<T>\n <T>(value?: T | undefined): Signal<T | undefined>\n computed<T>(value: () => T | Promise<T>, dependencies?: WatchDependency[]): Signal<T>\n}\n\ninterface ComputedSnapshot<T> {\n __e_async_computed: true\n error?: unknown\n promise?: Promise<T>\n status: 'pending' | 'rejected' | 'resolved'\n value?: T\n}\n\nexport type WatchDependency<T = unknown> = Signal<T> | (() => T)\n\nconst isPromiseLike = <T>(value: unknown): value is Promise<T> =>\n !!value && typeof value === 'object' && 'then' in value && typeof value.then === 'function'\n\nconst isComputedSnapshot = <T>(value: unknown): value is ComputedSnapshot<T> =>\n !!value && typeof value === 'object' && (value as ComputedSnapshot<T>).__e_async_computed === true\n\nconst createComputedSnapshot = <T>(\n snapshot: Omit<ComputedSnapshot<T>, '__e_async_computed'>,\n): ComputedSnapshot<T> => ({\n __e_async_computed: true,\n ...snapshot,\n})\n\nconst createComputedSignalFactory =\n (createBaseSignal: <T>(value: T) => Signal<T>): SignalFactory['computed'] =>\n <T>(fn: () => T | Promise<T>, dependencies?: WatchDependency[]) => {\n const state = createBaseSignal<ComputedSnapshot<T>>(\n createComputedSnapshot({\n status: 'pending',\n }),\n )\n const runtimeContainer = getRuntimeContainer()\n const signalId = getRuntimeSignalId(state)\n const seededSnapshot =\n signalId !== null\n ? (readAsyncSignalSnapshot(signalId, runtimeContainer) as ComputedSnapshot<T> | undefined)\n : undefined\n let useSeededSnapshot = !!seededSnapshot && seededSnapshot.status !== 'pending'\n let version = 0\n\n createEffect(\n () => {\n if (useSeededSnapshot && seededSnapshot) {\n useSeededSnapshot = false\n state.value = seededSnapshot\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, seededSnapshot, runtimeContainer)\n }\n return\n }\n\n const currentVersion = ++version\n try {\n const nextValue = fn()\n if (isPromiseLike<T>(nextValue)) {\n const pending = createComputedSnapshot<T>({\n promise: nextValue,\n status: 'pending',\n })\n state.value = pending\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, pending, runtimeContainer)\n }\n nextValue.then(\n (resolved) => {\n if (currentVersion !== version) {\n return\n }\n const completed = createComputedSnapshot<T>({\n status: 'resolved',\n value: resolved,\n })\n state.value = completed\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, completed, runtimeContainer)\n }\n },\n (error) => {\n if (currentVersion !== version) {\n return\n }\n const failed = createComputedSnapshot<T>({\n error,\n status: 'rejected',\n })\n state.value = failed\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, failed, runtimeContainer)\n }\n },\n )\n return\n }\n\n const resolved = createComputedSnapshot<T>({\n status: 'resolved',\n value: nextValue,\n })\n state.value = resolved\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, resolved, runtimeContainer)\n }\n } catch (error) {\n if (isPendingSignalError(error)) {\n const pending = createComputedSnapshot<T>({\n promise: error.promise as Promise<T>,\n status: 'pending',\n })\n state.value = pending\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, pending, runtimeContainer)\n }\n return\n }\n const failed = createComputedSnapshot<T>({\n error,\n status: 'rejected',\n })\n state.value = failed\n if (signalId !== null) {\n writeAsyncSignalSnapshot(signalId, failed, runtimeContainer)\n }\n }\n },\n dependencies\n ? {\n dependencies,\n errorLabel: 'useComputed',\n untracked: true,\n }\n : undefined,\n )\n\n const handle = {} as Signal<T>\n Object.defineProperty(handle, 'value', {\n configurable: true,\n enumerable: true,\n get() {\n const snapshot = state.value\n if (!isComputedSnapshot<T>(snapshot)) {\n return snapshot as T\n }\n if (snapshot.status === 'pending') {\n throw createPendingSignalError(snapshot.promise ?? Promise.resolve(undefined))\n }\n if (snapshot.status === 'rejected') {\n throw snapshot.error\n }\n return snapshot.value as T\n },\n })\n return handle\n }\n\nexport const signal = ((value) => createStandaloneRuntimeSignal(value)) as SignalFactory\n\nexport const useSignal = ((value) => useRuntimeSignal(value)) as SignalFactory\n\nsignal.computed = createComputedSignalFactory((value) => createStandaloneRuntimeSignal(value))\nuseSignal.computed = createComputedSignalFactory((value) => useRuntimeSignal(value))\n\nexport const effect = (fn: () => void) => createEffect(fn)\nexport const onCleanup = (fn: () => void) => createOnCleanup(fn)\nexport const onMount = (fn: () => void) => createOnMount(fn)\nexport const onVisible = (fn: () => void) => createOnVisible(fn)\nexport const useWatch = (fn: () => void, dependencies?: WatchDependency[]) =>\n createWatch(fn, dependencies)\n\nexport const useComputed = <T>(fn: () => T | Promise<T>, dependencies?: WatchDependency[]) =>\n useSignal.computed(fn, dependencies)\nexport const useComputed$ = useComputed\n"],"mappings":"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"}
@@ -0,0 +1,157 @@
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-DqgkV3zb.mjs";
2
+ import { renderToString } from "./jsx/mod.mjs";
3
+ //#region core/ssr.ts
4
+ const collectRenderedComponentIdsFromHtml = (html) => {
5
+ const ids = /* @__PURE__ */ new Set();
6
+ for (const match of html.matchAll(/<!--ec:c:([^:]+):start-->/g)) {
7
+ const id = match[1];
8
+ if (id) ids.add(id);
9
+ }
10
+ return ids;
11
+ };
12
+ const createStreamingResumePayload = (container, renderedComponentIds) => toResumePayloadSubset(container, ["$root", ...renderedComponentIds]);
13
+ const getPendingSuspensePromises = (container) => collectPendingSuspenseBoundaryIds(container).map((boundaryId) => container.components.get(boundaryId)?.suspensePromise ?? null).filter((promise) => !!promise);
14
+ const renderSSR = (render, options) => {
15
+ const { container, result } = beginSSRContainer(options?.symbols ?? {}, render);
16
+ return {
17
+ html: withRuntimeContainer(container, () => renderToString(result)),
18
+ payload: toResumePayload(container)
19
+ };
20
+ };
21
+ const renderSSRAsync = async (render, options) => {
22
+ const asyncSignalSnapshotCache = /* @__PURE__ */ new Map();
23
+ const externalRenderCache = /* @__PURE__ */ new Map();
24
+ const seededLoaderStates = /* @__PURE__ */ new Map();
25
+ for (let attempt = 0; attempt < 10; attempt += 1) {
26
+ const { container, result } = await beginAsyncSSRContainer(options?.symbols ?? {}, render, async (runtimeContainer) => {
27
+ for (const [id, snapshot] of seededLoaderStates) runtimeContainer.loaderStates.set(id, {
28
+ data: snapshot.data,
29
+ error: snapshot.error,
30
+ loaded: snapshot.loaded
31
+ });
32
+ await options?.prepare?.(runtimeContainer);
33
+ }, {
34
+ asyncSignalSnapshotCache,
35
+ externalRenderCache
36
+ });
37
+ try {
38
+ const html = withRuntimeContainer(container, () => renderToString(result));
39
+ const pendingSuspensePromises = getPendingSuspensePromises(container);
40
+ if (container.pendingSuspensePromises.size > 0 || pendingSuspensePromises.length > 0) {
41
+ await Promise.allSettled([...container.pendingSuspensePromises, ...pendingSuspensePromises]);
42
+ continue;
43
+ }
44
+ asyncSignalSnapshotCache.clear();
45
+ return {
46
+ html,
47
+ payload: toResumePayload(container)
48
+ };
49
+ } catch (error) {
50
+ const { isPendingSsrLoaderError, resolvePendingLoaders } = await import("./action-DqgkV3zb.mjs").then((n) => n.in);
51
+ if (!isPendingSsrLoaderError(error)) throw error;
52
+ if (!(options?.resolvePendingLoaders ? await options.resolvePendingLoaders(container) : options?.context ? await resolvePendingLoaders(container, options.context) : false)) throw error;
53
+ seededLoaderStates.clear();
54
+ for (const [id, snapshot] of container.loaderStates) seededLoaderStates.set(id, {
55
+ data: snapshot.data,
56
+ error: snapshot.error,
57
+ loaded: snapshot.loaded
58
+ });
59
+ }
60
+ }
61
+ throw new Error("SSR loader resolution did not converge.");
62
+ };
63
+ const extractBoundaryHtml = (html, boundaryId) => {
64
+ const startToken = createComponentBoundaryHtmlComment(boundaryId, "start");
65
+ const endToken = createComponentBoundaryHtmlComment(boundaryId, "end");
66
+ const startIndex = html.indexOf(startToken);
67
+ if (startIndex < 0) return null;
68
+ const endIndex = html.indexOf(endToken, startIndex + startToken.length);
69
+ if (endIndex < 0) return null;
70
+ return html.slice(startIndex + startToken.length, endIndex);
71
+ };
72
+ const renderStreamingAttempt = async (render, options, seededLoaderStates, asyncSignalSnapshotCache, externalRenderCache) => {
73
+ for (let attempt = 0; attempt < 10; attempt += 1) {
74
+ const { container, result } = await beginAsyncSSRContainer(options.symbols ?? {}, render, async (runtimeContainer) => {
75
+ for (const [id, snapshot] of seededLoaderStates) runtimeContainer.loaderStates.set(id, {
76
+ data: snapshot.data,
77
+ error: snapshot.error,
78
+ loaded: snapshot.loaded
79
+ });
80
+ await options.prepare?.(runtimeContainer);
81
+ }, {
82
+ asyncSignalSnapshotCache,
83
+ externalRenderCache
84
+ });
85
+ try {
86
+ const html = withRuntimeContainer(container, () => renderToString(result));
87
+ if (container.pendingSuspensePromises.size > 0) {
88
+ await Promise.allSettled(container.pendingSuspensePromises);
89
+ continue;
90
+ }
91
+ return {
92
+ container,
93
+ html,
94
+ payload: createStreamingResumePayload(container, collectRenderedComponentIdsFromHtml(html)),
95
+ pendingBoundaryIds: collectPendingSuspenseBoundaryIds(container)
96
+ };
97
+ } catch (error) {
98
+ const { isPendingSsrLoaderError, resolvePendingLoaders } = await import("./action-DqgkV3zb.mjs").then((n) => n.in);
99
+ if (!isPendingSsrLoaderError(error)) throw error;
100
+ if (!(options.resolvePendingLoaders ? await options.resolvePendingLoaders(container) : options.context ? await resolvePendingLoaders(container, options.context) : false)) throw error;
101
+ seededLoaderStates.clear();
102
+ for (const [id, snapshot] of container.loaderStates) seededLoaderStates.set(id, {
103
+ data: snapshot.data,
104
+ error: snapshot.error,
105
+ loaded: snapshot.loaded
106
+ });
107
+ }
108
+ }
109
+ throw new Error("SSR loader resolution did not converge.");
110
+ };
111
+ const renderSSRStream = async (render, options) => {
112
+ const asyncSignalSnapshotCache = /* @__PURE__ */ new Map();
113
+ const externalRenderCache = /* @__PURE__ */ new Map();
114
+ const seededLoaderStates = /* @__PURE__ */ new Map();
115
+ const initial = await renderStreamingAttempt(render, options ?? {}, seededLoaderStates, asyncSignalSnapshotCache, externalRenderCache);
116
+ if (initial.pendingBoundaryIds.length === 0) {
117
+ asyncSignalSnapshotCache.clear();
118
+ return {
119
+ chunks: (async function* () {})(),
120
+ html: initial.html,
121
+ payload: initial.payload
122
+ };
123
+ }
124
+ return {
125
+ chunks: (async function* () {
126
+ let current = initial;
127
+ try {
128
+ while (current.pendingBoundaryIds.length > 0) {
129
+ await Promise.race(current.pendingBoundaryIds.map((boundaryId) => current.container.components.get(boundaryId)?.suspensePromise?.then(() => boundaryId, () => boundaryId) ?? Promise.resolve(boundaryId)));
130
+ const next = await renderStreamingAttempt(render, options ?? {}, seededLoaderStates, asyncSignalSnapshotCache, externalRenderCache);
131
+ const nextPending = new Set(next.pendingBoundaryIds);
132
+ const completedIds = current.pendingBoundaryIds.filter((boundaryId) => !nextPending.has(boundaryId)).sort((left, right) => left.split(".").length - right.split(".").length);
133
+ for (const boundaryId of completedIds) {
134
+ const boundaryHtml = extractBoundaryHtml(next.html, boundaryId);
135
+ if (boundaryHtml === null) continue;
136
+ yield {
137
+ boundaryId,
138
+ html: boundaryHtml,
139
+ payload: next.payload
140
+ };
141
+ }
142
+ current = next;
143
+ }
144
+ } finally {
145
+ asyncSignalSnapshotCache.clear();
146
+ }
147
+ })(),
148
+ html: initial.html,
149
+ payload: initial.payload
150
+ };
151
+ };
152
+ const serializeResumePayload = (payload) => getResumePayloadScriptContent(payload);
153
+ const getStreamingResumeBootstrapScriptContent = () => getStreamingResumeBootstrapScriptContent$1();
154
+ //#endregion
155
+ export { serializeResumePayload as a, renderSSRStream as i, renderSSR as n, renderSSRAsync as r, getStreamingResumeBootstrapScriptContent as t };
156
+
157
+ //# sourceMappingURL=ssr-CRg57Wn2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr-CRg57Wn2.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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"}
@@ -0,0 +1,37 @@
1
+ import { i as JSX } from "./types-Cu9gFlEY.mjs";
2
+ import { Rt as ResumePayload, zt as RuntimeContainer } from "./internal-CHYAJznU.mjs";
3
+ import { Context } from "hono";
4
+
5
+ //#region core/ssr.d.ts
6
+ interface SSRRenderResult {
7
+ html: string;
8
+ payload: ResumePayload;
9
+ }
10
+ interface SSRStreamChunk {
11
+ boundaryId: string;
12
+ html: string;
13
+ payload: ResumePayload;
14
+ }
15
+ interface SSRStreamRenderResult extends SSRRenderResult {
16
+ chunks: AsyncIterable<SSRStreamChunk>;
17
+ }
18
+ declare const renderSSR: (render: () => JSX.Element | JSX.Element[], options?: {
19
+ symbols?: Record<string, string>;
20
+ }) => SSRRenderResult;
21
+ declare const renderSSRAsync: (render: () => JSX.Element | JSX.Element[], options?: {
22
+ context?: Context<any>;
23
+ prepare?: (container: RuntimeContainer) => void | Promise<void>;
24
+ resolvePendingLoaders?: (container: RuntimeContainer) => void | Promise<boolean>;
25
+ symbols?: Record<string, string>;
26
+ }) => Promise<SSRRenderResult>;
27
+ declare const renderSSRStream: (render: () => JSX.Element | JSX.Element[], options?: {
28
+ context?: Context<any>;
29
+ prepare?: (container: RuntimeContainer) => void | Promise<void>;
30
+ resolvePendingLoaders?: (container: RuntimeContainer) => void | Promise<boolean>;
31
+ symbols?: Record<string, string>;
32
+ }) => Promise<SSRStreamRenderResult>;
33
+ declare const serializeResumePayload: (payload: ResumePayload) => string;
34
+ declare const getStreamingResumeBootstrapScriptContent: () => string;
35
+ //#endregion
36
+ export { renderSSR as a, serializeResumePayload as c, getStreamingResumeBootstrapScriptContent as i, SSRStreamChunk as n, renderSSRAsync as o, SSRStreamRenderResult as r, renderSSRStream as s, SSRRenderResult as t };
37
+ //# sourceMappingURL=ssr-D8F-DtCv.d.mts.map