- Cloudflare Worker + Durable Object server (packages/collab/) - One DO per room with WebSocket Hibernation for near-zero idle cost - Yjs sync protocol for document state (CRDT merge) - Yjs awareness protocol for cursors, selection, presence - Persists doc state to DO storage - CORS headers for cross-origin WebSocket upgrade - Client composable (src/composables/use-collab.ts) - Y.Doc ↔ SceneGraph bidirectional binding - Awareness: broadcasts cursor position, selection, name, color - Auto-join from /share/:roomId URL - Suppresses echo loops between Yjs and graph updates - CollabPanel component (src/components/CollabPanel.vue) - Share button generates room link, copies to clipboard - Join flow: paste link or room ID - Avatar stack with colored initials and tooltips - Name input persisted to localStorage - Remote cursor rendering in CanvasKit - Colored arrow cursor + name label pill per remote peer - Remote selection outlines in peer's color - Only shows cursors on the same page - SPA redirect for /share/* routes (Cloudflare Pages _redirects)
14 lines
287 B
JSON
14 lines
287 B
JSON
{
|
|
"compilerOptions": {
|
|
"target": "ES2022",
|
|
"module": "ES2022",
|
|
"moduleResolution": "bundler",
|
|
"lib": ["ES2022"],
|
|
"types": ["@cloudflare/workers-types/2023-07-01"],
|
|
"strict": true,
|
|
"noEmit": true,
|
|
"skipLibCheck": true
|
|
},
|
|
"include": ["src/**/*.ts"]
|
|
}
|