@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.
Files changed (87) hide show
  1. package/adapters/static/vite.d.ts +1 -1
  2. package/lib/adapters/azure-swa/vite/index.d.ts +2 -2
  3. package/lib/adapters/azure-swa/vite/index.mjs +44 -58
  4. package/lib/adapters/bun-server/vite/index.d.ts +2 -2
  5. package/lib/adapters/bun-server/vite/index.mjs +16 -23
  6. package/lib/adapters/cloud-run/vite/index.d.ts +2 -2
  7. package/lib/adapters/cloud-run/vite/index.mjs +15 -20
  8. package/lib/adapters/cloudflare-pages/vite/index.d.ts +2 -2
  9. package/lib/adapters/cloudflare-pages/vite/index.mjs +45 -77
  10. package/lib/adapters/deno-server/vite/index.d.ts +2 -2
  11. package/lib/adapters/deno-server/vite/index.mjs +25 -35
  12. package/lib/adapters/netlify-edge/vite/index.d.ts +2 -2
  13. package/lib/adapters/netlify-edge/vite/index.mjs +49 -89
  14. package/lib/adapters/node-server/vite/index.d.ts +2 -2
  15. package/lib/adapters/node-server/vite/index.mjs +16 -23
  16. package/lib/adapters/shared/vite/index.d.ts +9 -22
  17. package/lib/adapters/shared/vite/index.mjs +280 -333
  18. package/lib/adapters/ssg/vite/index.d.ts +13 -0
  19. package/lib/adapters/ssg/vite/index.mjs +13 -0
  20. package/lib/adapters/vercel-edge/vite/index.d.ts +3 -3
  21. package/lib/adapters/vercel-edge/vite/index.mjs +73 -80
  22. package/lib/chunks/dev-preloaded-route-loader.mjs +2 -0
  23. package/lib/chunks/format.mjs +24 -0
  24. package/lib/chunks/fs.mjs +140 -0
  25. package/lib/chunks/head.qwik.mjs +1202 -0
  26. package/lib/chunks/http-error.qwik.mjs +27 -0
  27. package/lib/chunks/pathname.mjs +57 -0
  28. package/lib/chunks/request-body-limit.mjs +27 -0
  29. package/lib/chunks/request-path.mjs +49 -0
  30. package/lib/chunks/routes.mjs +26 -0
  31. package/lib/chunks/server-error.mjs +16 -0
  32. package/lib/chunks/system.mjs +265 -0
  33. package/lib/chunks/url.mjs +59 -0
  34. package/lib/chunks/user-response.mjs +1730 -0
  35. package/lib/chunks/worker-thread.mjs +264 -0
  36. package/lib/index.d.ts +631 -174
  37. package/lib/index.qwik.mjs +1656 -1964
  38. package/lib/middleware/aws-lambda/index.d.ts +15 -16
  39. package/lib/middleware/aws-lambda/index.mjs +45 -54
  40. package/lib/middleware/azure-swa/index.mjs +85 -295
  41. package/lib/middleware/bun/index.d.ts +20 -5
  42. package/lib/middleware/bun/index.mjs +119 -205
  43. package/lib/middleware/cloudflare-pages/index.mjs +88 -105
  44. package/lib/middleware/deno/index.d.ts +22 -5
  45. package/lib/middleware/deno/index.mjs +105 -192
  46. package/lib/middleware/firebase/index.mjs +22 -35
  47. package/lib/middleware/netlify-edge/index.mjs +63 -81
  48. package/lib/middleware/node/index.d.ts +17 -5
  49. package/lib/middleware/node/index.mjs +299 -273
  50. package/lib/middleware/request-handler/index.d.ts +206 -99
  51. package/lib/middleware/request-handler/index.mjs +105 -1648
  52. package/lib/middleware/vercel-edge/index.mjs +76 -101
  53. package/lib/modules.d.ts +11 -16
  54. package/lib/service-worker/index.mjs +13 -0
  55. package/lib/{static → ssg}/index.d.ts +46 -22
  56. package/lib/ssg/index.mjs +257 -0
  57. package/lib/vite/index.d.ts +58 -10
  58. package/lib/vite/index.mjs +2471 -27446
  59. package/modules.d.ts +11 -16
  60. package/package.json +62 -70
  61. package/ssg.d.ts +2 -0
  62. package/static.d.ts +1 -1
  63. package/lib/adapters/azure-swa/vite/index.cjs +0 -96
  64. package/lib/adapters/bun-server/vite/index.cjs +0 -50
  65. package/lib/adapters/cloud-run/vite/index.cjs +0 -47
  66. package/lib/adapters/cloudflare-pages/vite/index.cjs +0 -115
  67. package/lib/adapters/deno-server/vite/index.cjs +0 -62
  68. package/lib/adapters/netlify-edge/vite/index.cjs +0 -129
  69. package/lib/adapters/node-server/vite/index.cjs +0 -50
  70. package/lib/adapters/shared/vite/index.cjs +0 -378
  71. package/lib/adapters/static/vite/index.cjs +0 -368
  72. package/lib/adapters/static/vite/index.d.ts +0 -10
  73. package/lib/adapters/static/vite/index.mjs +0 -331
  74. package/lib/adapters/vercel-edge/vite/index.cjs +0 -118
  75. package/lib/index.qwik.cjs +0 -2022
  76. package/lib/middleware/node/index.cjs +0 -314
  77. package/lib/middleware/request-handler/index.cjs +0 -1691
  78. package/lib/service-worker.cjs +0 -17
  79. package/lib/service-worker.mjs +0 -15
  80. package/lib/static/deno.mjs +0 -8
  81. package/lib/static/index.cjs +0 -67
  82. package/lib/static/index.mjs +0 -48
  83. package/lib/static/node.cjs +0 -1126
  84. package/lib/static/node.mjs +0 -1088
  85. package/lib/vite/index.cjs +0 -27525
  86. package/middleware/request-handler/generated/not-found-paths.ts +0 -7
  87. 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 };