| import path from "node:path"; |
| import { existsSync } from "node:fs"; |
| import { fileURLToPath } from "node:url"; |
|
|
| const here = path.dirname(fileURLToPath(import.meta.url)); |
| const repoRoot = path.resolve(here, "../../../../.."); |
| const uiRoot = path.resolve(repoRoot, "ui"); |
| const fromHere = (p) => path.resolve(here, p); |
| const outputFile = path.resolve( |
| here, |
| "../../../../..", |
| "src", |
| "canvas-host", |
| "a2ui", |
| "a2ui.bundle.js", |
| ); |
|
|
| const a2uiLitDist = path.resolve(repoRoot, "vendor/a2ui/renderers/lit/dist/src"); |
| const a2uiThemeContext = path.resolve(a2uiLitDist, "0.8/ui/context/theme.js"); |
| const uiNodeModules = path.resolve(uiRoot, "node_modules"); |
| const repoNodeModules = path.resolve(repoRoot, "node_modules"); |
|
|
| function resolveUiDependency(moduleId) { |
| const candidates = [ |
| path.resolve(uiNodeModules, moduleId), |
| path.resolve(repoNodeModules, moduleId), |
| ]; |
| for (const candidate of candidates) { |
| if (existsSync(candidate)) { |
| return candidate; |
| } |
| } |
|
|
| const fallbackCandidates = candidates.join(", "); |
| throw new Error( |
| `A2UI bundle config cannot resolve ${moduleId}. Checked: ${fallbackCandidates}. ` + |
| "Keep dependency installed in ui workspace or repo root before bundling.", |
| ); |
| } |
|
|
| export default { |
| input: fromHere("bootstrap.js"), |
| experimental: { |
| attachDebugInfo: "none", |
| }, |
| treeshake: false, |
| resolve: { |
| alias: { |
| "@a2ui/lit": path.resolve(a2uiLitDist, "index.js"), |
| "@a2ui/lit/ui": path.resolve(a2uiLitDist, "0.8/ui/ui.js"), |
| "@openclaw/a2ui-theme-context": a2uiThemeContext, |
| "@lit/context": resolveUiDependency("@lit/context"), |
| "@lit/context/": resolveUiDependency("@lit/context/"), |
| "@lit-labs/signals": resolveUiDependency("@lit-labs/signals"), |
| "@lit-labs/signals/": resolveUiDependency("@lit-labs/signals/"), |
| lit: resolveUiDependency("lit"), |
| "lit/": resolveUiDependency("lit/"), |
| "signal-utils/": resolveUiDependency("signal-utils/"), |
| }, |
| }, |
| output: { |
| file: outputFile, |
| format: "esm", |
| codeSplitting: false, |
| sourcemap: false, |
| }, |
| }; |
|
|