@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.
- package/README.md +29 -0
- package/dist/index.js +2 -2
- package/dist/island/compact-runtime.js +98 -0
- package/dist/island/compact-runtime.js.map +1 -0
- package/dist/island/runtime.js +7 -3
- package/dist/island/runtime.js.map +1 -1
- package/dist/{server-CvsOU9cg.js → server-C35BtVu8.js} +311 -127
- package/dist/server-C35BtVu8.js.map +1 -0
- package/dist/server.js +1 -1
- package/dist/{vite-plugin-D9qTnleZ.js → vite-plugin-BOuzxmb2.js} +184 -138
- package/dist/vite-plugin-BOuzxmb2.js.map +1 -0
- package/dist/vite-plugin.js +1 -1
- package/package.json +7 -1
- package/src/core/bundler.ts +93 -10
- package/src/core/chunking.ts +113 -6
- package/src/core/script-bundle-policy.ts +99 -2
- package/src/core/server.ts +190 -8
- package/src/core/vite-plugin.ts +35 -5
- package/src/island/compact-runtime.ts +158 -0
- package/src/island/runtime.ts +22 -8
- package/dist/server-CvsOU9cg.js.map +0 -1
- package/dist/vite-plugin-D9qTnleZ.js.map +0 -1
|
@@ -62,51 +62,84 @@ function E(e) {
|
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
|
-
|
|
66
|
-
|
|
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(
|
|
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
|
-
},
|
|
100
|
+
}, f = {
|
|
74
101
|
format: "es",
|
|
75
|
-
codeSplitting: { groups: [{ name: (e) =>
|
|
102
|
+
codeSplitting: !i && { groups: [{ name: (e) => o.get(e) ?? null }] },
|
|
76
103
|
minify: !1,
|
|
77
|
-
entryFileNames: "bundle-[hash].js
|
|
78
|
-
|
|
79
|
-
|
|
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:
|
|
109
|
+
({output: h} = await m.generate(f));
|
|
82
110
|
} finally {
|
|
83
|
-
await
|
|
111
|
+
await m.close();
|
|
84
112
|
}
|
|
85
|
-
for (let e of
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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:
|
|
95
|
-
filename:
|
|
96
|
-
content:
|
|
127
|
+
hash: _.hash,
|
|
128
|
+
filename: g.fileName,
|
|
129
|
+
content: _.content
|
|
97
130
|
};
|
|
98
131
|
}
|
|
99
|
-
async function
|
|
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
|
|
135
|
+
let i = [...new Set(e)], a = `scripts:${n.cacheKey}:${JSON.stringify([i, r])}`;
|
|
103
136
|
try {
|
|
104
|
-
return await S(
|
|
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
|
|
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
|
|
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, () =>
|
|
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
|
|
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
|
|
147
|
-
let
|
|
148
|
-
function
|
|
149
|
-
let t = u.resolve(
|
|
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
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
|
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 || !
|
|
161
|
-
|
|
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
|
-
|
|
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
|
-
|
|
226
|
+
compact: r?.mode === "compact",
|
|
227
|
+
directory: i,
|
|
173
228
|
fileForScript(e) {
|
|
174
|
-
let t =
|
|
175
|
-
if (!
|
|
176
|
-
return
|
|
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
|
|
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
|
|
187
|
-
|
|
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),
|
|
192
|
-
}), new Set(e.slice(n).filter((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 (!
|
|
196
|
-
return s(n, u.relative(
|
|
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
|
|
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
|
|
289
|
+
function F(e) {
|
|
207
290
|
return new URL(`${e.protocol}://${e.get("host")}${e.originalUrl}`);
|
|
208
291
|
}
|
|
209
|
-
function
|
|
292
|
+
function I(e, t) {
|
|
210
293
|
return `${e.pathname}${e.search}`.replace(t, "") || "/";
|
|
211
294
|
}
|
|
212
|
-
function
|
|
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(
|
|
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
|
|
220
|
-
let a = new URL(t.url), o =
|
|
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
|
|
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
|
|
321
|
+
async function B(e, t, n) {
|
|
239
322
|
t.status(n.status);
|
|
240
|
-
let r =
|
|
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
|
|
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 ?
|
|
339
|
+
return r ? H(r) : [];
|
|
257
340
|
}
|
|
258
|
-
function
|
|
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
|
|
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
|
|
276
|
-
let p =
|
|
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
|
|
292
|
-
if (e.islandData && e.islandData.length > 0 && (
|
|
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
|
|
295
|
-
function
|
|
296
|
-
let
|
|
297
|
-
if (!
|
|
298
|
-
if (!
|
|
299
|
-
|
|
300
|
-
for (let
|
|
301
|
-
for (let e of
|
|
302
|
-
let
|
|
303
|
-
|
|
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:
|
|
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
|
|
438
|
+
let p = [];
|
|
309
439
|
for (let e of m) {
|
|
310
|
-
let { file: t } =
|
|
311
|
-
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
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
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 (
|
|
319
|
-
let
|
|
320
|
-
|
|
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 (
|
|
323
|
-
let
|
|
324
|
-
|
|
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
|
-
|
|
327
|
-
let
|
|
328
|
-
|
|
329
|
-
for (let
|
|
330
|
-
|
|
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
|
-
}),
|
|
333
|
-
for (let e of
|
|
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
|
|
522
|
+
let A = [...T, ...m];
|
|
346
523
|
if (!l) {
|
|
347
524
|
let e = u.join(i, "src", "client.global.ts");
|
|
348
|
-
if (c(e) && (
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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(
|
|
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 =
|
|
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 =
|
|
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
|
|
627
|
+
await B(e, r, await (typeof D == "function" ? D : (e, t) => t())(E, async (t) => {
|
|
444
628
|
let r = {
|
|
445
|
-
...
|
|
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 =
|
|
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:
|
|
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 =
|
|
476
|
-
return
|
|
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 =
|
|
488
|
-
return E.request = i, E.url = new URL(i.url), E.cookies = r(i.headers.get("cookie") ?? void 0), E.requestInfo =
|
|
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
|
|
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
|
|
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
|
|
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
|
|
511
|
-
function
|
|
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
|
|
521
|
-
return (Array.isArray(e) ? e : [...e]).slice(0,
|
|
704
|
+
function Y(e) {
|
|
705
|
+
return (Array.isArray(e) ? e : [...e]).slice(0, q).map(J);
|
|
522
706
|
}
|
|
523
707
|
//#endregion
|
|
524
|
-
export {
|
|
708
|
+
export { K as a, Y as i, G as n, J as r, P as t };
|
|
525
709
|
|
|
526
|
-
//# sourceMappingURL=server-
|
|
710
|
+
//# sourceMappingURL=server-C35BtVu8.js.map
|