@abloatai/transaction 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 (723) hide show
  1. package/CONVENTIONS.md +83 -0
  2. package/README.md +48 -0
  3. package/dist/ablo.d.ts +90 -0
  4. package/dist/ablo.d.ts.map +1 -0
  5. package/dist/ablo.js +34 -0
  6. package/dist/ablo.js.map +1 -0
  7. package/dist/ai-sdk/coordinatedTool.d.ts +123 -0
  8. package/dist/ai-sdk/coordinatedTool.d.ts.map +1 -0
  9. package/dist/ai-sdk/coordinatedTool.js +135 -0
  10. package/dist/ai-sdk/coordinatedTool.js.map +1 -0
  11. package/dist/ai-sdk/index.d.ts +2 -0
  12. package/dist/ai-sdk/index.d.ts.map +1 -0
  13. package/dist/ai-sdk/index.js +2 -0
  14. package/dist/ai-sdk/index.js.map +1 -0
  15. package/dist/auth/apiKey.d.ts +154 -0
  16. package/dist/auth/apiKey.d.ts.map +1 -0
  17. package/dist/auth/apiKey.js +408 -0
  18. package/dist/auth/apiKey.js.map +1 -0
  19. package/dist/auth/bootstrapScope.d.ts +16 -0
  20. package/dist/auth/bootstrapScope.d.ts.map +1 -0
  21. package/dist/auth/bootstrapScope.js +2 -0
  22. package/dist/auth/bootstrapScope.js.map +1 -0
  23. package/dist/auth/browserCredentialSafety.d.ts +7 -0
  24. package/dist/auth/browserCredentialSafety.d.ts.map +1 -0
  25. package/dist/auth/browserCredentialSafety.js +29 -0
  26. package/dist/auth/browserCredentialSafety.js.map +1 -0
  27. package/dist/auth/capability.d.ts +241 -0
  28. package/dist/auth/capability.d.ts.map +1 -0
  29. package/dist/auth/capability.js +253 -0
  30. package/dist/auth/capability.js.map +1 -0
  31. package/dist/auth/capabilityLifecycle.d.ts +47 -0
  32. package/dist/auth/capabilityLifecycle.d.ts.map +1 -0
  33. package/dist/auth/capabilityLifecycle.js +108 -0
  34. package/dist/auth/capabilityLifecycle.js.map +1 -0
  35. package/dist/auth/credentialEndpoint.d.ts +10 -0
  36. package/dist/auth/credentialEndpoint.d.ts.map +1 -0
  37. package/dist/auth/credentialEndpoint.js +58 -0
  38. package/dist/auth/credentialEndpoint.js.map +1 -0
  39. package/dist/auth/credentialEndpointProtocol.d.ts +24 -0
  40. package/dist/auth/credentialEndpointProtocol.d.ts.map +1 -0
  41. package/dist/auth/credentialEndpointProtocol.js +34 -0
  42. package/dist/auth/credentialEndpointProtocol.js.map +1 -0
  43. package/dist/auth/credentialKind.d.ts +4 -0
  44. package/dist/auth/credentialKind.d.ts.map +1 -0
  45. package/dist/auth/credentialKind.js +15 -0
  46. package/dist/auth/credentialKind.js.map +1 -0
  47. package/dist/auth/credentialPolicy.d.ts +141 -0
  48. package/dist/auth/credentialPolicy.d.ts.map +1 -0
  49. package/dist/auth/credentialPolicy.js +113 -0
  50. package/dist/auth/credentialPolicy.js.map +1 -0
  51. package/dist/auth/credentialResult.d.ts +7 -0
  52. package/dist/auth/credentialResult.d.ts.map +1 -0
  53. package/dist/auth/credentialResult.js +9 -0
  54. package/dist/auth/credentialResult.js.map +1 -0
  55. package/dist/auth/credentialSource.d.ts +31 -0
  56. package/dist/auth/credentialSource.d.ts.map +1 -0
  57. package/dist/auth/credentialSource.js +56 -0
  58. package/dist/auth/credentialSource.js.map +1 -0
  59. package/dist/auth/hostedEndpoints.d.ts +22 -0
  60. package/dist/auth/hostedEndpoints.d.ts.map +1 -0
  61. package/dist/auth/hostedEndpoints.js +22 -0
  62. package/dist/auth/hostedEndpoints.js.map +1 -0
  63. package/dist/auth/identity.d.ts +62 -0
  64. package/dist/auth/identity.d.ts.map +1 -0
  65. package/dist/auth/identity.js +224 -0
  66. package/dist/auth/identity.js.map +1 -0
  67. package/dist/auth/index.d.ts +189 -0
  68. package/dist/auth/index.d.ts.map +1 -0
  69. package/dist/auth/index.js +312 -0
  70. package/dist/auth/index.js.map +1 -0
  71. package/dist/auth/schemas.d.ts +41 -0
  72. package/dist/auth/schemas.d.ts.map +1 -0
  73. package/dist/auth/schemas.js +69 -0
  74. package/dist/auth/schemas.js.map +1 -0
  75. package/dist/auth/sessionMint.d.ts +29 -0
  76. package/dist/auth/sessionMint.d.ts.map +1 -0
  77. package/dist/auth/sessionMint.js +92 -0
  78. package/dist/auth/sessionMint.js.map +1 -0
  79. package/dist/auth/token.d.ts +4 -0
  80. package/dist/auth/token.d.ts.map +1 -0
  81. package/dist/auth/token.js +4 -0
  82. package/dist/auth/token.js.map +1 -0
  83. package/dist/batching/index.d.ts +56 -0
  84. package/dist/batching/index.d.ts.map +1 -0
  85. package/dist/batching/index.js +148 -0
  86. package/dist/batching/index.js.map +1 -0
  87. package/dist/coordination/awaitClaimGrant.d.ts +57 -0
  88. package/dist/coordination/awaitClaimGrant.d.ts.map +1 -0
  89. package/dist/coordination/awaitClaimGrant.js +138 -0
  90. package/dist/coordination/awaitClaimGrant.js.map +1 -0
  91. package/dist/coordination/claimHeartbeatLoop.d.ts +85 -0
  92. package/dist/coordination/claimHeartbeatLoop.d.ts.map +1 -0
  93. package/dist/coordination/claimHeartbeatLoop.js +109 -0
  94. package/dist/coordination/claimHeartbeatLoop.js.map +1 -0
  95. package/dist/coordination/claimMeta.d.ts +50 -0
  96. package/dist/coordination/claimMeta.d.ts.map +1 -0
  97. package/dist/coordination/claimMeta.js +53 -0
  98. package/dist/coordination/claimMeta.js.map +1 -0
  99. package/dist/coordination/events.d.ts +75 -0
  100. package/dist/coordination/events.d.ts.map +1 -0
  101. package/dist/coordination/events.js +8 -0
  102. package/dist/coordination/events.js.map +1 -0
  103. package/dist/coordination/index.d.ts +20 -0
  104. package/dist/coordination/index.d.ts.map +1 -0
  105. package/dist/coordination/index.js +46 -0
  106. package/dist/coordination/index.js.map +1 -0
  107. package/dist/coordination/locator.d.ts +106 -0
  108. package/dist/coordination/locator.d.ts.map +1 -0
  109. package/dist/coordination/locator.js +110 -0
  110. package/dist/coordination/locator.js.map +1 -0
  111. package/dist/coordination/schema.d.ts +1332 -0
  112. package/dist/coordination/schema.d.ts.map +1 -0
  113. package/dist/coordination/schema.js +1137 -0
  114. package/dist/coordination/schema.js.map +1 -0
  115. package/dist/coordination/targetConflict.d.ts +3 -0
  116. package/dist/coordination/targetConflict.d.ts.map +1 -0
  117. package/dist/coordination/targetConflict.js +74 -0
  118. package/dist/coordination/targetConflict.js.map +1 -0
  119. package/dist/coordination/trace.d.ts +79 -0
  120. package/dist/coordination/trace.d.ts.map +1 -0
  121. package/dist/coordination/trace.js +139 -0
  122. package/dist/coordination/trace.js.map +1 -0
  123. package/dist/docs/catalog.d.ts +73 -0
  124. package/dist/docs/catalog.d.ts.map +1 -0
  125. package/dist/docs/catalog.js +231 -0
  126. package/dist/docs/catalog.js.map +1 -0
  127. package/dist/docs/index.d.ts +11 -0
  128. package/dist/docs/index.d.ts.map +1 -0
  129. package/dist/docs/index.js +11 -0
  130. package/dist/docs/index.js.map +1 -0
  131. package/dist/durableWrites.d.ts +63 -0
  132. package/dist/durableWrites.d.ts.map +1 -0
  133. package/dist/durableWrites.js +72 -0
  134. package/dist/durableWrites.js.map +1 -0
  135. package/dist/environment.d.ts +106 -0
  136. package/dist/environment.d.ts.map +1 -0
  137. package/dist/environment.js +109 -0
  138. package/dist/environment.js.map +1 -0
  139. package/dist/errorCodes.d.ts +411 -0
  140. package/dist/errorCodes.d.ts.map +1 -0
  141. package/dist/errorCodes.js +500 -0
  142. package/dist/errorCodes.js.map +1 -0
  143. package/dist/errors.d.ts +429 -0
  144. package/dist/errors.d.ts.map +1 -0
  145. package/dist/errors.js +687 -0
  146. package/dist/errors.js.map +1 -0
  147. package/dist/footprint.d.ts +112 -0
  148. package/dist/footprint.d.ts.map +1 -0
  149. package/dist/footprint.js +0 -0
  150. package/dist/footprint.js.map +1 -0
  151. package/dist/headlessClient.d.ts +10 -0
  152. package/dist/headlessClient.d.ts.map +1 -0
  153. package/dist/headlessClient.js +114 -0
  154. package/dist/headlessClient.js.map +1 -0
  155. package/dist/index.d.ts +21 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +21 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/keys/index.d.ts +88 -0
  160. package/dist/keys/index.d.ts.map +1 -0
  161. package/dist/keys/index.js +208 -0
  162. package/dist/keys/index.js.map +1 -0
  163. package/dist/log/syncDeltaRow.d.ts +159 -0
  164. package/dist/log/syncDeltaRow.d.ts.map +1 -0
  165. package/dist/log/syncDeltaRow.js +96 -0
  166. package/dist/log/syncDeltaRow.js.map +1 -0
  167. package/dist/logger.d.ts +17 -0
  168. package/dist/logger.d.ts.map +1 -0
  169. package/dist/logger.js +8 -0
  170. package/dist/logger.js.map +1 -0
  171. package/dist/observability.d.ts +54 -0
  172. package/dist/observability.d.ts.map +1 -0
  173. package/dist/observability.js +20 -0
  174. package/dist/observability.js.map +1 -0
  175. package/dist/policy/types.d.ts +218 -0
  176. package/dist/policy/types.d.ts.map +1 -0
  177. package/dist/policy/types.js +127 -0
  178. package/dist/policy/types.js.map +1 -0
  179. package/dist/resources/functionalUpdate.d.ts +80 -0
  180. package/dist/resources/functionalUpdate.d.ts.map +1 -0
  181. package/dist/resources/functionalUpdate.js +88 -0
  182. package/dist/resources/functionalUpdate.js.map +1 -0
  183. package/dist/resources/httpResources.d.ts +449 -0
  184. package/dist/resources/httpResources.d.ts.map +1 -0
  185. package/dist/resources/httpResources.js +8 -0
  186. package/dist/resources/httpResources.js.map +1 -0
  187. package/dist/resources/modelOperations.d.ts +380 -0
  188. package/dist/resources/modelOperations.d.ts.map +1 -0
  189. package/dist/resources/modelOperations.js +13 -0
  190. package/dist/resources/modelOperations.js.map +1 -0
  191. package/dist/resources/mutationOptions.d.ts +67 -0
  192. package/dist/resources/mutationOptions.d.ts.map +1 -0
  193. package/dist/resources/mutationOptions.js +10 -0
  194. package/dist/resources/mutationOptions.js.map +1 -0
  195. package/dist/resources/where.d.ts +102 -0
  196. package/dist/resources/where.d.ts.map +1 -0
  197. package/dist/resources/where.js +116 -0
  198. package/dist/resources/where.js.map +1 -0
  199. package/dist/resources/writeOptionsSchema.d.ts +48 -0
  200. package/dist/resources/writeOptionsSchema.d.ts.map +1 -0
  201. package/dist/resources/writeOptionsSchema.js +74 -0
  202. package/dist/resources/writeOptionsSchema.js.map +1 -0
  203. package/dist/schema/coordination.d.ts +113 -0
  204. package/dist/schema/coordination.d.ts.map +1 -0
  205. package/dist/schema/coordination.js +134 -0
  206. package/dist/schema/coordination.js.map +1 -0
  207. package/dist/schema/ddl.d.ts +98 -0
  208. package/dist/schema/ddl.d.ts.map +1 -0
  209. package/dist/schema/ddl.js +492 -0
  210. package/dist/schema/ddl.js.map +1 -0
  211. package/dist/schema/ddlLock.d.ts +36 -0
  212. package/dist/schema/ddlLock.d.ts.map +1 -0
  213. package/dist/schema/ddlLock.js +47 -0
  214. package/dist/schema/ddlLock.js.map +1 -0
  215. package/dist/schema/diff.d.ts +226 -0
  216. package/dist/schema/diff.d.ts.map +1 -0
  217. package/dist/schema/diff.js +290 -0
  218. package/dist/schema/diff.js.map +1 -0
  219. package/dist/schema/field.d.ts +121 -0
  220. package/dist/schema/field.d.ts.map +1 -0
  221. package/dist/schema/field.js +266 -0
  222. package/dist/schema/field.js.map +1 -0
  223. package/dist/schema/fieldRef.d.ts +58 -0
  224. package/dist/schema/fieldRef.d.ts.map +1 -0
  225. package/dist/schema/fieldRef.js +26 -0
  226. package/dist/schema/fieldRef.js.map +1 -0
  227. package/dist/schema/generate.d.ts +20 -0
  228. package/dist/schema/generate.d.ts.map +1 -0
  229. package/dist/schema/generate.js +87 -0
  230. package/dist/schema/generate.js.map +1 -0
  231. package/dist/schema/index.d.ts +43 -0
  232. package/dist/schema/index.d.ts.map +1 -0
  233. package/dist/schema/index.js +81 -0
  234. package/dist/schema/index.js.map +1 -0
  235. package/dist/schema/loadStrategy.d.ts +46 -0
  236. package/dist/schema/loadStrategy.d.ts.map +1 -0
  237. package/dist/schema/loadStrategy.js +47 -0
  238. package/dist/schema/loadStrategy.js.map +1 -0
  239. package/dist/schema/model.d.ts +380 -0
  240. package/dist/schema/model.d.ts.map +1 -0
  241. package/dist/schema/model.js +124 -0
  242. package/dist/schema/model.js.map +1 -0
  243. package/dist/schema/openapi.d.ts +59 -0
  244. package/dist/schema/openapi.d.ts.map +1 -0
  245. package/dist/schema/openapi.js +508 -0
  246. package/dist/schema/openapi.js.map +1 -0
  247. package/dist/schema/queries.d.ts +202 -0
  248. package/dist/schema/queries.d.ts.map +1 -0
  249. package/dist/schema/queries.js +144 -0
  250. package/dist/schema/queries.js.map +1 -0
  251. package/dist/schema/relation.d.ts +205 -0
  252. package/dist/schema/relation.d.ts.map +1 -0
  253. package/dist/schema/relation.js +105 -0
  254. package/dist/schema/relation.js.map +1 -0
  255. package/dist/schema/residency.d.ts +30 -0
  256. package/dist/schema/residency.d.ts.map +1 -0
  257. package/dist/schema/residency.js +26 -0
  258. package/dist/schema/residency.js.map +1 -0
  259. package/dist/schema/roles.d.ts +250 -0
  260. package/dist/schema/roles.d.ts.map +1 -0
  261. package/dist/schema/roles.js +231 -0
  262. package/dist/schema/roles.js.map +1 -0
  263. package/dist/schema/schema.d.ts +352 -0
  264. package/dist/schema/schema.d.ts.map +1 -0
  265. package/dist/schema/schema.js +326 -0
  266. package/dist/schema/schema.js.map +1 -0
  267. package/dist/schema/select.d.ts +41 -0
  268. package/dist/schema/select.d.ts.map +1 -0
  269. package/dist/schema/select.js +91 -0
  270. package/dist/schema/select.js.map +1 -0
  271. package/dist/schema/serialize.d.ts +116 -0
  272. package/dist/schema/serialize.d.ts.map +1 -0
  273. package/dist/schema/serialize.js +278 -0
  274. package/dist/schema/serialize.js.map +1 -0
  275. package/dist/schema/sugar.d.ts +110 -0
  276. package/dist/schema/sugar.d.ts.map +1 -0
  277. package/dist/schema/sugar.js +84 -0
  278. package/dist/schema/sugar.js.map +1 -0
  279. package/dist/schema/tenancy.d.ts +140 -0
  280. package/dist/schema/tenancy.d.ts.map +1 -0
  281. package/dist/schema/tenancy.js +191 -0
  282. package/dist/schema/tenancy.js.map +1 -0
  283. package/dist/server/adapter.d.ts +174 -0
  284. package/dist/server/adapter.d.ts.map +1 -0
  285. package/dist/server/adapter.js +19 -0
  286. package/dist/server/adapter.js.map +1 -0
  287. package/dist/server/commit.d.ts +108 -0
  288. package/dist/server/commit.d.ts.map +1 -0
  289. package/dist/server/commit.js +2 -0
  290. package/dist/server/commit.js.map +1 -0
  291. package/dist/server/index.d.ts +15 -0
  292. package/dist/server/index.d.ts.map +1 -0
  293. package/dist/server/index.js +3 -0
  294. package/dist/server/index.js.map +1 -0
  295. package/dist/server/readConfig.d.ts +81 -0
  296. package/dist/server/readConfig.d.ts.map +1 -0
  297. package/dist/server/readConfig.js +9 -0
  298. package/dist/server/readConfig.js.map +1 -0
  299. package/dist/server/storageMode.d.ts +24 -0
  300. package/dist/server/storageMode.d.ts.map +1 -0
  301. package/dist/server/storageMode.js +18 -0
  302. package/dist/server/storageMode.js.map +1 -0
  303. package/dist/source/adapter.d.ts +84 -0
  304. package/dist/source/adapter.d.ts.map +1 -0
  305. package/dist/source/adapter.js +25 -0
  306. package/dist/source/adapter.js.map +1 -0
  307. package/dist/source/adapters/drizzle.d.ts +49 -0
  308. package/dist/source/adapters/drizzle.d.ts.map +1 -0
  309. package/dist/source/adapters/drizzle.js +220 -0
  310. package/dist/source/adapters/drizzle.js.map +1 -0
  311. package/dist/source/adapters/kysely.d.ts +43 -0
  312. package/dist/source/adapters/kysely.d.ts.map +1 -0
  313. package/dist/source/adapters/kysely.js +206 -0
  314. package/dist/source/adapters/kysely.js.map +1 -0
  315. package/dist/source/adapters/kyselyMutationCore.d.ts +77 -0
  316. package/dist/source/adapters/kyselyMutationCore.d.ts.map +1 -0
  317. package/dist/source/adapters/kyselyMutationCore.js +126 -0
  318. package/dist/source/adapters/kyselyMutationCore.js.map +1 -0
  319. package/dist/source/adapters/memory.d.ts +14 -0
  320. package/dist/source/adapters/memory.d.ts.map +1 -0
  321. package/dist/source/adapters/memory.js +131 -0
  322. package/dist/source/adapters/memory.js.map +1 -0
  323. package/dist/source/adapters/prisma.d.ts +64 -0
  324. package/dist/source/adapters/prisma.d.ts.map +1 -0
  325. package/dist/source/adapters/prisma.js +203 -0
  326. package/dist/source/adapters/prisma.js.map +1 -0
  327. package/dist/source/conformance.d.ts +38 -0
  328. package/dist/source/conformance.d.ts.map +1 -0
  329. package/dist/source/conformance.js +216 -0
  330. package/dist/source/conformance.js.map +1 -0
  331. package/dist/source/connector.d.ts +96 -0
  332. package/dist/source/connector.d.ts.map +1 -0
  333. package/dist/source/connector.js +267 -0
  334. package/dist/source/connector.js.map +1 -0
  335. package/dist/source/connectorProtocol.d.ts +155 -0
  336. package/dist/source/connectorProtocol.d.ts.map +1 -0
  337. package/dist/source/connectorProtocol.js +164 -0
  338. package/dist/source/connectorProtocol.js.map +1 -0
  339. package/dist/source/contract.d.ts +196 -0
  340. package/dist/source/contract.d.ts.map +1 -0
  341. package/dist/source/contract.js +165 -0
  342. package/dist/source/contract.js.map +1 -0
  343. package/dist/source/drizzle.d.ts +2 -0
  344. package/dist/source/drizzle.d.ts.map +1 -0
  345. package/dist/source/drizzle.js +2 -0
  346. package/dist/source/drizzle.js.map +1 -0
  347. package/dist/source/factory.d.ts +93 -0
  348. package/dist/source/factory.d.ts.map +1 -0
  349. package/dist/source/factory.js +287 -0
  350. package/dist/source/factory.js.map +1 -0
  351. package/dist/source/idempotency.d.ts +62 -0
  352. package/dist/source/idempotency.d.ts.map +1 -0
  353. package/dist/source/idempotency.js +145 -0
  354. package/dist/source/idempotency.js.map +1 -0
  355. package/dist/source/index.d.ts +24 -0
  356. package/dist/source/index.d.ts.map +1 -0
  357. package/dist/source/index.js +29 -0
  358. package/dist/source/index.js.map +1 -0
  359. package/dist/source/kysely.d.ts +3 -0
  360. package/dist/source/kysely.d.ts.map +1 -0
  361. package/dist/source/kysely.js +3 -0
  362. package/dist/source/kysely.js.map +1 -0
  363. package/dist/source/migrations.d.ts +22 -0
  364. package/dist/source/migrations.d.ts.map +1 -0
  365. package/dist/source/migrations.js +104 -0
  366. package/dist/source/migrations.js.map +1 -0
  367. package/dist/source/next.d.ts +33 -0
  368. package/dist/source/next.d.ts.map +1 -0
  369. package/dist/source/next.js +26 -0
  370. package/dist/source/next.js.map +1 -0
  371. package/dist/source/pushQueue.d.ts +135 -0
  372. package/dist/source/pushQueue.d.ts.map +1 -0
  373. package/dist/source/pushQueue.js +257 -0
  374. package/dist/source/pushQueue.js.map +1 -0
  375. package/dist/source/signing.d.ts +93 -0
  376. package/dist/source/signing.d.ts.map +1 -0
  377. package/dist/source/signing.js +163 -0
  378. package/dist/source/signing.js.map +1 -0
  379. package/dist/source/types.d.ts +402 -0
  380. package/dist/source/types.d.ts.map +1 -0
  381. package/dist/source/types.js +60 -0
  382. package/dist/source/types.js.map +1 -0
  383. package/dist/syncLog/contract.d.ts +21 -0
  384. package/dist/syncLog/contract.d.ts.map +1 -0
  385. package/dist/syncLog/contract.js +20 -0
  386. package/dist/syncLog/contract.js.map +1 -0
  387. package/dist/syncLog/index.d.ts +2 -0
  388. package/dist/syncLog/index.d.ts.map +1 -0
  389. package/dist/syncLog/index.js +2 -0
  390. package/dist/syncLog/index.js.map +1 -0
  391. package/dist/testing/fixtures/httpResponses.d.ts +74 -0
  392. package/dist/testing/fixtures/httpResponses.d.ts.map +1 -0
  393. package/dist/testing/fixtures/httpResponses.js +102 -0
  394. package/dist/testing/fixtures/httpResponses.js.map +1 -0
  395. package/dist/transactionLayer.d.ts +110 -0
  396. package/dist/transactionLayer.d.ts.map +1 -0
  397. package/dist/transactionLayer.js +25 -0
  398. package/dist/transactionLayer.js.map +1 -0
  399. package/dist/transactions/settlement/commitEnvelope.d.ts +144 -0
  400. package/dist/transactions/settlement/commitEnvelope.d.ts.map +1 -0
  401. package/dist/transactions/settlement/commitEnvelope.js +162 -0
  402. package/dist/transactions/settlement/commitEnvelope.js.map +1 -0
  403. package/dist/transactions/settlement/httpCommitEnvelope.d.ts +54 -0
  404. package/dist/transactions/settlement/httpCommitEnvelope.d.ts.map +1 -0
  405. package/dist/transactions/settlement/httpCommitEnvelope.js +208 -0
  406. package/dist/transactions/settlement/httpCommitEnvelope.js.map +1 -0
  407. package/dist/transactions/settlement/idempotencyKey.d.ts +11 -0
  408. package/dist/transactions/settlement/idempotencyKey.d.ts.map +1 -0
  409. package/dist/transactions/settlement/idempotencyKey.js +10 -0
  410. package/dist/transactions/settlement/idempotencyKey.js.map +1 -0
  411. package/dist/transactions/settlement/pendingWrite.d.ts +113 -0
  412. package/dist/transactions/settlement/pendingWrite.d.ts.map +1 -0
  413. package/dist/transactions/settlement/pendingWrite.js +21 -0
  414. package/dist/transactions/settlement/pendingWrite.js.map +1 -0
  415. package/dist/transport/commitFrames.d.ts +91 -0
  416. package/dist/transport/commitFrames.d.ts.map +1 -0
  417. package/dist/transport/commitFrames.js +135 -0
  418. package/dist/transport/commitFrames.js.map +1 -0
  419. package/dist/transport/connectionManager.d.ts +216 -0
  420. package/dist/transport/connectionManager.d.ts.map +1 -0
  421. package/dist/transport/connectionManager.js +674 -0
  422. package/dist/transport/connectionManager.js.map +1 -0
  423. package/dist/transport/credentialLifecycle.d.ts +178 -0
  424. package/dist/transport/credentialLifecycle.d.ts.map +1 -0
  425. package/dist/transport/credentialLifecycle.js +324 -0
  426. package/dist/transport/credentialLifecycle.js.map +1 -0
  427. package/dist/transport/heartbeat.d.ts +66 -0
  428. package/dist/transport/heartbeat.d.ts.map +1 -0
  429. package/dist/transport/heartbeat.js +94 -0
  430. package/dist/transport/heartbeat.js.map +1 -0
  431. package/dist/transport/httpClient.d.ts +143 -0
  432. package/dist/transport/httpClient.d.ts.map +1 -0
  433. package/dist/transport/httpClient.js +150 -0
  434. package/dist/transport/httpClient.js.map +1 -0
  435. package/dist/transport/httpFeed.d.ts +4 -0
  436. package/dist/transport/httpFeed.d.ts.map +1 -0
  437. package/dist/transport/httpFeed.js +94 -0
  438. package/dist/transport/httpFeed.js.map +1 -0
  439. package/dist/transport/httpOptions.d.ts +34 -0
  440. package/dist/transport/httpOptions.d.ts.map +1 -0
  441. package/dist/transport/httpOptions.js +13 -0
  442. package/dist/transport/httpOptions.js.map +1 -0
  443. package/dist/transport/httpTransport.d.ts +68 -0
  444. package/dist/transport/httpTransport.d.ts.map +1 -0
  445. package/dist/transport/httpTransport.js +1433 -0
  446. package/dist/transport/httpTransport.js.map +1 -0
  447. package/dist/transport/networkProbe.d.ts +85 -0
  448. package/dist/transport/networkProbe.d.ts.map +1 -0
  449. package/dist/transport/networkProbe.js +208 -0
  450. package/dist/transport/networkProbe.js.map +1 -0
  451. package/dist/transport/wsFrameHandlers.d.ts +129 -0
  452. package/dist/transport/wsFrameHandlers.d.ts.map +1 -0
  453. package/dist/transport/wsFrameHandlers.js +429 -0
  454. package/dist/transport/wsFrameHandlers.js.map +1 -0
  455. package/dist/transport/wsTransport.d.ts +575 -0
  456. package/dist/transport/wsTransport.d.ts.map +1 -0
  457. package/dist/transport/wsTransport.js +1024 -0
  458. package/dist/transport/wsTransport.js.map +1 -0
  459. package/dist/types/assertExact.d.ts +18 -0
  460. package/dist/types/assertExact.d.ts.map +1 -0
  461. package/dist/types/assertExact.js +2 -0
  462. package/dist/types/assertExact.js.map +1 -0
  463. package/dist/types/global.d.ts +108 -0
  464. package/dist/types/global.d.ts.map +1 -0
  465. package/dist/types/global.js +41 -0
  466. package/dist/types/global.js.map +1 -0
  467. package/dist/types/index.d.ts +206 -0
  468. package/dist/types/index.d.ts.map +1 -0
  469. package/dist/types/index.js +57 -0
  470. package/dist/types/index.js.map +1 -0
  471. package/dist/types/modelData.d.ts +11 -0
  472. package/dist/types/modelData.d.ts.map +1 -0
  473. package/dist/types/modelData.js +10 -0
  474. package/dist/types/modelData.js.map +1 -0
  475. package/dist/types/participant.d.ts +21 -0
  476. package/dist/types/participant.d.ts.map +1 -0
  477. package/dist/types/participant.js +11 -0
  478. package/dist/types/participant.js.map +1 -0
  479. package/dist/types/streams.d.ts +545 -0
  480. package/dist/types/streams.d.ts.map +1 -0
  481. package/dist/types/streams.js +12 -0
  482. package/dist/types/streams.js.map +1 -0
  483. package/dist/utils/asyncIterator.d.ts +35 -0
  484. package/dist/utils/asyncIterator.d.ts.map +1 -0
  485. package/dist/utils/asyncIterator.js +136 -0
  486. package/dist/utils/asyncIterator.js.map +1 -0
  487. package/dist/utils/duration.d.ts +51 -0
  488. package/dist/utils/duration.d.ts.map +1 -0
  489. package/dist/utils/duration.js +78 -0
  490. package/dist/utils/duration.js.map +1 -0
  491. package/dist/utils/json.d.ts +58 -0
  492. package/dist/utils/json.d.ts.map +1 -0
  493. package/dist/utils/json.js +277 -0
  494. package/dist/utils/json.js.map +1 -0
  495. package/dist/webhooks/events.d.ts +44 -0
  496. package/dist/webhooks/events.d.ts.map +1 -0
  497. package/dist/webhooks/events.js +43 -0
  498. package/dist/webhooks/events.js.map +1 -0
  499. package/dist/webhooks/index.d.ts +9 -0
  500. package/dist/webhooks/index.d.ts.map +1 -0
  501. package/dist/webhooks/index.js +9 -0
  502. package/dist/webhooks/index.js.map +1 -0
  503. package/dist/wire/accountResponses.d.ts +463 -0
  504. package/dist/wire/accountResponses.d.ts.map +1 -0
  505. package/dist/wire/accountResponses.js +294 -0
  506. package/dist/wire/accountResponses.js.map +1 -0
  507. package/dist/wire/auth.d.ts +57 -0
  508. package/dist/wire/auth.d.ts.map +1 -0
  509. package/dist/wire/auth.js +71 -0
  510. package/dist/wire/auth.js.map +1 -0
  511. package/dist/wire/bootstrapReason.d.ts +10 -0
  512. package/dist/wire/bootstrapReason.d.ts.map +1 -0
  513. package/dist/wire/bootstrapReason.js +9 -0
  514. package/dist/wire/bootstrapReason.js.map +1 -0
  515. package/dist/wire/claimEvent.d.ts +70 -0
  516. package/dist/wire/claimEvent.d.ts.map +1 -0
  517. package/dist/wire/claimEvent.js +74 -0
  518. package/dist/wire/claimEvent.js.map +1 -0
  519. package/dist/wire/claims.d.ts +475 -0
  520. package/dist/wire/claims.d.ts.map +1 -0
  521. package/dist/wire/claims.js +326 -0
  522. package/dist/wire/claims.js.map +1 -0
  523. package/dist/wire/commit.d.ts +604 -0
  524. package/dist/wire/commit.d.ts.map +1 -0
  525. package/dist/wire/commit.js +322 -0
  526. package/dist/wire/commit.js.map +1 -0
  527. package/dist/wire/delta.d.ts +251 -0
  528. package/dist/wire/delta.d.ts.map +1 -0
  529. package/dist/wire/delta.js +148 -0
  530. package/dist/wire/delta.js.map +1 -0
  531. package/dist/wire/errorEnvelope.d.ts +73 -0
  532. package/dist/wire/errorEnvelope.d.ts.map +1 -0
  533. package/dist/wire/errorEnvelope.js +124 -0
  534. package/dist/wire/errorEnvelope.js.map +1 -0
  535. package/dist/wire/feedCursor.d.ts +61 -0
  536. package/dist/wire/feedCursor.d.ts.map +1 -0
  537. package/dist/wire/feedCursor.js +83 -0
  538. package/dist/wire/feedCursor.js.map +1 -0
  539. package/dist/wire/feedEvent.d.ts +264 -0
  540. package/dist/wire/feedEvent.d.ts.map +1 -0
  541. package/dist/wire/feedEvent.js +66 -0
  542. package/dist/wire/feedEvent.js.map +1 -0
  543. package/dist/wire/frames.d.ts +195 -0
  544. package/dist/wire/frames.d.ts.map +1 -0
  545. package/dist/wire/frames.js +51 -0
  546. package/dist/wire/frames.js.map +1 -0
  547. package/dist/wire/inboundFrames.d.ts +490 -0
  548. package/dist/wire/inboundFrames.d.ts.map +1 -0
  549. package/dist/wire/inboundFrames.js +117 -0
  550. package/dist/wire/inboundFrames.js.map +1 -0
  551. package/dist/wire/index.d.ts +55 -0
  552. package/dist/wire/index.d.ts.map +1 -0
  553. package/dist/wire/index.js +84 -0
  554. package/dist/wire/index.js.map +1 -0
  555. package/dist/wire/listEnvelope.d.ts +38 -0
  556. package/dist/wire/listEnvelope.d.ts.map +1 -0
  557. package/dist/wire/listEnvelope.js +43 -0
  558. package/dist/wire/listEnvelope.js.map +1 -0
  559. package/dist/wire/modelMutations.d.ts +32 -0
  560. package/dist/wire/modelMutations.d.ts.map +1 -0
  561. package/dist/wire/modelMutations.js +53 -0
  562. package/dist/wire/modelMutations.js.map +1 -0
  563. package/dist/wire/modelResponses.d.ts +79 -0
  564. package/dist/wire/modelResponses.d.ts.map +1 -0
  565. package/dist/wire/modelResponses.js +44 -0
  566. package/dist/wire/modelResponses.js.map +1 -0
  567. package/dist/wire/modelShape.d.ts +79 -0
  568. package/dist/wire/modelShape.d.ts.map +1 -0
  569. package/dist/wire/modelShape.js +75 -0
  570. package/dist/wire/modelShape.js.map +1 -0
  571. package/dist/wire/protocol.d.ts +39 -0
  572. package/dist/wire/protocol.d.ts.map +1 -0
  573. package/dist/wire/protocol.js +39 -0
  574. package/dist/wire/protocol.js.map +1 -0
  575. package/dist/wire/protocolVersion.d.ts +74 -0
  576. package/dist/wire/protocolVersion.d.ts.map +1 -0
  577. package/dist/wire/protocolVersion.js +84 -0
  578. package/dist/wire/protocolVersion.js.map +1 -0
  579. package/package.json +187 -0
  580. package/src/ablo.ts +139 -0
  581. package/src/ai-sdk/coordinatedTool.ts +214 -0
  582. package/src/ai-sdk/index.ts +7 -0
  583. package/src/auth/apiKey.ts +540 -0
  584. package/src/auth/bootstrapScope.ts +15 -0
  585. package/src/auth/browserCredentialSafety.ts +48 -0
  586. package/src/auth/capability.ts +326 -0
  587. package/src/auth/capabilityLifecycle.ts +174 -0
  588. package/src/auth/credentialEndpoint.ts +79 -0
  589. package/src/auth/credentialEndpointProtocol.ts +51 -0
  590. package/src/auth/credentialKind.ts +20 -0
  591. package/src/auth/credentialPolicy.ts +244 -0
  592. package/src/auth/credentialResult.ts +23 -0
  593. package/src/auth/credentialSource.ts +99 -0
  594. package/src/auth/hostedEndpoints.ts +24 -0
  595. package/src/auth/identity.ts +330 -0
  596. package/src/auth/index.ts +592 -0
  597. package/src/auth/schemas.ts +94 -0
  598. package/src/auth/sessionMint.ts +126 -0
  599. package/src/auth/token.ts +4 -0
  600. package/src/batching/index.ts +200 -0
  601. package/src/coordination/awaitClaimGrant.ts +243 -0
  602. package/src/coordination/claimHeartbeatLoop.ts +165 -0
  603. package/src/coordination/claimMeta.ts +56 -0
  604. package/src/coordination/events.ts +86 -0
  605. package/src/coordination/index.ts +181 -0
  606. package/src/coordination/locator.ts +200 -0
  607. package/src/coordination/schema.ts +1346 -0
  608. package/src/coordination/targetConflict.ts +85 -0
  609. package/src/coordination/trace.ts +173 -0
  610. package/src/docs/catalog.ts +274 -0
  611. package/src/docs/index.ts +18 -0
  612. package/src/durableWrites.ts +134 -0
  613. package/src/environment.ts +132 -0
  614. package/src/errorCodes.ts +1591 -0
  615. package/src/errors.ts +918 -0
  616. package/src/footprint.ts +0 -0
  617. package/src/headlessClient.ts +161 -0
  618. package/src/index.ts +52 -0
  619. package/src/keys/index.ts +254 -0
  620. package/src/log/syncDeltaRow.ts +119 -0
  621. package/src/logger.ts +22 -0
  622. package/src/observability.ts +85 -0
  623. package/src/policy/types.ts +292 -0
  624. package/src/resources/functionalUpdate.ts +151 -0
  625. package/src/resources/httpResources.ts +520 -0
  626. package/src/resources/modelOperations.ts +444 -0
  627. package/src/resources/mutationOptions.ts +66 -0
  628. package/src/resources/where.ts +160 -0
  629. package/src/resources/writeOptionsSchema.ts +91 -0
  630. package/src/schema/coordination.ts +161 -0
  631. package/src/schema/ddl.ts +593 -0
  632. package/src/schema/ddlLock.ts +53 -0
  633. package/src/schema/diff.ts +489 -0
  634. package/src/schema/field.ts +321 -0
  635. package/src/schema/fieldRef.ts +88 -0
  636. package/src/schema/generate.ts +95 -0
  637. package/src/schema/index.ts +278 -0
  638. package/src/schema/loadStrategy.ts +52 -0
  639. package/src/schema/model.ts +476 -0
  640. package/src/schema/openapi.ts +658 -0
  641. package/src/schema/queries.ts +273 -0
  642. package/src/schema/relation.ts +291 -0
  643. package/src/schema/residency.ts +30 -0
  644. package/src/schema/roles.ts +325 -0
  645. package/src/schema/schema.ts +825 -0
  646. package/src/schema/select.ts +115 -0
  647. package/src/schema/serialize.ts +373 -0
  648. package/src/schema/sugar.ts +194 -0
  649. package/src/schema/tenancy.ts +221 -0
  650. package/src/server/adapter.ts +203 -0
  651. package/src/server/commit.ts +109 -0
  652. package/src/server/index.ts +26 -0
  653. package/src/server/readConfig.ts +82 -0
  654. package/src/server/storageMode.ts +20 -0
  655. package/src/source/adapter.ts +85 -0
  656. package/src/source/adapters/drizzle.ts +291 -0
  657. package/src/source/adapters/kysely.ts +346 -0
  658. package/src/source/adapters/kyselyMutationCore.ts +220 -0
  659. package/src/source/adapters/memory.ts +154 -0
  660. package/src/source/adapters/prisma.ts +282 -0
  661. package/src/source/conformance.ts +287 -0
  662. package/src/source/connector.ts +394 -0
  663. package/src/source/connectorProtocol.ts +189 -0
  664. package/src/source/contract.ts +221 -0
  665. package/src/source/drizzle.ts +1 -0
  666. package/src/source/factory.ts +444 -0
  667. package/src/source/idempotency.ts +189 -0
  668. package/src/source/index.ts +182 -0
  669. package/src/source/kysely.ts +2 -0
  670. package/src/source/migrations.ts +109 -0
  671. package/src/source/next.ts +38 -0
  672. package/src/source/pushQueue.ts +368 -0
  673. package/src/source/signing.ts +279 -0
  674. package/src/source/types.ts +502 -0
  675. package/src/syncLog/contract.ts +32 -0
  676. package/src/syncLog/index.ts +1 -0
  677. package/src/testing/fixtures/httpResponses.ts +155 -0
  678. package/src/transactionLayer.ts +122 -0
  679. package/src/transactions/settlement/commitEnvelope.ts +192 -0
  680. package/src/transactions/settlement/httpCommitEnvelope.ts +250 -0
  681. package/src/transactions/settlement/idempotencyKey.ts +11 -0
  682. package/src/transactions/settlement/pendingWrite.ts +24 -0
  683. package/src/transport/commitFrames.ts +225 -0
  684. package/src/transport/connectionManager.ts +856 -0
  685. package/src/transport/credentialLifecycle.ts +389 -0
  686. package/src/transport/heartbeat.ts +118 -0
  687. package/src/transport/httpClient.ts +354 -0
  688. package/src/transport/httpFeed.ts +111 -0
  689. package/src/transport/httpOptions.ts +41 -0
  690. package/src/transport/httpTransport.ts +1976 -0
  691. package/src/transport/networkProbe.ts +249 -0
  692. package/src/transport/wsFrameHandlers.ts +619 -0
  693. package/src/transport/wsTransport.ts +1491 -0
  694. package/src/types/assertExact.ts +17 -0
  695. package/src/types/global.ts +123 -0
  696. package/src/types/index.ts +270 -0
  697. package/src/types/modelData.ts +11 -0
  698. package/src/types/participant.ts +22 -0
  699. package/src/types/streams.ts +702 -0
  700. package/src/utils/asyncIterator.ts +141 -0
  701. package/src/utils/duration.ts +88 -0
  702. package/src/utils/json.ts +281 -0
  703. package/src/webhooks/events.ts +96 -0
  704. package/src/webhooks/index.ts +12 -0
  705. package/src/wire/accountResponses.ts +328 -0
  706. package/src/wire/auth.ts +86 -0
  707. package/src/wire/bootstrapReason.ts +10 -0
  708. package/src/wire/claimEvent.ts +85 -0
  709. package/src/wire/claims.ts +370 -0
  710. package/src/wire/commit.ts +379 -0
  711. package/src/wire/delta.ts +173 -0
  712. package/src/wire/errorEnvelope.ts +133 -0
  713. package/src/wire/feedCursor.ts +91 -0
  714. package/src/wire/feedEvent.ts +74 -0
  715. package/src/wire/frames.ts +77 -0
  716. package/src/wire/inboundFrames.ts +182 -0
  717. package/src/wire/index.ts +328 -0
  718. package/src/wire/listEnvelope.ts +51 -0
  719. package/src/wire/modelMutations.ts +55 -0
  720. package/src/wire/modelResponses.ts +48 -0
  721. package/src/wire/modelShape.ts +83 -0
  722. package/src/wire/protocol.ts +39 -0
  723. package/src/wire/protocolVersion.ts +97 -0
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Query definitions for a schema.
3
+ *
4
+ * A query pairs a Zod input schema with the name of the model it returns.
5
+ * Input types flow through `z.infer` and result types through `InferModel`,
6
+ * the same inference path `model` and `relation` use, so there is no separate
7
+ * type system to learn.
8
+ *
9
+ * Usage:
10
+ * import { z } from 'zod';
11
+ * import {
12
+ * defineSchema, defineQueries, model, query, relation,
13
+ * } from '@abloatai/transaction/schema';
14
+ *
15
+ * const schema = defineSchema({
16
+ * block: model(
17
+ * { sectionId: z.string(), type: z.string() },
18
+ * { section: relation.belongsTo('sections', 'sectionId') },
19
+ * { load: 'lazy', typename: 'Block', persist: {} },
20
+ * ),
21
+ * });
22
+ *
23
+ * const queries = defineQueries(schema, {
24
+ * blocksByReport: query({
25
+ * input: z.object({ reportId: z.string() }),
26
+ * returns: 'block', // ← type-checked against schema.models
27
+ * }),
28
+ * });
29
+ *
30
+ * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
31
+ * // ^? { reportId: string }
32
+ * type Result = InferQueryResult<
33
+ * typeof schema,
34
+ * typeof queries.queries.blocksByReport
35
+ * >;
36
+ * // ^? Array<Block>
37
+ *
38
+ * Design notes:
39
+ *
40
+ * - `query()` accepts any string for `returns`. The check that the string
41
+ * names a real model runs when the query passes through
42
+ * `defineQueries(schema, ...)`, the same way
43
+ * `relation.belongsTo('projects', 'projectId')` takes a plain string at
44
+ * the factory and defers the cross-reference check to schema assembly.
45
+ *
46
+ * - A query carries no `name` until `defineQueries()` assigns one from its
47
+ * record key — the same pattern `defineSchema({ tasks: model(...) })`
48
+ * uses, where the model's name is the record key rather than a field on
49
+ * the factory.
50
+ *
51
+ * - Every query returns an array of a single model type. To fetch several
52
+ * model types at once, run several queries in one batch rather than
53
+ * declaring a combined shape. Each `QueryDef` therefore points at exactly
54
+ * one model, and the loader hydrates results through a single
55
+ * `schema.models[queryDef.returns]` lookup.
56
+ */
57
+ import { z } from 'zod';
58
+ import type { Schema, InferModel, InferModelNames } from './schema.js';
59
+ /**
60
+ * A single query definition: a zod input shape, the schema key of the
61
+ * model it returns, and (after assembly) the name it was registered
62
+ * under.
63
+ *
64
+ * `name` is filled in by `defineQueries()` from the record key. It is
65
+ * optional on the type so `query()` can return a value without one —
66
+ * downstream code should only read `name` after the query has been
67
+ * passed through `defineQueries()`.
68
+ */
69
+ export interface QueryDef<TInput extends z.ZodType = z.ZodType, TReturns extends string = string> {
70
+ /** Zod schema for the query's input arguments. */
71
+ readonly input: TInput;
72
+ /**
73
+ * The schema key of the model this query returns. Narrowed by
74
+ * `defineQueries()` to `InferModelNames<S>` via the `Q` generic, so
75
+ * a query whose `returns` does not match a known model fails at
76
+ * compile time.
77
+ */
78
+ readonly returns: TReturns;
79
+ /**
80
+ * The name under which the query is registered. {@link defineQueries}
81
+ * fills this in from the record key; you do not set it directly. It lives
82
+ * on the definition itself so dispatch and lookup code can read the name
83
+ * straight off a {@link QueryDef} without carrying the surrounding
84
+ * {@link Queries} object.
85
+ */
86
+ readonly name?: string;
87
+ }
88
+ /**
89
+ * The raw spec accepted by `query()`. Internal type — consumers never
90
+ * reference this directly, they call `query({ input, returns })`.
91
+ */
92
+ interface QuerySpec<TInput extends z.ZodType, TReturns extends string> {
93
+ readonly input: TInput;
94
+ readonly returns: TReturns;
95
+ }
96
+ /**
97
+ * Define a query.
98
+ *
99
+ * `TReturns` is a `const` generic so TypeScript preserves the literal
100
+ * type of the `returns` value at call time (e.g., `'block'`
101
+ * instead of widening to `string`). This is what lets `defineQueries`
102
+ * type-check `returns` against the schema's model keys without
103
+ * requiring the consumer to write `as const` manually.
104
+ *
105
+ * ```ts
106
+ * const blocksByReport = query({
107
+ * input: z.object({ reportId: z.string() }),
108
+ * returns: 'block',
109
+ * });
110
+ * ```
111
+ */
112
+ export declare function query<TInput extends z.ZodType, const TReturns extends string>(spec: QuerySpec<TInput, TReturns>): QueryDef<TInput, TReturns>;
113
+ /**
114
+ * A record of query names → query definitions, parameterized by a
115
+ * schema so each query's `returns` must reference a known model.
116
+ *
117
+ * This is the constraint type used by `defineQueries()` — it's what
118
+ * turns "any string" into "a model in this schema" without touching
119
+ * the `query()` factory itself.
120
+ */
121
+ export type QueryRecord<S extends Schema> = Record<string, QueryDef<z.ZodType, InferModelNames<S>>>;
122
+ /**
123
+ * The object returned by `defineQueries()`. Holds a reference back to
124
+ * the schema (so the loader can resolve `queryDef.returns` to
125
+ * a `ModelDef` at runtime via `schema.models[def.returns]`) and the
126
+ * resolved record of queries, each with its `name` field filled in.
127
+ */
128
+ export interface Queries<S extends Schema, Q extends QueryRecord<S>> {
129
+ readonly schema: S;
130
+ readonly queries: Q;
131
+ }
132
+ /**
133
+ * Infer the input type of a query from its zod schema.
134
+ *
135
+ * ```ts
136
+ * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
137
+ * // { reportId: string }
138
+ * ```
139
+ */
140
+ export type InferQueryInput<Q extends QueryDef> = z.infer<Q['input']>;
141
+ /**
142
+ * Infer the result type of a query by looking up its `returns` model
143
+ * in the schema.
144
+ *
145
+ * Returns `Array<InferModel<S, returns>>` — all queries return a
146
+ * collection at this layer. Single-entity fetches use
147
+ * `ids: [singleId]` and the caller picks `result[0]`; this avoids a
148
+ * second `scope: 'single'` shape in the DSL for a case that can be
149
+ * expressed with the collection form.
150
+ *
151
+ * ```ts
152
+ * type Result = InferQueryResult<
153
+ * typeof schema,
154
+ * typeof queries.queries.blocksByReport
155
+ * >;
156
+ * // Array<Block>
157
+ * ```
158
+ */
159
+ export type InferQueryResult<S extends Schema, Q extends QueryDef> = Q extends QueryDef<z.ZodType, infer R> ? R extends InferModelNames<S> ? InferModel<S, R>[] : never : never;
160
+ /**
161
+ * Define a typed query set against a schema.
162
+ *
163
+ * Each entry's `returns` field is constrained to the schema's model
164
+ * names at compile time via the `Q` generic bound to `QueryRecord<S>`.
165
+ * A query whose `returns` does not match a known model will fail at
166
+ * the `defineQueries` call site with a TypeScript error, not at
167
+ * runtime.
168
+ *
169
+ * The factory also performs a runtime validation of the same
170
+ * invariant. This catches the edge case where the schema and the
171
+ * queries live in separate modules that drift out of sync — for
172
+ * example, when a developer removes a model from the schema without
173
+ * updating the queries that referenced it. The runtime error points
174
+ * at the specific offending query and lists the available models,
175
+ * which is a nicer failure mode than a generic "property does not
176
+ * exist" error deep inside the loader.
177
+ *
178
+ * Each resolved query gets its `name` populated from the record key:
179
+ * `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
180
+ * lookup code read `queryDef.name` directly rather than re-deriving it from
181
+ * the surrounding record.
182
+ *
183
+ * ```ts
184
+ * const schema = defineSchema({
185
+ * block: model(
186
+ * { sectionId: z.string() },
187
+ * {},
188
+ * { load: 'lazy', typename: 'Block', persist: {} },
189
+ * ),
190
+ * });
191
+ *
192
+ * const queries = defineQueries(schema, {
193
+ * blocksByReport: query({
194
+ * input: z.object({ reportId: z.string() }),
195
+ * returns: 'block', // ← type-checked
196
+ * }),
197
+ * });
198
+ * ```
199
+ */
200
+ export declare function defineQueries<S extends Schema, const Q extends QueryRecord<S>>(schema: S, queries: Q): Queries<S, Q>;
201
+ export {};
202
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/schema/queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAKvE;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ,CACvB,MAAM,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EACpC,QAAQ,SAAS,MAAM,GAAG,MAAM;IAEhC,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,UAAU,SAAS,CACjB,MAAM,SAAS,CAAC,CAAC,OAAO,EACxB,QAAQ,SAAS,MAAM;IAEvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;CAC5B;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,KAAK,CACnB,MAAM,SAAS,CAAC,CAAC,OAAO,EACxB,KAAK,CAAC,QAAQ,SAAS,MAAM,EAC7B,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAK/D;AAID;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,CAChD,MAAM,EACN,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CACxC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,OAAO,CACtB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC;IAExB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAEtE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,QAAQ,IAChB,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,GACtC,CAAC,SAAS,eAAe,CAAC,CAAC,CAAC,GAC1B,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAClB,KAAK,GACP,KAAK,CAAC;AAIV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,aAAa,CAC3B,CAAC,SAAS,MAAM,EAChB,KAAK,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,EAC9B,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAyBtC"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Query definitions for a schema.
3
+ *
4
+ * A query pairs a Zod input schema with the name of the model it returns.
5
+ * Input types flow through `z.infer` and result types through `InferModel`,
6
+ * the same inference path `model` and `relation` use, so there is no separate
7
+ * type system to learn.
8
+ *
9
+ * Usage:
10
+ * import { z } from 'zod';
11
+ * import {
12
+ * defineSchema, defineQueries, model, query, relation,
13
+ * } from '@abloatai/transaction/schema';
14
+ *
15
+ * const schema = defineSchema({
16
+ * block: model(
17
+ * { sectionId: z.string(), type: z.string() },
18
+ * { section: relation.belongsTo('sections', 'sectionId') },
19
+ * { load: 'lazy', typename: 'Block', persist: {} },
20
+ * ),
21
+ * });
22
+ *
23
+ * const queries = defineQueries(schema, {
24
+ * blocksByReport: query({
25
+ * input: z.object({ reportId: z.string() }),
26
+ * returns: 'block', // ← type-checked against schema.models
27
+ * }),
28
+ * });
29
+ *
30
+ * type Input = InferQueryInput<typeof queries.queries.blocksByReport>;
31
+ * // ^? { reportId: string }
32
+ * type Result = InferQueryResult<
33
+ * typeof schema,
34
+ * typeof queries.queries.blocksByReport
35
+ * >;
36
+ * // ^? Array<Block>
37
+ *
38
+ * Design notes:
39
+ *
40
+ * - `query()` accepts any string for `returns`. The check that the string
41
+ * names a real model runs when the query passes through
42
+ * `defineQueries(schema, ...)`, the same way
43
+ * `relation.belongsTo('projects', 'projectId')` takes a plain string at
44
+ * the factory and defers the cross-reference check to schema assembly.
45
+ *
46
+ * - A query carries no `name` until `defineQueries()` assigns one from its
47
+ * record key — the same pattern `defineSchema({ tasks: model(...) })`
48
+ * uses, where the model's name is the record key rather than a field on
49
+ * the factory.
50
+ *
51
+ * - Every query returns an array of a single model type. To fetch several
52
+ * model types at once, run several queries in one batch rather than
53
+ * declaring a combined shape. Each `QueryDef` therefore points at exactly
54
+ * one model, and the loader hydrates results through a single
55
+ * `schema.models[queryDef.returns]` lookup.
56
+ */
57
+ import { AbloValidationError } from '../errors.js';
58
+ // ── query() factory ───────────────────────────────────────────────────────
59
+ /**
60
+ * Define a query.
61
+ *
62
+ * `TReturns` is a `const` generic so TypeScript preserves the literal
63
+ * type of the `returns` value at call time (e.g., `'block'`
64
+ * instead of widening to `string`). This is what lets `defineQueries`
65
+ * type-check `returns` against the schema's model keys without
66
+ * requiring the consumer to write `as const` manually.
67
+ *
68
+ * ```ts
69
+ * const blocksByReport = query({
70
+ * input: z.object({ reportId: z.string() }),
71
+ * returns: 'block',
72
+ * });
73
+ * ```
74
+ */
75
+ export function query(spec) {
76
+ return {
77
+ input: spec.input,
78
+ returns: spec.returns,
79
+ };
80
+ }
81
+ // ── defineQueries() factory ───────────────────────────────────────────────
82
+ /**
83
+ * Define a typed query set against a schema.
84
+ *
85
+ * Each entry's `returns` field is constrained to the schema's model
86
+ * names at compile time via the `Q` generic bound to `QueryRecord<S>`.
87
+ * A query whose `returns` does not match a known model will fail at
88
+ * the `defineQueries` call site with a TypeScript error, not at
89
+ * runtime.
90
+ *
91
+ * The factory also performs a runtime validation of the same
92
+ * invariant. This catches the edge case where the schema and the
93
+ * queries live in separate modules that drift out of sync — for
94
+ * example, when a developer removes a model from the schema without
95
+ * updating the queries that referenced it. The runtime error points
96
+ * at the specific offending query and lists the available models,
97
+ * which is a nicer failure mode than a generic "property does not
98
+ * exist" error deep inside the loader.
99
+ *
100
+ * Each resolved query gets its `name` populated from the record key:
101
+ * `queries.blocksByReport.name === 'blocksByReport'`. Dispatch and
102
+ * lookup code read `queryDef.name` directly rather than re-deriving it from
103
+ * the surrounding record.
104
+ *
105
+ * ```ts
106
+ * const schema = defineSchema({
107
+ * block: model(
108
+ * { sectionId: z.string() },
109
+ * {},
110
+ * { load: 'lazy', typename: 'Block', persist: {} },
111
+ * ),
112
+ * });
113
+ *
114
+ * const queries = defineQueries(schema, {
115
+ * blocksByReport: query({
116
+ * input: z.object({ reportId: z.string() }),
117
+ * returns: 'block', // ← type-checked
118
+ * }),
119
+ * });
120
+ * ```
121
+ */
122
+ export function defineQueries(schema, queries) {
123
+ // Rebuild the queries record with `name` populated per entry. Same
124
+ // shallow-spread strategy `defineSchema` uses for `typename` / `persist`
125
+ // defaults — preserves input references, avoids mutating `readonly`
126
+ // fields in place, and keeps each resolved `QueryDef` immutable from
127
+ // construction onward.
128
+ const resolvedQueries = {};
129
+ for (const [name, def] of Object.entries(queries)) {
130
+ if (!(def.returns in schema.models)) {
131
+ throw new AbloValidationError(`defineQueries: query "${name}" declares returns: "${def.returns}", ` +
132
+ `which is not a model in the schema. ` +
133
+ `Available models: ${Object.keys(schema.models).join(', ') || '(none)'}`, { code: 'query_returns_unknown_model' });
134
+ }
135
+ resolvedQueries[name] = { ...def, name };
136
+ }
137
+ return {
138
+ schema,
139
+ // Cast back to Q: the rebuild only added `name` (already optional on
140
+ // QueryDef) to each entry, so the shape is structurally unchanged.
141
+ queries: resolvedQueries,
142
+ };
143
+ }
144
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/schema/queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAiDnD,6EAA6E;AAE7E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,KAAK,CAGnB,IAAiC;IACjC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC;AAoED,6EAA6E;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,aAAa,CAG3B,MAAS,EAAE,OAAU;IACrB,mEAAmE;IACnE,yEAAyE;IACzE,oEAAoE;IACpE,qEAAqE;IACrE,uBAAuB;IACvB,MAAM,eAAe,GAA6B,EAAE,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,mBAAmB,CAC3B,yBAAyB,IAAI,wBAAwB,GAAG,CAAC,OAAO,KAAK;gBACnE,sCAAsC;gBACtC,qBAAqB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,EAC1E,EAAE,IAAI,EAAE,6BAA6B,EAAE,CACxC,CAAC;QACJ,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO;QACL,MAAM;QACN,qEAAqE;QACrE,mEAAmE;QACnE,OAAO,EAAE,eAA+B;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Declarative relations between your models — the edges that turn a flat set
3
+ * of models into a graph. You attach relations to a model with the
4
+ * {@link relation} factories; the engine reads them to index foreign keys for
5
+ * fast child lookups, to order inserts so a parent row lands before the rows
6
+ * that reference it, and to generate the accessor properties that let you read
7
+ * `task.project` or `project.tasks` directly.
8
+ *
9
+ * Usage:
10
+ * import { relation } from '@abloatai/transaction/schema';
11
+ *
12
+ * const taskRelations = {
13
+ * project: relation.belongsTo('projects', 'projectId'),
14
+ * assignee: relation.belongsTo('users', 'assigneeId'),
15
+ * comments: relation.hasMany('comments', 'taskId'),
16
+ * };
17
+ */
18
+ /**
19
+ * Options for `relation.belongsTo`. Each defaults to `false`, so every
20
+ * behavior below is opt-in per relation.
21
+ *
22
+ * `index: true` registers a foreign-key index for the child model when the
23
+ * engine starts, turning "every child that points at this parent" from a full
24
+ * scan into a constant-time lookup. Reach for it on relations you query this
25
+ * way often, such as a block's `sectionId`.
26
+ *
27
+ * `enrich: true` auto-populates the parent reference on an incoming change
28
+ * before the child data lands. A change to `Task { teamId: 't1' }` picks up the
29
+ * already-loaded `teams:t1` record and attaches it as `data.team`, so you can
30
+ * read `task.team` without a second lookup. Enrichment is best-effort: if the
31
+ * parent has not loaded yet it quietly does nothing, and the child data still
32
+ * applies.
33
+ *
34
+ * `defer: true` tells the engine to ignore this edge when it works out the
35
+ * order in which to insert rows. Use it on the soft side of a genuine reference
36
+ * cycle — the side where you are willing to insert the child first with the
37
+ * foreign key left null and fill it in with a later update. The other side of
38
+ * the cycle then becomes a strict predecessor, so the child is ordered after
39
+ * the parent rather than tied with it.
40
+ *
41
+ * `defer` changes only that ordering, not what the engine sends on the wire; it
42
+ * does not rewrite an insert into an insert-then-update. Pair it with a Postgres
43
+ * `DEFERRABLE INITIALLY DEFERRED` constraint when you also want the database to
44
+ * relax the foreign-key check itself. For example:
45
+ *
46
+ * ```ts
47
+ * layouts: model({ reportId: z.string().nullish() }, {
48
+ * // The report-owns-layout link is nullable and the layout is always
49
+ * // created first; marking it `defer` lets the report commit ahead of the
50
+ * // layout instead of sharing its insert-order slot.
51
+ * report: relation.belongsTo('reports', 'reportId', { defer: true }),
52
+ * }),
53
+ * ```
54
+ */
55
+ export interface BelongsToOptions {
56
+ readonly index?: boolean;
57
+ readonly enrich?: boolean;
58
+ readonly defer?: boolean;
59
+ /**
60
+ * Marks the relation's target as this record's parent: the entity the record
61
+ * lives inside and inherits its access scope from. When a record is written,
62
+ * the engine routes it into its parent's sync group — following a chain of
63
+ * `parent` edges all the way up — so the change reaches everyone subscribed to
64
+ * the owning entity. This is the familiar rule that access flows down from a
65
+ * container to the things it holds, as a folder does to its files.
66
+ *
67
+ * Do not set `parent` on a reference that merely points at another record for
68
+ * provenance or as a template, such as `sourceSectionId` or `templateId`; doing
69
+ * so would leak the record into an unrelated scope. The engine also cannot
70
+ * infer the parent from whether a field is optional — many real parent keys
71
+ * are optional, like a root folder or an inbox task — so you must declare the
72
+ * parent edge explicitly.
73
+ *
74
+ * It reads naturally at the call site:
75
+ * `belongsTo('report', 'reportId', { parent: true })` — the report is the parent.
76
+ */
77
+ readonly parent?: boolean;
78
+ /**
79
+ * Emit a real Postgres foreign-key constraint for this relation when the
80
+ * engine provisions tables in a customer-owned database. This is independent
81
+ * of `parent`: `parent` decides which subscribers a change reaches, while
82
+ * `fk` decides whether the database enforces referential integrity. A relation
83
+ * may set either, both, or neither.
84
+ *
85
+ * Set `fk: true` only when the target row lives in the same database and is
86
+ * written in the same commit as this row, and points at a strong, contained
87
+ * entity. Leave it off provenance or template pointers (`sourceSectionId`,
88
+ * `templateId`), cross-tenant references, or anything that may be written in a
89
+ * different transaction than its target — a hard constraint there would reject
90
+ * the write and break out-of-order sync. The constraint is emitted as
91
+ * `DEFERRABLE INITIALLY DEFERRED, ON DELETE NO ACTION`: a plain integrity
92
+ * guard, leaving any cascade or null-on-delete behavior to the application.
93
+ */
94
+ readonly fk?: boolean;
95
+ }
96
+ declare const __relationType: unique symbol;
97
+ declare const __relationTarget: unique symbol;
98
+ declare const __relationField: unique symbol;
99
+ /**
100
+ * The three edges the engine resolves. Inferred from `wire/modelShape.ts`
101
+ * rather than restated: the set is reported to callers by `GET /api/schema`,
102
+ * so it is protocol, and protocol has one definition.
103
+ */
104
+ export type { RelationType } from '../wire/modelShape.js';
105
+ import type { RelationType } from '../wire/modelShape.js';
106
+ /**
107
+ * A relation definition, carrying its type information at both the type and
108
+ * runtime level.
109
+ *
110
+ * The `Options` generic captures a relation's options in the type system; only
111
+ * `belongsTo` uses it, while `hasMany` and `hasOne` leave it empty. The `const`
112
+ * modifier on the `belongsTo` factory preserves literal inference, so
113
+ * `{ enrich: true }` is remembered as `true` rather than widened to `boolean`,
114
+ * letting type-level features read the exact option value.
115
+ *
116
+ * `options` is always present at runtime: the factory substitutes an empty
117
+ * object when you omit it, so reading `options.index` or `options.enrich` needs
118
+ * no null check.
119
+ */
120
+ export interface RelationDef<Type extends RelationType = RelationType, Target extends string = string, Field extends string = string, Options extends BelongsToOptions = BelongsToOptions> {
121
+ readonly [__relationType]: Type;
122
+ readonly [__relationTarget]: Target;
123
+ readonly [__relationField]: Field;
124
+ /** Runtime metadata */
125
+ readonly type: Type;
126
+ readonly target: Target;
127
+ /**
128
+ * The field on the child model that holds the parent's id, as a camelCase
129
+ * schema field name. The engine reads `model[foreignKey]` to resolve the
130
+ * relation and to build client-side index keys; it is never interpolated into
131
+ * raw SQL — that is what {@link foreignKeyColumn} is for.
132
+ */
133
+ readonly foreignKey: Field;
134
+ /**
135
+ * The same foreign key expressed as a database column identifier.
136
+ * {@link foreignKey} is translated into this when you configure a `casing`
137
+ * option on `defineSchema` — for example `'snake_case'` turns `messageId`
138
+ * into `message_id`. The server interpolates this column name into SQL
139
+ * directly, because a driver's automatic camelCase-to-snake_case mapping does
140
+ * not reach identifiers embedded in raw SQL; resolving the name once at
141
+ * schema-build time is what makes it available there.
142
+ *
143
+ * Defaults to {@link foreignKey} when no `casing` option is set, so consumers
144
+ * whose database columns already match their field names need no
145
+ * configuration.
146
+ */
147
+ readonly foreignKeyColumn: string;
148
+ readonly options: Options;
149
+ /**
150
+ * Optional sort field for `hasMany` relations. When set, the
151
+ * generated relation getter sorts results by this field. Populated
152
+ * by `relation.hasMany(target, fk, { orderBy: 'fieldName' })`.
153
+ */
154
+ readonly _orderBy?: string;
155
+ }
156
+ export declare const relation: {
157
+ /**
158
+ * This model belongs to another model via a foreign key.
159
+ * e.g., Task belongs to Project via projectId
160
+ *
161
+ * ```ts
162
+ * // Simple reference (no options)
163
+ * project: relation.belongsTo('projects', 'projectId'),
164
+ *
165
+ * // Register an FK index for O(1) child lookups
166
+ * section: relation.belongsTo('sections', 'sectionId', { index: true }),
167
+ *
168
+ * // Auto-populate the parent on delta arrival
169
+ * team: relation.belongsTo('teams', 'teamId', { enrich: true }),
170
+ *
171
+ * // Both
172
+ * parent: relation.belongsTo('threads', 'parentId', { index: true, enrich: true }),
173
+ *
174
+ * // Mark the soft side of a cycle so the priority computer breaks
175
+ * // the cycle deterministically instead of tying the two models.
176
+ * report: relation.belongsTo('reports', 'reportId', { defer: true }),
177
+ * ```
178
+ */
179
+ readonly belongsTo: <Target extends string, Field extends string, const Opts extends BelongsToOptions = Record<string, never>>(target: Target, foreignKey: Field, options?: Opts) => RelationDef<"belongsTo", Target, Field, Opts>;
180
+ /**
181
+ * This model has many of another model — for example, a project has many
182
+ * tasks via `Task.projectId`.
183
+ *
184
+ * At runtime the engine adds a getter to the parent model that returns every
185
+ * child whose foreign key matches, and registers the foreign-key index on the
186
+ * child model automatically.
187
+ *
188
+ * ```ts
189
+ * blocks: relation.hasMany('blocks', 'sectionId'),
190
+ * // → section.blocks returns all Block[] where sectionId === section.id
191
+ *
192
+ * blocks: relation.hasMany('blocks', 'sectionId', { orderBy: 'zIndex' }),
193
+ * // → section.blocks returns Block[] sorted by zIndex ascending
194
+ * ```
195
+ */
196
+ readonly hasMany: <Target extends string, Field extends string>(target: Target, foreignKey: Field, options?: {
197
+ orderBy?: string;
198
+ }) => RelationDef<"hasMany", Target, Field>;
199
+ /**
200
+ * This model has one of another model — for example, a user has one profile
201
+ * via `Profile.userId`.
202
+ */
203
+ readonly hasOne: <Target extends string, Field extends string>(target: Target, foreignKey: Field) => RelationDef<"hasOne", Target, Field>;
204
+ };
205
+ //# sourceMappingURL=relation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/schema/relation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;;;;;;;;OAiBG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;CACvB;AAID,OAAO,CAAC,MAAM,cAAc,EAAE,OAAO,MAAM,CAAC;AAC5C,OAAO,CAAC,MAAM,gBAAgB,EAAE,OAAO,MAAM,CAAC;AAC9C,OAAO,CAAC,MAAM,eAAe,EAAE,OAAO,MAAM,CAAC;AAE7C;;;;GAIG;AACH,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,WAAW,CAC1B,IAAI,SAAS,YAAY,GAAG,YAAY,EACxC,MAAM,SAAS,MAAM,GAAG,MAAM,EAC9B,KAAK,SAAS,MAAM,GAAG,MAAM,EAC7B,OAAO,SAAS,gBAAgB,GAAG,gBAAgB;IAEnD,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC;IAChC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC;IAElC,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AA8CD,eAAO,MAAM,QAAQ;IACnB;;;;;;;;;;;;;;;;;;;;;OAqBG;yBAED,MAAM,SAAS,MAAM,EACrB,KAAK,SAAS,MAAM,QACd,IAAI,SAAS,gBAAgB,kCAE3B,MAAM,cACF,KAAK,YACP,IAAI,KACb,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;IAIhD;;;;;;;;;;;;;;;OAeG;uBACK,MAAM,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,UACzC,MAAM,cACF,KAAK,YACP;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAC7B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC;IAQxC;;;OAGG;sBACI,MAAM,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,UACxC,MAAM,cACF,KAAK,KAChB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC;CAG/B,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Declarative relations between your models — the edges that turn a flat set
3
+ * of models into a graph. You attach relations to a model with the
4
+ * {@link relation} factories; the engine reads them to index foreign keys for
5
+ * fast child lookups, to order inserts so a parent row lands before the rows
6
+ * that reference it, and to generate the accessor properties that let you read
7
+ * `task.project` or `project.tasks` directly.
8
+ *
9
+ * Usage:
10
+ * import { relation } from '@abloatai/transaction/schema';
11
+ *
12
+ * const taskRelations = {
13
+ * project: relation.belongsTo('projects', 'projectId'),
14
+ * assignee: relation.belongsTo('users', 'assigneeId'),
15
+ * comments: relation.hasMany('comments', 'taskId'),
16
+ * };
17
+ */
18
+ // ── Internal relation builder ─────────────────────────────────────────────
19
+ class RelationBuilder {
20
+ type;
21
+ target;
22
+ foreignKey;
23
+ /**
24
+ * Starts out identical to {@link foreignKey}. `defineSchema` overwrites
25
+ * this when a `casing` option is set — it's declared as a mutable
26
+ * (non-readonly on the implementation side) so the schema builder can
27
+ * resolve it once at build time without allocating a new object per
28
+ * relation. Consumers see it typed as `readonly` on {@link RelationDef}.
29
+ */
30
+ foreignKeyColumn;
31
+ options;
32
+ /**
33
+ * Stashed by `hasMany` when the caller provides `{ orderBy }`. Read
34
+ * back in `createSyncEngine` to install the sort comparator on the
35
+ * generated relation getter. Declared on the builder so both writer
36
+ * and reader stay type-safe — no double-cast smuggle through `Record<...>`.
37
+ */
38
+ _orderBy;
39
+ constructor(type, target, foreignKey, options) {
40
+ this.type = type;
41
+ this.target = target;
42
+ this.foreignKey = foreignKey;
43
+ this.foreignKeyColumn = foreignKey;
44
+ this.options = (options ?? {});
45
+ }
46
+ }
47
+ // ── Public relation factories ─────────────────────────────────────────────
48
+ export const relation = {
49
+ /**
50
+ * This model belongs to another model via a foreign key.
51
+ * e.g., Task belongs to Project via projectId
52
+ *
53
+ * ```ts
54
+ * // Simple reference (no options)
55
+ * project: relation.belongsTo('projects', 'projectId'),
56
+ *
57
+ * // Register an FK index for O(1) child lookups
58
+ * section: relation.belongsTo('sections', 'sectionId', { index: true }),
59
+ *
60
+ * // Auto-populate the parent on delta arrival
61
+ * team: relation.belongsTo('teams', 'teamId', { enrich: true }),
62
+ *
63
+ * // Both
64
+ * parent: relation.belongsTo('threads', 'parentId', { index: true, enrich: true }),
65
+ *
66
+ * // Mark the soft side of a cycle so the priority computer breaks
67
+ * // the cycle deterministically instead of tying the two models.
68
+ * report: relation.belongsTo('reports', 'reportId', { defer: true }),
69
+ * ```
70
+ */
71
+ belongsTo(target, foreignKey, options) {
72
+ return new RelationBuilder('belongsTo', target, foreignKey, options ?? {});
73
+ },
74
+ /**
75
+ * This model has many of another model — for example, a project has many
76
+ * tasks via `Task.projectId`.
77
+ *
78
+ * At runtime the engine adds a getter to the parent model that returns every
79
+ * child whose foreign key matches, and registers the foreign-key index on the
80
+ * child model automatically.
81
+ *
82
+ * ```ts
83
+ * blocks: relation.hasMany('blocks', 'sectionId'),
84
+ * // → section.blocks returns all Block[] where sectionId === section.id
85
+ *
86
+ * blocks: relation.hasMany('blocks', 'sectionId', { orderBy: 'zIndex' }),
87
+ * // → section.blocks returns Block[] sorted by zIndex ascending
88
+ * ```
89
+ */
90
+ hasMany(target, foreignKey, options) {
91
+ const builder = new RelationBuilder('hasMany', target, foreignKey);
92
+ if (options?.orderBy) {
93
+ builder._orderBy = options.orderBy;
94
+ }
95
+ return builder;
96
+ },
97
+ /**
98
+ * This model has one of another model — for example, a user has one profile
99
+ * via `Profile.userId`.
100
+ */
101
+ hasOne(target, foreignKey) {
102
+ return new RelationBuilder('hasOne', target, foreignKey);
103
+ },
104
+ };
105
+ //# sourceMappingURL=relation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/schema/relation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA6JH,6EAA6E;AAE7E,MAAM,eAAe;IAWV,IAAI,CAAO;IACX,MAAM,CAAS;IACf,UAAU,CAAQ;IAC3B;;;;;;OAMG;IACH,gBAAgB,CAAS;IAChB,OAAO,CAAU;IAC1B;;;;;OAKG;IACH,QAAQ,CAAU;IAElB,YAAY,IAAU,EAAE,MAAc,EAAE,UAAiB,EAAE,OAAiB;QAC1E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,IAAK,EAAc,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,6EAA6E;AAE7E,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,SAAS,CAKP,MAAc,EACd,UAAiB,EACjB,OAAc;QAEd,OAAO,IAAI,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,IAAK,EAAW,CAAC,CAAC;IACvF,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CACL,MAAc,EACd,UAAiB,EACjB,OAA8B;QAE9B,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACnE,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QACrC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,MAAM,CACJ,MAAc,EACd,UAAiB;QAEjB,OAAO,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC3D,CAAC;CACO,CAAC"}