@abloatai/ablo 0.36.0 → 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 (597) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +71 -2013
  3. package/NOTICE +2 -2
  4. package/README.md +25 -71
  5. package/assets/banner.png +0 -0
  6. package/dist/auth.d.ts +2 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +2 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coordination.d.ts +2 -0
  15. package/dist/coordination.d.ts.map +1 -0
  16. package/dist/coordination.js +2 -0
  17. package/dist/coordination.js.map +1 -0
  18. package/dist/index.d.ts +3 -114
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -163
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +4 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +3 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/schema.d.ts +2 -0
  27. package/dist/schema.d.ts.map +1 -0
  28. package/dist/schema.js +2 -0
  29. package/dist/schema.js.map +1 -0
  30. package/dist/server.d.ts +2 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +2 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/source-conformance.d.ts +2 -0
  35. package/dist/source-conformance.d.ts.map +1 -0
  36. package/dist/source-conformance.js +2 -0
  37. package/dist/source-conformance.js.map +1 -0
  38. package/dist/source-drizzle.d.ts +2 -0
  39. package/dist/source-drizzle.d.ts.map +1 -0
  40. package/dist/source-drizzle.js +2 -0
  41. package/dist/source-drizzle.js.map +1 -0
  42. package/dist/source-kysely.d.ts +2 -0
  43. package/dist/source-kysely.d.ts.map +1 -0
  44. package/dist/source-kysely.js +2 -0
  45. package/dist/source-kysely.js.map +1 -0
  46. package/dist/source-next.d.ts +2 -0
  47. package/dist/source-next.d.ts.map +1 -0
  48. package/dist/source-next.js +2 -0
  49. package/dist/source-next.js.map +1 -0
  50. package/dist/source.d.ts +2 -0
  51. package/dist/source.d.ts.map +1 -0
  52. package/dist/source.js +2 -0
  53. package/dist/source.js.map +1 -0
  54. package/dist/wire.d.ts +2 -0
  55. package/dist/wire.d.ts.map +1 -0
  56. package/dist/wire.js +2 -0
  57. package/dist/wire.js.map +1 -0
  58. package/docs/agents.md +1 -1
  59. package/docs/api-keys.md +7 -6
  60. package/docs/api.md +10 -10
  61. package/docs/client-behavior.md +5 -5
  62. package/docs/coordination.md +52 -62
  63. package/docs/data-sources.md +1 -1
  64. package/docs/examples/agent-human.md +4 -4
  65. package/docs/examples/ai-sdk-tool.md +1 -1
  66. package/docs/examples/existing-python-backend.md +15 -4
  67. package/docs/examples/nextjs.md +27 -6
  68. package/docs/examples/server-agent.md +2 -2
  69. package/docs/how-it-works.md +4 -4
  70. package/docs/identity.md +2 -1
  71. package/docs/integration-guide.md +24 -13
  72. package/docs/internal/README.md +18 -0
  73. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  74. package/docs/internal/agent-orchestration.md +58 -0
  75. package/docs/internal/commit-identifiers.md +91 -0
  76. package/docs/internal/concurrency-open-decisions.md +37 -0
  77. package/docs/internal/data-source-reverse-channel.md +150 -0
  78. package/docs/internal/per-field-conflict-detection.md +165 -0
  79. package/docs/internal/postgres-replication.md +64 -0
  80. package/docs/internal/serializable-schema.md +119 -0
  81. package/docs/internal/structure.md +32 -0
  82. package/docs/mcp.md +2 -2
  83. package/docs/migration.md +3 -3
  84. package/docs/quickstart.md +2 -2
  85. package/docs/react.md +5 -5
  86. package/docs/schema-contract.md +3 -3
  87. package/docs/sessions.md +91 -37
  88. package/examples/README.md +2 -2
  89. package/examples/data-source/README.md +1 -1
  90. package/examples/data-source/ablo-driver.ts +1 -1
  91. package/examples/data-source/customer-server.ts +1 -1
  92. package/examples/data-source/run.ts +1 -1
  93. package/examples/data-source/schema.ts +1 -1
  94. package/examples/quickstart.ts +2 -2
  95. package/llms.txt +8 -8
  96. package/package.json +63 -166
  97. package/bin/ablo.cjs +0 -39
  98. package/dist/BaseSyncedStore.d.ts +0 -843
  99. package/dist/BaseSyncedStore.js +0 -1971
  100. package/dist/Database.d.ts +0 -323
  101. package/dist/Database.js +0 -1502
  102. package/dist/InstanceCache.d.ts +0 -237
  103. package/dist/InstanceCache.js +0 -1166
  104. package/dist/LazyReferenceCollection.d.ts +0 -177
  105. package/dist/LazyReferenceCollection.js +0 -461
  106. package/dist/Model.d.ts +0 -454
  107. package/dist/Model.js +0 -919
  108. package/dist/ModelRegistry.d.ts +0 -225
  109. package/dist/ModelRegistry.js +0 -539
  110. package/dist/NetworkMonitor.d.ts +0 -28
  111. package/dist/NetworkMonitor.js +0 -79
  112. package/dist/RuntimeContext.d.ts +0 -52
  113. package/dist/RuntimeContext.js +0 -80
  114. package/dist/SyncClient.d.ts +0 -541
  115. package/dist/SyncClient.js +0 -2202
  116. package/dist/adapters/alwaysOnline.d.ts +0 -14
  117. package/dist/adapters/alwaysOnline.js +0 -17
  118. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  119. package/dist/adapters/inMemoryStorage.js +0 -110
  120. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  121. package/dist/ai-sdk/coordinatedTool.js +0 -134
  122. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  123. package/dist/ai-sdk/coordinationContext.js +0 -106
  124. package/dist/ai-sdk/index.d.ts +0 -121
  125. package/dist/ai-sdk/index.js +0 -121
  126. package/dist/ai-sdk/wrap.d.ts +0 -65
  127. package/dist/ai-sdk/wrap.js +0 -39
  128. package/dist/auth/index.d.ts +0 -1
  129. package/dist/auth/index.js +0 -8
  130. package/dist/batching/index.d.ts +0 -55
  131. package/dist/batching/index.js +0 -147
  132. package/dist/client/Ablo.d.ts +0 -231
  133. package/dist/client/Ablo.js +0 -160
  134. package/dist/client/abloClient.d.ts +0 -309
  135. package/dist/client/abloClient.js +0 -13
  136. package/dist/client/clientPrelude.d.ts +0 -52
  137. package/dist/client/clientPrelude.js +0 -60
  138. package/dist/client/consoleLogger.d.ts +0 -35
  139. package/dist/client/consoleLogger.js +0 -44
  140. package/dist/client/coreClient.d.ts +0 -60
  141. package/dist/client/coreClient.js +0 -118
  142. package/dist/client/createInternalComponents.d.ts +0 -50
  143. package/dist/client/createInternalComponents.js +0 -98
  144. package/dist/client/createModelProxy.d.ts +0 -248
  145. package/dist/client/createModelProxy.js +0 -884
  146. package/dist/client/humans.d.ts +0 -69
  147. package/dist/client/humans.js +0 -78
  148. package/dist/client/modelRegistration.d.ts +0 -10
  149. package/dist/client/modelRegistration.js +0 -312
  150. package/dist/client/options.d.ts +0 -461
  151. package/dist/client/options.js +0 -7
  152. package/dist/client/reactiveEngine.d.ts +0 -53
  153. package/dist/client/reactiveEngine.js +0 -688
  154. package/dist/client/resourceTypes.d.ts +0 -12
  155. package/dist/client/resourceTypes.js +0 -10
  156. package/dist/client/schemaConfig.d.ts +0 -44
  157. package/dist/client/schemaConfig.js +0 -185
  158. package/dist/client/storeCluster.d.ts +0 -47
  159. package/dist/client/storeCluster.js +0 -118
  160. package/dist/client/storeLifecycle.d.ts +0 -61
  161. package/dist/client/storeLifecycle.js +0 -231
  162. package/dist/client/validateAbloOptions.d.ts +0 -42
  163. package/dist/client/validateAbloOptions.js +0 -43
  164. package/dist/client/wsMutationExecutor.d.ts +0 -27
  165. package/dist/client/wsMutationExecutor.js +0 -72
  166. package/dist/context.d.ts +0 -42
  167. package/dist/context.js +0 -81
  168. package/dist/coordination/ClaimLog.d.ts +0 -26
  169. package/dist/coordination/ClaimLog.js +0 -32
  170. package/dist/coordination/index.d.ts +0 -1
  171. package/dist/coordination/index.js +0 -8
  172. package/dist/core/index.d.ts +0 -33
  173. package/dist/core/index.js +0 -48
  174. package/dist/docs/catalog.d.ts +0 -72
  175. package/dist/docs/catalog.js +0 -230
  176. package/dist/docs/index.d.ts +0 -10
  177. package/dist/docs/index.js +0 -10
  178. package/dist/environment.d.ts +0 -1
  179. package/dist/environment.js +0 -8
  180. package/dist/interfaces/index.d.ts +0 -311
  181. package/dist/interfaces/index.js +0 -9
  182. package/dist/keys/index.d.ts +0 -1
  183. package/dist/keys/index.js +0 -8
  184. package/dist/mutators/RecordingMutation.d.ts +0 -36
  185. package/dist/mutators/RecordingMutation.js +0 -182
  186. package/dist/mutators/Transaction.d.ts +0 -40
  187. package/dist/mutators/Transaction.js +0 -58
  188. package/dist/mutators/UndoManager.d.ts +0 -258
  189. package/dist/mutators/UndoManager.js +0 -658
  190. package/dist/mutators/defineMutators.d.ts +0 -60
  191. package/dist/mutators/defineMutators.js +0 -18
  192. package/dist/mutators/inverseOp.d.ts +0 -126
  193. package/dist/mutators/inverseOp.js +0 -71
  194. package/dist/mutators/mutateActions.d.ts +0 -45
  195. package/dist/mutators/mutateActions.js +0 -105
  196. package/dist/mutators/readerActions.d.ts +0 -33
  197. package/dist/mutators/readerActions.js +0 -57
  198. package/dist/mutators/undoApply.d.ts +0 -51
  199. package/dist/mutators/undoApply.js +0 -117
  200. package/dist/policy/index.d.ts +0 -21
  201. package/dist/policy/index.js +0 -20
  202. package/dist/query/QueryProcessor.d.ts +0 -75
  203. package/dist/query/QueryProcessor.js +0 -255
  204. package/dist/query/client.d.ts +0 -64
  205. package/dist/query/client.js +0 -138
  206. package/dist/query/types.d.ts +0 -85
  207. package/dist/query/types.js +0 -16
  208. package/dist/react/AbloProvider.d.ts +0 -242
  209. package/dist/react/AbloProvider.js +0 -458
  210. package/dist/react/ClientSideSuspense.d.ts +0 -36
  211. package/dist/react/ClientSideSuspense.js +0 -17
  212. package/dist/react/DefaultFallback.d.ts +0 -24
  213. package/dist/react/DefaultFallback.js +0 -43
  214. package/dist/react/context.d.ts +0 -55
  215. package/dist/react/context.js +0 -29
  216. package/dist/react/createAbloReact.d.ts +0 -56
  217. package/dist/react/createAbloReact.js +0 -51
  218. package/dist/react/index.d.ts +0 -62
  219. package/dist/react/index.js +0 -69
  220. package/dist/react/internalContext.d.ts +0 -33
  221. package/dist/react/internalContext.js +0 -3
  222. package/dist/react/useAblo.d.ts +0 -82
  223. package/dist/react/useAblo.js +0 -120
  224. package/dist/react/useCurrentUserId.d.ts +0 -22
  225. package/dist/react/useCurrentUserId.js +0 -34
  226. package/dist/react/useErrorListener.d.ts +0 -20
  227. package/dist/react/useErrorListener.js +0 -38
  228. package/dist/react/useMutationFailureListener.d.ts +0 -26
  229. package/dist/react/useMutationFailureListener.js +0 -38
  230. package/dist/react/useMutators.d.ts +0 -56
  231. package/dist/react/useMutators.js +0 -84
  232. package/dist/react/useReactive.d.ts +0 -35
  233. package/dist/react/useReactive.js +0 -123
  234. package/dist/react/useSyncStatus.d.ts +0 -59
  235. package/dist/react/useSyncStatus.js +0 -76
  236. package/dist/react/useUndoScope.d.ts +0 -34
  237. package/dist/react/useUndoScope.js +0 -81
  238. package/dist/schema/coordination.d.ts +0 -112
  239. package/dist/schema/coordination.js +0 -133
  240. package/dist/schema/ddl.d.ts +0 -97
  241. package/dist/schema/ddl.js +0 -491
  242. package/dist/schema/ddlLock.d.ts +0 -35
  243. package/dist/schema/ddlLock.js +0 -46
  244. package/dist/schema/diff.d.ts +0 -225
  245. package/dist/schema/diff.js +0 -289
  246. package/dist/schema/generate.d.ts +0 -19
  247. package/dist/schema/generate.js +0 -86
  248. package/dist/schema/index.d.ts +0 -42
  249. package/dist/schema/index.js +0 -80
  250. package/dist/schema/queries.d.ts +0 -201
  251. package/dist/schema/queries.js +0 -144
  252. package/dist/schema/select.d.ts +0 -40
  253. package/dist/schema/select.js +0 -90
  254. package/dist/schema/serialize.d.ts +0 -115
  255. package/dist/schema/serialize.js +0 -265
  256. package/dist/schema/sugar.d.ts +0 -109
  257. package/dist/schema/sugar.js +0 -83
  258. package/dist/schema/syncDeltaRow.d.ts +0 -6
  259. package/dist/schema/syncDeltaRow.js +0 -6
  260. package/dist/server/adapter.d.ts +0 -173
  261. package/dist/server/adapter.js +0 -18
  262. package/dist/server/commit.d.ts +0 -107
  263. package/dist/server/commit.js +0 -1
  264. package/dist/server/index.d.ts +0 -14
  265. package/dist/server/index.js +0 -2
  266. package/dist/server/readConfig.d.ts +0 -80
  267. package/dist/server/readConfig.js +0 -8
  268. package/dist/server/storageMode.d.ts +0 -23
  269. package/dist/server/storageMode.js +0 -17
  270. package/dist/source/adapter.d.ts +0 -83
  271. package/dist/source/adapter.js +0 -24
  272. package/dist/source/adapters/drizzle.d.ts +0 -48
  273. package/dist/source/adapters/drizzle.js +0 -219
  274. package/dist/source/adapters/kysely.d.ts +0 -42
  275. package/dist/source/adapters/kysely.js +0 -205
  276. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  277. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  278. package/dist/source/adapters/memory.d.ts +0 -13
  279. package/dist/source/adapters/memory.js +0 -130
  280. package/dist/source/adapters/prisma.d.ts +0 -63
  281. package/dist/source/adapters/prisma.js +0 -202
  282. package/dist/source/conformance.d.ts +0 -37
  283. package/dist/source/conformance.js +0 -215
  284. package/dist/source/connector.d.ts +0 -95
  285. package/dist/source/connector.js +0 -266
  286. package/dist/source/connectorProtocol.d.ts +0 -154
  287. package/dist/source/connectorProtocol.js +0 -163
  288. package/dist/source/contract.d.ts +0 -195
  289. package/dist/source/contract.js +0 -164
  290. package/dist/source/factory.d.ts +0 -92
  291. package/dist/source/factory.js +0 -286
  292. package/dist/source/idempotency.d.ts +0 -61
  293. package/dist/source/idempotency.js +0 -144
  294. package/dist/source/index.d.ts +0 -23
  295. package/dist/source/index.js +0 -30
  296. package/dist/source/migrations.d.ts +0 -21
  297. package/dist/source/migrations.js +0 -103
  298. package/dist/source/next.d.ts +0 -32
  299. package/dist/source/next.js +0 -25
  300. package/dist/source/pushQueue.d.ts +0 -134
  301. package/dist/source/pushQueue.js +0 -256
  302. package/dist/source/signing.d.ts +0 -92
  303. package/dist/source/signing.js +0 -162
  304. package/dist/source/types.d.ts +0 -401
  305. package/dist/source/types.js +0 -59
  306. package/dist/storeContract.d.ts +0 -145
  307. package/dist/storeContract.js +0 -12
  308. package/dist/stores/DatabaseManager.d.ts +0 -107
  309. package/dist/stores/DatabaseManager.js +0 -388
  310. package/dist/stores/ObjectStore.d.ts +0 -115
  311. package/dist/stores/ObjectStore.js +0 -393
  312. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  313. package/dist/stores/ObjectStoreContract.js +0 -1
  314. package/dist/stores/StoreManager.d.ts +0 -114
  315. package/dist/stores/StoreManager.js +0 -304
  316. package/dist/stores/SyncActionStore.d.ts +0 -99
  317. package/dist/stores/SyncActionStore.js +0 -506
  318. package/dist/stores/openIDBWithTimeout.d.ts +0 -65
  319. package/dist/stores/openIDBWithTimeout.js +0 -153
  320. package/dist/stores/syncAction.d.ts +0 -26
  321. package/dist/stores/syncAction.js +0 -16
  322. package/dist/surface.d.ts +0 -36
  323. package/dist/surface.js +0 -75
  324. package/dist/sync/BootstrapFetcher.d.ts +0 -284
  325. package/dist/sync/BootstrapFetcher.js +0 -964
  326. package/dist/sync/ConnectionManager.d.ts +0 -8
  327. package/dist/sync/ConnectionManager.js +0 -8
  328. package/dist/sync/OnDemandLoader.d.ts +0 -231
  329. package/dist/sync/OnDemandLoader.js +0 -743
  330. package/dist/sync/SubscriptionManager.d.ts +0 -159
  331. package/dist/sync/SubscriptionManager.js +0 -243
  332. package/dist/sync/SyncWebSocket.d.ts +0 -173
  333. package/dist/sync/SyncWebSocket.js +0 -438
  334. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  335. package/dist/sync/awaitClaimGrant.js +0 -6
  336. package/dist/sync/bootstrapApply.d.ts +0 -73
  337. package/dist/sync/bootstrapApply.js +0 -73
  338. package/dist/sync/commitFrames.d.ts +0 -8
  339. package/dist/sync/commitFrames.js +0 -8
  340. package/dist/sync/contextPorts.d.ts +0 -18
  341. package/dist/sync/contextPorts.js +0 -31
  342. package/dist/sync/createClaimStream.d.ts +0 -7
  343. package/dist/sync/createClaimStream.js +0 -7
  344. package/dist/sync/createPresenceStream.d.ts +0 -69
  345. package/dist/sync/createPresenceStream.js +0 -200
  346. package/dist/sync/createSnapshot.d.ts +0 -29
  347. package/dist/sync/createSnapshot.js +0 -118
  348. package/dist/sync/credentialLifecycle.d.ts +0 -7
  349. package/dist/sync/credentialLifecycle.js +0 -7
  350. package/dist/sync/deltaPipeline.d.ts +0 -114
  351. package/dist/sync/deltaPipeline.js +0 -278
  352. package/dist/sync/groupChange.d.ts +0 -116
  353. package/dist/sync/groupChange.js +0 -244
  354. package/dist/sync/participants.d.ts +0 -132
  355. package/dist/sync/participants.js +0 -346
  356. package/dist/sync/persistedPrefix.d.ts +0 -12
  357. package/dist/sync/persistedPrefix.js +0 -22
  358. package/dist/sync/schemaDrift.d.ts +0 -55
  359. package/dist/sync/schemaDrift.js +0 -53
  360. package/dist/sync/schemas.d.ts +0 -71
  361. package/dist/sync/schemas.js +0 -94
  362. package/dist/sync/syncCursor.d.ts +0 -40
  363. package/dist/sync/syncCursor.js +0 -55
  364. package/dist/sync/syncPlan.d.ts +0 -54
  365. package/dist/sync/syncPlan.js +0 -50
  366. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  367. package/dist/sync/wsFrameHandlers.js +0 -8
  368. package/dist/syncLog/contract.d.ts +0 -20
  369. package/dist/syncLog/contract.js +0 -19
  370. package/dist/syncLog/index.d.ts +0 -1
  371. package/dist/syncLog/index.js +0 -1
  372. package/dist/transaction/ablo.d.ts +0 -88
  373. package/dist/transaction/ablo.js +0 -33
  374. package/dist/transaction/auth/apiKey.d.ts +0 -152
  375. package/dist/transaction/auth/apiKey.js +0 -419
  376. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  377. package/dist/transaction/auth/bootstrapScope.js +0 -1
  378. package/dist/transaction/auth/capability.d.ts +0 -212
  379. package/dist/transaction/auth/capability.js +0 -224
  380. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  381. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  382. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  383. package/dist/transaction/auth/credentialPolicy.js +0 -125
  384. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  385. package/dist/transaction/auth/credentialSource.js +0 -55
  386. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  387. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  388. package/dist/transaction/auth/identity.d.ts +0 -55
  389. package/dist/transaction/auth/identity.js +0 -210
  390. package/dist/transaction/auth/index.d.ts +0 -162
  391. package/dist/transaction/auth/index.js +0 -304
  392. package/dist/transaction/auth/schemas.d.ts +0 -59
  393. package/dist/transaction/auth/schemas.js +0 -85
  394. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  395. package/dist/transaction/auth/sessionMint.js +0 -85
  396. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -56
  397. package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
  398. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
  399. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
  400. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  401. package/dist/transaction/coordination/claimMeta.js +0 -52
  402. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  403. package/dist/transaction/coordination/createClaimStream.js +0 -475
  404. package/dist/transaction/coordination/events.d.ts +0 -74
  405. package/dist/transaction/coordination/events.js +0 -7
  406. package/dist/transaction/coordination/index.d.ts +0 -19
  407. package/dist/transaction/coordination/index.js +0 -45
  408. package/dist/transaction/coordination/locator.d.ts +0 -104
  409. package/dist/transaction/coordination/locator.js +0 -102
  410. package/dist/transaction/coordination/schema.d.ts +0 -1536
  411. package/dist/transaction/coordination/schema.js +0 -1177
  412. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  413. package/dist/transaction/coordination/targetConflict.js +0 -107
  414. package/dist/transaction/coordination/trace.d.ts +0 -78
  415. package/dist/transaction/coordination/trace.js +0 -138
  416. package/dist/transaction/durableWrites.d.ts +0 -62
  417. package/dist/transaction/durableWrites.js +0 -71
  418. package/dist/transaction/environment.d.ts +0 -105
  419. package/dist/transaction/environment.js +0 -108
  420. package/dist/transaction/errorCodes.d.ts +0 -403
  421. package/dist/transaction/errorCodes.js +0 -484
  422. package/dist/transaction/errors.d.ts +0 -428
  423. package/dist/transaction/errors.js +0 -686
  424. package/dist/transaction/footprint.d.ts +0 -111
  425. package/dist/transaction/footprint.js +0 -0
  426. package/dist/transaction/index.d.ts +0 -20
  427. package/dist/transaction/index.js +0 -20
  428. package/dist/transaction/keys/index.d.ts +0 -87
  429. package/dist/transaction/keys/index.js +0 -207
  430. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  431. package/dist/transaction/log/syncDeltaRow.js +0 -95
  432. package/dist/transaction/logPosition.d.ts +0 -97
  433. package/dist/transaction/logPosition.js +0 -125
  434. package/dist/transaction/logger.d.ts +0 -16
  435. package/dist/transaction/logger.js +0 -7
  436. package/dist/transaction/observability.d.ts +0 -53
  437. package/dist/transaction/observability.js +0 -19
  438. package/dist/transaction/persistence.d.ts +0 -12
  439. package/dist/transaction/persistence.js +0 -11
  440. package/dist/transaction/plugin.d.ts +0 -285
  441. package/dist/transaction/plugin.js +0 -106
  442. package/dist/transaction/policy/types.d.ts +0 -217
  443. package/dist/transaction/policy/types.js +0 -126
  444. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  445. package/dist/transaction/resources/functionalUpdate.js +0 -87
  446. package/dist/transaction/resources/httpResources.d.ts +0 -321
  447. package/dist/transaction/resources/httpResources.js +0 -7
  448. package/dist/transaction/resources/modelOperations.d.ts +0 -427
  449. package/dist/transaction/resources/modelOperations.js +0 -12
  450. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  451. package/dist/transaction/resources/mutationOptions.js +0 -9
  452. package/dist/transaction/resources/where.d.ts +0 -101
  453. package/dist/transaction/resources/where.js +0 -115
  454. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  455. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  456. package/dist/transaction/schema/field.d.ts +0 -120
  457. package/dist/transaction/schema/field.js +0 -265
  458. package/dist/transaction/schema/fieldRef.d.ts +0 -38
  459. package/dist/transaction/schema/fieldRef.js +0 -11
  460. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  461. package/dist/transaction/schema/loadStrategy.js +0 -46
  462. package/dist/transaction/schema/model.d.ts +0 -379
  463. package/dist/transaction/schema/model.js +0 -123
  464. package/dist/transaction/schema/openapi.d.ts +0 -58
  465. package/dist/transaction/schema/openapi.js +0 -501
  466. package/dist/transaction/schema/relation.d.ts +0 -204
  467. package/dist/transaction/schema/relation.js +0 -104
  468. package/dist/transaction/schema/residency.d.ts +0 -29
  469. package/dist/transaction/schema/residency.js +0 -25
  470. package/dist/transaction/schema/roles.d.ts +0 -249
  471. package/dist/transaction/schema/roles.js +0 -230
  472. package/dist/transaction/schema/schema.d.ts +0 -351
  473. package/dist/transaction/schema/schema.js +0 -325
  474. package/dist/transaction/schema/tenancy.d.ts +0 -139
  475. package/dist/transaction/schema/tenancy.js +0 -190
  476. package/dist/transaction/transactionLayer.d.ts +0 -82
  477. package/dist/transaction/transactionLayer.js +0 -24
  478. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  479. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  480. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  481. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  482. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  483. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  484. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  485. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  486. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  487. package/dist/transaction/transport/commitFrames.js +0 -134
  488. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  489. package/dist/transaction/transport/connectionManager.js +0 -673
  490. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  491. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  492. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  493. package/dist/transaction/transport/heartbeat.js +0 -93
  494. package/dist/transaction/transport/httpClient.d.ts +0 -131
  495. package/dist/transaction/transport/httpClient.js +0 -146
  496. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  497. package/dist/transaction/transport/httpOptions.js +0 -12
  498. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  499. package/dist/transaction/transport/httpTransport.js +0 -1388
  500. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  501. package/dist/transaction/transport/networkProbe.js +0 -207
  502. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  503. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  504. package/dist/transaction/transport/wsTransport.d.ts +0 -574
  505. package/dist/transaction/transport/wsTransport.js +0 -1023
  506. package/dist/transaction/types/assertExact.d.ts +0 -17
  507. package/dist/transaction/types/assertExact.js +0 -1
  508. package/dist/transaction/types/global.d.ts +0 -107
  509. package/dist/transaction/types/global.js +0 -40
  510. package/dist/transaction/types/index.d.ts +0 -205
  511. package/dist/transaction/types/index.js +0 -56
  512. package/dist/transaction/types/modelData.d.ts +0 -10
  513. package/dist/transaction/types/modelData.js +0 -9
  514. package/dist/transaction/types/participant.d.ts +0 -20
  515. package/dist/transaction/types/participant.js +0 -10
  516. package/dist/transaction/types/streams.d.ts +0 -550
  517. package/dist/transaction/types/streams.js +0 -11
  518. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  519. package/dist/transaction/utils/asyncIterator.js +0 -135
  520. package/dist/transaction/utils/duration.d.ts +0 -50
  521. package/dist/transaction/utils/duration.js +0 -77
  522. package/dist/transaction/utils/json.d.ts +0 -57
  523. package/dist/transaction/utils/json.js +0 -276
  524. package/dist/transaction/wire/accountResponses.d.ts +0 -420
  525. package/dist/transaction/wire/accountResponses.js +0 -290
  526. package/dist/transaction/wire/auth.d.ts +0 -56
  527. package/dist/transaction/wire/auth.js +0 -63
  528. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  529. package/dist/transaction/wire/bootstrapReason.js +0 -8
  530. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  531. package/dist/transaction/wire/claimEvent.js +0 -73
  532. package/dist/transaction/wire/claims.d.ts +0 -530
  533. package/dist/transaction/wire/claims.js +0 -327
  534. package/dist/transaction/wire/commit.d.ts +0 -603
  535. package/dist/transaction/wire/commit.js +0 -321
  536. package/dist/transaction/wire/delta.d.ts +0 -250
  537. package/dist/transaction/wire/delta.js +0 -147
  538. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  539. package/dist/transaction/wire/errorEnvelope.js +0 -123
  540. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  541. package/dist/transaction/wire/feedCursor.js +0 -82
  542. package/dist/transaction/wire/feedEvent.d.ts +0 -204
  543. package/dist/transaction/wire/feedEvent.js +0 -65
  544. package/dist/transaction/wire/frames.d.ts +0 -194
  545. package/dist/transaction/wire/frames.js +0 -50
  546. package/dist/transaction/wire/inboundFrames.d.ts +0 -562
  547. package/dist/transaction/wire/inboundFrames.js +0 -116
  548. package/dist/transaction/wire/index.d.ts +0 -54
  549. package/dist/transaction/wire/index.js +0 -83
  550. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  551. package/dist/transaction/wire/listEnvelope.js +0 -42
  552. package/dist/transaction/wire/modelMutations.d.ts +0 -31
  553. package/dist/transaction/wire/modelMutations.js +0 -52
  554. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  555. package/dist/transaction/wire/modelResponses.js +0 -43
  556. package/dist/transaction/wire/modelShape.d.ts +0 -78
  557. package/dist/transaction/wire/modelShape.js +0 -74
  558. package/dist/transaction/wire/protocol.d.ts +0 -38
  559. package/dist/transaction/wire/protocol.js +0 -38
  560. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  561. package/dist/transaction/wire/protocolVersion.js +0 -83
  562. package/dist/transactions/mutations/MutationQueue.d.ts +0 -661
  563. package/dist/transactions/mutations/MutationQueue.js +0 -2807
  564. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  565. package/dist/transactions/mutations/MutationStore.js +0 -53
  566. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  567. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  568. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  569. package/dist/transactions/mutations/coalesceRules.js +0 -140
  570. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  571. package/dist/transactions/mutations/commitLatency.js +0 -130
  572. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  573. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  574. package/dist/transactions/mutations/commitPayload.d.ts +0 -165
  575. package/dist/transactions/mutations/commitPayload.js +0 -152
  576. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
  577. package/dist/transactions/mutations/deltaConfirmation.js +0 -235
  578. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  579. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  580. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  581. package/dist/transactions/mutations/optimisticApply.js +0 -65
  582. package/dist/transactions/mutations/replayValidation.d.ts +0 -187
  583. package/dist/transactions/mutations/replayValidation.js +0 -164
  584. package/dist/utils/mobxSetup.d.ts +0 -53
  585. package/dist/utils/mobxSetup.js +0 -330
  586. package/dist/views/QueryView.d.ts +0 -79
  587. package/dist/views/QueryView.js +0 -218
  588. package/dist/views/ViewRegistry.d.ts +0 -20
  589. package/dist/views/ViewRegistry.js +0 -55
  590. package/dist/views/incrementalView.d.ts +0 -45
  591. package/dist/views/incrementalView.js +0 -69
  592. package/dist/webhooks/events.d.ts +0 -43
  593. package/dist/webhooks/events.js +0 -42
  594. package/dist/webhooks/index.d.ts +0 -8
  595. package/dist/webhooks/index.js +0 -8
  596. package/dist/wire/index.d.ts +0 -1
  597. package/dist/wire/index.js +0 -8
@@ -1,115 +0,0 @@
1
- /**
2
- * The where-clause grammar carried by a filtered read.
3
- *
4
- * A `where` is a flat list of `[column, operator, value]` conditions combined
5
- * with AND. The protocol carries no model-specific logic: the server compiles a
6
- * condition against your schema, so adding a model or relation is a schema
7
- * change rather than a server change.
8
- *
9
- * The `IN` operator lets you batch a read by any column, including a foreign
10
- * key — for example, fetching every block whose `sectionId` falls in a set of ids.
11
- *
12
- * These types describe the *request*, not any local copy of the rows it returns,
13
- * so they live with the settlement core rather than the reactive consumer.
14
- */
15
- import { z } from 'zod';
16
- import { AbloValidationError } from '../errors.js';
17
- /**
18
- * The comparison operators a {@link WhereClause} may use: equality and
19
- * inequality, ordering, set membership (`IN` / `NOT IN`), null checks
20
- * (`IS` / `IS NOT`), and case-sensitive or case-insensitive pattern
21
- * matching (`LIKE`, `ILIKE`, and their negations).
22
- */
23
- export const whereOpSchema = z.enum([
24
- '=',
25
- '!=',
26
- '<',
27
- '<=',
28
- '>',
29
- '>=',
30
- 'IN',
31
- 'NOT IN',
32
- 'IS',
33
- 'IS NOT',
34
- 'LIKE',
35
- 'NOT LIKE',
36
- 'ILIKE',
37
- 'NOT ILIKE',
38
- ]);
39
- /**
40
- * How each operator binds its operand — the classification a compiler needs
41
- * before it can render or evaluate a condition: a scalar on the right, an array
42
- * to expand, or a null check with no operand at all. `LIKE_OPS` is the subset
43
- * whose operand is a pattern and therefore needs pattern validation.
44
- *
45
- * These live here, beside the operators, because every consumer of the grammar
46
- * needs the same split and there is more than one consumer: a where clause is
47
- * compiled to SQL on a hosted plane and evaluated in memory against the log on
48
- * a source plane. Two hand-maintained copies of this split meant the same
49
- * request could be accepted by one plane and rejected by the other — and the
50
- * pattern-safety set existed on only one of them.
51
- */
52
- export const WHERE_SCALAR_OPS = new Set([
53
- '=',
54
- '!=',
55
- '<',
56
- '<=',
57
- '>',
58
- '>=',
59
- 'LIKE',
60
- 'NOT LIKE',
61
- 'ILIKE',
62
- 'NOT ILIKE',
63
- ]);
64
- export const WHERE_ARRAY_OPS = new Set(['IN', 'NOT IN']);
65
- export const WHERE_NULL_OPS = new Set(['IS', 'IS NOT']);
66
- export const WHERE_LIKE_OPS = new Set([
67
- 'LIKE',
68
- 'NOT LIKE',
69
- 'ILIKE',
70
- 'NOT ILIKE',
71
- ]);
72
- /**
73
- * Does this operator accept this operand? The rule the sets above imply, stated
74
- * once and thrown once.
75
- *
76
- * The sets were collapsed here because two copies of the split let one plane
77
- * accept a request the other refused. The check that consumes them stayed
78
- * duplicated — the SQL compiler and the log-plane evaluator each carried their
79
- * own arity tests and their own wording — which leaves the same gap one step
80
- * further along: relax `IN` in one evaluator and a request succeeds against a
81
- * hosted plane and fails against a connected one, with no test in a position to
82
- * notice.
83
- *
84
- * Returns the classification the caller needs next, so the check and the branch
85
- * are the same statement rather than two that can disagree.
86
- */
87
- export function classifyWhereOperand(op, value) {
88
- if (WHERE_NULL_OPS.has(op)) {
89
- if (value !== null) {
90
- throw new AbloValidationError(`${op} only supports null RHS`, {
91
- code: 'query_unsupported_operator',
92
- });
93
- }
94
- return 'null';
95
- }
96
- if (WHERE_ARRAY_OPS.has(op)) {
97
- if (!Array.isArray(value)) {
98
- throw new AbloValidationError(`${op} requires an array RHS`, {
99
- code: 'query_unsupported_operator',
100
- });
101
- }
102
- return 'array';
103
- }
104
- if (WHERE_SCALAR_OPS.has(op)) {
105
- if (Array.isArray(value)) {
106
- throw new AbloValidationError(`${op} requires a scalar RHS`, {
107
- code: 'query_unsupported_operator',
108
- });
109
- }
110
- return 'scalar';
111
- }
112
- throw new AbloValidationError(`unsupported operator: ${op}`, {
113
- code: 'query_unsupported_operator',
114
- });
115
- }
@@ -1,47 +0,0 @@
1
- /**
2
- * The Zod schema for write options — the settings accepted by every write
3
- * entry point, including `ablo.<model>.create/update/delete`, `commits.create`,
4
- * and the HTTP write routes. Each of those boundaries validates against this
5
- * one schema, so a caller who passes, say, `onStale: 'rejct'` fails right away
6
- * with a typed {@link AbloValidationError} at the call site instead of silently
7
- * or with a 400 from the server.
8
- *
9
- * The schema is the runtime counterpart of the {@link MutationOptions}
10
- * interface. A compile-time check at the bottom of this file asserts that the
11
- * two describe the same shape, so they cannot drift apart.
12
- *
13
- * Validation only inspects; it never transforms. Callers keep the exact options
14
- * object they passed in. This matters because the `claim` field can hold a live
15
- * claim handle whose `release` and `revoke` functions must survive, so the code
16
- * asserts the shape rather than replacing the value with a parsed copy.
17
- */
18
- import { z } from 'zod';
19
- import { onStaleModeSchema } from '../coordination/schema.js';
20
- export { onStaleModeSchema };
21
- export declare const writeOptionsSchema: z.ZodObject<{
22
- idempotencyKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
23
- label: z.ZodOptional<z.ZodString>;
24
- wait: z.ZodOptional<z.ZodEnum<{
25
- queued: "queued";
26
- confirmed: "confirmed";
27
- }>>;
28
- readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
29
- onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
30
- reject: "reject";
31
- overwrite: "overwrite";
32
- notify: "notify";
33
- }>>>;
34
- fenceToken: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
35
- claim: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
36
- id: z.ZodString;
37
- }, z.core.$loose>]>>>;
38
- }, z.core.$strip>;
39
- export type WriteOptionsInput = z.infer<typeof writeOptionsSchema>;
40
- /**
41
- * Validates a write-options object against {@link writeOptionsSchema}. On
42
- * failure it throws a typed {@link AbloValidationError} — with
43
- * `code: 'write_options_invalid'` and a `param` pointing at the offending
44
- * field — and on success returns nothing, leaving the caller's original object
45
- * untouched. A `null` or `undefined` value passes.
46
- */
47
- export declare function assertWriteOptions(value: unknown, context?: string): void;
@@ -1,73 +0,0 @@
1
- /**
2
- * The Zod schema for write options — the settings accepted by every write
3
- * entry point, including `ablo.<model>.create/update/delete`, `commits.create`,
4
- * and the HTTP write routes. Each of those boundaries validates against this
5
- * one schema, so a caller who passes, say, `onStale: 'rejct'` fails right away
6
- * with a typed {@link AbloValidationError} at the call site instead of silently
7
- * or with a 400 from the server.
8
- *
9
- * The schema is the runtime counterpart of the {@link MutationOptions}
10
- * interface. A compile-time check at the bottom of this file asserts that the
11
- * two describe the same shape, so they cannot drift apart.
12
- *
13
- * Validation only inspects; it never transforms. Callers keep the exact options
14
- * object they passed in. This matters because the `claim` field can hold a live
15
- * claim handle whose `release` and `revoke` functions must survive, so the code
16
- * asserts the shape rather than replacing the value with a parsed copy.
17
- */
18
- import { z } from 'zod';
19
- import { AbloValidationError } from '../errors.js';
20
- import { commitWaitSchema } from '../wire/commit.js';
21
- import { onStaleModeSchema } from '../coordination/schema.js';
22
- // Re-exported, not redeclared. `coordination/schema.ts` owns this enum — it is
23
- // what the wire schemas and the server validate against — while the published
24
- // SDK barrel exports the name from this module. Declaring it twice put a second
25
- // object behind the public export that agreed with the canonical one only by
26
- // both happening to list the same three strings.
27
- export { onStaleModeSchema };
28
- export const writeOptionsSchema = z.object({
29
- /** Idempotency key the server records in `mutation_log` to make retries
30
- * safe; `null` opts out of that protection. */
31
- idempotencyKey: z.string().min(1).max(255).nullish(),
32
- /** Human-readable audit tag, persisted to `mutation_log.label`. */
33
- label: z.string().max(255).optional(),
34
- /** Resolve when queued locally (default) or once the server confirms. */
35
- wait: commitWaitSchema.optional(),
36
- /** Stale guard: the sync watermark the caller's reasoning was based on. */
37
- readAt: z.number().int().nonnegative().nullish(),
38
- /** What the server does when the target moved past `readAt`. */
39
- onStale: onStaleModeSchema.nullish(),
40
- /** The held claim's fencing token (Option B), sourced from the claim handle
41
- * rather than set by hand; the server validates it against the entity's
42
- * high-water. Kept in the schema so it stays aligned with `MutationOptions`
43
- * (the drift guard below) and a malformed token is rejected at the boundary. */
44
- fenceToken: z.number().nullish(),
45
- /** The claim this write belongs to — either a claim id, or a live claim
46
- * handle whose `release`/`revoke` functions are preserved untouched. */
47
- claim: z.union([z.string(), z.looseObject({ id: z.string() })]).nullish(),
48
- });
49
- /**
50
- * Validates a write-options object against {@link writeOptionsSchema}. On
51
- * failure it throws a typed {@link AbloValidationError} — with
52
- * `code: 'write_options_invalid'` and a `param` pointing at the offending
53
- * field — and on success returns nothing, leaving the caller's original object
54
- * untouched. A `null` or `undefined` value passes.
55
- */
56
- export function assertWriteOptions(value, context) {
57
- if (value == null)
58
- return;
59
- const result = writeOptionsSchema.safeParse(value);
60
- if (result.success)
61
- return;
62
- const issue = result.error.issues[0];
63
- const path = issue?.path.map(String).join('.') ?? '';
64
- throw new AbloValidationError(`Invalid write options${context ? ` on \`${context}\`` : ''}${path ? ` at \`${path}\`` : ''}: ${issue?.message ?? 'failed validation'}.`, {
65
- code: 'write_options_invalid',
66
- ...(path ? { param: path } : {}),
67
- });
68
- }
69
- const _writeOptionsContractInSync = [
70
- true,
71
- true,
72
- ];
73
- void _writeOptionsContractInSync;
@@ -1,120 +0,0 @@
1
- /**
2
- * Field builders for schema definitions. Each helper — {@link field}.string(),
3
- * .number(), .enum(), and so on — returns an ordinary Zod schema with a little
4
- * sync-engine metadata attached (its type tag and whether it is indexed) plus a
5
- * couple of chainable methods. The metadata is tucked into the schema's description
6
- * as a JSON string so it survives `.optional()`, `.nullable()`, and `.default()`
7
- * chaining, and {@link resolveFieldMeta} reads it back out as a {@link FieldMeta}.
8
- *
9
- * Usage:
10
- * import { field } from '@abloatai/ablo/schema';
11
- *
12
- * const tasks = model({
13
- * title: field.string(),
14
- * projectId: field.string().indexed(), // fluent chain
15
- * priority: field.number().optional(),
16
- * status: field.enum(['todo', 'doing', 'done']),
17
- * });
18
- *
19
- * Or use Zod directly (no metadata, but still works):
20
- * import { z } from 'zod';
21
- *
22
- * const tasks = model({
23
- * title: z.string(),
24
- * });
25
- */
26
- import { z } from 'zod';
27
- /**
28
- * The sync-engine metadata describing one field, available at runtime through a
29
- * model's `fields` map. The {@link field} builders attach it, and the migration
30
- * planner, type generator, and OpenAPI generator all read it.
31
- *
32
- * Declared in `wire/modelShape.ts` and inferred here, not restated: this record
33
- * crosses the wire twice — serialized into the pushed artifact, and reported
34
- * back by `GET /api/schema` — so a second declaration would be a copy that
35
- * drifts in whichever direction nobody is looking.
36
- */
37
- export type { FieldMeta } from '../wire/modelShape.js';
38
- import type { FieldMeta } from '../wire/modelShape.js';
39
- /**
40
- * Extract FieldMeta from a Zod schema. Returns null if no sync-engine
41
- * metadata is attached (e.g., raw `z.string()` usage).
42
- *
43
- * Walks through `.optional()` and `.nullable()` wrappers to find the
44
- * underlying description.
45
- */
46
- export declare function getFieldMeta(schema: z.ZodType): FieldMeta | null;
47
- /**
48
- * Infers a {@link FieldMeta} from a plain Zod schema that carries no field-builder
49
- * metadata — for example a bare `z.string()`. It unwraps `.optional()`,
50
- * `.nullable()`, and `.default()` to reach the inner type, then maps that Zod type
51
- * to a sync-engine type tag. Most callers should use {@link resolveFieldMeta}
52
- * instead, which tries the attached metadata first and falls back to this.
53
- */
54
- export declare function inferFieldMetaFromZod(schema: z.ZodType): FieldMeta;
55
- /**
56
- * Resolves a {@link FieldMeta} for any Zod schema, whether it was built with a
57
- * {@link field} builder (which attaches metadata) or with plain Zod (which needs
58
- * inference). This is the single entry point for "given a Zod field, tell me its
59
- * sync-engine type tag and whether it is optional"; the model and query builders use
60
- * it to populate their field maps, and the serializer reads those maps.
61
- *
62
- * It always returns a value and never returns null. A Zod type it does not recognize
63
- * falls through to the `string` tag by design.
64
- */
65
- export declare function resolveFieldMeta(schema: z.ZodType): FieldMeta;
66
- /** A Zod schema returned by a {@link field} builder — the underlying Zod type plus
67
- * two chainable methods: `indexed()` marks the field for a database index, and
68
- * `from(column)` overrides the physical column name it maps to. */
69
- export type FieldBuilder<T extends z.ZodType> = T & {
70
- indexed(): FieldBuilder<T>;
71
- from(column: string): FieldBuilder<T>;
72
- };
73
- export declare const field: {
74
- /** Defines a text field. */
75
- readonly string: () => FieldBuilder<z.ZodString>;
76
- /** Defines a numeric field. */
77
- readonly number: () => FieldBuilder<z.ZodNumber>;
78
- /** Defines a true/false field. */
79
- readonly boolean: () => FieldBuilder<z.ZodBoolean>;
80
- /** Defines a timestamp field, represented as a JavaScript `Date`. */
81
- readonly date: () => FieldBuilder<z.ZodDate>;
82
- /** Defines a field constrained to a fixed set of string values. */
83
- readonly enum: <const T extends readonly [string, ...string[]]>(values: T) => FieldBuilder<z.ZodEnum<{ [k_1 in T[number]]: k_1; } extends infer T_1 ? { [k in keyof T_1]: T_1[k]; } : never>>;
84
- /**
85
- * Defines a JSON field, with three call shapes:
86
- *
87
- * ```ts
88
- * field.json() // unknown JSON blob
89
- * field.json(z.array(z.string())) // typed JSON with Zod schema
90
- * field.json({ icon: z.string().default('default') }) // typed sub-properties with defaults
91
- * ```
92
- *
93
- * The third form is especially handy for metadata fields. It wraps the plain
94
- * object in `z.object()` automatically, and the model runtime adds a
95
- * `${field}Json` getter that parses the JSON string on read, applies the Zod
96
- * defaults, and caches the result.
97
- *
98
- * Example:
99
- * ```ts
100
- * const reports = model({
101
- * metadata: field.json({
102
- * icon: z.string().default('report'),
103
- * color: z.string().default('#F59E0B'),
104
- * summary: z.string().optional(),
105
- * }),
106
- * });
107
- *
108
- * // At runtime:
109
- * report.metadata // raw JSON string (unchanged)
110
- * report.metadataJson // { icon: 'report', color: '#F59E0B', summary: undefined }
111
- * report.metadataJson.icon // 'report' (typed, with default)
112
- * ```
113
- */
114
- readonly json: <T extends z.ZodType = z.ZodUnknown>(schemaOrShape?: T | z.ZodRawShape) => FieldBuilder<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
115
- /** Defines an indexed text field — shorthand for `field.string().indexed()`. */
116
- readonly id: () => FieldBuilder<z.ZodString>;
117
- };
118
- /** Marks a Zod schema as indexed so lookups on it use a database index. This is the
119
- * standalone-function form of the `.indexed()` chain method. */
120
- export declare function indexed<T extends z.ZodType>(schema: T): T;
@@ -1,265 +0,0 @@
1
- /**
2
- * Field builders for schema definitions. Each helper — {@link field}.string(),
3
- * .number(), .enum(), and so on — returns an ordinary Zod schema with a little
4
- * sync-engine metadata attached (its type tag and whether it is indexed) plus a
5
- * couple of chainable methods. The metadata is tucked into the schema's description
6
- * as a JSON string so it survives `.optional()`, `.nullable()`, and `.default()`
7
- * chaining, and {@link resolveFieldMeta} reads it back out as a {@link FieldMeta}.
8
- *
9
- * Usage:
10
- * import { field } from '@abloatai/ablo/schema';
11
- *
12
- * const tasks = model({
13
- * title: field.string(),
14
- * projectId: field.string().indexed(), // fluent chain
15
- * priority: field.number().optional(),
16
- * status: field.enum(['todo', 'doing', 'done']),
17
- * });
18
- *
19
- * Or use Zod directly (no metadata, but still works):
20
- * import { z } from 'zod';
21
- *
22
- * const tasks = model({
23
- * title: z.string(),
24
- * });
25
- */
26
- import { z } from 'zod';
27
- import { AbloValidationError } from '../errors.js';
28
- // ── Helpers ───────────────────────────────────────────────────────────────
29
- /** Distinguish a Zod schema from a plain object shape (ZodRawShape). */
30
- function isZodSchema(value) {
31
- return (typeof value === 'object' &&
32
- value !== null &&
33
- '_def' in value &&
34
- typeof value._def === 'object');
35
- }
36
- // ── Metadata encoding ─────────────────────────────────────────────────────
37
- //
38
- // We stash metadata in `.describe('__sync:{json}')` so it rides along with
39
- // the Zod schema through `.optional()`, `.nullable()`, etc. At schema-build
40
- // time we parse it back out into structured FieldMeta.
41
- const META_PREFIX = '__sync:';
42
- function encodeMeta(meta) {
43
- return META_PREFIX + JSON.stringify(meta);
44
- }
45
- function decodeMeta(description) {
46
- if (!description?.startsWith(META_PREFIX))
47
- return null;
48
- try {
49
- return JSON.parse(description.slice(META_PREFIX.length));
50
- }
51
- catch {
52
- return null;
53
- }
54
- }
55
- /**
56
- * Extract FieldMeta from a Zod schema. Returns null if no sync-engine
57
- * metadata is attached (e.g., raw `z.string()` usage).
58
- *
59
- * Walks through `.optional()` and `.nullable()` wrappers to find the
60
- * underlying description.
61
- */
62
- export function getFieldMeta(schema) {
63
- let current = schema;
64
- let isOptional = false;
65
- // Unwrap optional / nullable / default to reach the inner type
66
- // (these are the wrappers that preserve .describe() but may hide it).
67
- // `instanceof` keeps the narrowing typed; no `_def` digging.
68
- const MAX_UNWRAP = 5;
69
- for (let i = 0; i < MAX_UNWRAP; i++) {
70
- if (current instanceof z.ZodOptional) {
71
- isOptional = true;
72
- current = current.unwrap();
73
- continue;
74
- }
75
- if (current instanceof z.ZodNullable) {
76
- isOptional = true;
77
- current = current.unwrap();
78
- continue;
79
- }
80
- if (current instanceof z.ZodDefault) {
81
- // .removeDefault() — v4 deprecates in favor of .unwrap() but
82
- // the installed @types only expose removeDefault on ZodDefault.
83
- current = current.unwrap();
84
- continue;
85
- }
86
- break;
87
- }
88
- // The description lives on the innermost schema we reached.
89
- const description = current.description ?? schema.description;
90
- const base = decodeMeta(description);
91
- if (!base)
92
- return null;
93
- return { ...base, isOptional };
94
- }
95
- /**
96
- * Infers a {@link FieldMeta} from a plain Zod schema that carries no field-builder
97
- * metadata — for example a bare `z.string()`. It unwraps `.optional()`,
98
- * `.nullable()`, and `.default()` to reach the inner type, then maps that Zod type
99
- * to a sync-engine type tag. Most callers should use {@link resolveFieldMeta}
100
- * instead, which tries the attached metadata first and falls back to this.
101
- */
102
- export function inferFieldMetaFromZod(schema) {
103
- let current = schema;
104
- let isOptional = false;
105
- const MAX_UNWRAP = 5;
106
- for (let i = 0; i < MAX_UNWRAP; i++) {
107
- if (current instanceof z.ZodOptional || current instanceof z.ZodNullable) {
108
- isOptional = true;
109
- current = current.unwrap();
110
- continue;
111
- }
112
- if (current instanceof z.ZodDefault) {
113
- current = current.unwrap();
114
- continue;
115
- }
116
- break;
117
- }
118
- let type = 'string';
119
- let enumValues;
120
- if (current instanceof z.ZodString) {
121
- type = 'string';
122
- }
123
- else if (current instanceof z.ZodNumber) {
124
- type = 'number';
125
- }
126
- else if (current instanceof z.ZodBoolean) {
127
- type = 'boolean';
128
- }
129
- else if (current instanceof z.ZodDate) {
130
- type = 'date';
131
- }
132
- else if (current instanceof z.ZodEnum) {
133
- type = 'enum';
134
- // ZodEnum.options is the public v4 accessor for enum values.
135
- enumValues = current.options;
136
- }
137
- else if (current instanceof z.ZodObject ||
138
- current instanceof z.ZodArray ||
139
- current instanceof z.ZodRecord ||
140
- current instanceof z.ZodUnion ||
141
- current instanceof z.ZodUnknown ||
142
- // `z.custom<T>()` is opaque — its shape cannot be inspected — so it is treated
143
- // as a JSON blob rather than falling through to the `'string'` default. The type
144
- // tag drives how the runtime observes the field, and an opaque custom value
145
- // should be tracked by reference rather than deeply.
146
- current instanceof z.ZodCustom) {
147
- type = 'json';
148
- }
149
- return { type, isOptional, isIndexed: false, enumValues };
150
- }
151
- /**
152
- * Resolves a {@link FieldMeta} for any Zod schema, whether it was built with a
153
- * {@link field} builder (which attaches metadata) or with plain Zod (which needs
154
- * inference). This is the single entry point for "given a Zod field, tell me its
155
- * sync-engine type tag and whether it is optional"; the model and query builders use
156
- * it to populate their field maps, and the serializer reads those maps.
157
- *
158
- * It always returns a value and never returns null. A Zod type it does not recognize
159
- * falls through to the `string` tag by design.
160
- */
161
- export function resolveFieldMeta(schema) {
162
- const attached = getFieldMeta(schema);
163
- if (attached)
164
- return attached;
165
- return inferFieldMetaFromZod(schema);
166
- }
167
- function assertColumnName(column) {
168
- if (!/^[a-zA-Z_][a-zA-Z0-9_]{0,62}$/.test(column)) {
169
- throw new AbloValidationError(`field.from(): invalid column identifier ${JSON.stringify(column)}`, { code: 'schema_definition_invalid' });
170
- }
171
- }
172
- /** Add sync-engine chain methods to a Zod schema without disturbing its type. */
173
- function withFieldMethods(schema, meta) {
174
- const described = schema.describe(encodeMeta(meta));
175
- described.indexed = () => withFieldMethods(schema, { ...meta, isIndexed: true });
176
- described.from = (column) => {
177
- assertColumnName(column);
178
- return withFieldMethods(schema, { ...meta, column });
179
- };
180
- return described;
181
- }
182
- function buildField(schema, baseMeta) {
183
- return withFieldMethods(schema, { ...baseMeta, isIndexed: false });
184
- }
185
- export const field = {
186
- /** Defines a text field. */
187
- string() {
188
- return buildField(z.string(), { type: 'string' });
189
- },
190
- /** Defines a numeric field. */
191
- number() {
192
- return buildField(z.number(), { type: 'number' });
193
- },
194
- /** Defines a true/false field. */
195
- boolean() {
196
- return buildField(z.boolean(), { type: 'boolean' });
197
- },
198
- /** Defines a timestamp field, represented as a JavaScript `Date`. */
199
- date() {
200
- return buildField(z.date(), { type: 'date' });
201
- },
202
- /** Defines a field constrained to a fixed set of string values. */
203
- enum(values) {
204
- return buildField(z.enum(values), { type: 'enum', enumValues: values });
205
- },
206
- /**
207
- * Defines a JSON field, with three call shapes:
208
- *
209
- * ```ts
210
- * field.json() // unknown JSON blob
211
- * field.json(z.array(z.string())) // typed JSON with Zod schema
212
- * field.json({ icon: z.string().default('default') }) // typed sub-properties with defaults
213
- * ```
214
- *
215
- * The third form is especially handy for metadata fields. It wraps the plain
216
- * object in `z.object()` automatically, and the model runtime adds a
217
- * `${field}Json` getter that parses the JSON string on read, applies the Zod
218
- * defaults, and caches the result.
219
- *
220
- * Example:
221
- * ```ts
222
- * const reports = model({
223
- * metadata: field.json({
224
- * icon: z.string().default('report'),
225
- * color: z.string().default('#F59E0B'),
226
- * summary: z.string().optional(),
227
- * }),
228
- * });
229
- *
230
- * // At runtime:
231
- * report.metadata // raw JSON string (unchanged)
232
- * report.metadataJson // { icon: 'report', color: '#F59E0B', summary: undefined }
233
- * report.metadataJson.icon // 'report' (typed, with default)
234
- * ```
235
- */
236
- json(schemaOrShape) {
237
- let inner;
238
- if (!schemaOrShape) {
239
- inner = z.unknown();
240
- }
241
- else if (isZodSchema(schemaOrShape)) {
242
- inner = schemaOrShape;
243
- }
244
- else {
245
- // Plain object shape → wrap in z.object() for the sub-property pattern
246
- inner = z.object(schemaOrShape);
247
- }
248
- return buildField(inner, { type: 'json' });
249
- },
250
- /** Defines an indexed text field — shorthand for `field.string().indexed()`. */
251
- id() {
252
- return field.string().indexed();
253
- },
254
- };
255
- // ── Function form ────────────────────────────────────────────────────────
256
- /** Marks a Zod schema as indexed so lookups on it use a database index. This is the
257
- * standalone-function form of the `.indexed()` chain method. */
258
- export function indexed(schema) {
259
- // Try to preserve existing metadata type tag if present.
260
- const meta = decodeMeta(schema.description);
261
- const newMeta = meta
262
- ? { ...meta, isIndexed: true }
263
- : { type: 'string', isIndexed: true };
264
- return schema.describe(encodeMeta(newMeta));
265
- }
@@ -1,38 +0,0 @@
1
- /**
2
- * A reference to one field of one model — the field as a value rather than as
3
- * a quoted name.
4
- *
5
- * A model is declared as Zod schemas keyed by name, so a field's name lives on
6
- * the object key and never on the value: `model({ status: z.enum([...]) })`
7
- * gives you nothing to point at, and every surface that needs to name a field
8
- * has had to quote it. `fields: ['titel']` then compiles, is granted, excludes
9
- * nobody, and leaves the write of `title` unguarded — the conflict rule
10
- * compares names as opaque strings, so an invented one matches no other claim
11
- * and nothing reports it.
12
- *
13
- * {@link Schema.fields} carries one of these per field, stamped from the key
14
- * `defineSchema` is already holding. Referencing a field that does not exist
15
- * stops compiling, and renaming one is a compile error at every use rather than
16
- * a claim that quietly stops matching.
17
- *
18
- * An object rather than a branded string, for the reason `ClaimPart` is one: a
19
- * brand makes a concrete schema's claim params mutually unassignable with the
20
- * erased `SchemaRecord` view, and the react context boundary erases and
21
- * restores exactly that way. Objects stay pairwise comparable across it, which
22
- * a union of literal keys does not — function parameters are contravariant, so
23
- * a claim accepting `'title' | 'status'` is not assignable to one accepting
24
- * `string`.
25
- *
26
- * `model` rides along so a reference carries where it came from. Claiming
27
- * `users.email` through `ablo.tasks` is a mistake nothing can currently see.
28
- */
29
- export interface FieldRef {
30
- /** The schema key of the model this field belongs to. */
31
- readonly model: string;
32
- /** The field's own name — the key it was declared under. */
33
- readonly field: string;
34
- }
35
- /** Whether a value is a {@link FieldRef}. */
36
- export declare function isFieldRef(value: unknown): value is FieldRef;
37
- /** Build the reference for one declared field. */
38
- export declare function fieldRef(model: string, field: string): FieldRef;
@@ -1,11 +0,0 @@
1
- /** Whether a value is a {@link FieldRef}. */
2
- export function isFieldRef(value) {
3
- return (typeof value === 'object' &&
4
- value !== null &&
5
- typeof value.field === 'string' &&
6
- typeof value.model === 'string');
7
- }
8
- /** Build the reference for one declared field. */
9
- export function fieldRef(model, field) {
10
- return { model, field };
11
- }