@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,507 @@
1
+ import { ExponentialBackoffRetryPolicy, NoRetryPolicy } from "./retry-policy.js";
2
+
3
+ //#region src/query/unit-of-work/execute-unit-of-work.ts
4
+ /**
5
+ * Symbol to identify TxResult objects
6
+ */
7
+ const TX_RESULT_BRAND = Symbol("TxResult");
8
+ /**
9
+ * Create a TxResult for service context.
10
+ * Schedules retrieve operations on the baseUow and returns a TxResult with callbacks stored.
11
+ * @internal Used by ServiceTxBuilder.build()
12
+ */
13
+ function createServiceTx(schema, callbacks, baseUow) {
14
+ const { promise: retrievePhase, resolve: resolveRetrievePhase, reject: rejectRetrievePhase } = Promise.withResolvers();
15
+ const restrictedUow = baseUow.restrict({ readyFor: "none" });
16
+ let serviceCalls;
17
+ try {
18
+ if (callbacks.serviceCalls) serviceCalls = callbacks.serviceCalls();
19
+ } catch (error) {
20
+ restrictedUow.signalReadyForRetrieval();
21
+ restrictedUow.signalReadyForMutation();
22
+ retrievePhase.catch(() => {});
23
+ rejectRetrievePhase(error);
24
+ throw error;
25
+ }
26
+ let typedUow;
27
+ try {
28
+ if (schema && callbacks.retrieve) {
29
+ const emptyUow = restrictedUow.forSchema(schema);
30
+ typedUow = callbacks.retrieve(emptyUow);
31
+ }
32
+ } catch (error) {
33
+ restrictedUow.signalReadyForRetrieval();
34
+ restrictedUow.signalReadyForMutation();
35
+ retrievePhase.catch(() => {});
36
+ rejectRetrievePhase(error);
37
+ throw error;
38
+ }
39
+ restrictedUow.signalReadyForRetrieval();
40
+ if (typedUow) typedUow.retrievalPhase.then((results) => resolveRetrievePhase(results), (error) => rejectRetrievePhase(error));
41
+ else if (!callbacks.retrieve) resolveRetrievePhase([]);
42
+ const internal = {
43
+ schema,
44
+ callbacks,
45
+ typedUow,
46
+ restrictedUow,
47
+ retrievePhase,
48
+ resolveRetrievePhase,
49
+ rejectRetrievePhase,
50
+ retrieveSuccessResult: void 0,
51
+ mutateResult: void 0,
52
+ finalResult: void 0,
53
+ serviceCalls
54
+ };
55
+ return {
56
+ [TX_RESULT_BRAND]: true,
57
+ _internal: internal
58
+ };
59
+ }
60
+ /**
61
+ * Recursively collect all TxResults from a service call tree.
62
+ * Returns them in a flat array in dependency order (serviceCalls before their dependents).
63
+ * Skips undefined values (which can occur with optional service patterns like
64
+ * optionalService?.method()).
65
+ */
66
+ function collectAllTxResults(txResults) {
67
+ const collected = [];
68
+ const seen = /* @__PURE__ */ new Set();
69
+ function collect(txResult) {
70
+ if (txResult === void 0) return;
71
+ if (seen.has(txResult)) return;
72
+ seen.add(txResult);
73
+ const serviceCalls = txResult._internal.serviceCalls;
74
+ if (serviceCalls) for (const serviceCall of serviceCalls) collect(serviceCall);
75
+ collected.push(txResult);
76
+ }
77
+ for (const txResult of txResults) collect(txResult);
78
+ return collected;
79
+ }
80
+ /**
81
+ * Execute a single TxResult's callbacks after retrieve phase completes.
82
+ * This processes retrieveSuccess, mutate, and success callbacks in order.
83
+ */
84
+ async function processTxResultAfterRetrieve(txResult, baseUow) {
85
+ const internal = txResult._internal;
86
+ const callbacks = internal.callbacks;
87
+ const retrieveResults = await internal.retrievePhase;
88
+ const serviceResults = [];
89
+ if (internal.serviceCalls) for (const serviceCall of internal.serviceCalls) {
90
+ if (serviceCall === void 0) {
91
+ serviceResults.push(void 0);
92
+ continue;
93
+ }
94
+ const serviceCallInternal = serviceCall._internal;
95
+ if (serviceCallInternal.retrieveSuccessResult !== void 0 && !(Array.isArray(serviceCallInternal.retrieveSuccessResult) && serviceCallInternal.retrieveSuccessResult.length === 0 && serviceCallInternal.callbacks.mutate)) serviceResults.push(serviceCallInternal.retrieveSuccessResult);
96
+ else if (serviceCallInternal.mutateResult !== void 0) serviceResults.push(serviceCallInternal.mutateResult);
97
+ else serviceResults.push(serviceCallInternal.retrieveSuccessResult);
98
+ }
99
+ if (callbacks.retrieveSuccess) internal.retrieveSuccessResult = callbacks.retrieveSuccess(retrieveResults, serviceResults);
100
+ else internal.retrieveSuccessResult = retrieveResults;
101
+ if (callbacks.mutate) {
102
+ const mutateCtx = {
103
+ uow: internal.schema ? baseUow.forSchema(internal.schema) : void 0,
104
+ retrieveResult: internal.retrieveSuccessResult,
105
+ serviceIntermediateResult: serviceResults
106
+ };
107
+ internal.mutateResult = callbacks.mutate(mutateCtx);
108
+ }
109
+ if (internal.typedUow) internal.typedUow.signalReadyForMutation();
110
+ else internal.restrictedUow.signalReadyForMutation();
111
+ }
112
+ /**
113
+ * Execute a single TxResult's success callback after mutations complete.
114
+ */
115
+ async function processTxResultAfterMutate(txResult) {
116
+ const internal = txResult._internal;
117
+ const callbacks = internal.callbacks;
118
+ const serviceIntermediateResults = [];
119
+ const serviceFinalResults = [];
120
+ if (internal.serviceCalls) for (const serviceCall of internal.serviceCalls) {
121
+ if (serviceCall === void 0) {
122
+ serviceIntermediateResults.push(void 0);
123
+ serviceFinalResults.push(void 0);
124
+ continue;
125
+ }
126
+ const serviceCallInternal = serviceCall._internal;
127
+ if (serviceCallInternal.retrieveSuccessResult !== void 0 && !(Array.isArray(serviceCallInternal.retrieveSuccessResult) && serviceCallInternal.retrieveSuccessResult.length === 0 && serviceCallInternal.callbacks.mutate)) serviceIntermediateResults.push(serviceCallInternal.retrieveSuccessResult);
128
+ else if (serviceCallInternal.mutateResult !== void 0) serviceIntermediateResults.push(serviceCallInternal.mutateResult);
129
+ else serviceIntermediateResults.push(serviceCallInternal.retrieveSuccessResult);
130
+ serviceFinalResults.push(serviceCallInternal.finalResult);
131
+ }
132
+ if (callbacks.success) {
133
+ const successCtx = {
134
+ retrieveResult: internal.retrieveSuccessResult,
135
+ mutateResult: internal.mutateResult,
136
+ serviceResult: serviceFinalResults,
137
+ serviceIntermediateResult: serviceIntermediateResults
138
+ };
139
+ internal.finalResult = callbacks.success(successCtx);
140
+ } else if (callbacks.mutate) internal.finalResult = await awaitPromisesInObject(internal.mutateResult);
141
+ else if (callbacks.retrieveSuccess || callbacks.retrieve) internal.finalResult = internal.retrieveSuccessResult;
142
+ else internal.finalResult = serviceFinalResults;
143
+ return internal.finalResult;
144
+ }
145
+ /**
146
+ * Execute a transaction with the unified TxResult pattern.
147
+ *
148
+ * This is the handler-level function that actually executes TxResults with retry support.
149
+ *
150
+ * @param callbacks - Transaction callbacks (serviceCalls, retrieve, retrieveSuccess, mutate, success)
151
+ * @param options - Configuration including UOW factory, retry policy, and abort signal
152
+ * @returns Promise resolving to the result determined by return type priority
153
+ *
154
+ * @example
155
+ * ```ts
156
+ * // Simple retrieve + transform
157
+ * const user = await executeTx({
158
+ * retrieve: (ctx) => ctx.forSchema(usersSchema).find("users", ...),
159
+ * retrieveSuccess: ([users]) => users[0] ?? null,
160
+ * }, { createUnitOfWork });
161
+ * @internal Used by HandlerTxBuilder.execute()
162
+ */
163
+ async function executeTx(callbacks, options) {
164
+ const signal = options.signal;
165
+ let attempt = 0;
166
+ while (true) {
167
+ if (signal?.aborted) throw new Error("Transaction execution aborted");
168
+ let retryPolicy;
169
+ try {
170
+ const baseUow = options.createUnitOfWork();
171
+ if (options.onAfterRetrieve) baseUow.enableReadTracking?.();
172
+ const context = {
173
+ forSchema: (schema, hooks) => {
174
+ return baseUow.forSchema(schema, hooks);
175
+ },
176
+ idempotencyKey: baseUow.idempotencyKey,
177
+ currentAttempt: attempt
178
+ };
179
+ let serviceCalls;
180
+ if (callbacks.serviceCalls) serviceCalls = callbacks.serviceCalls();
181
+ const typedUowFromRetrieve = callbacks.retrieve?.(context);
182
+ const allServiceCallTxResults = serviceCalls ? collectAllTxResults([...serviceCalls]) : [];
183
+ if (!(baseUow.getRetrievalOperations().length > 0)) {
184
+ if (options.retryPolicy) throw new Error("Retry policy is only supported when the transaction includes retrieve operations.");
185
+ retryPolicy = new NoRetryPolicy();
186
+ } else retryPolicy = options.retryPolicy ?? new ExponentialBackoffRetryPolicy({
187
+ maxRetries: 5,
188
+ initialDelayMs: 10,
189
+ maxDelayMs: 100
190
+ });
191
+ const allRetrieveResults = await baseUow.executeRetrieve();
192
+ if (options.onAfterRetrieve) await options.onAfterRetrieve(baseUow, allRetrieveResults);
193
+ const retrieveResult = typedUowFromRetrieve ? await typedUowFromRetrieve.retrievalPhase : [];
194
+ for (const txResult of allServiceCallTxResults) await processTxResultAfterRetrieve(txResult, baseUow);
195
+ const serviceResults = [];
196
+ if (serviceCalls) for (const serviceCall of serviceCalls) {
197
+ if (serviceCall === void 0) {
198
+ serviceResults.push(void 0);
199
+ continue;
200
+ }
201
+ const serviceCallInternal = serviceCall._internal;
202
+ if (serviceCallInternal.retrieveSuccessResult !== void 0 && !(Array.isArray(serviceCallInternal.retrieveSuccessResult) && serviceCallInternal.retrieveSuccessResult.length === 0 && serviceCallInternal.callbacks.mutate)) serviceResults.push(serviceCallInternal.retrieveSuccessResult);
203
+ else if (serviceCallInternal.mutateResult !== void 0) serviceResults.push(serviceCallInternal.mutateResult);
204
+ else serviceResults.push(serviceCallInternal.retrieveSuccessResult);
205
+ }
206
+ let retrieveSuccessResult;
207
+ if (callbacks.retrieveSuccess) retrieveSuccessResult = callbacks.retrieveSuccess(retrieveResult, serviceResults);
208
+ else retrieveSuccessResult = retrieveResult;
209
+ let mutateResult;
210
+ if (callbacks.mutate) {
211
+ const mutateCtx = {
212
+ ...context,
213
+ retrieveResult: retrieveSuccessResult,
214
+ serviceIntermediateResult: serviceResults
215
+ };
216
+ mutateResult = callbacks.mutate(mutateCtx);
217
+ }
218
+ if (!options.planMode && options.onBeforeMutate) options.onBeforeMutate(baseUow);
219
+ if (!(await baseUow.executeMutations()).success) throw new ConcurrencyConflictError();
220
+ for (const txResult of allServiceCallTxResults) await processTxResultAfterMutate(txResult);
221
+ const serviceFinalResults = [];
222
+ if (serviceCalls) for (const serviceCall of serviceCalls) {
223
+ if (serviceCall === void 0) {
224
+ serviceFinalResults.push(void 0);
225
+ continue;
226
+ }
227
+ serviceFinalResults.push(serviceCall._internal.finalResult);
228
+ }
229
+ let finalResult;
230
+ if (callbacks.success) {
231
+ const successCtx = {
232
+ retrieveResult: retrieveSuccessResult,
233
+ mutateResult,
234
+ serviceResult: serviceFinalResults,
235
+ serviceIntermediateResult: serviceResults
236
+ };
237
+ finalResult = callbacks.success(successCtx);
238
+ } else if (callbacks.mutate) finalResult = await awaitPromisesInObject(mutateResult);
239
+ else if (callbacks.retrieveSuccess || callbacks.retrieve) finalResult = retrieveSuccessResult;
240
+ else finalResult = serviceFinalResults;
241
+ if (!options.planMode && options.onAfterMutate) await options.onAfterMutate(baseUow);
242
+ return await awaitPromisesInObject(finalResult);
243
+ } catch (error) {
244
+ if (signal?.aborted) throw new Error("Transaction execution aborted");
245
+ if (!(error instanceof ConcurrencyConflictError)) throw error;
246
+ if (!retryPolicy) throw error;
247
+ if (!retryPolicy.shouldRetry(attempt, error, signal)) {
248
+ if (signal?.aborted) throw new Error("Transaction execution aborted");
249
+ throw new ConcurrencyConflictError();
250
+ }
251
+ const delayMs = retryPolicy.getDelayMs(attempt);
252
+ if (delayMs > 0) await new Promise((resolve) => setTimeout(resolve, delayMs));
253
+ attempt++;
254
+ }
255
+ }
256
+ }
257
+ /**
258
+ * Error thrown when a Unit of Work execution fails due to optimistic concurrency conflict.
259
+ * This error triggers automatic retry behavior in executeTx.
260
+ */
261
+ var ConcurrencyConflictError = class extends Error {
262
+ constructor(message = "Optimistic concurrency conflict detected") {
263
+ super(message);
264
+ this.name = "ConcurrencyConflictError";
265
+ }
266
+ };
267
+ /**
268
+ * Await promises in an object 1 level deep
269
+ */
270
+ async function awaitPromisesInObject(obj) {
271
+ if (obj === null || obj === void 0) return obj;
272
+ if (typeof obj !== "object") return obj;
273
+ if (obj instanceof Promise) return await obj;
274
+ if (Array.isArray(obj)) return await Promise.all(obj.map((item) => item instanceof Promise ? item : Promise.resolve(item)));
275
+ if (obj.constructor !== Object) return obj;
276
+ const result = {};
277
+ const entries = Object.entries(obj);
278
+ const awaitedEntries = await Promise.all(entries.map(async ([key, value]) => {
279
+ return [key, value instanceof Promise ? await value : value];
280
+ }));
281
+ for (const [key, value] of awaitedEntries) result[key] = value;
282
+ return result;
283
+ }
284
+ /**
285
+ * Builder for service-level transactions.
286
+ * Uses a fluent API to build up transaction callbacks with proper type inference.
287
+ *
288
+ * @example
289
+ * ```ts
290
+ * return serviceTx(schema)
291
+ * .withServiceCalls(() => [otherService.getData()])
292
+ * .retrieve((uow) => uow.find("users", ...))
293
+ * .transformRetrieve(([users], serviceResult) => users[0])
294
+ * .mutate(({ uow, retrieveResult, serviceIntermediateResult }) =>
295
+ * uow.create("records", { ... })
296
+ * )
297
+ * .transform(({ mutateResult, serviceResult, serviceIntermediateResult }) => ({ id: mutateResult }))
298
+ * .build();
299
+ * ```
300
+ */
301
+ var ServiceTxBuilder = class ServiceTxBuilder {
302
+ #state;
303
+ constructor(state) {
304
+ this.#state = state;
305
+ }
306
+ /**
307
+ * Add dependencies to execute before this transaction.
308
+ */
309
+ withServiceCalls(fn) {
310
+ return new ServiceTxBuilder({
311
+ ...this.#state,
312
+ withServiceCallsFn: fn
313
+ });
314
+ }
315
+ /**
316
+ * Add retrieval operations to the transaction.
317
+ */
318
+ retrieve(fn) {
319
+ return new ServiceTxBuilder({
320
+ ...this.#state,
321
+ retrieveFn: fn,
322
+ transformRetrieveFn: void 0
323
+ });
324
+ }
325
+ /**
326
+ * Transform retrieve results before passing to mutate.
327
+ */
328
+ transformRetrieve(fn) {
329
+ return new ServiceTxBuilder({
330
+ ...this.#state,
331
+ transformRetrieveFn: fn
332
+ });
333
+ }
334
+ /**
335
+ * Add mutation operations based on retrieve results.
336
+ */
337
+ mutate(fn) {
338
+ return new ServiceTxBuilder({
339
+ ...this.#state,
340
+ mutateFn: fn
341
+ });
342
+ }
343
+ /**
344
+ * Add final transformation after mutations complete.
345
+ */
346
+ transform(fn) {
347
+ return new ServiceTxBuilder({
348
+ ...this.#state,
349
+ transformFn: fn
350
+ });
351
+ }
352
+ /**
353
+ * Build and return the TxResult.
354
+ */
355
+ build() {
356
+ const state = this.#state;
357
+ const callbacks = {
358
+ serviceCalls: state.withServiceCallsFn,
359
+ retrieve: state.retrieveFn,
360
+ retrieveSuccess: state.transformRetrieveFn,
361
+ mutate: state.mutateFn ? (ctx) => {
362
+ return state.mutateFn({
363
+ uow: ctx.uow,
364
+ retrieveResult: ctx.retrieveResult,
365
+ serviceIntermediateResult: ctx.serviceIntermediateResult
366
+ });
367
+ } : void 0,
368
+ success: state.transformFn ? (ctx) => {
369
+ return state.transformFn({
370
+ retrieveResult: ctx.retrieveResult,
371
+ mutateResult: ctx.mutateResult,
372
+ serviceResult: ctx.serviceResult,
373
+ serviceIntermediateResult: ctx.serviceIntermediateResult
374
+ });
375
+ } : void 0
376
+ };
377
+ return createServiceTx(state.schema, callbacks, state.baseUow);
378
+ }
379
+ };
380
+ /**
381
+ * Create a new ServiceTxBuilder for the given schema.
382
+ */
383
+ function createServiceTxBuilder(schema, baseUow, hooks) {
384
+ return new ServiceTxBuilder({
385
+ schema,
386
+ baseUow,
387
+ hooks
388
+ });
389
+ }
390
+ /**
391
+ * Builder for handler-level transactions.
392
+ * Uses a fluent API to build up transaction callbacks with proper type inference.
393
+ *
394
+ * @example
395
+ * ```ts
396
+ * const result = await handlerTx()
397
+ * .withServiceCalls(() => [userService.getUser(id)])
398
+ * .mutate(({ forSchema, idempotencyKey, currentAttempt, serviceIntermediateResult }) => {
399
+ * return forSchema(ordersSchema).create("orders", { ... });
400
+ * })
401
+ * .transform(({ mutateResult, serviceResult }) => ({ ... }))
402
+ * .execute();
403
+ * ```
404
+ */
405
+ var HandlerTxBuilder = class HandlerTxBuilder {
406
+ #state;
407
+ constructor(state) {
408
+ this.#state = state;
409
+ }
410
+ /**
411
+ * Add dependencies to execute before this transaction.
412
+ */
413
+ withServiceCalls(fn) {
414
+ return new HandlerTxBuilder({
415
+ ...this.#state,
416
+ withServiceCallsFn: fn
417
+ });
418
+ }
419
+ /**
420
+ * Add retrieval operations to the transaction.
421
+ * Return a TypedUnitOfWork from forSchema().find() to get typed results.
422
+ */
423
+ retrieve(fn) {
424
+ return new HandlerTxBuilder({
425
+ ...this.#state,
426
+ retrieveFn: fn,
427
+ transformRetrieveFn: void 0
428
+ });
429
+ }
430
+ /**
431
+ * Transform retrieve results before passing to mutate.
432
+ */
433
+ transformRetrieve(fn) {
434
+ return new HandlerTxBuilder({
435
+ ...this.#state,
436
+ transformRetrieveFn: fn
437
+ });
438
+ }
439
+ /**
440
+ * Add mutation operations based on retrieve results.
441
+ */
442
+ mutate(fn) {
443
+ return new HandlerTxBuilder({
444
+ ...this.#state,
445
+ mutateFn: fn
446
+ });
447
+ }
448
+ /**
449
+ * Add final transformation after mutations complete.
450
+ */
451
+ transform(fn) {
452
+ return new HandlerTxBuilder({
453
+ ...this.#state,
454
+ transformFn: fn
455
+ });
456
+ }
457
+ /**
458
+ * Execute the transaction and return the result.
459
+ */
460
+ execute() {
461
+ const state = this.#state;
462
+ const callbacks = {
463
+ serviceCalls: state.withServiceCallsFn,
464
+ retrieve: state.retrieveFn ? (context) => {
465
+ return state.retrieveFn({
466
+ forSchema: context.forSchema,
467
+ idempotencyKey: context.idempotencyKey,
468
+ currentAttempt: context.currentAttempt
469
+ });
470
+ } : void 0,
471
+ retrieveSuccess: state.transformRetrieveFn,
472
+ mutate: state.mutateFn ? (ctx) => {
473
+ return state.mutateFn({
474
+ forSchema: ctx.forSchema,
475
+ idempotencyKey: ctx.idempotencyKey,
476
+ currentAttempt: ctx.currentAttempt,
477
+ retrieveResult: ctx.retrieveResult,
478
+ serviceIntermediateResult: ctx.serviceIntermediateResult
479
+ });
480
+ } : void 0,
481
+ success: state.transformFn ? (ctx) => {
482
+ return state.transformFn({
483
+ retrieveResult: ctx.retrieveResult,
484
+ mutateResult: ctx.mutateResult,
485
+ serviceResult: ctx.serviceResult,
486
+ serviceIntermediateResult: ctx.serviceIntermediateResult
487
+ });
488
+ } : void 0
489
+ };
490
+ const run = () => executeTx(callbacks, state.options);
491
+ return state.executeWrapper ? state.executeWrapper(run) : run();
492
+ }
493
+ };
494
+ /**
495
+ * Create a new HandlerTxBuilder with the given options.
496
+ */
497
+ function createHandlerTxBuilder(options, hooks, executeWrapper) {
498
+ return new HandlerTxBuilder({
499
+ options,
500
+ hooks,
501
+ executeWrapper
502
+ });
503
+ }
504
+
505
+ //#endregion
506
+ export { HandlerTxBuilder, ServiceTxBuilder, createHandlerTxBuilder, createServiceTxBuilder };
507
+ //# sourceMappingURL=execute-unit-of-work.js.map