@qwik.dev/router 0.0.0 → 2.0.0-alpha.0
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/LICENSE +22 -0
- package/README.md +15 -0
- package/adapters/azure-swa/vite.d.ts +2 -0
- package/adapters/bun-server/vite.d.ts +2 -0
- package/adapters/cloud-run/vite.d.ts +2 -0
- package/adapters/cloudflare-pages/vite.d.ts +2 -0
- package/adapters/deno-server/vite.d.ts +2 -0
- package/adapters/netlify-edge/vite.d.ts +2 -0
- package/adapters/node-server/vite.d.ts +2 -0
- package/adapters/shared/vite.d.ts +2 -0
- package/adapters/static/vite.d.ts +2 -0
- package/adapters/vercel-edge/vite.d.ts +2 -0
- package/index.d.ts +2 -0
- package/lib/adapters/azure-swa/vite/index.cjs +96 -0
- package/lib/adapters/azure-swa/vite/index.d.ts +13 -0
- package/lib/adapters/azure-swa/vite/index.mjs +61 -0
- package/lib/adapters/bun-server/vite/index.cjs +50 -0
- package/lib/adapters/bun-server/vite/index.d.ts +14 -0
- package/lib/adapters/bun-server/vite/index.mjs +25 -0
- package/lib/adapters/cloud-run/vite/index.cjs +47 -0
- package/lib/adapters/cloud-run/vite/index.d.ts +13 -0
- package/lib/adapters/cloud-run/vite/index.mjs +22 -0
- package/lib/adapters/cloudflare-pages/vite/index.cjs +115 -0
- package/lib/adapters/cloudflare-pages/vite/index.d.ts +27 -0
- package/lib/adapters/cloudflare-pages/vite/index.mjs +80 -0
- package/lib/adapters/deno-server/vite/index.cjs +62 -0
- package/lib/adapters/deno-server/vite/index.d.ts +14 -0
- package/lib/adapters/deno-server/vite/index.mjs +37 -0
- package/lib/adapters/netlify-edge/vite/index.cjs +129 -0
- package/lib/adapters/netlify-edge/vite/index.d.ts +44 -0
- package/lib/adapters/netlify-edge/vite/index.mjs +92 -0
- package/lib/adapters/node-server/vite/index.cjs +50 -0
- package/lib/adapters/node-server/vite/index.d.ts +14 -0
- package/lib/adapters/node-server/vite/index.mjs +25 -0
- package/lib/adapters/shared/vite/index.cjs +371 -0
- package/lib/adapters/shared/vite/index.d.ts +114 -0
- package/lib/adapters/shared/vite/index.mjs +331 -0
- package/lib/adapters/static/vite/index.cjs +361 -0
- package/lib/adapters/static/vite/index.d.ts +10 -0
- package/lib/adapters/static/vite/index.mjs +324 -0
- package/lib/adapters/vercel-edge/vite/index.cjs +118 -0
- package/lib/adapters/vercel-edge/vite/index.d.ts +45 -0
- package/lib/adapters/vercel-edge/vite/index.mjs +83 -0
- package/lib/index.d.ts +803 -0
- package/lib/index.qwik.cjs +1876 -0
- package/lib/index.qwik.mjs +1857 -0
- package/lib/middleware/aws-lambda/index.d.ts +50 -0
- package/lib/middleware/aws-lambda/index.mjs +55 -0
- package/lib/middleware/azure-swa/index.d.ts +28 -0
- package/lib/middleware/azure-swa/index.mjs +297 -0
- package/lib/middleware/bun/index.d.ts +35 -0
- package/lib/middleware/bun/index.mjs +208 -0
- package/lib/middleware/cloudflare-pages/index.d.ts +35 -0
- package/lib/middleware/cloudflare-pages/index.mjs +107 -0
- package/lib/middleware/deno/index.d.ts +47 -0
- package/lib/middleware/deno/index.mjs +195 -0
- package/lib/middleware/firebase/index.d.ts +26 -0
- package/lib/middleware/firebase/index.mjs +36 -0
- package/lib/middleware/netlify-edge/index.d.ts +27 -0
- package/lib/middleware/netlify-edge/index.mjs +83 -0
- package/lib/middleware/node/index.cjs +314 -0
- package/lib/middleware/node/index.d.ts +66 -0
- package/lib/middleware/node/index.mjs +287 -0
- package/lib/middleware/request-handler/index.cjs +1544 -0
- package/lib/middleware/request-handler/index.d.ts +681 -0
- package/lib/middleware/request-handler/index.mjs +1501 -0
- package/lib/middleware/vercel-edge/index.d.ts +26 -0
- package/lib/middleware/vercel-edge/index.mjs +109 -0
- package/lib/modules.d.ts +38 -0
- package/lib/service-worker.cjs +267 -0
- package/lib/service-worker.d.ts +4 -0
- package/lib/service-worker.mjs +265 -0
- package/lib/static/deno.mjs +8 -0
- package/lib/static/index.cjs +67 -0
- package/lib/static/index.d.ts +98 -0
- package/lib/static/index.mjs +48 -0
- package/lib/static/node.cjs +1124 -0
- package/lib/static/node.mjs +1086 -0
- package/lib/vite/index.cjs +27496 -0
- package/lib/vite/index.d.ts +154 -0
- package/lib/vite/index.mjs +27484 -0
- package/middleware/aws-lambda.d.ts +2 -0
- package/middleware/azure-swa.d.ts +2 -0
- package/middleware/bun.d.ts +2 -0
- package/middleware/cloudflare-pages.d.ts +2 -0
- package/middleware/deno.d.ts +2 -0
- package/middleware/firebase.d.ts +2 -0
- package/middleware/netlify-edge.d.ts +2 -0
- package/middleware/node.d.ts +2 -0
- package/middleware/request-handler/generated/not-found-paths.ts +7 -0
- package/middleware/request-handler/generated/static-paths.ts +35 -0
- package/middleware/request-handler.d.ts +2 -0
- package/middleware/vercel-edge.d.ts +2 -0
- package/modules.d.ts +38 -0
- package/package.json +171 -165
- package/service-worker.d.ts +2 -0
- package/static.d.ts +2 -0
- 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
|
+
};
|