@manuscripts/track-changes-plugin 1.10.0 → 1.10.1-LEAN-4174.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.
@@ -43,7 +43,7 @@ const mergeTrackedMarks_1 = require("../mutate/mergeTrackedMarks");
43
43
  const change_1 = require("../types/change");
44
44
  const logger_1 = require("../utils/logger");
45
45
  const trackUtils = __importStar(require("../utils/track-utils"));
46
- function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema) {
46
+ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, deletedNodeMapping) {
47
47
  const mapping = new prosemirror_transform_1.Mapping();
48
48
  const deleteAttrs = trackUtils.createNewDeleteAttrs(emptyAttrs);
49
49
  let selectionPos = startPos;
@@ -62,6 +62,9 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema) {
62
62
  }
63
63
  (0, deleteNode_1.deleteOrSetNodeDeleted)(c.node, mapping.map(c.pos), newTr, deleteAttrs);
64
64
  const newestStep = newTr.steps[newTr.steps.length - 1];
65
+ if (isInserted) {
66
+ deletedNodeMapping.appendMap(newestStep.getMap());
67
+ }
65
68
  if (step !== newestStep) {
66
69
  mapping.appendMap(newestStep.getMap());
67
70
  step = newestStep;
@@ -76,6 +79,9 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema) {
76
79
  }
77
80
  const where = (0, deleteText_1.deleteTextIfInserted)(node, mapping.map(c.pos), newTr, schema, deleteAttrs, mapping.map(c.from), mapping.map(c.to));
78
81
  const textNewestStep = newTr.steps[newTr.steps.length - 1];
82
+ if (node.marks.find((m) => m.type === schema.marks.tracked_insert)) {
83
+ deletedNodeMapping.appendMap(textNewestStep.getMap());
84
+ }
79
85
  if (step !== textNewestStep) {
80
86
  mapping.appendMap(textNewestStep.getMap());
81
87
  step = textNewestStep;
@@ -87,6 +93,9 @@ function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema) {
87
93
  if (c.node.isText) {
88
94
  insertPos = (0, deleteText_1.deleteTextIfInserted)(c.node, mapping.map(c.pos), newTr, schema, deleteAttrs, mapping.map(c.from), mapping.map(c.to));
89
95
  const newestStep = newTr.steps[newTr.steps.length - 1];
96
+ if (c.node.marks.find((m) => m.type === schema.marks.tracked_insert)) {
97
+ deletedNodeMapping.appendMap(newestStep.getMap());
98
+ }
90
99
  if (step !== newestStep) {
91
100
  mapping.appendMap(newestStep.getMap());
92
101
  step = newestStep;
@@ -51,7 +51,7 @@ function deleteAndMergeSplitNodes(from, to, gap, startDoc, newTr, schema, trackA
51
51
  if (!endTokenDeleted && startTokenDeleted) {
52
52
  mergingStartSide = false;
53
53
  }
54
- const depth = newTr.doc.resolve(pos).depth;
54
+ const depth = startDoc.resolve(pos).depth;
55
55
  const mergeContent = mergingStartSide
56
56
  ? firstMergedNode === null || firstMergedNode === void 0 ? void 0 : firstMergedNode.mergedNodeContent
57
57
  : lastMergedNode === null || lastMergedNode === void 0 ? void 0 : lastMergedNode.mergedNodeContent;
@@ -31,6 +31,7 @@ function trackTransaction(tr, oldState, newTr, authorID) {
31
31
  };
32
32
  const wasNodeSelection = tr.selection instanceof prosemirror_state_1.NodeSelection;
33
33
  const setsNewSelection = tr.selectionSet;
34
+ const deletedNodeMapping = new prosemirror_transform_1.Mapping();
34
35
  let iters = 0;
35
36
  logger_1.log.info('ORIGINAL transaction', tr);
36
37
  let trContext = {};
@@ -57,9 +58,12 @@ function trackTransaction(tr, oldState, newTr, authorID) {
57
58
  }
58
59
  const invertedStep = step.invert(tr.docs[i]);
59
60
  const isDelete = step.from !== step.to && step.slice.content.size < invertedStep.slice.content.size;
60
- const thisStepMapping = tr.mapping.slice(i + 1, i + 1);
61
+ let thisStepMapping = tr.mapping.slice(i + 1, i + 1);
62
+ if (isDelete) {
63
+ thisStepMapping = deletedNodeMapping;
64
+ }
61
65
  const newStep = new prosemirror_transform_1.ReplaceStep(thisStepMapping.map(invertedStep.from), thisStepMapping.map(invertedStep.to), invertedStep.slice);
62
- const stepResult = newTr.maybeStep(isDelete ? invertedStep : newStep);
66
+ const stepResult = newTr.maybeStep(newStep);
63
67
  let [steps, startPos] = (0, trackReplaceStep_1.trackReplaceStep)(step, oldState, newTr, emptyAttrs, stepResult, tr.docs[i], tr);
64
68
  if (steps.length === 1) {
65
69
  const step = steps[0];
@@ -67,16 +71,14 @@ function trackTransaction(tr, oldState, newTr, authorID) {
67
71
  continue;
68
72
  }
69
73
  }
70
- if (!isDelete) {
71
- startPos = thisStepMapping.map(startPos);
72
- steps = (0, mapChangeStep_1.mapChangeSteps)(steps, thisStepMapping);
73
- }
74
+ startPos = thisStepMapping.map(startPos);
75
+ steps = (0, mapChangeStep_1.mapChangeSteps)(steps, thisStepMapping);
74
76
  logger_1.log.info('CHANGES: ', steps);
75
77
  const deleted = steps.filter((s) => s.type !== 'insert-slice');
76
78
  const inserted = steps.filter((s) => s.type === 'insert-slice');
77
79
  steps = (0, diffChangeSteps_1.diffChangeSteps)(deleted, inserted);
78
80
  logger_1.log.info('DIFFED STEPS: ', steps);
79
- const [mapping, selectionPos] = (0, processChangeSteps_1.processChangeSteps)(steps, startPos || tr.selection.head, newTr, emptyAttrs, oldState.schema);
81
+ const [mapping, selectionPos] = (0, processChangeSteps_1.processChangeSteps)(steps, startPos || tr.selection.head, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
80
82
  if (!wasNodeSelection && !setsNewSelection) {
81
83
  const sel = getSelectionStaticConstructor(tr.selection);
82
84
  const near = sel.near(newTr.doc.resolve(selectionPos), -1);
@@ -90,11 +92,11 @@ function trackTransaction(tr, oldState, newTr, authorID) {
90
92
  logger_1.log.info('INSERT STEPS: ', inserted);
91
93
  steps = (0, diffChangeSteps_1.diffChangeSteps)(deleted, inserted);
92
94
  logger_1.log.info('DIFFED STEPS: ', steps);
93
- const [mapping, selectionPos] = (0, processChangeSteps_1.processChangeSteps)(steps, tr.selection.from, newTr, emptyAttrs, oldState.schema);
95
+ const [mapping, selectionPos] = (0, processChangeSteps_1.processChangeSteps)(steps, tr.selection.from, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
94
96
  }
95
97
  else if (step instanceof prosemirror_transform_1.AttrStep) {
96
98
  const changeSteps = (0, trackAttrsChange_1.default)(step, oldState, tr, newTr, emptyAttrs, tr.docs[i]);
97
- const [mapping, selectionPos] = (0, processChangeSteps_1.processChangeSteps)(changeSteps, tr.selection.from, newTr, emptyAttrs, oldState.schema);
99
+ const [mapping, selectionPos] = (0, processChangeSteps_1.processChangeSteps)(changeSteps, tr.selection.from, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
98
100
  }
99
101
  else if (step instanceof prosemirror_transform_1.AddMarkStep) {
100
102
  const dataTracked = (_e = (0, nodeHelpers_1.getNodeTrackedData)(newTr.doc.nodeAt(step.from), oldState.schema)) === null || _e === void 0 ? void 0 : _e.pop();
@@ -17,7 +17,7 @@ import { mergeTrackedMarks } from '../mutate/mergeTrackedMarks';
17
17
  import { CHANGE_OPERATION, CHANGE_STATUS } from '../types/change';
18
18
  import { log } from '../utils/logger';
19
19
  import * as trackUtils from '../utils/track-utils';
20
- export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema) {
20
+ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema, deletedNodeMapping) {
21
21
  const mapping = new Mapping();
22
22
  const deleteAttrs = trackUtils.createNewDeleteAttrs(emptyAttrs);
23
23
  let selectionPos = startPos;
@@ -36,6 +36,9 @@ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema)
36
36
  }
37
37
  deleteOrSetNodeDeleted(c.node, mapping.map(c.pos), newTr, deleteAttrs);
38
38
  const newestStep = newTr.steps[newTr.steps.length - 1];
39
+ if (isInserted) {
40
+ deletedNodeMapping.appendMap(newestStep.getMap());
41
+ }
39
42
  if (step !== newestStep) {
40
43
  mapping.appendMap(newestStep.getMap());
41
44
  step = newestStep;
@@ -50,6 +53,9 @@ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema)
50
53
  }
51
54
  const where = deleteTextIfInserted(node, mapping.map(c.pos), newTr, schema, deleteAttrs, mapping.map(c.from), mapping.map(c.to));
52
55
  const textNewestStep = newTr.steps[newTr.steps.length - 1];
56
+ if (node.marks.find((m) => m.type === schema.marks.tracked_insert)) {
57
+ deletedNodeMapping.appendMap(textNewestStep.getMap());
58
+ }
53
59
  if (step !== textNewestStep) {
54
60
  mapping.appendMap(textNewestStep.getMap());
55
61
  step = textNewestStep;
@@ -61,6 +67,9 @@ export function processChangeSteps(changes, startPos, newTr, emptyAttrs, schema)
61
67
  if (c.node.isText) {
62
68
  insertPos = deleteTextIfInserted(c.node, mapping.map(c.pos), newTr, schema, deleteAttrs, mapping.map(c.from), mapping.map(c.to));
63
69
  const newestStep = newTr.steps[newTr.steps.length - 1];
70
+ if (c.node.marks.find((m) => m.type === schema.marks.tracked_insert)) {
71
+ deletedNodeMapping.appendMap(newestStep.getMap());
72
+ }
64
73
  if (step !== newestStep) {
65
74
  mapping.appendMap(newestStep.getMap());
66
75
  step = newestStep;
@@ -25,7 +25,7 @@ export function deleteAndMergeSplitNodes(from, to, gap, startDoc, newTr, schema,
25
25
  if (!endTokenDeleted && startTokenDeleted) {
26
26
  mergingStartSide = false;
27
27
  }
28
- const depth = newTr.doc.resolve(pos).depth;
28
+ const depth = startDoc.resolve(pos).depth;
29
29
  const mergeContent = mergingStartSide
30
30
  ? firstMergedNode === null || firstMergedNode === void 0 ? void 0 : firstMergedNode.mergedNodeContent
31
31
  : lastMergedNode === null || lastMergedNode === void 0 ? void 0 : lastMergedNode.mergedNodeContent;
@@ -1,5 +1,5 @@
1
1
  import { NodeSelection as NodeSelectionClass, TextSelection, } from 'prosemirror-state';
2
- import { AddMarkStep, AttrStep, ReplaceAroundStep, ReplaceStep, } from 'prosemirror-transform';
2
+ import { AddMarkStep, AttrStep, Mapping, ReplaceAroundStep, ReplaceStep, } from 'prosemirror-transform';
3
3
  import { diffChangeSteps } from '../change-steps/diffChangeSteps';
4
4
  import { processChangeSteps } from '../change-steps/processChangeSteps';
5
5
  import { updateChangeAttrs } from '../changes/updateChangeAttrs';
@@ -25,6 +25,7 @@ export function trackTransaction(tr, oldState, newTr, authorID) {
25
25
  };
26
26
  const wasNodeSelection = tr.selection instanceof NodeSelectionClass;
27
27
  const setsNewSelection = tr.selectionSet;
28
+ const deletedNodeMapping = new Mapping();
28
29
  let iters = 0;
29
30
  log.info('ORIGINAL transaction', tr);
30
31
  let trContext = {};
@@ -51,9 +52,12 @@ export function trackTransaction(tr, oldState, newTr, authorID) {
51
52
  }
52
53
  const invertedStep = step.invert(tr.docs[i]);
53
54
  const isDelete = step.from !== step.to && step.slice.content.size < invertedStep.slice.content.size;
54
- const thisStepMapping = tr.mapping.slice(i + 1, i + 1);
55
+ let thisStepMapping = tr.mapping.slice(i + 1, i + 1);
56
+ if (isDelete) {
57
+ thisStepMapping = deletedNodeMapping;
58
+ }
55
59
  const newStep = new ReplaceStep(thisStepMapping.map(invertedStep.from), thisStepMapping.map(invertedStep.to), invertedStep.slice);
56
- const stepResult = newTr.maybeStep(isDelete ? invertedStep : newStep);
60
+ const stepResult = newTr.maybeStep(newStep);
57
61
  let [steps, startPos] = trackReplaceStep(step, oldState, newTr, emptyAttrs, stepResult, tr.docs[i], tr);
58
62
  if (steps.length === 1) {
59
63
  const step = steps[0];
@@ -61,16 +65,14 @@ export function trackTransaction(tr, oldState, newTr, authorID) {
61
65
  continue;
62
66
  }
63
67
  }
64
- if (!isDelete) {
65
- startPos = thisStepMapping.map(startPos);
66
- steps = mapChangeSteps(steps, thisStepMapping);
67
- }
68
+ startPos = thisStepMapping.map(startPos);
69
+ steps = mapChangeSteps(steps, thisStepMapping);
68
70
  log.info('CHANGES: ', steps);
69
71
  const deleted = steps.filter((s) => s.type !== 'insert-slice');
70
72
  const inserted = steps.filter((s) => s.type === 'insert-slice');
71
73
  steps = diffChangeSteps(deleted, inserted);
72
74
  log.info('DIFFED STEPS: ', steps);
73
- const [mapping, selectionPos] = processChangeSteps(steps, startPos || tr.selection.head, newTr, emptyAttrs, oldState.schema);
75
+ const [mapping, selectionPos] = processChangeSteps(steps, startPos || tr.selection.head, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
74
76
  if (!wasNodeSelection && !setsNewSelection) {
75
77
  const sel = getSelectionStaticConstructor(tr.selection);
76
78
  const near = sel.near(newTr.doc.resolve(selectionPos), -1);
@@ -84,11 +86,11 @@ export function trackTransaction(tr, oldState, newTr, authorID) {
84
86
  log.info('INSERT STEPS: ', inserted);
85
87
  steps = diffChangeSteps(deleted, inserted);
86
88
  log.info('DIFFED STEPS: ', steps);
87
- const [mapping, selectionPos] = processChangeSteps(steps, tr.selection.from, newTr, emptyAttrs, oldState.schema);
89
+ const [mapping, selectionPos] = processChangeSteps(steps, tr.selection.from, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
88
90
  }
89
91
  else if (step instanceof AttrStep) {
90
92
  const changeSteps = trackAttrsChange(step, oldState, tr, newTr, emptyAttrs, tr.docs[i]);
91
- const [mapping, selectionPos] = processChangeSteps(changeSteps, tr.selection.from, newTr, emptyAttrs, oldState.schema);
93
+ const [mapping, selectionPos] = processChangeSteps(changeSteps, tr.selection.from, newTr, emptyAttrs, oldState.schema, deletedNodeMapping);
92
94
  }
93
95
  else if (step instanceof AddMarkStep) {
94
96
  const dataTracked = (_e = getNodeTrackedData(newTr.doc.nodeAt(step.from), oldState.schema)) === null || _e === void 0 ? void 0 : _e.pop();
@@ -3,4 +3,4 @@ import type { Transaction } from 'prosemirror-state';
3
3
  import { Mapping } from 'prosemirror-transform';
4
4
  import { ChangeStep } from '../types/step';
5
5
  import { NewEmptyAttrs } from '../types/track';
6
- export declare function processChangeSteps(changes: ChangeStep[], startPos: number, newTr: Transaction, emptyAttrs: NewEmptyAttrs, schema: Schema): [Mapping, number];
6
+ export declare function processChangeSteps(changes: ChangeStep[], startPos: number, newTr: Transaction, emptyAttrs: NewEmptyAttrs, schema: Schema, deletedNodeMapping: Mapping): [Mapping, number];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manuscripts/track-changes-plugin",
3
- "version": "1.10.0",
3
+ "version": "1.10.1-LEAN-4174.0",
4
4
  "author": "Atypon Systems LLC",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/Atypon-OpenSource/manuscripts-track-changes-plugin",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "devDependencies": {
28
28
  "@manuscripts/eslint-config": "^0.5.1",
29
- "@manuscripts/transform": "2.1.1",
29
+ "@manuscripts/transform": "3.0.45",
30
30
  "@types/debug": "^4.1.7",
31
31
  "@types/jest": "27.5.1",
32
32
  "@types/node": "^18.7.18",