@textbus/collaborate 5.2.3 → 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 +2372 -1351
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +2374 -1338
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.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":["__decorateClass","__decorateParam","YDoc","YMap","length","YArray","YText","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.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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"}
|