From 5c33ed36a42c79715b0c990db7e7a0c5ee274761 Mon Sep 17 00:00:00 2001 From: robonen Date: Mon, 8 Jun 2026 16:05:19 +0700 Subject: [PATCH] fix(docs): resolve @robonen/* workspace imports from source The docs build pulls composables (via demos) and doc sections into its bundle, which transitively import workspace packages like @robonen/platform/multi. Aliasing each @robonen/* package to its src means the build no longer requires every package's dist to be built first, fixing CI where dists are absent. --- docs/modules/extractor/index.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/modules/extractor/index.ts b/docs/modules/extractor/index.ts index 04c6d2a..47968ea 100644 --- a/docs/modules/extractor/index.ts +++ b/docs/modules/extractor/index.ts @@ -32,12 +32,30 @@ export default defineNuxtModule({ // built-in `@` → srcDir alias. const vueSrc = resolve(ROOT, 'vue/toolkit/src'); + // Resolve `@robonen/*` workspace imports (pulled in transitively by demos and + // doc sections) from SOURCE rather than built `dist/`. Without this the docs + // build depends on every workspace package being built first — which CI does + // not guarantee (e.g. a composable importing `@robonen/platform/multi` fails + // to resolve when platform's dist is absent). Prefix aliases also cover + // subpath exports (`@robonen/platform/multi` → `core/platform/src/multi`). + const workspaceSrc: Record = { + '@robonen/stdlib': 'core/stdlib/src', + '@robonen/platform': 'core/platform/src', + '@robonen/fetch': 'core/fetch/src', + '@robonen/encoding': 'core/encoding/src', + '@robonen/crdt': 'core/crdt/src', + '@robonen/editor': 'vue/editor/src', + '@robonen/primitives': 'vue/primitives/src', + '@robonen/vue': vueSrc, + }; + nuxt.hook('vite:extendConfig', (config) => { const existing = config.resolve?.alias; const sourceAliases = [ { find: '@/composables', replacement: resolve(vueSrc, 'composables') }, { find: '@/types', replacement: resolve(vueSrc, 'types') }, { find: '@/utils', replacement: resolve(vueSrc, 'utils') }, + ...Object.entries(workspaceSrc).map(([find, rel]) => ({ find, replacement: resolve(ROOT, rel) })), ]; if (Array.isArray(existing)) {