@remirror/extension-yjs 1.0.16 → 1.0.20

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2019-2021, KickJump Ltd
3
+ Copyright (c) 2019-2022, Remirror Contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,5 +1,5 @@
1
1
  import type { Doc } from 'yjs';
2
- import { AcceptUndefined, EditorState, KeyBindingProps, NonChainableCommandFunction, OnSetOptionsProps, PlainExtension, ProsemirrorPlugin, Selection, Shape } from '@remirror/core';
2
+ import { AcceptUndefined, Dispose, EditorState, KeyBindingProps, NonChainableCommandFunction, OnSetOptionsProps, PlainExtension, ProsemirrorPlugin, Selection, Shape } from '@remirror/core';
3
3
  export interface ColorDef {
4
4
  light: string;
5
5
  dark: string;
@@ -73,7 +73,7 @@ export declare class YjsExtension extends PlainExtension<YjsOptions> {
73
73
  * The provider that is being used for the editor.
74
74
  */
75
75
  get provider(): YjsRealtimeProvider;
76
- onView(): void;
76
+ onView(): Dispose | void;
77
77
  /**
78
78
  * Create the yjs plugins.
79
79
  */
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _applyDecoratedDescriptor = require('@babel/runtime/helpers/applyDecoratedDescriptor');
6
6
  var yProsemirror = require('y-prosemirror');
7
+ var yjs = require('yjs');
7
8
  var core = require('@remirror/core');
8
9
  var extensionAnnotation = require('@remirror/extension-annotation');
9
10
  var messages = require('@remirror/messages');
@@ -76,7 +77,8 @@ var YjsExtension = (_dec = core.extension({
76
77
  transformPosition: this.absolutePositionToRelativePosition.bind(this),
77
78
  transformPositionBeforeRender: this.relativePositionToAbsolutePosition.bind(this)
78
79
  });
79
- this.provider.doc.on('update', (_update, _origin, _doc, yjsTr) => {
80
+
81
+ var handler = (_update, _origin, _doc, yjsTr) => {
80
82
  var _this$store$commands$, _this$store$commands;
81
83
 
82
84
  // Ignore own changes
@@ -85,7 +87,12 @@ var YjsExtension = (_dec = core.extension({
85
87
  }
86
88
 
87
89
  (_this$store$commands$ = (_this$store$commands = this.store.commands).redrawAnnotations) === null || _this$store$commands$ === void 0 ? void 0 : _this$store$commands$.call(_this$store$commands);
88
- });
90
+ };
91
+
92
+ this.provider.doc.on('update', handler);
93
+ return () => {
94
+ this.provider.doc.off('update', handler);
95
+ };
89
96
  } catch (_unused) {// AnnotationExtension isn't present in editor
90
97
  }
91
98
  }
@@ -104,13 +111,16 @@ var YjsExtension = (_dec = core.extension({
104
111
  trackedOrigins = _this$options.trackedOrigins;
105
112
  var yDoc = this.provider.doc;
106
113
  var type = yDoc.getXmlFragment('prosemirror');
114
+ var undoManager = new yjs.UndoManager(type, {
115
+ trackedOrigins: new Set([yProsemirror.ySyncPluginKey, ...trackedOrigins]),
116
+ deleteFilter: item => yProsemirror.defaultDeleteFilter(item, protectedNodes)
117
+ });
107
118
  return [yProsemirror.ySyncPlugin(type, syncPluginOptions), yProsemirror.yCursorPlugin(this.provider.awareness, {
108
119
  cursorBuilder,
109
120
  cursorStateField,
110
121
  getSelection
111
122
  }, cursorStateField), yProsemirror.yUndoPlugin({
112
- protectedNodes,
113
- trackedOrigins
123
+ undoManager
114
124
  })];
115
125
  }
116
126
  /**
@@ -123,6 +133,13 @@ var YjsExtension = (_dec = core.extension({
123
133
  pickChanged = props.pickChanged;
124
134
  var changedPluginOptions = pickChanged(['cursorBuilder', 'cursorStateField', 'getProvider', 'getSelection', 'syncPluginOptions', 'protectedNodes', 'trackedOrigins']);
125
135
 
136
+ if (changes.protectedNodes.changed || changes.trackedOrigins.changed) {
137
+ // Cannot change these, as we would need a new undo manager instance, and for that
138
+ // we would need to unregister the previous instance from the document to avoid
139
+ // memory leaks.
140
+ throw new Error("Cannot change \"protectedNodes\" or \"trackedOrigins\" options");
141
+ }
142
+
126
143
  if (changes.getProvider.changed) {
127
144
  this._provider = undefined;
128
145
  var previousProvider = getLazyValue(changes.getProvider.previousValue); // Check whether the values have changed.
@@ -1,5 +1,6 @@
1
1
  import _applyDecoratedDescriptor from '@babel/runtime/helpers/esm/applyDecoratedDescriptor';
2
- import { defaultCursorBuilder, ySyncPlugin, yCursorPlugin, yUndoPlugin, yUndoPluginKey, undo, redo, ySyncPluginKey, absolutePositionToRelativePosition, relativePositionToAbsolutePosition } from 'y-prosemirror';
2
+ import { defaultCursorBuilder, ySyncPluginKey, defaultDeleteFilter, ySyncPlugin, yCursorPlugin, yUndoPlugin, yUndoPluginKey, undo, redo, absolutePositionToRelativePosition, relativePositionToAbsolutePosition } from 'y-prosemirror';
3
+ import { UndoManager } from 'yjs';
3
4
  import { extension, invariant, ErrorConstant, ExtensionPriority, command, keyBinding, NamedShortcut, PlainExtension, isFunction, isEmptyObject, nonChainable, convertCommand } from '@remirror/core';
4
5
  import { AnnotationExtension } from '@remirror/extension-annotation';
5
6
  import { ExtensionHistoryMessages } from '@remirror/messages';
@@ -72,7 +73,8 @@ var YjsExtension = (_dec = extension({
72
73
  transformPosition: this.absolutePositionToRelativePosition.bind(this),
73
74
  transformPositionBeforeRender: this.relativePositionToAbsolutePosition.bind(this)
74
75
  });
75
- this.provider.doc.on('update', (_update, _origin, _doc, yjsTr) => {
76
+
77
+ var handler = (_update, _origin, _doc, yjsTr) => {
76
78
  var _this$store$commands$, _this$store$commands;
77
79
 
78
80
  // Ignore own changes
@@ -81,7 +83,12 @@ var YjsExtension = (_dec = extension({
81
83
  }
82
84
 
83
85
  (_this$store$commands$ = (_this$store$commands = this.store.commands).redrawAnnotations) === null || _this$store$commands$ === void 0 ? void 0 : _this$store$commands$.call(_this$store$commands);
84
- });
86
+ };
87
+
88
+ this.provider.doc.on('update', handler);
89
+ return () => {
90
+ this.provider.doc.off('update', handler);
91
+ };
85
92
  } catch (_unused) {// AnnotationExtension isn't present in editor
86
93
  }
87
94
  }
@@ -100,13 +107,16 @@ var YjsExtension = (_dec = extension({
100
107
  trackedOrigins = _this$options.trackedOrigins;
101
108
  var yDoc = this.provider.doc;
102
109
  var type = yDoc.getXmlFragment('prosemirror');
110
+ var undoManager = new UndoManager(type, {
111
+ trackedOrigins: new Set([ySyncPluginKey, ...trackedOrigins]),
112
+ deleteFilter: item => defaultDeleteFilter(item, protectedNodes)
113
+ });
103
114
  return [ySyncPlugin(type, syncPluginOptions), yCursorPlugin(this.provider.awareness, {
104
115
  cursorBuilder,
105
116
  cursorStateField,
106
117
  getSelection
107
118
  }, cursorStateField), yUndoPlugin({
108
- protectedNodes,
109
- trackedOrigins
119
+ undoManager
110
120
  })];
111
121
  }
112
122
  /**
@@ -119,6 +129,13 @@ var YjsExtension = (_dec = extension({
119
129
  pickChanged = props.pickChanged;
120
130
  var changedPluginOptions = pickChanged(['cursorBuilder', 'cursorStateField', 'getProvider', 'getSelection', 'syncPluginOptions', 'protectedNodes', 'trackedOrigins']);
121
131
 
132
+ if (changes.protectedNodes.changed || changes.trackedOrigins.changed) {
133
+ // Cannot change these, as we would need a new undo manager instance, and for that
134
+ // we would need to unregister the previous instance from the document to avoid
135
+ // memory leaks.
136
+ throw new Error("Cannot change \"protectedNodes\" or \"trackedOrigins\" options");
137
+ }
138
+
122
139
  if (changes.getProvider.changed) {
123
140
  this._provider = undefined;
124
141
  var previousProvider = getLazyValue(changes.getProvider.previousValue); // Check whether the values have changed.
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _applyDecoratedDescriptor = require('@babel/runtime/helpers/applyDecoratedDescriptor');
6
6
  var yProsemirror = require('y-prosemirror');
7
+ var yjs = require('yjs');
7
8
  var core = require('@remirror/core');
8
9
  var extensionAnnotation = require('@remirror/extension-annotation');
9
10
  var messages = require('@remirror/messages');
@@ -76,7 +77,8 @@ var YjsExtension = (_dec = core.extension({
76
77
  transformPosition: this.absolutePositionToRelativePosition.bind(this),
77
78
  transformPositionBeforeRender: this.relativePositionToAbsolutePosition.bind(this)
78
79
  });
79
- this.provider.doc.on('update', (_update, _origin, _doc, yjsTr) => {
80
+
81
+ var handler = (_update, _origin, _doc, yjsTr) => {
80
82
  var _this$store$commands$, _this$store$commands;
81
83
 
82
84
  // Ignore own changes
@@ -85,7 +87,12 @@ var YjsExtension = (_dec = core.extension({
85
87
  }
86
88
 
87
89
  (_this$store$commands$ = (_this$store$commands = this.store.commands).redrawAnnotations) === null || _this$store$commands$ === void 0 ? void 0 : _this$store$commands$.call(_this$store$commands);
88
- });
90
+ };
91
+
92
+ this.provider.doc.on('update', handler);
93
+ return () => {
94
+ this.provider.doc.off('update', handler);
95
+ };
89
96
  } catch (_unused) {// AnnotationExtension isn't present in editor
90
97
  }
91
98
  }
@@ -104,13 +111,16 @@ var YjsExtension = (_dec = core.extension({
104
111
  trackedOrigins = _this$options.trackedOrigins;
105
112
  var yDoc = this.provider.doc;
106
113
  var type = yDoc.getXmlFragment('prosemirror');
114
+ var undoManager = new yjs.UndoManager(type, {
115
+ trackedOrigins: new Set([yProsemirror.ySyncPluginKey, ...trackedOrigins]),
116
+ deleteFilter: item => yProsemirror.defaultDeleteFilter(item, protectedNodes)
117
+ });
107
118
  return [yProsemirror.ySyncPlugin(type, syncPluginOptions), yProsemirror.yCursorPlugin(this.provider.awareness, {
108
119
  cursorBuilder,
109
120
  cursorStateField,
110
121
  getSelection
111
122
  }, cursorStateField), yProsemirror.yUndoPlugin({
112
- protectedNodes,
113
- trackedOrigins
123
+ undoManager
114
124
  })];
115
125
  }
116
126
  /**
@@ -123,6 +133,13 @@ var YjsExtension = (_dec = core.extension({
123
133
  pickChanged = props.pickChanged;
124
134
  var changedPluginOptions = pickChanged(['cursorBuilder', 'cursorStateField', 'getProvider', 'getSelection', 'syncPluginOptions', 'protectedNodes', 'trackedOrigins']);
125
135
 
136
+ if (changes.protectedNodes.changed || changes.trackedOrigins.changed) {
137
+ // Cannot change these, as we would need a new undo manager instance, and for that
138
+ // we would need to unregister the previous instance from the document to avoid
139
+ // memory leaks.
140
+ throw new Error("Cannot change \"protectedNodes\" or \"trackedOrigins\" options");
141
+ }
142
+
126
143
  if (changes.getProvider.changed) {
127
144
  this._provider = undefined;
128
145
  var previousProvider = getLazyValue(changes.getProvider.previousValue); // Check whether the values have changed.
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _applyDecoratedDescriptor = require('@babel/runtime/helpers/applyDecoratedDescriptor');
6
6
  var yProsemirror = require('y-prosemirror');
7
+ var yjs = require('yjs');
7
8
  var core = require('@remirror/core');
8
9
  var extensionAnnotation = require('@remirror/extension-annotation');
9
10
  var messages = require('@remirror/messages');
@@ -73,7 +74,8 @@ var YjsExtension = (_dec = core.extension({
73
74
  transformPosition: this.absolutePositionToRelativePosition.bind(this),
74
75
  transformPositionBeforeRender: this.relativePositionToAbsolutePosition.bind(this)
75
76
  });
76
- this.provider.doc.on('update', (_update, _origin, _doc, yjsTr) => {
77
+
78
+ var handler = (_update, _origin, _doc, yjsTr) => {
77
79
  var _this$store$commands$, _this$store$commands;
78
80
 
79
81
  // Ignore own changes
@@ -82,7 +84,12 @@ var YjsExtension = (_dec = core.extension({
82
84
  }
83
85
 
84
86
  (_this$store$commands$ = (_this$store$commands = this.store.commands).redrawAnnotations) === null || _this$store$commands$ === void 0 ? void 0 : _this$store$commands$.call(_this$store$commands);
85
- });
87
+ };
88
+
89
+ this.provider.doc.on('update', handler);
90
+ return () => {
91
+ this.provider.doc.off('update', handler);
92
+ };
86
93
  } catch (_unused) {// AnnotationExtension isn't present in editor
87
94
  }
88
95
  }
@@ -101,13 +108,16 @@ var YjsExtension = (_dec = core.extension({
101
108
  trackedOrigins = _this$options.trackedOrigins;
102
109
  var yDoc = this.provider.doc;
103
110
  var type = yDoc.getXmlFragment('prosemirror');
111
+ var undoManager = new yjs.UndoManager(type, {
112
+ trackedOrigins: new Set([yProsemirror.ySyncPluginKey, ...trackedOrigins]),
113
+ deleteFilter: item => yProsemirror.defaultDeleteFilter(item, protectedNodes)
114
+ });
104
115
  return [yProsemirror.ySyncPlugin(type, syncPluginOptions), yProsemirror.yCursorPlugin(this.provider.awareness, {
105
116
  cursorBuilder,
106
117
  cursorStateField,
107
118
  getSelection
108
119
  }, cursorStateField), yProsemirror.yUndoPlugin({
109
- protectedNodes,
110
- trackedOrigins
120
+ undoManager
111
121
  })];
112
122
  }
113
123
  /**
@@ -120,6 +130,13 @@ var YjsExtension = (_dec = core.extension({
120
130
  pickChanged = props.pickChanged;
121
131
  var changedPluginOptions = pickChanged(['cursorBuilder', 'cursorStateField', 'getProvider', 'getSelection', 'syncPluginOptions', 'protectedNodes', 'trackedOrigins']);
122
132
 
133
+ if (changes.protectedNodes.changed || changes.trackedOrigins.changed) {
134
+ // Cannot change these, as we would need a new undo manager instance, and for that
135
+ // we would need to unregister the previous instance from the document to avoid
136
+ // memory leaks.
137
+ throw new Error("Cannot change \"protectedNodes\" or \"trackedOrigins\" options");
138
+ }
139
+
123
140
  if (changes.getProvider.changed) {
124
141
  this._provider = undefined;
125
142
  var previousProvider = getLazyValue(changes.getProvider.previousValue); // Check whether the values have changed.
@@ -1,5 +1,6 @@
1
1
  import _applyDecoratedDescriptor from '@babel/runtime/helpers/esm/applyDecoratedDescriptor';
2
- import { defaultCursorBuilder, ySyncPlugin, yCursorPlugin, yUndoPlugin, yUndoPluginKey, undo, redo, ySyncPluginKey, absolutePositionToRelativePosition, relativePositionToAbsolutePosition } from 'y-prosemirror';
2
+ import { defaultCursorBuilder, ySyncPluginKey, defaultDeleteFilter, ySyncPlugin, yCursorPlugin, yUndoPlugin, yUndoPluginKey, undo, redo, absolutePositionToRelativePosition, relativePositionToAbsolutePosition } from 'y-prosemirror';
3
+ import { UndoManager } from 'yjs';
3
4
  import { extension, invariant, ErrorConstant, ExtensionPriority, command, keyBinding, NamedShortcut, PlainExtension, isFunction, isEmptyObject, nonChainable, convertCommand } from '@remirror/core';
4
5
  import { AnnotationExtension } from '@remirror/extension-annotation';
5
6
  import { ExtensionHistoryMessages } from '@remirror/messages';
@@ -72,7 +73,8 @@ var YjsExtension = (_dec = extension({
72
73
  transformPosition: this.absolutePositionToRelativePosition.bind(this),
73
74
  transformPositionBeforeRender: this.relativePositionToAbsolutePosition.bind(this)
74
75
  });
75
- this.provider.doc.on('update', (_update, _origin, _doc, yjsTr) => {
76
+
77
+ var handler = (_update, _origin, _doc, yjsTr) => {
76
78
  var _this$store$commands$, _this$store$commands;
77
79
 
78
80
  // Ignore own changes
@@ -81,7 +83,12 @@ var YjsExtension = (_dec = extension({
81
83
  }
82
84
 
83
85
  (_this$store$commands$ = (_this$store$commands = this.store.commands).redrawAnnotations) === null || _this$store$commands$ === void 0 ? void 0 : _this$store$commands$.call(_this$store$commands);
84
- });
86
+ };
87
+
88
+ this.provider.doc.on('update', handler);
89
+ return () => {
90
+ this.provider.doc.off('update', handler);
91
+ };
85
92
  } catch (_unused) {// AnnotationExtension isn't present in editor
86
93
  }
87
94
  }
@@ -100,13 +107,16 @@ var YjsExtension = (_dec = extension({
100
107
  trackedOrigins = _this$options.trackedOrigins;
101
108
  var yDoc = this.provider.doc;
102
109
  var type = yDoc.getXmlFragment('prosemirror');
110
+ var undoManager = new UndoManager(type, {
111
+ trackedOrigins: new Set([ySyncPluginKey, ...trackedOrigins]),
112
+ deleteFilter: item => defaultDeleteFilter(item, protectedNodes)
113
+ });
103
114
  return [ySyncPlugin(type, syncPluginOptions), yCursorPlugin(this.provider.awareness, {
104
115
  cursorBuilder,
105
116
  cursorStateField,
106
117
  getSelection
107
118
  }, cursorStateField), yUndoPlugin({
108
- protectedNodes,
109
- trackedOrigins
119
+ undoManager
110
120
  })];
111
121
  }
112
122
  /**
@@ -119,6 +129,13 @@ var YjsExtension = (_dec = extension({
119
129
  pickChanged = props.pickChanged;
120
130
  var changedPluginOptions = pickChanged(['cursorBuilder', 'cursorStateField', 'getProvider', 'getSelection', 'syncPluginOptions', 'protectedNodes', 'trackedOrigins']);
121
131
 
132
+ if (changes.protectedNodes.changed || changes.trackedOrigins.changed) {
133
+ // Cannot change these, as we would need a new undo manager instance, and for that
134
+ // we would need to unregister the previous instance from the document to avoid
135
+ // memory leaks.
136
+ throw new Error("Cannot change \"protectedNodes\" or \"trackedOrigins\" options");
137
+ }
138
+
122
139
  if (changes.getProvider.changed) {
123
140
  this._provider = undefined;
124
141
  var previousProvider = getLazyValue(changes.getProvider.previousValue); // Check whether the values have changed.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remirror/extension-yjs",
3
- "version": "1.0.16",
3
+ "version": "1.0.20",
4
4
  "description": "Realtime collaboration with yjs",
5
5
  "keywords": [
6
6
  "remirror",
@@ -32,31 +32,31 @@
32
32
  "./package.json": "./package.json",
33
33
  "./types/*": "./dist/declarations/src/*.d.ts"
34
34
  },
35
- "main": "dist/remirror-extension-yjs.cjs.js",
36
- "module": "dist/remirror-extension-yjs.esm.js",
35
+ "main": "./dist/remirror-extension-yjs.cjs.js",
36
+ "module": "./dist/remirror-extension-yjs.esm.js",
37
37
  "browser": {
38
38
  "./dist/remirror-extension-yjs.cjs.js": "./dist/remirror-extension-yjs.browser.cjs.js",
39
39
  "./dist/remirror-extension-yjs.esm.js": "./dist/remirror-extension-yjs.browser.esm.js"
40
40
  },
41
- "types": "dist/remirror-extension-yjs.cjs.d.ts",
41
+ "types": "./dist/remirror-extension-yjs.cjs.d.ts",
42
42
  "files": [
43
43
  "dist"
44
44
  ],
45
45
  "dependencies": {
46
46
  "@babel/runtime": "^7.13.10",
47
- "@remirror/core": "^1.3.2",
48
- "@remirror/extension-annotation": "^1.1.8",
49
- "@remirror/messages": "^1.0.5",
50
- "y-prosemirror": "^1.0.9",
47
+ "@remirror/core": "^1.3.3",
48
+ "@remirror/extension-annotation": "^1.1.11",
49
+ "@remirror/messages": "^1.0.6",
50
+ "y-prosemirror": "^1.0.14",
51
51
  "y-protocols": "^1.0.5"
52
52
  },
53
53
  "devDependencies": {
54
- "@remirror/pm": "^1.0.9",
55
- "y-webrtc": "^10.2.0",
56
- "yjs": "^13.5.11"
54
+ "@remirror/pm": "^1.0.11",
55
+ "y-webrtc": "^10.2.2",
56
+ "yjs": "^13.5.23"
57
57
  },
58
58
  "peerDependencies": {
59
- "@remirror/pm": "^1.0.8",
59
+ "@remirror/pm": "^1.0.10",
60
60
  "yjs": "^13.4.0"
61
61
  },
62
62
  "publishConfig": {