@kerebron/extension-yjs 0.6.7 → 0.7.0
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/esm/ExtensionYjs.d.ts +3 -11
- package/esm/ExtensionYjs.d.ts.map +1 -1
- package/esm/ExtensionYjs.js +38 -45
- package/esm/ExtensionYjs.js.map +1 -1
- package/esm/WebsocketProvider.d.ts +69 -0
- package/esm/WebsocketProvider.d.ts.map +1 -0
- package/esm/WebsocketProvider.js +354 -0
- package/esm/WebsocketProvider.js.map +1 -0
- package/esm/YjsProvider.d.ts +48 -0
- package/esm/YjsProvider.d.ts.map +1 -0
- package/esm/YjsProvider.js +12 -0
- package/esm/YjsProvider.js.map +1 -0
- package/esm/_dnt.shims.d.ts +2 -0
- package/esm/_dnt.shims.d.ts.map +1 -0
- package/esm/_dnt.shims.js +58 -0
- package/esm/_dnt.shims.js.map +1 -0
- package/esm/binding/BindingMetadata.d.ts +6 -0
- package/esm/binding/BindingMetadata.d.ts.map +1 -0
- package/esm/binding/BindingMetadata.js +2 -0
- package/esm/binding/BindingMetadata.js.map +1 -0
- package/esm/binding/PmYjsBinding.d.ts +41 -0
- package/esm/binding/PmYjsBinding.d.ts.map +1 -0
- package/esm/binding/PmYjsBinding.js +190 -0
- package/esm/binding/PmYjsBinding.js.map +1 -0
- package/esm/binding/convertUtils.d.ts +48 -0
- package/esm/binding/convertUtils.d.ts.map +1 -0
- package/esm/binding/convertUtils.js +80 -0
- package/esm/binding/convertUtils.js.map +1 -0
- package/esm/{createNodeFromYElement.d.ts → binding/createNodeFromYElement.d.ts} +1 -1
- package/esm/binding/createNodeFromYElement.d.ts.map +1 -0
- package/esm/{createNodeFromYElement.js → binding/createNodeFromYElement.js} +2 -2
- package/esm/binding/createNodeFromYElement.js.map +1 -0
- package/esm/{updateYFragment.d.ts → binding/updateYFragment.d.ts} +3 -3
- package/esm/binding/updateYFragment.d.ts.map +1 -0
- package/esm/{updateYFragment.js → binding/updateYFragment.js} +10 -7
- package/esm/binding/updateYFragment.js.map +1 -0
- package/esm/lib.d.ts +1 -7
- package/esm/lib.d.ts.map +1 -1
- package/esm/lib.js +1 -200
- package/esm/lib.js.map +1 -1
- package/esm/position.d.ts +8 -0
- package/esm/position.d.ts.map +1 -0
- package/esm/position.js +165 -0
- package/esm/position.js.map +1 -0
- package/esm/ui/selection.d.ts +29 -0
- package/esm/ui/selection.d.ts.map +1 -0
- package/esm/ui/selection.js +129 -0
- package/esm/ui/selection.js.map +1 -0
- package/esm/yPositionPlugin.d.ts +6 -1
- package/esm/yPositionPlugin.d.ts.map +1 -1
- package/esm/yPositionPlugin.js +91 -50
- package/esm/yPositionPlugin.js.map +1 -1
- package/esm/ySyncPlugin.d.ts +5 -22
- package/esm/ySyncPlugin.d.ts.map +1 -1
- package/esm/ySyncPlugin.js +54 -116
- package/esm/ySyncPlugin.js.map +1 -1
- package/esm/yUndoPlugin.d.ts +11 -10
- package/esm/yUndoPlugin.d.ts.map +1 -1
- package/esm/yUndoPlugin.js +90 -52
- package/esm/yUndoPlugin.js.map +1 -1
- package/package.json +9 -6
- package/src/ExtensionYjs.ts +55 -67
- package/src/WebsocketProvider.ts +516 -0
- package/src/YjsProvider.ts +75 -0
- package/src/_dnt.shims.ts +60 -0
- package/src/binding/BindingMetadata.ts +6 -0
- package/src/binding/PmYjsBinding.ts +300 -0
- package/src/binding/convertUtils.ts +124 -0
- package/src/{createNodeFromYElement.ts → binding/createNodeFromYElement.ts} +3 -3
- package/src/{updateYFragment.ts → binding/updateYFragment.ts} +15 -8
- package/src/lib.ts +4 -230
- package/src/position.ts +191 -0
- package/src/ui/selection.ts +216 -0
- package/src/yPositionPlugin.ts +122 -74
- package/src/ySyncPlugin.ts +87 -170
- package/src/yUndoPlugin.ts +113 -62
- package/esm/ProsemirrorBinding.d.ts +0 -60
- package/esm/ProsemirrorBinding.d.ts.map +0 -1
- package/esm/ProsemirrorBinding.js +0 -405
- package/esm/ProsemirrorBinding.js.map +0 -1
- package/esm/createNodeFromYElement.d.ts.map +0 -1
- package/esm/createNodeFromYElement.js.map +0 -1
- package/esm/updateYFragment.d.ts.map +0 -1
- package/esm/updateYFragment.js.map +0 -1
- package/esm/userColors.d.ts +0 -5
- package/esm/userColors.d.ts.map +0 -1
- package/esm/userColors.js +0 -11
- package/esm/userColors.js.map +0 -1
- package/src/ProsemirrorBinding.ts +0 -607
- package/src/userColors.ts +0 -10
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as Y from 'yjs';
|
|
2
|
+
import * as awarenessProtocol from 'y-protocols/awareness';
|
|
3
|
+
import * as encoding from 'lib0/encoding';
|
|
4
|
+
import * as decoding from 'lib0/decoding';
|
|
5
|
+
export declare const messageSync = 0;
|
|
6
|
+
export declare const messageQueryAwareness = 3;
|
|
7
|
+
export declare const messageAwareness = 1;
|
|
8
|
+
export declare const messageAuth = 2;
|
|
9
|
+
export type CreateYjsProvider = (roomId: string) => [YjsProvider, Y.Doc];
|
|
10
|
+
export declare const MessageType: {
|
|
11
|
+
readonly Sync: 0;
|
|
12
|
+
readonly Awareness: 1;
|
|
13
|
+
readonly Auth: 2;
|
|
14
|
+
readonly QueryAwareness: 3;
|
|
15
|
+
};
|
|
16
|
+
export type MessageType = typeof MessageType[keyof typeof MessageType];
|
|
17
|
+
export type MessageHandler<T extends YjsProvider> = (encoder: encoding.Encoder, decoder: decoding.Decoder, provider: T, emitSynced: boolean, messageType: MessageType) => void;
|
|
18
|
+
export interface YjsProviderEventMap {
|
|
19
|
+
status: CustomEvent<{
|
|
20
|
+
status: 'connected' | 'disconnected' | 'connecting';
|
|
21
|
+
}>;
|
|
22
|
+
sync: CustomEvent<{
|
|
23
|
+
state: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
synced: CustomEvent<{
|
|
26
|
+
state: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
'connection-error': CustomEvent<{
|
|
29
|
+
event: Event;
|
|
30
|
+
provider: YjsProvider;
|
|
31
|
+
}>;
|
|
32
|
+
'connection-close': CustomEvent<{
|
|
33
|
+
event: CloseEvent | null;
|
|
34
|
+
provider: YjsProvider;
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
export interface YjsProvider extends EventTarget {
|
|
38
|
+
awareness: awarenessProtocol.Awareness;
|
|
39
|
+
doc: Y.Doc;
|
|
40
|
+
synced: boolean;
|
|
41
|
+
destroy(): any;
|
|
42
|
+
addEventListener<K extends keyof YjsProviderEventMap>(type: K, listener: (event: YjsProviderEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
|
|
43
|
+
removeEventListener<K extends keyof YjsProviderEventMap>(type: K, listener: (event: YjsProviderEventMap[K]) => void, options?: boolean | EventListenerOptions): void;
|
|
44
|
+
dispatchEvent(event: Event): boolean;
|
|
45
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void;
|
|
46
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions): void;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=YjsProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YjsProvider.d.ts","sourceRoot":"","sources":["../src/YjsProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,iBAAiB,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAE1C,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAEzE,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAEvE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,IAAI,CAClD,OAAO,EAAE,QAAQ,CAAC,OAAO,EACzB,OAAO,EAAE,QAAQ,CAAC,OAAO,EACzB,QAAQ,EAAE,CAAC,EACX,UAAU,EAAE,OAAO,EACnB,WAAW,EAAE,WAAW,KACrB,IAAI,CAAC;AAEV,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;QAAE,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,YAAY,CAAA;KAAE,CAAC,CAAC;IAC7E,IAAI,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtC,MAAM,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACxC,kBAAkB,EAAE,WAAW,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IACzE,kBAAkB,EAAE,WAAW,CAC7B;QAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,WAAW,CAAA;KAAE,CACpD,CAAC;CACH;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,SAAS,EAAE,iBAAiB,CAAC,SAAS,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAEhB,OAAO,QAAG;IAEV,gBAAgB,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAClD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,EACjD,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,IAAI,CAAC;IAER,mBAAmB,CAAC,CAAC,SAAS,MAAM,mBAAmB,EACrD,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,EACjD,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GACvC,IAAI,CAAC;IAER,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAGrC,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,GAAG,IAAI,EACnD,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAC1C,IAAI,CAAC;IAER,mBAAmB,CACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,GAAG,IAAI,EACnD,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,GACvC,IAAI,CAAC;CACT"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// y-websocket is forked because we need better state connection handling
|
|
2
|
+
export const messageSync = 0;
|
|
3
|
+
export const messageQueryAwareness = 3;
|
|
4
|
+
export const messageAwareness = 1;
|
|
5
|
+
export const messageAuth = 2;
|
|
6
|
+
export const MessageType = {
|
|
7
|
+
Sync: 0,
|
|
8
|
+
Awareness: 1,
|
|
9
|
+
Auth: 2,
|
|
10
|
+
QueryAwareness: 3,
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=YjsProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YjsProvider.js","sourceRoot":"","sources":["../src/YjsProvider.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAOzE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAC7B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC;AAI7B,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC;IACZ,IAAI,EAAE,CAAC;IACP,cAAc,EAAE,CAAC;CACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_dnt.shims.d.ts","sourceRoot":"","sources":["../src/_dnt.shims.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,gCAA2C,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const dntGlobals = {};
|
|
2
|
+
export const dntGlobalThis = createMergeProxy(globalThis, dntGlobals);
|
|
3
|
+
function createMergeProxy(baseObj, extObj) {
|
|
4
|
+
return new Proxy(baseObj, {
|
|
5
|
+
get(_target, prop, _receiver) {
|
|
6
|
+
if (prop in extObj) {
|
|
7
|
+
return extObj[prop];
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return baseObj[prop];
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
set(_target, prop, value) {
|
|
14
|
+
if (prop in extObj) {
|
|
15
|
+
delete extObj[prop];
|
|
16
|
+
}
|
|
17
|
+
baseObj[prop] = value;
|
|
18
|
+
return true;
|
|
19
|
+
},
|
|
20
|
+
deleteProperty(_target, prop) {
|
|
21
|
+
let success = false;
|
|
22
|
+
if (prop in extObj) {
|
|
23
|
+
delete extObj[prop];
|
|
24
|
+
success = true;
|
|
25
|
+
}
|
|
26
|
+
if (prop in baseObj) {
|
|
27
|
+
delete baseObj[prop];
|
|
28
|
+
success = true;
|
|
29
|
+
}
|
|
30
|
+
return success;
|
|
31
|
+
},
|
|
32
|
+
ownKeys(_target) {
|
|
33
|
+
const baseKeys = Reflect.ownKeys(baseObj);
|
|
34
|
+
const extKeys = Reflect.ownKeys(extObj);
|
|
35
|
+
const extKeysSet = new Set(extKeys);
|
|
36
|
+
return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];
|
|
37
|
+
},
|
|
38
|
+
defineProperty(_target, prop, desc) {
|
|
39
|
+
if (prop in extObj) {
|
|
40
|
+
delete extObj[prop];
|
|
41
|
+
}
|
|
42
|
+
Reflect.defineProperty(baseObj, prop, desc);
|
|
43
|
+
return true;
|
|
44
|
+
},
|
|
45
|
+
getOwnPropertyDescriptor(_target, prop) {
|
|
46
|
+
if (prop in extObj) {
|
|
47
|
+
return Reflect.getOwnPropertyDescriptor(extObj, prop);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return Reflect.getOwnPropertyDescriptor(baseObj, prop);
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
has(_target, prop) {
|
|
54
|
+
return prop in extObj || prop in baseObj;
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=_dnt.shims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_dnt.shims.js","sourceRoot":"","sources":["../src/_dnt.shims.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,EAClB,CAAC;AACF,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAEtE,SAAS,gBAAgB,CACvB,OAAU,EACV,MAAS;IAET,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;QACxB,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS;YAC1B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAQ,MAAc,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,OAAQ,OAAe,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK;YACtB,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAQ,MAAc,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YACA,OAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,cAAc,CAAC,OAAO,EAAE,IAAI;YAC1B,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAQ,MAAc,CAAC,IAAI,CAAC,CAAC;gBAC7B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;gBACpB,OAAQ,OAAe,CAAC,IAAI,CAAC,CAAC;gBAC9B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,OAAO;YACb,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC;QACrE,CAAC;QACD,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI;YAChC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAQ,MAAc,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,wBAAwB,CAAC,OAAO,EAAE,IAAI;YACpC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,OAAO,OAAO,CAAC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,GAAG,CAAC,OAAO,EAAE,IAAI;YACf,OAAO,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC;QAC3C,CAAC;KACF,CAAQ,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BindingMetadata.d.ts","sourceRoot":"","sources":["../../src/binding/BindingMetadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BindingMetadata.js","sourceRoot":"","sources":["../../src/binding/BindingMetadata.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as Y from 'yjs';
|
|
2
|
+
import { Transaction } from 'prosemirror-state';
|
|
3
|
+
import { CoreEditor } from '@kerebron/editor';
|
|
4
|
+
import { User } from '@kerebron/editor/user';
|
|
5
|
+
import { CreateYjsProvider } from '../YjsProvider.js';
|
|
6
|
+
import { ProsemirrorMapping } from '../lib.js';
|
|
7
|
+
import { SelectionStash } from '../ui/selection.js';
|
|
8
|
+
type Mutex = (f: () => void, g?: () => void) => void;
|
|
9
|
+
export declare const createMutex: () => Mutex;
|
|
10
|
+
export type YjsData = {
|
|
11
|
+
ydoc: Y.Doc;
|
|
12
|
+
xmlFragment: Y.XmlFragment;
|
|
13
|
+
};
|
|
14
|
+
export declare class PmYjsBinding extends EventTarget {
|
|
15
|
+
private readonly editor;
|
|
16
|
+
private provider;
|
|
17
|
+
private connectionState;
|
|
18
|
+
private yjs;
|
|
19
|
+
private selectionStash;
|
|
20
|
+
addToYjsHistory: boolean;
|
|
21
|
+
private hasImported;
|
|
22
|
+
private mux;
|
|
23
|
+
private bindingMetadata;
|
|
24
|
+
private syncedHandler;
|
|
25
|
+
private _observeFunction;
|
|
26
|
+
constructor(editor: CoreEditor);
|
|
27
|
+
destroy(): void;
|
|
28
|
+
changeUser(user: User): void;
|
|
29
|
+
changeRoom(roomId: string, createYjsProvider: CreateYjsProvider, tr: Transaction): void;
|
|
30
|
+
leaveRoom(tr: Transaction): void;
|
|
31
|
+
importRemoteYdoc(): void;
|
|
32
|
+
yXmlChanged(events: Array<Y.YEvent<any>>, ytr: Y.Transaction): void;
|
|
33
|
+
pmChanged(): void;
|
|
34
|
+
createFromProseMirror(yjs: YjsData): void;
|
|
35
|
+
overwriteProseMirror(yXmlFragment: Y.XmlFragment): void;
|
|
36
|
+
getYjs(): YjsData | undefined;
|
|
37
|
+
getMapping(): ProsemirrorMapping;
|
|
38
|
+
getSelectionStash(): SelectionStash | undefined;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=PmYjsBinding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PmYjsBinding.d.ts","sourceRoot":"","sources":["../../src/binding/PmYjsBinding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAe,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQpD,KAAK,KAAK,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AAErD,eAAO,MAAM,WAAW,QAAO,KAc9B,CAAC;AAIF,MAAM,MAAM,OAAO,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;IAAC,WAAW,EAAE,CAAC,CAAC,WAAW,CAAA;CAAE,CAAC;AAElE,qBAAa,YAAa,SAAQ,WAAW;IAsB/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IArBnC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,eAAe,CAA2B;IAElD,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,cAAc,CAA6B;IAE5C,eAAe,UAAQ;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,aAAa,CAIX;IACV,OAAO,CAAC,gBAAgB,CAGd;gBAEmB,MAAM,EAAE,UAAU;IAyB/C,OAAO;IAOP,UAAU,CAAC,IAAI,EAAE,IAAI;IAOrB,UAAU,CACR,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,iBAAiB,EACpC,EAAE,EAAE,WAAW;IAkCjB,SAAS,CAAC,EAAE,EAAE,WAAW;IAsBzB,gBAAgB;IAiBhB,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW;IAoD5D,SAAS;IA6BT,qBAAqB,CAAC,GAAG,EAAE,OAAO;IAYlC,oBAAoB,CAAC,YAAY,EAAE,CAAC,CAAC,WAAW;IAkBhD,MAAM,IAAI,OAAO,GAAG,SAAS;IAI7B,UAAU,IAAI,kBAAkB;IAIhC,iBAAiB,IAAI,cAAc,GAAG,SAAS;CAGhD"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import * as Y from 'yjs';
|
|
2
|
+
import { Fragment, Slice } from 'prosemirror-model';
|
|
3
|
+
import { SelectionStash } from '../ui/selection.js';
|
|
4
|
+
import { ySyncPluginKey } from '../keys.js';
|
|
5
|
+
import { yXmlFragmentToProseMirrorRootNode } from './convertUtils.js';
|
|
6
|
+
import { updateYFragment } from './updateYFragment.js';
|
|
7
|
+
import { createNodeIfNotExists } from './createNodeFromYElement.js';
|
|
8
|
+
export const createMutex = () => {
|
|
9
|
+
let token = true;
|
|
10
|
+
return (f, g) => {
|
|
11
|
+
if (token) {
|
|
12
|
+
token = false;
|
|
13
|
+
try {
|
|
14
|
+
f();
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
token = true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
else if (g !== undefined) {
|
|
21
|
+
g();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export class PmYjsBinding extends EventTarget {
|
|
26
|
+
editor;
|
|
27
|
+
provider;
|
|
28
|
+
connectionState = 'idle';
|
|
29
|
+
yjs;
|
|
30
|
+
selectionStash;
|
|
31
|
+
addToYjsHistory = true;
|
|
32
|
+
hasImported = false;
|
|
33
|
+
mux;
|
|
34
|
+
bindingMetadata;
|
|
35
|
+
syncedHandler;
|
|
36
|
+
_observeFunction;
|
|
37
|
+
constructor(editor) {
|
|
38
|
+
super();
|
|
39
|
+
this.editor = editor;
|
|
40
|
+
this.bindingMetadata = { mapping: new Map(), isOverlappingMark: new Map() };
|
|
41
|
+
this.mux = createMutex();
|
|
42
|
+
this.syncedHandler = (event) => {
|
|
43
|
+
const synced = event.detail.state;
|
|
44
|
+
if (synced && !this.hasImported) {
|
|
45
|
+
this.importRemoteYdoc();
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// this.ydocChanged();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
this._observeFunction = (events, transaction) => {
|
|
52
|
+
this.yXmlChanged(events, transaction);
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
destroy() {
|
|
56
|
+
this.connectionState = 'idle';
|
|
57
|
+
const tr = this.editor.state.tr;
|
|
58
|
+
this.leaveRoom(tr);
|
|
59
|
+
this.editor.dispatchTransaction(tr);
|
|
60
|
+
}
|
|
61
|
+
changeUser(user) {
|
|
62
|
+
if (!this.provider) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.provider.awareness.setLocalStateField('kerebron:user', user);
|
|
66
|
+
}
|
|
67
|
+
changeRoom(roomId, createYjsProvider, tr) {
|
|
68
|
+
if (this.provider) {
|
|
69
|
+
this.provider.removeEventListener('synced', this.syncedHandler);
|
|
70
|
+
this.provider.destroy();
|
|
71
|
+
this.hasImported = false;
|
|
72
|
+
this.provider = undefined;
|
|
73
|
+
}
|
|
74
|
+
this.addToYjsHistory = true;
|
|
75
|
+
this.connectionState = 'joining';
|
|
76
|
+
const [provider, ydoc] = createYjsProvider(roomId);
|
|
77
|
+
this.bindingMetadata.mapping.clear();
|
|
78
|
+
this.bindingMetadata.isOverlappingMark.clear();
|
|
79
|
+
this.provider = provider;
|
|
80
|
+
const fieldName = 'kerebron:' + this.editor.schema.topNodeType.name;
|
|
81
|
+
this.yjs = { ydoc, xmlFragment: ydoc.getXmlFragment(fieldName) };
|
|
82
|
+
this.selectionStash = new SelectionStash(this.yjs, this.getMapping(), this.editor);
|
|
83
|
+
this.yjs.xmlFragment.observeDeep(this._observeFunction);
|
|
84
|
+
this.provider.addEventListener('synced', this.syncedHandler);
|
|
85
|
+
tr.setMeta('yjs:setAwareness', provider.awareness);
|
|
86
|
+
tr.setMeta('setYjs', this.yjs);
|
|
87
|
+
}
|
|
88
|
+
leaveRoom(tr) {
|
|
89
|
+
this.connectionState = 'leaving';
|
|
90
|
+
if (this.provider) {
|
|
91
|
+
this.provider.removeEventListener('synced', this.syncedHandler);
|
|
92
|
+
this.provider.destroy();
|
|
93
|
+
}
|
|
94
|
+
this.addToYjsHistory = true;
|
|
95
|
+
this.provider = undefined;
|
|
96
|
+
this.selectionStash?.destroy();
|
|
97
|
+
this.selectionStash = undefined;
|
|
98
|
+
this.yjs?.xmlFragment.unobserveDeep(this._observeFunction);
|
|
99
|
+
this.yjs = undefined;
|
|
100
|
+
this.hasImported = false;
|
|
101
|
+
tr.setMeta('addToYjsHistory', false);
|
|
102
|
+
tr.setMeta('yjs:removeAwareness', true);
|
|
103
|
+
tr.setMeta('clearYjs', true);
|
|
104
|
+
}
|
|
105
|
+
importRemoteYdoc() {
|
|
106
|
+
if (!this.yjs) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this.addToYjsHistory = this.editor.state.doc.content.size > 2; // Non empty para
|
|
110
|
+
if (this.yjs.xmlFragment.length === 0) {
|
|
111
|
+
this.createFromProseMirror(this.yjs);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
this.overwriteProseMirror(this.yjs.xmlFragment);
|
|
115
|
+
}
|
|
116
|
+
this.connectionState = 'synced';
|
|
117
|
+
this.hasImported = true;
|
|
118
|
+
}
|
|
119
|
+
yXmlChanged(events, ytr) {
|
|
120
|
+
this.mux(() => {
|
|
121
|
+
if (!this.yjs) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const state = this.editor.state;
|
|
125
|
+
const { xmlFragment } = this.yjs;
|
|
126
|
+
// TODO handleSnapShot
|
|
127
|
+
const mapping = this.bindingMetadata.mapping;
|
|
128
|
+
const delType = (_, type) => mapping.delete(type);
|
|
129
|
+
Y.iterateDeletedStructs(ytr, ytr.deleteSet, (struct) => {
|
|
130
|
+
if (struct.constructor === Y.Item) {
|
|
131
|
+
const type = struct.content.type;
|
|
132
|
+
type && mapping.delete(type);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
ytr.changed.forEach(delType);
|
|
136
|
+
ytr.changedParentTypes.forEach(delType);
|
|
137
|
+
const fragmentContent = xmlFragment.toArray().map((t) => createNodeIfNotExists(t, state.schema, this.bindingMetadata)).filter((n) => n !== null);
|
|
138
|
+
const tr = state.tr;
|
|
139
|
+
if (ytr.origin instanceof Y.UndoManager) {
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
}
|
|
143
|
+
tr.setMeta('addToYjsHistory', false);
|
|
144
|
+
tr.replace(0, state.doc.content.size, new Slice(Fragment.from(fragmentContent), 0, 0));
|
|
145
|
+
this.selectionStash?.restore(tr);
|
|
146
|
+
this.editor.dispatchTransaction(tr);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
pmChanged() {
|
|
150
|
+
if (!this.hasImported) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (!this.yjs) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const doc = this.editor.state.doc;
|
|
157
|
+
const { ydoc, xmlFragment } = this.yjs;
|
|
158
|
+
this.mux(() => {
|
|
159
|
+
const origin = ySyncPluginKey;
|
|
160
|
+
ydoc.transact((ytr) => {
|
|
161
|
+
ytr.meta.set('addToYjsHistory', this.addToYjsHistory);
|
|
162
|
+
updateYFragment(ydoc, xmlFragment, doc, this.bindingMetadata, this.addToYjsHistory);
|
|
163
|
+
this.selectionStash?.store();
|
|
164
|
+
}, origin);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
createFromProseMirror(yjs) {
|
|
168
|
+
const doc = this.editor.state.doc;
|
|
169
|
+
const { ydoc, xmlFragment } = yjs;
|
|
170
|
+
updateYFragment(ydoc, xmlFragment, doc, this.bindingMetadata, this.addToYjsHistory);
|
|
171
|
+
}
|
|
172
|
+
overwriteProseMirror(yXmlFragment) {
|
|
173
|
+
const state = this.editor.state;
|
|
174
|
+
const newRoot = yXmlFragmentToProseMirrorRootNode(yXmlFragment, state.schema);
|
|
175
|
+
const tr = state.tr;
|
|
176
|
+
tr.setMeta('addToYjsHistory', false);
|
|
177
|
+
tr.replaceWith(0, state.doc.content.size, newRoot);
|
|
178
|
+
this.editor.dispatchTransaction(tr);
|
|
179
|
+
}
|
|
180
|
+
getYjs() {
|
|
181
|
+
return this.yjs;
|
|
182
|
+
}
|
|
183
|
+
getMapping() {
|
|
184
|
+
return this.bindingMetadata.mapping;
|
|
185
|
+
}
|
|
186
|
+
getSelectionStash() {
|
|
187
|
+
return this.selectionStash;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=PmYjsBinding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PmYjsBinding.js","sourceRoot":"","sources":["../../src/binding/PmYjsBinding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as Y from 'yjs';
|
|
2
|
+
import { Fragment, Node, type Schema } from 'prosemirror-model';
|
|
3
|
+
import { BindingMetadata } from './BindingMetadata.js';
|
|
4
|
+
export declare const createEmptyMeta: () => BindingMetadata;
|
|
5
|
+
/**
|
|
6
|
+
* Utility function for converting an Y.Fragment to a ProseMirror fragment.
|
|
7
|
+
*/
|
|
8
|
+
export declare const yXmlFragmentToProseMirrorFragment: (yXmlFragment: Y.XmlFragment, schema: Schema) => Fragment;
|
|
9
|
+
/**
|
|
10
|
+
* Utility function for converting an Y.Fragment to a ProseMirror node.
|
|
11
|
+
*/
|
|
12
|
+
export declare const yXmlFragmentToProseMirrorRootNode: (yXmlFragment: Y.XmlFragment, schema: Schema) => Node;
|
|
13
|
+
/**
|
|
14
|
+
* Utility method to convert a Prosemirror Doc Node into a Y.Doc.
|
|
15
|
+
*
|
|
16
|
+
* This can be used when importing existing content to Y.Doc for the first time,
|
|
17
|
+
* note that this should not be used to rehydrate a Y.Doc from a database once
|
|
18
|
+
* collaboration has begun as all history will be lost
|
|
19
|
+
*/
|
|
20
|
+
export declare function prosemirrorToYDoc(doc: Node, xmlFragment?: string): Y.Doc;
|
|
21
|
+
/**
|
|
22
|
+
* Utility method to update an empty Y.XmlFragment with content from a Prosemirror Doc Node.
|
|
23
|
+
*
|
|
24
|
+
* This can be used when importing existing content to Y.Doc for the first time,
|
|
25
|
+
* note that this should not be used to rehydrate a Y.Doc from a database once
|
|
26
|
+
* collaboration has begun as all history will be lost
|
|
27
|
+
*
|
|
28
|
+
* Note: The Y.XmlFragment does not need to be part of a Y.Doc document at the time that this
|
|
29
|
+
* method is called, but it must be added before any other operations are performed on it.
|
|
30
|
+
*/
|
|
31
|
+
export declare function prosemirrorToYXmlFragment(doc: Node, xmlFragment: Y.XmlFragment): Y.XmlFragment;
|
|
32
|
+
/**
|
|
33
|
+
* Utility method to convert Prosemirror compatible JSON into a Y.Doc.
|
|
34
|
+
*
|
|
35
|
+
* This can be used when importing existing content to Y.Doc for the first time,
|
|
36
|
+
* note that this should not be used to rehydrate a Y.Doc from a database once
|
|
37
|
+
* collaboration has begun as all history will be lost
|
|
38
|
+
*/
|
|
39
|
+
export declare function prosemirrorJSONToYDoc(schema: Schema, state: any, xmlFragment?: string): Y.Doc;
|
|
40
|
+
/**
|
|
41
|
+
* Utility method to convert Prosemirror compatible JSON to a Y.XmlFragment
|
|
42
|
+
*
|
|
43
|
+
* This can be used when importing existing content to Y.Doc for the first time,
|
|
44
|
+
* note that this should not be used to rehydrate a Y.Doc from a database once
|
|
45
|
+
* collaboration has begun as all history will be lost
|
|
46
|
+
*/
|
|
47
|
+
export declare function prosemirrorJSONToYXmlFragment(schema: Schema, state: any, xmlFragment: Y.XmlFragment): Y.XmlFragment;
|
|
48
|
+
//# sourceMappingURL=convertUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertUtils.d.ts","sourceRoot":"","sources":["../../src/binding/convertUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAMhE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,eAAO,MAAM,eAAe,QAAO,eAGjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iCAAiC,GAC5C,cAAc,CAAC,CAAC,WAAW,EAC3B,QAAQ,MAAM,aAaf,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iCAAiC,GAC5C,cAAc,CAAC,CAAC,WAAW,EAC3B,QAAQ,MAAM,SAKb,CAAC;AAEJ;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,IAAI,EACT,WAAW,GAAE,MAAsB,GAClC,CAAC,CAAC,GAAG,CASP;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,IAAI,EACT,WAAW,EAAE,CAAC,CAAC,WAAW,GACzB,CAAC,CAAC,WAAW,CAUf;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,GAAG,EACV,WAAW,GAAE,MAAsB,GAClC,CAAC,CAAC,GAAG,CAGP;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,GAAG,EACV,WAAW,EAAE,CAAC,CAAC,WAAW,GACzB,CAAC,CAAC,WAAW,CAGf"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as Y from 'yjs';
|
|
2
|
+
import { Fragment, Node } from 'prosemirror-model';
|
|
3
|
+
import { updateYFragment } from './updateYFragment.js';
|
|
4
|
+
import { createNodeFromYElement } from './createNodeFromYElement.js';
|
|
5
|
+
export const createEmptyMeta = () => ({
|
|
6
|
+
mapping: new Map(),
|
|
7
|
+
isOverlappingMark: new Map(),
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* Utility function for converting an Y.Fragment to a ProseMirror fragment.
|
|
11
|
+
*/
|
|
12
|
+
export const yXmlFragmentToProseMirrorFragment = (yXmlFragment, schema) => {
|
|
13
|
+
const elements = yXmlFragment.toArray().filter((i) => i instanceof Y.XmlElement);
|
|
14
|
+
const fragmentContent = elements.map((t) => createNodeFromYElement(t, schema, createEmptyMeta())).filter((n) => n !== null);
|
|
15
|
+
return Fragment.fromArray(fragmentContent);
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Utility function for converting an Y.Fragment to a ProseMirror node.
|
|
19
|
+
*/
|
|
20
|
+
export const yXmlFragmentToProseMirrorRootNode = (yXmlFragment, schema) => schema.topNodeType.create(null, yXmlFragmentToProseMirrorFragment(yXmlFragment, schema));
|
|
21
|
+
/**
|
|
22
|
+
* Utility method to convert a Prosemirror Doc Node into a Y.Doc.
|
|
23
|
+
*
|
|
24
|
+
* This can be used when importing existing content to Y.Doc for the first time,
|
|
25
|
+
* note that this should not be used to rehydrate a Y.Doc from a database once
|
|
26
|
+
* collaboration has begun as all history will be lost
|
|
27
|
+
*/
|
|
28
|
+
export function prosemirrorToYDoc(doc, xmlFragment = 'prosemirror') {
|
|
29
|
+
const ydoc = new Y.Doc();
|
|
30
|
+
const type = ydoc.get(xmlFragment, Y.XmlFragment);
|
|
31
|
+
if (!type.doc) {
|
|
32
|
+
return ydoc;
|
|
33
|
+
}
|
|
34
|
+
prosemirrorToYXmlFragment(doc, type);
|
|
35
|
+
return type.doc;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Utility method to update an empty Y.XmlFragment with content from a Prosemirror Doc Node.
|
|
39
|
+
*
|
|
40
|
+
* This can be used when importing existing content to Y.Doc for the first time,
|
|
41
|
+
* note that this should not be used to rehydrate a Y.Doc from a database once
|
|
42
|
+
* collaboration has begun as all history will be lost
|
|
43
|
+
*
|
|
44
|
+
* Note: The Y.XmlFragment does not need to be part of a Y.Doc document at the time that this
|
|
45
|
+
* method is called, but it must be added before any other operations are performed on it.
|
|
46
|
+
*/
|
|
47
|
+
export function prosemirrorToYXmlFragment(doc, xmlFragment) {
|
|
48
|
+
const type = xmlFragment || new Y.XmlFragment();
|
|
49
|
+
const ydoc = type.doc
|
|
50
|
+
? type.doc
|
|
51
|
+
: { transact: (transaction) => transaction(undefined) };
|
|
52
|
+
updateYFragment(ydoc, type, doc, {
|
|
53
|
+
mapping: new Map(),
|
|
54
|
+
isOverlappingMark: new Map(),
|
|
55
|
+
});
|
|
56
|
+
return type;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Utility method to convert Prosemirror compatible JSON into a Y.Doc.
|
|
60
|
+
*
|
|
61
|
+
* This can be used when importing existing content to Y.Doc for the first time,
|
|
62
|
+
* note that this should not be used to rehydrate a Y.Doc from a database once
|
|
63
|
+
* collaboration has begun as all history will be lost
|
|
64
|
+
*/
|
|
65
|
+
export function prosemirrorJSONToYDoc(schema, state, xmlFragment = 'prosemirror') {
|
|
66
|
+
const doc = Node.fromJSON(schema, state);
|
|
67
|
+
return prosemirrorToYDoc(doc, xmlFragment);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Utility method to convert Prosemirror compatible JSON to a Y.XmlFragment
|
|
71
|
+
*
|
|
72
|
+
* This can be used when importing existing content to Y.Doc for the first time,
|
|
73
|
+
* note that this should not be used to rehydrate a Y.Doc from a database once
|
|
74
|
+
* collaboration has begun as all history will be lost
|
|
75
|
+
*/
|
|
76
|
+
export function prosemirrorJSONToYXmlFragment(schema, state, xmlFragment) {
|
|
77
|
+
const doc = Node.fromJSON(schema, state);
|
|
78
|
+
return prosemirrorToYXmlFragment(doc, xmlFragment);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=convertUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertUtils.js","sourceRoot":"","sources":["../../src/binding/convertUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as PModel from 'prosemirror-model';
|
|
2
2
|
import { Schema } from 'prosemirror-model';
|
|
3
3
|
import * as Y from 'yjs';
|
|
4
|
-
import type { BindingMetadata } from './
|
|
4
|
+
import type { BindingMetadata } from './BindingMetadata.js';
|
|
5
5
|
export declare const attributesToMarks: (attrs: {
|
|
6
6
|
[s: string]: any;
|
|
7
7
|
}, schema: Schema) => PModel.Mark[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createNodeFromYElement.d.ts","sourceRoot":"","sources":["../../src/binding/createNodeFromYElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAQ,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAK5D,eAAO,MAAM,iBAAiB,GAC5B,OAAO;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC3B,QAAQ,MAAM,kBAQf,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,IAAI,CAAC,CAAC,UAAU,EAChB,QAAQ,MAAM,CAAC,MAAM,EACrB,MAAM,eAAe,EACrB,WAAW,CAAC,CAAC,QAAQ,EACrB,eAAe,CAAC,CAAC,QAAQ,EACzB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,KAC9D,MAAM,CAAC,IAAI,GAAG,IAiBhB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,IAAI,CAAC,CAAC,UAAU,EAChB,QAAQ,MAAM,EACd,MAAM,eAAe,EACrB,WAAW,CAAC,CAAC,QAAQ,EACrB,eAAe,CAAC,CAAC,QAAQ,EACzB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,KAC9D,MAAM,CAAC,IAAI,GAAG,IA2FhB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as Y from 'yjs';
|
|
2
|
-
import { ySyncPluginKey } from '
|
|
3
|
-
import { isVisible } from '
|
|
2
|
+
import { ySyncPluginKey } from '../keys.js';
|
|
3
|
+
import { isVisible } from '../utils.js';
|
|
4
4
|
import { yattr2markname } from './updateYFragment.js';
|
|
5
5
|
export const attributesToMarks = (attrs, schema) => {
|
|
6
6
|
const marks = [];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createNodeFromYElement.js","sourceRoot":"","sources":["../../src/binding/createNodeFromYElement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Y from 'yjs';
|
|
2
2
|
import { Node } from 'prosemirror-model';
|
|
3
|
-
import type { BindingMetadata } from './
|
|
4
|
-
import { TransactFunc } from '
|
|
3
|
+
import type { BindingMetadata } from './BindingMetadata.js';
|
|
4
|
+
import { TransactFunc } from '../lib.js';
|
|
5
5
|
export declare const yattr2markname: (attrName: string) => string;
|
|
6
6
|
/**
|
|
7
7
|
* Update a yDom node by syncing the current content of the prosemirror node.
|
|
@@ -13,5 +13,5 @@ export declare const yattr2markname: (attrName: string) => string;
|
|
|
13
13
|
*/
|
|
14
14
|
export declare const updateYFragment: (ydoc: {
|
|
15
15
|
transact: TransactFunc<void>;
|
|
16
|
-
}, yDomFragment: Y.XmlFragment, pNode: Node, meta: BindingMetadata) => void;
|
|
16
|
+
}, yDomFragment: Y.XmlFragment, pNode: Node, meta: BindingMetadata, addToYjsHistory?: boolean) => void;
|
|
17
17
|
//# sourceMappingURL=updateYFragment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateYFragment.d.ts","sourceRoot":"","sources":["../../src/binding/updateYFragment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAQ,IAAI,EAAU,MAAM,mBAAmB,CAAC;AAMvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,WACM,CAAC;AAiQtD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM;IAAE,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;CAAE,EACtC,cAAc,CAAC,CAAC,WAAW,EAC3B,OAAO,IAAI,EACX,MAAM,eAAe,EACrB,kBAAkB,OAAO,SAkK1B,CAAC"}
|