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.
- package/{action-CgM3EJUS.mjs → action-DqgkV3zb.mjs} +1584 -996
- package/action-DqgkV3zb.mjs.map +1 -0
- package/{client-COjBNTyt.mjs → client-DKPmN-wJ.mjs} +126 -40
- package/client-DKPmN-wJ.mjs.map +1 -0
- package/{component-D_nEtZ69.d.mts → component-yvTtnI00.d.mts} +2 -2
- package/core/client/mod.d.mts +2 -2
- package/core/client/mod.mjs +3 -3
- package/core/dev-client/mod.d.mts +1 -1
- package/core/dev-client/mod.mjs +10 -5
- package/core/dev-client/mod.mjs.map +1 -1
- package/core/internal.d.mts +2 -2
- package/core/internal.mjs +2 -2
- package/core/prod-client/mod.d.mts +3 -3
- package/core/prod-client/mod.mjs +4 -4
- package/{internal-Csbm0Qnv.d.mts → internal-CHYAJznU.d.mts} +116 -72
- package/jsx/jsx-dev-runtime.d.mts +8 -2
- package/jsx/jsx-dev-runtime.mjs +2 -2
- package/jsx/jsx-runtime.d.mts +1 -1
- package/jsx/mod.d.mts +1 -1
- package/jsx/mod.mjs +1 -1
- package/{jsx-dev-runtime-CY60yQJY.mjs → jsx-dev-runtime-DpbWQ4Q0.mjs} +8 -3
- package/jsx-dev-runtime-DpbWQ4Q0.mjs.map +1 -0
- package/{mod-DLb8ple9.d.mts → mod-aLmFvMYF.d.mts} +4 -4
- package/mod.d.mts +20 -38
- package/mod.mjs +19 -145
- package/mod.mjs.map +1 -1
- package/package.json +6 -2
- package/{signal-B7AfIKrr.d.mts → signal-CosyYdtA.d.mts} +1 -1
- package/{signal-CJtquEfo.mjs → signal-DBzloBrN.mjs} +2 -2
- package/{signal-CJtquEfo.mjs.map → signal-DBzloBrN.mjs.map} +1 -1
- package/ssr-CRg57Wn2.mjs +157 -0
- package/ssr-CRg57Wn2.mjs.map +1 -0
- package/ssr-D8F-DtCv.d.mts +37 -0
- package/{types-BCEY9lGp.d.mts → types-Cu9gFlEY.d.mts} +6 -2
- package/{types-DKpefD_u.d.mts → types-DDeNM8UH.d.mts} +1 -1
- package/vite/build/runtime.d.mts +4 -0
- package/vite/build/runtime.mjs +4 -0
- package/vite/mod.mjs +257 -38
- package/vite/mod.mjs.map +1 -1
- package/web-utils/mod.d.mts +1 -1
- package/web-utils/mod.mjs +2 -2
- package/action-CgM3EJUS.mjs.map +0 -1
- package/client-COjBNTyt.mjs.map +0 -1
- package/jsx-dev-runtime-CY60yQJY.mjs.map +0 -1
- /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
|
|
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-
|
|
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 {
|
|
6
|
-
//#region core/
|
|
7
|
-
const
|
|
8
|
-
const
|
|
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":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eclipsa",
|
|
3
|
-
"version": "0.1.
|
|
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.
|
|
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-
|
|
22
|
+
//# sourceMappingURL=signal-CosyYdtA.d.mts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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-
|
|
108
|
+
//# sourceMappingURL=signal-DBzloBrN.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal-
|
|
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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"}
|
package/ssr-CRg57Wn2.mjs
ADDED
|
@@ -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":";;;AAgCA,MAAM,uCAAuC,SAAiB;CAC5D,MAAM,sBAAM,IAAI,KAAa;AAE7B,MAAK,MAAM,SAAS,KAAK,SADT,6BAC0B,EAAE;EAC1C,MAAM,KAAK,MAAM;AACjB,MAAI,GACF,KAAI,IAAI,GAAG;;AAGf,QAAO;;AAGT,MAAM,gCACJ,WACA,yBACkB,sBAAsB,WAAW,CAAC,SAAS,GAAG,qBAAqB,CAAC;AAExF,MAAM,8BAA8B,cAClC,kCAAkC,UAAU,CACzC,KAAK,eAAe,UAAU,WAAW,IAAI,WAAW,EAAE,mBAAmB,KAAK,CAClF,QAAQ,YAAyC,CAAC,CAAC,QAAQ;AAEhE,MAAa,aACX,QACA,YAGoB;CACpB,MAAM,EAAE,WAAW,WAAW,kBAAkB,SAAS,WAAW,EAAE,EAAE,OAAO;AAC/E,QAAO;EACL,MAAM,qBAAqB,iBAAiB,eAAe,OAAO,CAAC;EACnE,SAAS,gBAAgB,UAAU;EACpC;;AAGH,MAAa,iBAAiB,OAC5B,QACA,YAM6B;CAC7B,MAAM,2CAA2B,IAAI,KAAsB;CAC3D,MAAM,sCAAsB,IAAI,KAQ7B;CACH,MAAM,qCAAqB,IAAI,KAAiE;AAEhG,MAAK,IAAI,UAAU,GAAG,UAAU,IAAI,WAAW,GAAG;EAChD,MAAM,EAAE,WAAW,WAAW,MAAM,uBAClC,SAAS,WAAW,EAAE,EACtB,QACA,OAAO,qBAAqB;AAC1B,QAAK,MAAM,CAAC,IAAI,aAAa,mBAC3B,kBAAiB,aAAa,IAAI,IAAI;IACpC,MAAM,SAAS;IACf,OAAO,SAAS;IAChB,QAAQ,SAAS;IAClB,CAAC;AAEJ,SAAM,SAAS,UAAU,iBAAiB;KAE5C;GACE;GACA;GACD,CACF;AAED,MAAI;GACF,MAAM,OAAO,qBAAqB,iBAAiB,eAAe,OAAO,CAAC;GAC1E,MAAM,0BAA0B,2BAA2B,UAAU;AACrE,OAAI,UAAU,wBAAwB,OAAO,KAAK,wBAAwB,SAAS,GAAG;AACpF,UAAM,QAAQ,WAAW,CAAC,GAAG,UAAU,yBAAyB,GAAG,wBAAwB,CAAC;AAC5F;;AAEF,4BAAyB,OAAO;AAChC,UAAO;IACL;IACA,SAAS,gBAAgB,UAAU;IACpC;WACM,OAAO;GACd,MAAM,EAAE,yBAAyB,0BAA0B,MAAM,OAAO,yBAAA,MAAA,MAAA,EAAA,GAAA;AACxE,OAAI,CAAC,wBAAwB,MAAM,CACjC,OAAM;AAOR,OAAI,EALa,SAAS,wBACtB,MAAM,QAAQ,sBAAsB,UAAU,GAC9C,SAAS,UACP,MAAM,sBAAsB,WAAW,QAAQ,QAAQ,GACvD,OAEJ,OAAM;AAER,sBAAmB,OAAO;AAC1B,QAAK,MAAM,CAAC,IAAI,aAAa,UAAU,aACrC,oBAAmB,IAAI,IAAI;IACzB,MAAM,SAAS;IACf,OAAO,SAAS;IAChB,QAAQ,SAAS;IAClB,CAAC;;;AAKR,OAAM,IAAI,MAAM,0CAA0C;;AAG5D,MAAM,uBAAuB,MAAc,eAAuB;CAChE,MAAM,aAAa,mCAAmC,YAAY,QAAQ;CAC1E,MAAM,WAAW,mCAAmC,YAAY,MAAM;CACtE,MAAM,aAAa,KAAK,QAAQ,WAAW;AAC3C,KAAI,aAAa,EACf,QAAO;CAET,MAAM,WAAW,KAAK,QAAQ,UAAU,aAAa,WAAW,OAAO;AACvE,KAAI,WAAW,EACb,QAAO;AAET,QAAO,KAAK,MAAM,aAAa,WAAW,QAAQ,SAAS;;AAG7D,MAAM,yBAAyB,OAC7B,QACA,SAMA,oBACA,0BACA,wBAcI;AACJ,MAAK,IAAI,UAAU,GAAG,UAAU,IAAI,WAAW,GAAG;EAChD,MAAM,EAAE,WAAW,WAAW,MAAM,uBAClC,QAAQ,WAAW,EAAE,EACrB,QACA,OAAO,qBAAqB;AAC1B,QAAK,MAAM,CAAC,IAAI,aAAa,mBAC3B,kBAAiB,aAAa,IAAI,IAAI;IACpC,MAAM,SAAS;IACf,OAAO,SAAS;IAChB,QAAQ,SAAS;IAClB,CAAC;AAEJ,SAAM,QAAQ,UAAU,iBAAiB;KAE3C;GACE;GACA;GACD,CACF;AAED,MAAI;GACF,MAAM,OAAO,qBAAqB,iBAAiB,eAAe,OAAO,CAAC;AAC1E,OAAI,UAAU,wBAAwB,OAAO,GAAG;AAC9C,UAAM,QAAQ,WAAW,UAAU,wBAAwB;AAC3D;;AAGF,UAAO;IACL;IACA;IACA,SAAS,6BAA6B,WAJX,oCAAoC,KAAK,CAIE;IACtE,oBAAoB,kCAAkC,UAAU;IACjE;WACM,OAAO;GACd,MAAM,EAAE,yBAAyB,0BAA0B,MAAM,OAAO,yBAAA,MAAA,MAAA,EAAA,GAAA;AACxE,OAAI,CAAC,wBAAwB,MAAM,CACjC,OAAM;AAOR,OAAI,EALa,QAAQ,wBACrB,MAAM,QAAQ,sBAAsB,UAAU,GAC9C,QAAQ,UACN,MAAM,sBAAsB,WAAW,QAAQ,QAAQ,GACvD,OAEJ,OAAM;AAER,sBAAmB,OAAO;AAC1B,QAAK,MAAM,CAAC,IAAI,aAAa,UAAU,aACrC,oBAAmB,IAAI,IAAI;IACzB,MAAM,SAAS;IACf,OAAO,SAAS;IAChB,QAAQ,SAAS;IAClB,CAAC;;;AAKR,OAAM,IAAI,MAAM,0CAA0C;;AAG5D,MAAa,kBAAkB,OAC7B,QACA,YAMmC;CACnC,MAAM,2CAA2B,IAAI,KAAsB;CAC3D,MAAM,sCAAsB,IAAI,KAQ7B;CACH,MAAM,qCAAqB,IAAI,KAAiE;CAChG,MAAM,UAAU,MAAM,uBACpB,QACA,WAAW,EAAE,EACb,oBACA,0BACA,oBACD;AAED,KAAI,QAAQ,mBAAmB,WAAW,GAAG;AAC3C,2BAAyB,OAAO;AAChC,SAAO;GACL,SAAS,mBAAmB,KAAK;GACjC,MAAM,QAAQ;GACd,SAAS,QAAQ;GAClB;;AAkDH,QAAO;EACL,SAhDc,mBAAmB;GACjC,IAAI,UAAU;AAEd,OAAI;AACF,WAAO,QAAQ,mBAAmB,SAAS,GAAG;AAC5C,WAAM,QAAQ,KACZ,QAAQ,mBAAmB,KACxB,eACC,QAAQ,UAAU,WAAW,IAAI,WAAW,EAAE,iBAAiB,WACvD,kBACA,WACP,IAAI,QAAQ,QAAQ,WAAW,CACnC,CACF;KAED,MAAM,OAAO,MAAM,uBACjB,QACA,WAAW,EAAE,EACb,oBACA,0BACA,oBACD;KAED,MAAM,cAAc,IAAI,IAAI,KAAK,mBAAmB;KACpD,MAAM,eAAe,QAAQ,mBAC1B,QAAQ,eAAe,CAAC,YAAY,IAAI,WAAW,CAAC,CACpD,MAAM,MAAM,UAAU,KAAK,MAAM,IAAI,CAAC,SAAS,MAAM,MAAM,IAAI,CAAC,OAAO;AAE1E,UAAK,MAAM,cAAc,cAAc;MACrC,MAAM,eAAe,oBAAoB,KAAK,MAAM,WAAW;AAC/D,UAAI,iBAAiB,KACnB;AAEF,YAAM;OACJ;OACA,MAAM;OACN,SAAS,KAAK;OACf;;AAGH,eAAU;;aAEJ;AACR,6BAAyB,OAAO;;MAEhC;EAIF,MAAM,QAAQ;EACd,SAAS,QAAQ;EAClB;;AAGH,MAAa,0BAA0B,YACrC,8BAA8B,QAAQ;AAExC,MAAa,iDACXA,4CAAqD"}
|
|
@@ -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
|