diff --git a/apps/examples/package.json b/apps/examples/package.json index 9ec588bb3..a76439e86 100644 --- a/apps/examples/package.json +++ b/apps/examples/package.json @@ -27,7 +27,7 @@ "infinite" ], "scripts": { - "dev": "concurrently \"vite\" \"HOST=localhost PORT=1234 npx y-websocket\" --kill-others", + "dev": "vite", "build": "vite build", "lint": "yarn run -T tsx ../../scripts/lint.ts", "e2e": "playwright test -c ./e2e/playwright.config.ts", @@ -43,12 +43,9 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.9.0", - "vite": "^4.3.4", - "y-websocket": "^1.5.0", - "yjs": "^13.6.2" + "vite": "^4.3.4" }, "devDependencies": { - "concurrently": "^8.1.0", "dotenv": "^16.0.3" } } diff --git a/apps/examples/src/examples/UserPresenceExample.tsx b/apps/examples/src/examples/UserPresenceExample.tsx index 6f3f237d8..d388fee14 100644 --- a/apps/examples/src/examples/UserPresenceExample.tsx +++ b/apps/examples/src/examples/UserPresenceExample.tsx @@ -10,7 +10,7 @@ const CURSOR_CHAT_MESSAGE = 'Hey, I think this is just great.' // Note: // Almost all of the information below is calculated automatically by helpers in the editor. -// For a more realistic implementation, see the yjs example in this examples folder. If anything, +// For a more realistic implementation, see https://github.com/tldraw/tldraw-yjs-example. If anything, // this example should be used to understand the data model and test designs, not as a reference // for how to implement user presence. diff --git a/apps/examples/src/examples/yjs/YjsExample.tsx b/apps/examples/src/examples/yjs/YjsExample.tsx index 6e7185805..778c8b32d 100644 --- a/apps/examples/src/examples/yjs/YjsExample.tsx +++ b/apps/examples/src/examples/yjs/YjsExample.tsx @@ -1,47 +1,11 @@ -import { Tldraw, track, useEditor } from '@tldraw/tldraw' -import '@tldraw/tldraw/tldraw.css' -import { useYjsStore } from './useYjsStore' - -const HOST_URL = - process.env.NODE_ENV === 'development' ? 'ws://localhost:1234' : 'wss://demos.yjs.dev' - export default function YjsExample() { - const store = useYjsStore({ - roomId: 'example6', - hostUrl: HOST_URL, - }) - return (
- } /> + We've moved! See{' '} + + https://github.com/tldraw/tldraw-yjs-example + + .
) } - -const NameEditor = track(() => { - const editor = useEditor() - - const { color, name } = editor.user - - return ( -
- { - editor.user.updateUserPreferences({ - color: e.currentTarget.value, - }) - }} - /> - { - editor.user.updateUserPreferences({ - name: e.currentTarget.value, - }) - }} - /> -
- ) -}) diff --git a/apps/examples/src/examples/yjs/useYjsStore.ts b/apps/examples/src/examples/yjs/useYjsStore.ts deleted file mode 100644 index ced24d408..000000000 --- a/apps/examples/src/examples/yjs/useYjsStore.ts +++ /dev/null @@ -1,241 +0,0 @@ -import { - DocumentRecordType, - InstancePresenceRecordType, - PageRecordType, - TLAnyShapeUtilConstructor, - TLDocument, - TLInstancePresence, - TLPageId, - TLRecord, - TLStoreWithStatus, - computed, - createPresenceStateDerivation, - createTLStore, - defaultShapeUtils, - getUserPreferences, - react, -} from '@tldraw/tldraw' -import { useEffect, useMemo, useState } from 'react' -import { WebsocketProvider } from 'y-websocket' -import * as Y from 'yjs' - -export function useYjsStore({ - roomId = 'example', - hostUrl = process.env.NODE_ENV === 'development' ? 'ws://localhost:1234' : 'wss://demos.yjs.dev', - shapeUtils = [], -}: Partial<{ - hostUrl: string - roomId: string - version: number - shapeUtils: TLAnyShapeUtilConstructor[] -}>) { - const [store] = useState(() => - createTLStore({ shapeUtils: [...defaultShapeUtils, ...shapeUtils] }) - ) - const [storeWithStatus, setStoreWithStatus] = useState({ status: 'loading' }) - - const { doc, room, yRecords } = useMemo(() => { - const doc = new Y.Doc({ gc: true }) - return { - doc, - room: new WebsocketProvider(hostUrl, roomId, doc, { connect: true }), - yRecords: doc.getMap(`tl_${roomId}`), - } - }, [hostUrl, roomId]) - - useEffect(() => { - const unsubs: (() => void)[] = [] - - // We'll use this flag to prevent repeating subscriptions if our connection drops and reconnects. - let didConnect = false - - room.on('status', ({ status }: { status: 'connecting' | 'disconnected' | 'connected' }) => { - // If we're disconnected, set the store status to 'synced-remote' and the connection status to 'offline' - if (status === 'connecting' || status === 'disconnected') { - setStoreWithStatus({ - store, - status: 'synced-remote', - connectionStatus: 'offline', - }) - return - } - - if (status !== 'connected') return - - if (didConnect) { - setStoreWithStatus({ - store, - status: 'synced-remote', - connectionStatus: 'online', - }) - return - } - - // Ok, we're connecting for the first time. Let's get started! - didConnect = true - - // Initialize the store with the yjs doc records—or, if the yjs doc - // is empty, initialize the yjs doc with the default store records. - if (yRecords.size === 0) { - // Create the initial store records - Y.transact(doc, () => { - store.clear() - store.put([ - DocumentRecordType.create({ - id: 'document:document' as TLDocument['id'], - }), - PageRecordType.create({ - id: 'page:page' as TLPageId, - name: 'Page 1', - index: 'a1', - }), - ]) - }) - - // Sync the store records to the yjs doc - doc.transact(() => { - for (const record of store.allRecords()) { - yRecords.set(record.id, record) - } - }) - } else { - // Replace the store records with the yjs doc records - Y.transact(doc, () => { - store.clear() - store.put([...yRecords.values()]) - }) - } - - /* -------------------- Document -------------------- */ - - // Sync store changes to the yjs doc - unsubs.push( - store.listen( - function syncStoreChangesToYjsDoc({ changes }) { - doc.transact(() => { - Object.values(changes.added).forEach((record) => { - yRecords.set(record.id, record) - }) - - Object.values(changes.updated).forEach(([_, record]) => { - yRecords.set(record.id, record) - }) - - Object.values(changes.removed).forEach((record) => { - yRecords.delete(record.id) - }) - }) - }, - { source: 'user', scope: 'document' } // only sync user's document changes - ) - ) - - // Sync the yjs doc changes to the store - const handleChange = (events: Y.YEvent[], transaction: Y.Transaction) => { - if (transaction.local) return - - const toRemove: TLRecord['id'][] = [] - const toPut: TLRecord[] = [] - - events.forEach((event) => { - event.changes.keys.forEach((change, id) => { - switch (change.action) { - case 'add': - case 'update': { - toPut.push(yRecords.get(id)!) - break - } - case 'delete': { - toRemove.push(id as TLRecord['id']) - break - } - } - }) - }) - - // put / remove the records in the store - store.mergeRemoteChanges(() => { - if (toRemove.length) store.remove(toRemove) - if (toPut.length) store.put(toPut) - }) - } - - yRecords.observeDeep(handleChange) - unsubs.push(() => yRecords.unobserveDeep(handleChange)) - - /* -------------------- Awareness ------------------- */ - - // Create the instance presence derivation - const yClientId = room.awareness.clientID.toString() - const presenceId = InstancePresenceRecordType.createId(yClientId) - const userPreferencesComputed = computed('ok', () => getUserPreferences()) - const presenceDerivation = createPresenceStateDerivation( - userPreferencesComputed, - presenceId - )(store) - - // Set our initial presence from the derivation's current value - room.awareness.setLocalStateField('presence', presenceDerivation.value) - - // When the derivation change, sync presence to to yjs awareness - unsubs.push( - react('when presence changes', () => { - const presence = presenceDerivation.value - requestAnimationFrame(() => { - room.awareness.setLocalStateField('presence', presence) - }) - }) - ) - - // Sync yjs awareness changes to the store - const handleUpdate = (update: { added: number[]; updated: number[]; removed: number[] }) => { - const states = room.awareness.getStates() as Map - - const toRemove: TLInstancePresence['id'][] = [] - const toPut: TLInstancePresence[] = [] - - // Connect records to put / remove - for (const clientId of update.added) { - const state = states.get(clientId) - if (state?.presence && state.presence.id !== presenceId) { - toPut.push(state.presence) - } - } - - for (const clientId of update.updated) { - const state = states.get(clientId) - if (state?.presence && state.presence.id !== presenceId) { - toPut.push(state.presence) - } - } - - for (const clientId of update.removed) { - toRemove.push(InstancePresenceRecordType.createId(clientId.toString())) - } - - // put / remove the records in the store - store.mergeRemoteChanges(() => { - if (toRemove.length) store.remove(toRemove) - if (toPut.length) store.put(toPut) - }) - } - - room.awareness.on('update', handleUpdate) - unsubs.push(() => room.awareness.off('update', handleUpdate)) - - // And we're done! - setStoreWithStatus({ - store, - status: 'synced-remote', - connectionStatus: 'online', - }) - }) - - return () => { - unsubs.forEach((fn) => fn()) - unsubs.length = 0 - } - }, [room, doc, store, yRecords]) - - return storeWithStatus -} diff --git a/docs/docs/collaboration.mdx b/docs/docs/collaboration.mdx index a936be580..d337913b0 100644 --- a/docs/docs/collaboration.mdx +++ b/docs/docs/collaboration.mdx @@ -8,4 +8,4 @@ order: 7 Coming soon. -See the [tldraw repository](https://github.com/tldraw/tldraw/tree/main/apps/examples) for an example of how to use yjs with the `@tldraw/tldraw` library. +See the [tldraw-yjs example](https://github.com/tldraw/tldraw-yjs-example) for an example of how to use yjs with the `@tldraw/tldraw` library. diff --git a/public-yarn.lock b/public-yarn.lock index e1a6b9b45..ebd348801 100644 --- a/public-yarn.lock +++ b/public-yarn.lock @@ -1524,15 +1524,6 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.21.0": - version: 7.22.5 - resolution: "@babel/runtime@npm:7.22.5" - dependencies: - regenerator-runtime: ^0.13.11 - checksum: 12a50b7de2531beef38840d17af50c55a094253697600cee255311222390c68eed704829308d4fd305e1b3dfbce113272e428e9d9d45b1730e0fede997eaceb1 - languageName: node - linkType: hard - "@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7, @babel/template@npm:^7.3.3": version: 7.20.7 resolution: "@babel/template@npm:7.20.7" @@ -5945,32 +5936,6 @@ __metadata: languageName: node linkType: hard -"abstract-leveldown@npm:^6.2.1": - version: 6.3.0 - resolution: "abstract-leveldown@npm:6.3.0" - dependencies: - buffer: ^5.5.0 - immediate: ^3.2.3 - level-concat-iterator: ~2.0.0 - level-supports: ~1.0.0 - xtend: ~4.0.0 - checksum: 121a8509d8c6a540e656c2a69e5b8d853d4df71072011afefc868b98076991bb00120550e90643de9dc18889c675f62413409eeb4c8c204663124c7d215e4ec3 - languageName: node - linkType: hard - -"abstract-leveldown@npm:~6.2.1, abstract-leveldown@npm:~6.2.3": - version: 6.2.3 - resolution: "abstract-leveldown@npm:6.2.3" - dependencies: - buffer: ^5.5.0 - immediate: ^3.2.3 - level-concat-iterator: ~2.0.0 - level-supports: ~1.0.0 - xtend: ~4.0.0 - checksum: 00202b2eb7955dd7bc04f3e44d225e60160cedb8f96fe6ae0e6dca9c356d57071f001ece8ae1d53f48095c4c036d92b3440f2bc7666730610ddea030f9fbde4a - languageName: node - linkType: hard - "accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" @@ -6434,13 +6399,6 @@ __metadata: languageName: node linkType: hard -"async-limiter@npm:~1.0.0": - version: 1.0.1 - resolution: "async-limiter@npm:1.0.1" - checksum: 2b849695b465d93ad44c116220dee29a5aeb63adac16c1088983c339b0de57d76e82533e8e364a93a9f997f28bbfc6a92948cefc120652bd07f3b59f8d75cf2b - languageName: node - linkType: hard - "async-listen@npm:1.2.0": version: 1.2.0 resolution: "async-listen@npm:1.2.0" @@ -6835,7 +6793,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.5.0, buffer@npm:^5.6.0": +"buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: @@ -7439,26 +7397,6 @@ __metadata: languageName: node linkType: hard -"concurrently@npm:^8.1.0": - version: 8.1.0 - resolution: "concurrently@npm:8.1.0" - dependencies: - chalk: ^4.1.2 - date-fns: ^2.29.3 - lodash: ^4.17.21 - rxjs: ^7.8.0 - shell-quote: ^1.8.0 - spawn-command: 0.0.2-1 - supports-color: ^8.1.1 - tree-kill: ^1.2.2 - yargs: ^17.7.1 - bin: - conc: dist/bin/concurrently.js - concurrently: dist/bin/concurrently.js - checksum: f767345c6e142c8de58114afc7ed0e58c58882b110cad28d34e251f7a9cf018212b24c316272ac4df5fe322d64434575f94dad77ea861e868c894fb24b8f36b9 - languageName: node - linkType: hard - "config@workspace:config": version: 0.0.0-use.local resolution: "config@workspace:config" @@ -7733,15 +7671,6 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^2.29.3": - version: 2.30.0 - resolution: "date-fns@npm:2.30.0" - dependencies: - "@babel/runtime": ^7.21.0 - checksum: f7be01523282e9bb06c0cd2693d34f245247a29098527d4420628966a2d9aad154bd0e90a6b1cf66d37adcb769cd108cf8a7bd49d76db0fb119af5cdd13644f4 - languageName: node - linkType: hard - "deasync@npm:^0.1.0": version: 0.1.28 resolution: "deasync@npm:0.1.28" @@ -7909,16 +7838,6 @@ __metadata: languageName: node linkType: hard -"deferred-leveldown@npm:~5.3.0": - version: 5.3.0 - resolution: "deferred-leveldown@npm:5.3.0" - dependencies: - abstract-leveldown: ~6.2.1 - inherits: ^2.0.3 - checksum: 5631e153528bb9de1aa60d59a5065d1a519374c5e4c1d486f2190dba4008dcf5c2ee8dd7f2f81396fc4d5a6bb6e7d0055e3dfe68afe00da02adaa3bf329addf7 - languageName: node - linkType: hard - "define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": version: 1.2.0 resolution: "define-properties@npm:1.2.0" @@ -8262,18 +8181,6 @@ __metadata: languageName: node linkType: hard -"encoding-down@npm:^6.3.0": - version: 6.3.0 - resolution: "encoding-down@npm:6.3.0" - dependencies: - abstract-leveldown: ^6.2.1 - inherits: ^2.0.3 - level-codec: ^9.0.0 - level-errors: ^2.0.0 - checksum: 74043e6d9061a470614ff61d708c849259ab32932a428fd5ddfb0878719804f56a52f59b31cccd95fddc2e636c0fd22dc3e02481fb98d5bf1bdbbbc44ca09bdc - languageName: node - linkType: hard - "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -8361,17 +8268,6 @@ __metadata: languageName: node linkType: hard -"errno@npm:~0.1.1": - version: 0.1.8 - resolution: "errno@npm:0.1.8" - dependencies: - prr: ~1.0.1 - bin: - errno: cli.js - checksum: 1271f7b9fbb3bcbec76ffde932485d1e3561856d21d847ec613a9722ee924cdd4e523a62dc71a44174d91e898fe21fdc8d5b50823f4b5e0ce8c35c8271e6ef4a - languageName: node - linkType: hard - "error-ex@npm:^1.3.1": version: 1.3.2 resolution: "error-ex@npm:1.3.2" @@ -9453,15 +9349,12 @@ __metadata: "@tldraw/assets": "workspace:*" "@tldraw/tldraw": "workspace:*" "@vercel/analytics": ^1.0.1 - concurrently: ^8.1.0 dotenv: ^16.0.3 lazyrepo: 0.0.0-alpha.27 react: ^18.2.0 react-dom: ^18.2.0 react-router-dom: ^6.9.0 vite: ^4.3.4 - y-websocket: ^1.5.0 - yjs: ^13.6.2 languageName: unknown linkType: soft @@ -10756,13 +10649,6 @@ __metadata: languageName: node linkType: hard -"immediate@npm:^3.2.3": - version: 3.3.0 - resolution: "immediate@npm:3.3.0" - checksum: 634b4305101e2452eba6c07d485bf3e415995e533c94b9c3ffbc37026fa1be34def6e4f2276b0dc2162a3f91628564a4bfb26280278b89d3ee54624e854d2f5f - languageName: node - linkType: hard - "import-cwd@npm:^3.0.0": version: 3.0.0 resolution: "import-cwd@npm:3.0.0" @@ -11376,13 +11262,6 @@ __metadata: languageName: node linkType: hard -"isomorphic.js@npm:^0.2.4": - version: 0.2.5 - resolution: "isomorphic.js@npm:0.2.5" - checksum: d8d1b083f05f3c337a06628b982ac3ce6db953bbef14a9de8ad49131250c3592f864b73c12030fdc9ef138ce97b76ef55c7d96a849561ac215b1b4b9d301c8e9 - languageName: node - linkType: hard - "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-lib-coverage@npm:3.2.0" @@ -12349,109 +12228,6 @@ __metadata: languageName: node linkType: hard -"level-codec@npm:^9.0.0": - version: 9.0.2 - resolution: "level-codec@npm:9.0.2" - dependencies: - buffer: ^5.6.0 - checksum: 289003d51b8afcdd24c4d318606abf2bae81975e4b527d7349abfdbacc8fef26711f2f24e2d20da0e1dce0bb216a856c9433ccb9ca25fa78a96aed9f51e506ed - languageName: node - linkType: hard - -"level-concat-iterator@npm:~2.0.0": - version: 2.0.1 - resolution: "level-concat-iterator@npm:2.0.1" - checksum: 562583ef1292215f8e749c402510cb61c4d6fccf4541082b3d21dfa5ecde9fcccfe52bdcb5cfff9d2384e7ce5891f44df9439a6ddb39b0ffe31015600b4a828a - languageName: node - linkType: hard - -"level-errors@npm:^2.0.0, level-errors@npm:~2.0.0": - version: 2.0.1 - resolution: "level-errors@npm:2.0.1" - dependencies: - errno: ~0.1.1 - checksum: aca5d7670e2a40609db8d7743fce289bb5202c0bc13e4a78f81f36a6642e9abc0110f48087d3d3c2c04f023d70d4ee6f2db0e20c63d29b3fda323a67bfff6526 - languageName: node - linkType: hard - -"level-iterator-stream@npm:~4.0.0": - version: 4.0.2 - resolution: "level-iterator-stream@npm:4.0.2" - dependencies: - inherits: ^2.0.4 - readable-stream: ^3.4.0 - xtend: ^4.0.2 - checksum: 239e2c7e62bffb485ed696bcd3b98de7a2bc455d13be4fce175ae3544fe9cda81c2ed93d3e88b61380ae6d28cce02511862d77b86fb2ba5b5cf00471f3c1eccc - languageName: node - linkType: hard - -"level-js@npm:^5.0.0": - version: 5.0.2 - resolution: "level-js@npm:5.0.2" - dependencies: - abstract-leveldown: ~6.2.3 - buffer: ^5.5.0 - inherits: ^2.0.3 - ltgt: ^2.1.2 - checksum: 3c7f75979bb8c042e95a58245b8fe1230bb0f56a11ee418e08156e3eadda371efae6eb7b9bf10bf1e08e0b1b2a25d80c026858ca99ffd49109d6541e3d9d3b37 - languageName: node - linkType: hard - -"level-packager@npm:^5.1.0": - version: 5.1.1 - resolution: "level-packager@npm:5.1.1" - dependencies: - encoding-down: ^6.3.0 - levelup: ^4.3.2 - checksum: befe2aa54f2010a6ecf7ddce392c8dee225e1839205080a2704d75e560e28b01191b345494696196777b70d376e3eaae4c9e7c330cc70d3000839f5b18dd78f2 - languageName: node - linkType: hard - -"level-supports@npm:~1.0.0": - version: 1.0.1 - resolution: "level-supports@npm:1.0.1" - dependencies: - xtend: ^4.0.2 - checksum: 5d6bdb88cf00c3d9adcde970db06a548c72c5a94bf42c72f998b58341a105bfe2ea30d313ce1e84396b98cc9ddbc0a9bd94574955a86e929f73c986e10fc0df0 - languageName: node - linkType: hard - -"level@npm:^6.0.1": - version: 6.0.1 - resolution: "level@npm:6.0.1" - dependencies: - level-js: ^5.0.0 - level-packager: ^5.1.0 - leveldown: ^5.4.0 - checksum: bd4981f94162469a82a6c98d267d814d9d4a7beed4fc3d18fbe3b156f71cf4c6d35b424d14c46d401dbf0cd91425e842950a7cd17ddf7bf57acdab5af4c278da - languageName: node - linkType: hard - -"leveldown@npm:^5.4.0": - version: 5.6.0 - resolution: "leveldown@npm:5.6.0" - dependencies: - abstract-leveldown: ~6.2.1 - napi-macros: ~2.0.0 - node-gyp: latest - node-gyp-build: ~4.1.0 - checksum: 06d4683170d7fc661acd65457e531b42ad66480e9339d3154ba6d0de38ff0503d7d017c1c6eba12732b5488ecd2915c70c8dc3a7d67f4a836f3de34b8a993949 - languageName: node - linkType: hard - -"levelup@npm:^4.3.2": - version: 4.4.0 - resolution: "levelup@npm:4.4.0" - dependencies: - deferred-leveldown: ~5.3.0 - level-errors: ~2.0.0 - level-iterator-stream: ~4.0.0 - level-supports: ~1.0.0 - xtend: ~4.0.0 - checksum: 5a09e34c78cd7c23f9f6cb73563f1ebe8121ffc5f9f5f232242529d4fbdd40e8d1ffb337d2defa0b842334e0dbd4028fbfe7a072eebfe2c4d07174f0aa4aabca - languageName: node - linkType: hard - "leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" @@ -12479,18 +12255,6 @@ __metadata: languageName: node linkType: hard -"lib0@npm:^0.2.31, lib0@npm:^0.2.42, lib0@npm:^0.2.52, lib0@npm:^0.2.74": - version: 0.2.78 - resolution: "lib0@npm:0.2.78" - dependencies: - isomorphic.js: ^0.2.4 - bin: - 0gentesthtml: bin/gentesthtml.js - 0serve: bin/0serve.js - checksum: a9c90a9228e10e581bf416f4ecade967687d67e6ea3e822ef69e2628a77a2a0254ef7e2eb7e555d412f9e9467049b7fb760c079878f9a934dd85d2646a53d172 - languageName: node - linkType: hard - "lilconfig@npm:2.1.0, lilconfig@npm:^2.0.5": version: 2.1.0 resolution: "lilconfig@npm:2.1.0" @@ -12768,13 +12532,6 @@ __metadata: languageName: node linkType: hard -"ltgt@npm:^2.1.2": - version: 2.2.1 - resolution: "ltgt@npm:2.2.1" - checksum: 7e3874296f7538bc8087b428ac4208008d7b76916354b34a08818ca7c83958c1df10ec427eeeaad895f6b81e41e24745b18d30f89abcc21d228b94f6961d50a2 - languageName: node - linkType: hard - "lz-string@npm:^1.4.4, lz-string@npm:^1.5.0": version: 1.5.0 resolution: "lz-string@npm:1.5.0" @@ -13772,13 +13529,6 @@ __metadata: languageName: node linkType: hard -"napi-macros@npm:~2.0.0": - version: 2.0.0 - resolution: "napi-macros@npm:2.0.0" - checksum: 30384819386977c1f82034757014163fa60ab3c5a538094f778d38788bebb52534966279956f796a92ea771c7f8ae072b975df65de910d051ffbdc927f62320c - languageName: node - linkType: hard - "natural-compare-lite@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare-lite@npm:1.4.0" @@ -13880,17 +13630,6 @@ __metadata: languageName: node linkType: hard -"node-gyp-build@npm:~4.1.0": - version: 4.1.1 - resolution: "node-gyp-build@npm:4.1.1" - bin: - node-gyp-build: ./bin.js - node-gyp-build-optional: ./optional.js - node-gyp-build-test: ./build-test.js - checksum: 959d42221cc44b92700003efae741652bc4e379e4cf375830ddde03ba43c89f99694bf0883078ed0d4e03ffe2f85decab0572e04068d3900b8538d165dbc17df - languageName: node - linkType: hard - "node-gyp@npm:latest": version: 9.3.1 resolution: "node-gyp@npm:9.3.1" @@ -15008,13 +14747,6 @@ __metadata: languageName: node linkType: hard -"prr@npm:~1.0.1": - version: 1.0.1 - resolution: "prr@npm:1.0.1" - checksum: 3bca2db0479fd38f8c4c9439139b0c42dcaadcc2fbb7bb8e0e6afaa1383457f1d19aea9e5f961d5b080f1cfc05bfa1fe9e45c97a1d3fd6d421950a73d3108381 - languageName: node - linkType: hard - "psl@npm:^1.1.33": version: 1.9.0 resolution: "psl@npm:1.9.0" @@ -16125,13 +15857,6 @@ __metadata: languageName: node linkType: hard -"shell-quote@npm:^1.8.0": - version: 1.8.1 - resolution: "shell-quote@npm:1.8.1" - checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b - languageName: node - linkType: hard - "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -16366,13 +16091,6 @@ __metadata: languageName: node linkType: hard -"spawn-command@npm:0.0.2-1": - version: 0.0.2-1 - resolution: "spawn-command@npm:0.0.2-1" - checksum: 2cac8519332193d1ed37d57298c4a1f73095e9edd20440fbab4aa47f531da83831734f2b51c44bb42b2747bf3485dec3fa2b0a1003f74c67561f2636622e328b - languageName: node - linkType: hard - "spawn-command@npm:^0.0.2-1": version: 0.0.2 resolution: "spawn-command@npm:0.0.2" @@ -16672,7 +16390,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:8.1.1, supports-color@npm:^8.0.0, supports-color@npm:^8.1.0, supports-color@npm:^8.1.1": +"supports-color@npm:8.1.1, supports-color@npm:^8.0.0, supports-color@npm:^8.1.0": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -18269,15 +17987,6 @@ __metadata: languageName: node linkType: hard -"ws@npm:^6.2.1": - version: 6.2.2 - resolution: "ws@npm:6.2.2" - dependencies: - async-limiter: ~1.0.0 - checksum: aec3154ec51477c094ac2cb5946a156e17561a581fa27005cbf22c53ac57f8d4e5f791dd4bbba6a488602cb28778c8ab7df06251d590507c3c550fd8ebeee949 - languageName: node - linkType: hard - "ws@npm:^7.4.5": version: 7.5.9 resolution: "ws@npm:7.5.9" @@ -18379,57 +18088,13 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.0, xtend@npm:^4.0.2, xtend@npm:~4.0.0, xtend@npm:~4.0.1": +"xtend@npm:^4.0.0, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a languageName: node linkType: hard -"y-leveldb@npm:^0.1.0": - version: 0.1.2 - resolution: "y-leveldb@npm:0.1.2" - dependencies: - level: ^6.0.1 - lib0: ^0.2.31 - peerDependencies: - yjs: ^13.0.0 - checksum: 38e3293cfc5e754ba50af4c6bd03a96efde34c92809baf504b38cb4f45959187f896fe6971fa6a91823763e178807aaa14e190d1f7bea1b3a1e9b7265bb88b6d - languageName: node - linkType: hard - -"y-protocols@npm:^1.0.5": - version: 1.0.5 - resolution: "y-protocols@npm:1.0.5" - dependencies: - lib0: ^0.2.42 - checksum: d19404a4ebafcf3761c28b881abe8c32ab6e457db0e5ffc7dbb749cbc2c3bb98e003a43f3e8eba7f245b2698c76f2c4cdd1c2db869f8ec0c6ef94736d9a88652 - languageName: node - linkType: hard - -"y-websocket@npm:^1.5.0": - version: 1.5.0 - resolution: "y-websocket@npm:1.5.0" - dependencies: - lib0: ^0.2.52 - lodash.debounce: ^4.0.8 - ws: ^6.2.1 - y-leveldb: ^0.1.0 - y-protocols: ^1.0.5 - peerDependencies: - yjs: ^13.5.6 - dependenciesMeta: - ws: - optional: true - y-leveldb: - optional: true - bin: - y-websocket: bin/server.js - y-websocket-server: bin/server.js - checksum: 0e532f7d488e9430b011814eab67f37c002b0b102ccc169c65250ad9fddd901b2f979ac0f26453e7ac625fe2f2fe84d208b90b47e9e3572ac449b01572884fb8 - languageName: node - linkType: hard - "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" @@ -18563,21 +18228,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.7.1": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: ^8.0.1 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.3 - y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a - languageName: node - linkType: hard - "yauzl@npm:^2.3.1": version: 2.10.0 resolution: "yauzl@npm:2.10.0" @@ -18597,15 +18247,6 @@ __metadata: languageName: node linkType: hard -"yjs@npm:^13.6.2": - version: 13.6.2 - resolution: "yjs@npm:13.6.2" - dependencies: - lib0: ^0.2.74 - checksum: a69fecdfbdaa8103a732a79e27c128df83a0f1cdd764fa1ef6c51de86a5e1930501a29681124da16332a6afc2824fbdc5c5abe0a6868e1d94ca4fafee8bee503 - languageName: node - linkType: hard - "yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1"