@qwik.dev/router 2.0.0-beta.42 → 2.0.0-beta.45
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/lib/adapters/azure-swa/vite/index.mjs +2 -1
- package/lib/adapters/bun-server/vite/index.mjs +2 -1
- package/lib/adapters/cloud-run/vite/index.mjs +2 -1
- package/lib/adapters/cloudflare-pages/vite/index.mjs +2 -1
- package/lib/adapters/deno-server/vite/index.mjs +2 -1
- package/lib/adapters/netlify-edge/vite/index.mjs +2 -1
- package/lib/adapters/node-server/vite/index.mjs +2 -1
- package/lib/adapters/shared/vite/index.mjs +35 -31
- package/lib/adapters/ssg/vite/index.mjs +4 -2
- package/lib/adapters/vercel-edge/vite/index.mjs +18 -15
- package/lib/chunks/fs.mjs +26 -23
- package/lib/chunks/head.qwik.mjs +611 -445
- package/lib/chunks/http-error.qwik.mjs +8 -7
- package/lib/chunks/pathname.mjs +9 -8
- package/lib/chunks/request-path.mjs +8 -4
- package/lib/chunks/routes.mjs +14 -14
- package/lib/chunks/server-error.mjs +11 -5
- package/lib/chunks/{url.mjs → static-file.mjs} +13 -2
- package/lib/chunks/system.mjs +18 -17
- package/lib/chunks/user-response.mjs +441 -322
- package/lib/chunks/worker-thread.mjs +97 -88
- package/lib/index.d.ts +47 -59
- package/lib/index.qwik.mjs +551 -497
- package/lib/middleware/aws-lambda/index.mjs +6 -3
- package/lib/middleware/azure-swa/index.mjs +4 -2
- package/lib/middleware/bun/index.mjs +12 -12
- package/lib/middleware/cloudflare-pages/index.mjs +19 -4
- package/lib/middleware/deno/index.mjs +12 -12
- package/lib/middleware/firebase/index.mjs +4 -2
- package/lib/middleware/netlify-edge/index.mjs +4 -2
- package/lib/middleware/node/index.mjs +16 -15
- package/lib/middleware/request-handler/index.mjs +41 -22
- package/lib/middleware/vercel-edge/index.mjs +4 -2
- package/lib/service-worker/index.mjs +2 -1
- package/lib/ssg/index.mjs +20 -16
- package/lib/vite/index.d.ts +1 -1
- package/lib/vite/index.mjs +596 -586
- package/package.json +5 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { D as getRouteLoaders, E as getRouteLoaderValues, d as loadRoute } from "./head.qwik.mjs";
|
|
2
2
|
import { l as trimInternalPathname } from "./request-path.mjs";
|
|
3
3
|
import { i as resolveRequestHandlers, r as renderQwikMiddleware, t as runQwikRouter } from "./user-response.mjs";
|
|
4
4
|
import { _serialize } from "@qwik.dev/core/internal";
|
|
@@ -10,28 +10,71 @@ var staticWorkerThreadDeps = {
|
|
|
10
10
|
trimInternalPathname,
|
|
11
11
|
runQwikRouter
|
|
12
12
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (!qwikRouterConfig) throw new Error("qwikRouterConfig is required.");
|
|
20
|
-
const pathname = deps.trimInternalPathname(serverRequestEv.url.pathname);
|
|
21
|
-
if (pathname === "/.well-known" || pathname.startsWith("/.well-known/")) return null;
|
|
22
|
-
const { routes, serverPlugins, cacheModules } = qwikRouterConfig;
|
|
23
|
-
const loadedRoute = await deps.loadRoute(routes, cacheModules, pathname);
|
|
24
|
-
const requestHandlers = deps.resolveRequestHandlers(serverPlugins, loadedRoute, serverRequestEv.request.method, checkOrigin ?? true, deps.renderQwikMiddleware(render));
|
|
25
|
-
if (qwikRouterConfig.fallthrough && loadedRoute.$notFound$ && !pathname.endsWith("/404.html")) return null;
|
|
26
|
-
const rebuildRouteInfo = async (url) => {
|
|
27
|
-
const cleanPathname = deps.trimInternalPathname(url.pathname);
|
|
28
|
-
const loadedRoute = await deps.loadRoute(routes, cacheModules, cleanPathname);
|
|
29
|
-
return {
|
|
30
|
-
loadedRoute,
|
|
31
|
-
requestHandlers: deps.resolveRequestHandlers(serverPlugins, loadedRoute, serverRequestEv.request.method, checkOrigin ?? true, deps.renderQwikMiddleware(render))
|
|
32
|
-
};
|
|
13
|
+
async function workerThread(sys) {
|
|
14
|
+
const opts = sys.getOptions();
|
|
15
|
+
const pendingPromises = /* @__PURE__ */ new Set();
|
|
16
|
+
const deps = {
|
|
17
|
+
...staticWorkerThreadDeps,
|
|
18
|
+
serialize: _serialize
|
|
33
19
|
};
|
|
34
|
-
|
|
20
|
+
process.on("uncaughtException", (e) => {
|
|
21
|
+
console.error("Worker uncaught exception (suppressed):", e.message);
|
|
22
|
+
});
|
|
23
|
+
process.on("unhandledRejection", (e) => {
|
|
24
|
+
console.error("Worker unhandled rejection (suppressed):", e instanceof Error ? e.message : e);
|
|
25
|
+
});
|
|
26
|
+
const onMessage = async (msg) => {
|
|
27
|
+
switch (msg.type) {
|
|
28
|
+
case "render": return new Promise((resolve) => {
|
|
29
|
+
workerRender(sys, opts, msg, pendingPromises, resolve, deps).catch((e) => {
|
|
30
|
+
console.error("Error during render", msg.pathname, e);
|
|
31
|
+
resolve({
|
|
32
|
+
type: "render",
|
|
33
|
+
pathname: msg.pathname,
|
|
34
|
+
url: "",
|
|
35
|
+
ok: false,
|
|
36
|
+
error: {
|
|
37
|
+
message: e instanceof Error ? e.message : String(e),
|
|
38
|
+
stack: e instanceof Error ? e.stack : void 0
|
|
39
|
+
},
|
|
40
|
+
filePath: null,
|
|
41
|
+
contentType: null,
|
|
42
|
+
resourceType: null
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
case "close":
|
|
47
|
+
if (pendingPromises.size) {
|
|
48
|
+
const promises = Array.from(pendingPromises);
|
|
49
|
+
pendingPromises.clear();
|
|
50
|
+
await Promise.all(promises);
|
|
51
|
+
}
|
|
52
|
+
return { type: "close" };
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
parentPort?.on("message", async (msg) => {
|
|
56
|
+
try {
|
|
57
|
+
parentPort?.postMessage(await onMessage(msg));
|
|
58
|
+
} catch (e) {
|
|
59
|
+
if (msg.type === "render") {
|
|
60
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
61
|
+
parentPort?.postMessage({
|
|
62
|
+
type: "render",
|
|
63
|
+
pathname: msg.pathname,
|
|
64
|
+
url: "",
|
|
65
|
+
ok: false,
|
|
66
|
+
error: {
|
|
67
|
+
message: error.message,
|
|
68
|
+
stack: error.stack
|
|
69
|
+
},
|
|
70
|
+
filePath: null,
|
|
71
|
+
contentType: null,
|
|
72
|
+
resourceType: null
|
|
73
|
+
});
|
|
74
|
+
} else console.error("Worker message handler error", e);
|
|
75
|
+
}
|
|
76
|
+
if (msg.type === "close") parentPort?.close();
|
|
77
|
+
});
|
|
35
78
|
}
|
|
36
79
|
async function workerRender(sys, opts, staticRoute, pendingPromises, callback, deps) {
|
|
37
80
|
const url = new URL(staticRoute.pathname, opts.origin);
|
|
@@ -155,8 +198,16 @@ async function workerRender(sys, opts, staticRoute, pendingPromises, callback, d
|
|
|
155
198
|
}
|
|
156
199
|
}, opts, deps).then((rsp) => {
|
|
157
200
|
if (rsp != null) return rsp.completion.then((r) => {
|
|
158
|
-
|
|
159
|
-
|
|
201
|
+
const failRouteOnCaughtBoundary = (completion) => {
|
|
202
|
+
if (completion === void 0 && rsp.requestEv.sharedMap.get("@errorBoundaryCaught")) {
|
|
203
|
+
result.ok = false;
|
|
204
|
+
result.filePath = null;
|
|
205
|
+
return /* @__PURE__ */ new Error(`An <ErrorBoundary> caught an error while rendering ${staticRoute.pathname}`);
|
|
206
|
+
}
|
|
207
|
+
return completion;
|
|
208
|
+
};
|
|
209
|
+
if (routeWriter) return closePromise.then(() => failRouteOnCaughtBoundary(r));
|
|
210
|
+
return failRouteOnCaughtBoundary(r);
|
|
160
211
|
});
|
|
161
212
|
}).then((e) => {
|
|
162
213
|
if (e !== void 0) {
|
|
@@ -195,70 +246,28 @@ async function workerRender(sys, opts, staticRoute, pendingPromises, callback, d
|
|
|
195
246
|
callback(result);
|
|
196
247
|
}
|
|
197
248
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
url: "",
|
|
220
|
-
ok: false,
|
|
221
|
-
error: {
|
|
222
|
-
message: e instanceof Error ? e.message : String(e),
|
|
223
|
-
stack: e instanceof Error ? e.stack : void 0
|
|
224
|
-
},
|
|
225
|
-
filePath: null,
|
|
226
|
-
contentType: null,
|
|
227
|
-
resourceType: null
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
case "close":
|
|
232
|
-
if (pendingPromises.size) {
|
|
233
|
-
const promises = Array.from(pendingPromises);
|
|
234
|
-
pendingPromises.clear();
|
|
235
|
-
await Promise.all(promises);
|
|
236
|
-
}
|
|
237
|
-
return { type: "close" };
|
|
238
|
-
}
|
|
249
|
+
/** Create a fresh no-op WritableStream (must be a real instance for pipeTo checks). */
|
|
250
|
+
var createNoopWritableStream = () => new WritableStream();
|
|
251
|
+
function isRedirectMessage(value) {
|
|
252
|
+
return typeof value === "object" && value !== null && value.constructor?.name === "RedirectMessage";
|
|
253
|
+
}
|
|
254
|
+
async function requestHandlerForSsg(serverRequestEv, opts, deps) {
|
|
255
|
+
const { render, checkOrigin, qwikRouterConfig } = opts;
|
|
256
|
+
if (!qwikRouterConfig) throw new Error("qwikRouterConfig is required.");
|
|
257
|
+
const pathname = deps.trimInternalPathname(serverRequestEv.url.pathname);
|
|
258
|
+
if (pathname === "/.well-known" || pathname.startsWith("/.well-known/")) return null;
|
|
259
|
+
const { routes, serverPlugins, cacheModules } = qwikRouterConfig;
|
|
260
|
+
const loadedRoute = await deps.loadRoute(routes, cacheModules, pathname);
|
|
261
|
+
const requestHandlers = deps.resolveRequestHandlers(serverPlugins, loadedRoute, serverRequestEv.request.method, checkOrigin ?? true, deps.renderQwikMiddleware(render));
|
|
262
|
+
if (qwikRouterConfig.fallthrough && loadedRoute.$notFound$ && !pathname.endsWith("/404.html")) return null;
|
|
263
|
+
const rebuildRouteInfo = async (url) => {
|
|
264
|
+
const cleanPathname = deps.trimInternalPathname(url.pathname);
|
|
265
|
+
const loadedRoute = await deps.loadRoute(routes, cacheModules, cleanPathname);
|
|
266
|
+
return {
|
|
267
|
+
loadedRoute,
|
|
268
|
+
requestHandlers: deps.resolveRequestHandlers(serverPlugins, loadedRoute, serverRequestEv.request.method, checkOrigin ?? true, deps.renderQwikMiddleware(render))
|
|
269
|
+
};
|
|
239
270
|
};
|
|
240
|
-
|
|
241
|
-
try {
|
|
242
|
-
parentPort?.postMessage(await onMessage(msg));
|
|
243
|
-
} catch (e) {
|
|
244
|
-
if (msg.type === "render") {
|
|
245
|
-
const error = e instanceof Error ? e : new Error(String(e));
|
|
246
|
-
parentPort?.postMessage({
|
|
247
|
-
type: "render",
|
|
248
|
-
pathname: msg.pathname,
|
|
249
|
-
url: "",
|
|
250
|
-
ok: false,
|
|
251
|
-
error: {
|
|
252
|
-
message: error.message,
|
|
253
|
-
stack: error.stack
|
|
254
|
-
},
|
|
255
|
-
filePath: null,
|
|
256
|
-
contentType: null,
|
|
257
|
-
resourceType: null
|
|
258
|
-
});
|
|
259
|
-
} else console.error("Worker message handler error", e);
|
|
260
|
-
}
|
|
261
|
-
if (msg.type === "close") parentPort?.close();
|
|
262
|
-
});
|
|
271
|
+
return deps.runQwikRouter(serverRequestEv, loadedRoute, requestHandlers, rebuildRouteInfo, qwikRouterConfig.basePathname);
|
|
263
272
|
}
|
|
264
273
|
export { workerThread };
|
package/lib/index.d.ts
CHANGED
|
@@ -28,11 +28,11 @@ import type { ResolveSyncValue } from '@qwik.dev/router/middleware/request-handl
|
|
|
28
28
|
import type { SerializationStrategy } from '@qwik.dev/core/internal';
|
|
29
29
|
import type { ServerError } from '@qwik.dev/router/middleware/request-handler';
|
|
30
30
|
import type { Signal } from '@qwik.dev/core';
|
|
31
|
-
import
|
|
32
|
-
import
|
|
31
|
+
import * as v from 'valibot';
|
|
32
|
+
import { ValueOrPromise } from '@qwik.dev/core';
|
|
33
33
|
import { ValueOrPromise as ValueOrPromise_2 } from '@qwik.dev/core/internal';
|
|
34
34
|
import { z } from 'zod';
|
|
35
|
-
import
|
|
35
|
+
import * as z_2 from 'zod';
|
|
36
36
|
|
|
37
37
|
/** @public */
|
|
38
38
|
export declare type Action<RETURN, INPUT = Record<string, unknown>, OPTIONAL extends boolean = true> = {
|
|
@@ -61,23 +61,6 @@ export declare type ActionConstructor = {
|
|
|
61
61
|
<OBJ>(actionQrl: (form: JSONObject, event: RequestEventAction) => ValueOrPromise<OBJ>, options?: ActionOptions): Action<StrictUnion<OBJ>>;
|
|
62
62
|
};
|
|
63
63
|
|
|
64
|
-
/** @public */
|
|
65
|
-
declare type ActionConstructorQRL = {
|
|
66
|
-
<OBJ extends Record<string, any> | void | null, VALIDATOR extends TypedDataValidator, REST extends [DataValidator, ...DataValidator[]]>(actionQrl: QRL<(data: GetValidatorOutputType<VALIDATOR>, event: RequestEventAction) => ValueOrPromise<OBJ>>, options: ActionOptions & {
|
|
67
|
-
readonly validation: [VALIDATOR, ...REST];
|
|
68
|
-
}): Action<StrictUnion<OBJ | FailReturn<ValidatorErrorType<GetValidatorInputType<VALIDATOR>>> | FailReturn<FailOfRest<REST>>>, GetValidatorInputType<VALIDATOR>, false>;
|
|
69
|
-
<OBJ extends Record<string, any> | void | null, VALIDATOR extends TypedDataValidator>(actionQrl: QRL<(data: GetValidatorOutputType<VALIDATOR>, event: RequestEventAction) => ValueOrPromise<OBJ>>, options: ActionOptions & {
|
|
70
|
-
readonly validation: [VALIDATOR];
|
|
71
|
-
}): Action<StrictUnion<OBJ | FailReturn<ValidatorErrorType<GetValidatorInputType<VALIDATOR>>>>, GetValidatorInputType<VALIDATOR>, false>;
|
|
72
|
-
<OBJ extends Record<string, any> | void | null, REST extends [DataValidator, ...DataValidator[]]>(actionQrl: QRL<(data: JSONObject, event: RequestEventAction) => ValueOrPromise<OBJ>>, options: ActionOptions & {
|
|
73
|
-
readonly validation: REST;
|
|
74
|
-
}): Action<StrictUnion<OBJ | FailReturn<FailOfRest<REST>>>>;
|
|
75
|
-
<OBJ extends Record<string, any> | void | null, VALIDATOR extends TypedDataValidator, REST extends [DataValidator, ...DataValidator[]]>(actionQrl: QRL<(data: GetValidatorOutputType<VALIDATOR>, event: RequestEventAction) => ValueOrPromise<OBJ>>, options: VALIDATOR, ...rest: REST): Action<StrictUnion<OBJ | FailReturn<ValidatorErrorType<GetValidatorInputType<VALIDATOR>>> | FailReturn<FailOfRest<REST>>>, GetValidatorInputType<VALIDATOR>, false>;
|
|
76
|
-
<OBJ extends Record<string, any> | void | null, VALIDATOR extends TypedDataValidator>(actionQrl: QRL<(data: GetValidatorOutputType<VALIDATOR>, event: RequestEventAction) => ValueOrPromise<OBJ>>, options: VALIDATOR): Action<StrictUnion<OBJ | FailReturn<ValidatorErrorType<GetValidatorInputType<VALIDATOR>>>>, GetValidatorInputType<VALIDATOR>, false>;
|
|
77
|
-
<OBJ extends Record<string, any> | void | null, REST extends [DataValidator, ...DataValidator[]]>(actionQrl: QRL<(form: JSONObject, event: RequestEventAction) => ValueOrPromise<OBJ>>, ...rest: REST): Action<StrictUnion<OBJ | FailReturn<FailOfRest<REST>>>>;
|
|
78
|
-
<OBJ>(actionQrl: QRL<(form: JSONObject, event: RequestEventAction) => ValueOrPromise<OBJ>>, options?: ActionOptions): Action<StrictUnion<OBJ>>;
|
|
79
|
-
};
|
|
80
|
-
|
|
81
64
|
/** @public */
|
|
82
65
|
export declare type ActionOptions = {
|
|
83
66
|
readonly id?: string;
|
|
@@ -380,6 +363,11 @@ export declare type DocumentStyle = Readonly<((Omit<QwikIntrinsicElements['style
|
|
|
380
363
|
style?: never;
|
|
381
364
|
})>;
|
|
382
365
|
|
|
366
|
+
/** @public */
|
|
367
|
+
export declare type Editable<T> = {
|
|
368
|
+
-readonly [P in keyof T]: T[P];
|
|
369
|
+
};
|
|
370
|
+
|
|
383
371
|
declare type EndpointModuleLoader = () => ValueOrPromise<RouteModule>;
|
|
384
372
|
|
|
385
373
|
declare interface EndpointResponse {
|
|
@@ -571,11 +559,19 @@ declare type LoaderConstructor = {
|
|
|
571
559
|
<OBJ extends Record<string, any> | void | null, REST extends readonly DataValidator[]>(loaderFn: (event: RequestEventLoader) => ValueOrPromise<OBJ>, ...rest: REST): Loader_2<StrictUnion<OBJ | FailReturn<FailOfRest<REST>>>>;
|
|
572
560
|
};
|
|
573
561
|
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
562
|
+
declare interface LoaderInternal extends Loader_2<any> {
|
|
563
|
+
readonly __brand?: 'server_loader';
|
|
564
|
+
__qrl: QRL<(event: RequestEventLoader) => ValueOrPromise<unknown>>;
|
|
565
|
+
__id: string;
|
|
566
|
+
__validators: DataValidator[] | undefined;
|
|
567
|
+
__serializationStrategy: SerializationStrategy;
|
|
568
|
+
__cacheControl: CacheControl | ((ev: RequestEvent) => CacheControl | null) | undefined;
|
|
569
|
+
__eTag: string | ((ev: RequestEvent) => string | null) | undefined;
|
|
570
|
+
__cacheKey: CacheKeyFn | undefined;
|
|
571
|
+
__search: string[] | undefined;
|
|
572
|
+
__blockSSR: boolean;
|
|
573
|
+
(): LoaderSignal<unknown>;
|
|
574
|
+
}
|
|
579
575
|
|
|
580
576
|
/** @public */
|
|
581
577
|
declare type LoaderOptions = {
|
|
@@ -663,7 +659,7 @@ declare type LoaderOptions = {
|
|
|
663
659
|
};
|
|
664
660
|
|
|
665
661
|
/** @public */
|
|
666
|
-
export declare type LoaderSignal<TYPE> = (TYPE extends () => ValueOrPromise<infer VALIDATOR> ? Signal<ValueOrPromise<VALIDATOR>> : Signal<TYPE>) & Pick<ComputedSignal<any>, 'promise'
|
|
662
|
+
export declare type LoaderSignal<TYPE> = (TYPE extends () => ValueOrPromise<infer VALIDATOR> ? Signal<ValueOrPromise<VALIDATOR>> : Signal<TYPE>) & Pick<ComputedSignal<any>, 'promise'>;
|
|
667
663
|
|
|
668
664
|
declare interface MenuModule {
|
|
669
665
|
readonly default: ContentMenu;
|
|
@@ -784,6 +780,12 @@ export declare interface QwikRouterConfig {
|
|
|
784
780
|
readonly cacheModules?: boolean;
|
|
785
781
|
/** When true, return null instead of rendering the 404 page, letting the adapter handle it */
|
|
786
782
|
readonly fallthrough?: boolean;
|
|
783
|
+
/**
|
|
784
|
+
* Imports the modules containing `server$` functions so their registration side effects run.
|
|
785
|
+
* Called by the request handler before serving; deliberately async so the config module itself
|
|
786
|
+
* evaluates without touching the runtime (see the import-cycle notes in `route-loaders.ts`).
|
|
787
|
+
*/
|
|
788
|
+
readonly importEagerModules?: () => Promise<unknown>;
|
|
787
789
|
}
|
|
788
790
|
|
|
789
791
|
/** @public */
|
|
@@ -927,8 +929,21 @@ export declare type ResolvedDocumentHead<FrontMatter extends Record<string, any>
|
|
|
927
929
|
*/
|
|
928
930
|
export declare const routeAction$: ActionConstructor;
|
|
929
931
|
|
|
930
|
-
/**
|
|
931
|
-
|
|
932
|
+
/**
|
|
933
|
+
* Hoisted function declarations (not consts) on purpose, like `routeLoaderQrl`: generated route
|
|
934
|
+
* modules call these factories back during their own evaluation via the `@qwik-router-config`
|
|
935
|
+
* cycle, where a `const` binding would throw a TDZ ReferenceError.
|
|
936
|
+
*
|
|
937
|
+
* @public
|
|
938
|
+
*/
|
|
939
|
+
export declare function routeActionQrl(actionQrl: QRL<(form: JSONObject, event: RequestEventAction) => unknown>, ...rest: (ActionOptions | DataValidator)[]): {
|
|
940
|
+
(): Editable<ActionStore<unknown, unknown>>;
|
|
941
|
+
__brand: "server_action";
|
|
942
|
+
__validators: DataValidator[];
|
|
943
|
+
__qrl: QRL<(form: JSONObject, event: RequestEventAction) => unknown>;
|
|
944
|
+
__id: string;
|
|
945
|
+
__invalidate: string[] | undefined;
|
|
946
|
+
};
|
|
932
947
|
|
|
933
948
|
declare type RouteActionResolver = {
|
|
934
949
|
status: number;
|
|
@@ -1002,8 +1017,10 @@ export declare interface RouteData {
|
|
|
1002
1017
|
_M?: RouteData[];
|
|
1003
1018
|
/** Menu loader for this subtree (from menu.md). Runtime uses nearest ancestor during traversal. */
|
|
1004
1019
|
_N?: MenuModuleLoader;
|
|
1005
|
-
/**
|
|
1020
|
+
/** Inherited layout and server plugin routeLoader$ hashes. */
|
|
1006
1021
|
_R?: string[];
|
|
1022
|
+
/** Page loader hashes; override pages include their selected layouts and plugins. */
|
|
1023
|
+
_D?: string[];
|
|
1007
1024
|
/** Child route segments (any key not starting with `_`) */
|
|
1008
1025
|
[part: string]: RouteData | RouteData[] | ModuleLoader[] | ContentModuleLoader | MenuModuleLoader | string[] | string | undefined;
|
|
1009
1026
|
}
|
|
@@ -1037,24 +1054,13 @@ export declare interface RouteData {
|
|
|
1037
1054
|
*/
|
|
1038
1055
|
export declare const routeLoader$: LoaderConstructor;
|
|
1039
1056
|
|
|
1040
|
-
/**
|
|
1041
|
-
* Reactive context for route loaders. On the server this is stored in sharedMap, on the client it's
|
|
1042
|
-
* a store that gets updated on navigation.
|
|
1043
|
-
*
|
|
1044
|
-
* - `loaderPaths`: loader ID → fetch path (the longest route path for that loader)
|
|
1045
|
-
* - `pagePathname` / `pageSearch`: client-only navigation state used for loader invalidation and
|
|
1046
|
-
* q-loader fetches. They are intentionally omitted from SSR state and fall back to `location`
|
|
1047
|
-
* until the first SPA navigation.
|
|
1048
|
-
*/
|
|
1057
|
+
/** Shared SSR paths and client-only loader navigation state. */
|
|
1049
1058
|
declare type RouteLoaderCtx = {
|
|
1050
1059
|
loaderPaths: Record<string, string | undefined>;
|
|
1051
|
-
pagePathname?: string;
|
|
1052
|
-
pageSearch?: string;
|
|
1053
1060
|
/** SPA navigation function. Client-only and intentionally omitted from SSR state. */
|
|
1054
1061
|
goto?: NoSerialize<RouteNavigate>;
|
|
1055
1062
|
/** Client manifest hash for q-loader fetch URLs. */
|
|
1056
1063
|
manifestHash?: string;
|
|
1057
|
-
routeLoaderCandidates?: Record<string, string>;
|
|
1058
1064
|
};
|
|
1059
1065
|
|
|
1060
1066
|
/* Excluded from this release type: routeLoaderQrl */
|
|
@@ -1246,12 +1252,6 @@ declare type ValibotConstructor = {
|
|
|
1246
1252
|
<T extends v.GenericSchema | v.GenericSchemaAsync>(schema: (ev: RequestEvent) => T): ValibotDataValidator<T>;
|
|
1247
1253
|
};
|
|
1248
1254
|
|
|
1249
|
-
/** @beta */
|
|
1250
|
-
declare type ValibotConstructorQRL = {
|
|
1251
|
-
<T extends v.GenericSchema | v.GenericSchemaAsync>(schema: QRL<T>): ValibotDataValidator<T>;
|
|
1252
|
-
<T extends v.GenericSchema | v.GenericSchemaAsync>(schema: QRL<(ev: RequestEvent) => T>): ValibotDataValidator<T>;
|
|
1253
|
-
};
|
|
1254
|
-
|
|
1255
1255
|
/** @beta */
|
|
1256
1256
|
declare type ValibotDataValidator<T extends v.GenericSchema | v.GenericSchemaAsync = v.GenericSchema | v.GenericSchemaAsync> = {
|
|
1257
1257
|
readonly __brand: 'valibot';
|
|
@@ -1267,10 +1267,6 @@ declare type ValidatorConstructor = {
|
|
|
1267
1267
|
<T extends ValidatorReturn>(validator: (ev: RequestEvent, data: unknown) => ValueOrPromise<T>): T extends ValidatorReturnFail<infer ERROR> ? DataValidator<ERROR> : DataValidator<never>;
|
|
1268
1268
|
};
|
|
1269
1269
|
|
|
1270
|
-
declare type ValidatorConstructorQRL = {
|
|
1271
|
-
<T extends ValidatorReturn>(validator: QRL<(ev: RequestEvent, data: unknown) => ValueOrPromise<T>>): T extends ValidatorReturnFail<infer ERROR> ? DataValidator<ERROR> : DataValidator<never>;
|
|
1272
|
-
};
|
|
1273
|
-
|
|
1274
1270
|
/** @public */
|
|
1275
1271
|
export declare type ValidatorErrorKeyDotNotation<T, Prefix extends string = ''> = IsAny<T> extends true ? never : T extends object ? {
|
|
1276
1272
|
[K in keyof T & string]: IsAny<T[K]> extends true ? never : T[K] extends (infer U)[] ? IsAny<U> extends true ? never : U extends object ? `${Prefix}${K}[]` | ValidatorErrorKeyDotNotation<U, `${Prefix}${K}[].`> : `${Prefix}${K}[]` : T[K] extends object ? ValidatorErrorKeyDotNotation<T[K], `${Prefix}${K}.`> : `${Prefix}${K}`;
|
|
@@ -1313,14 +1309,6 @@ export declare type ZodConstructor = {
|
|
|
1313
1309
|
<T extends z_2.ZodType>(schema: (zod: typeof z_2.z, ev: RequestEvent) => T): ZodDataValidator<T>;
|
|
1314
1310
|
};
|
|
1315
1311
|
|
|
1316
|
-
/** @public */
|
|
1317
|
-
declare type ZodConstructorQRL = {
|
|
1318
|
-
<T extends z_2.ZodRawShape>(schema: QRL<T>): ZodDataValidator<z_2.ZodObject<T>>;
|
|
1319
|
-
<T extends z_2.ZodRawShape>(schema: QRL<(zod: typeof z_2.z, ev: RequestEvent) => T>): ZodDataValidator<z_2.ZodObject<T>>;
|
|
1320
|
-
<T extends z_2.ZodType>(schema: QRL<T>): ZodDataValidator<T>;
|
|
1321
|
-
<T extends z_2.ZodType>(schema: QRL<(zod: typeof z_2.z, ev: RequestEvent) => T>): ZodDataValidator<T>;
|
|
1322
|
-
};
|
|
1323
|
-
|
|
1324
1312
|
/** @public */
|
|
1325
1313
|
declare type ZodDataValidator<T extends z_2.ZodType = z_2.ZodType> = {
|
|
1326
1314
|
readonly __brand: 'zod';
|