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

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 (98) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +15 -0
  3. package/adapters/azure-swa/vite.d.ts +2 -0
  4. package/adapters/bun-server/vite.d.ts +2 -0
  5. package/adapters/cloud-run/vite.d.ts +2 -0
  6. package/adapters/cloudflare-pages/vite.d.ts +2 -0
  7. package/adapters/deno-server/vite.d.ts +2 -0
  8. package/adapters/netlify-edge/vite.d.ts +2 -0
  9. package/adapters/node-server/vite.d.ts +2 -0
  10. package/adapters/shared/vite.d.ts +2 -0
  11. package/adapters/static/vite.d.ts +2 -0
  12. package/adapters/vercel-edge/vite.d.ts +2 -0
  13. package/index.d.ts +2 -0
  14. package/lib/adapters/azure-swa/vite/index.cjs +96 -0
  15. package/lib/adapters/azure-swa/vite/index.d.ts +13 -0
  16. package/lib/adapters/azure-swa/vite/index.mjs +61 -0
  17. package/lib/adapters/bun-server/vite/index.cjs +50 -0
  18. package/lib/adapters/bun-server/vite/index.d.ts +14 -0
  19. package/lib/adapters/bun-server/vite/index.mjs +25 -0
  20. package/lib/adapters/cloud-run/vite/index.cjs +47 -0
  21. package/lib/adapters/cloud-run/vite/index.d.ts +13 -0
  22. package/lib/adapters/cloud-run/vite/index.mjs +22 -0
  23. package/lib/adapters/cloudflare-pages/vite/index.cjs +115 -0
  24. package/lib/adapters/cloudflare-pages/vite/index.d.ts +27 -0
  25. package/lib/adapters/cloudflare-pages/vite/index.mjs +80 -0
  26. package/lib/adapters/deno-server/vite/index.cjs +62 -0
  27. package/lib/adapters/deno-server/vite/index.d.ts +14 -0
  28. package/lib/adapters/deno-server/vite/index.mjs +37 -0
  29. package/lib/adapters/netlify-edge/vite/index.cjs +129 -0
  30. package/lib/adapters/netlify-edge/vite/index.d.ts +44 -0
  31. package/lib/adapters/netlify-edge/vite/index.mjs +92 -0
  32. package/lib/adapters/node-server/vite/index.cjs +50 -0
  33. package/lib/adapters/node-server/vite/index.d.ts +14 -0
  34. package/lib/adapters/node-server/vite/index.mjs +25 -0
  35. package/lib/adapters/shared/vite/index.cjs +371 -0
  36. package/lib/adapters/shared/vite/index.d.ts +114 -0
  37. package/lib/adapters/shared/vite/index.mjs +331 -0
  38. package/lib/adapters/static/vite/index.cjs +361 -0
  39. package/lib/adapters/static/vite/index.d.ts +10 -0
  40. package/lib/adapters/static/vite/index.mjs +324 -0
  41. package/lib/adapters/vercel-edge/vite/index.cjs +118 -0
  42. package/lib/adapters/vercel-edge/vite/index.d.ts +45 -0
  43. package/lib/adapters/vercel-edge/vite/index.mjs +83 -0
  44. package/lib/index.d.ts +803 -0
  45. package/lib/index.qwik.cjs +1876 -0
  46. package/lib/index.qwik.mjs +1857 -0
  47. package/lib/middleware/aws-lambda/index.d.ts +50 -0
  48. package/lib/middleware/aws-lambda/index.mjs +55 -0
  49. package/lib/middleware/azure-swa/index.d.ts +28 -0
  50. package/lib/middleware/azure-swa/index.mjs +297 -0
  51. package/lib/middleware/bun/index.d.ts +35 -0
  52. package/lib/middleware/bun/index.mjs +208 -0
  53. package/lib/middleware/cloudflare-pages/index.d.ts +35 -0
  54. package/lib/middleware/cloudflare-pages/index.mjs +107 -0
  55. package/lib/middleware/deno/index.d.ts +47 -0
  56. package/lib/middleware/deno/index.mjs +195 -0
  57. package/lib/middleware/firebase/index.d.ts +26 -0
  58. package/lib/middleware/firebase/index.mjs +36 -0
  59. package/lib/middleware/netlify-edge/index.d.ts +27 -0
  60. package/lib/middleware/netlify-edge/index.mjs +83 -0
  61. package/lib/middleware/node/index.cjs +314 -0
  62. package/lib/middleware/node/index.d.ts +66 -0
  63. package/lib/middleware/node/index.mjs +287 -0
  64. package/lib/middleware/request-handler/index.cjs +1544 -0
  65. package/lib/middleware/request-handler/index.d.ts +681 -0
  66. package/lib/middleware/request-handler/index.mjs +1501 -0
  67. package/lib/middleware/vercel-edge/index.d.ts +26 -0
  68. package/lib/middleware/vercel-edge/index.mjs +109 -0
  69. package/lib/modules.d.ts +38 -0
  70. package/lib/service-worker.cjs +267 -0
  71. package/lib/service-worker.d.ts +4 -0
  72. package/lib/service-worker.mjs +265 -0
  73. package/lib/static/deno.mjs +8 -0
  74. package/lib/static/index.cjs +67 -0
  75. package/lib/static/index.d.ts +98 -0
  76. package/lib/static/index.mjs +48 -0
  77. package/lib/static/node.cjs +1124 -0
  78. package/lib/static/node.mjs +1086 -0
  79. package/lib/vite/index.cjs +27496 -0
  80. package/lib/vite/index.d.ts +154 -0
  81. package/lib/vite/index.mjs +27484 -0
  82. package/middleware/aws-lambda.d.ts +2 -0
  83. package/middleware/azure-swa.d.ts +2 -0
  84. package/middleware/bun.d.ts +2 -0
  85. package/middleware/cloudflare-pages.d.ts +2 -0
  86. package/middleware/deno.d.ts +2 -0
  87. package/middleware/firebase.d.ts +2 -0
  88. package/middleware/netlify-edge.d.ts +2 -0
  89. package/middleware/node.d.ts +2 -0
  90. package/middleware/request-handler/generated/not-found-paths.ts +7 -0
  91. package/middleware/request-handler/generated/static-paths.ts +35 -0
  92. package/middleware/request-handler.d.ts +2 -0
  93. package/middleware/vercel-edge.d.ts +2 -0
  94. package/modules.d.ts +38 -0
  95. package/package.json +171 -165
  96. package/service-worker.d.ts +2 -0
  97. package/static.d.ts +2 -0
  98. package/vite.d.ts +2 -0
@@ -0,0 +1,35 @@
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: QwikRouterCloudflarePagesOptions): (request: PlatformCloudflarePages['request'], env: PlatformCloudflarePages['env'] & {
11
+ ASSETS: {
12
+ fetch: (req: Request) => Response;
13
+ };
14
+ }, ctx: PlatformCloudflarePages['ctx']) => Promise<Response>;
15
+
16
+ /** @public */
17
+ export declare interface PlatformCloudflarePages {
18
+ request: Request;
19
+ env?: Record<string, any>;
20
+ ctx: {
21
+ waitUntil: (promise: Promise<any>) => void;
22
+ };
23
+ }
24
+
25
+ /**
26
+ * @deprecated Use `QwikRouterCloudflarePagesOptions` instead. Will be removed in V3
27
+ * @public
28
+ */
29
+ export declare type QwikCityCloudflarePagesOptions = QwikRouterCloudflarePagesOptions;
30
+
31
+ /** @public */
32
+ export declare interface QwikRouterCloudflarePagesOptions extends ServerRenderOptions {
33
+ }
34
+
35
+ export { }
@@ -0,0 +1,107 @@
1
+ // packages/qwik-router/src/middleware/cloudflare-pages/index.ts
2
+ import { getNotFound } from "@qwik-router-not-found-paths";
3
+ import { isStaticPath } from "@qwik-router-static-paths";
4
+ import { _deserialize, _serialize, _verifySerializable } from "@qwik.dev/core/internal";
5
+ import { setServerPlatform } from "@qwik.dev/core/server";
6
+ import {
7
+ _TextEncoderStream_polyfill,
8
+ mergeHeadersCookies,
9
+ requestHandler
10
+ } from "../request-handler/index.mjs";
11
+ function createQwikRouter(opts) {
12
+ if (opts.qwikCityPlan && !opts.qwikRouterConfig) {
13
+ console.warn("qwikCityPlan is deprecated. Use qwikRouterConfig instead.");
14
+ opts.qwikRouterConfig = opts.qwikCityPlan;
15
+ } else if (!opts.qwikRouterConfig) {
16
+ throw new Error("qwikRouterConfig is required.");
17
+ }
18
+ try {
19
+ new globalThis.TextEncoderStream();
20
+ } catch (e) {
21
+ globalThis.TextEncoderStream = _TextEncoderStream_polyfill;
22
+ }
23
+ const qwikSerializer = { _deserialize, _serialize, _verifySerializable };
24
+ if (opts.manifest) {
25
+ setServerPlatform(opts.manifest);
26
+ }
27
+ async function onCloudflarePagesFetch(request, env, ctx) {
28
+ try {
29
+ const url = new URL(request.url);
30
+ if (isStaticPath(request.method, url)) {
31
+ return env.ASSETS.fetch(request);
32
+ }
33
+ const useCache = url.hostname !== "127.0.0.1" && url.hostname !== "localhost" && url.port === "" && request.method === "GET";
34
+ const cacheKey = new Request(url.href, request);
35
+ const cache = useCache ? await caches.open("custom:qwikrouter") : null;
36
+ if (cache) {
37
+ const cachedResponse = await cache.match(cacheKey);
38
+ if (cachedResponse) {
39
+ return cachedResponse;
40
+ }
41
+ }
42
+ const serverRequestEv = {
43
+ mode: "server",
44
+ locale: void 0,
45
+ url,
46
+ request,
47
+ env: {
48
+ get(key) {
49
+ return env[key];
50
+ }
51
+ },
52
+ getWritableStream: (status, headers, cookies, resolve) => {
53
+ const { readable, writable } = new TransformStream();
54
+ const response = new Response(readable, {
55
+ status,
56
+ headers: mergeHeadersCookies(headers, cookies)
57
+ });
58
+ resolve(response);
59
+ return writable;
60
+ },
61
+ getClientConn: () => {
62
+ return {
63
+ ip: request.headers.get("CF-connecting-ip") || "",
64
+ country: request.headers.get("CF-IPCountry") || ""
65
+ };
66
+ },
67
+ platform: {
68
+ request,
69
+ env,
70
+ ctx
71
+ }
72
+ };
73
+ const handledResponse = await requestHandler(serverRequestEv, opts, qwikSerializer);
74
+ if (handledResponse) {
75
+ handledResponse.completion.then((v) => {
76
+ if (v) {
77
+ console.error(v);
78
+ }
79
+ });
80
+ const response = await handledResponse.response;
81
+ if (response) {
82
+ if (response.ok && cache && response.headers.has("Cache-Control")) {
83
+ ctx.waitUntil(cache.put(cacheKey, response.clone()));
84
+ }
85
+ return response;
86
+ }
87
+ }
88
+ const notFoundHtml = isStaticPath(request.method || "GET", url) ? "Not Found" : getNotFound(url.pathname);
89
+ return new Response(notFoundHtml, {
90
+ status: 404,
91
+ headers: { "Content-Type": "text/html; charset=utf-8", "X-Not-Found": url.pathname }
92
+ });
93
+ } catch (e) {
94
+ console.error(e);
95
+ return new Response(String(e || "Error"), {
96
+ status: 500,
97
+ headers: { "Content-Type": "text/plain; charset=utf-8", "X-Error": "cloudflare-pages" }
98
+ });
99
+ }
100
+ }
101
+ return onCloudflarePagesFetch;
102
+ }
103
+ var createQwikCity = createQwikRouter;
104
+ export {
105
+ createQwikCity,
106
+ createQwikRouter
107
+ };
@@ -0,0 +1,47 @@
1
+ import type { ClientConn } from '@qwik.dev/router/middleware/request-handler';
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: QwikRouterDenoOptions): {
12
+ router: (request: Request, info: ServeHandlerInfo) => Promise<Response | null>;
13
+ notFound: (request: Request) => Promise<Response>;
14
+ staticFile: (request: Request) => Promise<Response | null>;
15
+ };
16
+
17
+ /** @public */
18
+ export declare interface NetAddr {
19
+ transport: 'tcp' | 'udp';
20
+ hostname: string;
21
+ port: number;
22
+ }
23
+
24
+ /**
25
+ * @deprecated Use `QwikRouterDenoOptions` instead. Will be removed in V3
26
+ * @public
27
+ */
28
+ export declare type QwikCityDenoOptions = QwikRouterDenoOptions;
29
+
30
+ /** @public */
31
+ export declare interface QwikRouterDenoOptions extends ServerRenderOptions {
32
+ /** Options for serving static files */
33
+ static?: {
34
+ /** The root folder for statics files. Defaults to /dist */
35
+ root?: string;
36
+ /** Set the Cache-Control header for all static files */
37
+ cacheControl?: string;
38
+ };
39
+ getClientConn?: (request: Request, info: ServeHandlerInfo) => ClientConn;
40
+ }
41
+
42
+ /** @public */
43
+ export declare interface ServeHandlerInfo {
44
+ remoteAddr: NetAddr;
45
+ }
46
+
47
+ export { }
@@ -0,0 +1,195 @@
1
+ // packages/qwik-router/src/middleware/deno/index.ts
2
+ import { getNotFound } from "@qwik-router-not-found-paths";
3
+ import { isStaticPath } from "@qwik-router-static-paths";
4
+ import { _deserialize, _serialize, _verifySerializable } from "@qwik.dev/core/internal";
5
+ import { setServerPlatform } from "@qwik.dev/core/server";
6
+ import { mergeHeadersCookies, requestHandler } from "../request-handler/index.mjs";
7
+
8
+ // packages/qwik-router/src/middleware/request-handler/mime-types.ts
9
+ var MIME_TYPES = {
10
+ "3gp": "video/3gpp",
11
+ "3gpp": "video/3gpp",
12
+ asf: "video/x-ms-asf",
13
+ asx: "video/x-ms-asf",
14
+ avi: "video/x-msvideo",
15
+ avif: "image/avif",
16
+ bmp: "image/x-ms-bmp",
17
+ css: "text/css",
18
+ flv: "video/x-flv",
19
+ gif: "image/gif",
20
+ htm: "text/html",
21
+ html: "text/html",
22
+ ico: "image/x-icon",
23
+ jng: "image/x-jng",
24
+ jpeg: "image/jpeg",
25
+ jpg: "image/jpeg",
26
+ js: "application/javascript",
27
+ json: "application/json",
28
+ kar: "audio/midi",
29
+ m4a: "audio/x-m4a",
30
+ m4v: "video/x-m4v",
31
+ mid: "audio/midi",
32
+ midi: "audio/midi",
33
+ mng: "video/x-mng",
34
+ mov: "video/quicktime",
35
+ mp3: "audio/mpeg",
36
+ mp4: "video/mp4",
37
+ mpeg: "video/mpeg",
38
+ mpg: "video/mpeg",
39
+ ogg: "audio/ogg",
40
+ pdf: "application/pdf",
41
+ png: "image/png",
42
+ rar: "application/x-rar-compressed",
43
+ shtml: "text/html",
44
+ svg: "image/svg+xml",
45
+ svgz: "image/svg+xml",
46
+ tif: "image/tiff",
47
+ tiff: "image/tiff",
48
+ ts: "video/mp2t",
49
+ txt: "text/plain",
50
+ wbmp: "image/vnd.wap.wbmp",
51
+ webm: "video/webm",
52
+ webp: "image/webp",
53
+ wmv: "video/x-ms-wmv",
54
+ woff: "font/woff",
55
+ woff2: "font/woff2",
56
+ xml: "text/xml",
57
+ zip: "application/zip"
58
+ };
59
+
60
+ // packages/qwik-router/src/middleware/deno/index.ts
61
+ import { extname, fromFileUrl, join } from "https://deno.land/std/path/mod.ts";
62
+ function createQwikRouter(opts) {
63
+ var _a;
64
+ if (opts.qwikCityPlan && !opts.qwikRouterConfig) {
65
+ console.warn("qwikCityPlan is deprecated. Use qwikRouterConfig instead.");
66
+ opts.qwikRouterConfig = opts.qwikCityPlan;
67
+ } else if (!opts.qwikRouterConfig) {
68
+ throw new Error("qwikRouterConfig is required.");
69
+ }
70
+ const qwikSerializer = {
71
+ _deserialize,
72
+ _serialize,
73
+ _verifySerializable
74
+ };
75
+ if (opts.manifest) {
76
+ setServerPlatform(opts.manifest);
77
+ }
78
+ const staticFolder = ((_a = opts.static) == null ? void 0 : _a.root) ?? join(fromFileUrl(import.meta.url), "..", "..", "dist");
79
+ async function router(request, info) {
80
+ try {
81
+ const url = new URL(request.url);
82
+ const serverRequestEv = {
83
+ mode: "server",
84
+ locale: void 0,
85
+ url,
86
+ // @ts-ignore
87
+ env: Deno.env,
88
+ request,
89
+ getWritableStream: (status, headers, cookies, resolve) => {
90
+ const { readable, writable } = new TransformStream();
91
+ const response = new Response(readable, {
92
+ status,
93
+ headers: mergeHeadersCookies(headers, cookies)
94
+ });
95
+ resolve(response);
96
+ return writable;
97
+ },
98
+ platform: {
99
+ ssr: true
100
+ },
101
+ getClientConn: () => {
102
+ return opts.getClientConn ? opts.getClientConn(request, info) : {
103
+ ip: info.remoteAddr.hostname
104
+ };
105
+ }
106
+ };
107
+ const handledResponse = await requestHandler(serverRequestEv, opts, qwikSerializer);
108
+ if (handledResponse) {
109
+ handledResponse.completion.then((v) => {
110
+ if (v) {
111
+ console.error(v);
112
+ }
113
+ });
114
+ const response = await handledResponse.response;
115
+ if (response) {
116
+ return response;
117
+ }
118
+ }
119
+ return null;
120
+ } catch (e) {
121
+ console.error(e);
122
+ return new Response(String(e || "Error"), {
123
+ status: 500,
124
+ headers: { "Content-Type": "text/plain; charset=utf-8", "X-Error": "deno-server" }
125
+ });
126
+ }
127
+ }
128
+ const notFound = async (request) => {
129
+ try {
130
+ const url = new URL(request.url);
131
+ const notFoundHtml = isStaticPath(request.method || "GET", url) ? "Not Found" : getNotFound(url.pathname);
132
+ return new Response(notFoundHtml, {
133
+ status: 404,
134
+ headers: { "Content-Type": "text/html; charset=utf-8", "X-Not-Found": url.pathname }
135
+ });
136
+ } catch (e) {
137
+ console.error(e);
138
+ return new Response(String(e || "Error"), {
139
+ status: 500,
140
+ headers: { "Content-Type": "text/plain; charset=utf-8", "X-Error": "deno-server" }
141
+ });
142
+ }
143
+ };
144
+ const openStaticFile = async (url) => {
145
+ const pathname = url.pathname;
146
+ const fileName = pathname.slice(url.pathname.lastIndexOf("/"));
147
+ let filePath;
148
+ if (fileName.includes(".")) {
149
+ filePath = join(staticFolder, pathname);
150
+ } else if (opts.qwikRouterConfig.trailingSlash) {
151
+ filePath = join(staticFolder, pathname + "index.html");
152
+ } else {
153
+ filePath = join(staticFolder, pathname, "index.html");
154
+ }
155
+ return {
156
+ filePath,
157
+ // @ts-ignore
158
+ content: await Deno.open(filePath, { read: true })
159
+ };
160
+ };
161
+ const staticFile = async (request) => {
162
+ var _a2;
163
+ try {
164
+ const url = new URL(request.url);
165
+ if (isStaticPath(request.method || "GET", url)) {
166
+ const { filePath, content } = await openStaticFile(url);
167
+ const ext = extname(filePath).replace(/^\./, "");
168
+ return new Response(content.readable, {
169
+ status: 200,
170
+ headers: {
171
+ "content-type": MIME_TYPES[ext] || "text/plain; charset=utf-8",
172
+ "Cache-Control": ((_a2 = opts.static) == null ? void 0 : _a2.cacheControl) || "max-age=3600"
173
+ }
174
+ });
175
+ }
176
+ return null;
177
+ } catch (e) {
178
+ console.error(e);
179
+ return new Response(String(e || "Error"), {
180
+ status: 500,
181
+ headers: { "Content-Type": "text/plain; charset=utf-8", "X-Error": "deno-server" }
182
+ });
183
+ }
184
+ };
185
+ return {
186
+ router,
187
+ notFound,
188
+ staticFile
189
+ };
190
+ }
191
+ var createQwikCity = createQwikRouter;
192
+ export {
193
+ createQwikCity,
194
+ createQwikRouter
195
+ };
@@ -0,0 +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 { }
@@ -0,0 +1,36 @@
1
+ // packages/qwik-router/src/middleware/firebase/index.ts
2
+ import { createQwikRouter as createQwikRouterNode } from "@qwik.dev/router/middleware/node";
3
+ function createQwikRouter(opts) {
4
+ if (opts.qwikCityPlan && !opts.qwikRouterConfig) {
5
+ console.warn("qwikCityPlan is deprecated. Use qwikRouterConfig instead.");
6
+ opts.qwikRouterConfig = opts.qwikCityPlan;
7
+ } else if (!opts.qwikRouterConfig) {
8
+ throw new Error("qwikRouterConfig is required.");
9
+ }
10
+ const { staticFile, notFound, router } = createQwikRouterNode({
11
+ render: opts.render,
12
+ manifest: opts.manifest,
13
+ qwikRouterConfig: opts.qwikRouterConfig,
14
+ static: {
15
+ cacheControl: "public, max-age=31557600"
16
+ },
17
+ getOrigin(req) {
18
+ if (process.env.IS_OFFLINE) {
19
+ return `http://${req.headers.host}`;
20
+ }
21
+ return null;
22
+ }
23
+ });
24
+ const qwikApp = (req, res) => {
25
+ return staticFile(req, res, () => {
26
+ router(req, res, () => notFound(req, res, () => {
27
+ }));
28
+ });
29
+ };
30
+ return qwikApp;
31
+ }
32
+ var createQwikCity = createQwikRouter;
33
+ export {
34
+ createQwikCity,
35
+ createQwikRouter
36
+ };
@@ -0,0 +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 { }
@@ -0,0 +1,83 @@
1
+ // packages/qwik-router/src/middleware/netlify-edge/index.ts
2
+ import { getNotFound } from "@qwik-router-not-found-paths";
3
+ import { isStaticPath } from "@qwik-router-static-paths";
4
+ import { _deserialize, _serialize, _verifySerializable } from "@qwik.dev/core/internal";
5
+ import { setServerPlatform } from "@qwik.dev/core/server";
6
+ import { mergeHeadersCookies, requestHandler } from "../request-handler/index.mjs";
7
+ function createQwikRouter(opts) {
8
+ if (opts.qwikCityPlan && !opts.qwikRouterConfig) {
9
+ console.warn("qwikCityPlan is deprecated. Use qwikRouterConfig instead.");
10
+ opts.qwikRouterConfig = opts.qwikCityPlan;
11
+ } else if (!opts.qwikRouterConfig) {
12
+ throw new Error("qwikRouterConfig is required.");
13
+ }
14
+ const qwikSerializer = {
15
+ _deserialize,
16
+ _serialize,
17
+ _verifySerializable
18
+ };
19
+ if (opts.manifest) {
20
+ setServerPlatform(opts.manifest);
21
+ }
22
+ async function onNetlifyEdgeRequest(request, context) {
23
+ try {
24
+ const url = new URL(request.url);
25
+ if (isStaticPath(request.method, url) || url.pathname.startsWith("/.netlify")) {
26
+ return context.next();
27
+ }
28
+ const serverRequestEv = {
29
+ mode: "server",
30
+ locale: void 0,
31
+ url,
32
+ env: Deno.env,
33
+ request,
34
+ getWritableStream: (status, headers, cookies, resolve) => {
35
+ const { readable, writable } = new TransformStream();
36
+ const response = new Response(readable, {
37
+ status,
38
+ headers: mergeHeadersCookies(headers, cookies)
39
+ });
40
+ resolve(response);
41
+ return writable;
42
+ },
43
+ getClientConn: () => {
44
+ var _a;
45
+ return {
46
+ ip: context.ip,
47
+ country: (_a = context.geo.country) == null ? void 0 : _a.code
48
+ };
49
+ },
50
+ platform: context
51
+ };
52
+ const handledResponse = await requestHandler(serverRequestEv, opts, qwikSerializer);
53
+ if (handledResponse) {
54
+ handledResponse.completion.then((v) => {
55
+ if (v) {
56
+ console.error(v);
57
+ }
58
+ });
59
+ const response = await handledResponse.response;
60
+ if (response) {
61
+ return response;
62
+ }
63
+ }
64
+ const notFoundHtml = isStaticPath(request.method || "GET", url) ? "Not Found" : getNotFound(url.pathname);
65
+ return new Response(notFoundHtml, {
66
+ status: 404,
67
+ headers: { "Content-Type": "text/html; charset=utf-8", "X-Not-Found": url.pathname }
68
+ });
69
+ } catch (e) {
70
+ console.error(e);
71
+ return new Response(String(e || "Error"), {
72
+ status: 500,
73
+ headers: { "Content-Type": "text/plain; charset=utf-8", "X-Error": "netlify-edge" }
74
+ });
75
+ }
76
+ }
77
+ return onNetlifyEdgeRequest;
78
+ }
79
+ var createQwikCity = createQwikRouter;
80
+ export {
81
+ createQwikCity,
82
+ createQwikRouter
83
+ };