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