@withl5e/l5e 1.0.1 → 1.1.0-alpha.1

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.
@@ -62,51 +62,79 @@ function E(e) {
62
62
  }
63
63
  };
64
64
  }
65
- async function D(e, t) {
66
- let n = e.map((e) => t.fileForScript(e)), r = t.inlineableRoots(n), i = new Map(n.flatMap((e, n) => !t.isPreserved(e) && !r.has(e) ? [[e, `entry-${n}`]] : [])), a = {
65
+ function D(e, t, n) {
66
+ return {
67
+ name: "compact-build-graph",
68
+ resolveId(r, i) {
69
+ if (!i || r === w) return null;
70
+ let a = u.isAbsolute(r) ? u.normalize(r) : r.startsWith("/") ? e.fileForAssetUrl(r) : r.startsWith(".") ? u.resolve(u.dirname(i), r) : null;
71
+ return a ? e.isShared(a) && t ? {
72
+ id: t,
73
+ external: "absolute"
74
+ } : e.isGlobalOwned(a) && n ? {
75
+ id: n,
76
+ external: "absolute"
77
+ } : { id: a } : null;
78
+ }
79
+ };
80
+ }
81
+ async function O(e, t, n = {}) {
82
+ let r = e.map((e) => t.fileForScript(e)), i = n.compact && t.compact, a = t.inlineableRoots(r), o = new Map(r.flatMap((e, n) => !t.isPreserved(e) && !a.has(e) ? [[e, `entry-${n}`]] : [])), s = (n.islands || []).map(({ key: e, script: n }) => ({
83
+ key: e,
84
+ file: t.fileForScript(n)
85
+ })), c = n.renderer ? t.fileForScript(n.renderer) : void 0, l = (n.exportScripts || []).map((e) => t.fileForScript(e)), d = {
67
86
  input: w,
68
- plugins: [T(n.map((e) => `import ${JSON.stringify(e)};`).join("\n")), E(t)],
87
+ plugins: [T([
88
+ ...r.map((e) => n.name === "shared" ? `export * from ${JSON.stringify(e)};` : `import ${JSON.stringify(e)};`),
89
+ ...l.map((e) => `export * from ${JSON.stringify(e)};`),
90
+ ...s.length ? [
91
+ "globalThis.__L5E_ISLANDS__ ||= {};",
92
+ ...s.map(({ key: e, file: t }) => `globalThis.__L5E_ISLANDS__[${JSON.stringify(e)}] = async () => { const [renderer, module] = await Promise.all([import(${JSON.stringify(c)}), import(${JSON.stringify(t)})]); return { reactDomClient: renderer.reactDomClient, createElement: renderer.createElement, module }; };`),
93
+ "globalThis.__L5E_BOOT_ISLANDS__?.();"
94
+ ] : []
95
+ ].join("\n")), i ? D(t, n.sharedUrl, n.globalUrl) : E(t)],
69
96
  platform: "neutral",
70
97
  tsconfig: !1,
71
98
  treeshake: { moduleSideEffects: () => !0 },
72
99
  external: (e) => !e.startsWith(".") && !u.isAbsolute(e) && e !== w
73
- }, o = {
100
+ }, f = {
74
101
  format: "es",
75
- codeSplitting: { groups: [{ name: (e) => i.get(e) ?? null }] },
102
+ codeSplitting: !i && { groups: [{ name: (e) => o.get(e) ?? null }] },
76
103
  minify: !1,
77
- entryFileNames: "bundle-[hash].js",
78
- chunkFileNames: `bundle-${C(JSON.stringify(n))}-[hash].js`
79
- }, { rolldown: s } = await v(), c = await s(a), l;
104
+ entryFileNames: `${n.name || "bundle"}-[hash].js`,
105
+ strictExecutionOrder: i,
106
+ chunkFileNames: `bundle-${C(JSON.stringify(r))}-[hash].js`
107
+ }, { rolldown: p } = await v(), m = await p(d), h;
80
108
  try {
81
- ({output: l} = await c.generate(o));
109
+ ({output: h} = await m.generate(f));
82
110
  } finally {
83
- await c.close();
111
+ await m.close();
84
112
  }
85
- for (let e of l) e.type === "chunk" && b.set(e.fileName, {
113
+ for (let e of h) e.type === "chunk" && b.set(e.fileName, {
86
114
  content: e.code || "",
87
115
  hash: C(e.code || ""),
88
116
  filename: e.fileName,
89
117
  mimeType: "application/javascript"
90
118
  });
91
- let d = l.find((e) => e.type === "chunk" && e.isEntry && e.facadeModuleId === w);
92
- if (!d) throw Error("[bundler] rolldown produced no entry chunk");
119
+ let g = h.find((e) => e.type === "chunk" && e.isEntry && e.facadeModuleId === w);
120
+ if (!g) throw Error("[bundler] rolldown produced no entry chunk");
93
121
  return {
94
- hash: C(d.code || ""),
95
- filename: d.fileName,
96
- content: d.code || ""
122
+ hash: C(g.code || ""),
123
+ filename: g.fileName,
124
+ content: g.code || ""
97
125
  };
98
126
  }
99
- async function O(e, t, n) {
127
+ async function k(e, t, n, r = {}) {
100
128
  if (e.length === 0) return y;
101
129
  if (!n || n.directory !== u.resolve(t)) return console.warn("[bundler] No matching build manifest; serving original script entries."), y;
102
- let r = [...new Set(e)].sort(), i = `scripts:${n.cacheKey}:${JSON.stringify(r)}`;
130
+ let i = [...new Set(e)], a = `scripts:${n.cacheKey}:${JSON.stringify([i, r])}`;
103
131
  try {
104
- return await S(i, () => D(r, n));
132
+ return await S(a, () => O(i, n, r));
105
133
  } catch (e) {
106
134
  return console.error("[bundler] Error bundling scripts:", e), y;
107
135
  }
108
136
  }
109
- async function k(e, t) {
137
+ async function A(e, t) {
110
138
  let n = [];
111
139
  for (let r of e) {
112
140
  let e = r.startsWith("/") ? u.join(t, r.substring(1)) : u.join(t, r);
@@ -129,95 +157,113 @@ async function k(e, t) {
129
157
  content: r
130
158
  };
131
159
  }
132
- async function A(e, t) {
160
+ async function j(e, t) {
133
161
  if (e.length === 0) return y;
134
162
  let n = [...new Set(e)].sort(), r = `css:${JSON.stringify([u.resolve(t), n])}`;
135
163
  try {
136
- return await S(r, () => k(n, t));
164
+ return await S(r, () => A(n, t));
137
165
  } catch (e) {
138
166
  return console.error("[bundler] Error bundling CSS:", e), y;
139
167
  }
140
168
  }
141
- function j(e) {
169
+ function M(e) {
142
170
  return b.get(e);
143
171
  }
144
172
  //#endregion
145
173
  //#region src/core/script-bundle-policy.ts
146
- function M(e, t, n = "/") {
147
- let r = u.resolve(t), i = h(r), a = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Map(), l = Object.entries(e).filter(([, e]) => /\.[cm]?js$/.test(e.file));
148
- function d(e) {
149
- let t = u.resolve(i, e), n = u.relative(i, t);
174
+ function N(e, t, n = "/", r) {
175
+ let i = u.resolve(t), a = h(i), o = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set(), l = /* @__PURE__ */ new Map(), d = Object.entries(e).filter(([, e]) => /\.[cm]?js$/.test(e.file));
176
+ function f(e) {
177
+ let t = u.resolve(a, e), n = u.relative(a, t);
150
178
  if (!n || n === ".." || n.startsWith(`..${u.sep}`) || u.isAbsolute(n)) throw Error(`[bundler] Asset is outside the client output: ${e}`);
151
179
  return t;
152
180
  }
153
- for (let [e, t] of l) {
154
- let n = d(t.file);
155
- a.add(n), (!t.isEntry || t.isDynamicEntry || e === "src/client.global.ts" || /(?:^|\/)react\//.test(t.src || e)) && o.add(n);
181
+ let m = new Set((r?.chunks || []).filter((e) => r?.mode === "compact" && e.canonicalShared).map((e) => f(e.file))), g = new Set((r?.chunks || []).filter((e) => r?.mode === "compact" && e.canonicalGlobal).map((e) => f(e.file)));
182
+ for (let [e, t] of d) {
183
+ let n = f(t.file);
184
+ o.add(n), (!t.isEntry || t.isDynamicEntry || e === "src/client.global.ts" || /(?:^|\/)react\//.test(t.src || e)) && c.add(n);
156
185
  }
157
- for (let [, t] of l) {
186
+ for (let [, t] of d) {
158
187
  for (let n of [...t.imports || [], ...t.dynamicImports || []]) {
159
188
  let t = e[n];
160
- if (!t || !a.has(d(t.file))) throw Error(`[bundler] Missing JavaScript manifest dependency: ${n}`);
161
- o.add(d(t.file));
189
+ if (!t || !o.has(f(t.file))) throw Error(`[bundler] Missing JavaScript manifest dependency: ${n}`);
190
+ c.add(f(t.file));
162
191
  }
163
- c.set(d(t.file), (t.imports || []).map((t) => d(e[t].file)));
192
+ l.set(f(t.file), (t.imports || []).map((t) => f(e[t].file)));
164
193
  }
165
194
  return {
166
195
  cacheKey: p("sha256").update(JSON.stringify([
167
- r,
168
196
  i,
197
+ a,
169
198
  n,
170
199
  e
171
200
  ])).digest("hex"),
172
- directory: r,
201
+ compact: r?.mode === "compact",
202
+ directory: i,
173
203
  fileForScript(e) {
174
- let t = d(e.replace(/^\/+/, ""));
175
- if (!a.has(t)) throw Error(`[bundler] Script is missing from manifest: ${e}`);
176
- return t;
204
+ let t = n === "/" ? "/" : `/${n.replace(/^\/+|\/+$/g, "")}/`, r = f(e.startsWith(t) ? e.slice(t.length) : e.replace(/^\/+/, ""));
205
+ if (!o.has(r)) throw Error(`[bundler] Script is missing from manifest: ${e}`);
206
+ return r;
207
+ },
208
+ fileForAssetUrl(e) {
209
+ let t = n === "/" ? "/" : `/${n.replace(/^\/+|\/+$/g, "")}/`, r = f(e.startsWith(t) ? e.slice(t.length) : e.replace(/^\/+/, ""));
210
+ return o.has(r) ? r : void 0;
177
211
  },
178
212
  isPreserved(e) {
179
- return o.has(e);
213
+ return c.has(e);
214
+ },
215
+ isShared(e) {
216
+ return m.has(e);
217
+ },
218
+ isGlobalOwned(e) {
219
+ return g.has(e);
220
+ },
221
+ sharedScripts() {
222
+ return [...m].map((e) => s(n, u.relative(a, e).replace(/\\/g, "/")));
223
+ },
224
+ globalOwnedScripts() {
225
+ return [...g].map((e) => s(n, u.relative(a, e).replace(/\\/g, "/")));
180
226
  },
181
227
  inlineableRoots(e) {
182
228
  let t = /* @__PURE__ */ new Set(), n = 0;
183
229
  function r(e, i) {
184
230
  if (!t.has(e)) {
185
231
  t.add(e);
186
- for (let t of c.get(e) || []) r(t, i);
187
- o.has(e) && (n = i);
232
+ for (let t of l.get(e) || []) r(t, i);
233
+ c.has(e) && (n = i);
188
234
  }
189
235
  }
190
236
  return e.forEach((e, t) => {
191
- r(e, t), o.has(e) && (n = t + 1);
192
- }), new Set(e.slice(n).filter((e) => !o.has(e)));
237
+ r(e, t), c.has(e) && (n = t + 1);
238
+ }), new Set(e.slice(n).filter((e) => !c.has(e)));
193
239
  },
194
240
  assetUrl(e) {
195
- if (!a.has(e)) throw Error(`[bundler] Import is missing from manifest: ${e}`);
196
- return s(n, u.relative(i, e).replace(/\\/g, "/"));
241
+ if (!o.has(e)) throw Error(`[bundler] Import is missing from manifest: ${e}`);
242
+ return s(n, u.relative(a, e).replace(/\\/g, "/"));
197
243
  }
198
244
  };
199
245
  }
200
246
  //#endregion
201
247
  //#region src/core/server.ts
202
- function N(e, t) {
248
+ function P(e, t) {
203
249
  let r = n(t);
204
250
  return e.replace(/<html\b([^>]*)>/i, (e, t) => /\blang\s*=/i.test(t) ? e.replace(/lang\s*=\s*"[^"]*"/i, () => `lang="${r}"`) : `<html lang="${r}"${t}>`);
205
251
  }
206
- function P(e) {
252
+ function F(e) {
207
253
  return new URL(`${e.protocol}://${e.get("host")}${e.originalUrl}`);
208
254
  }
209
- function F(e, t) {
255
+ function I(e, t) {
210
256
  return `${e.pathname}${e.search}`.replace(t, "") || "/";
211
257
  }
212
- function I(e) {
258
+ function L(e) {
213
259
  let t = {
214
260
  method: e.method,
215
261
  headers: i(e)
216
262
  };
217
- return e.method !== "GET" && e.method !== "HEAD" && (t.body = e, t.duplex = "half"), new globalThis.Request(P(e).href, t);
263
+ return e.method !== "GET" && e.method !== "HEAD" && (t.body = e, t.duplex = "half"), new globalThis.Request(F(e).href, t);
218
264
  }
219
- function L(e, t, n, i) {
220
- let a = new URL(t.url), o = F(a, n), s = o.startsWith("/") ? o : `/${o}`, c = {};
265
+ function R(e, t, n, i) {
266
+ let a = new URL(t.url), o = I(a, n), s = o.startsWith("/") ? o : `/${o}`, c = {};
221
267
  return t.headers.forEach((e, t) => {
222
268
  c[t] = e;
223
269
  }), {
@@ -232,12 +278,12 @@ function L(e, t, n, i) {
232
278
  locals: i
233
279
  };
234
280
  }
235
- function R(e, t, n) {
281
+ function z(e, t, n) {
236
282
  return e ? e instanceof globalThis.Request ? e : e instanceof URL ? new globalThis.Request(e.href, t.clone()) : new globalThis.Request(new URL(e, n).href, t.clone()) : t;
237
283
  }
238
- async function z(e, t, n) {
284
+ async function B(e, t, n) {
239
285
  t.status(n.status);
240
- let r = B(n.headers);
286
+ let r = V(n.headers);
241
287
  if (n.headers.forEach((e, n) => {
242
288
  n.toLowerCase() !== "set-cookie" && t.setHeader(n, e);
243
289
  }), r.length > 0 && t.setHeader("Set-Cookie", r), e.method === "HEAD") {
@@ -247,15 +293,15 @@ async function z(e, t, n) {
247
293
  let i = Buffer.from(await n.arrayBuffer());
248
294
  t.send(i);
249
295
  }
250
- function B(e) {
296
+ function V(e) {
251
297
  let t = e.getSetCookie;
252
298
  if (typeof t == "function") return t.call(e);
253
299
  let n = e.raw?.();
254
300
  if (n?.["set-cookie"]) return n["set-cookie"];
255
301
  let r = e.get("set-cookie");
256
- return r ? V(r) : [];
302
+ return r ? H(r) : [];
257
303
  }
258
- function V(e) {
304
+ function H(e) {
259
305
  let t = [], n = 0;
260
306
  for (let r = 0; r < e.length; r++) {
261
307
  if (e[r] !== ",") continue;
@@ -264,7 +310,7 @@ function V(e) {
264
310
  }
265
311
  return t.push(e.slice(n).trim()), t.filter(Boolean);
266
312
  }
267
- function H(e) {
313
+ function U(e) {
268
314
  if (!e.rawResponse) return null;
269
315
  let { body: t, contentType: n, statusCode: r, headers: i } = e.rawResponse, a = new Headers(i);
270
316
  return a.set("Content-Type", n), new globalThis.Response(t, {
@@ -272,8 +318,8 @@ function H(e) {
272
318
  headers: a
273
319
  });
274
320
  }
275
- async function U({ rendered: e, template: t, manifest: r, root: i, distClientDir: a, isProduction: l, assetBase: d, scriptPolicy: f }) {
276
- let p = H(e);
321
+ async function W({ rendered: e, template: t, manifest: r, root: i, distClientDir: a, isProduction: l, assetBase: d, scriptPolicy: f }) {
322
+ let p = U(e);
277
323
  if (p) return p;
278
324
  if (e.redirect) return new globalThis.Response(null, {
279
325
  status: e.redirect.statusCode,
@@ -288,42 +334,89 @@ async function U({ rendered: e, template: t, manifest: r, root: i, distClientDir
288
334
  base: d
289
335
  });
290
336
  D && w(D, l);
291
- let k = "";
292
- if (e.islandData && e.islandData.length > 0 && (k = `<script type="application/json" id="_l5e_data_">${(0, g.default)(e.islandData, { isJSON: !0 })}<\/script>`), l && r) {
293
- m = m.filter((e) => e.replace(/^\//, "") !== "src/client.global.ts"), h = h.filter((e) => !e.includes(".global."));
294
- let e = /* @__PURE__ */ new Set(), t = /* @__PURE__ */ new Set();
295
- function n(n) {
296
- let i = r[n];
297
- return i ? (i.css && i.css.forEach((t) => e.add(t)), i.imports && i.imports.forEach((n) => {
298
- let i = r[n];
299
- i?.file && t.add(i.file), i?.css && i.css.forEach((t) => e.add(t)), i?.imports && i.imports.forEach((n) => {
300
- let i = r[n];
301
- i?.file && t.add(i.file), i?.css && i.css.forEach((t) => e.add(t));
337
+ let O = "";
338
+ if (e.islandData && e.islandData.length > 0 && (O = `<script type="application/json" id="_l5e_data_">${(0, g.default)(e.islandData, { isJSON: !0 })}<\/script>`), l && r) {
339
+ let e, t;
340
+ if (f?.compact) {
341
+ let n = f.sharedScripts();
342
+ if (n.length > 1) throw Error("[l5e chunking] Compact build has more than one canonical shared root.");
343
+ if (n.length === 1) {
344
+ let t = await k(n, a, f, {
345
+ compact: !0,
346
+ name: "shared"
302
347
  });
303
- }), { file: i.file }) : { file: null };
348
+ if (!t.filename) throw Error("[l5e chunking] Compact shared bundle failed.");
349
+ e = s(d, t.filename);
350
+ }
351
+ let i = r["src/client.global.ts"];
352
+ if (i?.file) {
353
+ let n = await k([`/${i.file}`], a, f, {
354
+ compact: !0,
355
+ name: "global",
356
+ sharedUrl: e,
357
+ exportScripts: f.globalOwnedScripts()
358
+ });
359
+ if (!n.filename) throw Error("[l5e chunking] Compact global bundle failed.");
360
+ t = s(d, n.filename), T.push(t);
361
+ }
362
+ }
363
+ m = m.filter((e) => e.replace(/^\//, "") !== "src/client.global.ts"), h = h.filter((e) => !e.includes(".global."));
364
+ let i = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set();
365
+ function l(e) {
366
+ let t = r[e];
367
+ if (!t) return { file: null };
368
+ if (!c.has(e)) {
369
+ c.add(e);
370
+ for (let e of t.css || []) i.add(e);
371
+ for (let e of t.imports || []) {
372
+ let t = l(e);
373
+ t.file && o.add(t.file);
374
+ }
375
+ }
376
+ return { file: t.file };
304
377
  }
305
- let i = [];
378
+ let u = [];
306
379
  for (let e of m) {
307
- let { file: t } = n(e.replace(/^\//, ""));
308
- t && i.push(`/${t}`);
380
+ let { file: t } = l(e.replace(/^\//, ""));
381
+ t && u.push(`/${t}`);
309
382
  }
310
- let o = [];
311
- for (let t of h) {
312
- let { file: r } = n(t.replace(/^\//, ""));
313
- r && (o.push(`/${r}`), e.add(r));
383
+ let p = [];
384
+ for (let e of h) {
385
+ let { file: t } = l(e.replace(/^\//, ""));
386
+ t && (p.push(`/${t}`), i.add(t));
314
387
  }
315
- if (i.length > 0) {
316
- let e = await O(i, a, f);
317
- m = e.filename ? [s(d, e.filename)] : i.map((e) => s(d, e));
388
+ if (u.length > 0 || f?.compact && _.length > 0) {
389
+ let n = f?.compact ? _.flatMap((e) => {
390
+ let t = r[e.src];
391
+ return t?.file ? [{
392
+ key: e.key,
393
+ script: `/${t.file}`
394
+ }] : [];
395
+ }) : [], i = f?.compact ? Object.entries(r).find(([e]) => e.includes("l5e-compact-renderer"))?.[1]?.file : void 0;
396
+ if (f?.compact && n.length > 0 && !i) throw Error("[l5e chunking] Compact renderer entry is missing from the manifest.");
397
+ let o = await k(u, a, f, {
398
+ compact: f?.compact,
399
+ islands: n,
400
+ name: "bundle",
401
+ sharedUrl: e,
402
+ renderer: i ? `/${i}` : void 0,
403
+ globalUrl: t
404
+ });
405
+ m = o.filename ? [s(d, o.filename)] : u.map((e) => s(d, e));
318
406
  }
319
- if (o.length > 0) {
320
- let e = await A(o, a);
407
+ if (i.size > 0) {
408
+ let e = await j([...i].map((e) => `/${e}`), a);
321
409
  e.filename && (h = [s(d, e.filename)]);
322
410
  }
323
- let c = r["src/client.global.ts"];
324
- if (c && (c.css && c.css.length > 0 && c.css.forEach((e) => {
411
+ i.clear();
412
+ let v = r["src/client.global.ts"];
413
+ l("src/client.global.ts");
414
+ for (let e of i) w(s(d, e), !0);
415
+ v && (v.css && v.css.length > 0 && v.css.forEach((e) => {
325
416
  w(s(d, e), !0);
326
- }), c.file && T.push(s(d, c.file))), _.length > 0) {
417
+ }), v.file && (f?.compact || T.push(s(d, v.file))));
418
+ for (let e of f?.compact ? [] : o) S += `<link rel="modulepreload" crossorigin href="${n(s(d, e))}">`;
419
+ if (_.length > 0 && !f?.compact) {
327
420
  let e = {};
328
421
  for (let t of _) {
329
422
  let n = r[t.src];
@@ -334,22 +427,22 @@ async function U({ rendered: e, template: t, manifest: r, root: i, distClientDir
334
427
  h.length > 0 && h.forEach((e) => w(e, !0));
335
428
  }
336
429
  l || [...new Set(h)].forEach((e) => w(e));
337
- let j = [...T, ...m];
430
+ let A = [...T, ...m];
338
431
  if (!l) {
339
432
  let e = u.join(i, "src", "client.global.ts");
340
- if (c(e) && (j = ["/src/client.global.ts", ...j]), j = [...new Set(j)], _.length > 0) {
433
+ if (c(e) && (A = ["/src/client.global.ts", ...A]), A = [...new Set(A)], _.length > 0) {
341
434
  let e = {};
342
435
  for (let t of _) e[t.key] = `/${t.src}`;
343
436
  E = `<script>window.__L5E_ISLANDS__=${(0, g.default)(e)}<\/script>`;
344
437
  }
345
438
  }
346
- let M = k + E + j.map((e) => `<script type="module" src="${e}"><\/script>`).join(""), P = e.lang ? N(t, e.lang) : t, F = e.rawHtml ? e.html || "" : P.replace("<!--app-head-->", () => (e.head ?? "") + S).replace("<!--app-html-->", () => e.html ?? "").replace("<!--app-scripts-->", () => M), I = new Headers({ "Content-Type": "text/html" }), L = [], R = [];
347
- return y !== void 0 && (L.push(`max-age=${y}`), R.push(`max-age=${y}`)), b !== void 0 && R.push(`s-maxage=${b}`), x !== void 0 && R.push(`stale-while-revalidate=${x}`), (L.length > 0 || R.length > 0) && l && (L.push("public"), L.push("must-revalidate"), R.push("public"), I.set("Cache-Control", L.join(", ")), I.set("CDN-Cache-Control", R.join(", "))), process.env.NODE_ENV === "production" && (v = J(v)), I.set("Cache-Tag", ["global", ...v].join(",")), new globalThis.Response(F, {
439
+ let M = O + E + A.map((e) => `<script type="module" src="${e}"><\/script>`).join(""), N = e.lang ? P(t, e.lang) : t, F = e.rawHtml ? e.html || "" : N.replace("<!--app-head-->", () => (e.head ?? "") + S).replace("<!--app-html-->", () => e.html ?? "").replace("<!--app-scripts-->", () => M), I = new Headers({ "Content-Type": "text/html" }), L = [], R = [];
440
+ return y !== void 0 && (L.push(`max-age=${y}`), R.push(`max-age=${y}`)), b !== void 0 && R.push(`s-maxage=${b}`), x !== void 0 && R.push(`stale-while-revalidate=${x}`), (L.length > 0 || R.length > 0) && l && (L.push("public"), L.push("must-revalidate"), R.push("public"), I.set("Cache-Control", L.join(", ")), I.set("CDN-Cache-Control", R.join(", "))), process.env.NODE_ENV === "production" && (v = Y(v)), I.set("Cache-Tag", ["global", ...v].join(",")), new globalThis.Response(F, {
348
441
  status: e.statusCode || 200,
349
442
  headers: I
350
443
  });
351
444
  }
352
- async function W(e = {}) {
445
+ async function G(e = {}) {
353
446
  let t = e.root || process.cwd(), n = e.base || "/", i = process.env.NODE_ENV === "production", o = e.externalizeIslandProps ?? !0, p = i ? await l.readFile(u.join(t, "./index.html"), "utf-8") : "", m = (await import("express")).default, h = e.app || m();
354
447
  if (e.publicDir) {
355
448
  let n = u.isAbsolute(e.publicDir) ? e.publicDir : u.join(t, e.publicDir);
@@ -357,15 +450,20 @@ async function W(e = {}) {
357
450
  }
358
451
  let g, _ = u.join(t, "./dist/client"), v = i ? JSON.parse(await l.readFile(u.join(_, ".vite/manifest.json"), "utf-8")) : void 0, y;
359
452
  if (v) try {
360
- y = M(v, _, n);
453
+ let e, t = u.join(_, ".vite/l5e-chunks.json");
454
+ c(t) && (e = JSON.parse(await l.readFile(t, "utf-8"))), y = N(v, _, n, e);
361
455
  } catch (e) {
362
456
  console.warn("[bundler] Invalid build manifest; serving original script entries.", e);
363
457
  }
364
458
  if (i) {
365
459
  let e = (await import("compression")).default, t = (await import("sirv")).default;
366
- h.use(e()), h.use(n, t(_, { extensions: [] })), h.get(s(n, "bundle-:hash.:ext"), async (e, t) => {
460
+ h.use(e()), h.use(n, t(_, { extensions: [] })), h.get([
461
+ s(n, "global-:hash.:ext"),
462
+ s(n, "bundle-:hash.:ext"),
463
+ s(n, "shared-:hash.:ext")
464
+ ], async (e, t) => {
367
465
  try {
368
- let { hash: n, ext: r } = e.params, i = j(`bundle-${n}.${r}`);
466
+ let { hash: n, ext: r } = e.params, i = M(`${u.basename(e.path).split("-", 1)[0]}-${n}.${r}`);
369
467
  if (!i) return t.status(404).send("Bundled file not found");
370
468
  t.set({
371
469
  "Content-Type": i.mimeType,
@@ -427,14 +525,14 @@ async function W(e = {}) {
427
525
  if (!m || !m.handler) return r.status(404).send("Action not found");
428
526
  let h = (m.method || "GET").toUpperCase();
429
527
  if (e.method.toUpperCase() !== h) return r.status(405).set("Allow", h).send("Method Not Allowed");
430
- let _ = u.join(t, "./dist/server/entry-server.js"), v = i ? await import(d(_).href) : await g.ssrLoadModule("@withl5e/l5e/entry-server"), { runInRenderContext: y } = await (i ? import(d(_).href) : g.ssrLoadModule("@withl5e/l5e/jsx-runtime")), { renderJsxToHtmlString: x } = await (i ? import(d(_).href) : g.ssrLoadModule("@withl5e/l5e")), S = {}, T = I(e), E = a({
528
+ let _ = u.join(t, "./dist/server/entry-server.js"), v = i ? await import(d(_).href) : await g.ssrLoadModule("@withl5e/l5e/entry-server"), { runInRenderContext: y } = await (i ? import(d(_).href) : g.ssrLoadModule("@withl5e/l5e/jsx-runtime")), { renderJsxToHtmlString: x } = await (i ? import(d(_).href) : g.ssrLoadModule("@withl5e/l5e")), S = {}, T = L(e), E = a({
431
529
  request: T,
432
530
  locals: S,
433
531
  clientAddress: f.getClientIp(e) ?? void 0
434
532
  }), D = await v.loadMiddleware?.();
435
- await z(e, r, await (typeof D == "function" ? D : (e, t) => t())(E, async (t) => {
533
+ await B(e, r, await (typeof D == "function" ? D : (e, t) => t())(E, async (t) => {
436
534
  let r = {
437
- ...L(e, R(t, E.request, E.url), n, S),
535
+ ...R(e, z(t, E.request, E.url), n, S),
438
536
  path: e.originalUrl,
439
537
  body: e.body
440
538
  }, i = await y(async () => {
@@ -458,14 +556,14 @@ async function W(e = {}) {
458
556
  let e = await g.ssrLoadModule("@withl5e/l5e/entry-server");
459
557
  h = e.render, b = e.loadMiddleware;
460
558
  }
461
- let S = await b?.(), C = typeof S == "function" ? S : (e, t) => t(), w = {}, T = I(e), E = a({
559
+ let S = await b?.(), C = typeof S == "function" ? S : (e, t) => t(), w = {}, T = L(e), E = a({
462
560
  request: T,
463
- requestInfo: L(e, T, n, w),
561
+ requestInfo: R(e, T, n, w),
464
562
  locals: w,
465
563
  clientAddress: f.getClientIp(e)
466
564
  }), D = async (r) => {
467
- let a = L(e, r, n, w), s = F(a.url, n);
468
- return U({
565
+ let a = R(e, r, n, w), s = I(a.url, n);
566
+ return W({
469
567
  rendered: await h(s, a, { externalizeIslandProps: o }),
470
568
  template: m,
471
569
  manifest: x,
@@ -476,10 +574,10 @@ async function W(e = {}) {
476
574
  scriptPolicy: y
477
575
  });
478
576
  }, O = async (t) => {
479
- let i = R(t, E.request, E.url);
480
- return E.request = i, E.url = new URL(i.url), E.cookies = r(i.headers.get("cookie") ?? void 0), E.requestInfo = L(e, i, n, w), D(i);
577
+ let i = z(t, E.request, E.url);
578
+ return E.request = i, E.url = new URL(i.url), E.cookies = r(i.headers.get("cookie") ?? void 0), E.requestInfo = R(e, i, n, w), D(i);
481
579
  };
482
- E.rewrite = (e) => O(e), await z(e, s, await C(E, O));
580
+ E.rewrite = (e) => O(e), await B(e, s, await C(E, O));
483
581
  } catch (e) {
484
582
  g?.ssrFixStacktrace?.(e), console.error(e.stack), s.status(500).end(i ? "Internal Server Error" : e.stack);
485
583
  }
@@ -488,10 +586,10 @@ async function W(e = {}) {
488
586
  vite: g
489
587
  };
490
588
  }
491
- async function G(e = {}) {
589
+ async function K(e = {}) {
492
590
  let t = e.port || 5173, n = (await import("express")).default, r = n();
493
591
  e.setupApp && (console.log("setupApp"), await e.setupApp(r));
494
- let { app: i } = await W({
592
+ let { app: i } = await G({
495
593
  ...e,
496
594
  app: r
497
595
  });
@@ -499,8 +597,8 @@ async function G(e = {}) {
499
597
  console.log(`Server started at http://localhost:${t}`);
500
598
  });
501
599
  }
502
- var K = 1e3;
503
- function q(e) {
600
+ var q = 1e3;
601
+ function J(e) {
504
602
  if (e === "global") return "global";
505
603
  let t = 0;
506
604
  for (let n = 0; n < e.length; n++) {
@@ -509,10 +607,10 @@ function q(e) {
509
607
  }
510
608
  return Math.abs(t).toString(36).substring(0, 8);
511
609
  }
512
- function J(e) {
513
- return (Array.isArray(e) ? e : [...e]).slice(0, K).map(q);
610
+ function Y(e) {
611
+ return (Array.isArray(e) ? e : [...e]).slice(0, q).map(J);
514
612
  }
515
613
  //#endregion
516
- export { G as a, J as i, W as n, q as r, N as t };
614
+ export { K as a, Y as i, G as n, J as r, P as t };
517
615
 
518
- //# sourceMappingURL=server-DXNRPyGJ.js.map
616
+ //# sourceMappingURL=server-BOdEiJoN.js.map