@qwik.dev/router 2.0.0-beta.4 → 2.0.0-beta.41
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 +280 -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 +140 -0
- package/lib/chunks/head.qwik.mjs +1202 -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 +1730 -0
- package/lib/chunks/worker-thread.mjs +264 -0
- package/lib/index.d.ts +631 -174
- package/lib/index.qwik.mjs +1656 -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 +88 -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 +105 -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 +2471 -27446
- package/modules.d.ts +11 -16
- package/package.json +62 -70
- 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
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { C as getRouteLoaderValues, d as loadRoute, w as getRouteLoaders } from "./head.qwik.mjs";
|
|
2
|
+
import { l as trimInternalPathname } from "./request-path.mjs";
|
|
3
|
+
import { i as resolveRequestHandlers, r as renderQwikMiddleware, t as runQwikRouter } from "./user-response.mjs";
|
|
4
|
+
import { _serialize } from "@qwik.dev/core/internal";
|
|
5
|
+
import { parentPort } from "node:worker_threads";
|
|
6
|
+
var staticWorkerThreadDeps = {
|
|
7
|
+
loadRoute,
|
|
8
|
+
renderQwikMiddleware,
|
|
9
|
+
resolveRequestHandlers,
|
|
10
|
+
trimInternalPathname,
|
|
11
|
+
runQwikRouter
|
|
12
|
+
};
|
|
13
|
+
/** Create a fresh no-op WritableStream (must be a real instance for pipeTo checks). */ var createNoopWritableStream = () => new WritableStream();
|
|
14
|
+
function isRedirectMessage(value) {
|
|
15
|
+
return typeof value === "object" && value !== null && value.constructor?.name === "RedirectMessage";
|
|
16
|
+
}
|
|
17
|
+
async function requestHandlerForSsg(serverRequestEv, opts, deps) {
|
|
18
|
+
const { render, checkOrigin, qwikRouterConfig } = opts;
|
|
19
|
+
if (!qwikRouterConfig) throw new Error("qwikRouterConfig is required.");
|
|
20
|
+
const pathname = deps.trimInternalPathname(serverRequestEv.url.pathname);
|
|
21
|
+
if (pathname === "/.well-known" || pathname.startsWith("/.well-known/")) return null;
|
|
22
|
+
const { routes, serverPlugins, cacheModules } = qwikRouterConfig;
|
|
23
|
+
const loadedRoute = await deps.loadRoute(routes, cacheModules, pathname);
|
|
24
|
+
const requestHandlers = deps.resolveRequestHandlers(serverPlugins, loadedRoute, serverRequestEv.request.method, checkOrigin ?? true, deps.renderQwikMiddleware(render));
|
|
25
|
+
if (qwikRouterConfig.fallthrough && loadedRoute.$notFound$ && !pathname.endsWith("/404.html")) return null;
|
|
26
|
+
const rebuildRouteInfo = async (url) => {
|
|
27
|
+
const cleanPathname = deps.trimInternalPathname(url.pathname);
|
|
28
|
+
const loadedRoute = await deps.loadRoute(routes, cacheModules, cleanPathname);
|
|
29
|
+
return {
|
|
30
|
+
loadedRoute,
|
|
31
|
+
requestHandlers: deps.resolveRequestHandlers(serverPlugins, loadedRoute, serverRequestEv.request.method, checkOrigin ?? true, deps.renderQwikMiddleware(render))
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
return deps.runQwikRouter(serverRequestEv, loadedRoute, requestHandlers, rebuildRouteInfo, qwikRouterConfig.basePathname);
|
|
35
|
+
}
|
|
36
|
+
async function workerRender(sys, opts, staticRoute, pendingPromises, callback, deps) {
|
|
37
|
+
const url = new URL(staticRoute.pathname, opts.origin);
|
|
38
|
+
const result = {
|
|
39
|
+
type: "render",
|
|
40
|
+
pathname: staticRoute.pathname,
|
|
41
|
+
url: url.href,
|
|
42
|
+
ok: false,
|
|
43
|
+
error: null,
|
|
44
|
+
filePath: null,
|
|
45
|
+
contentType: null,
|
|
46
|
+
resourceType: null
|
|
47
|
+
};
|
|
48
|
+
try {
|
|
49
|
+
let routeWriter = null;
|
|
50
|
+
let closeResolved;
|
|
51
|
+
const closePromise = new Promise((closePromiseResolve) => {
|
|
52
|
+
closeResolved = closePromiseResolve;
|
|
53
|
+
});
|
|
54
|
+
const promise = requestHandlerForSsg({
|
|
55
|
+
mode: "static",
|
|
56
|
+
locale: void 0,
|
|
57
|
+
url,
|
|
58
|
+
request: new Request(url),
|
|
59
|
+
env: { get(key) {
|
|
60
|
+
return sys.getEnv(key);
|
|
61
|
+
} },
|
|
62
|
+
platform: sys.platform,
|
|
63
|
+
getClientConn: () => {
|
|
64
|
+
return {};
|
|
65
|
+
},
|
|
66
|
+
getWritableStream: (status, headers, _, _r, requestEv) => {
|
|
67
|
+
const isNotFoundPage = url.pathname.endsWith("/404.html");
|
|
68
|
+
result.ok = status >= 200 && status < 300 || isNotFoundPage && status === 404;
|
|
69
|
+
if (!result.ok) return createNoopWritableStream();
|
|
70
|
+
result.contentType = (headers.get("Content-Type") || "").toLowerCase();
|
|
71
|
+
const isHtml = result.contentType.includes("text/html");
|
|
72
|
+
const routeFilePath = sys.getRouteFilePath(url.pathname, isHtml);
|
|
73
|
+
if (isHtml) result.resourceType = "page";
|
|
74
|
+
const hasRouteWriter = isHtml ? opts.emitHtml !== false : true;
|
|
75
|
+
const writeLoaderDataEnabled = isHtml && opts.emitData !== false;
|
|
76
|
+
return new WritableStream({
|
|
77
|
+
async start() {
|
|
78
|
+
try {
|
|
79
|
+
if (hasRouteWriter || writeLoaderDataEnabled) await sys.ensureDir(routeFilePath);
|
|
80
|
+
if (hasRouteWriter) {
|
|
81
|
+
routeWriter = sys.createWriteStream(routeFilePath);
|
|
82
|
+
routeWriter.on("error", (e) => {
|
|
83
|
+
console.error(e);
|
|
84
|
+
routeWriter = null;
|
|
85
|
+
result.error = {
|
|
86
|
+
message: e.message,
|
|
87
|
+
stack: e.stack
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
} catch (e) {
|
|
92
|
+
console.error("Error during stream start", staticRoute.pathname, e);
|
|
93
|
+
routeWriter = null;
|
|
94
|
+
result.error = {
|
|
95
|
+
message: String(e),
|
|
96
|
+
stack: e.stack || ""
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
write(chunk) {
|
|
101
|
+
try {
|
|
102
|
+
if (routeWriter) routeWriter.write(Buffer.from(chunk.buffer));
|
|
103
|
+
} catch (e) {
|
|
104
|
+
console.error("Error during stream write", staticRoute.pathname, e);
|
|
105
|
+
routeWriter = null;
|
|
106
|
+
result.error = {
|
|
107
|
+
message: String(e),
|
|
108
|
+
stack: e.stack || ""
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
async close() {
|
|
113
|
+
const writePromises = [];
|
|
114
|
+
try {
|
|
115
|
+
if (writeLoaderDataEnabled && !isNotFoundPage) {
|
|
116
|
+
const routeLoaders = getRouteLoaders(requestEv);
|
|
117
|
+
const loaderValues = getRouteLoaderValues(requestEv);
|
|
118
|
+
const manifestHash = opts.manifest?.manifestHash || "dev";
|
|
119
|
+
for (const loader of routeLoaders) {
|
|
120
|
+
if (loader.__cacheControl !== "immutable") continue;
|
|
121
|
+
const data = loaderValues[loader.__id];
|
|
122
|
+
if (data === void 0) continue;
|
|
123
|
+
const loaderFilePath = sys.getLoaderFilePath(url.pathname, loader.__id, manifestHash);
|
|
124
|
+
const loaderWriter = sys.createWriteStream(loaderFilePath);
|
|
125
|
+
loaderWriter.on("error", (e) => {
|
|
126
|
+
console.error(e);
|
|
127
|
+
result.error = {
|
|
128
|
+
message: e.message,
|
|
129
|
+
stack: e.stack
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
const serialized = await deps.serialize({ d: data });
|
|
133
|
+
loaderWriter.write(serialized);
|
|
134
|
+
writePromises.push(new Promise((resolve) => {
|
|
135
|
+
result.filePath = routeFilePath;
|
|
136
|
+
loaderWriter.end(resolve);
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (routeWriter) writePromises.push(new Promise((resolve) => {
|
|
141
|
+
result.filePath = routeFilePath;
|
|
142
|
+
routeWriter.end(resolve);
|
|
143
|
+
}).finally(closeResolved));
|
|
144
|
+
if (writePromises.length > 0) await Promise.all(writePromises);
|
|
145
|
+
} catch (e) {
|
|
146
|
+
console.error("Error during stream close", staticRoute.pathname, e);
|
|
147
|
+
routeWriter = null;
|
|
148
|
+
result.error = {
|
|
149
|
+
message: String(e),
|
|
150
|
+
stack: e.stack || ""
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}, opts, deps).then((rsp) => {
|
|
157
|
+
if (rsp != null) return rsp.completion.then((r) => {
|
|
158
|
+
if (routeWriter) return closePromise.then(() => r);
|
|
159
|
+
return r;
|
|
160
|
+
});
|
|
161
|
+
}).then((e) => {
|
|
162
|
+
if (e !== void 0) {
|
|
163
|
+
if (isRedirectMessage(e)) return;
|
|
164
|
+
if (e instanceof Error) result.error = {
|
|
165
|
+
message: e.message,
|
|
166
|
+
stack: e.stack
|
|
167
|
+
};
|
|
168
|
+
else result.error = {
|
|
169
|
+
message: String(e),
|
|
170
|
+
stack: void 0
|
|
171
|
+
};
|
|
172
|
+
console.error("Error during request handling", staticRoute.pathname, e);
|
|
173
|
+
}
|
|
174
|
+
}).catch((e) => {
|
|
175
|
+
console.error("Unhandled error during request handling", staticRoute.pathname, e);
|
|
176
|
+
result.error = {
|
|
177
|
+
message: String(e),
|
|
178
|
+
stack: e.stack || ""
|
|
179
|
+
};
|
|
180
|
+
}).finally(() => {
|
|
181
|
+
pendingPromises.delete(promise);
|
|
182
|
+
callback(result);
|
|
183
|
+
});
|
|
184
|
+
pendingPromises.add(promise);
|
|
185
|
+
} catch (e) {
|
|
186
|
+
console.error("Error during render", staticRoute.pathname, e);
|
|
187
|
+
if (e instanceof Error) result.error = {
|
|
188
|
+
message: e.message,
|
|
189
|
+
stack: e.stack
|
|
190
|
+
};
|
|
191
|
+
else result.error = {
|
|
192
|
+
message: String(e),
|
|
193
|
+
stack: void 0
|
|
194
|
+
};
|
|
195
|
+
callback(result);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async function workerThread(sys) {
|
|
199
|
+
const opts = sys.getOptions();
|
|
200
|
+
const pendingPromises = /* @__PURE__ */ new Set();
|
|
201
|
+
const deps = {
|
|
202
|
+
...staticWorkerThreadDeps,
|
|
203
|
+
serialize: _serialize
|
|
204
|
+
};
|
|
205
|
+
process.on("uncaughtException", (e) => {
|
|
206
|
+
console.error("Worker uncaught exception (suppressed):", e.message);
|
|
207
|
+
});
|
|
208
|
+
process.on("unhandledRejection", (e) => {
|
|
209
|
+
console.error("Worker unhandled rejection (suppressed):", e instanceof Error ? e.message : e);
|
|
210
|
+
});
|
|
211
|
+
const onMessage = async (msg) => {
|
|
212
|
+
switch (msg.type) {
|
|
213
|
+
case "render": return new Promise((resolve) => {
|
|
214
|
+
workerRender(sys, opts, msg, pendingPromises, resolve, deps).catch((e) => {
|
|
215
|
+
console.error("Error during render", msg.pathname, e);
|
|
216
|
+
resolve({
|
|
217
|
+
type: "render",
|
|
218
|
+
pathname: msg.pathname,
|
|
219
|
+
url: "",
|
|
220
|
+
ok: false,
|
|
221
|
+
error: {
|
|
222
|
+
message: e instanceof Error ? e.message : String(e),
|
|
223
|
+
stack: e instanceof Error ? e.stack : void 0
|
|
224
|
+
},
|
|
225
|
+
filePath: null,
|
|
226
|
+
contentType: null,
|
|
227
|
+
resourceType: null
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
case "close":
|
|
232
|
+
if (pendingPromises.size) {
|
|
233
|
+
const promises = Array.from(pendingPromises);
|
|
234
|
+
pendingPromises.clear();
|
|
235
|
+
await Promise.all(promises);
|
|
236
|
+
}
|
|
237
|
+
return { type: "close" };
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
parentPort?.on("message", async (msg) => {
|
|
241
|
+
try {
|
|
242
|
+
parentPort?.postMessage(await onMessage(msg));
|
|
243
|
+
} catch (e) {
|
|
244
|
+
if (msg.type === "render") {
|
|
245
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
246
|
+
parentPort?.postMessage({
|
|
247
|
+
type: "render",
|
|
248
|
+
pathname: msg.pathname,
|
|
249
|
+
url: "",
|
|
250
|
+
ok: false,
|
|
251
|
+
error: {
|
|
252
|
+
message: error.message,
|
|
253
|
+
stack: error.stack
|
|
254
|
+
},
|
|
255
|
+
filePath: null,
|
|
256
|
+
contentType: null,
|
|
257
|
+
resourceType: null
|
|
258
|
+
});
|
|
259
|
+
} else console.error("Worker message handler error", e);
|
|
260
|
+
}
|
|
261
|
+
if (msg.type === "close") parentPort?.close();
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
export { workerThread };
|