// Control UI config module wires control ui chunking behavior. function normalizeModuleId(id: string): string { return id.replace(/\\/g, "/"); } function moduleIdIncludesPackage(id: string, packageName: string): boolean { const normalized = normalizeModuleId(id); return ( normalized.includes(`/node_modules/${packageName}/`) || normalized.includes(`/openclaw-pnpm-node-modules/${packageName}/`) ); } export function controlUiStableChunkName(id: string): string | undefined { const normalized = normalizeModuleId(id); if (normalized.endsWith("/ui/src/lib/gateway-methods.ts")) { return "gateway-runtime"; } if ( moduleIdIncludesPackage(id, "lit") || moduleIdIncludesPackage(id, "lit-html") || moduleIdIncludesPackage(id, "@lit/reactive-element") ) { return "lit-runtime"; } if ( moduleIdIncludesPackage(id, "highlight.js") || moduleIdIncludesPackage(id, "markdown-it") || moduleIdIncludesPackage(id, "markdown-it-task-lists") || moduleIdIncludesPackage(id, "dompurify") || moduleIdIncludesPackage(id, "entities") || moduleIdIncludesPackage(id, "linkify-it") || moduleIdIncludesPackage(id, "mdurl") || moduleIdIncludesPackage(id, "punycode.js") || moduleIdIncludesPackage(id, "uc.micro") ) { return "markdown-runtime"; } if ( moduleIdIncludesPackage(id, "zod") || moduleIdIncludesPackage(id, "json5") || moduleIdIncludesPackage(id, "libphonenumber-js") ) { return "config-runtime"; } // @noble/hashes stays out of this startup chunk deliberately: it is only // dynamically imported as the insecure-context fallback digest provider. if (moduleIdIncludesPackage(id, "@noble/ed25519") || moduleIdIncludesPackage(id, "ipaddr.js")) { return "gateway-runtime"; } return undefined; } export const controlUiCodeSplitting = { includeDependenciesRecursively: false, groups: [ { name: (id: string) => controlUiStableChunkName(id) ?? null, test: (id: string) => controlUiStableChunkName(id) !== undefined, priority: 20, }, { name: (id: string) => normalizeModuleId(id).includes("/ui/src/") ? "control-ui-core" : "control-ui-foundation", tags: ["$initial"] as ["$initial"], priority: 10, // 576 KiB keeps the shared normalization graph in one chunk; the previous // 512 KiB boundary split it in two, adding a startup request and ~700 B gzip. maxSize: 576 * 1024, }, ], };