@manuscripts/track-changes-plugin 1.10.4 → 1.10.5-LEAN-4160.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/dist/cjs/ChangeSet.js +29 -1
- package/dist/cjs/steps/trackReplaceStep.js +0 -1
- package/dist/cjs/steps/trackTransaction.js +3 -0
- package/dist/cjs/types/change.js +1 -0
- package/dist/es/ChangeSet.js +29 -1
- package/dist/es/steps/trackReplaceStep.js +0 -1
- package/dist/es/steps/trackTransaction.js +3 -0
- package/dist/es/types/change.js +1 -0
- package/dist/types/ChangeSet.d.ts +2 -1
- package/dist/types/types/change.d.ts +13 -3
- package/package.json +1 -1
package/dist/cjs/ChangeSet.js
CHANGED
|
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var _ChangeSet_instances, _ChangeSet_changes, _ChangeSet_isSameNodeChange, _ChangeSet_isNotPendingOrDeleted;
|
|
13
|
+
var _ChangeSet_instances, _ChangeSet_changes, _ChangeSet_isSameNodeChange, _ChangeSet_isNotPendingOrDeleted, _ChangeSet_createMoveChange;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.ChangeSet = void 0;
|
|
16
16
|
const change_1 = require("./types/change");
|
|
@@ -79,6 +79,7 @@ class ChangeSet {
|
|
|
79
79
|
get groupChanges() {
|
|
80
80
|
const rootNodes = [];
|
|
81
81
|
let currentInlineChange;
|
|
82
|
+
const compositeChangesMap = new Map();
|
|
82
83
|
this.changeTree.map((change, index) => {
|
|
83
84
|
if (this.canJoinAdjacentInlineChanges(change, index)) {
|
|
84
85
|
currentInlineChange = currentInlineChange ? [...currentInlineChange, change] : [change];
|
|
@@ -89,6 +90,16 @@ class ChangeSet {
|
|
|
89
90
|
currentInlineChange = undefined;
|
|
90
91
|
return;
|
|
91
92
|
}
|
|
93
|
+
if (change.dataTracked.movedChangeId) {
|
|
94
|
+
const moveChange = compositeChangesMap.get(change.dataTracked.movedChangeId);
|
|
95
|
+
if (!moveChange) {
|
|
96
|
+
compositeChangesMap.set(change.dataTracked.movedChangeId, __classPrivateFieldGet(this, _ChangeSet_instances, "m", _ChangeSet_createMoveChange).call(this, change));
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
rootNodes.push([Object.assign(Object.assign({}, moveChange), { children: [...moveChange.children, change] })]);
|
|
100
|
+
}
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
92
103
|
rootNodes.push([change]);
|
|
93
104
|
});
|
|
94
105
|
return rootNodes.filter((changes) => changes.filter((c) => c.dataTracked.operation !== change_1.CHANGE_OPERATION.reference).length);
|
|
@@ -198,6 +209,9 @@ class ChangeSet {
|
|
|
198
209
|
static isReferenceChange(change) {
|
|
199
210
|
return change.type === 'reference-change';
|
|
200
211
|
}
|
|
212
|
+
static isMoveChange(change) {
|
|
213
|
+
return change.type === 'move-change';
|
|
214
|
+
}
|
|
201
215
|
}
|
|
202
216
|
exports.ChangeSet = ChangeSet;
|
|
203
217
|
_ChangeSet_changes = new WeakMap(), _ChangeSet_instances = new WeakSet(), _ChangeSet_isSameNodeChange = function _ChangeSet_isSameNodeChange(currentChange, nextChange) {
|
|
@@ -205,4 +219,18 @@ _ChangeSet_changes = new WeakMap(), _ChangeSet_instances = new WeakSet(), _Chang
|
|
|
205
219
|
}, _ChangeSet_isNotPendingOrDeleted = function _ChangeSet_isNotPendingOrDeleted(change) {
|
|
206
220
|
return (change.dataTracked.operation !== change_1.CHANGE_OPERATION.delete &&
|
|
207
221
|
change.dataTracked.status !== change_1.CHANGE_STATUS.pending);
|
|
222
|
+
}, _ChangeSet_createMoveChange = function _ChangeSet_createMoveChange(change) {
|
|
223
|
+
if (!ChangeSet.isNodeChange(change)) {
|
|
224
|
+
throw new Error('Expected NodeChange for move operation');
|
|
225
|
+
}
|
|
226
|
+
const node = change.node;
|
|
227
|
+
return {
|
|
228
|
+
id: change.dataTracked.movedChangeId,
|
|
229
|
+
type: 'move-change',
|
|
230
|
+
from: change.from,
|
|
231
|
+
to: change.to,
|
|
232
|
+
dataTracked: Object.assign(Object.assign({}, change.dataTracked), { operation: change_1.CHANGE_OPERATION.move }),
|
|
233
|
+
node,
|
|
234
|
+
children: [change],
|
|
235
|
+
};
|
|
208
236
|
};
|
|
@@ -60,7 +60,6 @@ function trackReplaceStep(step, oldState, newTr, attrs, stepResult, currentStepD
|
|
|
60
60
|
changeSteps.splice(changeSteps.indexOf(backSpacedText));
|
|
61
61
|
}
|
|
62
62
|
const textWasDeleted = !!changeSteps.length && !(fromA === fromB);
|
|
63
|
-
console.log(textWasDeleted);
|
|
64
63
|
if (!backSpacedText && newSliceContent.size > 0) {
|
|
65
64
|
logger_1.log.info('newSliceContent', newSliceContent);
|
|
66
65
|
let fragment = (0, setFragmentAsInserted_1.setFragmentAsInserted)(newSliceContent, trackUtils.createNewInsertAttrs(attrs), oldState.schema);
|
|
@@ -35,6 +35,9 @@ function trackTransaction(tr, oldState, newTr, authorID) {
|
|
|
35
35
|
let iters = 0;
|
|
36
36
|
logger_1.log.info('ORIGINAL transaction', tr);
|
|
37
37
|
let trContext = {};
|
|
38
|
+
if (tr.getMeta('NodeMove')) {
|
|
39
|
+
emptyAttrs.movedChangeId = (0, uuidv4_1.uuidv4)();
|
|
40
|
+
}
|
|
38
41
|
for (let i = tr.steps.length - 1; i >= 0; i--) {
|
|
39
42
|
const step = tr.steps[i];
|
|
40
43
|
logger_1.log.info('transaction step', step);
|
package/dist/cjs/types/change.js
CHANGED
|
@@ -24,6 +24,7 @@ var CHANGE_OPERATION;
|
|
|
24
24
|
CHANGE_OPERATION["wrap_with_node"] = "wrap_with_node";
|
|
25
25
|
CHANGE_OPERATION["node_split"] = "node_split";
|
|
26
26
|
CHANGE_OPERATION["reference"] = "reference";
|
|
27
|
+
CHANGE_OPERATION["move"] = "move";
|
|
27
28
|
})(CHANGE_OPERATION = exports.CHANGE_OPERATION || (exports.CHANGE_OPERATION = {}));
|
|
28
29
|
var CHANGE_STATUS;
|
|
29
30
|
(function (CHANGE_STATUS) {
|
package/dist/es/ChangeSet.js
CHANGED
|
@@ -9,7 +9,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _ChangeSet_instances, _ChangeSet_changes, _ChangeSet_isSameNodeChange, _ChangeSet_isNotPendingOrDeleted;
|
|
12
|
+
var _ChangeSet_instances, _ChangeSet_changes, _ChangeSet_isSameNodeChange, _ChangeSet_isNotPendingOrDeleted, _ChangeSet_createMoveChange;
|
|
13
13
|
import { CHANGE_OPERATION, CHANGE_STATUS, } from './types/change';
|
|
14
14
|
import { log } from './utils/logger';
|
|
15
15
|
export class ChangeSet {
|
|
@@ -76,6 +76,7 @@ export class ChangeSet {
|
|
|
76
76
|
get groupChanges() {
|
|
77
77
|
const rootNodes = [];
|
|
78
78
|
let currentInlineChange;
|
|
79
|
+
const compositeChangesMap = new Map();
|
|
79
80
|
this.changeTree.map((change, index) => {
|
|
80
81
|
if (this.canJoinAdjacentInlineChanges(change, index)) {
|
|
81
82
|
currentInlineChange = currentInlineChange ? [...currentInlineChange, change] : [change];
|
|
@@ -86,6 +87,16 @@ export class ChangeSet {
|
|
|
86
87
|
currentInlineChange = undefined;
|
|
87
88
|
return;
|
|
88
89
|
}
|
|
90
|
+
if (change.dataTracked.movedChangeId) {
|
|
91
|
+
const moveChange = compositeChangesMap.get(change.dataTracked.movedChangeId);
|
|
92
|
+
if (!moveChange) {
|
|
93
|
+
compositeChangesMap.set(change.dataTracked.movedChangeId, __classPrivateFieldGet(this, _ChangeSet_instances, "m", _ChangeSet_createMoveChange).call(this, change));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
rootNodes.push([Object.assign(Object.assign({}, moveChange), { children: [...moveChange.children, change] })]);
|
|
97
|
+
}
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
89
100
|
rootNodes.push([change]);
|
|
90
101
|
});
|
|
91
102
|
return rootNodes.filter((changes) => changes.filter((c) => c.dataTracked.operation !== CHANGE_OPERATION.reference).length);
|
|
@@ -195,10 +206,27 @@ export class ChangeSet {
|
|
|
195
206
|
static isReferenceChange(change) {
|
|
196
207
|
return change.type === 'reference-change';
|
|
197
208
|
}
|
|
209
|
+
static isMoveChange(change) {
|
|
210
|
+
return change.type === 'move-change';
|
|
211
|
+
}
|
|
198
212
|
}
|
|
199
213
|
_ChangeSet_changes = new WeakMap(), _ChangeSet_instances = new WeakSet(), _ChangeSet_isSameNodeChange = function _ChangeSet_isSameNodeChange(currentChange, nextChange) {
|
|
200
214
|
return currentChange.from === nextChange.from && currentChange.to === nextChange.to;
|
|
201
215
|
}, _ChangeSet_isNotPendingOrDeleted = function _ChangeSet_isNotPendingOrDeleted(change) {
|
|
202
216
|
return (change.dataTracked.operation !== CHANGE_OPERATION.delete &&
|
|
203
217
|
change.dataTracked.status !== CHANGE_STATUS.pending);
|
|
218
|
+
}, _ChangeSet_createMoveChange = function _ChangeSet_createMoveChange(change) {
|
|
219
|
+
if (!ChangeSet.isNodeChange(change)) {
|
|
220
|
+
throw new Error('Expected NodeChange for move operation');
|
|
221
|
+
}
|
|
222
|
+
const node = change.node;
|
|
223
|
+
return {
|
|
224
|
+
id: change.dataTracked.movedChangeId,
|
|
225
|
+
type: 'move-change',
|
|
226
|
+
from: change.from,
|
|
227
|
+
to: change.to,
|
|
228
|
+
dataTracked: Object.assign(Object.assign({}, change.dataTracked), { operation: CHANGE_OPERATION.move }),
|
|
229
|
+
node,
|
|
230
|
+
children: [change],
|
|
231
|
+
};
|
|
204
232
|
};
|
|
@@ -34,7 +34,6 @@ export function trackReplaceStep(step, oldState, newTr, attrs, stepResult, curre
|
|
|
34
34
|
changeSteps.splice(changeSteps.indexOf(backSpacedText));
|
|
35
35
|
}
|
|
36
36
|
const textWasDeleted = !!changeSteps.length && !(fromA === fromB);
|
|
37
|
-
console.log(textWasDeleted);
|
|
38
37
|
if (!backSpacedText && newSliceContent.size > 0) {
|
|
39
38
|
log.info('newSliceContent', newSliceContent);
|
|
40
39
|
let fragment = setFragmentAsInserted(newSliceContent, trackUtils.createNewInsertAttrs(attrs), oldState.schema);
|
|
@@ -29,6 +29,9 @@ export function trackTransaction(tr, oldState, newTr, authorID) {
|
|
|
29
29
|
let iters = 0;
|
|
30
30
|
log.info('ORIGINAL transaction', tr);
|
|
31
31
|
let trContext = {};
|
|
32
|
+
if (tr.getMeta('NodeMove')) {
|
|
33
|
+
emptyAttrs.movedChangeId = uuidv4();
|
|
34
|
+
}
|
|
32
35
|
for (let i = tr.steps.length - 1; i >= 0; i--) {
|
|
33
36
|
const step = tr.steps[i];
|
|
34
37
|
log.info('transaction step', step);
|
package/dist/es/types/change.js
CHANGED
|
@@ -21,6 +21,7 @@ export var CHANGE_OPERATION;
|
|
|
21
21
|
CHANGE_OPERATION["wrap_with_node"] = "wrap_with_node";
|
|
22
22
|
CHANGE_OPERATION["node_split"] = "node_split";
|
|
23
23
|
CHANGE_OPERATION["reference"] = "reference";
|
|
24
|
+
CHANGE_OPERATION["move"] = "move";
|
|
24
25
|
})(CHANGE_OPERATION || (CHANGE_OPERATION = {}));
|
|
25
26
|
export var CHANGE_STATUS;
|
|
26
27
|
(function (CHANGE_STATUS) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IncompleteChange, NodeAttrChange, NodeChange, ReferenceChange, TextChange, TrackedAttrs, TrackedChange } from './types/change';
|
|
1
|
+
import { IncompleteChange, MoveChange, NodeAttrChange, NodeChange, ReferenceChange, TextChange, TrackedAttrs, TrackedChange } from './types/change';
|
|
2
2
|
export declare class ChangeSet {
|
|
3
3
|
#private;
|
|
4
4
|
constructor(changes?: (TrackedChange | IncompleteChange)[]);
|
|
@@ -30,4 +30,5 @@ export declare class ChangeSet {
|
|
|
30
30
|
static isNodeChange(change: TrackedChange): change is NodeChange;
|
|
31
31
|
static isNodeAttrChange(change: TrackedChange): change is NodeAttrChange;
|
|
32
32
|
static isReferenceChange(change: TrackedChange): change is ReferenceChange;
|
|
33
|
+
static isMoveChange(change: TrackedChange): change is MoveChange;
|
|
33
34
|
}
|
|
@@ -20,7 +20,8 @@ export declare enum CHANGE_OPERATION {
|
|
|
20
20
|
set_node_attributes = "set_attrs",
|
|
21
21
|
wrap_with_node = "wrap_with_node",
|
|
22
22
|
node_split = "node_split",
|
|
23
|
-
reference = "reference"
|
|
23
|
+
reference = "reference",
|
|
24
|
+
move = "move"
|
|
24
25
|
}
|
|
25
26
|
export declare enum CHANGE_STATUS {
|
|
26
27
|
accepted = "accepted",
|
|
@@ -36,6 +37,7 @@ type InsertDeleteAttrs = {
|
|
|
36
37
|
statusUpdateAt: number;
|
|
37
38
|
createdAt: number;
|
|
38
39
|
updatedAt: number;
|
|
40
|
+
movedChangeId?: string;
|
|
39
41
|
};
|
|
40
42
|
export type UpdateAttrs = Omit<InsertDeleteAttrs, 'operation'> & {
|
|
41
43
|
operation: CHANGE_OPERATION.set_node_attributes;
|
|
@@ -51,7 +53,10 @@ export type ReferenceAttrs = Omit<InsertDeleteAttrs, 'operation'> & {
|
|
|
51
53
|
operation: CHANGE_OPERATION.reference;
|
|
52
54
|
referenceId: string;
|
|
53
55
|
};
|
|
54
|
-
export type
|
|
56
|
+
export type NodeMoveAttrs = Omit<InsertDeleteAttrs, 'operation'> & {
|
|
57
|
+
operation: CHANGE_OPERATION.move;
|
|
58
|
+
};
|
|
59
|
+
export type TrackedAttrs = InsertDeleteAttrs | UpdateAttrs | WrapAttrs | NodeSplitAttrs | ReferenceAttrs | NodeMoveAttrs;
|
|
55
60
|
type Change = {
|
|
56
61
|
id: string;
|
|
57
62
|
from: number;
|
|
@@ -85,7 +90,12 @@ export type ReferenceChange = Change & {
|
|
|
85
90
|
export type MarkChange = Change & {
|
|
86
91
|
type: 'mark-change';
|
|
87
92
|
};
|
|
88
|
-
export type
|
|
93
|
+
export type MoveChange = Change & {
|
|
94
|
+
type: 'move-change';
|
|
95
|
+
node: Node;
|
|
96
|
+
children: TrackedChange[];
|
|
97
|
+
};
|
|
98
|
+
export type TrackedChange = TextChange | NodeChange | NodeAttrChange | WrapChange | ReferenceChange | MoveChange | MarkChange;
|
|
89
99
|
export type PartialChange<T extends TrackedChange> = Omit<T, 'dataTracked'> & {
|
|
90
100
|
dataTracked: Partial<TrackedAttrs>;
|
|
91
101
|
};
|
package/package.json
CHANGED