@kerebron/extension-basic-editor 0.1.1 → 0.1.3
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/editor/src/CoreEditor.d.ts.map +1 -1
- package/esm/editor/src/CoreEditor.js +5 -5
- package/esm/editor/src/nodeToTreeString.d.ts.map +1 -1
- package/esm/editor/src/nodeToTreeString.js +5 -2
- package/esm/editor/src/utilities/createNodeFromContent.d.ts.map +1 -1
- package/esm/editor/src/utilities/createNodeFromContent.js +1 -1
- package/esm/extension-basic-editor/src/ExtensionHtml.d.ts.map +1 -1
- package/esm/extension-basic-editor/src/ExtensionHtml.js +3 -2
- package/esm/extension-basic-editor/src/MarkChange.d.ts.map +1 -1
- package/esm/extension-basic-editor/src/NodeImage.d.ts +1 -19
- package/esm/extension-basic-editor/src/NodeImage.d.ts.map +1 -1
- package/esm/extension-basic-editor/src/NodeImage.js +0 -22
- package/package.json +1 -4
- package/esm/extension-automerge/src/CursorPlugin.d.ts +0 -16
- package/esm/extension-automerge/src/CursorPlugin.d.ts.map +0 -1
- package/esm/extension-automerge/src/CursorPlugin.js +0 -114
- package/esm/extension-automerge/src/ExtensionAutomerge.d.ts +0 -26
- package/esm/extension-automerge/src/ExtensionAutomerge.d.ts.map +0 -1
- package/esm/extension-automerge/src/ExtensionAutomerge.js +0 -136
- package/esm/extension-automerge/src/MarkUnknown.d.ts +0 -8
- package/esm/extension-automerge/src/MarkUnknown.d.ts.map +0 -1
- package/esm/extension-automerge/src/MarkUnknown.js +0 -26
- package/esm/extension-automerge/src/NodeUnknown.d.ts +0 -8
- package/esm/extension-automerge/src/NodeUnknown.d.ts.map +0 -1
- package/esm/extension-automerge/src/NodeUnknown.js +0 -28
- package/esm/extension-automerge/src/NodeUnknownBlock.d.ts +0 -11
- package/esm/extension-automerge/src/NodeUnknownBlock.d.ts.map +0 -1
- package/esm/extension-automerge/src/NodeUnknownBlock.js +0 -36
- package/esm/extension-automerge/src/SchemaAdapter.d.ts +0 -70
- package/esm/extension-automerge/src/SchemaAdapter.d.ts.map +0 -1
- package/esm/extension-automerge/src/SchemaAdapter.js +0 -188
- package/esm/extension-automerge/src/SyncPlugin.d.ts +0 -16
- package/esm/extension-automerge/src/SyncPlugin.d.ts.map +0 -1
- package/esm/extension-automerge/src/SyncPlugin.js +0 -147
- package/esm/extension-automerge/src/amToPm.d.ts +0 -9
- package/esm/extension-automerge/src/amToPm.d.ts.map +0 -1
- package/esm/extension-automerge/src/amToPm.js +0 -245
- package/esm/extension-automerge/src/amTraversal.d.ts +0 -62
- package/esm/extension-automerge/src/amTraversal.d.ts.map +0 -1
- package/esm/extension-automerge/src/amTraversal.js +0 -688
- package/esm/extension-automerge/src/loader.d.ts +0 -8
- package/esm/extension-automerge/src/loader.d.ts.map +0 -1
- package/esm/extension-automerge/src/loader.js +0 -54
- package/esm/extension-automerge/src/maintainSpans.d.ts +0 -9
- package/esm/extension-automerge/src/maintainSpans.d.ts.map +0 -1
- package/esm/extension-automerge/src/maintainSpans.js +0 -464
- package/esm/extension-automerge/src/pmToAm.d.ts +0 -6
- package/esm/extension-automerge/src/pmToAm.d.ts.map +0 -1
- package/esm/extension-automerge/src/pmToAm.js +0 -183
- package/esm/extension-automerge/src/pmTraversal.d.ts +0 -26
- package/esm/extension-automerge/src/pmTraversal.d.ts.map +0 -1
- package/esm/extension-automerge/src/pmTraversal.js +0 -102
- package/esm/extension-automerge/src/types.d.ts +0 -42
- package/esm/extension-automerge/src/types.d.ts.map +0 -1
- package/esm/extension-automerge/src/types.js +0 -94
- package/esm/extension-automerge/src/utils.d.ts +0 -3
- package/esm/extension-automerge/src/utils.d.ts.map +0 -1
- package/esm/extension-automerge/src/utils.js +0 -18
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { Attrs, Mark, MarkSpec, MarkType, Node, NodeSpec, NodeType, type Schema } from 'prosemirror-model';
|
|
2
|
-
import { next as automerge } from '@automerge/automerge/slim';
|
|
3
|
-
import { BlockMarker } from './types.js';
|
|
4
|
-
export interface MappedSchemaSpec {
|
|
5
|
-
nodes: {
|
|
6
|
-
[key: string]: MappedNodeSpec;
|
|
7
|
-
};
|
|
8
|
-
marks?: {
|
|
9
|
-
[key: string]: MappedMarkSpec;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
export type MappedNodeSpec = NodeSpec & {
|
|
13
|
-
automerge?: {
|
|
14
|
-
unknownBlock?: boolean;
|
|
15
|
-
block?: BlockMappingSpec;
|
|
16
|
-
isEmbed?: boolean;
|
|
17
|
-
attrParsers?: {
|
|
18
|
-
fromProsemirror: (node: Node) => {
|
|
19
|
-
[key: string]: automerge.MaterializeValue;
|
|
20
|
-
};
|
|
21
|
-
fromAutomerge: (block: BlockMarker) => Attrs;
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
export type BlockMappingSpec = string;
|
|
26
|
-
export type MappedMarkSpec = MarkSpec & {
|
|
27
|
-
automerge?: {
|
|
28
|
-
markName: string;
|
|
29
|
-
parsers?: {
|
|
30
|
-
fromAutomerge: (value: automerge.MarkValue) => Attrs;
|
|
31
|
-
fromProsemirror: (mark: Mark) => automerge.MarkValue;
|
|
32
|
-
};
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
export type MarkMapping = {
|
|
36
|
-
automergeMarkName: string;
|
|
37
|
-
prosemirrorMark: MarkType;
|
|
38
|
-
parsers: {
|
|
39
|
-
fromAutomerge: (value: automerge.MarkValue) => Attrs;
|
|
40
|
-
fromProsemirror: (mark: Mark) => automerge.MarkValue;
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
export type NodeMapping = {
|
|
44
|
-
blockName: string;
|
|
45
|
-
content: NodeType;
|
|
46
|
-
attrParsers?: {
|
|
47
|
-
fromProsemirror: (node: Node) => {
|
|
48
|
-
[key: string]: automerge.MaterializeValue;
|
|
49
|
-
};
|
|
50
|
-
fromAutomerge: (block: BlockMarker) => Attrs;
|
|
51
|
-
};
|
|
52
|
-
isEmbed?: boolean;
|
|
53
|
-
};
|
|
54
|
-
export declare class SchemaAdapter {
|
|
55
|
-
nodeMappings: NodeMapping[];
|
|
56
|
-
markMappings: MarkMapping[];
|
|
57
|
-
unknownBlock: NodeType;
|
|
58
|
-
unknownLeaf: NodeType;
|
|
59
|
-
unknownMark: MarkType;
|
|
60
|
-
schema: Schema;
|
|
61
|
-
constructor(schema: Schema);
|
|
62
|
-
}
|
|
63
|
-
export declare function addAmgNodeStateAttrs(nodes: {
|
|
64
|
-
[key: string]: MappedNodeSpec;
|
|
65
|
-
}): {
|
|
66
|
-
[key: string]: MappedNodeSpec;
|
|
67
|
-
};
|
|
68
|
-
export declare function amMarksFromPmMarks(adapter: SchemaAdapter, marks: readonly Mark[]): automerge.MarkSet;
|
|
69
|
-
export declare function pmMarksFromAmMarks(adapter: SchemaAdapter, amMarks: automerge.MarkSet): Mark[];
|
|
70
|
-
//# sourceMappingURL=SchemaAdapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaAdapter.d.ts","sourceRoot":"","sources":["../../../src/extension-automerge/src/SchemaAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
export class SchemaAdapter {
|
|
2
|
-
constructor(schema) {
|
|
3
|
-
Object.defineProperty(this, "nodeMappings", {
|
|
4
|
-
enumerable: true,
|
|
5
|
-
configurable: true,
|
|
6
|
-
writable: true,
|
|
7
|
-
value: void 0
|
|
8
|
-
});
|
|
9
|
-
Object.defineProperty(this, "markMappings", {
|
|
10
|
-
enumerable: true,
|
|
11
|
-
configurable: true,
|
|
12
|
-
writable: true,
|
|
13
|
-
value: void 0
|
|
14
|
-
});
|
|
15
|
-
Object.defineProperty(this, "unknownBlock", {
|
|
16
|
-
enumerable: true,
|
|
17
|
-
configurable: true,
|
|
18
|
-
writable: true,
|
|
19
|
-
value: void 0
|
|
20
|
-
});
|
|
21
|
-
Object.defineProperty(this, "unknownLeaf", {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
configurable: true,
|
|
24
|
-
writable: true,
|
|
25
|
-
value: void 0
|
|
26
|
-
});
|
|
27
|
-
Object.defineProperty(this, "unknownMark", {
|
|
28
|
-
enumerable: true,
|
|
29
|
-
configurable: true,
|
|
30
|
-
writable: true,
|
|
31
|
-
value: void 0
|
|
32
|
-
});
|
|
33
|
-
Object.defineProperty(this, "schema", {
|
|
34
|
-
enumerable: true,
|
|
35
|
-
configurable: true,
|
|
36
|
-
writable: true,
|
|
37
|
-
value: void 0
|
|
38
|
-
});
|
|
39
|
-
const nodeMappings = [];
|
|
40
|
-
const markMappings = [];
|
|
41
|
-
let unknownBlock = null;
|
|
42
|
-
for (const [nodeName, nodeSpec] of Object.entries(schema.nodes)) {
|
|
43
|
-
const adaptSpec = nodeSpec.spec.automerge;
|
|
44
|
-
if (adaptSpec == null) {
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
if (adaptSpec.unknownBlock) {
|
|
48
|
-
if (unknownBlock != null) {
|
|
49
|
-
throw new Error('only one node can be marked as unknownBlock');
|
|
50
|
-
}
|
|
51
|
-
unknownBlock = schema.nodes[nodeName];
|
|
52
|
-
}
|
|
53
|
-
if (adaptSpec.block != null) {
|
|
54
|
-
const nodeMapping = {
|
|
55
|
-
blockName: adaptSpec.block,
|
|
56
|
-
content: schema.nodes[nodeName],
|
|
57
|
-
isEmbed: adaptSpec.isEmbed || false,
|
|
58
|
-
};
|
|
59
|
-
if (adaptSpec.attrParsers != null) {
|
|
60
|
-
nodeMapping.attrParsers = adaptSpec.attrParsers;
|
|
61
|
-
}
|
|
62
|
-
nodeMappings.push(nodeMapping);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
for (const [markName, markSpec] of Object.entries(schema.marks || {})) {
|
|
66
|
-
const adaptSpec = markSpec.spec.automerge;
|
|
67
|
-
if (adaptSpec == null) {
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
if (adaptSpec.markName != null) {
|
|
71
|
-
let parsers;
|
|
72
|
-
if (adaptSpec.parsers != null) {
|
|
73
|
-
parsers = adaptSpec.parsers;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
parsers = {
|
|
77
|
-
fromAutomerge: () => ({}),
|
|
78
|
-
fromProsemirror: () => true,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
markMappings.push({
|
|
82
|
-
automergeMarkName: adaptSpec.markName,
|
|
83
|
-
prosemirrorMark: schema.marks[markName],
|
|
84
|
-
parsers,
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
if (unknownBlock == null) {
|
|
89
|
-
throw new Error(`no unknown block specified: one node must be marked as the unknownblock
|
|
90
|
-
by setting the automerge.unknownBlock property to true`);
|
|
91
|
-
}
|
|
92
|
-
this.unknownMark = schema.marks.unknownMark;
|
|
93
|
-
this.nodeMappings = nodeMappings;
|
|
94
|
-
this.markMappings = markMappings;
|
|
95
|
-
this.unknownLeaf = schema.nodes.unknownLeaf;
|
|
96
|
-
this.unknownBlock = unknownBlock;
|
|
97
|
-
this.schema = schema;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
function shallowClone(spec) {
|
|
101
|
-
const nodes = {};
|
|
102
|
-
for (const [nodeName, node] of Object.entries(spec.nodes)) {
|
|
103
|
-
const shallowCopy = Object.assign({}, node);
|
|
104
|
-
if (node.attrs != null) {
|
|
105
|
-
shallowCopy.attrs = Object.assign({}, node.attrs);
|
|
106
|
-
}
|
|
107
|
-
nodes[nodeName] = shallowCopy;
|
|
108
|
-
}
|
|
109
|
-
const marks = {};
|
|
110
|
-
if (spec.marks != null) {
|
|
111
|
-
for (const [markName, mark] of Object.entries(spec.marks)) {
|
|
112
|
-
const shallowCopy = Object.assign({}, mark);
|
|
113
|
-
if (mark.attrs != null) {
|
|
114
|
-
shallowCopy.attrs = Object.assign({}, mark.attrs);
|
|
115
|
-
}
|
|
116
|
-
marks[markName] = shallowCopy;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return { nodes, marks };
|
|
120
|
-
}
|
|
121
|
-
export function addAmgNodeStateAttrs(nodes) {
|
|
122
|
-
for (const [name, nodeSpec] of Object.entries(nodes)) {
|
|
123
|
-
if (name !== 'text') {
|
|
124
|
-
if (nodeSpec.attrs == null) {
|
|
125
|
-
nodeSpec.attrs = {
|
|
126
|
-
isAmgBlock: { default: false },
|
|
127
|
-
unknownAttrs: { default: null },
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
nodeSpec.attrs.isAmgBlock = { default: false };
|
|
132
|
-
nodeSpec.attrs.unknownAttrs = { default: null };
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
if (nodeSpec.automerge?.unknownBlock) {
|
|
136
|
-
if (nodeSpec.attrs == null) {
|
|
137
|
-
nodeSpec.attrs = {
|
|
138
|
-
unknownParentBlock: { default: null },
|
|
139
|
-
unknownBlock: { default: null },
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
nodeSpec.attrs.unknownParentBlock = { default: null };
|
|
144
|
-
nodeSpec.attrs.unknownBlock = { default: null };
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return nodes;
|
|
149
|
-
}
|
|
150
|
-
export function amMarksFromPmMarks(adapter, marks) {
|
|
151
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
152
|
-
const result = {};
|
|
153
|
-
marks.forEach((mark) => {
|
|
154
|
-
const markMapping = adapter.markMappings.find((m) => m.prosemirrorMark === mark.type);
|
|
155
|
-
if (markMapping != null) {
|
|
156
|
-
result[markMapping.automergeMarkName] = markMapping.parsers
|
|
157
|
-
.fromProsemirror(mark);
|
|
158
|
-
}
|
|
159
|
-
else if (mark.type === adapter.unknownMark) {
|
|
160
|
-
for (const [key, value] of Object.entries(mark.attrs.unknownMarks)) {
|
|
161
|
-
result[key] = value;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
return result;
|
|
166
|
-
}
|
|
167
|
-
export function pmMarksFromAmMarks(adapter, amMarks) {
|
|
168
|
-
const unknownMarks = {};
|
|
169
|
-
let hasUnknownMark = false;
|
|
170
|
-
const pmMarks = [];
|
|
171
|
-
for (const [markName, markValue] of Object.entries(amMarks)) {
|
|
172
|
-
// Filter tombstoned marks (https://github.com/automerge/automerge/issues/715).
|
|
173
|
-
if (markValue == null)
|
|
174
|
-
continue;
|
|
175
|
-
const mapping = adapter.markMappings.find((m) => m.automergeMarkName === markName);
|
|
176
|
-
if (mapping == null) {
|
|
177
|
-
unknownMarks[markName] = markValue;
|
|
178
|
-
hasUnknownMark = true;
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
pmMarks.push(mapping.prosemirrorMark.create(mapping.parsers.fromAutomerge(markValue)));
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
if (hasUnknownMark) {
|
|
185
|
-
pmMarks.push(adapter.unknownMark.create({ unknownMarks }));
|
|
186
|
-
}
|
|
187
|
-
return pmMarks;
|
|
188
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Plugin, PluginKey } from 'prosemirror-state';
|
|
2
|
-
import { next as automerge } from '@automerge/automerge/slim';
|
|
3
|
-
import { SchemaAdapter } from './SchemaAdapter.js';
|
|
4
|
-
import { DocHandle, DocHandleChangePayload } from './types.js';
|
|
5
|
-
export declare const syncPluginKey: PluginKey<any>;
|
|
6
|
-
export declare class SyncPlugin<T> extends Plugin {
|
|
7
|
-
private adapter;
|
|
8
|
-
private path;
|
|
9
|
-
ignoreTr: boolean;
|
|
10
|
-
onAutoMergeChange: (args: DocHandleChangePayload<unknown>) => void;
|
|
11
|
-
private handle;
|
|
12
|
-
private view;
|
|
13
|
-
constructor(adapter: SchemaAdapter, path: automerge.Prop[], handle: DocHandle<T>);
|
|
14
|
-
changeHandle(handle: DocHandle<any>): void;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=SyncPlugin.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SyncPlugin.d.ts","sourceRoot":"","sources":["../../../src/extension-automerge/src/SyncPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAa,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG/D,eAAO,MAAM,aAAa,gBAAkC,CAAC;AAE7D,qBAAa,UAAU,CAAC,CAAC,CAAE,SAAQ,MAAM;IAQrC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IARd,QAAQ,UAAS;IACjB,iBAAiB,EAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAEpE,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,IAAI,CAAc;gBAGhB,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,EAC9B,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAiGtB,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;CAwCpC"}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import { Plugin, PluginKey, Selection } from 'prosemirror-state';
|
|
2
|
-
import { ChangeSet } from 'prosemirror-changeset';
|
|
3
|
-
import { next as automerge } from '@automerge/automerge/slim';
|
|
4
|
-
import { pmToAm } from './pmToAm.js';
|
|
5
|
-
import { amToPm } from './amToPm.js';
|
|
6
|
-
import { amSpansToDoc } from './amTraversal.js';
|
|
7
|
-
import { isArrayEqual } from './utils.js';
|
|
8
|
-
export const syncPluginKey = new PluginKey('automerge-sync');
|
|
9
|
-
export class SyncPlugin extends Plugin {
|
|
10
|
-
constructor(adapter, path, handle) {
|
|
11
|
-
super({
|
|
12
|
-
key: syncPluginKey,
|
|
13
|
-
view: (view) => {
|
|
14
|
-
this.view = view;
|
|
15
|
-
this.changeHandle(handle);
|
|
16
|
-
return {
|
|
17
|
-
destroy: () => {
|
|
18
|
-
if (this.handle) {
|
|
19
|
-
this.handle.off('change', this.onAutoMergeChange);
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
},
|
|
24
|
-
appendTransaction(transactions, oldState, state) {
|
|
25
|
-
if (this.ignoreTr)
|
|
26
|
-
return;
|
|
27
|
-
transactions = transactions.filter((tx) => tx.docChanged);
|
|
28
|
-
if (transactions.length === 0)
|
|
29
|
-
return undefined;
|
|
30
|
-
//eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
31
|
-
const docBefore = this.handle.docSync();
|
|
32
|
-
const headsBefore = automerge.getHeads(docBefore);
|
|
33
|
-
const spansBefore = automerge.spans(docBefore, path);
|
|
34
|
-
// Apply transactions to the automerge doc
|
|
35
|
-
this.ignoreTr = true;
|
|
36
|
-
this.handle.change((doc) => {
|
|
37
|
-
for (const tx of transactions) {
|
|
38
|
-
const spans = automerge.spans(doc, path);
|
|
39
|
-
pmToAm(adapter, spans, tx.steps, doc, tx.docs[0], path);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
this.ignoreTr = false;
|
|
43
|
-
//eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
44
|
-
const docAfter = this.handle.docSync();
|
|
45
|
-
const headsAfter = automerge.getHeads(docAfter);
|
|
46
|
-
const spansAfter = automerge.spans(docAfter, path);
|
|
47
|
-
// Ignore if nothing changed.
|
|
48
|
-
if (isArrayEqual(headsBefore, headsAfter))
|
|
49
|
-
return undefined;
|
|
50
|
-
// Check if ProseMirror doc matches the AutoMerge doc
|
|
51
|
-
// by comparing changesets between the two transactions.
|
|
52
|
-
const patches = automerge.diff(docAfter, headsBefore, headsAfter);
|
|
53
|
-
const tx = amToPm(adapter, spansBefore, patches, path, oldState.tr);
|
|
54
|
-
let amChangeSet = ChangeSet.create(oldState.doc);
|
|
55
|
-
amChangeSet = amChangeSet.addSteps(oldState.doc, tx.mapping.maps, undefined);
|
|
56
|
-
let pmChangeSet = ChangeSet.create(oldState.doc);
|
|
57
|
-
for (const tr of transactions) {
|
|
58
|
-
pmChangeSet = pmChangeSet.addSteps(tr.docs[0], tr.mapping.maps, undefined);
|
|
59
|
-
}
|
|
60
|
-
const diff = pmChangeSet.changedRange(amChangeSet);
|
|
61
|
-
if (!diff || diff.from === diff.to)
|
|
62
|
-
return undefined;
|
|
63
|
-
console.warn("Warning: ProseMirror doc doesn't match AutoMerge spans.\n\n" +
|
|
64
|
-
'State will be automatically fixed with a tr. File an issue at https://github.com/automerge/automerge-repo.\n', {
|
|
65
|
-
spansBefore,
|
|
66
|
-
steps: transactions.map((tr) => tr.steps.map((s) => s.toJSON())),
|
|
67
|
-
});
|
|
68
|
-
// Replace the diff range in ProseMirror doc from the AutoMerge doc.
|
|
69
|
-
const doc = amSpansToDoc(adapter, spansAfter);
|
|
70
|
-
const slice = doc.slice(diff.from, diff.to);
|
|
71
|
-
const tr = state.tr;
|
|
72
|
-
tr.replace(diff.from, diff.to, slice);
|
|
73
|
-
try {
|
|
74
|
-
tr.setSelection(Selection.fromJSON(tr.doc, state.selection.toJSON()));
|
|
75
|
-
}
|
|
76
|
-
catch (e) {
|
|
77
|
-
if (e instanceof RangeError) {
|
|
78
|
-
// Sometimes the selection can't be mapped for some reason, so we just give up and hope for the best
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
throw e;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
tr.setStoredMarks(state.storedMarks);
|
|
85
|
-
return tr;
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
Object.defineProperty(this, "adapter", {
|
|
89
|
-
enumerable: true,
|
|
90
|
-
configurable: true,
|
|
91
|
-
writable: true,
|
|
92
|
-
value: adapter
|
|
93
|
-
});
|
|
94
|
-
Object.defineProperty(this, "path", {
|
|
95
|
-
enumerable: true,
|
|
96
|
-
configurable: true,
|
|
97
|
-
writable: true,
|
|
98
|
-
value: path
|
|
99
|
-
});
|
|
100
|
-
Object.defineProperty(this, "ignoreTr", {
|
|
101
|
-
enumerable: true,
|
|
102
|
-
configurable: true,
|
|
103
|
-
writable: true,
|
|
104
|
-
value: false
|
|
105
|
-
});
|
|
106
|
-
Object.defineProperty(this, "onAutoMergeChange", {
|
|
107
|
-
enumerable: true,
|
|
108
|
-
configurable: true,
|
|
109
|
-
writable: true,
|
|
110
|
-
value: void 0
|
|
111
|
-
});
|
|
112
|
-
Object.defineProperty(this, "handle", {
|
|
113
|
-
enumerable: true,
|
|
114
|
-
configurable: true,
|
|
115
|
-
writable: true,
|
|
116
|
-
value: void 0
|
|
117
|
-
});
|
|
118
|
-
Object.defineProperty(this, "view", {
|
|
119
|
-
enumerable: true,
|
|
120
|
-
configurable: true,
|
|
121
|
-
writable: true,
|
|
122
|
-
value: void 0
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
changeHandle(handle) {
|
|
126
|
-
if (!this.view) {
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
if (this.handle) {
|
|
130
|
-
this.handle.off('change', this.onAutoMergeChange);
|
|
131
|
-
}
|
|
132
|
-
const onAutoMergeChange = ({ doc, patches, patchInfo, }) => {
|
|
133
|
-
if (this.ignoreTr)
|
|
134
|
-
return;
|
|
135
|
-
const headsBefore = automerge.getHeads(patchInfo.before);
|
|
136
|
-
const spans = automerge.spans(automerge.view(doc, headsBefore), this.path);
|
|
137
|
-
const tr = amToPm(this.adapter, spans, patches, this.path, this.view.state.tr);
|
|
138
|
-
tr.setMeta('addToHistory', false); // remote changes should not be added to local stack
|
|
139
|
-
this.ignoreTr = true;
|
|
140
|
-
this.view.dispatch(tr);
|
|
141
|
-
this.ignoreTr = false;
|
|
142
|
-
};
|
|
143
|
-
this.onAutoMergeChange = onAutoMergeChange;
|
|
144
|
-
handle.on('change', this.onAutoMergeChange);
|
|
145
|
-
this.handle = handle;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { next as automerge, Patch, type Prop } from '@automerge/automerge/slim';
|
|
2
|
-
import { Transaction } from 'prosemirror-state';
|
|
3
|
-
import { SchemaAdapter } from './SchemaAdapter.js';
|
|
4
|
-
type SpliceTextPatch = automerge.SpliceTextPatch;
|
|
5
|
-
export declare function amToPm(adapter: SchemaAdapter, spansAtStart: automerge.Span[], patches: Array<Patch>, path: Prop[], tx: Transaction): Transaction;
|
|
6
|
-
export declare function handleSplice(adapter: SchemaAdapter, spans: automerge.Span[], patch: SpliceTextPatch, path: Prop[], tx: Transaction): Transaction;
|
|
7
|
-
export declare function handleBlockChange(adapter: SchemaAdapter, atPath: automerge.Prop[], spans: automerge.Span[], _blockIdx: number, patches: automerge.Patch[], tx: Transaction): Transaction;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=amToPm.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"amToPm.d.ts","sourceRoot":"","sources":["../../../src/extension-automerge/src/amToPm.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,IAAI,IAAI,SAAS,EACjB,KAAK,EACL,KAAK,IAAI,EACV,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,OAAO,EAAsB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEvE,KAAK,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;AAQjD,wBAAgB,MAAM,CACpB,OAAO,EAAE,aAAa,EACtB,YAAY,EAAE,SAAS,CAAC,IAAI,EAAE,EAC9B,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EACrB,IAAI,EAAE,IAAI,EAAE,EACZ,EAAE,EAAE,WAAW,GACd,WAAW,CA0Cb;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,EACvB,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,IAAI,EAAE,EACZ,EAAE,EAAE,WAAW,GACd,WAAW,CAQb;AAkDD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,EACxB,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,EAC1B,EAAE,EAAE,WAAW,GACd,WAAW,CA0Cb"}
|