@fragno-dev/db 0.2.2 → 0.4.1

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 (587) hide show
  1. package/.turbo/turbo-build.log +404 -175
  2. package/CHANGELOG.md +109 -0
  3. package/README.md +54 -9
  4. package/dist/adapters/adapters.d.ts +23 -21
  5. package/dist/adapters/adapters.d.ts.map +1 -1
  6. package/dist/adapters/adapters.js.map +1 -1
  7. package/dist/adapters/generic-sql/driver-config.d.ts +16 -1
  8. package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -1
  9. package/dist/adapters/generic-sql/driver-config.js +23 -1
  10. package/dist/adapters/generic-sql/driver-config.js.map +1 -1
  11. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +24 -9
  12. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
  13. package/dist/adapters/generic-sql/generic-sql-adapter.js +60 -22
  14. package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
  15. package/dist/adapters/generic-sql/generic-sql-uow-executor.js +169 -3
  16. package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
  17. package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -1
  18. package/dist/adapters/generic-sql/migration/dialect/mysql.js +25 -6
  19. package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
  20. package/dist/adapters/generic-sql/migration/dialect/postgres.js +7 -6
  21. package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
  22. package/dist/adapters/generic-sql/migration/dialect/sqlite.js +193 -16
  23. package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
  24. package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -1
  25. package/dist/adapters/generic-sql/migration/executor.js +30 -3
  26. package/dist/adapters/generic-sql/migration/executor.js.map +1 -1
  27. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -1
  28. package/dist/adapters/generic-sql/migration/prepared-migrations.js +9 -9
  29. package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
  30. package/dist/adapters/generic-sql/migration/sql-generator.js +75 -52
  31. package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
  32. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +7 -6
  33. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
  34. package/dist/adapters/generic-sql/query/cursor-utils.js +42 -4
  35. package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -1
  36. package/dist/adapters/generic-sql/query/db-now-sql.js +27 -0
  37. package/dist/adapters/generic-sql/query/db-now-sql.js.map +1 -0
  38. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +32 -21
  39. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
  40. package/dist/adapters/generic-sql/query/select-builder.js +5 -3
  41. package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
  42. package/dist/adapters/generic-sql/query/sql-query-compiler.js +49 -18
  43. package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
  44. package/dist/adapters/generic-sql/query/where-builder.js +43 -29
  45. package/dist/adapters/generic-sql/query/where-builder.js.map +1 -1
  46. package/dist/adapters/generic-sql/sqlite-storage.d.ts +13 -0
  47. package/dist/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
  48. package/dist/adapters/generic-sql/sqlite-storage.js +15 -0
  49. package/dist/adapters/generic-sql/sqlite-storage.js.map +1 -0
  50. package/dist/adapters/generic-sql/uow-decoder.js +6 -2
  51. package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
  52. package/dist/adapters/generic-sql/uow-encoder.js +27 -8
  53. package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
  54. package/dist/adapters/in-memory/condition-evaluator.js +135 -0
  55. package/dist/adapters/in-memory/condition-evaluator.js.map +1 -0
  56. package/dist/adapters/in-memory/errors.d.ts +13 -0
  57. package/dist/adapters/in-memory/errors.d.ts.map +1 -0
  58. package/dist/adapters/in-memory/errors.js +23 -0
  59. package/dist/adapters/in-memory/errors.js.map +1 -0
  60. package/dist/adapters/in-memory/in-memory-adapter.d.ts +27 -0
  61. package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -0
  62. package/dist/adapters/in-memory/in-memory-adapter.js +196 -0
  63. package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
  64. package/dist/adapters/in-memory/in-memory-uow.js +871 -0
  65. package/dist/adapters/in-memory/in-memory-uow.js.map +1 -0
  66. package/dist/adapters/in-memory/index.d.ts +4 -0
  67. package/dist/adapters/in-memory/index.js +4 -0
  68. package/dist/adapters/in-memory/options.d.ts +30 -0
  69. package/dist/adapters/in-memory/options.d.ts.map +1 -0
  70. package/dist/adapters/in-memory/options.js +62 -0
  71. package/dist/adapters/in-memory/options.js.map +1 -0
  72. package/dist/adapters/in-memory/reference-resolution.js +26 -0
  73. package/dist/adapters/in-memory/reference-resolution.js.map +1 -0
  74. package/dist/adapters/in-memory/sorted-array-index.js +129 -0
  75. package/dist/adapters/in-memory/sorted-array-index.js.map +1 -0
  76. package/dist/adapters/in-memory/store.js +71 -0
  77. package/dist/adapters/in-memory/store.js.map +1 -0
  78. package/dist/adapters/in-memory/value-comparison.js +28 -0
  79. package/dist/adapters/in-memory/value-comparison.js.map +1 -0
  80. package/dist/adapters/shared/from-unit-of-work-compiler.js +51 -24
  81. package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -1
  82. package/dist/adapters/shared/uow-operation-compiler.js +11 -11
  83. package/dist/adapters/shared/uow-operation-compiler.js.map +1 -1
  84. package/dist/adapters/sql/index.d.ts +5 -0
  85. package/dist/adapters/sql/index.js +4 -0
  86. package/dist/browser/adapters/adapters.d.ts +61 -0
  87. package/dist/browser/adapters/adapters.d.ts.map +1 -0
  88. package/dist/browser/adapters/generic-sql/migration/executor.d.ts +15 -0
  89. package/dist/browser/adapters/generic-sql/migration/executor.d.ts.map +1 -0
  90. package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
  91. package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
  92. package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts +11 -0
  93. package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
  94. package/dist/browser/adapters/in-memory/in-memory-adapter.d.ts +5 -0
  95. package/dist/browser/adapters/in-memory/index.d.ts +2 -0
  96. package/dist/browser/adapters/in-memory/options.d.ts +1 -0
  97. package/dist/browser/db-fragment-definition-builder.d.ts +237 -0
  98. package/dist/browser/db-fragment-definition-builder.d.ts.map +1 -0
  99. package/dist/browser/durable-hooks.d.ts +3 -0
  100. package/dist/browser/fragments/internal-fragment.d.ts +317 -0
  101. package/dist/browser/fragments/internal-fragment.d.ts.map +1 -0
  102. package/dist/browser/fragments/internal-fragment.schema.d.ts +1 -0
  103. package/dist/browser/hooks/durable-hooks-logger.d.ts +10 -0
  104. package/dist/browser/hooks/durable-hooks-logger.d.ts.map +1 -0
  105. package/dist/browser/hooks/hooks.d.ts +146 -0
  106. package/dist/browser/hooks/hooks.d.ts.map +1 -0
  107. package/dist/browser/id.js +1 -0
  108. package/dist/browser/internal/adapter-registry.d.ts +4 -0
  109. package/dist/browser/internal/outbox-state.d.ts +2 -0
  110. package/dist/browser/mod.d.ts +15 -0
  111. package/dist/browser/mod.d.ts.map +1 -0
  112. package/dist/browser/mod.js +17 -0
  113. package/dist/browser/mod.js.map +1 -0
  114. package/dist/browser/mod2.d.ts +48 -0
  115. package/dist/browser/mod2.d.ts.map +1 -0
  116. package/dist/browser/naming/sql-naming.d.ts +19 -0
  117. package/dist/browser/naming/sql-naming.d.ts.map +1 -0
  118. package/dist/browser/outbox/outbox.d.ts +21 -0
  119. package/dist/browser/outbox/outbox.d.ts.map +1 -0
  120. package/dist/browser/query/column-defaults.js +1 -0
  121. package/dist/browser/query/condition-builder.d.ts +44 -0
  122. package/dist/browser/query/condition-builder.d.ts.map +1 -0
  123. package/dist/browser/query/condition-builder.js +97 -0
  124. package/dist/browser/query/condition-builder.js.map +1 -0
  125. package/dist/browser/query/cursor.d.ts +105 -0
  126. package/dist/browser/query/cursor.d.ts.map +1 -0
  127. package/dist/browser/query/cursor.js +150 -0
  128. package/dist/browser/query/cursor.js.map +1 -0
  129. package/dist/browser/query/db-now.d.ts +22 -0
  130. package/dist/browser/query/db-now.d.ts.map +1 -0
  131. package/dist/browser/query/db-now.js +33 -0
  132. package/dist/browser/query/db-now.js.map +1 -0
  133. package/dist/browser/query/orm/orm.d.ts +18 -0
  134. package/dist/browser/query/orm/orm.d.ts.map +1 -0
  135. package/dist/browser/query/simple-query-interface.d.ts +108 -0
  136. package/dist/browser/query/simple-query-interface.d.ts.map +1 -0
  137. package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts +423 -0
  138. package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
  139. package/dist/browser/query/unit-of-work/execute-unit-of-work.js +507 -0
  140. package/dist/browser/query/unit-of-work/execute-unit-of-work.js.map +1 -0
  141. package/dist/browser/query/unit-of-work/retry-policy.d.ts +23 -0
  142. package/dist/browser/query/unit-of-work/retry-policy.d.ts.map +1 -0
  143. package/dist/browser/query/unit-of-work/retry-policy.js +40 -0
  144. package/dist/browser/query/unit-of-work/retry-policy.js.map +1 -0
  145. package/dist/browser/query/unit-of-work/unit-of-work.d.ts +703 -0
  146. package/dist/browser/query/unit-of-work/unit-of-work.d.ts.map +1 -0
  147. package/dist/browser/query/unit-of-work/unit-of-work.js +1206 -0
  148. package/dist/browser/query/unit-of-work/unit-of-work.js.map +1 -0
  149. package/dist/browser/query/value-encoding.js +38 -0
  150. package/dist/browser/query/value-encoding.js.map +1 -0
  151. package/dist/browser/schema/create.d.ts +326 -0
  152. package/dist/browser/schema/create.d.ts.map +1 -0
  153. package/dist/browser/schema/create.js +89 -0
  154. package/dist/browser/schema/create.js.map +1 -0
  155. package/dist/browser/schema/generate-id.js +28 -0
  156. package/dist/browser/schema/generate-id.js.map +1 -0
  157. package/dist/browser/shared/providers.d.ts +6 -0
  158. package/dist/browser/shared/providers.d.ts.map +1 -0
  159. package/dist/browser/sql-driver/connection/connection-provider.d.ts +13 -0
  160. package/dist/browser/sql-driver/connection/connection-provider.d.ts.map +1 -0
  161. package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
  162. package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
  163. package/dist/browser/sql-driver/driver/runtime-driver.d.ts +23 -0
  164. package/dist/browser/sql-driver/driver/runtime-driver.d.ts.map +1 -0
  165. package/dist/browser/sql-driver/query-executor/plugin.d.ts +17 -0
  166. package/dist/browser/sql-driver/query-executor/plugin.d.ts.map +1 -0
  167. package/dist/browser/sql-driver/query-executor/query-executor.d.ts +36 -0
  168. package/dist/browser/sql-driver/query-executor/query-executor.d.ts.map +1 -0
  169. package/dist/browser/sql-driver/sql-driver-adapter.d.ts +29 -0
  170. package/dist/browser/sql-driver/sql-driver-adapter.d.ts.map +1 -0
  171. package/dist/browser/sql-driver/sql-driver.d.ts +38 -0
  172. package/dist/browser/sql-driver/sql-driver.d.ts.map +1 -0
  173. package/dist/browser/sync/commands.d.ts +15 -0
  174. package/dist/browser/sync/commands.d.ts.map +1 -0
  175. package/dist/browser/sync/commands.js +27 -0
  176. package/dist/browser/sync/commands.js.map +1 -0
  177. package/dist/browser/sync/types.d.ts +63 -0
  178. package/dist/browser/sync/types.d.ts.map +1 -0
  179. package/dist/browser/util/types.d.ts +8 -0
  180. package/dist/browser/util/types.d.ts.map +1 -0
  181. package/dist/browser/with-database.d.ts +29 -0
  182. package/dist/browser/with-database.d.ts.map +1 -0
  183. package/dist/client.d.ts +4 -0
  184. package/dist/client.js +5 -0
  185. package/dist/db-fragment-definition-builder.d.ts +101 -33
  186. package/dist/db-fragment-definition-builder.d.ts.map +1 -1
  187. package/dist/db-fragment-definition-builder.js +450 -60
  188. package/dist/db-fragment-definition-builder.js.map +1 -1
  189. package/dist/dispatchers/cloudflare-do/dispatcher.d.ts +20 -0
  190. package/dist/dispatchers/cloudflare-do/dispatcher.d.ts.map +1 -0
  191. package/dist/dispatchers/cloudflare-do/dispatcher.js +147 -0
  192. package/dist/dispatchers/cloudflare-do/dispatcher.js.map +1 -0
  193. package/dist/dispatchers/cloudflare-do/index.d.ts +11 -0
  194. package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
  195. package/dist/dispatchers/cloudflare-do/index.js +31 -0
  196. package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
  197. package/dist/dispatchers/node/dispatcher.d.ts +14 -0
  198. package/dist/dispatchers/node/dispatcher.d.ts.map +1 -0
  199. package/dist/dispatchers/node/dispatcher.js +80 -0
  200. package/dist/dispatchers/node/dispatcher.js.map +1 -0
  201. package/dist/dispatchers/node/index.d.ts +12 -0
  202. package/dist/dispatchers/node/index.d.ts.map +1 -0
  203. package/dist/dispatchers/node/index.js +27 -0
  204. package/dist/dispatchers/node/index.js.map +1 -0
  205. package/dist/durable-hooks.d.ts +31 -0
  206. package/dist/durable-hooks.d.ts.map +1 -0
  207. package/dist/durable-hooks.js +23 -0
  208. package/dist/durable-hooks.js.map +1 -0
  209. package/dist/fragments/internal-fragment.d.ts +186 -8
  210. package/dist/fragments/internal-fragment.d.ts.map +1 -1
  211. package/dist/fragments/internal-fragment.js +203 -38
  212. package/dist/fragments/internal-fragment.js.map +1 -1
  213. package/dist/fragments/internal-fragment.routes.js +164 -0
  214. package/dist/fragments/internal-fragment.routes.js.map +1 -0
  215. package/dist/fragments/internal-fragment.schema.d.ts +15 -0
  216. package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
  217. package/dist/fragments/internal-fragment.schema.js +39 -0
  218. package/dist/fragments/internal-fragment.schema.js.map +1 -0
  219. package/dist/hooks/durable-hooks-logger.d.ts +10 -0
  220. package/dist/hooks/durable-hooks-logger.d.ts.map +1 -0
  221. package/dist/hooks/durable-hooks-logger.js +75 -0
  222. package/dist/hooks/durable-hooks-logger.js.map +1 -0
  223. package/dist/hooks/durable-hooks-processor.d.ts +1 -0
  224. package/dist/hooks/durable-hooks-processor.js +80 -0
  225. package/dist/hooks/durable-hooks-processor.js.map +1 -0
  226. package/dist/hooks/durable-hooks-runtime.js +44 -0
  227. package/dist/hooks/durable-hooks-runtime.js.map +1 -0
  228. package/dist/hooks/hooks.d.ts +100 -1
  229. package/dist/hooks/hooks.d.ts.map +1 -1
  230. package/dist/hooks/hooks.js +254 -27
  231. package/dist/hooks/hooks.js.map +1 -1
  232. package/dist/id.d.ts +2 -2
  233. package/dist/id.js +2 -2
  234. package/dist/internal/adapter-registry.d.ts +11 -0
  235. package/dist/internal/adapter-registry.d.ts.map +1 -0
  236. package/dist/internal/adapter-registry.js +135 -0
  237. package/dist/internal/adapter-registry.js.map +1 -0
  238. package/dist/internal/outbox-state.d.ts +2 -0
  239. package/dist/internal/outbox-state.js +26 -0
  240. package/dist/internal/outbox-state.js.map +1 -0
  241. package/dist/migration-engine/auto-from-schema.d.ts +33 -0
  242. package/dist/migration-engine/auto-from-schema.d.ts.map +1 -0
  243. package/dist/migration-engine/auto-from-schema.js +223 -37
  244. package/dist/migration-engine/auto-from-schema.js.map +1 -1
  245. package/dist/migration-engine/generation-engine.d.ts +16 -10
  246. package/dist/migration-engine/generation-engine.d.ts.map +1 -1
  247. package/dist/migration-engine/generation-engine.js +86 -35
  248. package/dist/migration-engine/generation-engine.js.map +1 -1
  249. package/dist/migration-engine/shared.d.ts +113 -0
  250. package/dist/migration-engine/shared.d.ts.map +1 -0
  251. package/dist/migration-engine/shared.js.map +1 -1
  252. package/dist/mod.d.ts +20 -12
  253. package/dist/mod.d.ts.map +1 -1
  254. package/dist/mod.js +18 -12
  255. package/dist/mod.js.map +1 -1
  256. package/dist/naming/sql-naming.d.ts +19 -0
  257. package/dist/naming/sql-naming.d.ts.map +1 -0
  258. package/dist/naming/sql-naming.js +116 -0
  259. package/dist/naming/sql-naming.js.map +1 -0
  260. package/dist/outbox/outbox-builder.js +156 -0
  261. package/dist/outbox/outbox-builder.js.map +1 -0
  262. package/dist/outbox/outbox.d.ts +54 -0
  263. package/dist/outbox/outbox.d.ts.map +1 -0
  264. package/dist/outbox/outbox.js +37 -0
  265. package/dist/outbox/outbox.js.map +1 -0
  266. package/dist/query/column-defaults.js +20 -4
  267. package/dist/query/column-defaults.js.map +1 -1
  268. package/dist/query/condition-builder.d.ts +7 -1
  269. package/dist/query/condition-builder.d.ts.map +1 -1
  270. package/dist/query/condition-builder.js +5 -1
  271. package/dist/query/condition-builder.js.map +1 -1
  272. package/dist/query/cursor-client.d.ts +105 -0
  273. package/dist/query/cursor-client.d.ts.map +1 -0
  274. package/dist/query/cursor-client.js +165 -0
  275. package/dist/query/cursor-client.js.map +1 -0
  276. package/dist/query/cursor.d.ts +3 -1
  277. package/dist/query/cursor.d.ts.map +1 -1
  278. package/dist/query/cursor.js +51 -14
  279. package/dist/query/cursor.js.map +1 -1
  280. package/dist/query/db-now.d.ts +22 -0
  281. package/dist/query/db-now.d.ts.map +1 -0
  282. package/dist/query/db-now.js +35 -0
  283. package/dist/query/db-now.js.map +1 -0
  284. package/dist/query/orm/orm.js.map +1 -1
  285. package/dist/query/serialize/create-sql-serializer.js +5 -4
  286. package/dist/query/serialize/create-sql-serializer.js.map +1 -1
  287. package/dist/query/serialize/dialect/mysql-serializer.js +12 -6
  288. package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
  289. package/dist/query/serialize/dialect/postgres-serializer.js +25 -7
  290. package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
  291. package/dist/query/serialize/dialect/sqlite-serializer.js +60 -12
  292. package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
  293. package/dist/query/serialize/sql-serializer.js +2 -2
  294. package/dist/query/serialize/sql-serializer.js.map +1 -1
  295. package/dist/query/simple-query-interface.d.ts +13 -4
  296. package/dist/query/simple-query-interface.d.ts.map +1 -1
  297. package/dist/query/unit-of-work/execute-unit-of-work.d.ts +37 -2
  298. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
  299. package/dist/query/unit-of-work/execute-unit-of-work.js +50 -24
  300. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
  301. package/dist/query/unit-of-work/unit-of-work.d.ts +92 -30
  302. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
  303. package/dist/query/unit-of-work/unit-of-work.js +136 -11
  304. package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
  305. package/dist/query/value-decoding.js +16 -6
  306. package/dist/query/value-decoding.js.map +1 -1
  307. package/dist/query/value-encoding.js +29 -9
  308. package/dist/query/value-encoding.js.map +1 -1
  309. package/dist/schema/create.d.ts +103 -35
  310. package/dist/schema/create.d.ts.map +1 -1
  311. package/dist/schema/create.js +172 -58
  312. package/dist/schema/create.js.map +1 -1
  313. package/dist/schema/generate-id.js +2 -2
  314. package/dist/schema/generate-id.js.map +1 -1
  315. package/dist/schema/type-conversion/create-sql-type-mapper.js +4 -3
  316. package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
  317. package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
  318. package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
  319. package/dist/schema/validator.d.ts +10 -0
  320. package/dist/schema/validator.d.ts.map +1 -0
  321. package/dist/schema/validator.js +123 -0
  322. package/dist/schema/validator.js.map +1 -0
  323. package/dist/schema-output/drizzle.d.ts +30 -0
  324. package/dist/schema-output/drizzle.d.ts.map +1 -0
  325. package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +88 -60
  326. package/dist/schema-output/drizzle.js.map +1 -0
  327. package/dist/schema-output/prisma.d.ts +17 -0
  328. package/dist/schema-output/prisma.d.ts.map +1 -0
  329. package/dist/schema-output/prisma.js +307 -0
  330. package/dist/schema-output/prisma.js.map +1 -0
  331. package/dist/sql-driver/dialects/durable-object-dialect.js +3 -9
  332. package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -1
  333. package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -1
  334. package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -1
  335. package/dist/sql-driver/sql-driver-adapter.js.map +1 -1
  336. package/dist/sql-driver/sql.js.map +1 -1
  337. package/dist/sync/commands.d.ts +15 -0
  338. package/dist/sync/commands.d.ts.map +1 -0
  339. package/dist/sync/commands.js +27 -0
  340. package/dist/sync/commands.js.map +1 -0
  341. package/dist/sync/index.d.ts +4 -0
  342. package/dist/sync/index.js +4 -0
  343. package/dist/sync/read-tracking.d.ts +25 -0
  344. package/dist/sync/read-tracking.d.ts.map +1 -0
  345. package/dist/sync/read-tracking.js +148 -0
  346. package/dist/sync/read-tracking.js.map +1 -0
  347. package/dist/sync/submit.js +213 -0
  348. package/dist/sync/submit.js.map +1 -0
  349. package/dist/sync/types.d.ts +63 -0
  350. package/dist/sync/types.d.ts.map +1 -0
  351. package/dist/util/default-database-adapter.js +66 -0
  352. package/dist/util/default-database-adapter.js.map +1 -0
  353. package/dist/with-database.d.ts +3 -6
  354. package/dist/with-database.d.ts.map +1 -1
  355. package/dist/with-database.js +8 -7
  356. package/dist/with-database.js.map +1 -1
  357. package/package.json +62 -55
  358. package/src/adapters/adapters.ts +33 -26
  359. package/src/adapters/drizzle/migrate-drizzle.test.ts +99 -41
  360. package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +601 -0
  361. package/src/adapters/drizzle/test-utils.ts +13 -8
  362. package/src/adapters/generic-sql/driver-config.ts +38 -0
  363. package/src/adapters/generic-sql/generic-sql-adapter.test.ts +10 -8
  364. package/src/adapters/generic-sql/generic-sql-adapter.ts +117 -34
  365. package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +55 -0
  366. package/src/adapters/generic-sql/generic-sql-uow-executor.ts +297 -3
  367. package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +120 -0
  368. package/src/adapters/generic-sql/migration/cold-kysely.ts +1 -0
  369. package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +27 -8
  370. package/src/adapters/generic-sql/migration/dialect/mysql.ts +47 -8
  371. package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +28 -9
  372. package/src/adapters/generic-sql/migration/dialect/postgres.ts +9 -4
  373. package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +839 -8
  374. package/src/adapters/generic-sql/migration/dialect/sqlite.ts +396 -53
  375. package/src/adapters/generic-sql/migration/executor.test.ts +52 -0
  376. package/src/adapters/generic-sql/migration/executor.ts +47 -4
  377. package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +238 -46
  378. package/src/adapters/generic-sql/migration/prepared-migrations.ts +21 -13
  379. package/src/adapters/generic-sql/migration/sql-generator.ts +145 -66
  380. package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +11 -8
  381. package/src/adapters/generic-sql/query/cursor-utils.test.ts +272 -0
  382. package/src/adapters/generic-sql/query/cursor-utils.ts +42 -7
  383. package/src/adapters/generic-sql/query/db-now-sql.ts +49 -0
  384. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +171 -35
  385. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +53 -40
  386. package/src/adapters/generic-sql/query/select-builder.test.ts +16 -11
  387. package/src/adapters/generic-sql/query/select-builder.ts +7 -3
  388. package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +75 -6
  389. package/src/adapters/generic-sql/query/sql-query-compiler.ts +129 -24
  390. package/src/adapters/generic-sql/query/where-builder.test.ts +96 -20
  391. package/src/adapters/generic-sql/query/where-builder.ts +112 -41
  392. package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +11 -20
  393. package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +851 -0
  394. package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +18 -15
  395. package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +282 -14
  396. package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +129 -12
  397. package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +9 -7
  398. package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
  399. package/src/adapters/generic-sql/uow-decoder.test.ts +5 -4
  400. package/src/adapters/generic-sql/uow-decoder.ts +23 -5
  401. package/src/adapters/generic-sql/uow-encoder.test.ts +36 -3
  402. package/src/adapters/generic-sql/uow-encoder.ts +48 -13
  403. package/src/adapters/in-memory/condition-evaluator.test.ts +194 -0
  404. package/src/adapters/in-memory/condition-evaluator.ts +280 -0
  405. package/src/adapters/in-memory/errors.ts +20 -0
  406. package/src/adapters/in-memory/in-memory-adapter.ts +388 -0
  407. package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +344 -0
  408. package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +255 -0
  409. package/src/adapters/in-memory/in-memory-uow.ts +1724 -0
  410. package/src/adapters/in-memory/index.ts +3 -0
  411. package/src/adapters/in-memory/options.test.ts +42 -0
  412. package/src/adapters/in-memory/options.ts +91 -0
  413. package/src/adapters/in-memory/outbox.test.ts +361 -0
  414. package/src/adapters/in-memory/reference-resolution.test.ts +51 -0
  415. package/src/adapters/in-memory/reference-resolution.ts +67 -0
  416. package/src/adapters/in-memory/sorted-array-index.test.ts +124 -0
  417. package/src/adapters/in-memory/sorted-array-index.ts +228 -0
  418. package/src/adapters/in-memory/store.test.ts +69 -0
  419. package/src/adapters/in-memory/store.ts +145 -0
  420. package/src/adapters/in-memory/value-comparison.ts +53 -0
  421. package/src/adapters/in-memory/value-normalization.test.ts +58 -0
  422. package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1207 -0
  423. package/src/adapters/shared/from-unit-of-work-compiler.ts +159 -47
  424. package/src/adapters/shared/uow-operation-compiler.ts +28 -18
  425. package/src/adapters/sql/index.ts +12 -0
  426. package/src/browser/mod.ts +64 -0
  427. package/src/client.ts +19 -0
  428. package/src/db-fragment-definition-builder.test.ts +845 -53
  429. package/src/db-fragment-definition-builder.ts +911 -95
  430. package/src/db-fragment-instantiator.test.ts +210 -94
  431. package/src/db-fragment-integration.test.ts +17 -12
  432. package/src/dispatchers/cloudflare-do/dispatcher.ts +204 -0
  433. package/src/dispatchers/cloudflare-do/index.test.ts +206 -0
  434. package/src/dispatchers/cloudflare-do/index.ts +63 -0
  435. package/src/dispatchers/node/dispatcher.ts +112 -0
  436. package/src/dispatchers/node/index.test.ts +120 -0
  437. package/src/dispatchers/node/index.ts +50 -0
  438. package/src/durable-hooks.test.ts +80 -0
  439. package/src/durable-hooks.ts +67 -0
  440. package/src/fragments/internal-fragment.routes.test.ts +570 -0
  441. package/src/fragments/internal-fragment.routes.ts +334 -0
  442. package/src/fragments/internal-fragment.schema.ts +95 -0
  443. package/src/fragments/internal-fragment.test.ts +505 -83
  444. package/src/fragments/internal-fragment.ts +453 -70
  445. package/src/hooks/durable-hooks-logger.ts +126 -0
  446. package/src/hooks/durable-hooks-processor.pglite.test.ts +87 -0
  447. package/src/hooks/durable-hooks-processor.test.ts +282 -0
  448. package/src/hooks/durable-hooks-processor.ts +173 -0
  449. package/src/hooks/durable-hooks-runtime.test.ts +65 -0
  450. package/src/hooks/durable-hooks-runtime.ts +81 -0
  451. package/src/hooks/hooks.test.ts +455 -34
  452. package/src/hooks/hooks.ts +501 -34
  453. package/src/id.test.ts +34 -0
  454. package/src/id.ts +1 -3
  455. package/src/internal/adapter-registry.test.ts +93 -0
  456. package/src/internal/adapter-registry.ts +239 -0
  457. package/src/internal/outbox-state.ts +43 -0
  458. package/src/migration-engine/auto-from-schema.test.ts +107 -14
  459. package/src/migration-engine/auto-from-schema.ts +365 -44
  460. package/src/migration-engine/create.test.ts +4 -3
  461. package/src/migration-engine/create.ts +1 -1
  462. package/src/migration-engine/generation-engine.test.ts +292 -110
  463. package/src/migration-engine/generation-engine.ts +117 -66
  464. package/src/migration-engine/shared.ts +14 -0
  465. package/src/mod.ts +95 -39
  466. package/src/naming/sql-naming.ts +181 -0
  467. package/src/outbox/outbox-builder.ts +241 -0
  468. package/src/outbox/outbox.test.ts +424 -0
  469. package/src/outbox/outbox.ts +139 -0
  470. package/src/query/column-defaults.ts +42 -4
  471. package/src/query/condition-builder.test.ts +18 -3
  472. package/src/query/condition-builder.ts +7 -0
  473. package/src/query/cursor-client.test.ts +70 -0
  474. package/src/query/cursor-client.ts +263 -0
  475. package/src/query/cursor.test.ts +119 -20
  476. package/src/query/cursor.ts +88 -27
  477. package/src/query/db-now.ts +73 -0
  478. package/src/query/orm/orm.ts +2 -2
  479. package/src/query/query-type.test.ts +4 -3
  480. package/src/query/serialize/create-sql-serializer.ts +10 -5
  481. package/src/query/serialize/dialect/mysql-serializer.ts +13 -5
  482. package/src/query/serialize/dialect/postgres-serializer.ts +35 -5
  483. package/src/query/serialize/dialect/sqlite-serializer.test.ts +90 -3
  484. package/src/query/serialize/dialect/sqlite-serializer.ts +108 -12
  485. package/src/query/serialize/sql-serializer.ts +4 -4
  486. package/src/query/simple-query-interface.ts +15 -4
  487. package/src/query/unit-of-work/execute-unit-of-work.test.ts +372 -10
  488. package/src/query/unit-of-work/execute-unit-of-work.ts +87 -27
  489. package/src/query/unit-of-work/retry-policy.test.ts +1 -0
  490. package/src/query/unit-of-work/tx-builder.test.ts +73 -1
  491. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +17 -16
  492. package/src/query/unit-of-work/unit-of-work-types.test.ts +42 -12
  493. package/src/query/unit-of-work/unit-of-work.test.ts +196 -39
  494. package/src/query/unit-of-work/unit-of-work.ts +309 -38
  495. package/src/query/value-decoding.test.ts +63 -4
  496. package/src/query/value-decoding.ts +32 -6
  497. package/src/query/value-encoding.test.ts +86 -2
  498. package/src/query/value-encoding.ts +56 -6
  499. package/src/schema/create.test.ts +293 -47
  500. package/src/schema/create.ts +406 -70
  501. package/src/schema/generate-id.test.ts +3 -2
  502. package/src/schema/generate-id.ts +2 -2
  503. package/src/schema/serialize.test.ts +18 -5
  504. package/src/schema/type-conversion/create-sql-type-mapper.ts +8 -3
  505. package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
  506. package/src/schema/type-conversion/type-mapping.test.ts +26 -1
  507. package/src/schema/validator.test.ts +199 -0
  508. package/src/schema/validator.ts +232 -0
  509. package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +232 -129
  510. package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +155 -99
  511. package/src/schema-output/prisma.test.ts +694 -0
  512. package/src/schema-output/prisma.ts +593 -0
  513. package/src/sql-driver/better-sqlite3.test.ts +5 -3
  514. package/src/sql-driver/dialects/durable-object-dialect.ts +3 -8
  515. package/src/sql-driver/query-executor/default-query-executor.ts +1 -1
  516. package/src/sql-driver/query-executor/query-executor-base.ts +1 -1
  517. package/src/sql-driver/query-executor/query-executor.ts +1 -1
  518. package/src/sql-driver/sql-driver-adapter.ts +2 -2
  519. package/src/sql-driver/sql.ts +2 -1
  520. package/src/sql-driver/sqlocal.test.ts +4 -2
  521. package/src/sync/commands.test.ts +39 -0
  522. package/src/sync/commands.ts +51 -0
  523. package/src/sync/conflict-checker.test.ts +450 -0
  524. package/src/sync/conflict-checker.ts +248 -0
  525. package/src/sync/index.ts +14 -0
  526. package/src/sync/plan.ts +9 -0
  527. package/src/sync/read-tracking.test.ts +177 -0
  528. package/src/sync/read-tracking.ts +287 -0
  529. package/src/sync/submit.test.ts +205 -0
  530. package/src/sync/submit.ts +328 -0
  531. package/src/sync/types.ts +80 -0
  532. package/src/util/default-database-adapter.ts +119 -0
  533. package/src/with-database.ts +20 -31
  534. package/tsconfig.json +1 -1
  535. package/tsdown.config.ts +38 -24
  536. package/vitest.config.ts +1 -0
  537. package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
  538. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
  539. package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
  540. package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
  541. package/dist/adapters/drizzle/generate.d.ts +0 -30
  542. package/dist/adapters/drizzle/generate.d.ts.map +0 -1
  543. package/dist/adapters/drizzle/generate.js.map +0 -1
  544. package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
  545. package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
  546. package/dist/adapters/kysely/kysely-adapter.js +0 -17
  547. package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
  548. package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
  549. package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
  550. package/dist/adapters/shared/table-name-mapper.js +0 -43
  551. package/dist/adapters/shared/table-name-mapper.js.map +0 -1
  552. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +0 -165
  553. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
  554. package/dist/packages/fragno/dist/api/bind-services.js +0 -20
  555. package/dist/packages/fragno/dist/api/bind-services.js.map +0 -1
  556. package/dist/packages/fragno/dist/api/error.js +0 -48
  557. package/dist/packages/fragno/dist/api/error.js.map +0 -1
  558. package/dist/packages/fragno/dist/api/fragment-definition-builder.js +0 -320
  559. package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +0 -1
  560. package/dist/packages/fragno/dist/api/fragment-instantiator.js +0 -525
  561. package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +0 -1
  562. package/dist/packages/fragno/dist/api/fragno-response.js +0 -73
  563. package/dist/packages/fragno/dist/api/fragno-response.js.map +0 -1
  564. package/dist/packages/fragno/dist/api/internal/response-stream.js +0 -81
  565. package/dist/packages/fragno/dist/api/internal/response-stream.js.map +0 -1
  566. package/dist/packages/fragno/dist/api/internal/route.js +0 -10
  567. package/dist/packages/fragno/dist/api/internal/route.js.map +0 -1
  568. package/dist/packages/fragno/dist/api/mutable-request-state.js +0 -97
  569. package/dist/packages/fragno/dist/api/mutable-request-state.js.map +0 -1
  570. package/dist/packages/fragno/dist/api/request-context-storage.js +0 -43
  571. package/dist/packages/fragno/dist/api/request-context-storage.js.map +0 -1
  572. package/dist/packages/fragno/dist/api/request-input-context.js +0 -118
  573. package/dist/packages/fragno/dist/api/request-input-context.js.map +0 -1
  574. package/dist/packages/fragno/dist/api/request-middleware.js +0 -83
  575. package/dist/packages/fragno/dist/api/request-middleware.js.map +0 -1
  576. package/dist/packages/fragno/dist/api/request-output-context.js +0 -119
  577. package/dist/packages/fragno/dist/api/request-output-context.js.map +0 -1
  578. package/dist/packages/fragno/dist/api/route.js +0 -17
  579. package/dist/packages/fragno/dist/api/route.js.map +0 -1
  580. package/dist/packages/fragno/dist/internal/symbols.js +0 -10
  581. package/dist/packages/fragno/dist/internal/symbols.js.map +0 -1
  582. package/dist/schema-generator/schema-generator.d.ts +0 -15
  583. package/dist/schema-generator/schema-generator.d.ts.map +0 -1
  584. package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
  585. package/src/adapters/kysely/kysely-adapter.ts +0 -27
  586. package/src/adapters/shared/table-name-mapper.ts +0 -50
  587. package/src/schema-generator/schema-generator.ts +0 -12
@@ -0,0 +1,703 @@
1
+ import { DbInterval, DbIntervalInput, DbNow } from "../db-now.js";
2
+ import { Prettify } from "../../util/types.js";
3
+ import { AnySchema, AnyTable, FragnoId, IdColumn, Index, Relation } from "../../schema/create.js";
4
+ import { Condition, ConditionBuilder } from "../condition-builder.js";
5
+ import { Cursor, CursorResult } from "../cursor.js";
6
+ import { HookPayload, HooksMap, TriggerHookOptions, TriggeredHook } from "../../hooks/hooks.js";
7
+ import { CompiledJoin } from "../orm/orm.js";
8
+ import { ExtractJoinOut, ExtractSelect, SelectClause, SelectResult, TableToInsertValues, TableToUpdateValues } from "../simple-query-interface.js";
9
+
10
+ //#region src/query/unit-of-work/unit-of-work.d.ts
11
+
12
+ /**
13
+ * Builder for updateMany operations that supports both whereIndex and set chaining
14
+ */
15
+ interface UpdateManyBuilder<TTable extends AnyTable> {
16
+ whereIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, condition?: (eb: IndexSpecificConditionBuilder<TTable, TIndexName>) => Condition | boolean): this;
17
+ set(values: TableToUpdateValues<TTable>): this;
18
+ now(): DbNow;
19
+ interval(input: DbIntervalInput): DbInterval;
20
+ }
21
+ /**
22
+ * Extract column names from a single index
23
+ */
24
+ type IndexColumns<TIndex extends Index> = TIndex["columnNames"][number];
25
+ type RemoveEmptyObject<T> = T extends object ? (keyof T extends never ? never : T) : never;
26
+ type ExtractJoinBuilderSelect<T> = T extends JoinFindBuilder<infer _Table, infer TSelect, infer _JoinOut> ? TSelect : true;
27
+ type ExtractJoinBuilderOut<T> = T extends JoinFindBuilder<infer _Table, infer _Select, infer TJoinOut> ? TJoinOut : {};
28
+ /**
29
+ * Extract all indexed column names from a table's indexes
30
+ */
31
+ type IndexedColumns<TIndexes extends Record<string, Index>> = TIndexes[keyof TIndexes] extends Index ? IndexColumns<TIndexes[keyof TIndexes]> : never;
32
+ type OmitNever<T> = { [K in keyof T as T[K] extends never ? never : K]: T[K] };
33
+ /**
34
+ * Extract the name of the ID column from a table
35
+ * Checks if column has 'id' property set to true (which IdColumn class has)
36
+ */
37
+ type InferIdColumnName<TTable extends AnyTable> = keyof OmitNever<{ [K in keyof TTable["columns"]]: TTable["columns"][K] extends IdColumn<infer _, infer __, infer ___> ? K : never }>;
38
+ /**
39
+ * Get the columns for a specific index name.
40
+ * For "primary", returns only the ID column.
41
+ * For named indexes, returns the columns defined in that index.
42
+ */
43
+ type ColumnsForIndex<TTable extends AnyTable, TIndexName extends ValidIndexName<TTable>> = TIndexName extends "primary" ? Pick<TTable["columns"], InferIdColumnName<TTable>> : TIndexName extends keyof TTable["indexes"] ? Pick<TTable["columns"], IndexColumns<TTable["indexes"][TIndexName]>> : never;
44
+ /**
45
+ * ConditionBuilder restricted to indexed columns only.
46
+ * Used throughout Unit of Work to ensure all queries can leverage indexes for optimal performance.
47
+ */
48
+ type IndexedConditionBuilder<TTable extends AnyTable> = ConditionBuilder<Pick<TTable["columns"], IndexedColumns<TTable["indexes"]>>>;
49
+ /**
50
+ * ConditionBuilder restricted to columns in a specific index.
51
+ */
52
+ type IndexSpecificConditionBuilder<TTable extends AnyTable, TIndexName extends ValidIndexName<TTable>> = ConditionBuilder<ColumnsForIndex<TTable, TIndexName>>;
53
+ /**
54
+ * Valid index names for a table, including the static "primary" index
55
+ */
56
+ type ValidIndexName<TTable extends AnyTable> = "primary" | (string & keyof TTable["indexes"]);
57
+ /**
58
+ * Find options for Unit of Work (internal, used after builder finalization)
59
+ */
60
+ type FindOptions<TTable extends AnyTable = AnyTable, TSelect$1 extends SelectClause<TTable> = SelectClause<TTable>> = {
61
+ /**
62
+ * Which index to use for this query (required)
63
+ */
64
+ useIndex: string;
65
+ /**
66
+ * Select clause - which columns to return
67
+ */
68
+ select?: TSelect$1;
69
+ /**
70
+ * Where clause - filtering restricted to indexed columns only
71
+ */
72
+ where?: (eb: IndexedConditionBuilder<TTable>) => Condition | boolean;
73
+ /**
74
+ * Order by index - specify which index to order by and direction
75
+ */
76
+ orderByIndex?: {
77
+ indexName: string;
78
+ direction: "asc" | "desc";
79
+ };
80
+ /**
81
+ * Cursor for pagination - continue after this cursor
82
+ */
83
+ after?: Cursor | string;
84
+ /**
85
+ * Cursor for pagination - continue before this cursor
86
+ */
87
+ before?: Cursor | string;
88
+ /**
89
+ * Number of results per page
90
+ */
91
+ pageSize?: number;
92
+ /**
93
+ * Join operations to include related data
94
+ */
95
+ joins?: CompiledJoin[];
96
+ };
97
+ /**
98
+ * Unit of Work state machine
99
+ */
100
+ type UOWState = "building-retrieval" | "building-mutation" | "executed";
101
+ /**
102
+ * Retrieval operation - read operations in the first phase
103
+ */
104
+ type RetrievalOperation<TSchema extends AnySchema, TTable extends AnyTable = TSchema["tables"][keyof TSchema["tables"]]> = {
105
+ type: "find";
106
+ schema: TSchema;
107
+ namespace?: string | null;
108
+ table: TTable;
109
+ indexName: string;
110
+ options: FindOptions<TTable, SelectClause<TTable>>;
111
+ withCursor?: boolean;
112
+ withSingleResult?: boolean;
113
+ readTracking?: boolean;
114
+ } | {
115
+ type: "count";
116
+ schema: TSchema;
117
+ namespace?: string | null;
118
+ table: TTable;
119
+ indexName: string;
120
+ options: Pick<FindOptions<TTable>, "where" | "useIndex">;
121
+ };
122
+ /**
123
+ * Mutation operations - write operations in the second phase
124
+ */
125
+ type MutationOperation<TSchema extends AnySchema, TTable extends AnyTable = TSchema["tables"][keyof TSchema["tables"]]> = {
126
+ type: "update";
127
+ schema: TSchema;
128
+ namespace?: string | null;
129
+ table: TTable["name"];
130
+ id: FragnoId | string;
131
+ checkVersion: boolean;
132
+ set: TableToUpdateValues<TTable>;
133
+ } | {
134
+ type: "create";
135
+ schema: TSchema;
136
+ namespace?: string | null;
137
+ table: TTable["name"];
138
+ values: TableToInsertValues<TTable>;
139
+ generatedExternalId: string;
140
+ } | {
141
+ type: "delete";
142
+ schema: TSchema;
143
+ namespace?: string | null;
144
+ table: TTable["name"];
145
+ id: FragnoId | string;
146
+ checkVersion: boolean;
147
+ } | {
148
+ type: "check";
149
+ schema: TSchema;
150
+ namespace?: string | null;
151
+ table: TTable["name"];
152
+ id: FragnoId;
153
+ };
154
+ /**
155
+ * Compiled mutation with metadata for execution
156
+ */
157
+ interface CompiledMutation<TOutput> {
158
+ query: TOutput;
159
+ /**
160
+ * Original mutation operation for execution metadata (e.g., outbox payloads).
161
+ */
162
+ operation?: MutationOperation<AnySchema>;
163
+ /**
164
+ * Idempotency key for the Unit of Work that produced this mutation.
165
+ */
166
+ uowId?: string;
167
+ /**
168
+ * The type of mutation operation (create, update, delete, or check).
169
+ */
170
+ op: "create" | "update" | "delete" | "check";
171
+ /**
172
+ * Number of rows this operation must affect for the transaction to succeed.
173
+ * If actual affected rows doesn't match, it indicates a version conflict.
174
+ * null means don't check affected rows (e.g., for create operations).
175
+ */
176
+ expectedAffectedRows: bigint | null;
177
+ /**
178
+ * Number of rows this SELECT query must return for the transaction to succeed.
179
+ * Used for check operations to verify version without modifying data.
180
+ * null means this is not a SELECT query that needs row count validation.
181
+ */
182
+ expectedReturnedRows: number | null;
183
+ }
184
+ /**
185
+ * Compiler interface for Unit of Work operations
186
+ */
187
+ interface UOWCompiler<TOutput> {
188
+ /**
189
+ * Compile a retrieval operation to the adapter's query format
190
+ */
191
+ compileRetrievalOperation(op: RetrievalOperation<AnySchema>): TOutput | null;
192
+ /**
193
+ * Compile a mutation operation to the adapter's query format
194
+ */
195
+ compileMutationOperation(op: MutationOperation<AnySchema>): CompiledMutation<TOutput> | null;
196
+ }
197
+ type MutationResult = {
198
+ success: true;
199
+ createdInternalIds: (bigint | null)[];
200
+ } | {
201
+ success: false;
202
+ };
203
+ /**
204
+ * Executor interface for Unit of Work operations
205
+ */
206
+ interface UOWExecutor<TOutput, TRawResult = unknown> {
207
+ executeRetrievalPhase(retrievalBatch: TOutput[]): Promise<TRawResult[]>;
208
+ /**
209
+ * Returns success status indicating if mutations completed without conflicts,
210
+ * and internal IDs for create operations (null if database doesn't support RETURNING)
211
+ */
212
+ executeMutationPhase(mutationBatch: CompiledMutation<TOutput>[]): Promise<MutationResult>;
213
+ }
214
+ /**
215
+ * Decoder interface for Unit of Work retrieval results
216
+ *
217
+ * Transforms raw database results into application format (e.g., converting raw columns
218
+ * into FragnoId objects with external ID, internal ID, and version).
219
+ */
220
+ interface UOWDecoder<TRawInput = unknown> {
221
+ /**
222
+ * Decode raw database results from the retrieval phase
223
+ *
224
+ * @param rawResults - Array of raw result sets from database queries
225
+ * @param operations - Array of retrieval operations that produced these results
226
+ * @returns Decoded results in application format
227
+ */
228
+ decode(rawResults: TRawInput[], operations: RetrievalOperation<AnySchema>[]): unknown[];
229
+ }
230
+ /**
231
+ * Builder for find operations in Unit of Work
232
+ */
233
+ declare class FindBuilder<TTable extends AnyTable, TSelect$1 extends SelectClause<TTable> = true, TJoinOut$1 = {}> {
234
+ #private;
235
+ constructor(tableName: string, table: TTable);
236
+ /**
237
+ * Specify which index to use and optionally filter the results
238
+ */
239
+ whereIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, condition?: (eb: IndexSpecificConditionBuilder<TTable, TIndexName>) => Condition | boolean): this;
240
+ /**
241
+ * Specify columns to select
242
+ * @throws Error if selectCount() has already been called
243
+ */
244
+ select<const TNewSelect extends SelectClause<TTable>>(columns: TNewSelect): FindBuilder<TTable, TNewSelect, TJoinOut$1>;
245
+ /**
246
+ * Select count instead of records
247
+ * @throws Error if select() has already been called
248
+ */
249
+ selectCount(): this;
250
+ /**
251
+ * Order results by index in ascending or descending order
252
+ */
253
+ orderByIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, direction: "asc" | "desc"): this;
254
+ /**
255
+ * Set cursor to continue pagination after this point (forward pagination)
256
+ * If a Cursor object is provided, its metadata will be used to set defaults for
257
+ * index, orderByIndex, and pageSize (if not explicitly set)
258
+ */
259
+ after(cursor: Cursor | string): this;
260
+ /**
261
+ * Set cursor to continue pagination before this point (backward pagination)
262
+ * If a Cursor object is provided, its metadata will be used to set defaults for
263
+ * index, orderByIndex, and pageSize (if not explicitly set)
264
+ */
265
+ before(cursor: Cursor | string): this;
266
+ /**
267
+ * Set the number of results per page
268
+ * @throws {RangeError} If size is not a positive integer
269
+ */
270
+ pageSize(size: number): this;
271
+ /**
272
+ * Add joins to include related data
273
+ * Join where clauses are restricted to indexed columns only
274
+ */
275
+ join<TNewJoinOut>(joinFn: (jb: IndexedJoinBuilder<TTable, {}>) => IndexedJoinBuilder<TTable, TNewJoinOut>): FindBuilder<TTable, TSelect$1, TNewJoinOut>;
276
+ /**
277
+ * @internal
278
+ */
279
+ build(): {
280
+ type: "find";
281
+ indexName: string;
282
+ options: FindOptions<TTable, TSelect$1>;
283
+ } | {
284
+ type: "count";
285
+ indexName: string;
286
+ options: Pick<FindOptions<TTable>, "where" | "useIndex">;
287
+ };
288
+ }
289
+ /**
290
+ * Builder for update operations in Unit of Work
291
+ */
292
+ declare class UpdateBuilder<TTable extends AnyTable> {
293
+ #private;
294
+ constructor(tableName: string, id: FragnoId | string);
295
+ /**
296
+ * Specify values to update
297
+ */
298
+ set(values: TableToUpdateValues<TTable>): this;
299
+ /**
300
+ * Database timestamp helper for mutation values.
301
+ */
302
+ now(): DbNow;
303
+ interval(input: DbIntervalInput): DbInterval;
304
+ /**
305
+ * Enable version checking for optimistic concurrency control
306
+ * @throws Error if the ID is just a string (no version available)
307
+ */
308
+ check(): this;
309
+ /**
310
+ * @internal
311
+ */
312
+ build(): {
313
+ id: FragnoId | string;
314
+ checkVersion: boolean;
315
+ set: TableToUpdateValues<TTable>;
316
+ };
317
+ }
318
+ /**
319
+ * Builder for delete operations in Unit of Work
320
+ */
321
+ declare class DeleteBuilder {
322
+ #private;
323
+ constructor(tableName: string, id: FragnoId | string);
324
+ /**
325
+ * Enable version checking for optimistic concurrency control
326
+ * @throws Error if the ID is just a string (no version available)
327
+ */
328
+ check(): this;
329
+ /**
330
+ * @internal
331
+ */
332
+ build(): {
333
+ id: FragnoId | string;
334
+ checkVersion: boolean;
335
+ };
336
+ }
337
+ /**
338
+ * Builder for join operations in Unit of Work
339
+ * Similar to FindBuilder but tailored for joins (no cursor pagination, no count mode)
340
+ */
341
+ declare class JoinFindBuilder<TTable extends AnyTable, TSelect$1 extends SelectClause<TTable> = true, TJoinOut$1 = {}> {
342
+ #private;
343
+ constructor(tableName: string, table: TTable);
344
+ /**
345
+ * Specify which index to use and optionally filter the results
346
+ */
347
+ whereIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, condition?: (eb: IndexSpecificConditionBuilder<TTable, TIndexName>) => Condition | boolean): this;
348
+ /**
349
+ * Specify columns to select
350
+ */
351
+ select<const TNewSelect extends SelectClause<TTable>>(columns: TNewSelect): JoinFindBuilder<TTable, TNewSelect, TJoinOut$1>;
352
+ /**
353
+ * Order results by index in ascending or descending order
354
+ */
355
+ orderByIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, direction: "asc" | "desc"): this;
356
+ /**
357
+ * Set the number of results to return
358
+ * @throws {RangeError} If size is not a positive integer
359
+ */
360
+ pageSize(size: number): this;
361
+ /**
362
+ * Add joins to include related data
363
+ * Join where clauses are restricted to indexed columns only
364
+ */
365
+ join<TNewJoinOut>(joinFn: (jb: IndexedJoinBuilder<TTable, {}>) => IndexedJoinBuilder<TTable, TNewJoinOut>): JoinFindBuilder<TTable, TSelect$1, TJoinOut$1 & TNewJoinOut>;
366
+ /**
367
+ * @internal
368
+ */
369
+ build(): {
370
+ indexName: string | undefined;
371
+ select: TSelect$1 | undefined;
372
+ where: ((eb: IndexedConditionBuilder<TTable>) => Condition | boolean) | undefined;
373
+ orderByIndex: {
374
+ indexName: string;
375
+ direction: "asc" | "desc";
376
+ } | undefined;
377
+ pageSize: number | undefined;
378
+ joins: CompiledJoin[] | undefined;
379
+ };
380
+ }
381
+ interface MapRelationType<T> {
382
+ one: RemoveEmptyObject<T> | null;
383
+ many: RemoveEmptyObject<T>[];
384
+ }
385
+ /**
386
+ * Join builder with indexed-only where clauses for Unit of Work
387
+ * TJoinOut accumulates the types of all joined relations
388
+ */
389
+ type IndexedJoinBuilder<TTable extends AnyTable, TJoinOut$1> = { [K in keyof TTable["relations"]]: TTable["relations"][K] extends Relation<infer TRelationType, infer TTargetTable> ? <TBuilderFn extends (builder: JoinFindBuilder<TTable["relations"][K]["table"]>) => unknown = (builder: JoinFindBuilder<TTable["relations"][K]["table"]>) => JoinFindBuilder<TTable["relations"][K]["table"]>>(builderFn?: TBuilderFn) => IndexedJoinBuilder<TTable, TJoinOut$1 & { [P in K]: MapRelationType<SelectResult<TTargetTable, ExtractJoinBuilderOut<ReturnType<TBuilderFn>>, ExtractJoinBuilderSelect<ReturnType<TBuilderFn>>>>[TRelationType] }> : never };
390
+ /**
391
+ * Full Unit of Work interface with all operations including execution.
392
+ * This allows UOW instances to be passed between different contexts that use different schemas.
393
+ */
394
+ interface IUnitOfWork {
395
+ readonly state: UOWState;
396
+ readonly name: string | undefined;
397
+ readonly idempotencyKey: string;
398
+ readonly retrievalPhase: Promise<unknown[]>;
399
+ readonly mutationPhase: Promise<void>;
400
+ executeRetrieve(): Promise<unknown[]>;
401
+ executeMutations(): Promise<{
402
+ success: boolean;
403
+ }>;
404
+ getRetrievalOperations(): ReadonlyArray<RetrievalOperation<AnySchema>>;
405
+ getMutationOperations(): ReadonlyArray<MutationOperation<AnySchema>>;
406
+ getCreatedIds(): FragnoId[];
407
+ restrict(options?: {
408
+ readyFor?: "mutation" | "retrieval" | "none";
409
+ }): IUnitOfWork;
410
+ signalReadyForRetrieval(): void;
411
+ signalReadyForMutation(): void;
412
+ reset(): void;
413
+ forSchema<TOtherSchema extends AnySchema, TOtherHooks extends HooksMap = {}>(schema: TOtherSchema, hooks?: TOtherHooks): TypedUnitOfWork<TOtherSchema, [], any, TOtherHooks>;
414
+ registerSchema(schema: AnySchema, namespace: string | null): void;
415
+ triggerHook(namespace: string, hookName: string, payload: unknown, options?: TriggerHookOptions): void;
416
+ getTriggeredHooks(): readonly TriggeredHook[];
417
+ }
418
+ /**
419
+ * Restricted UOW interface without execute methods.
420
+ * Useful when you want to allow building operations but not executing them,
421
+ * to prevent deadlocks or enforce execution control at a higher level.
422
+ *
423
+ * Note: This is just a marker interface. Restriction is enforced by the UnitOfWork class itself.
424
+ */
425
+ interface IUnitOfWorkRestricted extends Omit<IUnitOfWork, "executeRetrieve" | "executeMutations"> {}
426
+ type UOWInstrumentationPhase = "beforeRetrieve" | "afterRetrieve" | "beforeMutate" | "afterMutate";
427
+ type UOWInstrumentationInjection = {
428
+ type: "conflict";
429
+ reason?: string;
430
+ } | {
431
+ type: "error";
432
+ error: Error;
433
+ };
434
+ type UOWInstrumentationContext = {
435
+ phase: UOWInstrumentationPhase;
436
+ uowName?: string;
437
+ idempotencyKey: string;
438
+ retrievalOpsCount: number;
439
+ mutationOpsCount: number;
440
+ uow: IUnitOfWork;
441
+ };
442
+ type UOWInstrumentation = {
443
+ beforeRetrieve?: (ctx: UOWInstrumentationContext) => void | Promise<void> | UOWInstrumentationInjection;
444
+ afterRetrieve?: (ctx: UOWInstrumentationContext) => void | Promise<void> | UOWInstrumentationInjection;
445
+ beforeMutate?: (ctx: UOWInstrumentationContext) => void | Promise<void> | UOWInstrumentationInjection;
446
+ afterMutate?: (ctx: UOWInstrumentationContext) => void | Promise<void> | UOWInstrumentationInjection;
447
+ };
448
+ type UOWInstrumentationFinalizer = {
449
+ afterRetrieve?: (ctx: UOWInstrumentationContext) => void | Promise<void>;
450
+ afterMutate?: (ctx: UOWInstrumentationContext) => void | Promise<void>;
451
+ };
452
+ declare function createUnitOfWork(compiler: UOWCompiler<unknown>, executor: UOWExecutor<unknown, unknown>, decoder: UOWDecoder<unknown>, schemaNamespaceMap?: WeakMap<AnySchema, string | null>, name?: string): UnitOfWork;
453
+ interface UnitOfWorkConfig {
454
+ dryRun?: boolean;
455
+ onQuery?: (query: unknown) => void;
456
+ idempotencyKey?: string;
457
+ instrumentation?: UOWInstrumentation;
458
+ instrumentationFinalizer?: UOWInstrumentationFinalizer;
459
+ }
460
+ /**
461
+ * Unit of Work implementation with optimistic concurrency control
462
+ *
463
+ * UOW has two phases:
464
+ * 1. Retrieval phase: Read operations to fetch entities with their versions
465
+ * 2. Mutation phase: Write operations that check versions before committing
466
+ *
467
+ * This is the untyped base storage. Use TypedUnitOfWork for type-safe operations.
468
+ *
469
+ * @example
470
+ * ```ts
471
+ * const uow = queryEngine.createUnitOfWork("update-user-balance");
472
+ * const typedUow = uow.forSchema(mySchema);
473
+ *
474
+ * // Retrieval phase
475
+ * typedUow.find("users", (b) => b.whereIndex("primary", (eb) => eb("id", "=", userId)));
476
+ *
477
+ * // Execute retrieval and transition to mutation phase
478
+ * const [users] = await uow.executeRetrieve();
479
+ *
480
+ * // Mutation phase with version check
481
+ * const user = users[0];
482
+ * typedUow.update("users", user.id, (b) => b.set({ balance: newBalance }).check());
483
+ *
484
+ * // Execute mutations
485
+ * const { success } = await uow.executeMutations();
486
+ * if (!success) {
487
+ * // Handle version conflict
488
+ * }
489
+ * ```
490
+ */
491
+ declare class UnitOfWork<const TRawInput = unknown> implements IUnitOfWork {
492
+ #private;
493
+ constructor(compiler: UOWCompiler<unknown>, executor: UOWExecutor<unknown, TRawInput>, decoder: UOWDecoder<TRawInput>, name?: string, config?: UnitOfWorkConfig, schemaNamespaceMap?: WeakMap<AnySchema, string | null>);
494
+ /**
495
+ * Register a schema with its namespace for cross-fragment operations.
496
+ * This is used for internal fragments like hooks that need to create
497
+ * records in a different schema during the same transaction.
498
+ */
499
+ registerSchema(schema: AnySchema, namespace: string | null): void;
500
+ /**
501
+ * Get a schema-specific typed view of this UOW for type-safe operations.
502
+ * Returns a wrapper that provides typed operations for the given schema.
503
+ * The namespace is automatically resolved from the schema-namespace map.
504
+ * The optional hooks parameter is for type inference only - pass your hooks map
505
+ * to get proper typing for triggerHook. The value is not used at runtime.
506
+ */
507
+ forSchema<TOtherSchema extends AnySchema, TOtherHooks extends HooksMap = {}>(schema: TOtherSchema, _hooks?: TOtherHooks): TypedUnitOfWork<TOtherSchema, [], TRawInput, TOtherHooks>;
508
+ /**
509
+ * Create a restricted child UOW that cannot execute phases.
510
+ * The child shares the same operation storage but must signal readiness
511
+ * before the parent can execute each phase.
512
+ *
513
+ * @param options.readyFor - Controls automatic readiness signaling:
514
+ * - "mutation" (default): Signals ready for both retrieval and mutation immediately
515
+ * - "retrieval": Signals ready for retrieval only
516
+ * - "none": No automatic signaling, caller must signal manually
517
+ */
518
+ restrict(options?: {
519
+ readyFor?: "mutation" | "retrieval" | "none";
520
+ }): UnitOfWork<TRawInput>;
521
+ /**
522
+ * Signal that this child is ready for retrieval phase execution.
523
+ * Only valid for restricted (child) UOWs.
524
+ */
525
+ signalReadyForRetrieval(): void;
526
+ /**
527
+ * Signal that this child is ready for mutation phase execution.
528
+ * Only valid for restricted (child) UOWs.
529
+ */
530
+ signalReadyForMutation(): void;
531
+ /**
532
+ * Reset the UOW to initial state for retry support.
533
+ * Clears operations, resets state, and resets phase promises.
534
+ */
535
+ reset(): void;
536
+ /**
537
+ * Trigger a hook to be executed after the transaction commits.
538
+ */
539
+ triggerHook(namespace: string, hookName: string, payload: unknown, options?: TriggerHookOptions): void;
540
+ /**
541
+ * Get all triggered hooks for this UOW.
542
+ */
543
+ getTriggeredHooks(): ReadonlyArray<TriggeredHook>;
544
+ get state(): UOWState;
545
+ enableReadTracking(): void;
546
+ get readTrackingEnabled(): boolean;
547
+ get name(): string | undefined;
548
+ get idempotencyKey(): string;
549
+ /**
550
+ * Promise that resolves when the retrieval phase is executed
551
+ * Service methods can await this to coordinate multi-phase logic
552
+ */
553
+ get retrievalPhase(): Promise<unknown[]>;
554
+ /**
555
+ * Promise that resolves when the mutation phase is executed
556
+ * Service methods can await this to coordinate multi-phase logic
557
+ */
558
+ get mutationPhase(): Promise<void>;
559
+ /**
560
+ * Execute the retrieval phase and transition to mutation phase
561
+ * Returns all results from find operations
562
+ */
563
+ executeRetrieve(): Promise<unknown[]>;
564
+ /**
565
+ * Execute the mutation phase
566
+ * Returns success flag indicating if mutations completed without conflicts
567
+ */
568
+ executeMutations(): Promise<{
569
+ success: boolean;
570
+ }>;
571
+ /**
572
+ * Get the retrieval operations (for inspection/debugging)
573
+ */
574
+ getRetrievalOperations(): ReadonlyArray<RetrievalOperation<AnySchema>>;
575
+ /**
576
+ * Get the mutation operations (for inspection/debugging)
577
+ */
578
+ getMutationOperations(): ReadonlyArray<MutationOperation<AnySchema>>;
579
+ /**
580
+ * @internal
581
+ * Add a retrieval operation (used by TypedUnitOfWork)
582
+ */
583
+ addRetrievalOperation(op: RetrievalOperation<AnySchema>): number;
584
+ /**
585
+ * @internal
586
+ * Add a mutation operation (used by TypedUnitOfWork)
587
+ */
588
+ addMutationOperation(op: MutationOperation<AnySchema>): void;
589
+ /**
590
+ * Get the IDs of created entities after executeMutations() has been called.
591
+ * Returns FragnoId objects with external IDs (always available) and internal IDs
592
+ * (available when database supports RETURNING).
593
+ *
594
+ * @throws Error if called before executeMutations()
595
+ * @returns Array of FragnoIds in the same order as create() calls
596
+ */
597
+ getCreatedIds(): FragnoId[];
598
+ /**
599
+ * @internal
600
+ * Compile the unit of work to executable queries for testing
601
+ */
602
+ compile<TOutput>(compiler: UOWCompiler<TOutput>): {
603
+ name?: string;
604
+ retrievalBatch: TOutput[];
605
+ mutationBatch: CompiledMutation<TOutput>[];
606
+ };
607
+ }
608
+ /**
609
+ * A typed facade around a UnitOfWork that provides type-safe operations for a specific schema.
610
+ * All operations are stored in the underlying UOW, but this facade ensures type safety and
611
+ * filters retrieval results to only include operations added through this facade.
612
+ */
613
+ declare class TypedUnitOfWork<const TSchema extends AnySchema, const TRetrievalResults extends unknown[] = [], const TRawInput = unknown, const THooks extends HooksMap = {}> {
614
+ #private;
615
+ constructor(schema: TSchema, namespace: string | null | undefined, uow: UnitOfWork<TRawInput>);
616
+ /**
617
+ * Type-only access to retrieval results for this typed UOW.
618
+ */
619
+ get $results(): Prettify<TRetrievalResults>;
620
+ get schema(): TSchema;
621
+ get name(): string | undefined;
622
+ get idempotencyKey(): string;
623
+ get state(): UOWState;
624
+ get retrievalPhase(): Promise<TRetrievalResults>;
625
+ get mutationPhase(): Promise<void>;
626
+ getRetrievalOperations(): readonly RetrievalOperation<AnySchema, AnyTable>[];
627
+ getMutationOperations(): readonly MutationOperation<AnySchema, AnyTable>[];
628
+ getCreatedIds(): FragnoId[];
629
+ executeRetrieve(): Promise<TRetrievalResults>;
630
+ executeMutations(): Promise<{
631
+ success: boolean;
632
+ }>;
633
+ restrict(options?: {
634
+ readyFor?: "mutation" | "retrieval" | "none";
635
+ }): IUnitOfWork;
636
+ signalReadyForRetrieval(): void;
637
+ signalReadyForMutation(): void;
638
+ reset(): void;
639
+ forSchema<TOtherSchema extends AnySchema, TOtherHooks extends HooksMap = {}>(schema: TOtherSchema, hooks?: TOtherHooks): TypedUnitOfWork<TOtherSchema, [], TRawInput, TOtherHooks>;
640
+ /**
641
+ * Database timestamp helper for inserts.
642
+ */
643
+ now(): DbNow;
644
+ /**
645
+ * Build a database interval for use with now().plus(...).
646
+ */
647
+ interval(input: DbIntervalInput): DbInterval;
648
+ registerSchema(schema: AnySchema, namespace: string | null): void;
649
+ compile<TOutput>(compiler: UOWCompiler<TOutput>): {
650
+ name?: string;
651
+ retrievalBatch: TOutput[];
652
+ mutationBatch: CompiledMutation<TOutput>[];
653
+ };
654
+ find<TTableName extends keyof TSchema["tables"] & string, const TBuilderResult>(tableName: TTableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TTableName]>, "build">) => TBuilderResult): TypedUnitOfWork<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], ExtractJoinOut<TBuilderResult>, Extract<ExtractSelect<TBuilderResult>, SelectClause<TSchema["tables"][TTableName]>>>[]], TRawInput, THooks>;
655
+ find<TTableName extends keyof TSchema["tables"] & string>(tableName: TTableName): TypedUnitOfWork<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], {}, true>[]], TRawInput, THooks>;
656
+ findFirst<TTableName extends keyof TSchema["tables"] & string, const TBuilderResult>(tableName: TTableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TTableName]>, "build">) => TBuilderResult): TypedUnitOfWork<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], ExtractJoinOut<TBuilderResult>, Extract<ExtractSelect<TBuilderResult>, SelectClause<TSchema["tables"][TTableName]>>> | null], TRawInput, THooks>;
657
+ findFirst<TTableName extends keyof TSchema["tables"] & string>(tableName: TTableName): TypedUnitOfWork<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], {}, true> | null], TRawInput, THooks>;
658
+ findWithCursor<TTableName extends keyof TSchema["tables"] & string, const TBuilderResult>(tableName: TTableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TTableName]>, "build">) => TBuilderResult): TypedUnitOfWork<TSchema, [...TRetrievalResults, CursorResult<SelectResult<TSchema["tables"][TTableName], ExtractJoinOut<TBuilderResult>, Extract<ExtractSelect<TBuilderResult>, SelectClause<TSchema["tables"][TTableName]>>>>], TRawInput, THooks>;
659
+ /**
660
+ * Generate a new ID for a table without creating a record.
661
+ * This is useful when you need to reference an ID before actually creating the record,
662
+ * or when you need to pass the ID to external services.
663
+ *
664
+ * @example
665
+ * ```ts
666
+ * const userId = uow.generateId("users");
667
+ * // Use userId in related records or pass to external services
668
+ * uow.create("users", { id: userId, name: "John" });
669
+ * ```
670
+ */
671
+ generateId<TableName extends keyof TSchema["tables"] & string>(tableName: TableName): FragnoId;
672
+ create<TableName extends keyof TSchema["tables"] & string>(tableName: TableName, values: TableToInsertValues<TSchema["tables"][TableName]>): FragnoId;
673
+ update<TableName extends keyof TSchema["tables"] & string>(tableName: TableName, id: FragnoId | string, builderFn: (builder: Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build">) => Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build"> | void): void;
674
+ delete<TableName extends keyof TSchema["tables"] & string>(tableName: TableName, id: FragnoId | string, builderFn?: (builder: Omit<DeleteBuilder, "build">) => Omit<DeleteBuilder, "build"> | void): void;
675
+ /**
676
+ * Check that a record's version hasn't changed since retrieval.
677
+ * This is useful for ensuring related records remain unchanged during a transaction.
678
+ *
679
+ * @param tableName - The table name
680
+ * @param id - The FragnoId with version information (string IDs are not allowed)
681
+ * @throws Error if the ID is a string without version information
682
+ *
683
+ * @example
684
+ * ```ts
685
+ * // Ensure both accounts haven't changed before creating a transfer
686
+ * uow.check("accounts", fromAccount.id);
687
+ * uow.check("accounts", toAccount.id);
688
+ * uow.create("transactions", { fromAccountId, toAccountId, amount });
689
+ * ```
690
+ */
691
+ check<TableName extends keyof TSchema["tables"] & string>(tableName: TableName, id: FragnoId): void;
692
+ get $hooks(): THooks;
693
+ get namespace(): string | null | undefined;
694
+ /**
695
+ * Trigger a hook to be executed after the transaction commits.
696
+ * The namespace is automatically injected from this typed view's schema registration.
697
+ */
698
+ triggerHook<K$1 extends keyof THooks & string>(hookName: K$1, payload: HookPayload<THooks[K$1]>, options?: TriggerHookOptions): void;
699
+ getTriggeredHooks(): ReadonlyArray<TriggeredHook>;
700
+ }
701
+ //#endregion
702
+ export { DeleteBuilder, FindBuilder, IUnitOfWork, IUnitOfWorkRestricted, TypedUnitOfWork, UOWCompiler, UOWDecoder, UOWExecutor, UnitOfWork, UpdateBuilder, UpdateManyBuilder, createUnitOfWork };
703
+ //# sourceMappingURL=unit-of-work.d.ts.map