alabjs 0.1.0
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/adapters/cloudflare.d.ts +31 -0
- package/dist/adapters/cloudflare.d.ts.map +1 -0
- package/dist/adapters/cloudflare.js +30 -0
- package/dist/adapters/cloudflare.js.map +1 -0
- package/dist/adapters/deno.d.ts +22 -0
- package/dist/adapters/deno.d.ts.map +1 -0
- package/dist/adapters/deno.js +21 -0
- package/dist/adapters/deno.js.map +1 -0
- package/dist/adapters/web.d.ts +47 -0
- package/dist/adapters/web.d.ts.map +1 -0
- package/dist/adapters/web.js +212 -0
- package/dist/adapters/web.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +61 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/hooks.d.ts +119 -0
- package/dist/client/hooks.d.ts.map +1 -0
- package/dist/client/hooks.js +220 -0
- package/dist/client/hooks.js.map +1 -0
- package/dist/client/hooks.test.d.ts +2 -0
- package/dist/client/hooks.test.d.ts.map +1 -0
- package/dist/client/hooks.test.js +45 -0
- package/dist/client/hooks.test.js.map +1 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +4 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/offline.d.ts +52 -0
- package/dist/client/offline.d.ts.map +1 -0
- package/dist/client/offline.js +90 -0
- package/dist/client/offline.js.map +1 -0
- package/dist/client/provider.d.ts +12 -0
- package/dist/client/provider.d.ts.map +1 -0
- package/dist/client/provider.js +10 -0
- package/dist/client/provider.js.map +1 -0
- package/dist/commands/build.d.ts +18 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +173 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +447 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/info.d.ts +6 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +92 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/ssg.d.ts +8 -0
- package/dist/commands/ssg.d.ts.map +1 -0
- package/dist/commands/ssg.js +124 -0
- package/dist/commands/ssg.js.map +1 -0
- package/dist/commands/start.d.ts +7 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +26 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/test.d.ts +24 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +87 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +38 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +46 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/Font.d.ts +57 -0
- package/dist/components/Font.d.ts.map +1 -0
- package/dist/components/Font.js +33 -0
- package/dist/components/Font.js.map +1 -0
- package/dist/components/Image.d.ts +74 -0
- package/dist/components/Image.d.ts.map +1 -0
- package/dist/components/Image.js +85 -0
- package/dist/components/Image.js.map +1 -0
- package/dist/components/Link.d.ts +23 -0
- package/dist/components/Link.d.ts.map +1 -0
- package/dist/components/Link.js +48 -0
- package/dist/components/Link.js.map +1 -0
- package/dist/components/Script.d.ts +37 -0
- package/dist/components/Script.d.ts.map +1 -0
- package/dist/components/Script.js +70 -0
- package/dist/components/Script.js.map +1 -0
- package/dist/components/index.d.ts +10 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +6 -0
- package/dist/components/index.js.map +1 -0
- package/dist/i18n/i18n.test.d.ts +2 -0
- package/dist/i18n/i18n.test.d.ts.map +1 -0
- package/dist/i18n/i18n.test.js +132 -0
- package/dist/i18n/i18n.test.js.map +1 -0
- package/dist/i18n/index.d.ts +135 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +189 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/router/code-router.d.ts +204 -0
- package/dist/router/code-router.d.ts.map +1 -0
- package/dist/router/code-router.js +258 -0
- package/dist/router/code-router.js.map +1 -0
- package/dist/router/code-router.test.d.ts +2 -0
- package/dist/router/code-router.test.d.ts.map +1 -0
- package/dist/router/code-router.test.js +128 -0
- package/dist/router/code-router.test.js.map +1 -0
- package/dist/router/index.d.ts +4 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +2 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/manifest.d.ts +12 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +2 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/server/app.d.ts +13 -0
- package/dist/server/app.d.ts.map +1 -0
- package/dist/server/app.js +407 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/cache.d.ts +99 -0
- package/dist/server/cache.d.ts.map +1 -0
- package/dist/server/cache.js +161 -0
- package/dist/server/cache.js.map +1 -0
- package/dist/server/cache.test.d.ts +2 -0
- package/dist/server/cache.test.d.ts.map +1 -0
- package/dist/server/cache.test.js +150 -0
- package/dist/server/cache.test.js.map +1 -0
- package/dist/server/csrf.d.ts +28 -0
- package/dist/server/csrf.d.ts.map +1 -0
- package/dist/server/csrf.js +66 -0
- package/dist/server/csrf.js.map +1 -0
- package/dist/server/csrf.test.d.ts +2 -0
- package/dist/server/csrf.test.d.ts.map +1 -0
- package/dist/server/csrf.test.js +154 -0
- package/dist/server/csrf.test.js.map +1 -0
- package/dist/server/image.d.ts +18 -0
- package/dist/server/image.d.ts.map +1 -0
- package/dist/server/image.js +97 -0
- package/dist/server/image.js.map +1 -0
- package/dist/server/index.d.ts +57 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +58 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middleware.d.ts +53 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/middleware.js +80 -0
- package/dist/server/middleware.js.map +1 -0
- package/dist/server/middleware.test.d.ts +2 -0
- package/dist/server/middleware.test.d.ts.map +1 -0
- package/dist/server/middleware.test.js +125 -0
- package/dist/server/middleware.test.js.map +1 -0
- package/dist/server/revalidate.d.ts +49 -0
- package/dist/server/revalidate.d.ts.map +1 -0
- package/dist/server/revalidate.js +62 -0
- package/dist/server/revalidate.js.map +1 -0
- package/dist/server/revalidate.test.d.ts +2 -0
- package/dist/server/revalidate.test.d.ts.map +1 -0
- package/dist/server/revalidate.test.js +93 -0
- package/dist/server/revalidate.test.js.map +1 -0
- package/dist/server/server-fn.test.d.ts +2 -0
- package/dist/server/server-fn.test.d.ts.map +1 -0
- package/dist/server/server-fn.test.js +105 -0
- package/dist/server/server-fn.test.js.map +1 -0
- package/dist/server/sitemap.d.ts +9 -0
- package/dist/server/sitemap.d.ts.map +1 -0
- package/dist/server/sitemap.js +26 -0
- package/dist/server/sitemap.js.map +1 -0
- package/dist/server/sitemap.test.d.ts +2 -0
- package/dist/server/sitemap.test.d.ts.map +1 -0
- package/dist/server/sitemap.test.js +61 -0
- package/dist/server/sitemap.test.js.map +1 -0
- package/dist/server/sse.d.ts +59 -0
- package/dist/server/sse.d.ts.map +1 -0
- package/dist/server/sse.js +91 -0
- package/dist/server/sse.js.map +1 -0
- package/dist/server/sse.test.d.ts +2 -0
- package/dist/server/sse.test.d.ts.map +1 -0
- package/dist/server/sse.test.js +68 -0
- package/dist/server/sse.test.js.map +1 -0
- package/dist/signals/index.d.ts +101 -0
- package/dist/signals/index.d.ts.map +1 -0
- package/dist/signals/index.js +149 -0
- package/dist/signals/index.js.map +1 -0
- package/dist/signals/signals.test.d.ts +2 -0
- package/dist/signals/signals.test.d.ts.map +1 -0
- package/dist/signals/signals.test.js +146 -0
- package/dist/signals/signals.test.js.map +1 -0
- package/dist/ssr/html.d.ts +27 -0
- package/dist/ssr/html.d.ts.map +1 -0
- package/dist/ssr/html.js +107 -0
- package/dist/ssr/html.js.map +1 -0
- package/dist/ssr/html.test.d.ts +2 -0
- package/dist/ssr/html.test.d.ts.map +1 -0
- package/dist/ssr/html.test.js +178 -0
- package/dist/ssr/html.test.js.map +1 -0
- package/dist/ssr/render.d.ts +46 -0
- package/dist/ssr/render.d.ts.map +1 -0
- package/dist/ssr/render.js +87 -0
- package/dist/ssr/render.js.map +1 -0
- package/dist/ssr/router-dev.d.ts +60 -0
- package/dist/ssr/router-dev.d.ts.map +1 -0
- package/dist/ssr/router-dev.js +205 -0
- package/dist/ssr/router-dev.js.map +1 -0
- package/dist/ssr/router-dev.test.d.ts +2 -0
- package/dist/ssr/router-dev.test.d.ts.map +1 -0
- package/dist/ssr/router-dev.test.js +189 -0
- package/dist/ssr/router-dev.test.js.map +1 -0
- package/dist/test/index.d.ts +93 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +146 -0
- package/dist/test/index.js.map +1 -0
- package/dist/types/index.d.ts +117 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/napi.d.ts +15 -0
- package/dist/types/napi.d.ts.map +1 -0
- package/dist/types/napi.js +2 -0
- package/dist/types/napi.js.map +1 -0
- package/package.json +107 -0
- package/src/adapters/cloudflare.ts +30 -0
- package/src/adapters/deno.ts +21 -0
- package/src/adapters/web.ts +259 -0
- package/src/cli.ts +68 -0
- package/src/client/hooks.test.ts +54 -0
- package/src/client/hooks.ts +329 -0
- package/src/client/index.ts +5 -0
- package/src/client/offline-sw.ts +191 -0
- package/src/client/offline.ts +114 -0
- package/src/client/provider.tsx +14 -0
- package/src/commands/build.ts +201 -0
- package/src/commands/dev.ts +509 -0
- package/src/commands/info.ts +111 -0
- package/src/commands/ssg.ts +177 -0
- package/src/commands/start.ts +32 -0
- package/src/commands/test.ts +102 -0
- package/src/components/ErrorBoundary.tsx +73 -0
- package/src/components/Font.tsx +100 -0
- package/src/components/Image.tsx +141 -0
- package/src/components/Link.tsx +64 -0
- package/src/components/Script.tsx +97 -0
- package/src/components/index.ts +9 -0
- package/src/i18n/i18n.test.tsx +169 -0
- package/src/i18n/index.tsx +256 -0
- package/src/index.ts +10 -0
- package/src/router/code-router.test.ts +146 -0
- package/src/router/code-router.tsx +459 -0
- package/src/router/index.ts +18 -0
- package/src/router/manifest.ts +13 -0
- package/src/server/app.ts +466 -0
- package/src/server/cache.test.ts +192 -0
- package/src/server/cache.ts +195 -0
- package/src/server/csrf.test.ts +199 -0
- package/src/server/csrf.ts +80 -0
- package/src/server/image.ts +112 -0
- package/src/server/index.ts +144 -0
- package/src/server/middleware.test.ts +151 -0
- package/src/server/middleware.ts +95 -0
- package/src/server/revalidate.test.ts +106 -0
- package/src/server/revalidate.ts +75 -0
- package/src/server/server-fn.test.ts +127 -0
- package/src/server/sitemap.test.ts +68 -0
- package/src/server/sitemap.ts +30 -0
- package/src/server/sse.test.ts +81 -0
- package/src/server/sse.ts +110 -0
- package/src/signals/index.ts +177 -0
- package/src/signals/signals.test.ts +164 -0
- package/src/ssr/html.test.ts +200 -0
- package/src/ssr/html.ts +140 -0
- package/src/ssr/render.ts +144 -0
- package/src/ssr/router-dev.test.ts +230 -0
- package/src/ssr/router-dev.ts +229 -0
- package/src/test/index.ts +206 -0
- package/src/types/compiler.d.ts +25 -0
- package/src/types/index.ts +147 -0
- package/src/types/napi.ts +20 -0
- package/src/types/plugins.d.ts +3 -0
- package/tsconfig.json +11 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/vitest.config.ts +32 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { build as viteBuild, type PluginOption } from "vite";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
import { existsSync, writeFileSync } from "node:fs";
|
|
5
|
+
|
|
6
|
+
interface BuildOptions {
|
|
7
|
+
cwd: string;
|
|
8
|
+
/** Skip TypeScript type checking (--skip-typecheck flag). */
|
|
9
|
+
skipTypecheck?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Build mode:
|
|
12
|
+
* - `"ssr"` (default) — full SSR + client bundle, requires a Node.js server.
|
|
13
|
+
* - `"spa"` — pure client-side bundle, deployable to any CDN. No Node.js needed.
|
|
14
|
+
* Server functions become direct fetch calls to `/_alabjs/fn/*`; point these at
|
|
15
|
+
* a separate API server or use Cloudflare Workers for the data layer.
|
|
16
|
+
*/
|
|
17
|
+
mode?: "ssr" | "spa";
|
|
18
|
+
/** Open an interactive bundle size treemap after build (`--analyze`). */
|
|
19
|
+
analyze?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Run `tsc --noEmit` in the project and resolve when it exits. */
|
|
23
|
+
function runTypecheck(cwd: string): Promise<void> {
|
|
24
|
+
return new Promise((ok, fail) => {
|
|
25
|
+
const tscPath = resolve(cwd, "node_modules/.bin/tsc");
|
|
26
|
+
const bin = existsSync(tscPath) ? tscPath : "tsc";
|
|
27
|
+
const child = spawn(bin, ["--noEmit"], { cwd, stdio: "inherit", shell: true });
|
|
28
|
+
child.on("close", (code) => {
|
|
29
|
+
if (code === 0) ok();
|
|
30
|
+
else fail(new Error(`[alabjs] TypeScript type errors found (tsc --noEmit exited ${code})`));
|
|
31
|
+
});
|
|
32
|
+
child.on("error", fail);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* SPA mode: emit a single index.html shell + hashed client assets.
|
|
38
|
+
* No SSR build step — React hydrates from scratch on the client.
|
|
39
|
+
*/
|
|
40
|
+
async function buildSpa(cwd: string): Promise<void> {
|
|
41
|
+
const outDir = resolve(cwd, ".alabjs/dist/spa");
|
|
42
|
+
|
|
43
|
+
// Emit a minimal index.html if the project doesn't have one.
|
|
44
|
+
// We do this BEFORE calling viteBuild so Vite can resolve it as an entry point.
|
|
45
|
+
const indexPath = resolve(cwd, "index.html");
|
|
46
|
+
let temporaryIndex = false;
|
|
47
|
+
|
|
48
|
+
if (!existsSync(indexPath)) {
|
|
49
|
+
temporaryIndex = true;
|
|
50
|
+
const spa = `<!doctype html>
|
|
51
|
+
<html lang="en">
|
|
52
|
+
<head>
|
|
53
|
+
<meta charset="UTF-8" />
|
|
54
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
55
|
+
<link rel="stylesheet" href="/app/globals.css" />
|
|
56
|
+
</head>
|
|
57
|
+
<body>
|
|
58
|
+
<div id="alabjs-root"></div>
|
|
59
|
+
<script type="module" src="/@alabjs/client"></script>
|
|
60
|
+
</body>
|
|
61
|
+
</html>`;
|
|
62
|
+
writeFileSync(indexPath, spa, "utf8");
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
await viteBuild({
|
|
67
|
+
root: cwd,
|
|
68
|
+
plugins: [(await import("alabjs-vite-plugin")).alabPlugin({ mode: "build" })],
|
|
69
|
+
build: {
|
|
70
|
+
outDir,
|
|
71
|
+
// Client-only — no SSR entry, no server manifest needed.
|
|
72
|
+
ssrManifest: false,
|
|
73
|
+
rolldownOptions: {
|
|
74
|
+
input: indexPath,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
} finally {
|
|
79
|
+
// If we created a temporary index.html, remove it after the build.
|
|
80
|
+
if (temporaryIndex) {
|
|
81
|
+
const { rmSync } = await import("node:fs");
|
|
82
|
+
rmSync(indexPath, { force: true });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
console.log("\n alab SPA build complete → .alabjs/dist/spa");
|
|
87
|
+
console.log(" alab deploy the spa/ directory to any static host (Netlify, GitHub Pages, S3)\n");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export async function build({ cwd, skipTypecheck = false, mode = "ssr", analyze = false }: BuildOptions) {
|
|
91
|
+
if (mode === "spa") {
|
|
92
|
+
console.log(" alab building SPA (client-only)...\n");
|
|
93
|
+
const tasks: Promise<unknown>[] = [buildSpa(cwd)];
|
|
94
|
+
if (!skipTypecheck) {
|
|
95
|
+
console.log(" alab type-checking...");
|
|
96
|
+
tasks.push(runTypecheck(cwd));
|
|
97
|
+
}
|
|
98
|
+
await Promise.all(tasks);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
console.log(" alab building for production...\n");
|
|
103
|
+
|
|
104
|
+
// Run type checking and Vite bundling in parallel.
|
|
105
|
+
// Type errors abort the build before wrangler/deploy picks up bad output.
|
|
106
|
+
|
|
107
|
+
// Bundle visualizer — try rolldown-plugin-visualizer first (faster, Rust-native),
|
|
108
|
+
// fall back to rollup-plugin-visualizer (same API, works on both bundlers).
|
|
109
|
+
let visualizerPlugin: PluginOption = null;
|
|
110
|
+
if (analyze) {
|
|
111
|
+
const reportPath = resolve(cwd, ".alabjs/report.html");
|
|
112
|
+
const vizOpts = {
|
|
113
|
+
filename: reportPath,
|
|
114
|
+
open: true,
|
|
115
|
+
gzipSize: true,
|
|
116
|
+
brotliSize: true,
|
|
117
|
+
title: "Alab — bundle analysis",
|
|
118
|
+
};
|
|
119
|
+
let loaded = false;
|
|
120
|
+
for (const pkg of ["rolldown-plugin-visualizer", "rollup-plugin-visualizer"]) {
|
|
121
|
+
try {
|
|
122
|
+
const { visualizer } = await import(pkg) as {
|
|
123
|
+
visualizer: (opts: Record<string, unknown>) => PluginOption;
|
|
124
|
+
};
|
|
125
|
+
visualizerPlugin = visualizer(vizOpts);
|
|
126
|
+
console.log(` alab bundle report → .alabjs/report.html (${pkg})\n`);
|
|
127
|
+
loaded = true;
|
|
128
|
+
break;
|
|
129
|
+
} catch (err) {
|
|
130
|
+
const msg = String(err);
|
|
131
|
+
// Only silently skip "module not found"; anything else is unexpected.
|
|
132
|
+
if (!msg.includes("Cannot find module") && !msg.includes("ERR_MODULE_NOT_FOUND")) {
|
|
133
|
+
console.warn(` alab warning: failed to load visualizer (${pkg}): ${msg}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (!loaded) {
|
|
138
|
+
console.warn(" alab warning: install rolldown-plugin-visualizer or rollup-plugin-visualizer to enable --analyze.");
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const tasks: Promise<unknown>[] = [
|
|
143
|
+
viteBuild({
|
|
144
|
+
root: cwd,
|
|
145
|
+
plugins: [
|
|
146
|
+
(await import("alabjs-vite-plugin")).alabPlugin({ mode: "build" }),
|
|
147
|
+
...(visualizerPlugin ? [visualizerPlugin] : []),
|
|
148
|
+
],
|
|
149
|
+
build: {
|
|
150
|
+
outDir: resolve(cwd, ".alabjs/dist"),
|
|
151
|
+
ssrManifest: true,
|
|
152
|
+
rolldownOptions: {
|
|
153
|
+
// In SSR mode, we don't use an index.html as the entry point.
|
|
154
|
+
// Instead, we bundle the virtual client module as the main browser asset.
|
|
155
|
+
input: "/@alabjs/client",
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
}),
|
|
159
|
+
];
|
|
160
|
+
|
|
161
|
+
if (!skipTypecheck) {
|
|
162
|
+
console.log(" alab type-checking...");
|
|
163
|
+
tasks.push(runTypecheck(cwd));
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
await Promise.all(tasks);
|
|
167
|
+
|
|
168
|
+
// Bundle the offline service worker as a separate iife chunk.
|
|
169
|
+
// Output: .alabjs/dist/client/_alabjs/offline-sw.js (served at /_alabjs/offline-sw.js)
|
|
170
|
+
await buildOfflineSw(cwd);
|
|
171
|
+
|
|
172
|
+
console.log("\n alab build complete → .alabjs/dist");
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/** Compile the offline service worker to a standalone iife bundle. */
|
|
176
|
+
async function buildOfflineSw(cwd: string): Promise<void> {
|
|
177
|
+
const swEntry = new URL("../client/offline-sw.js", import.meta.url).pathname;
|
|
178
|
+
const outDir = resolve(cwd, ".alabjs/dist/client/_alabjs");
|
|
179
|
+
try {
|
|
180
|
+
await viteBuild({
|
|
181
|
+
root: cwd,
|
|
182
|
+
configFile: false,
|
|
183
|
+
build: {
|
|
184
|
+
outDir,
|
|
185
|
+
emptyOutDir: false,
|
|
186
|
+
lib: {
|
|
187
|
+
entry: swEntry,
|
|
188
|
+
name: "AlabOfflineSW",
|
|
189
|
+
formats: ["iife"],
|
|
190
|
+
fileName: () => "offline-sw.js",
|
|
191
|
+
},
|
|
192
|
+
minify: true,
|
|
193
|
+
rolldownOptions: { output: { inlineDynamicImports: true } },
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
} catch (err) {
|
|
197
|
+
// Non-fatal: offline SW is a progressive enhancement
|
|
198
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
199
|
+
console.warn(` alab warning: could not build offline service worker: ${msg}`);
|
|
200
|
+
}
|
|
201
|
+
}
|