@qwik.dev/router 2.0.0-beta.11 → 2.0.0-beta.13

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 (140) hide show
  1. package/lib/adapters/azure-swa/vite/index.cjs +61 -5
  2. package/lib/adapters/azure-swa/vite/index.mjs +26 -205
  3. package/lib/adapters/bun-server/vite/index.cjs +27 -5
  4. package/lib/adapters/bun-server/vite/index.mjs +14 -200
  5. package/lib/adapters/cloud-run/vite/index.cjs +24 -5
  6. package/lib/adapters/cloud-run/vite/index.mjs +13 -199
  7. package/lib/adapters/cloudflare-pages/vite/index.cjs +65 -1
  8. package/lib/adapters/cloudflare-pages/vite/index.mjs +63 -4
  9. package/lib/adapters/deno-server/vite/index.cjs +39 -5
  10. package/lib/adapters/deno-server/vite/index.mjs +16 -202
  11. package/lib/adapters/netlify-edge/vite/index.cjs +88 -6
  12. package/lib/adapters/netlify-edge/vite/index.mjs +56 -244
  13. package/lib/adapters/node-server/vite/index.cjs +27 -5
  14. package/lib/adapters/node-server/vite/index.mjs +14 -200
  15. package/lib/adapters/shared/vite/index.cjs +303 -2
  16. package/lib/adapters/shared/vite/index.d.ts +4 -4
  17. package/lib/adapters/shared/vite/index.mjs +248 -147
  18. package/lib/adapters/ssg/vite/index.cjs +19 -5
  19. package/lib/adapters/ssg/vite/index.mjs +11 -197
  20. package/lib/adapters/vercel-edge/vite/index.cjs +81 -5
  21. package/lib/adapters/vercel-edge/vite/index.d.ts +1 -1
  22. package/lib/adapters/vercel-edge/vite/index.mjs +48 -233
  23. package/lib/chunks/error-handler.cjs +58 -0
  24. package/lib/chunks/error-handler.mjs +59 -0
  25. package/lib/chunks/format-error.cjs +136 -0
  26. package/lib/chunks/format-error.mjs +137 -0
  27. package/lib/chunks/fs.cjs +274 -0
  28. package/lib/chunks/fs.mjs +275 -0
  29. package/lib/chunks/index.cjs +877 -0
  30. package/lib/chunks/index.mjs +876 -0
  31. package/lib/chunks/mime-types.cjs +52 -0
  32. package/lib/chunks/mime-types.mjs +53 -0
  33. package/lib/chunks/routing.qwik.cjs +452 -0
  34. package/lib/chunks/routing.qwik.mjs +453 -0
  35. package/lib/chunks/types.qwik.cjs +24 -0
  36. package/lib/chunks/types.qwik.mjs +25 -0
  37. package/lib/index.d.ts +9 -3
  38. package/lib/index.qwik.cjs +530 -994
  39. package/lib/index.qwik.mjs +499 -965
  40. package/lib/middleware/aws-lambda/index.cjs +52 -1
  41. package/lib/middleware/aws-lambda/index.mjs +37 -26
  42. package/lib/middleware/azure-swa/index.cjs +92 -1
  43. package/lib/middleware/azure-swa/index.mjs +64 -46
  44. package/lib/middleware/bun/index.cjs +143 -1
  45. package/lib/middleware/bun/index.mjs +103 -117
  46. package/lib/middleware/cloudflare-pages/index.cjs +96 -1
  47. package/lib/middleware/cloudflare-pages/index.mjs +68 -47
  48. package/lib/middleware/deno/index.cjs +130 -1
  49. package/lib/middleware/deno/index.mjs +93 -112
  50. package/lib/middleware/firebase/index.cjs +33 -1
  51. package/lib/middleware/firebase/index.mjs +25 -16
  52. package/lib/middleware/netlify-edge/index.cjs +71 -1
  53. package/lib/middleware/netlify-edge/index.mjs +52 -36
  54. package/lib/middleware/node/index.cjs +219 -1
  55. package/lib/middleware/node/index.mjs +178 -165
  56. package/lib/middleware/request-handler/index.cjs +1488 -18
  57. package/lib/middleware/request-handler/index.d.ts +20 -2
  58. package/lib/middleware/request-handler/index.mjs +1223 -882
  59. package/lib/middleware/vercel-edge/index.cjs +98 -1
  60. package/lib/middleware/vercel-edge/index.mjs +71 -47
  61. package/lib/service-worker/index.cjs +5 -0
  62. package/lib/service-worker/index.mjs +5 -0
  63. package/lib/ssg/index.cjs +15 -1
  64. package/lib/ssg/index.mjs +12 -19
  65. package/lib/vite/index.cjs +2006 -27
  66. package/lib/vite/index.d.ts +6 -6
  67. package/lib/vite/index.mjs +1592 -1223
  68. package/package.json +9 -8
  69. package/lib/adapters/azure-swa/vite/index-BqUeglYs.cjs +0 -1
  70. package/lib/adapters/azure-swa/vite/index-CBIchDYq.js +0 -651
  71. package/lib/adapters/azure-swa/vite/index-ClHGw5z1.js +0 -6
  72. package/lib/adapters/azure-swa/vite/index-CrwlB95_.js +0 -22
  73. package/lib/adapters/azure-swa/vite/index-DTIOTwZo.cjs +0 -11
  74. package/lib/adapters/azure-swa/vite/index-vQuPcef3.cjs +0 -1
  75. package/lib/adapters/bun-server/vite/index-BqUeglYs.cjs +0 -1
  76. package/lib/adapters/bun-server/vite/index-CBIchDYq.js +0 -651
  77. package/lib/adapters/bun-server/vite/index-ClHGw5z1.js +0 -6
  78. package/lib/adapters/bun-server/vite/index-CrwlB95_.js +0 -22
  79. package/lib/adapters/bun-server/vite/index-DTIOTwZo.cjs +0 -11
  80. package/lib/adapters/bun-server/vite/index-vQuPcef3.cjs +0 -1
  81. package/lib/adapters/cloud-run/vite/index-BqUeglYs.cjs +0 -1
  82. package/lib/adapters/cloud-run/vite/index-CBIchDYq.js +0 -651
  83. package/lib/adapters/cloud-run/vite/index-ClHGw5z1.js +0 -6
  84. package/lib/adapters/cloud-run/vite/index-CrwlB95_.js +0 -22
  85. package/lib/adapters/cloud-run/vite/index-DTIOTwZo.cjs +0 -11
  86. package/lib/adapters/cloud-run/vite/index-vQuPcef3.cjs +0 -1
  87. package/lib/adapters/cloudflare-pages/vite/index-Bg_9YkM5.js +0 -22
  88. package/lib/adapters/cloudflare-pages/vite/index-C1aDmh1S.cjs +0 -1
  89. package/lib/adapters/cloudflare-pages/vite/index-CHT9Y93A.js +0 -254
  90. package/lib/adapters/cloudflare-pages/vite/index-Ck7KvpK1.cjs +0 -11
  91. package/lib/adapters/cloudflare-pages/vite/index-ClHGw5z1.js +0 -6
  92. package/lib/adapters/cloudflare-pages/vite/index-Cp1cjAds.js +0 -645
  93. package/lib/adapters/cloudflare-pages/vite/index-D9RL9dvJ.cjs +0 -5
  94. package/lib/adapters/cloudflare-pages/vite/index-vQuPcef3.cjs +0 -1
  95. package/lib/adapters/deno-server/vite/index-BqUeglYs.cjs +0 -1
  96. package/lib/adapters/deno-server/vite/index-CBIchDYq.js +0 -651
  97. package/lib/adapters/deno-server/vite/index-ClHGw5z1.js +0 -6
  98. package/lib/adapters/deno-server/vite/index-CrwlB95_.js +0 -22
  99. package/lib/adapters/deno-server/vite/index-DTIOTwZo.cjs +0 -11
  100. package/lib/adapters/deno-server/vite/index-vQuPcef3.cjs +0 -1
  101. package/lib/adapters/netlify-edge/vite/index-BqUeglYs.cjs +0 -1
  102. package/lib/adapters/netlify-edge/vite/index-CBIchDYq.js +0 -651
  103. package/lib/adapters/netlify-edge/vite/index-ClHGw5z1.js +0 -6
  104. package/lib/adapters/netlify-edge/vite/index-CrwlB95_.js +0 -22
  105. package/lib/adapters/netlify-edge/vite/index-DTIOTwZo.cjs +0 -11
  106. package/lib/adapters/netlify-edge/vite/index-vQuPcef3.cjs +0 -1
  107. package/lib/adapters/node-server/vite/index-BqUeglYs.cjs +0 -1
  108. package/lib/adapters/node-server/vite/index-CBIchDYq.js +0 -651
  109. package/lib/adapters/node-server/vite/index-ClHGw5z1.js +0 -6
  110. package/lib/adapters/node-server/vite/index-CrwlB95_.js +0 -22
  111. package/lib/adapters/node-server/vite/index-DTIOTwZo.cjs +0 -11
  112. package/lib/adapters/node-server/vite/index-vQuPcef3.cjs +0 -1
  113. package/lib/adapters/shared/vite/index-BqUeglYs.cjs +0 -1
  114. package/lib/adapters/shared/vite/index-CBIchDYq.js +0 -651
  115. package/lib/adapters/shared/vite/index-ClHGw5z1.js +0 -6
  116. package/lib/adapters/shared/vite/index-CrwlB95_.js +0 -22
  117. package/lib/adapters/shared/vite/index-DTIOTwZo.cjs +0 -11
  118. package/lib/adapters/shared/vite/index-vQuPcef3.cjs +0 -1
  119. package/lib/adapters/ssg/vite/index-BqUeglYs.cjs +0 -1
  120. package/lib/adapters/ssg/vite/index-CBIchDYq.js +0 -651
  121. package/lib/adapters/ssg/vite/index-ClHGw5z1.js +0 -6
  122. package/lib/adapters/ssg/vite/index-CrwlB95_.js +0 -22
  123. package/lib/adapters/ssg/vite/index-DTIOTwZo.cjs +0 -11
  124. package/lib/adapters/ssg/vite/index-vQuPcef3.cjs +0 -1
  125. package/lib/adapters/vercel-edge/vite/index-BqUeglYs.cjs +0 -1
  126. package/lib/adapters/vercel-edge/vite/index-CBIchDYq.js +0 -651
  127. package/lib/adapters/vercel-edge/vite/index-ClHGw5z1.js +0 -6
  128. package/lib/adapters/vercel-edge/vite/index-CrwlB95_.js +0 -22
  129. package/lib/adapters/vercel-edge/vite/index-DTIOTwZo.cjs +0 -11
  130. package/lib/adapters/vercel-edge/vite/index-vQuPcef3.cjs +0 -1
  131. package/lib/service-worker.cjs +0 -1
  132. package/lib/service-worker.mjs +0 -5
  133. package/lib/ssg/deno.cjs +0 -1
  134. package/lib/ssg/deno.mjs +0 -6
  135. package/lib/ssg/index-CBIchDYq.js +0 -651
  136. package/lib/ssg/index-ClHGw5z1.js +0 -6
  137. package/lib/ssg/index-DTIOTwZo.cjs +0 -11
  138. package/lib/ssg/index-vQuPcef3.cjs +0 -1
  139. package/lib/ssg/node.cjs +0 -11
  140. package/lib/ssg/node.mjs +0 -651
@@ -1,205 +1,306 @@
1
- import { join as y, resolve as D, dirname as b, basename as O } from "node:path";
2
- import { getErrorHtml as E } from "@qwik.dev/router/middleware/request-handler";
3
- import m from "node:fs";
4
- async function R(e, s, t, i, d) {
5
- t && !t.endsWith("/") && (t += "/");
6
- const h = /* @__PURE__ */ new Set([
7
- t + "/" + (globalThis.__QWIK_BUILD_DIR__ || "build") + "/",
8
- t + "/" + (globalThis.__QWIK_ASSETS_DIR__ || "assets") + "/"
9
- ]), o = new Set(i.map(P)), w = [], c = async (a, l, u) => {
10
- if (u = P(u), h.has(u))
1
+ import { join, resolve, dirname, basename } from "node:path";
2
+ import fs from "node:fs";
3
+ import { g as getErrorHtml } from "../../../chunks/error-handler.mjs";
4
+ async function postBuild(clientOutDir, serverOutDir, pathName, userStaticPaths, cleanStatic) {
5
+ if (pathName && !pathName.endsWith("/")) {
6
+ pathName += "/";
7
+ }
8
+ const ignorePathnames = /* @__PURE__ */ new Set([
9
+ pathName + "/" + (globalThis.__QWIK_BUILD_DIR__ || "build") + "/",
10
+ pathName + "/" + (globalThis.__QWIK_ASSETS_DIR__ || "assets") + "/"
11
+ ]);
12
+ const staticPaths = new Set(userStaticPaths.map(normalizeTrailingSlash));
13
+ const notFounds = [];
14
+ const loadItem = async (fsDir, fsName, pathname) => {
15
+ pathname = normalizeTrailingSlash(pathname);
16
+ if (ignorePathnames.has(pathname)) {
11
17
  return;
12
- const g = y(a, l);
13
- if (l === "index.html" || l === "q-data.json") {
14
- !o.has(u) && d && await m.promises.unlink(g);
18
+ }
19
+ const fsPath = join(fsDir, fsName);
20
+ if (fsName === "index.html" || fsName === "q-data.json") {
21
+ if (!staticPaths.has(pathname) && cleanStatic) {
22
+ await fs.promises.unlink(fsPath);
23
+ }
15
24
  return;
16
25
  }
17
- if (l === "404.html") {
18
- const n = await m.promises.readFile(g, "utf-8");
19
- w.push([u, n]);
26
+ if (fsName === "404.html") {
27
+ const notFoundHtml = await fs.promises.readFile(fsPath, "utf-8");
28
+ notFounds.push([pathname, notFoundHtml]);
20
29
  return;
21
30
  }
22
- const k = await m.promises.stat(g);
23
- k.isDirectory() ? await p(g, u + l + "/") : k.isFile() && o.add(u + l);
24
- }, p = async (a, l) => {
25
- const u = await m.promises.readdir(a);
26
- await Promise.all(u.map((g) => c(a, g, l)));
31
+ const stat = await fs.promises.stat(fsPath);
32
+ if (stat.isDirectory()) {
33
+ await loadDir(fsPath, pathname + fsName + "/");
34
+ } else if (stat.isFile()) {
35
+ staticPaths.add(pathname + fsName);
36
+ }
37
+ };
38
+ const loadDir = async (fsDir, pathname) => {
39
+ const itemNames = await fs.promises.readdir(fsDir);
40
+ await Promise.all(itemNames.map((i) => loadItem(fsDir, i, pathname)));
27
41
  };
28
- m.existsSync(e) && await p(e, t);
29
- const r = T(t, w), f = A(o);
30
- await C(f, r, s);
42
+ if (fs.existsSync(clientOutDir)) {
43
+ await loadDir(clientOutDir, pathName);
44
+ }
45
+ const notFoundPathsCode = createNotFoundPathsCode(pathName, notFounds);
46
+ const staticPathsCode = createStaticPathsCode(staticPaths);
47
+ await injectStatics(staticPathsCode, notFoundPathsCode, serverOutDir);
31
48
  }
32
- function P(e) {
33
- return e.endsWith("/") ? e : e + "/";
49
+ function normalizeTrailingSlash(pathname) {
50
+ if (!pathname.endsWith("/")) {
51
+ return pathname + "/";
52
+ }
53
+ return pathname;
34
54
  }
35
- function T(e, s) {
36
- if (s.sort((t, i) => t[0].length > i[0].length ? -1 : t[0].length < i[0].length ? 1 : t[0] < i[0] ? -1 : t[0] > i[0] ? 1 : 0), !s.some((t) => t[0] === e)) {
37
- const t = E(404, "Resource Not Found");
38
- s.push([e, t]);
55
+ function createNotFoundPathsCode(basePathname, notFounds) {
56
+ notFounds.sort((a, b) => {
57
+ if (a[0].length > b[0].length) {
58
+ return -1;
59
+ }
60
+ if (a[0].length < b[0].length) {
61
+ return 1;
62
+ }
63
+ if (a[0] < b[0]) {
64
+ return -1;
65
+ }
66
+ if (a[0] > b[0]) {
67
+ return 1;
68
+ }
69
+ return 0;
70
+ });
71
+ if (!notFounds.some((r) => r[0] === basePathname)) {
72
+ const html = getErrorHtml(404, "Resource Not Found");
73
+ notFounds.push([basePathname, html]);
39
74
  }
40
- return JSON.stringify(s, null, 2).slice(1, -1);
75
+ return JSON.stringify(notFounds, null, 2).slice(1, -1);
41
76
  }
42
- function A(e) {
43
- return JSON.stringify(Array.from(new Set(e)).sort()).slice(1, -1);
77
+ function createStaticPathsCode(staticPaths) {
78
+ return JSON.stringify(Array.from(new Set(staticPaths)).sort()).slice(1, -1);
44
79
  }
45
- const C = async (e, s, t) => {
46
- const i = /* @__PURE__ */ new Set(), d = async (o) => {
47
- const w = await m.promises.readFile(o, "utf-8");
48
- let c = !1;
49
- const p = w.replace(
80
+ const injectStatics = async (staticPathsCode, notFoundPathsCode, outDir) => {
81
+ const promises = /* @__PURE__ */ new Set();
82
+ const doReplace = async (path) => {
83
+ const code = await fs.promises.readFile(path, "utf-8");
84
+ let replaced = false;
85
+ const newCode = code.replace(
50
86
  /(['"])__QWIK_ROUTER_(STATIC_PATHS|NOT_FOUND)_ARRAY__\1/g,
51
- (r, f, a) => (c = !0, a === "STATIC_PATHS" ? e : s)
87
+ (_, _quote, type) => {
88
+ replaced = true;
89
+ return type === "STATIC_PATHS" ? staticPathsCode : notFoundPathsCode;
90
+ }
52
91
  );
53
- c && await m.promises.writeFile(o, p);
54
- }, h = async (o) => {
55
- const w = await m.promises.readdir(o, { withFileTypes: !0 });
56
- for (const c of w)
57
- if (c.isDirectory())
58
- await h(y(o, c.name));
59
- else if (c.name.endsWith("js")) {
60
- const p = d(y(o, c.name)).finally(() => {
61
- i.delete(p);
92
+ if (replaced) {
93
+ await fs.promises.writeFile(path, newCode);
94
+ }
95
+ };
96
+ const walk = async (dir) => {
97
+ const entries = await fs.promises.readdir(dir, { withFileTypes: true });
98
+ for (const entry of entries) {
99
+ if (entry.isDirectory()) {
100
+ await walk(join(dir, entry.name));
101
+ } else if (entry.name.endsWith("js")) {
102
+ const p = doReplace(join(dir, entry.name)).finally(() => {
103
+ promises.delete(p);
62
104
  });
63
- i.add(p);
105
+ promises.add(p);
64
106
  }
107
+ }
65
108
  };
66
- await h(t), await Promise.all(i);
109
+ await walk(outDir);
110
+ await Promise.all(promises);
67
111
  };
68
- function W(e) {
69
- let s = null, t = null, i = null, d = null, h = null, o = !1, w;
70
- const c = [];
71
- return {
72
- name: `vite-plugin-qwik-router-ssg-${e.name}`,
112
+ function viteAdapter(opts) {
113
+ let qwikRouterPlugin = null;
114
+ let qwikVitePlugin = null;
115
+ let serverOutDir = null;
116
+ let renderModulePath = null;
117
+ let qwikRouterConfigModulePath = null;
118
+ let isSsrBuild = false;
119
+ let viteCommand;
120
+ const outputEntries = [];
121
+ const plugin = {
122
+ name: `vite-plugin-qwik-router-ssg-${opts.name}`,
73
123
  enforce: "post",
74
124
  apply: "build",
75
- config(r) {
76
- return typeof e.config == "function" && (r = e.config(r)), r.define = {
77
- "process.env.NODE_ENV": JSON.stringify("production"),
78
- ...r.define
79
- }, r;
125
+ config(config) {
126
+ if (typeof opts.config === "function") {
127
+ config = opts.config(config);
128
+ }
129
+ config.define = {
130
+ "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV || "production"),
131
+ ...config.define
132
+ };
133
+ return config;
80
134
  },
81
- configResolved(r) {
82
- if (o = !!r.build.ssr, w = r.command, o) {
83
- if (s = r.plugins.find(
84
- (f) => f.name === "vite-plugin-qwik-router"
85
- ), !s)
135
+ configResolved(config) {
136
+ isSsrBuild = !!config.build.ssr;
137
+ viteCommand = config.command;
138
+ if (isSsrBuild) {
139
+ qwikRouterPlugin = config.plugins.find(
140
+ (p) => p.name === "vite-plugin-qwik-router"
141
+ );
142
+ if (!qwikRouterPlugin) {
86
143
  throw new Error("Missing vite-plugin-qwik-router");
87
- if (t = r.plugins.find(
88
- (f) => f.name === "vite-plugin-qwik"
89
- ), !t)
144
+ }
145
+ qwikVitePlugin = config.plugins.find(
146
+ (p) => p.name === "vite-plugin-qwik"
147
+ );
148
+ if (!qwikVitePlugin) {
90
149
  throw new Error("Missing vite-plugin-qwik");
91
- if (i = r.build.outDir, r.build?.ssr !== !0)
150
+ }
151
+ serverOutDir = config.build.outDir;
152
+ if (config.build?.ssr !== true) {
92
153
  throw new Error(
93
- `"build.ssr" must be set to "true" in order to use the "${e.name}" adapter.`
154
+ `"build.ssr" must be set to "true" in order to use the "${opts.name}" adapter.`
94
155
  );
95
- if (!r.build?.rollupOptions?.input)
156
+ }
157
+ if (!config.build?.rollupOptions?.input) {
96
158
  throw new Error(
97
- `"build.rollupOptions.input" must be set in order to use the "${e.name}" adapter.`
159
+ `"build.rollupOptions.input" must be set in order to use the "${opts.name}" adapter.`
98
160
  );
161
+ }
99
162
  }
100
163
  },
101
164
  buildStart() {
102
- if (o && e.ssg !== null) {
103
- const { srcDir: r } = t.api.getOptions();
104
- w === "build" && i && r && (this.emitFile({
105
- id: "@qwik-router-config",
106
- type: "chunk",
107
- fileName: "@qwik-router-config.js"
108
- }), this.emitFile({
109
- id: `${r}/entry.ssr`,
110
- type: "chunk",
111
- fileName: "entry.ssr.js"
112
- }));
165
+ if (isSsrBuild && opts.ssg !== null) {
166
+ const { srcDir } = qwikVitePlugin.api.getOptions();
167
+ if (viteCommand === "build" && serverOutDir && srcDir) {
168
+ this.emitFile({
169
+ id: "@qwik-router-config",
170
+ type: "chunk",
171
+ fileName: "@qwik-router-config.js"
172
+ });
173
+ this.emitFile({
174
+ id: `${srcDir}/entry.ssr`,
175
+ type: "chunk",
176
+ fileName: "entry.ssr.js"
177
+ });
178
+ }
113
179
  }
114
180
  },
115
- generateBundle(r, f) {
116
- if (o) {
117
- c.length = 0;
118
- for (const a in f) {
119
- const l = f[a];
120
- l.type === "chunk" && l.isEntry && (c.push(a), l.name === "entry.ssr" ? d = y(i, a) : l.name === "@qwik-router-config" && (h = y(i, a)));
181
+ generateBundle(_, bundles) {
182
+ if (isSsrBuild) {
183
+ outputEntries.length = 0;
184
+ for (const fileName in bundles) {
185
+ const chunk = bundles[fileName];
186
+ if (chunk.type === "chunk" && chunk.isEntry) {
187
+ outputEntries.push(fileName);
188
+ if (chunk.name === "entry.ssr") {
189
+ renderModulePath = join(serverOutDir, fileName);
190
+ } else if (chunk.name === "@qwik-router-config") {
191
+ qwikRouterConfigModulePath = join(serverOutDir, fileName);
192
+ }
193
+ }
121
194
  }
122
195
  }
123
196
  },
124
197
  closeBundle: {
125
- sequential: !0,
198
+ sequential: true,
126
199
  async handler() {
127
- if (o && i && s?.api && t?.api) {
128
- const r = e.staticPaths || [], f = s.api.getRoutes(), a = s.api.getBasePathname(), l = t.api.getClientOutDir(), u = t.api.getClientPublicOutDir(), g = t.api.getAssetsDir(), k = t.api.getRootDir() ?? void 0;
129
- if (e.ssg !== null && d && h && l && u) {
130
- let n = e.ssg?.origin ?? e.origin;
131
- n || (n = "https://yoursite.qwik.dev"), n.length > 0 && !/:\/\//.test(n) && (n = `https://${n}`), n.startsWith("//") && (n = `https:${n}`);
200
+ if (isSsrBuild && serverOutDir && qwikRouterPlugin?.api && qwikVitePlugin?.api) {
201
+ const staticPaths = opts.staticPaths || [];
202
+ const routes = qwikRouterPlugin.api.getRoutes();
203
+ const basePathname = qwikRouterPlugin.api.getBasePathname();
204
+ const clientOutDir = qwikVitePlugin.api.getClientOutDir();
205
+ const clientPublicOutDir = qwikVitePlugin.api.getClientPublicOutDir();
206
+ const assetsDir = qwikVitePlugin.api.getAssetsDir();
207
+ const rootDir = qwikVitePlugin.api.getRootDir() ?? void 0;
208
+ if (opts.ssg !== null && renderModulePath && qwikRouterConfigModulePath && clientOutDir && clientPublicOutDir) {
209
+ let ssgOrigin = opts.ssg?.origin ?? opts.origin;
210
+ if (!ssgOrigin) {
211
+ ssgOrigin = `https://yoursite.qwik.dev`;
212
+ }
213
+ if (ssgOrigin.length > 0 && !/:\/\//.test(ssgOrigin)) {
214
+ ssgOrigin = `https://${ssgOrigin}`;
215
+ }
216
+ if (ssgOrigin.startsWith("//")) {
217
+ ssgOrigin = `https:${ssgOrigin}`;
218
+ }
132
219
  try {
133
- n = new URL(n).origin;
220
+ ssgOrigin = new URL(ssgOrigin).origin;
134
221
  } catch {
135
222
  this.warn(
136
- `Invalid "origin" option: "${n}". Using default origin: "https://yoursite.qwik.dev"`
137
- ), n = "https://yoursite.qwik.dev";
223
+ `Invalid "origin" option: "${ssgOrigin}". Using default origin: "https://yoursite.qwik.dev"`
224
+ );
225
+ ssgOrigin = `https://yoursite.qwik.dev`;
138
226
  }
139
- const v = await import("./index-CrwlB95_.js"), q = {
140
- maxWorkers: e.maxWorkers,
141
- basePathname: a,
142
- outDir: u,
143
- rootDir: k,
144
- ...e.ssg,
145
- origin: n,
146
- renderModulePath: d,
147
- qwikRouterConfigModulePath: h
148
- }, S = await v.generate(q);
149
- if (S.errors > 0) {
150
- const _ = new Error(
151
- `Error while running SSG from "${e.name}" adapter. At least one path failed to render.`
227
+ const staticGenerate = await import("../../../ssg/index.mjs");
228
+ const generateOpts = {
229
+ maxWorkers: opts.maxWorkers,
230
+ basePathname,
231
+ outDir: clientPublicOutDir,
232
+ rootDir,
233
+ ...opts.ssg,
234
+ origin: ssgOrigin,
235
+ renderModulePath,
236
+ qwikRouterConfigModulePath
237
+ };
238
+ const staticGenerateResult = await staticGenerate.generate(generateOpts);
239
+ if (staticGenerateResult.errors > 0) {
240
+ const err = new Error(
241
+ `Error while running SSG from "${opts.name}" adapter. At least one path failed to render.`
152
242
  );
153
- _.stack = void 0, this.error(_);
243
+ err.stack = void 0;
244
+ this.error(err);
154
245
  }
155
- r.push(...S.staticPaths);
246
+ staticPaths.push(...staticGenerateResult.staticPaths);
247
+ }
248
+ await postBuild(
249
+ clientPublicOutDir,
250
+ serverOutDir,
251
+ assetsDir ? join(basePathname, assetsDir) : basePathname,
252
+ staticPaths,
253
+ !!opts.cleanStaticGenerated
254
+ );
255
+ if (typeof opts.generate === "function") {
256
+ await opts.generate({
257
+ outputEntries,
258
+ serverOutDir,
259
+ clientOutDir,
260
+ clientPublicOutDir,
261
+ basePathname,
262
+ routes,
263
+ assetsDir,
264
+ warn: (message) => this.warn(message),
265
+ error: (message) => this.error(message)
266
+ });
156
267
  }
157
- await R(
158
- u,
159
- i,
160
- g ? y(a, g) : a,
161
- r,
162
- !!e.cleanStaticGenerated
163
- ), typeof e.generate == "function" && await e.generate({
164
- outputEntries: c,
165
- serverOutDir: i,
166
- clientOutDir: l,
167
- clientPublicOutDir: u,
168
- basePathname: a,
169
- routes: f,
170
- assetsDir: g,
171
- warn: (n) => this.warn(n),
172
- error: (n) => this.error(n)
173
- }), this.warn(
268
+ this.warn(
174
269
  `
175
270
  ==============================================
176
271
  Note: Make sure that you are serving the built files with proper cache headers.
177
272
  See https://qwik.dev/docs/deployments/#cache-headers for more information.
178
273
  ==============================================`
179
- ), e.ssg !== null && setTimeout(() => {
180
- console.warn(
181
- "SSG seems to be hanging after completion, forcing process to exit. Everything is likely fine."
182
- ), process.exit(0);
183
- }, 5e3).unref(), e.ssg !== null && setTimeout(() => {
184
- process.exit(0);
185
- }, 5e3).unref();
274
+ );
275
+ if (opts.ssg !== null) {
276
+ setTimeout(() => {
277
+ console.warn(
278
+ "SSG seems to be hanging after completion, forcing process to exit. Everything is likely fine."
279
+ );
280
+ process.exit(0);
281
+ }, 5e3).unref();
282
+ }
186
283
  }
187
284
  }
188
285
  }
189
286
  };
287
+ return plugin;
190
288
  }
191
- function x(e, s) {
192
- const t = D("/");
193
- let i = e;
194
- for (let d = 0; d < 20; d++) {
195
- if (i = b(i), O(i) === s)
196
- return i;
197
- if (i === t)
289
+ function getParentDir(startDir, dirName) {
290
+ const root = resolve("/");
291
+ let dir = startDir;
292
+ for (let i = 0; i < 20; i++) {
293
+ dir = dirname(dir);
294
+ if (basename(dir) === dirName) {
295
+ return dir;
296
+ }
297
+ if (dir === root) {
198
298
  break;
299
+ }
199
300
  }
200
- throw new Error(`Unable to find "${s}" directory from "${e}"`);
301
+ throw new Error(`Unable to find "${dirName}" directory from "${startDir}"`);
201
302
  }
202
303
  export {
203
- x as getParentDir,
204
- W as viteAdapter
304
+ getParentDir,
305
+ viteAdapter
205
306
  };
@@ -1,5 +1,19 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("node:path"),O=require("@qwik.dev/router/middleware/request-handler"),p=require("node:fs");async function b(e,l,t,n,m){t&&!t.endsWith("/")&&(t+="/");const h=new Set([t+"/"+(globalThis.__QWIK_BUILD_DIR__||"build")+"/",t+"/"+(globalThis.__QWIK_ASSETS_DIR__||"assets")+"/"]),s=new Set(n.map(q)),g=[],c=async(o,a,u)=>{if(u=q(u),h.has(u))return;const f=y.join(o,a);if(a==="index.html"||a==="q-data.json"){!s.has(u)&&m&&await p.promises.unlink(f);return}if(a==="404.html"){const r=await p.promises.readFile(f,"utf-8");g.push([u,r]);return}const S=await p.promises.stat(f);S.isDirectory()?await w(f,u+a+"/"):S.isFile()&&s.add(u+a)},w=async(o,a)=>{const u=await p.promises.readdir(o);await Promise.all(u.map(f=>c(o,f,a)))};p.existsSync(e)&&await w(e,t);const i=T(t,g),d=A(s);await R(d,i,l)}function q(e){return e.endsWith("/")?e:e+"/"}function T(e,l){if(l.sort((t,n)=>t[0].length>n[0].length?-1:t[0].length<n[0].length?1:t[0]<n[0]?-1:t[0]>n[0]?1:0),!l.some(t=>t[0]===e)){const t=O.getErrorHtml(404,"Resource Not Found");l.push([e,t])}return JSON.stringify(l,null,2).slice(1,-1)}function A(e){return JSON.stringify(Array.from(new Set(e)).sort()).slice(1,-1)}const R=async(e,l,t)=>{const n=new Set,m=async s=>{const g=await p.promises.readFile(s,"utf-8");let c=!1;const w=g.replace(/(['"])__QWIK_ROUTER_(STATIC_PATHS|NOT_FOUND)_ARRAY__\1/g,(i,d,o)=>(c=!0,o==="STATIC_PATHS"?e:l));c&&await p.promises.writeFile(s,w)},h=async s=>{const g=await p.promises.readdir(s,{withFileTypes:!0});for(const c of g)if(c.isDirectory())await h(y.join(s,c.name));else if(c.name.endsWith("js")){const w=m(y.join(s,c.name)).finally(()=>{n.delete(w)});n.add(w)}};await h(t),await Promise.all(n)};function E(e){let l=null,t=null,n=null,m=null,h=null,s=!1,g;const c=[];return{name:`vite-plugin-qwik-router-ssg-${e.name}`,enforce:"post",apply:"build",config(i){return typeof e.config=="function"&&(i=e.config(i)),i.define={"process.env.NODE_ENV":JSON.stringify("production"),...i.define},i},configResolved(i){if(s=!!i.build.ssr,g=i.command,s){if(l=i.plugins.find(d=>d.name==="vite-plugin-qwik-router"),!l)throw new Error("Missing vite-plugin-qwik-router");if(t=i.plugins.find(d=>d.name==="vite-plugin-qwik"),!t)throw new Error("Missing vite-plugin-qwik");if(n=i.build.outDir,i.build?.ssr!==!0)throw new Error(`"build.ssr" must be set to "true" in order to use the "${e.name}" adapter.`);if(!i.build?.rollupOptions?.input)throw new Error(`"build.rollupOptions.input" must be set in order to use the "${e.name}" adapter.`)}},buildStart(){if(s&&e.ssg!==null){const{srcDir:i}=t.api.getOptions();g==="build"&&n&&i&&(this.emitFile({id:"@qwik-router-config",type:"chunk",fileName:"@qwik-router-config.js"}),this.emitFile({id:`${i}/entry.ssr`,type:"chunk",fileName:"entry.ssr.js"}))}},generateBundle(i,d){if(s){c.length=0;for(const o in d){const a=d[o];a.type==="chunk"&&a.isEntry&&(c.push(o),a.name==="entry.ssr"?m=y.join(n,o):a.name==="@qwik-router-config"&&(h=y.join(n,o)))}}},closeBundle:{sequential:!0,async handler(){if(s&&n&&l?.api&&t?.api){const i=e.staticPaths||[],d=l.api.getRoutes(),o=l.api.getBasePathname(),a=t.api.getClientOutDir(),u=t.api.getClientPublicOutDir(),f=t.api.getAssetsDir(),S=t.api.getRootDir()??void 0;if(e.ssg!==null&&m&&h&&a&&u){let r=e.ssg?.origin??e.origin;r||(r="https://yoursite.qwik.dev"),r.length>0&&!/:\/\//.test(r)&&(r=`https://${r}`),r.startsWith("//")&&(r=`https:${r}`);try{r=new URL(r).origin}catch{this.warn(`Invalid "origin" option: "${r}". Using default origin: "https://yoursite.qwik.dev"`),r="https://yoursite.qwik.dev"}const v=await Promise.resolve().then(()=>require("./index-BqUeglYs.cjs")),D={maxWorkers:e.maxWorkers,basePathname:o,outDir:u,rootDir:S,...e.ssg,origin:r,renderModulePath:m,qwikRouterConfigModulePath:h},_=await v.generate(D);if(_.errors>0){const k=new Error(`Error while running SSG from "${e.name}" adapter. At least one path failed to render.`);k.stack=void 0,this.error(k)}i.push(..._.staticPaths)}await b(u,n,f?y.join(o,f):o,i,!!e.cleanStaticGenerated),typeof e.generate=="function"&&await e.generate({outputEntries:c,serverOutDir:n,clientOutDir:a,clientPublicOutDir:u,basePathname:o,routes:d,assetsDir:f,warn:r=>this.warn(r),error:r=>this.error(r)}),this.warn(`
2
- ==============================================
3
- Note: Make sure that you are serving the built files with proper cache headers.
4
- See https://qwik.dev/docs/deployments/#cache-headers for more information.
5
- ==============================================`),e.ssg!==null&&setTimeout(()=>{console.warn("SSG seems to be hanging after completion, forcing process to exit. Everything is likely fine."),process.exit(0)},5e3).unref(),e.ssg!==null&&setTimeout(()=>{process.exit(0)},5e3).unref()}}}}}function P(e){return E({name:"static-site-generation",origin:e.origin,ssg:{include:["/*"],...e}})}const j=P;exports.ssgAdapter=P;exports.staticAdapter=j;
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const adapters_shared_vite = require("../../shared/vite/index.cjs");
4
+ require("node:path");
5
+ require("node:fs");
6
+ require("../../../chunks/error-handler.cjs");
7
+ function ssgAdapter(opts) {
8
+ return adapters_shared_vite.viteAdapter({
9
+ name: "static-site-generation",
10
+ origin: opts.origin,
11
+ ssg: {
12
+ include: ["/*"],
13
+ ...opts
14
+ }
15
+ });
16
+ }
17
+ const staticAdapter = ssgAdapter;
18
+ exports.ssgAdapter = ssgAdapter;
19
+ exports.staticAdapter = staticAdapter;