yjs/src/Util/structReferences.mjs
2018-05-23 14:01:00 +02:00

63 lines
1.6 KiB
JavaScript

import Delete from '../Struct/Delete.mjs'
import ItemJSON from '../Struct/ItemJSON.mjs'
import ItemString from '../Struct/ItemString.mjs'
import ItemFormat from '../Struct/ItemFormat.mjs'
import ItemEmbed from '../Struct/ItemEmbed.mjs'
import GC from '../Struct/GC.mjs'
import YArray from '../Types/YArray/YArray.mjs'
import YMap from '../Types/YMap/YMap.mjs'
import YText from '../Types/YText/YText.mjs'
import YXmlText from '../Types/YXml/YXmlText.mjs'
import YXmlHook from '../Types/YXml/YXmlHook.mjs'
import YXmlFragment from '../Types/YXml/YXmlFragment.mjs'
import YXmlElement from '../Types/YXml/YXmlElement.mjs'
const structs = new Map()
const references = new Map()
/**
* Register a new Yjs types. The same type must be defined with the same
* reference on all clients!
*
* @param {Number} reference
* @param {class} structConstructor
*
* @public
*/
export function registerStruct (reference, structConstructor) {
structs.set(reference, structConstructor)
references.set(structConstructor, reference)
}
/**
* @private
*/
export function getStruct (reference) {
return structs.get(reference)
}
/**
* @private
*/
export function getStructReference (typeConstructor) {
return references.get(typeConstructor)
}
// TODO: reorder (Item* should have low numbers)
registerStruct(0, ItemJSON)
registerStruct(1, ItemString)
registerStruct(10, ItemFormat)
registerStruct(11, ItemEmbed)
registerStruct(2, Delete)
registerStruct(3, YArray)
registerStruct(4, YMap)
registerStruct(5, YText)
registerStruct(6, YXmlFragment)
registerStruct(7, YXmlElement)
registerStruct(8, YXmlText)
registerStruct(9, YXmlHook)
registerStruct(12, GC)