document-drive 4.0.0-staging.6 → 4.0.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 (254) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/prisma/schema.prisma +2 -1
  6. package/dist/src/drive-document-model/gen/document-model.js +3 -3
  7. package/dist/src/drive-document-model/gen/document-model.js.map +1 -1
  8. package/dist/src/drive-document-model/gen/node/creators.d.ts +2 -6
  9. package/dist/src/drive-document-model/gen/node/creators.d.ts.map +1 -1
  10. package/dist/src/drive-document-model/gen/node/creators.js +1 -8
  11. package/dist/src/drive-document-model/gen/node/creators.js.map +1 -1
  12. package/dist/src/drive-document-model/gen/schema/types.d.ts +14 -1
  13. package/dist/src/drive-document-model/gen/schema/types.d.ts.map +1 -1
  14. package/dist/src/drive-document-model/gen/schema/zod.d.ts +5 -1
  15. package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -1
  16. package/dist/src/drive-document-model/gen/schema/zod.js +12 -0
  17. package/dist/src/drive-document-model/gen/schema/zod.js.map +1 -1
  18. package/dist/src/drive-document-model/gen/types.d.ts +4 -13
  19. package/dist/src/drive-document-model/gen/types.d.ts.map +1 -1
  20. package/dist/src/drive-document-model/gen/types.js.map +1 -1
  21. package/dist/src/drive-document-model/module.d.ts +1 -2
  22. package/dist/src/drive-document-model/module.d.ts.map +1 -1
  23. package/dist/src/drive-document-model/src/reducers/node.d.ts.map +1 -1
  24. package/dist/src/drive-document-model/src/reducers/node.js +25 -1
  25. package/dist/src/drive-document-model/src/reducers/node.js.map +1 -1
  26. package/dist/src/drive-document-model/src/tests/actions.test.js +23 -1
  27. package/dist/src/drive-document-model/src/tests/actions.test.js.map +1 -1
  28. package/dist/src/drive-document-model/src/tests/base.test.js +32 -0
  29. package/dist/src/drive-document-model/src/tests/base.test.js.map +1 -1
  30. package/dist/src/drive-document-model/src/tests/utils.test.js +37 -7
  31. package/dist/src/drive-document-model/src/tests/utils.test.js.map +1 -1
  32. package/dist/src/drive-document-model/src/utils.d.ts +8 -2
  33. package/dist/src/drive-document-model/src/utils.d.ts.map +1 -1
  34. package/dist/src/drive-document-model/src/utils.js +55 -6
  35. package/dist/src/drive-document-model/src/utils.js.map +1 -1
  36. package/dist/src/queue/base.d.ts +27 -6
  37. package/dist/src/queue/base.d.ts.map +1 -1
  38. package/dist/src/queue/base.js +203 -15
  39. package/dist/src/queue/base.js.map +1 -1
  40. package/dist/src/queue/redis.d.ts +27 -1
  41. package/dist/src/queue/redis.d.ts.map +1 -1
  42. package/dist/src/queue/redis.js +110 -122
  43. package/dist/src/queue/redis.js.map +1 -1
  44. package/dist/src/queue/types.d.ts +12 -18
  45. package/dist/src/queue/types.d.ts.map +1 -1
  46. package/dist/src/queue/types.js +0 -3
  47. package/dist/src/queue/types.js.map +1 -1
  48. package/dist/src/server/base-server.d.ts +11 -87
  49. package/dist/src/server/base-server.d.ts.map +1 -1
  50. package/dist/src/server/base-server.js +250 -549
  51. package/dist/src/server/base-server.js.map +1 -1
  52. package/dist/src/server/builder.js +2 -2
  53. package/dist/src/server/builder.js.map +1 -1
  54. package/dist/src/server/error.d.ts +3 -3
  55. package/dist/src/server/error.d.ts.map +1 -1
  56. package/dist/src/server/error.js +2 -2
  57. package/dist/src/server/error.js.map +1 -1
  58. package/dist/src/server/listener/listener-manager.d.ts +6 -5
  59. package/dist/src/server/listener/listener-manager.d.ts.map +1 -1
  60. package/dist/src/server/listener/listener-manager.js +79 -62
  61. package/dist/src/server/listener/listener-manager.js.map +1 -1
  62. package/dist/src/server/listener/transmitter/internal.d.ts +1 -1
  63. package/dist/src/server/listener/transmitter/internal.d.ts.map +1 -1
  64. package/dist/src/server/listener/transmitter/internal.js +12 -14
  65. package/dist/src/server/listener/transmitter/internal.js.map +1 -1
  66. package/dist/src/server/listener/transmitter/pull-responder.d.ts.map +1 -1
  67. package/dist/src/server/listener/transmitter/pull-responder.js +8 -14
  68. package/dist/src/server/listener/transmitter/pull-responder.js.map +1 -1
  69. package/dist/src/server/listener/transmitter/switchboard-push.d.ts.map +1 -1
  70. package/dist/src/server/listener/transmitter/switchboard-push.js +8 -13
  71. package/dist/src/server/listener/transmitter/switchboard-push.js.map +1 -1
  72. package/dist/src/server/sync-manager.d.ts +10 -8
  73. package/dist/src/server/sync-manager.d.ts.map +1 -1
  74. package/dist/src/server/sync-manager.js +147 -62
  75. package/dist/src/server/sync-manager.js.map +1 -1
  76. package/dist/src/server/types.d.ts +31 -114
  77. package/dist/src/server/types.d.ts.map +1 -1
  78. package/dist/src/server/types.js.map +1 -1
  79. package/dist/src/server/utils.d.ts +1 -10
  80. package/dist/src/server/utils.d.ts.map +1 -1
  81. package/dist/src/server/utils.js +0 -41
  82. package/dist/src/server/utils.js.map +1 -1
  83. package/dist/src/storage/browser.d.ts +2 -7
  84. package/dist/src/storage/browser.d.ts.map +1 -1
  85. package/dist/src/storage/browser.js +22 -80
  86. package/dist/src/storage/browser.js.map +1 -1
  87. package/dist/src/storage/filesystem.d.ts +2 -7
  88. package/dist/src/storage/filesystem.d.ts.map +1 -1
  89. package/dist/src/storage/filesystem.js +22 -79
  90. package/dist/src/storage/filesystem.js.map +1 -1
  91. package/dist/src/storage/memory.d.ts +2 -7
  92. package/dist/src/storage/memory.d.ts.map +1 -1
  93. package/dist/src/storage/memory.js +22 -76
  94. package/dist/src/storage/memory.js.map +1 -1
  95. package/dist/src/storage/prisma/client/edge.js +4 -5
  96. package/dist/src/storage/prisma/client/index-browser.js +1 -2
  97. package/dist/src/storage/prisma/client/index.d.ts +249 -58
  98. package/dist/src/storage/prisma/client/index.js +4 -5
  99. package/dist/src/storage/prisma/client/package.json +1 -1
  100. package/dist/src/storage/prisma/client/schema.prisma +3 -2
  101. package/dist/src/storage/prisma/client/wasm.js +1 -2
  102. package/dist/src/storage/prisma/prisma.d.ts +4 -9
  103. package/dist/src/storage/prisma/prisma.d.ts.map +1 -1
  104. package/dist/src/storage/prisma/prisma.js +51 -119
  105. package/dist/src/storage/prisma/prisma.js.map +1 -1
  106. package/dist/src/storage/types.d.ts +4 -43
  107. package/dist/src/storage/types.d.ts.map +1 -1
  108. package/dist/src/storage/utils.d.ts +0 -3
  109. package/dist/src/storage/utils.d.ts.map +1 -1
  110. package/dist/src/storage/utils.js +0 -14
  111. package/dist/src/storage/utils.js.map +1 -1
  112. package/dist/src/utils/gql-transformations.d.ts +5 -14
  113. package/dist/src/utils/gql-transformations.d.ts.map +1 -1
  114. package/dist/src/utils/gql-transformations.js +0 -1
  115. package/dist/src/utils/gql-transformations.js.map +1 -1
  116. package/dist/src/utils/misc.d.ts +0 -2
  117. package/dist/src/utils/misc.d.ts.map +1 -1
  118. package/dist/src/utils/misc.js +0 -4
  119. package/dist/src/utils/misc.js.map +1 -1
  120. package/dist/test/cache.test.d.ts +2 -0
  121. package/dist/test/cache.test.d.ts.map +1 -0
  122. package/dist/test/cache.test.js +281 -0
  123. package/dist/test/cache.test.js.map +1 -0
  124. package/dist/test/default-remote-drives.test.d.ts +2 -0
  125. package/dist/test/default-remote-drives.test.d.ts.map +1 -0
  126. package/dist/test/default-remote-drives.test.js +446 -0
  127. package/dist/test/default-remote-drives.test.js.map +1 -0
  128. package/dist/test/document-helpers/addUndo.test.d.ts +2 -0
  129. package/dist/test/document-helpers/addUndo.test.d.ts.map +1 -0
  130. package/dist/test/document-helpers/addUndo.test.js +120 -0
  131. package/dist/test/document-helpers/addUndo.test.js.map +1 -0
  132. package/dist/test/document-helpers/attachBranch.test.d.ts +2 -0
  133. package/dist/test/document-helpers/attachBranch.test.d.ts.map +1 -0
  134. package/dist/test/document-helpers/attachBranch.test.js +333 -0
  135. package/dist/test/document-helpers/attachBranch.test.js.map +1 -0
  136. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts +2 -0
  137. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.d.ts.map +1 -0
  138. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js +252 -0
  139. package/dist/test/document-helpers/checkCleanedOperationsIntegrity.test.js.map +1 -0
  140. package/dist/test/document-helpers/garbageCollect.test.d.ts +2 -0
  141. package/dist/test/document-helpers/garbageCollect.test.d.ts.map +1 -0
  142. package/dist/test/document-helpers/garbageCollect.test.js +136 -0
  143. package/dist/test/document-helpers/garbageCollect.test.js.map +1 -0
  144. package/dist/test/document-helpers/groupOperationsByScope.test.d.ts +2 -0
  145. package/dist/test/document-helpers/groupOperationsByScope.test.d.ts.map +1 -0
  146. package/dist/test/document-helpers/groupOperationsByScope.test.js +98 -0
  147. package/dist/test/document-helpers/groupOperationsByScope.test.js.map +1 -0
  148. package/dist/test/document-helpers/merge.test.d.ts +2 -0
  149. package/dist/test/document-helpers/merge.test.d.ts.map +1 -0
  150. package/dist/test/document-helpers/merge.test.js +757 -0
  151. package/dist/test/document-helpers/merge.test.js.map +1 -0
  152. package/dist/test/document-helpers/nextSkipNumber.test.d.ts +2 -0
  153. package/dist/test/document-helpers/nextSkipNumber.test.d.ts.map +1 -0
  154. package/dist/test/document-helpers/nextSkipNumber.test.js +123 -0
  155. package/dist/test/document-helpers/nextSkipNumber.test.js.map +1 -0
  156. package/dist/test/document-helpers/prepareOperations.test.d.ts +2 -0
  157. package/dist/test/document-helpers/prepareOperations.test.d.ts.map +1 -0
  158. package/dist/test/document-helpers/prepareOperations.test.js +304 -0
  159. package/dist/test/document-helpers/prepareOperations.test.js.map +1 -0
  160. package/dist/test/document-helpers/removeExistingOperations.test.d.ts +2 -0
  161. package/dist/test/document-helpers/removeExistingOperations.test.d.ts.map +1 -0
  162. package/dist/test/document-helpers/removeExistingOperations.test.js +150 -0
  163. package/dist/test/document-helpers/removeExistingOperations.test.js.map +1 -0
  164. package/dist/test/document-helpers/reshuffleByTimestamp.test.d.ts +2 -0
  165. package/dist/test/document-helpers/reshuffleByTimestamp.test.d.ts.map +1 -0
  166. package/dist/test/document-helpers/reshuffleByTimestamp.test.js +148 -0
  167. package/dist/test/document-helpers/reshuffleByTimestamp.test.js.map +1 -0
  168. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts +2 -0
  169. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.d.ts.map +1 -0
  170. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js +200 -0
  171. package/dist/test/document-helpers/reshuffleByTimestampAndIndex.test.js.map +1 -0
  172. package/dist/test/document-helpers/sortOperations.test.d.ts +2 -0
  173. package/dist/test/document-helpers/sortOperations.test.d.ts.map +1 -0
  174. package/dist/test/document-helpers/sortOperations.test.js +101 -0
  175. package/dist/test/document-helpers/sortOperations.test.js.map +1 -0
  176. package/dist/test/document-helpers/split.test.d.ts +2 -0
  177. package/dist/test/document-helpers/split.test.d.ts.map +1 -0
  178. package/dist/test/document-helpers/split.test.js +121 -0
  179. package/dist/test/document-helpers/split.test.js.map +1 -0
  180. package/dist/test/document-helpers/utils.d.ts +8 -0
  181. package/dist/test/document-helpers/utils.d.ts.map +1 -0
  182. package/dist/test/document-helpers/utils.js +22 -0
  183. package/dist/test/document-helpers/utils.js.map +1 -0
  184. package/dist/test/drive-operations.test.d.ts +2 -0
  185. package/dist/test/drive-operations.test.d.ts.map +1 -0
  186. package/dist/test/drive-operations.test.js +145 -0
  187. package/dist/test/drive-operations.test.js.map +1 -0
  188. package/dist/test/graphql.test.d.ts +2 -0
  189. package/dist/test/graphql.test.d.ts.map +1 -0
  190. package/dist/test/graphql.test.js +10 -0
  191. package/dist/test/graphql.test.js.map +1 -0
  192. package/dist/test/internal-listener.test.d.ts +2 -0
  193. package/dist/test/internal-listener.test.d.ts.map +1 -0
  194. package/dist/test/internal-listener.test.js +277 -0
  195. package/dist/test/internal-listener.test.js.map +1 -0
  196. package/dist/test/queue.test.d.ts +2 -0
  197. package/dist/test/queue.test.d.ts.map +1 -0
  198. package/dist/test/queue.test.js +338 -0
  199. package/dist/test/queue.test.js.map +1 -0
  200. package/dist/test/read-mode.test.d.ts +2 -0
  201. package/dist/test/read-mode.test.d.ts.map +1 -0
  202. package/dist/test/read-mode.test.js +578 -0
  203. package/dist/test/read-mode.test.js.map +1 -0
  204. package/dist/test/server/driveOperationsConflictResolution.test.d.ts +2 -0
  205. package/dist/test/server/driveOperationsConflictResolution.test.d.ts.map +1 -0
  206. package/dist/test/server/driveOperationsConflictResolution.test.js +460 -0
  207. package/dist/test/server/driveOperationsConflictResolution.test.js.map +1 -0
  208. package/dist/test/server/mergeOperations.test.d.ts +2 -0
  209. package/dist/test/server/mergeOperations.test.d.ts.map +1 -0
  210. package/dist/test/server/mergeOperations.test.js +107 -0
  211. package/dist/test/server/mergeOperations.test.js.map +1 -0
  212. package/dist/test/server/processOperations.test.d.ts +2 -0
  213. package/dist/test/server/processOperations.test.d.ts.map +1 -0
  214. package/dist/test/server/processOperations.test.js +380 -0
  215. package/dist/test/server/processOperations.test.js.map +1 -0
  216. package/dist/test/server.test.d.ts +2 -0
  217. package/dist/test/server.test.d.ts.map +1 -0
  218. package/dist/test/server.test.js +899 -0
  219. package/dist/test/server.test.js.map +1 -0
  220. package/dist/test/signature-migration.test.d.ts +2 -0
  221. package/dist/test/signature-migration.test.d.ts.map +1 -0
  222. package/dist/test/signature-migration.test.js +239 -0
  223. package/dist/test/signature-migration.test.js.map +1 -0
  224. package/dist/test/storage.test.d.ts +2 -0
  225. package/dist/test/storage.test.d.ts.map +1 -0
  226. package/dist/test/storage.test.js +523 -0
  227. package/dist/test/storage.test.js.map +1 -0
  228. package/dist/test/utils.d.ts +48 -0
  229. package/dist/test/utils.d.ts.map +1 -0
  230. package/dist/test/utils.js +133 -0
  231. package/dist/test/utils.js.map +1 -0
  232. package/dist/test/utils.test.d.ts +2 -0
  233. package/dist/test/utils.test.d.ts.map +1 -0
  234. package/dist/test/utils.test.js +89 -0
  235. package/dist/test/utils.test.js.map +1 -0
  236. package/dist/test/vitest-setup.d.ts +2 -0
  237. package/dist/test/vitest-setup.d.ts.map +1 -0
  238. package/dist/test/vitest-setup.js +5 -0
  239. package/dist/test/vitest-setup.js.map +1 -0
  240. package/dist/tsconfig.tsbuildinfo +1 -0
  241. package/dist/vitest.config.d.ts +3 -0
  242. package/dist/vitest.config.d.ts.map +1 -0
  243. package/dist/vitest.config.js +27 -0
  244. package/dist/vitest.config.js.map +1 -0
  245. package/package.json +4 -4
  246. package/dist/src/queue/event.d.ts +0 -42
  247. package/dist/src/queue/event.d.ts.map +0 -1
  248. package/dist/src/queue/event.js +0 -222
  249. package/dist/src/queue/event.js.map +0 -1
  250. package/dist/src/server/sync-unit-map.d.ts +0 -137
  251. package/dist/src/server/sync-unit-map.d.ts.map +0 -1
  252. package/dist/src/server/sync-unit-map.js +0 -234
  253. package/dist/src/server/sync-unit-map.js.map +0 -1
  254. package/dist/tsconfig.lib.tsbuildinfo +0 -1
@@ -0,0 +1,3 @@
1
+ declare const _default: import("vitest/config.js").UserConfigFnObject;
2
+ export default _default;
3
+ //# sourceMappingURL=vitest.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAGA,wBAuBI"}
@@ -0,0 +1,27 @@
1
+ import { loadEnv } from "vite";
2
+ import { defaultExclude, defineConfig } from "vitest/config";
3
+ export default defineConfig(({ mode }) => ({
4
+ test: {
5
+ environment: "node",
6
+ env: loadEnv(mode, process.cwd(), ""),
7
+ testTimeout: 5000,
8
+ server: {
9
+ deps: {
10
+ inline: ["document-model-libs"],
11
+ },
12
+ },
13
+ setupFiles: "./test/vitest-setup.ts",
14
+ poolOptions: {
15
+ forks: {
16
+ singleFork: true,
17
+ isolate: true,
18
+ },
19
+ },
20
+ include: ["test/**/*.test.ts"],
21
+ exclude: [...defaultExclude, "test/flaky/**", "test/test-storage/**"],
22
+ alias: {
23
+ "#": new URL("./src/", import.meta.url).pathname,
24
+ },
25
+ },
26
+ }));
27
+ //# sourceMappingURL=vitest.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7D,eAAe,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM;QACnB,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;QACrC,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,MAAM,EAAE,CAAC,qBAAqB,CAAC;aAChC;SACF;QACD,UAAU,EAAE,wBAAwB;QACpC,WAAW,EAAE;YACX,KAAK,EAAE;gBACL,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,IAAI;aACd;SACF;QACD,OAAO,EAAE,CAAC,mBAAmB,CAAC;QAC9B,OAAO,EAAE,CAAC,GAAG,cAAc,EAAE,eAAe,EAAE,sBAAsB,CAAC;QACrE,KAAK,EAAE;YACL,GAAG,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ;SACjD;KACF;CACF,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "document-drive",
3
- "version": "4.0.0-staging.6",
3
+ "version": "4.0.1",
4
4
  "license": "AGPL-3.0-only",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -48,9 +48,9 @@
48
48
  "sqlite3": "^5.1.7",
49
49
  "uuid": "^11.0.5",
50
50
  "zod": "^3.24.3",
51
- "@powerhousedao/codegen": "4.0.0-staging.6",
52
- "@powerhousedao/config": "4.0.0-staging.6",
53
- "document-model": "4.0.0-staging.6"
51
+ "@powerhousedao/config": "4.0.1",
52
+ "@powerhousedao/codegen": "4.0.1",
53
+ "document-model": "4.0.1"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@powerhousedao/analytics-engine-core": "^0.5.0",
@@ -1,42 +0,0 @@
1
- import { type IOperationResult } from "#server/types";
2
- import { type OperationScope } from "document-model";
3
- import { type Unsubscribe } from "nanoevents";
4
- import { type IJob, type IJobQueue, type IQueueManager, type IServerDelegate, type Job, type JobId, type QueueEvents } from "./types.js";
5
- interface EnqueuedJob {
6
- jobId: string;
7
- documentId: string;
8
- scope: OperationScope;
9
- timestamp: string;
10
- }
11
- export declare class EventQueueManager implements IQueueManager {
12
- protected logger: import("#utils/logger").ILogger;
13
- protected emitter: import("nanoevents").Emitter<QueueEvents>;
14
- protected queues: Map<string, Map<OperationScope, IJobQueue>>;
15
- protected globalQueue: EnqueuedJob[];
16
- protected isFindingJob: boolean;
17
- protected maxWorkers: number;
18
- protected workers: number;
19
- protected runningJobs: IJob<Job>[];
20
- protected timeout: number;
21
- protected delegate: IServerDelegate | undefined;
22
- protected onError: ((error: Error) => void) | undefined;
23
- constructor(maxWorkers?: number, timeout?: number);
24
- init(delegate: IServerDelegate, onError: (error: Error) => void): Promise<void>;
25
- addJob(job: Job): Promise<JobId>;
26
- getQueue(documentId: string, scope: OperationScope): IJobQueue;
27
- getDocumentQueues(documentId: string): Map<OperationScope, IJobQueue> | undefined;
28
- removeQueue(documentId: string, scope: OperationScope): boolean | undefined;
29
- removeDocumentQueues(documentId: string): void;
30
- protected removeJob(job: IJob<Job>): void;
31
- protected handleJobCompleted(job: IJob<Job>, result: IOperationResult): Promise<void>;
32
- protected isBusy(): boolean;
33
- protected processNextJob(): Promise<void>;
34
- protected findNextJob(): Promise<{
35
- queue: IJobQueue;
36
- job: IJob<Job>;
37
- } | undefined>;
38
- protected emit<K extends keyof QueueEvents>(event: K, ...args: Parameters<QueueEvents[K]>): void;
39
- on<K extends keyof QueueEvents>(event: K, cb: QueueEvents[K]): Unsubscribe;
40
- }
41
- export {};
42
- //# sourceMappingURL=event.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/queue/event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EACL,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,aAAa,EAElB,KAAK,eAAe,EAEpB,KAAK,GAAG,EACR,KAAK,KAAK,EACV,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAIpB,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,iBAAkB,YAAW,aAAa;IACrD,SAAS,CAAC,MAAM,kCAAsC;IACtD,SAAS,CAAC,OAAO,4CAAmC;IACpD,SAAS,CAAC,MAAM,8CAAoD;IACpE,SAAS,CAAC,WAAW,gBAA4B;IACjD,SAAS,CAAC,YAAY,UAAS;IAC/B,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,cAA0B;IAC/C,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,CAAC;IAChD,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;gBAE5C,UAAU,SAAI,EAAE,OAAO,SAAI;IAMjC,IAAI,CACR,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC;IAyDV,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC;IA8CtC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc;IAgBlD,iBAAiB,CAAC,UAAU,EAAE,MAAM;IAIpC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc;IASrD,oBAAoB,CAAC,UAAU,EAAE,MAAM;IAOvC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;cAkBlB,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,gBAAgB;IAI3E,SAAS,CAAC,MAAM;cAIA,cAAc;cA0Dd,WAAW,IAAI,OAAO,CACpC;QAAE,KAAK,EAAE,SAAS,CAAC;QAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;KAAE,GAAG,SAAS,CACjD;IAuBD,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,MAAM,WAAW,EACxC,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAK9B,EAAE,CAAC,CAAC,SAAS,MAAM,WAAW,EACnC,KAAK,EAAE,CAAC,EACR,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,GACjB,WAAW;CAGf"}
@@ -1,222 +0,0 @@
1
- import { childLogger, logger } from "#utils/logger";
2
- import { generateId } from "document-model";
3
- import { createNanoEvents } from "nanoevents";
4
- import { MemoryQueue } from "./base.js";
5
- import { isDocumentJob, isOperationJob, } from "./types.js";
6
- export class EventQueueManager {
7
- logger = childLogger(["EventQueueManager"]);
8
- emitter = createNanoEvents();
9
- queues = new Map();
10
- globalQueue = new Array();
11
- isFindingJob = false;
12
- maxWorkers;
13
- workers;
14
- runningJobs = new Array();
15
- timeout;
16
- delegate;
17
- onError;
18
- constructor(maxWorkers = 1, timeout = 0) {
19
- this.maxWorkers = maxWorkers;
20
- this.workers = 0;
21
- this.timeout = timeout;
22
- }
23
- async init(delegate, onError) {
24
- this.delegate = delegate;
25
- this.onError = onError;
26
- function wrapErrorHandler(method) {
27
- return (async (...args) => {
28
- try {
29
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
30
- await method(...args);
31
- }
32
- catch (error) {
33
- throw error instanceof Error
34
- ? error
35
- : new Error(JSON.stringify(error));
36
- }
37
- });
38
- }
39
- this.emitter.on("jobAdded", wrapErrorHandler(async (job) => {
40
- this.logger.verbose("Added job", job);
41
- await this.processNextJob();
42
- }));
43
- this.emitter.on("jobStarted", wrapErrorHandler(async (job) => {
44
- this.logger.verbose("Started job", job.jobId);
45
- this.runningJobs.push(job);
46
- await this.processNextJob();
47
- }));
48
- this.emitter.on("jobCompleted", wrapErrorHandler(async (job, result) => {
49
- this.logger.verbose("Completed job", job.jobId);
50
- await this.handleJobCompleted(job, result);
51
- }));
52
- this.emitter.on("jobFailed", wrapErrorHandler(async (job, error) => {
53
- this.logger.error("Failed job", job, error);
54
- this.removeJob(job);
55
- onError(error);
56
- await this.processNextJob();
57
- }));
58
- return Promise.resolve();
59
- }
60
- async addJob(job) {
61
- if (!this.delegate) {
62
- throw new Error("No server delegate defined");
63
- }
64
- const jobId = generateId();
65
- const documentJob = isDocumentJob(job);
66
- const jobActions = isDocumentJob(job)
67
- ? undefined
68
- : isOperationJob(job)
69
- ? job.operations
70
- : job.actions;
71
- if (!documentJob && !jobActions?.length) {
72
- throw new Error("Job has no operations or actions: " + JSON.stringify(job));
73
- }
74
- const scope = jobActions?.at(0)?.scope ?? "global";
75
- if (jobActions?.find((j) => j.scope !== scope)) {
76
- throw new Error("Job has actions with different scopes");
77
- }
78
- const queue = this.getQueue(job.documentId, scope);
79
- // checks if the job is for a document:scope that has been deleted
80
- if (!isDocumentJob(job) && (await queue.isDeleted())) {
81
- throw new Error("Job has operations for deleted document");
82
- }
83
- // TODO should create document job be a dependency of all jobs to the same document?
84
- const jobValue = Object.freeze({ jobId, ...job });
85
- await queue.addJob(jobValue);
86
- this.globalQueue.push({
87
- jobId,
88
- documentId: job.documentId,
89
- scope,
90
- timestamp: new Date().toUTCString(),
91
- });
92
- this.emit("jobAdded", jobValue);
93
- return jobId;
94
- }
95
- getQueue(documentId, scope) {
96
- let docQueue = this.queues.get(documentId);
97
- if (!docQueue) {
98
- docQueue = new Map();
99
- this.queues.set(documentId, docQueue);
100
- }
101
- let scopeQueue = docQueue.get(scope);
102
- if (!scopeQueue) {
103
- scopeQueue = new MemoryQueue(scope);
104
- docQueue.set(scope, scopeQueue);
105
- }
106
- return scopeQueue;
107
- }
108
- getDocumentQueues(documentId) {
109
- return this.queues.get(documentId);
110
- }
111
- removeQueue(documentId, scope) {
112
- const docQueues = this.queues.get(documentId);
113
- const deleted = docQueues?.delete(scope);
114
- if (deleted) {
115
- this.emit("queueRemoved", { documentId, scope });
116
- }
117
- return deleted;
118
- }
119
- removeDocumentQueues(documentId) {
120
- const docQueues = this.queues.get(documentId);
121
- docQueues?.keys().forEach((scope) => {
122
- this.removeQueue(documentId, scope);
123
- });
124
- }
125
- removeJob(job) {
126
- const indexRunning = this.runningJobs.findIndex((j) => j.jobId === job.jobId);
127
- if (indexRunning === -1) {
128
- this.logger.warn("Running job not found", job.jobId);
129
- }
130
- this.runningJobs.splice(indexRunning, 1);
131
- const indexGlobal = this.globalQueue.findIndex((j) => j.jobId === job.jobId);
132
- if (indexGlobal === -1) {
133
- this.logger.warn("Job not found on global queue", job.jobId);
134
- }
135
- this.globalQueue.splice(indexGlobal, 1);
136
- }
137
- async handleJobCompleted(job, result) {
138
- this.removeJob(job);
139
- return this.processNextJob();
140
- }
141
- isBusy() {
142
- return this.workers >= this.maxWorkers;
143
- }
144
- async processNextJob() {
145
- // if there is already a worker looking for a job then waits for it to finish
146
- if (this.isFindingJob) {
147
- return;
148
- }
149
- if (!this.delegate) {
150
- throw new Error("No server delegate defined");
151
- }
152
- // returns if there are no jobs available
153
- if (this.globalQueue.length === 0) {
154
- return;
155
- }
156
- // returns if there are no workers available
157
- if (this.isBusy()) {
158
- return;
159
- }
160
- this.isFindingJob = true;
161
- this.workers++;
162
- let queue;
163
- let job;
164
- try {
165
- const queueJob = await this.findNextJob();
166
- queue = queueJob?.queue;
167
- job = queueJob?.job;
168
- }
169
- catch (error) {
170
- logger.error("Error finding next job", error);
171
- }
172
- if (!queue || !job) {
173
- this.workers--;
174
- this.isFindingJob = false;
175
- return;
176
- }
177
- try {
178
- await queue.setRunning(true);
179
- this.isFindingJob = false;
180
- this.emit("jobStarted", job);
181
- const result = await this.delegate.processJob(job);
182
- this.workers--;
183
- await queue.setRunning(false);
184
- this.emit("jobCompleted", job, result);
185
- }
186
- catch (error) {
187
- logger.error("Job failed", error);
188
- this.workers--;
189
- this.isFindingJob = false;
190
- await queue.setRunning(false);
191
- this.emit("jobFailed", job, error instanceof Error ? error : new Error(JSON.stringify(error)));
192
- }
193
- }
194
- async findNextJob() {
195
- const skippedQueues = new Set();
196
- for (const job of this.globalQueue) {
197
- const queue = this.getQueue(job.documentId, job.scope);
198
- const queueId = queue.getId();
199
- if (skippedQueues.has(queueId)) {
200
- continue;
201
- }
202
- if (await queue.isBlocked()) {
203
- skippedQueues.add(queue.getId());
204
- continue;
205
- }
206
- const queueJob = await queue.getNextJob();
207
- if (queueJob?.jobId !== job.jobId) {
208
- logger.warn("Queue has different job waiting to be picked up"); // TODO ensure this is not possible
209
- logger.error(job, queueJob);
210
- continue;
211
- }
212
- return { queue, job: queueJob };
213
- }
214
- }
215
- emit(event, ...args) {
216
- this.emitter.emit(event, ...args);
217
- }
218
- on(event, cb) {
219
- return this.emitter.on(event, cb);
220
- }
221
- }
222
- //# sourceMappingURL=event.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event.js","sourceRoot":"","sources":["../../../src/queue/event.ts"],"names":[],"mappings":"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"}
@@ -1,137 +0,0 @@
1
- import { type SynchronizationUnitId } from "./types.js";
2
- /**
3
- * Interface for a specialized Map implementation that manages synchronization units.
4
- * Each unit is identified by a SynchronizationUnitId which consists of documentId, scope, and branch.
5
- */
6
- export interface ISyncUnitMap<Value> {
7
- set(id: SynchronizationUnitId, state: Value): this;
8
- get(id: SynchronizationUnitId): Value | undefined;
9
- has(id: SynchronizationUnitId): boolean;
10
- delete(id: SynchronizationUnitId): boolean;
11
- clear(): void;
12
- get size(): number;
13
- keys(): IterableIterator<SynchronizationUnitId>;
14
- values(): IterableIterator<Value>;
15
- entries(): IterableIterator<[SynchronizationUnitId, Value]>;
16
- [Symbol.iterator](): IterableIterator<[SynchronizationUnitId, Value]>;
17
- forEach(callbackfn: (value: Value, key: SynchronizationUnitId, map: ISyncUnitMap<Value>) => void, thisArg?: any): void;
18
- deleteByDocumentId(documentId: string): void;
19
- deleteByDocumentIdAndScope(documentId: string, scope: string): void;
20
- getAllByDocumentId(documentId: string): [SynchronizationUnitId, Value][];
21
- getAllByDocumentIdAndScope(documentId: string, scope: string): [SynchronizationUnitId, Value][];
22
- }
23
- /** Separator character used to join synchronization unit key parts */
24
- type SyncUnitKeySeparator = "|";
25
- /**
26
- * Internal key format used to store synchronization units.
27
- * Composed of documentId, scope, and branch joined by the separator.
28
- */
29
- type SyncUnitKey = `${SynchronizationUnitId["documentId"]}${SyncUnitKeySeparator}${SynchronizationUnitId["scope"]}${SyncUnitKeySeparator}${SynchronizationUnitId["branch"]}`;
30
- /**
31
- * A specialized Map implementation for managing synchronization units that uses a "documentId - scope - branch" tuple as key.
32
- * It provides methods to store, retrieve, and delete synchronization units of a certain documentId, optionally a scope and a branch.
33
- * The implementation uses an internal Map with string keys created by combining documentId, scope, and branch with a separator character.
34
- */
35
- export declare class SyncUnitMap<Value> implements ISyncUnitMap<Value> {
36
- /** Internal storage using concatenated string keys */
37
- private internalMap;
38
- /** Character used to separate key components */
39
- static keySeparator: SyncUnitKeySeparator;
40
- /**
41
- * Escapes the separator character in a string by prefixing it with a backslash
42
- * @param str String to escape
43
- */
44
- private static escape;
45
- /**
46
- * Unescapes the separator character in a string by removing the prefix backslash
47
- * @param str String to unescape
48
- */
49
- private static unescape;
50
- /**
51
- * Creates a composite key from a SynchronizationUnitId
52
- * Escapes any separator characters in the components
53
- * @param id The synchronization unit identifier
54
- * @returns A string key combining documentId, scope, and branch
55
- */
56
- static buildKey(id: SynchronizationUnitId): SyncUnitKey;
57
- /**
58
- * Parses a composite key back into a SynchronizationUnitId
59
- * Unescapes any separator characters in the components
60
- * @param key The composite key string
61
- * @returns The parsed synchronization unit identifier
62
- */
63
- static parseKey(key: SyncUnitKey): SynchronizationUnitId;
64
- /**
65
- * Stores a value with the given synchronization unit identifier
66
- * @throws Error if any part of the id contains the separator character
67
- */
68
- set(id: SynchronizationUnitId, state: Value): this;
69
- /** Retrieves a value by its synchronization unit identifier */
70
- get(id: SynchronizationUnitId): Value | undefined;
71
- /** Checks if a value exists for the given synchronization unit identifier */
72
- has(id: SynchronizationUnitId): boolean;
73
- /** Removes a value by its synchronization unit identifier */
74
- delete(id: SynchronizationUnitId): boolean;
75
- /** Removes all entries from the map */
76
- clear(): void;
77
- /** Returns the number of entries in the map */
78
- get size(): number;
79
- /**
80
- * Returns an iterator of synchronization unit identifiers
81
- * @param filter Optional filter by documentId and scope
82
- */
83
- keys(filter?: {
84
- documentId: string;
85
- scope?: string;
86
- } | undefined): IterableIterator<SynchronizationUnitId>;
87
- /**
88
- * Returns an iterator of stored values
89
- * @param filter Optional filter by documentId and scope
90
- */
91
- values(filter?: {
92
- documentId: string;
93
- scope?: string;
94
- } | undefined): IterableIterator<Value>;
95
- /**
96
- * Returns an iterator of [id, value] pairs
97
- * @param filter Optional filter by documentId and scope
98
- */
99
- entries(filter?: {
100
- documentId: string;
101
- scope?: string;
102
- } | undefined): IterableIterator<[SynchronizationUnitId, Value]>;
103
- /** Makes the map iterable */
104
- [Symbol.iterator](): IterableIterator<[SynchronizationUnitId, Value]>;
105
- /**
106
- * Executes a callback for each entry in the map
107
- * @param callbackfn Function to execute for each entry
108
- * @param thisArg Value to use as 'this' in the callback
109
- */
110
- forEach(callbackfn: (value: Value, key: SynchronizationUnitId, map: ISyncUnitMap<Value>) => void, thisArg?: any): void;
111
- /**
112
- * Removes all entries associated with a specific document
113
- * @param documentId The document identifier
114
- */
115
- deleteByDocumentId(documentId: string): void;
116
- /**
117
- * Removes all entries for a specific document and scope combination
118
- * @param documentId The document identifier
119
- * @param scope The scope identifier
120
- */
121
- deleteByDocumentIdAndScope(documentId: string, scope: string): void;
122
- /**
123
- * Retrieves all entries associated with a specific document
124
- * @param documentId The document identifier
125
- * @returns Array of [id, value] pairs
126
- */
127
- getAllByDocumentId(documentId: string): [SynchronizationUnitId, Value][];
128
- /**
129
- * Retrieves all entries for a specific document and scope combination
130
- * @param documentId The document identifier
131
- * @param scope The scope identifier
132
- * @returns Array of [id, value] pairs
133
- */
134
- getAllByDocumentIdAndScope(documentId: string, scope: string): [SynchronizationUnitId, Value][];
135
- }
136
- export {};
137
- //# sourceMappingURL=sync-unit-map.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync-unit-map.d.ts","sourceRoot":"","sources":["../../../src/server/sync-unit-map.ts"],"names":[],"mappings":"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"}