fix(collab): dedupe yjs so @pcbjam/shared + standalone link ONE instance

Two pnpm workspaces (root globs pcbjam-shared; pcbjam/web has it too) each install yjs, so shared's collab code (kicad-y) and the app's yjs were two physical copies → a Y.Map rejects the other instance's Y types ('Unexpected content type'). resolve.dedupe:['yjs'] in vite + vitest forces a single copy. Not a test-only artifact: the same two copies bundle into the editor and would break collab on doc seed. Full standalone suite now 55/55 (was 47/55).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Gergő Törcsvári 2026-06-30 09:30:15 +02:00
commit 269449da46
No known key found for this signature in database
GPG key ID: 8E75F2CDE64E5322
2 changed files with 10 additions and 0 deletions

View file

@ -40,6 +40,11 @@ export default defineConfig({
alias: {
"@": path.resolve(__dirname, "./src"),
},
// @pcbjam/shared is in a second pnpm workspace with its own `yjs`; dedupe so
// the bundled editor links ONE yjs (a mutable, instanceof-checked singleton).
// Without it shared's collab code (kicad-y) and the app's yjs are two
// instances → "Unexpected content type" the moment a doc is seeded.
dedupe: ["yjs"],
},
server: {
// Default :3048. The closed `pnpm dev:gpl` runs a second editor instance on

View file

@ -7,6 +7,11 @@ import { defineConfig } from "vitest/config";
export default defineConfig({
resolve: {
alias: { "@": path.resolve(__dirname, "./src") },
// @pcbjam/shared lives in a second pnpm workspace, so without this its `yjs`
// and the standalone's `yjs` resolve to two physical copies → a Y.Map from
// one instance rejects Y types from the other ("Unexpected content type").
// Force a single yjs (it's a shared mutable singleton — instanceof-checked).
dedupe: ["yjs"],
},
test: {
environment: "node",