alabjs-vite-plugin 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.
@@ -0,0 +1,18 @@
1
+ import type { Plugin } from "vite";
2
+ interface AlabPluginOptions {
3
+ /** "dev" (default) or "build" */
4
+ mode?: "dev" | "build";
5
+ }
6
+ /**
7
+ * Alab Vite Plugin
8
+ *
9
+ * - Replaces Vite's default esbuild transform for `.ts` / `.tsx` files with
10
+ * the Alab Rust compiler (oxc-based).
11
+ * - Enforces server/client boundary violations at transform time.
12
+ * - Serves the virtual `/@alabjs/client` module that hydrates the page on the
13
+ * client after SSR (reads route metadata from embedded `<meta>` tags).
14
+ * - Wires in Tailwind CSS v4 via `@tailwindcss/vite` (zero-config, optional).
15
+ */
16
+ export declare function alabPlugin(options?: AlabPluginOptions): Plugin[];
17
+ export {};
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAMnC,UAAU,iBAAiB;IACzB,iCAAiC;IACjC,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;CACxB;AAkBD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,MAAM,EAAE,CAkVpE"}
package/dist/index.js ADDED
@@ -0,0 +1,347 @@
1
+ import { parseErrorLocation, formatBoundaryError } from "./overlay.js";
2
+ import { createRequire } from "node:module";
3
+ import { pathToFileURL } from "node:url";
4
+ const VIRTUAL_CLIENT_ID = "/@alabjs/client";
5
+ const VIRTUAL_REFRESH_ID = "/@react-refresh";
6
+ /**
7
+ * Preamble injected into every HTML page in dev mode.
8
+ * Sets up the global $RefreshReg$ / $RefreshSig$ hooks that the Rust
9
+ * compiler (oxc_transformer enable_all) writes calls to in every TSX file.
10
+ */
11
+ const REACT_REFRESH_PREAMBLE = `
12
+ import RefreshRuntime from "${VIRTUAL_REFRESH_ID}";
13
+ RefreshRuntime.injectIntoGlobalHook(window);
14
+ window.$RefreshReg$ = () => {};
15
+ window.$RefreshSig$ = () => (type) => type;
16
+ window.__vite_plugin_react_preamble_installed__ = true;
17
+ `.trimStart();
18
+ /**
19
+ * Alab Vite Plugin
20
+ *
21
+ * - Replaces Vite's default esbuild transform for `.ts` / `.tsx` files with
22
+ * the Alab Rust compiler (oxc-based).
23
+ * - Enforces server/client boundary violations at transform time.
24
+ * - Serves the virtual `/@alabjs/client` module that hydrates the page on the
25
+ * client after SSR (reads route metadata from embedded `<meta>` tags).
26
+ * - Wires in Tailwind CSS v4 via `@tailwindcss/vite` (zero-config, optional).
27
+ */
28
+ export function alabPlugin(options = {}) {
29
+ let napi = null;
30
+ const corePlugin = {
31
+ name: "alabjs",
32
+ enforce: "pre",
33
+ async buildStart() {
34
+ try {
35
+ // CJS module imported via ESM dynamic import — functions land on .default
36
+ const mod = await import("@alabjs/compiler");
37
+ napi = (mod.default ?? mod);
38
+ }
39
+ catch {
40
+ this.warn("alabjs-napi binary not found — falling back to esbuild. " +
41
+ "Run `cargo build --release -p alab-napi && bash scripts/copy-napi-binary.sh` to compile the Rust core.");
42
+ }
43
+ },
44
+ resolveId(id) {
45
+ if (id === VIRTUAL_CLIENT_ID)
46
+ return VIRTUAL_CLIENT_ID;
47
+ if (id === VIRTUAL_REFRESH_ID)
48
+ return VIRTUAL_REFRESH_ID;
49
+ return null;
50
+ },
51
+ load(id) {
52
+ if (id === VIRTUAL_REFRESH_ID) {
53
+ // Re-export the react-refresh runtime so the preamble can import it.
54
+ return `export { default } from "react-refresh/runtime";\n`;
55
+ }
56
+ if (id !== VIRTUAL_CLIENT_ID)
57
+ return null;
58
+ // This module is injected into every page as `<script type="module" src="/@alabjs/client">`.
59
+ // It reads the route metadata embedded in <meta> tags by the SSR renderer and
60
+ // hydrates (or mounts) the React page component on the client.
61
+ // It also sets up window.__alabjs_navigate for the <Link> component.
62
+ return `
63
+ import "/app/globals.css";
64
+ import { createElement, Suspense } from "react";
65
+ import { hydrateRoot, createRoot } from "react-dom/client";
66
+ import { AlabProvider } from "alabjs/client";
67
+ import { ErrorBoundary } from "alabjs/components";
68
+
69
+ const meta = (name) => document.querySelector(\`meta[name="\${name}"]\`)?.getAttribute("content") ?? "";
70
+
71
+ /** Load a page module, its layout modules, and optional loading fallback. */
72
+ async function buildApp(routeFile, layoutFiles, loadingFile, params, searchParams) {
73
+ const mod = await import(/* @vite-ignore */ "/" + routeFile);
74
+ const Page = mod.default;
75
+ if (!Page) return null;
76
+
77
+ const layoutMods = await Promise.all(layoutFiles.map(f => import(/* @vite-ignore */ "/" + f)));
78
+ const layouts = layoutMods.map(m => m.default).filter(Boolean);
79
+
80
+ // Loading fallback: import loading.tsx if present
81
+ let loadingEl = null;
82
+ if (loadingFile) {
83
+ try {
84
+ const lMod = await import(/* @vite-ignore */ "/" + loadingFile);
85
+ const Loading = lMod.default;
86
+ if (Loading) loadingEl = createElement(Loading, {});
87
+ } catch {}
88
+ }
89
+
90
+ let el = createElement(Page, { params, searchParams });
91
+ // Wrap in Suspense with loading fallback
92
+ el = createElement(Suspense, { fallback: loadingEl ?? createElement("div", {}) }, el);
93
+ for (let i = layouts.length - 1; i >= 0; i--) {
94
+ el = createElement(layouts[i], {}, el);
95
+ }
96
+ return createElement(ErrorBoundary, {}, createElement(AlabProvider, {}, el));
97
+ }
98
+
99
+ let alabRoot = null;
100
+
101
+ const routeFile = meta("alabjs-route");
102
+ const ssrEnabled = meta("alabjs-ssr") === "true";
103
+ const params = JSON.parse(meta("alabjs-params") || "{}");
104
+ const searchParams = JSON.parse(meta("alabjs-search-params") || "{}");
105
+ const layoutFiles = JSON.parse(meta("alabjs-layouts") || "[]");
106
+ const loadingFile = meta("alabjs-loading") || null;
107
+
108
+ if (routeFile) {
109
+ const app = await buildApp(routeFile, layoutFiles, loadingFile, params, searchParams);
110
+ if (app) {
111
+ const root = document.getElementById("alabjs-root");
112
+ if (root) {
113
+ if (ssrEnabled && root.hasChildNodes()) {
114
+ alabRoot = hydrateRoot(root, app);
115
+ } else {
116
+ alabRoot = createRoot(root);
117
+ alabRoot.render(app);
118
+ }
119
+ }
120
+ }
121
+ }
122
+
123
+ /** SPA navigation — fetch target page and swap React root in-place. */
124
+ window.__alabjs_navigate = async (href) => {
125
+ try {
126
+ const res = await fetch(href, { headers: { "x-alabjs-prefetch": "1" } });
127
+ if (!res.ok) { window.location.href = href; return; }
128
+ const html = await res.text();
129
+
130
+ const parser = new DOMParser();
131
+ const doc = parser.parseFromString(html, "text/html");
132
+
133
+ const newMeta = (name) => doc.querySelector(\`meta[name="\${name}"]\`)?.getAttribute("content") ?? "";
134
+ const newRouteFile = newMeta("alabjs-route");
135
+ const newParams = JSON.parse(newMeta("alabjs-params") || "{}");
136
+ const newSearchParams = JSON.parse(newMeta("alabjs-search-params") || "{}");
137
+ const newLayoutFiles = JSON.parse(newMeta("alabjs-layouts") || "[]");
138
+ const newLoadingFile = newMeta("alabjs-loading") || null;
139
+
140
+ // Update document title
141
+ const newTitle = doc.querySelector("title")?.textContent;
142
+ if (newTitle) document.title = newTitle;
143
+
144
+ history.pushState({}, "", href);
145
+
146
+ if (newRouteFile && alabRoot) {
147
+ const app = await buildApp(newRouteFile, newLayoutFiles, newLoadingFile, newParams, newSearchParams);
148
+ if (app) alabRoot.render(app);
149
+ }
150
+
151
+ // Scroll to top on navigation (matches browser behaviour)
152
+ window.scrollTo(0, 0);
153
+ } catch {
154
+ // Network error — fall back to full navigation
155
+ window.location.href = href;
156
+ }
157
+ };
158
+
159
+ // Handle browser back / forward
160
+ window.addEventListener("popstate", () => {
161
+ window.__alabjs_navigate(location.pathname + location.search);
162
+ });
163
+
164
+ // ─── Dev boundary overlay (Alt+Shift+B to toggle) ─────────────────────────
165
+ if (import.meta.env.DEV) {
166
+ let overlayActive = false;
167
+ let panel = null;
168
+ let rootOutline = null;
169
+
170
+ const toggle = () => {
171
+ overlayActive = !overlayActive;
172
+
173
+ if (!overlayActive) {
174
+ panel?.remove(); panel = null;
175
+ rootOutline?.remove(); rootOutline = null;
176
+ return;
177
+ }
178
+
179
+ // ── Root highlight ──────────────────────────────────────────────────────
180
+ const root = document.getElementById("alabjs-root");
181
+ if (root) {
182
+ rootOutline = document.createElement("div");
183
+ Object.assign(rootOutline.style, {
184
+ position: "fixed", inset: 0, pointerEvents: "none", zIndex: 99998,
185
+ outline: "2px solid rgba(99,102,241,0.6)", outlineOffset: "-2px",
186
+ });
187
+ document.body.appendChild(rootOutline);
188
+ }
189
+
190
+ // ── Info panel ──────────────────────────────────────────────────────────
191
+ const ssr = meta("alabjs-ssr") === "true";
192
+ const route = meta("alabjs-route");
193
+ const layouts = JSON.parse(meta("alabjs-layouts") || "[]");
194
+ const loading = meta("alabjs-loading");
195
+ const cache = document.querySelector("meta[name='alabjs-cache']")?.getAttribute("content") ?? null;
196
+
197
+ panel = document.createElement("div");
198
+ Object.assign(panel.style, {
199
+ position: "fixed", bottom: "12px", left: "12px", zIndex: 99999,
200
+ background: "rgba(15,15,20,0.92)", backdropFilter: "blur(8px)",
201
+ border: "1px solid rgba(99,102,241,0.5)", borderRadius: "8px",
202
+ padding: "10px 14px", color: "#e2e8f0", fontFamily: "monospace",
203
+ fontSize: "11px", lineHeight: "1.6", maxWidth: "340px",
204
+ boxShadow: "0 4px 24px rgba(0,0,0,0.5)",
205
+ });
206
+
207
+ const badge = (label, color) =>
208
+ \`<span style="background:\${color};color:#fff;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:700">\${label}</span>\`;
209
+
210
+ const layoutRows = layouts.map(l =>
211
+ \`<div style="color:#94a3b8;padding-left:8px">↳ \${l}</div>\`
212
+ ).join("");
213
+
214
+ panel.innerHTML = [
215
+ \`<div style="margin-bottom:6px;display:flex;align-items:center;gap:6px">\`,
216
+ \` \${badge(ssr ? "SSR" : "CSR", ssr ? "#6366f1" : "#f59e0b")}\`,
217
+ cache ? \` \${badge("ISR " + cache, "#10b981")}\` : "",
218
+ \` <span style="color:#64748b;font-size:10px">Alt+Shift+B to close</span>\`,
219
+ \`</div>\`,
220
+ \`<div><span style="color:#64748b">route </span>\${route || "—"}</div>\`,
221
+ layouts.length ? \`<div style="color:#64748b">layouts</div>\${layoutRows}\` : "",
222
+ loading ? \`<div><span style="color:#64748b">loading</span> \${loading}</div>\` : "",
223
+ ].join("\\n");
224
+
225
+ document.body.appendChild(panel);
226
+ };
227
+
228
+ window.addEventListener("keydown", (e) => {
229
+ if (e.altKey && e.shiftKey && e.key === "B") toggle();
230
+ });
231
+ }
232
+ `.trimStart();
233
+ },
234
+ transformIndexHtml(html, ctx) {
235
+ // Inject the react-refresh preamble only in dev (SSR has no window).
236
+ if (ctx.server == null)
237
+ return html; // production build — skip
238
+ const preambleTag = `<script type="module">\n${REACT_REFRESH_PREAMBLE}</script>`;
239
+ return html.replace(/(<head[^>]*>)/i, `$1\n${preambleTag}`);
240
+ },
241
+ async transform(code, id, transformOptions) {
242
+ if (!napi)
243
+ return null;
244
+ if (!/\.(ts|tsx)$/.test(id))
245
+ return null;
246
+ if (id.includes("node_modules"))
247
+ return null;
248
+ const isServerFile = /\.server\.(ts|tsx)$/.test(id);
249
+ const isClientBuild = !transformOptions?.ssr;
250
+ // Skip Rust compiler for SSR transforms — the Rust compiler injects React
251
+ // Fast Refresh globals ($RefreshReg$) that don't exist in the SSR context.
252
+ // esbuild (Vite's default) handles SSR compilation correctly.
253
+ if (!isClientBuild)
254
+ return null;
255
+ // Server files in a CLIENT build context: extract defineServerFn declarations
256
+ // and replace the entire module with fetch stubs so server code never ships
257
+ // to the browser (DB calls, secrets, heavy deps, etc.).
258
+ if (isServerFile && isClientBuild) {
259
+ const serverFnsJson = napi.extractServerFns(code, id);
260
+ const serverFns = JSON.parse(serverFnsJson);
261
+ if (serverFns.length > 0) {
262
+ const stubs = serverFns
263
+ .map((fn) => napi.serverFnStub(fn.name, fn.endpoint))
264
+ .join("\n");
265
+ return { code: stubs, map: null };
266
+ }
267
+ // No defineServerFn exports found — emit an empty module so imports don't break.
268
+ return { code: "// alabjs: server module stripped from client bundle\n", map: null };
269
+ }
270
+ // Check server-boundary violations in non-server files.
271
+ if (!isServerFile) {
272
+ const violationsJson = napi.checkBoundary(code, id);
273
+ const violations = JSON.parse(violationsJson);
274
+ for (const v of violations) {
275
+ this.error(formatBoundaryError(v));
276
+ }
277
+ }
278
+ // Compile TypeScript/TSX with the Rust compiler.
279
+ // Catch errors and attach source location so Vite's overlay shows
280
+ // the exact line/column instead of a raw stack trace.
281
+ const minify = options.mode === "build";
282
+ // Emit source maps in dev mode so browser devtools map to original TS/TSX.
283
+ const sourceMap = !minify;
284
+ let outputJson;
285
+ try {
286
+ outputJson = napi.compileSource(code, id, minify, sourceMap);
287
+ }
288
+ catch (err) {
289
+ const message = err instanceof Error ? err.message : String(err);
290
+ const loc = parseErrorLocation(message, id);
291
+ this.error(message, loc ?? undefined);
292
+ }
293
+ const output = JSON.parse(outputJson);
294
+ let finalCode = output.code;
295
+ // In dev mode, append the react-refresh HMR accept footer to TSX files.
296
+ // This tells Vite the module self-accepts so hot updates stay component-
297
+ // level instead of propagating to a full page reload.
298
+ // The $RefreshReg$ / $RefreshSig$ calls are already emitted by the Rust
299
+ // compiler (oxc_transformer::enable_all includes the react-refresh pass).
300
+ if (!minify && /\.tsx$/.test(id)) {
301
+ finalCode +=
302
+ `\nimport __RefreshRuntime__ from "${VIRTUAL_REFRESH_ID}";` +
303
+ `\nif (import.meta.hot) {` +
304
+ `\n import.meta.hot.accept();` +
305
+ `\n __RefreshRuntime__.performReactRefresh();` +
306
+ `\n}`;
307
+ }
308
+ return { code: finalCode, map: output.map ?? null };
309
+ },
310
+ };
311
+ // Tailwind CSS v4 — zero-config, auto-detects utility classes in source files.
312
+ // Installed by default via `create-alabjs`; gracefully skipped if absent.
313
+ // Use createRequire from the project root (process.cwd()) so that the package
314
+ // is found in the user's node_modules, not the plugin's node_modules.
315
+ let tailwindPlugin = null;
316
+ try {
317
+ const req = createRequire(pathToFileURL(process.cwd() + "/package.json").href);
318
+ const tw = req("@tailwindcss/vite");
319
+ tailwindPlugin = tw.default();
320
+ }
321
+ catch {
322
+ // @tailwindcss/vite not installed — skip silently.
323
+ }
324
+ // Stub @alabjs/compiler in non-SSR (client) builds.
325
+ // generateBlurPlaceholder in Image.tsx has a dynamic import("@alabjs/compiler")
326
+ // that Vite's import-analysis picks up statically and errors on in the browser
327
+ // bundle. Returning a virtual empty module lets the dynamic import succeed at
328
+ // runtime (it returns {}) while keeping the real binary available on the server.
329
+ const COMPILER_STUB_ID = "\0@alabjs/compiler-stub";
330
+ const externalsPlugin = {
331
+ name: "alabjs:externals",
332
+ resolveId(id, _importer, opts) {
333
+ if (id === "@alabjs/compiler" && !opts?.ssr) {
334
+ return COMPILER_STUB_ID;
335
+ }
336
+ return null;
337
+ },
338
+ load(id) {
339
+ if (id === COMPILER_STUB_ID) {
340
+ return "export default {};\n";
341
+ }
342
+ return null;
343
+ },
344
+ };
345
+ return [externalsPlugin, corePlugin, ...(tailwindPlugin ? [tailwindPlugin] : [])];
346
+ }
347
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/napi.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ /** Minimal interface for the @alabjs/compiler napi binding. */
2
+ export interface AlabNapi {
3
+ compileSource(source: string, filename: string, minify: boolean, sourceMap: boolean): string;
4
+ checkBoundary(source: string, filename: string): string;
5
+ buildRoutes(appDir: string): string;
6
+ optimizeImage(input: Buffer, quality?: number | null, width?: number | null, height?: number | null, format?: string | null): Promise<Buffer>;
7
+ /** Returns JSON `Array<{ name: string; endpoint: string }>` */
8
+ extractServerFns(source: string, filename: string): string;
9
+ /** Returns an ES module stub replacing the real handler in client bundles. */
10
+ serverFnStub(name: string, endpoint: string): string;
11
+ }
12
+ //# sourceMappingURL=napi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"napi.d.ts","sourceRoot":"","sources":["../src/napi.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7F,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IACxD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,aAAa,CACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,EACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,+DAA+D;IAC/D,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3D,8EAA8E;IAC9E,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CACtD"}
package/dist/napi.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=napi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"napi.js","sourceRoot":"","sources":["../src/napi.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Parse a Rust/oxc compiler error message and extract source location.
3
+ *
4
+ * oxc formats errors like:
5
+ * × Expected `;` but found `}` (5:3)
6
+ * × Unexpected token (12:1)
7
+ * × ... ╭─[filename.ts:5:3]
8
+ *
9
+ * We try to extract `line:column` from anywhere in the message.
10
+ */
11
+ export declare function parseErrorLocation(message: string, file: string): {
12
+ file: string;
13
+ line: number;
14
+ column: number;
15
+ } | null;
16
+ /**
17
+ * Format a server boundary violation for display in the Vite error overlay.
18
+ */
19
+ export declare function formatBoundaryError(opts: {
20
+ import: string;
21
+ source: string;
22
+ offset?: number;
23
+ }): string;
24
+ //# sourceMappingURL=overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAoBvD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAOT"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Parse a Rust/oxc compiler error message and extract source location.
3
+ *
4
+ * oxc formats errors like:
5
+ * × Expected `;` but found `}` (5:3)
6
+ * × Unexpected token (12:1)
7
+ * × ... ╭─[filename.ts:5:3]
8
+ *
9
+ * We try to extract `line:column` from anywhere in the message.
10
+ */
11
+ export function parseErrorLocation(message, file) {
12
+ // Try `╭─[file:line:col]` (oxc rich format)
13
+ const richMatch = /╭─\[.+?:(\d+):(\d+)\]/.exec(message);
14
+ if (richMatch) {
15
+ return { file, line: parseInt(richMatch[1], 10), column: parseInt(richMatch[2], 10) };
16
+ }
17
+ // Try `(line:col)` at end or after ×
18
+ const parenMatch = /\((\d+):(\d+)\)/.exec(message);
19
+ if (parenMatch) {
20
+ return { file, line: parseInt(parenMatch[1], 10), column: parseInt(parenMatch[2], 10) };
21
+ }
22
+ // Try bare `line:col` in a common error format
23
+ const bareMatch = /:(\d+):(\d+)(?:\s|$)/.exec(message);
24
+ if (bareMatch) {
25
+ return { file, line: parseInt(bareMatch[1], 10), column: parseInt(bareMatch[2], 10) };
26
+ }
27
+ return null;
28
+ }
29
+ /**
30
+ * Format a server boundary violation for display in the Vite error overlay.
31
+ */
32
+ export function formatBoundaryError(opts) {
33
+ return (`Server boundary violation\n\n` +
34
+ ` Cannot import server module "${opts.import}" in a client context.\n\n` +
35
+ ` ✓ Use \`import type\` for type-only references (erased at compile time).\n` +
36
+ ` ✓ Move any runtime logic to a .server.ts file.`);
37
+ }
38
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,IAAY;IAEZ,4CAA4C;IAC5C,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC;IAED,qCAAqC;IACrC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC5F,CAAC;IAED,+CAA+C;IAC/C,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1F,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAInC;IACC,OAAO,CACL,+BAA+B;QAC/B,kCAAkC,IAAI,CAAC,MAAM,4BAA4B;QACzE,8EAA8E;QAC9E,kDAAkD,CACnD,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "alabjs-vite-plugin",
3
+ "version": "0.1.0",
4
+ "description": "Vite plugin that wires AlabJS's Rust compiler into the transform pipeline",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ }
12
+ },
13
+ "scripts": {
14
+ "build": "tsc -p tsconfig.json",
15
+ "dev": "tsc -p tsconfig.json --watch",
16
+ "typecheck": "tsc --noEmit",
17
+ "clean": "rm -rf dist"
18
+ },
19
+ "dependencies": {
20
+ "vite": "^8.0.0",
21
+ "react-refresh": "^0.14.0"
22
+ },
23
+ "optionalDependencies": {
24
+ "@alabjs/compiler": "workspace:*"
25
+ },
26
+ "devDependencies": {
27
+ "typescript": "^5.8.0",
28
+ "@types/node": "^22.0.0"
29
+ },
30
+ "peerDependencies": {
31
+ "vite": "^8.0.0",
32
+ "@tailwindcss/vite": "^4.0.0"
33
+ },
34
+ "peerDependenciesMeta": {
35
+ "@tailwindcss/vite": {
36
+ "optional": true
37
+ }
38
+ },
39
+ "engines": {
40
+ "node": ">=22"
41
+ },
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://github.com/thinkgrid-labs/alabjs.git"
45
+ }
46
+ }
@@ -0,0 +1,14 @@
1
+ declare module "@alabjs/compiler" {
2
+ export function compileSource(source: string, filename: string, minify: boolean): string;
3
+ export function checkBoundary(source: string, filename: string): string;
4
+ export function buildRoutes(appDir: string): string;
5
+ export function optimizeImage(
6
+ input: Buffer,
7
+ quality?: number | null,
8
+ width?: number | null,
9
+ height?: number | null,
10
+ format?: string | null,
11
+ ): Promise<Buffer>;
12
+ export function extractServerFns(source: string, filename: string): string;
13
+ export function serverFnStub(name: string, endpoint: string): string;
14
+ }
package/src/index.ts ADDED
@@ -0,0 +1,376 @@
1
+ import type { Plugin } from "vite";
2
+ import type { AlabNapi } from "./napi.js";
3
+ import { parseErrorLocation, formatBoundaryError } from "./overlay.js";
4
+ import { createRequire } from "node:module";
5
+ import { pathToFileURL } from "node:url";
6
+
7
+ interface AlabPluginOptions {
8
+ /** "dev" (default) or "build" */
9
+ mode?: "dev" | "build";
10
+ }
11
+
12
+ const VIRTUAL_CLIENT_ID = "/@alabjs/client";
13
+ const VIRTUAL_REFRESH_ID = "/@react-refresh";
14
+
15
+ /**
16
+ * Preamble injected into every HTML page in dev mode.
17
+ * Sets up the global $RefreshReg$ / $RefreshSig$ hooks that the Rust
18
+ * compiler (oxc_transformer enable_all) writes calls to in every TSX file.
19
+ */
20
+ const REACT_REFRESH_PREAMBLE = `
21
+ import RefreshRuntime from "${VIRTUAL_REFRESH_ID}";
22
+ RefreshRuntime.injectIntoGlobalHook(window);
23
+ window.$RefreshReg$ = () => {};
24
+ window.$RefreshSig$ = () => (type) => type;
25
+ window.__vite_plugin_react_preamble_installed__ = true;
26
+ `.trimStart();
27
+
28
+ /**
29
+ * Alab Vite Plugin
30
+ *
31
+ * - Replaces Vite's default esbuild transform for `.ts` / `.tsx` files with
32
+ * the Alab Rust compiler (oxc-based).
33
+ * - Enforces server/client boundary violations at transform time.
34
+ * - Serves the virtual `/@alabjs/client` module that hydrates the page on the
35
+ * client after SSR (reads route metadata from embedded `<meta>` tags).
36
+ * - Wires in Tailwind CSS v4 via `@tailwindcss/vite` (zero-config, optional).
37
+ */
38
+ export function alabPlugin(options: AlabPluginOptions = {}): Plugin[] {
39
+ let napi: AlabNapi | null = null;
40
+
41
+ const corePlugin: Plugin = {
42
+ name: "alabjs",
43
+ enforce: "pre",
44
+
45
+ async buildStart() {
46
+ try {
47
+ // CJS module imported via ESM dynamic import — functions land on .default
48
+ const mod = await import("@alabjs/compiler") as { default?: AlabNapi } & AlabNapi;
49
+ napi = (mod.default ?? mod) as AlabNapi;
50
+ } catch {
51
+ this.warn(
52
+ "alabjs-napi binary not found — falling back to esbuild. " +
53
+ "Run `cargo build --release -p alab-napi && bash scripts/copy-napi-binary.sh` to compile the Rust core.",
54
+ );
55
+ }
56
+ },
57
+
58
+ resolveId(id): string | null {
59
+ if (id === VIRTUAL_CLIENT_ID) return VIRTUAL_CLIENT_ID;
60
+ if (id === VIRTUAL_REFRESH_ID) return VIRTUAL_REFRESH_ID;
61
+ return null;
62
+ },
63
+
64
+ load(id): string | null {
65
+ if (id === VIRTUAL_REFRESH_ID) {
66
+ // Re-export the react-refresh runtime so the preamble can import it.
67
+ return `export { default } from "react-refresh/runtime";\n`;
68
+ }
69
+ if (id !== VIRTUAL_CLIENT_ID) return null;
70
+
71
+ // This module is injected into every page as `<script type="module" src="/@alabjs/client">`.
72
+ // It reads the route metadata embedded in <meta> tags by the SSR renderer and
73
+ // hydrates (or mounts) the React page component on the client.
74
+ // It also sets up window.__alabjs_navigate for the <Link> component.
75
+ return `
76
+ import "/app/globals.css";
77
+ import { createElement, Suspense } from "react";
78
+ import { hydrateRoot, createRoot } from "react-dom/client";
79
+ import { AlabProvider } from "alabjs/client";
80
+ import { ErrorBoundary } from "alabjs/components";
81
+
82
+ const meta = (name) => document.querySelector(\`meta[name="\${name}"]\`)?.getAttribute("content") ?? "";
83
+
84
+ /** Load a page module, its layout modules, and optional loading fallback. */
85
+ async function buildApp(routeFile, layoutFiles, loadingFile, params, searchParams) {
86
+ const mod = await import(/* @vite-ignore */ "/" + routeFile);
87
+ const Page = mod.default;
88
+ if (!Page) return null;
89
+
90
+ const layoutMods = await Promise.all(layoutFiles.map(f => import(/* @vite-ignore */ "/" + f)));
91
+ const layouts = layoutMods.map(m => m.default).filter(Boolean);
92
+
93
+ // Loading fallback: import loading.tsx if present
94
+ let loadingEl = null;
95
+ if (loadingFile) {
96
+ try {
97
+ const lMod = await import(/* @vite-ignore */ "/" + loadingFile);
98
+ const Loading = lMod.default;
99
+ if (Loading) loadingEl = createElement(Loading, {});
100
+ } catch {}
101
+ }
102
+
103
+ let el = createElement(Page, { params, searchParams });
104
+ // Wrap in Suspense with loading fallback
105
+ el = createElement(Suspense, { fallback: loadingEl ?? createElement("div", {}) }, el);
106
+ for (let i = layouts.length - 1; i >= 0; i--) {
107
+ el = createElement(layouts[i], {}, el);
108
+ }
109
+ return createElement(ErrorBoundary, {}, createElement(AlabProvider, {}, el));
110
+ }
111
+
112
+ let alabRoot = null;
113
+
114
+ const routeFile = meta("alabjs-route");
115
+ const ssrEnabled = meta("alabjs-ssr") === "true";
116
+ const params = JSON.parse(meta("alabjs-params") || "{}");
117
+ const searchParams = JSON.parse(meta("alabjs-search-params") || "{}");
118
+ const layoutFiles = JSON.parse(meta("alabjs-layouts") || "[]");
119
+ const loadingFile = meta("alabjs-loading") || null;
120
+
121
+ if (routeFile) {
122
+ const app = await buildApp(routeFile, layoutFiles, loadingFile, params, searchParams);
123
+ if (app) {
124
+ const root = document.getElementById("alabjs-root");
125
+ if (root) {
126
+ if (ssrEnabled && root.hasChildNodes()) {
127
+ alabRoot = hydrateRoot(root, app);
128
+ } else {
129
+ alabRoot = createRoot(root);
130
+ alabRoot.render(app);
131
+ }
132
+ }
133
+ }
134
+ }
135
+
136
+ /** SPA navigation — fetch target page and swap React root in-place. */
137
+ window.__alabjs_navigate = async (href) => {
138
+ try {
139
+ const res = await fetch(href, { headers: { "x-alabjs-prefetch": "1" } });
140
+ if (!res.ok) { window.location.href = href; return; }
141
+ const html = await res.text();
142
+
143
+ const parser = new DOMParser();
144
+ const doc = parser.parseFromString(html, "text/html");
145
+
146
+ const newMeta = (name) => doc.querySelector(\`meta[name="\${name}"]\`)?.getAttribute("content") ?? "";
147
+ const newRouteFile = newMeta("alabjs-route");
148
+ const newParams = JSON.parse(newMeta("alabjs-params") || "{}");
149
+ const newSearchParams = JSON.parse(newMeta("alabjs-search-params") || "{}");
150
+ const newLayoutFiles = JSON.parse(newMeta("alabjs-layouts") || "[]");
151
+ const newLoadingFile = newMeta("alabjs-loading") || null;
152
+
153
+ // Update document title
154
+ const newTitle = doc.querySelector("title")?.textContent;
155
+ if (newTitle) document.title = newTitle;
156
+
157
+ history.pushState({}, "", href);
158
+
159
+ if (newRouteFile && alabRoot) {
160
+ const app = await buildApp(newRouteFile, newLayoutFiles, newLoadingFile, newParams, newSearchParams);
161
+ if (app) alabRoot.render(app);
162
+ }
163
+
164
+ // Scroll to top on navigation (matches browser behaviour)
165
+ window.scrollTo(0, 0);
166
+ } catch {
167
+ // Network error — fall back to full navigation
168
+ window.location.href = href;
169
+ }
170
+ };
171
+
172
+ // Handle browser back / forward
173
+ window.addEventListener("popstate", () => {
174
+ window.__alabjs_navigate(location.pathname + location.search);
175
+ });
176
+
177
+ // ─── Dev boundary overlay (Alt+Shift+B to toggle) ─────────────────────────
178
+ if (import.meta.env.DEV) {
179
+ let overlayActive = false;
180
+ let panel = null;
181
+ let rootOutline = null;
182
+
183
+ const toggle = () => {
184
+ overlayActive = !overlayActive;
185
+
186
+ if (!overlayActive) {
187
+ panel?.remove(); panel = null;
188
+ rootOutline?.remove(); rootOutline = null;
189
+ return;
190
+ }
191
+
192
+ // ── Root highlight ──────────────────────────────────────────────────────
193
+ const root = document.getElementById("alabjs-root");
194
+ if (root) {
195
+ rootOutline = document.createElement("div");
196
+ Object.assign(rootOutline.style, {
197
+ position: "fixed", inset: 0, pointerEvents: "none", zIndex: 99998,
198
+ outline: "2px solid rgba(99,102,241,0.6)", outlineOffset: "-2px",
199
+ });
200
+ document.body.appendChild(rootOutline);
201
+ }
202
+
203
+ // ── Info panel ──────────────────────────────────────────────────────────
204
+ const ssr = meta("alabjs-ssr") === "true";
205
+ const route = meta("alabjs-route");
206
+ const layouts = JSON.parse(meta("alabjs-layouts") || "[]");
207
+ const loading = meta("alabjs-loading");
208
+ const cache = document.querySelector("meta[name='alabjs-cache']")?.getAttribute("content") ?? null;
209
+
210
+ panel = document.createElement("div");
211
+ Object.assign(panel.style, {
212
+ position: "fixed", bottom: "12px", left: "12px", zIndex: 99999,
213
+ background: "rgba(15,15,20,0.92)", backdropFilter: "blur(8px)",
214
+ border: "1px solid rgba(99,102,241,0.5)", borderRadius: "8px",
215
+ padding: "10px 14px", color: "#e2e8f0", fontFamily: "monospace",
216
+ fontSize: "11px", lineHeight: "1.6", maxWidth: "340px",
217
+ boxShadow: "0 4px 24px rgba(0,0,0,0.5)",
218
+ });
219
+
220
+ const badge = (label, color) =>
221
+ \`<span style="background:\${color};color:#fff;border-radius:4px;padding:1px 6px;font-size:10px;font-weight:700">\${label}</span>\`;
222
+
223
+ const layoutRows = layouts.map(l =>
224
+ \`<div style="color:#94a3b8;padding-left:8px">↳ \${l}</div>\`
225
+ ).join("");
226
+
227
+ panel.innerHTML = [
228
+ \`<div style="margin-bottom:6px;display:flex;align-items:center;gap:6px">\`,
229
+ \` \${badge(ssr ? "SSR" : "CSR", ssr ? "#6366f1" : "#f59e0b")}\`,
230
+ cache ? \` \${badge("ISR " + cache, "#10b981")}\` : "",
231
+ \` <span style="color:#64748b;font-size:10px">Alt+Shift+B to close</span>\`,
232
+ \`</div>\`,
233
+ \`<div><span style="color:#64748b">route </span>\${route || "—"}</div>\`,
234
+ layouts.length ? \`<div style="color:#64748b">layouts</div>\${layoutRows}\` : "",
235
+ loading ? \`<div><span style="color:#64748b">loading</span> \${loading}</div>\` : "",
236
+ ].join("\\n");
237
+
238
+ document.body.appendChild(panel);
239
+ };
240
+
241
+ window.addEventListener("keydown", (e) => {
242
+ if (e.altKey && e.shiftKey && e.key === "B") toggle();
243
+ });
244
+ }
245
+ `.trimStart();
246
+ },
247
+
248
+ transformIndexHtml(html, ctx) {
249
+ // Inject the react-refresh preamble only in dev (SSR has no window).
250
+ if (ctx.server == null) return html; // production build — skip
251
+ const preambleTag = `<script type="module">\n${REACT_REFRESH_PREAMBLE}</script>`;
252
+ return html.replace(/(<head[^>]*>)/i, `$1\n${preambleTag}`);
253
+ },
254
+
255
+ async transform(
256
+ code,
257
+ id,
258
+ transformOptions,
259
+ ): Promise<{ code: string; map: string | null } | null> {
260
+ if (!napi) return null;
261
+ if (!/\.(ts|tsx)$/.test(id)) return null;
262
+ if (id.includes("node_modules")) return null;
263
+
264
+ const isServerFile = /\.server\.(ts|tsx)$/.test(id);
265
+ const isClientBuild = !(transformOptions as { ssr?: boolean } | undefined)?.ssr;
266
+
267
+ // Skip Rust compiler for SSR transforms — the Rust compiler injects React
268
+ // Fast Refresh globals ($RefreshReg$) that don't exist in the SSR context.
269
+ // esbuild (Vite's default) handles SSR compilation correctly.
270
+ if (!isClientBuild) return null;
271
+
272
+ // Server files in a CLIENT build context: extract defineServerFn declarations
273
+ // and replace the entire module with fetch stubs so server code never ships
274
+ // to the browser (DB calls, secrets, heavy deps, etc.).
275
+ if (isServerFile && isClientBuild) {
276
+ const serverFnsJson = napi.extractServerFns(code, id);
277
+ const serverFns = JSON.parse(serverFnsJson) as Array<{
278
+ name: string;
279
+ endpoint: string;
280
+ }>;
281
+ if (serverFns.length > 0) {
282
+ const stubs = serverFns
283
+ .map((fn) => napi!.serverFnStub(fn.name, fn.endpoint))
284
+ .join("\n");
285
+ return { code: stubs, map: null };
286
+ }
287
+ // No defineServerFn exports found — emit an empty module so imports don't break.
288
+ return { code: "// alabjs: server module stripped from client bundle\n", map: null };
289
+ }
290
+
291
+ // Check server-boundary violations in non-server files.
292
+ if (!isServerFile) {
293
+ const violationsJson = napi.checkBoundary(code, id);
294
+ const violations = JSON.parse(violationsJson) as Array<{
295
+ import: string;
296
+ source: string;
297
+ offset: number;
298
+ }>;
299
+ for (const v of violations) {
300
+ this.error(formatBoundaryError(v));
301
+ }
302
+ }
303
+
304
+ // Compile TypeScript/TSX with the Rust compiler.
305
+ // Catch errors and attach source location so Vite's overlay shows
306
+ // the exact line/column instead of a raw stack trace.
307
+ const minify = options.mode === "build";
308
+ // Emit source maps in dev mode so browser devtools map to original TS/TSX.
309
+ const sourceMap = !minify;
310
+ let outputJson: string;
311
+ try {
312
+ outputJson = napi.compileSource(code, id, minify, sourceMap);
313
+ } catch (err) {
314
+ const message = err instanceof Error ? err.message : String(err);
315
+ const loc = parseErrorLocation(message, id);
316
+ this.error(message, loc ?? undefined);
317
+ }
318
+ const output = JSON.parse(outputJson!) as { code: string; map: string | null };
319
+
320
+ let finalCode = output.code;
321
+
322
+ // In dev mode, append the react-refresh HMR accept footer to TSX files.
323
+ // This tells Vite the module self-accepts so hot updates stay component-
324
+ // level instead of propagating to a full page reload.
325
+ // The $RefreshReg$ / $RefreshSig$ calls are already emitted by the Rust
326
+ // compiler (oxc_transformer::enable_all includes the react-refresh pass).
327
+ if (!minify && /\.tsx$/.test(id)) {
328
+ finalCode +=
329
+ `\nimport __RefreshRuntime__ from "${VIRTUAL_REFRESH_ID}";` +
330
+ `\nif (import.meta.hot) {` +
331
+ `\n import.meta.hot.accept();` +
332
+ `\n __RefreshRuntime__.performReactRefresh();` +
333
+ `\n}`;
334
+ }
335
+
336
+ return { code: finalCode, map: output.map ?? null };
337
+ },
338
+ };
339
+
340
+ // Tailwind CSS v4 — zero-config, auto-detects utility classes in source files.
341
+ // Installed by default via `create-alabjs`; gracefully skipped if absent.
342
+ // Use createRequire from the project root (process.cwd()) so that the package
343
+ // is found in the user's node_modules, not the plugin's node_modules.
344
+ let tailwindPlugin: Plugin | null = null;
345
+ try {
346
+ const req = createRequire(pathToFileURL(process.cwd() + "/package.json").href);
347
+ const tw = req("@tailwindcss/vite") as { default: () => Plugin };
348
+ tailwindPlugin = tw.default();
349
+ } catch {
350
+ // @tailwindcss/vite not installed — skip silently.
351
+ }
352
+
353
+ // Stub @alabjs/compiler in non-SSR (client) builds.
354
+ // generateBlurPlaceholder in Image.tsx has a dynamic import("@alabjs/compiler")
355
+ // that Vite's import-analysis picks up statically and errors on in the browser
356
+ // bundle. Returning a virtual empty module lets the dynamic import succeed at
357
+ // runtime (it returns {}) while keeping the real binary available on the server.
358
+ const COMPILER_STUB_ID = "\0@alabjs/compiler-stub";
359
+ const externalsPlugin: Plugin = {
360
+ name: "alabjs:externals",
361
+ resolveId(id, _importer, opts): string | null {
362
+ if (id === "@alabjs/compiler" && !(opts as { ssr?: boolean } | undefined)?.ssr) {
363
+ return COMPILER_STUB_ID;
364
+ }
365
+ return null;
366
+ },
367
+ load(id): string | null {
368
+ if (id === COMPILER_STUB_ID) {
369
+ return "export default {};\n";
370
+ }
371
+ return null;
372
+ },
373
+ };
374
+
375
+ return [externalsPlugin, corePlugin, ...(tailwindPlugin ? [tailwindPlugin] : [])];
376
+ }
package/src/napi.ts ADDED
@@ -0,0 +1,17 @@
1
+ /** Minimal interface for the @alabjs/compiler napi binding. */
2
+ export interface AlabNapi {
3
+ compileSource(source: string, filename: string, minify: boolean, sourceMap: boolean): string;
4
+ checkBoundary(source: string, filename: string): string;
5
+ buildRoutes(appDir: string): string;
6
+ optimizeImage(
7
+ input: Buffer,
8
+ quality?: number | null,
9
+ width?: number | null,
10
+ height?: number | null,
11
+ format?: string | null,
12
+ ): Promise<Buffer>;
13
+ /** Returns JSON `Array<{ name: string; endpoint: string }>` */
14
+ extractServerFns(source: string, filename: string): string;
15
+ /** Returns an ES module stub replacing the real handler in client bundles. */
16
+ serverFnStub(name: string, endpoint: string): string;
17
+ }
package/src/overlay.ts ADDED
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Parse a Rust/oxc compiler error message and extract source location.
3
+ *
4
+ * oxc formats errors like:
5
+ * × Expected `;` but found `}` (5:3)
6
+ * × Unexpected token (12:1)
7
+ * × ... ╭─[filename.ts:5:3]
8
+ *
9
+ * We try to extract `line:column` from anywhere in the message.
10
+ */
11
+ export function parseErrorLocation(
12
+ message: string,
13
+ file: string,
14
+ ): { file: string; line: number; column: number } | null {
15
+ // Try `╭─[file:line:col]` (oxc rich format)
16
+ const richMatch = /╭─\[.+?:(\d+):(\d+)\]/.exec(message);
17
+ if (richMatch) {
18
+ return { file, line: parseInt(richMatch[1]!, 10), column: parseInt(richMatch[2]!, 10) };
19
+ }
20
+
21
+ // Try `(line:col)` at end or after ×
22
+ const parenMatch = /\((\d+):(\d+)\)/.exec(message);
23
+ if (parenMatch) {
24
+ return { file, line: parseInt(parenMatch[1]!, 10), column: parseInt(parenMatch[2]!, 10) };
25
+ }
26
+
27
+ // Try bare `line:col` in a common error format
28
+ const bareMatch = /:(\d+):(\d+)(?:\s|$)/.exec(message);
29
+ if (bareMatch) {
30
+ return { file, line: parseInt(bareMatch[1]!, 10), column: parseInt(bareMatch[2]!, 10) };
31
+ }
32
+
33
+ return null;
34
+ }
35
+
36
+ /**
37
+ * Format a server boundary violation for display in the Vite error overlay.
38
+ */
39
+ export function formatBoundaryError(opts: {
40
+ import: string;
41
+ source: string;
42
+ offset?: number;
43
+ }): string {
44
+ return (
45
+ `Server boundary violation\n\n` +
46
+ ` Cannot import server module "${opts.import}" in a client context.\n\n` +
47
+ ` ✓ Use \`import type\` for type-only references (erased at compile time).\n` +
48
+ ` ✓ Move any runtime logic to a .server.ts file.`
49
+ );
50
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "rootDir": "src",
5
+ "outDir": "dist"
6
+ },
7
+ "include": ["src/**/*"]
8
+ }
@@ -0,0 +1 @@
1
+ {"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/compiler.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.15/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/types/hmrPayload.d.ts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/dist/node/chunks/moduleRunnerTransport.d.ts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/types/customEvent.d.ts","../../node_modules/.pnpm/rolldown@1.0.0-rc.9/node_modules/rolldown/dist/shared/logging-C6h4g8dA.d.mts","../../node_modules/.pnpm/@oxc-project+types@0.115.0/node_modules/@oxc-project/types/types.d.ts","../../node_modules/.pnpm/rolldown@1.0.0-rc.9/node_modules/rolldown/dist/shared/binding-BohGL_65.d.mts","../../node_modules/.pnpm/@rolldown+pluginutils@1.0.0-rc.9/node_modules/@rolldown/pluginutils/dist/filter/composable-filters.d.ts","../../node_modules/.pnpm/@rolldown+pluginutils@1.0.0-rc.9/node_modules/@rolldown/pluginutils/dist/filter/filter-vite-plugins.d.ts","../../node_modules/.pnpm/@rolldown+pluginutils@1.0.0-rc.9/node_modules/@rolldown/pluginutils/dist/filter/simple-filters.d.ts","../../node_modules/.pnpm/@rolldown+pluginutils@1.0.0-rc.9/node_modules/@rolldown/pluginutils/dist/filter/index.d.ts","../../node_modules/.pnpm/@rolldown+pluginutils@1.0.0-rc.9/node_modules/@rolldown/pluginutils/dist/index.d.ts","../../node_modules/.pnpm/rolldown@1.0.0-rc.9/node_modules/rolldown/dist/shared/define-config-cG45vHwf.d.mts","../../node_modules/.pnpm/rolldown@1.0.0-rc.9/node_modules/rolldown/dist/index.d.mts","../../node_modules/.pnpm/rolldown@1.0.0-rc.9/node_modules/rolldown/dist/parse-ast-index.d.mts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/types/internal/rollupTypeCompat.d.ts","../../node_modules/.pnpm/rolldown@1.0.0-rc.9/node_modules/rolldown/dist/shared/constructors-DNuo4d0H.d.mts","../../node_modules/.pnpm/rolldown@1.0.0-rc.9/node_modules/rolldown/dist/plugins-index.d.mts","../../node_modules/.pnpm/rolldown@1.0.0-rc.9/node_modules/rolldown/dist/shared/transform-BoJxrM-e.d.mts","../../node_modules/.pnpm/rolldown@1.0.0-rc.9/node_modules/rolldown/dist/utils-index.d.mts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/types/hot.d.ts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/dist/node/module-runner.d.ts","../../node_modules/.pnpm/esbuild@0.21.5/node_modules/esbuild/lib/main.d.ts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/types/internal/esbuildOptions.d.ts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/types/metadata.d.ts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/types/internal/terserOptions.d.ts","../../node_modules/.pnpm/source-map-js@1.2.1/node_modules/source-map-js/source-map.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/previous-map.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/input.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/css-syntax-error.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/declaration.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/root.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/warning.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/lazy-result.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/no-work-result.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/processor.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/result.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/document.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/rule.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/node.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/comment.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/container.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/at-rule.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/list.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/postcss.d.ts","../../node_modules/.pnpm/postcss@8.5.8/node_modules/postcss/lib/postcss.d.mts","../../node_modules/.pnpm/lightningcss@1.32.0/node_modules/lightningcss/node/ast.d.ts","../../node_modules/.pnpm/lightningcss@1.32.0/node_modules/lightningcss/node/targets.d.ts","../../node_modules/.pnpm/lightningcss@1.32.0/node_modules/lightningcss/node/index.d.ts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/types/internal/lightningcssOptions.d.ts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","../../node_modules/.pnpm/rolldown@1.0.0-rc.9/node_modules/rolldown/dist/filter-index.d.mts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/types/importGlob.d.ts","../../node_modules/.pnpm/vite@8.0.0_@types+node@22.19.15_jiti@2.6.1/node_modules/vite/dist/node/index.d.ts","./src/napi.ts","./src/overlay.ts","../../crates/alab-napi/index.d.ts","./src/index.ts"],"fileIdsList":[[66,114,131,132],[66,114,131,132,171,172,173],[66,114,131,132,174],[66,111,112,114,131,132],[66,113,114,131,132],[114,131,132],[66,114,119,131,132,149],[66,114,115,120,125,131,132,134,146,157],[66,114,115,116,125,131,132,134],[61,62,63,66,114,131,132],[66,114,117,131,132,158],[66,114,118,119,126,131,132,135],[66,114,119,131,132,146,154],[66,114,120,122,125,131,132,134],[66,113,114,121,131,132],[66,114,122,123,131,132],[66,114,124,125,131,132],[66,113,114,125,131,132],[66,114,125,126,127,131,132,146,157],[66,114,125,126,127,131,132,141,146,149],[66,107,114,122,125,128,131,132,134,146,157],[66,114,125,126,128,129,131,132,134,146,154,157],[66,114,128,130,131,132,146,154,157],[64,65,66,67,68,69,70,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[66,114,125,131,132],[66,114,131,132,133,157],[66,114,122,125,131,132,134,146],[66,114,131,132,135],[66,114,131,132,136],[66,113,114,131,132,137],[66,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163],[66,114,131,132,139],[66,114,131,132,140],[66,114,125,131,132,141,142],[66,114,131,132,141,143,158,160],[66,114,126,131,132],[66,114,125,131,132,146,147,149],[66,114,131,132,148,149],[66,114,131,132,146,147],[66,114,131,132,149],[66,114,131,132,150],[66,111,114,131,132,146,151,157],[66,114,125,131,132,152,153],[66,114,131,132,152,153],[66,114,119,131,132,134,146,154],[66,114,131,132,155],[66,114,131,132,134,156],[66,114,128,131,132,140,157],[66,114,119,131,132,158],[66,114,131,132,146,159],[66,114,131,132,133,160],[66,114,131,132,161],[66,107,114,131,132],[66,107,114,125,127,131,132,137,146,149,157,159,160,162],[66,114,131,132,146,163],[66,114,131,132,210,211],[66,114,131,132,205],[66,114,131,132,203,205],[66,114,131,132,194,202,203,204,206,208],[66,114,131,132,192],[66,114,131,132,195,200,205,208],[66,114,131,132,191,208],[66,114,131,132,195,196,199,200,201,208],[66,114,131,132,195,196,197,199,200,208],[66,114,131,132,192,193,194,195,196,200,201,202,204,205,206,208],[66,114,131,132,208],[66,114,131,132,190,192,193,194,195,196,197,199,200,201,202,203,204,205,206,207],[66,114,131,132,190,208],[66,114,131,132,195,197,198,200,201,208],[66,114,131,132,199,208],[66,114,131,132,200,201,205,208],[66,114,131,132,193,203],[66,114,131,132,170,176],[66,114,131,132,168,170,176],[66,114,131,132,169,170],[66,114,131,132,170,176,180],[66,114,131,132,169],[66,114,131,132,168,169,170,175],[66,114,131,132,168,170],[66,114,131,132,169,170,182],[66,79,83,114,131,132,157],[66,79,114,131,132,146,157],[66,74,114,131,132],[66,76,79,114,131,132,154,157],[66,114,131,132,134,154],[66,114,131,132,164],[66,74,114,131,132,164],[66,76,79,114,131,132,134,157],[66,71,72,75,78,114,125,131,132,146,157],[66,79,86,114,131,132],[66,71,77,114,131,132],[66,79,100,101,114,131,132],[66,75,79,114,131,132,149,157,164],[66,100,114,131,132,164],[66,73,74,114,131,132,164],[66,79,114,131,132],[66,73,74,75,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,101,102,103,104,105,106,114,131,132],[66,79,94,114,131,132],[66,79,86,87,114,131,132],[66,77,79,87,88,114,131,132],[66,78,114,131,132],[66,71,74,79,114,131,132],[66,79,83,87,88,114,131,132],[66,83,114,131,132],[66,77,79,82,114,131,132,157],[66,71,76,79,86,114,131,132],[66,114,131,132,146],[66,74,79,100,114,131,132,162,164],[66,114,131,132,165],[66,114,125,126,128,129,130,131,132,134,146,154,157,163,164,165,166,167,177,178,179,181,183,185,187,188,189,209,213,214,215,216,217],[66,114,131,132,165,166,167,184],[66,114,131,132,167],[66,114,131,132,186],[66,114,131,132,212],[66,114,131,132,177,188,217],[66,114,131,132,177,217],[60,66,114,131,132,133,157,217,218,219]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"92ed772df70e9236c59f2f6d5c55c068a1bdbb1a1d8dd3fb4cfe16d7d5021d94","impliedFormat":99},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b039f55681caaf111d5eb84d292b9bee9e0131d0db1ad0871eef0964f533c73","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"3b89216a7e38a454985ad17bb2ff85792837dc812f2a89fa5f60ad0a2e216fa7","impliedFormat":99},{"version":"10073cdcf56982064c5337787cc59b79586131e1b28c106ede5bff362f912b70","impliedFormat":99},{"version":"82179358c2d9d7347f1602dc9300039a2250e483137b38ebf31d4d2e5519c181","impliedFormat":99},{"version":"c73fdf42528325dd17940937ed787b15ae3445c6a2dae1a2b74bc4d87d337ca2","impliedFormat":99},{"version":"08b97f6a8e66afc82e8e536b786e620e74cb5496292d882f971bb72579393935","impliedFormat":99},{"version":"8f94cf4d829f82d6469b2300e7dc05e8c630395f6aef68e75f7a76f1d2bfe632","impliedFormat":99},{"version":"148debd12783ded0a60d115daeacd8136f77757ae89a05c4e18de6dd77646fd2","impliedFormat":99},{"version":"0088b02dca63c47b273a140d0a3944bdc6dc2eb765fff0ca98e3c3a2786b3a5a","impliedFormat":99},{"version":"a651d06b780fa354231f19b040cbcde484bede3218885752b4f9e9a8f72d3b5f","impliedFormat":99},{"version":"06e26f75bed4c8389a8a63f0e6d6a9068038873dc95d8d1338e8c370a0ae8bc3","impliedFormat":99},{"version":"a2155e2675fd1af52b0b70779371c28611cdd1076b29d0f68bf93b983e5ddce0","impliedFormat":99},{"version":"c049bdb01dd6d0697b764db592381693c8cfec4cba496648b13f261202386976","impliedFormat":99},{"version":"515bf30a1d5356c4a1b58c5e42f3bf65078ab41e955e233bd2c0093625059b9c","impliedFormat":99},{"version":"d0bdb3239791558ea54e1fa0818f3d5bb72078b9102d478d19b9134ec7f1026c","impliedFormat":99},{"version":"7d3e062a778b8f5ea4f0cac7e925e31f88e6739812ebc5f827474324a4048f14","impliedFormat":99},{"version":"a6d25f46d14f51741fd4aa6f63766871813b13dbecfe2329585d811480b93a45","impliedFormat":99},{"version":"2bff81382850153cb016673d0130a13247fb0335524f3f6d38370801ddb9c394","impliedFormat":99},{"version":"83c1d9200c038c329064a4e1d78ba3e89ce6b0affc557cccbad5ea9898183dec","impliedFormat":99},{"version":"cde43bd8c0d59505f80ef51b62fa759a10f9d7526162348448afb9d5601a0642","impliedFormat":99},{"version":"4e003c868b0d8f8ad200b96cbc653e18e513fa23e1c19c4fe3cc25d4394efc47","impliedFormat":99},{"version":"091546ac9077cddcd7b9479cc2e0c677238bf13e39eab4b13e75046c3328df93","impliedFormat":99},{"version":"bacf2c84cf448b2cd02c717ad46c3d7fd530e0c91282888c923ad64810a4d511","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0864480ea083087d705f9405bd6bf59b795e8474c3447f0d6413b2bce535a09","impliedFormat":99},{"version":"e67cbea16f1994af89efd700542dbf3828a46a52b29e4d67e801bd7869dc103c","impliedFormat":99},{"version":"f582b0fcbf1eea9b318ab92fb89ea9ab2ebb84f9b60af89328a91155e1afce72","impliedFormat":99},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"7965dc3c7648e2a7a586d11781cabb43d4859920716bc2fdc523da912b06570d","impliedFormat":1},{"version":"90c2bd9a3e72fe08b8fa5982e78cb8dc855a1157b26e11e37a793283c52bf64b","impliedFormat":1},{"version":"a8122fe390a2a987079e06c573b1471296114677923c1c094c24a53ddd7344a2","impliedFormat":1},{"version":"70c2cb19c0c42061a39351156653aa0cf5ba1ecdc8a07424dd38e3a1f1e3c7f4","impliedFormat":1},{"version":"a8fb10fd8c7bc7d9b8f546d4d186d1027f8a9002a639bec689b5000dab68e35c","impliedFormat":1},{"version":"c9b467ea59b86bd27714a879b9ad43c16f186012a26d0f7110b1322025ceaa83","impliedFormat":1},{"version":"57ea19c2e6ba094d8087c721bac30ff1c681081dbd8b167ac068590ef633e7a5","impliedFormat":1},{"version":"cba81ec9ae7bc31a4dc56f33c054131e037649d6b9a2cfa245124c67e23e4721","impliedFormat":1},{"version":"ad193f61ba708e01218496f093c23626aa3808c296844a99189be7108a9c8343","impliedFormat":1},{"version":"a0544b3c8b70b2f319a99ea380b55ab5394ede9188cdee452a5d0ce264f258b2","impliedFormat":1},{"version":"8c654c17c334c7c168c1c36e5336896dc2c892de940886c1639bebd9fc7b9be4","impliedFormat":1},{"version":"6a4da742485d5c2eb6bcb322ae96993999ffecbd5660b0219a5f5678d8225bb0","impliedFormat":1},{"version":"c65ca21d7002bdb431f9ab3c7a6e765a489aa5196e7e0ef00aed55b1294df599","impliedFormat":1},{"version":"c8fc655c2c4bafc155ceee01c84ab3d6c03192ced5d3f2de82e20f3d1bd7f9fa","impliedFormat":1},{"version":"be5a7ff3b47f7e553565e9483bdcadb0ca2040ac9e5ec7b81c7e115a81059882","impliedFormat":1},{"version":"1a93f36ecdb60a95e3a3621b561763e2952da81962fae217ab5441ac1d77ffc5","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"3fd8a5aefd8c3feb3936ca66f5aa89dff7bf6e6537b4158dbd0f6e0d65ed3b9e","impliedFormat":1},{"version":"a18642ddf216f162052a16cba0944892c4c4c977d3306a87cb673d46abbb0cbf","impliedFormat":1},{"version":"41c41c6e90133bb2a14f7561f29944771886e5535945b2b372e2f6ed6987746e","impliedFormat":1},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":99},{"version":"960bd764c62ac43edc24eaa2af958a4b4f1fa5d27df5237e176d0143b36a39c6","affectsGlobalScope":true,"impliedFormat":99},{"version":"a99bfaebce194209dbf7290663af01aaff57cf6b4089810eea5c8ec72a2c9cc2","impliedFormat":99},{"version":"59f8dc89b9e724a6a667f52cdf4b90b6816ae6c9842ce176d38fcc973669009e","affectsGlobalScope":true,"impliedFormat":99},{"version":"68ead79e0f4b5576e2f17c5422039ecf5d56a20dc515ef593750411fbbe475bf","impliedFormat":99},{"version":"e565979bccff641a7bd736320039afe252e80de34daadeaaf41f1139040375e3","signature":"fc2f5acb2e104005257c6614ad78f816978ee7f3a649503d6f251bb3382ea14d","impliedFormat":99},{"version":"7a943d93d26ff9ed538ba3b67f82ec6d63a176b61858ecdf37be072507653b99","signature":"914eb37085ec99891bd1446f9f7a3ff9f120d0c61bd2be5c8e73cb9dfb0fa66b","impliedFormat":99},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"855c3d312869f550e2416d4b5ccc3358e59409f74e64356d8fed62b58d0fbf4c","signature":"3edf9e8fad2ff22a3dd33ad3d65348199eeaba3062cfdfd8b4a02ffe81a98fab","impliedFormat":99}],"root":[60,218,219,221],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":199,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noPropertyAccessFromIndexSignature":true,"noUncheckedIndexedAccess":true,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"verbatimModuleSyntax":true},"referencedMap":[[220,1],[169,1],[171,1],[172,1],[174,2],[173,1],[175,3],[111,4],[112,4],[113,5],[66,6],[114,7],[115,8],[116,9],[61,1],[64,10],[62,1],[63,1],[117,11],[118,12],[119,13],[120,14],[121,15],[122,16],[123,16],[124,17],[125,18],[126,19],[127,20],[67,1],[65,1],[128,21],[129,22],[130,23],[164,24],[131,25],[132,1],[133,26],[134,27],[135,28],[136,29],[137,30],[138,31],[139,32],[140,33],[141,34],[142,34],[143,35],[144,1],[145,36],[146,37],[148,38],[147,39],[149,40],[150,41],[151,42],[152,43],[153,44],[154,45],[155,46],[156,47],[157,48],[158,49],[159,50],[160,51],[161,52],[68,1],[69,1],[70,1],[108,53],[109,1],[110,1],[162,54],[163,55],[186,1],[210,1],[212,56],[211,1],[206,57],[204,58],[205,59],[193,60],[194,58],[201,61],[192,62],[197,63],[207,1],[198,64],[203,65],[209,66],[208,67],[191,68],[199,69],[200,70],[195,71],[202,57],[196,72],[215,73],[177,74],[178,75],[181,76],[170,77],[180,73],[176,78],[168,1],[182,79],[183,80],[190,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[86,81],[96,82],[85,81],[106,83],[77,84],[76,85],[105,86],[99,87],[104,88],[79,89],[93,90],[78,91],[102,92],[74,93],[73,86],[103,94],[75,95],[80,96],[81,1],[84,96],[71,1],[107,97],[97,98],[88,99],[89,100],[91,101],[87,102],[90,103],[100,86],[82,104],[83,105],[92,106],[72,107],[95,98],[94,96],[98,1],[101,108],[166,109],[217,110],[185,111],[167,109],[165,1],[184,112],[216,1],[214,1],[187,113],[213,114],[179,115],[189,1],[188,116],[60,1],[221,117],[218,1],[219,1]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.9.3"}