yjs example (#1560)
This PR adds a yjs example to the examples app. ### Change Type - [x] `internal` — Any other changes that don't affect the published package (will not publish a new version) ### Release Notes - [editor] Adds yjs example project
This commit is contained in:
parent
bacb307bad
commit
d71d15124c
9 changed files with 606 additions and 7 deletions
|
@ -27,7 +27,7 @@
|
|||
"infinite"
|
||||
],
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"dev": "concurrently \"vite\" \"HOST=localhost PORT=1234 npx y-websocket\" --kill-others",
|
||||
"build": "vite build",
|
||||
"lint": "yarn run -T tsx ../../scripts/lint.ts",
|
||||
"e2e": "playwright test -c ./e2e/playwright.config.ts",
|
||||
|
@ -46,9 +46,12 @@
|
|||
"react-router-dom": "^6.9.0",
|
||||
"signia": "0.1.4",
|
||||
"signia-react": "0.1.4",
|
||||
"vite": "^4.3.4"
|
||||
"vite": "^4.3.4",
|
||||
"y-websocket": "^1.5.0",
|
||||
"yjs": "^13.6.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"concurrently": "^8.1.0",
|
||||
"dotenv": "^16.0.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import ExampleMultiple from './7-multiple/MultipleExample'
|
|||
import ErrorBoundaryExample from './8-error-boundary/ErrorBoundaryExample'
|
||||
import HideUiExample from './9-hide-ui/HideUiExample'
|
||||
import EndToEnd from './end-to-end/end-to-end'
|
||||
import YjsExample from './yjs/YjsExample'
|
||||
|
||||
// This example is only used for end to end tests
|
||||
|
||||
|
@ -103,6 +104,10 @@ export const allExamples: Example[] = [
|
|||
path: '/end-to-end',
|
||||
element: <EndToEnd />,
|
||||
},
|
||||
{
|
||||
path: '/yjs',
|
||||
element: <YjsExample />,
|
||||
},
|
||||
]
|
||||
|
||||
const router = createBrowserRouter(allExamples)
|
||||
|
|
14
apps/examples/src/yjs/YjsExample.tsx
Normal file
14
apps/examples/src/yjs/YjsExample.tsx
Normal file
|
@ -0,0 +1,14 @@
|
|||
import { Tldraw } from '@tldraw/tldraw'
|
||||
import '@tldraw/tldraw/editor.css'
|
||||
import '@tldraw/tldraw/ui.css'
|
||||
import { useYjsStore } from './useYjsStore'
|
||||
|
||||
export default function YjsExample() {
|
||||
const storeWithStatus = useYjsStore()
|
||||
|
||||
return (
|
||||
<div className="tldraw__editor">
|
||||
<Tldraw autoFocus store={storeWithStatus} />
|
||||
</div>
|
||||
)
|
||||
}
|
39
apps/examples/src/yjs/useYjsStore.ts
Normal file
39
apps/examples/src/yjs/useYjsStore.ts
Normal file
|
@ -0,0 +1,39 @@
|
|||
import { TLStoreWithStatus, createTLStore } from '@tldraw/tldraw'
|
||||
import { useEffect, useState } from 'react'
|
||||
import {
|
||||
initializeStoreFromYjsDoc,
|
||||
roomProvider,
|
||||
syncStoreChangesToYjsDoc,
|
||||
syncStorePresenceToYjsAwareness,
|
||||
syncStoreSessionToYjsAwareness,
|
||||
syncYjsAwarenessChangesToStore,
|
||||
syncYjsDocChangesToStore,
|
||||
} from './y'
|
||||
|
||||
export function useYjsStore() {
|
||||
const [storeWithStatus, setStoreWithStatus] = useState<TLStoreWithStatus>({ status: 'loading' })
|
||||
|
||||
useEffect(() => {
|
||||
const store = createTLStore()
|
||||
initializeStoreFromYjsDoc(store)
|
||||
syncYjsDocChangesToStore(store)
|
||||
syncStoreChangesToYjsDoc(store)
|
||||
syncYjsAwarenessChangesToStore(store)
|
||||
syncStorePresenceToYjsAwareness(store)
|
||||
syncStoreSessionToYjsAwareness(store)
|
||||
|
||||
roomProvider.on('status', (connected: boolean) => {
|
||||
if (connected) {
|
||||
setStoreWithStatus({
|
||||
store,
|
||||
status: 'synced-remote',
|
||||
connectionStatus: 'online',
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
roomProvider.connect()
|
||||
}, [])
|
||||
|
||||
return storeWithStatus
|
||||
}
|
152
apps/examples/src/yjs/y.ts
Normal file
152
apps/examples/src/yjs/y.ts
Normal file
|
@ -0,0 +1,152 @@
|
|||
import {
|
||||
DocumentRecordType,
|
||||
PageRecordType,
|
||||
TLDocument,
|
||||
TLPageId,
|
||||
TLRecord,
|
||||
TLStore,
|
||||
TLStoreEventInfo,
|
||||
uniqueId,
|
||||
} from '@tldraw/tldraw'
|
||||
import { WebsocketProvider } from 'y-websocket'
|
||||
import * as Y from 'yjs'
|
||||
|
||||
const USER_ID = uniqueId()
|
||||
const ROOM_ID = 'tldraw-20'
|
||||
const HOST_URL =
|
||||
process.env.NODE_ENV === 'development' ? 'ws://localhost:1234' : 'wss://demos.yjs.dev'
|
||||
|
||||
export const doc = new Y.Doc({ gc: true })
|
||||
export const yRecords = doc.getMap<TLRecord>(`tl_${ROOM_ID}`)
|
||||
|
||||
export const roomProvider = new WebsocketProvider(HOST_URL, ROOM_ID, doc, { connect: false })
|
||||
export const roomAwareness = roomProvider.awareness
|
||||
roomAwareness.setLocalState({})
|
||||
|
||||
/* -------------------- Document -------------------- */
|
||||
|
||||
export function initializeStoreFromYjsDoc(store: TLStore) {
|
||||
const existingYjsRecords = [...yRecords.values()]
|
||||
|
||||
if (existingYjsRecords.length === 0) {
|
||||
doc.transact(() => {
|
||||
store.clear()
|
||||
store.put([
|
||||
DocumentRecordType.create({
|
||||
id: 'document:document' as TLDocument['id'],
|
||||
}),
|
||||
PageRecordType.create({
|
||||
id: 'page:page' as TLPageId,
|
||||
name: 'Page 1',
|
||||
index: 'a1',
|
||||
}),
|
||||
])
|
||||
store.allRecords().forEach((record) => {
|
||||
yRecords.set(record.id, record)
|
||||
})
|
||||
})
|
||||
} else {
|
||||
store.put(existingYjsRecords, 'initialize')
|
||||
}
|
||||
}
|
||||
|
||||
export function syncStoreChangesToYjsDoc(store: TLStore) {
|
||||
return store.listen(
|
||||
({ 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' }
|
||||
)
|
||||
}
|
||||
|
||||
export function syncYjsDocChangesToStore(store: TLStore) {
|
||||
yRecords.observeDeep(([event]) => {
|
||||
store.mergeRemoteChanges(() => {
|
||||
event.changes.keys.forEach((change, id) => {
|
||||
switch (change.action) {
|
||||
case 'add':
|
||||
case 'update': {
|
||||
store.put([yRecords.get(id)!])
|
||||
break
|
||||
}
|
||||
case 'delete': {
|
||||
store.remove([id as TLRecord['id']])
|
||||
break
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------- Awareness ------------------- */
|
||||
|
||||
function syncStoreChangesToYjsAwareness({ changes }: TLStoreEventInfo) {
|
||||
roomAwareness.doc.transact(() => {
|
||||
Object.values(changes.added).forEach((record) => {
|
||||
roomAwareness.setLocalStateField(record.typeName, {
|
||||
...record,
|
||||
id: record.id.split(':')[0] + ':' + USER_ID,
|
||||
})
|
||||
})
|
||||
|
||||
Object.values(changes.updated).forEach(([_, record]) => {
|
||||
roomAwareness.setLocalStateField(record.typeName, {
|
||||
...record,
|
||||
id: record.id.split(':')[0] + ':' + USER_ID,
|
||||
})
|
||||
})
|
||||
|
||||
Object.values(changes.removed).forEach((record) => {
|
||||
const current = { ...roomAwareness.getLocalState() }
|
||||
delete current[record.typeName]
|
||||
roomAwareness.setLocalState(current)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
export function syncStoreSessionToYjsAwareness(store: TLStore) {
|
||||
return store.listen(syncStoreChangesToYjsAwareness, { source: 'user', scope: 'session' })
|
||||
}
|
||||
|
||||
export function syncStorePresenceToYjsAwareness(store: TLStore) {
|
||||
return store.listen(syncStoreChangesToYjsAwareness, { source: 'user', scope: 'presence' })
|
||||
}
|
||||
|
||||
export function syncYjsAwarenessChangesToStore(store: TLStore) {
|
||||
roomAwareness.on(
|
||||
'update',
|
||||
({ added, updated, removed }: { added: number[]; updated: number[]; removed: number[] }) => {
|
||||
const states = roomAwareness.getStates()
|
||||
// roomAwareness.getStates(update)
|
||||
store.mergeRemoteChanges(() => {
|
||||
added.forEach((id: number) => {
|
||||
const record = states.get(id) as TLRecord
|
||||
store.put(Object.values(record))
|
||||
})
|
||||
updated.forEach((id: number) => {
|
||||
const record = states.get(id) as TLRecord
|
||||
store.put(Object.values(record))
|
||||
})
|
||||
removed.forEach((id: number) => {
|
||||
const record = states.get(id) as TLRecord
|
||||
if (record) {
|
||||
store.remove(Object.values(record))
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
|
@ -2595,6 +2595,15 @@ export interface TLSessionStateSnapshot {
|
|||
version: number;
|
||||
}
|
||||
|
||||
// @public (undocumented)
|
||||
export type TLShapeInfo = {
|
||||
util: TLShapeUtilConstructor<any>;
|
||||
migrations?: Migrations;
|
||||
validator?: {
|
||||
validate: (record: any) => any;
|
||||
};
|
||||
};
|
||||
|
||||
// @public (undocumented)
|
||||
export interface TLShapeUtilConstructor<T extends TLUnknownShape, U extends ShapeUtil<T> = ShapeUtil<T>> {
|
||||
// (undocumented)
|
||||
|
@ -2620,6 +2629,16 @@ export interface TLStateNodeConstructor {
|
|||
styles?: TLStyleType[];
|
||||
}
|
||||
|
||||
// @public (undocumented)
|
||||
export type TLStoreEventInfo = HistoryEntry<TLRecord>;
|
||||
|
||||
// @public (undocumented)
|
||||
export type TLStoreOptions = {
|
||||
customShapes?: Record<string, TLShapeInfo>;
|
||||
initialData?: StoreSnapshot<TLRecord>;
|
||||
defaultName?: string;
|
||||
};
|
||||
|
||||
// @public (undocumented)
|
||||
export type TLStoreWithStatus = {
|
||||
readonly status: 'error';
|
||||
|
|
|
@ -39,7 +39,12 @@ export {
|
|||
setUserPreferences,
|
||||
type TLUserPreferences,
|
||||
} from './lib/config/TLUserPreferences'
|
||||
export { createTLStore } from './lib/config/createTLStore'
|
||||
export {
|
||||
createTLStore,
|
||||
type TLShapeInfo,
|
||||
type TLStoreEventInfo,
|
||||
type TLStoreOptions,
|
||||
} from './lib/config/createTLStore'
|
||||
export { defaultShapes } from './lib/config/defaultShapes'
|
||||
export { defaultTools } from './lib/config/defaultTools'
|
||||
export {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Migrations, Store, StoreSnapshot } from '@tldraw/store'
|
||||
import { HistoryEntry, Migrations, Store, StoreSnapshot } from '@tldraw/store'
|
||||
import { TLRecord, TLStore, createTLSchema } from '@tldraw/tlschema'
|
||||
import { TLShapeUtilConstructor } from '../editor/shapeutils/ShapeUtil'
|
||||
|
||||
|
@ -16,6 +16,9 @@ export type TLStoreOptions = {
|
|||
defaultName?: string
|
||||
}
|
||||
|
||||
/** @public */
|
||||
export type TLStoreEventInfo = HistoryEntry<TLRecord>
|
||||
|
||||
/**
|
||||
* A helper for creating a TLStore. Custom shapes cannot override default shapes.
|
||||
*
|
||||
|
|
365
public-yarn.lock
365
public-yarn.lock
|
@ -1515,6 +1515,15 @@ __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"
|
||||
|
@ -5860,6 +5869,32 @@ __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"
|
||||
|
@ -6330,6 +6365,13 @@ __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"
|
||||
|
@ -6747,7 +6789,7 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"buffer@npm:^5.5.0":
|
||||
"buffer@npm:^5.5.0, buffer@npm:^5.6.0":
|
||||
version: 5.7.1
|
||||
resolution: "buffer@npm:5.7.1"
|
||||
dependencies:
|
||||
|
@ -7372,6 +7414,26 @@ __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"
|
||||
|
@ -7665,6 +7727,15 @@ __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"
|
||||
|
@ -7832,6 +7903,16 @@ __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-lazy-prop@npm:^2.0.0":
|
||||
version: 2.0.0
|
||||
resolution: "define-lazy-prop@npm:2.0.0"
|
||||
|
@ -8182,6 +8263,18 @@ __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"
|
||||
|
@ -8269,6 +8362,17 @@ __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"
|
||||
|
@ -9480,6 +9584,7 @@ __metadata:
|
|||
"@tldraw/tldraw": "workspace:*"
|
||||
"@tldraw/utils": "workspace:*"
|
||||
"@vercel/analytics": ^1.0.1
|
||||
concurrently: ^8.1.0
|
||||
dotenv: ^16.0.3
|
||||
lazyrepo: 0.0.0-alpha.27
|
||||
react: ^18.2.0
|
||||
|
@ -9488,6 +9593,8 @@ __metadata:
|
|||
signia: 0.1.4
|
||||
signia-react: 0.1.4
|
||||
vite: ^4.3.4
|
||||
y-websocket: ^1.5.0
|
||||
yjs: ^13.6.2
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
|
@ -10877,6 +10984,13 @@ __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"
|
||||
|
@ -11508,6 +11622,13 @@ __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"
|
||||
|
@ -12490,6 +12611,109 @@ __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"
|
||||
|
@ -12517,6 +12741,18 @@ __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"
|
||||
|
@ -12805,6 +13041,13 @@ __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"
|
||||
|
@ -14043,6 +14286,13 @@ __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"
|
||||
|
@ -14257,6 +14507,17 @@ __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"
|
||||
|
@ -15396,6 +15657,13 @@ __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"
|
||||
|
@ -16617,6 +16885,13 @@ __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"
|
||||
|
@ -16876,6 +17151,13 @@ __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"
|
||||
|
@ -17191,7 +17473,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.0.0, supports-color@npm:^8.1.0, supports-color@npm:^8.1.1":
|
||||
version: 8.1.1
|
||||
resolution: "supports-color@npm:8.1.1"
|
||||
dependencies:
|
||||
|
@ -18858,6 +19140,15 @@ __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"
|
||||
|
@ -18959,13 +19250,57 @@ __metadata:
|
|||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"xtend@npm:^4.0.0, xtend@npm:~4.0.1":
|
||||
"xtend@npm:^4.0.0, xtend@npm:^4.0.2, 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"
|
||||
|
@ -19099,6 +19434,21 @@ __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"
|
||||
|
@ -19118,6 +19468,15 @@ __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"
|
||||
|
|
Loading…
Reference in a new issue