@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,40 @@
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
+ import type { Schema } from '@abloatai/transaction/schema/schema';
17
+ import type { SyncStoreContract } from '../storeContract.js';
18
+ import { type MutateActions } from './mutateActions.js';
19
+ import { type ReaderActions, type ReaderFindOptions } from './readerActions.js';
20
+ /**
21
+ * The full transaction surface: `tx.mutations.<key>.*` for writes and
22
+ * `tx.read.<key>.*` for reads. It also re-exports the read-options type so a
23
+ * mutator author can type a `where` payload without importing it separately. The
24
+ * property is named `mutations` to match the corresponding React hook.
25
+ */
26
+ export interface Transaction<S extends Schema> {
27
+ mutations: {
28
+ [K in keyof S['models'] & string]: MutateActions<S, K>;
29
+ };
30
+ read: {
31
+ [K in keyof S['models'] & string]: ReaderActions<S, K>;
32
+ };
33
+ }
34
+ export type { ReaderFindOptions };
35
+ /**
36
+ * Builds a {@link Transaction} for a single mutator invocation. The returned
37
+ * object creates each model's actions lazily on first access, so a mutator pays
38
+ * nothing for the models it never touches.
39
+ */
40
+ export declare function createTransaction<S extends Schema>(schema: S, store: SyncStoreContract, organizationId: string): Transaction<S>;
@@ -0,0 +1,58 @@
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
+ import { createMutateActions } from './mutateActions.js';
17
+ import { createReaderActions } from './readerActions.js';
18
+ import { AbloValidationError } from '@abloatai/transaction/errors';
19
+ /**
20
+ * Builds a {@link Transaction} for a single mutator invocation. The returned
21
+ * object creates each model's actions lazily on first access, so a mutator pays
22
+ * nothing for the models it never touches.
23
+ */
24
+ export function createTransaction(schema, store, organizationId) {
25
+ const mutateCache = new Map();
26
+ const readCache = new Map();
27
+ const mutations = new Proxy({}, {
28
+ get(_target, prop) {
29
+ if (typeof prop !== 'string')
30
+ return undefined;
31
+ const cached = mutateCache.get(prop);
32
+ if (cached)
33
+ return cached;
34
+ if (!(prop in schema.models)) {
35
+ throw new AbloValidationError(`Transaction.mutations: unknown model key "${prop}". Known keys: ${Object.keys(schema.models).join(', ')}`, { code: 'transaction_mutate_unknown_model' });
36
+ }
37
+ const actions = createMutateActions(schema, prop, store, organizationId);
38
+ mutateCache.set(prop, actions);
39
+ return actions;
40
+ },
41
+ });
42
+ const read = new Proxy({}, {
43
+ get(_target, prop) {
44
+ if (typeof prop !== 'string')
45
+ return undefined;
46
+ const cached = readCache.get(prop);
47
+ if (cached)
48
+ return cached;
49
+ if (!(prop in schema.models)) {
50
+ throw new AbloValidationError(`Transaction.read: unknown model key "${prop}". Known keys: ${Object.keys(schema.models).join(', ')}`, { code: 'transaction_read_unknown_model' });
51
+ }
52
+ const actions = createReaderActions(schema, prop, store);
53
+ readCache.set(prop, actions);
54
+ return actions;
55
+ },
56
+ });
57
+ return { mutations, read };
58
+ }
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Keeps a per-scope history of reversible changes so a surface can offer undo
3
+ * and redo. Each mutator invocation records an ordered list of inverse
4
+ * operations; `undo()` pops the most recent group and replays those inverses
5
+ * without recording them, then moves the entry onto the redo stack.
6
+ *
7
+ * History is divided into named scopes, one per surface — a report editor, a
8
+ * ledger grid, and so on — reached through {@link UndoManager.getScope}. Undo in
9
+ * one surface never affects another.
10
+ *
11
+ * Two things to know about its reach. History lives in memory and does not
12
+ * persist across sessions. And if the server rejects a change after it was
13
+ * applied optimistically, the undo stack is not invalidated automatically; call
14
+ * {@link UndoScope.clear} on a sync error if you need strict correctness.
15
+ */
16
+ import type { Schema } from '@abloatai/transaction/schema/schema';
17
+ import type { SyncStoreContract } from '../storeContract.js';
18
+ import { type InverseOp, type UndoEntry } from './inverseOp.js';
19
+ import { type UndoConflictPolicy } from './undoApply.js';
20
+ export type { InverseOp, UndoEntry };
21
+ export type { UndoConflictPolicy } from './undoApply.js';
22
+ export interface UndoScopeOptions {
23
+ /** The maximum number of undo entries to keep. Older entries drop off the
24
+ * bottom. Defaults to 100. */
25
+ maxHistory?: number;
26
+ /**
27
+ * How undo and redo treat a field a collaborator changed after your own
28
+ * change. The default, `skip-stale`, reverts your change only where it still
29
+ * stands, so undo never overwrites a concurrent edit — undo is per user.
30
+ * `last-writer-wins` restores the older behavior of overwriting regardless. See
31
+ * {@link UndoConflictPolicy}.
32
+ */
33
+ conflictPolicy?: UndoConflictPolicy;
34
+ /**
35
+ * A predicate selecting which models this surface owns. The scope records only
36
+ * mutations whose resolved schema key passes it, so, for example, a ledger
37
+ * edit never lands on a report editor's undo stack. Omit it to track every model,
38
+ * which is fine for a single-surface app but wrong when two surfaces with
39
+ * independent undo share one store.
40
+ */
41
+ tracksModel?: (schemaKey: string) => boolean;
42
+ /**
43
+ * When `true`, the scope records undo entries by observing the stream of local
44
+ * mutations, so every write through the store is captured automatically. When
45
+ * `false`, the default, the scope records nothing on its own and relies on
46
+ * explicit {@link UndoScope.record} calls. Use one mode or the other for a given
47
+ * surface, not both, or shared writes are counted twice.
48
+ */
49
+ recordFromStream?: boolean;
50
+ }
51
+ export declare class UndoScope<S extends Schema> {
52
+ private readonly schema;
53
+ private readonly store;
54
+ private readonly organizationId;
55
+ private undoStack;
56
+ private redoStack;
57
+ private readonly maxHistory;
58
+ private readonly conflictPolicy;
59
+ /**
60
+ * Observers notified after each successful {@link UndoScope.record}. They see
61
+ * forward user actions only: undo and redo move entries between the stacks
62
+ * without calling `record`, so a listener never observes a reversal. It is a
63
+ * deliberately generic hook — analytics or audit code can watch the stream of
64
+ * committed mutations without the scope knowing about it. A listener that throws
65
+ * is isolated so it cannot break recording.
66
+ */
67
+ private readonly recordListeners;
68
+ /**
69
+ * Observers notified after any stack change — record, undo, redo, or clear.
70
+ * Unlike {@link recordListeners}, which fires on forward actions only, this
71
+ * fires on reversals too, so a React consumer can keep `canUndo` and `canRedo`
72
+ * current. Because the stream-recording path adds entries without triggering a
73
+ * render, a component that read `canUndo` on its last render would otherwise go
74
+ * stale and a keyboard handler gated on it would quietly do nothing.
75
+ */
76
+ private readonly changeListeners;
77
+ /**
78
+ * The serialization tail. Recording, undo, and redo all chain off this one
79
+ * promise, so they run strictly in the order they were invoked and never
80
+ * interleave. This matters for correctness, not just throughput, in two ways.
81
+ * Ordering: callers often fire writes without awaiting them, so without
82
+ * serialization an entry would land on the stack when its mutator resolves, and
83
+ * a fast second write could record before a slow first — replaying undo in the
84
+ * wrong order. Snapshot integrity: each recording reads and clears a model's
85
+ * modified-field markers, which form the undo baseline, so two recordings
86
+ * interleaving on the same model would corrupt each other's before-image.
87
+ * Serializing the whole scope closes both gaps at once.
88
+ */
89
+ private tail;
90
+ /** Predicate selecting which models this surface records (see options). */
91
+ private readonly tracksModel?;
92
+ /** registered-name / alias → schema key, built once from the schema. */
93
+ private readonly schemaKeyByAlias;
94
+ /** Unsubscribe from the local-mutation stream. */
95
+ private readonly unsubscribe;
96
+ /**
97
+ * True while undo or redo is replaying operations. A replay writes through the
98
+ * normal commit path and therefore re-emits on the local-mutation stream; this
99
+ * flag tells the scope's own listener to ignore those writes so they are not
100
+ * recorded again.
101
+ */
102
+ private replaying;
103
+ /** Operations collected during the current tick, flushed together as one entry. */
104
+ private batch;
105
+ private flushScheduled;
106
+ /**
107
+ * An open grouping session. While set, stream operations accumulate here across
108
+ * ticks instead of flushing each tick, so a multi-tick action — a drag, or a
109
+ * whole streaming AI response — collapses into a single undo step.
110
+ * {@link UndoScope.endGroup} flushes it.
111
+ */
112
+ private group;
113
+ /**
114
+ * Suppression of a replay's asynchronous echo, keyed by `${modelKey}:${id}`.
115
+ *
116
+ * The synchronous {@link UndoScope.replaying} flag catches only echoes
117
+ * delivered inline while operations are applied. In practice the engine does not
118
+ * emit a replayed write's echo synchronously: the commit is deferred behind a
119
+ * local-store write, so the echo arrives on the stream after undo or redo has
120
+ * already reset `replaying` and pushed its entry. That late echo would be
121
+ * recorded as a new edit — and recording clears the redo stack, so every undo
122
+ * would quietly destroy its own redo. To prevent that, the row of each operation
123
+ * about to be replayed is marked here synchronously, before the write, and one
124
+ * mark is consumed when the matching mutation arrives, whenever that is. Marks
125
+ * carry a time-to-live so an echo that never arrives — because the write was
126
+ * skipped while offline — cannot linger and wrongly suppress a much later, real
127
+ * edit to the same row.
128
+ */
129
+ private readonly pendingReplayEchoes;
130
+ constructor(schema: S, store: SyncStoreContract, organizationId: string, options?: UndoScopeOptions);
131
+ /**
132
+ * Opens a grouping session: every stream-recorded operation until
133
+ * {@link UndoScope.endGroup} collapses into one undo entry. Call it at the start
134
+ * of a gesture, such as a pointer-down, or at the start of an AI response. A
135
+ * second call closes the previous group first.
136
+ */
137
+ beginGroup(label?: string): void;
138
+ /** Close the grouping session and record the accumulated ops as one entry. */
139
+ endGroup(label?: string): void;
140
+ /** Every `${modelKey}:${id}` a set of ops will touch (all op kinds). */
141
+ private replayEchoKeys;
142
+ /**
143
+ * Arms echo suppression for the rows a replay is about to write. Called
144
+ * synchronously, before the writes, so the marks exist however long the engine
145
+ * takes to surface each echo on the stream. See {@link UndoScope.pendingReplayEchoes}.
146
+ */
147
+ private markReplayEchoes;
148
+ /**
149
+ * If `${schemaKey}:${modelId}` has an armed mark, consume one and report that
150
+ * this mutation is the scope's own replay echo, so the caller drops it. Expired
151
+ * marks are pruned along the way, so an echo that never arrives cannot linger.
152
+ */
153
+ private consumeReplayEcho;
154
+ /** Resolve a stream mutation's registered name to its schema key, or null. */
155
+ private resolveSchemaKey;
156
+ /**
157
+ * The stream listener, and the only place stream-recorded entries originate. It
158
+ * skips replay echoes and out-of-scope models, derives the forward and inverse
159
+ * operations from the mutation's `data` and `previousData`, and defers the stack
160
+ * push to a per-tick flush, so a burst of writes — aligning five blocks at once,
161
+ * say — becomes a single undo step.
162
+ */
163
+ private onLocalMutation;
164
+ private scheduleFlush;
165
+ /** Coalesce the tick's collected ops into one entry and record it. */
166
+ private flushBatch;
167
+ /**
168
+ * Run `work` after every previously-enqueued scope operation has settled,
169
+ * in invocation order. The internal `tail` always resolves (failures are
170
+ * swallowed *for the chain only*) so one rejected mutator can't wedge the
171
+ * queue; the original settlement is still surfaced to this call's caller.
172
+ */
173
+ private enqueue;
174
+ /**
175
+ * Runs a recording mutator by itself on the scope's serialization chain, so its
176
+ * snapshot, write, and {@link UndoScope.record} happen atomically with respect to
177
+ * undo and redo. This is used by the explicit-record path; the stream-recording
178
+ * path does not need it, since it derives entries from already-committed
179
+ * mutations.
180
+ */
181
+ runRecorded<T>(work: () => Promise<T>): Promise<T>;
182
+ /**
183
+ * Records one entry onto the undo stack and clears the redo stack. It is fed
184
+ * both by the per-tick flush and grouping paths from the local-mutation stream
185
+ * and by direct callers using explicit recording. Entries are built internally
186
+ * and therefore trusted, so the schema check here runs only outside production:
187
+ * it catches recorder bugs early, rejecting a malformed operation at ingestion
188
+ * with a clear path rather than letting it fail later during replay, without
189
+ * paying a validation cost on every user action in production. The real
190
+ * validation boundary is {@link parseUndoEntry}, applied to entries loaded from
191
+ * persistence, which is untrusted input.
192
+ */
193
+ record(entry: UndoEntry): void;
194
+ /**
195
+ * Subscribes to every recorded mutation. The listener fires synchronously at the
196
+ * end of each {@link UndoScope.record} call, once the entry is on the undo stack,
197
+ * and the returned function unsubscribes it. The listener receives the full
198
+ * {@link UndoEntry} — its `forwards` carry the `{ kind, modelKey, data }`
199
+ * operations — so a consumer can tell what changed without querying again.
200
+ */
201
+ onRecord(listener: (entry: UndoEntry) => void): () => void;
202
+ private emitRecord;
203
+ /**
204
+ * Subscribes to any stack change — record, undo, redo, or clear. The React
205
+ * `useUndoScope` hook uses this to re-render so `canUndo` and `canRedo` stay
206
+ * current for every consumer, not only the component that invoked undo or redo.
207
+ * The returned function unsubscribes.
208
+ */
209
+ onChange(listener: () => void): () => void;
210
+ private emitChange;
211
+ canUndo(): boolean;
212
+ canRedo(): boolean;
213
+ /**
214
+ * Pops the most recent entry, applies its inverse operations, and pushes it onto
215
+ * the redo stack. Under the default `skip-stale` policy the inverses are first
216
+ * filtered against the current state — paired with the entry's forwards, which
217
+ * record what this change set — so a field a collaborator changed afterward is
218
+ * left untouched, and undo reverts the change only where it still stands.
219
+ */
220
+ undo(): Promise<void>;
221
+ /**
222
+ * Pops the most recently undone entry, re-applies its forward operations, and
223
+ * pushes it onto the undo stack. It mirrors {@link UndoScope.undo}: the forwards
224
+ * are filtered against the current state — paired with the entry's inverses,
225
+ * which record what undo restored — so redo re-asserts the change only where the
226
+ * undone value still stands.
227
+ */
228
+ redo(): Promise<void>;
229
+ /** Drop all history. Use after bootstrap / sync group change / sync error. */
230
+ clear(): void;
231
+ /** Introspection — for debug panels / e2e tests. */
232
+ size(): {
233
+ undo: number;
234
+ redo: number;
235
+ };
236
+ /**
237
+ * Detach from the local-mutation stream and drop listeners. Scopes are
238
+ * cached for the store's lifetime by `UndoManager`, so this is mainly for
239
+ * tests and explicit teardown.
240
+ */
241
+ dispose(): void;
242
+ }
243
+ /**
244
+ * The registry of named undo scopes. One instance is created per application
245
+ * during engine setup, and each surface finds its scope by name through
246
+ * {@link UndoManager.getScope}.
247
+ */
248
+ export declare class UndoManager<S extends Schema> {
249
+ private readonly schema;
250
+ private readonly store;
251
+ private readonly organizationId;
252
+ private readonly scopes;
253
+ /** The options each scope was constructed with, for the mismatch warning below. */
254
+ private readonly creationOptions;
255
+ constructor(schema: S, store: SyncStoreContract, organizationId: string);
256
+ getScope(name: string, options?: UndoScopeOptions): UndoScope<S>;
257
+ clearAll(): void;
258
+ }