@qwik.dev/router 2.0.0-alpha.1 → 2.0.0-alpha.10

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.
Files changed (48) hide show
  1. package/lib/adapters/azure-swa/vite/index.cjs +3 -3
  2. package/lib/adapters/azure-swa/vite/index.d.ts +13 -13
  3. package/lib/adapters/bun-server/vite/index.cjs +3 -3
  4. package/lib/adapters/bun-server/vite/index.d.ts +14 -14
  5. package/lib/adapters/cloud-run/vite/index.cjs +3 -3
  6. package/lib/adapters/cloud-run/vite/index.d.ts +13 -13
  7. package/lib/adapters/cloudflare-pages/vite/index.cjs +3 -3
  8. package/lib/adapters/cloudflare-pages/vite/index.d.ts +27 -27
  9. package/lib/adapters/deno-server/vite/index.cjs +3 -3
  10. package/lib/adapters/deno-server/vite/index.d.ts +14 -14
  11. package/lib/adapters/netlify-edge/vite/index.cjs +3 -3
  12. package/lib/adapters/netlify-edge/vite/index.d.ts +44 -44
  13. package/lib/adapters/node-server/vite/index.cjs +3 -3
  14. package/lib/adapters/node-server/vite/index.d.ts +14 -14
  15. package/lib/adapters/shared/vite/index.cjs +10 -3
  16. package/lib/adapters/shared/vite/index.d.ts +114 -114
  17. package/lib/adapters/shared/vite/index.mjs +7 -0
  18. package/lib/adapters/static/vite/index.cjs +10 -3
  19. package/lib/adapters/static/vite/index.d.ts +10 -10
  20. package/lib/adapters/static/vite/index.mjs +7 -0
  21. package/lib/adapters/vercel-edge/vite/index.cjs +3 -3
  22. package/lib/adapters/vercel-edge/vite/index.d.ts +45 -45
  23. package/lib/index.d.ts +878 -801
  24. package/lib/index.qwik.cjs +84 -84
  25. package/lib/index.qwik.mjs +64 -64
  26. package/lib/middleware/aws-lambda/index.d.ts +48 -50
  27. package/lib/middleware/azure-swa/index.d.ts +28 -28
  28. package/lib/middleware/bun/index.d.ts +35 -35
  29. package/lib/middleware/cloudflare-pages/index.d.ts +35 -35
  30. package/lib/middleware/deno/index.d.ts +47 -47
  31. package/lib/middleware/firebase/index.d.ts +26 -26
  32. package/lib/middleware/netlify-edge/index.d.ts +27 -27
  33. package/lib/middleware/node/index.cjs +3 -3
  34. package/lib/middleware/node/index.d.ts +64 -66
  35. package/lib/middleware/request-handler/index.cjs +37 -38
  36. package/lib/middleware/request-handler/index.d.ts +676 -681
  37. package/lib/middleware/request-handler/index.mjs +34 -35
  38. package/lib/middleware/vercel-edge/index.d.ts +26 -26
  39. package/lib/service-worker.cjs +13 -263
  40. package/lib/service-worker.d.ts +15 -4
  41. package/lib/service-worker.mjs +13 -263
  42. package/lib/static/index.cjs +3 -3
  43. package/lib/static/index.d.ts +96 -98
  44. package/lib/static/node.cjs +3 -3
  45. package/lib/vite/index.cjs +129 -247
  46. package/lib/vite/index.d.ts +154 -154
  47. package/lib/vite/index.mjs +127 -245
  48. package/package.json +10 -9
@@ -1,26 +1,26 @@
1
- import type { ServerRenderOptions } from '@qwik.dev/router/middleware/request-handler';
2
-
3
- /**
4
- * @deprecated Use `createQwikRouter` instead. Will be removed in V3
5
- * @public
6
- */
7
- export declare const createQwikCity: typeof createQwikRouter;
8
-
9
- /** @public */
10
- export declare function createQwikRouter(opts: QwikRouterFirebaseOptions): (req: any, res: any) => Promise<void>;
11
-
12
- /** @public */
13
- export declare interface PlatformFirebase extends Object {
14
- }
15
-
16
- /**
17
- * @deprecated Use `QwikRouterFirebaseOptions` instead. Will be removed in V3
18
- * @public
19
- */
20
- export declare type QwikCityFirebaseOptions = QwikRouterFirebaseOptions;
21
-
22
- /** @public */
23
- export declare interface QwikRouterFirebaseOptions extends ServerRenderOptions {
24
- }
25
-
26
- export { }
1
+ import type { ServerRenderOptions } from '@qwik.dev/router/middleware/request-handler';
2
+
3
+ /**
4
+ * @deprecated Use `createQwikRouter` instead. Will be removed in V3
5
+ * @public
6
+ */
7
+ export declare const createQwikCity: typeof createQwikRouter;
8
+
9
+ /** @public */
10
+ export declare function createQwikRouter(opts: QwikRouterFirebaseOptions): (req: any, res: any) => Promise<void>;
11
+
12
+ /** @public */
13
+ export declare interface PlatformFirebase extends Object {
14
+ }
15
+
16
+ /**
17
+ * @deprecated Use `QwikRouterFirebaseOptions` instead. Will be removed in V3
18
+ * @public
19
+ */
20
+ export declare type QwikCityFirebaseOptions = QwikRouterFirebaseOptions;
21
+
22
+ /** @public */
23
+ export declare interface QwikRouterFirebaseOptions extends ServerRenderOptions {
24
+ }
25
+
26
+ export { }
@@ -1,27 +1,27 @@
1
- import type { Context } from '@netlify/edge-functions';
2
- import type { ServerRenderOptions } from '@qwik.dev/router/middleware/request-handler';
3
-
4
- /**
5
- * @deprecated Use `createQwikRouter` instead. Will be removed in V3
6
- * @public
7
- */
8
- export declare const createQwikCity: typeof createQwikRouter;
9
-
10
- /** @public */
11
- export declare function createQwikRouter(opts: QwikRouterNetlifyOptions): (request: Request, context: Context) => Promise<Response>;
12
-
13
- /** @public */
14
- export declare interface PlatformNetlify extends Partial<Omit<Context, 'next' | 'cookies'>> {
15
- }
16
-
17
- /**
18
- * @deprecated Use `QwikRouterNetlifyOptions` instead. Will be removed in V3
19
- * @public
20
- */
21
- export declare type QwikCityNetlifyOptions = QwikRouterNetlifyOptions;
22
-
23
- /** @public */
24
- export declare interface QwikRouterNetlifyOptions extends ServerRenderOptions {
25
- }
26
-
27
- export { }
1
+ import type { Context } from '@netlify/edge-functions';
2
+ import type { ServerRenderOptions } from '@qwik.dev/router/middleware/request-handler';
3
+
4
+ /**
5
+ * @deprecated Use `createQwikRouter` instead. Will be removed in V3
6
+ * @public
7
+ */
8
+ export declare const createQwikCity: typeof createQwikRouter;
9
+
10
+ /** @public */
11
+ export declare function createQwikRouter(opts: QwikRouterNetlifyOptions): (request: Request, context: Context) => Promise<Response>;
12
+
13
+ /** @public */
14
+ export declare interface PlatformNetlify extends Partial<Omit<Context, 'next' | 'cookies'>> {
15
+ }
16
+
17
+ /**
18
+ * @deprecated Use `QwikRouterNetlifyOptions` instead. Will be removed in V3
19
+ * @public
20
+ */
21
+ export declare type QwikCityNetlifyOptions = QwikRouterNetlifyOptions;
22
+
23
+ /** @public */
24
+ export declare interface QwikRouterNetlifyOptions extends ServerRenderOptions {
25
+ }
26
+
27
+ export { }
@@ -18,12 +18,12 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
20
  // packages/qwik-router/src/middleware/node/index.ts
21
- var node_exports = {};
22
- __export(node_exports, {
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
23
  createQwikCity: () => createQwikCity,
24
24
  createQwikRouter: () => createQwikRouter
25
25
  });
26
- module.exports = __toCommonJS(node_exports);
26
+ module.exports = __toCommonJS(index_exports);
27
27
  var import_qwik_router_not_found_paths = require("@qwik-router-not-found-paths");
28
28
  var import_qwik_router_static_paths = require("@qwik-router-static-paths");
29
29
  var import_internal = require("@qwik.dev/core/internal");
@@ -1,66 +1,64 @@
1
- /// <reference types="node" />
2
-
3
- import type { ClientConn } from '@qwik.dev/router/middleware/request-handler';
4
- import type { Http2ServerRequest } from 'node:http2';
5
- import type { IncomingMessage } from 'node:http';
6
- import type { ServerRenderOptions } from '@qwik.dev/router/middleware/request-handler';
7
- import type { ServerResponse } from 'node:http';
8
-
9
- /**
10
- * @deprecated Use `createQwikRouter` instead. Will be removed in V3
11
- * @public
12
- */
13
- export declare const createQwikCity: typeof createQwikRouter;
14
-
15
- /** @public */
16
- export declare function createQwikRouter(opts: QwikRouterNodeRequestOptions | QwikCityNodeRequestOptions): {
17
- router: (req: IncomingMessage | Http2ServerRequest, res: ServerResponse, next: NodeRequestNextFunction) => Promise<void>;
18
- notFound: (req: IncomingMessage | Http2ServerRequest, res: ServerResponse, next: (e: any) => void) => Promise<void>;
19
- staticFile: (req: IncomingMessage | Http2ServerRequest, res: ServerResponse, next: (e?: any) => void) => Promise<void>;
20
- };
21
-
22
- /** @public */
23
- export declare interface NodeRequestNextFunction {
24
- (err?: any): void;
25
- }
26
-
27
- /** @public */
28
- export declare interface PlatformNode {
29
- ssr?: true;
30
- incomingMessage?: IncomingMessage | Http2ServerRequest;
31
- node?: string;
32
- }
33
-
34
- /**
35
- * @deprecated Use `QwikRouterNodeRequestOptions` instead. Will be removed in V3
36
- * @public
37
- */
38
- export declare type QwikCityNodeRequestOptions = QwikRouterNodeRequestOptions;
39
-
40
- /** @public */
41
- export declare interface QwikRouterNodeRequestOptions extends ServerRenderOptions {
42
- /** Options for serving static files */
43
- static?: {
44
- /** The root folder for statics files. Defaults to /dist */
45
- root?: string;
46
- /** Set the Cache-Control header for all static files */
47
- cacheControl?: string;
48
- };
49
- /**
50
- * Provide a function that computes the origin of the server, used to resolve relative URLs and
51
- * validate the request origin against CSRF attacks.
52
- *
53
- * When not specified, it defaults to the `ORIGIN` environment variable (if set).
54
- *
55
- * If `ORIGIN` is not set, it's derived from the incoming request, which is not recommended for
56
- * production use. You can specify the `PROTOCOL_HEADER`, `HOST_HEADER` to `X-Forwarded-Proto` and
57
- * `X-Forwarded-Host` respectively to override the default behavior.
58
- */
59
- getOrigin?: (req: IncomingMessage | Http2ServerRequest) => string | null;
60
- /** Provide a function that returns a `ClientConn` for the given request. */
61
- getClientConn?: (req: IncomingMessage | Http2ServerRequest) => ClientConn;
62
- /** @deprecated Use `getOrigin` instead. Will be removed in V3 */
63
- origin?: string;
64
- }
65
-
66
- export { }
1
+ import type { ClientConn } from '@qwik.dev/router/middleware/request-handler';
2
+ import type { Http2ServerRequest } from 'node:http2';
3
+ import type { IncomingMessage } from 'node:http';
4
+ import type { ServerRenderOptions } from '@qwik.dev/router/middleware/request-handler';
5
+ import type { ServerResponse } from 'node:http';
6
+
7
+ /**
8
+ * @deprecated Use `createQwikRouter` instead. Will be removed in V3
9
+ * @public
10
+ */
11
+ export declare const createQwikCity: typeof createQwikRouter;
12
+
13
+ /** @public */
14
+ export declare function createQwikRouter(opts: QwikRouterNodeRequestOptions | QwikCityNodeRequestOptions): {
15
+ router: (req: IncomingMessage | Http2ServerRequest, res: ServerResponse, next: NodeRequestNextFunction) => Promise<void>;
16
+ notFound: (req: IncomingMessage | Http2ServerRequest, res: ServerResponse, next: (e: any) => void) => Promise<void>;
17
+ staticFile: (req: IncomingMessage | Http2ServerRequest, res: ServerResponse, next: (e?: any) => void) => Promise<void>;
18
+ };
19
+
20
+ /** @public */
21
+ export declare interface NodeRequestNextFunction {
22
+ (err?: any): void;
23
+ }
24
+
25
+ /** @public */
26
+ export declare interface PlatformNode {
27
+ ssr?: true;
28
+ incomingMessage?: IncomingMessage | Http2ServerRequest;
29
+ node?: string;
30
+ }
31
+
32
+ /**
33
+ * @deprecated Use `QwikRouterNodeRequestOptions` instead. Will be removed in V3
34
+ * @public
35
+ */
36
+ export declare type QwikCityNodeRequestOptions = QwikRouterNodeRequestOptions;
37
+
38
+ /** @public */
39
+ export declare interface QwikRouterNodeRequestOptions extends ServerRenderOptions {
40
+ /** Options for serving static files */
41
+ static?: {
42
+ /** The root folder for statics files. Defaults to /dist */
43
+ root?: string;
44
+ /** Set the Cache-Control header for all static files */
45
+ cacheControl?: string;
46
+ };
47
+ /**
48
+ * Provide a function that computes the origin of the server, used to resolve relative URLs and
49
+ * validate the request origin against CSRF attacks.
50
+ *
51
+ * When not specified, it defaults to the `ORIGIN` environment variable (if set).
52
+ *
53
+ * If `ORIGIN` is not set, it's derived from the incoming request, which is not recommended for
54
+ * production use. You can specify the `PROTOCOL_HEADER`, `HOST_HEADER` to `X-Forwarded-Proto` and
55
+ * `X-Forwarded-Host` respectively to override the default behavior.
56
+ */
57
+ getOrigin?: (req: IncomingMessage | Http2ServerRequest) => string | null;
58
+ /** Provide a function that returns a `ClientConn` for the given request. */
59
+ getClientConn?: (req: IncomingMessage | Http2ServerRequest) => ClientConn;
60
+ /** @deprecated Use `getOrigin` instead. Will be removed in V3 */
61
+ origin?: string;
62
+ }
63
+
64
+ export { }
@@ -28,8 +28,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
 
30
30
  // packages/qwik-router/src/middleware/request-handler/index.ts
31
- var request_handler_exports = {};
32
- __export(request_handler_exports, {
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
33
  AbortMessage: () => AbortMessage,
34
34
  RedirectMessage: () => RedirectMessage,
35
35
  ServerError: () => ServerError,
@@ -38,22 +38,16 @@ __export(request_handler_exports, {
38
38
  mergeHeadersCookies: () => mergeHeadersCookies,
39
39
  requestHandler: () => requestHandler
40
40
  });
41
- module.exports = __toCommonJS(request_handler_exports);
41
+ module.exports = __toCommonJS(index_exports);
42
42
 
43
43
  // packages/qwik-router/src/middleware/request-handler/error-handler.ts
44
44
  var ServerError = class extends Error {
45
45
  constructor(status, data) {
46
- super();
46
+ super(typeof data === "string" ? data : void 0);
47
47
  this.status = status;
48
48
  this.data = data;
49
49
  }
50
50
  };
51
- var ErrorResponse = class extends Error {
52
- constructor(status, message) {
53
- super(message);
54
- this.status = status;
55
- }
56
- };
57
51
  function getErrorHtml(status, e) {
58
52
  let message = "Server Error";
59
53
  if (e != null) {
@@ -501,8 +495,7 @@ function createCacheControl(cacheControl) {
501
495
  cacheControl = {
502
496
  public: true,
503
497
  immutable: true,
504
- maxAge: 60 * 60 * 24 * 365,
505
- staleWhileRevalidate: 60 * 60 * 24 * 365
498
+ maxAge: 60 * 60 * 24 * 365
506
499
  };
507
500
  } else if (cacheControl === "no-cache") {
508
501
  cacheControl = {
@@ -512,8 +505,7 @@ function createCacheControl(cacheControl) {
512
505
  if (typeof cacheControl === "number") {
513
506
  cacheControl = {
514
507
  maxAge: cacheControl,
515
- sMaxAge: cacheControl,
516
- staleWhileRevalidate: cacheControl
508
+ sMaxAge: cacheControl
517
509
  };
518
510
  }
519
511
  if (cacheControl.immutable) {
@@ -558,14 +550,13 @@ import("node:async_hooks").then((module2) => {
558
550
  err
559
551
  );
560
552
  });
561
- function runQwikRouter(serverRequestEv, loadedRoute, requestHandlers, manifest, trailingSlash = true, basePathname = "/", qwikSerializer) {
553
+ function runQwikRouter(serverRequestEv, loadedRoute, requestHandlers, trailingSlash = true, basePathname = "/", qwikSerializer) {
562
554
  let resolve;
563
555
  const responsePromise = new Promise((r) => resolve = r);
564
556
  const requestEv = createRequestEvent(
565
557
  serverRequestEv,
566
558
  loadedRoute,
567
559
  requestHandlers,
568
- manifest,
569
560
  trailingSlash,
570
561
  basePathname,
571
562
  qwikSerializer,
@@ -584,12 +575,18 @@ async function runNext(requestEv, resolve) {
584
575
  if (e instanceof RedirectMessage) {
585
576
  const stream = requestEv.getWritableStream();
586
577
  await stream.close();
587
- } else if (e instanceof ErrorResponse) {
588
- console.error(e);
578
+ } else if (e instanceof ServerError) {
589
579
  if (!requestEv.headersSent) {
590
- const html = getErrorHtml(e.status, e);
591
580
  const status = e.status;
592
- requestEv.html(status, html);
581
+ const accept = requestEv.request.headers.get("Accept");
582
+ if (accept && !accept.includes("text/html")) {
583
+ const qwikSerializer = requestEv[RequestEvQwikSerializer];
584
+ requestEv.headers.set("Content-Type", "application/qwik-json");
585
+ requestEv.send(status, await qwikSerializer._serialize([e.data]));
586
+ } else {
587
+ const html = getErrorHtml(e.status, e.data);
588
+ requestEv.html(status, html);
589
+ }
593
590
  }
594
591
  } else if (!(e instanceof AbortMessage)) {
595
592
  if (getRequestMode(requestEv) !== "dev") {
@@ -642,7 +639,7 @@ var RequestRouteName = "@routeName";
642
639
  var RequestEvSharedActionId = "@actionId";
643
640
  var RequestEvSharedActionFormData = "@actionFormData";
644
641
  var RequestEvSharedNonce = "@nonce";
645
- function createRequestEvent(serverRequestEv, loadedRoute, requestHandlers, manifest, trailingSlash, basePathname, qwikSerializer, resolved) {
642
+ function createRequestEvent(serverRequestEv, loadedRoute, requestHandlers, trailingSlash, basePathname, qwikSerializer, resolved) {
646
643
  const { request, platform, env } = serverRequestEv;
647
644
  const sharedMap = /* @__PURE__ */ new Map();
648
645
  const cookie = new Cookie(request.headers.get("cookie"));
@@ -655,7 +652,6 @@ function createRequestEvent(serverRequestEv, loadedRoute, requestHandlers, manif
655
652
  }
656
653
  sharedMap.set(IsQData, true);
657
654
  }
658
- sharedMap.set("@manifest", manifest);
659
655
  let routeModuleIndex = -1;
660
656
  let writableStream = null;
661
657
  let requestData = void 0;
@@ -689,17 +685,25 @@ function createRequestEvent(serverRequestEv, loadedRoute, requestHandlers, manif
689
685
  } else {
690
686
  status = statusOrResponse.status;
691
687
  statusOrResponse.headers.forEach((value, key) => {
688
+ if (key.toLowerCase() === "set-cookie") {
689
+ return;
690
+ }
692
691
  headers.append(key, value);
693
692
  });
693
+ statusOrResponse.headers.getSetCookie().forEach((ck) => {
694
+ const index = ck.indexOf("=");
695
+ if (index === -1) {
696
+ return;
697
+ }
698
+ const key = ck.slice(0, index).trim();
699
+ const value = ck.slice(index + 1).trim();
700
+ cookie.set(key, value);
701
+ });
694
702
  if (statusOrResponse.body) {
695
703
  const writableStream2 = requestEv.getWritableStream();
696
704
  statusOrResponse.body.pipeTo(writableStream2);
697
705
  } else {
698
- if (status >= 300 && status < 400) {
699
- return new RedirectMessage();
700
- } else {
701
- requestEv.getWritableStream().getWriter().close();
702
- }
706
+ requestEv.getWritableStream().getWriter().close();
703
707
  }
704
708
  }
705
709
  return exit();
@@ -770,7 +774,7 @@ function createRequestEvent(serverRequestEv, loadedRoute, requestHandlers, manif
770
774
  },
771
775
  error: (statusCode, message) => {
772
776
  status = statusCode;
773
- return new ErrorResponse(statusCode, message);
777
+ return new ServerError(statusCode, message);
774
778
  },
775
779
  redirect: (statusCode, url2) => {
776
780
  check();
@@ -871,7 +875,7 @@ var parseRequest = async ({ request, method, query }, sharedMap, qwikSerializer)
871
875
  if (data) {
872
876
  try {
873
877
  return qwikSerializer._deserialize(decodeURIComponent(data));
874
- } catch (err) {
878
+ } catch {
875
879
  }
876
880
  }
877
881
  }
@@ -1182,13 +1186,9 @@ async function pureServerFunction(ev) {
1182
1186
  }
1183
1187
  } catch (err) {
1184
1188
  if (err instanceof ServerError) {
1185
- ev.headers.set("Content-Type", "application/qwik-json");
1186
- ev.send(err.status, await qwikSerializer._serialize([err.data]));
1187
- return;
1189
+ throw ev.error(err.status, err.data);
1188
1190
  }
1189
- ev.headers.set("Content-Type", "application/qwik-json");
1190
- ev.send(500, await qwikSerializer._serialize([err]));
1191
- return;
1191
+ throw ev.error(500, "Invalid request");
1192
1192
  }
1193
1193
  if (isAsyncIterator(result)) {
1194
1194
  ev.headers.set("Content-Type", "text/qwik-json-stream");
@@ -1430,13 +1430,13 @@ async function measure(requestEv, name, fn) {
1430
1430
  }
1431
1431
  function isContentType(headers, ...types) {
1432
1432
  var _a;
1433
- const type = ((_a = headers.get("content-type")) == null ? void 0 : _a.split(/;,/, 1)[0].trim()) ?? "";
1433
+ const type = ((_a = headers.get("content-type")) == null ? void 0 : _a.split(/;/, 1)[0].trim()) ?? "";
1434
1434
  return types.includes(type);
1435
1435
  }
1436
1436
 
1437
1437
  // packages/qwik-router/src/middleware/request-handler/request-handler.ts
1438
1438
  async function requestHandler(serverRequestEv, opts, qwikSerializer) {
1439
- const { render, qwikRouterConfig, manifest, checkOrigin } = opts;
1439
+ const { render, qwikRouterConfig, checkOrigin } = opts;
1440
1440
  if (!qwikRouterConfig) {
1441
1441
  throw new Error("qwikRouterConfig is required.");
1442
1442
  }
@@ -1455,7 +1455,6 @@ async function requestHandler(serverRequestEv, opts, qwikSerializer) {
1455
1455
  serverRequestEv,
1456
1456
  route,
1457
1457
  requestHandlers,
1458
- manifest,
1459
1458
  qwikRouterConfig.trailingSlash,
1460
1459
  qwikRouterConfig.basePathname,
1461
1460
  qwikSerializer