@vertz/ui-server 0.2.16 → 0.2.18
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/dist/bun-dev-server.js
CHANGED
|
@@ -1268,6 +1268,9 @@ async function ssrRenderToString(module, url, options) {
|
|
|
1268
1268
|
const ssrTimeout = options?.ssrTimeout ?? 300;
|
|
1269
1269
|
ensureDomShim();
|
|
1270
1270
|
const ctx = createRequestContext(normalizedUrl);
|
|
1271
|
+
if (options?.ssrAuth) {
|
|
1272
|
+
ctx.ssrAuth = options.ssrAuth;
|
|
1273
|
+
}
|
|
1271
1274
|
return ssrStorage.run(ctx, async () => {
|
|
1272
1275
|
try {
|
|
1273
1276
|
setGlobalSSRTimeout(ssrTimeout);
|
|
@@ -1286,6 +1289,15 @@ async function ssrRenderToString(module, url, options) {
|
|
|
1286
1289
|
}
|
|
1287
1290
|
}
|
|
1288
1291
|
createApp();
|
|
1292
|
+
if (ctx.ssrRedirect) {
|
|
1293
|
+
return {
|
|
1294
|
+
html: "",
|
|
1295
|
+
css: "",
|
|
1296
|
+
ssrData: [],
|
|
1297
|
+
headTags: "",
|
|
1298
|
+
redirect: ctx.ssrRedirect
|
|
1299
|
+
};
|
|
1300
|
+
}
|
|
1289
1301
|
const store = ssrStorage.getStore();
|
|
1290
1302
|
if (store) {
|
|
1291
1303
|
if (store.pendingRouteComponents?.size) {
|
|
@@ -2229,10 +2241,16 @@ data: {}
|
|
|
2229
2241
|
originalFetch: globalThis.fetch
|
|
2230
2242
|
}) : null;
|
|
2231
2243
|
let sessionScript = "";
|
|
2244
|
+
let ssrAuth;
|
|
2232
2245
|
if (sessionResolver) {
|
|
2233
2246
|
try {
|
|
2234
2247
|
const sessionResult = await sessionResolver(request);
|
|
2235
2248
|
if (sessionResult) {
|
|
2249
|
+
ssrAuth = {
|
|
2250
|
+
status: "authenticated",
|
|
2251
|
+
user: sessionResult.session.user,
|
|
2252
|
+
expiresAt: sessionResult.session.expiresAt
|
|
2253
|
+
};
|
|
2236
2254
|
const scripts = [];
|
|
2237
2255
|
scripts.push(createSessionScript(sessionResult.session));
|
|
2238
2256
|
if (sessionResult.accessSet != null) {
|
|
@@ -2240,6 +2258,8 @@ data: {}
|
|
|
2240
2258
|
}
|
|
2241
2259
|
sessionScript = scripts.join(`
|
|
2242
2260
|
`);
|
|
2261
|
+
} else {
|
|
2262
|
+
ssrAuth = { status: "unauthenticated" };
|
|
2243
2263
|
}
|
|
2244
2264
|
} catch (resolverErr) {
|
|
2245
2265
|
console.warn("[Server] Session resolver failed:", resolverErr instanceof Error ? resolverErr.message : resolverErr);
|
|
@@ -2248,15 +2268,22 @@ data: {}
|
|
|
2248
2268
|
const doRender = async () => {
|
|
2249
2269
|
logger.log("ssr", "render-start", { url: pathname });
|
|
2250
2270
|
const ssrStart = performance.now();
|
|
2251
|
-
const result = await ssrRenderToString(ssrMod, pathname, {
|
|
2271
|
+
const result = await ssrRenderToString(ssrMod, pathname + url.search, {
|
|
2252
2272
|
ssrTimeout: 300,
|
|
2253
|
-
fallbackMetrics: fontFallbackMetrics
|
|
2273
|
+
fallbackMetrics: fontFallbackMetrics,
|
|
2274
|
+
ssrAuth
|
|
2254
2275
|
});
|
|
2255
2276
|
logger.log("ssr", "render-done", {
|
|
2256
2277
|
url: pathname,
|
|
2257
2278
|
durationMs: Math.round(performance.now() - ssrStart),
|
|
2258
2279
|
htmlBytes: result.html.length
|
|
2259
2280
|
});
|
|
2281
|
+
if (result.redirect) {
|
|
2282
|
+
return new Response(null, {
|
|
2283
|
+
status: 302,
|
|
2284
|
+
headers: { Location: result.redirect.to }
|
|
2285
|
+
});
|
|
2286
|
+
}
|
|
2260
2287
|
const scriptTag = buildScriptTag(bundledScriptUrl, hmrBootstrapScript, clientSrc);
|
|
2261
2288
|
const combinedHeadTags = [headTags, result.headTags].filter(Boolean).join(`
|
|
2262
2289
|
`);
|
package/dist/index.d.ts
CHANGED
|
@@ -375,6 +375,7 @@ declare function clearGlobalSSRTimeout(): void;
|
|
|
375
375
|
declare function getGlobalSSRTimeout(): number | undefined;
|
|
376
376
|
import { FontFallbackMetrics as FontFallbackMetrics4 } from "@vertz/ui";
|
|
377
377
|
import { FontFallbackMetrics as FontFallbackMetrics3, Theme as Theme2 } from "@vertz/ui";
|
|
378
|
+
import { SSRAuth as SSRAuth_jq1nwm } from "@vertz/ui/internals";
|
|
378
379
|
interface SSRModule {
|
|
379
380
|
default?: () => unknown;
|
|
380
381
|
App?: () => unknown;
|
|
@@ -401,6 +402,10 @@ interface SSRRenderResult {
|
|
|
401
402
|
headTags: string;
|
|
402
403
|
/** Route patterns discovered by createRouter() during SSR (for build-time pre-rendering). */
|
|
403
404
|
discoveredRoutes?: string[];
|
|
405
|
+
/** Set when ProtectedRoute writes a redirect during SSR. Server should return 302. */
|
|
406
|
+
redirect?: {
|
|
407
|
+
to: string;
|
|
408
|
+
};
|
|
404
409
|
}
|
|
405
410
|
interface SSRDiscoverResult {
|
|
406
411
|
resolved: Array<{
|
|
@@ -420,6 +425,8 @@ declare function ssrRenderToString(module: SSRModule, url: string, options?: {
|
|
|
420
425
|
ssrTimeout?: number;
|
|
421
426
|
/** Pre-computed font fallback metrics (computed at server startup). */
|
|
422
427
|
fallbackMetrics?: Record<string, FontFallbackMetrics3>;
|
|
428
|
+
/** Auth state resolved from session cookie. Passed to SSRRenderContext for AuthProvider. */
|
|
429
|
+
ssrAuth?: SSRAuth_jq1nwm;
|
|
423
430
|
}): Promise<SSRRenderResult>;
|
|
424
431
|
/**
|
|
425
432
|
* Discover queries for a given URL without rendering.
|
package/dist/index.js
CHANGED
|
@@ -251,6 +251,9 @@ async function ssrRenderToString(module, url, options) {
|
|
|
251
251
|
const ssrTimeout = options?.ssrTimeout ?? 300;
|
|
252
252
|
ensureDomShim();
|
|
253
253
|
const ctx = createRequestContext(normalizedUrl);
|
|
254
|
+
if (options?.ssrAuth) {
|
|
255
|
+
ctx.ssrAuth = options.ssrAuth;
|
|
256
|
+
}
|
|
254
257
|
return ssrStorage.run(ctx, async () => {
|
|
255
258
|
try {
|
|
256
259
|
setGlobalSSRTimeout(ssrTimeout);
|
|
@@ -269,6 +272,15 @@ async function ssrRenderToString(module, url, options) {
|
|
|
269
272
|
}
|
|
270
273
|
}
|
|
271
274
|
createApp();
|
|
275
|
+
if (ctx.ssrRedirect) {
|
|
276
|
+
return {
|
|
277
|
+
html: "",
|
|
278
|
+
css: "",
|
|
279
|
+
ssrData: [],
|
|
280
|
+
headTags: "",
|
|
281
|
+
redirect: ctx.ssrRedirect
|
|
282
|
+
};
|
|
283
|
+
}
|
|
272
284
|
const store = ssrStorage.getStore();
|
|
273
285
|
if (store) {
|
|
274
286
|
if (store.pendingRouteComponents?.size) {
|
|
@@ -610,10 +622,16 @@ function createSSRHandler(options) {
|
|
|
610
622
|
return handleNavRequest(module, pathname, ssrTimeout);
|
|
611
623
|
}
|
|
612
624
|
let sessionScript = "";
|
|
625
|
+
let ssrAuth;
|
|
613
626
|
if (sessionResolver) {
|
|
614
627
|
try {
|
|
615
628
|
const sessionResult = await sessionResolver(request);
|
|
616
629
|
if (sessionResult) {
|
|
630
|
+
ssrAuth = {
|
|
631
|
+
status: "authenticated",
|
|
632
|
+
user: sessionResult.session.user,
|
|
633
|
+
expiresAt: sessionResult.session.expiresAt
|
|
634
|
+
};
|
|
617
635
|
const scripts = [];
|
|
618
636
|
scripts.push(createSessionScript(sessionResult.session, nonce));
|
|
619
637
|
if (sessionResult.accessSet != null) {
|
|
@@ -621,12 +639,14 @@ function createSSRHandler(options) {
|
|
|
621
639
|
}
|
|
622
640
|
sessionScript = scripts.join(`
|
|
623
641
|
`);
|
|
642
|
+
} else {
|
|
643
|
+
ssrAuth = { status: "unauthenticated" };
|
|
624
644
|
}
|
|
625
645
|
} catch (resolverErr) {
|
|
626
646
|
console.warn("[Server] Session resolver failed:", resolverErr instanceof Error ? resolverErr.message : resolverErr);
|
|
627
647
|
}
|
|
628
648
|
}
|
|
629
|
-
return handleHTMLRequest(module, template, pathname, ssrTimeout, nonce, fallbackMetrics, linkHeader, modulepreloadTags, cacheControl, sessionScript);
|
|
649
|
+
return handleHTMLRequest(module, template, pathname + url.search, ssrTimeout, nonce, fallbackMetrics, linkHeader, modulepreloadTags, cacheControl, sessionScript, ssrAuth);
|
|
630
650
|
};
|
|
631
651
|
}
|
|
632
652
|
async function handleNavRequest(module, url, ssrTimeout) {
|
|
@@ -652,9 +672,15 @@ data: {}
|
|
|
652
672
|
});
|
|
653
673
|
}
|
|
654
674
|
}
|
|
655
|
-
async function handleHTMLRequest(module, template, url, ssrTimeout, nonce, fallbackMetrics, linkHeader, modulepreloadTags, cacheControl, sessionScript) {
|
|
675
|
+
async function handleHTMLRequest(module, template, url, ssrTimeout, nonce, fallbackMetrics, linkHeader, modulepreloadTags, cacheControl, sessionScript, ssrAuth) {
|
|
656
676
|
try {
|
|
657
|
-
const result = await ssrRenderToString(module, url, { ssrTimeout, fallbackMetrics });
|
|
677
|
+
const result = await ssrRenderToString(module, url, { ssrTimeout, fallbackMetrics, ssrAuth });
|
|
678
|
+
if (result.redirect) {
|
|
679
|
+
return new Response(null, {
|
|
680
|
+
status: 302,
|
|
681
|
+
headers: { Location: result.redirect.to }
|
|
682
|
+
});
|
|
683
|
+
}
|
|
658
684
|
const allHeadTags = [result.headTags, modulepreloadTags].filter(Boolean).join(`
|
|
659
685
|
`);
|
|
660
686
|
const html = injectIntoTemplate({
|
package/dist/ssr/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CompiledRoute } from "@vertz/ui";
|
|
2
2
|
import { FontFallbackMetrics, Theme } from "@vertz/ui";
|
|
3
|
+
import { SSRAuth as SSRAuth_jq1nwm } from "@vertz/ui/internals";
|
|
3
4
|
interface SSRModule {
|
|
4
5
|
default?: () => unknown;
|
|
5
6
|
App?: () => unknown;
|
|
@@ -26,6 +27,10 @@ interface SSRRenderResult {
|
|
|
26
27
|
headTags: string;
|
|
27
28
|
/** Route patterns discovered by createRouter() during SSR (for build-time pre-rendering). */
|
|
28
29
|
discoveredRoutes?: string[];
|
|
30
|
+
/** Set when ProtectedRoute writes a redirect during SSR. Server should return 302. */
|
|
31
|
+
redirect?: {
|
|
32
|
+
to: string;
|
|
33
|
+
};
|
|
29
34
|
}
|
|
30
35
|
interface SSRDiscoverResult {
|
|
31
36
|
resolved: Array<{
|
|
@@ -45,6 +50,8 @@ declare function ssrRenderToString(module: SSRModule, url: string, options?: {
|
|
|
45
50
|
ssrTimeout?: number;
|
|
46
51
|
/** Pre-computed font fallback metrics (computed at server startup). */
|
|
47
52
|
fallbackMetrics?: Record<string, FontFallbackMetrics>;
|
|
53
|
+
/** Auth state resolved from session cookie. Passed to SSRRenderContext for AuthProvider. */
|
|
54
|
+
ssrAuth?: SSRAuth_jq1nwm;
|
|
48
55
|
}): Promise<SSRRenderResult>;
|
|
49
56
|
/**
|
|
50
57
|
* Discover queries for a given URL without rendering.
|
package/dist/ssr/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vertz/ui-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.18",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Vertz UI server-side rendering runtime",
|
|
@@ -58,15 +58,16 @@
|
|
|
58
58
|
"@ampproject/remapping": "^2.3.0",
|
|
59
59
|
"@capsizecss/unpack": "^4.0.0",
|
|
60
60
|
"@jridgewell/trace-mapping": "^0.3.31",
|
|
61
|
-
"@vertz/core": "^0.2.
|
|
62
|
-
"@vertz/ui": "^0.2.
|
|
63
|
-
"@vertz/ui-compiler": "^0.2.
|
|
61
|
+
"@vertz/core": "^0.2.17",
|
|
62
|
+
"@vertz/ui": "^0.2.17",
|
|
63
|
+
"@vertz/ui-compiler": "^0.2.17",
|
|
64
64
|
"magic-string": "^0.30.0",
|
|
65
65
|
"sharp": "^0.34.5",
|
|
66
66
|
"ts-morph": "^27.0.2"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@vertz/codegen": "^0.2.
|
|
69
|
+
"@vertz/codegen": "^0.2.17",
|
|
70
|
+
"@vertz/ui-auth": "^0.2.17",
|
|
70
71
|
"bun-types": "^1.3.10",
|
|
71
72
|
"bunup": "^0.16.31",
|
|
72
73
|
"@happy-dom/global-registrator": "^20.8.3",
|