document-model 6.0.0-dev.11 → 6.0.0-dev.110

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.
Files changed (270) hide show
  1. package/dist/index.d.ts +81 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +216 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/node.d.mts +62 -0
  6. package/dist/node.d.mts.map +1 -0
  7. package/dist/node.mjs +151 -0
  8. package/dist/node.mjs.map +1 -0
  9. package/package.json +15 -24
  10. package/dist/src/core/actions.d.ts +0 -87
  11. package/dist/src/core/actions.d.ts.map +0 -1
  12. package/dist/src/core/actions.js +0 -187
  13. package/dist/src/core/actions.js.map +0 -1
  14. package/dist/src/core/crypto.d.ts +0 -8
  15. package/dist/src/core/crypto.d.ts.map +0 -1
  16. package/dist/src/core/crypto.js +0 -68
  17. package/dist/src/core/crypto.js.map +0 -1
  18. package/dist/src/core/documents.d.ts +0 -146
  19. package/dist/src/core/documents.d.ts.map +0 -1
  20. package/dist/src/core/documents.js +0 -814
  21. package/dist/src/core/documents.js.map +0 -1
  22. package/dist/src/core/errors.d.ts +0 -21
  23. package/dist/src/core/errors.d.ts.map +0 -1
  24. package/dist/src/core/errors.js +0 -46
  25. package/dist/src/core/errors.js.map +0 -1
  26. package/dist/src/core/files.d.ts +0 -14
  27. package/dist/src/core/files.d.ts.map +0 -1
  28. package/dist/src/core/files.js +0 -65
  29. package/dist/src/core/files.js.map +0 -1
  30. package/dist/src/core/header.d.ts +0 -63
  31. package/dist/src/core/header.d.ts.map +0 -1
  32. package/dist/src/core/header.js +0 -178
  33. package/dist/src/core/header.js.map +0 -1
  34. package/dist/src/core/index.d.ts +0 -13
  35. package/dist/src/core/index.d.ts.map +0 -1
  36. package/dist/src/core/index.js +0 -13
  37. package/dist/src/core/index.js.map +0 -1
  38. package/dist/src/core/node.d.ts +0 -53
  39. package/dist/src/core/node.d.ts.map +0 -1
  40. package/dist/src/core/node.js +0 -139
  41. package/dist/src/core/node.js.map +0 -1
  42. package/dist/src/core/operations.d.ts +0 -48
  43. package/dist/src/core/operations.d.ts.map +0 -1
  44. package/dist/src/core/operations.js +0 -122
  45. package/dist/src/core/operations.js.map +0 -1
  46. package/dist/src/core/ph-types.d.ts +0 -315
  47. package/dist/src/core/ph-types.d.ts.map +0 -1
  48. package/dist/src/core/ph-types.js +0 -15
  49. package/dist/src/core/ph-types.js.map +0 -1
  50. package/dist/src/core/reducer.d.ts +0 -63
  51. package/dist/src/core/reducer.d.ts.map +0 -1
  52. package/dist/src/core/reducer.js +0 -455
  53. package/dist/src/core/reducer.js.map +0 -1
  54. package/dist/src/core/schemas.d.ts +0 -69
  55. package/dist/src/core/schemas.d.ts.map +0 -1
  56. package/dist/src/core/schemas.js +0 -110
  57. package/dist/src/core/schemas.js.map +0 -1
  58. package/dist/src/core/state.d.ts +0 -26
  59. package/dist/src/core/state.d.ts.map +0 -1
  60. package/dist/src/core/state.js +0 -56
  61. package/dist/src/core/state.js.map +0 -1
  62. package/dist/src/core/types.d.ts +0 -536
  63. package/dist/src/core/types.d.ts.map +0 -1
  64. package/dist/src/core/types.js +0 -2
  65. package/dist/src/core/types.js.map +0 -1
  66. package/dist/src/core/utils.d.ts +0 -6
  67. package/dist/src/core/utils.d.ts.map +0 -1
  68. package/dist/src/core/utils.js +0 -15
  69. package/dist/src/core/utils.js.map +0 -1
  70. package/dist/src/core/validation.d.ts +0 -4
  71. package/dist/src/core/validation.d.ts.map +0 -1
  72. package/dist/src/core/validation.js +0 -27
  73. package/dist/src/core/validation.js.map +0 -1
  74. package/dist/src/document-model/actions.d.ts +0 -158
  75. package/dist/src/document-model/actions.d.ts.map +0 -1
  76. package/dist/src/document-model/actions.js +0 -111
  77. package/dist/src/document-model/actions.js.map +0 -1
  78. package/dist/src/document-model/constants.d.ts +0 -6
  79. package/dist/src/document-model/constants.d.ts.map +0 -1
  80. package/dist/src/document-model/constants.js +0 -573
  81. package/dist/src/document-model/constants.js.map +0 -1
  82. package/dist/src/document-model/document-schema.d.ts +0 -69
  83. package/dist/src/document-model/document-schema.d.ts.map +0 -1
  84. package/dist/src/document-model/document-schema.js +0 -43
  85. package/dist/src/document-model/document-schema.js.map +0 -1
  86. package/dist/src/document-model/document-type.d.ts +0 -2
  87. package/dist/src/document-model/document-type.d.ts.map +0 -1
  88. package/dist/src/document-model/document-type.js +0 -2
  89. package/dist/src/document-model/document-type.js.map +0 -1
  90. package/dist/src/document-model/files.d.ts +0 -5
  91. package/dist/src/document-model/files.d.ts.map +0 -1
  92. package/dist/src/document-model/files.js +0 -9
  93. package/dist/src/document-model/files.js.map +0 -1
  94. package/dist/src/document-model/index.d.ts +0 -11
  95. package/dist/src/document-model/index.d.ts.map +0 -1
  96. package/dist/src/document-model/index.js +0 -11
  97. package/dist/src/document-model/index.js.map +0 -1
  98. package/dist/src/document-model/module.d.ts +0 -3
  99. package/dist/src/document-model/module.d.ts.map +0 -1
  100. package/dist/src/document-model/module.js +0 -24
  101. package/dist/src/document-model/module.js.map +0 -1
  102. package/dist/src/document-model/reducers.d.ts +0 -11
  103. package/dist/src/document-model/reducers.d.ts.map +0 -1
  104. package/dist/src/document-model/reducers.js +0 -618
  105. package/dist/src/document-model/reducers.js.map +0 -1
  106. package/dist/src/document-model/schemas.d.ts +0 -189
  107. package/dist/src/document-model/schemas.d.ts.map +0 -1
  108. package/dist/src/document-model/schemas.js +0 -388
  109. package/dist/src/document-model/schemas.js.map +0 -1
  110. package/dist/src/document-model/state.d.ts +0 -15
  111. package/dist/src/document-model/state.d.ts.map +0 -1
  112. package/dist/src/document-model/state.js +0 -75
  113. package/dist/src/document-model/state.js.map +0 -1
  114. package/dist/src/document-model/types.d.ts +0 -679
  115. package/dist/src/document-model/types.d.ts.map +0 -1
  116. package/dist/src/document-model/types.js +0 -2
  117. package/dist/src/document-model/types.js.map +0 -1
  118. package/dist/src/document-model/validation.d.ts +0 -32
  119. package/dist/src/document-model/validation.d.ts.map +0 -1
  120. package/dist/src/document-model/validation.js +0 -166
  121. package/dist/src/document-model/validation.js.map +0 -1
  122. package/dist/src/index.d.ts +0 -6
  123. package/dist/src/index.d.ts.map +0 -1
  124. package/dist/src/index.js +0 -3
  125. package/dist/src/index.js.map +0 -1
  126. package/dist/test/document/crypto.test.d.ts +0 -2
  127. package/dist/test/document/crypto.test.d.ts.map +0 -1
  128. package/dist/test/document/crypto.test.js +0 -195
  129. package/dist/test/document/crypto.test.js.map +0 -1
  130. package/dist/test/document/event-vs-command.test.d.ts +0 -2
  131. package/dist/test/document/event-vs-command.test.d.ts.map +0 -1
  132. package/dist/test/document/event-vs-command.test.js +0 -202
  133. package/dist/test/document/event-vs-command.test.js.map +0 -1
  134. package/dist/test/document/local.test.d.ts +0 -2
  135. package/dist/test/document/local.test.d.ts.map +0 -1
  136. package/dist/test/document/local.test.js +0 -229
  137. package/dist/test/document/local.test.js.map +0 -1
  138. package/dist/test/document/operation-id.test.d.ts +0 -2
  139. package/dist/test/document/operation-id.test.d.ts.map +0 -1
  140. package/dist/test/document/operation-id.test.js +0 -118
  141. package/dist/test/document/operation-id.test.js.map +0 -1
  142. package/dist/test/document/prune.test.d.ts +0 -2
  143. package/dist/test/document/prune.test.d.ts.map +0 -1
  144. package/dist/test/document/prune.test.js +0 -159
  145. package/dist/test/document/prune.test.js.map +0 -1
  146. package/dist/test/document/reducer.test.d.ts +0 -2
  147. package/dist/test/document/reducer.test.d.ts.map +0 -1
  148. package/dist/test/document/reducer.test.js +0 -284
  149. package/dist/test/document/reducer.test.js.map +0 -1
  150. package/dist/test/document/skip-operations.test.d.ts +0 -2
  151. package/dist/test/document/skip-operations.test.d.ts.map +0 -1
  152. package/dist/test/document/skip-operations.test.js +0 -412
  153. package/dist/test/document/skip-operations.test.js.map +0 -1
  154. package/dist/test/document/undo-redo-v2.test.d.ts +0 -2
  155. package/dist/test/document/undo-redo-v2.test.d.ts.map +0 -1
  156. package/dist/test/document/undo-redo-v2.test.js +0 -207
  157. package/dist/test/document/undo-redo-v2.test.js.map +0 -1
  158. package/dist/test/document/undo-redo.test.d.ts +0 -2
  159. package/dist/test/document/undo-redo.test.d.ts.map +0 -1
  160. package/dist/test/document/undo-redo.test.js +0 -413
  161. package/dist/test/document/undo-redo.test.js.map +0 -1
  162. package/dist/test/document/utils.test.d.ts +0 -2
  163. package/dist/test/document/utils.test.d.ts.map +0 -1
  164. package/dist/test/document/utils.test.js +0 -172
  165. package/dist/test/document/utils.test.js.map +0 -1
  166. package/dist/test/document-helpers/addUndo.test.d.ts +0 -2
  167. package/dist/test/document-helpers/addUndo.test.d.ts.map +0 -1
  168. package/dist/test/document-helpers/addUndo.test.js +0 -120
  169. package/dist/test/document-helpers/addUndo.test.js.map +0 -1
  170. package/dist/test/document-helpers/attachBranch.test.d.ts +0 -2
  171. package/dist/test/document-helpers/attachBranch.test.d.ts.map +0 -1
  172. package/dist/test/document-helpers/attachBranch.test.js +0 -364
  173. package/dist/test/document-helpers/attachBranch.test.js.map +0 -1
  174. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts +0 -2
  175. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts.map +0 -1
  176. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js +0 -252
  177. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js.map +0 -1
  178. package/dist/test/document-helpers/conflictResolution.test.d.ts +0 -2
  179. package/dist/test/document-helpers/conflictResolution.test.d.ts.map +0 -1
  180. package/dist/test/document-helpers/conflictResolution.test.js +0 -109
  181. package/dist/test/document-helpers/conflictResolution.test.js.map +0 -1
  182. package/dist/test/document-helpers/filterDuplicatedOperations.test.d.ts +0 -2
  183. package/dist/test/document-helpers/filterDuplicatedOperations.test.d.ts.map +0 -1
  184. package/dist/test/document-helpers/filterDuplicatedOperations.test.js +0 -126
  185. package/dist/test/document-helpers/filterDuplicatedOperations.test.js.map +0 -1
  186. package/dist/test/document-helpers/garbageCollect.test.d.ts +0 -2
  187. package/dist/test/document-helpers/garbageCollect.test.d.ts.map +0 -1
  188. package/dist/test/document-helpers/garbageCollect.test.js +0 -136
  189. package/dist/test/document-helpers/garbageCollect.test.js.map +0 -1
  190. package/dist/test/document-helpers/groupOperationsByScope.test.d.ts +0 -2
  191. package/dist/test/document-helpers/groupOperationsByScope.test.d.ts.map +0 -1
  192. package/dist/test/document-helpers/groupOperationsByScope.test.js +0 -102
  193. package/dist/test/document-helpers/groupOperationsByScope.test.js.map +0 -1
  194. package/dist/test/document-helpers/merge.test.d.ts +0 -2
  195. package/dist/test/document-helpers/merge.test.d.ts.map +0 -1
  196. package/dist/test/document-helpers/merge.test.js +0 -906
  197. package/dist/test/document-helpers/merge.test.js.map +0 -1
  198. package/dist/test/document-helpers/nextSkipNumber.test.d.ts +0 -2
  199. package/dist/test/document-helpers/nextSkipNumber.test.d.ts.map +0 -1
  200. package/dist/test/document-helpers/nextSkipNumber.test.js +0 -135
  201. package/dist/test/document-helpers/nextSkipNumber.test.js.map +0 -1
  202. package/dist/test/document-helpers/prepareOperations.test.d.ts +0 -2
  203. package/dist/test/document-helpers/prepareOperations.test.d.ts.map +0 -1
  204. package/dist/test/document-helpers/prepareOperations.test.js +0 -304
  205. package/dist/test/document-helpers/prepareOperations.test.js.map +0 -1
  206. package/dist/test/document-helpers/removeExistingOperations.test.d.ts +0 -2
  207. package/dist/test/document-helpers/removeExistingOperations.test.d.ts.map +0 -1
  208. package/dist/test/document-helpers/removeExistingOperations.test.js +0 -177
  209. package/dist/test/document-helpers/removeExistingOperations.test.js.map +0 -1
  210. package/dist/test/document-helpers/reshuffleByTimestamp.test.d.ts +0 -2
  211. package/dist/test/document-helpers/reshuffleByTimestamp.test.d.ts.map +0 -1
  212. package/dist/test/document-helpers/reshuffleByTimestamp.test.js +0 -148
  213. package/dist/test/document-helpers/reshuffleByTimestamp.test.js.map +0 -1
  214. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts +0 -2
  215. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts.map +0 -1
  216. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js +0 -200
  217. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js.map +0 -1
  218. package/dist/test/document-helpers/skipHeaderOperations.test.d.ts +0 -2
  219. package/dist/test/document-helpers/skipHeaderOperations.test.d.ts.map +0 -1
  220. package/dist/test/document-helpers/skipHeaderOperations.test.js +0 -72
  221. package/dist/test/document-helpers/skipHeaderOperations.test.js.map +0 -1
  222. package/dist/test/document-helpers/sortOperations.test.d.ts +0 -2
  223. package/dist/test/document-helpers/sortOperations.test.d.ts.map +0 -1
  224. package/dist/test/document-helpers/sortOperations.test.js +0 -101
  225. package/dist/test/document-helpers/sortOperations.test.js.map +0 -1
  226. package/dist/test/document-helpers/split.test.d.ts +0 -2
  227. package/dist/test/document-helpers/split.test.d.ts.map +0 -1
  228. package/dist/test/document-helpers/split.test.js +0 -121
  229. package/dist/test/document-helpers/split.test.js.map +0 -1
  230. package/dist/test/document-helpers/utils.d.ts +0 -15
  231. package/dist/test/document-helpers/utils.d.ts.map +0 -1
  232. package/dist/test/document-helpers/utils.js +0 -61
  233. package/dist/test/document-helpers/utils.js.map +0 -1
  234. package/dist/test/document-model/replay.test.d.ts +0 -2
  235. package/dist/test/document-model/replay.test.d.ts.map +0 -1
  236. package/dist/test/document-model/replay.test.js +0 -139
  237. package/dist/test/document-model/replay.test.js.map +0 -1
  238. package/dist/test/document-model/skip-operations.test.d.ts +0 -2
  239. package/dist/test/document-model/skip-operations.test.d.ts.map +0 -1
  240. package/dist/test/document-model/skip-operations.test.js +0 -214
  241. package/dist/test/document-model/skip-operations.test.js.map +0 -1
  242. package/dist/test/document-model/validation.test.d.ts +0 -2
  243. package/dist/test/document-model/validation.test.d.ts.map +0 -1
  244. package/dist/test/document-model/validation.test.js +0 -451
  245. package/dist/test/document-model/validation.test.js.map +0 -1
  246. package/dist/test/document-model/versioning.test.d.ts +0 -2
  247. package/dist/test/document-model/versioning.test.d.ts.map +0 -1
  248. package/dist/test/document-model/versioning.test.js +0 -93
  249. package/dist/test/document-model/versioning.test.js.map +0 -1
  250. package/dist/test/document-model/zip.test.d.ts +0 -2
  251. package/dist/test/document-model/zip.test.d.ts.map +0 -1
  252. package/dist/test/document-model/zip.test.js +0 -79
  253. package/dist/test/document-model/zip.test.js.map +0 -1
  254. package/dist/test/helpers.d.ts +0 -77
  255. package/dist/test/helpers.d.ts.map +0 -1
  256. package/dist/test/helpers.js +0 -118
  257. package/dist/test/helpers.js.map +0 -1
  258. package/dist/test/index.d.ts +0 -4
  259. package/dist/test/index.d.ts.map +0 -1
  260. package/dist/test/index.js +0 -3
  261. package/dist/test/index.js.map +0 -1
  262. package/dist/test/types.d.ts +0 -6
  263. package/dist/test/types.d.ts.map +0 -1
  264. package/dist/test/types.js +0 -2
  265. package/dist/test/types.js.map +0 -1
  266. package/dist/tsconfig.tsbuildinfo +0 -1
  267. package/dist/vitest.config.d.ts +0 -3
  268. package/dist/vitest.config.d.ts.map +0 -1
  269. package/dist/vitest.config.js +0 -7
  270. package/dist/vitest.config.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"undo-redo-v2.test.js","sourceRoot":"","sources":["../../../test/document/undo-redo-v2.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=undo-redo.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"undo-redo.test.d.ts","sourceRoot":"","sources":["../../../test/document/undo-redo.test.ts"],"names":[],"mappings":""}
@@ -1,413 +0,0 @@
1
- import { baseCreateDocument, deriveOperationId, noop, processUndoRedo, redo, undo, } from "document-model/core";
2
- import { countReducer, createCountDocumentState, increment, testCreateBaseState, } from "document-model/test";
3
- import { beforeEach, describe, expect, it } from "vitest";
4
- describe("UNDO/REDO", () => {
5
- let document;
6
- beforeEach(() => {
7
- const initialState = testCreateBaseState({ count: 0 }, { name: "" });
8
- document = baseCreateDocument(createCountDocumentState, initialState);
9
- document = countReducer(document, increment());
10
- document = countReducer(document, increment());
11
- document = countReducer(document, increment());
12
- document = countReducer(document, increment());
13
- document = countReducer(document, increment());
14
- });
15
- describe("processUndoRedo -> UNDO", () => {
16
- it("should return a NOOP action when an UNDO action is dispatched", () => {
17
- const skip = 0;
18
- const undoAction = undo();
19
- const result = processUndoRedo(document, undoAction, skip);
20
- expect(result.action.type).toBe("NOOP");
21
- });
22
- it("should return skip = undo value if there's no skip value passed to the reducer", () => {
23
- const skip = 0;
24
- const undoAction = undo();
25
- const result = processUndoRedo(document, undoAction, skip);
26
- expect(result.skip).toBe(1);
27
- expect(result.action.type).toBe("NOOP");
28
- });
29
- it("should return skip = undo value + previous NOOP skip value, when latest action is NOOP with skip > 0", () => {
30
- const skip = 0;
31
- const undoAction = undo();
32
- document = countReducer(document, noop(), undefined, {
33
- skip: 3,
34
- ignoreSkipOperations: true,
35
- });
36
- const result = processUndoRedo(document, undoAction, skip);
37
- expect(result.skip).toBe(4);
38
- expect(result.action.type).toBe("NOOP");
39
- });
40
- it("should NOT remove latest operation if !== NOOP", () => {
41
- const skip = 0;
42
- const undoAction = undo();
43
- const result = processUndoRedo(document, undoAction, skip);
44
- expect(result.skip).toBe(1);
45
- expect(result.document.operations.global.length).toBe(5);
46
- expect(result.document.operations.global[4].action.type).toBe("INCREMENT");
47
- });
48
- it("should NOT remove latest operation if is a NOOP with skip = 0", () => {
49
- const skip = 0;
50
- const undoAction = undo();
51
- document = countReducer(document, noop(), undefined, {
52
- skip: 0,
53
- ignoreSkipOperations: true,
54
- });
55
- const result = processUndoRedo(document, undoAction, skip);
56
- expect(result.skip).toBe(1);
57
- expect(result.document.operations.global.length).toBe(6);
58
- expect(result.document.operations.global[5].action.type).toBe("NOOP");
59
- });
60
- it("should throw an error if you try to undone more operations than the ones available", () => {
61
- const initialState = testCreateBaseState({ count: 0 }, { name: "" });
62
- document = baseCreateDocument(createCountDocumentState, initialState);
63
- const skip = 0;
64
- const undoAction = undo();
65
- const throwErrorFunc = () => processUndoRedo(document, undoAction, skip);
66
- expect(throwErrorFunc).toThrow("Cannot undo: you can't undo more operations than the ones in the scope history");
67
- });
68
- });
69
- describe("processUndoRedo -> REDO", () => {
70
- it("should throw an error when there's no operation to redo in the clipboard", () => {
71
- const initialState = testCreateBaseState({ count: 0 }, { name: "" });
72
- document = baseCreateDocument(createCountDocumentState, initialState);
73
- const skip = 0;
74
- const redoAction = redo();
75
- const throwErrorFunc = () => processUndoRedo(document, redoAction, skip);
76
- expect(throwErrorFunc).toThrow("Cannot redo: no operations in the clipboard");
77
- });
78
- it("should throw an error if you try to redo more than 1 operation", () => {
79
- const skip = 0;
80
- const redoAction = redo(2);
81
- const throwErrorFunc = () => processUndoRedo(document, redoAction, skip);
82
- expect(throwErrorFunc).toThrow("Cannot redo: you can only redo one operation at a time");
83
- });
84
- it("should throw an error if you try to redo with an skip value", () => {
85
- const skip = 1;
86
- const redoAction = redo(1);
87
- const throwErrorFunc = () => processUndoRedo(document, redoAction, skip);
88
- expect(throwErrorFunc).toThrow("Cannot redo: skip value from reducer cannot be used with REDO action");
89
- });
90
- it("should throw an error if there's no operations for the scope in the clipboard", () => {
91
- const skip = 0;
92
- const redoAction = redo(1, "local");
93
- document = countReducer(document, undo(1));
94
- const throwErrorFunc = () => processUndoRedo(document, redoAction, skip);
95
- expect(throwErrorFunc).toThrow('Cannot redo: no operations in clipboard for scope "local"');
96
- });
97
- it("should transform REDO action into the latest valid action stored in the clipboard", () => {
98
- const skip = 0;
99
- const redoAction = redo(1);
100
- document = countReducer(document, undo(1));
101
- const result = processUndoRedo(document, redoAction, skip);
102
- expect(result.action.type).toBe("INCREMENT");
103
- expect(result.action.scope).toBe("global");
104
- expect(result.action.input).toStrictEqual({});
105
- });
106
- it("should remove the latest valid action from the clipboard", () => {
107
- const skip = 0;
108
- const redoAction = redo(1);
109
- document = countReducer(document, undo(1));
110
- expect(document.clipboard.length).toBe(1);
111
- const result = processUndoRedo(document, redoAction, skip);
112
- expect(result.document.clipboard.length).toBe(0);
113
- });
114
- });
115
- describe("UNDO", () => {
116
- it("should undo operations", () => {
117
- document = countReducer(document, undo(1));
118
- expect(document.header.revision.global).toBe(6);
119
- expect(document.state.global.count).toBe(4);
120
- expect(document.clipboard.length).toBe(1);
121
- expect(document.clipboard[0].action.type).toBe("INCREMENT");
122
- expect(document.clipboard[0].index).toBe(4);
123
- expect(document.operations.global.length).toBe(5);
124
- expect(document.operations.global[4]).toMatchObject({
125
- type: "NOOP",
126
- index: 5,
127
- skip: 1,
128
- });
129
- expect(document.operations.global[3]).toMatchObject({
130
- type: "INCREMENT",
131
- index: 3,
132
- skip: 0,
133
- });
134
- expect(document.operations.global[2]).toMatchObject({
135
- type: "INCREMENT",
136
- index: 2,
137
- skip: 0,
138
- });
139
- });
140
- it("should increase skip value of a previous undo Operation", () => {
141
- document = countReducer(document, undo());
142
- document = countReducer(document, undo());
143
- document = countReducer(document, undo());
144
- expect(document.header.revision.global).toBe(6);
145
- expect(document.state.global.count).toBe(2);
146
- expect(document.clipboard.length).toBe(3);
147
- expect(document.clipboard[0].action.type).toBe("INCREMENT");
148
- expect(document.clipboard[0].index).toBe(4);
149
- expect(document.clipboard[1].action.type).toBe("INCREMENT");
150
- expect(document.clipboard[1].index).toBe(3);
151
- expect(document.clipboard[2].action.type).toBe("INCREMENT");
152
- expect(document.clipboard[2].index).toBe(2);
153
- expect(document.operations.global.length).toBe(3);
154
- expect(document.operations.global[2]).toMatchObject({
155
- type: "NOOP",
156
- index: 5,
157
- skip: 3,
158
- });
159
- expect(document.operations.global[1]).toMatchObject({
160
- type: "INCREMENT",
161
- index: 1,
162
- skip: 0,
163
- });
164
- expect(document.operations.global[0]).toMatchObject({
165
- type: "INCREMENT",
166
- index: 0,
167
- skip: 0,
168
- });
169
- });
170
- it("should undo the latest valid operation if undo overlaps with a previous undo operation", () => {
171
- document = countReducer(document, undo());
172
- document = countReducer(document, undo());
173
- document = countReducer(document, undo());
174
- document = countReducer(document, increment());
175
- document = countReducer(document, increment());
176
- document = countReducer(document, undo());
177
- document = countReducer(document, undo());
178
- document = countReducer(document, undo());
179
- expect(document.header.revision.global).toBe(9);
180
- expect(document.state.global.count).toBe(1);
181
- expect(document.clipboard.length).toBe(3);
182
- expect(document.clipboard[0].action.type).toBe("INCREMENT");
183
- expect(document.clipboard[0].index).toBe(7);
184
- expect(document.clipboard[1].action.type).toBe("INCREMENT");
185
- expect(document.clipboard[1].index).toBe(6);
186
- expect(document.clipboard[2].action.type).toBe("INCREMENT");
187
- expect(document.clipboard[2].index).toBe(1);
188
- expect(document.operations.global.length).toBe(2);
189
- expect(document.operations.global).toMatchObject([
190
- {
191
- type: "INCREMENT",
192
- index: 0,
193
- skip: 0,
194
- },
195
- {
196
- type: "NOOP",
197
- index: 8,
198
- skip: 7,
199
- },
200
- ]);
201
- });
202
- it("should undo the latest valid operation if undo overlaps with 2 previous undo operations", () => {
203
- document = countReducer(document, undo());
204
- document = countReducer(document, increment());
205
- document = countReducer(document, undo());
206
- document = countReducer(document, undo());
207
- document = countReducer(document, increment());
208
- document = countReducer(document, undo());
209
- document = countReducer(document, undo());
210
- expect(document.header.revision.global).toBe(10);
211
- expect(document.state.global.count).toBe(2);
212
- expect(document.clipboard.length).toBe(2);
213
- expect(document.clipboard[0].action.type).toBe("INCREMENT");
214
- expect(document.clipboard[0].index).toBe(8);
215
- expect(document.clipboard[1].action.type).toBe("INCREMENT");
216
- expect(document.clipboard[1].index).toBe(2);
217
- expect(document.operations.global.length).toBe(3);
218
- expect(document.operations.global).toMatchObject([
219
- {
220
- type: "INCREMENT",
221
- index: 0,
222
- skip: 0,
223
- },
224
- {
225
- type: "INCREMENT",
226
- index: 1,
227
- skip: 0,
228
- },
229
- {
230
- type: "NOOP",
231
- index: 9,
232
- skip: 7,
233
- },
234
- ]);
235
- });
236
- });
237
- describe("REDO", () => {
238
- it("should redo the latest operation", () => {
239
- document = countReducer(document, undo());
240
- document = countReducer(document, undo());
241
- document = countReducer(document, redo());
242
- expect(document.header.revision.global).toBe(7);
243
- expect(document.state.global.count).toBe(4);
244
- expect(document.operations.global.length).toBe(5);
245
- expect(document.clipboard.length).toBe(1);
246
- expect(document.operations.global[4]).toMatchObject({
247
- type: "INCREMENT",
248
- index: 6,
249
- });
250
- });
251
- it("should revert document state to the latest state before applying an undo", () => {
252
- document = countReducer(document, undo());
253
- document = countReducer(document, undo());
254
- document = countReducer(document, redo());
255
- document = countReducer(document, redo());
256
- expect(document.header.revision.global).toBe(8);
257
- expect(document.state.global.count).toBe(5);
258
- expect(document.operations.global.length).toBe(6);
259
- expect(document.clipboard.length).toBe(0);
260
- expect(document.operations.global[5]).toMatchObject({
261
- type: "INCREMENT",
262
- index: 7,
263
- skip: 0,
264
- });
265
- expect(document.operations.global[4]).toMatchObject({
266
- type: "INCREMENT",
267
- index: 6,
268
- skip: 0,
269
- });
270
- expect(document.operations.global[3]).toMatchObject({
271
- type: "NOOP",
272
- index: 5,
273
- skip: 2,
274
- });
275
- expect(document.operations.global[2]).toMatchObject({
276
- type: "INCREMENT",
277
- index: 2,
278
- skip: 0,
279
- });
280
- expect(document.operations.global[1]).toMatchObject({
281
- type: "INCREMENT",
282
- index: 1,
283
- skip: 0,
284
- });
285
- expect(document.operations.global[0]).toMatchObject({
286
- type: "INCREMENT",
287
- index: 0,
288
- skip: 0,
289
- });
290
- });
291
- it("should clean clipboard after applying an action that's not UNDO/REDO", () => {
292
- document = countReducer(document, undo());
293
- document = countReducer(document, undo());
294
- document = countReducer(document, increment());
295
- expect(document.header.revision.global).toBe(7);
296
- expect(document.state.global.count).toBe(4);
297
- expect(document.operations.global.length).toBe(5);
298
- expect(document.clipboard.length).toBe(0);
299
- });
300
- });
301
- describe("NOOP operations", () => {
302
- it("should apply NOOP operations", () => {
303
- const op = {
304
- // using a fixed id, even though Action ids and Operation ids are different
305
- id: "noop-1",
306
- timestampUtcMs: new Date().toISOString(),
307
- input: {},
308
- type: "NOOP",
309
- skip: 1,
310
- index: 5,
311
- scope: "global",
312
- hash: "Ki38EB6gkUcnU3ceRsc88njPo3U=",
313
- };
314
- document = countReducer(document, op, undefined, {
315
- skip: 1,
316
- });
317
- expect(document.header.revision.global).toBe(6);
318
- expect(document.state.global.count).toBe(4);
319
- expect(document.operations.global.length).toBe(5);
320
- expect(document.operations.global[4]).toMatchObject({
321
- type: "NOOP",
322
- index: 5,
323
- skip: 1,
324
- });
325
- });
326
- it("should replace previous noop operation and update skip number when a new noop is dispatched after another one", () => {
327
- const baseAction = {
328
- id: "noop-2",
329
- timestampUtcMs: new Date().toISOString(),
330
- input: {},
331
- type: "NOOP",
332
- scope: "global",
333
- };
334
- const baseOperation = {
335
- id: undefined,
336
- skip: 0,
337
- index: 5,
338
- hash: "Ki38EB6gkUcnU3ceRsc88njPo3U=",
339
- timestampUtcMs: new Date().toISOString(),
340
- action: baseAction,
341
- };
342
- const action1 = { ...baseAction, id: "noop-1" };
343
- const action2 = { ...baseAction, id: "noop-2" };
344
- const action3 = { ...baseAction, id: "noop-3" };
345
- const op1 = {
346
- ...baseOperation,
347
- id: deriveOperationId(document.header.id, "global", "main", action1.id),
348
- skip: 1,
349
- action: action1,
350
- };
351
- const op2 = {
352
- ...baseOperation,
353
- id: deriveOperationId(document.header.id, "global", "main", action2.id),
354
- skip: 2,
355
- action: action2,
356
- };
357
- const op3 = {
358
- ...baseOperation,
359
- id: deriveOperationId(document.header.id, "global", "main", action3.id),
360
- skip: 3,
361
- action: action3,
362
- };
363
- document = countReducer(document, action1, undefined, {
364
- pruneOnSkip: true,
365
- skip: 1,
366
- replayOptions: {
367
- operation: op1,
368
- },
369
- });
370
- document = countReducer(document, action2, undefined, {
371
- pruneOnSkip: true,
372
- skip: 2,
373
- replayOptions: {
374
- operation: op2,
375
- },
376
- });
377
- document = countReducer(document, action3, undefined, {
378
- pruneOnSkip: true,
379
- skip: 3,
380
- replayOptions: {
381
- operation: op3,
382
- },
383
- });
384
- expect(document.header.revision.global).toBe(6);
385
- expect(document.state.global.count).toBe(2);
386
- expect(document.operations.global.length).toBe(3);
387
- expect(document.operations.global[2]).toMatchObject({
388
- index: 5,
389
- skip: 3,
390
- });
391
- expect(document.operations.global[2].action).toMatchObject({
392
- type: "NOOP",
393
- });
394
- });
395
- it("NOOP operation should not add skipped operation to the clipboard", () => {
396
- const op = {
397
- id: "noop-3",
398
- input: {},
399
- type: "NOOP",
400
- skip: 1,
401
- index: 5,
402
- scope: "global",
403
- hash: "Ki38EB6gkUcnU3ceRsc88njPo3U=",
404
- timestampUtcMs: new Date().toISOString(),
405
- };
406
- document = countReducer(document, op, undefined, {
407
- skip: 1,
408
- });
409
- expect(document.clipboard.length).toBe(0);
410
- });
411
- });
412
- });
413
- //# sourceMappingURL=undo-redo.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"undo-redo.test.js","sourceRoot":"","sources":["../../../test/document/undo-redo.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../../test/document/utils.test.ts"],"names":[],"mappings":""}
@@ -1,172 +0,0 @@
1
- import { baseCreateDocument, createReducer, deriveOperationId, generateId, hashBrowser, replayDocument, validateOperations, } from "document-model/core";
2
- import { getLocalFile, hashNode } from "document-model/node";
3
- import { countReducer, createCountDocumentState, fakeAction, increment, mutableCountReducer, setLocalName, testCreateBaseState, } from "document-model/test";
4
- import fs from "fs";
5
- import { afterAll, beforeAll, describe, expect, it } from "vitest";
6
- describe("Base utils", () => {
7
- const tempDir = "./test/document/temp/utils/";
8
- const tempFile = `${tempDir}report.pdf`;
9
- beforeAll(() => {
10
- if (!fs.existsSync(tempDir))
11
- fs.mkdirSync(tempDir, {
12
- recursive: true,
13
- });
14
- fs.writeFileSync(tempFile, "TEST");
15
- });
16
- afterAll(() => {
17
- fs.rmSync(tempDir, { recursive: true, force: true });
18
- });
19
- it("should parse file attributes", async () => {
20
- const file = await getLocalFile(tempFile);
21
- expect(file).toStrictEqual({
22
- data: "VEVTVA==",
23
- hash: "Q1pqSc2iiEdpNLjRefhjnQ3nNc8=",
24
- mimeType: "application/pdf",
25
- extension: "pdf",
26
- fileName: "report.pdf",
27
- });
28
- });
29
- it("should throw exception when file doesn't exists", async () => {
30
- await expect(getLocalFile("as")).rejects.toBeDefined();
31
- });
32
- it("should return uuidv4 on generateId", () => {
33
- expect(generateId()).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i);
34
- });
35
- it("should hash in browser and node", () => {
36
- expect(hashNode("test")).toEqual(hashBrowser("test"));
37
- });
38
- it("should find invalid index oprations", () => {
39
- const TEST_DOC_ID = "test-doc-id";
40
- const TEST_BRANCH = "main";
41
- const a1 = fakeAction({
42
- type: "TEST_ACTION",
43
- input: { id: "test" },
44
- scope: "global",
45
- });
46
- const a2 = fakeAction({
47
- type: "TEST_ACTION",
48
- input: { id: "test" },
49
- scope: "global",
50
- });
51
- const a3 = fakeAction({
52
- type: "TEST_ACTION",
53
- input: { id: "test" },
54
- scope: "local",
55
- });
56
- const errors = validateOperations({
57
- global: [
58
- {
59
- id: deriveOperationId(TEST_DOC_ID, "global", TEST_BRANCH, a1.id),
60
- hash: "",
61
- index: 0,
62
- skip: 0,
63
- timestampUtcMs: "",
64
- action: a1,
65
- },
66
- {
67
- id: deriveOperationId(TEST_DOC_ID, "global", TEST_BRANCH, a2.id),
68
- hash: "",
69
- index: 0,
70
- skip: 0,
71
- timestampUtcMs: "",
72
- action: a2,
73
- },
74
- ],
75
- local: [
76
- {
77
- id: deriveOperationId(TEST_DOC_ID, "local", TEST_BRANCH, a3.id),
78
- hash: "",
79
- index: 0,
80
- skip: 0,
81
- timestampUtcMs: "",
82
- action: a3,
83
- },
84
- ],
85
- });
86
- expect(errors).toHaveLength(1);
87
- expect(errors[0].message).toStrictEqual("Invalid operation index 0 at position 1");
88
- });
89
- it("should work with garbage collected operations", () => {
90
- const TEST_DOC_ID = "test-doc-id";
91
- const TEST_BRANCH = "main";
92
- const g1 = fakeAction({
93
- type: "TEST_ACTION",
94
- input: { id: "test" },
95
- scope: "global",
96
- });
97
- const g2 = fakeAction({
98
- type: "TEST_ACTION",
99
- input: { id: "test" },
100
- scope: "global",
101
- });
102
- const g3 = fakeAction({
103
- type: "TEST_ACTION",
104
- input: { id: "test" },
105
- scope: "global",
106
- });
107
- const l1 = fakeAction({
108
- type: "TEST_ACTION",
109
- input: { id: "test" },
110
- scope: "local",
111
- });
112
- const errors = validateOperations({
113
- global: [
114
- {
115
- id: deriveOperationId(TEST_DOC_ID, "global", TEST_BRANCH, g1.id),
116
- hash: "",
117
- index: 0,
118
- skip: 0,
119
- timestampUtcMs: "",
120
- action: g1,
121
- },
122
- {
123
- id: deriveOperationId(TEST_DOC_ID, "global", TEST_BRANCH, g2.id),
124
- hash: "",
125
- index: 1,
126
- skip: 0,
127
- timestampUtcMs: "",
128
- action: g2,
129
- },
130
- {
131
- id: deriveOperationId(TEST_DOC_ID, "global", TEST_BRANCH, g3.id),
132
- hash: "",
133
- index: 3,
134
- skip: 1,
135
- timestampUtcMs: "",
136
- action: g3,
137
- },
138
- ],
139
- local: [
140
- {
141
- id: deriveOperationId(TEST_DOC_ID, "local", TEST_BRANCH, l1.id),
142
- hash: "",
143
- index: 0,
144
- skip: 0,
145
- timestampUtcMs: "",
146
- action: l1,
147
- },
148
- ],
149
- });
150
- expect(errors).toHaveLength(0);
151
- });
152
- it("should replay document and keep lastModified timestamp", async () => {
153
- const document = baseCreateDocument(createCountDocumentState, testCreateBaseState({ count: 0 }, { name: "" }));
154
- const newDocument = countReducer(document, setLocalName("test"));
155
- await new Promise((resolve) => setTimeout(resolve, 100));
156
- const replayedDocument = replayDocument(document.initialState, newDocument.operations, countReducer, newDocument.header);
157
- expect(newDocument.state).toStrictEqual(replayedDocument.state);
158
- expect(newDocument.header.lastModifiedAtUtcIso).toBe(replayedDocument.header.lastModifiedAtUtcIso);
159
- expect(newDocument.operations.global.map((o) => o.timestampUtcMs)).toStrictEqual(replayedDocument.operations.global.map((o) => o.timestampUtcMs));
160
- });
161
- it("should work with mutable reducer", () => {
162
- const reducer = createReducer(mutableCountReducer);
163
- const document = baseCreateDocument(createCountDocumentState, testCreateBaseState({ count: 0 }, { name: "" }));
164
- const newDocument = reducer(document, increment());
165
- expect(newDocument.state.global.count).toBe(1);
166
- expect(document.state.global.count).toBe(0);
167
- const finalDocument = reducer(newDocument, setLocalName("test"));
168
- expect(newDocument.state.local.name).toBe("");
169
- expect(finalDocument.state.local.name).toBe("test");
170
- });
171
- });
172
- //# sourceMappingURL=utils.test.js.map