alabjs 0.2.5 → 0.3.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.
- package/dist/analytics/handler.d.ts +5 -1
- package/dist/analytics/handler.d.ts.map +1 -1
- package/dist/analytics/handler.js +14 -10
- package/dist/analytics/handler.js.map +1 -1
- package/dist/cli.js +7 -2
- package/dist/cli.js.map +1 -1
- package/dist/client/federation.d.ts +41 -0
- package/dist/client/federation.d.ts.map +1 -0
- package/dist/client/federation.js +48 -0
- package/dist/client/federation.js.map +1 -0
- package/dist/client/hooks.d.ts +9 -1
- package/dist/client/hooks.d.ts.map +1 -1
- package/dist/client/hooks.js +37 -4
- package/dist/client/hooks.js.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/offline-sw.js +142 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +279 -40
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +78 -2
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/start.js +1 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/components/Image.d.ts +0 -12
- package/dist/components/Image.d.ts.map +1 -1
- package/dist/components/Image.js +2 -29
- package/dist/components/Image.js.map +1 -1
- package/dist/components/ImageServer.d.ts +20 -0
- package/dist/components/ImageServer.d.ts.map +1 -0
- package/dist/components/ImageServer.js +37 -0
- package/dist/components/ImageServer.js.map +1 -0
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/config.d.ts +66 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +77 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +251 -41
- package/dist/server/app.js.map +1 -1
- package/dist/server/cache.d.ts.map +1 -1
- package/dist/server/cache.js +26 -4
- package/dist/server/cache.js.map +1 -1
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/csrf.js +5 -0
- package/dist/server/csrf.js.map +1 -1
- package/dist/server/revalidate.d.ts.map +1 -1
- package/dist/server/revalidate.js +10 -3
- package/dist/server/revalidate.js.map +1 -1
- package/dist/ssr/html.d.ts +7 -0
- package/dist/ssr/html.d.ts.map +1 -1
- package/dist/ssr/html.js +24 -4
- package/dist/ssr/html.js.map +1 -1
- package/dist/ssr/ppr.d.ts.map +1 -1
- package/dist/ssr/ppr.js +2 -1
- package/dist/ssr/ppr.js.map +1 -1
- package/dist/ssr/render.d.ts +5 -0
- package/dist/ssr/render.d.ts.map +1 -1
- package/dist/ssr/render.js +2 -1
- package/dist/ssr/render.js.map +1 -1
- package/package.json +9 -4
- package/src/analytics/handler.ts +15 -10
- package/src/cli.ts +9 -2
- package/src/client/federation.ts +55 -0
- package/src/client/hooks.ts +42 -4
- package/src/client/index.ts +1 -0
- package/src/client/offline-sw.ts +7 -2
- package/src/commands/build.ts +335 -44
- package/src/commands/dev.ts +84 -2
- package/src/commands/start.ts +1 -1
- package/src/components/Image.tsx +2 -35
- package/src/components/ImageServer.ts +43 -0
- package/src/components/index.ts +1 -1
- package/src/config.ts +143 -0
- package/src/index.ts +2 -0
- package/src/server/app.ts +289 -35
- package/src/server/cache.ts +28 -4
- package/src/server/csrf.ts +5 -0
- package/src/server/revalidate.ts +14 -2
- package/src/ssr/html.ts +31 -3
- package/src/ssr/ppr.ts +2 -1
- package/src/ssr/render.ts +7 -0
- package/tsconfig.sw.json +18 -0
- package/tsconfig.tsbuildinfo +1 -1
package/dist/commands/build.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { build as viteBuild } from "vite";
|
|
2
|
-
import { resolve } from "node:path";
|
|
2
|
+
import { resolve, relative, isAbsolute } from "node:path";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
3
4
|
import { spawn, execSync } from "node:child_process";
|
|
4
|
-
import { existsSync, writeFileSync, readFileSync } from "node:fs";
|
|
5
|
+
import { existsSync, writeFileSync, readFileSync, mkdirSync } from "node:fs";
|
|
6
|
+
import { loadUserConfig } from "../config.js";
|
|
5
7
|
import { preRenderPPRShell, findBuildLayoutFiles, PPR_CACHE_SUBDIR } from "../ssr/ppr.js";
|
|
6
8
|
/** Run `tsc --noEmit` in the project and resolve when it exits. */
|
|
7
9
|
function runTypecheck(cwd) {
|
|
@@ -123,7 +125,10 @@ export async function build({ cwd, skipTypecheck = false, mode = "ssr", analyze
|
|
|
123
125
|
...(visualizerPlugin ? [visualizerPlugin] : []),
|
|
124
126
|
],
|
|
125
127
|
build: {
|
|
126
|
-
|
|
128
|
+
// Output client assets to .alabjs/dist/client/ so the production server's
|
|
129
|
+
// static handler (which serves from distDir/client/) can find them.
|
|
130
|
+
outDir: resolve(cwd, ".alabjs/dist/client"),
|
|
131
|
+
manifest: true,
|
|
127
132
|
ssrManifest: true,
|
|
128
133
|
rolldownOptions: {
|
|
129
134
|
// In SSR mode, we don't use an index.html as the entry point.
|
|
@@ -138,14 +143,26 @@ export async function build({ cwd, skipTypecheck = false, mode = "ssr", analyze
|
|
|
138
143
|
tasks.push(runTypecheck(cwd));
|
|
139
144
|
}
|
|
140
145
|
await Promise.all(tasks);
|
|
141
|
-
// Write a stable build ID for skew protection (must run after Vite so the
|
|
142
|
-
// route-manifest.json is in place for the content-hash fallback path).
|
|
143
146
|
const distDir = resolve(cwd, ".alabjs/dist");
|
|
147
|
+
// Scan the app/ directory with the Rust router, normalize paths, and write
|
|
148
|
+
// route-manifest.json. Must run before writeBuildId (hash) and buildPPRShells.
|
|
149
|
+
const manifest = await buildRouteManifest(cwd, distDir);
|
|
150
|
+
// Compile all app pages, layouts, and server functions to .alabjs/dist/server/.
|
|
151
|
+
// Must run after buildRouteManifest so we have the entry list, and before
|
|
152
|
+
// buildPPRShells which imports the compiled modules.
|
|
153
|
+
await buildSsrBundle(cwd, distDir, manifest);
|
|
154
|
+
// Write a stable build ID for skew protection (must run after the route
|
|
155
|
+
// manifest is in place for the content-hash fallback path).
|
|
144
156
|
await writeBuildId(distDir, cwd);
|
|
145
157
|
await buildPPRShells(distDir, cwd);
|
|
146
158
|
// Bundle the offline service worker as a separate iife chunk.
|
|
147
159
|
// Output: .alabjs/dist/client/_alabjs/offline-sw.js (served at /_alabjs/offline-sw.js)
|
|
148
160
|
await buildOfflineSw(cwd);
|
|
161
|
+
// Build federation vendor + exposed modules if configured.
|
|
162
|
+
const userConfig = await loadUserConfig(cwd);
|
|
163
|
+
if (userConfig.federation) {
|
|
164
|
+
await buildFederation(cwd, userConfig.federation);
|
|
165
|
+
}
|
|
149
166
|
console.log("\n alab build complete → .alabjs/dist");
|
|
150
167
|
}
|
|
151
168
|
/**
|
|
@@ -200,49 +217,268 @@ async function buildPPRShells(distDir, cwd) {
|
|
|
200
217
|
const pageRoutes = manifest.routes.filter((r) => r.kind === "page");
|
|
201
218
|
const pprCacheDir = resolve(cwd, PPR_CACHE_SUBDIR);
|
|
202
219
|
let count = 0;
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
220
|
+
// Signal to useServerData that it must not make network calls — return
|
|
221
|
+
// empty placeholders instead so components can render their static shell.
|
|
222
|
+
process.env["ALAB_PPR_PRERENDER"] = "1";
|
|
223
|
+
try {
|
|
224
|
+
for (const route of pageRoutes) {
|
|
225
|
+
// esbuild compiles .tsx/.ts → .js; use the compiled path.
|
|
226
|
+
const modulePath = resolve(distDir, "server", route.file.replace(/\.(tsx?)$/, ".js"));
|
|
227
|
+
if (!existsSync(modulePath))
|
|
228
|
+
continue;
|
|
229
|
+
// Dynamic import — on Windows absolute paths need a file:// URL.
|
|
230
|
+
const mod = await import(pathToFileURL(modulePath).href);
|
|
231
|
+
if (mod.ppr !== true)
|
|
232
|
+
continue;
|
|
233
|
+
if (typeof mod.default !== "function") {
|
|
234
|
+
console.warn(` alab ppr: ${route.file} has no default export — skipping.`);
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
// Load layout modules (outermost → innermost).
|
|
238
|
+
const layoutPaths = findBuildLayoutFiles(route.file, distDir);
|
|
239
|
+
const layoutMods = await Promise.all(layoutPaths.map((p) => import(pathToFileURL(resolve(distDir, "server", p)).href)));
|
|
240
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
241
|
+
const layouts = layoutMods.map((m) => m.default).filter((c) => typeof c === "function");
|
|
242
|
+
try {
|
|
243
|
+
await preRenderPPRShell({
|
|
244
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
245
|
+
Page: mod.default,
|
|
246
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
247
|
+
layouts: layouts,
|
|
248
|
+
shellOpts: {
|
|
249
|
+
metadata: mod.metadata ?? {},
|
|
250
|
+
paramsJson: "{}",
|
|
251
|
+
searchParamsJson: "{}",
|
|
252
|
+
routeFile: route.file,
|
|
253
|
+
// PPR shells are static snapshots — client mounts via CSR (createRoot)
|
|
254
|
+
// rather than hydration to avoid mismatches with the pre-rendered HTML.
|
|
255
|
+
ssr: false,
|
|
256
|
+
layoutsJson: JSON.stringify(layoutPaths.map(p => p.replace(/\.js$/, ".tsx"))),
|
|
257
|
+
},
|
|
258
|
+
pprCacheDir,
|
|
259
|
+
routePath: route.path,
|
|
260
|
+
});
|
|
261
|
+
count++;
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
265
|
+
console.warn(` alab ppr: failed to pre-render ${route.path}: ${msg}`);
|
|
266
|
+
}
|
|
214
267
|
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
268
|
+
}
|
|
269
|
+
finally {
|
|
270
|
+
delete process.env["ALAB_PPR_PRERENDER"];
|
|
271
|
+
}
|
|
272
|
+
if (count > 0) {
|
|
273
|
+
console.log(` alab ppr → ${count} shell${count === 1 ? "" : "s"} written to ${PPR_CACHE_SUBDIR}`);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// ─── Federation build ─────────────────────────────────────────────────────────
|
|
277
|
+
/**
|
|
278
|
+
* Build all federation artefacts after the main SSR bundle:
|
|
279
|
+
* 1. Vendor ESM chunks for shared React singletons (`/_alabjs/vendor/`)
|
|
280
|
+
* 2. Exposed component modules (`/_alabjs/remotes/<name>/<ExposedName>.js`)
|
|
281
|
+
* 3. `federation-config.json` in the dist root (read by `alab start`)
|
|
282
|
+
* 4. `federation-manifest.json` in the client dir (served at runtime)
|
|
283
|
+
*/
|
|
284
|
+
async function buildFederation(cwd, federation) {
|
|
285
|
+
const { name, exposes = {}, remotes = {} } = federation;
|
|
286
|
+
const distClientAlab = resolve(cwd, ".alabjs/dist/client/_alabjs");
|
|
287
|
+
const hasExposes = Object.keys(exposes).length > 0;
|
|
288
|
+
const hasRemotes = Object.keys(remotes).length > 0;
|
|
289
|
+
if (hasRemotes || hasExposes) {
|
|
290
|
+
await buildFederationVendors(cwd, distClientAlab, federation.shared ?? []);
|
|
291
|
+
}
|
|
292
|
+
if (hasExposes) {
|
|
293
|
+
await buildFederationExposes(cwd, distClientAlab, name, exposes, federation.shared ?? []);
|
|
294
|
+
}
|
|
295
|
+
// Write federation config for the production server (import map generation).
|
|
296
|
+
writeFileSync(resolve(cwd, ".alabjs/dist/federation-config.json"), JSON.stringify(federation, null, 2), "utf8");
|
|
297
|
+
console.log(` alab federation → ${Object.keys(exposes).length} exposed, ${Object.keys(remotes).length} remote(s)`);
|
|
298
|
+
}
|
|
299
|
+
/** Build React + react-dom (and any user `shared` packages) as standalone ESM vendor files. */
|
|
300
|
+
async function buildFederationVendors(cwd, distClientAlab, extraShared = []) {
|
|
301
|
+
const vendorDir = resolve(distClientAlab, "vendor");
|
|
302
|
+
mkdirSync(vendorDir, { recursive: true });
|
|
303
|
+
// Always vendor the React singleton packages.
|
|
304
|
+
const coreVendors = [
|
|
305
|
+
{ specifier: "react", output: "react.js" },
|
|
306
|
+
{ specifier: "react/jsx-runtime", output: "react-jsx-runtime.js" },
|
|
307
|
+
{ specifier: "react-dom", output: "react-dom.js" },
|
|
308
|
+
{ specifier: "react-dom/client", output: "react-dom-client.js" },
|
|
309
|
+
];
|
|
310
|
+
// User-declared shared packages (e.g. "date-fns", "zustand").
|
|
311
|
+
const extraVendors = extraShared.map((pkg) => ({
|
|
312
|
+
specifier: pkg,
|
|
313
|
+
output: `${pkg.replace(/\//g, "--")}.js`,
|
|
314
|
+
}));
|
|
315
|
+
const vendors = [...coreVendors, ...extraVendors];
|
|
316
|
+
for (const { specifier, output } of vendors) {
|
|
317
|
+
const virtualId = `\0alabjs-vendor:${specifier}`;
|
|
220
318
|
try {
|
|
221
|
-
await
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
319
|
+
await viteBuild({
|
|
320
|
+
root: cwd,
|
|
321
|
+
configFile: false,
|
|
322
|
+
plugins: [{
|
|
323
|
+
name: "alabjs-federation-vendor",
|
|
324
|
+
resolveId: (id) => id === virtualId ? id : null,
|
|
325
|
+
load: (id) => id === virtualId
|
|
326
|
+
? `export * from "${specifier}"; export { default } from "${specifier}";`
|
|
327
|
+
: null,
|
|
328
|
+
}],
|
|
329
|
+
build: {
|
|
330
|
+
outDir: vendorDir,
|
|
331
|
+
emptyOutDir: false,
|
|
332
|
+
lib: {
|
|
333
|
+
entry: virtualId,
|
|
334
|
+
formats: ["es"],
|
|
335
|
+
fileName: () => output,
|
|
336
|
+
},
|
|
337
|
+
minify: true,
|
|
232
338
|
},
|
|
233
|
-
|
|
234
|
-
routePath: route.path,
|
|
339
|
+
logLevel: "warn",
|
|
235
340
|
});
|
|
236
|
-
count++;
|
|
237
341
|
}
|
|
238
342
|
catch (err) {
|
|
239
|
-
|
|
240
|
-
console.warn(` alab ppr: failed to pre-render ${route.path}: ${msg}`);
|
|
343
|
+
console.warn(` alab federation: failed to build vendor ${specifier}: ${String(err)}`);
|
|
241
344
|
}
|
|
242
345
|
}
|
|
243
|
-
|
|
244
|
-
|
|
346
|
+
}
|
|
347
|
+
/** Build each exposed module as an externalized ESM chunk for remote consumption. */
|
|
348
|
+
async function buildFederationExposes(cwd, distClientAlab, appName, exposes, shared) {
|
|
349
|
+
const remotesDir = resolve(distClientAlab, `remotes/${appName}`);
|
|
350
|
+
mkdirSync(remotesDir, { recursive: true });
|
|
351
|
+
const external = [
|
|
352
|
+
"react",
|
|
353
|
+
"react/jsx-runtime",
|
|
354
|
+
"react-dom",
|
|
355
|
+
"react-dom/client",
|
|
356
|
+
...shared,
|
|
357
|
+
];
|
|
358
|
+
for (const [exposedName, entryRelPath] of Object.entries(exposes)) {
|
|
359
|
+
const entryAbs = resolve(cwd, entryRelPath.replace(/^\.\//, ""));
|
|
360
|
+
try {
|
|
361
|
+
await viteBuild({
|
|
362
|
+
root: cwd,
|
|
363
|
+
configFile: false,
|
|
364
|
+
build: {
|
|
365
|
+
outDir: remotesDir,
|
|
366
|
+
emptyOutDir: false,
|
|
367
|
+
lib: {
|
|
368
|
+
entry: entryAbs,
|
|
369
|
+
formats: ["es"],
|
|
370
|
+
fileName: () => `${exposedName}.js`,
|
|
371
|
+
},
|
|
372
|
+
minify: true,
|
|
373
|
+
rolldownOptions: { external },
|
|
374
|
+
},
|
|
375
|
+
logLevel: "warn",
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
catch (err) {
|
|
379
|
+
console.warn(` alab federation: failed to build exposed "${exposedName}": ${String(err)}`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
// Manifest consumed by host apps discovering what this remote exposes.
|
|
383
|
+
const manifest = {
|
|
384
|
+
name: appName,
|
|
385
|
+
exposes: Object.fromEntries(Object.keys(exposes).map((k) => [k, `/_alabjs/remotes/${appName}/${k}.js`])),
|
|
386
|
+
};
|
|
387
|
+
writeFileSync(resolve(distClientAlab, "federation-manifest.json"), JSON.stringify(manifest, null, 2), "utf8");
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Scan `app/` with the Rust router napi, normalize absolute file paths to
|
|
391
|
+
* cwd-relative, and write `route-manifest.json` to `distDir`.
|
|
392
|
+
*
|
|
393
|
+
* Returns the in-memory manifest so callers can use it immediately without
|
|
394
|
+
* reading the file back from disk.
|
|
395
|
+
*/
|
|
396
|
+
async function buildRouteManifest(cwd, distDir) {
|
|
397
|
+
const appDir = resolve(cwd, "app");
|
|
398
|
+
let manifest = { routes: [] };
|
|
399
|
+
try {
|
|
400
|
+
const mod = await import("@alabjs/compiler");
|
|
401
|
+
const napi = (mod.default ?? mod);
|
|
402
|
+
const json = napi.buildRoutes(appDir);
|
|
403
|
+
manifest = JSON.parse(json);
|
|
404
|
+
// The Rust scanner stores absolute paths; normalize to cwd-relative so the
|
|
405
|
+
// production server can construct `distDir/server/<file>` paths correctly.
|
|
406
|
+
for (const route of manifest.routes) {
|
|
407
|
+
if (isAbsolute(route.file)) {
|
|
408
|
+
route.file = relative(cwd, route.file);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
catch {
|
|
413
|
+
console.warn(" alab warning: Rust compiler unavailable — route manifest will be empty.\n" +
|
|
414
|
+
" Run `cargo build --release -p alab-napi && bash scripts/copy-napi-binary.sh`.");
|
|
415
|
+
}
|
|
416
|
+
mkdirSync(distDir, { recursive: true });
|
|
417
|
+
writeFileSync(resolve(distDir, "route-manifest.json"), JSON.stringify(manifest, null, 2), "utf8");
|
|
418
|
+
const pages = manifest.routes.filter((r) => r.kind === "page").length;
|
|
419
|
+
const apis = manifest.routes.filter((r) => r.kind === "api").length;
|
|
420
|
+
console.log(` alab routes → ${pages} page(s), ${apis} api route(s)`);
|
|
421
|
+
return manifest;
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Compile all SSR route files to `distDir/server/` using esbuild's per-file
|
|
425
|
+
* transpilation mode.
|
|
426
|
+
*
|
|
427
|
+
* We use esbuild directly (bundled with Vite) rather than a second viteBuild
|
|
428
|
+
* call because:
|
|
429
|
+
* 1. Preserves directory structure via `outbase` without needing
|
|
430
|
+
* `preserveModules` (which hangs with some Rolldown versions).
|
|
431
|
+
* 2. `packages: "external"` externalizes all npm specifiers while inlining
|
|
432
|
+
* local relative imports — avoids Node ESM extensionless-import failures.
|
|
433
|
+
* 3. Much faster: no second Vite startup overhead.
|
|
434
|
+
*/
|
|
435
|
+
async function buildSsrBundle(cwd, distDir, manifest) {
|
|
436
|
+
const entryFiles = manifest.routes.map((r) => resolve(cwd, r.file));
|
|
437
|
+
// Include top-level middleware.ts if present.
|
|
438
|
+
const middlewarePath = resolve(cwd, "middleware.ts");
|
|
439
|
+
if (existsSync(middlewarePath))
|
|
440
|
+
entryFiles.push(middlewarePath);
|
|
441
|
+
if (entryFiles.length === 0)
|
|
442
|
+
return;
|
|
443
|
+
// Build the import.meta.env replacement object for esbuild.
|
|
444
|
+
// Node.js never defines import.meta.env (it's a Vite-only concept), so if
|
|
445
|
+
// we leave it undefined the compiled server modules throw at runtime on any
|
|
446
|
+
// reference to import.meta.env.*. We mirror exactly what Vite inlines for
|
|
447
|
+
// the client build: standard constants + ALAB_PUBLIC_* / VITE_* vars.
|
|
448
|
+
const publicEnv = {};
|
|
449
|
+
for (const [key, val] of Object.entries(process.env)) {
|
|
450
|
+
if (key.startsWith("ALAB_PUBLIC_") || key.startsWith("VITE_")) {
|
|
451
|
+
publicEnv[key] = val ?? "";
|
|
452
|
+
}
|
|
245
453
|
}
|
|
454
|
+
const metaEnv = {
|
|
455
|
+
PROD: true,
|
|
456
|
+
DEV: false,
|
|
457
|
+
SSR: true,
|
|
458
|
+
MODE: "production",
|
|
459
|
+
BASE_URL: "/",
|
|
460
|
+
...publicEnv,
|
|
461
|
+
};
|
|
462
|
+
const { build: esbuild } = await import("esbuild");
|
|
463
|
+
await esbuild({
|
|
464
|
+
entryPoints: entryFiles,
|
|
465
|
+
outbase: cwd, // preserve directory structure: app/page.tsx → server/app/page.js
|
|
466
|
+
outdir: resolve(distDir, "server"),
|
|
467
|
+
format: "esm",
|
|
468
|
+
platform: "node",
|
|
469
|
+
target: "node22",
|
|
470
|
+
bundle: true, // bundle local imports (resolves extensionless paths)
|
|
471
|
+
packages: "external", // keep all npm specifiers (react, alabjs/*…) as-is
|
|
472
|
+
jsx: "automatic",
|
|
473
|
+
jsxImportSource: "react",
|
|
474
|
+
logLevel: "warning",
|
|
475
|
+
define: {
|
|
476
|
+
// Replace the entire import.meta.env expression so property accesses,
|
|
477
|
+
// destructuring, and optional-chaining all resolve correctly at runtime.
|
|
478
|
+
"import.meta.env": JSON.stringify(metaEnv),
|
|
479
|
+
},
|
|
480
|
+
});
|
|
481
|
+
console.log(" alab SSR bundle → .alabjs/dist/server");
|
|
246
482
|
}
|
|
247
483
|
/** Compile the offline service worker to a standalone iife bundle. */
|
|
248
484
|
async function buildOfflineSw(cwd) {
|
|
@@ -262,7 +498,10 @@ async function buildOfflineSw(cwd) {
|
|
|
262
498
|
fileName: () => "offline-sw.js",
|
|
263
499
|
},
|
|
264
500
|
minify: true,
|
|
265
|
-
|
|
501
|
+
// Note: do NOT set rolldownOptions.output.inlineDynamicImports here.
|
|
502
|
+
// iife format sets codeSplitting:false which already implies
|
|
503
|
+
// inlineDynamicImports:true in Rolldown. Setting it explicitly
|
|
504
|
+
// produces a warning that can cause the build to stall in Rolldown/Vite 8+.
|
|
266
505
|
},
|
|
267
506
|
});
|
|
268
507
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAuBA,UAAU,UAAU;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAoCD,wBAAsB,GAAG,CAAC,EAAE,GAAG,EAAE,IAAW,EAAE,IAAkB,EAAE,EAAE,UAAU,iBAkmB7E"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createServer } from "vite";
|
|
2
2
|
import { resolve, join } from "node:path";
|
|
3
|
-
import { readdirSync } from "node:fs";
|
|
3
|
+
import { readdirSync, existsSync as fsExistsSync, readFileSync as fsReadFileSync } from "node:fs";
|
|
4
|
+
import { loadUserConfig, buildImportMap } from "../config.js";
|
|
4
5
|
import { Writable } from "node:stream";
|
|
5
6
|
import { scanDevRoutes, matchDevRoute, findLayoutFiles, findErrorFile, findLoadingFile, scanDevApiRoutes, matchDevApiRoute, } from "../ssr/router-dev.js";
|
|
6
7
|
import { htmlShellBefore, htmlShellAfter, injectIntoFullDocument } from "../ssr/html.js";
|
|
@@ -49,6 +50,44 @@ async function readJsonBody(req) {
|
|
|
49
50
|
}
|
|
50
51
|
export async function dev({ cwd, port = 3000, host = "localhost" }) {
|
|
51
52
|
console.log(" alab starting dev server...\n");
|
|
53
|
+
// Load optional alabjs.config.ts for federation and other user config.
|
|
54
|
+
const userConfig = await loadUserConfig(cwd);
|
|
55
|
+
// In dev: only inject remote scope mappings (react is already in Vite's module graph).
|
|
56
|
+
const importMapJson = userConfig.federation
|
|
57
|
+
? buildImportMap(userConfig.federation, /* dev= */ true)
|
|
58
|
+
: null;
|
|
59
|
+
// If this app exposes federation modules, build them once at dev startup so
|
|
60
|
+
// the `/_alabjs/remotes/` endpoint can serve them immediately.
|
|
61
|
+
// No hot-reloading of exposed modules in dev — restart the dev server after changes.
|
|
62
|
+
if (userConfig.federation?.exposes && Object.keys(userConfig.federation.exposes).length > 0) {
|
|
63
|
+
const { name, exposes, shared = [] } = userConfig.federation;
|
|
64
|
+
const devRemotesDir = resolve(cwd, `.alabjs/dev-remotes/${name}`);
|
|
65
|
+
try {
|
|
66
|
+
const { mkdirSync } = await import("node:fs");
|
|
67
|
+
const { build: viteBuildDev } = await import("vite");
|
|
68
|
+
mkdirSync(devRemotesDir, { recursive: true });
|
|
69
|
+
const external = ["react", "react/jsx-runtime", "react-dom", "react-dom/client", ...shared];
|
|
70
|
+
for (const [exposedName, entryRelPath] of Object.entries(exposes)) {
|
|
71
|
+
const entryAbs = resolve(cwd, entryRelPath.replace(/^\.\//, ""));
|
|
72
|
+
await viteBuildDev({
|
|
73
|
+
root: cwd,
|
|
74
|
+
configFile: false,
|
|
75
|
+
build: {
|
|
76
|
+
outDir: devRemotesDir,
|
|
77
|
+
emptyOutDir: false,
|
|
78
|
+
lib: { entry: entryAbs, formats: ["es"], fileName: () => `${exposedName}.js` },
|
|
79
|
+
minify: false,
|
|
80
|
+
rolldownOptions: { external },
|
|
81
|
+
},
|
|
82
|
+
logLevel: "warn",
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
console.log(` alab federation dev → ${Object.keys(exposes).length} exposed module(s) built`);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.warn(` alab federation: dev build of exposed modules failed: ${String(err)}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
52
91
|
// Per-session build ID for skew protection in dev.
|
|
53
92
|
// A new ID is generated each time the dev server starts so that a browser
|
|
54
93
|
// tab left open across a restart will hard-reload on the next navigation
|
|
@@ -107,6 +146,42 @@ export async function dev({ cwd, port = 3000, host = "localhost" }) {
|
|
|
107
146
|
}
|
|
108
147
|
}
|
|
109
148
|
}
|
|
149
|
+
// ── /_alabjs/federation-manifest.json — expose what this app exposes ────────
|
|
150
|
+
if (pathname === "/_alabjs/federation-manifest.json") {
|
|
151
|
+
const fed = userConfig.federation;
|
|
152
|
+
if (!fed?.exposes || Object.keys(fed.exposes).length === 0) {
|
|
153
|
+
res.statusCode = 404;
|
|
154
|
+
res.setHeader("content-type", "application/json");
|
|
155
|
+
res.end(JSON.stringify({ error: "No federation exposes configured." }));
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
const manifest = {
|
|
159
|
+
name: fed.name,
|
|
160
|
+
exposes: Object.fromEntries(Object.keys(fed.exposes).map((k) => [k, `/_alabjs/remotes/${fed.name}/${k}.js`])),
|
|
161
|
+
};
|
|
162
|
+
res.statusCode = 200;
|
|
163
|
+
res.setHeader("content-type", "application/json; charset=utf-8");
|
|
164
|
+
res.setHeader("access-control-allow-origin", "*");
|
|
165
|
+
res.setHeader("cache-control", "no-store");
|
|
166
|
+
res.end(JSON.stringify(manifest, null, 2));
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// ── /_alabjs/remotes/:name/:module.js — serve pre-built exposed modules ─────
|
|
170
|
+
if (pathname.startsWith("/_alabjs/remotes/")) {
|
|
171
|
+
const relPath = pathname.slice("/_alabjs/remotes/".length);
|
|
172
|
+
const filePath = resolve(cwd, ".alabjs/dev-remotes", relPath);
|
|
173
|
+
if (fsExistsSync(filePath)) {
|
|
174
|
+
res.statusCode = 200;
|
|
175
|
+
res.setHeader("content-type", "application/javascript; charset=utf-8");
|
|
176
|
+
res.setHeader("access-control-allow-origin", "*");
|
|
177
|
+
res.setHeader("cache-control", "no-store");
|
|
178
|
+
res.end(fsReadFileSync(filePath));
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
res.statusCode = 404;
|
|
182
|
+
res.end("Not found");
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
110
185
|
// ── /_alabjs/__devtools — debug dump of routes + server functions ───────────
|
|
111
186
|
if (pathname === "/_alabjs/__devtools") {
|
|
112
187
|
const devRoutes = scanDevRoutes(appDir);
|
|
@@ -360,7 +435,7 @@ export async function dev({ cwd, port = 3000, host = "localhost" }) {
|
|
|
360
435
|
onError(e) { fail(e); },
|
|
361
436
|
});
|
|
362
437
|
});
|
|
363
|
-
const shell = htmlShellBefore({ metadata: { title: "404 — Not Found" }, paramsJson: "{}", searchParamsJson: "{}", routeFile: "app/not-found.tsx", ssr: true });
|
|
438
|
+
const shell = htmlShellBefore({ metadata: { title: "404 — Not Found" }, paramsJson: "{}", searchParamsJson: "{}", routeFile: "app/not-found.tsx", ssr: true, ...(importMapJson ? { importMapJson } : {}) });
|
|
364
439
|
const rawHtml = `${shell}${nfContent}${htmlShellAfter({})}`;
|
|
365
440
|
const html = await vite.transformIndexHtml(pathname, rawHtml);
|
|
366
441
|
res.statusCode = 404;
|
|
@@ -474,6 +549,7 @@ export async function dev({ cwd, port = 3000, host = "localhost" }) {
|
|
|
474
549
|
loadingFile,
|
|
475
550
|
ssr: ssrEnabled,
|
|
476
551
|
buildId: devBuildId,
|
|
552
|
+
...(importMapJson ? { importMapJson } : {}),
|
|
477
553
|
};
|
|
478
554
|
const renderPageHtml = async () => {
|
|
479
555
|
let rawHtml;
|