@atlaskit/editor-plugin-show-diff 3.2.5 → 3.2.7

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/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @atlaskit/editor-plugin-show-diff
2
2
 
3
+ ## 3.2.7
4
+
5
+ ### Patch Changes
6
+
7
+ - [`bc52c059565f2`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/bc52c059565f2) -
8
+ Fix issue with simplify changes being too aggressive and dropping steps causing diffs to fail.
9
+
10
+ ## 3.2.6
11
+
12
+ ### Patch Changes
13
+
14
+ - [`05ee61c6ace09`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/05ee61c6ace09) -
15
+ Improve performance of show diff by increasing merge of steps
16
+ - Updated dependencies
17
+
3
18
  ## 3.2.5
4
19
 
5
20
  ### Patch Changes
@@ -11,12 +11,12 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
  var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
12
12
  var _memoizeOne = _interopRequireDefault(require("memoize-one"));
13
13
  var _prosemirrorChangeset = require("prosemirror-changeset");
14
- var _steps = require("@atlaskit/adf-schema/steps");
15
14
  var _document = require("@atlaskit/editor-common/utils/document");
16
15
  var _view = require("@atlaskit/editor-prosemirror/view");
17
16
  var _attributeDecorations = require("./attributeDecorations");
18
17
  var _decorations = require("./decorations");
19
18
  var _markDecorations = require("./markDecorations");
19
+ var _simplifyChanges = require("./simplifyChanges");
20
20
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
21
21
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
22
22
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -69,27 +69,6 @@ function optimizeChanges(changes) {
69
69
  optimized.push(current);
70
70
  return optimized;
71
71
  }
72
-
73
- // Simplifies the steps to improve performance and reduce fragmentation in diffs
74
- function simplifySteps(steps) {
75
- return steps
76
- // Remove steps that don't affect document structure or content
77
- .filter(function (step) {
78
- return !(step instanceof _steps.AnalyticsStep);
79
- })
80
- // Merge consecutive steps where possible
81
- .reduce(function (acc, step) {
82
- var _lastStep$merge;
83
- var lastStep = acc[acc.length - 1];
84
- var merged = lastStep === null || lastStep === void 0 || (_lastStep$merge = lastStep.merge) === null || _lastStep$merge === void 0 ? void 0 : _lastStep$merge.call(lastStep, step);
85
- if (merged) {
86
- acc[acc.length - 1] = merged;
87
- } else {
88
- acc.push(step);
89
- }
90
- return acc;
91
- }, []);
92
- }
93
72
  var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref) {
94
73
  var state = _ref.state,
95
74
  pluginState = _ref.pluginState,
@@ -97,8 +76,7 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref)
97
76
  colourScheme = _ref.colourScheme,
98
77
  intl = _ref.intl;
99
78
  var originalDoc = pluginState.originalDoc,
100
- rawSteps = pluginState.steps;
101
- var steps = simplifySteps(rawSteps);
79
+ steps = pluginState.steps;
102
80
  if (!originalDoc || !pluginState.isDisplayingChanges) {
103
81
  return _view.DecorationSet.empty;
104
82
  }
@@ -106,7 +84,8 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref)
106
84
  var steppedDoc = originalDoc;
107
85
  var attrSteps = [];
108
86
  var changeset = _prosemirrorChangeset.ChangeSet.create(originalDoc);
109
- var _iterator = _createForOfIteratorHelper(steps),
87
+ var simplifiedSteps = (0, _simplifyChanges.simplifySteps)(steps, originalDoc);
88
+ var _iterator = _createForOfIteratorHelper(simplifiedSteps),
110
89
  _step;
111
90
  try {
112
91
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.simplifySteps = simplifySteps;
7
+ var _steps = require("@atlaskit/adf-schema/steps");
8
+ var _document = require("@atlaskit/editor-common/utils/document");
9
+ var _transform = require("@atlaskit/editor-prosemirror/transform");
10
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
12
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
13
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
14
+ /**
15
+ * Attempts to merge two consecutive ReplaceStep operations.
16
+ * This merges steps where:
17
+ * - Both steps replace content at the same starting position
18
+ * - The second step's range encompasses the first step's range
19
+ * - The second step has content to insert
20
+ * Returns null if steps cannot be merged.
21
+ */
22
+ function mergeReplaceSteps(step1, step2) {
23
+ if (!(step1 instanceof _transform.ReplaceStep) || !(step2 instanceof _transform.ReplaceStep)) {
24
+ return null;
25
+ }
26
+ // Confirm the step overlaps exactly with the previous
27
+ var step2Length = step2.to - step2.from;
28
+ if (step1.from === step2.from && step2.to >= step1.to && step2.slice.size >= step2Length && step2Length === step1.slice.size && step2.slice.size >= step1.slice.size && step1.slice.openEnd === step2.slice.openEnd && step1.slice.openStart === step2.slice.openStart) {
29
+ return new _transform.ReplaceStep(step1.from, step1.to, step2.slice);
30
+ }
31
+ return null;
32
+ }
33
+
34
+ // Simplifies the steps to improve performance and reduce fragmentation in diffs
35
+ function simplifySteps(steps, originalDoc) {
36
+ var stepsToFilter = (0, _platformFeatureFlags.fg)('platform_editor_ai_aifc_patch_ga') ? removeUnusedSteps(steps, originalDoc) : steps;
37
+ return stepsToFilter
38
+ // Remove steps that don't affect document structure or content
39
+ .filter(function (step) {
40
+ return !(step instanceof _steps.AnalyticsStep);
41
+ })
42
+ // Merge consecutive steps where possible
43
+ .reduce(function (acc, step) {
44
+ var _lastStep$merge, _lastStep$merge2, _lastStep$merge3;
45
+ var lastStep = acc[acc.length - 1];
46
+ var merged = (0, _platformFeatureFlags.fg)('platform_editor_ai_aifc_patch_ga') ? (_lastStep$merge = lastStep === null || lastStep === void 0 || (_lastStep$merge2 = lastStep.merge) === null || _lastStep$merge2 === void 0 ? void 0 : _lastStep$merge2.call(lastStep, step)) !== null && _lastStep$merge !== void 0 ? _lastStep$merge : mergeReplaceSteps(lastStep, step) : lastStep === null || lastStep === void 0 || (_lastStep$merge3 = lastStep.merge) === null || _lastStep$merge3 === void 0 ? void 0 : _lastStep$merge3.call(lastStep, step);
47
+ if (merged) {
48
+ acc[acc.length - 1] = merged;
49
+ } else {
50
+ acc.push(step);
51
+ }
52
+ return acc;
53
+ }, []);
54
+ }
55
+
56
+ /**
57
+ * Does a first pass to remove steps that don't impact the document
58
+ */
59
+ function removeUnusedSteps(steps, originalDoc) {
60
+ var finalSteps = [];
61
+ var firstPassDoc = originalDoc;
62
+ var _iterator = _createForOfIteratorHelper(steps),
63
+ _step;
64
+ try {
65
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
66
+ var step = _step.value;
67
+ var result = step.apply(firstPassDoc);
68
+ if (result.failed === null && result.doc && !(0, _document.areNodesEqualIgnoreAttrs)(firstPassDoc, result.doc, ['localId'])) {
69
+ finalSteps.push(step);
70
+ firstPassDoc = result.doc;
71
+ }
72
+ }
73
+ } catch (err) {
74
+ _iterator.e(err);
75
+ } finally {
76
+ _iterator.f();
77
+ }
78
+ return finalSteps;
79
+ }
@@ -2,12 +2,12 @@
2
2
  import isEqual from 'lodash/isEqual';
3
3
  import memoizeOne from 'memoize-one';
4
4
  import { ChangeSet, simplifyChanges } from 'prosemirror-changeset';
5
- import { AnalyticsStep } from '@atlaskit/adf-schema/steps';
6
5
  import { areNodesEqualIgnoreAttrs } from '@atlaskit/editor-common/utils/document';
7
6
  import { DecorationSet } from '@atlaskit/editor-prosemirror/view';
8
7
  import { getAttrChangeRanges, stepIsValidAttrChange } from './attributeDecorations';
9
8
  import { createInlineChangedDecoration, createDeletedContentDecoration, createBlockChangedDecoration } from './decorations';
10
9
  import { getMarkChangeRanges } from './markDecorations';
10
+ import { simplifySteps } from './simplifyChanges';
11
11
  const calculateNodesForBlockDecoration = (doc, from, to, colourScheme) => {
12
12
  const decorations = [];
13
13
  // Iterate over the document nodes within the range
@@ -59,25 +59,6 @@ function optimizeChanges(changes) {
59
59
  optimized.push(current);
60
60
  return optimized;
61
61
  }
62
-
63
- // Simplifies the steps to improve performance and reduce fragmentation in diffs
64
- function simplifySteps(steps) {
65
- return steps
66
- // Remove steps that don't affect document structure or content
67
- .filter(step => !(step instanceof AnalyticsStep))
68
- // Merge consecutive steps where possible
69
- .reduce((acc, step) => {
70
- var _lastStep$merge;
71
- const lastStep = acc[acc.length - 1];
72
- const merged = lastStep === null || lastStep === void 0 ? void 0 : (_lastStep$merge = lastStep.merge) === null || _lastStep$merge === void 0 ? void 0 : _lastStep$merge.call(lastStep, step);
73
- if (merged) {
74
- acc[acc.length - 1] = merged;
75
- } else {
76
- acc.push(step);
77
- }
78
- return acc;
79
- }, []);
80
- }
81
62
  const calculateDiffDecorationsInner = ({
82
63
  state,
83
64
  pluginState,
@@ -87,9 +68,8 @@ const calculateDiffDecorationsInner = ({
87
68
  }) => {
88
69
  const {
89
70
  originalDoc,
90
- steps: rawSteps
71
+ steps
91
72
  } = pluginState;
92
- const steps = simplifySteps(rawSteps);
93
73
  if (!originalDoc || !pluginState.isDisplayingChanges) {
94
74
  return DecorationSet.empty;
95
75
  }
@@ -99,7 +79,8 @@ const calculateDiffDecorationsInner = ({
99
79
  let steppedDoc = originalDoc;
100
80
  const attrSteps = [];
101
81
  let changeset = ChangeSet.create(originalDoc);
102
- for (const step of steps) {
82
+ const simplifiedSteps = simplifySteps(steps, originalDoc);
83
+ for (const step of simplifiedSteps) {
103
84
  const result = step.apply(steppedDoc);
104
85
  if (result.failed === null && result.doc) {
105
86
  if (stepIsValidAttrChange(step, steppedDoc, result.doc)) {
@@ -0,0 +1,60 @@
1
+ import { AnalyticsStep } from '@atlaskit/adf-schema/steps';
2
+ import { areNodesEqualIgnoreAttrs } from '@atlaskit/editor-common/utils/document';
3
+ import { ReplaceStep } from '@atlaskit/editor-prosemirror/transform';
4
+ import { fg } from '@atlaskit/platform-feature-flags';
5
+
6
+ /**
7
+ * Attempts to merge two consecutive ReplaceStep operations.
8
+ * This merges steps where:
9
+ * - Both steps replace content at the same starting position
10
+ * - The second step's range encompasses the first step's range
11
+ * - The second step has content to insert
12
+ * Returns null if steps cannot be merged.
13
+ */
14
+ function mergeReplaceSteps(step1, step2) {
15
+ if (!(step1 instanceof ReplaceStep) || !(step2 instanceof ReplaceStep)) {
16
+ return null;
17
+ }
18
+ // Confirm the step overlaps exactly with the previous
19
+ const step2Length = step2.to - step2.from;
20
+ if (step1.from === step2.from && step2.to >= step1.to && step2.slice.size >= step2Length && step2Length === step1.slice.size && step2.slice.size >= step1.slice.size && step1.slice.openEnd === step2.slice.openEnd && step1.slice.openStart === step2.slice.openStart) {
21
+ return new ReplaceStep(step1.from, step1.to, step2.slice);
22
+ }
23
+ return null;
24
+ }
25
+
26
+ // Simplifies the steps to improve performance and reduce fragmentation in diffs
27
+ export function simplifySteps(steps, originalDoc) {
28
+ const stepsToFilter = fg('platform_editor_ai_aifc_patch_ga') ? removeUnusedSteps(steps, originalDoc) : steps;
29
+ return stepsToFilter
30
+ // Remove steps that don't affect document structure or content
31
+ .filter(step => !(step instanceof AnalyticsStep))
32
+ // Merge consecutive steps where possible
33
+ .reduce((acc, step) => {
34
+ var _lastStep$merge, _lastStep$merge2, _lastStep$merge3;
35
+ const lastStep = acc[acc.length - 1];
36
+ const merged = fg('platform_editor_ai_aifc_patch_ga') ? (_lastStep$merge = lastStep === null || lastStep === void 0 ? void 0 : (_lastStep$merge2 = lastStep.merge) === null || _lastStep$merge2 === void 0 ? void 0 : _lastStep$merge2.call(lastStep, step)) !== null && _lastStep$merge !== void 0 ? _lastStep$merge : mergeReplaceSteps(lastStep, step) : lastStep === null || lastStep === void 0 ? void 0 : (_lastStep$merge3 = lastStep.merge) === null || _lastStep$merge3 === void 0 ? void 0 : _lastStep$merge3.call(lastStep, step);
37
+ if (merged) {
38
+ acc[acc.length - 1] = merged;
39
+ } else {
40
+ acc.push(step);
41
+ }
42
+ return acc;
43
+ }, []);
44
+ }
45
+
46
+ /**
47
+ * Does a first pass to remove steps that don't impact the document
48
+ */
49
+ function removeUnusedSteps(steps, originalDoc) {
50
+ const finalSteps = [];
51
+ let firstPassDoc = originalDoc;
52
+ for (const step of steps) {
53
+ const result = step.apply(firstPassDoc);
54
+ if (result.failed === null && result.doc && !areNodesEqualIgnoreAttrs(firstPassDoc, result.doc, ['localId'])) {
55
+ finalSteps.push(step);
56
+ firstPassDoc = result.doc;
57
+ }
58
+ }
59
+ return finalSteps;
60
+ }
@@ -10,12 +10,12 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
10
10
  import isEqual from 'lodash/isEqual';
11
11
  import memoizeOne from 'memoize-one';
12
12
  import { ChangeSet, simplifyChanges } from 'prosemirror-changeset';
13
- import { AnalyticsStep } from '@atlaskit/adf-schema/steps';
14
13
  import { areNodesEqualIgnoreAttrs } from '@atlaskit/editor-common/utils/document';
15
14
  import { DecorationSet } from '@atlaskit/editor-prosemirror/view';
16
15
  import { getAttrChangeRanges, stepIsValidAttrChange } from './attributeDecorations';
17
16
  import { createInlineChangedDecoration, createDeletedContentDecoration, createBlockChangedDecoration } from './decorations';
18
17
  import { getMarkChangeRanges } from './markDecorations';
18
+ import { simplifySteps } from './simplifyChanges';
19
19
  var calculateNodesForBlockDecoration = function calculateNodesForBlockDecoration(doc, from, to, colourScheme) {
20
20
  var decorations = [];
21
21
  // Iterate over the document nodes within the range
@@ -63,27 +63,6 @@ function optimizeChanges(changes) {
63
63
  optimized.push(current);
64
64
  return optimized;
65
65
  }
66
-
67
- // Simplifies the steps to improve performance and reduce fragmentation in diffs
68
- function simplifySteps(steps) {
69
- return steps
70
- // Remove steps that don't affect document structure or content
71
- .filter(function (step) {
72
- return !(step instanceof AnalyticsStep);
73
- })
74
- // Merge consecutive steps where possible
75
- .reduce(function (acc, step) {
76
- var _lastStep$merge;
77
- var lastStep = acc[acc.length - 1];
78
- var merged = lastStep === null || lastStep === void 0 || (_lastStep$merge = lastStep.merge) === null || _lastStep$merge === void 0 ? void 0 : _lastStep$merge.call(lastStep, step);
79
- if (merged) {
80
- acc[acc.length - 1] = merged;
81
- } else {
82
- acc.push(step);
83
- }
84
- return acc;
85
- }, []);
86
- }
87
66
  var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref) {
88
67
  var state = _ref.state,
89
68
  pluginState = _ref.pluginState,
@@ -91,8 +70,7 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref)
91
70
  colourScheme = _ref.colourScheme,
92
71
  intl = _ref.intl;
93
72
  var originalDoc = pluginState.originalDoc,
94
- rawSteps = pluginState.steps;
95
- var steps = simplifySteps(rawSteps);
73
+ steps = pluginState.steps;
96
74
  if (!originalDoc || !pluginState.isDisplayingChanges) {
97
75
  return DecorationSet.empty;
98
76
  }
@@ -100,7 +78,8 @@ var calculateDiffDecorationsInner = function calculateDiffDecorationsInner(_ref)
100
78
  var steppedDoc = originalDoc;
101
79
  var attrSteps = [];
102
80
  var changeset = ChangeSet.create(originalDoc);
103
- var _iterator = _createForOfIteratorHelper(steps),
81
+ var simplifiedSteps = simplifySteps(steps, originalDoc);
82
+ var _iterator = _createForOfIteratorHelper(simplifiedSteps),
104
83
  _step;
105
84
  try {
106
85
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -0,0 +1,74 @@
1
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
2
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
3
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
4
+ import { AnalyticsStep } from '@atlaskit/adf-schema/steps';
5
+ import { areNodesEqualIgnoreAttrs } from '@atlaskit/editor-common/utils/document';
6
+ import { ReplaceStep } from '@atlaskit/editor-prosemirror/transform';
7
+ import { fg } from '@atlaskit/platform-feature-flags';
8
+
9
+ /**
10
+ * Attempts to merge two consecutive ReplaceStep operations.
11
+ * This merges steps where:
12
+ * - Both steps replace content at the same starting position
13
+ * - The second step's range encompasses the first step's range
14
+ * - The second step has content to insert
15
+ * Returns null if steps cannot be merged.
16
+ */
17
+ function mergeReplaceSteps(step1, step2) {
18
+ if (!(step1 instanceof ReplaceStep) || !(step2 instanceof ReplaceStep)) {
19
+ return null;
20
+ }
21
+ // Confirm the step overlaps exactly with the previous
22
+ var step2Length = step2.to - step2.from;
23
+ if (step1.from === step2.from && step2.to >= step1.to && step2.slice.size >= step2Length && step2Length === step1.slice.size && step2.slice.size >= step1.slice.size && step1.slice.openEnd === step2.slice.openEnd && step1.slice.openStart === step2.slice.openStart) {
24
+ return new ReplaceStep(step1.from, step1.to, step2.slice);
25
+ }
26
+ return null;
27
+ }
28
+
29
+ // Simplifies the steps to improve performance and reduce fragmentation in diffs
30
+ export function simplifySteps(steps, originalDoc) {
31
+ var stepsToFilter = fg('platform_editor_ai_aifc_patch_ga') ? removeUnusedSteps(steps, originalDoc) : steps;
32
+ return stepsToFilter
33
+ // Remove steps that don't affect document structure or content
34
+ .filter(function (step) {
35
+ return !(step instanceof AnalyticsStep);
36
+ })
37
+ // Merge consecutive steps where possible
38
+ .reduce(function (acc, step) {
39
+ var _lastStep$merge, _lastStep$merge2, _lastStep$merge3;
40
+ var lastStep = acc[acc.length - 1];
41
+ var merged = fg('platform_editor_ai_aifc_patch_ga') ? (_lastStep$merge = lastStep === null || lastStep === void 0 || (_lastStep$merge2 = lastStep.merge) === null || _lastStep$merge2 === void 0 ? void 0 : _lastStep$merge2.call(lastStep, step)) !== null && _lastStep$merge !== void 0 ? _lastStep$merge : mergeReplaceSteps(lastStep, step) : lastStep === null || lastStep === void 0 || (_lastStep$merge3 = lastStep.merge) === null || _lastStep$merge3 === void 0 ? void 0 : _lastStep$merge3.call(lastStep, step);
42
+ if (merged) {
43
+ acc[acc.length - 1] = merged;
44
+ } else {
45
+ acc.push(step);
46
+ }
47
+ return acc;
48
+ }, []);
49
+ }
50
+
51
+ /**
52
+ * Does a first pass to remove steps that don't impact the document
53
+ */
54
+ function removeUnusedSteps(steps, originalDoc) {
55
+ var finalSteps = [];
56
+ var firstPassDoc = originalDoc;
57
+ var _iterator = _createForOfIteratorHelper(steps),
58
+ _step;
59
+ try {
60
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
61
+ var step = _step.value;
62
+ var result = step.apply(firstPassDoc);
63
+ if (result.failed === null && result.doc && !areNodesEqualIgnoreAttrs(firstPassDoc, result.doc, ['localId'])) {
64
+ finalSteps.push(step);
65
+ firstPassDoc = result.doc;
66
+ }
67
+ }
68
+ } catch (err) {
69
+ _iterator.e(err);
70
+ } finally {
71
+ _iterator.f();
72
+ }
73
+ return finalSteps;
74
+ }
@@ -0,0 +1,3 @@
1
+ import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
+ import type { Step as ProseMirrorStep } from '@atlaskit/editor-prosemirror/transform';
3
+ export declare function simplifySteps(steps: ProseMirrorStep[], originalDoc: PMNode): ProseMirrorStep[];
@@ -0,0 +1,3 @@
1
+ import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
+ import type { Step as ProseMirrorStep } from '@atlaskit/editor-prosemirror/transform';
3
+ export declare function simplifySteps(steps: ProseMirrorStep[], originalDoc: PMNode): ProseMirrorStep[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-show-diff",
3
- "version": "3.2.5",
3
+ "version": "3.2.7",
4
4
  "description": "ShowDiff plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -32,14 +32,14 @@
32
32
  "@atlaskit/editor-prosemirror": "7.0.0",
33
33
  "@atlaskit/editor-tables": "^2.9.0",
34
34
  "@atlaskit/platform-feature-flags": "^1.1.0",
35
- "@atlaskit/tokens": "^8.0.0",
35
+ "@atlaskit/tokens": "^8.3.0",
36
36
  "@babel/runtime": "^7.0.0",
37
37
  "lodash": "^4.17.21",
38
38
  "memoize-one": "^6.0.0",
39
39
  "prosemirror-changeset": "^2.2.1"
40
40
  },
41
41
  "peerDependencies": {
42
- "@atlaskit/editor-common": "^110.32.0",
42
+ "@atlaskit/editor-common": "^110.35.0",
43
43
  "react": "^18.2.0"
44
44
  },
45
45
  "techstack": {