document-drive 5.0.0-staging.9 → 5.0.1-staging.2

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 (493) hide show
  1. package/dist/index.d.ts +17 -32
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +17 -20
  4. package/dist/index.js.map +1 -1
  5. package/dist/prisma/schema.prisma +1 -1
  6. package/dist/src/cache/index.d.ts +5 -0
  7. package/dist/src/cache/index.d.ts.map +1 -0
  8. package/dist/src/cache/index.js +5 -0
  9. package/dist/src/cache/index.js.map +1 -0
  10. package/dist/src/cache/lru.d.ts +2 -13
  11. package/dist/src/cache/lru.d.ts.map +1 -1
  12. package/dist/src/cache/lru.js +1 -2
  13. package/dist/src/cache/lru.js.map +1 -1
  14. package/dist/src/cache/memory.d.ts +3 -14
  15. package/dist/src/cache/memory.d.ts.map +1 -1
  16. package/dist/src/cache/memory.js +2 -3
  17. package/dist/src/cache/memory.js.map +1 -1
  18. package/dist/src/cache/redis.d.ts +3 -5
  19. package/dist/src/cache/redis.d.ts.map +1 -1
  20. package/dist/src/cache/redis.js +2 -4
  21. package/dist/src/cache/redis.js.map +1 -1
  22. package/dist/src/cache/types.d.ts +23 -2
  23. package/dist/src/cache/types.d.ts.map +1 -1
  24. package/dist/src/cache/util.d.ts +1 -1
  25. package/dist/src/cache/util.d.ts.map +1 -1
  26. package/dist/src/cache/util.js +11 -9
  27. package/dist/src/cache/util.js.map +1 -1
  28. package/dist/src/drive-document-model/constants.d.ts +2 -1
  29. package/dist/src/drive-document-model/constants.d.ts.map +1 -1
  30. package/dist/src/drive-document-model/constants.js +2 -2
  31. package/dist/src/drive-document-model/constants.js.map +1 -1
  32. package/dist/src/drive-document-model/gen/document-model.d.ts +2 -2
  33. package/dist/src/drive-document-model/gen/document-model.d.ts.map +1 -1
  34. package/dist/src/drive-document-model/gen/document-model.js +1 -1
  35. package/dist/src/drive-document-model/gen/document-model.js.map +1 -1
  36. package/dist/src/drive-document-model/gen/drive/actions.d.ts +12 -2
  37. package/dist/src/drive-document-model/gen/drive/actions.d.ts.map +1 -1
  38. package/dist/src/drive-document-model/gen/drive/creators.d.ts +2 -2
  39. package/dist/src/drive-document-model/gen/drive/creators.d.ts.map +1 -1
  40. package/dist/src/drive-document-model/gen/drive/creators.js +10 -10
  41. package/dist/src/drive-document-model/gen/drive/creators.js.map +1 -1
  42. package/dist/src/drive-document-model/gen/drive/index.d.ts +2 -0
  43. package/dist/src/drive-document-model/gen/drive/index.d.ts.map +1 -0
  44. package/dist/src/drive-document-model/gen/drive/index.js +2 -0
  45. package/dist/src/drive-document-model/gen/drive/index.js.map +1 -0
  46. package/dist/src/drive-document-model/gen/drive/types.d.ts +2 -0
  47. package/dist/src/drive-document-model/gen/drive/types.d.ts.map +1 -0
  48. package/dist/src/drive-document-model/gen/drive/types.js +2 -0
  49. package/dist/src/drive-document-model/gen/drive/types.js.map +1 -0
  50. package/dist/src/drive-document-model/gen/index.d.ts +7 -6
  51. package/dist/src/drive-document-model/gen/index.d.ts.map +1 -1
  52. package/dist/src/drive-document-model/gen/index.js +7 -5
  53. package/dist/src/drive-document-model/gen/index.js.map +1 -1
  54. package/dist/src/drive-document-model/gen/node/actions.d.ts +11 -2
  55. package/dist/src/drive-document-model/gen/node/actions.d.ts.map +1 -1
  56. package/dist/src/drive-document-model/gen/node/creators.d.ts +1 -2
  57. package/dist/src/drive-document-model/gen/node/creators.d.ts.map +1 -1
  58. package/dist/src/drive-document-model/gen/node/creators.js +9 -9
  59. package/dist/src/drive-document-model/gen/node/creators.js.map +1 -1
  60. package/dist/src/drive-document-model/gen/node/index.d.ts +2 -0
  61. package/dist/src/drive-document-model/gen/node/index.d.ts.map +1 -0
  62. package/dist/src/drive-document-model/gen/node/index.js +2 -0
  63. package/dist/src/drive-document-model/gen/node/index.js.map +1 -0
  64. package/dist/src/drive-document-model/gen/node/types.d.ts +2 -0
  65. package/dist/src/drive-document-model/gen/node/types.d.ts.map +1 -0
  66. package/dist/src/drive-document-model/gen/node/types.js +2 -0
  67. package/dist/src/drive-document-model/gen/node/types.js.map +1 -0
  68. package/dist/src/drive-document-model/gen/ph-factories.d.ts +5 -20
  69. package/dist/src/drive-document-model/gen/ph-factories.d.ts.map +1 -1
  70. package/dist/src/drive-document-model/gen/ph-factories.js +1 -13
  71. package/dist/src/drive-document-model/gen/ph-factories.js.map +1 -1
  72. package/dist/src/drive-document-model/gen/reducer.d.ts +3 -3
  73. package/dist/src/drive-document-model/gen/reducer.d.ts.map +1 -1
  74. package/dist/src/drive-document-model/gen/reducer.js +34 -36
  75. package/dist/src/drive-document-model/gen/reducer.js.map +1 -1
  76. package/dist/src/drive-document-model/gen/schema/index.d.ts +2 -2
  77. package/dist/src/drive-document-model/gen/schema/index.d.ts.map +1 -1
  78. package/dist/src/drive-document-model/gen/schema/index.js +2 -2
  79. package/dist/src/drive-document-model/gen/schema/index.js.map +1 -1
  80. package/dist/src/drive-document-model/gen/schema/types.d.ts +8 -3
  81. package/dist/src/drive-document-model/gen/schema/types.d.ts.map +1 -1
  82. package/dist/src/drive-document-model/gen/schema/zod.d.ts +28 -28
  83. package/dist/src/drive-document-model/gen/schema/zod.d.ts.map +1 -1
  84. package/dist/src/drive-document-model/gen/schema/zod.js.map +1 -1
  85. package/dist/src/drive-document-model/gen/types.d.ts +5 -6
  86. package/dist/src/drive-document-model/gen/types.d.ts.map +1 -1
  87. package/dist/src/drive-document-model/gen/types.js +3 -1
  88. package/dist/src/drive-document-model/gen/types.js.map +1 -1
  89. package/dist/src/drive-document-model/gen/utils.d.ts +7 -9
  90. package/dist/src/drive-document-model/gen/utils.d.ts.map +1 -1
  91. package/dist/src/drive-document-model/gen/utils.js +21 -34
  92. package/dist/src/drive-document-model/gen/utils.js.map +1 -1
  93. package/dist/src/drive-document-model/index.d.ts +4 -1
  94. package/dist/src/drive-document-model/index.d.ts.map +1 -1
  95. package/dist/src/drive-document-model/index.js +4 -1
  96. package/dist/src/drive-document-model/index.js.map +1 -1
  97. package/dist/src/drive-document-model/module.d.ts +2 -27
  98. package/dist/src/drive-document-model/module.d.ts.map +1 -1
  99. package/dist/src/drive-document-model/module.js +17 -16
  100. package/dist/src/drive-document-model/module.js.map +1 -1
  101. package/dist/src/drive-document-model/src/index.d.ts +3 -0
  102. package/dist/src/drive-document-model/src/index.d.ts.map +1 -0
  103. package/dist/src/drive-document-model/src/index.js +3 -0
  104. package/dist/src/drive-document-model/src/index.js.map +1 -0
  105. package/dist/src/drive-document-model/src/reducers/drive.d.ts +2 -2
  106. package/dist/src/drive-document-model/src/reducers/drive.d.ts.map +1 -1
  107. package/dist/src/drive-document-model/src/reducers/drive.js +1 -1
  108. package/dist/src/drive-document-model/src/reducers/drive.js.map +1 -1
  109. package/dist/src/drive-document-model/src/reducers/index.d.ts +3 -0
  110. package/dist/src/drive-document-model/src/reducers/index.d.ts.map +1 -0
  111. package/dist/src/drive-document-model/src/reducers/index.js +3 -0
  112. package/dist/src/drive-document-model/src/reducers/index.js.map +1 -0
  113. package/dist/src/drive-document-model/src/reducers/node.d.ts +2 -2
  114. package/dist/src/drive-document-model/src/reducers/node.d.ts.map +1 -1
  115. package/dist/src/drive-document-model/src/reducers/node.js +3 -4
  116. package/dist/src/drive-document-model/src/reducers/node.js.map +1 -1
  117. package/dist/src/drive-document-model/src/tests/actions.test.js +20 -22
  118. package/dist/src/drive-document-model/src/tests/actions.test.js.map +1 -1
  119. package/dist/src/drive-document-model/src/tests/base.test.js +12 -52
  120. package/dist/src/drive-document-model/src/tests/base.test.js.map +1 -1
  121. package/dist/src/drive-document-model/src/tests/document-model.test.js +3 -3
  122. package/dist/src/drive-document-model/src/tests/document-model.test.js.map +1 -1
  123. package/dist/src/drive-document-model/src/tests/drive.test.js +5 -8
  124. package/dist/src/drive-document-model/src/tests/drive.test.js.map +1 -1
  125. package/dist/src/drive-document-model/src/tests/generate-mock.d.ts +2 -1
  126. package/dist/src/drive-document-model/src/tests/generate-mock.d.ts.map +1 -1
  127. package/dist/src/drive-document-model/src/tests/node.test.js +32 -35
  128. package/dist/src/drive-document-model/src/tests/node.test.js.map +1 -1
  129. package/dist/src/drive-document-model/src/tests/test-factories.d.ts +1 -6
  130. package/dist/src/drive-document-model/src/tests/test-factories.d.ts.map +1 -1
  131. package/dist/src/drive-document-model/src/tests/test-factories.js +4 -11
  132. package/dist/src/drive-document-model/src/tests/test-factories.js.map +1 -1
  133. package/dist/src/drive-document-model/src/tests/utils.test.js +1 -1
  134. package/dist/src/drive-document-model/src/tests/utils.test.js.map +1 -1
  135. package/dist/src/drive-document-model/src/types.d.ts +8 -0
  136. package/dist/src/drive-document-model/src/types.d.ts.map +1 -0
  137. package/dist/src/drive-document-model/src/types.js +2 -0
  138. package/dist/src/drive-document-model/src/types.js.map +1 -0
  139. package/dist/src/drive-document-model/src/utils.d.ts +1 -7
  140. package/dist/src/drive-document-model/src/utils.d.ts.map +1 -1
  141. package/dist/src/drive-document-model/src/utils.js.map +1 -1
  142. package/dist/src/drive-document-model/types.d.ts +10 -0
  143. package/dist/src/drive-document-model/types.d.ts.map +1 -0
  144. package/dist/src/drive-document-model/types.js +3 -0
  145. package/dist/src/drive-document-model/types.js.map +1 -0
  146. package/dist/src/processors/index.d.ts +4 -0
  147. package/dist/src/processors/index.d.ts.map +1 -0
  148. package/dist/src/processors/index.js +4 -0
  149. package/dist/src/processors/index.js.map +1 -0
  150. package/dist/src/processors/processor-manager.d.ts +1 -2
  151. package/dist/src/processors/processor-manager.d.ts.map +1 -1
  152. package/dist/src/processors/processor-manager.js +3 -5
  153. package/dist/src/processors/processor-manager.js.map +1 -1
  154. package/dist/src/processors/relational.d.ts +3 -15
  155. package/dist/src/processors/relational.d.ts.map +1 -1
  156. package/dist/src/processors/relational.js +4 -7
  157. package/dist/src/processors/relational.js.map +1 -1
  158. package/dist/src/processors/types.d.ts +16 -7
  159. package/dist/src/processors/types.d.ts.map +1 -1
  160. package/dist/src/processors/utils.d.ts +1 -2
  161. package/dist/src/processors/utils.d.ts.map +1 -1
  162. package/dist/src/processors/utils.js +0 -2
  163. package/dist/src/processors/utils.js.map +1 -1
  164. package/dist/src/queue/base.d.ts +1 -1
  165. package/dist/src/queue/base.d.ts.map +1 -1
  166. package/dist/src/queue/event.d.ts +3 -4
  167. package/dist/src/queue/event.d.ts.map +1 -1
  168. package/dist/src/queue/event.js +2 -5
  169. package/dist/src/queue/event.js.map +1 -1
  170. package/dist/src/queue/index.d.ts +5 -0
  171. package/dist/src/queue/index.d.ts.map +1 -0
  172. package/dist/src/queue/index.js +5 -0
  173. package/dist/src/queue/index.js.map +1 -0
  174. package/dist/src/queue/redis.js +1 -1
  175. package/dist/src/queue/redis.js.map +1 -1
  176. package/dist/src/queue/types.d.ts +1 -4
  177. package/dist/src/queue/types.d.ts.map +1 -1
  178. package/dist/src/queue/types.js +1 -9
  179. package/dist/src/queue/types.js.map +1 -1
  180. package/dist/src/queue/utils.d.ts +5 -0
  181. package/dist/src/queue/utils.d.ts.map +1 -0
  182. package/dist/src/queue/utils.js +10 -0
  183. package/dist/src/queue/utils.js.map +1 -0
  184. package/dist/src/read-mode/index.d.ts +4 -0
  185. package/dist/src/read-mode/index.d.ts.map +1 -0
  186. package/dist/src/read-mode/index.js +4 -0
  187. package/dist/src/read-mode/index.js.map +1 -0
  188. package/dist/src/read-mode/server.d.ts +1 -2
  189. package/dist/src/read-mode/server.d.ts.map +1 -1
  190. package/dist/src/read-mode/server.js +1 -3
  191. package/dist/src/read-mode/server.js.map +1 -1
  192. package/dist/src/read-mode/service.d.ts +2 -3
  193. package/dist/src/read-mode/service.d.ts.map +1 -1
  194. package/dist/src/read-mode/service.js +1 -5
  195. package/dist/src/read-mode/service.js.map +1 -1
  196. package/dist/src/read-mode/types.d.ts +2 -6
  197. package/dist/src/read-mode/types.d.ts.map +1 -1
  198. package/dist/src/server/base-server.d.ts +17 -26
  199. package/dist/src/server/base-server.d.ts.map +1 -1
  200. package/dist/src/server/base-server.js +304 -36
  201. package/dist/src/server/base-server.js.map +1 -1
  202. package/dist/src/server/builder.d.ts +2 -5
  203. package/dist/src/server/builder.d.ts.map +1 -1
  204. package/dist/src/server/builder.js +8 -10
  205. package/dist/src/server/builder.js.map +1 -1
  206. package/dist/src/server/constants.d.ts +3 -0
  207. package/dist/src/server/constants.d.ts.map +1 -1
  208. package/dist/src/server/constants.js +3 -0
  209. package/dist/src/server/constants.js.map +1 -1
  210. package/dist/src/server/error.d.ts +1 -1
  211. package/dist/src/server/error.d.ts.map +1 -1
  212. package/dist/src/server/event-emitter.d.ts +2 -2
  213. package/dist/src/server/event-emitter.d.ts.map +1 -1
  214. package/dist/src/server/event-emitter.js.map +1 -1
  215. package/dist/src/server/index.d.ts +10 -0
  216. package/dist/src/server/index.d.ts.map +1 -0
  217. package/dist/src/server/index.js +10 -0
  218. package/dist/src/server/index.js.map +1 -0
  219. package/dist/src/server/listener/index.d.ts +2 -0
  220. package/dist/src/server/listener/index.d.ts.map +1 -1
  221. package/dist/src/server/listener/index.js +2 -0
  222. package/dist/src/server/listener/index.js.map +1 -1
  223. package/dist/src/server/listener/listener-manager.d.ts +4 -5
  224. package/dist/src/server/listener/listener-manager.d.ts.map +1 -1
  225. package/dist/src/server/listener/listener-manager.js +2 -5
  226. package/dist/src/server/listener/listener-manager.js.map +1 -1
  227. package/dist/src/server/listener/transmitter/factory.d.ts +3 -4
  228. package/dist/src/server/listener/transmitter/factory.d.ts.map +1 -1
  229. package/dist/src/server/listener/transmitter/factory.js +2 -3
  230. package/dist/src/server/listener/transmitter/factory.js.map +1 -1
  231. package/dist/src/server/listener/transmitter/index.d.ts +5 -0
  232. package/dist/src/server/listener/transmitter/index.d.ts.map +1 -0
  233. package/dist/src/server/listener/transmitter/index.js +5 -0
  234. package/dist/src/server/listener/transmitter/index.js.map +1 -0
  235. package/dist/src/server/listener/transmitter/internal.d.ts +3 -22
  236. package/dist/src/server/listener/transmitter/internal.d.ts.map +1 -1
  237. package/dist/src/server/listener/transmitter/internal.js +11 -16
  238. package/dist/src/server/listener/transmitter/internal.js.map +1 -1
  239. package/dist/src/server/listener/transmitter/pull-responder.d.ts +4 -22
  240. package/dist/src/server/listener/transmitter/pull-responder.d.ts.map +1 -1
  241. package/dist/src/server/listener/transmitter/pull-responder.js +3 -7
  242. package/dist/src/server/listener/transmitter/pull-responder.js.map +1 -1
  243. package/dist/src/server/listener/transmitter/switchboard-push.d.ts +1 -2
  244. package/dist/src/server/listener/transmitter/switchboard-push.d.ts.map +1 -1
  245. package/dist/src/server/listener/transmitter/switchboard-push.js +1 -3
  246. package/dist/src/server/listener/transmitter/switchboard-push.js.map +1 -1
  247. package/dist/src/server/listener/transmitter/types.d.ts +32 -2
  248. package/dist/src/server/listener/transmitter/types.d.ts.map +1 -1
  249. package/dist/src/server/listener/types.d.ts +2 -0
  250. package/dist/src/server/listener/types.d.ts.map +1 -0
  251. package/dist/src/server/listener/types.js +2 -0
  252. package/dist/src/server/listener/types.js.map +1 -0
  253. package/dist/src/server/sync-manager.d.ts +4 -7
  254. package/dist/src/server/sync-manager.d.ts.map +1 -1
  255. package/dist/src/server/sync-manager.js +4 -7
  256. package/dist/src/server/sync-manager.js.map +1 -1
  257. package/dist/src/server/sync-unit-map.d.ts +4 -25
  258. package/dist/src/server/sync-unit-map.d.ts.map +1 -1
  259. package/dist/src/server/sync-unit-map.js +0 -1
  260. package/dist/src/server/sync-unit-map.js.map +1 -1
  261. package/dist/src/server/types.d.ts +46 -32
  262. package/dist/src/server/types.d.ts.map +1 -1
  263. package/dist/src/server/types.js +10 -12
  264. package/dist/src/server/types.js.map +1 -1
  265. package/dist/src/server/utils.d.ts +1 -2
  266. package/dist/src/server/utils.d.ts.map +1 -1
  267. package/dist/src/server/utils.js +7 -5
  268. package/dist/src/server/utils.js.map +1 -1
  269. package/dist/src/storage/browser.d.ts +2 -2
  270. package/dist/src/storage/browser.d.ts.map +1 -1
  271. package/dist/src/storage/browser.js +5 -7
  272. package/dist/src/storage/browser.js.map +1 -1
  273. package/dist/src/storage/filesystem.d.ts +3 -3
  274. package/dist/src/storage/filesystem.d.ts.map +1 -1
  275. package/dist/src/storage/filesystem.js +27 -8
  276. package/dist/src/storage/filesystem.js.map +1 -1
  277. package/dist/src/storage/index.d.ts +4 -0
  278. package/dist/src/storage/index.d.ts.map +1 -0
  279. package/dist/src/storage/index.js +4 -0
  280. package/dist/src/storage/index.js.map +1 -0
  281. package/dist/src/storage/ipfs.d.ts +2 -3
  282. package/dist/src/storage/ipfs.d.ts.map +1 -1
  283. package/dist/src/storage/ipfs.js +5 -3
  284. package/dist/src/storage/ipfs.js.map +1 -1
  285. package/dist/src/storage/memory.d.ts +3 -3
  286. package/dist/src/storage/memory.d.ts.map +1 -1
  287. package/dist/src/storage/memory.js +30 -13
  288. package/dist/src/storage/memory.js.map +1 -1
  289. package/dist/src/storage/prisma/client/edge.js +11 -7
  290. package/dist/src/storage/prisma/client/index.js +17 -9
  291. package/dist/src/storage/prisma/client/libquery_engine-darwin-arm64.dylib.node +0 -0
  292. package/dist/src/storage/prisma/client/package.json +1 -1
  293. package/dist/src/storage/prisma/client/schema.prisma +1 -1
  294. package/dist/src/storage/prisma/factory.d.ts +3 -2
  295. package/dist/src/storage/prisma/factory.d.ts.map +1 -1
  296. package/dist/src/storage/prisma/factory.js +6 -2
  297. package/dist/src/storage/prisma/factory.js.map +1 -1
  298. package/dist/src/storage/prisma/prisma.d.ts +4 -5
  299. package/dist/src/storage/prisma/prisma.d.ts.map +1 -1
  300. package/dist/src/storage/prisma/prisma.js +27 -20
  301. package/dist/src/storage/prisma/prisma.js.map +1 -1
  302. package/dist/src/storage/types.d.ts +1 -2
  303. package/dist/src/storage/types.d.ts.map +1 -1
  304. package/dist/src/storage/utils.d.ts +1 -1
  305. package/dist/src/storage/utils.d.ts.map +1 -1
  306. package/dist/src/utils/default-drives-manager.d.ts +1 -12
  307. package/dist/src/utils/default-drives-manager.d.ts.map +1 -1
  308. package/dist/src/utils/default-drives-manager.js +1 -2
  309. package/dist/src/utils/default-drives-manager.js.map +1 -1
  310. package/dist/src/utils/gql-transformations.d.ts +13 -5
  311. package/dist/src/utils/gql-transformations.d.ts.map +1 -1
  312. package/dist/src/utils/gql-transformations.js +10 -3
  313. package/dist/src/utils/gql-transformations.js.map +1 -1
  314. package/dist/src/utils/graphql.d.ts +4 -30
  315. package/dist/src/utils/graphql.d.ts.map +1 -1
  316. package/dist/src/utils/graphql.js +3 -4
  317. package/dist/src/utils/graphql.js.map +1 -1
  318. package/dist/src/utils/index.d.ts +8 -0
  319. package/dist/src/utils/index.d.ts.map +1 -0
  320. package/dist/src/utils/index.js +8 -0
  321. package/dist/src/utils/index.js.map +1 -0
  322. package/dist/src/utils/logger.d.ts +2 -8
  323. package/dist/src/utils/logger.d.ts.map +1 -1
  324. package/dist/src/utils/logger.js +6 -7
  325. package/dist/src/utils/logger.js.map +1 -1
  326. package/dist/src/utils/migrations.d.ts +1 -1
  327. package/dist/src/utils/migrations.d.ts.map +1 -1
  328. package/dist/src/utils/migrations.js +7 -2
  329. package/dist/src/utils/migrations.js.map +1 -1
  330. package/dist/src/utils/misc.d.ts +2 -6
  331. package/dist/src/utils/misc.d.ts.map +1 -1
  332. package/dist/src/utils/misc.js +3 -6
  333. package/dist/src/utils/misc.js.map +1 -1
  334. package/dist/src/utils/run-asap.d.ts +7 -11
  335. package/dist/src/utils/run-asap.d.ts.map +1 -1
  336. package/dist/src/utils/run-asap.js +110 -122
  337. package/dist/src/utils/run-asap.js.map +1 -1
  338. package/dist/src/utils/types.d.ts +50 -0
  339. package/dist/src/utils/types.d.ts.map +1 -0
  340. package/dist/src/utils/types.js +2 -0
  341. package/dist/src/utils/types.js.map +1 -0
  342. package/dist/test/benchmarks/getDrive.json +10 -0
  343. package/dist/test/benchmarks/processOperations.bench.d.ts +2 -0
  344. package/dist/test/benchmarks/processOperations.bench.d.ts.map +1 -0
  345. package/dist/test/benchmarks/processOperations.bench.js +148 -0
  346. package/dist/test/benchmarks/processOperations.bench.js.map +1 -0
  347. package/dist/test/benchmarks/queue.bench.d.ts +2 -0
  348. package/dist/test/benchmarks/queue.bench.d.ts.map +1 -0
  349. package/dist/test/benchmarks/queue.bench.js +51 -0
  350. package/dist/test/benchmarks/queue.bench.js.map +1 -0
  351. package/dist/test/benchmarks/strands.small.json +37085 -0
  352. package/dist/test/cache.test.d.ts +2 -0
  353. package/dist/test/cache.test.d.ts.map +1 -0
  354. package/dist/test/cache.test.js +275 -0
  355. package/dist/test/cache.test.js.map +1 -0
  356. package/dist/test/default-remote-drives.test.d.ts +2 -0
  357. package/dist/test/default-remote-drives.test.d.ts.map +1 -0
  358. package/dist/test/default-remote-drives.test.js +445 -0
  359. package/dist/test/default-remote-drives.test.js.map +1 -0
  360. package/dist/test/drive-operations.test.d.ts +2 -0
  361. package/dist/test/drive-operations.test.d.ts.map +1 -0
  362. package/dist/test/drive-operations.test.js +134 -0
  363. package/dist/test/drive-operations.test.js.map +1 -0
  364. package/dist/test/dual-action-create.test.d.ts +2 -0
  365. package/dist/test/dual-action-create.test.d.ts.map +1 -0
  366. package/dist/test/dual-action-create.test.js +187 -0
  367. package/dist/test/dual-action-create.test.js.map +1 -0
  368. package/dist/test/dual-action-migration.test.d.ts +2 -0
  369. package/dist/test/dual-action-migration.test.d.ts.map +1 -0
  370. package/dist/test/dual-action-migration.test.js +344 -0
  371. package/dist/test/dual-action-migration.test.js.map +1 -0
  372. package/dist/test/graphql.test.d.ts +2 -0
  373. package/dist/test/graphql.test.d.ts.map +1 -0
  374. package/dist/test/graphql.test.js +9 -0
  375. package/dist/test/graphql.test.js.map +1 -0
  376. package/dist/test/index.d.ts +2 -0
  377. package/dist/test/index.d.ts.map +1 -0
  378. package/dist/test/index.js +2 -0
  379. package/dist/test/index.js.map +1 -0
  380. package/dist/test/internal-listener.test.d.ts +2 -0
  381. package/dist/test/internal-listener.test.d.ts.map +1 -0
  382. package/dist/test/internal-listener.test.js +243 -0
  383. package/dist/test/internal-listener.test.js.map +1 -0
  384. package/dist/test/queue.test.d.ts +2 -0
  385. package/dist/test/queue.test.d.ts.map +1 -0
  386. package/dist/test/queue.test.js +324 -0
  387. package/dist/test/queue.test.js.map +1 -0
  388. package/dist/test/reactor.test.d.ts +2 -0
  389. package/dist/test/reactor.test.d.ts.map +1 -0
  390. package/dist/test/reactor.test.js +32 -0
  391. package/dist/test/reactor.test.js.map +1 -0
  392. package/dist/test/read-mode.test.d.ts +2 -0
  393. package/dist/test/read-mode.test.d.ts.map +1 -0
  394. package/dist/test/read-mode.test.js +569 -0
  395. package/dist/test/read-mode.test.js.map +1 -0
  396. package/dist/test/server/driveOperationsConflictResolution.test.d.ts +2 -0
  397. package/dist/test/server/driveOperationsConflictResolution.test.d.ts.map +1 -0
  398. package/dist/test/server/driveOperationsConflictResolution.test.js +486 -0
  399. package/dist/test/server/driveOperationsConflictResolution.test.js.map +1 -0
  400. package/dist/test/server/mergeOperations.test.d.ts +2 -0
  401. package/dist/test/server/mergeOperations.test.d.ts.map +1 -0
  402. package/dist/test/server/mergeOperations.test.js +115 -0
  403. package/dist/test/server/mergeOperations.test.js.map +1 -0
  404. package/dist/test/server/processOperations.test.d.ts +2 -0
  405. package/dist/test/server/processOperations.test.d.ts.map +1 -0
  406. package/dist/test/server/processOperations.test.js +392 -0
  407. package/dist/test/server/processOperations.test.js.map +1 -0
  408. package/dist/test/server.test.d.ts +2 -0
  409. package/dist/test/server.test.d.ts.map +1 -0
  410. package/dist/test/server.test.js +957 -0
  411. package/dist/test/server.test.js.map +1 -0
  412. package/dist/test/signature-migration.test.d.ts +2 -0
  413. package/dist/test/signature-migration.test.d.ts.map +1 -0
  414. package/dist/test/signature-migration.test.js +241 -0
  415. package/dist/test/signature-migration.test.js.map +1 -0
  416. package/dist/test/storage.test.d.ts +2 -0
  417. package/dist/test/storage.test.d.ts.map +1 -0
  418. package/dist/test/storage.test.js +522 -0
  419. package/dist/test/storage.test.js.map +1 -0
  420. package/dist/test/switchboard-push-listener.test.d.ts +2 -0
  421. package/dist/test/switchboard-push-listener.test.d.ts.map +1 -0
  422. package/dist/test/switchboard-push-listener.test.js +133 -0
  423. package/dist/test/switchboard-push-listener.test.js.map +1 -0
  424. package/dist/test/sync-manager.test.d.ts +2 -0
  425. package/dist/test/sync-manager.test.d.ts.map +1 -0
  426. package/dist/test/sync-manager.test.js +349 -0
  427. package/dist/test/sync-manager.test.js.map +1 -0
  428. package/dist/test/utils.d.ts +62 -0
  429. package/dist/test/utils.d.ts.map +1 -0
  430. package/dist/test/utils.js +158 -0
  431. package/dist/test/utils.js.map +1 -0
  432. package/dist/test/utils.test.d.ts +2 -0
  433. package/dist/test/utils.test.d.ts.map +1 -0
  434. package/dist/test/utils.test.js +86 -0
  435. package/dist/test/utils.test.js.map +1 -0
  436. package/dist/test/vitest-setup.d.ts +2 -0
  437. package/dist/test/vitest-setup.d.ts.map +1 -0
  438. package/dist/test/vitest-setup.js +5 -0
  439. package/dist/test/vitest-setup.js.map +1 -0
  440. package/dist/tsconfig.tsbuildinfo +1 -0
  441. package/dist/vitest.config.d.ts +3 -0
  442. package/dist/vitest.config.d.ts.map +1 -0
  443. package/dist/vitest.config.js +28 -0
  444. package/dist/vitest.config.js.map +1 -0
  445. package/package.json +38 -26
  446. package/prisma/schema.prisma +93 -0
  447. package/src/storage/prisma/client/default.d.ts +1 -0
  448. package/src/storage/prisma/client/default.js +1 -0
  449. package/src/storage/prisma/client/edge.d.ts +1 -0
  450. package/src/storage/prisma/client/edge.js +263 -0
  451. package/src/storage/prisma/client/index-browser.js +246 -0
  452. package/src/storage/prisma/client/index.d.ts +10318 -0
  453. package/src/storage/prisma/client/index.js +292 -0
  454. package/src/storage/prisma/client/libquery_engine-darwin-arm64.dylib.node +0 -0
  455. package/src/storage/prisma/client/libquery_engine-debian-openssl-3.0.x.so.node +0 -0
  456. package/src/storage/prisma/client/libquery_engine-linux-musl.so.node +0 -0
  457. package/src/storage/prisma/client/package.json +84 -0
  458. package/src/storage/prisma/client/runtime/edge-esm.js +31 -0
  459. package/src/storage/prisma/client/runtime/edge.js +31 -0
  460. package/src/storage/prisma/client/runtime/index-browser.d.ts +365 -0
  461. package/src/storage/prisma/client/runtime/index-browser.js +13 -0
  462. package/src/storage/prisma/client/runtime/library.d.ts +3273 -0
  463. package/src/storage/prisma/client/runtime/library.js +143 -0
  464. package/src/storage/prisma/client/runtime/react-native.js +80 -0
  465. package/src/storage/prisma/client/runtime/wasm.js +32 -0
  466. package/src/storage/prisma/client/schema.prisma +93 -0
  467. package/src/storage/prisma/client/wasm.d.ts +1 -0
  468. package/src/storage/prisma/client/wasm.js +246 -0
  469. package/dist/src/drive-document-model/gen/actions.d.ts +0 -6
  470. package/dist/src/drive-document-model/gen/actions.d.ts.map +0 -1
  471. package/dist/src/drive-document-model/gen/actions.js +0 -3
  472. package/dist/src/drive-document-model/gen/actions.js.map +0 -1
  473. package/dist/src/drive-document-model/gen/drive/object.d.ts +0 -14
  474. package/dist/src/drive-document-model/gen/drive/object.d.ts.map +0 -1
  475. package/dist/src/drive-document-model/gen/drive/object.js +0 -29
  476. package/dist/src/drive-document-model/gen/drive/object.js.map +0 -1
  477. package/dist/src/drive-document-model/gen/drive/operations.d.ts +0 -14
  478. package/dist/src/drive-document-model/gen/drive/operations.d.ts.map +0 -1
  479. package/dist/src/drive-document-model/gen/drive/operations.js +0 -2
  480. package/dist/src/drive-document-model/gen/drive/operations.js.map +0 -1
  481. package/dist/src/drive-document-model/gen/node/object.d.ts +0 -13
  482. package/dist/src/drive-document-model/gen/node/object.d.ts.map +0 -1
  483. package/dist/src/drive-document-model/gen/node/object.js +0 -26
  484. package/dist/src/drive-document-model/gen/node/object.js.map +0 -1
  485. package/dist/src/drive-document-model/gen/node/operations.d.ts +0 -13
  486. package/dist/src/drive-document-model/gen/node/operations.d.ts.map +0 -1
  487. package/dist/src/drive-document-model/gen/node/operations.js +0 -2
  488. package/dist/src/drive-document-model/gen/node/operations.js.map +0 -1
  489. package/dist/src/drive-document-model/gen/object.d.ts +0 -17
  490. package/dist/src/drive-document-model/gen/object.d.ts.map +0 -1
  491. package/dist/src/drive-document-model/gen/object.js +0 -28
  492. package/dist/src/drive-document-model/gen/object.js.map +0 -1
  493. package/dist/tsconfig.lib.tsbuildinfo +0 -1
@@ -0,0 +1,957 @@
1
+ import { BrowserStorage, InMemoryCache, MemoryStorage, ReactorBuilder, SynchronizationManager, addFile, addFolder, baseDocumentModels, copyNode, deleteNode, driveDocumentModelModule, driveDocumentReducer, expectUUID, setDriveName, } from "document-drive";
2
+ import { FilesystemStorage } from "document-drive/storage/filesystem";
3
+ import { PrismaStorage } from "document-drive/storage/prisma";
4
+ import { PrismaClient } from "document-drive/storage/prisma/client";
5
+ import { documentModelCreateDocument, documentModelDocumentModelModule, setModelName, } from "document-model";
6
+ import { createPresignedHeader, generateId } from "document-model/core";
7
+ import fs from "node:fs/promises";
8
+ import path from "path";
9
+ import { afterEach, beforeEach, describe, it, vi } from "vitest";
10
+ const documentModels = baseDocumentModels;
11
+ const DocumentDriveUtils = { ...driveDocumentModelModule.utils };
12
+ const DocumentModelUtils = documentModelDocumentModelModule.utils;
13
+ const FileStorageDir = path.join(__dirname, "./file-storage");
14
+ const prismaClient = new PrismaClient();
15
+ const cache = new InMemoryCache();
16
+ const storageLayers = [
17
+ ["MemoryStorage", async () => new MemoryStorage()],
18
+ ["FilesystemStorage", async () => new FilesystemStorage(FileStorageDir)],
19
+ [
20
+ "BrowserStorage",
21
+ async () => {
22
+ const storage = new BrowserStorage();
23
+ await storage.clear();
24
+ return storage;
25
+ },
26
+ ],
27
+ ["PrismaStorage", async () => new PrismaStorage(prismaClient, cache)],
28
+ ];
29
+ const file = undefined;
30
+ // TODO import RealWorldAssets
31
+ // try {
32
+ // file = await DocumentModelsLibs.RealWorldAssets.utils.loadFromFile(
33
+ // "./test/rwa-document.zip",
34
+ // );
35
+ // } catch {
36
+ // /* empty */
37
+ // }
38
+ describe.each(storageLayers)("%s", (storageName, buildStorage) => {
39
+ beforeEach(async () => {
40
+ vi.setSystemTime(new Date("2024-01-01"));
41
+ cache.clear();
42
+ if (storageName === "FilesystemStorage") {
43
+ return fs.rm(FileStorageDir, { recursive: true, force: true });
44
+ }
45
+ else if (storageName === "BrowserStorage") {
46
+ return (await buildStorage()).clear();
47
+ }
48
+ else if (storageName === "PrismaStorage") {
49
+ await prismaClient.$executeRawUnsafe('DELETE FROM "Attachment";');
50
+ await prismaClient.$executeRawUnsafe('DELETE FROM "Operation";');
51
+ await prismaClient.$executeRawUnsafe('DELETE FROM "DriveDocument";');
52
+ await prismaClient.$executeRawUnsafe('DELETE FROM "Document";');
53
+ await prismaClient.$executeRawUnsafe('DELETE FROM "Drive";');
54
+ }
55
+ });
56
+ afterEach(async () => {
57
+ vi.useRealTimers();
58
+ if (storageName === "FilesystemStorage") {
59
+ return fs.rm(FileStorageDir, { recursive: true, force: true });
60
+ }
61
+ else if (storageName === "BrowserStorage") {
62
+ return (await buildStorage()).clear();
63
+ }
64
+ else if (storageName === "PrismaStorage") {
65
+ //await prismaClient.$executeRawUnsafe('DELETE FROM "Attachment";');
66
+ //await prismaClient.$executeRawUnsafe('DELETE FROM "Operation";');
67
+ //await prismaClient.$executeRawUnsafe('DELETE FROM "Document";');
68
+ //await prismaClient.$executeRawUnsafe('DELETE FROM "Drive";');
69
+ }
70
+ });
71
+ function createDocumentModelWithId(id) {
72
+ return {
73
+ ...documentModelCreateDocument(),
74
+ header: createPresignedHeader(id, documentModelDocumentModelModule.documentModel.global.id),
75
+ };
76
+ }
77
+ it("adds drive to server", async ({ expect }) => {
78
+ const driveId = generateId();
79
+ const server = new ReactorBuilder(documentModels)
80
+ .withCache(cache)
81
+ .withStorage(await buildStorage())
82
+ .build();
83
+ await server.addDrive({
84
+ id: driveId,
85
+ global: {
86
+ name: "name",
87
+ icon: "icon",
88
+ },
89
+ local: {
90
+ availableOffline: false,
91
+ sharingType: "PUBLIC",
92
+ listeners: [],
93
+ triggers: [],
94
+ },
95
+ });
96
+ const drive = await server.getDrive(driveId);
97
+ expect(drive.state).toStrictEqual(DocumentDriveUtils.createState({
98
+ global: {
99
+ name: "name",
100
+ icon: "icon",
101
+ nodes: [],
102
+ },
103
+ local: {
104
+ availableOffline: false,
105
+ sharingType: "PUBLIC",
106
+ listeners: [],
107
+ triggers: [],
108
+ },
109
+ }));
110
+ const drives = await server.getDrives();
111
+ expect(drives.includes(driveId)).toBeTruthy();
112
+ });
113
+ it.skipIf(!file)("adds file to server", async ({ expect }) => {
114
+ const driveId = generateId();
115
+ const documentId = generateId();
116
+ const server = new ReactorBuilder(documentModels)
117
+ .withCache(cache)
118
+ .withStorage(await buildStorage())
119
+ .build();
120
+ await server.addDocument(createDocumentModelWithId(documentId));
121
+ await server.addDrive({
122
+ id: driveId,
123
+ slug: "slug",
124
+ global: {
125
+ name: "name",
126
+ icon: "icon",
127
+ },
128
+ local: {
129
+ availableOffline: false,
130
+ sharingType: "public",
131
+ listeners: [],
132
+ triggers: [],
133
+ },
134
+ });
135
+ let drive = await server.getDrive(driveId);
136
+ // performs ADD_FILE operation locally
137
+ drive = driveDocumentReducer(drive, addFile({
138
+ id: documentId,
139
+ name: "document 1",
140
+ documentType: "powerhouse/document-model",
141
+ }));
142
+ // dispatches operation to server
143
+ const operation = drive.operations.global[0];
144
+ const operationResult = await server.addOperation(driveId, operation);
145
+ expect(operationResult.status).toBe("SUCCESS");
146
+ drive = await server.getDrive(driveId);
147
+ expect(drive.state).toStrictEqual(operationResult.document?.state);
148
+ expect(drive.state.global.nodes[0]).toStrictEqual({
149
+ id: documentId,
150
+ kind: "file",
151
+ name: "document 1",
152
+ documentType: "powerhouse/document-model",
153
+ parentFolder: null,
154
+ synchronizationUnits: [
155
+ {
156
+ branch: "main",
157
+ scope: "global",
158
+ syncId: expectUUID(expect),
159
+ },
160
+ {
161
+ branch: "main",
162
+ scope: "local",
163
+ syncId: expectUUID(expect),
164
+ },
165
+ ],
166
+ });
167
+ });
168
+ it("adds document as child when file is added to server", async ({ expect, }) => {
169
+ const driveId = generateId();
170
+ const documentId = generateId();
171
+ const storage = await buildStorage();
172
+ const server = new ReactorBuilder(documentModels)
173
+ .withCache(cache)
174
+ .withStorage(storage)
175
+ .build();
176
+ await server.addDrive({
177
+ id: driveId,
178
+ slug: "slug",
179
+ global: {
180
+ name: "name",
181
+ icon: "icon",
182
+ },
183
+ local: {
184
+ availableOffline: false,
185
+ sharingType: "public",
186
+ listeners: [],
187
+ triggers: [],
188
+ },
189
+ });
190
+ await server.addDocument(createDocumentModelWithId(documentId));
191
+ await expect(storage.getChildren(driveId)).resolves.toStrictEqual([]);
192
+ let drive = await server.getDrive(driveId);
193
+ drive = driveDocumentReducer(drive, addFile({
194
+ id: documentId,
195
+ name: "document 1",
196
+ documentType: "powerhouse/document-model",
197
+ }));
198
+ const operation = drive.operations.global[0];
199
+ const result = await server.addOperation(driveId, operation);
200
+ if (result.error) {
201
+ console.error(result.error);
202
+ throw result.error;
203
+ }
204
+ expect(result.status).toBe("SUCCESS");
205
+ await expect(storage.getChildren(driveId)).resolves.toStrictEqual([documentId]);
206
+ const document = await server.getDocument(documentId);
207
+ expect(document.header.documentType).toBe("powerhouse/document-model");
208
+ expect(document.state).toStrictEqual(DocumentModelUtils.createState());
209
+ const driveDocuments = await server.getDocuments(driveId);
210
+ expect(driveDocuments).toStrictEqual([documentId]);
211
+ });
212
+ it("adds document as child even if document is not previously added to server", async ({ expect, }) => {
213
+ const driveId = generateId();
214
+ const documentId = generateId();
215
+ const storage = await buildStorage();
216
+ const server = new ReactorBuilder(documentModels)
217
+ .withCache(cache)
218
+ .withStorage(storage)
219
+ .build();
220
+ await server.addDrive({
221
+ id: driveId,
222
+ slug: "slug",
223
+ global: {
224
+ name: "name",
225
+ icon: "icon",
226
+ },
227
+ local: {
228
+ availableOffline: false,
229
+ sharingType: "public",
230
+ listeners: [],
231
+ triggers: [],
232
+ },
233
+ });
234
+ await expect(storage.getChildren(driveId)).resolves.toStrictEqual([]);
235
+ let drive = await server.getDrive(driveId);
236
+ drive = driveDocumentReducer(drive, addFile({
237
+ id: documentId,
238
+ name: "document 1",
239
+ documentType: "powerhouse/document-model",
240
+ }));
241
+ const operation = drive.operations.global[0];
242
+ const result = await server.addOperation(driveId, operation);
243
+ if (result.error) {
244
+ console.error(result.error);
245
+ throw result.error;
246
+ }
247
+ expect(result.status).toBe("SUCCESS");
248
+ await expect(storage.getChildren(driveId)).resolves.toStrictEqual([documentId]);
249
+ // const document = await server.getDocument(documentId);
250
+ // expect(document.documentType).toBe("powerhouse/document-model");
251
+ // expect(document.state).toStrictEqual(DocumentModelUtils.createState());
252
+ // const driveDocuments = await server.getDocuments(driveId);
253
+ // expect(driveDocuments).toStrictEqual([documentId]);
254
+ });
255
+ it("removes file as child", async ({ expect }) => {
256
+ const driveId = generateId();
257
+ const documentId = generateId();
258
+ const storage = await buildStorage();
259
+ const server = new ReactorBuilder(documentModels)
260
+ .withCache(cache)
261
+ .withStorage(storage)
262
+ .build();
263
+ await server.addDocument(createDocumentModelWithId(documentId));
264
+ await server.addDrive({
265
+ id: driveId,
266
+ slug: "slug",
267
+ global: {
268
+ name: "name",
269
+ icon: "icon",
270
+ },
271
+ local: {
272
+ availableOffline: false,
273
+ sharingType: "public",
274
+ listeners: [],
275
+ triggers: [],
276
+ },
277
+ });
278
+ let drive = await server.getDrive(driveId);
279
+ // adds file
280
+ drive = driveDocumentReducer(drive, addFile({
281
+ id: documentId,
282
+ name: "document 1",
283
+ documentType: "powerhouse/document-model",
284
+ }));
285
+ let result = await server.addOperation(driveId, drive.operations.global[0]);
286
+ expect(result.status).toBe("SUCCESS");
287
+ await expect(storage.getChildren(driveId)).resolves.toStrictEqual([documentId]);
288
+ // removes file
289
+ drive = driveDocumentReducer(drive, deleteNode({
290
+ id: documentId,
291
+ }));
292
+ result = await server.addOperation(driveId, drive.operations.global[1]);
293
+ expect(result.status).toBe("SUCCESS");
294
+ await expect(storage.getChildren(driveId)).resolves.toStrictEqual([]);
295
+ const serverDrive = await server.getDrive(driveId);
296
+ expect(serverDrive.state.global.nodes).toStrictEqual([]);
297
+ });
298
+ it("deletes document node when file is removed from server", async ({ expect, }) => {
299
+ const driveId = generateId();
300
+ const documentId = generateId();
301
+ const server = new ReactorBuilder(documentModels)
302
+ .withCache(cache)
303
+ .withStorage(await buildStorage())
304
+ .build();
305
+ await server.addDrive({
306
+ id: driveId,
307
+ slug: "slug",
308
+ global: {
309
+ name: "name",
310
+ icon: "icon",
311
+ },
312
+ local: {
313
+ availableOffline: false,
314
+ sharingType: "public",
315
+ listeners: [],
316
+ triggers: [],
317
+ },
318
+ });
319
+ let drive = await server.getDrive(driveId);
320
+ drive = driveDocumentReducer(drive, addFile({
321
+ id: documentId,
322
+ name: "document 1",
323
+ documentType: "powerhouse/document-model",
324
+ }));
325
+ drive = driveDocumentReducer(drive, deleteNode({
326
+ id: documentId,
327
+ }));
328
+ const result = await server.addOperations(driveId, drive.operations.global);
329
+ expect(result.status).toBe("SUCCESS");
330
+ const documents = await server.getDocuments(driveId);
331
+ expect(documents).toStrictEqual([]);
332
+ await expect(server.getDocument(documentId)).rejects.toThrowError(`Document with id ${documentId} not found`);
333
+ });
334
+ it("removes documents as child when it is removed from inside a folder on a drive", async ({ expect, }) => {
335
+ const driveId = generateId();
336
+ const folderId = generateId();
337
+ const documentId = generateId();
338
+ const storage = await buildStorage();
339
+ const server = new ReactorBuilder(documentModels)
340
+ .withCache(cache)
341
+ .withStorage(storage)
342
+ .build();
343
+ await server.addDrive({
344
+ id: driveId,
345
+ slug: "slug",
346
+ global: {
347
+ name: "name",
348
+ icon: "icon",
349
+ },
350
+ local: {
351
+ availableOffline: false,
352
+ sharingType: "public",
353
+ listeners: [],
354
+ triggers: [],
355
+ },
356
+ });
357
+ let drive = await server.getDrive(driveId);
358
+ const document = createDocumentModelWithId(documentId);
359
+ await server.addDocument(document);
360
+ drive = driveDocumentReducer(drive, addFolder({
361
+ id: folderId,
362
+ name: "document 1",
363
+ }));
364
+ drive = driveDocumentReducer(drive, addFile({
365
+ id: documentId,
366
+ name: "document 1",
367
+ documentType: "powerhouse/document-model",
368
+ parentFolder: folderId,
369
+ }));
370
+ drive = driveDocumentReducer(drive, deleteNode({
371
+ id: folderId,
372
+ }));
373
+ const result = await server.addOperations(driveId, drive.operations.global);
374
+ expect(result.status).toBe("SUCCESS");
375
+ await expect(storage.getChildren(driveId)).resolves.toStrictEqual([]);
376
+ const documents = await server.getDocuments(driveId);
377
+ expect(documents).toStrictEqual([]);
378
+ await expect(server.getDocument(documentId)).resolves.toMatchObject(document);
379
+ });
380
+ it("deletes drive from server", async ({ expect }) => {
381
+ const driveId = generateId();
382
+ const server = new ReactorBuilder(documentModels)
383
+ .withCache(cache)
384
+ .withStorage(await buildStorage())
385
+ .build();
386
+ await server.addDrive({
387
+ id: driveId,
388
+ slug: "slug",
389
+ global: {
390
+ name: "name",
391
+ icon: "icon",
392
+ },
393
+ local: {
394
+ availableOffline: false,
395
+ sharingType: "public",
396
+ listeners: [],
397
+ triggers: [],
398
+ },
399
+ });
400
+ await server.deleteDrive(driveId);
401
+ const drives = await server.getDrives();
402
+ expect(drives).toStrictEqual([]);
403
+ });
404
+ it("deletes documents when drive is deleted from server", async ({ expect, }) => {
405
+ const driveId = generateId();
406
+ const documentId = generateId();
407
+ const server = new ReactorBuilder(documentModels)
408
+ .withCache(cache)
409
+ .withStorage(await buildStorage())
410
+ .build();
411
+ await server.addDrive({
412
+ id: driveId,
413
+ slug: "slug",
414
+ global: {
415
+ name: "name",
416
+ icon: "icon",
417
+ },
418
+ local: {
419
+ availableOffline: false,
420
+ sharingType: "public",
421
+ listeners: [],
422
+ triggers: [],
423
+ },
424
+ });
425
+ const document = createDocumentModelWithId(documentId);
426
+ await server.addDocument(document);
427
+ let drive = await server.getDrive(driveId);
428
+ drive = driveDocumentReducer(drive, addFile({
429
+ id: documentId,
430
+ name: "document 1",
431
+ documentType: "powerhouse/document-model",
432
+ }));
433
+ const result = await server.addOperation(driveId, drive.operations.global[0]);
434
+ expect(result.status).toBe("SUCCESS");
435
+ await server.deleteDrive(driveId);
436
+ const documents = await server.getDocuments(driveId);
437
+ expect(documents).toStrictEqual([]);
438
+ await expect(server.getDocument(documentId)).resolves.toMatchObject(document);
439
+ });
440
+ it("renames drive", async ({ expect }) => {
441
+ const driveId = generateId();
442
+ const server = new ReactorBuilder(documentModels)
443
+ .withCache(cache)
444
+ .withStorage(await buildStorage())
445
+ .build();
446
+ await server.addDrive({
447
+ id: driveId,
448
+ slug: "slug",
449
+ global: {
450
+ name: "name",
451
+ icon: "icon",
452
+ },
453
+ local: {
454
+ availableOffline: false,
455
+ sharingType: "public",
456
+ listeners: [],
457
+ triggers: [],
458
+ },
459
+ });
460
+ let drive = await server.getDrive(driveId);
461
+ drive = driveDocumentReducer(drive, setDriveName({
462
+ name: "new name",
463
+ }));
464
+ const result = await server.addOperation(driveId, drive.operations.global[0]);
465
+ expect(result.status).toBe("SUCCESS");
466
+ drive = await server.getDrive(driveId);
467
+ expect(drive.state.global.name).toBe("new name");
468
+ });
469
+ it("copies document when file is copied drive", async ({ expect }) => {
470
+ const driveId = generateId();
471
+ const folder1Id = generateId();
472
+ const folder2Id = generateId();
473
+ const document1Id = generateId();
474
+ const document2Id = generateId();
475
+ const server = new ReactorBuilder(documentModels)
476
+ .withCache(cache)
477
+ .withStorage(await buildStorage())
478
+ .build();
479
+ await server.addDocument(createDocumentModelWithId(document1Id));
480
+ await server.addDocument(createDocumentModelWithId(document2Id));
481
+ await server.addDrive({
482
+ id: driveId,
483
+ slug: "drive",
484
+ global: {
485
+ name: "name",
486
+ icon: "icon",
487
+ },
488
+ local: {
489
+ availableOffline: false,
490
+ sharingType: "public",
491
+ listeners: [],
492
+ triggers: [],
493
+ },
494
+ });
495
+ let drive = await server.getDrive(driveId);
496
+ drive = driveDocumentReducer(drive, addFolder({
497
+ id: folder1Id,
498
+ name: "1",
499
+ }));
500
+ drive = driveDocumentReducer(drive, addFolder({
501
+ id: folder2Id,
502
+ name: "2",
503
+ }));
504
+ drive = driveDocumentReducer(drive, addFile({
505
+ id: document1Id,
506
+ name: "1.1",
507
+ documentType: "powerhouse/document-model",
508
+ parentFolder: folder1Id,
509
+ }));
510
+ drive = driveDocumentReducer(drive, copyNode({
511
+ srcId: document1Id,
512
+ targetId: document2Id,
513
+ targetName: "2.2",
514
+ targetParentFolder: folder2Id,
515
+ }));
516
+ vi.useRealTimers();
517
+ const result = await server.addOperations(driveId, drive.operations.global);
518
+ expect(result.status).toBe("SUCCESS");
519
+ drive = await server.getDrive(driveId);
520
+ const document = await server.getDocument(document1Id);
521
+ const documentB = await server.getDocument(document2Id);
522
+ // slugs have to change, as they are unique
523
+ expect(document.header.slug).not.toBe(documentB.header.slug);
524
+ // compare everything but the slug + id (which are supposed to be different)
525
+ const { header: { slug, id, ...restHeader }, ...rest } = document;
526
+ const { header: { slug: slug2, id: id2, ...restHeader2 }, ...rest2 } = documentB;
527
+ expect(rest).toStrictEqual(rest2);
528
+ expect(restHeader).toStrictEqual(restHeader2);
529
+ expect(id).toBe(document1Id);
530
+ expect(slug).toBe(document1Id);
531
+ expect(id2).toBe(document2Id);
532
+ expect(slug2).toBe(document2Id);
533
+ });
534
+ it("adds document operation", async ({ expect }) => {
535
+ const driveId = generateId();
536
+ const documentId = generateId();
537
+ const server = new ReactorBuilder(documentModels)
538
+ .withCache(cache)
539
+ .withStorage(await buildStorage())
540
+ .build();
541
+ await server.addDrive({
542
+ id: driveId,
543
+ slug: "slug",
544
+ global: {
545
+ name: "name",
546
+ icon: "icon",
547
+ },
548
+ local: {
549
+ availableOffline: false,
550
+ sharingType: "public",
551
+ listeners: [],
552
+ triggers: [],
553
+ },
554
+ });
555
+ let drive = await server.getDrive(driveId);
556
+ await server.addDocument(createDocumentModelWithId(documentId));
557
+ // adds file
558
+ drive = driveDocumentReducer(drive, addFile({
559
+ id: documentId,
560
+ name: "document 1",
561
+ documentType: "powerhouse/document-model",
562
+ }));
563
+ await server.addOperation(driveId, drive.operations.global[0]);
564
+ let document = await server.getDocument(documentId);
565
+ document = documentModelDocumentModelModule.reducer(document, setModelName({ name: "Test" }));
566
+ const operation = document.operations.global[0];
567
+ const result = await server.addOperation(documentId, operation);
568
+ expect(result.error).toBeUndefined();
569
+ expect(result.status).toBe("SUCCESS");
570
+ expect(result.operations[0]).toStrictEqual(expect.objectContaining(operation));
571
+ const storedDocument = await server.getDocument(documentId);
572
+ expect(storedDocument.state).toStrictEqual(document.state);
573
+ expect(storedDocument.operations).toMatchObject(document.operations);
574
+ });
575
+ it("adds document operations", async ({ expect }) => {
576
+ const driveId = generateId();
577
+ const server = new ReactorBuilder(documentModels)
578
+ .withCache(cache)
579
+ .withStorage(await buildStorage())
580
+ .build();
581
+ let document = documentModelCreateDocument();
582
+ const documentId = document.header.id;
583
+ // adds document
584
+ await server.addDocument(document);
585
+ document = await server.getDocument(documentId);
586
+ document = documentModelDocumentModelModule.reducer(document, documentModelDocumentModelModule.actions.setModelName({ name: "Test" }));
587
+ document = documentModelDocumentModelModule.reducer(document, documentModelDocumentModelModule.actions.setStateSchema({
588
+ schema: 'type TestState {\n "Add your global state fields here"\n _placeholder: String\n}',
589
+ scope: "global",
590
+ }));
591
+ const operations = document.operations.global;
592
+ const result = await server.addOperations(documentId, operations);
593
+ expect(result.error).toBeUndefined();
594
+ expect(result.status).toBe("SUCCESS");
595
+ expect(result.operations).toStrictEqual(expect.objectContaining(operations));
596
+ const storedDocument = await server.getDocument(driveId, documentId);
597
+ expect(storedDocument.state).toStrictEqual(document.state);
598
+ expect(storedDocument.operations).toMatchObject(document.operations);
599
+ });
600
+ it("adds drive operations", async ({ expect }) => {
601
+ const driveId = generateId();
602
+ const server = new ReactorBuilder(documentModels)
603
+ .withCache(cache)
604
+ .withStorage(await buildStorage())
605
+ .build();
606
+ await server.addDrive({
607
+ id: driveId,
608
+ slug: "slug",
609
+ global: {
610
+ name: "name",
611
+ icon: "icon",
612
+ },
613
+ local: {
614
+ availableOffline: false,
615
+ sharingType: "public",
616
+ listeners: [],
617
+ triggers: [],
618
+ },
619
+ });
620
+ let drive = await server.getDrive(driveId);
621
+ drive = driveDocumentReducer(drive, addFolder({ id: generateId(), name: "folder 1" }));
622
+ drive = driveDocumentReducer(drive, addFolder({ id: generateId(), name: "folder 2" }));
623
+ const operations = drive.operations.global;
624
+ const result = await server.addDriveOperations(driveId, operations);
625
+ expect(result.status).toBe("SUCCESS");
626
+ expect(result.operations).toStrictEqual(expect.objectContaining(operations));
627
+ const storedDrive = await server.getDrive(driveId);
628
+ expect(storedDrive.state).toStrictEqual(drive.state);
629
+ expect(storedDrive.operations).toMatchObject(drive.operations);
630
+ });
631
+ it("saves operation context", async ({ expect }) => {
632
+ const driveId = generateId();
633
+ const documentId = generateId();
634
+ const server = new ReactorBuilder(documentModels)
635
+ .withCache(cache)
636
+ .withStorage(await buildStorage())
637
+ .build();
638
+ await server.addDrive({
639
+ id: driveId,
640
+ slug: "slug",
641
+ global: {
642
+ name: "name",
643
+ icon: "icon",
644
+ },
645
+ local: {
646
+ availableOffline: false,
647
+ sharingType: "public",
648
+ listeners: [],
649
+ triggers: [],
650
+ },
651
+ });
652
+ let drive = await server.getDrive(driveId);
653
+ const context = {
654
+ signer: {
655
+ user: {
656
+ address: "123",
657
+ networkId: "1",
658
+ chainId: 1,
659
+ },
660
+ app: {
661
+ name: "name",
662
+ key: "key",
663
+ },
664
+ signatures: ["test"],
665
+ },
666
+ };
667
+ drive = driveDocumentReducer(drive, {
668
+ ...addFile({
669
+ id: documentId,
670
+ name: "document 1",
671
+ documentType: "powerhouse/document-model",
672
+ }),
673
+ context,
674
+ });
675
+ // dispatches operation to server
676
+ const operation = drive.operations.global[0];
677
+ const operationResult = await server.addOperation(driveId, operation);
678
+ expect(operationResult.status).toBe("SUCCESS");
679
+ drive = await server.getDrive(driveId);
680
+ expect(drive.operations.global[0]?.action?.context).toStrictEqual(context);
681
+ });
682
+ it("get drives by slug", async ({ expect }) => {
683
+ const driveId1 = generateId();
684
+ const driveId2 = generateId();
685
+ const driveId3 = generateId();
686
+ const driveId4 = generateId();
687
+ const server = new ReactorBuilder(documentModels)
688
+ .withCache(cache)
689
+ .withStorage(await buildStorage())
690
+ .build();
691
+ const addDrive = (driveId, slug) => server.addDrive({
692
+ id: driveId,
693
+ slug,
694
+ global: {
695
+ name: "name",
696
+ icon: "icon",
697
+ },
698
+ local: {
699
+ availableOffline: false,
700
+ sharingType: "public",
701
+ listeners: [],
702
+ triggers: [],
703
+ },
704
+ });
705
+ await addDrive(driveId1, "slug1");
706
+ await addDrive(driveId2, "slug2");
707
+ await addDrive(driveId3, "slug3");
708
+ // add drive with the same slug as the first drive, which should throw an error
709
+ try {
710
+ await addDrive(driveId4, "slug1");
711
+ throw new Error("created drive with duplicate slug");
712
+ }
713
+ catch (error) {
714
+ expect(error.documentId).toContain(driveId4);
715
+ }
716
+ let drive = await server.getDriveBySlug("slug1");
717
+ expect(drive.header.id).toBe(driveId1);
718
+ drive = await server.getDriveBySlug("slug2");
719
+ expect(drive.header.id).toBe(driveId2);
720
+ drive = await server.getDriveBySlug("slug3");
721
+ expect(drive.header.id).toBe(driveId3);
722
+ });
723
+ it.skipIf(!file)("import document from zip", async ({ expect }) => {
724
+ const driveId = generateId();
725
+ const storage = await buildStorage();
726
+ const server = new ReactorBuilder(documentModels)
727
+ .withCache(cache)
728
+ .withStorage(storage)
729
+ .build();
730
+ const drive = await server.addDrive({
731
+ id: driveId,
732
+ slug: "slug",
733
+ global: {
734
+ name: "name",
735
+ icon: "icon",
736
+ },
737
+ local: {
738
+ availableOffline: false,
739
+ sharingType: "public",
740
+ listeners: [],
741
+ triggers: [],
742
+ },
743
+ });
744
+ const documentId = generateId();
745
+ await server.addDocument({
746
+ ...file,
747
+ header: createPresignedHeader(documentId, file.header.documentType),
748
+ });
749
+ const action = addFile({
750
+ id: documentId,
751
+ name: "name",
752
+ parentFolder: null,
753
+ documentType: file.header.documentType,
754
+ });
755
+ const result = await server.addAction(driveId, action);
756
+ expect(result.status).toBe("SUCCESS");
757
+ const document = await server.getDocument(documentId);
758
+ expect(document).toStrictEqual(file);
759
+ });
760
+ it("should get synchronization units revision", async ({ expect }) => {
761
+ const driveId = generateId();
762
+ const documentId = generateId();
763
+ const storage = await buildStorage();
764
+ const cache = new InMemoryCache();
765
+ const syncManager = new SynchronizationManager(storage, storage, cache, documentModels);
766
+ const server = new ReactorBuilder(documentModels)
767
+ .withCache(cache)
768
+ .withStorage(storage)
769
+ .withSynchronizationManager(syncManager)
770
+ .build();
771
+ await server.addDrive({
772
+ id: driveId,
773
+ slug: "slug",
774
+ global: {
775
+ name: "name",
776
+ icon: "icon",
777
+ },
778
+ local: {
779
+ availableOffline: false,
780
+ sharingType: "public",
781
+ listeners: [],
782
+ triggers: [],
783
+ },
784
+ });
785
+ let drive = await server.getDrive(driveId);
786
+ const syncUnitsInitial = await syncManager.getSynchronizationUnits(driveId, undefined, ["global"]);
787
+ expect(syncUnitsInitial).toStrictEqual([
788
+ {
789
+ documentId: drive.header.id,
790
+ documentType: "powerhouse/document-drive",
791
+ scope: "global",
792
+ branch: "main",
793
+ lastUpdated: "2024-01-01T00:00:00.000Z",
794
+ revision: 0,
795
+ },
796
+ ]);
797
+ const storageUnitsInitial = await storage.findStorageUnitsBy({}, 10);
798
+ expect(storageUnitsInitial.units).toHaveLength(4);
799
+ await server.addDocument(createDocumentModelWithId(documentId));
800
+ // adds file
801
+ drive = driveDocumentReducer(drive, addFile({
802
+ id: documentId,
803
+ name: "document 1",
804
+ documentType: "powerhouse/document-model",
805
+ }));
806
+ await server.addOperation(driveId, drive.operations.global[0]);
807
+ let document = await server.getDocument(documentId);
808
+ document = documentModelDocumentModelModule.reducer(document, setModelName({ name: "Test" }));
809
+ const operation = document.operations.global[0];
810
+ await server.addOperation(documentId, operation);
811
+ await server.getDocument(documentId);
812
+ const syncUnits = await syncManager.getSynchronizationUnits(driveId, undefined, ["global"]);
813
+ expect(syncUnits).toStrictEqual([
814
+ {
815
+ documentId: drive.header.id,
816
+ documentType: "powerhouse/document-drive",
817
+ scope: "global",
818
+ branch: "main",
819
+ lastUpdated: "2024-01-01T00:00:00.000Z",
820
+ revision: 1,
821
+ },
822
+ {
823
+ documentId: documentId,
824
+ documentType: "powerhouse/document-model",
825
+ scope: "global",
826
+ branch: "main",
827
+ lastUpdated: "2024-01-01T00:00:00.000Z",
828
+ revision: 1,
829
+ },
830
+ ]);
831
+ const storageUnits = await storage.findStorageUnitsBy({}, 10);
832
+ expect(storageUnits.units).toHaveLength(8);
833
+ });
834
+ it("should store all operation attributes", async ({ expect }) => {
835
+ const driveId = generateId();
836
+ const documentId = generateId();
837
+ const storage = await buildStorage();
838
+ const server = new ReactorBuilder(documentModels)
839
+ .withCache(cache)
840
+ .withStorage(storage)
841
+ .build();
842
+ await server.addDrive({
843
+ id: driveId,
844
+ slug: "slug",
845
+ global: {
846
+ name: "name",
847
+ icon: "icon",
848
+ },
849
+ local: {
850
+ availableOffline: false,
851
+ sharingType: "public",
852
+ listeners: [],
853
+ triggers: [],
854
+ },
855
+ });
856
+ let drive = await server.getDrive(driveId);
857
+ const context = {
858
+ signer: {
859
+ user: {
860
+ address: "123",
861
+ networkId: "1",
862
+ chainId: 1,
863
+ },
864
+ app: {
865
+ name: "name",
866
+ key: "key",
867
+ },
868
+ signatures: ["test"],
869
+ },
870
+ };
871
+ // adds file
872
+ drive = driveDocumentReducer(drive, {
873
+ ...addFile({
874
+ id: documentId,
875
+ name: "document 1",
876
+ documentType: "powerhouse/document-model",
877
+ }),
878
+ context,
879
+ });
880
+ await server.addOperation(driveId, drive.operations.global[0]);
881
+ const storedDrive = await server.getDrive(driveId);
882
+ expect(storedDrive.operations.global[0]).toMatchObject(drive.operations.global[0]);
883
+ });
884
+ it("gets document at specific revision", async ({ expect }) => {
885
+ const driveId = generateId();
886
+ const documentId = generateId();
887
+ const server = new ReactorBuilder(documentModels)
888
+ .withCache(cache)
889
+ .withStorage(await buildStorage())
890
+ .build();
891
+ await server.addDrive({
892
+ id: driveId,
893
+ slug: "slug",
894
+ global: {
895
+ name: "name",
896
+ icon: "icon",
897
+ },
898
+ local: {
899
+ availableOffline: false,
900
+ sharingType: "public",
901
+ listeners: [],
902
+ triggers: [],
903
+ },
904
+ });
905
+ const drive = await server.getDrive(driveId);
906
+ // adds file
907
+ const newDrive = driveDocumentReducer(drive, addFile({
908
+ id: documentId,
909
+ name: "document 1",
910
+ documentType: "powerhouse/document-model",
911
+ }));
912
+ await server.addOperation(driveId, newDrive.operations.global[0]);
913
+ const drive0 = await server.getDrive(driveId, {
914
+ revisions: { global: -1 },
915
+ });
916
+ expect(drive0.operations.global.length).toBe(0);
917
+ expect(drive0).toStrictEqual(drive);
918
+ });
919
+ it("should allow removing a drive and then adding a new drive with the same id and slug", async ({ expect, }) => {
920
+ const server = new ReactorBuilder(documentModels)
921
+ .withCache(cache)
922
+ .withStorage(await buildStorage())
923
+ .build();
924
+ await server.addDrive({
925
+ id: "test-drive",
926
+ slug: "test-drive",
927
+ global: {
928
+ name: "test-drive",
929
+ icon: "icon",
930
+ },
931
+ local: {
932
+ availableOffline: false,
933
+ sharingType: "public",
934
+ listeners: [],
935
+ triggers: [],
936
+ },
937
+ });
938
+ await server.deleteDrive("test-drive");
939
+ await server.addDrive({
940
+ id: "test-drive",
941
+ slug: "test-drive",
942
+ global: {
943
+ name: "test-drive",
944
+ icon: "icon",
945
+ },
946
+ local: {
947
+ availableOffline: false,
948
+ sharingType: "public",
949
+ listeners: [],
950
+ triggers: [],
951
+ },
952
+ });
953
+ const drive = await server.getDriveBySlug("test-drive");
954
+ expect(drive.header.slug).toBe("test-drive");
955
+ });
956
+ });
957
+ //# sourceMappingURL=server.test.js.map