@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 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 && !targetNode._G) {
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 && !node._G) {
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 && !node._G && node._A) {
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 && !node._G) {
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, isSameOrigin as b, createLoaderSignal as c, clientNavigate as d, loadRoute 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 };
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
- export { MIME_TYPES as M };
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 && !targetNode._G) {
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 && !node._G) {
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 && !node._G && node._A) {
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 && !node._G) {
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 = !!(route && isLastModulePageRoute(route.$mods$));
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
- if (route) {
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);
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
- if (isPageRoute) {
1208
- if (method === "POST" || method === "GET") {
1209
- requestHandlers.push(runServerFunction);
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 (isPageRoute) {
1217
- requestHandlers.push((ev) => {
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;