document-drive 1.29.12-dev.0 → 1.29.12-dev.1

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 (186) hide show
  1. package/dist/src/cache/memory.js +1 -1
  2. package/dist/src/cache/memory.js.map +1 -1
  3. package/dist/src/cache/redis.js +1 -1
  4. package/dist/src/cache/redis.js.map +1 -1
  5. package/dist/src/cache/util.d.ts.map +1 -1
  6. package/dist/src/drive-document-model/gen/constants.d.ts.map +1 -1
  7. package/dist/src/drive-document-model/gen/constants.js +0 -1
  8. package/dist/src/drive-document-model/gen/constants.js.map +1 -1
  9. package/dist/src/drive-document-model/gen/drive/creators.d.ts.map +1 -1
  10. package/dist/src/drive-document-model/gen/node/creators.d.ts.map +1 -1
  11. package/dist/src/drive-document-model/gen/schema/types.d.ts +0 -1
  12. package/dist/src/drive-document-model/gen/schema/types.d.ts.map +1 -1
  13. package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -1
  14. package/dist/src/drive-document-model/src/tests/actions.test.d.ts +2 -0
  15. package/dist/src/drive-document-model/src/tests/actions.test.d.ts.map +1 -0
  16. package/dist/src/drive-document-model/src/tests/actions.test.js +221 -0
  17. package/dist/src/drive-document-model/src/tests/actions.test.js.map +1 -0
  18. package/dist/src/drive-document-model/src/tests/base.test.d.ts +2 -0
  19. package/dist/src/drive-document-model/src/tests/base.test.d.ts.map +1 -0
  20. package/dist/src/drive-document-model/src/tests/base.test.js +116 -0
  21. package/dist/src/drive-document-model/src/tests/base.test.js.map +1 -0
  22. package/dist/src/drive-document-model/src/tests/document-model.test.d.ts +6 -0
  23. package/dist/src/drive-document-model/src/tests/document-model.test.d.ts.map +1 -0
  24. package/dist/src/drive-document-model/src/tests/document-model.test.js +20 -0
  25. package/dist/src/drive-document-model/src/tests/document-model.test.js.map +1 -0
  26. package/dist/src/drive-document-model/src/tests/drive.test.d.ts +6 -0
  27. package/dist/src/drive-document-model/src/tests/drive.test.d.ts.map +1 -0
  28. package/dist/src/drive-document-model/src/tests/drive.test.js +41 -0
  29. package/dist/src/drive-document-model/src/tests/drive.test.js.map +1 -0
  30. package/dist/src/drive-document-model/src/tests/node.test.d.ts +6 -0
  31. package/dist/src/drive-document-model/src/tests/node.test.d.ts.map +1 -0
  32. package/dist/src/drive-document-model/src/tests/node.test.js +376 -0
  33. package/dist/src/drive-document-model/src/tests/node.test.js.map +1 -0
  34. package/dist/src/drive-document-model/src/tests/utils.test.d.ts +2 -0
  35. package/dist/src/drive-document-model/src/tests/utils.test.d.ts.map +1 -0
  36. package/dist/src/drive-document-model/src/tests/utils.test.js +262 -0
  37. package/dist/src/drive-document-model/src/tests/utils.test.js.map +1 -0
  38. package/dist/src/read-mode/service.d.ts.map +1 -1
  39. package/dist/src/read-mode/service.js +8 -1
  40. package/dist/src/read-mode/service.js.map +1 -1
  41. package/dist/src/server/base-server.d.ts.map +1 -1
  42. package/dist/src/server/base-server.js +15 -11
  43. package/dist/src/server/base-server.js.map +1 -1
  44. package/dist/src/server/listener/util.d.ts.map +1 -1
  45. package/dist/src/server/types.d.ts +2 -3
  46. package/dist/src/server/types.d.ts.map +1 -1
  47. package/dist/src/storage/browser.d.ts +1 -1
  48. package/dist/src/storage/browser.d.ts.map +1 -1
  49. package/dist/src/storage/browser.js +2 -1
  50. package/dist/src/storage/browser.js.map +1 -1
  51. package/dist/src/storage/filesystem.d.ts +1 -1
  52. package/dist/src/storage/filesystem.d.ts.map +1 -1
  53. package/dist/src/storage/filesystem.js +2 -1
  54. package/dist/src/storage/filesystem.js.map +1 -1
  55. package/dist/src/storage/ipfs.d.ts +1 -1
  56. package/dist/src/storage/ipfs.d.ts.map +1 -1
  57. package/dist/src/storage/ipfs.js +2 -1
  58. package/dist/src/storage/ipfs.js.map +1 -1
  59. package/dist/src/storage/memory.d.ts +1 -1
  60. package/dist/src/storage/memory.d.ts.map +1 -1
  61. package/dist/src/storage/memory.js +2 -1
  62. package/dist/src/storage/memory.js.map +1 -1
  63. package/dist/src/storage/prisma/prisma.d.ts +1 -1
  64. package/dist/src/storage/prisma/prisma.d.ts.map +1 -1
  65. package/dist/src/storage/prisma/prisma.js +5 -3
  66. package/dist/src/storage/prisma/prisma.js.map +1 -1
  67. package/dist/src/storage/types.d.ts +1 -1
  68. package/dist/src/storage/types.d.ts.map +1 -1
  69. package/dist/src/storage/utils.d.ts.map +1 -1
  70. package/dist/src/utils/default-drives-manager.js +3 -3
  71. package/dist/src/utils/default-drives-manager.js.map +1 -1
  72. package/dist/src/utils/graphql.d.ts.map +1 -1
  73. package/dist/src/utils/graphql.js +11 -7
  74. package/dist/src/utils/graphql.js.map +1 -1
  75. package/dist/src/utils/logger.d.ts.map +1 -1
  76. package/dist/test/cache.test.d.ts +2 -0
  77. package/dist/test/cache.test.d.ts.map +1 -0
  78. package/dist/test/cache.test.js +281 -0
  79. package/dist/test/cache.test.js.map +1 -0
  80. package/dist/test/default-remote-drives.test.d.ts +2 -0
  81. package/dist/test/default-remote-drives.test.d.ts.map +1 -0
  82. package/dist/test/default-remote-drives.test.js +446 -0
  83. package/dist/test/default-remote-drives.test.js.map +1 -0
  84. package/dist/test/document-helpers/addUndo.test.d.ts +2 -0
  85. package/dist/test/document-helpers/addUndo.test.d.ts.map +1 -0
  86. package/dist/test/document-helpers/addUndo.test.js +120 -0
  87. package/dist/test/document-helpers/addUndo.test.js.map +1 -0
  88. package/dist/test/document-helpers/attachBranch.test.d.ts +2 -0
  89. package/dist/test/document-helpers/attachBranch.test.d.ts.map +1 -0
  90. package/dist/test/document-helpers/attachBranch.test.js +333 -0
  91. package/dist/test/document-helpers/attachBranch.test.js.map +1 -0
  92. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts +2 -0
  93. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts.map +1 -0
  94. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js +252 -0
  95. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js.map +1 -0
  96. package/dist/test/document-helpers/garbageCollect.test.d.ts +2 -0
  97. package/dist/test/document-helpers/garbageCollect.test.d.ts.map +1 -0
  98. package/dist/test/document-helpers/garbageCollect.test.js +136 -0
  99. package/dist/test/document-helpers/garbageCollect.test.js.map +1 -0
  100. package/dist/test/document-helpers/groupOperationsByScope.test.d.ts +2 -0
  101. package/dist/test/document-helpers/groupOperationsByScope.test.d.ts.map +1 -0
  102. package/dist/test/document-helpers/groupOperationsByScope.test.js +98 -0
  103. package/dist/test/document-helpers/groupOperationsByScope.test.js.map +1 -0
  104. package/dist/test/document-helpers/merge.test.d.ts +2 -0
  105. package/dist/test/document-helpers/merge.test.d.ts.map +1 -0
  106. package/dist/test/document-helpers/merge.test.js +757 -0
  107. package/dist/test/document-helpers/merge.test.js.map +1 -0
  108. package/dist/test/document-helpers/nextSkipNumber.test.d.ts +2 -0
  109. package/dist/test/document-helpers/nextSkipNumber.test.d.ts.map +1 -0
  110. package/dist/test/document-helpers/nextSkipNumber.test.js +123 -0
  111. package/dist/test/document-helpers/nextSkipNumber.test.js.map +1 -0
  112. package/dist/test/document-helpers/prepareOperations.test.d.ts +2 -0
  113. package/dist/test/document-helpers/prepareOperations.test.d.ts.map +1 -0
  114. package/dist/test/document-helpers/prepareOperations.test.js +304 -0
  115. package/dist/test/document-helpers/prepareOperations.test.js.map +1 -0
  116. package/dist/test/document-helpers/removeExistingOperations.test.d.ts +2 -0
  117. package/dist/test/document-helpers/removeExistingOperations.test.d.ts.map +1 -0
  118. package/dist/test/document-helpers/removeExistingOperations.test.js +150 -0
  119. package/dist/test/document-helpers/removeExistingOperations.test.js.map +1 -0
  120. package/dist/test/document-helpers/reshuffleByTimestamp.test.d.ts +2 -0
  121. package/dist/test/document-helpers/reshuffleByTimestamp.test.d.ts.map +1 -0
  122. package/dist/test/document-helpers/reshuffleByTimestamp.test.js +148 -0
  123. package/dist/test/document-helpers/reshuffleByTimestamp.test.js.map +1 -0
  124. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts +2 -0
  125. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts.map +1 -0
  126. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js +200 -0
  127. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js.map +1 -0
  128. package/dist/test/document-helpers/sortOperations.test.d.ts +2 -0
  129. package/dist/test/document-helpers/sortOperations.test.d.ts.map +1 -0
  130. package/dist/test/document-helpers/sortOperations.test.js +101 -0
  131. package/dist/test/document-helpers/sortOperations.test.js.map +1 -0
  132. package/dist/test/document-helpers/split.test.d.ts +2 -0
  133. package/dist/test/document-helpers/split.test.d.ts.map +1 -0
  134. package/dist/test/document-helpers/split.test.js +121 -0
  135. package/dist/test/document-helpers/split.test.js.map +1 -0
  136. package/dist/test/document-helpers/utils.d.ts.map +1 -1
  137. package/dist/test/drive-operations.test.d.ts +2 -0
  138. package/dist/test/drive-operations.test.d.ts.map +1 -0
  139. package/dist/test/drive-operations.test.js +145 -0
  140. package/dist/test/drive-operations.test.js.map +1 -0
  141. package/dist/test/graphql.test.d.ts +2 -0
  142. package/dist/test/graphql.test.d.ts.map +1 -0
  143. package/dist/test/graphql.test.js +10 -0
  144. package/dist/test/graphql.test.js.map +1 -0
  145. package/dist/test/internal-listener.test.d.ts +2 -0
  146. package/dist/test/internal-listener.test.d.ts.map +1 -0
  147. package/dist/test/internal-listener.test.js +274 -0
  148. package/dist/test/internal-listener.test.js.map +1 -0
  149. package/dist/test/queue.test.d.ts +2 -0
  150. package/dist/test/queue.test.d.ts.map +1 -0
  151. package/dist/test/queue.test.js +338 -0
  152. package/dist/test/queue.test.js.map +1 -0
  153. package/dist/test/read-mode.test.d.ts +2 -0
  154. package/dist/test/read-mode.test.d.ts.map +1 -0
  155. package/dist/test/read-mode.test.js +566 -0
  156. package/dist/test/read-mode.test.js.map +1 -0
  157. package/dist/test/server/driveOperationsConflictResolution.test.d.ts +2 -0
  158. package/dist/test/server/driveOperationsConflictResolution.test.d.ts.map +1 -0
  159. package/dist/test/server/driveOperationsConflictResolution.test.js +389 -0
  160. package/dist/test/server/driveOperationsConflictResolution.test.js.map +1 -0
  161. package/dist/test/server/mergeOperations.test.d.ts +2 -0
  162. package/dist/test/server/mergeOperations.test.d.ts.map +1 -0
  163. package/dist/test/server/mergeOperations.test.js +107 -0
  164. package/dist/test/server/mergeOperations.test.js.map +1 -0
  165. package/dist/test/server/processOperations.test.d.ts +2 -0
  166. package/dist/test/server/processOperations.test.d.ts.map +1 -0
  167. package/dist/test/server/processOperations.test.js +380 -0
  168. package/dist/test/server/processOperations.test.js.map +1 -0
  169. package/dist/test/server.test.d.ts +2 -0
  170. package/dist/test/server.test.d.ts.map +1 -0
  171. package/dist/test/server.test.js +789 -0
  172. package/dist/test/server.test.js.map +1 -0
  173. package/dist/test/signature-migration.test.d.ts +2 -0
  174. package/dist/test/signature-migration.test.d.ts.map +1 -0
  175. package/dist/test/signature-migration.test.js +235 -0
  176. package/dist/test/signature-migration.test.js.map +1 -0
  177. package/dist/test/storage.test.d.ts +2 -0
  178. package/dist/test/storage.test.d.ts.map +1 -0
  179. package/dist/test/storage.test.js +462 -0
  180. package/dist/test/storage.test.js.map +1 -0
  181. package/dist/test/utils.test.d.ts +2 -0
  182. package/dist/test/utils.test.d.ts.map +1 -0
  183. package/dist/test/utils.test.js +89 -0
  184. package/dist/test/utils.test.js.map +1 -0
  185. package/dist/tsconfig.tsbuildinfo +1 -1
  186. package/package.json +4 -4
@@ -0,0 +1,389 @@
1
+ import { documentModelDocumentModelModule, generateId, } from "document-model";
2
+ import { beforeEach, describe, expect, it } from "vitest";
3
+ import { addFolder, copyNode, } from "../../src/drive-document-model/gen/node/creators.js";
4
+ import { reducer as documentDriveReducer } from "../../src/drive-document-model/gen/reducer.js";
5
+ import { createDocument } from "../../src/drive-document-model/gen/utils.js";
6
+ import { driveDocumentModelModule } from "../../src/drive-document-model/module.js";
7
+ import { generateNodesCopy } from "../../src/drive-document-model/src/utils.js";
8
+ import { ReactorBuilder } from "../../src/server/builder.js";
9
+ import { DriveBasicClient } from "../utils.js";
10
+ function sortNodes(nodes) {
11
+ return nodes.sort((a, b) => (a.id < b.id ? -1 : 1));
12
+ }
13
+ describe("Drive Operations", () => {
14
+ const documentModels = [
15
+ documentModelDocumentModelModule,
16
+ driveDocumentModelModule,
17
+ ];
18
+ let server;
19
+ beforeEach(async () => {
20
+ server = new ReactorBuilder(documentModels).build();
21
+ await server.initialize();
22
+ });
23
+ const driveId = generateId();
24
+ async function buildDrive() {
25
+ await server.addDrive({
26
+ id: driveId,
27
+ global: { name: "test", icon: null },
28
+ local: {
29
+ availableOffline: false,
30
+ sharingType: "PRIVATE",
31
+ listeners: [],
32
+ triggers: [],
33
+ },
34
+ });
35
+ return await server.getDrive(driveId);
36
+ }
37
+ it("should not re-apply existing operations", async () => {
38
+ const initialDriveDocument = await buildDrive();
39
+ let pushOperationResult;
40
+ createDocument();
41
+ const client1 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
42
+ const client2 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
43
+ client1.dispatchDriveAction(addFolder({ id: "1", name: "test1" }));
44
+ pushOperationResult = await client1.pushOperationsToServer();
45
+ expect(pushOperationResult.status).toBe("SUCCESS");
46
+ client2.dispatchDriveAction(addFolder({ id: "2", name: "test2" }));
47
+ pushOperationResult = await client2.pushOperationsToServer();
48
+ expect(pushOperationResult.status).toBe("SUCCESS");
49
+ await client1.syncDocument();
50
+ expect(client1.getUnsyncedOperations()).toMatchObject([]);
51
+ const syncedOperations = client1.getDocument().operations
52
+ .global;
53
+ client1.setUnsyncedOperations(syncedOperations);
54
+ pushOperationResult = await client1.pushOperationsToServer();
55
+ const drive = await server.getDrive(driveId);
56
+ expect(drive.state.global.nodes.length).toBe(2);
57
+ expect(drive.state.global.nodes).toMatchObject([
58
+ { id: "1", name: "test1" },
59
+ { id: "2", name: "test2" },
60
+ ]);
61
+ expect(drive.operations.global.length).toBe(2);
62
+ expect(drive.operations.global).toMatchObject([
63
+ {
64
+ type: "ADD_FOLDER",
65
+ input: { id: "1", name: "test1" },
66
+ scope: "global",
67
+ index: 1,
68
+ skip: 1,
69
+ },
70
+ {
71
+ type: "ADD_FOLDER",
72
+ input: { id: "2", name: "test2" },
73
+ scope: "global",
74
+ index: 2,
75
+ skip: 0,
76
+ },
77
+ ]);
78
+ });
79
+ it("should resolve conflicts when 5 clients are pushing changes to the same drive", async () => {
80
+ const initialDriveDocument = await buildDrive();
81
+ let pushOperationResult;
82
+ createDocument();
83
+ const client1 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
84
+ const client2 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
85
+ const client3 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
86
+ const client4 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
87
+ const client5 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
88
+ // Client1 Add folder and push to server
89
+ client1.dispatchDriveAction(addFolder({ id: "1", name: "test1" }));
90
+ pushOperationResult = await client1.pushOperationsToServer();
91
+ expect(pushOperationResult.status).toBe("SUCCESS");
92
+ // Client2 Add folder and push to server
93
+ client2.dispatchDriveAction(addFolder({ id: "2", name: "test2" }));
94
+ pushOperationResult = await client2.pushOperationsToServer();
95
+ expect(pushOperationResult.status).toBe("SUCCESS");
96
+ // Client1 sync with server
97
+ await client1.syncDocument();
98
+ expect(client1.getUnsyncedOperations()).toMatchObject([]);
99
+ // Clien1 push already synced operations to server (this should not create new operations in the server document)
100
+ const syncedOperations = client1.getDocument().operations
101
+ .global;
102
+ client1.setUnsyncedOperations(syncedOperations);
103
+ pushOperationResult = await client1.pushOperationsToServer();
104
+ // Client3 sync with server
105
+ await client3.syncDocument();
106
+ // Client3 add folder and push to server
107
+ client3.dispatchDriveAction(addFolder({ id: "3", name: "test3" }));
108
+ pushOperationResult = await client3.pushOperationsToServer();
109
+ expect(pushOperationResult.status).toBe("SUCCESS");
110
+ // Client4 sync with server (partially syncs at this point)
111
+ await client4.syncDocument();
112
+ // Client3 add folder and push to server
113
+ client3.dispatchDriveAction(addFolder({ id: "4", name: "test4" }));
114
+ pushOperationResult = await client3.pushOperationsToServer();
115
+ expect(pushOperationResult.status).toBe("SUCCESS");
116
+ // Client4 add folder and push to server
117
+ client4.dispatchDriveAction(addFolder({ id: "5", name: "test5" }));
118
+ pushOperationResult = await client4.pushOperationsToServer();
119
+ expect(pushOperationResult.status).toBe("SUCCESS");
120
+ // Client5 add folder and push to server
121
+ client5.dispatchDriveAction(addFolder({ id: "6", name: "test6" }));
122
+ pushOperationResult = await client5.pushOperationsToServer();
123
+ expect(pushOperationResult.status).toBe("SUCCESS");
124
+ // Check if the operations are in the server
125
+ const drive = await server.getDrive(driveId);
126
+ expect(drive.state.global.nodes.length).toBe(6);
127
+ expect(drive.state.global.nodes).toMatchObject([
128
+ { id: "1", name: "test1" },
129
+ { id: "2", name: "test2" },
130
+ { id: "3", name: "test3" },
131
+ { id: "4", name: "test4" },
132
+ { id: "5", name: "test5" },
133
+ { id: "6", name: "test6" },
134
+ ]);
135
+ expect(drive.operations.global.slice(-6)).toMatchObject([
136
+ {
137
+ type: "ADD_FOLDER",
138
+ input: { id: "1", name: "test1" },
139
+ scope: "global",
140
+ index: 7,
141
+ skip: 7,
142
+ },
143
+ {
144
+ type: "ADD_FOLDER",
145
+ input: { id: "2", name: "test2" },
146
+ scope: "global",
147
+ index: 8,
148
+ skip: 0,
149
+ },
150
+ {
151
+ type: "ADD_FOLDER",
152
+ input: { id: "3", name: "test3" },
153
+ scope: "global",
154
+ index: 9,
155
+ skip: 0,
156
+ },
157
+ {
158
+ type: "ADD_FOLDER",
159
+ input: { id: "4", name: "test4" },
160
+ scope: "global",
161
+ index: 10,
162
+ skip: 0,
163
+ },
164
+ {
165
+ type: "ADD_FOLDER",
166
+ input: { id: "5", name: "test5" },
167
+ scope: "global",
168
+ index: 11,
169
+ skip: 0,
170
+ },
171
+ {
172
+ type: "ADD_FOLDER",
173
+ input: { id: "6", name: "test6" },
174
+ scope: "global",
175
+ index: 12,
176
+ skip: 0,
177
+ },
178
+ ]);
179
+ });
180
+ it("Should not throw an error when adding the same folder twice (same client)", async () => {
181
+ const initialDriveDocument = await buildDrive();
182
+ let pushOperationResult;
183
+ createDocument();
184
+ const client1 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
185
+ const addFolderAction = addFolder({
186
+ id: "1",
187
+ name: "test1",
188
+ });
189
+ client1.dispatchDriveAction(addFolderAction);
190
+ pushOperationResult = await client1.pushOperationsToServer();
191
+ expect(pushOperationResult.status).toBe("SUCCESS");
192
+ client1.dispatchDriveAction(addFolderAction);
193
+ pushOperationResult = await client1.pushOperationsToServer();
194
+ expect(pushOperationResult.status).toBe("SUCCESS");
195
+ expect(client1.getDocument().operations.global.length).toBe(2);
196
+ expect(client1.getDocument().operations.global[1]).toMatchObject({
197
+ type: "ADD_FOLDER",
198
+ index: 1,
199
+ skip: 0,
200
+ input: { id: "1", name: "test1" },
201
+ error: "Node with id 1 already exists!",
202
+ });
203
+ const drive = await server.getDrive(driveId);
204
+ expect(drive.state.global.nodes.length).toBe(1);
205
+ expect(drive.state.global.nodes).toMatchObject([
206
+ { id: "1", name: "test1" },
207
+ ]);
208
+ expect(drive.operations.global.length).toBe(2);
209
+ expect(drive.operations.global).toMatchObject([
210
+ {
211
+ type: "ADD_FOLDER",
212
+ input: { id: "1", name: "test1" },
213
+ error: undefined,
214
+ index: 0,
215
+ skip: 0,
216
+ },
217
+ {
218
+ type: "ADD_FOLDER",
219
+ input: { id: "1", name: "test1" },
220
+ scope: "global",
221
+ index: 1,
222
+ skip: 0,
223
+ error: "Node with id 1 already exists!",
224
+ },
225
+ ]);
226
+ });
227
+ it("Should not throw an error when adding the same folder twice (2 clients)", { retry: 10 }, async () => {
228
+ const initialDriveDocument = await buildDrive();
229
+ let pushOperationResult;
230
+ createDocument();
231
+ const client1 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
232
+ const client2 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
233
+ client1.dispatchDriveAction(addFolder({
234
+ id: "1",
235
+ name: "test1",
236
+ }));
237
+ pushOperationResult = await client1.pushOperationsToServer();
238
+ expect(pushOperationResult.status).toBe("SUCCESS");
239
+ expect(client1.getDocument().operations.global.length).toBe(1);
240
+ expect(client1.getDocument().operations.global[0]).toMatchObject({
241
+ type: "ADD_FOLDER",
242
+ index: 0,
243
+ skip: 0,
244
+ input: { id: "1", name: "test1" },
245
+ error: undefined,
246
+ });
247
+ client2.dispatchDriveAction(addFolder({
248
+ id: "1",
249
+ name: "test2",
250
+ }));
251
+ pushOperationResult = await client2.pushOperationsToServer();
252
+ expect(pushOperationResult.status).toBe("SUCCESS");
253
+ expect(client2.getDocument().operations.global.length).toBe(1);
254
+ expect(client2.getDocument().operations.global[0]).toMatchObject({
255
+ type: "ADD_FOLDER",
256
+ index: 0,
257
+ skip: 0,
258
+ input: { id: "1", name: "test2" },
259
+ error: undefined,
260
+ });
261
+ const drive = await server.getDrive(driveId);
262
+ expect(drive.state.global.nodes.length).toBe(1);
263
+ expect(drive.state.global.nodes).toMatchObject([
264
+ { id: "1", name: "test1" },
265
+ ]);
266
+ expect(drive.operations.global.length).toBe(2);
267
+ expect(drive.operations.global).toMatchObject([
268
+ {
269
+ type: "ADD_FOLDER",
270
+ input: { id: "1", name: "test1" },
271
+ error: undefined,
272
+ index: 1,
273
+ skip: 1,
274
+ },
275
+ {
276
+ type: "ADD_FOLDER",
277
+ input: { id: "1", name: "test2" },
278
+ scope: "global",
279
+ index: 2,
280
+ skip: 0,
281
+ error: "Node with id 1 already exists!",
282
+ },
283
+ ]);
284
+ });
285
+ // TODO: This test is flaky.
286
+ it("should resolve conflicts without duplicate ids when copy folders", async () => {
287
+ return;
288
+ let idCounter = 0;
289
+ const generateId = () => {
290
+ idCounter++;
291
+ return `${idCounter}`;
292
+ };
293
+ const initialDriveDocument = await buildDrive();
294
+ let pushOperationResult;
295
+ createDocument();
296
+ const client1 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
297
+ const client2 = new DriveBasicClient(server, driveId, initialDriveDocument, documentDriveReducer);
298
+ const idFolder1 = generateId();
299
+ const idFolder2 = generateId();
300
+ expect(idFolder1).toBe("1");
301
+ expect(idFolder2).toBe("2");
302
+ // Add folders in client 1 and push to server
303
+ client1.dispatchDriveAction(addFolder({ id: idFolder1, name: "1" }));
304
+ pushOperationResult = await client1.pushOperationsToServer();
305
+ expect(pushOperationResult.status).toBe("SUCCESS");
306
+ client1.dispatchDriveAction(addFolder({
307
+ id: idFolder2,
308
+ name: "2",
309
+ parentFolder: idFolder1,
310
+ }));
311
+ pushOperationResult = await client1.pushOperationsToServer();
312
+ expect(pushOperationResult.status).toBe("SUCCESS");
313
+ // Sync client 2 with server
314
+ await client2.syncDocument();
315
+ // Copy folder 1 to root in client 1 and push to server
316
+ const copyNodesInput = generateNodesCopy({
317
+ srcId: idFolder1,
318
+ targetName: "1",
319
+ targetParentFolder: undefined,
320
+ }, generateId, client1.getDocument().state.global.nodes);
321
+ const copyActions = copyNodesInput.map((copyNodeInput) => copyNode(copyNodeInput));
322
+ for (const copyAction of copyActions) {
323
+ client1.dispatchDriveAction(copyAction);
324
+ }
325
+ pushOperationResult = await client1.pushOperationsToServer();
326
+ expect(pushOperationResult.status).toBe("SUCCESS");
327
+ let drive = await server.getDrive(driveId);
328
+ expect(drive.state.global.nodes.length).toBe(4);
329
+ expect(drive.state.global.nodes).toMatchObject([
330
+ { id: "1", name: "1", parentFolder: null },
331
+ { id: "2", name: "2", parentFolder: "1" },
332
+ { id: "3", name: "1 (copy) 1", parentFolder: null },
333
+ { id: "4", name: "2", parentFolder: "3" },
334
+ ]);
335
+ /* CLIENT 2 */
336
+ // generate copy nodes input for client 2
337
+ const copyNodesInput2 = generateNodesCopy({
338
+ srcId: idFolder1,
339
+ targetName: "1",
340
+ targetParentFolder: undefined,
341
+ }, generateId, client2.getDocument().state.global.nodes);
342
+ const copyNodesInput3 = generateNodesCopy({
343
+ srcId: idFolder1,
344
+ targetName: "1",
345
+ targetParentFolder: undefined,
346
+ }, generateId, client2.getDocument().state.global.nodes);
347
+ const copyActions2 = copyNodesInput2.map((copyNodeInput) => copyNode(copyNodeInput));
348
+ const copyActions3 = copyNodesInput3.map((copyNodeInput) => copyNode(copyNodeInput));
349
+ // apply copy actions (1) to client 2
350
+ for (const copyAction of copyActions2) {
351
+ client2.dispatchDriveAction(copyAction);
352
+ }
353
+ // push operations to server
354
+ pushOperationResult = await client2.pushOperationsToServer();
355
+ expect(pushOperationResult.status).toBe("SUCCESS");
356
+ drive = await server.getDrive(driveId);
357
+ expect(drive.state.global.nodes.length).toBe(6);
358
+ expect(drive.state.global.nodes).toMatchObject([
359
+ { id: "1", name: "1", parentFolder: null },
360
+ { id: "2", name: "2", parentFolder: "1" },
361
+ { id: "3", name: "1 (copy) 1", parentFolder: null },
362
+ { id: "4", name: "2", parentFolder: "3" },
363
+ { id: "5", name: "1 (copy) 2", parentFolder: null },
364
+ { id: "6", name: "2", parentFolder: "5" },
365
+ ]);
366
+ // apply copy actions (2) to client 2
367
+ for (const copyAction of copyActions3) {
368
+ client2.dispatchDriveAction(copyAction);
369
+ }
370
+ // sync client 2 with server
371
+ await client2.syncDocument();
372
+ const client2Nodes = client2.getDocument().state
373
+ .global.nodes;
374
+ // TODO: validate that there are not duplicated operations after operation id implementation
375
+ expect(client2Nodes).toHaveLength(8);
376
+ const sortedClient2Nodes = sortNodes(client2Nodes);
377
+ expect(sortedClient2Nodes).toMatchObject([
378
+ { id: "1", name: "1", parentFolder: null },
379
+ { id: "2", name: "2", parentFolder: "1" },
380
+ { id: "3", name: "1 (copy) 1", parentFolder: null },
381
+ { id: "4", name: "2", parentFolder: "3" },
382
+ { id: "5", name: "1 (copy) 2", parentFolder: null },
383
+ { id: "6", name: "2", parentFolder: "5" },
384
+ { id: "7", name: "1 (copy) 3", parentFolder: null },
385
+ { id: "8", name: "2", parentFolder: "7" },
386
+ ]);
387
+ });
388
+ });
389
+ //# sourceMappingURL=driveOperationsConflictResolution.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driveOperationsConflictResolution.test.js","sourceRoot":"","sources":["../../../test/server/driveOperationsConflictResolution.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mergeOperations.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeOperations.test.d.ts","sourceRoot":"","sources":["../../../test/server/mergeOperations.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,107 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { mergeOperations } from "../../src/utils/misc.js";
3
+ describe("mergeOperations", () => {
4
+ it("should merge operations correcly", async () => {
5
+ const result = mergeOperations({
6
+ global: [
7
+ {
8
+ type: "SET_MODEL_NAME",
9
+ input: { name: "1" },
10
+ scope: "global",
11
+ index: 0,
12
+ timestamp: "2024-05-03T20:26:52.236Z",
13
+ hash: "GCbMKj+UOVkUwAJhI7vU76Y7j1I=",
14
+ skip: 0,
15
+ error: undefined,
16
+ },
17
+ ],
18
+ local: [],
19
+ }, [
20
+ {
21
+ type: "SET_MODEL_NAME",
22
+ input: { name: "1" },
23
+ scope: "global",
24
+ index: 1,
25
+ timestamp: "2024-05-03T20:26:52.239Z",
26
+ hash: "GCbMKj+UOVkUwAJhI7vU76Y7j1I=",
27
+ skip: 1,
28
+ error: undefined,
29
+ },
30
+ {
31
+ type: "SET_MODEL_NAME",
32
+ input: { name: "2" },
33
+ scope: "global",
34
+ index: 2,
35
+ timestamp: "2024-05-03T20:26:52.239Z",
36
+ hash: "7rDGOdcTtu9xcKwmMM5F98KO9PM=",
37
+ skip: 0,
38
+ error: undefined,
39
+ },
40
+ ]);
41
+ expect(result.global).toHaveLength(3);
42
+ expect(result.global).toMatchObject([
43
+ {
44
+ type: "SET_MODEL_NAME",
45
+ input: { name: "1" },
46
+ index: 0,
47
+ skip: 0,
48
+ error: undefined,
49
+ },
50
+ {
51
+ type: "SET_MODEL_NAME",
52
+ input: { name: "1" },
53
+ index: 1,
54
+ skip: 1,
55
+ error: undefined,
56
+ },
57
+ {
58
+ type: "SET_MODEL_NAME",
59
+ input: { name: "2" },
60
+ index: 2,
61
+ skip: 0,
62
+ error: undefined,
63
+ },
64
+ ]);
65
+ });
66
+ it("should reject operations with invalid index", async () => {
67
+ await expect(new Promise(() => {
68
+ mergeOperations({
69
+ global: [
70
+ {
71
+ type: "SET_MODEL_NAME",
72
+ input: { name: "1" },
73
+ scope: "global",
74
+ index: 0,
75
+ timestamp: "2024-05-03T20:26:52.236Z",
76
+ hash: "GCbMKj+UOVkUwAJhI7vU76Y7j1I=",
77
+ skip: 0,
78
+ error: undefined,
79
+ },
80
+ {
81
+ type: "SET_MODEL_NAME",
82
+ input: { name: "1" },
83
+ scope: "global",
84
+ index: 1,
85
+ timestamp: "2024-05-03T20:26:52.239Z",
86
+ hash: "GCbMKj+UOVkUwAJhI7vU76Y7j1I=",
87
+ skip: 1,
88
+ error: undefined,
89
+ },
90
+ ],
91
+ local: [],
92
+ }, [
93
+ {
94
+ type: "SET_MODEL_NAME",
95
+ input: { name: "2" },
96
+ scope: "global",
97
+ index: 0,
98
+ timestamp: "2024-05-03T20:26:52.239Z",
99
+ hash: "7rDGOdcTtu9xcKwmMM5F98KO9PM=",
100
+ skip: 0,
101
+ error: undefined,
102
+ },
103
+ ]);
104
+ })).rejects.toThrow("Tried to add operation with index 0 and document is at index 1");
105
+ });
106
+ });
107
+ //# sourceMappingURL=mergeOperations.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeOperations.test.js","sourceRoot":"","sources":["../../../test/server/mergeOperations.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=processOperations.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processOperations.test.d.ts","sourceRoot":"","sources":["../../../test/server/processOperations.test.ts"],"names":[],"mappings":""}