@qwik.dev/router 2.0.0-beta.30 → 2.0.0-beta.32
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/chunks/fs.mjs +1 -1
- package/lib/chunks/routing.qwik.mjs +10 -9
- package/lib/chunks/{mime-types.mjs → url.mjs} +10 -1
- package/lib/chunks/worker-thread.qwik.mjs +35 -34
- package/lib/index.d.ts +4 -3
- package/lib/index.qwik.mjs +277 -264
- package/lib/middleware/aws-lambda/index.d.ts +15 -17
- package/lib/middleware/aws-lambda/index.mjs +4 -8
- package/lib/middleware/azure-swa/index.mjs +0 -4
- package/lib/middleware/bun/index.d.ts +9 -5
- package/lib/middleware/bun/index.mjs +6 -29
- package/lib/middleware/cloudflare-pages/index.mjs +0 -4
- package/lib/middleware/deno/index.d.ts +9 -5
- package/lib/middleware/deno/index.mjs +5 -28
- package/lib/middleware/firebase/index.mjs +3 -8
- package/lib/middleware/netlify-edge/index.mjs +0 -4
- package/lib/middleware/node/index.d.ts +9 -5
- package/lib/middleware/node/index.mjs +4 -25
- package/lib/middleware/request-handler/index.d.ts +4 -7
- package/lib/middleware/request-handler/index.mjs +41 -44
- package/lib/middleware/vercel-edge/index.mjs +0 -4
- package/lib/vite/index.mjs +208 -85
- package/package.json +3 -3
package/lib/chunks/fs.mjs
CHANGED
|
@@ -99,7 +99,7 @@ function isIndexModule(extlessName) {
|
|
|
99
99
|
return /^index(|!|@.+)$/.test(extlessName);
|
|
100
100
|
}
|
|
101
101
|
function isPluginModule(extlessName) {
|
|
102
|
-
return /^plugin(|@.+)$/.test(extlessName);
|
|
102
|
+
return /^plugin(|@.+)$/.test(extlessName) && !/\.(test|unit|spec)(\.[jt]s)?$/.test(extlessName);
|
|
103
103
|
}
|
|
104
104
|
function isLayoutModule(extlessName) {
|
|
105
105
|
return /^layout(|!|-.+)$/.test(extlessName);
|
|
@@ -248,7 +248,7 @@ const resolveDocumentHead = (resolvedHead, updatedHead) => {
|
|
|
248
248
|
mergeArray(resolvedHead.scripts, updatedHead.scripts);
|
|
249
249
|
Object.assign(resolvedHead.frontmatter, updatedHead.frontmatter);
|
|
250
250
|
};
|
|
251
|
-
const createDocumentHead = (defaults) => ({
|
|
251
|
+
const createDocumentHead = (defaults, manifestHash) => ({
|
|
252
252
|
title: defaults?.title || "",
|
|
253
253
|
meta: [
|
|
254
254
|
...defaults?.meta || []
|
|
@@ -264,7 +264,8 @@ const createDocumentHead = (defaults) => ({
|
|
|
264
264
|
],
|
|
265
265
|
frontmatter: {
|
|
266
266
|
...defaults?.frontmatter
|
|
267
|
-
}
|
|
267
|
+
},
|
|
268
|
+
manifestHash: manifestHash || "dev"
|
|
268
269
|
});
|
|
269
270
|
const resolveRouteConfig = (resolveValue, routeLocation, contentModules, locale, status, defaults) => withLocale(locale, () => {
|
|
270
271
|
const head = createDocumentHead(defaults);
|
|
@@ -508,7 +509,7 @@ function findChild(node, part, partLower, parts, partIndex, params) {
|
|
|
508
509
|
return void 0;
|
|
509
510
|
}
|
|
510
511
|
function findIndexNode(node) {
|
|
511
|
-
if (node._I || node._G) {
|
|
512
|
+
if (node._I || node._G != null) {
|
|
512
513
|
return {
|
|
513
514
|
target: node,
|
|
514
515
|
groups: []
|
|
@@ -528,7 +529,7 @@ function findIndexNode(node) {
|
|
|
528
529
|
return void 0;
|
|
529
530
|
}
|
|
530
531
|
function resolveLoaders(root, node, gatheredLayouts) {
|
|
531
|
-
if (node._G) {
|
|
532
|
+
if (node._G != null) {
|
|
532
533
|
const keys = node._G.split("/").filter((p) => p.length > 0);
|
|
533
534
|
const target = walkTrieKeys(root, keys);
|
|
534
535
|
if (!target) {
|
|
@@ -536,7 +537,7 @@ function resolveLoaders(root, node, gatheredLayouts) {
|
|
|
536
537
|
}
|
|
537
538
|
let targetNode = target.node;
|
|
538
539
|
const targetLayouts = target.layouts;
|
|
539
|
-
if (!targetNode._I &&
|
|
540
|
+
if (!targetNode._I && targetNode._G == null) {
|
|
540
541
|
const indexResult = findIndexNode(targetNode);
|
|
541
542
|
if (indexResult) {
|
|
542
543
|
for (const g of indexResult.groups) {
|
|
@@ -649,14 +650,14 @@ function matchRouteTree(root = {}, pathname) {
|
|
|
649
650
|
collectNodeMeta(node, found.groups, layouts, errorLoaderRef, notFoundLoaderRef, menuLoaderRef);
|
|
650
651
|
}
|
|
651
652
|
if (matched && !done && i === len) {
|
|
652
|
-
if (!node._I &&
|
|
653
|
+
if (!node._I && node._G == null) {
|
|
653
654
|
const indexResult = findIndexNode(node);
|
|
654
655
|
if (indexResult) {
|
|
655
656
|
collectNodeMeta(indexResult.target, indexResult.groups, layouts, errorLoaderRef, notFoundLoaderRef, menuLoaderRef);
|
|
656
657
|
node = indexResult.target;
|
|
657
658
|
}
|
|
658
659
|
}
|
|
659
|
-
if (!node._I &&
|
|
660
|
+
if (!node._I && node._G == null && node._A) {
|
|
660
661
|
const next = node._A;
|
|
661
662
|
const paramName = next._P;
|
|
662
663
|
params[paramName] = "";
|
|
@@ -669,7 +670,7 @@ function matchRouteTree(root = {}, pathname) {
|
|
|
669
670
|
menuLoaderRef.v = node._N;
|
|
670
671
|
}
|
|
671
672
|
}
|
|
672
|
-
if (!node._I &&
|
|
673
|
+
if (!node._I && node._G == null) {
|
|
673
674
|
const restInfo = findRestNode(node);
|
|
674
675
|
if (restInfo) {
|
|
675
676
|
const next = restInfo.next;
|
|
@@ -817,4 +818,4 @@ const loadRoute = async (routes, cacheModules, pathname, isInternal) => {
|
|
|
817
818
|
};
|
|
818
819
|
};
|
|
819
820
|
|
|
820
|
-
export { CLIENT_DATA_CACHE as C, DEFAULT_LOADERS_SERIALIZATION_STRATEGY as D, Q_ROUTE as Q, createDocumentHead as a,
|
|
821
|
+
export { CLIENT_DATA_CACHE as C, DEFAULT_LOADERS_SERIALIZATION_STRATEGY as D, Q_ROUTE as Q, createDocumentHead as a, loadRoute as b, createLoaderSignal as c, isSameOrigin as d, clientNavigate as e, toPath as f, getClientNavPath as g, QFN_KEY as h, isSamePath as i, QACTION_KEY as j, QDATA_KEY as k, loadClientData as l, resolveRouteConfig as m, QLOADER_KEY as n, isPromise as o, preloadRouteBundles as p, resolveHead as r, shouldPreload as s, toUrl as t };
|
|
@@ -49,4 +49,13 @@ const MIME_TYPES = {
|
|
|
49
49
|
zip: "application/zip"
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
const LEADING_DOUBLE_SLASH_REG = /^[\\/]{2,}/;
|
|
53
|
+
function normalizeRequestUrl(url, base) {
|
|
54
|
+
const DOUBLE_SLASH_REG = /\/\/|\\\\/g;
|
|
55
|
+
const queryOrHashIndex = url.search(/[?#]/);
|
|
56
|
+
const path = queryOrHashIndex === -1 ? url : url.slice(0, queryOrHashIndex);
|
|
57
|
+
const suffix = queryOrHashIndex === -1 ? "" : url.slice(queryOrHashIndex);
|
|
58
|
+
return new URL(`${path.replace(LEADING_DOUBLE_SLASH_REG, "/").replace(DOUBLE_SLASH_REG, "/")}${suffix}`, base);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export { MIME_TYPES as M, normalizeRequestUrl as n };
|
|
@@ -35,7 +35,7 @@ const resolveDocumentHead = (resolvedHead, updatedHead) => {
|
|
|
35
35
|
mergeArray(resolvedHead.scripts, updatedHead.scripts);
|
|
36
36
|
Object.assign(resolvedHead.frontmatter, updatedHead.frontmatter);
|
|
37
37
|
};
|
|
38
|
-
const createDocumentHead = (defaults) => ({
|
|
38
|
+
const createDocumentHead = (defaults, manifestHash) => ({
|
|
39
39
|
title: defaults?.title || "",
|
|
40
40
|
meta: [
|
|
41
41
|
...defaults?.meta || []
|
|
@@ -51,7 +51,8 @@ const createDocumentHead = (defaults) => ({
|
|
|
51
51
|
],
|
|
52
52
|
frontmatter: {
|
|
53
53
|
...defaults?.frontmatter
|
|
54
|
-
}
|
|
54
|
+
},
|
|
55
|
+
manifestHash: manifestHash || "dev"
|
|
55
56
|
});
|
|
56
57
|
const resolveRouteConfig = (resolveValue, routeLocation, contentModules, locale, status, defaults) => withLocale(locale, () => {
|
|
57
58
|
const head = createDocumentHead(defaults);
|
|
@@ -279,7 +280,7 @@ function findChild(node, part, partLower, parts, partIndex, params) {
|
|
|
279
280
|
return void 0;
|
|
280
281
|
}
|
|
281
282
|
function findIndexNode(node) {
|
|
282
|
-
if (node._I || node._G) {
|
|
283
|
+
if (node._I || node._G != null) {
|
|
283
284
|
return {
|
|
284
285
|
target: node,
|
|
285
286
|
groups: []
|
|
@@ -299,7 +300,7 @@ function findIndexNode(node) {
|
|
|
299
300
|
return void 0;
|
|
300
301
|
}
|
|
301
302
|
function resolveLoaders(root, node, gatheredLayouts) {
|
|
302
|
-
if (node._G) {
|
|
303
|
+
if (node._G != null) {
|
|
303
304
|
const keys = node._G.split("/").filter((p) => p.length > 0);
|
|
304
305
|
const target = walkTrieKeys(root, keys);
|
|
305
306
|
if (!target) {
|
|
@@ -307,7 +308,7 @@ function resolveLoaders(root, node, gatheredLayouts) {
|
|
|
307
308
|
}
|
|
308
309
|
let targetNode = target.node;
|
|
309
310
|
const targetLayouts = target.layouts;
|
|
310
|
-
if (!targetNode._I &&
|
|
311
|
+
if (!targetNode._I && targetNode._G == null) {
|
|
311
312
|
const indexResult = findIndexNode(targetNode);
|
|
312
313
|
if (indexResult) {
|
|
313
314
|
for (const g of indexResult.groups) {
|
|
@@ -420,14 +421,14 @@ function matchRouteTree(root = {}, pathname) {
|
|
|
420
421
|
collectNodeMeta(node, found.groups, layouts, errorLoaderRef, notFoundLoaderRef, menuLoaderRef);
|
|
421
422
|
}
|
|
422
423
|
if (matched && !done && i === len) {
|
|
423
|
-
if (!node._I &&
|
|
424
|
+
if (!node._I && node._G == null) {
|
|
424
425
|
const indexResult = findIndexNode(node);
|
|
425
426
|
if (indexResult) {
|
|
426
427
|
collectNodeMeta(indexResult.target, indexResult.groups, layouts, errorLoaderRef, notFoundLoaderRef, menuLoaderRef);
|
|
427
428
|
node = indexResult.target;
|
|
428
429
|
}
|
|
429
430
|
}
|
|
430
|
-
if (!node._I &&
|
|
431
|
+
if (!node._I && node._G == null && node._A) {
|
|
431
432
|
const next = node._A;
|
|
432
433
|
const paramName = next._P;
|
|
433
434
|
params[paramName] = "";
|
|
@@ -440,7 +441,7 @@ function matchRouteTree(root = {}, pathname) {
|
|
|
440
441
|
menuLoaderRef.v = node._N;
|
|
441
442
|
}
|
|
442
443
|
}
|
|
443
|
-
if (!node._I &&
|
|
444
|
+
if (!node._I && node._G == null) {
|
|
444
445
|
const restInfo = findRestNode(node);
|
|
445
446
|
if (restInfo) {
|
|
446
447
|
const next = restInfo.next;
|
|
@@ -1183,7 +1184,7 @@ function createResolveRequestHandlers(deps) {
|
|
|
1183
1184
|
const routeLoaders = [];
|
|
1184
1185
|
const routeActions = [];
|
|
1185
1186
|
const requestHandlers = [];
|
|
1186
|
-
const isPageRoute = !!
|
|
1187
|
+
const isPageRoute = !!isLastModulePageRoute(route.$mods$);
|
|
1187
1188
|
if (isInternal) {
|
|
1188
1189
|
requestHandlers.push(handleQDataRedirect);
|
|
1189
1190
|
}
|
|
@@ -1193,36 +1194,36 @@ function createResolveRequestHandlers(deps) {
|
|
|
1193
1194
|
if (serverPlugins) {
|
|
1194
1195
|
_resolveRequestHandlers(routeLoaders, routeActions, requestHandlers, serverPlugins, isPageRoute, method);
|
|
1195
1196
|
}
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
if (checkOrigin
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
requestHandlers.unshift(csrfCheckMiddleware);
|
|
1205
|
-
}
|
|
1197
|
+
const routeModules = route.$mods$;
|
|
1198
|
+
_resolveRequestHandlers(routeLoaders, routeActions, requestHandlers, routeModules, isPageRoute, method);
|
|
1199
|
+
const routeName = route.$routeName$;
|
|
1200
|
+
if (checkOrigin && (method === "POST" || method === "PUT" || method === "PATCH" || method === "DELETE")) {
|
|
1201
|
+
if (checkOrigin === "lax-proto") {
|
|
1202
|
+
requestHandlers.unshift(csrfLaxProtoCheckMiddleware);
|
|
1203
|
+
} else {
|
|
1204
|
+
requestHandlers.unshift(csrfCheckMiddleware);
|
|
1206
1205
|
}
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1206
|
+
}
|
|
1207
|
+
if (isPageRoute) {
|
|
1208
|
+
if (method === "POST" || method === "GET") {
|
|
1209
|
+
requestHandlers.push(runServerFunction);
|
|
1210
|
+
}
|
|
1211
|
+
if (!route.$notFound$) {
|
|
1211
1212
|
requestHandlers.push(fixTrailingSlash);
|
|
1212
|
-
if (isInternal) {
|
|
1213
|
-
requestHandlers.push(renderQData);
|
|
1214
|
-
}
|
|
1215
1213
|
}
|
|
1216
|
-
if (
|
|
1217
|
-
requestHandlers.push(
|
|
1218
|
-
ev.sharedMap.set(deps.RequestRouteName, routeName);
|
|
1219
|
-
});
|
|
1220
|
-
requestHandlers.push(actionsMiddleware(routeActions));
|
|
1221
|
-
requestHandlers.push(loadersMiddleware(routeLoaders));
|
|
1222
|
-
requestHandlers.push(eTagMiddleware(route));
|
|
1223
|
-
requestHandlers.push(renderHandler);
|
|
1214
|
+
if (isInternal) {
|
|
1215
|
+
requestHandlers.push(renderQData);
|
|
1224
1216
|
}
|
|
1225
1217
|
}
|
|
1218
|
+
if (isPageRoute) {
|
|
1219
|
+
requestHandlers.push((ev) => {
|
|
1220
|
+
ev.sharedMap.set(deps.RequestRouteName, routeName);
|
|
1221
|
+
});
|
|
1222
|
+
requestHandlers.push(actionsMiddleware(routeActions));
|
|
1223
|
+
requestHandlers.push(loadersMiddleware(routeLoaders));
|
|
1224
|
+
requestHandlers.push(eTagMiddleware(route));
|
|
1225
|
+
requestHandlers.push(renderHandler);
|
|
1226
|
+
}
|
|
1226
1227
|
return requestHandlers;
|
|
1227
1228
|
};
|
|
1228
1229
|
const _resolveRequestHandlers = (routeLoaders, routeActions, requestHandlers, routeModules, collectActions, method) => {
|
package/lib/index.d.ts
CHANGED
|
@@ -400,8 +400,6 @@ export declare interface FormProps<O, I> extends Omit<QwikJSX.IntrinsicElements[
|
|
|
400
400
|
* Defaults to `false`
|
|
401
401
|
*/
|
|
402
402
|
spaReset?: boolean;
|
|
403
|
-
/** Event handler executed right when the form is submitted. */
|
|
404
|
-
onSubmit$?: QRLEventHandlerMulti<SubmitEvent, HTMLFormElement> | undefined;
|
|
405
403
|
/** Event handler executed right after the action is executed successfully and returns some data. */
|
|
406
404
|
onSubmitCompleted$?: QRLEventHandlerMulti<CustomEvent<FormSubmitSuccessDetail<O>>, HTMLFormElement> | undefined;
|
|
407
405
|
key?: string | number | null;
|
|
@@ -740,7 +738,10 @@ export { RequestEventLoader }
|
|
|
740
738
|
export { RequestHandler }
|
|
741
739
|
|
|
742
740
|
/** @public */
|
|
743
|
-
export declare type ResolvedDocumentHead<FrontMatter extends Record<string, any> = Record<string, unknown>> = Required<DocumentHeadValue<FrontMatter
|
|
741
|
+
export declare type ResolvedDocumentHead<FrontMatter extends Record<string, any> = Record<string, unknown>> = Required<DocumentHeadValue<FrontMatter>> & {
|
|
742
|
+
/** The build's manifest hash, used for per-loader data URLs. Always defined (`'dev'` in dev). */
|
|
743
|
+
readonly manifestHash: string;
|
|
744
|
+
};
|
|
744
745
|
|
|
745
746
|
/** @public */
|
|
746
747
|
export declare const routeAction$: ActionConstructor;
|