UNPKG

@syncedstore/yjs-reactive-bindings

Version:

A bridge between Reactive programming libraries (reactive, Vue or MobX) and Yjs

1 lines 37.9 kB
{"version":3,"file":"yjs-reactive-bindings.modern.mjs","sources":["../src/observableProvider.ts","../src/types/array.ts","../src/types/doc.ts","../src/types/map.ts","../src/types/text.ts","../src/types/xml.ts","../src/index.ts"],"sourcesContent":["export type Atom = {\n /**\n * Invoke this method to notify mobx that your atom has been used somehow.\n * Returns true if there is currently a reactive context.\n */\n reportObserved(implicitObserver?: any): boolean;\n /**\n * Invoke this method _after_ this method has changed to signal mobx that all its observers should invalidate.\n */\n reportChanged(): void;\n};\n\nlet customCreateAtom: typeof createAtom | undefined;\nlet customReaction: ((func: () => any, effect: () => any) => any) | undefined;\n\nlet defaultReaction = (func: () => any) => func();\n\nexport function reaction(func: () => any, effect: () => any) {\n if (customReaction) {\n return customReaction(func, effect);\n } else {\n defaultReaction(func);\n return undefined;\n }\n}\n\nexport function createAtom(\n _name: string,\n _onBecomeObservedHandler?: () => void,\n _onBecomeUnobservedHandler?: () => void\n): Atom {\n if (customCreateAtom) {\n return customCreateAtom.apply(null, arguments as any);\n } else {\n throw new Error(\n \"observable implementation not provided. Call enableReactiveBindings, enableVueBindings or enableMobxBindings.\"\n );\n }\n}\n\n/**\n * Enable MobX integration\n *\n * @param mobx An instance of mobx, e.g. import * as mobx from \"mobx\";\n */\nexport function enableMobxBindings(mobx: any) {\n customCreateAtom = mobx.createAtom;\n customReaction = undefined;\n}\n\n/**\n * Enable Vue3 integration\n *\n * @param vue An instance of Vue or Vue reactivity, e.g. import * as Vue from \"vue\";\n */\nexport function enableVueBindings(vue: any) {\n customCreateAtom = function (name: any, onBecomeObserved: any) {\n let id = 0;\n const data = vue.reactive({ data: id });\n const atom = {\n reportObserved() {\n return data.data as any as boolean;\n },\n reportChanged() {\n data.data = ++id;\n },\n };\n if (onBecomeObserved) {\n onBecomeObserved();\n }\n return atom;\n };\n customReaction = undefined;\n}\n\nexport function enableReactiveBindings(reactive: any) {\n customCreateAtom = function (name, onBecomeObserved, onBecomeUnobserved) {\n // TMP\n const atom = reactive.createAtom(name);\n if (onBecomeObserved) {\n onBecomeObserved();\n }\n return atom;\n };\n customReaction = (func: () => void, effect: () => void) => {\n return reactive.reaction(func, effect, { fireImmediately: false });\n };\n}\n","import * as Y from \"yjs\";\nimport { Atom, createAtom } from \"../observableProvider\";\n\nconst arraysObserved = new WeakSet<Y.Array<any>>();\n\nexport function observeArray(array: Y.Array<any>) {\n if (arraysObserved.has(array)) {\n // already patched\n return array;\n }\n arraysObserved.add(array);\n\n let selfAtom: Atom | undefined;\n const atoms = new Map<number, Atom>();\n\n function reportSelfAtom() {\n if (!selfAtom) {\n const handler = (event: Y.YArrayEvent<any>) => {\n if (\n event.changes.added.size ||\n event.changes.deleted.size ||\n event.changes.keys.size ||\n event.changes.delta.length\n ) {\n selfAtom!.reportChanged();\n }\n };\n selfAtom = createAtom(\n \"map\",\n () => {\n array.observe(handler);\n },\n () => {\n array.unobserve(handler);\n }\n );\n }\n\n selfAtom.reportObserved((array as any)._implicitObserver);\n }\n\n function reportArrayElementAtom(key: number) {\n let atom = atoms.get(key);\n\n // possible optimization: only register a single handler for all keys\n if (!atom) {\n const handler = (event: Y.YArrayEvent<any>) => {\n // TODO: detect key of changed element\n // if (event.keys.has(key + \"\")) {\n // if (\n // event.changes.added.size ||\n // event.changes.deleted.size ||\n // event.changes.keys.size ||\n // event.changes.delta.length\n // ) {\n atom!.reportChanged();\n // }\n };\n atom = createAtom(\n key + \"\",\n () => {\n array.observe(handler);\n },\n () => {\n array.unobserve(handler);\n }\n );\n atoms.set(key, atom);\n }\n\n atom.reportObserved((array as any)._implicitObserver);\n }\n\n const originalGet = array.get;\n\n array.get = function (key: number) {\n if (typeof key !== \"number\") {\n throw new Error(\"unexpected\");\n }\n reportArrayElementAtom(key);\n const ret = Reflect.apply(originalGet, this, arguments);\n return ret;\n };\n\n function patch(method: string) {\n const originalFunction = array[method];\n array[method] = function () {\n reportSelfAtom();\n const ret = Reflect.apply(originalFunction, this, arguments);\n return ret;\n };\n }\n\n function patchGetter(method: string) {\n let target = array;\n let descriptor = Object.getOwnPropertyDescriptor(target, method)!;\n\n // properties might be defined down the prototype chain (e.g., properties on XmlFragment when working on an XmlElement)\n if (!descriptor) {\n target = Object.getPrototypeOf(target);\n descriptor = Object.getOwnPropertyDescriptor(target, method)!;\n }\n\n if (!descriptor) {\n target = Object.getPrototypeOf(target);\n descriptor = Object.getOwnPropertyDescriptor(target, method)!;\n }\n\n if (!descriptor) {\n throw new Error(\"property not found\");\n }\n\n const originalFunction = descriptor.get!;\n descriptor.get = function () {\n if (!this._disableTracking) {\n reportSelfAtom();\n }\n const ret = Reflect.apply(originalFunction, this, arguments);\n return ret;\n };\n Object.defineProperty(array, method, descriptor);\n }\n\n function copyGetter(method: string, newMethodName: string) {\n let target = array;\n let descriptor = Object.getOwnPropertyDescriptor(target, method)!;\n\n // properties might be defined down the prototype chain (e.g., properties on XmlFragment when working on an XmlElement)\n if (!descriptor) {\n target = Object.getPrototypeOf(target);\n descriptor = Object.getOwnPropertyDescriptor(target, method)!;\n }\n\n if (!descriptor) {\n target = Object.getPrototypeOf(target);\n descriptor = Object.getOwnPropertyDescriptor(target, method)!;\n }\n\n if (!descriptor) {\n throw new Error(\"property not found\");\n }\n\n Object.defineProperty(array, newMethodName, descriptor);\n }\n\n patch(\"forEach\");\n patch(\"toJSON\");\n patch(\"toArray\");\n patch(\"slice\");\n patch(\"map\");\n copyGetter(\"length\", \"lengthUntracked\");\n patchGetter(\"length\");\n\n // make push and slice use _disableTracking so calls to .length don't get observed\n const originalPush = array.push;\n array.push = function (this: any, content: any) {\n this._disableTracking = true;\n const ret = originalPush.call(this, content);\n this._disableTracking = false;\n return ret;\n };\n\n const originalSlice = array.slice;\n array.slice = function (this: any, start: any, end: any) {\n this._disableTracking = true;\n const ret = originalSlice.call(this, start, end);\n this._disableTracking = false;\n return ret;\n };\n // TODO: iterator\n return array;\n}\n","import * as Y from \"yjs\";\nimport { observeYJS } from \"..\";\nimport { Atom, createAtom, reaction } from \"../observableProvider\";\n\nconst docsObserved = new WeakSet<Y.Doc>();\n\n// TODO: add atoms, etc\nexport function observeDoc(doc: Y.Doc) {\n if (docsObserved.has(doc)) {\n // already patched\n return doc;\n }\n docsObserved.add(doc);\n let selfAtom: Atom | undefined;\n\n function reportSelfAtom() {\n if (!selfAtom) {\n let oldKeys = Array.from(doc.share.keys());\n const handler = (tr: any) => {\n const newKeys = Array.from(doc.share.keys());\n if (JSON.stringify(oldKeys) !== JSON.stringify(newKeys)) {\n oldKeys = newKeys;\n selfAtom!.reportChanged();\n }\n };\n selfAtom = createAtom(\n \"map\",\n () => {\n doc.on(\"beforeObserverCalls\", handler);\n },\n () => {\n doc.off(\"beforeObserverCalls\", handler);\n }\n );\n }\n selfAtom.reportObserved((doc as any)._implicitObserver);\n }\n\n const originalGet = doc.get;\n\n doc.get = function (key: string) {\n if (typeof key !== \"string\") {\n throw new Error(\"unexpected\");\n }\n const ret = Reflect.apply(originalGet, this, arguments);\n observeYJS(ret);\n return ret;\n };\n\n function patch(method: string) {\n const originalFunction = doc[method];\n let previous: any | undefined;\n\n doc[method] = function () {\n let ret: any;\n let args = arguments;\n reportSelfAtom();\n\n if (previous) {\n previous.removeObservers(); // dispose\n }\n\n // we run this in a reaction, because the originalfunction might also trigger\n // observers in nested functions. In particular, if toJSON is called.\n previous = reaction(\n () => {\n ret = Reflect.apply(originalFunction, doc, args);\n return ret;\n },\n () => selfAtom!.reportChanged()\n );\n\n return ret;\n };\n }\n\n patch(\"toJSON\");\n\n Object.defineProperty(doc, \"keys\", {\n get: () => {\n reportSelfAtom();\n return Object.keys(doc.share);\n },\n });\n\n return doc;\n}\n","import { Atom, createAtom } from \"../observableProvider\";\nimport * as Y from \"yjs\";\n\nconst mapsObserved = new WeakSet<Y.Map<any>>();\n\nexport function observeMap(map: Y.Map<any>) {\n if (mapsObserved.has(map)) {\n // already patched\n return map;\n }\n mapsObserved.add(map);\n let selfAtom: Atom | undefined;\n const atoms = new Map<string, Atom>();\n\n function reportSelfAtom() {\n if (!selfAtom) {\n const handler = (event: Y.YMapEvent<any>) => {\n if (\n event.changes.added.size ||\n event.changes.deleted.size ||\n event.changes.keys.size ||\n event.changes.delta.length\n ) {\n selfAtom!.reportChanged();\n }\n };\n selfAtom = createAtom(\n \"map\",\n () => {\n map.observe(handler);\n },\n () => {\n map.unobserve(handler);\n }\n );\n }\n selfAtom.reportObserved((map as any)._implicitObserver);\n }\n\n function reportMapKeyAtom(key: string) {\n let atom = atoms.get(key);\n\n // possible optimization: only register a single handler for all keys\n if (!atom) {\n const handler = (event: Y.YMapEvent<any>) => {\n if (event.keysChanged.has(key)) {\n if (\n event.changes.added.size ||\n event.changes.deleted.size ||\n event.changes.keys.size ||\n event.changes.delta.length\n ) {\n atom!.reportChanged();\n }\n }\n };\n atom = createAtom(\n key,\n () => {\n map.observe(handler);\n },\n () => {\n map.unobserve(handler);\n }\n );\n atoms.set(key, atom);\n }\n\n atom.reportObserved((map as any)._implicitObserver);\n }\n\n const originalGet = map.get;\n\n map.get = function (key: string) {\n if (typeof key !== \"string\") {\n throw new Error(\"unexpected\");\n }\n reportMapKeyAtom(key);\n const ret = Reflect.apply(originalGet, this, arguments);\n return ret;\n };\n\n function patch(method: string) {\n const originalFunction = map[method];\n map[method] = function () {\n reportSelfAtom();\n const ret = Reflect.apply(originalFunction, this, arguments);\n return ret;\n };\n }\n\n patch(\"values\");\n patch(\"entries\");\n patch(\"keys\");\n patch(\"forEach\");\n patch(\"toJSON\");\n\n // TODO: has, iterator\n return map;\n}\n","import { Atom, createAtom } from \"../observableProvider\";\nimport * as Y from \"yjs\";\n\nconst textsObserved = new WeakSet<Y.Text>();\n\nexport function observeText(value: Y.Text) {\n if (textsObserved.has(value)) {\n // already patched\n return value;\n }\n textsObserved.add(value);\n\n let atom: Atom | undefined;\n\n const handler = (_changes: Y.YTextEvent) => {\n atom!.reportChanged();\n };\n atom = createAtom(\n \"text\",\n () => {\n value.observe(handler);\n },\n () => {\n value.unobserve(handler);\n }\n );\n\n function patch(method: string) {\n const originalFunction = value[method];\n value[method] = function () {\n atom!.reportObserved(this._implicitObserver);\n const ret = Reflect.apply(originalFunction, this, arguments);\n return ret;\n };\n }\n\n patch(\"toString\");\n patch(\"toJSON\");\n return value;\n}\n","import * as Y from \"yjs\";\nimport { Atom, createAtom } from \"../observableProvider\";\n\nconst xmlsObserved = new WeakSet<Y.XmlFragment>();\n\nexport function observeXml(value: Y.XmlFragment) {\n if (xmlsObserved.has(value)) {\n // already patched\n return value;\n }\n xmlsObserved.add(value);\n\n let atom: Atom | undefined;\n\n const handler = (event: Y.YXmlEvent) => {\n if (\n event.changes.added.size ||\n event.changes.deleted.size ||\n event.changes.keys.size ||\n event.changes.delta.length\n ) {\n atom!.reportChanged();\n }\n };\n\n atom = createAtom(\n \"xml\",\n () => {\n value.observe(handler);\n },\n () => {\n value.unobserve(handler);\n }\n );\n\n function patch(method: string) {\n const originalFunction = value[method];\n value[method] = function () {\n atom!.reportObserved(this._implicitObserver);\n const ret = Reflect.apply(originalFunction, this, arguments);\n return ret;\n };\n }\n\n function patchGetter(method: string) {\n let target = value;\n let descriptor = Object.getOwnPropertyDescriptor(target, method)!;\n\n // properties might be defined down the prototype chain (e.g., properties on XmlFragment when working on an XmlElement)\n if (!descriptor) {\n target = Object.getPrototypeOf(target);\n descriptor = Object.getOwnPropertyDescriptor(target, method)!;\n }\n\n if (!descriptor) {\n target = Object.getPrototypeOf(target);\n descriptor = Object.getOwnPropertyDescriptor(target, method)!;\n }\n\n if (!descriptor) {\n throw new Error(\"property not found\");\n }\n\n const originalFunction = descriptor.get!;\n descriptor.get = function () {\n atom!.reportObserved(this._implicitObserver);\n const ret = Reflect.apply(originalFunction, this, arguments);\n return ret;\n };\n Object.defineProperty(value, method, descriptor);\n }\n\n patch(\"toString\");\n patch(\"toDOM\");\n patch(\"toArray\");\n patch(\"getAttribute\");\n patchGetter(\"firstChild\");\n\n return value;\n}\n","import * as Y from \"yjs\";\nimport { observeArray } from \"./types/array\";\nimport { observeDoc } from \"./types/doc\";\nimport { observeMap } from \"./types/map\";\nimport { observeText } from \"./types/text\";\nimport { observeXml } from \"./types/xml\";\n\nexport function isYType(element: any) {\n return element instanceof Y.AbstractType || Object.prototype.hasOwnProperty.call(element, \"autoLoad\"); // detect subdocs. Is there a better way for this?\n}\n\nexport function observeYJS(element: Y.AbstractType<any> | Y.Doc) {\n if (element instanceof Y.XmlText) {\n return observeText(element);\n } else if (element instanceof Y.Text) {\n return observeText(element);\n } else if (element instanceof Y.Array) {\n return observeArray(element);\n } else if (element instanceof Y.Map) {\n return observeMap(element);\n } else if (element instanceof Y.Doc || Object.prototype.hasOwnProperty.call(element, \"autoLoad\")) {\n // subdoc. Ok way to detect this?\n return observeDoc(element as any as Y.Doc);\n } else if (element instanceof Y.XmlFragment) {\n return observeXml(element);\n } else if (element instanceof Y.XmlElement) {\n return observeXml(element);\n } else {\n if (element._item === null && element._start === null) {\n // console.warn(\"edge case\");\n } else {\n // throw new Error(\"not yet supported\");\n }\n }\n return element;\n}\n\nfunction makeYDocRootLevelTypesObservable(doc: Y.Doc) {\n doc.share.forEach((type) => {\n // the explicit check is necessary because we sometimes initialize \"anonymous\" types that the user can't (and shouldn't) access.\n if (type.constructor !== Y.AbstractType) {\n // console.log(\"root\", type)\n observeYJS(type);\n }\n });\n}\n\nfunction makeStructsObservable(structs: (Y.Item | Y.GC)[], startPos: number) {\n for (let i = structs.length - 1; i >= startPos; i--) {\n let struct = structs[i];\n if (!struct.deleted) {\n if (struct instanceof Y.GC) {\n continue;\n }\n struct.content?.getContent().forEach((content) => {\n if (content instanceof Y.AbstractType) {\n // console.log(\"struct\", content)\n observeYJS(content);\n // console.log(content, \"is a created type type\");\n }\n });\n }\n }\n}\n\nconst docsObserved = new WeakSet<Y.Doc>();\n\nexport function makeYDocObservable(doc: Y.Doc) {\n if (docsObserved.has(doc)) {\n return;\n }\n docsObserved.add(doc);\n // based on https://github.com/yjs/yjs/pull/298#issuecomment-937636849\n\n // hook new root type creations (when calling getMap() or getArray(), etc)\n observeYJS(doc);\n\n // observe all structs already in the document\n doc.store.clients.forEach((entry) => {\n if (entry) {\n makeStructsObservable(entry, 0);\n }\n });\n\n // observe all root-types\n makeYDocRootLevelTypesObservable(doc);\n\n // observe newly created types from now on\n doc.on(\"beforeObserverCalls\", (tr: Y.Transaction) => {\n // observe new root types\n makeYDocRootLevelTypesObservable(doc);\n\n // observe new structs\n tr.afterState.forEach((clock, client) => {\n const beforeClock = tr.beforeState.get(client) || 0;\n if (beforeClock !== clock) {\n const structs = tr.doc.store.clients.get(client);\n if (!structs) {\n return;\n }\n const firstChangePos = Y.findIndexSS(structs, beforeClock);\n makeStructsObservable(structs, firstChangePos);\n }\n });\n });\n}\n\nexport { enableMobxBindings, enableReactiveBindings, enableVueBindings } from \"./observableProvider\";\n"],"names":["customCreateAtom","customReaction","defaultReaction","func","reaction","effect","undefined","createAtom","_name","_onBecomeObservedHandler","_onBecomeUnobservedHandler","apply","arguments","Error","enableMobxBindings","mobx","enableVueBindings","vue","name","onBecomeObserved","id","data","reactive","atom","reportObserved","reportChanged","enableReactiveBindings","onBecomeUnobserved","fireImmediately","arraysObserved","WeakSet","observeArray","array","has","add","selfAtom","atoms","Map","reportSelfAtom","handler","event","changes","added","size","deleted","keys","delta","length","observe","unobserve","_implicitObserver","reportArrayElementAtom","key","get","set","originalGet","ret","Reflect","patch","method","originalFunction","patchGetter","target","descriptor","Object","getOwnPropertyDescriptor","getPrototypeOf","_disableTracking","defineProperty","copyGetter","newMethodName","originalPush","push","content","call","originalSlice","slice","start","end","docsObserved","observeDoc","doc","oldKeys","Array","from","share","tr","newKeys","JSON","stringify","on","off","observeYJS","previous","args","removeObservers","mapsObserved","observeMap","map","reportMapKeyAtom","keysChanged","textsObserved","observeText","value","_changes","xmlsObserved","observeXml","isYType","element","Y","AbstractType","prototype","hasOwnProperty","XmlText","Text","Doc","XmlFragment","XmlElement","makeYDocRootLevelTypesObservable","forEach","type","constructor","makeStructsObservable","structs","startPos","i","struct","GC","getContent","makeYDocObservable","store","clients","entry","afterState","clock","client","beforeClock","beforeState","firstChangePos","findIndexSS"],"mappings":"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"}