@textbus/collaborate 5.2.2 → 5.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +2411 -933
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +2447 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/base/collab-history.ts","../src/base/collaborate.ts","../src/base/message-bus.ts","../src/base/multiple-doc-collab-history.ts","../src/base/sub-model-loader.ts","../src/base/sync-connector.ts","../src/connectors/hocuspocus-connector.ts","../src/connectors/y-websocket-connector.ts","../src/collaborate-module.ts","../src/multiple-document-collaborate-module.ts"],"sourcesContent":["import { Inject, Injectable, Optional } from '@viewfly/core'\nimport { History, HISTORY_STACK_SIZE, makeError, RootComponentRef, Scheduler } from '@textbus/core'\nimport { Observable, Subject, Subscription } from '@tanbo/stream'\nimport {\n Item,\n Transaction,\n UndoManager\n} from 'yjs'\n\nimport { Collaborate, CollaborateHistorySelectionPosition, CursorPosition } from './collaborate'\n\nexport abstract class CustomUndoManagerConfig {\n abstract captureTransaction?(arg0: Transaction): boolean\n\n abstract deleteFilter?(arg0: Item): boolean\n}\n\nconst collabHistoryErrorFn = makeError('CollabHistory')\n\n@Injectable()\nexport class CollabHistory implements History {\n onBack: Observable<void>\n onForward: Observable<void>\n onChange: Observable<void>\n onPush: Observable<void>\n\n get canBack() {\n return this.manager?.canUndo() || false\n }\n\n get canForward() {\n return this.manager?.canRedo() || false\n }\n\n private manager: UndoManager | null = null\n\n private historyItems: Array<CollaborateHistorySelectionPosition> = []\n private index = 0\n private subscriptions: Subscription[] = []\n\n private backEvent = new Subject<void>()\n private forwardEvent = new Subject<void>()\n private changeEvent = new Subject<void>()\n private pushEvent = new Subject<void>()\n\n constructor(private rootComponentRef: RootComponentRef,\n private collaborate: Collaborate,\n private scheduler: Scheduler,\n @Inject(HISTORY_STACK_SIZE) private stackSize: number,\n @Optional() private undoManagerConfig: CustomUndoManagerConfig) {\n this.onBack = this.backEvent.asObservable()\n this.onForward = this.forwardEvent.asObservable()\n this.onChange = this.changeEvent.asObservable()\n this.onPush = this.pushEvent.asObservable()\n\n }\n\n listen() {\n const root = this.collaborate.yDoc.getMap('RootComponent')\n const rootComponent = this.rootComponentRef.component!\n this.collaborate.syncRootComponent(this.collaborate.yDoc, root, rootComponent)\n\n const undoManagerConfig = this.undoManagerConfig || {}\n const manager = new UndoManager(root, {\n trackedOrigins: new Set<any>([this.collaborate.yDoc]),\n captureTransaction(arg) {\n if (undoManagerConfig.captureTransaction) {\n return undoManagerConfig.captureTransaction(arg)\n }\n return true\n },\n deleteFilter(item: Item) {\n if (undoManagerConfig.deleteFilter) {\n return undoManagerConfig.deleteFilter(item)\n }\n return true\n }\n })\n this.manager = manager\n\n let beforePosition: CursorPosition | null = null\n this.subscriptions.push(\n this.scheduler.onLocalChangeBefore.subscribe(() => {\n beforePosition = this.collaborate.getRelativeCursorLocation()\n }),\n this.collaborate.onAddSubModel.subscribe(() => {\n throw collabHistoryErrorFn('single document does not support submodels.')\n })\n )\n\n manager.on('stack-item-added', (event: any) => {\n if (event.type === 'undo') {\n if (event.origin === manager) {\n this.index++\n } else {\n this.historyItems.length = this.index\n this.historyItems.push({\n before: beforePosition,\n after: this.collaborate.getRelativeCursorLocation()\n })\n this.index++\n }\n } else {\n this.index--\n }\n if (manager.undoStack.length > this.stackSize) {\n this.historyItems.shift()\n manager.undoStack.shift()\n }\n if (event.origin === this.collaborate.yDoc) {\n this.pushEvent.next()\n }\n this.changeEvent.next()\n })\n manager.on('stack-item-popped', (ev: any) => {\n const index = ev.type === 'undo' ? this.index : this.index - 1\n const position = this.historyItems[index] || null\n const p = ev.type === 'undo' ? position?.before : position?.after\n this.collaborate.restoreCursorPosition(p)\n })\n }\n\n\n back() {\n if (this.canBack) {\n this.manager?.undo()\n this.backEvent.next()\n }\n }\n\n forward() {\n if (this.canForward) {\n this.manager?.redo()\n this.forwardEvent.next()\n }\n }\n\n clear() {\n const last = this.historyItems.pop()\n this.historyItems = last ? [last] : []\n this.index = last ? 1 : 0\n this.manager?.clear()\n this.changeEvent.next()\n }\n\n destroy() {\n this.index = 0\n this.historyItems = []\n this.subscriptions.forEach(i => i.unsubscribe())\n if (this.manager) {\n this.manager.destroy()\n this.manager.captureTransaction = () => true\n this.manager.deleteFilter = () => true\n this.manager.trackedOrigins = new Set([null])\n }\n\n this.manager = null\n }\n}\n","import { Injectable } from '@viewfly/core'\nimport { filter, map, Observable, Subject, Subscription } from '@tanbo/stream'\nimport {\n ChangeOrigin,\n Component,\n Registry,\n Formats,\n makeError,\n Scheduler,\n Selection,\n Slot,\n AsyncSlot,\n AsyncComponent,\n AbstractSelection,\n observe,\n ProxyModel\n} from '@textbus/core'\nimport {\n AbstractType,\n Array as YArray, createAbsolutePositionFromRelativePosition, createRelativePositionFromTypeIndex,\n Doc as YDoc,\n Map as YMap,\n RelativePosition,\n Text as YText,\n Transaction,\n UndoManager,\n YArrayEvent,\n YMapEvent,\n YTextEvent\n} from 'yjs'\n\nimport { SubModelLoader } from './sub-model-loader'\n\nexport interface RelativePositionRecord {\n doc: YDoc,\n position: RelativePosition\n}\n\nexport interface CursorPosition {\n anchor: RelativePositionRecord\n focus: RelativePositionRecord\n}\n\nexport interface CollaborateHistorySelectionPosition {\n before: CursorPosition | null\n after: CursorPosition | null\n}\n\nconst collaborateErrorFn = makeError('Collaborate')\n\nclass SlotMap {\n private slotAndYTextMap = new WeakMap<Slot, YText>()\n private yTextAndSlotMap = new WeakMap<YText, Slot>()\n\n set(key: Slot, value: YText): void\n set(key: YText, value: Slot): void\n set(key: any, value: any) {\n if (key instanceof Slot) {\n this.slotAndYTextMap.set(key, value)\n this.yTextAndSlotMap.set(value, key)\n } else {\n this.slotAndYTextMap.set(value, key)\n this.yTextAndSlotMap.set(key, value)\n }\n }\n\n get(key: Slot): YText | null\n get(key: YText): Slot | null\n get(key: any) {\n if (key instanceof Slot) {\n return this.slotAndYTextMap.get(key) || null\n }\n return this.yTextAndSlotMap.get(key) || null\n }\n\n delete(key: Slot | YText) {\n if (key instanceof Slot) {\n const v = this.slotAndYTextMap.get(key)\n this.slotAndYTextMap.delete(key)\n if (v) {\n this.yTextAndSlotMap.delete(v)\n }\n } else {\n const v = this.yTextAndSlotMap.get(key)\n this.yTextAndSlotMap.delete(key)\n if (v) {\n this.slotAndYTextMap.delete(v)\n }\n }\n }\n}\n\ninterface Update {\n record: boolean\n actions: Array<() => void>\n}\n\ninterface UpdateItem {\n record: boolean\n\n action(): void\n}\n\nexport interface SubModelLoaded {\n yType: AbstractType<any>\n yDoc: YDoc\n}\n\n@Injectable()\nexport class Collaborate {\n yDoc = new YDoc()\n slotMap = new SlotMap()\n onAddSubModel: Observable<SubModelLoaded>\n\n private subscriptions: Subscription[] = []\n private updateFromRemote = false\n private addSubModelEvent = new Subject<SubModelLoaded>()\n\n private updateRemoteActions = new WeakMap<YDoc, UpdateItem[]>()\n private noRecord = {}\n\n constructor(private scheduler: Scheduler,\n private registry: Registry,\n private selection: Selection,\n private subModelLoader: SubModelLoader) {\n this.onAddSubModel = this.addSubModelEvent.asObservable()\n }\n\n syncRootComponent(yDoc: YDoc, sharedComponent: YMap<any>, localComponent: Component<any>) {\n this.initSyncEvent(yDoc)\n this.syncComponent(yDoc, sharedComponent, localComponent)\n }\n\n syncRootSlot(yDoc: YDoc, sharedSlot: YText, localSlot: Slot) {\n if (sharedSlot.length) {\n localSlot.retain(0)\n localSlot.delete(localSlot.length)\n localSlot.cleanAttributes()\n localSlot.cleanFormats()\n this.initLocalSlotBySharedSlot(sharedSlot, localSlot)\n } else {\n yDoc.transact(() => {\n this.initSharedSlotByLocalSlot(sharedSlot, localSlot)\n })\n }\n this.initSyncEvent(yDoc)\n this.syncSlot(sharedSlot, localSlot)\n }\n\n getAbstractSelection(position: CursorPosition): AbstractSelection | null {\n const anchorPosition = createAbsolutePositionFromRelativePosition(position.anchor.position, position.anchor.doc)\n const focusPosition = createAbsolutePositionFromRelativePosition(position.focus.position, position.focus.doc)\n if (anchorPosition && focusPosition) {\n const focusSlot = this.slotMap.get(focusPosition.type as YText)\n const anchorSlot = this.slotMap.get(anchorPosition.type as YText)\n if (focusSlot && anchorSlot) {\n return {\n anchorSlot,\n anchorOffset: anchorPosition.index,\n focusSlot,\n focusOffset: focusPosition.index\n }\n }\n }\n return null\n }\n\n getRelativeCursorLocation(): CursorPosition | null {\n const { anchorSlot, anchorOffset, focusSlot, focusOffset } = this.selection\n if (anchorSlot) {\n const anchorYText = this.slotMap.get(anchorSlot)\n if (anchorYText) {\n const anchorPosition = createRelativePositionFromTypeIndex(anchorYText, anchorOffset!)\n if (focusSlot) {\n const focusYText = this.slotMap.get(focusSlot)\n if (focusYText) {\n const focusPosition = createRelativePositionFromTypeIndex(focusYText, focusOffset!)\n return {\n focus: {\n doc: focusYText.doc!,\n position: focusPosition\n },\n anchor: {\n doc: anchorYText.doc!,\n position: anchorPosition\n }\n }\n }\n }\n }\n }\n return null\n }\n\n restoreCursorPosition(position: CursorPosition | null) {\n if (!position) {\n this.selection.unSelect()\n return\n }\n const selection = this.getAbstractSelection(position)\n if (selection) {\n this.selection.setBaseAndExtent(\n selection.anchorSlot,\n selection.anchorOffset,\n selection.focusSlot,\n selection.focusOffset)\n }\n }\n\n private initSyncEvent(yDoc: YDoc) {\n this.subscriptions.push(\n this.scheduler.onDocChanged.pipe(\n map(item => {\n return item.filter(i => {\n return i.from !== ChangeOrigin.Remote\n })\n }),\n filter(item => {\n return item.length\n })\n ).subscribe(() => {\n const updates: Update[] = []\n\n let update: Update | null = null\n\n const updateRemoteActions = this.updateRemoteActions.get(yDoc) || []\n\n for (const item of updateRemoteActions) {\n if (!update) {\n update = {\n record: item.record,\n actions: []\n }\n updates.push(update)\n }\n if (update.record === item.record) {\n update.actions.push(item.action)\n } else {\n update = {\n record: item.record,\n actions: [item.action]\n }\n updates.push(update)\n }\n }\n\n this.updateRemoteActions.delete(yDoc)\n\n for (const item of updates) {\n yDoc.transact(() => {\n item.actions.forEach(fn => {\n fn()\n })\n }, item.record ? yDoc : this.noRecord)\n }\n })\n )\n }\n\n private syncComponent(yDoc: YDoc, sharedComponent: YMap<any>, localComponent: Component<any>) {\n let state = sharedComponent.get('state') as YMap<any>\n if (!state) {\n state = new YMap<any>()\n this.syncLocalMapToSharedMap(localComponent.state as ProxyModel<Record<string, any>>, state)\n yDoc.transact(() => {\n sharedComponent.set('state', state)\n })\n } else {\n Object.keys(localComponent.state).forEach(key => {\n Reflect.deleteProperty(localComponent.state, key)\n })\n this.syncSharedMapToLocalMap(state, localComponent.state as ProxyModel<Record<string, any>>)\n }\n }\n\n private syncSlot(sharedSlot: YText, localSlot: Slot) {\n const syncRemote = (ev: YTextEvent, tr: Transaction) => {\n this.runRemoteUpdate(tr, () => {\n localSlot.retain(0)\n ev.keysChanged.forEach(key => {\n const change = ev.keys.get(key)\n if (!change) {\n return\n }\n const updateType = change.action\n if (updateType === 'update' || updateType === 'add') {\n const attribute = this.registry.getAttribute(key)\n if (attribute) {\n localSlot.setAttribute(attribute, sharedSlot.getAttribute(key))\n }\n } else if (updateType === 'delete') {\n const attribute = this.registry.getAttribute(key)\n if (attribute) {\n localSlot.removeAttribute(attribute)\n }\n }\n })\n ev.delta.forEach(action => {\n if (Reflect.has(action, 'retain')) {\n if (action.attributes) {\n const formats = remoteFormatsToLocal(this.registry, action.attributes)\n if (formats.length) {\n localSlot.retain(action.retain!, formats)\n }\n }\n localSlot.retain(localSlot.index + action.retain!)\n } else if (action.insert) {\n const index = localSlot.index\n let length = 1\n if (typeof action.insert === 'string') {\n length = action.insert.length\n localSlot.insert(action.insert, remoteFormatsToLocal(this.registry, action.attributes))\n } else {\n const sharedComponent = action.insert as YMap<any>\n const component = this.createLocalComponentBySharedComponent(sharedComponent)\n localSlot.insert(component)\n }\n if (this.selection.isSelected && !(tr.origin instanceof UndoManager)) {\n if (localSlot === this.selection.anchorSlot && this.selection.anchorOffset! > index) {\n this.selection.setAnchor(localSlot, this.selection.anchorOffset! + length)\n }\n if (localSlot === this.selection.focusSlot && this.selection.focusOffset! > index) {\n this.selection.setFocus(localSlot, this.selection.focusOffset! + length)\n }\n }\n } else if (action.delete) {\n const index = localSlot.index\n localSlot.delete(action.delete)\n if (this.selection.isSelected && !(tr.origin instanceof UndoManager)) {\n if (localSlot === this.selection.anchorSlot && this.selection.anchorOffset! >= index) {\n this.selection.setAnchor(localSlot, this.selection.startOffset! - action.delete)\n }\n if (localSlot === this.selection.focusSlot && this.selection.focusOffset! >= index) {\n this.selection.setFocus(localSlot, this.selection.focusOffset! - action.delete)\n }\n }\n }\n })\n })\n }\n sharedSlot.observe(syncRemote)\n\n const sub = localSlot.onContentChange.subscribe(actions => {\n this.runLocalUpdate(sharedSlot.doc, true, () => {\n let offset = 0\n let length = 0\n for (const action of actions) {\n if (action.type === 'retain') {\n const formats = action.formats\n if (formats) {\n const keys = Object.keys(formats)\n let length = keys.length\n keys.forEach(key => {\n const formatter = this.registry.getFormatter(key)\n if (!formatter) {\n length--\n Reflect.deleteProperty(formats, key)\n }\n })\n if (length) {\n sharedSlot.format(offset, action.offset, formats)\n }\n } else {\n offset = action.offset\n }\n } else if (action.type === 'contentInsert') {\n const delta = sharedSlot.toDelta()\n const isEmpty = delta.length === 1 && delta[0].insert === Slot.emptyPlaceholder\n if (typeof action.content === 'string') {\n length = action.content.length\n sharedSlot.insert(offset, action.content, action.formats || {})\n } else {\n length = 1\n const sharedComponent = this.createSharedComponentByLocalComponent(action.ref as Component)\n sharedSlot.insertEmbed(offset, sharedComponent, action.formats || {})\n }\n\n if (isEmpty && offset === 0) {\n sharedSlot.delete(sharedSlot.length - 1, 1)\n }\n offset += length\n } else if (action.type === 'delete') {\n const delta = sharedSlot.toDelta()\n if (sharedSlot.length) {\n sharedSlot.delete(offset, action.count)\n }\n if (sharedSlot.length === 0) {\n sharedSlot.insert(0, '\\n', delta[0]?.attributes)\n }\n } else if (action.type === 'attrSet') {\n sharedSlot.setAttribute(action.name, action.value)\n } else if (action.type === 'attrDelete') {\n sharedSlot.removeAttribute(action.name)\n }\n }\n })\n })\n\n this.slotMap.set(localSlot, sharedSlot)\n\n localSlot.__changeMarker__.addDetachCallback(() => {\n this.slotMap.delete(localSlot)\n sharedSlot.unobserve(syncRemote)\n sub.unsubscribe()\n })\n }\n\n\n destroy() {\n this.subscriptions.forEach(i => i.unsubscribe())\n this.subscriptions = []\n }\n\n private syncSharedMapToLocalMap(sharedMap: YMap<any>, localMap: ProxyModel<Record<string, any>>) {\n sharedMap.forEach((value, key) => {\n localMap[key] = this.createLocalModelBySharedByModel(value)\n })\n this.syncObject(sharedMap, localMap)\n }\n\n private createLocalMapBySharedMap(sharedMap: YMap<any>): ProxyModel<Record<string, any>> {\n const localMap = observe({}) as ProxyModel<Record<string, any>>\n this.syncSharedMapToLocalMap(sharedMap, localMap)\n return localMap\n }\n\n private createLocalArrayBySharedArray(sharedArray: YArray<any>): ProxyModel<any[]> {\n const localArray = observe<any[]>([]) as ProxyModel<any[]>\n localArray.push(...sharedArray.map(item => this.createLocalModelBySharedByModel(item)))\n this.syncArray(sharedArray, localArray)\n return localArray\n }\n\n private syncLocalMapToSharedMap(localMap: ProxyModel<Record<string, any>>, sharedMap: YMap<any>) {\n Object.entries(localMap).forEach(([key, value]) => {\n sharedMap.set(key, this.createSharedModelByLocalModel(value))\n })\n this.syncObject(sharedMap, localMap)\n }\n\n private createSharedMapByLocalMap(localMap: ProxyModel<Record<string, any>>): YMap<any> {\n const sharedMap = new YMap<any>()\n this.syncLocalMapToSharedMap(localMap, sharedMap)\n return sharedMap\n }\n\n private createSharedArrayByLocalArray(localArray: ProxyModel<any[]>): YArray<any> {\n const sharedArray = new YArray<any>()\n localArray.forEach(value => {\n sharedArray.push([this.createSharedModelByLocalModel(value)])\n })\n this.syncArray(sharedArray, localArray)\n return sharedArray\n }\n\n private createSharedSlotByLocalSlot(localSlot: Slot): YText {\n const sharedSlot = new YText()\n const isAsyncSlot = localSlot instanceof AsyncSlot\n sharedSlot.setAttribute('schema', [...localSlot.schema])\n sharedSlot.setAttribute('type', isAsyncSlot ? 'async' : 'sync')\n\n if (isAsyncSlot) {\n let isDestroyed = false\n const sharedMetadata = this.createSharedMapByLocalMap(localSlot.metadata)\n sharedSlot.setAttribute('metadata', sharedMetadata)\n this.subModelLoader.createSubModelBySlot(localSlot).then(subDocument => {\n if (isDestroyed) {\n return\n }\n const content = subDocument.getText('content')\n const state = subDocument.getMap('state')\n this.syncLocalMapToSharedMap(localSlot.state, state)\n this.initSharedSlotByLocalSlot(content, localSlot)\n this.syncSlot(content, localSlot)\n this.addSubModelEvent.next({\n yDoc: subDocument,\n yType: content\n })\n this.initSyncEvent(subDocument)\n localSlot.loader.markAsLoaded()\n })\n localSlot.__changeMarker__.addDetachCallback(() => {\n isDestroyed = true\n })\n return sharedSlot\n }\n\n const sharedSlotState = new YMap()\n this.syncLocalMapToSharedMap(localSlot.state as ProxyModel<Record<string, any>>, sharedSlotState)\n sharedSlot.setAttribute('state', sharedSlotState)\n\n const sharedContent = new YText()\n this.initSharedSlotByLocalSlot(sharedContent, localSlot)\n sharedSlot.insertEmbed(0, sharedContent)\n this.syncSlot(sharedContent, localSlot)\n return sharedSlot\n }\n\n private initSharedSlotByLocalSlot(sharedContent: YText, localSlot: Slot) {\n let offset = 0\n localSlot.toDelta().forEach(i => {\n let formats: any = {}\n if (i.formats) {\n i.formats.forEach(item => {\n formats[item[0].name] = item[1]\n })\n } else {\n formats = null\n }\n if (typeof i.insert === 'string') {\n sharedContent.insert(offset, i.insert, formats)\n } else {\n const sharedComponent = this.createSharedComponentByLocalComponent(i.insert)\n sharedContent.insertEmbed(offset, sharedComponent, formats)\n }\n offset += i.insert.length\n })\n localSlot.getAttributes().forEach(item => {\n sharedContent.setAttribute(item[0].name, item[1])\n })\n }\n\n private createLocalSlotBySharedSlot(sharedSlot: YText): Slot {\n const type = sharedSlot.getAttribute('type')\n const schema = sharedSlot.getAttribute('schema')\n\n if (type === 'async') {\n const metadata = sharedSlot.getAttribute('metadata') as YMap<any>\n const slot = new AsyncSlot(schema || [], {}, {})\n this.syncSharedMapToLocalMap(metadata, slot.metadata as ProxyModel<Record<string, any>>)\n const loadedSubDocument = this.subModelLoader.getLoadedModelBySlot(slot)\n if (loadedSubDocument) {\n const subContent = loadedSubDocument.getText('content')\n const data = loadedSubDocument.getMap('state')\n this.syncSharedMapToLocalMap(data, slot.state as ProxyModel<Record<string, any>>)\n this.syncRootSlot(loadedSubDocument, subContent, slot)\n this.addSubModelEvent.next({\n yDoc: loadedSubDocument,\n yType: subContent\n })\n slot.loader.markAsLoaded()\n return slot\n }\n let isDestroyed = false\n slot.loader.onRequestLoad.toPromise().then(() => {\n return this.subModelLoader.loadSubModelBySlot(slot)\n }).then(subDocument => {\n if (isDestroyed) {\n return\n }\n const subContent = subDocument.getText('content')\n const state = subDocument.getMap('state')\n this.syncSharedMapToLocalMap(state, slot.state as ProxyModel<Record<string, any>>)\n this.syncRootSlot(subDocument, subContent, slot)\n this.addSubModelEvent.next({\n yDoc: subDocument,\n yType: subContent\n })\n slot.loader.markAsLoaded()\n })\n slot.__changeMarker__.addDetachCallback(() => {\n isDestroyed = true\n })\n return slot\n }\n\n const contentDelta = sharedSlot.toDelta()\n const content = contentDelta[0]?.insert\n\n if (!(content instanceof YText)) {\n throw collaborateErrorFn('shared slot content type is not `YText`.')\n }\n\n const localSlot = new Slot(schema || [], {})\n\n const sharedSlotState = sharedSlot.getAttribute('state')\n this.syncSharedMapToLocalMap(sharedSlotState, localSlot.state as ProxyModel<Record<string, any>>)\n\n this.initLocalSlotBySharedSlot(content, localSlot)\n\n this.syncSlot(content, localSlot)\n return localSlot\n }\n\n private initLocalSlotBySharedSlot(content: YText, localSlot: Slot) {\n const delta = content.toDelta()\n\n const attrs = content.getAttributes()\n Object.keys(attrs).forEach(key => {\n const attribute = this.registry.getAttribute(key)\n if (attribute) {\n localSlot.setAttribute(attribute, attrs[key])\n }\n })\n for (const action of delta) {\n if (action.insert) {\n if (typeof action.insert === 'string') {\n const formats = remoteFormatsToLocal(this.registry, action.attributes)\n localSlot.insert(action.insert, formats)\n } else {\n const sharedComponent = action.insert as YMap<any>\n const component = this.createLocalComponentBySharedComponent(sharedComponent)\n localSlot.insert(component, remoteFormatsToLocal(this.registry, action.attributes))\n }\n } else {\n throw collaborateErrorFn('unexpected delta action.')\n }\n }\n }\n\n private createSharedModelByLocalModel(localModel: any) {\n if (localModel instanceof Slot) {\n return this.createSharedSlotByLocalSlot(localModel)\n }\n if (Array.isArray(localModel)) {\n return this.createSharedArrayByLocalArray(localModel as ProxyModel<any[]>)\n }\n if (typeof localModel === 'object' && localModel !== null) {\n return this.createSharedMapByLocalMap(localModel)\n }\n return localModel\n }\n\n private createLocalModelBySharedByModel(sharedModel: any) {\n if (sharedModel instanceof YMap) {\n return this.createLocalMapBySharedMap(sharedModel)\n }\n if (sharedModel instanceof YArray) {\n return this.createLocalArrayBySharedArray(sharedModel)\n }\n if (sharedModel instanceof YText) {\n return this.createLocalSlotBySharedSlot(sharedModel)\n }\n return sharedModel\n }\n\n\n private createSharedComponentByLocalComponent(component: Component | AsyncComponent): YMap<any> {\n const sharedComponent = new YMap()\n sharedComponent.set('name', component.name)\n\n if (component instanceof AsyncComponent) {\n sharedComponent.set('type', 'async')\n const sharedMetadata = this.createSharedMapByLocalMap(component.metadata)\n sharedComponent.set('metadata', sharedMetadata)\n const state = component.state as ProxyModel<Record<string, any>>\n let isDestroyed = false\n state.__changeMarker__.addDetachCallback(() => {\n isDestroyed = true\n })\n this.subModelLoader.createSubModelByComponent(component).then(subDocument => {\n if (isDestroyed) {\n return\n }\n const state = subDocument.getMap('state')\n this.syncComponent(subDocument, state, component)\n this.addSubModelEvent.next({\n yType: state,\n yDoc: subDocument\n })\n this.initSyncEvent(subDocument)\n component.loader.markAsLoaded()\n })\n return sharedComponent\n }\n\n const sharedState = this.createSharedMapByLocalMap(component.state as ProxyModel<Record<string, any>>)\n sharedComponent.set('state', sharedState)\n sharedComponent.set('type', 'sync')\n return sharedComponent\n }\n\n private createLocalComponentBySharedComponent(yMap: YMap<any>): Component {\n const componentName = yMap.get('name') as string\n const type = yMap.get('type') as string\n\n let instance: Component<any> | null\n if (type === 'async') {\n instance = this.registry.createComponentByData(componentName, {}, {})\n if (instance instanceof AsyncComponent) {\n const sharedMetadata = yMap.get('metadata') as YMap<any>\n this.syncSharedMapToLocalMap(sharedMetadata, instance.metadata)\n const loadedSubDocument = this.subModelLoader.getLoadedModelByComponent(instance)\n if (loadedSubDocument) {\n const state = loadedSubDocument.getMap('state')\n this.syncComponent(loadedSubDocument, state, instance!)\n this.addSubModelEvent.next({\n yType: state,\n yDoc: loadedSubDocument\n })\n instance.loader.markAsLoaded()\n return instance\n }\n\n const state = instance.state as ProxyModel<Record<string, any>>\n let isDestroyed = false\n instance.loader.onRequestLoad.toPromise().then(() => {\n return this.subModelLoader.loadSubModelByComponent(instance as AsyncComponent)\n })\n .then(subDocument => {\n if (isDestroyed) {\n return\n }\n const state = subDocument.getMap('state')\n this.syncComponent(subDocument, state, instance!)\n this.addSubModelEvent.next({\n yType: state,\n yDoc: subDocument\n })\n ;(instance as AsyncComponent).loader.markAsLoaded()\n })\n state.__changeMarker__.addDetachCallback(() => {\n isDestroyed = true\n })\n } else if (instance instanceof Component) {\n throw collaborateErrorFn(`component name \\`${componentName}\\` is not a async component.`)\n }\n } else {\n const sharedState = yMap.get('state') as YMap<any>\n const state = this.createLocalMapBySharedMap(sharedState)\n instance = this.registry.createComponentByData(componentName, state)\n }\n if (instance) {\n return instance\n }\n\n throw collaborateErrorFn(`cannot find component factory \\`${componentName}\\`.`)\n }\n\n /**\n * 双向同步数组\n * @param sharedArray\n * @param localArray\n * @private\n */\n private syncArray(sharedArray: YArray<any>, localArray: ProxyModel<any[]>) {\n function logError(type: string) {\n console.error(collaborateErrorFn(`${type} error, length exceeded, path in ${localArray.__changeMarker__.getPaths().join('/')}`))\n }\n\n const sub = localArray.__changeMarker__.onSelfChange.subscribe((actions) => {\n this.runLocalUpdate(sharedArray.doc, !localArray.__changeMarker__.irrevocableUpdate, () => {\n let index = 0\n for (const action of actions) {\n switch (action.type) {\n case 'retain':\n index = action.offset\n break\n case 'insert': {\n const ref = action.ref\n if (!Array.isArray(ref)) {\n throw collaborateErrorFn('The insertion action must have a reference value.')\n }\n const data = ref.map(item => {\n return this.createSharedModelByLocalModel(item)\n })\n if (index <= sharedArray.length) {\n sharedArray.insert(index, data)\n } else {\n sharedArray.insert(sharedArray.length, data)\n logError('insert')\n }\n }\n break\n case 'delete':\n if (action.count <= 0) {\n break\n }\n if (index < sharedArray.length) {\n sharedArray.delete(index, action.count)\n } else {\n logError('delete')\n }\n break\n case 'setIndex':\n if (action.index < sharedArray.length) {\n sharedArray.delete(action.index, 1)\n sharedArray.insert(action.index, [this.createSharedModelByLocalModel(action.ref)])\n } else {\n sharedArray.insert(sharedArray.length, [this.createSharedModelByLocalModel(action.ref)])\n logError('setIndex')\n }\n break\n }\n }\n })\n })\n\n const syncRemote = (ev: YArrayEvent<any>, tr: Transaction) => {\n this.runRemoteUpdate(tr, () => {\n let index = 0\n ev.delta.forEach((action) => {\n if (Reflect.has(action, 'retain')) {\n index += action.retain as number\n } else if (action.insert) {\n const data = (action.insert as Array<any>).map((item) => {\n return this.createLocalModelBySharedByModel(item)\n })\n localArray.splice(index, 0, ...data)\n index += data.length\n } else if (action.delete) {\n localArray.splice(index, action.delete)\n }\n })\n })\n }\n\n sharedArray.observe(syncRemote)\n localArray.__changeMarker__.addDetachCallback(() => {\n sub.unsubscribe()\n sharedArray.unobserve(syncRemote)\n })\n }\n\n /**\n * 双向同步对象\n * @param sharedObject\n * @param localObject\n * @private\n */\n private syncObject(sharedObject: YMap<any>, localObject: ProxyModel<Record<string, any>>) {\n const syncRemote = (ev: YMapEvent<any>, tr: Transaction) => {\n this.runRemoteUpdate(tr, () => {\n ev.changes.keys.forEach((item, key) => {\n if (item.action === 'add' || item.action === 'update') {\n const value = sharedObject.get(key)\n localObject[key] = this.createLocalModelBySharedByModel(value)\n } else {\n Reflect.deleteProperty(localObject, key)\n }\n })\n })\n }\n\n sharedObject.observe(syncRemote)\n\n const sub = localObject.__changeMarker__.onSelfChange.subscribe((actions) => {\n this.runLocalUpdate(sharedObject.doc, !localObject.__changeMarker__.irrevocableUpdate, () => {\n for (const action of actions) {\n switch (action.type) {\n case 'propSet': {\n const subModel = this.createSharedModelByLocalModel(action.ref)\n sharedObject.set(action.key, subModel)\n if (sharedObject.size === 0) {\n // 奇怪的 bug,设置了子模型,但子模型会标记为 deleted,导致设置后无效\n console.error(collaborateErrorFn(`prop set error, key is ${action.key}`))\n }\n }\n break\n case 'propDelete':\n sharedObject.delete(action.key)\n break\n }\n }\n })\n })\n\n localObject.__changeMarker__.addDetachCallback(function () {\n sharedObject.unobserve(syncRemote)\n sub.unsubscribe()\n })\n }\n\n private runLocalUpdate(yDoc: YDoc | null, record: boolean, fn: () => void) {\n if (this.updateFromRemote || !yDoc) {\n return\n }\n let changeList = this.updateRemoteActions.get(yDoc)\n if (!changeList) {\n changeList = []\n this.updateRemoteActions.set(yDoc, changeList)\n }\n changeList.push({\n record,\n action: fn\n })\n }\n\n private runRemoteUpdate(tr: Transaction, fn: () => void) {\n if (tr.origin === tr.doc) {\n return\n }\n this.updateFromRemote = true\n if (tr.origin instanceof UndoManager) {\n this.scheduler.historyApplyTransact(fn)\n } else {\n this.scheduler.remoteUpdateTransact(fn)\n }\n this.updateFromRemote = false\n }\n}\n\nfunction remoteFormatsToLocal(registry: Registry, attrs?: any,) {\n const formats: Formats = []\n if (attrs) {\n Object.keys(attrs).forEach(key => {\n const formatter = registry.getFormatter(key)\n if (formatter) {\n formats.push([formatter, attrs[key]])\n }\n })\n }\n return formats\n}\n","import { Observable, Subject } from '@tanbo/stream'\nimport { Textbus } from '@textbus/core'\n\nexport interface Message<T> {\n clientId: number\n message: T\n}\n\n/**\n * 协作消息总线,用于同步各终端消息\n */\nexport abstract class MessageBus<T> {\n onSync: Observable<void>\n protected syncEvent = new Subject<void>()\n\n constructor() {\n this.onSync = this.syncEvent.asObservable()\n }\n\n /**\n * 立即同步消息\n */\n sync() {\n this.syncEvent.next()\n }\n\n /**\n * 当需要同步协作消息是,Textbus 会自动调用,并把返回数据同步到其它终端\n */\n abstract get(textbus: Textbus): T\n\n /**\n * 当远程消息更新时,Textbus 会自动调用\n * @param message\n * @param textbus\n */\n abstract consume(message: Message<T>[], textbus: Textbus): void\n}\n","import { AbstractType, Item, UndoManager, Doc as YDoc } from 'yjs'\nimport { Inject, Injectable, Optional } from '@viewfly/core'\nimport { Observable, Subject, Subscription } from '@tanbo/stream'\nimport { History, HISTORY_STACK_SIZE, RootComponentRef, Scheduler } from '@textbus/core'\n\nimport { Collaborate, CollaborateHistorySelectionPosition, CursorPosition } from './collaborate'\nimport { CustomUndoManagerConfig } from './collab-history'\n\ninterface HistoryStackItem extends CollaborateHistorySelectionPosition {\n undoManagers: UndoManager[]\n}\n\n@Injectable()\nexport class MultipleDocCollabHistory implements History {\n onChange: Observable<void>\n onBack: Observable<void>\n onForward: Observable<void>\n onPush: Observable<void>\n\n get canBack() {\n return this.actionStack.length > 0 && this.index > 0\n }\n\n get canForward() {\n return this.actionStack.length > 0 && this.index < this.actionStack.length\n }\n\n isListen = false\n\n private changeEvent = new Subject<void>()\n private backEvent = new Subject<void>()\n private forwardEvent = new Subject<void>()\n private pushEvent = new Subject<void>()\n private actionStack: HistoryStackItem[] = []\n\n private index = 0\n\n private stackItem: HistoryStackItem | null = null\n private timer: any = null\n private beforePosition: CursorPosition | null = null\n\n private subscription = new Subscription()\n\n private subDocs = new Set<AbstractType<any>>()\n\n private listenerCaches = new Set<UndoManager>()\n\n constructor(private collaborate: Collaborate,\n private scheduler: Scheduler,\n private rootComponentRef: RootComponentRef,\n @Inject(HISTORY_STACK_SIZE) private stackSize: number,\n @Optional() private undoManagerConfig: CustomUndoManagerConfig) {\n this.onChange = this.changeEvent.asObservable()\n this.onBack = this.backEvent.asObservable()\n this.onForward = this.forwardEvent.asObservable()\n this.onPush = this.pushEvent.asObservable()\n }\n\n listen() {\n this.isListen = true\n const root = this.collaborate.yDoc.getMap('RootComponent')\n const rootComponent = this.rootComponentRef.component!\n this.collaborate.syncRootComponent(this.collaborate.yDoc, root, rootComponent)\n\n this.listenItem(root, this.collaborate.yDoc)\n\n this.subscription.add(\n this.collaborate.onAddSubModel.subscribe(({ yType, yDoc }) => {\n if (this.subDocs.has(yType)) {\n return\n }\n this.subDocs.add(yType)\n if (this.isListen) {\n this.listenItem(yType, yDoc)\n }\n }),\n this.scheduler.onLocalChangeBefore.subscribe(() => {\n this.beforePosition = this.collaborate.getRelativeCursorLocation()\n })\n )\n }\n\n forward() {\n if (!this.canForward) {\n return\n }\n clearTimeout(this.timer as any)\n const item = this.actionStack[this.index]\n if (item) {\n for (const i of item.undoManagers) {\n i.redo()\n }\n this.collaborate.restoreCursorPosition(item.after)\n }\n this.index++\n this.forwardEvent.next()\n this.changeEvent.next()\n }\n\n back() {\n if (!this.canBack) {\n return\n }\n clearTimeout(this.timer as any)\n let historyStackItem: HistoryStackItem\n if (this.stackItem) {\n historyStackItem = this.stackItem\n this.stackItem = null\n } else {\n this.index--\n historyStackItem = this.actionStack[this.index]\n }\n let len = historyStackItem.undoManagers.length\n while (len > 0) {\n len--\n historyStackItem.undoManagers[len].undo()\n }\n if (historyStackItem) {\n const beforePosition = historyStackItem.before\n this.collaborate.restoreCursorPosition(beforePosition)\n this.backEvent.next()\n this.changeEvent.next()\n }\n }\n\n clear() {\n this.actionStack = []\n this.stackItem = null\n this.index = 0\n this.beforePosition = null\n clearTimeout(this.timer as any)\n this.listenerCaches.forEach((undoManager) => {\n undoManager.clear()\n })\n this.changeEvent.next()\n }\n\n destroy() {\n this.clear()\n this.beforePosition = this.stackItem = null\n this.subscription.unsubscribe()\n this.listenerCaches.forEach((undoManager) => {\n undoManager.destroy()\n })\n this.subDocs.clear()\n this.listenerCaches.clear()\n }\n\n private listenItem(yType: AbstractType<any>, yDoc: YDoc) {\n const undoManagerConfig = this.undoManagerConfig || {}\n const undoManager = new UndoManager(yType, {\n trackedOrigins: new Set([yDoc]),\n captureTimeout: 0,\n captureTransaction(arg) {\n if (undoManagerConfig.captureTransaction) {\n return undoManagerConfig.captureTransaction(arg)\n }\n return true\n },\n deleteFilter(item: Item) {\n if (undoManagerConfig.deleteFilter) {\n return undoManagerConfig.deleteFilter(item)\n }\n return true\n }\n })\n\n undoManager.on('stack-item-added', (event: any) => {\n if (event.type === 'undo' && !(event.origin instanceof UndoManager)) {\n if (this.index != this.actionStack.length) {\n const redoStack = this.actionStack.slice(this.index)\n redoStack.forEach(item => {\n item.undoManagers.forEach(i => {\n i.clear(false, true)\n })\n })\n this.actionStack.length = this.index\n this.changeEvent.next()\n }\n if (this.stackItem === null) {\n this.stackItem = {\n before: this.beforePosition,\n after: null,\n undoManagers: []\n }\n this.timer = setTimeout(() => {\n if (this.actionStack.length >= this.stackSize) {\n this.actionStack.shift()\n } else {\n this.index++\n }\n // this.beforePosition = this.collaborate.getRelativeCursorLocation()\n this.stackItem!.after = this.beforePosition\n this.actionStack.push(this.stackItem!)\n this.stackItem = null\n this.pushEvent.next()\n this.changeEvent.next()\n }, 500)\n }\n\n this.stackItem.undoManagers.push(undoManager)\n }\n })\n\n this.listenerCaches.add(undoManager)\n }\n}\n","import { Doc, Doc as YDoc } from 'yjs'\nimport { Injectable } from '@viewfly/core'\nimport { AsyncComponent, AsyncSlot, makeError } from '@textbus/core'\n\nconst subModelLoaderErrorFn = makeError('subModelLoaderError')\n\n/**\n * 子文档加载器\n */\nexport abstract class SubModelLoader {\n /**\n * 通过插槽获取已加载的文档\n * @param slot\n */\n abstract getLoadedModelBySlot(slot: AsyncSlot): YDoc | null\n\n /**\n * 通过组件获取已加载的文档\n * @param component\n */\n abstract getLoadedModelByComponent(component: AsyncComponent): YDoc | null\n\n /**\n * 当本地新增异步子插槽时调用\n * @param slot\n */\n abstract createSubModelBySlot(slot: AsyncSlot): Promise<YDoc>\n\n /**\n * 当本地新增异步子组件时调用\n * @param component\n */\n abstract createSubModelByComponent(component: AsyncComponent): Promise<YDoc>\n\n /**\n * 当远程异步子插槽同步到本地时调用\n * @param slot\n */\n abstract loadSubModelBySlot(slot: AsyncSlot): Promise<YDoc>\n\n /**\n * 当远程异步子组件同步到本地时调用\n * @param component\n */\n abstract loadSubModelByComponent(component: AsyncComponent): Promise<YDoc>\n}\n\n@Injectable()\nexport class NonSubModelLoader extends SubModelLoader {\n createSubModelBySlot(): Promise<Doc> {\n throw subModelLoaderErrorFn('single document does not support async slot.')\n }\n\n createSubModelByComponent(): Promise<Doc> {\n throw subModelLoaderErrorFn('single document does not support async component.')\n }\n\n loadSubModelByComponent(): Promise<Doc> {\n throw subModelLoaderErrorFn('single document does not support async component.')\n }\n\n loadSubModelBySlot(): Promise<Doc> {\n throw subModelLoaderErrorFn('single document does not support async slot.')\n }\n\n getLoadedModelBySlot(): Doc {\n throw subModelLoaderErrorFn('single document does not support async slot.')\n }\n\n getLoadedModelByComponent(): Doc {\n throw subModelLoaderErrorFn('single document does not support async component.')\n }\n}\n","import { Observable, Subject } from '@tanbo/stream'\n\n/**\n * 协作通信通用接口\n */\nexport abstract class SyncConnector {\n /**\n * 当文档加载完成时触发的观察者\n */\n onLoad: Observable<void>\n /**\n * 当文档 awareness 状态变更时触发的观察者\n */\n onStateChange: Observable<any[]>\n\n protected loadEvent = new Subject<void>()\n protected stateChangeEvent = new Subject<any[]>()\n\n protected constructor() {\n this.onLoad = this.loadEvent.asObservable()\n this.onStateChange = this.stateChangeEvent.asObservable()\n }\n\n /**\n * 设置 awareness 状态\n * @param key 状态的 key\n * @param data 状态值\n */\n abstract setLocalStateField(key: string, data: Record<string, any>): void\n\n /**\n * 当文档销毁时调用\n */\n abstract onDestroy(): void\n}\n","import { HocuspocusProvider } from '@hocuspocus/provider'\nimport { HocuspocusProviderConfiguration } from '@hocuspocus/provider'\n\nimport { SyncConnector } from '../base/sync-connector'\nimport { Message } from '../base/message-bus'\n\nexport class HocuspocusConnector extends SyncConnector {\n provide: HocuspocusProvider\n\n constructor(config: HocuspocusProviderConfiguration) {\n super()\n this.provide = new HocuspocusProvider({\n ...config,\n onSynced: (data) => {\n config.onSynced?.(data)\n this.loadEvent.next()\n },\n onAwarenessUpdate: (data) => {\n config.onAwarenessUpdate?.(data)\n const states: Message<any>[] = data.states.map(state => {\n return {\n clientId: state.clientId,\n message: state.message as any\n }\n })\n this.stateChangeEvent.next(states)\n },\n })\n }\n\n setLocalStateField(key: string, data: Record<string, any>) {\n this.provide.setAwarenessField(key, data)\n }\n\n onDestroy() {\n this.provide.disconnect()\n this.provide.destroy()\n }\n}\n","import { Doc as YDoc } from 'yjs'\nimport { WebsocketProvider } from 'y-websocket'\n\nimport { SyncConnector } from '../base/sync-connector'\nimport { Message } from '../base/message-bus'\n\nexport class YWebsocketConnector extends SyncConnector {\n provide: WebsocketProvider\n\n private onSync = (is: boolean) => {\n if (is) {\n this.loadEvent.next()\n }\n }\n\n private onUpdate = () => {\n const syncStates: Message<any>[] = []\n this.provide.awareness.getStates().forEach((state, id) => {\n syncStates.push({\n clientId: id,\n message: state.message,\n })\n })\n this.stateChangeEvent.next(syncStates)\n }\n\n constructor(url: string, roomName: string, yDoc: YDoc) {\n super()\n this.onLoad = this.loadEvent.asObservable()\n this.onStateChange = this.stateChangeEvent.asObservable()\n this.provide = new WebsocketProvider(url, roomName, yDoc)\n\n this.provide.once('sync', this.onSync)\n this.provide.awareness.on('update', this.onUpdate)\n }\n\n setLocalStateField(key: string, data: Record<string, any>) {\n this.provide.awareness.setLocalStateField(key, data)\n }\n\n onDestroy() {\n this.provide.awareness.off('update', this.onUpdate)\n this.provide.disconnect()\n this.provide.destroy()\n }\n}\n","import { History, Module, Selection, Textbus } from '@textbus/core'\nimport { Subscription } from '@tanbo/stream'\nimport { Provider } from '@viewfly/core'\nimport { Doc as YDoc } from 'yjs'\n\nimport { CollabHistory, Collaborate, MessageBus, NonSubModelLoader, SubModelLoader, SyncConnector } from './base/_api'\n\nexport interface CollaborateConfig {\n createConnector(yDoc: YDoc): SyncConnector\n\n onlyLoad?: boolean\n}\n\nexport class CollaborateModule implements Module {\n private subscription = new Subscription()\n providers: Provider[] = [\n Collaborate,\n CollabHistory,\n {\n provide: History,\n useExisting: CollabHistory\n }, {\n provide: SyncConnector,\n useFactory: (collab: Collaborate) => {\n return this.config.createConnector(collab.yDoc)\n },\n deps: [Collaborate]\n }, {\n provide: SubModelLoader,\n useClass: NonSubModelLoader\n }\n ]\n\n private timer: any = null\n\n constructor(public config: CollaborateConfig) {\n }\n\n setup(textbus: Textbus): Promise<(() => void) | void> | (() => void) | void {\n const messageBus = textbus.get(MessageBus, null)\n const connector = textbus.get(SyncConnector)\n const collab = textbus.get(Collaborate)\n if (messageBus) {\n const selection = textbus.get(Selection)\n connector.setLocalStateField('message', messageBus.get(textbus))\n this.subscription.add(\n messageBus.onSync.subscribe(() => {\n connector.setLocalStateField('message', messageBus.get(textbus))\n }),\n selection.onChange.subscribe(() => {\n connector.setLocalStateField('message', messageBus.get(textbus))\n }),\n connector.onStateChange.subscribe((states) => {\n messageBus.consume(states, textbus)\n })\n )\n }\n\n return connector.onLoad.toPromise().then(() => {\n if (!this.config.onlyLoad) {\n return\n }\n const root = collab.yDoc.getMap('RootComponent')\n if (root.has('state')) {\n return\n }\n return new Promise(resolve => {\n const testing = () => {\n if (root.has('state')) {\n resolve()\n } else {\n this.timer = setTimeout(testing, 1000)\n }\n }\n this.timer = setTimeout(testing, 1000)\n })\n })\n }\n\n onDestroy(textbus: Textbus) {\n this.subscription.unsubscribe()\n textbus.get(Collaborate).destroy()\n textbus.get(History).destroy()\n textbus.get(SyncConnector).onDestroy()\n clearTimeout(this.timer)\n }\n}\n","import { History, Module, Selection, Textbus } from '@textbus/core'\nimport { Provider } from '@viewfly/core'\nimport { Subscription } from '@tanbo/stream'\n\nimport { Collaborate, SyncConnector, MultipleDocCollabHistory, SubModelLoader, MessageBus } from './base/_api'\nimport { CollaborateConfig } from './collaborate-module'\n\nexport interface MultipleDocCollaborateConfig extends CollaborateConfig {\n subModelLoader: SubModelLoader\n}\n\nexport class MultipleDocumentCollaborateModule implements Module {\n private subscription = new Subscription()\n providers: Provider[] = [\n Collaborate,\n MultipleDocCollabHistory,\n {\n provide: History,\n useExisting: MultipleDocCollabHistory\n }, {\n provide: SyncConnector,\n useFactory: (collab: Collaborate) => {\n return this.config.createConnector(collab.yDoc)\n },\n deps: [Collaborate]\n }, {\n provide: SubModelLoader,\n useFactory: () => {\n return this.config.subModelLoader\n }\n }\n ]\n\n private timer: any = null\n\n constructor(public config: MultipleDocCollaborateConfig) {\n }\n\n setup(textbus: Textbus): Promise<(() => void) | void> | (() => void) | void {\n const messageBus = textbus.get(MessageBus, null)\n const connector = textbus.get(SyncConnector)\n const collab = textbus.get(Collaborate)\n if (messageBus) {\n const selection = textbus.get(Selection)\n connector.setLocalStateField('message', messageBus.get(textbus))\n this.subscription.add(\n messageBus.onSync.subscribe(() => {\n connector.setLocalStateField('message', messageBus.get(textbus))\n }),\n selection.onChange.subscribe(() => {\n connector.setLocalStateField('message', messageBus.get(textbus))\n }),\n connector.onStateChange.subscribe((states) => {\n messageBus.consume(states, textbus)\n })\n )\n }\n return connector.onLoad.toPromise().then(() => {\n if (!this.config.onlyLoad) {\n return\n }\n const root = collab.yDoc.getMap('RootComponent')\n if (root.has('state')) {\n return\n }\n return new Promise(resolve => {\n const testing = () => {\n if (root.has('state')) {\n resolve()\n } else {\n this.timer = setTimeout(testing, 1000)\n }\n }\n this.timer = setTimeout(testing, 1000)\n })\n })\n }\n\n onDestroy(textbus: Textbus) {\n this.subscription.unsubscribe()\n textbus.get(Collaborate).destroy()\n textbus.get(History).destroy()\n textbus.get(SyncConnector).onDestroy()\n clearTimeout(this.timer)\n }\n}\n"],"names":["CustomUndoManagerConfig","collabHistoryErrorFn","makeError","CollabHistory","rootComponentRef","collaborate","scheduler","stackSize","undoManagerConfig","Subject","root","rootComponent","manager","UndoManager","arg","item","beforePosition","event","ev","index","position","p","last","i","__decorateClass","Injectable","__decorateParam","HISTORY_STACK_SIZE","Optional","collaborateErrorFn","SlotMap","key","value","Slot","v","Collaborate","registry","selection","subModelLoader","YDoc","yDoc","sharedComponent","localComponent","sharedSlot","localSlot","anchorPosition","createAbsolutePositionFromRelativePosition","focusPosition","focusSlot","anchorSlot","anchorOffset","focusOffset","anchorYText","createRelativePositionFromTypeIndex","focusYText","map","ChangeOrigin","filter","updates","update","updateRemoteActions","fn","state","YMap","syncRemote","tr","change","updateType","attribute","action","formats","remoteFormatsToLocal","length","component","sub","actions","offset","keys","delta","isEmpty","sharedMap","localMap","observe","sharedArray","localArray","YArray","YText","isAsyncSlot","AsyncSlot","isDestroyed","sharedMetadata","subDocument","content","sharedSlotState","sharedContent","type","schema","metadata","slot","loadedSubDocument","subContent","data","attrs","localModel","sharedModel","AsyncComponent","sharedState","yMap","componentName","instance","Component","logError","ref","sharedObject","localObject","subModel","record","changeList","formatter","MessageBus","MultipleDocCollabHistory","Subscription","yType","historyStackItem","len","undoManager","subModelLoaderErrorFn","SubModelLoader","NonSubModelLoader","SyncConnector","HocuspocusConnector","config","HocuspocusProvider","states","YWebsocketConnector","is","syncStates","id","url","roomName","WebsocketProvider","CollaborateModule","History","collab","textbus","messageBus","connector","Selection","resolve","testing","MultipleDocumentCollaborateModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/base/sub-model-loader.ts","../src/base/collaborate.ts","../src/base/collab-history.ts","../src/base/message-bus.ts","../src/base/multiple-doc-collab-history.ts","../src/base/sync-connector.ts","../src/connectors/hocuspocus-connector.ts","../src/connectors/y-websocket-connector.ts","../src/collaborate-module.ts","../src/multiple-document-collaborate-module.ts"],"sourcesContent":["import { Doc, Doc as YDoc } from 'yjs'\nimport { Injectable } from '@viewfly/core'\nimport { AsyncComponent, AsyncSlot, makeError } from '@textbus/core'\n\nconst subModelLoaderErrorFn = makeError('subModelLoaderError')\n\n/**\n * 子文档加载器\n */\nexport abstract class SubModelLoader {\n /**\n * 通过插槽获取已加载的文档\n * @param slot\n */\n abstract getLoadedModelBySlot(slot: AsyncSlot): YDoc | null\n\n /**\n * 通过组件获取已加载的文档\n * @param component\n */\n abstract getLoadedModelByComponent(component: AsyncComponent): YDoc | null\n\n /**\n * 当本地新增异步子插槽时调用\n * @param slot\n */\n abstract createSubModelBySlot(slot: AsyncSlot): Promise<YDoc>\n\n /**\n * 当本地新增异步子组件时调用\n * @param component\n */\n abstract createSubModelByComponent(component: AsyncComponent): Promise<YDoc>\n\n /**\n * 当远程异步子插槽同步到本地时调用\n * @param slot\n */\n abstract loadSubModelBySlot(slot: AsyncSlot): Promise<YDoc>\n\n /**\n * 当远程异步子组件同步到本地时调用\n * @param component\n */\n abstract loadSubModelByComponent(component: AsyncComponent): Promise<YDoc>\n}\n\n@Injectable()\nexport class NonSubModelLoader extends SubModelLoader {\n createSubModelBySlot(): Promise<Doc> {\n throw subModelLoaderErrorFn('single document does not support async slot.')\n }\n\n createSubModelByComponent(): Promise<Doc> {\n throw subModelLoaderErrorFn('single document does not support async component.')\n }\n\n loadSubModelByComponent(): Promise<Doc> {\n throw subModelLoaderErrorFn('single document does not support async component.')\n }\n\n loadSubModelBySlot(): Promise<Doc> {\n throw subModelLoaderErrorFn('single document does not support async slot.')\n }\n\n getLoadedModelBySlot(): Doc {\n throw subModelLoaderErrorFn('single document does not support async slot.')\n }\n\n getLoadedModelByComponent(): Doc {\n throw subModelLoaderErrorFn('single document does not support async component.')\n }\n}\n","import { Injectable } from '@viewfly/core'\nimport { filter, map, Observable, Subject, Subscription } from '@tanbo/stream'\nimport {\n ChangeOrigin,\n Component,\n Registry,\n Formats,\n makeError,\n Scheduler,\n Selection,\n Slot,\n AsyncSlot,\n AsyncComponent,\n AbstractSelection,\n observe,\n ProxyModel\n} from '@textbus/core'\nimport {\n AbstractType,\n Array as YArray, createAbsolutePositionFromRelativePosition, createRelativePositionFromTypeIndex,\n Doc as YDoc,\n Map as YMap,\n RelativePosition,\n Text as YText,\n Transaction,\n UndoManager,\n YArrayEvent,\n YMapEvent,\n YTextEvent\n} from 'yjs'\n\nimport { SubModelLoader } from './sub-model-loader'\n\nexport interface RelativePositionRecord {\n doc: YDoc,\n position: RelativePosition\n}\n\nexport interface CursorPosition {\n anchor: RelativePositionRecord\n focus: RelativePositionRecord\n}\n\nexport interface CollaborateHistorySelectionPosition {\n before: CursorPosition | null\n after: CursorPosition | null\n}\n\nconst collaborateErrorFn = makeError('Collaborate')\n\nclass SlotMap {\n private slotAndYTextMap = new WeakMap<Slot, YText>()\n private yTextAndSlotMap = new WeakMap<YText, Slot>()\n\n set(key: Slot, value: YText): void\n set(key: YText, value: Slot): void\n set(key: any, value: any) {\n if (key instanceof Slot) {\n this.slotAndYTextMap.set(key, value)\n this.yTextAndSlotMap.set(value, key)\n } else {\n this.slotAndYTextMap.set(value, key)\n this.yTextAndSlotMap.set(key, value)\n }\n }\n\n get(key: Slot): YText | null\n get(key: YText): Slot | null\n get(key: any) {\n if (key instanceof Slot) {\n return this.slotAndYTextMap.get(key) || null\n }\n return this.yTextAndSlotMap.get(key) || null\n }\n\n delete(key: Slot | YText) {\n if (key instanceof Slot) {\n const v = this.slotAndYTextMap.get(key)\n this.slotAndYTextMap.delete(key)\n if (v) {\n this.yTextAndSlotMap.delete(v)\n }\n } else {\n const v = this.yTextAndSlotMap.get(key)\n this.yTextAndSlotMap.delete(key)\n if (v) {\n this.slotAndYTextMap.delete(v)\n }\n }\n }\n}\n\ninterface Update {\n record: boolean\n actions: Array<() => void>\n}\n\ninterface UpdateItem {\n record: boolean\n\n action(): void\n}\n\nexport interface SubModelLoaded {\n yType: AbstractType<any>\n yDoc: YDoc\n}\n\n@Injectable()\nexport class Collaborate {\n yDoc = new YDoc()\n slotMap = new SlotMap()\n onAddSubModel: Observable<SubModelLoaded>\n\n private subscriptions: Subscription[] = []\n private updateFromRemote = false\n private addSubModelEvent = new Subject<SubModelLoaded>()\n\n private updateRemoteActions = new WeakMap<YDoc, UpdateItem[]>()\n private noRecord = {}\n\n constructor(private scheduler: Scheduler,\n private registry: Registry,\n private selection: Selection,\n private subModelLoader: SubModelLoader) {\n this.onAddSubModel = this.addSubModelEvent.asObservable()\n }\n\n syncRootComponent(yDoc: YDoc, sharedComponent: YMap<any>, localComponent: Component<any>) {\n this.initSyncEvent(yDoc)\n this.syncComponent(yDoc, sharedComponent, localComponent)\n }\n\n syncRootSlot(yDoc: YDoc, sharedSlot: YText, localSlot: Slot) {\n if (sharedSlot.length) {\n localSlot.retain(0)\n localSlot.delete(localSlot.length)\n localSlot.cleanAttributes()\n localSlot.cleanFormats()\n this.initLocalSlotBySharedSlot(sharedSlot, localSlot)\n } else {\n yDoc.transact(() => {\n this.initSharedSlotByLocalSlot(sharedSlot, localSlot)\n })\n }\n this.initSyncEvent(yDoc)\n this.syncSlot(sharedSlot, localSlot)\n }\n\n getAbstractSelection(position: CursorPosition): AbstractSelection | null {\n const anchorPosition = createAbsolutePositionFromRelativePosition(position.anchor.position, position.anchor.doc)\n const focusPosition = createAbsolutePositionFromRelativePosition(position.focus.position, position.focus.doc)\n if (anchorPosition && focusPosition) {\n const focusSlot = this.slotMap.get(focusPosition.type as YText)\n const anchorSlot = this.slotMap.get(anchorPosition.type as YText)\n if (focusSlot && anchorSlot) {\n return {\n anchorSlot,\n anchorOffset: anchorPosition.index,\n focusSlot,\n focusOffset: focusPosition.index\n }\n }\n }\n return null\n }\n\n getRelativeCursorLocation(): CursorPosition | null {\n const { anchorSlot, anchorOffset, focusSlot, focusOffset } = this.selection\n if (anchorSlot) {\n const anchorYText = this.slotMap.get(anchorSlot)\n if (anchorYText) {\n const anchorPosition = createRelativePositionFromTypeIndex(anchorYText, anchorOffset!)\n if (focusSlot) {\n const focusYText = this.slotMap.get(focusSlot)\n if (focusYText) {\n const focusPosition = createRelativePositionFromTypeIndex(focusYText, focusOffset!)\n return {\n focus: {\n doc: focusYText.doc!,\n position: focusPosition\n },\n anchor: {\n doc: anchorYText.doc!,\n position: anchorPosition\n }\n }\n }\n }\n }\n }\n return null\n }\n\n restoreCursorPosition(position: CursorPosition | null) {\n if (!position) {\n this.selection.unSelect()\n return\n }\n const selection = this.getAbstractSelection(position)\n if (selection) {\n this.selection.setBaseAndExtent(\n selection.anchorSlot,\n selection.anchorOffset,\n selection.focusSlot,\n selection.focusOffset)\n }\n }\n\n private initSyncEvent(yDoc: YDoc) {\n this.subscriptions.push(\n this.scheduler.onDocChanged.pipe(\n map(item => {\n return item.filter(i => {\n return i.from !== ChangeOrigin.Remote\n })\n }),\n filter(item => {\n return item.length\n })\n ).subscribe(() => {\n const updates: Update[] = []\n\n let update: Update | null = null\n\n const updateRemoteActions = this.updateRemoteActions.get(yDoc) || []\n\n for (const item of updateRemoteActions) {\n if (!update) {\n update = {\n record: item.record,\n actions: []\n }\n updates.push(update)\n }\n if (update.record === item.record) {\n update.actions.push(item.action)\n } else {\n update = {\n record: item.record,\n actions: [item.action]\n }\n updates.push(update)\n }\n }\n\n this.updateRemoteActions.delete(yDoc)\n\n for (const item of updates) {\n yDoc.transact(() => {\n item.actions.forEach(fn => {\n fn()\n })\n }, item.record ? yDoc : this.noRecord)\n }\n })\n )\n }\n\n private syncComponent(yDoc: YDoc, sharedComponent: YMap<any>, localComponent: Component<any>) {\n let state = sharedComponent.get('state') as YMap<any>\n if (!state) {\n state = new YMap<any>()\n this.syncLocalMapToSharedMap(localComponent.state as ProxyModel<Record<string, any>>, state)\n yDoc.transact(() => {\n sharedComponent.set('state', state)\n })\n } else {\n Object.keys(localComponent.state).forEach(key => {\n Reflect.deleteProperty(localComponent.state, key)\n })\n this.syncSharedMapToLocalMap(state, localComponent.state as ProxyModel<Record<string, any>>)\n }\n }\n\n private syncSlot(sharedSlot: YText, localSlot: Slot) {\n const syncRemote = (ev: YTextEvent, tr: Transaction) => {\n this.runRemoteUpdate(tr, () => {\n localSlot.retain(0)\n ev.keysChanged.forEach(key => {\n const change = ev.keys.get(key)\n if (!change) {\n return\n }\n const updateType = change.action\n if (updateType === 'update' || updateType === 'add') {\n const attribute = this.registry.getAttribute(key)\n if (attribute) {\n localSlot.setAttribute(attribute, sharedSlot.getAttribute(key))\n }\n } else if (updateType === 'delete') {\n const attribute = this.registry.getAttribute(key)\n if (attribute) {\n localSlot.removeAttribute(attribute)\n }\n }\n })\n ev.delta.forEach(action => {\n if (Reflect.has(action, 'retain')) {\n if (action.attributes) {\n const formats = remoteFormatsToLocal(this.registry, action.attributes)\n if (formats.length) {\n localSlot.retain(action.retain!, formats)\n }\n }\n localSlot.retain(localSlot.index + action.retain!)\n } else if (action.insert) {\n const index = localSlot.index\n let length = 1\n if (typeof action.insert === 'string') {\n length = action.insert.length\n localSlot.insert(action.insert, remoteFormatsToLocal(this.registry, action.attributes))\n } else {\n const sharedComponent = action.insert as YMap<any>\n const component = this.createLocalComponentBySharedComponent(sharedComponent)\n localSlot.insert(component)\n }\n if (this.selection.isSelected && !(tr.origin instanceof UndoManager)) {\n if (localSlot === this.selection.anchorSlot && this.selection.anchorOffset! > index) {\n this.selection.setAnchor(localSlot, this.selection.anchorOffset! + length)\n }\n if (localSlot === this.selection.focusSlot && this.selection.focusOffset! > index) {\n this.selection.setFocus(localSlot, this.selection.focusOffset! + length)\n }\n }\n } else if (action.delete) {\n const index = localSlot.index\n localSlot.delete(action.delete)\n if (this.selection.isSelected && !(tr.origin instanceof UndoManager)) {\n if (localSlot === this.selection.anchorSlot && this.selection.anchorOffset! >= index) {\n this.selection.setAnchor(localSlot, this.selection.startOffset! - action.delete)\n }\n if (localSlot === this.selection.focusSlot && this.selection.focusOffset! >= index) {\n this.selection.setFocus(localSlot, this.selection.focusOffset! - action.delete)\n }\n }\n }\n })\n })\n }\n sharedSlot.observe(syncRemote)\n\n const sub = localSlot.onContentChange.subscribe(actions => {\n this.runLocalUpdate(sharedSlot.doc, true, () => {\n let offset = 0\n let length = 0\n for (const action of actions) {\n if (action.type === 'retain') {\n const formats = action.formats\n if (formats) {\n const keys = Object.keys(formats)\n let length = keys.length\n keys.forEach(key => {\n const formatter = this.registry.getFormatter(key)\n if (!formatter) {\n length--\n Reflect.deleteProperty(formats, key)\n }\n })\n if (length) {\n sharedSlot.format(offset, action.offset, formats)\n }\n } else {\n offset = action.offset\n }\n } else if (action.type === 'contentInsert') {\n const delta = sharedSlot.toDelta()\n const isEmpty = delta.length === 1 && delta[0].insert === Slot.emptyPlaceholder\n if (typeof action.content === 'string') {\n length = action.content.length\n sharedSlot.insert(offset, action.content, action.formats || {})\n } else {\n length = 1\n const sharedComponent = this.createSharedComponentByLocalComponent(action.ref as Component)\n sharedSlot.insertEmbed(offset, sharedComponent, action.formats || {})\n }\n\n if (isEmpty && offset === 0) {\n sharedSlot.delete(sharedSlot.length - 1, 1)\n }\n offset += length\n } else if (action.type === 'delete') {\n const delta = sharedSlot.toDelta()\n if (sharedSlot.length) {\n sharedSlot.delete(offset, action.count)\n }\n if (sharedSlot.length === 0) {\n sharedSlot.insert(0, '\\n', delta[0]?.attributes)\n }\n } else if (action.type === 'attrSet') {\n sharedSlot.setAttribute(action.name, action.value)\n } else if (action.type === 'attrDelete') {\n sharedSlot.removeAttribute(action.name)\n }\n }\n })\n })\n\n this.slotMap.set(localSlot, sharedSlot)\n\n localSlot.__changeMarker__.addDetachCallback(() => {\n this.slotMap.delete(localSlot)\n sharedSlot.unobserve(syncRemote)\n sub.unsubscribe()\n })\n }\n\n\n destroy() {\n this.subscriptions.forEach(i => i.unsubscribe())\n this.subscriptions = []\n }\n\n private syncSharedMapToLocalMap(sharedMap: YMap<any>, localMap: ProxyModel<Record<string, any>>) {\n sharedMap.forEach((value, key) => {\n localMap[key] = this.createLocalModelBySharedByModel(value)\n })\n this.syncObject(sharedMap, localMap)\n }\n\n private createLocalMapBySharedMap(sharedMap: YMap<any>): ProxyModel<Record<string, any>> {\n const localMap = observe({}) as ProxyModel<Record<string, any>>\n this.syncSharedMapToLocalMap(sharedMap, localMap)\n return localMap\n }\n\n private createLocalArrayBySharedArray(sharedArray: YArray<any>): ProxyModel<any[]> {\n const localArray = observe<any[]>([]) as ProxyModel<any[]>\n localArray.push(...sharedArray.map(item => this.createLocalModelBySharedByModel(item)))\n this.syncArray(sharedArray, localArray)\n return localArray\n }\n\n private syncLocalMapToSharedMap(localMap: ProxyModel<Record<string, any>>, sharedMap: YMap<any>) {\n Object.entries(localMap).forEach(([key, value]) => {\n sharedMap.set(key, this.createSharedModelByLocalModel(value))\n })\n this.syncObject(sharedMap, localMap)\n }\n\n private createSharedMapByLocalMap(localMap: ProxyModel<Record<string, any>>): YMap<any> {\n const sharedMap = new YMap<any>()\n this.syncLocalMapToSharedMap(localMap, sharedMap)\n return sharedMap\n }\n\n private createSharedArrayByLocalArray(localArray: ProxyModel<any[]>): YArray<any> {\n const sharedArray = new YArray<any>()\n localArray.forEach(value => {\n sharedArray.push([this.createSharedModelByLocalModel(value)])\n })\n this.syncArray(sharedArray, localArray)\n return sharedArray\n }\n\n private createSharedSlotByLocalSlot(localSlot: Slot): YText {\n const sharedSlot = new YText()\n const isAsyncSlot = localSlot instanceof AsyncSlot\n sharedSlot.setAttribute('schema', [...localSlot.schema])\n sharedSlot.setAttribute('type', isAsyncSlot ? 'async' : 'sync')\n\n if (isAsyncSlot) {\n let isDestroyed = false\n const sharedMetadata = this.createSharedMapByLocalMap(localSlot.metadata)\n sharedSlot.setAttribute('metadata', sharedMetadata)\n this.subModelLoader.createSubModelBySlot(localSlot).then(subDocument => {\n if (isDestroyed) {\n return\n }\n const content = subDocument.getText('content')\n const state = subDocument.getMap('state')\n this.syncLocalMapToSharedMap(localSlot.state, state)\n this.initSharedSlotByLocalSlot(content, localSlot)\n this.syncSlot(content, localSlot)\n this.addSubModelEvent.next({\n yDoc: subDocument,\n yType: content\n })\n this.initSyncEvent(subDocument)\n localSlot.loader.markAsLoaded()\n })\n localSlot.__changeMarker__.addDetachCallback(() => {\n isDestroyed = true\n })\n return sharedSlot\n }\n\n const sharedSlotState = new YMap()\n this.syncLocalMapToSharedMap(localSlot.state as ProxyModel<Record<string, any>>, sharedSlotState)\n sharedSlot.setAttribute('state', sharedSlotState)\n\n const sharedContent = new YText()\n this.initSharedSlotByLocalSlot(sharedContent, localSlot)\n sharedSlot.insertEmbed(0, sharedContent)\n this.syncSlot(sharedContent, localSlot)\n return sharedSlot\n }\n\n private initSharedSlotByLocalSlot(sharedContent: YText, localSlot: Slot) {\n let offset = 0\n localSlot.toDelta().forEach(i => {\n let formats: any = {}\n if (i.formats) {\n i.formats.forEach(item => {\n formats[item[0].name] = item[1]\n })\n } else {\n formats = null\n }\n if (typeof i.insert === 'string') {\n sharedContent.insert(offset, i.insert, formats)\n } else {\n const sharedComponent = this.createSharedComponentByLocalComponent(i.insert)\n sharedContent.insertEmbed(offset, sharedComponent, formats)\n }\n offset += i.insert.length\n })\n localSlot.getAttributes().forEach(item => {\n sharedContent.setAttribute(item[0].name, item[1])\n })\n }\n\n private createLocalSlotBySharedSlot(sharedSlot: YText): Slot {\n const type = sharedSlot.getAttribute('type')\n const schema = sharedSlot.getAttribute('schema')\n\n if (type === 'async') {\n const metadata = sharedSlot.getAttribute('metadata') as YMap<any>\n const slot = new AsyncSlot(schema || [], {}, {})\n this.syncSharedMapToLocalMap(metadata, slot.metadata as ProxyModel<Record<string, any>>)\n const loadedSubDocument = this.subModelLoader.getLoadedModelBySlot(slot)\n if (loadedSubDocument) {\n const subContent = loadedSubDocument.getText('content')\n const data = loadedSubDocument.getMap('state')\n this.syncSharedMapToLocalMap(data, slot.state as ProxyModel<Record<string, any>>)\n this.syncRootSlot(loadedSubDocument, subContent, slot)\n this.addSubModelEvent.next({\n yDoc: loadedSubDocument,\n yType: subContent\n })\n slot.loader.markAsLoaded()\n return slot\n }\n let isDestroyed = false\n slot.loader.onRequestLoad.toPromise().then(() => {\n return this.subModelLoader.loadSubModelBySlot(slot)\n }).then(subDocument => {\n if (isDestroyed) {\n return\n }\n const subContent = subDocument.getText('content')\n const state = subDocument.getMap('state')\n this.syncSharedMapToLocalMap(state, slot.state as ProxyModel<Record<string, any>>)\n this.syncRootSlot(subDocument, subContent, slot)\n this.addSubModelEvent.next({\n yDoc: subDocument,\n yType: subContent\n })\n slot.loader.markAsLoaded()\n })\n slot.__changeMarker__.addDetachCallback(() => {\n isDestroyed = true\n })\n return slot\n }\n\n const contentDelta = sharedSlot.toDelta()\n const content = contentDelta[0]?.insert\n\n if (!(content instanceof YText)) {\n throw collaborateErrorFn('shared slot content type is not `YText`.')\n }\n\n const localSlot = new Slot(schema || [], {})\n\n const sharedSlotState = sharedSlot.getAttribute('state')\n this.syncSharedMapToLocalMap(sharedSlotState, localSlot.state as ProxyModel<Record<string, any>>)\n\n this.initLocalSlotBySharedSlot(content, localSlot)\n\n this.syncSlot(content, localSlot)\n return localSlot\n }\n\n private initLocalSlotBySharedSlot(content: YText, localSlot: Slot) {\n const delta = content.toDelta()\n\n const attrs = content.getAttributes()\n Object.keys(attrs).forEach(key => {\n const attribute = this.registry.getAttribute(key)\n if (attribute) {\n localSlot.setAttribute(attribute, attrs[key])\n }\n })\n for (const action of delta) {\n if (action.insert) {\n if (typeof action.insert === 'string') {\n const formats = remoteFormatsToLocal(this.registry, action.attributes)\n localSlot.insert(action.insert, formats)\n } else {\n const sharedComponent = action.insert as YMap<any>\n const component = this.createLocalComponentBySharedComponent(sharedComponent)\n localSlot.insert(component, remoteFormatsToLocal(this.registry, action.attributes))\n }\n } else {\n throw collaborateErrorFn('unexpected delta action.')\n }\n }\n }\n\n private createSharedModelByLocalModel(localModel: any) {\n if (localModel instanceof Slot) {\n return this.createSharedSlotByLocalSlot(localModel)\n }\n if (Array.isArray(localModel)) {\n return this.createSharedArrayByLocalArray(localModel as ProxyModel<any[]>)\n }\n if (typeof localModel === 'object' && localModel !== null) {\n return this.createSharedMapByLocalMap(localModel)\n }\n return localModel\n }\n\n private createLocalModelBySharedByModel(sharedModel: any) {\n if (sharedModel instanceof YMap) {\n return this.createLocalMapBySharedMap(sharedModel)\n }\n if (sharedModel instanceof YArray) {\n return this.createLocalArrayBySharedArray(sharedModel)\n }\n if (sharedModel instanceof YText) {\n return this.createLocalSlotBySharedSlot(sharedModel)\n }\n return sharedModel\n }\n\n\n private createSharedComponentByLocalComponent(component: Component | AsyncComponent): YMap<any> {\n const sharedComponent = new YMap()\n sharedComponent.set('name', component.name)\n\n if (component instanceof AsyncComponent) {\n sharedComponent.set('type', 'async')\n const sharedMetadata = this.createSharedMapByLocalMap(component.metadata)\n sharedComponent.set('metadata', sharedMetadata)\n const state = component.state as ProxyModel<Record<string, any>>\n let isDestroyed = false\n state.__changeMarker__.addDetachCallback(() => {\n isDestroyed = true\n })\n this.subModelLoader.createSubModelByComponent(component).then(subDocument => {\n if (isDestroyed) {\n return\n }\n const state = subDocument.getMap('state')\n this.syncComponent(subDocument, state, component)\n this.addSubModelEvent.next({\n yType: state,\n yDoc: subDocument\n })\n this.initSyncEvent(subDocument)\n component.loader.markAsLoaded()\n })\n return sharedComponent\n }\n\n const sharedState = this.createSharedMapByLocalMap(component.state as ProxyModel<Record<string, any>>)\n sharedComponent.set('state', sharedState)\n sharedComponent.set('type', 'sync')\n return sharedComponent\n }\n\n private createLocalComponentBySharedComponent(yMap: YMap<any>): Component {\n const componentName = yMap.get('name') as string\n const type = yMap.get('type') as string\n\n let instance: Component<any> | null\n if (type === 'async') {\n instance = this.registry.createComponentByData(componentName, {}, {})\n if (instance instanceof AsyncComponent) {\n const sharedMetadata = yMap.get('metadata') as YMap<any>\n this.syncSharedMapToLocalMap(sharedMetadata, instance.metadata)\n const loadedSubDocument = this.subModelLoader.getLoadedModelByComponent(instance)\n if (loadedSubDocument) {\n const state = loadedSubDocument.getMap('state')\n this.syncComponent(loadedSubDocument, state, instance!)\n this.addSubModelEvent.next({\n yType: state,\n yDoc: loadedSubDocument\n })\n instance.loader.markAsLoaded()\n return instance\n }\n\n const state = instance.state as ProxyModel<Record<string, any>>\n let isDestroyed = false\n instance.loader.onRequestLoad.toPromise().then(() => {\n return this.subModelLoader.loadSubModelByComponent(instance as AsyncComponent)\n })\n .then(subDocument => {\n if (isDestroyed) {\n return\n }\n const state = subDocument.getMap('state')\n this.syncComponent(subDocument, state, instance!)\n this.addSubModelEvent.next({\n yType: state,\n yDoc: subDocument\n })\n ;(instance as AsyncComponent).loader.markAsLoaded()\n })\n state.__changeMarker__.addDetachCallback(() => {\n isDestroyed = true\n })\n } else if (instance instanceof Component) {\n throw collaborateErrorFn(`component name \\`${componentName}\\` is not a async component.`)\n }\n } else {\n const sharedState = yMap.get('state') as YMap<any>\n const state = this.createLocalMapBySharedMap(sharedState)\n instance = this.registry.createComponentByData(componentName, state)\n }\n if (instance) {\n return instance\n }\n\n throw collaborateErrorFn(`cannot find component factory \\`${componentName}\\`.`)\n }\n\n /**\n * 双向同步数组\n * @param sharedArray\n * @param localArray\n * @private\n */\n private syncArray(sharedArray: YArray<any>, localArray: ProxyModel<any[]>) {\n function logError(type: string) {\n console.error(collaborateErrorFn(`${type} error, length exceeded, path in ${localArray.__changeMarker__.getPaths().join('/')}`))\n }\n\n const sub = localArray.__changeMarker__.onSelfChange.subscribe((actions) => {\n this.runLocalUpdate(sharedArray.doc, !localArray.__changeMarker__.irrevocableUpdate, () => {\n let index = 0\n for (const action of actions) {\n switch (action.type) {\n case 'retain':\n index = action.offset\n break\n case 'insert': {\n const ref = action.ref\n if (!Array.isArray(ref)) {\n throw collaborateErrorFn('The insertion action must have a reference value.')\n }\n const data = ref.map(item => {\n return this.createSharedModelByLocalModel(item)\n })\n if (index <= sharedArray.length) {\n sharedArray.insert(index, data)\n } else {\n sharedArray.insert(sharedArray.length, data)\n logError('insert')\n }\n }\n break\n case 'delete':\n if (action.count <= 0) {\n break\n }\n if (index < sharedArray.length) {\n sharedArray.delete(index, action.count)\n } else {\n logError('delete')\n }\n break\n case 'setIndex':\n if (action.index < sharedArray.length) {\n sharedArray.delete(action.index, 1)\n sharedArray.insert(action.index, [this.createSharedModelByLocalModel(action.ref)])\n } else {\n sharedArray.insert(sharedArray.length, [this.createSharedModelByLocalModel(action.ref)])\n logError('setIndex')\n }\n break\n }\n }\n })\n })\n\n const syncRemote = (ev: YArrayEvent<any>, tr: Transaction) => {\n this.runRemoteUpdate(tr, () => {\n let index = 0\n ev.delta.forEach((action) => {\n if (Reflect.has(action, 'retain')) {\n index += action.retain as number\n } else if (action.insert) {\n const data = (action.insert as Array<any>).map((item) => {\n return this.createLocalModelBySharedByModel(item)\n })\n localArray.splice(index, 0, ...data)\n index += data.length\n } else if (action.delete) {\n localArray.splice(index, action.delete)\n }\n })\n })\n }\n\n sharedArray.observe(syncRemote)\n localArray.__changeMarker__.addDetachCallback(() => {\n sub.unsubscribe()\n sharedArray.unobserve(syncRemote)\n })\n }\n\n /**\n * 双向同步对象\n * @param sharedObject\n * @param localObject\n * @private\n */\n private syncObject(sharedObject: YMap<any>, localObject: ProxyModel<Record<string, any>>) {\n const syncRemote = (ev: YMapEvent<any>, tr: Transaction) => {\n this.runRemoteUpdate(tr, () => {\n ev.changes.keys.forEach((item, key) => {\n if (item.action === 'add' || item.action === 'update') {\n const value = sharedObject.get(key)\n localObject[key] = this.createLocalModelBySharedByModel(value)\n } else {\n Reflect.deleteProperty(localObject, key)\n }\n })\n })\n }\n\n sharedObject.observe(syncRemote)\n\n const sub = localObject.__changeMarker__.onSelfChange.subscribe((actions) => {\n this.runLocalUpdate(sharedObject.doc, !localObject.__changeMarker__.irrevocableUpdate, () => {\n for (const action of actions) {\n switch (action.type) {\n case 'propSet': {\n const subModel = this.createSharedModelByLocalModel(action.ref)\n sharedObject.set(action.key, subModel)\n if (sharedObject.size === 0) {\n // 奇怪的 bug,设置了子模型,但子模型会标记为 deleted,导致设置后无效\n console.error(collaborateErrorFn(`prop set error, key is ${action.key}`))\n }\n }\n break\n case 'propDelete':\n sharedObject.delete(action.key)\n break\n }\n }\n })\n })\n\n localObject.__changeMarker__.addDetachCallback(function () {\n sharedObject.unobserve(syncRemote)\n sub.unsubscribe()\n })\n }\n\n private runLocalUpdate(yDoc: YDoc | null, record: boolean, fn: () => void) {\n if (this.updateFromRemote || !yDoc) {\n return\n }\n let changeList = this.updateRemoteActions.get(yDoc)\n if (!changeList) {\n changeList = []\n this.updateRemoteActions.set(yDoc, changeList)\n }\n changeList.push({\n record,\n action: fn\n })\n }\n\n private runRemoteUpdate(tr: Transaction, fn: () => void) {\n if (tr.origin === tr.doc) {\n return\n }\n this.updateFromRemote = true\n if (tr.origin instanceof UndoManager) {\n this.scheduler.historyApplyTransact(fn)\n } else {\n this.scheduler.remoteUpdateTransact(fn)\n }\n this.updateFromRemote = false\n }\n}\n\nfunction remoteFormatsToLocal(registry: Registry, attrs?: any,) {\n const formats: Formats = []\n if (attrs) {\n Object.keys(attrs).forEach(key => {\n const formatter = registry.getFormatter(key)\n if (formatter) {\n formats.push([formatter, attrs[key]])\n }\n })\n }\n return formats\n}\n","import { Inject, Injectable, Optional } from '@viewfly/core'\nimport { History, HISTORY_STACK_SIZE, makeError, RootComponentRef, Scheduler } from '@textbus/core'\nimport { Observable, Subject, Subscription } from '@tanbo/stream'\nimport {\n Item,\n Transaction,\n UndoManager\n} from 'yjs'\n\nimport { Collaborate, CollaborateHistorySelectionPosition, CursorPosition } from './collaborate'\n\nexport abstract class CustomUndoManagerConfig {\n abstract captureTransaction?(arg0: Transaction): boolean\n\n abstract deleteFilter?(arg0: Item): boolean\n}\n\nconst collabHistoryErrorFn = makeError('CollabHistory')\n\n@Injectable()\nexport class CollabHistory implements History {\n onBack: Observable<void>\n onForward: Observable<void>\n onChange: Observable<void>\n onPush: Observable<void>\n\n get canBack() {\n return this.manager?.canUndo() || false\n }\n\n get canForward() {\n return this.manager?.canRedo() || false\n }\n\n private manager: UndoManager | null = null\n\n private historyItems: Array<CollaborateHistorySelectionPosition> = []\n private index = 0\n private subscriptions: Subscription[] = []\n\n private backEvent = new Subject<void>()\n private forwardEvent = new Subject<void>()\n private changeEvent = new Subject<void>()\n private pushEvent = new Subject<void>()\n\n constructor(private rootComponentRef: RootComponentRef,\n private collaborate: Collaborate,\n private scheduler: Scheduler,\n @Inject(HISTORY_STACK_SIZE) private stackSize: number,\n @Optional() private undoManagerConfig: CustomUndoManagerConfig) {\n this.onBack = this.backEvent.asObservable()\n this.onForward = this.forwardEvent.asObservable()\n this.onChange = this.changeEvent.asObservable()\n this.onPush = this.pushEvent.asObservable()\n\n }\n\n listen() {\n const root = this.collaborate.yDoc.getMap('RootComponent')\n const rootComponent = this.rootComponentRef.component!\n this.collaborate.syncRootComponent(this.collaborate.yDoc, root, rootComponent)\n\n const undoManagerConfig = this.undoManagerConfig || {}\n const manager = new UndoManager(root, {\n trackedOrigins: new Set<any>([this.collaborate.yDoc]),\n captureTransaction(arg) {\n if (undoManagerConfig.captureTransaction) {\n return undoManagerConfig.captureTransaction(arg)\n }\n return true\n },\n deleteFilter(item: Item) {\n if (undoManagerConfig.deleteFilter) {\n return undoManagerConfig.deleteFilter(item)\n }\n return true\n }\n })\n this.manager = manager\n\n let beforePosition: CursorPosition | null = null\n this.subscriptions.push(\n this.scheduler.onLocalChangeBefore.subscribe(() => {\n beforePosition = this.collaborate.getRelativeCursorLocation()\n }),\n this.collaborate.onAddSubModel.subscribe(() => {\n throw collabHistoryErrorFn('single document does not support submodels.')\n })\n )\n\n manager.on('stack-item-added', (event: any) => {\n if (event.type === 'undo') {\n if (event.origin === manager) {\n this.index++\n } else {\n this.historyItems.length = this.index\n this.historyItems.push({\n before: beforePosition,\n after: this.collaborate.getRelativeCursorLocation()\n })\n this.index++\n }\n } else {\n this.index--\n }\n if (manager.undoStack.length > this.stackSize) {\n this.historyItems.shift()\n manager.undoStack.shift()\n }\n if (event.origin === this.collaborate.yDoc) {\n this.pushEvent.next()\n }\n this.changeEvent.next()\n })\n manager.on('stack-item-popped', (ev: any) => {\n const index = ev.type === 'undo' ? this.index : this.index - 1\n const position = this.historyItems[index] || null\n const p = ev.type === 'undo' ? position?.before : position?.after\n this.collaborate.restoreCursorPosition(p)\n })\n }\n\n\n back() {\n if (this.canBack) {\n this.manager?.undo()\n this.backEvent.next()\n }\n }\n\n forward() {\n if (this.canForward) {\n this.manager?.redo()\n this.forwardEvent.next()\n }\n }\n\n clear() {\n const last = this.historyItems.pop()\n this.historyItems = last ? [last] : []\n this.index = last ? 1 : 0\n this.manager?.clear()\n this.changeEvent.next()\n }\n\n destroy() {\n this.index = 0\n this.historyItems = []\n this.subscriptions.forEach(i => i.unsubscribe())\n if (this.manager) {\n this.manager.destroy()\n this.manager.captureTransaction = () => true\n this.manager.deleteFilter = () => true\n this.manager.trackedOrigins = new Set([null])\n }\n\n this.manager = null\n }\n}\n","import { Observable, Subject } from '@tanbo/stream'\nimport { Textbus } from '@textbus/core'\n\nexport interface Message<T> {\n clientId: number\n message: T\n}\n\n/**\n * 协作消息总线,用于同步各终端消息\n */\nexport abstract class MessageBus<T> {\n onSync: Observable<void>\n protected syncEvent = new Subject<void>()\n\n constructor() {\n this.onSync = this.syncEvent.asObservable()\n }\n\n /**\n * 立即同步消息\n */\n sync() {\n this.syncEvent.next()\n }\n\n /**\n * 当需要同步协作消息是,Textbus 会自动调用,并把返回数据同步到其它终端\n */\n abstract get(textbus: Textbus): T\n\n /**\n * 当远程消息更新时,Textbus 会自动调用\n * @param message\n * @param textbus\n */\n abstract consume(message: Message<T>[], textbus: Textbus): void\n}\n","import { AbstractType, Item, UndoManager, Doc as YDoc } from 'yjs'\nimport { Inject, Injectable, Optional } from '@viewfly/core'\nimport { Observable, Subject, Subscription } from '@tanbo/stream'\nimport { History, HISTORY_STACK_SIZE, RootComponentRef, Scheduler } from '@textbus/core'\n\nimport { Collaborate, CollaborateHistorySelectionPosition, CursorPosition } from './collaborate'\nimport { CustomUndoManagerConfig } from './collab-history'\n\ninterface HistoryStackItem extends CollaborateHistorySelectionPosition {\n undoManagers: UndoManager[]\n}\n\n@Injectable()\nexport class MultipleDocCollabHistory implements History {\n onChange: Observable<void>\n onBack: Observable<void>\n onForward: Observable<void>\n onPush: Observable<void>\n\n get canBack() {\n return this.actionStack.length > 0 && this.index > 0\n }\n\n get canForward() {\n return this.actionStack.length > 0 && this.index < this.actionStack.length\n }\n\n isListen = false\n\n private changeEvent = new Subject<void>()\n private backEvent = new Subject<void>()\n private forwardEvent = new Subject<void>()\n private pushEvent = new Subject<void>()\n private actionStack: HistoryStackItem[] = []\n\n private index = 0\n\n private stackItem: HistoryStackItem | null = null\n private timer: any = null\n private beforePosition: CursorPosition | null = null\n\n private subscription = new Subscription()\n\n private subDocs = new Set<AbstractType<any>>()\n\n private listenerCaches = new Set<UndoManager>()\n\n constructor(private collaborate: Collaborate,\n private scheduler: Scheduler,\n private rootComponentRef: RootComponentRef,\n @Inject(HISTORY_STACK_SIZE) private stackSize: number,\n @Optional() private undoManagerConfig: CustomUndoManagerConfig) {\n this.onChange = this.changeEvent.asObservable()\n this.onBack = this.backEvent.asObservable()\n this.onForward = this.forwardEvent.asObservable()\n this.onPush = this.pushEvent.asObservable()\n }\n\n listen() {\n this.isListen = true\n const root = this.collaborate.yDoc.getMap('RootComponent')\n const rootComponent = this.rootComponentRef.component!\n this.collaborate.syncRootComponent(this.collaborate.yDoc, root, rootComponent)\n\n this.listenItem(root, this.collaborate.yDoc)\n\n this.subscription.add(\n this.collaborate.onAddSubModel.subscribe(({ yType, yDoc }) => {\n if (this.subDocs.has(yType)) {\n return\n }\n this.subDocs.add(yType)\n if (this.isListen) {\n this.listenItem(yType, yDoc)\n }\n }),\n this.scheduler.onLocalChangeBefore.subscribe(() => {\n this.beforePosition = this.collaborate.getRelativeCursorLocation()\n })\n )\n }\n\n forward() {\n if (!this.canForward) {\n return\n }\n clearTimeout(this.timer as any)\n const item = this.actionStack[this.index]\n if (item) {\n for (const i of item.undoManagers) {\n i.redo()\n }\n this.collaborate.restoreCursorPosition(item.after)\n }\n this.index++\n this.forwardEvent.next()\n this.changeEvent.next()\n }\n\n back() {\n if (!this.canBack) {\n return\n }\n clearTimeout(this.timer as any)\n let historyStackItem: HistoryStackItem\n if (this.stackItem) {\n historyStackItem = this.stackItem\n this.stackItem = null\n } else {\n this.index--\n historyStackItem = this.actionStack[this.index]\n }\n let len = historyStackItem.undoManagers.length\n while (len > 0) {\n len--\n historyStackItem.undoManagers[len].undo()\n }\n if (historyStackItem) {\n const beforePosition = historyStackItem.before\n this.collaborate.restoreCursorPosition(beforePosition)\n this.backEvent.next()\n this.changeEvent.next()\n }\n }\n\n clear() {\n this.actionStack = []\n this.stackItem = null\n this.index = 0\n this.beforePosition = null\n clearTimeout(this.timer as any)\n this.listenerCaches.forEach((undoManager) => {\n undoManager.clear()\n })\n this.changeEvent.next()\n }\n\n destroy() {\n this.clear()\n this.beforePosition = this.stackItem = null\n this.subscription.unsubscribe()\n this.listenerCaches.forEach((undoManager) => {\n undoManager.destroy()\n })\n this.subDocs.clear()\n this.listenerCaches.clear()\n }\n\n private listenItem(yType: AbstractType<any>, yDoc: YDoc) {\n const undoManagerConfig = this.undoManagerConfig || {}\n const undoManager = new UndoManager(yType, {\n trackedOrigins: new Set([yDoc]),\n captureTimeout: 0,\n captureTransaction(arg) {\n if (undoManagerConfig.captureTransaction) {\n return undoManagerConfig.captureTransaction(arg)\n }\n return true\n },\n deleteFilter(item: Item) {\n if (undoManagerConfig.deleteFilter) {\n return undoManagerConfig.deleteFilter(item)\n }\n return true\n }\n })\n\n undoManager.on('stack-item-added', (event: any) => {\n if (event.type === 'undo' && !(event.origin instanceof UndoManager)) {\n if (this.index != this.actionStack.length) {\n const redoStack = this.actionStack.slice(this.index)\n redoStack.forEach(item => {\n item.undoManagers.forEach(i => {\n i.clear(false, true)\n })\n })\n this.actionStack.length = this.index\n this.changeEvent.next()\n }\n if (this.stackItem === null) {\n this.stackItem = {\n before: this.beforePosition,\n after: null,\n undoManagers: []\n }\n this.timer = setTimeout(() => {\n if (this.actionStack.length >= this.stackSize) {\n this.actionStack.shift()\n } else {\n this.index++\n }\n // this.beforePosition = this.collaborate.getRelativeCursorLocation()\n this.stackItem!.after = this.beforePosition\n this.actionStack.push(this.stackItem!)\n this.stackItem = null\n this.pushEvent.next()\n this.changeEvent.next()\n }, 500)\n }\n\n this.stackItem.undoManagers.push(undoManager)\n }\n })\n\n this.listenerCaches.add(undoManager)\n }\n}\n","import { Observable, Subject } from '@tanbo/stream'\n\n/**\n * 协作通信通用接口\n */\nexport abstract class SyncConnector {\n /**\n * 当文档加载完成时触发的观察者\n */\n onLoad: Observable<void>\n /**\n * 当文档 awareness 状态变更时触发的观察者\n */\n onStateChange: Observable<any[]>\n\n protected loadEvent = new Subject<void>()\n protected stateChangeEvent = new Subject<any[]>()\n\n protected constructor() {\n this.onLoad = this.loadEvent.asObservable()\n this.onStateChange = this.stateChangeEvent.asObservable()\n }\n\n /**\n * 设置 awareness 状态\n * @param key 状态的 key\n * @param data 状态值\n */\n abstract setLocalStateField(key: string, data: Record<string, any>): void\n\n /**\n * 当文档销毁时调用\n */\n abstract onDestroy(): void\n}\n","import { HocuspocusProvider } from '@hocuspocus/provider'\nimport { HocuspocusProviderConfiguration } from '@hocuspocus/provider'\n\nimport { SyncConnector } from '../base/sync-connector'\nimport { Message } from '../base/message-bus'\n\nexport class HocuspocusConnector extends SyncConnector {\n provide: HocuspocusProvider\n\n constructor(config: HocuspocusProviderConfiguration) {\n super()\n this.provide = new HocuspocusProvider({\n ...config,\n onSynced: (data) => {\n config.onSynced?.(data)\n this.loadEvent.next()\n },\n onAwarenessUpdate: (data) => {\n config.onAwarenessUpdate?.(data)\n const states: Message<any>[] = data.states.map(state => {\n return {\n clientId: state.clientId,\n message: state.message as any\n }\n })\n this.stateChangeEvent.next(states)\n },\n })\n }\n\n setLocalStateField(key: string, data: Record<string, any>) {\n this.provide.setAwarenessField(key, data)\n }\n\n onDestroy() {\n this.provide.disconnect()\n this.provide.destroy()\n }\n}\n","import { Doc as YDoc } from 'yjs'\nimport { WebsocketProvider } from 'y-websocket'\n\nimport { SyncConnector } from '../base/sync-connector'\nimport { Message } from '../base/message-bus'\n\nexport class YWebsocketConnector extends SyncConnector {\n provide: WebsocketProvider\n\n private onSync = (is: boolean) => {\n if (is) {\n this.loadEvent.next()\n }\n }\n\n private onUpdate = () => {\n const syncStates: Message<any>[] = []\n this.provide.awareness.getStates().forEach((state, id) => {\n syncStates.push({\n clientId: id,\n message: state.message,\n })\n })\n this.stateChangeEvent.next(syncStates)\n }\n\n constructor(url: string, roomName: string, yDoc: YDoc) {\n super()\n this.onLoad = this.loadEvent.asObservable()\n this.onStateChange = this.stateChangeEvent.asObservable()\n this.provide = new WebsocketProvider(url, roomName, yDoc)\n\n this.provide.once('sync', this.onSync)\n this.provide.awareness.on('update', this.onUpdate)\n }\n\n setLocalStateField(key: string, data: Record<string, any>) {\n this.provide.awareness.setLocalStateField(key, data)\n }\n\n onDestroy() {\n this.provide.awareness.off('update', this.onUpdate)\n this.provide.disconnect()\n this.provide.destroy()\n }\n}\n","import { History, Module, Selection, Textbus } from '@textbus/core'\nimport { Subscription } from '@tanbo/stream'\nimport { Provider } from '@viewfly/core'\nimport { Doc as YDoc } from 'yjs'\n\nimport { CollabHistory, Collaborate, MessageBus, NonSubModelLoader, SubModelLoader, SyncConnector } from './base/_api'\n\nexport interface CollaborateConfig {\n createConnector(yDoc: YDoc): SyncConnector\n\n onlyLoad?: boolean\n}\n\nexport class CollaborateModule implements Module {\n private subscription = new Subscription()\n providers: Provider[] = [\n Collaborate,\n CollabHistory,\n {\n provide: History,\n useExisting: CollabHistory\n }, {\n provide: SyncConnector,\n useFactory: (collab: Collaborate) => {\n return this.config.createConnector(collab.yDoc)\n },\n deps: [Collaborate]\n }, {\n provide: SubModelLoader,\n useClass: NonSubModelLoader\n }\n ]\n\n private timer: any = null\n\n constructor(public config: CollaborateConfig) {\n }\n\n setup(textbus: Textbus): Promise<(() => void) | void> | (() => void) | void {\n const messageBus = textbus.get(MessageBus, null)\n const connector = textbus.get(SyncConnector)\n const collab = textbus.get(Collaborate)\n if (messageBus) {\n const selection = textbus.get(Selection)\n connector.setLocalStateField('message', messageBus.get(textbus))\n this.subscription.add(\n messageBus.onSync.subscribe(() => {\n connector.setLocalStateField('message', messageBus.get(textbus))\n }),\n selection.onChange.subscribe(() => {\n connector.setLocalStateField('message', messageBus.get(textbus))\n }),\n connector.onStateChange.subscribe((states) => {\n messageBus.consume(states, textbus)\n })\n )\n }\n\n return connector.onLoad.toPromise().then(() => {\n if (!this.config.onlyLoad) {\n return\n }\n const root = collab.yDoc.getMap('RootComponent')\n if (root.has('state')) {\n return\n }\n return new Promise(resolve => {\n const testing = () => {\n if (root.has('state')) {\n resolve()\n } else {\n this.timer = setTimeout(testing, 1000)\n }\n }\n this.timer = setTimeout(testing, 1000)\n })\n })\n }\n\n onDestroy(textbus: Textbus) {\n this.subscription.unsubscribe()\n textbus.get(Collaborate).destroy()\n textbus.get(History).destroy()\n textbus.get(SyncConnector).onDestroy()\n clearTimeout(this.timer)\n }\n}\n","import { History, Module, Selection, Textbus } from '@textbus/core'\nimport { Provider } from '@viewfly/core'\nimport { Subscription } from '@tanbo/stream'\n\nimport { Collaborate, SyncConnector, MultipleDocCollabHistory, SubModelLoader, MessageBus } from './base/_api'\nimport { CollaborateConfig } from './collaborate-module'\n\nexport interface MultipleDocCollaborateConfig extends CollaborateConfig {\n subModelLoader: SubModelLoader\n}\n\nexport class MultipleDocumentCollaborateModule implements Module {\n private subscription = new Subscription()\n providers: Provider[] = [\n Collaborate,\n MultipleDocCollabHistory,\n {\n provide: History,\n useExisting: MultipleDocCollabHistory\n }, {\n provide: SyncConnector,\n useFactory: (collab: Collaborate) => {\n return this.config.createConnector(collab.yDoc)\n },\n deps: [Collaborate]\n }, {\n provide: SubModelLoader,\n useFactory: () => {\n return this.config.subModelLoader\n }\n }\n ]\n\n private timer: any = null\n\n constructor(public config: MultipleDocCollaborateConfig) {\n }\n\n setup(textbus: Textbus): Promise<(() => void) | void> | (() => void) | void {\n const messageBus = textbus.get(MessageBus, null)\n const connector = textbus.get(SyncConnector)\n const collab = textbus.get(Collaborate)\n if (messageBus) {\n const selection = textbus.get(Selection)\n connector.setLocalStateField('message', messageBus.get(textbus))\n this.subscription.add(\n messageBus.onSync.subscribe(() => {\n connector.setLocalStateField('message', messageBus.get(textbus))\n }),\n selection.onChange.subscribe(() => {\n connector.setLocalStateField('message', messageBus.get(textbus))\n }),\n connector.onStateChange.subscribe((states) => {\n messageBus.consume(states, textbus)\n })\n )\n }\n return connector.onLoad.toPromise().then(() => {\n if (!this.config.onlyLoad) {\n return\n }\n const root = collab.yDoc.getMap('RootComponent')\n if (root.has('state')) {\n return\n }\n return new Promise(resolve => {\n const testing = () => {\n if (root.has('state')) {\n resolve()\n } else {\n this.timer = setTimeout(testing, 1000)\n }\n }\n this.timer = setTimeout(testing, 1000)\n })\n })\n }\n\n onDestroy(textbus: Textbus) {\n this.subscription.unsubscribe()\n textbus.get(Collaborate).destroy()\n textbus.get(History).destroy()\n textbus.get(SyncConnector).onDestroy()\n clearTimeout(this.timer)\n }\n}\n"],"names":["subModelLoaderErrorFn","makeError","SubModelLoader","NonSubModelLoader","_call_super","createSubModelBySlot","createSubModelByComponent","loadSubModelByComponent","loadSubModelBySlot","getLoadedModelBySlot","getLoadedModelByComponent","collaborateErrorFn","SlotMap","_define_property","slotAndYTextMap","WeakMap","yTextAndSlotMap","set","key","value","_instanceof","Slot","get","delete","v","Collaborate","scheduler","subModelLoader","yDoc","slotMap","onAddSubModel","subscriptions","updateFromRemote","addSubModelEvent","updateRemoteActions","noRecord","registry","selection","YDoc","Subject","asObservable","syncRootComponent","sharedComponent","localComponent","initSyncEvent","syncComponent","syncRootSlot","sharedSlot","localSlot","length","retain","cleanAttributes","cleanFormats","initLocalSlotBySharedSlot","transact","initSharedSlotByLocalSlot","syncSlot","getAbstractSelection","position","anchorPosition","createAbsolutePositionFromRelativePosition","anchor","doc","focusPosition","focus","focusSlot","type","anchorSlot","anchorOffset","index","focusOffset","getRelativeCursorLocation","anchorYText","createRelativePositionFromTypeIndex","focusYText","restoreCursorPosition","unSelect","setBaseAndExtent","push","onDocChanged","pipe","map","item","filter","i","from","ChangeOrigin","Remote","subscribe","updates","update","record","actions","action","forEach","fn","state","YMap","syncLocalMapToSharedMap","Object","keys","Reflect","deleteProperty","syncSharedMapToLocalMap","syncRemote","ev","tr","runRemoteUpdate","keysChanged","change","updateType","attribute","getAttribute","setAttribute","removeAttribute","delta","has","attributes","formats","remoteFormatsToLocal","insert","component","createLocalComponentBySharedComponent","isSelected","origin","UndoManager","setAnchor","setFocus","startOffset","observe","sub","onContentChange","runLocalUpdate","offset","formatter","getFormatter","format","toDelta","isEmpty","emptyPlaceholder","content","createSharedComponentByLocalComponent","ref","insertEmbed","count","name","__changeMarker__","addDetachCallback","unobserve","unsubscribe","destroy","sharedMap","localMap","createLocalModelBySharedByModel","syncObject","createLocalMapBySharedMap","createLocalArrayBySharedArray","sharedArray","localArray","syncArray","entries","createSharedModelByLocalModel","createSharedMapByLocalMap","createSharedArrayByLocalArray","YArray","createSharedSlotByLocalSlot","YText","isAsyncSlot","AsyncSlot","schema","isDestroyed","sharedMetadata","metadata","then","subDocument","getText","getMap","next","yType","loader","markAsLoaded","sharedSlotState","sharedContent","getAttributes","createLocalSlotBySharedSlot","contentDelta","slot","loadedSubDocument","subContent","data","onRequestLoad","toPromise","attrs","localModel","Array","isArray","_type_of","sharedModel","AsyncComponent","sharedState","yMap","componentName","instance","createComponentByData","Component","logError","console","error","getPaths","join","onSelfChange","irrevocableUpdate","splice","sharedObject","localObject","changes","subModel","size","changeList","historyApplyTransact","remoteUpdateTransact","CustomUndoManagerConfig","collabHistoryErrorFn","CollabHistory","collaborate","stackSize","onBack","onForward","onChange","onPush","manager","historyItems","backEvent","forwardEvent","changeEvent","pushEvent","rootComponentRef","undoManagerConfig","canBack","canUndo","canForward","canRedo","listen","root","rootComponent","trackedOrigins","Set","captureTransaction","arg","deleteFilter","beforePosition","onLocalChangeBefore","on","event","before","after","undoStack","shift","p","back","undo","forward","redo","clear","last","pop","MessageBus","onSync","syncEvent","sync","MultipleDocCollabHistory","isListen","actionStack","stackItem","timer","subscription","subDocs","listenerCaches","Subscription","listenItem","add","clearTimeout","undoManagers","historyStackItem","len","undoManager","captureTimeout","redoStack","slice","setTimeout","SyncConnector","onLoad","onStateChange","loadEvent","stateChangeEvent","HocuspocusConnector","config","provide","HocuspocusProvider","onSynced","onAwarenessUpdate","states","clientId","message","setLocalStateField","setAwarenessField","onDestroy","disconnect","YWebsocketConnector","url","roomName","is","onUpdate","syncStates","awareness","getStates","id","WebsocketProvider","once","off","CollaborateModule","providers","History","useExisting","useFactory","collab","createConnector","deps","useClass","setup","textbus","messageBus","connector","Selection","consume","onlyLoad","Promise","resolve","testing","MultipleDocumentCollaborateModule"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@textbus/collaborate",
|
|
3
|
-
"version": "5.2.
|
|
3
|
+
"version": "5.2.4",
|
|
4
4
|
"description": "Textbus is a rich text editor and framework that is highly customizable and extensible to achieve rich wysiwyg effects.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.esm.js",
|
|
@@ -34,10 +34,10 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@hocuspocus/provider": "^2.15.2 || ^3.0.0",
|
|
36
36
|
"@tanbo/stream": "^1.2.7",
|
|
37
|
-
"@viewfly/core": "^2.2.0 || >=3.0.0-alpha.
|
|
37
|
+
"@viewfly/core": "^2.2.0 || >=3.0.0-alpha.3 <4",
|
|
38
38
|
"y-websocket": "^3.0.0",
|
|
39
39
|
"yjs": "^13.6.29",
|
|
40
|
-
"@textbus/core": "^5.2.
|
|
40
|
+
"@textbus/core": "^5.2.4"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"rimraf": "^3.0.2",
|