@qwik.dev/router 2.0.0-beta.11 → 2.0.0-beta.14
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/adapters/azure-swa/vite/index.mjs +28 -207
- package/lib/adapters/bun-server/vite/index.mjs +16 -202
- package/lib/adapters/cloud-run/vite/index.mjs +15 -201
- package/lib/adapters/cloudflare-pages/vite/index.mjs +65 -6
- package/lib/adapters/deno-server/vite/index.mjs +18 -204
- package/lib/adapters/netlify-edge/vite/index.mjs +58 -246
- package/lib/adapters/node-server/vite/index.mjs +16 -202
- package/lib/adapters/shared/vite/index.d.ts +4 -4
- package/lib/adapters/shared/vite/index.mjs +250 -149
- package/lib/adapters/ssg/vite/index.mjs +12 -199
- package/lib/adapters/vercel-edge/vite/index.d.ts +1 -1
- package/lib/adapters/vercel-edge/vite/index.mjs +50 -235
- package/lib/chunks/error-handler.mjs +57 -0
- package/lib/chunks/format-error.mjs +137 -0
- package/lib/chunks/fs.mjs +254 -0
- package/lib/chunks/index.mjs +884 -0
- package/lib/chunks/mime-types.mjs +52 -0
- package/lib/chunks/routing.qwik.mjs +429 -0
- package/lib/chunks/types.qwik.mjs +22 -0
- package/lib/index.d.ts +11 -4
- package/lib/index.qwik.mjs +533 -1019
- package/lib/middleware/aws-lambda/index.mjs +38 -28
- package/lib/middleware/azure-swa/index.mjs +65 -48
- package/lib/middleware/bun/index.mjs +104 -119
- package/lib/middleware/cloudflare-pages/index.mjs +69 -49
- package/lib/middleware/deno/index.mjs +94 -114
- package/lib/middleware/firebase/index.mjs +26 -18
- package/lib/middleware/netlify-edge/index.mjs +53 -38
- package/lib/middleware/node/index.mjs +184 -167
- package/lib/middleware/request-handler/index.d.ts +22 -4
- package/lib/middleware/request-handler/index.mjs +1203 -877
- package/lib/middleware/vercel-edge/index.mjs +72 -49
- package/lib/service-worker/index.mjs +4 -0
- package/lib/ssg/index.mjs +14 -22
- package/lib/vite/index.d.ts +13 -7
- package/lib/vite/index.mjs +1609 -1217
- package/package.json +27 -44
- package/lib/adapters/azure-swa/vite/index-BqUeglYs.cjs +0 -1
- package/lib/adapters/azure-swa/vite/index-CBIchDYq.js +0 -651
- package/lib/adapters/azure-swa/vite/index-ClHGw5z1.js +0 -6
- package/lib/adapters/azure-swa/vite/index-CrwlB95_.js +0 -22
- package/lib/adapters/azure-swa/vite/index-DTIOTwZo.cjs +0 -11
- package/lib/adapters/azure-swa/vite/index-vQuPcef3.cjs +0 -1
- package/lib/adapters/azure-swa/vite/index.cjs +0 -5
- package/lib/adapters/bun-server/vite/index-BqUeglYs.cjs +0 -1
- package/lib/adapters/bun-server/vite/index-CBIchDYq.js +0 -651
- package/lib/adapters/bun-server/vite/index-ClHGw5z1.js +0 -6
- package/lib/adapters/bun-server/vite/index-CrwlB95_.js +0 -22
- package/lib/adapters/bun-server/vite/index-DTIOTwZo.cjs +0 -11
- package/lib/adapters/bun-server/vite/index-vQuPcef3.cjs +0 -1
- package/lib/adapters/bun-server/vite/index.cjs +0 -5
- package/lib/adapters/cloud-run/vite/index-BqUeglYs.cjs +0 -1
- package/lib/adapters/cloud-run/vite/index-CBIchDYq.js +0 -651
- package/lib/adapters/cloud-run/vite/index-ClHGw5z1.js +0 -6
- package/lib/adapters/cloud-run/vite/index-CrwlB95_.js +0 -22
- package/lib/adapters/cloud-run/vite/index-DTIOTwZo.cjs +0 -11
- package/lib/adapters/cloud-run/vite/index-vQuPcef3.cjs +0 -1
- package/lib/adapters/cloud-run/vite/index.cjs +0 -5
- package/lib/adapters/cloudflare-pages/vite/index-Bg_9YkM5.js +0 -22
- package/lib/adapters/cloudflare-pages/vite/index-C1aDmh1S.cjs +0 -1
- package/lib/adapters/cloudflare-pages/vite/index-CHT9Y93A.js +0 -254
- package/lib/adapters/cloudflare-pages/vite/index-Ck7KvpK1.cjs +0 -11
- package/lib/adapters/cloudflare-pages/vite/index-ClHGw5z1.js +0 -6
- package/lib/adapters/cloudflare-pages/vite/index-Cp1cjAds.js +0 -645
- package/lib/adapters/cloudflare-pages/vite/index-D9RL9dvJ.cjs +0 -5
- package/lib/adapters/cloudflare-pages/vite/index-vQuPcef3.cjs +0 -1
- package/lib/adapters/cloudflare-pages/vite/index.cjs +0 -1
- package/lib/adapters/deno-server/vite/index-BqUeglYs.cjs +0 -1
- package/lib/adapters/deno-server/vite/index-CBIchDYq.js +0 -651
- package/lib/adapters/deno-server/vite/index-ClHGw5z1.js +0 -6
- package/lib/adapters/deno-server/vite/index-CrwlB95_.js +0 -22
- package/lib/adapters/deno-server/vite/index-DTIOTwZo.cjs +0 -11
- package/lib/adapters/deno-server/vite/index-vQuPcef3.cjs +0 -1
- package/lib/adapters/deno-server/vite/index.cjs +0 -5
- package/lib/adapters/netlify-edge/vite/index-BqUeglYs.cjs +0 -1
- package/lib/adapters/netlify-edge/vite/index-CBIchDYq.js +0 -651
- package/lib/adapters/netlify-edge/vite/index-ClHGw5z1.js +0 -6
- package/lib/adapters/netlify-edge/vite/index-CrwlB95_.js +0 -22
- package/lib/adapters/netlify-edge/vite/index-DTIOTwZo.cjs +0 -11
- package/lib/adapters/netlify-edge/vite/index-vQuPcef3.cjs +0 -1
- package/lib/adapters/netlify-edge/vite/index.cjs +0 -6
- package/lib/adapters/node-server/vite/index-BqUeglYs.cjs +0 -1
- package/lib/adapters/node-server/vite/index-CBIchDYq.js +0 -651
- package/lib/adapters/node-server/vite/index-ClHGw5z1.js +0 -6
- package/lib/adapters/node-server/vite/index-CrwlB95_.js +0 -22
- package/lib/adapters/node-server/vite/index-DTIOTwZo.cjs +0 -11
- package/lib/adapters/node-server/vite/index-vQuPcef3.cjs +0 -1
- package/lib/adapters/node-server/vite/index.cjs +0 -5
- package/lib/adapters/shared/vite/index-BqUeglYs.cjs +0 -1
- package/lib/adapters/shared/vite/index-CBIchDYq.js +0 -651
- package/lib/adapters/shared/vite/index-ClHGw5z1.js +0 -6
- package/lib/adapters/shared/vite/index-CrwlB95_.js +0 -22
- package/lib/adapters/shared/vite/index-DTIOTwZo.cjs +0 -11
- package/lib/adapters/shared/vite/index-vQuPcef3.cjs +0 -1
- package/lib/adapters/shared/vite/index.cjs +0 -5
- package/lib/adapters/ssg/vite/index-BqUeglYs.cjs +0 -1
- package/lib/adapters/ssg/vite/index-CBIchDYq.js +0 -651
- package/lib/adapters/ssg/vite/index-ClHGw5z1.js +0 -6
- package/lib/adapters/ssg/vite/index-CrwlB95_.js +0 -22
- package/lib/adapters/ssg/vite/index-DTIOTwZo.cjs +0 -11
- package/lib/adapters/ssg/vite/index-vQuPcef3.cjs +0 -1
- package/lib/adapters/ssg/vite/index.cjs +0 -5
- package/lib/adapters/vercel-edge/vite/index-BqUeglYs.cjs +0 -1
- package/lib/adapters/vercel-edge/vite/index-CBIchDYq.js +0 -651
- package/lib/adapters/vercel-edge/vite/index-ClHGw5z1.js +0 -6
- package/lib/adapters/vercel-edge/vite/index-CrwlB95_.js +0 -22
- package/lib/adapters/vercel-edge/vite/index-DTIOTwZo.cjs +0 -11
- package/lib/adapters/vercel-edge/vite/index-vQuPcef3.cjs +0 -1
- package/lib/adapters/vercel-edge/vite/index.cjs +0 -5
- package/lib/index.qwik.cjs +0 -2126
- package/lib/middleware/aws-lambda/index.cjs +0 -1
- package/lib/middleware/azure-swa/index.cjs +0 -1
- package/lib/middleware/bun/index.cjs +0 -1
- package/lib/middleware/cloudflare-pages/index.cjs +0 -1
- package/lib/middleware/deno/index.cjs +0 -1
- package/lib/middleware/firebase/index.cjs +0 -1
- package/lib/middleware/netlify-edge/index.cjs +0 -1
- package/lib/middleware/node/index.cjs +0 -1
- package/lib/middleware/request-handler/index.cjs +0 -18
- package/lib/middleware/vercel-edge/index.cjs +0 -1
- package/lib/service-worker.cjs +0 -1
- package/lib/service-worker.mjs +0 -5
- package/lib/ssg/deno.cjs +0 -1
- package/lib/ssg/deno.mjs +0 -6
- package/lib/ssg/index-CBIchDYq.js +0 -651
- package/lib/ssg/index-ClHGw5z1.js +0 -6
- package/lib/ssg/index-DTIOTwZo.cjs +0 -11
- package/lib/ssg/index-vQuPcef3.cjs +0 -1
- package/lib/ssg/index.cjs +0 -1
- package/lib/ssg/node.cjs +0 -11
- package/lib/ssg/node.mjs +0 -651
- package/lib/vite/index.cjs +0 -42
|
@@ -1,205 +1,222 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
avi: "video/x-msvideo",
|
|
13
|
-
avif: "image/avif",
|
|
14
|
-
bmp: "image/x-ms-bmp",
|
|
15
|
-
css: "text/css",
|
|
16
|
-
flv: "video/x-flv",
|
|
17
|
-
gif: "image/gif",
|
|
18
|
-
htm: "text/html",
|
|
19
|
-
html: "text/html",
|
|
20
|
-
ico: "image/x-icon",
|
|
21
|
-
jng: "image/x-jng",
|
|
22
|
-
jpeg: "image/jpeg",
|
|
23
|
-
jpg: "image/jpeg",
|
|
24
|
-
js: "application/javascript",
|
|
25
|
-
json: "application/json",
|
|
26
|
-
kar: "audio/midi",
|
|
27
|
-
m4a: "audio/x-m4a",
|
|
28
|
-
m4v: "video/x-m4v",
|
|
29
|
-
mid: "audio/midi",
|
|
30
|
-
midi: "audio/midi",
|
|
31
|
-
mng: "video/x-mng",
|
|
32
|
-
mov: "video/quicktime",
|
|
33
|
-
mp3: "audio/mpeg",
|
|
34
|
-
mp4: "video/mp4",
|
|
35
|
-
mpeg: "video/mpeg",
|
|
36
|
-
mpg: "video/mpeg",
|
|
37
|
-
ogg: "audio/ogg",
|
|
38
|
-
pdf: "application/pdf",
|
|
39
|
-
png: "image/png",
|
|
40
|
-
rar: "application/x-rar-compressed",
|
|
41
|
-
shtml: "text/html",
|
|
42
|
-
svg: "image/svg+xml",
|
|
43
|
-
svgz: "image/svg+xml",
|
|
44
|
-
tif: "image/tiff",
|
|
45
|
-
tiff: "image/tiff",
|
|
46
|
-
ts: "video/mp2t",
|
|
47
|
-
txt: "text/plain",
|
|
48
|
-
wbmp: "image/vnd.wap.wbmp",
|
|
49
|
-
webm: "video/webm",
|
|
50
|
-
webp: "image/webp",
|
|
51
|
-
wmv: "video/x-ms-wmv",
|
|
52
|
-
woff: "font/woff",
|
|
53
|
-
woff2: "font/woff2",
|
|
54
|
-
xml: "text/xml",
|
|
55
|
-
zip: "application/zip"
|
|
56
|
-
};
|
|
57
|
-
function w(e, t) {
|
|
58
|
-
return t?.getOrigin?.(e) ?? t?.origin ?? process.env.ORIGIN ?? A(e);
|
|
1
|
+
import { isDev } from '@qwik.dev/core';
|
|
2
|
+
import { setServerPlatform } from '@qwik.dev/core/server';
|
|
3
|
+
import { isStaticPath, getNotFound, requestHandler } from '@qwik.dev/router/middleware/request-handler';
|
|
4
|
+
import { createReadStream } from 'node:fs';
|
|
5
|
+
import { join, basename, extname } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { M as MIME_TYPES } from '../../chunks/mime-types.mjs';
|
|
8
|
+
import { Http2ServerRequest } from 'node:http2';
|
|
9
|
+
|
|
10
|
+
function computeOrigin(req, opts) {
|
|
11
|
+
return opts?.getOrigin?.(req) ?? opts?.origin ?? process.env.ORIGIN ?? fallbackOrigin(req);
|
|
59
12
|
}
|
|
60
|
-
function
|
|
61
|
-
const { PROTOCOL_HEADER
|
|
62
|
-
|
|
13
|
+
function fallbackOrigin(req) {
|
|
14
|
+
const { PROTOCOL_HEADER, HOST_HEADER } = process.env;
|
|
15
|
+
const headers = req.headers;
|
|
16
|
+
const protocol = PROTOCOL_HEADER && headers[PROTOCOL_HEADER] || (req.socket.encrypted || req.connection.encrypted ? "https" : "http");
|
|
17
|
+
const hostHeader = HOST_HEADER ?? (req instanceof Http2ServerRequest ? ":authority" : "host");
|
|
18
|
+
const host = headers[hostHeader];
|
|
19
|
+
return `${protocol}://${host}`;
|
|
63
20
|
}
|
|
64
|
-
function
|
|
65
|
-
return
|
|
21
|
+
function getUrl(req, origin) {
|
|
22
|
+
return normalizeUrl(req.originalUrl || req.url || "/", origin);
|
|
66
23
|
}
|
|
67
|
-
function
|
|
68
|
-
|
|
24
|
+
function isIgnoredError(message = "") {
|
|
25
|
+
const ignoredErrors = ["The stream has been destroyed", "write after end"];
|
|
26
|
+
return ignoredErrors.some((ignored) => message.includes(ignored));
|
|
69
27
|
}
|
|
70
|
-
const
|
|
71
|
-
function
|
|
72
|
-
const
|
|
73
|
-
return new URL(
|
|
28
|
+
const invalidHeadersPattern = /^:(method|scheme|authority|path)$/i;
|
|
29
|
+
function normalizeUrl(url, base) {
|
|
30
|
+
const DOUBLE_SLASH_REG = /\/\/|\\\\/g;
|
|
31
|
+
return new URL(url.replace(DOUBLE_SLASH_REG, "/"), base);
|
|
74
32
|
}
|
|
75
|
-
async function
|
|
76
|
-
const
|
|
33
|
+
async function fromNodeHttp(url, req, res, mode, getClientConn) {
|
|
34
|
+
const requestHeaders = new Headers();
|
|
35
|
+
const nodeRequestHeaders = req.headers;
|
|
77
36
|
try {
|
|
78
|
-
for (const [
|
|
79
|
-
if (
|
|
80
|
-
|
|
81
|
-
o.set(a, l);
|
|
82
|
-
else if (Array.isArray(l))
|
|
83
|
-
for (const f of l)
|
|
84
|
-
o.append(a, f);
|
|
37
|
+
for (const [key, value] of Object.entries(nodeRequestHeaders)) {
|
|
38
|
+
if (invalidHeadersPattern.test(key)) {
|
|
39
|
+
continue;
|
|
85
40
|
}
|
|
86
|
-
|
|
87
|
-
|
|
41
|
+
if (typeof value === "string") {
|
|
42
|
+
requestHeaders.set(key, value);
|
|
43
|
+
} else if (Array.isArray(value)) {
|
|
44
|
+
for (const v of value) {
|
|
45
|
+
requestHeaders.append(key, v);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
} catch (err) {
|
|
50
|
+
console.error(err);
|
|
88
51
|
}
|
|
89
|
-
const
|
|
90
|
-
for await (const
|
|
91
|
-
yield
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
52
|
+
const getRequestBody = async function* () {
|
|
53
|
+
for await (const chunk of req) {
|
|
54
|
+
yield chunk;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const body = req.method === "HEAD" || req.method === "GET" ? void 0 : getRequestBody();
|
|
58
|
+
const controller = new AbortController();
|
|
59
|
+
const options = {
|
|
60
|
+
method: req.method,
|
|
61
|
+
headers: requestHeaders,
|
|
62
|
+
body,
|
|
63
|
+
signal: controller.signal,
|
|
97
64
|
duplex: "half"
|
|
98
65
|
};
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
66
|
+
res.on("close", () => {
|
|
67
|
+
controller.abort();
|
|
68
|
+
});
|
|
69
|
+
const serverRequestEv = {
|
|
70
|
+
mode,
|
|
71
|
+
url,
|
|
72
|
+
request: new Request(url.href, options),
|
|
105
73
|
env: {
|
|
106
|
-
get(
|
|
107
|
-
return process.env[
|
|
74
|
+
get(key) {
|
|
75
|
+
return process.env[key];
|
|
108
76
|
}
|
|
109
77
|
},
|
|
110
|
-
getWritableStream: (
|
|
111
|
-
|
|
78
|
+
getWritableStream: (status, headers, cookies) => {
|
|
79
|
+
res.statusCode = status;
|
|
112
80
|
try {
|
|
113
|
-
for (const [
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
81
|
+
for (const [key, value] of headers) {
|
|
82
|
+
if (invalidHeadersPattern.test(key)) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
res.setHeader(key, value);
|
|
86
|
+
}
|
|
87
|
+
const cookieHeaders = cookies.headers();
|
|
88
|
+
if (cookieHeaders.length > 0) {
|
|
89
|
+
res.setHeader("Set-Cookie", cookieHeaders);
|
|
90
|
+
}
|
|
91
|
+
} catch (err) {
|
|
92
|
+
console.error(err);
|
|
119
93
|
}
|
|
120
94
|
return new WritableStream({
|
|
121
|
-
write(
|
|
122
|
-
|
|
123
|
-
|
|
95
|
+
write(chunk) {
|
|
96
|
+
if (res.closed || res.destroyed) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
res.write(chunk, (error) => {
|
|
100
|
+
if (error && !isIgnoredError(error.message)) {
|
|
101
|
+
console.error(error);
|
|
102
|
+
}
|
|
124
103
|
});
|
|
125
104
|
},
|
|
126
105
|
close() {
|
|
127
|
-
|
|
106
|
+
res.end();
|
|
128
107
|
}
|
|
129
108
|
});
|
|
130
109
|
},
|
|
131
|
-
getClientConn: () =>
|
|
132
|
-
|
|
110
|
+
getClientConn: () => {
|
|
111
|
+
return getClientConn ? getClientConn(req) : {
|
|
112
|
+
ip: req.socket.remoteAddress
|
|
113
|
+
};
|
|
133
114
|
},
|
|
134
115
|
platform: {
|
|
135
|
-
ssr:
|
|
136
|
-
incomingMessage:
|
|
116
|
+
ssr: true,
|
|
117
|
+
incomingMessage: req,
|
|
137
118
|
node: process.versions.node
|
|
138
119
|
// Weirdly needed to make typecheck of insights happy
|
|
139
120
|
},
|
|
140
121
|
locale: void 0
|
|
141
122
|
};
|
|
123
|
+
return serverRequestEv;
|
|
142
124
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
console.error(i), m(i);
|
|
125
|
+
|
|
126
|
+
function createQwikRouter(opts) {
|
|
127
|
+
if (opts.qwikCityPlan && !opts.qwikRouterConfig) {
|
|
128
|
+
console.warn("qwikCityPlan is deprecated. Simply remove it.");
|
|
129
|
+
opts.qwikRouterConfig = opts.qwikCityPlan;
|
|
130
|
+
}
|
|
131
|
+
if (opts.manifest) {
|
|
132
|
+
setServerPlatform(opts.manifest);
|
|
133
|
+
}
|
|
134
|
+
const staticFolder = opts.static?.root ?? join(fileURLToPath(import.meta.url), "..", "..", "dist");
|
|
135
|
+
const router = async (req, res, next) => {
|
|
136
|
+
try {
|
|
137
|
+
const origin = computeOrigin(req, opts);
|
|
138
|
+
const serverRequestEv = await fromNodeHttp(
|
|
139
|
+
getUrl(req, origin),
|
|
140
|
+
req,
|
|
141
|
+
res,
|
|
142
|
+
"server",
|
|
143
|
+
opts.getClientConn
|
|
144
|
+
);
|
|
145
|
+
if (isDev && opts.platform) {
|
|
146
|
+
Object.assign(serverRequestEv.platform, opts.platform);
|
|
166
147
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if (
|
|
171
|
-
|
|
172
|
-
r.writeHead(404, {
|
|
173
|
-
"Content-Type": "text/html; charset=utf-8",
|
|
174
|
-
"X-Not-Found": c.pathname
|
|
175
|
-
}), r.end(s);
|
|
148
|
+
const handled = await requestHandler(serverRequestEv, opts);
|
|
149
|
+
if (handled) {
|
|
150
|
+
const err = await handled.completion;
|
|
151
|
+
if (err) {
|
|
152
|
+
throw err;
|
|
176
153
|
}
|
|
177
|
-
|
|
178
|
-
console.error(i), m(i);
|
|
179
|
-
}
|
|
180
|
-
},
|
|
181
|
-
staticFile: async (o, r, m) => {
|
|
182
|
-
try {
|
|
183
|
-
const i = w(o, e), c = y(o, i);
|
|
184
|
-
if (x(o.method || "GET", c)) {
|
|
185
|
-
const s = c.pathname;
|
|
186
|
-
let d;
|
|
187
|
-
S(s).includes(".") ? d = v(t, s) : globalThis.__NO_TRAILING_SLASH__ ? d = v(t, s, "index.html") : d = v(t, s + "index.html");
|
|
188
|
-
const a = T(d).replace(/^\./, ""), l = k(d);
|
|
189
|
-
l.on("error", m);
|
|
190
|
-
const f = _[a];
|
|
191
|
-
f && r.setHeader("Content-Type", f), e.static?.cacheControl && r.setHeader("Cache-Control", e.static.cacheControl), l.pipe(r);
|
|
154
|
+
if (handled.requestEv.headersSent) {
|
|
192
155
|
return;
|
|
193
156
|
}
|
|
194
|
-
return m();
|
|
195
|
-
} catch (i) {
|
|
196
|
-
console.error(i), m(i);
|
|
197
157
|
}
|
|
158
|
+
next();
|
|
159
|
+
} catch (e) {
|
|
160
|
+
console.error(e);
|
|
161
|
+
next(e);
|
|
198
162
|
}
|
|
199
163
|
};
|
|
164
|
+
const notFound = async (req, res, next) => {
|
|
165
|
+
try {
|
|
166
|
+
if (!res.headersSent) {
|
|
167
|
+
const origin = computeOrigin(req, opts);
|
|
168
|
+
const url = getUrl(req, origin);
|
|
169
|
+
const notFoundHtml = !req.headers.accept?.includes("text/html") || isStaticPath(req.method || "GET", url) ? "Not Found" : getNotFound(url.pathname);
|
|
170
|
+
res.writeHead(404, {
|
|
171
|
+
"Content-Type": "text/html; charset=utf-8",
|
|
172
|
+
"X-Not-Found": url.pathname
|
|
173
|
+
});
|
|
174
|
+
res.end(notFoundHtml);
|
|
175
|
+
}
|
|
176
|
+
} catch (e) {
|
|
177
|
+
console.error(e);
|
|
178
|
+
next(e);
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
const staticFile = async (req, res, next) => {
|
|
182
|
+
try {
|
|
183
|
+
const origin = computeOrigin(req, opts);
|
|
184
|
+
const url = getUrl(req, origin);
|
|
185
|
+
if (isStaticPath(req.method || "GET", url)) {
|
|
186
|
+
const pathname = url.pathname;
|
|
187
|
+
let filePath;
|
|
188
|
+
if (basename(pathname).includes(".")) {
|
|
189
|
+
filePath = join(staticFolder, pathname);
|
|
190
|
+
} else if (!globalThis.__NO_TRAILING_SLASH__) {
|
|
191
|
+
filePath = join(staticFolder, pathname + "index.html");
|
|
192
|
+
} else {
|
|
193
|
+
filePath = join(staticFolder, pathname, "index.html");
|
|
194
|
+
}
|
|
195
|
+
const ext = extname(filePath).replace(/^\./, "");
|
|
196
|
+
const stream = createReadStream(filePath);
|
|
197
|
+
stream.on("error", next);
|
|
198
|
+
const contentType = MIME_TYPES[ext];
|
|
199
|
+
if (contentType) {
|
|
200
|
+
res.setHeader("Content-Type", contentType);
|
|
201
|
+
}
|
|
202
|
+
if (opts.static?.cacheControl) {
|
|
203
|
+
res.setHeader("Cache-Control", opts.static.cacheControl);
|
|
204
|
+
}
|
|
205
|
+
stream.pipe(res);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
return next();
|
|
209
|
+
} catch (e) {
|
|
210
|
+
console.error(e);
|
|
211
|
+
next(e);
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
return {
|
|
215
|
+
router,
|
|
216
|
+
notFound,
|
|
217
|
+
staticFile
|
|
218
|
+
};
|
|
200
219
|
}
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
N as createQwikRouter
|
|
205
|
-
};
|
|
220
|
+
const createQwikCity = createQwikRouter;
|
|
221
|
+
|
|
222
|
+
export { createQwikCity, createQwikRouter };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { Action } from '@qwik.dev/router';
|
|
2
|
+
import type { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
3
|
import type { EnvGetter as EnvGetter_2 } from '@qwik.dev/router/middleware/request-handler';
|
|
3
4
|
import type { FailReturn } from '@qwik.dev/router';
|
|
4
5
|
import type { Loader as Loader_2 } from '@qwik.dev/router';
|
|
5
6
|
import type { QwikCityPlan } from '@qwik.dev/router';
|
|
6
7
|
import type { QwikIntrinsicElements } from '@qwik.dev/core';
|
|
7
8
|
import type { QwikRouterConfig } from '@qwik.dev/router';
|
|
9
|
+
import { RedirectMessage as RedirectMessage_2 } from '@qwik.dev/router/middleware/request-handler';
|
|
8
10
|
import type { Render } from '@qwik.dev/core/server';
|
|
9
11
|
import type { RenderOptions } from '@qwik.dev/core/server';
|
|
10
12
|
import { RequestEvent as RequestEvent_2 } from '@qwik.dev/router/middleware/request-handler';
|
|
@@ -17,6 +19,9 @@ import type { ValueOrPromise } from '@qwik.dev/core';
|
|
|
17
19
|
export declare class AbortMessage {
|
|
18
20
|
}
|
|
19
21
|
|
|
22
|
+
/** @internal */
|
|
23
|
+
export declare let _asyncRequestStore: AsyncLocalStorage<RequestEventInternal> | undefined;
|
|
24
|
+
|
|
20
25
|
/** @public */
|
|
21
26
|
export declare type CacheControl = CacheControlOptions | number | 'day' | 'week' | 'month' | 'year' | 'no-cache' | 'immutable' | 'private';
|
|
22
27
|
|
|
@@ -204,6 +209,7 @@ declare type DocumentHead = DocumentHeadValue | ((props: DocumentHeadProps) => D
|
|
|
204
209
|
/** @public */
|
|
205
210
|
declare interface DocumentHeadProps extends RouteLocation {
|
|
206
211
|
readonly head: ResolvedDocumentHead;
|
|
212
|
+
/** @deprecated This is not necessary, it works correctly without */
|
|
207
213
|
readonly withLocale: <T>(fn: () => T) => T;
|
|
208
214
|
readonly resolveValue: ResolveSyncValue_2;
|
|
209
215
|
}
|
|
@@ -330,9 +336,21 @@ declare interface PageModule extends RouteModule {
|
|
|
330
336
|
declare type PathParams = Record<string, string>;
|
|
331
337
|
|
|
332
338
|
declare interface QwikRouterRun<T> {
|
|
339
|
+
/**
|
|
340
|
+
* The response to the request, if any. If there is no response, there might have been an error,
|
|
341
|
+
* or the request was aborted.
|
|
342
|
+
*/
|
|
333
343
|
response: Promise<T | null>;
|
|
334
344
|
requestEv: RequestEvent_2;
|
|
335
|
-
|
|
345
|
+
/**
|
|
346
|
+
* Promise for the completion of the request.
|
|
347
|
+
*
|
|
348
|
+
* If it returns a RedirectMessage, it means the request must be redirected.
|
|
349
|
+
*
|
|
350
|
+
* If it returns an Error, it means there was an error, and if possible, the response already
|
|
351
|
+
* includes the error. The error is informational only.
|
|
352
|
+
*/
|
|
353
|
+
completion: Promise<RedirectMessage_2 | Error | undefined>;
|
|
336
354
|
}
|
|
337
355
|
|
|
338
356
|
/**
|
|
@@ -570,7 +588,7 @@ export declare const RequestEvShareQData = "qData";
|
|
|
570
588
|
export declare type RequestHandler<PLATFORM = QwikRouterPlatform> = (ev: RequestEvent<PLATFORM>) => Promise<void> | void;
|
|
571
589
|
|
|
572
590
|
/**
|
|
573
|
-
* The request handler for QwikRouter. Called by every
|
|
591
|
+
* The request handler for QwikRouter. Called by every adapter.
|
|
574
592
|
*
|
|
575
593
|
* @public
|
|
576
594
|
*/
|
|
@@ -581,14 +599,14 @@ declare type ResolvedDocumentHead<FrontMatter extends Record<string, any> = Reco
|
|
|
581
599
|
|
|
582
600
|
/** @public */
|
|
583
601
|
export declare interface ResolveSyncValue {
|
|
602
|
+
<T, INPUT, OPTIONAL extends boolean>(action: Action<T, INPUT, OPTIONAL>): Awaited<T> | undefined;
|
|
584
603
|
<T>(loader: Loader_2<T>): Awaited<T> extends () => any ? never : Awaited<T>;
|
|
585
|
-
<T>(action: Action<T>): Awaited<T> | undefined;
|
|
586
604
|
}
|
|
587
605
|
|
|
588
606
|
/** @public */
|
|
589
607
|
export declare interface ResolveValue {
|
|
608
|
+
<T, INPUT, OPTIONAL extends boolean>(action: Action<T, INPUT, OPTIONAL>): Promise<T | undefined>;
|
|
590
609
|
<T>(loader: Loader_2<T>): Awaited<T> extends () => any ? never : Promise<T>;
|
|
591
|
-
<T>(action: Action<T>): Promise<T | undefined>;
|
|
592
610
|
}
|
|
593
611
|
|
|
594
612
|
/** @public */
|