document-drive 6.0.0-dev.105 → 6.0.0-dev.106

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 (564) hide show
  1. package/dist/chunk-CX61OkwL.mjs +16 -0
  2. package/dist/index-HOJm2mt2.d.mts +205 -0
  3. package/dist/index-HOJm2mt2.d.mts.map +1 -0
  4. package/dist/index.d.ts +1944 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +5170 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/storage/filesystem.d.mts +49 -0
  9. package/dist/storage/filesystem.d.mts.map +1 -0
  10. package/dist/storage/filesystem.mjs +371 -0
  11. package/dist/storage/filesystem.mjs.map +1 -0
  12. package/dist/storage/prisma.d.mts +11508 -0
  13. package/dist/storage/prisma.d.mts.map +1 -0
  14. package/dist/storage/prisma.mjs +7582 -0
  15. package/dist/storage/prisma.mjs.map +1 -0
  16. package/dist/utils-BI7cwVSp.mjs +74 -0
  17. package/dist/utils-BI7cwVSp.mjs.map +1 -0
  18. package/package.json +21 -38
  19. package/dist/prisma/schema.prisma +0 -93
  20. package/dist/src/cache/index.d.ts +0 -4
  21. package/dist/src/cache/index.d.ts.map +0 -1
  22. package/dist/src/cache/index.js +0 -4
  23. package/dist/src/cache/index.js.map +0 -1
  24. package/dist/src/cache/lru.d.ts +0 -22
  25. package/dist/src/cache/lru.d.ts.map +0 -1
  26. package/dist/src/cache/lru.js +0 -40
  27. package/dist/src/cache/lru.js.map +0 -1
  28. package/dist/src/cache/memory.d.ts +0 -27
  29. package/dist/src/cache/memory.d.ts.map +0 -1
  30. package/dist/src/cache/memory.js +0 -104
  31. package/dist/src/cache/memory.js.map +0 -1
  32. package/dist/src/cache/redis.d.ts +0 -22
  33. package/dist/src/cache/redis.d.ts.map +0 -1
  34. package/dist/src/cache/redis.js +0 -91
  35. package/dist/src/cache/redis.js.map +0 -1
  36. package/dist/src/cache/types.d.ts +0 -37
  37. package/dist/src/cache/types.d.ts.map +0 -1
  38. package/dist/src/cache/types.js +0 -2
  39. package/dist/src/cache/types.js.map +0 -1
  40. package/dist/src/cache/util.d.ts +0 -3
  41. package/dist/src/cache/util.d.ts.map +0 -1
  42. package/dist/src/cache/util.js +0 -16
  43. package/dist/src/cache/util.js.map +0 -1
  44. package/dist/src/drive-document-model/constants.d.ts +0 -2
  45. package/dist/src/drive-document-model/constants.d.ts.map +0 -1
  46. package/dist/src/drive-document-model/constants.js +0 -2
  47. package/dist/src/drive-document-model/constants.js.map +0 -1
  48. package/dist/src/drive-document-model/gen/creators.d.ts +0 -3
  49. package/dist/src/drive-document-model/gen/creators.d.ts.map +0 -1
  50. package/dist/src/drive-document-model/gen/creators.js +0 -3
  51. package/dist/src/drive-document-model/gen/creators.js.map +0 -1
  52. package/dist/src/drive-document-model/gen/document-model.d.ts +0 -3
  53. package/dist/src/drive-document-model/gen/document-model.d.ts.map +0 -1
  54. package/dist/src/drive-document-model/gen/document-model.js +0 -210
  55. package/dist/src/drive-document-model/gen/document-model.js.map +0 -1
  56. package/dist/src/drive-document-model/gen/document-schema.d.ts +0 -68
  57. package/dist/src/drive-document-model/gen/document-schema.d.ts.map +0 -1
  58. package/dist/src/drive-document-model/gen/document-schema.js +0 -35
  59. package/dist/src/drive-document-model/gen/document-schema.js.map +0 -1
  60. package/dist/src/drive-document-model/gen/document-type.d.ts +0 -2
  61. package/dist/src/drive-document-model/gen/document-type.d.ts.map +0 -1
  62. package/dist/src/drive-document-model/gen/document-type.js +0 -2
  63. package/dist/src/drive-document-model/gen/document-type.js.map +0 -1
  64. package/dist/src/drive-document-model/gen/drive/actions.d.ts +0 -46
  65. package/dist/src/drive-document-model/gen/drive/actions.d.ts.map +0 -1
  66. package/dist/src/drive-document-model/gen/drive/actions.js +0 -2
  67. package/dist/src/drive-document-model/gen/drive/actions.js.map +0 -1
  68. package/dist/src/drive-document-model/gen/drive/creators.d.ts +0 -10
  69. package/dist/src/drive-document-model/gen/drive/creators.d.ts.map +0 -1
  70. package/dist/src/drive-document-model/gen/drive/creators.js +0 -11
  71. package/dist/src/drive-document-model/gen/drive/creators.js.map +0 -1
  72. package/dist/src/drive-document-model/gen/drive/error.d.ts +0 -2
  73. package/dist/src/drive-document-model/gen/drive/error.d.ts.map +0 -1
  74. package/dist/src/drive-document-model/gen/drive/error.js +0 -2
  75. package/dist/src/drive-document-model/gen/drive/error.js.map +0 -1
  76. package/dist/src/drive-document-model/gen/drive/index.d.ts +0 -2
  77. package/dist/src/drive-document-model/gen/drive/index.d.ts.map +0 -1
  78. package/dist/src/drive-document-model/gen/drive/index.js +0 -2
  79. package/dist/src/drive-document-model/gen/drive/index.js.map +0 -1
  80. package/dist/src/drive-document-model/gen/drive/types.d.ts +0 -2
  81. package/dist/src/drive-document-model/gen/drive/types.d.ts.map +0 -1
  82. package/dist/src/drive-document-model/gen/drive/types.js +0 -2
  83. package/dist/src/drive-document-model/gen/drive/types.js.map +0 -1
  84. package/dist/src/drive-document-model/gen/index.d.ts +0 -10
  85. package/dist/src/drive-document-model/gen/index.d.ts.map +0 -1
  86. package/dist/src/drive-document-model/gen/index.js +0 -10
  87. package/dist/src/drive-document-model/gen/index.js.map +0 -1
  88. package/dist/src/drive-document-model/gen/node/actions.d.ts +0 -41
  89. package/dist/src/drive-document-model/gen/node/actions.d.ts.map +0 -1
  90. package/dist/src/drive-document-model/gen/node/actions.js +0 -2
  91. package/dist/src/drive-document-model/gen/node/actions.js.map +0 -1
  92. package/dist/src/drive-document-model/gen/node/creators.d.ts +0 -13
  93. package/dist/src/drive-document-model/gen/node/creators.d.ts.map +0 -1
  94. package/dist/src/drive-document-model/gen/node/creators.js +0 -17
  95. package/dist/src/drive-document-model/gen/node/creators.js.map +0 -1
  96. package/dist/src/drive-document-model/gen/node/error.d.ts +0 -2
  97. package/dist/src/drive-document-model/gen/node/error.d.ts.map +0 -1
  98. package/dist/src/drive-document-model/gen/node/error.js +0 -2
  99. package/dist/src/drive-document-model/gen/node/error.js.map +0 -1
  100. package/dist/src/drive-document-model/gen/node/index.d.ts +0 -2
  101. package/dist/src/drive-document-model/gen/node/index.d.ts.map +0 -1
  102. package/dist/src/drive-document-model/gen/node/index.js +0 -2
  103. package/dist/src/drive-document-model/gen/node/index.js.map +0 -1
  104. package/dist/src/drive-document-model/gen/node/types.d.ts +0 -2
  105. package/dist/src/drive-document-model/gen/node/types.d.ts.map +0 -1
  106. package/dist/src/drive-document-model/gen/node/types.js +0 -2
  107. package/dist/src/drive-document-model/gen/node/types.js.map +0 -1
  108. package/dist/src/drive-document-model/gen/ph-factories.d.ts +0 -12
  109. package/dist/src/drive-document-model/gen/ph-factories.d.ts.map +0 -1
  110. package/dist/src/drive-document-model/gen/ph-factories.js +0 -46
  111. package/dist/src/drive-document-model/gen/ph-factories.js.map +0 -1
  112. package/dist/src/drive-document-model/gen/reducer.d.ts +0 -4
  113. package/dist/src/drive-document-model/gen/reducer.d.ts.map +0 -1
  114. package/dist/src/drive-document-model/gen/reducer.js +0 -76
  115. package/dist/src/drive-document-model/gen/reducer.js.map +0 -1
  116. package/dist/src/drive-document-model/gen/schema/index.d.ts +0 -2
  117. package/dist/src/drive-document-model/gen/schema/index.d.ts.map +0 -1
  118. package/dist/src/drive-document-model/gen/schema/index.js +0 -2
  119. package/dist/src/drive-document-model/gen/schema/index.js.map +0 -1
  120. package/dist/src/drive-document-model/gen/schema/types.d.ts +0 -283
  121. package/dist/src/drive-document-model/gen/schema/types.d.ts.map +0 -1
  122. package/dist/src/drive-document-model/gen/schema/types.js +0 -2
  123. package/dist/src/drive-document-model/gen/schema/types.js.map +0 -1
  124. package/dist/src/drive-document-model/gen/schema/zod.d.ts +0 -67
  125. package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +0 -1
  126. package/dist/src/drive-document-model/gen/schema/zod.js +0 -229
  127. package/dist/src/drive-document-model/gen/schema/zod.js.map +0 -1
  128. package/dist/src/drive-document-model/gen/types.d.ts +0 -21
  129. package/dist/src/drive-document-model/gen/types.d.ts.map +0 -1
  130. package/dist/src/drive-document-model/gen/types.js +0 -4
  131. package/dist/src/drive-document-model/gen/types.js.map +0 -1
  132. package/dist/src/drive-document-model/gen/utils.d.ts +0 -13
  133. package/dist/src/drive-document-model/gen/utils.d.ts.map +0 -1
  134. package/dist/src/drive-document-model/gen/utils.js +0 -48
  135. package/dist/src/drive-document-model/gen/utils.js.map +0 -1
  136. package/dist/src/drive-document-model/index.d.ts +0 -5
  137. package/dist/src/drive-document-model/index.d.ts.map +0 -1
  138. package/dist/src/drive-document-model/index.js +0 -5
  139. package/dist/src/drive-document-model/index.js.map +0 -1
  140. package/dist/src/drive-document-model/module.d.ts +0 -3
  141. package/dist/src/drive-document-model/module.d.ts.map +0 -1
  142. package/dist/src/drive-document-model/module.js +0 -24
  143. package/dist/src/drive-document-model/module.js.map +0 -1
  144. package/dist/src/drive-document-model/src/index.d.ts +0 -3
  145. package/dist/src/drive-document-model/src/index.d.ts.map +0 -1
  146. package/dist/src/drive-document-model/src/index.js +0 -3
  147. package/dist/src/drive-document-model/src/index.js.map +0 -1
  148. package/dist/src/drive-document-model/src/reducers/drive.d.ts +0 -8
  149. package/dist/src/drive-document-model/src/reducers/drive.d.ts.map +0 -1
  150. package/dist/src/drive-document-model/src/reducers/drive.js +0 -66
  151. package/dist/src/drive-document-model/src/reducers/drive.js.map +0 -1
  152. package/dist/src/drive-document-model/src/reducers/index.d.ts +0 -3
  153. package/dist/src/drive-document-model/src/reducers/index.d.ts.map +0 -1
  154. package/dist/src/drive-document-model/src/reducers/index.js +0 -3
  155. package/dist/src/drive-document-model/src/reducers/index.js.map +0 -1
  156. package/dist/src/drive-document-model/src/reducers/node.d.ts +0 -8
  157. package/dist/src/drive-document-model/src/reducers/node.d.ts.map +0 -1
  158. package/dist/src/drive-document-model/src/reducers/node.js +0 -187
  159. package/dist/src/drive-document-model/src/reducers/node.js.map +0 -1
  160. package/dist/src/drive-document-model/src/tests/actions.test.d.ts +0 -2
  161. package/dist/src/drive-document-model/src/tests/actions.test.d.ts.map +0 -1
  162. package/dist/src/drive-document-model/src/tests/actions.test.js +0 -197
  163. package/dist/src/drive-document-model/src/tests/actions.test.js.map +0 -1
  164. package/dist/src/drive-document-model/src/tests/base.test.d.ts +0 -2
  165. package/dist/src/drive-document-model/src/tests/base.test.d.ts.map +0 -1
  166. package/dist/src/drive-document-model/src/tests/base.test.js +0 -44
  167. package/dist/src/drive-document-model/src/tests/base.test.js.map +0 -1
  168. package/dist/src/drive-document-model/src/tests/document-model.test.d.ts +0 -6
  169. package/dist/src/drive-document-model/src/tests/document-model.test.d.ts.map +0 -1
  170. package/dist/src/drive-document-model/src/tests/document-model.test.js +0 -19
  171. package/dist/src/drive-document-model/src/tests/document-model.test.js.map +0 -1
  172. package/dist/src/drive-document-model/src/tests/drive.test.d.ts +0 -6
  173. package/dist/src/drive-document-model/src/tests/drive.test.d.ts.map +0 -1
  174. package/dist/src/drive-document-model/src/tests/drive.test.js +0 -38
  175. package/dist/src/drive-document-model/src/tests/drive.test.js.map +0 -1
  176. package/dist/src/drive-document-model/src/tests/generate-mock.d.ts +0 -3
  177. package/dist/src/drive-document-model/src/tests/generate-mock.d.ts.map +0 -1
  178. package/dist/src/drive-document-model/src/tests/generate-mock.js +0 -5
  179. package/dist/src/drive-document-model/src/tests/generate-mock.js.map +0 -1
  180. package/dist/src/drive-document-model/src/tests/node.test.d.ts +0 -6
  181. package/dist/src/drive-document-model/src/tests/node.test.d.ts.map +0 -1
  182. package/dist/src/drive-document-model/src/tests/node.test.js +0 -343
  183. package/dist/src/drive-document-model/src/tests/node.test.js.map +0 -1
  184. package/dist/src/drive-document-model/src/tests/test-factories.d.ts +0 -9
  185. package/dist/src/drive-document-model/src/tests/test-factories.d.ts.map +0 -1
  186. package/dist/src/drive-document-model/src/tests/test-factories.js +0 -17
  187. package/dist/src/drive-document-model/src/tests/test-factories.js.map +0 -1
  188. package/dist/src/drive-document-model/src/tests/utils.test.d.ts +0 -2
  189. package/dist/src/drive-document-model/src/tests/utils.test.d.ts.map +0 -1
  190. package/dist/src/drive-document-model/src/tests/utils.test.js +0 -232
  191. package/dist/src/drive-document-model/src/tests/utils.test.js.map +0 -1
  192. package/dist/src/drive-document-model/src/types.d.ts +0 -8
  193. package/dist/src/drive-document-model/src/types.d.ts.map +0 -1
  194. package/dist/src/drive-document-model/src/types.js +0 -2
  195. package/dist/src/drive-document-model/src/types.js.map +0 -1
  196. package/dist/src/drive-document-model/src/utils.d.ts +0 -23
  197. package/dist/src/drive-document-model/src/utils.d.ts.map +0 -1
  198. package/dist/src/drive-document-model/src/utils.js +0 -102
  199. package/dist/src/drive-document-model/src/utils.js.map +0 -1
  200. package/dist/src/drive-document-model/types.d.ts +0 -10
  201. package/dist/src/drive-document-model/types.d.ts.map +0 -1
  202. package/dist/src/drive-document-model/types.js +0 -3
  203. package/dist/src/drive-document-model/types.js.map +0 -1
  204. package/dist/src/index.d.ts +0 -17
  205. package/dist/src/index.d.ts.map +0 -1
  206. package/dist/src/index.js +0 -17
  207. package/dist/src/index.js.map +0 -1
  208. package/dist/src/processors/index.d.ts +0 -4
  209. package/dist/src/processors/index.d.ts.map +0 -1
  210. package/dist/src/processors/index.js +0 -4
  211. package/dist/src/processors/index.js.map +0 -1
  212. package/dist/src/processors/processor-manager.d.ts +0 -21
  213. package/dist/src/processors/processor-manager.d.ts.map +0 -1
  214. package/dist/src/processors/processor-manager.js +0 -104
  215. package/dist/src/processors/processor-manager.js.map +0 -1
  216. package/dist/src/processors/relational.d.ts +0 -49
  217. package/dist/src/processors/relational.d.ts.map +0 -1
  218. package/dist/src/processors/relational.js +0 -57
  219. package/dist/src/processors/relational.js.map +0 -1
  220. package/dist/src/processors/types.d.ts +0 -94
  221. package/dist/src/processors/types.d.ts.map +0 -1
  222. package/dist/src/processors/types.js +0 -2
  223. package/dist/src/processors/types.js.map +0 -1
  224. package/dist/src/processors/utils.d.ts +0 -29
  225. package/dist/src/processors/utils.d.ts.map +0 -1
  226. package/dist/src/processors/utils.js +0 -72
  227. package/dist/src/processors/utils.js.map +0 -1
  228. package/dist/src/queue/base.d.ts +0 -22
  229. package/dist/src/queue/base.d.ts.map +0 -1
  230. package/dist/src/queue/base.js +0 -54
  231. package/dist/src/queue/base.js.map +0 -1
  232. package/dist/src/queue/event.d.ts +0 -40
  233. package/dist/src/queue/event.d.ts.map +0 -1
  234. package/dist/src/queue/event.js +0 -226
  235. package/dist/src/queue/event.js.map +0 -1
  236. package/dist/src/queue/index.d.ts +0 -5
  237. package/dist/src/queue/index.d.ts.map +0 -1
  238. package/dist/src/queue/index.js +0 -5
  239. package/dist/src/queue/index.js.map +0 -1
  240. package/dist/src/queue/redis.d.ts +0 -2
  241. package/dist/src/queue/redis.d.ts.map +0 -1
  242. package/dist/src/queue/redis.js +0 -123
  243. package/dist/src/queue/redis.js.map +0 -1
  244. package/dist/src/queue/types.d.ts +0 -59
  245. package/dist/src/queue/types.d.ts.map +0 -1
  246. package/dist/src/queue/types.js +0 -2
  247. package/dist/src/queue/types.js.map +0 -1
  248. package/dist/src/queue/utils.d.ts +0 -5
  249. package/dist/src/queue/utils.d.ts.map +0 -1
  250. package/dist/src/queue/utils.js +0 -10
  251. package/dist/src/queue/utils.js.map +0 -1
  252. package/dist/src/read-mode/errors.d.ts +0 -12
  253. package/dist/src/read-mode/errors.d.ts.map +0 -1
  254. package/dist/src/read-mode/errors.js +0 -18
  255. package/dist/src/read-mode/errors.js.map +0 -1
  256. package/dist/src/read-mode/index.d.ts +0 -4
  257. package/dist/src/read-mode/index.d.ts.map +0 -1
  258. package/dist/src/read-mode/index.js +0 -4
  259. package/dist/src/read-mode/index.js.map +0 -1
  260. package/dist/src/read-mode/server.d.ts +0 -3
  261. package/dist/src/read-mode/server.d.ts.map +0 -1
  262. package/dist/src/read-mode/server.js +0 -78
  263. package/dist/src/read-mode/server.js.map +0 -1
  264. package/dist/src/read-mode/service.d.ts +0 -17
  265. package/dist/src/read-mode/service.d.ts.map +0 -1
  266. package/dist/src/read-mode/service.js +0 -119
  267. package/dist/src/read-mode/service.js.map +0 -1
  268. package/dist/src/read-mode/types.d.ts +0 -31
  269. package/dist/src/read-mode/types.d.ts.map +0 -1
  270. package/dist/src/read-mode/types.js +0 -2
  271. package/dist/src/read-mode/types.js.map +0 -1
  272. package/dist/src/server/base-server.d.ts +0 -177
  273. package/dist/src/server/base-server.d.ts.map +0 -1
  274. package/dist/src/server/base-server.js +0 -2000
  275. package/dist/src/server/base-server.js.map +0 -1
  276. package/dist/src/server/builder.d.ts +0 -27
  277. package/dist/src/server/builder.d.ts.map +0 -1
  278. package/dist/src/server/builder.js +0 -97
  279. package/dist/src/server/builder.js.map +0 -1
  280. package/dist/src/server/error.d.ts +0 -34
  281. package/dist/src/server/error.d.ts.map +0 -1
  282. package/dist/src/server/error.js +0 -56
  283. package/dist/src/server/error.js.map +0 -1
  284. package/dist/src/server/event-emitter.d.ts +0 -8
  285. package/dist/src/server/event-emitter.d.ts.map +0 -1
  286. package/dist/src/server/event-emitter.js +0 -11
  287. package/dist/src/server/event-emitter.js.map +0 -1
  288. package/dist/src/server/index.d.ts +0 -10
  289. package/dist/src/server/index.d.ts.map +0 -1
  290. package/dist/src/server/index.js +0 -10
  291. package/dist/src/server/index.js.map +0 -1
  292. package/dist/src/server/listener/constants.d.ts +0 -4
  293. package/dist/src/server/listener/constants.d.ts.map +0 -1
  294. package/dist/src/server/listener/constants.js +0 -4
  295. package/dist/src/server/listener/constants.js.map +0 -1
  296. package/dist/src/server/listener/index.d.ts +0 -4
  297. package/dist/src/server/listener/index.d.ts.map +0 -1
  298. package/dist/src/server/listener/index.js +0 -4
  299. package/dist/src/server/listener/index.js.map +0 -1
  300. package/dist/src/server/listener/listener-manager.d.ts +0 -28
  301. package/dist/src/server/listener/listener-manager.d.ts.map +0 -1
  302. package/dist/src/server/listener/listener-manager.js +0 -415
  303. package/dist/src/server/listener/listener-manager.js.map +0 -1
  304. package/dist/src/server/listener/util.d.ts +0 -2
  305. package/dist/src/server/listener/util.d.ts.map +0 -1
  306. package/dist/src/server/listener/util.js +0 -23
  307. package/dist/src/server/listener/util.js.map +0 -1
  308. package/dist/src/server/sync-manager.d.ts +0 -28
  309. package/dist/src/server/sync-manager.d.ts.map +0 -1
  310. package/dist/src/server/sync-manager.js +0 -222
  311. package/dist/src/server/sync-manager.js.map +0 -1
  312. package/dist/src/server/sync-unit-map.d.ts +0 -116
  313. package/dist/src/server/sync-unit-map.d.ts.map +0 -1
  314. package/dist/src/server/sync-unit-map.js +0 -233
  315. package/dist/src/server/sync-unit-map.js.map +0 -1
  316. package/dist/src/server/transmitter/constants.d.ts +0 -2
  317. package/dist/src/server/transmitter/constants.d.ts.map +0 -1
  318. package/dist/src/server/transmitter/constants.js +0 -2
  319. package/dist/src/server/transmitter/constants.js.map +0 -1
  320. package/dist/src/server/transmitter/factory.d.ts +0 -7
  321. package/dist/src/server/transmitter/factory.d.ts.map +0 -1
  322. package/dist/src/server/transmitter/factory.js +0 -25
  323. package/dist/src/server/transmitter/factory.js.map +0 -1
  324. package/dist/src/server/transmitter/index.d.ts +0 -6
  325. package/dist/src/server/transmitter/index.d.ts.map +0 -1
  326. package/dist/src/server/transmitter/index.js +0 -5
  327. package/dist/src/server/transmitter/index.js.map +0 -1
  328. package/dist/src/server/transmitter/internal.d.ts +0 -12
  329. package/dist/src/server/transmitter/internal.d.ts.map +0 -1
  330. package/dist/src/server/transmitter/internal.js +0 -113
  331. package/dist/src/server/transmitter/internal.js.map +0 -1
  332. package/dist/src/server/transmitter/pull-responder.d.ts +0 -30
  333. package/dist/src/server/transmitter/pull-responder.d.ts.map +0 -1
  334. package/dist/src/server/transmitter/pull-responder.js +0 -543
  335. package/dist/src/server/transmitter/pull-responder.js.map +0 -1
  336. package/dist/src/server/transmitter/switchboard-push.d.ts +0 -11
  337. package/dist/src/server/transmitter/switchboard-push.d.ts.map +0 -1
  338. package/dist/src/server/transmitter/switchboard-push.js +0 -130
  339. package/dist/src/server/transmitter/switchboard-push.js.map +0 -1
  340. package/dist/src/server/transmitter/types.d.ts +0 -53
  341. package/dist/src/server/transmitter/types.d.ts.map +0 -1
  342. package/dist/src/server/transmitter/types.js +0 -2
  343. package/dist/src/server/transmitter/types.js.map +0 -1
  344. package/dist/src/server/types.d.ts +0 -419
  345. package/dist/src/server/types.d.ts.map +0 -1
  346. package/dist/src/server/types.js +0 -10
  347. package/dist/src/server/types.js.map +0 -1
  348. package/dist/src/server/utils.d.ts +0 -19
  349. package/dist/src/server/utils.d.ts.map +0 -1
  350. package/dist/src/server/utils.js +0 -110
  351. package/dist/src/server/utils.js.map +0 -1
  352. package/dist/src/storage/browser.d.ts +0 -52
  353. package/dist/src/storage/browser.d.ts.map +0 -1
  354. package/dist/src/storage/browser.js +0 -430
  355. package/dist/src/storage/browser.js.map +0 -1
  356. package/dist/src/storage/filesystem.d.ts +0 -45
  357. package/dist/src/storage/filesystem.d.ts.map +0 -1
  358. package/dist/src/storage/filesystem.js +0 -457
  359. package/dist/src/storage/filesystem.js.map +0 -1
  360. package/dist/src/storage/index.d.ts +0 -5
  361. package/dist/src/storage/index.d.ts.map +0 -1
  362. package/dist/src/storage/index.js +0 -5
  363. package/dist/src/storage/index.js.map +0 -1
  364. package/dist/src/storage/ipfs.d.ts +0 -2
  365. package/dist/src/storage/ipfs.d.ts.map +0 -1
  366. package/dist/src/storage/ipfs.js +0 -491
  367. package/dist/src/storage/ipfs.js.map +0 -1
  368. package/dist/src/storage/memory.d.ts +0 -42
  369. package/dist/src/storage/memory.d.ts.map +0 -1
  370. package/dist/src/storage/memory.js +0 -355
  371. package/dist/src/storage/memory.js.map +0 -1
  372. package/dist/src/storage/path-encoding.d.ts +0 -21
  373. package/dist/src/storage/path-encoding.d.ts.map +0 -1
  374. package/dist/src/storage/path-encoding.js +0 -53
  375. package/dist/src/storage/path-encoding.js.map +0 -1
  376. package/dist/src/storage/prisma/client/default.d.ts +0 -1
  377. package/dist/src/storage/prisma/client/default.js +0 -1
  378. package/dist/src/storage/prisma/client/edge.d.ts +0 -1
  379. package/dist/src/storage/prisma/client/edge.js +0 -263
  380. package/dist/src/storage/prisma/client/index-browser.js +0 -246
  381. package/dist/src/storage/prisma/client/index.d.ts +0 -10318
  382. package/dist/src/storage/prisma/client/index.js +0 -292
  383. package/dist/src/storage/prisma/client/libquery_engine-darwin-arm64.dylib.node +0 -0
  384. package/dist/src/storage/prisma/client/libquery_engine-debian-openssl-3.0.x.so.node +0 -0
  385. package/dist/src/storage/prisma/client/libquery_engine-linux-musl.so.node +0 -0
  386. package/dist/src/storage/prisma/client/package.json +0 -84
  387. package/dist/src/storage/prisma/client/runtime/edge-esm.js +0 -31
  388. package/dist/src/storage/prisma/client/runtime/edge.js +0 -31
  389. package/dist/src/storage/prisma/client/runtime/index-browser.d.ts +0 -365
  390. package/dist/src/storage/prisma/client/runtime/index-browser.js +0 -13
  391. package/dist/src/storage/prisma/client/runtime/library.d.ts +0 -3273
  392. package/dist/src/storage/prisma/client/runtime/library.js +0 -143
  393. package/dist/src/storage/prisma/client/runtime/react-native.js +0 -80
  394. package/dist/src/storage/prisma/client/runtime/wasm.js +0 -32
  395. package/dist/src/storage/prisma/client/schema.prisma +0 -93
  396. package/dist/src/storage/prisma/client/wasm.d.ts +0 -1
  397. package/dist/src/storage/prisma/client/wasm.js +0 -246
  398. package/dist/src/storage/prisma/factory.d.ts +0 -10
  399. package/dist/src/storage/prisma/factory.d.ts.map +0 -1
  400. package/dist/src/storage/prisma/factory.js +0 -23
  401. package/dist/src/storage/prisma/factory.js.map +0 -1
  402. package/dist/src/storage/prisma/index.d.ts +0 -3
  403. package/dist/src/storage/prisma/index.d.ts.map +0 -1
  404. package/dist/src/storage/prisma/index.js +0 -3
  405. package/dist/src/storage/prisma/index.js.map +0 -1
  406. package/dist/src/storage/prisma/prisma.d.ts +0 -73
  407. package/dist/src/storage/prisma/prisma.d.ts.map +0 -1
  408. package/dist/src/storage/prisma/prisma.js +0 -760
  409. package/dist/src/storage/prisma/prisma.js.map +0 -1
  410. package/dist/src/storage/types.d.ts +0 -187
  411. package/dist/src/storage/types.d.ts.map +0 -1
  412. package/dist/src/storage/types.js +0 -2
  413. package/dist/src/storage/types.js.map +0 -1
  414. package/dist/src/storage/utils.d.ts +0 -6
  415. package/dist/src/storage/utils.d.ts.map +0 -1
  416. package/dist/src/storage/utils.js +0 -33
  417. package/dist/src/storage/utils.js.map +0 -1
  418. package/dist/src/utils/default-drives-manager.d.ts +0 -18
  419. package/dist/src/utils/default-drives-manager.d.ts.map +0 -1
  420. package/dist/src/utils/default-drives-manager.js +0 -208
  421. package/dist/src/utils/default-drives-manager.js.map +0 -1
  422. package/dist/src/utils/errors.d.ts +0 -5
  423. package/dist/src/utils/errors.d.ts.map +0 -1
  424. package/dist/src/utils/errors.js +0 -10
  425. package/dist/src/utils/errors.js.map +0 -1
  426. package/dist/src/utils/gql-transformations.d.ts +0 -32
  427. package/dist/src/utils/gql-transformations.d.ts.map +0 -1
  428. package/dist/src/utils/gql-transformations.js +0 -39
  429. package/dist/src/utils/gql-transformations.js.map +0 -1
  430. package/dist/src/utils/graphql.d.ts +0 -13
  431. package/dist/src/utils/graphql.d.ts.map +0 -1
  432. package/dist/src/utils/graphql.js +0 -196
  433. package/dist/src/utils/graphql.js.map +0 -1
  434. package/dist/src/utils/index.d.ts +0 -9
  435. package/dist/src/utils/index.d.ts.map +0 -1
  436. package/dist/src/utils/index.js +0 -9
  437. package/dist/src/utils/index.js.map +0 -1
  438. package/dist/src/utils/logger.d.ts +0 -3
  439. package/dist/src/utils/logger.d.ts.map +0 -1
  440. package/dist/src/utils/logger.js +0 -2
  441. package/dist/src/utils/logger.js.map +0 -1
  442. package/dist/src/utils/migrations.d.ts +0 -4
  443. package/dist/src/utils/migrations.d.ts.map +0 -1
  444. package/dist/src/utils/migrations.js +0 -112
  445. package/dist/src/utils/migrations.js.map +0 -1
  446. package/dist/src/utils/misc.d.ts +0 -21
  447. package/dist/src/utils/misc.d.ts.map +0 -1
  448. package/dist/src/utils/misc.js +0 -55
  449. package/dist/src/utils/misc.js.map +0 -1
  450. package/dist/src/utils/run-asap.d.ts +0 -8
  451. package/dist/src/utils/run-asap.d.ts.map +0 -1
  452. package/dist/src/utils/run-asap.js +0 -120
  453. package/dist/src/utils/run-asap.js.map +0 -1
  454. package/dist/src/utils/test.d.ts +0 -63
  455. package/dist/src/utils/test.d.ts.map +0 -1
  456. package/dist/src/utils/test.js +0 -161
  457. package/dist/src/utils/test.js.map +0 -1
  458. package/dist/src/utils/types.d.ts +0 -44
  459. package/dist/src/utils/types.d.ts.map +0 -1
  460. package/dist/src/utils/types.js +0 -2
  461. package/dist/src/utils/types.js.map +0 -1
  462. package/dist/test/benchmarks/getDrive.json +0 -10
  463. package/dist/test/benchmarks/processOperations.bench.d.ts +0 -2
  464. package/dist/test/benchmarks/processOperations.bench.d.ts.map +0 -1
  465. package/dist/test/benchmarks/processOperations.bench.js +0 -148
  466. package/dist/test/benchmarks/processOperations.bench.js.map +0 -1
  467. package/dist/test/benchmarks/queue.bench.d.ts +0 -2
  468. package/dist/test/benchmarks/queue.bench.d.ts.map +0 -1
  469. package/dist/test/benchmarks/queue.bench.js +0 -55
  470. package/dist/test/benchmarks/queue.bench.js.map +0 -1
  471. package/dist/test/benchmarks/strands.small.json +0 -37085
  472. package/dist/test/cache.test.d.ts +0 -2
  473. package/dist/test/cache.test.d.ts.map +0 -1
  474. package/dist/test/cache.test.js +0 -276
  475. package/dist/test/cache.test.js.map +0 -1
  476. package/dist/test/default-remote-drives.test.d.ts +0 -2
  477. package/dist/test/default-remote-drives.test.d.ts.map +0 -1
  478. package/dist/test/default-remote-drives.test.js +0 -445
  479. package/dist/test/default-remote-drives.test.js.map +0 -1
  480. package/dist/test/drive-operations.test.d.ts +0 -2
  481. package/dist/test/drive-operations.test.d.ts.map +0 -1
  482. package/dist/test/drive-operations.test.js +0 -134
  483. package/dist/test/drive-operations.test.js.map +0 -1
  484. package/dist/test/dual-action-create.test.d.ts +0 -2
  485. package/dist/test/dual-action-create.test.d.ts.map +0 -1
  486. package/dist/test/dual-action-create.test.js +0 -187
  487. package/dist/test/dual-action-create.test.js.map +0 -1
  488. package/dist/test/dual-action-migration.test.d.ts +0 -2
  489. package/dist/test/dual-action-migration.test.d.ts.map +0 -1
  490. package/dist/test/dual-action-migration.test.js +0 -348
  491. package/dist/test/dual-action-migration.test.js.map +0 -1
  492. package/dist/test/graphql.test.d.ts +0 -2
  493. package/dist/test/graphql.test.d.ts.map +0 -1
  494. package/dist/test/graphql.test.js +0 -9
  495. package/dist/test/graphql.test.js.map +0 -1
  496. package/dist/test/internal-listener.test.d.ts +0 -2
  497. package/dist/test/internal-listener.test.d.ts.map +0 -1
  498. package/dist/test/internal-listener.test.js +0 -262
  499. package/dist/test/internal-listener.test.js.map +0 -1
  500. package/dist/test/path-encoding.test.d.ts +0 -2
  501. package/dist/test/path-encoding.test.d.ts.map +0 -1
  502. package/dist/test/path-encoding.test.js +0 -116
  503. package/dist/test/path-encoding.test.js.map +0 -1
  504. package/dist/test/queue.test.d.ts +0 -2
  505. package/dist/test/queue.test.d.ts.map +0 -1
  506. package/dist/test/queue.test.js +0 -325
  507. package/dist/test/queue.test.js.map +0 -1
  508. package/dist/test/reactor.test.d.ts +0 -2
  509. package/dist/test/reactor.test.d.ts.map +0 -1
  510. package/dist/test/reactor.test.js +0 -32
  511. package/dist/test/reactor.test.js.map +0 -1
  512. package/dist/test/read-mode.test.d.ts +0 -2
  513. package/dist/test/read-mode.test.d.ts.map +0 -1
  514. package/dist/test/read-mode.test.js +0 -569
  515. package/dist/test/read-mode.test.js.map +0 -1
  516. package/dist/test/server/driveOperationsConflictResolution.test.d.ts +0 -2
  517. package/dist/test/server/driveOperationsConflictResolution.test.d.ts.map +0 -1
  518. package/dist/test/server/driveOperationsConflictResolution.test.js +0 -486
  519. package/dist/test/server/driveOperationsConflictResolution.test.js.map +0 -1
  520. package/dist/test/server/mergeOperations.test.d.ts +0 -2
  521. package/dist/test/server/mergeOperations.test.d.ts.map +0 -1
  522. package/dist/test/server/mergeOperations.test.js +0 -131
  523. package/dist/test/server/mergeOperations.test.js.map +0 -1
  524. package/dist/test/server/processOperations.test.d.ts +0 -2
  525. package/dist/test/server/processOperations.test.d.ts.map +0 -1
  526. package/dist/test/server/processOperations.test.js +0 -392
  527. package/dist/test/server/processOperations.test.js.map +0 -1
  528. package/dist/test/server.test.d.ts +0 -2
  529. package/dist/test/server.test.d.ts.map +0 -1
  530. package/dist/test/server.test.js +0 -957
  531. package/dist/test/server.test.js.map +0 -1
  532. package/dist/test/signature-migration.test.d.ts +0 -2
  533. package/dist/test/signature-migration.test.d.ts.map +0 -1
  534. package/dist/test/signature-migration.test.js +0 -241
  535. package/dist/test/signature-migration.test.js.map +0 -1
  536. package/dist/test/storage.test.d.ts +0 -2
  537. package/dist/test/storage.test.d.ts.map +0 -1
  538. package/dist/test/storage.test.js +0 -457
  539. package/dist/test/storage.test.js.map +0 -1
  540. package/dist/test/switchboard-push-listener.test.d.ts +0 -2
  541. package/dist/test/switchboard-push-listener.test.d.ts.map +0 -1
  542. package/dist/test/switchboard-push-listener.test.js +0 -133
  543. package/dist/test/switchboard-push-listener.test.js.map +0 -1
  544. package/dist/test/sync-manager.test.d.ts +0 -2
  545. package/dist/test/sync-manager.test.d.ts.map +0 -1
  546. package/dist/test/sync-manager.test.js +0 -354
  547. package/dist/test/sync-manager.test.js.map +0 -1
  548. package/dist/test/undo-redo-clipboard.test.d.ts +0 -2
  549. package/dist/test/undo-redo-clipboard.test.d.ts.map +0 -1
  550. package/dist/test/undo-redo-clipboard.test.js +0 -108
  551. package/dist/test/undo-redo-clipboard.test.js.map +0 -1
  552. package/dist/test/utils.test.d.ts +0 -2
  553. package/dist/test/utils.test.d.ts.map +0 -1
  554. package/dist/test/utils.test.js +0 -86
  555. package/dist/test/utils.test.js.map +0 -1
  556. package/dist/test/vitest-setup.d.ts +0 -2
  557. package/dist/test/vitest-setup.d.ts.map +0 -1
  558. package/dist/test/vitest-setup.js +0 -5
  559. package/dist/test/vitest-setup.js.map +0 -1
  560. package/dist/tsconfig.tsbuildinfo +0 -1
  561. package/dist/vitest.config.d.ts +0 -3
  562. package/dist/vitest.config.d.ts.map +0 -1
  563. package/dist/vitest.config.js +0 -28
  564. package/dist/vitest.config.js.map +0 -1
@@ -1,760 +0,0 @@
1
- import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library";
2
- import { ConflictOperationError, DocumentAlreadyExistsError, DocumentAlreadyExistsReason, DocumentNotFoundError, } from "document-drive/server/error";
3
- import { AbortError } from "document-drive/utils/errors";
4
- import { childLogger, logger } from "document-drive/utils/logger";
5
- import { actionContext, deriveOperationId } from "document-model/core";
6
- import { backOff } from "exponential-backoff";
7
- import { resolveStorageUnitsFilter, setIntersection } from "../utils.js";
8
- /**
9
- * Converts a storage payload to a typed operation.
10
- *
11
- * @param op - The storage operation.
12
- * @returns The typed operation.
13
- */
14
- function operationFromStorage(op) {
15
- const action = {
16
- id: op.actionId,
17
- timestampUtcMs: new Date(op.timestamp).toISOString(),
18
- type: op.type,
19
- input: JSON.parse(op.input),
20
- scope: op.scope,
21
- attachments: op.attachments,
22
- };
23
- if (op.context) {
24
- action.context = op.context;
25
- }
26
- else {
27
- action.context = actionContext();
28
- }
29
- const operation = {
30
- id: op.opId ??
31
- deriveOperationId(op.documentId, op.scope, op.branch, op.actionId),
32
- skip: op.skip,
33
- hash: op.hash,
34
- index: op.index,
35
- timestampUtcMs: new Date(op.timestamp).toISOString(),
36
- resultingState: op.resultingState
37
- ? op.resultingState.toString()
38
- : undefined,
39
- action,
40
- };
41
- return operation;
42
- }
43
- function getRetryTransactionsClient(prisma, backOffOptions) {
44
- return prisma.$extends({
45
- client: {
46
- $transaction: (...args) => {
47
- return backOff(() => prisma.$transaction.apply(prisma, args), {
48
- retry: (e) => {
49
- const code = e.code;
50
- // Retry the transaction only if the error was due to a write conflict or deadlock
51
- // See: https://www.prisma.io/docs/reference/api-reference/error-reference#p2034
52
- if (code !== "P2034") {
53
- logger.error("TRANSACTION ERROR: @error", e);
54
- }
55
- return code === "P2034";
56
- },
57
- ...backOffOptions,
58
- });
59
- },
60
- },
61
- });
62
- }
63
- export class PrismaStorage {
64
- logger = childLogger(["PrismaStorage"]);
65
- db;
66
- cache;
67
- constructor(db, cache, options) {
68
- const backOffOptions = options?.transactionRetryBackoff;
69
- this.cache = cache;
70
- this.db = getRetryTransactionsClient(db, {
71
- ...backOffOptions,
72
- jitter: backOffOptions?.jitter ?? "full",
73
- });
74
- }
75
- ////////////////////////////////
76
- // IStorageUnitStorage
77
- ////////////////////////////////
78
- async findStorageUnitsBy(filter, limit, cursor) {
79
- const { parentId: parentIds, documentId: documentIds, documentModelType: documentTypes, scope: scopes, branch: branches, } = resolveStorageUnitsFilter(filter);
80
- let documents = new Array();
81
- // if parent ids are passed, find all documents that are children
82
- // of those parents, intersecting with document ids if provided
83
- if (parentIds?.size) {
84
- documents = await this.db.driveDocument
85
- .findMany({
86
- select: {
87
- documentId: true,
88
- },
89
- where: {
90
- driveId: {
91
- in: [...parentIds],
92
- },
93
- ...(documentIds ? { documentId: { in: [...documentIds] } } : {}),
94
- },
95
- })
96
- .then((docs) => docs.map((doc) => doc.documentId));
97
- const parentDocumentIds = documentIds
98
- ? setIntersection(parentIds, documentIds)
99
- : parentIds;
100
- documents.unshift(...parentDocumentIds);
101
- }
102
- const queryOptions = {
103
- where: {
104
- ...(documents.length > 0 ? { id: { in: [...documents] } } : {}),
105
- ...(documentTypes ? { documentType: { in: [...documentTypes] } } : {}),
106
- ...(scopes && scopes.size > 0
107
- ? {
108
- scopes: {
109
- hasSome: [...scopes],
110
- },
111
- }
112
- : {}),
113
- // branch: { in: branches ? [...branches] : undefined },
114
- },
115
- orderBy: {
116
- ordinal: "asc",
117
- },
118
- select: {
119
- id: true,
120
- documentType: true,
121
- scopes: true,
122
- ordinal: true,
123
- },
124
- take: limit,
125
- };
126
- // if cursor is provided, add it to the query
127
- if (cursor) {
128
- const cursorOrdinal = parseInt(cursor, 10);
129
- if (isNaN(cursorOrdinal)) {
130
- throw new Error("Invalid cursor format: Expected an integer");
131
- }
132
- queryOptions.cursor = {
133
- ordinal: cursorOrdinal,
134
- };
135
- // skip the cursor itself
136
- queryOptions.skip = 1;
137
- }
138
- const results = await this.db.document.findMany(queryOptions);
139
- let nextCursor;
140
- if (results.length === limit) {
141
- // the cursor is the last document in the results
142
- nextCursor = results[limit - 1].ordinal.toString();
143
- }
144
- // Map the database results to IStorageUnit objects
145
- const units = results.flatMap((doc) => doc.scopes
146
- .filter((scope) => {
147
- const test = !scopes || scopes.size === 0 || scopes.has(scope);
148
- return test;
149
- })
150
- .map((scope) => ({
151
- documentId: doc.id,
152
- documentModelType: doc.documentType,
153
- scope,
154
- branch: "main",
155
- })));
156
- return {
157
- units,
158
- nextCursor,
159
- };
160
- }
161
- ////////////////////////////////
162
- // IDocumentView
163
- ////////////////////////////////
164
- async resolveIds(slugs, signal) {
165
- const queryOptions = {
166
- where: {
167
- slug: {
168
- in: slugs,
169
- },
170
- },
171
- select: {
172
- id: true,
173
- },
174
- };
175
- const results = await this.db.document.findMany(queryOptions);
176
- if (signal?.aborted) {
177
- throw new AbortError("Aborted");
178
- }
179
- if (results.length !== slugs.length) {
180
- throw new Error("Not all slugs were found");
181
- }
182
- return results.map((doc) => doc.id);
183
- }
184
- async resolveSlugs(ids, signal) {
185
- const queryOptions = {
186
- where: {
187
- id: {
188
- in: ids,
189
- },
190
- },
191
- select: {
192
- slug: true,
193
- },
194
- };
195
- const results = await this.db.document.findMany(queryOptions);
196
- if (signal?.aborted) {
197
- throw new AbortError("Aborted");
198
- }
199
- if (results.length !== ids.length) {
200
- throw new Error("Not all ids were found");
201
- }
202
- return results.map((doc) => doc.slug ?? "");
203
- }
204
- ////////////////////////////////
205
- // IDocumentStorage
206
- ////////////////////////////////
207
- async exists(documentId) {
208
- const count = await this.db.document.count({
209
- where: {
210
- id: documentId,
211
- },
212
- });
213
- return count > 0;
214
- }
215
- async create(document) {
216
- const documentId = document.header.id;
217
- const slug = document.header.slug?.length > 0 ? document.header.slug : documentId;
218
- document.header.slug = slug;
219
- try {
220
- await this.db.document.create({
221
- data: {
222
- id: documentId,
223
- slug,
224
- name: document.header.name,
225
- documentType: document.header.documentType,
226
- initialState: JSON.stringify(document.initialState),
227
- created: document.header.createdAtUtcIso,
228
- lastModified: document.header.lastModifiedAtUtcIso,
229
- revision: JSON.stringify(document.header.revision),
230
- meta: document.header.meta
231
- ? JSON.stringify(document.header.meta)
232
- : undefined,
233
- scopes: Object.keys(document.state),
234
- },
235
- });
236
- }
237
- catch (e) {
238
- if (e.code === "P2002") {
239
- const reason = e.message?.includes("slug")
240
- ? DocumentAlreadyExistsReason.SLUG
241
- : DocumentAlreadyExistsReason.ID;
242
- throw new DocumentAlreadyExistsError(documentId, reason);
243
- }
244
- throw e;
245
- }
246
- // temporary -- but we need to create drive records automatically for documents
247
- // of the correct type
248
- if (document.header.documentType === "powerhouse/document-drive") {
249
- await this.db.drive.create({
250
- data: {
251
- id: documentId,
252
- },
253
- });
254
- }
255
- }
256
- async get(documentId, tx) {
257
- const prisma = tx ?? this.db;
258
- const query = {
259
- where: {
260
- id: documentId,
261
- },
262
- };
263
- const result = await prisma.document.findUnique(query);
264
- if (result === null) {
265
- throw new DocumentNotFoundError(documentId);
266
- }
267
- let cachedOperations = {
268
- global: [],
269
- local: [],
270
- };
271
- const cachedDocument = await this.cache.getDocument(documentId);
272
- if (cachedDocument) {
273
- cachedOperations = cachedDocument.operations;
274
- }
275
- const scopeIndex = Object.keys(cachedOperations).reduceRight((acc, value) => {
276
- const scope = value;
277
- const scopeOps = cachedOperations[scope];
278
- const lastIndex = scopeOps?.at(-1)?.index ?? -1;
279
- acc[scope] = lastIndex;
280
- return acc;
281
- }, { global: -1, local: -1 });
282
- const conditions = Object.entries(scopeIndex).map(([scope, index]) => `("scope" = '${scope}' AND "index" > ${index})`);
283
- conditions.push(`("scope" NOT IN (${Object.keys(cachedOperations)
284
- .map((s) => `'${s}'`)
285
- .join(", ")}))`);
286
- // retrieves operations with resulting state
287
- // for the last operation of each scope
288
- // TODO prevent SQL injection
289
- const queryOperations = await prisma.$queryRawUnsafe(`WITH ranked_operations AS (
290
- SELECT
291
- *,
292
- ROW_NUMBER() OVER (PARTITION BY scope ORDER BY index DESC) AS rn
293
- FROM "Operation"
294
- WHERE "clipboard" IS NOT TRUE
295
- )
296
- SELECT
297
- "id",
298
- "opId",
299
- "scope",
300
- "branch",
301
- "index",
302
- "skip",
303
- "actionId",
304
- "hash",
305
- "timestamp",
306
- "input",
307
- "type",
308
- "context",
309
- CASE
310
- WHEN rn = 1 THEN "resultingState"
311
- ELSE NULL
312
- END AS "resultingState"
313
- FROM ranked_operations
314
- WHERE "documentId" = $1
315
- AND (${conditions.join(" OR ")})
316
- ORDER BY scope, index;
317
- `, documentId);
318
- const operationIds = queryOperations.map((o) => o.id);
319
- const attachments = await prisma.attachment.findMany({
320
- where: {
321
- operationId: {
322
- in: operationIds,
323
- },
324
- },
325
- });
326
- // TODO add attachments from cached operations
327
- const fileRegistry = {};
328
- const operationsByScope = queryOperations.reduce((acc, operation) => {
329
- const scope = operation.scope;
330
- if (!acc[scope]) {
331
- acc[scope] = [];
332
- }
333
- const result = operationFromStorage(operation);
334
- result.action.attachments = attachments.filter((a) => a.operationId === operation.id);
335
- result.action.attachments.forEach(({ hash, ...file }) => {
336
- fileRegistry[hash] = file;
337
- });
338
- acc[scope].push(result);
339
- return acc;
340
- }, cachedOperations);
341
- const dbDoc = result;
342
- const header = {
343
- id: dbDoc.id,
344
- sig: {
345
- nonce: "",
346
- publicKey: {},
347
- },
348
- documentType: dbDoc.documentType,
349
- createdAtUtcIso: dbDoc.created.toISOString(),
350
- lastModifiedAtUtcIso: dbDoc.lastModified.toISOString(),
351
- revision: JSON.parse(dbDoc.revision),
352
- meta: dbDoc.meta ? JSON.parse(dbDoc.meta) : undefined,
353
- slug: dbDoc.slug ? dbDoc.slug : "",
354
- name: dbDoc.name ? dbDoc.name : "",
355
- branch: "main",
356
- };
357
- // Load clipboard operations (stored with negative indices)
358
- const clipboardOps = await prisma.operation.findMany({
359
- where: {
360
- documentId,
361
- clipboard: true,
362
- },
363
- orderBy: {
364
- index: "desc", // desc because negative indices are reversed
365
- },
366
- });
367
- // Restore original indices from clipboard operations
368
- const clipboardOperations = clipboardOps.map((op) => {
369
- const operation = operationFromStorage(op);
370
- // The original index is stored as negative, restore it
371
- // Note: We don't actually use the index in clipboard operations for processing,
372
- // but restore it for consistency with the in-memory representation
373
- return operation;
374
- });
375
- const doc = {
376
- header,
377
- initialState: JSON.parse(dbDoc.initialState),
378
- operations: operationsByScope,
379
- clipboard: clipboardOperations,
380
- state: undefined,
381
- };
382
- return doc;
383
- }
384
- async getBySlug(slug) {
385
- const result = await this.db.document.findUnique({
386
- where: {
387
- slug,
388
- },
389
- });
390
- if (!result) {
391
- return Promise.reject(new DocumentNotFoundError(slug));
392
- }
393
- return this.get(result.id);
394
- }
395
- async findByType(documentModelType, limit = 100, cursor) {
396
- const queryOptions = {
397
- where: {
398
- documentType: documentModelType,
399
- },
400
- orderBy: {
401
- ordinal: "asc",
402
- },
403
- select: {
404
- id: true,
405
- ordinal: true,
406
- },
407
- take: limit,
408
- };
409
- // if cursor is provided, add it to the query
410
- if (cursor) {
411
- const cursorOrdinal = parseInt(cursor, 10);
412
- if (isNaN(cursorOrdinal)) {
413
- throw new Error("Invalid cursor format: Expected an integer");
414
- }
415
- queryOptions.cursor = {
416
- ordinal: cursorOrdinal,
417
- };
418
- // skip the cursor itself
419
- queryOptions.skip = 1;
420
- }
421
- const results = await this.db.document.findMany(queryOptions);
422
- let nextCursor;
423
- if (results.length === limit) {
424
- // the cursor is the last document in the results
425
- nextCursor = results[limit - 1].ordinal.toString();
426
- }
427
- return {
428
- documents: results.map((doc) => doc.id),
429
- nextCursor,
430
- };
431
- }
432
- async delete(documentId) {
433
- try {
434
- // delete out of drives if document is a drive
435
- await this.db.drive.deleteMany({
436
- where: {
437
- driveDocuments: {
438
- every: {
439
- driveId: documentId,
440
- },
441
- },
442
- },
443
- });
444
- }
445
- catch (e) {
446
- this.logger.error("Error deleting document from drives, could not delete DriveDocument links: @error", e);
447
- return false;
448
- }
449
- try {
450
- // delete document
451
- const result = await this.db.document.deleteMany({
452
- where: {
453
- id: documentId,
454
- },
455
- });
456
- // delete document from drives
457
- await this.db.driveDocument.deleteMany({
458
- where: {
459
- documentId,
460
- },
461
- });
462
- return result.count > 0;
463
- }
464
- catch (e) {
465
- this.logger.error("Error deleting document from drives, could not delete Document: @error", e);
466
- const prismaError = e;
467
- // Ignore Error: P2025: An operation failed because it depends on one or more records that were required but not found.
468
- if ((prismaError.code && prismaError.code === "P2025") ||
469
- prismaError.message?.includes("An operation failed because it depends on one or more records that were required but not found.")) {
470
- return false;
471
- }
472
- throw e;
473
- }
474
- }
475
- async addChild(parentId, childId) {
476
- if (parentId === childId) {
477
- return Promise.reject(new Error("Cannot associate a document with itself"));
478
- }
479
- // check if the child is a parent of the parent
480
- const children = await this.getChildren(childId);
481
- if (children.includes(parentId)) {
482
- return Promise.reject(new Error("Cannot associate a document with its child"));
483
- }
484
- // Try to create the many-to-many relation
485
- // If it already exists, the database will reject it with a unique constraint error
486
- try {
487
- await this.db.drive.update({
488
- where: {
489
- id: parentId,
490
- },
491
- data: {
492
- driveDocuments: {
493
- create: { documentId: childId },
494
- },
495
- },
496
- });
497
- }
498
- catch (error) {
499
- // P2002 = Unique constraint failed
500
- if (error.code === "P2002") {
501
- // Relationship already exists, ignore the error
502
- return;
503
- }
504
- throw error;
505
- }
506
- }
507
- async removeChild(parentId, childId) {
508
- try {
509
- await this.db.driveDocument.delete({
510
- where: {
511
- // use unique constraint so it either deletes or throws
512
- driveId_documentId: {
513
- driveId: parentId,
514
- documentId: childId,
515
- },
516
- },
517
- });
518
- return true;
519
- }
520
- catch (e) {
521
- return false;
522
- }
523
- }
524
- async getChildren(parentId) {
525
- const docs = await this.db.driveDocument.findMany({
526
- select: {
527
- documentId: true,
528
- },
529
- where: {
530
- driveId: parentId,
531
- },
532
- });
533
- return docs.map((doc) => doc.documentId);
534
- }
535
- async getParents(childId) {
536
- // Query the DriveDocument table to find all drives that have the given document as a child
537
- const driveDocuments = await this.db.driveDocument.findMany({
538
- where: {
539
- documentId: childId,
540
- },
541
- select: {
542
- driveId: true,
543
- },
544
- });
545
- // Extract the drive IDs from the query result
546
- return driveDocuments.map((doc) => doc.driveId);
547
- }
548
- ////////////////////////////////
549
- // IDriveStorage
550
- ////////////////////////////////
551
- async addDriveOperations(id, operations, document) {
552
- await this.addDocumentOperations(id, operations, document);
553
- }
554
- async addDriveOperationsWithTransaction(drive, callback) {
555
- return this.addDocumentOperationsWithTransaction(drive, (document) => callback(document));
556
- }
557
- async _addDocumentOperations(tx, id, operations, document) {
558
- try {
559
- await tx.operation.createMany({
560
- data: operations.map((op) => ({
561
- documentId: id,
562
- hash: op.hash,
563
- index: op.index,
564
- actionId: op.action.id,
565
- input: JSON.stringify(op.action.input),
566
- timestamp: new Date(op.timestampUtcMs),
567
- type: op.action.type,
568
- scope: op.action.scope,
569
- branch: "main",
570
- opId: op.id,
571
- skip: op.skip,
572
- context: op.action?.context,
573
- resultingState: op.resultingState
574
- ? Buffer.from(op.resultingState)
575
- : undefined,
576
- })),
577
- });
578
- // Delete existing clipboard operations
579
- await tx.operation.deleteMany({
580
- where: {
581
- documentId: id,
582
- clipboard: true,
583
- },
584
- });
585
- // Create new clipboard operations with negative indices to avoid conflicts
586
- if (document.clipboard && document.clipboard.length > 0) {
587
- await tx.operation.createMany({
588
- data: document.clipboard.map((op, idx) => ({
589
- documentId: id,
590
- hash: op.hash,
591
- index: -(idx + 1), // Use negative indices to avoid conflicts with regular operations
592
- actionId: op.action.id,
593
- input: JSON.stringify(op.action.input),
594
- timestamp: new Date(op.timestampUtcMs),
595
- type: op.action.type,
596
- scope: op.action.scope,
597
- branch: "main",
598
- opId: op.id,
599
- skip: op.skip,
600
- context: op.action?.context,
601
- clipboard: true,
602
- resultingState: op.resultingState
603
- ? Buffer.from(op.resultingState)
604
- : undefined,
605
- })),
606
- });
607
- }
608
- await tx.document.update({
609
- where: {
610
- id,
611
- },
612
- data: {
613
- lastModified: document.header.lastModifiedAtUtcIso,
614
- revision: JSON.stringify(document.header.revision),
615
- scopes: Object.keys(document.state),
616
- },
617
- });
618
- await Promise.all(operations
619
- .filter((o) => o.action?.attachments?.length)
620
- .map((op) => {
621
- return tx.operation.update({
622
- where: {
623
- unique_operation: {
624
- documentId: id,
625
- index: op.index,
626
- scope: op.action.scope,
627
- branch: "main",
628
- },
629
- },
630
- data: {
631
- attachments: {
632
- createMany: {
633
- data: op.action?.attachments ?? [],
634
- },
635
- },
636
- },
637
- });
638
- }));
639
- }
640
- catch (e) {
641
- // P2002: Unique constraint failed
642
- // Operation with existing index
643
- if (e instanceof PrismaClientKnownRequestError && e.code === "P2002") {
644
- const existingOperation = await this.db.operation.findFirst({
645
- where: {
646
- AND: operations.map((op) => ({
647
- documentId: id,
648
- scope: op.action.scope,
649
- branch: "main",
650
- index: op.index,
651
- })),
652
- },
653
- });
654
- const conflictOp = operations.find((op) => existingOperation?.index === op.index &&
655
- existingOperation.scope === op.action.scope);
656
- if (!existingOperation || !conflictOp) {
657
- console.error(e);
658
- throw e;
659
- }
660
- else {
661
- throw new ConflictOperationError(operationFromStorage(existingOperation), conflictOp);
662
- }
663
- }
664
- else {
665
- throw e;
666
- }
667
- }
668
- }
669
- async addDocumentOperationsWithTransaction(id, callback) {
670
- let result = null;
671
- await this.db.$transaction(async (tx) => {
672
- const document = await this.get(id, tx);
673
- if (!document) {
674
- return Promise.reject(new DocumentNotFoundError(id));
675
- }
676
- result = await callback(document);
677
- const { operations, document: newDocument } = result;
678
- return this._addDocumentOperations(tx, id, operations, newDocument);
679
- }, { isolationLevel: "Serializable", maxWait: 10000, timeout: 20000 });
680
- if (!result) {
681
- throw new Error("No operations were provided");
682
- }
683
- return result;
684
- }
685
- async addDocumentOperations(id, operations, document) {
686
- return this._addDocumentOperations(this.db, id, operations, document);
687
- }
688
- async getOperationResultingState(documentId, index, scope, branch) {
689
- const operation = await this.db.operation.findUnique({
690
- where: {
691
- unique_operation: {
692
- documentId,
693
- index,
694
- scope,
695
- branch,
696
- },
697
- },
698
- });
699
- return operation?.resultingState?.toString();
700
- }
701
- getDriveOperationResultingState(drive, index, scope, branch) {
702
- return this.getOperationResultingState(drive, index, scope, branch);
703
- }
704
- async getSynchronizationUnitsRevision(units) {
705
- if (units.length === 0) {
706
- return [];
707
- }
708
- const documentHeaders = await this.db.document.findMany({
709
- where: {
710
- id: { in: [...new Set(units.map((unit) => unit.documentId)).keys()] },
711
- },
712
- select: { id: true, documentType: true, created: true },
713
- });
714
- // TODO add branch condition
715
- const whereClauses = units
716
- .map((_, index) => {
717
- return `("documentId" = $${index * 2 + 1} AND "scope" = $${index * 2 + 2})`;
718
- })
719
- .join(" OR ");
720
- const query = `
721
- SELECT "documentId", "scope", "branch", MAX("timestamp") as "lastUpdated", MAX("index") + 1 as revision FROM "Operation"
722
- WHERE ${whereClauses}
723
- GROUP BY "documentId", "scope", "branch"
724
- `;
725
- const params = units.map((unit) => [unit.documentId, unit.scope]).flat();
726
- const results = await this.db.$queryRawUnsafe(query, ...params);
727
- return units.map((unit) => {
728
- const header = documentHeaders.find((header) => header.id === unit.documentId);
729
- const result = results.find((row) => row.documentId === unit.documentId &&
730
- row.scope === unit.scope &&
731
- row.branch === unit.branch);
732
- return {
733
- documentId: unit.documentId,
734
- documentType: header?.documentType ?? unit.documentType,
735
- scope: unit.scope,
736
- branch: unit.branch,
737
- lastUpdated: new Date(result?.lastUpdated ?? header.created).toISOString(),
738
- revision: result?.revision ?? 0,
739
- };
740
- });
741
- }
742
- // migrates all stored operations from legacy signature to signatures array
743
- async migrateOperationSignatures() {
744
- const count = await this.db.$executeRaw `
745
- UPDATE "Operation"
746
- SET context = jsonb_set(
747
- context #- '{signer,signature}', -- Remove the old 'signature' field
748
- '{signer,signatures}', -- Path to the new 'signatures' field
749
- CASE
750
- WHEN context->'signer'->>'signature' = '' THEN '[]'::jsonb
751
- ELSE to_jsonb(array[context->'signer'->>'signature'])
752
- END
753
- )
754
- WHERE context->'signer' ? 'signature' -- Check if the 'signature' key exists
755
- `;
756
- logger.info("Migrated @count operations", count);
757
- return;
758
- }
759
- }
760
- //# sourceMappingURL=prisma.js.map