@withl5e/l5e 1.1.0-alpha.0 → 1.1.0-alpha.2

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,84 @@ 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, r = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Map()) {
66
+ return {
67
+ name: "compact-build-graph",
68
+ resolveId(a, o) {
69
+ if (!o || a === w) return null;
70
+ let s = u.isAbsolute(a) ? u.normalize(a) : a.startsWith("/") ? e.fileForAssetUrl(a) : a.startsWith(".") ? u.resolve(u.dirname(o), a) : null;
71
+ return s ? i.has(s) ? {
72
+ id: i.get(s),
73
+ external: "absolute"
74
+ } : e.isShared(s) && t ? {
75
+ id: t,
76
+ external: "absolute"
77
+ } : e.isGlobalOwned(s) && n ? {
78
+ id: n,
79
+ external: "absolute"
80
+ } : e.isLazy(s) && !r.has(s) ? {
81
+ id: e.assetUrl(s),
82
+ external: "absolute"
83
+ } : { id: s } : null;
84
+ }
85
+ };
86
+ }
87
+ async function O(e, t, n = {}) {
88
+ 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}`]] : []));
89
+ (n.islands || []).map(({ key: e, script: n }) => ({
90
+ key: e,
91
+ file: t.fileForScript(n)
92
+ })), n.renderer && t.fileForScript(n.renderer);
93
+ let s = (n.exportScripts || []).map((e) => t.fileForScript(e)), c = n.inlineStaticRootClosure ? t.staticClosure(r) : /* @__PURE__ */ new Set(), l = new Map(Object.entries(n.externalScripts || {}).map(([e, n]) => [t.fileForScript(e), n])), d = {
67
94
  input: w,
68
- plugins: [T(n.map((e) => `import ${JSON.stringify(e)};`).join("\n")), E(t)],
95
+ plugins: [T([...r.map((e) => n.name === "renderer" ? `export { createElement, reactDomClient } from ${JSON.stringify(e)};` : n.name === "island" ? `import * as __island from ${JSON.stringify(e)}; export * from ${JSON.stringify(e)}; export default __island.default;` : n.name === "shared" ? `export * from ${JSON.stringify(e)};` : `import ${JSON.stringify(e)};`), ...s.map((e) => `export * from ${JSON.stringify(e)};`)].join("\n")), i ? D(t, n.sharedUrl, n.globalUrl, c, l) : 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, {
86
- content: e.code || "",
87
- hash: C(e.code || ""),
88
- filename: e.fileName,
89
- mimeType: "application/javascript"
90
- });
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");
113
+ for (let e of h) {
114
+ if (e.type !== "chunk") continue;
115
+ let t = (e.code || "").replace(/^\/\/#(?:end)?region[^\r\n]*(?:\r?\n)?/gm, "");
116
+ b.set(e.fileName, {
117
+ content: t,
118
+ hash: C(t),
119
+ filename: e.fileName,
120
+ mimeType: "application/javascript"
121
+ });
122
+ }
123
+ let g = h.find((e) => e.type === "chunk" && e.isEntry && e.facadeModuleId === w);
124
+ if (!g) throw Error("[bundler] rolldown produced no entry chunk");
125
+ let _ = b.get(g.fileName);
93
126
  return {
94
- hash: C(d.code || ""),
95
- filename: d.fileName,
96
- content: d.code || ""
127
+ hash: _.hash,
128
+ filename: g.fileName,
129
+ content: _.content
97
130
  };
98
131
  }
99
- async function O(e, t, n) {
132
+ async function k(e, t, n, r = {}) {
100
133
  if (e.length === 0) return y;
101
134
  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)], i = `scripts:${n.cacheKey}:${JSON.stringify(r)}`;
135
+ let i = [...new Set(e)], a = `scripts:${n.cacheKey}:${JSON.stringify([i, r])}`;
103
136
  try {
104
- return await S(i, () => D(r, n));
137
+ return await S(a, () => O(i, n, r));
105
138
  } catch (e) {
106
139
  return console.error("[bundler] Error bundling scripts:", e), y;
107
140
  }
108
141
  }
109
- async function k(e, t) {
142
+ async function A(e, t) {
110
143
  let n = [];
111
144
  for (let r of e) {
112
145
  let e = r.startsWith("/") ? u.join(t, r.substring(1)) : u.join(t, r);
@@ -129,95 +162,145 @@ async function k(e, t) {
129
162
  content: r
130
163
  };
131
164
  }
132
- async function A(e, t) {
165
+ async function j(e, t) {
133
166
  if (e.length === 0) return y;
134
167
  let n = [...new Set(e)].sort(), r = `css:${JSON.stringify([u.resolve(t), n])}`;
135
168
  try {
136
- return await S(r, () => k(n, t));
169
+ return await S(r, () => A(n, t));
137
170
  } catch (e) {
138
171
  return console.error("[bundler] Error bundling CSS:", e), y;
139
172
  }
140
173
  }
141
- function j(e) {
174
+ function M(e) {
142
175
  return b.get(e);
143
176
  }
144
177
  //#endregion
145
178
  //#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);
179
+ function N(e, t, n = "/", r) {
180
+ let i = u.resolve(t), a = h(i), o = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set(), l = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Set(), f = Object.entries(e).filter(([, e]) => /\.[cm]?js$/.test(e.file));
181
+ function m(e) {
182
+ let t = u.resolve(a, e), n = u.relative(a, t);
150
183
  if (!n || n === ".." || n.startsWith(`..${u.sep}`) || u.isAbsolute(n)) throw Error(`[bundler] Asset is outside the client output: ${e}`);
151
184
  return t;
152
185
  }
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);
186
+ let g = new Set((r?.chunks || []).filter((e) => r?.mode === "compact" && e.canonicalShared).map((e) => m(e.file))), _ = new Set((r?.chunks || []).filter((e) => r?.mode === "compact" && e.canonicalGlobal).map((e) => m(e.file)));
187
+ for (let [e, t] of f) {
188
+ let n = m(t.file);
189
+ o.add(n), (!t.isEntry || t.isDynamicEntry || e === "src/client.global.ts" || /(?:^|\/)react\//.test(t.src || e)) && c.add(n);
156
190
  }
157
- for (let [, t] of l) {
191
+ for (let [, t] of f) {
158
192
  for (let n of [...t.imports || [], ...t.dynamicImports || []]) {
159
193
  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));
194
+ if (!t || !o.has(m(t.file))) throw Error(`[bundler] Missing JavaScript manifest dependency: ${n}`);
195
+ c.add(m(t.file));
162
196
  }
163
- c.set(d(t.file), (t.imports || []).map((t) => d(e[t].file)));
197
+ l.set(m(t.file), (t.imports || []).map((t) => m(e[t].file)));
164
198
  }
199
+ let v = /* @__PURE__ */ new Set(), y = (t) => {
200
+ let n = e[t];
201
+ if (!n || !/\.[cm]?js$/.test(n.file)) return;
202
+ let r = m(n.file);
203
+ if (!v.has(r)) {
204
+ v.add(r);
205
+ for (let e of n.imports || []) y(e);
206
+ }
207
+ };
208
+ for (let [e, t] of f) t.isEntry && !t.isDynamicEntry && y(e);
209
+ let b = (t) => {
210
+ let n = e[t];
211
+ if (!n || !/\.[cm]?js$/.test(n.file)) return;
212
+ let r = m(n.file);
213
+ if (!(d.has(r) || v.has(r))) {
214
+ d.add(r);
215
+ for (let e of n.imports || []) b(e);
216
+ }
217
+ };
218
+ for (let [, e] of f) for (let t of e.dynamicImports || []) b(t);
165
219
  return {
166
220
  cacheKey: p("sha256").update(JSON.stringify([
167
- r,
168
221
  i,
222
+ a,
169
223
  n,
170
224
  e
171
225
  ])).digest("hex"),
172
- directory: r,
226
+ compact: r?.mode === "compact",
227
+ directory: i,
173
228
  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;
229
+ let t = n === "/" ? "/" : `/${n.replace(/^\/+|\/+$/g, "")}/`, r = m(e.startsWith(t) ? e.slice(t.length) : e.replace(/^\/+/, ""));
230
+ if (!o.has(r)) throw Error(`[bundler] Script is missing from manifest: ${e}`);
231
+ return r;
232
+ },
233
+ fileForAssetUrl(e) {
234
+ let t = n === "/" ? "/" : `/${n.replace(/^\/+|\/+$/g, "")}/`, r = m(e.startsWith(t) ? e.slice(t.length) : e.replace(/^\/+/, ""));
235
+ return o.has(r) ? r : void 0;
177
236
  },
178
237
  isPreserved(e) {
179
- return o.has(e);
238
+ return c.has(e);
239
+ },
240
+ isShared(e) {
241
+ return g.has(e);
242
+ },
243
+ isGlobalOwned(e) {
244
+ return _.has(e);
245
+ },
246
+ isLazy(e) {
247
+ return d.has(e);
248
+ },
249
+ staticClosure(e) {
250
+ let t = /* @__PURE__ */ new Set(), n = (e) => {
251
+ if (!t.has(e)) {
252
+ t.add(e);
253
+ for (let t of l.get(e) || []) n(t);
254
+ }
255
+ };
256
+ return e.forEach(n), t;
257
+ },
258
+ sharedScripts() {
259
+ return [...g].map((e) => s(n, u.relative(a, e).replace(/\\/g, "/")));
260
+ },
261
+ globalOwnedScripts() {
262
+ return [..._].map((e) => s(n, u.relative(a, e).replace(/\\/g, "/")));
180
263
  },
181
264
  inlineableRoots(e) {
182
265
  let t = /* @__PURE__ */ new Set(), n = 0;
183
266
  function r(e, i) {
184
267
  if (!t.has(e)) {
185
268
  t.add(e);
186
- for (let t of c.get(e) || []) r(t, i);
187
- o.has(e) && (n = i);
269
+ for (let t of l.get(e) || []) r(t, i);
270
+ c.has(e) && (n = i);
188
271
  }
189
272
  }
190
273
  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)));
274
+ r(e, t), c.has(e) && (n = t + 1);
275
+ }), new Set(e.slice(n).filter((e) => !c.has(e)));
193
276
  },
194
277
  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, "/"));
278
+ if (!o.has(e)) throw Error(`[bundler] Import is missing from manifest: ${e}`);
279
+ return s(n, u.relative(a, e).replace(/\\/g, "/"));
197
280
  }
198
281
  };
199
282
  }
200
283
  //#endregion
201
284
  //#region src/core/server.ts
202
- function N(e, t) {
285
+ function P(e, t) {
203
286
  let r = n(t);
204
287
  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
288
  }
206
- function P(e) {
289
+ function F(e) {
207
290
  return new URL(`${e.protocol}://${e.get("host")}${e.originalUrl}`);
208
291
  }
209
- function F(e, t) {
292
+ function I(e, t) {
210
293
  return `${e.pathname}${e.search}`.replace(t, "") || "/";
211
294
  }
212
- function I(e) {
295
+ function L(e) {
213
296
  let t = {
214
297
  method: e.method,
215
298
  headers: i(e)
216
299
  };
217
- return e.method !== "GET" && e.method !== "HEAD" && (t.body = e, t.duplex = "half"), new globalThis.Request(P(e).href, t);
300
+ return e.method !== "GET" && e.method !== "HEAD" && (t.body = e, t.duplex = "half"), new globalThis.Request(F(e).href, t);
218
301
  }
219
- function L(e, t, n, i) {
220
- let a = new URL(t.url), o = F(a, n), s = o.startsWith("/") ? o : `/${o}`, c = {};
302
+ function R(e, t, n, i) {
303
+ let a = new URL(t.url), o = I(a, n), s = o.startsWith("/") ? o : `/${o}`, c = {};
221
304
  return t.headers.forEach((e, t) => {
222
305
  c[t] = e;
223
306
  }), {
@@ -232,12 +315,12 @@ function L(e, t, n, i) {
232
315
  locals: i
233
316
  };
234
317
  }
235
- function R(e, t, n) {
318
+ function z(e, t, n) {
236
319
  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
320
  }
238
- async function z(e, t, n) {
321
+ async function B(e, t, n) {
239
322
  t.status(n.status);
240
- let r = B(n.headers);
323
+ let r = V(n.headers);
241
324
  if (n.headers.forEach((e, n) => {
242
325
  n.toLowerCase() !== "set-cookie" && t.setHeader(n, e);
243
326
  }), r.length > 0 && t.setHeader("Set-Cookie", r), e.method === "HEAD") {
@@ -247,15 +330,15 @@ async function z(e, t, n) {
247
330
  let i = Buffer.from(await n.arrayBuffer());
248
331
  t.send(i);
249
332
  }
250
- function B(e) {
333
+ function V(e) {
251
334
  let t = e.getSetCookie;
252
335
  if (typeof t == "function") return t.call(e);
253
336
  let n = e.raw?.();
254
337
  if (n?.["set-cookie"]) return n["set-cookie"];
255
338
  let r = e.get("set-cookie");
256
- return r ? V(r) : [];
339
+ return r ? H(r) : [];
257
340
  }
258
- function V(e) {
341
+ function H(e) {
259
342
  let t = [], n = 0;
260
343
  for (let r = 0; r < e.length; r++) {
261
344
  if (e[r] !== ",") continue;
@@ -264,7 +347,7 @@ function V(e) {
264
347
  }
265
348
  return t.push(e.slice(n).trim()), t.filter(Boolean);
266
349
  }
267
- function H(e) {
350
+ function U(e) {
268
351
  if (!e.rawResponse) return null;
269
352
  let { body: t, contentType: n, statusCode: r, headers: i } = e.rawResponse, a = new Headers(i);
270
353
  return a.set("Content-Type", n), new globalThis.Response(t, {
@@ -272,8 +355,8 @@ function H(e) {
272
355
  headers: a
273
356
  });
274
357
  }
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);
358
+ async function W({ rendered: e, template: t, manifest: r, root: i, distClientDir: a, isProduction: l, assetBase: d, scriptPolicy: f }) {
359
+ let p = U(e);
277
360
  if (p) return p;
278
361
  if (e.redirect) return new globalThis.Response(null, {
279
362
  status: e.redirect.statusCode,
@@ -288,50 +371,144 @@ async function U({ rendered: e, template: t, manifest: r, root: i, distClientDir
288
371
  base: d
289
372
  });
290
373
  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) {
374
+ let O = "";
375
+ 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) {
376
+ let e, t;
377
+ if (f?.compact) {
378
+ let n = f.sharedScripts();
379
+ if (n.length > 1) throw Error("[l5e chunking] Compact build has more than one canonical shared root.");
380
+ if (n.length === 1) {
381
+ let t = await k(n, a, f, {
382
+ compact: !0,
383
+ name: "shared"
384
+ });
385
+ if (!t.filename) throw Error("[l5e chunking] Compact shared bundle failed.");
386
+ e = s(d, t.filename);
387
+ }
388
+ let i = r["src/client.global.ts"];
389
+ if (i?.file) {
390
+ let n = await k([`/${i.file}`], a, f, {
391
+ compact: !0,
392
+ name: "global",
393
+ sharedUrl: e,
394
+ exportScripts: f.globalOwnedScripts()
395
+ });
396
+ if (!n.filename) throw Error("[l5e chunking] Compact global bundle failed.");
397
+ t = s(d, n.filename), T.push(t);
398
+ }
399
+ let o = {};
400
+ if (e) for (let t of n) o[t] = e;
401
+ if (t) for (let e of f.globalOwnedScripts()) o[e] = t;
402
+ Object.keys(o).length > 0 && (S += `<script type="importmap">${(0, g.default)({ imports: o })}<\/script>`);
403
+ }
293
404
  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(), i = /* @__PURE__ */ new Set();
295
- function o(n) {
296
- let a = r[n];
297
- if (!a) return { file: null };
298
- if (!i.has(n)) {
299
- i.add(n);
300
- for (let t of a.css || []) e.add(t);
301
- for (let e of a.imports || []) {
302
- let n = o(e);
303
- n.file && t.add(n.file);
405
+ let i = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set();
406
+ function l(e) {
407
+ let t = r[e];
408
+ if (!t) return { file: null };
409
+ if (!c.has(e)) {
410
+ c.add(e);
411
+ for (let e of t.css || []) i.add(e);
412
+ for (let e of t.imports || []) {
413
+ let t = l(e);
414
+ t.file && o.add(t.file);
304
415
  }
305
416
  }
306
- return { file: a.file };
417
+ return { file: t.file };
418
+ }
419
+ function u(e, t = /* @__PURE__ */ new Set()) {
420
+ let n = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set(), o = (e) => {
421
+ if (a.has(e)) return;
422
+ a.add(e);
423
+ let c = r[e];
424
+ if (c) {
425
+ for (let e of c.css || []) i.add(s(d, e));
426
+ if (!t.has(e) && c.file && /\.[cm]?js$/.test(c.file)) {
427
+ let e = f.fileForScript(`/${c.file}`);
428
+ !f.isShared(e) && !f.isGlobalOwned(e) && n.add(s(d, c.file));
429
+ }
430
+ for (let e of c.imports || []) o(e);
431
+ }
432
+ };
433
+ return e.forEach(o), {
434
+ js: [...n],
435
+ css: [...i]
436
+ };
307
437
  }
308
- let c = [];
438
+ let p = [];
309
439
  for (let e of m) {
310
- let { file: t } = o(e.replace(/^\//, ""));
311
- t && c.push(`/${t}`);
440
+ let { file: t } = l(e.replace(/^\//, ""));
441
+ t && p.push(`/${t}`);
442
+ }
443
+ let v = [];
444
+ for (let e of h) {
445
+ let { file: t } = l(e.replace(/^\//, ""));
446
+ t && (v.push(`/${t}`), i.add(t));
312
447
  }
313
- let l = [];
314
- for (let t of h) {
315
- let { file: n } = o(t.replace(/^\//, ""));
316
- n && (l.push(`/${n}`), e.add(n));
448
+ if (p.length > 0) {
449
+ let n = await k(p, a, f, {
450
+ compact: f?.compact,
451
+ name: "bundle",
452
+ sharedUrl: e,
453
+ globalUrl: t
454
+ });
455
+ m = n.filename ? [s(d, n.filename)] : p.map((e) => s(d, e));
317
456
  }
318
- if (c.length > 0) {
319
- let e = await O(c, a, f);
320
- m = e.filename ? [s(d, e.filename)] : c.map((e) => s(d, e));
457
+ if (f?.compact && _.length > 0) {
458
+ let n = Object.entries(r).find(([e, t]) => t.isEntry && e.includes("l5e-compact-renderer"));
459
+ if (!n?.[1].file) throw Error("[l5e chunking] Compact renderer entry is missing from the manifest.");
460
+ let i = /* @__PURE__ */ new Set();
461
+ i.add(n[0]);
462
+ let o = (n[1].imports || []).filter((e) => r[e]?.file?.includes("compact-renderer"));
463
+ if (o.length !== 1) throw Error(`[l5e chunking] Compact renderer expected one canonical export chunk; found ${o.length}. Multiple chunks can have colliding emitted export aliases.`);
464
+ i.add(o[0]);
465
+ let c = await k([`/${n[1].file}`], a, f, {
466
+ compact: !0,
467
+ name: "renderer",
468
+ sharedUrl: e,
469
+ globalUrl: t,
470
+ inlineStaticRootClosure: !0,
471
+ exportScripts: [...i].filter((e) => e !== n[0]).map((e) => `/${r[e].file}`)
472
+ });
473
+ if (!c.filename) throw Error("[l5e chunking] Compact renderer bundle failed.");
474
+ let l = s(d, c.filename), p = Object.fromEntries([...i].filter((e) => r[e]?.file).map((e) => [`/${r[e].file}`, l])), m = Object.fromEntries([...i].filter((e) => r[e]?.file).map((e) => [s(d, r[e].file), l]));
475
+ Object.keys(m).length > 0 && (S += `<script type="importmap">${(0, g.default)({ imports: m })}<\/script>`);
476
+ let h = {};
477
+ for (let n of _) {
478
+ let o = r[n.src];
479
+ if (!o?.file) continue;
480
+ let c = await k([`/${o.file}`], a, f, {
481
+ compact: !0,
482
+ name: "island",
483
+ sharedUrl: e,
484
+ globalUrl: t,
485
+ inlineStaticRootClosure: !0,
486
+ externalScripts: p
487
+ });
488
+ if (!c.filename) throw Error(`[l5e chunking] Compact island bundle failed: ${n.src}`);
489
+ let m = s(d, c.filename), g = u([n.src], i);
490
+ h[n.key] = {
491
+ module: m,
492
+ renderer: l,
493
+ js: [l, m],
494
+ css: g.css
495
+ };
496
+ }
497
+ E = `<script>Object.assign(window.__L5E_ISLANDS__||={},${(0, g.default)(h)});window.__L5E_BOOT_ISLANDS__?.()<\/script>`;
321
498
  }
322
- if (e.size > 0) {
323
- let t = await A([...e].map((e) => `/${e}`), a);
324
- t.filename && (h = [s(d, t.filename)]);
499
+ if (i.size > 0) {
500
+ let e = await j([...i].map((e) => `/${e}`), a);
501
+ e.filename && (h = [s(d, e.filename)]);
325
502
  }
326
- e.clear();
327
- let u = r["src/client.global.ts"];
328
- o("src/client.global.ts");
329
- for (let t of e) w(s(d, t), !0);
330
- u && (u.css && u.css.length > 0 && u.css.forEach((e) => {
503
+ i.clear();
504
+ let y = r["src/client.global.ts"];
505
+ l("src/client.global.ts");
506
+ for (let e of i) w(s(d, e), !0);
507
+ y && (y.css && y.css.length > 0 && y.css.forEach((e) => {
331
508
  w(s(d, e), !0);
332
- }), u.file && T.push(s(d, u.file)));
333
- for (let e of t) S += `<link rel="modulepreload" crossorigin href="${n(s(d, e))}">`;
334
- if (_.length > 0) {
509
+ }), y.file && (f?.compact || T.push(s(d, y.file))));
510
+ for (let e of f?.compact ? [] : o) S += `<link rel="modulepreload" crossorigin href="${n(s(d, e))}">`;
511
+ if (_.length > 0 && !f?.compact) {
335
512
  let e = {};
336
513
  for (let t of _) {
337
514
  let n = r[t.src];
@@ -342,22 +519,22 @@ async function U({ rendered: e, template: t, manifest: r, root: i, distClientDir
342
519
  h.length > 0 && h.forEach((e) => w(e, !0));
343
520
  }
344
521
  l || [...new Set(h)].forEach((e) => w(e));
345
- let j = [...T, ...m];
522
+ let A = [...T, ...m];
346
523
  if (!l) {
347
524
  let e = u.join(i, "src", "client.global.ts");
348
- if (c(e) && (j = ["/src/client.global.ts", ...j]), j = [...new Set(j)], _.length > 0) {
525
+ if (c(e) && (A = ["/src/client.global.ts", ...A]), A = [...new Set(A)], _.length > 0) {
349
526
  let e = {};
350
527
  for (let t of _) e[t.key] = `/${t.src}`;
351
528
  E = `<script>window.__L5E_ISLANDS__=${(0, g.default)(e)}<\/script>`;
352
529
  }
353
530
  }
354
- 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 = [];
355
- 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, {
531
+ 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 = [];
532
+ 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, {
356
533
  status: e.statusCode || 200,
357
534
  headers: I
358
535
  });
359
536
  }
360
- async function W(e = {}) {
537
+ async function G(e = {}) {
361
538
  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();
362
539
  if (e.publicDir) {
363
540
  let n = u.isAbsolute(e.publicDir) ? e.publicDir : u.join(t, e.publicDir);
@@ -365,15 +542,22 @@ async function W(e = {}) {
365
542
  }
366
543
  let g, _ = u.join(t, "./dist/client"), v = i ? JSON.parse(await l.readFile(u.join(_, ".vite/manifest.json"), "utf-8")) : void 0, y;
367
544
  if (v) try {
368
- y = M(v, _, n);
545
+ let e, t = u.join(_, ".vite/l5e-chunks.json");
546
+ c(t) && (e = JSON.parse(await l.readFile(t, "utf-8"))), y = N(v, _, n, e);
369
547
  } catch (e) {
370
548
  console.warn("[bundler] Invalid build manifest; serving original script entries.", e);
371
549
  }
372
550
  if (i) {
373
551
  let e = (await import("compression")).default, t = (await import("sirv")).default;
374
- h.use(e()), h.use(n, t(_, { extensions: [] })), h.get(s(n, "bundle-:hash.:ext"), async (e, t) => {
552
+ h.use(e()), h.use(n, t(_, { extensions: [] })), h.get([
553
+ s(n, "global-:hash.:ext"),
554
+ s(n, "bundle-:hash.:ext"),
555
+ s(n, "shared-:hash.:ext"),
556
+ s(n, "renderer-:hash.:ext"),
557
+ s(n, "island-:hash.:ext")
558
+ ], async (e, t) => {
375
559
  try {
376
- let { hash: n, ext: r } = e.params, i = j(`bundle-${n}.${r}`);
560
+ let { hash: n, ext: r } = e.params, i = M(`${u.basename(e.path).split("-", 1)[0]}-${n}.${r}`);
377
561
  if (!i) return t.status(404).send("Bundled file not found");
378
562
  t.set({
379
563
  "Content-Type": i.mimeType,
@@ -435,14 +619,14 @@ async function W(e = {}) {
435
619
  if (!m || !m.handler) return r.status(404).send("Action not found");
436
620
  let h = (m.method || "GET").toUpperCase();
437
621
  if (e.method.toUpperCase() !== h) return r.status(405).set("Allow", h).send("Method Not Allowed");
438
- 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({
622
+ 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({
439
623
  request: T,
440
624
  locals: S,
441
625
  clientAddress: f.getClientIp(e) ?? void 0
442
626
  }), D = await v.loadMiddleware?.();
443
- await z(e, r, await (typeof D == "function" ? D : (e, t) => t())(E, async (t) => {
627
+ await B(e, r, await (typeof D == "function" ? D : (e, t) => t())(E, async (t) => {
444
628
  let r = {
445
- ...L(e, R(t, E.request, E.url), n, S),
629
+ ...R(e, z(t, E.request, E.url), n, S),
446
630
  path: e.originalUrl,
447
631
  body: e.body
448
632
  }, i = await y(async () => {
@@ -466,14 +650,14 @@ async function W(e = {}) {
466
650
  let e = await g.ssrLoadModule("@withl5e/l5e/entry-server");
467
651
  h = e.render, b = e.loadMiddleware;
468
652
  }
469
- let S = await b?.(), C = typeof S == "function" ? S : (e, t) => t(), w = {}, T = I(e), E = a({
653
+ let S = await b?.(), C = typeof S == "function" ? S : (e, t) => t(), w = {}, T = L(e), E = a({
470
654
  request: T,
471
- requestInfo: L(e, T, n, w),
655
+ requestInfo: R(e, T, n, w),
472
656
  locals: w,
473
657
  clientAddress: f.getClientIp(e)
474
658
  }), D = async (r) => {
475
- let a = L(e, r, n, w), s = F(a.url, n);
476
- return U({
659
+ let a = R(e, r, n, w), s = I(a.url, n);
660
+ return W({
477
661
  rendered: await h(s, a, { externalizeIslandProps: o }),
478
662
  template: m,
479
663
  manifest: x,
@@ -484,10 +668,10 @@ async function W(e = {}) {
484
668
  scriptPolicy: y
485
669
  });
486
670
  }, O = async (t) => {
487
- let i = R(t, E.request, E.url);
488
- 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);
671
+ let i = z(t, E.request, E.url);
672
+ 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);
489
673
  };
490
- E.rewrite = (e) => O(e), await z(e, s, await C(E, O));
674
+ E.rewrite = (e) => O(e), await B(e, s, await C(E, O));
491
675
  } catch (e) {
492
676
  g?.ssrFixStacktrace?.(e), console.error(e.stack), s.status(500).end(i ? "Internal Server Error" : e.stack);
493
677
  }
@@ -496,10 +680,10 @@ async function W(e = {}) {
496
680
  vite: g
497
681
  };
498
682
  }
499
- async function G(e = {}) {
683
+ async function K(e = {}) {
500
684
  let t = e.port || 5173, n = (await import("express")).default, r = n();
501
685
  e.setupApp && (console.log("setupApp"), await e.setupApp(r));
502
- let { app: i } = await W({
686
+ let { app: i } = await G({
503
687
  ...e,
504
688
  app: r
505
689
  });
@@ -507,8 +691,8 @@ async function G(e = {}) {
507
691
  console.log(`Server started at http://localhost:${t}`);
508
692
  });
509
693
  }
510
- var K = 1e3;
511
- function q(e) {
694
+ var q = 1e3;
695
+ function J(e) {
512
696
  if (e === "global") return "global";
513
697
  let t = 0;
514
698
  for (let n = 0; n < e.length; n++) {
@@ -517,10 +701,10 @@ function q(e) {
517
701
  }
518
702
  return Math.abs(t).toString(36).substring(0, 8);
519
703
  }
520
- function J(e) {
521
- return (Array.isArray(e) ? e : [...e]).slice(0, K).map(q);
704
+ function Y(e) {
705
+ return (Array.isArray(e) ? e : [...e]).slice(0, q).map(J);
522
706
  }
523
707
  //#endregion
524
- export { G as a, J as i, W as n, q as r, N as t };
708
+ export { K as a, Y as i, G as n, J as r, P as t };
525
709
 
526
- //# sourceMappingURL=server-CvsOU9cg.js.map
710
+ //# sourceMappingURL=server-C35BtVu8.js.map