@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,388 @@
1
+ /**
2
+ * Manages the {@link ObjectStore} instances the sync engine keeps in the
3
+ * browser — one per registered model — alongside the single
4
+ * {@link SyncActionStore} for pending changes. It creates each store from the
5
+ * model's metadata, tracks readiness, and provisions the underlying IndexedDB
6
+ * object stores. A model's load strategy — instant or lazy — decides how and
7
+ * when its data is loaded.
8
+ */
9
+
10
+ import { ModelRegistry } from '../ModelRegistry.js';
11
+ import { ObjectStore } from './ObjectStore.js';
12
+ import { SyncActionStore } from './SyncActionStore.js';
13
+ import { LoadStrategy } from '@abloatai/transaction/types';
14
+ import { AbloValidationError } from '@abloatai/transaction/errors';
15
+
16
+ /**
17
+ * StoreManager - Central manager for all ObjectStore instances
18
+ *
19
+ * Key responsibilities:
20
+ * - Creates ObjectStore instances for each registered model
21
+ * - Manages store lifecycle and readiness
22
+ * - Provides unified interface for database operations
23
+ * - Handles store-specific optimizations based on load strategies
24
+ */
25
+ export class StoreManager {
26
+ private stores = new Map<string, ObjectStore>();
27
+ /** Strict-durability wrapper for the client write journal and commit outbox. */
28
+ private transactionStore: ObjectStore | null = null;
29
+ private syncactionStore: SyncActionStore | null = null;
30
+ private db: IDBDatabase | null = null;
31
+ private isInitialized = false;
32
+ private modelRegistry: ModelRegistry;
33
+
34
+ constructor(
35
+ modelRegistry: ModelRegistry,
36
+ private readonly runtime: RuntimeContext = globalRuntime,
37
+ ) {
38
+ this.modelRegistry = modelRegistry;
39
+ }
40
+
41
+ /**
42
+ * Initialize all stores for registered models
43
+ */
44
+ async initializeStores(db: IDBDatabase): Promise<void> {
45
+ this.db = db;
46
+
47
+ if (this.isInitialized) {
48
+ // Idempotent re-entry — harmless, nothing for the consumer to act on → debug.
49
+ this.runtime.logger.debug('StoreManager already initialized');
50
+ return;
51
+ }
52
+
53
+ this.runtime.logger.info('Initializing ObjectStore instances for all models');
54
+ const startTime = performance.now();
55
+
56
+ // Get all registered models
57
+ const allModels = this.modelRegistry.getRegisteredModelNames();
58
+
59
+ for (const modelName of allModels) {
60
+ await this.createStoreForModel(modelName);
61
+ }
62
+
63
+ // Special stores are created during the IDB upgrade, but unlike model
64
+ // stores they have no registry metadata and therefore need an explicit
65
+ // runtime wrapper. Outbox acknowledgement must mean disk-backed, so this
66
+ // store opts into strict durability rather than the cache stores' relaxed
67
+ // mode.
68
+ this.transactionStore = new ObjectStore(
69
+ this.db,
70
+ '__transactions',
71
+ '__transactions',
72
+ { loadStrategy: LoadStrategy.instant },
73
+ 'strict',
74
+ );
75
+
76
+ // Initialize SyncactionStore
77
+ this.syncactionStore = new SyncActionStore(this.db, this.runtime);
78
+ await this.syncactionStore.initialize();
79
+
80
+ this.isInitialized = true;
81
+ const duration = performance.now() - startTime;
82
+
83
+ this.runtime.logger.info('Initialized ObjectStores and SyncactionStore', {
84
+ count: this.stores.size,
85
+ ms: duration.toFixed(2),
86
+ });
87
+
88
+ }
89
+
90
+ /**
91
+ * Create ObjectStore for a specific model
92
+ */
93
+ private async createStoreForModel(modelName: string): Promise<void> {
94
+ const metadata = this.modelRegistry.getMetadata(modelName);
95
+ if (!metadata) {
96
+ throw new AbloValidationError(`No metadata found for model: ${modelName}`, {
97
+ code: 'store_manager_unknown_model',
98
+ });
99
+ }
100
+
101
+ // Use model name directly as store name
102
+ const storeName = modelName;
103
+
104
+ // Create the ObjectStore. One store type currently serves every load strategy.
105
+ const store = new ObjectStore(this.db!, modelName, storeName, metadata);
106
+
107
+ this.stores.set(modelName, store);
108
+ }
109
+
110
+ /**
111
+ * Create stores (tables) in IndexedDB
112
+ */
113
+ async createStores(db: IDBDatabase): Promise<void> {
114
+ this.runtime.logger.info('Creating tables for all registered models');
115
+
116
+ for (const modelName of this.modelRegistry.getRegisteredModelNames()) {
117
+ const storeName = modelName;
118
+
119
+ // Skip if store already exists
120
+ if (db.objectStoreNames.contains(storeName)) {
121
+ continue;
122
+ }
123
+
124
+ this.runtime.logger.debug('Creating table', { storeName, modelName });
125
+
126
+ // Create object store with id as keyPath
127
+ const store = db.createObjectStore(storeName, { keyPath: 'id' });
128
+
129
+ // Create indexes for indexed properties
130
+ const indexedProperties = this.modelRegistry.getIndexedProperties(modelName);
131
+ for (const propName of indexedProperties) {
132
+ try {
133
+ store.createIndex(propName, propName, { unique: false });
134
+ this.runtime.logger.debug('Created index', { store: storeName, prop: propName });
135
+ } catch (error) {
136
+ // Internal IndexedDB index setup — a miss only affects local query
137
+ // speed and isn't consumer-actionable → debug.
138
+ this.runtime.logger.debug('Failed to create index', { store: storeName, prop: propName, error });
139
+ }
140
+ }
141
+ }
142
+
143
+ // Create special tables
144
+ this.createSpecialTables(db);
145
+ }
146
+
147
+ /**
148
+ * Create special tables (sync_action_table, model_table, model_table_partial, __meta, __transactions)
149
+ */
150
+ private createSpecialTables(db: IDBDatabase): void {
151
+ // Create sync_action_table for sync actions (delta packets)
152
+ if (!db.objectStoreNames.contains('sync_action_table')) {
153
+ const syncActionStore = db.createObjectStore('sync_action_table', { keyPath: 'id' });
154
+ syncActionStore.createIndex('syncId', 'id');
155
+ this.runtime.logger.debug('Created sync_action_table');
156
+ }
157
+
158
+ // Create __meta table for model persistence state and database metadata
159
+ if (!db.objectStoreNames.contains('__meta')) {
160
+ db.createObjectStore('__meta');
161
+ this.runtime.logger.debug('Created __meta table');
162
+ }
163
+
164
+ // Create __transactions table for unsent transactions
165
+ if (!db.objectStoreNames.contains('__transactions')) {
166
+ const transactionStore = db.createObjectStore('__transactions', {
167
+ keyPath: 'id',
168
+ autoIncrement: false,
169
+ });
170
+
171
+ // Create indexes for transaction queries
172
+ transactionStore.createIndex('timestamp', 'timestamp');
173
+ transactionStore.createIndex('status', 'status');
174
+
175
+ this.runtime.logger.debug('Created __transactions table');
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Get ObjectStore for a model
181
+ */
182
+ getStore(modelName: string): ObjectStore | undefined {
183
+ if (modelName === '__transactions') {
184
+ return this.transactionStore ?? undefined;
185
+ }
186
+ return this.stores.get(modelName);
187
+ }
188
+
189
+ /**
190
+ * Get SyncactionStore instance
191
+ */
192
+ getSyncactionStore(): SyncActionStore | null {
193
+ return this.syncactionStore;
194
+ }
195
+
196
+ /**
197
+ * Get all stores
198
+ */
199
+ getAllStores(): Map<string, ObjectStore> {
200
+ return new Map(this.stores);
201
+ }
202
+
203
+ /**
204
+ * Check readiness of all stores
205
+ */
206
+ async checkReadinessOfStores(): Promise<{
207
+ ready: boolean;
208
+ readyStores: string[];
209
+ notReadyStores: string[];
210
+ totalStores: number;
211
+ }> {
212
+ const readyStores: string[] = [];
213
+ const notReadyStores: string[] = [];
214
+
215
+ for (const [modelName, store] of Array.from(this.stores)) {
216
+ const isReady = await store.checkIsReady();
217
+
218
+ if (isReady) {
219
+ readyStores.push(modelName);
220
+ } else {
221
+ notReadyStores.push(modelName);
222
+ }
223
+ }
224
+
225
+ const allReady = notReadyStores.length === 0;
226
+
227
+ this.runtime.logger.debug('Store readiness', {
228
+ ready: readyStores.length,
229
+ total: this.stores.size,
230
+ notReady: notReadyStores,
231
+ });
232
+
233
+ return {
234
+ ready: allReady,
235
+ readyStores,
236
+ notReadyStores,
237
+ totalStores: this.stores.size,
238
+ };
239
+ }
240
+
241
+ /**
242
+ * Reports whether any data store holds at least one record. This is a
243
+ * cache-validity check: if the stores are empty, the sync cursor
244
+ * (`lastSyncId`) is meaningless no matter what the metadata says, because the
245
+ * cursor and the data must travel together — no data means no cursor, which
246
+ * forces a full bootstrap. To stay cheap it samples up to three stores rather
247
+ * than scanning them all, and returns true as soon as one has records.
248
+ */
249
+ async hasAnyData(): Promise<boolean> {
250
+ const storeEntries = Array.from(this.stores);
251
+ // Sample a few stores — don't check all 30+ if the first one has data
252
+ const samplesToCheck = Math.min(storeEntries.length, 3);
253
+ for (let i = 0; i < samplesToCheck; i++) {
254
+ const entry = storeEntries[i];
255
+ if (!entry) break;
256
+ const [, store] = entry;
257
+ try {
258
+ const count = await store.count();
259
+ if (count > 0) return true;
260
+ } catch {
261
+ // Store not accessible — treat as empty
262
+ }
263
+ }
264
+ return false;
265
+ }
266
+
267
+ /**
268
+ * Get stores by load strategy
269
+ */
270
+ getStoresByStrategy(strategy: LoadStrategy): ObjectStore[] {
271
+ const stores: ObjectStore[] = [];
272
+
273
+ for (const [modelName, store] of Array.from(this.stores)) {
274
+ const metadata = this.modelRegistry.getMetadata(modelName);
275
+ if (metadata?.loadStrategy === strategy) {
276
+ stores.push(store);
277
+ }
278
+ }
279
+
280
+ return stores;
281
+ }
282
+
283
+ /**
284
+ * Perform maintenance on all stores
285
+ */
286
+ async performMaintenance(): Promise<void> {
287
+ this.runtime.logger.info('Performing maintenance on all stores');
288
+
289
+ const promises = Array.from(this.stores.values()).map((store) => store.performMaintenance());
290
+
291
+ await Promise.all(promises);
292
+
293
+ this.runtime.logger.info('Store maintenance completed');
294
+ }
295
+
296
+ /**
297
+ * Clear all stores
298
+ */
299
+ async clearAllStores(): Promise<void> {
300
+ // Lifecycle chatter (logout / identity switch / reset), not a warning.
301
+ // Logged at `debug` so it stays silent under the default `warn` threshold.
302
+ this.runtime.logger.debug('Clearing all stores');
303
+
304
+ const promises = Array.from(this.stores.values()).map((store) => store.clear());
305
+
306
+ await Promise.all(promises);
307
+
308
+ this.runtime.logger.info('All stores cleared');
309
+ }
310
+
311
+ /**
312
+ * Mark all stores as closing to prevent new operations
313
+ * Called before database connection is closed
314
+ */
315
+ markAllStoresAsClosing(): void {
316
+ this.runtime.logger.debug('Marking all stores as closing');
317
+
318
+ for (const store of this.stores.values()) {
319
+ store.markAsClosing();
320
+ }
321
+ this.transactionStore?.markAsClosing();
322
+
323
+ // SyncActionStore is a standalone store that does not extend ObjectStore
324
+ // and has no markAsClosing equivalent, so it is intentionally skipped here.
325
+ // If closing-state coordination is ever needed for sync actions, add it
326
+ // explicitly to SyncActionStore rather than casting to reach a method that
327
+ // may not exist.
328
+
329
+ this.runtime.logger.debug('All stores marked as closing');
330
+ }
331
+
332
+ /**
333
+ * Get comprehensive statistics
334
+ */
335
+ async getComprehensiveStats(): Promise<{
336
+ totalStores: number;
337
+ readiness: { ready: number; notReady: number };
338
+ totalRecords: number;
339
+ storeDetails: {
340
+ modelName: string;
341
+ storeName: string;
342
+ strategy: LoadStrategy;
343
+ ready: boolean;
344
+ count: number;
345
+ }[];
346
+ }> {
347
+ const storeDetails: {
348
+ modelName: string;
349
+ storeName: string;
350
+ strategy: LoadStrategy;
351
+ ready: boolean;
352
+ count: number;
353
+ }[] = [];
354
+
355
+ let totalRecords = 0;
356
+ let readyCount = 0;
357
+
358
+ for (const [modelName, store] of Array.from(this.stores)) {
359
+ const metadata = this.modelRegistry.getMetadata(modelName)!;
360
+ const storeName = modelName;
361
+ const ready = await store.checkIsReady();
362
+ const count = await store.count();
363
+
364
+ if (ready) readyCount++;
365
+ totalRecords += count;
366
+
367
+ storeDetails.push({
368
+ modelName,
369
+ storeName,
370
+ strategy: metadata.loadStrategy,
371
+ ready,
372
+ count,
373
+ });
374
+ }
375
+
376
+ return {
377
+ totalStores: this.stores.size,
378
+ readiness: {
379
+ ready: readyCount,
380
+ notReady: this.stores.size - readyCount,
381
+ },
382
+ totalRecords,
383
+ storeDetails,
384
+ };
385
+ }
386
+ }
387
+ import { globalRuntime } from '../context.js';
388
+ import type { RuntimeContext } from '../RuntimeContext.js';