@qwik.dev/router 2.0.0-beta.4 → 2.0.0-beta.40
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/adapters/static/vite.d.ts +1 -1
- package/lib/adapters/azure-swa/vite/index.d.ts +2 -2
- package/lib/adapters/azure-swa/vite/index.mjs +44 -58
- package/lib/adapters/bun-server/vite/index.d.ts +2 -2
- package/lib/adapters/bun-server/vite/index.mjs +16 -23
- package/lib/adapters/cloud-run/vite/index.d.ts +2 -2
- package/lib/adapters/cloud-run/vite/index.mjs +15 -20
- package/lib/adapters/cloudflare-pages/vite/index.d.ts +2 -2
- package/lib/adapters/cloudflare-pages/vite/index.mjs +45 -77
- package/lib/adapters/deno-server/vite/index.d.ts +2 -2
- package/lib/adapters/deno-server/vite/index.mjs +25 -35
- package/lib/adapters/netlify-edge/vite/index.d.ts +2 -2
- package/lib/adapters/netlify-edge/vite/index.mjs +49 -89
- package/lib/adapters/node-server/vite/index.d.ts +2 -2
- package/lib/adapters/node-server/vite/index.mjs +16 -23
- package/lib/adapters/shared/vite/index.d.ts +9 -22
- package/lib/adapters/shared/vite/index.mjs +273 -333
- package/lib/adapters/ssg/vite/index.d.ts +13 -0
- package/lib/adapters/ssg/vite/index.mjs +13 -0
- package/lib/adapters/vercel-edge/vite/index.d.ts +3 -3
- package/lib/adapters/vercel-edge/vite/index.mjs +73 -80
- package/lib/chunks/dev-preloaded-route-loader.mjs +2 -0
- package/lib/chunks/format.mjs +24 -0
- package/lib/chunks/fs.mjs +133 -0
- package/lib/chunks/head.qwik.mjs +1217 -0
- package/lib/chunks/http-error.qwik.mjs +27 -0
- package/lib/chunks/pathname.mjs +57 -0
- package/lib/chunks/request-body-limit.mjs +27 -0
- package/lib/chunks/request-path.mjs +49 -0
- package/lib/chunks/routes.mjs +26 -0
- package/lib/chunks/server-error.mjs +16 -0
- package/lib/chunks/system.mjs +265 -0
- package/lib/chunks/url.mjs +59 -0
- package/lib/chunks/user-response.mjs +1707 -0
- package/lib/chunks/worker-thread.mjs +264 -0
- package/lib/index.d.ts +626 -170
- package/lib/index.qwik.mjs +1649 -1964
- package/lib/middleware/aws-lambda/index.d.ts +15 -16
- package/lib/middleware/aws-lambda/index.mjs +45 -54
- package/lib/middleware/azure-swa/index.mjs +85 -295
- package/lib/middleware/bun/index.d.ts +20 -5
- package/lib/middleware/bun/index.mjs +119 -205
- package/lib/middleware/cloudflare-pages/index.mjs +83 -105
- package/lib/middleware/deno/index.d.ts +22 -5
- package/lib/middleware/deno/index.mjs +105 -192
- package/lib/middleware/firebase/index.mjs +22 -35
- package/lib/middleware/netlify-edge/index.mjs +63 -81
- package/lib/middleware/node/index.d.ts +17 -5
- package/lib/middleware/node/index.mjs +299 -273
- package/lib/middleware/request-handler/index.d.ts +206 -99
- package/lib/middleware/request-handler/index.mjs +117 -1648
- package/lib/middleware/vercel-edge/index.mjs +76 -101
- package/lib/modules.d.ts +11 -16
- package/lib/service-worker/index.mjs +13 -0
- package/lib/{static → ssg}/index.d.ts +46 -22
- package/lib/ssg/index.mjs +257 -0
- package/lib/vite/index.d.ts +58 -10
- package/lib/vite/index.mjs +2459 -27446
- package/modules.d.ts +11 -16
- package/package.json +63 -67
- package/ssg.d.ts +2 -0
- package/static.d.ts +1 -1
- package/lib/adapters/azure-swa/vite/index.cjs +0 -96
- package/lib/adapters/bun-server/vite/index.cjs +0 -50
- package/lib/adapters/cloud-run/vite/index.cjs +0 -47
- package/lib/adapters/cloudflare-pages/vite/index.cjs +0 -115
- package/lib/adapters/deno-server/vite/index.cjs +0 -62
- package/lib/adapters/netlify-edge/vite/index.cjs +0 -129
- package/lib/adapters/node-server/vite/index.cjs +0 -50
- package/lib/adapters/shared/vite/index.cjs +0 -378
- package/lib/adapters/static/vite/index.cjs +0 -368
- package/lib/adapters/static/vite/index.d.ts +0 -10
- package/lib/adapters/static/vite/index.mjs +0 -331
- package/lib/adapters/vercel-edge/vite/index.cjs +0 -118
- package/lib/index.qwik.cjs +0 -2022
- package/lib/middleware/node/index.cjs +0 -314
- package/lib/middleware/request-handler/index.cjs +0 -1691
- package/lib/service-worker.cjs +0 -17
- package/lib/service-worker.mjs +0 -15
- package/lib/static/deno.mjs +0 -8
- package/lib/static/index.cjs +0 -67
- package/lib/static/index.mjs +0 -48
- package/lib/static/node.cjs +0 -1126
- package/lib/static/node.mjs +0 -1088
- package/lib/vite/index.cjs +0 -27525
- package/middleware/request-handler/generated/not-found-paths.ts +0 -7
- package/middleware/request-handler/generated/static-paths.ts +0 -35
|
@@ -1,287 +1,313 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { n as MIME_TYPES, t as normalizeRequestUrl } from "../../chunks/url.mjs";
|
|
2
|
+
import { i as validateRequestBodyLimit, n as RequestBodyLimitError, t as DEFAULT_REQUEST_BODY_LIMIT } from "../../chunks/request-body-limit.mjs";
|
|
3
|
+
import { t as devPreloadedRouteLoaders } from "../../chunks/dev-preloaded-route-loader.mjs";
|
|
4
|
+
import { isDev } from "@qwik.dev/core";
|
|
5
5
|
import { setServerPlatform } from "@qwik.dev/core/server";
|
|
6
|
-
import { requestHandler } from "../request-handler/index.mjs";
|
|
7
6
|
import { createReadStream } from "node:fs";
|
|
8
7
|
import { basename, extname, join } from "node:path";
|
|
8
|
+
import { isStaticPath, requestHandler } from "@qwik.dev/router/middleware/request-handler";
|
|
9
9
|
import { fileURLToPath } from "node:url";
|
|
10
|
-
|
|
11
|
-
// packages/qwik-router/src/middleware/request-handler/mime-types.ts
|
|
12
|
-
var MIME_TYPES = {
|
|
13
|
-
"3gp": "video/3gpp",
|
|
14
|
-
"3gpp": "video/3gpp",
|
|
15
|
-
asf: "video/x-ms-asf",
|
|
16
|
-
asx: "video/x-ms-asf",
|
|
17
|
-
avi: "video/x-msvideo",
|
|
18
|
-
avif: "image/avif",
|
|
19
|
-
bmp: "image/x-ms-bmp",
|
|
20
|
-
css: "text/css",
|
|
21
|
-
flv: "video/x-flv",
|
|
22
|
-
gif: "image/gif",
|
|
23
|
-
htm: "text/html",
|
|
24
|
-
html: "text/html",
|
|
25
|
-
ico: "image/x-icon",
|
|
26
|
-
jng: "image/x-jng",
|
|
27
|
-
jpeg: "image/jpeg",
|
|
28
|
-
jpg: "image/jpeg",
|
|
29
|
-
js: "application/javascript",
|
|
30
|
-
json: "application/json",
|
|
31
|
-
kar: "audio/midi",
|
|
32
|
-
m4a: "audio/x-m4a",
|
|
33
|
-
m4v: "video/x-m4v",
|
|
34
|
-
mid: "audio/midi",
|
|
35
|
-
midi: "audio/midi",
|
|
36
|
-
mng: "video/x-mng",
|
|
37
|
-
mov: "video/quicktime",
|
|
38
|
-
mp3: "audio/mpeg",
|
|
39
|
-
mp4: "video/mp4",
|
|
40
|
-
mpeg: "video/mpeg",
|
|
41
|
-
mpg: "video/mpeg",
|
|
42
|
-
ogg: "audio/ogg",
|
|
43
|
-
pdf: "application/pdf",
|
|
44
|
-
png: "image/png",
|
|
45
|
-
rar: "application/x-rar-compressed",
|
|
46
|
-
shtml: "text/html",
|
|
47
|
-
svg: "image/svg+xml",
|
|
48
|
-
svgz: "image/svg+xml",
|
|
49
|
-
tif: "image/tiff",
|
|
50
|
-
tiff: "image/tiff",
|
|
51
|
-
ts: "video/mp2t",
|
|
52
|
-
txt: "text/plain",
|
|
53
|
-
wbmp: "image/vnd.wap.wbmp",
|
|
54
|
-
webm: "video/webm",
|
|
55
|
-
webp: "image/webp",
|
|
56
|
-
wmv: "video/x-ms-wmv",
|
|
57
|
-
woff: "font/woff",
|
|
58
|
-
woff2: "font/woff2",
|
|
59
|
-
xml: "text/xml",
|
|
60
|
-
zip: "application/zip"
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
// packages/qwik-router/src/middleware/node/http.ts
|
|
64
10
|
import { Http2ServerRequest } from "node:http2";
|
|
65
|
-
function computeOrigin(req, opts) {
|
|
66
|
-
var _a;
|
|
67
|
-
return ((_a = opts == null ? void 0 : opts.getOrigin) == null ? void 0 : _a.call(opts, req)) ?? (opts == null ? void 0 : opts.origin) ?? process.env.ORIGIN ?? fallbackOrigin(req);
|
|
68
|
-
}
|
|
69
11
|
function fallbackOrigin(req) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const hostHeader = HOST_HEADER ?? (req instanceof Http2ServerRequest ? ":authority" : "host");
|
|
74
|
-
const host = headers[hostHeader];
|
|
75
|
-
return `${protocol}://${host}`;
|
|
12
|
+
const { PROTOCOL_HEADER, HOST_HEADER } = process.env;
|
|
13
|
+
const headers = req.headers;
|
|
14
|
+
return `${PROTOCOL_HEADER && headers[PROTOCOL_HEADER] || (req.socket.encrypted || req.connection.encrypted ? "https" : "http")}://${headers[HOST_HEADER ?? (req instanceof Http2ServerRequest ? ":authority" : "host")]}`;
|
|
76
15
|
}
|
|
77
|
-
function
|
|
78
|
-
|
|
16
|
+
function computeOrigin(req, opts) {
|
|
17
|
+
return opts?.getOrigin?.(req) ?? opts?.origin ?? process.env.ORIGIN ?? fallbackOrigin(req);
|
|
79
18
|
}
|
|
80
|
-
function
|
|
81
|
-
|
|
82
|
-
|
|
19
|
+
function isClientAbortWriteError(error) {
|
|
20
|
+
if (!(error instanceof Error)) return false;
|
|
21
|
+
const code = error.code;
|
|
22
|
+
if (code === "EPIPE" || code === "ECONNRESET" || code === "ERR_STREAM_DESTROYED" || code === "ERR_STREAM_WRITE_AFTER_END") return true;
|
|
23
|
+
return false;
|
|
83
24
|
}
|
|
84
25
|
var invalidHeadersPattern = /^:(method|scheme|authority|path)$/i;
|
|
85
26
|
function normalizeUrl(url, base) {
|
|
86
|
-
|
|
87
|
-
|
|
27
|
+
return normalizeRequestUrl(url, base);
|
|
28
|
+
}
|
|
29
|
+
function getUrl(req, origin) {
|
|
30
|
+
return normalizeUrl(req.originalUrl || req.url || "/", origin);
|
|
31
|
+
}
|
|
32
|
+
function createNodeResponseSink(res) {
|
|
33
|
+
let closed = res.closed || res.destroyed;
|
|
34
|
+
let responseError;
|
|
35
|
+
let resolveClosed;
|
|
36
|
+
const closedPromise = closed ? Promise.resolve() : new Promise((resolve) => {
|
|
37
|
+
resolveClosed = resolve;
|
|
38
|
+
res.once("close", () => {
|
|
39
|
+
closed = true;
|
|
40
|
+
resolve();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
res.on("error", (error) => {
|
|
44
|
+
if (responseError === void 0) responseError = error;
|
|
45
|
+
if (!closed) {
|
|
46
|
+
closed = true;
|
|
47
|
+
resolveClosed();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
const shouldPropagateResponseError = () => responseError !== void 0 && !isClientAbortWriteError(responseError);
|
|
51
|
+
const write = (chunk) => {
|
|
52
|
+
if (closed || res.closed || res.destroyed) {
|
|
53
|
+
if (shouldPropagateResponseError()) return Promise.reject(responseError);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
return new Promise((resolve, reject) => {
|
|
57
|
+
let settled = false;
|
|
58
|
+
let onDrain;
|
|
59
|
+
const cleanupDrain = () => {
|
|
60
|
+
if (onDrain) {
|
|
61
|
+
res.off("drain", onDrain);
|
|
62
|
+
onDrain = void 0;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const finish = () => {
|
|
66
|
+
if (settled) return;
|
|
67
|
+
settled = true;
|
|
68
|
+
cleanupDrain();
|
|
69
|
+
setImmediate(resolve);
|
|
70
|
+
};
|
|
71
|
+
const finishClosed = () => {
|
|
72
|
+
closed = true;
|
|
73
|
+
finish();
|
|
74
|
+
};
|
|
75
|
+
const fail = (error) => {
|
|
76
|
+
if (settled) return;
|
|
77
|
+
settled = true;
|
|
78
|
+
closed = true;
|
|
79
|
+
cleanupDrain();
|
|
80
|
+
reject(error);
|
|
81
|
+
};
|
|
82
|
+
closedPromise.then(() => {
|
|
83
|
+
if (shouldPropagateResponseError()) {
|
|
84
|
+
fail(responseError);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
finish();
|
|
88
|
+
});
|
|
89
|
+
let ok;
|
|
90
|
+
try {
|
|
91
|
+
ok = res.write(chunk, (error) => {
|
|
92
|
+
if (error) {
|
|
93
|
+
if (isClientAbortWriteError(error)) {
|
|
94
|
+
finishClosed();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
fail(error);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
finish();
|
|
101
|
+
});
|
|
102
|
+
} catch (error) {
|
|
103
|
+
if (isClientAbortWriteError(error)) {
|
|
104
|
+
finishClosed();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
fail(error);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (settled) return;
|
|
111
|
+
if (ok) finish();
|
|
112
|
+
else {
|
|
113
|
+
onDrain = () => {
|
|
114
|
+
onDrain = void 0;
|
|
115
|
+
finish();
|
|
116
|
+
};
|
|
117
|
+
res.once("drain", onDrain);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
const close = () => {
|
|
122
|
+
if (closed || res.closed || res.destroyed) {
|
|
123
|
+
if (shouldPropagateResponseError()) return Promise.reject(responseError);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
return new Promise((resolve, reject) => {
|
|
127
|
+
let settled = false;
|
|
128
|
+
const finish = () => {
|
|
129
|
+
if (settled) return;
|
|
130
|
+
settled = true;
|
|
131
|
+
closed = true;
|
|
132
|
+
resolve();
|
|
133
|
+
};
|
|
134
|
+
const fail = (error) => {
|
|
135
|
+
if (settled) return;
|
|
136
|
+
settled = true;
|
|
137
|
+
closed = true;
|
|
138
|
+
reject(error);
|
|
139
|
+
};
|
|
140
|
+
closedPromise.then(() => {
|
|
141
|
+
if (shouldPropagateResponseError()) {
|
|
142
|
+
fail(responseError);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
finish();
|
|
146
|
+
});
|
|
147
|
+
res.once("finish", finish);
|
|
148
|
+
try {
|
|
149
|
+
res.end();
|
|
150
|
+
} catch (error) {
|
|
151
|
+
if (isClientAbortWriteError(error)) {
|
|
152
|
+
finish();
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
fail(error);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
write,
|
|
161
|
+
close
|
|
162
|
+
};
|
|
88
163
|
}
|
|
89
|
-
async function fromNodeHttp(url, req, res, mode, getClientConn) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
},
|
|
171
|
-
platform: {
|
|
172
|
-
ssr: true,
|
|
173
|
-
incomingMessage: req,
|
|
174
|
-
node: process.versions.node
|
|
175
|
-
// Weirdly needed to make typecheck of insights happy
|
|
176
|
-
},
|
|
177
|
-
locale: void 0
|
|
178
|
-
};
|
|
179
|
-
return serverRequestEv;
|
|
164
|
+
async function fromNodeHttp(url, req, res, mode, getClientConn, requestBodyLimit = DEFAULT_REQUEST_BODY_LIMIT) {
|
|
165
|
+
validateRequestBodyLimit(requestBodyLimit);
|
|
166
|
+
const requestHeaders = new Headers();
|
|
167
|
+
const nodeRequestHeaders = req.headers;
|
|
168
|
+
try {
|
|
169
|
+
for (const [key, value] of Object.entries(nodeRequestHeaders)) {
|
|
170
|
+
if (invalidHeadersPattern.test(key)) continue;
|
|
171
|
+
if (typeof value === "string") requestHeaders.set(key, value);
|
|
172
|
+
else if (Array.isArray(value)) for (const v of value) requestHeaders.append(key, v);
|
|
173
|
+
}
|
|
174
|
+
} catch (err) {
|
|
175
|
+
console.error(err);
|
|
176
|
+
}
|
|
177
|
+
const getRequestBody = async function* () {
|
|
178
|
+
let received = 0;
|
|
179
|
+
for await (const chunk of req) {
|
|
180
|
+
const byteLength = typeof chunk === "string" ? Buffer.byteLength(chunk) : chunk.byteLength;
|
|
181
|
+
if (byteLength > requestBodyLimit - received) {
|
|
182
|
+
req.resume();
|
|
183
|
+
throw new RequestBodyLimitError(requestBodyLimit);
|
|
184
|
+
}
|
|
185
|
+
received += byteLength;
|
|
186
|
+
yield chunk;
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
const body = req.method === "HEAD" || req.method === "GET" ? void 0 : getRequestBody();
|
|
190
|
+
const controller = new AbortController();
|
|
191
|
+
const abort = () => {
|
|
192
|
+
controller.abort();
|
|
193
|
+
};
|
|
194
|
+
const options = {
|
|
195
|
+
method: req.method,
|
|
196
|
+
headers: requestHeaders,
|
|
197
|
+
body,
|
|
198
|
+
signal: controller.signal,
|
|
199
|
+
duplex: "half"
|
|
200
|
+
};
|
|
201
|
+
req.on("aborted", abort);
|
|
202
|
+
req.on("error", abort);
|
|
203
|
+
res.on("close", abort);
|
|
204
|
+
res.on("error", abort);
|
|
205
|
+
return {
|
|
206
|
+
mode,
|
|
207
|
+
url,
|
|
208
|
+
request: new Request(url.href, options),
|
|
209
|
+
env: { get(key) {
|
|
210
|
+
return process.env[key];
|
|
211
|
+
} },
|
|
212
|
+
getWritableStream: (status, headers, cookies, resolve) => {
|
|
213
|
+
res.statusCode = status;
|
|
214
|
+
const sink = createNodeResponseSink(res);
|
|
215
|
+
try {
|
|
216
|
+
for (const [key, value] of headers) {
|
|
217
|
+
if (invalidHeadersPattern.test(key)) continue;
|
|
218
|
+
res.setHeader(key, value);
|
|
219
|
+
}
|
|
220
|
+
const cookieHeaders = cookies.headers();
|
|
221
|
+
if (cookieHeaders.length > 0) res.setHeader("Set-Cookie", cookieHeaders);
|
|
222
|
+
} catch (err) {
|
|
223
|
+
console.error(err);
|
|
224
|
+
}
|
|
225
|
+
resolve(true);
|
|
226
|
+
return new WritableStream({
|
|
227
|
+
write(chunk) {
|
|
228
|
+
return sink.write(chunk);
|
|
229
|
+
},
|
|
230
|
+
close() {
|
|
231
|
+
return sink.close();
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
},
|
|
235
|
+
getClientConn: () => {
|
|
236
|
+
return getClientConn ? getClientConn(req) : { ip: req.socket.remoteAddress };
|
|
237
|
+
},
|
|
238
|
+
platform: {
|
|
239
|
+
ssr: true,
|
|
240
|
+
incomingMessage: req,
|
|
241
|
+
node: process.versions.node
|
|
242
|
+
},
|
|
243
|
+
locale: void 0
|
|
244
|
+
};
|
|
180
245
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
const staticFile = async (req, res, next) => {
|
|
244
|
-
var _a2;
|
|
245
|
-
try {
|
|
246
|
-
const origin = computeOrigin(req, opts);
|
|
247
|
-
const url = getUrl(req, origin);
|
|
248
|
-
if (isStaticPath(req.method || "GET", url)) {
|
|
249
|
-
const pathname = url.pathname;
|
|
250
|
-
let filePath;
|
|
251
|
-
if (basename(pathname).includes(".")) {
|
|
252
|
-
filePath = join(staticFolder, pathname);
|
|
253
|
-
} else if (opts.qwikRouterConfig.trailingSlash) {
|
|
254
|
-
filePath = join(staticFolder, pathname + "index.html");
|
|
255
|
-
} else {
|
|
256
|
-
filePath = join(staticFolder, pathname, "index.html");
|
|
257
|
-
}
|
|
258
|
-
const ext = extname(filePath).replace(/^\./, "");
|
|
259
|
-
const stream = createReadStream(filePath);
|
|
260
|
-
stream.on("error", next);
|
|
261
|
-
const contentType = MIME_TYPES[ext];
|
|
262
|
-
if (contentType) {
|
|
263
|
-
res.setHeader("Content-Type", contentType);
|
|
264
|
-
}
|
|
265
|
-
if ((_a2 = opts.static) == null ? void 0 : _a2.cacheControl) {
|
|
266
|
-
res.setHeader("Cache-Control", opts.static.cacheControl);
|
|
267
|
-
}
|
|
268
|
-
stream.pipe(res);
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
return next();
|
|
272
|
-
} catch (e) {
|
|
273
|
-
console.error(e);
|
|
274
|
-
next(e);
|
|
275
|
-
}
|
|
276
|
-
};
|
|
277
|
-
return {
|
|
278
|
-
router,
|
|
279
|
-
notFound,
|
|
280
|
-
staticFile
|
|
281
|
-
};
|
|
246
|
+
/** @public */ function createQwikRouter(opts) {
|
|
247
|
+
if (opts.manifest) setServerPlatform(opts.manifest);
|
|
248
|
+
const staticFolder = opts.static?.root ?? join(fileURLToPath(import.meta.url), "..", "..", "dist");
|
|
249
|
+
const router = async (req, res, next, limits = {}) => {
|
|
250
|
+
try {
|
|
251
|
+
const origin = computeOrigin(req, opts);
|
|
252
|
+
let requestBodyLimit = opts.requestBodyLimit;
|
|
253
|
+
if (limits?.bodyLimit !== void 0) {
|
|
254
|
+
if (requestBodyLimit === void 0) requestBodyLimit = limits.bodyLimit;
|
|
255
|
+
else requestBodyLimit = Math.min(requestBodyLimit, limits.bodyLimit);
|
|
256
|
+
}
|
|
257
|
+
const serverRequestEv = await fromNodeHttp(getUrl(req, origin), req, res, "server", opts.getClientConn, requestBodyLimit);
|
|
258
|
+
if (isDev && opts.platform) Object.assign(serverRequestEv.platform, opts.platform);
|
|
259
|
+
if (isDev) {
|
|
260
|
+
const loader = devPreloadedRouteLoaders.get(req);
|
|
261
|
+
if (loader) {
|
|
262
|
+
devPreloadedRouteLoaders.set(serverRequestEv.request, loader);
|
|
263
|
+
devPreloadedRouteLoaders.delete(req);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
const handled = await requestHandler(serverRequestEv, opts);
|
|
267
|
+
if (handled) {
|
|
268
|
+
const err = await handled.completion;
|
|
269
|
+
if (handled.requestEv.headersSent) return;
|
|
270
|
+
if (err) throw err;
|
|
271
|
+
}
|
|
272
|
+
next();
|
|
273
|
+
} catch (e) {
|
|
274
|
+
console.error(e);
|
|
275
|
+
next(e);
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
/** @deprecated `router` handles 404 responses. Will be removed in V3. */ const notFound = async (_req, _res, next) => next();
|
|
279
|
+
const staticFile = async (req, res, next) => {
|
|
280
|
+
try {
|
|
281
|
+
const url = getUrl(req, computeOrigin(req, opts));
|
|
282
|
+
if (isStaticPath(req.method || "GET", url)) {
|
|
283
|
+
const pathname = url.pathname;
|
|
284
|
+
let filePath;
|
|
285
|
+
if (basename(pathname).includes(".")) filePath = join(staticFolder, pathname);
|
|
286
|
+
else if (!globalThis.__NO_TRAILING_SLASH__) filePath = join(staticFolder, pathname + "index.html");
|
|
287
|
+
else filePath = join(staticFolder, pathname, "index.html");
|
|
288
|
+
const ext = extname(filePath).replace(/^\./, "");
|
|
289
|
+
const stream = createReadStream(filePath);
|
|
290
|
+
stream.on("error", next);
|
|
291
|
+
const contentType = MIME_TYPES[ext];
|
|
292
|
+
if (contentType) res.setHeader("Content-Type", contentType);
|
|
293
|
+
if (opts.static?.cacheControl) res.setHeader("Cache-Control", opts.static.cacheControl);
|
|
294
|
+
stream.pipe(res);
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
return next();
|
|
298
|
+
} catch (e) {
|
|
299
|
+
console.error(e);
|
|
300
|
+
next(e);
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
return {
|
|
304
|
+
router,
|
|
305
|
+
notFound,
|
|
306
|
+
staticFile
|
|
307
|
+
};
|
|
282
308
|
}
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
};
|
|
309
|
+
/**
|
|
310
|
+
* @deprecated Use `createQwikRouter` instead. Will be removed in V3
|
|
311
|
+
* @public
|
|
312
|
+
*/ var createQwikCity = createQwikRouter;
|
|
313
|
+
export { createQwikCity, createQwikRouter };
|