@abloatai/humans 0.37.0

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 (404) hide show
  1. package/README.md +52 -0
  2. package/dist/Ablo.d.ts +208 -0
  3. package/dist/Ablo.js +120 -0
  4. package/dist/client.d.ts +317 -0
  5. package/dist/client.js +13 -0
  6. package/dist/core.d.ts +35 -0
  7. package/dist/core.js +48 -0
  8. package/dist/humans.d.ts +28 -0
  9. package/dist/humans.js +34 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.js +6 -0
  12. package/dist/local/BaseSyncedStore.d.ts +807 -0
  13. package/dist/local/BaseSyncedStore.js +1516 -0
  14. package/dist/local/Database.d.ts +322 -0
  15. package/dist/local/Database.js +1589 -0
  16. package/dist/local/InstanceCache.d.ts +255 -0
  17. package/dist/local/InstanceCache.js +1263 -0
  18. package/dist/local/LazyReferenceCollection.d.ts +177 -0
  19. package/dist/local/LazyReferenceCollection.js +461 -0
  20. package/dist/local/Model.d.ts +475 -0
  21. package/dist/local/Model.js +950 -0
  22. package/dist/local/ModelRegistry.d.ts +225 -0
  23. package/dist/local/ModelRegistry.js +539 -0
  24. package/dist/local/NetworkMonitor.d.ts +28 -0
  25. package/dist/local/NetworkMonitor.js +79 -0
  26. package/dist/local/RuntimeContext.d.ts +52 -0
  27. package/dist/local/RuntimeContext.js +80 -0
  28. package/dist/local/SyncClient.d.ts +516 -0
  29. package/dist/local/SyncClient.js +1754 -0
  30. package/dist/local/adapters/alwaysOnline.d.ts +14 -0
  31. package/dist/local/adapters/alwaysOnline.js +17 -0
  32. package/dist/local/adapters/inMemoryStorage.d.ts +37 -0
  33. package/dist/local/adapters/inMemoryStorage.js +122 -0
  34. package/dist/local/client/clientPrelude.d.ts +52 -0
  35. package/dist/local/client/clientPrelude.js +60 -0
  36. package/dist/local/client/consoleLogger.d.ts +35 -0
  37. package/dist/local/client/consoleLogger.js +44 -0
  38. package/dist/local/client/createInternalComponents.d.ts +50 -0
  39. package/dist/local/client/createInternalComponents.js +98 -0
  40. package/dist/local/client/createModelProxy.d.ts +248 -0
  41. package/dist/local/client/createModelProxy.js +880 -0
  42. package/dist/local/client/modelRegistration.d.ts +10 -0
  43. package/dist/local/client/modelRegistration.js +316 -0
  44. package/dist/local/client/options.d.ts +440 -0
  45. package/dist/local/client/options.js +7 -0
  46. package/dist/local/client/reactiveEngine.d.ts +53 -0
  47. package/dist/local/client/reactiveEngine.js +705 -0
  48. package/dist/local/client/resourceTypes.d.ts +12 -0
  49. package/dist/local/client/resourceTypes.js +10 -0
  50. package/dist/local/client/schemaConfig.d.ts +44 -0
  51. package/dist/local/client/schemaConfig.js +185 -0
  52. package/dist/local/client/storeCluster.d.ts +46 -0
  53. package/dist/local/client/storeCluster.js +133 -0
  54. package/dist/local/client/storeLifecycle.d.ts +61 -0
  55. package/dist/local/client/storeLifecycle.js +236 -0
  56. package/dist/local/client/validateAbloOptions.d.ts +42 -0
  57. package/dist/local/client/validateAbloOptions.js +43 -0
  58. package/dist/local/client/wsMutationExecutor.d.ts +27 -0
  59. package/dist/local/client/wsMutationExecutor.js +72 -0
  60. package/dist/local/context.d.ts +42 -0
  61. package/dist/local/context.js +81 -0
  62. package/dist/local/coordination/ClaimLog.d.ts +26 -0
  63. package/dist/local/coordination/ClaimLog.js +32 -0
  64. package/dist/local/interfaces/index.d.ts +311 -0
  65. package/dist/local/interfaces/index.js +9 -0
  66. package/dist/local/localModelContract.d.ts +14 -0
  67. package/dist/local/localModelContract.js +1 -0
  68. package/dist/local/logPosition.d.ts +31 -0
  69. package/dist/local/logPosition.js +53 -0
  70. package/dist/local/mutationPersistence.d.ts +6 -0
  71. package/dist/local/mutationPersistence.js +1 -0
  72. package/dist/local/mutators/RecordingMutation.d.ts +36 -0
  73. package/dist/local/mutators/RecordingMutation.js +182 -0
  74. package/dist/local/mutators/Transaction.d.ts +40 -0
  75. package/dist/local/mutators/Transaction.js +58 -0
  76. package/dist/local/mutators/UndoManager.d.ts +258 -0
  77. package/dist/local/mutators/UndoManager.js +665 -0
  78. package/dist/local/mutators/defineMutators.d.ts +60 -0
  79. package/dist/local/mutators/defineMutators.js +18 -0
  80. package/dist/local/mutators/inverseOp.d.ts +126 -0
  81. package/dist/local/mutators/inverseOp.js +71 -0
  82. package/dist/local/mutators/mutateActions.d.ts +45 -0
  83. package/dist/local/mutators/mutateActions.js +105 -0
  84. package/dist/local/mutators/readerActions.d.ts +33 -0
  85. package/dist/local/mutators/readerActions.js +57 -0
  86. package/dist/local/mutators/undoApply.d.ts +51 -0
  87. package/dist/local/mutators/undoApply.js +117 -0
  88. package/dist/local/persistence.d.ts +7 -0
  89. package/dist/local/persistence.js +9 -0
  90. package/dist/local/query/QueryProcessor.d.ts +75 -0
  91. package/dist/local/query/QueryProcessor.js +255 -0
  92. package/dist/local/query/client.d.ts +64 -0
  93. package/dist/local/query/client.js +138 -0
  94. package/dist/local/query/types.d.ts +85 -0
  95. package/dist/local/query/types.js +16 -0
  96. package/dist/local/schema/serialize.d.ts +1 -0
  97. package/dist/local/schema/serialize.js +1 -0
  98. package/dist/local/store/queryApi.d.ts +13 -0
  99. package/dist/local/store/queryApi.js +35 -0
  100. package/dist/local/storeContract.d.ts +145 -0
  101. package/dist/local/storeContract.js +12 -0
  102. package/dist/local/stores/DatabaseManager.d.ts +112 -0
  103. package/dist/local/stores/DatabaseManager.js +400 -0
  104. package/dist/local/stores/ObjectStore.d.ts +115 -0
  105. package/dist/local/stores/ObjectStore.js +393 -0
  106. package/dist/local/stores/ObjectStoreContract.d.ts +38 -0
  107. package/dist/local/stores/ObjectStoreContract.js +1 -0
  108. package/dist/local/stores/StoreManager.d.ts +114 -0
  109. package/dist/local/stores/StoreManager.js +304 -0
  110. package/dist/local/stores/SyncActionStore.d.ts +99 -0
  111. package/dist/local/stores/SyncActionStore.js +506 -0
  112. package/dist/local/stores/openIDBWithTimeout.d.ts +65 -0
  113. package/dist/local/stores/openIDBWithTimeout.js +153 -0
  114. package/dist/local/stores/persistenceCleanup.d.ts +7 -0
  115. package/dist/local/stores/persistenceCleanup.js +26 -0
  116. package/dist/local/stores/persistenceIdentity.d.ts +27 -0
  117. package/dist/local/stores/persistenceIdentity.js +38 -0
  118. package/dist/local/stores/syncAction.d.ts +26 -0
  119. package/dist/local/stores/syncAction.js +16 -0
  120. package/dist/local/stores/v1PersistenceDeletion.d.ts +8 -0
  121. package/dist/local/stores/v1PersistenceDeletion.js +16 -0
  122. package/dist/local/sync/BootstrapFetcher.d.ts +284 -0
  123. package/dist/local/sync/BootstrapFetcher.js +964 -0
  124. package/dist/local/sync/ConnectionManager.d.ts +8 -0
  125. package/dist/local/sync/ConnectionManager.js +8 -0
  126. package/dist/local/sync/OnDemandLoader.d.ts +231 -0
  127. package/dist/local/sync/OnDemandLoader.js +743 -0
  128. package/dist/local/sync/SubscriptionManager.d.ts +159 -0
  129. package/dist/local/sync/SubscriptionManager.js +243 -0
  130. package/dist/local/sync/SyncWebSocket.d.ts +173 -0
  131. package/dist/local/sync/SyncWebSocket.js +438 -0
  132. package/dist/local/sync/bootstrapApply.d.ts +73 -0
  133. package/dist/local/sync/bootstrapApply.js +73 -0
  134. package/dist/local/sync/commitFrames.d.ts +8 -0
  135. package/dist/local/sync/commitFrames.js +8 -0
  136. package/dist/local/sync/connectionManagerLifecycle.d.ts +23 -0
  137. package/dist/local/sync/connectionManagerLifecycle.js +126 -0
  138. package/dist/local/sync/contextPorts.d.ts +18 -0
  139. package/dist/local/sync/contextPorts.js +31 -0
  140. package/dist/local/sync/createClaimStream.d.ts +64 -0
  141. package/dist/local/sync/createClaimStream.js +475 -0
  142. package/dist/local/sync/createSnapshot.d.ts +29 -0
  143. package/dist/local/sync/createSnapshot.js +116 -0
  144. package/dist/local/sync/credentialLifecycle.d.ts +7 -0
  145. package/dist/local/sync/credentialLifecycle.js +7 -0
  146. package/dist/local/sync/deltaPipeline.d.ts +116 -0
  147. package/dist/local/sync/deltaPipeline.js +357 -0
  148. package/dist/local/sync/groupChange.d.ts +116 -0
  149. package/dist/local/sync/groupChange.js +244 -0
  150. package/dist/local/sync/initialize.d.ts +27 -0
  151. package/dist/local/sync/initialize.js +137 -0
  152. package/dist/local/sync/participants.d.ts +132 -0
  153. package/dist/local/sync/participants.js +342 -0
  154. package/dist/local/sync/persistedPrefix.d.ts +12 -0
  155. package/dist/local/sync/persistedPrefix.js +22 -0
  156. package/dist/local/sync/reconnect.d.ts +23 -0
  157. package/dist/local/sync/reconnect.js +55 -0
  158. package/dist/local/sync/schemaDrift.d.ts +55 -0
  159. package/dist/local/sync/schemaDrift.js +53 -0
  160. package/dist/local/sync/schemas.d.ts +71 -0
  161. package/dist/local/sync/schemas.js +94 -0
  162. package/dist/local/sync/socketEventWiring.d.ts +31 -0
  163. package/dist/local/sync/socketEventWiring.js +130 -0
  164. package/dist/local/sync/syncCursor.d.ts +40 -0
  165. package/dist/local/sync/syncCursor.js +55 -0
  166. package/dist/local/sync/syncPlan.d.ts +54 -0
  167. package/dist/local/sync/syncPlan.js +50 -0
  168. package/dist/local/sync/terminalSessionLifecycle.d.ts +20 -0
  169. package/dist/local/sync/terminalSessionLifecycle.js +50 -0
  170. package/dist/local/sync/wsFrameHandlers.d.ts +8 -0
  171. package/dist/local/sync/wsFrameHandlers.js +8 -0
  172. package/dist/local/transactions/databaseCommitOutbox.d.ts +15 -0
  173. package/dist/local/transactions/databaseCommitOutbox.js +16 -0
  174. package/dist/local/transactions/localMutation.d.ts +10 -0
  175. package/dist/local/transactions/localMutation.js +37 -0
  176. package/dist/local/transactions/mutations/MutationQueue.d.ts +511 -0
  177. package/dist/local/transactions/mutations/MutationQueue.js +1498 -0
  178. package/dist/local/transactions/mutations/MutationStore.d.ts +20 -0
  179. package/dist/local/transactions/mutations/MutationStore.js +53 -0
  180. package/dist/local/transactions/mutations/UnconfirmedWrites.d.ts +82 -0
  181. package/dist/local/transactions/mutations/UnconfirmedWrites.js +104 -0
  182. package/dist/local/transactions/mutations/batchProcessing.d.ts +64 -0
  183. package/dist/local/transactions/mutations/batchProcessing.js +349 -0
  184. package/dist/local/transactions/mutations/coalesceRules.d.ts +58 -0
  185. package/dist/local/transactions/mutations/coalesceRules.js +140 -0
  186. package/dist/local/transactions/mutations/commitApi.d.ts +19 -0
  187. package/dist/local/transactions/mutations/commitApi.js +74 -0
  188. package/dist/local/transactions/mutations/commitLane.d.ts +70 -0
  189. package/dist/local/transactions/mutations/commitLane.js +140 -0
  190. package/dist/local/transactions/mutations/commitLatency.d.ts +52 -0
  191. package/dist/local/transactions/mutations/commitLatency.js +130 -0
  192. package/dist/local/transactions/mutations/commitPayload.d.ts +165 -0
  193. package/dist/local/transactions/mutations/commitPayload.js +152 -0
  194. package/dist/local/transactions/mutations/commitTransport.d.ts +36 -0
  195. package/dist/local/transactions/mutations/commitTransport.js +104 -0
  196. package/dist/local/transactions/mutations/deltaConfirmation.d.ts +63 -0
  197. package/dist/local/transactions/mutations/deltaConfirmation.js +235 -0
  198. package/dist/local/transactions/mutations/durableCommitRestore.d.ts +17 -0
  199. package/dist/local/transactions/mutations/durableCommitRestore.js +95 -0
  200. package/dist/local/transactions/mutations/durableWriteStore.d.ts +14 -0
  201. package/dist/local/transactions/mutations/durableWriteStore.js +12 -0
  202. package/dist/local/transactions/mutations/executionSelection.d.ts +6 -0
  203. package/dist/local/transactions/mutations/executionSelection.js +42 -0
  204. package/dist/local/transactions/mutations/failureHandling.d.ts +16 -0
  205. package/dist/local/transactions/mutations/failureHandling.js +130 -0
  206. package/dist/local/transactions/mutations/failurePolicy.d.ts +13 -0
  207. package/dist/local/transactions/mutations/failurePolicy.js +48 -0
  208. package/dist/local/transactions/mutations/localMutation.d.ts +58 -0
  209. package/dist/local/transactions/mutations/localMutation.js +75 -0
  210. package/dist/local/transactions/mutations/modelOperations.d.ts +44 -0
  211. package/dist/local/transactions/mutations/modelOperations.js +144 -0
  212. package/dist/local/transactions/mutations/mutationPersistence.d.ts +25 -0
  213. package/dist/local/transactions/mutations/mutationPersistence.js +188 -0
  214. package/dist/local/transactions/mutations/pendingDrain.d.ts +33 -0
  215. package/dist/local/transactions/mutations/pendingDrain.js +112 -0
  216. package/dist/local/transactions/mutations/processingScheduler.d.ts +14 -0
  217. package/dist/local/transactions/mutations/processingScheduler.js +24 -0
  218. package/dist/local/transactions/mutations/queueCoalescing.d.ts +13 -0
  219. package/dist/local/transactions/mutations/queueCoalescing.js +35 -0
  220. package/dist/local/transactions/mutations/replayValidation.d.ts +187 -0
  221. package/dist/local/transactions/mutations/replayValidation.js +164 -0
  222. package/dist/local/transactions/reconnectDrain.d.ts +11 -0
  223. package/dist/local/transactions/reconnectDrain.js +13 -0
  224. package/dist/local/utils/mobxSetup.d.ts +53 -0
  225. package/dist/local/utils/mobxSetup.js +330 -0
  226. package/dist/local/views/QueryView.d.ts +79 -0
  227. package/dist/local/views/QueryView.js +218 -0
  228. package/dist/local/views/ViewRegistry.d.ts +20 -0
  229. package/dist/local/views/ViewRegistry.js +57 -0
  230. package/dist/local/views/incrementalView.d.ts +45 -0
  231. package/dist/local/views/incrementalView.js +69 -0
  232. package/dist/plugin.d.ts +285 -0
  233. package/dist/plugin.js +106 -0
  234. package/dist/presenceStream.d.ts +69 -0
  235. package/dist/presenceStream.js +200 -0
  236. package/dist/react/AbloProvider.d.ts +242 -0
  237. package/dist/react/AbloProvider.js +456 -0
  238. package/dist/react/ClientSideSuspense.d.ts +36 -0
  239. package/dist/react/ClientSideSuspense.js +17 -0
  240. package/dist/react/DefaultFallback.d.ts +24 -0
  241. package/dist/react/DefaultFallback.js +43 -0
  242. package/dist/react/context.d.ts +55 -0
  243. package/dist/react/context.js +29 -0
  244. package/dist/react/createAbloReact.d.ts +50 -0
  245. package/dist/react/createAbloReact.js +48 -0
  246. package/dist/react/internalContext.d.ts +33 -0
  247. package/dist/react/internalContext.js +3 -0
  248. package/dist/react/useAblo.d.ts +96 -0
  249. package/dist/react/useAblo.js +120 -0
  250. package/dist/react/useCurrentUserId.d.ts +2 -0
  251. package/dist/react/useCurrentUserId.js +12 -0
  252. package/dist/react/useErrorListener.d.ts +2 -0
  253. package/dist/react/useErrorListener.js +14 -0
  254. package/dist/react/useMutationFailureListener.d.ts +8 -0
  255. package/dist/react/useMutationFailureListener.js +19 -0
  256. package/dist/react/useMutators.d.ts +56 -0
  257. package/dist/react/useMutators.js +84 -0
  258. package/dist/react/useSyncStatus.d.ts +19 -0
  259. package/dist/react/useSyncStatus.js +37 -0
  260. package/dist/react/useUndoScope.d.ts +34 -0
  261. package/dist/react/useUndoScope.js +73 -0
  262. package/dist/react.d.ts +18 -0
  263. package/dist/react.js +14 -0
  264. package/dist/reactRuntime.d.ts +4 -0
  265. package/dist/reactRuntime.js +2 -0
  266. package/dist/surface.d.ts +36 -0
  267. package/dist/surface.js +77 -0
  268. package/dist/useReactive.d.ts +6 -0
  269. package/dist/useReactive.js +43 -0
  270. package/package.json +119 -0
  271. package/src/Ablo.ts +456 -0
  272. package/src/client.ts +374 -0
  273. package/src/core.ts +104 -0
  274. package/src/humans.ts +61 -0
  275. package/src/index.ts +40 -0
  276. package/src/local/BaseSyncedStore.ts +1991 -0
  277. package/src/local/Database.ts +2052 -0
  278. package/src/local/InstanceCache.ts +1503 -0
  279. package/src/local/LazyReferenceCollection.ts +563 -0
  280. package/src/local/Model.ts +1124 -0
  281. package/src/local/ModelRegistry.ts +762 -0
  282. package/src/local/NetworkMonitor.ts +88 -0
  283. package/src/local/RuntimeContext.ts +141 -0
  284. package/src/local/SyncClient.ts +2131 -0
  285. package/src/local/adapters/alwaysOnline.ts +20 -0
  286. package/src/local/adapters/inMemoryStorage.ts +141 -0
  287. package/src/local/client/clientPrelude.ts +112 -0
  288. package/src/local/client/consoleLogger.ts +60 -0
  289. package/src/local/client/createInternalComponents.ts +163 -0
  290. package/src/local/client/createModelProxy.ts +1390 -0
  291. package/src/local/client/modelRegistration.ts +350 -0
  292. package/src/local/client/options.ts +526 -0
  293. package/src/local/client/reactiveEngine.ts +935 -0
  294. package/src/local/client/resourceTypes.ts +37 -0
  295. package/src/local/client/schemaConfig.ts +194 -0
  296. package/src/local/client/storeCluster.ts +172 -0
  297. package/src/local/client/storeLifecycle.ts +343 -0
  298. package/src/local/client/validateAbloOptions.ts +95 -0
  299. package/src/local/client/wsMutationExecutor.ts +110 -0
  300. package/src/local/context.ts +96 -0
  301. package/src/local/coordination/ClaimLog.ts +39 -0
  302. package/src/local/interfaces/index.ts +468 -0
  303. package/src/local/localModelContract.ts +15 -0
  304. package/src/local/logPosition.ts +84 -0
  305. package/src/local/mutationPersistence.ts +7 -0
  306. package/src/local/mutators/RecordingMutation.ts +222 -0
  307. package/src/local/mutators/Transaction.ts +97 -0
  308. package/src/local/mutators/UndoManager.ts +741 -0
  309. package/src/local/mutators/defineMutators.ts +76 -0
  310. package/src/local/mutators/inverseOp.ts +83 -0
  311. package/src/local/mutators/mutateActions.ts +167 -0
  312. package/src/local/mutators/readerActions.ts +99 -0
  313. package/src/local/mutators/undoApply.ts +141 -0
  314. package/src/local/persistence.ts +16 -0
  315. package/src/local/query/QueryProcessor.ts +347 -0
  316. package/src/local/query/client.ts +197 -0
  317. package/src/local/query/types.ts +102 -0
  318. package/src/local/schema/serialize.ts +1 -0
  319. package/src/local/store/queryApi.ts +56 -0
  320. package/src/local/storeContract.ts +146 -0
  321. package/src/local/stores/DatabaseManager.ts +507 -0
  322. package/src/local/stores/ObjectStore.ts +449 -0
  323. package/src/local/stores/ObjectStoreContract.ts +48 -0
  324. package/src/local/stores/StoreManager.ts +388 -0
  325. package/src/local/stores/SyncActionStore.ts +579 -0
  326. package/src/local/stores/openIDBWithTimeout.ts +195 -0
  327. package/src/local/stores/persistenceCleanup.ts +43 -0
  328. package/src/local/stores/persistenceIdentity.ts +83 -0
  329. package/src/local/stores/syncAction.ts +21 -0
  330. package/src/local/stores/v1PersistenceDeletion.ts +21 -0
  331. package/src/local/sync/BootstrapFetcher.ts +1224 -0
  332. package/src/local/sync/ConnectionManager.ts +15 -0
  333. package/src/local/sync/OnDemandLoader.ts +927 -0
  334. package/src/local/sync/SubscriptionManager.ts +300 -0
  335. package/src/local/sync/SyncWebSocket.ts +584 -0
  336. package/src/local/sync/bootstrapApply.ts +130 -0
  337. package/src/local/sync/commitFrames.ts +16 -0
  338. package/src/local/sync/connectionManagerLifecycle.ts +158 -0
  339. package/src/local/sync/contextPorts.ts +37 -0
  340. package/src/local/sync/createClaimStream.ts +668 -0
  341. package/src/local/sync/createSnapshot.ts +160 -0
  342. package/src/local/sync/credentialLifecycle.ts +18 -0
  343. package/src/local/sync/deltaPipeline.ts +473 -0
  344. package/src/local/sync/groupChange.ts +343 -0
  345. package/src/local/sync/initialize.ts +205 -0
  346. package/src/local/sync/participants.ts +564 -0
  347. package/src/local/sync/persistedPrefix.ts +27 -0
  348. package/src/local/sync/reconnect.ts +88 -0
  349. package/src/local/sync/schemaDrift.ts +86 -0
  350. package/src/local/sync/schemas.ts +118 -0
  351. package/src/local/sync/socketEventWiring.ts +196 -0
  352. package/src/local/sync/syncCursor.ts +62 -0
  353. package/src/local/sync/syncPlan.ts +89 -0
  354. package/src/local/sync/terminalSessionLifecycle.ts +66 -0
  355. package/src/local/sync/wsFrameHandlers.ts +20 -0
  356. package/src/local/transactions/databaseCommitOutbox.ts +33 -0
  357. package/src/local/transactions/localMutation.ts +58 -0
  358. package/src/local/transactions/mutations/MutationQueue.ts +1998 -0
  359. package/src/local/transactions/mutations/MutationStore.ts +65 -0
  360. package/src/local/transactions/mutations/UnconfirmedWrites.ts +133 -0
  361. package/src/local/transactions/mutations/batchProcessing.ts +469 -0
  362. package/src/local/transactions/mutations/coalesceRules.ts +192 -0
  363. package/src/local/transactions/mutations/commitApi.ts +97 -0
  364. package/src/local/transactions/mutations/commitLane.ts +191 -0
  365. package/src/local/transactions/mutations/commitLatency.ts +164 -0
  366. package/src/local/transactions/mutations/commitPayload.ts +281 -0
  367. package/src/local/transactions/mutations/commitTransport.ts +174 -0
  368. package/src/local/transactions/mutations/deltaConfirmation.ts +298 -0
  369. package/src/local/transactions/mutations/durableCommitRestore.ts +128 -0
  370. package/src/local/transactions/mutations/durableWriteStore.ts +21 -0
  371. package/src/local/transactions/mutations/executionSelection.ts +42 -0
  372. package/src/local/transactions/mutations/failureHandling.ts +154 -0
  373. package/src/local/transactions/mutations/failurePolicy.ts +61 -0
  374. package/src/local/transactions/mutations/localMutation.ts +135 -0
  375. package/src/local/transactions/mutations/modelOperations.ts +210 -0
  376. package/src/local/transactions/mutations/mutationPersistence.ts +231 -0
  377. package/src/local/transactions/mutations/pendingDrain.ts +160 -0
  378. package/src/local/transactions/mutations/processingScheduler.ts +35 -0
  379. package/src/local/transactions/mutations/queueCoalescing.ts +45 -0
  380. package/src/local/transactions/mutations/replayValidation.ts +192 -0
  381. package/src/local/transactions/reconnectDrain.ts +24 -0
  382. package/src/local/utils/mobxSetup.ts +388 -0
  383. package/src/local/views/QueryView.ts +311 -0
  384. package/src/local/views/ViewRegistry.ts +61 -0
  385. package/src/local/views/incrementalView.ts +92 -0
  386. package/src/plugin.ts +396 -0
  387. package/src/presenceStream.ts +279 -0
  388. package/src/react/AbloProvider.tsx +744 -0
  389. package/src/react/ClientSideSuspense.tsx +57 -0
  390. package/src/react/DefaultFallback.tsx +60 -0
  391. package/src/react/context.ts +89 -0
  392. package/src/react/createAbloReact.ts +116 -0
  393. package/src/react/internalContext.ts +38 -0
  394. package/src/react/useAblo.ts +280 -0
  395. package/src/react/useCurrentUserId.ts +17 -0
  396. package/src/react/useErrorListener.ts +22 -0
  397. package/src/react/useMutationFailureListener.ts +34 -0
  398. package/src/react/useMutators.ts +184 -0
  399. package/src/react/useSyncStatus.ts +42 -0
  400. package/src/react/useUndoScope.ts +143 -0
  401. package/src/react.ts +69 -0
  402. package/src/reactRuntime.ts +10 -0
  403. package/src/surface.ts +106 -0
  404. package/src/useReactive.ts +51 -0
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Wraps a {@link Transaction} and records the inverse of every write so the
3
+ * change can be undone. Each write is observed just before it runs, to snapshot
4
+ * the previous state, and just after, to record the forward operation for redo.
5
+ *
6
+ * The mutator sees an ordinary `Transaction<S>` and is unaware it is being
7
+ * recorded. When the mutator returns, the caller reads
8
+ * {@link RecordingMutation.getEntry} and pushes the result onto the active
9
+ * {@link UndoScope}.
10
+ *
11
+ * The snapshots are taken here rather than in the undo scope because they must
12
+ * exist before the write lands: the inverse of an update needs the field's
13
+ * previous values, and the inverse of a delete needs the full row. The inverse
14
+ * of a create is just a delete by id, but that id is known only after creation,
15
+ * since the schema generates one when the caller omits it.
16
+ */
17
+
18
+ import type { Schema, InferModel, InferCreate } from '@abloatai/transaction/schema/schema';
19
+ import type { SyncStoreContract } from '../storeContract.js';
20
+ import type { MutateActions } from './mutateActions.js';
21
+ import type { Transaction } from './Transaction.js';
22
+ import { createTransaction } from './Transaction.js';
23
+ import type { InverseOp, UndoEntry } from './UndoManager.js';
24
+
25
+ export interface RecordingMutation<S extends Schema> {
26
+ /** The wrapped transaction — pass this into the mutator. */
27
+ tx: Transaction<S>;
28
+ /**
29
+ * Finalize the recording. Returns the captured entry or `null` if the
30
+ * mutator made no reversible writes (skip the push to save memory).
31
+ */
32
+ getEntry: (label?: string) => UndoEntry | null;
33
+ }
34
+
35
+ /**
36
+ * Builds a transaction that records the forward and inverse of each write as it
37
+ * runs. Use this only when the mutator should be undoable; a read-only or
38
+ * side-effect-only mutator should call {@link createTransaction} directly to skip
39
+ * the bookkeeping.
40
+ */
41
+ export function createRecordingMutation<S extends Schema>(
42
+ schema: S,
43
+ store: SyncStoreContract,
44
+ organizationId: string,
45
+ ): RecordingMutation<S> {
46
+ const inverses: InverseOp[] = [];
47
+ const forwards: InverseOp[] = [];
48
+ const inner = createTransaction(schema, store, organizationId);
49
+
50
+ // Wrap mutations with a Proxy that intercepts each model key's
51
+ // methods. We keep `inner.read` as-is — reads don't need recording.
52
+ const mutateProxy = new Proxy({} as Transaction<S>['mutations'], {
53
+ get(_target, prop: string | symbol) {
54
+ if (typeof prop !== 'string') return undefined;
55
+ const innerMutate = inner.mutations[prop as keyof typeof inner.mutations] as
56
+ | MutateActions<S, keyof S['models'] & string>
57
+ | undefined;
58
+ if (!innerMutate) return innerMutate;
59
+ return wrapMutateForKey(prop, innerMutate, store, inverses, forwards);
60
+ },
61
+ });
62
+
63
+ return {
64
+ tx: { mutations: mutateProxy, read: inner.read },
65
+ getEntry: (label?: string) => {
66
+ if (inverses.length === 0) return null;
67
+ // Undo applies the inverses in reverse order of the forward writes; redo
68
+ // applies the forwards in their original order.
69
+ return { label, inverses: [...inverses].reverse(), forwards: [...forwards] };
70
+ },
71
+ };
72
+ }
73
+
74
+ // ── Per-key wrapper ────────────────────────────────────────────────────────
75
+
76
+ function wrapMutateForKey<S extends Schema, K extends keyof S['models'] & string>(
77
+ modelKey: string,
78
+ mutate: MutateActions<S, K>,
79
+ store: SyncStoreContract,
80
+ inverses: InverseOp[],
81
+ forwards: InverseOp[],
82
+ ): MutateActions<S, K> {
83
+ const snapshot = (id: string): Record<string, unknown> | null => {
84
+ const model = store.pool.get(id);
85
+ if (!model) return null;
86
+ // toJSON produces a plain object suitable for re-creating the row. The
87
+ // delete→create inverse needs every field, which is exactly what it returns.
88
+ return model.toJSON();
89
+ };
90
+
91
+ // Captures the before-image for an undo inverse, delegating to the model's
92
+ // shared `capturePreviousValues`. `fallbackToLive` is enabled here so that a
93
+ // field that was neither pre-mutated nor present in the original snapshot falls
94
+ // back to its current value as a last resort.
95
+ const snapshotFields = (id: string, fieldNames: string[]): Record<string, unknown> | null => {
96
+ const model = store.pool.get(id);
97
+ if (!model) return null;
98
+ return model.capturePreviousValues(fieldNames, { fallbackToLive: true });
99
+ };
100
+
101
+ // After an update succeeds, clear the modified-field markers it was snapshotted
102
+ // from, so the next write to the same row sees this update's result as its
103
+ // baseline rather than the older pre-update value. The queue has already taken
104
+ // its own frozen copy, so clearing here is safe.
105
+ const consumeModifiedFields = (id: string, fieldNames: string[]): void => {
106
+ store.pool.get(id)?.consumeModifiedFields(fieldNames);
107
+ };
108
+
109
+ type Patch = { id: string } & Partial<InferModel<S, K>>;
110
+
111
+ return {
112
+ // Overloaded — single row or array. The recorder dispatches the
113
+ // matching forward/inverse op shape (`create`/`createMany`,
114
+ // `update`/`updateMany`, `delete`/`deleteMany`) so the persisted
115
+ // undo entry is symmetric with what was originally invoked.
116
+ create: (async (
117
+ data: InferCreate<S, K> | InferCreate<S, K>[],
118
+ ) => {
119
+ if (Array.isArray(data)) {
120
+ const created = await mutate.create(data);
121
+ const withIds = created.map((m, i) => ({
122
+ ...(data[i] as Record<string, unknown>),
123
+ id: m.id,
124
+ }));
125
+ const ids = created.map((m) => m.id);
126
+ forwards.push({ kind: 'createMany', modelKey, data: withIds });
127
+ inverses.push({ kind: 'deleteMany', modelKey, ids });
128
+ return created;
129
+ }
130
+ const created = await mutate.create(data);
131
+ const id = created.id;
132
+ forwards.push({
133
+ kind: 'create',
134
+ modelKey,
135
+ data: { ...(data as Record<string, unknown>), id },
136
+ });
137
+ inverses.push({ kind: 'delete', modelKey, id });
138
+ return created;
139
+ }) as MutateActions<S, K>['create'],
140
+
141
+ update: (async (patch: Patch | Patch[]) => {
142
+ if (Array.isArray(patch)) {
143
+ // Snapshot every row's previous values before applying any patch: later
144
+ // patches in the same list would corrupt an earlier one's inverse if the
145
+ // snapshots were taken lazily.
146
+ const prevPatches: ({ id: string } & Record<string, unknown>)[] = [];
147
+ for (const p of patch) {
148
+ const fields = Object.keys(p).filter((k) => k !== 'id');
149
+ const prev = snapshotFields((p as { id: string }).id, fields);
150
+ if (prev) prevPatches.push({ id: (p as { id: string }).id, ...prev });
151
+ }
152
+ const updated = await mutate.update(patch);
153
+ const forwardPatches = patch.map(
154
+ (p) => ({ ...(p as { id: string } & Record<string, unknown>) }),
155
+ );
156
+ for (const p of forwardPatches) {
157
+ consumeModifiedFields(p.id, Object.keys(p).filter((k) => k !== 'id'));
158
+ }
159
+ forwards.push({ kind: 'updateMany', modelKey, patches: forwardPatches });
160
+ if (prevPatches.length > 0) {
161
+ inverses.push({ kind: 'updateMany', modelKey, patches: prevPatches });
162
+ }
163
+ return updated;
164
+ }
165
+ const id = (patch as { id: string }).id;
166
+ const fields = Object.keys(patch).filter((k) => k !== 'id');
167
+ const prev = snapshotFields(id, fields);
168
+ const updated = await mutate.update(patch);
169
+ const patchCopy: { id: string } & Record<string, unknown> = {
170
+ id,
171
+ ...(patch as Record<string, unknown>),
172
+ };
173
+ consumeModifiedFields(id, fields);
174
+ forwards.push({ kind: 'update', modelKey, patch: patchCopy });
175
+ if (prev) {
176
+ inverses.push({ kind: 'update', modelKey, patch: { id, ...prev } });
177
+ }
178
+ return updated;
179
+ }) as MutateActions<S, K>['update'],
180
+
181
+ delete: (async (idOrIds: string | string[]): Promise<void> => {
182
+ if (Array.isArray(idOrIds)) {
183
+ const prevs = idOrIds
184
+ .map((id) => snapshot(id))
185
+ .filter((d): d is Record<string, unknown> => d !== null);
186
+ await mutate.delete(idOrIds);
187
+ forwards.push({ kind: 'deleteMany', modelKey, ids: [...idOrIds] });
188
+ if (prevs.length > 0) {
189
+ inverses.push({ kind: 'createMany', modelKey, data: prevs });
190
+ }
191
+ return;
192
+ }
193
+ const prev = snapshot(idOrIds);
194
+ await mutate.delete(idOrIds);
195
+ forwards.push({ kind: 'delete', modelKey, id: idOrIds });
196
+ if (prev) {
197
+ inverses.push({ kind: 'create', modelKey, data: prev });
198
+ }
199
+ }),
200
+
201
+ archive: async (id: string): Promise<void> => {
202
+ await mutate.archive(id);
203
+ forwards.push({
204
+ kind: 'update',
205
+ modelKey,
206
+ patch: { id, archivedAt: new Date() },
207
+ });
208
+ // Inverse of archive is unarchive, modeled here as a "restore" update.
209
+ inverses.push({ kind: 'update', modelKey, patch: { id, archivedAt: null } });
210
+ },
211
+
212
+ unarchive: async (id: string): Promise<void> => {
213
+ await mutate.unarchive(id);
214
+ forwards.push({ kind: 'update', modelKey, patch: { id, archivedAt: null } });
215
+ inverses.push({
216
+ kind: 'update',
217
+ modelKey,
218
+ patch: { id, archivedAt: new Date() },
219
+ });
220
+ },
221
+ };
222
+ }
@@ -0,0 +1,97 @@
1
+ /**
2
+ * The typed transaction object passed to a custom mutator. A mutator receives
3
+ * `{ tx, args }` and uses `tx.mutations.<modelKey>.*` to write and
4
+ * `tx.read.<modelKey>.*` to take synchronous snapshots of the current data.
5
+ *
6
+ * Writes are applied eagerly as they are called, with no buffering: if a mutator
7
+ * throws partway through, the writes it already made stand. Reads are synchronous
8
+ * snapshots and use a fast index lookup where one is available for the field.
9
+ *
10
+ * The write surface deliberately works one row at a time. To write a batch,
11
+ * compose the calls yourself — `Promise.all(rows.map((r) => tx.mutations.x.create(r)))`.
12
+ * Every call stages its write in the same synchronous tick and the engine
13
+ * coalesces them into a single commit on the wire, so there is no separate
14
+ * bulk-insert method to learn.
15
+ */
16
+
17
+ import type { Schema } from '@abloatai/transaction/schema/schema';
18
+ import type { SyncStoreContract } from '../storeContract.js';
19
+ import { createMutateActions, type MutateActions } from './mutateActions.js';
20
+ import { createReaderActions, type ReaderActions, type ReaderFindOptions } from './readerActions.js';
21
+ import { AbloValidationError } from '@abloatai/transaction/errors';
22
+
23
+ /**
24
+ * The full transaction surface: `tx.mutations.<key>.*` for writes and
25
+ * `tx.read.<key>.*` for reads. It also re-exports the read-options type so a
26
+ * mutator author can type a `where` payload without importing it separately. The
27
+ * property is named `mutations` to match the corresponding React hook.
28
+ */
29
+ export interface Transaction<S extends Schema> {
30
+ mutations: {
31
+ [K in keyof S['models'] & string]: MutateActions<S, K>;
32
+ };
33
+ read: {
34
+ [K in keyof S['models'] & string]: ReaderActions<S, K>;
35
+ };
36
+ }
37
+
38
+ export type { ReaderFindOptions };
39
+
40
+ /**
41
+ * Builds a {@link Transaction} for a single mutator invocation. The returned
42
+ * object creates each model's actions lazily on first access, so a mutator pays
43
+ * nothing for the models it never touches.
44
+ */
45
+ export function createTransaction<S extends Schema>(
46
+ schema: S,
47
+ store: SyncStoreContract,
48
+ organizationId: string,
49
+ ): Transaction<S> {
50
+ const mutateCache = new Map<string, MutateActions<S, keyof S['models'] & string>>();
51
+ const readCache = new Map<string, ReaderActions<S, keyof S['models'] & string>>();
52
+
53
+ const mutations = new Proxy({} as Transaction<S>['mutations'], {
54
+ get(_target, prop: string | symbol) {
55
+ if (typeof prop !== 'string') return undefined;
56
+ const cached = mutateCache.get(prop);
57
+ if (cached) return cached;
58
+ if (!(prop in schema.models)) {
59
+ throw new AbloValidationError(
60
+ `Transaction.mutations: unknown model key "${prop}". Known keys: ${Object.keys(schema.models).join(', ')}`,
61
+ { code: 'transaction_mutate_unknown_model' },
62
+ );
63
+ }
64
+ const actions = createMutateActions(
65
+ schema,
66
+ prop as keyof S['models'] & string,
67
+ store,
68
+ organizationId,
69
+ );
70
+ mutateCache.set(prop, actions);
71
+ return actions;
72
+ },
73
+ });
74
+
75
+ const read = new Proxy({} as Transaction<S>['read'], {
76
+ get(_target, prop: string | symbol) {
77
+ if (typeof prop !== 'string') return undefined;
78
+ const cached = readCache.get(prop);
79
+ if (cached) return cached;
80
+ if (!(prop in schema.models)) {
81
+ throw new AbloValidationError(
82
+ `Transaction.read: unknown model key "${prop}". Known keys: ${Object.keys(schema.models).join(', ')}`,
83
+ { code: 'transaction_read_unknown_model' },
84
+ );
85
+ }
86
+ const actions = createReaderActions(
87
+ schema,
88
+ prop as keyof S['models'] & string,
89
+ store,
90
+ );
91
+ readCache.set(prop, actions);
92
+ return actions;
93
+ },
94
+ });
95
+
96
+ return { mutations, read };
97
+ }