@fragno-dev/db 0.1.14 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/.turbo/turbo-build.log +242 -139
  2. package/CHANGELOG.md +47 -0
  3. package/README.md +123 -8
  4. package/dist/adapters/adapters.d.ts +19 -5
  5. package/dist/adapters/adapters.d.ts.map +1 -1
  6. package/dist/adapters/adapters.js.map +1 -1
  7. package/dist/adapters/drizzle/drizzle-adapter.d.ts +6 -19
  8. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
  9. package/dist/adapters/drizzle/drizzle-adapter.js +7 -47
  10. package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
  11. package/dist/adapters/drizzle/generate.d.ts +7 -1
  12. package/dist/adapters/drizzle/generate.d.ts.map +1 -1
  13. package/dist/adapters/drizzle/generate.js +46 -45
  14. package/dist/adapters/drizzle/generate.js.map +1 -1
  15. package/dist/adapters/generic-sql/driver-config.d.ts +74 -0
  16. package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -0
  17. package/dist/adapters/generic-sql/driver-config.js +94 -0
  18. package/dist/adapters/generic-sql/driver-config.js.map +1 -0
  19. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +43 -0
  20. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -0
  21. package/dist/adapters/generic-sql/generic-sql-adapter.js +87 -0
  22. package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -0
  23. package/dist/adapters/generic-sql/generic-sql-uow-executor.js +67 -0
  24. package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -0
  25. package/dist/adapters/generic-sql/migration/cold-kysely.js +33 -0
  26. package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -0
  27. package/dist/adapters/generic-sql/migration/dialect/mysql.js +60 -0
  28. package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -0
  29. package/dist/adapters/generic-sql/migration/dialect/postgres.js +59 -0
  30. package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -0
  31. package/dist/adapters/generic-sql/migration/dialect/sqlite.js +96 -0
  32. package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -0
  33. package/dist/adapters/generic-sql/migration/executor.d.ts +15 -0
  34. package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -0
  35. package/dist/adapters/generic-sql/migration/executor.js +18 -0
  36. package/dist/adapters/generic-sql/migration/executor.js.map +1 -0
  37. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
  38. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
  39. package/dist/adapters/generic-sql/migration/prepared-migrations.js +68 -0
  40. package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -0
  41. package/dist/adapters/generic-sql/migration/sql-generator.js +212 -0
  42. package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -0
  43. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +32 -0
  44. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -0
  45. package/dist/adapters/generic-sql/query/cursor-utils.js +37 -0
  46. package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -0
  47. package/dist/adapters/generic-sql/query/dialect/mysql.js +33 -0
  48. package/dist/adapters/generic-sql/query/dialect/mysql.js.map +1 -0
  49. package/dist/adapters/generic-sql/query/dialect/postgres.js +32 -0
  50. package/dist/adapters/generic-sql/query/dialect/postgres.js.map +1 -0
  51. package/dist/adapters/generic-sql/query/dialect/sqlite.js +32 -0
  52. package/dist/adapters/generic-sql/query/dialect/sqlite.js.map +1 -0
  53. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +152 -0
  54. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -0
  55. package/dist/adapters/generic-sql/query/select-builder.js +69 -0
  56. package/dist/adapters/generic-sql/query/select-builder.js.map +1 -0
  57. package/dist/adapters/generic-sql/query/sql-query-compiler.js +145 -0
  58. package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -0
  59. package/dist/adapters/generic-sql/query/where-builder.js +129 -0
  60. package/dist/adapters/generic-sql/query/where-builder.js.map +1 -0
  61. package/dist/adapters/generic-sql/result-interpreter.js +74 -0
  62. package/dist/adapters/generic-sql/result-interpreter.js.map +1 -0
  63. package/dist/adapters/generic-sql/uow-decoder.js +105 -0
  64. package/dist/adapters/generic-sql/uow-decoder.js.map +1 -0
  65. package/dist/adapters/generic-sql/uow-encoder.js +93 -0
  66. package/dist/adapters/generic-sql/uow-encoder.js.map +1 -0
  67. package/dist/adapters/kysely/kysely-adapter.d.ts +5 -16
  68. package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
  69. package/dist/adapters/kysely/kysely-adapter.js +6 -159
  70. package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
  71. package/dist/adapters/{drizzle/drizzle-query.js → shared/from-unit-of-work-compiler.js} +48 -62
  72. package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -0
  73. package/dist/adapters/{kysely/kysely-shared.d.ts → shared/table-name-mapper.d.ts} +3 -2
  74. package/dist/adapters/shared/table-name-mapper.d.ts.map +1 -0
  75. package/dist/adapters/shared/table-name-mapper.js +43 -0
  76. package/dist/adapters/shared/table-name-mapper.js.map +1 -0
  77. package/dist/adapters/shared/uow-operation-compiler.js +105 -0
  78. package/dist/adapters/shared/uow-operation-compiler.js.map +1 -0
  79. package/dist/db-fragment-definition-builder.d.ts +186 -0
  80. package/dist/db-fragment-definition-builder.d.ts.map +1 -0
  81. package/dist/db-fragment-definition-builder.js +207 -0
  82. package/dist/db-fragment-definition-builder.js.map +1 -0
  83. package/dist/fragments/internal-fragment.d.ts +53 -0
  84. package/dist/fragments/internal-fragment.d.ts.map +1 -0
  85. package/dist/fragments/internal-fragment.js +111 -0
  86. package/dist/fragments/internal-fragment.js.map +1 -0
  87. package/dist/hooks/hooks.d.ts +51 -0
  88. package/dist/hooks/hooks.d.ts.map +1 -0
  89. package/dist/hooks/hooks.js +88 -0
  90. package/dist/hooks/hooks.js.map +1 -0
  91. package/dist/migration-engine/generation-engine.d.ts +0 -2
  92. package/dist/migration-engine/generation-engine.d.ts.map +1 -1
  93. package/dist/migration-engine/generation-engine.js +38 -56
  94. package/dist/migration-engine/generation-engine.js.map +1 -1
  95. package/dist/mod.d.ts +35 -23
  96. package/dist/mod.d.ts.map +1 -1
  97. package/dist/mod.js +48 -45
  98. package/dist/mod.js.map +1 -1
  99. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +165 -0
  100. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +1 -0
  101. package/dist/packages/fragno/dist/api/bind-services.js +20 -0
  102. package/dist/packages/fragno/dist/api/bind-services.js.map +1 -0
  103. package/dist/packages/fragno/dist/api/error.js +48 -0
  104. package/dist/packages/fragno/dist/api/error.js.map +1 -0
  105. package/dist/packages/fragno/dist/api/fragment-definition-builder.js +320 -0
  106. package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +1 -0
  107. package/dist/packages/fragno/dist/api/fragment-instantiator.js +525 -0
  108. package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -0
  109. package/dist/packages/fragno/dist/api/fragno-response.js +73 -0
  110. package/dist/packages/fragno/dist/api/fragno-response.js.map +1 -0
  111. package/dist/packages/fragno/dist/api/internal/response-stream.js +81 -0
  112. package/dist/packages/fragno/dist/api/internal/response-stream.js.map +1 -0
  113. package/dist/packages/fragno/dist/api/internal/route.js +10 -0
  114. package/dist/packages/fragno/dist/api/internal/route.js.map +1 -0
  115. package/dist/packages/fragno/dist/api/mutable-request-state.js +97 -0
  116. package/dist/packages/fragno/dist/api/mutable-request-state.js.map +1 -0
  117. package/dist/packages/fragno/dist/api/request-context-storage.js +43 -0
  118. package/dist/packages/fragno/dist/api/request-context-storage.js.map +1 -0
  119. package/dist/packages/fragno/dist/api/request-input-context.js +118 -0
  120. package/dist/packages/fragno/dist/api/request-input-context.js.map +1 -0
  121. package/dist/packages/fragno/dist/api/request-middleware.js +83 -0
  122. package/dist/packages/fragno/dist/api/request-middleware.js.map +1 -0
  123. package/dist/packages/fragno/dist/api/request-output-context.js +119 -0
  124. package/dist/packages/fragno/dist/api/request-output-context.js.map +1 -0
  125. package/dist/packages/fragno/dist/api/route.js +17 -0
  126. package/dist/packages/fragno/dist/api/route.js.map +1 -0
  127. package/dist/packages/fragno/dist/internal/symbols.js +10 -0
  128. package/dist/packages/fragno/dist/internal/symbols.js.map +1 -0
  129. package/dist/query/column-defaults.js +27 -0
  130. package/dist/query/column-defaults.js.map +1 -0
  131. package/dist/query/cursor.d.ts +14 -6
  132. package/dist/query/cursor.d.ts.map +1 -1
  133. package/dist/query/cursor.js +16 -7
  134. package/dist/query/cursor.js.map +1 -1
  135. package/dist/query/orm/orm.d.ts +1 -1
  136. package/dist/query/orm/orm.js.map +1 -1
  137. package/dist/query/serialize/create-sql-serializer.js +30 -0
  138. package/dist/query/serialize/create-sql-serializer.js.map +1 -0
  139. package/dist/query/serialize/dialect/mysql-serializer.js +87 -0
  140. package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -0
  141. package/dist/query/serialize/dialect/postgres-serializer.js +80 -0
  142. package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -0
  143. package/dist/query/serialize/dialect/sqlite-serializer.js +93 -0
  144. package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -0
  145. package/dist/query/serialize/sql-serializer.js +67 -0
  146. package/dist/query/serialize/sql-serializer.js.map +1 -0
  147. package/dist/query/{query.d.ts → simple-query-interface.d.ts} +6 -6
  148. package/dist/query/simple-query-interface.d.ts.map +1 -0
  149. package/dist/query/unit-of-work/execute-unit-of-work.d.ts +133 -0
  150. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
  151. package/dist/query/unit-of-work/execute-unit-of-work.js +197 -0
  152. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -0
  153. package/dist/query/unit-of-work/retry-policy.d.ts +88 -0
  154. package/dist/query/unit-of-work/retry-policy.d.ts.map +1 -0
  155. package/dist/query/unit-of-work/retry-policy.js +61 -0
  156. package/dist/query/unit-of-work/retry-policy.js.map +1 -0
  157. package/dist/query/{unit-of-work.d.ts → unit-of-work/unit-of-work.d.ts} +145 -58
  158. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -0
  159. package/dist/query/{unit-of-work.js → unit-of-work/unit-of-work.js} +435 -198
  160. package/dist/query/unit-of-work/unit-of-work.js.map +1 -0
  161. package/dist/query/value-decoding.js +71 -0
  162. package/dist/query/value-decoding.js.map +1 -0
  163. package/dist/query/value-encoding.js +124 -0
  164. package/dist/query/value-encoding.js.map +1 -0
  165. package/dist/schema/create.d.ts +3 -0
  166. package/dist/schema/create.d.ts.map +1 -1
  167. package/dist/schema/create.js +4 -0
  168. package/dist/schema/create.js.map +1 -1
  169. package/dist/schema/type-conversion/create-sql-type-mapper.js +29 -0
  170. package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -0
  171. package/dist/schema/type-conversion/dialect/mysql.js +57 -0
  172. package/dist/schema/type-conversion/dialect/mysql.js.map +1 -0
  173. package/dist/schema/type-conversion/dialect/postgres.js +56 -0
  174. package/dist/schema/type-conversion/dialect/postgres.js.map +1 -0
  175. package/dist/schema/type-conversion/dialect/sqlite.js +52 -0
  176. package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -0
  177. package/dist/schema/type-conversion/type-mapping.js +63 -0
  178. package/dist/schema/type-conversion/type-mapping.js.map +1 -0
  179. package/dist/sql-driver/connection/connection-provider.d.ts +13 -0
  180. package/dist/sql-driver/connection/connection-provider.d.ts.map +1 -0
  181. package/dist/sql-driver/connection/connection-provider.js +19 -0
  182. package/dist/sql-driver/connection/connection-provider.js.map +1 -0
  183. package/dist/sql-driver/connection/single-connection-provider.js +23 -0
  184. package/dist/sql-driver/connection/single-connection-provider.js.map +1 -0
  185. package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
  186. package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
  187. package/dist/sql-driver/dialects/dialects.d.ts +2 -0
  188. package/dist/sql-driver/dialects/dialects.js +3 -0
  189. package/dist/sql-driver/dialects/durable-object-dialect.d.ts +72 -0
  190. package/dist/sql-driver/dialects/durable-object-dialect.d.ts.map +1 -0
  191. package/dist/sql-driver/dialects/durable-object-dialect.js +130 -0
  192. package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -0
  193. package/dist/sql-driver/driver/runtime-driver.d.ts +23 -0
  194. package/dist/sql-driver/driver/runtime-driver.d.ts.map +1 -0
  195. package/dist/sql-driver/driver/runtime-driver.js +56 -0
  196. package/dist/sql-driver/driver/runtime-driver.js.map +1 -0
  197. package/dist/sql-driver/query-executor/default-query-executor.js +26 -0
  198. package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -0
  199. package/dist/sql-driver/query-executor/plugin.d.ts +17 -0
  200. package/dist/sql-driver/query-executor/plugin.d.ts.map +1 -0
  201. package/dist/sql-driver/query-executor/query-executor-base.js +25 -0
  202. package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -0
  203. package/dist/sql-driver/query-executor/query-executor.d.ts +36 -0
  204. package/dist/sql-driver/query-executor/query-executor.d.ts.map +1 -0
  205. package/dist/sql-driver/sql-driver-adapter.d.ts +29 -0
  206. package/dist/sql-driver/sql-driver-adapter.d.ts.map +1 -0
  207. package/dist/sql-driver/sql-driver-adapter.js +68 -0
  208. package/dist/sql-driver/sql-driver-adapter.js.map +1 -0
  209. package/dist/sql-driver/sql-driver.d.ts +38 -0
  210. package/dist/sql-driver/sql-driver.d.ts.map +1 -0
  211. package/dist/sql-driver/sql-driver.js +1 -0
  212. package/dist/sql-driver/sql.js +50 -0
  213. package/dist/sql-driver/sql.js.map +1 -0
  214. package/dist/with-database.d.ts +32 -0
  215. package/dist/with-database.d.ts.map +1 -0
  216. package/dist/with-database.js +34 -0
  217. package/dist/with-database.js.map +1 -0
  218. package/package.json +43 -9
  219. package/src/adapters/adapters.ts +23 -4
  220. package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +140 -185
  221. package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts} +187 -55
  222. package/src/adapters/drizzle/drizzle-adapter.ts +14 -93
  223. package/src/adapters/drizzle/generate.test.ts +102 -269
  224. package/src/adapters/drizzle/generate.ts +89 -63
  225. package/src/adapters/drizzle/migrate-drizzle.test.ts +19 -0
  226. package/src/adapters/drizzle/shared.ts +0 -34
  227. package/src/adapters/drizzle/test-utils.ts +36 -5
  228. package/src/adapters/generic-sql/README.md +14 -0
  229. package/src/adapters/generic-sql/driver-config.ts +144 -0
  230. package/src/adapters/generic-sql/generic-sql-adapter.test.ts +50 -0
  231. package/src/adapters/generic-sql/generic-sql-adapter.ts +146 -0
  232. package/src/adapters/generic-sql/generic-sql-uow-executor.ts +130 -0
  233. package/src/adapters/generic-sql/migration/cold-kysely.ts +55 -0
  234. package/src/adapters/{kysely/migration/execute-mysql.test.ts → generic-sql/migration/dialect/mysql.test.ts} +342 -484
  235. package/src/adapters/generic-sql/migration/dialect/mysql.ts +104 -0
  236. package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +1008 -0
  237. package/src/adapters/generic-sql/migration/dialect/postgres.ts +113 -0
  238. package/src/adapters/{kysely/migration/execute-sqlite.test.ts → generic-sql/migration/dialect/sqlite.test.ts} +307 -510
  239. package/src/adapters/generic-sql/migration/dialect/sqlite.ts +189 -0
  240. package/src/adapters/generic-sql/migration/executor.ts +33 -0
  241. package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +661 -0
  242. package/src/adapters/generic-sql/migration/prepared-migrations.ts +214 -0
  243. package/src/adapters/generic-sql/migration/sql-generator.ts +413 -0
  244. package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +36 -0
  245. package/src/adapters/generic-sql/query/cursor-utils.ts +56 -0
  246. package/src/adapters/generic-sql/query/dialect/mysql.ts +34 -0
  247. package/src/adapters/generic-sql/query/dialect/postgres.ts +32 -0
  248. package/src/adapters/generic-sql/query/dialect/sqlite.ts +32 -0
  249. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +1568 -0
  250. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +314 -0
  251. package/src/adapters/generic-sql/query/select-builder.test.ts +256 -0
  252. package/src/adapters/generic-sql/query/select-builder.ts +137 -0
  253. package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +195 -0
  254. package/src/adapters/generic-sql/query/sql-query-compiler.ts +367 -0
  255. package/src/adapters/generic-sql/query/where-builder.test.ts +744 -0
  256. package/src/adapters/generic-sql/query/where-builder.ts +211 -0
  257. package/src/adapters/generic-sql/result-interpreter.ts +102 -0
  258. package/src/adapters/generic-sql/test/generic-drizzle-adapter-sqlite3.test.ts +899 -0
  259. package/src/adapters/generic-sql/uow-decoder.test.ts +399 -0
  260. package/src/adapters/generic-sql/uow-decoder.ts +152 -0
  261. package/src/adapters/generic-sql/uow-encoder.test.ts +183 -0
  262. package/src/adapters/generic-sql/uow-encoder.ts +131 -0
  263. package/src/adapters/kysely/kysely-adapter-pglite.test.ts +90 -96
  264. package/src/adapters/kysely/kysely-adapter-sqlocal.test.ts +215 -0
  265. package/src/adapters/kysely/kysely-adapter.ts +10 -242
  266. package/src/adapters/{drizzle/drizzle-query.ts → shared/from-unit-of-work-compiler.ts} +111 -106
  267. package/src/adapters/shared/table-name-mapper.ts +50 -0
  268. package/src/adapters/shared/uow-operation-compiler.ts +211 -0
  269. package/src/db-fragment-definition-builder.test.ts +887 -0
  270. package/src/db-fragment-definition-builder.ts +737 -0
  271. package/src/db-fragment-instantiator.test.ts +543 -0
  272. package/src/db-fragment-integration.test.ts +406 -0
  273. package/src/fragments/internal-fragment.test.ts +549 -0
  274. package/src/fragments/internal-fragment.ts +249 -0
  275. package/src/hooks/hooks.test.ts +575 -0
  276. package/src/hooks/hooks.ts +179 -0
  277. package/src/migration-engine/generation-engine.test.ts +60 -27
  278. package/src/migration-engine/generation-engine.ts +99 -92
  279. package/src/mod.ts +139 -78
  280. package/src/query/column-defaults.ts +49 -0
  281. package/src/query/cursor.test.ts +147 -3
  282. package/src/query/cursor.ts +25 -8
  283. package/src/query/orm/orm.ts +1 -1
  284. package/src/query/query-type.test.ts +9 -9
  285. package/src/query/serialize/create-sql-serializer.ts +34 -0
  286. package/src/query/serialize/dialect/mysql-serializer.ts +142 -0
  287. package/src/query/serialize/dialect/postgres-serializer.ts +129 -0
  288. package/src/query/serialize/dialect/sqlite-serializer.test.ts +251 -0
  289. package/src/query/serialize/dialect/sqlite-serializer.ts +156 -0
  290. package/src/query/serialize/sql-serializer.ts +143 -0
  291. package/src/query/{query.ts → simple-query-interface.ts} +4 -4
  292. package/src/query/unit-of-work/execute-unit-of-work.test.ts +1310 -0
  293. package/src/query/unit-of-work/execute-unit-of-work.ts +504 -0
  294. package/src/query/unit-of-work/retry-policy.test.ts +217 -0
  295. package/src/query/unit-of-work/retry-policy.ts +141 -0
  296. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +831 -0
  297. package/src/query/{unit-of-work-types.test.ts → unit-of-work/unit-of-work-types.test.ts} +7 -5
  298. package/src/query/unit-of-work/unit-of-work.test.ts +1716 -0
  299. package/src/query/{unit-of-work.ts → unit-of-work/unit-of-work.ts} +716 -420
  300. package/src/query/{result-transform.test.ts → value-decoding.test.ts} +45 -298
  301. package/src/query/value-decoding.ts +113 -0
  302. package/src/query/value-encoding.test.ts +390 -0
  303. package/src/query/value-encoding.ts +168 -0
  304. package/src/schema/create.test.ts +5 -1
  305. package/src/schema/create.ts +5 -0
  306. package/src/schema/serialize.test.ts +165 -407
  307. package/src/schema/type-conversion/create-sql-type-mapper.ts +28 -0
  308. package/src/schema/type-conversion/dialect/mysql.ts +64 -0
  309. package/src/schema/type-conversion/dialect/postgres.ts +62 -0
  310. package/src/schema/type-conversion/dialect/sqlite.ts +63 -0
  311. package/src/schema/type-conversion/type-mapping.test.ts +137 -0
  312. package/src/schema/type-conversion/type-mapping.ts +153 -0
  313. package/src/shared/connection-pool.ts +5 -5
  314. package/src/sql-driver/better-sqlite3.test.ts +126 -0
  315. package/src/sql-driver/connection/connection-provider.ts +27 -0
  316. package/src/sql-driver/connection/single-connection-provider.ts +42 -0
  317. package/src/sql-driver/dialect-adapter/dialect-adapter.ts +9 -0
  318. package/src/sql-driver/dialect-adapter/sqlite-dialect-adapter.ts +7 -0
  319. package/src/sql-driver/dialects/dialects.ts +1 -0
  320. package/src/sql-driver/dialects/durable-object-dialect.ts +260 -0
  321. package/src/sql-driver/driver/runtime-driver.ts +91 -0
  322. package/src/sql-driver/query-executor/default-query-executor.ts +38 -0
  323. package/src/sql-driver/query-executor/plugin.ts +22 -0
  324. package/src/sql-driver/query-executor/query-executor-base.ts +53 -0
  325. package/src/sql-driver/query-executor/query-executor.ts +44 -0
  326. package/src/sql-driver/sql-driver-adapter.ts +96 -0
  327. package/src/sql-driver/sql-driver.ts +53 -0
  328. package/src/sql-driver/sql.ts +57 -0
  329. package/src/sql-driver/sqlocal.test.ts +117 -0
  330. package/src/with-database.ts +152 -0
  331. package/tsdown.config.ts +8 -2
  332. package/dist/adapters/drizzle/drizzle-connection-pool.js +0 -40
  333. package/dist/adapters/drizzle/drizzle-connection-pool.js.map +0 -1
  334. package/dist/adapters/drizzle/drizzle-query.d.ts +0 -23
  335. package/dist/adapters/drizzle/drizzle-query.d.ts.map +0 -1
  336. package/dist/adapters/drizzle/drizzle-query.js.map +0 -1
  337. package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +0 -10
  338. package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +0 -1
  339. package/dist/adapters/drizzle/drizzle-uow-compiler.js +0 -315
  340. package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +0 -1
  341. package/dist/adapters/drizzle/drizzle-uow-decoder.js +0 -116
  342. package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +0 -1
  343. package/dist/adapters/drizzle/drizzle-uow-executor.js +0 -149
  344. package/dist/adapters/drizzle/drizzle-uow-executor.js.map +0 -1
  345. package/dist/adapters/drizzle/join-column-utils.js +0 -28
  346. package/dist/adapters/drizzle/join-column-utils.js.map +0 -1
  347. package/dist/adapters/drizzle/shared.d.ts +0 -14
  348. package/dist/adapters/drizzle/shared.d.ts.map +0 -1
  349. package/dist/adapters/drizzle/shared.js +0 -35
  350. package/dist/adapters/drizzle/shared.js.map +0 -1
  351. package/dist/adapters/kysely/kysely-connection-pool.js +0 -41
  352. package/dist/adapters/kysely/kysely-connection-pool.js.map +0 -1
  353. package/dist/adapters/kysely/kysely-query-builder.js +0 -321
  354. package/dist/adapters/kysely/kysely-query-builder.js.map +0 -1
  355. package/dist/adapters/kysely/kysely-query-compiler.js +0 -66
  356. package/dist/adapters/kysely/kysely-query-compiler.js.map +0 -1
  357. package/dist/adapters/kysely/kysely-query.d.ts +0 -22
  358. package/dist/adapters/kysely/kysely-query.d.ts.map +0 -1
  359. package/dist/adapters/kysely/kysely-query.js +0 -223
  360. package/dist/adapters/kysely/kysely-query.js.map +0 -1
  361. package/dist/adapters/kysely/kysely-shared.d.ts.map +0 -1
  362. package/dist/adapters/kysely/kysely-shared.js +0 -18
  363. package/dist/adapters/kysely/kysely-shared.js.map +0 -1
  364. package/dist/adapters/kysely/kysely-uow-compiler.js +0 -170
  365. package/dist/adapters/kysely/kysely-uow-compiler.js.map +0 -1
  366. package/dist/adapters/kysely/kysely-uow-executor.js +0 -89
  367. package/dist/adapters/kysely/kysely-uow-executor.js.map +0 -1
  368. package/dist/adapters/kysely/migration/execute-base.js +0 -128
  369. package/dist/adapters/kysely/migration/execute-base.js.map +0 -1
  370. package/dist/adapters/kysely/migration/execute-factory.js +0 -34
  371. package/dist/adapters/kysely/migration/execute-factory.js.map +0 -1
  372. package/dist/adapters/kysely/migration/execute-mssql.js +0 -112
  373. package/dist/adapters/kysely/migration/execute-mssql.js.map +0 -1
  374. package/dist/adapters/kysely/migration/execute-mysql.js +0 -93
  375. package/dist/adapters/kysely/migration/execute-mysql.js.map +0 -1
  376. package/dist/adapters/kysely/migration/execute-postgres.js +0 -104
  377. package/dist/adapters/kysely/migration/execute-postgres.js.map +0 -1
  378. package/dist/adapters/kysely/migration/execute-sqlite.js +0 -123
  379. package/dist/adapters/kysely/migration/execute-sqlite.js.map +0 -1
  380. package/dist/adapters/kysely/migration/execute.js +0 -34
  381. package/dist/adapters/kysely/migration/execute.js.map +0 -1
  382. package/dist/bind-services.d.ts +0 -7
  383. package/dist/bind-services.d.ts.map +0 -1
  384. package/dist/bind-services.js +0 -14
  385. package/dist/bind-services.js.map +0 -1
  386. package/dist/fragment.d.ts +0 -173
  387. package/dist/fragment.d.ts.map +0 -1
  388. package/dist/fragment.js +0 -191
  389. package/dist/fragment.js.map +0 -1
  390. package/dist/migration-engine/create.d.ts +0 -37
  391. package/dist/migration-engine/create.d.ts.map +0 -1
  392. package/dist/migration-engine/create.js +0 -58
  393. package/dist/migration-engine/create.js.map +0 -1
  394. package/dist/migration-engine/shared.d.ts +0 -112
  395. package/dist/migration-engine/shared.d.ts.map +0 -1
  396. package/dist/query/query.d.ts.map +0 -1
  397. package/dist/query/result-transform.js +0 -168
  398. package/dist/query/result-transform.js.map +0 -1
  399. package/dist/query/unit-of-work.d.ts.map +0 -1
  400. package/dist/query/unit-of-work.js.map +0 -1
  401. package/dist/schema/serialize.js +0 -106
  402. package/dist/schema/serialize.js.map +0 -1
  403. package/dist/shared/settings-schema.js +0 -36
  404. package/dist/shared/settings-schema.js.map +0 -1
  405. package/src/adapters/drizzle/drizzle-adapter.test.ts +0 -170
  406. package/src/adapters/drizzle/drizzle-connection-pool.ts +0 -66
  407. package/src/adapters/drizzle/drizzle-query.test.ts +0 -499
  408. package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +0 -1383
  409. package/src/adapters/drizzle/drizzle-uow-compiler.ts +0 -636
  410. package/src/adapters/drizzle/drizzle-uow-decoder.ts +0 -218
  411. package/src/adapters/drizzle/drizzle-uow-executor.ts +0 -276
  412. package/src/adapters/drizzle/join-column-utils.test.ts +0 -79
  413. package/src/adapters/drizzle/join-column-utils.ts +0 -39
  414. package/src/adapters/kysely/kysely-connection-pool.ts +0 -70
  415. package/src/adapters/kysely/kysely-query-builder.test.ts +0 -1344
  416. package/src/adapters/kysely/kysely-query-builder.ts +0 -666
  417. package/src/adapters/kysely/kysely-query-compiler.ts +0 -132
  418. package/src/adapters/kysely/kysely-query.test.ts +0 -498
  419. package/src/adapters/kysely/kysely-query.ts +0 -390
  420. package/src/adapters/kysely/kysely-shared.ts +0 -23
  421. package/src/adapters/kysely/kysely-uow-compiler.test.ts +0 -998
  422. package/src/adapters/kysely/kysely-uow-compiler.ts +0 -318
  423. package/src/adapters/kysely/kysely-uow-executor.ts +0 -145
  424. package/src/adapters/kysely/kysely-uow-joins.test.ts +0 -811
  425. package/src/adapters/kysely/migration/execute-base.ts +0 -256
  426. package/src/adapters/kysely/migration/execute-factory.ts +0 -53
  427. package/src/adapters/kysely/migration/execute-mssql.ts +0 -250
  428. package/src/adapters/kysely/migration/execute-mysql.ts +0 -211
  429. package/src/adapters/kysely/migration/execute-postgres.test.ts +0 -2657
  430. package/src/adapters/kysely/migration/execute-postgres.ts +0 -234
  431. package/src/adapters/kysely/migration/execute-sqlite.ts +0 -247
  432. package/src/adapters/kysely/migration/execute.ts +0 -50
  433. package/src/adapters/kysely/migration/kysely-migrator.test.ts +0 -261
  434. package/src/bind-services.test.ts +0 -214
  435. package/src/bind-services.ts +0 -37
  436. package/src/db-fragment.test.ts +0 -800
  437. package/src/fragment.ts +0 -727
  438. package/src/query/result-transform.ts +0 -271
  439. package/src/query/unit-of-work-multi-schema.test.ts +0 -64
  440. package/src/query/unit-of-work.test.ts +0 -943
  441. package/src/schema/serialize.ts +0 -396
  442. package/src/shared/settings-schema.ts +0 -61
  443. package/src/uow-context-integration.test.ts +0 -102
  444. package/src/uow-context.test.ts +0 -182
  445. /package/dist/query/{query.js → simple-query-interface.js} +0 -0
@@ -1,11 +1,12 @@
1
- import { AnySchema, AnyTable, FragnoId, IdColumn, Index, Relation } from "../schema/create.js";
2
- import { Condition, ConditionBuilder } from "./condition-builder.js";
3
- import { CompiledJoin } from "./orm/orm.js";
4
- import { Cursor, CursorResult } from "./cursor.js";
5
- import { Prettify } from "../util/types.js";
6
- import { ExtractJoinOut, ExtractSelect, SelectClause, SelectResult, TableToInsertValues, TableToUpdateValues } from "./query.js";
1
+ import { AnySchema, AnyTable, FragnoId, IdColumn, Index, Relation } from "../../schema/create.js";
2
+ import { Condition, ConditionBuilder } from "../condition-builder.js";
3
+ import { CompiledJoin } from "../orm/orm.js";
4
+ import { Cursor, CursorResult } from "../cursor.js";
5
+ import { Prettify } from "../../util/types.js";
6
+ import { HookPayload, HooksMap, TriggerHookOptions, TriggeredHook } from "../../hooks/hooks.js";
7
+ import { ExtractJoinOut, ExtractSelect, SelectClause, SelectResult, TableToInsertValues, TableToUpdateValues } from "../simple-query-interface.js";
7
8
 
8
- //#region src/query/unit-of-work.d.ts
9
+ //#region src/query/unit-of-work/unit-of-work.d.ts
9
10
 
10
11
  /**
11
12
  * Builder for updateMany operations that supports both whereIndex and set chaining
@@ -103,6 +104,7 @@ type RetrievalOperation<TSchema extends AnySchema, TTable extends AnyTable = TSc
103
104
  indexName: string;
104
105
  options: FindOptions<TTable, SelectClause<TTable>>;
105
106
  withCursor?: boolean;
107
+ withSingleResult?: boolean;
106
108
  } | {
107
109
  type: "count";
108
110
  schema: TSchema;
@@ -136,18 +138,34 @@ type MutationOperation<TSchema extends AnySchema, TTable extends AnyTable = TSch
136
138
  table: TTable["name"];
137
139
  id: FragnoId | string;
138
140
  checkVersion: boolean;
141
+ } | {
142
+ type: "check";
143
+ schema: TSchema;
144
+ namespace?: string;
145
+ table: TTable["name"];
146
+ id: FragnoId;
139
147
  };
140
148
  /**
141
149
  * Compiled mutation with metadata for execution
142
150
  */
143
151
  interface CompiledMutation<TOutput> {
144
152
  query: TOutput;
153
+ /**
154
+ * The type of mutation operation (create, update, delete, or check).
155
+ */
156
+ op: "create" | "update" | "delete" | "check";
145
157
  /**
146
158
  * Number of rows this operation must affect for the transaction to succeed.
147
159
  * If actual affected rows doesn't match, it indicates a version conflict.
148
160
  * null means don't check affected rows (e.g., for create operations).
149
161
  */
150
- expectedAffectedRows: number | null;
162
+ expectedAffectedRows: bigint | null;
163
+ /**
164
+ * Number of rows this SELECT query must return for the transaction to succeed.
165
+ * Used for check operations to verify version without modifying data.
166
+ * null means this is not a SELECT query that needs row count validation.
167
+ */
168
+ expectedReturnedRows: number | null;
151
169
  }
152
170
  /**
153
171
  * Compiler interface for Unit of Work operations
@@ -197,7 +215,7 @@ interface UOWDecoder<TRawInput = unknown> {
197
215
  * @param operations - Array of retrieval operations that produced these results
198
216
  * @returns Decoded results in application format
199
217
  */
200
- (rawResults: TRawInput[], operations: RetrievalOperation<AnySchema>[]): unknown[];
218
+ decode(rawResults: TRawInput[], operations: RetrievalOperation<AnySchema>[]): unknown[];
201
219
  }
202
220
  /**
203
221
  * Builder for find operations in Unit of Work
@@ -237,6 +255,7 @@ declare class FindBuilder<TTable extends AnyTable, TSelect extends SelectClause<
237
255
  before(cursor: Cursor | string): this;
238
256
  /**
239
257
  * Set the number of results per page
258
+ * @throws {RangeError} If size is not a positive integer
240
259
  */
241
260
  pageSize(size: number): this;
242
261
  /**
@@ -321,6 +340,7 @@ declare class JoinFindBuilder<TTable extends AnyTable, TSelect extends SelectCla
321
340
  orderByIndex<TIndexName extends ValidIndexName<TTable>>(indexName: TIndexName, direction: "asc" | "desc"): this;
322
341
  /**
323
342
  * Set the number of results to return
343
+ * @throws {RangeError} If size is not a positive integer
324
344
  */
325
345
  pageSize(size: number): this;
326
346
  /**
@@ -358,12 +378,13 @@ type IndexedJoinBuilder<TTable extends AnyTable, TJoinOut> = { [K in keyof TTabl
358
378
  */
359
379
  declare function buildJoinIndexed<TTable extends AnyTable, TJoinOut>(table: TTable, fn: (builder: IndexedJoinBuilder<TTable, {}>) => IndexedJoinBuilder<TTable, TJoinOut>): CompiledJoin[];
360
380
  /**
361
- * Base interface for Unit of Work with schema-agnostic methods only.
362
- * This allows UOW instances to be passed between services that use different schemas.
381
+ * Full Unit of Work interface with all operations including execution.
382
+ * This allows UOW instances to be passed between different contexts that use different schemas.
363
383
  */
364
- interface IUnitOfWorkBase {
384
+ interface IUnitOfWork {
365
385
  readonly state: UOWState;
366
386
  readonly name: string | undefined;
387
+ readonly nonce: string;
367
388
  readonly retrievalPhase: Promise<unknown[]>;
368
389
  readonly mutationPhase: Promise<void>;
369
390
  executeRetrieve(): Promise<unknown[]>;
@@ -373,12 +394,26 @@ interface IUnitOfWorkBase {
373
394
  getRetrievalOperations(): ReadonlyArray<RetrievalOperation<AnySchema>>;
374
395
  getMutationOperations(): ReadonlyArray<MutationOperation<AnySchema>>;
375
396
  getCreatedIds(): FragnoId[];
376
- forSchema<TOtherSchema extends AnySchema>(schema: TOtherSchema): UnitOfWorkSchemaView<TOtherSchema, [], any>;
397
+ restrict(): IUnitOfWork;
398
+ reset(): void;
399
+ forSchema<TOtherSchema extends AnySchema, TOtherHooks extends HooksMap = {}>(schema: TOtherSchema, hooks?: TOtherHooks): TypedUnitOfWork<TOtherSchema, [], any, TOtherHooks>;
400
+ registerSchema(schema: AnySchema, namespace: string): void;
401
+ triggerHook(hookName: string, payload: unknown, options?: TriggerHookOptions): void;
402
+ getTriggeredHooks(): readonly TriggeredHook[];
377
403
  }
378
- declare function createUnitOfWork<const TSchema extends AnySchema, const TRetrievalResults extends unknown[] = [], const TRawInput = unknown>(schema: TSchema, compiler: UOWCompiler<unknown>, executor: UOWExecutor<unknown, TRawInput>, decoder: UOWDecoder<TRawInput>, name?: string): UnitOfWork<TSchema, TRetrievalResults, TRawInput>;
404
+ /**
405
+ * Restricted UOW interface without execute methods.
406
+ * Useful when you want to allow building operations but not executing them,
407
+ * to prevent deadlocks or enforce execution control at a higher level.
408
+ *
409
+ * Note: This is just a marker interface. Restriction is enforced by the UnitOfWork class itself.
410
+ */
411
+ interface IUnitOfWorkRestricted extends Omit<IUnitOfWork, "executeRetrieve" | "executeMutations"> {}
412
+ declare function createUnitOfWork(compiler: UOWCompiler<unknown>, executor: UOWExecutor<unknown, unknown>, decoder: UOWDecoder<unknown>, schemaNamespaceMap?: WeakMap<AnySchema, string>, name?: string): UnitOfWork;
379
413
  interface UnitOfWorkConfig {
380
414
  dryRun?: boolean;
381
415
  onQuery?: (query: unknown) => void;
416
+ nonce?: string;
382
417
  }
383
418
  /**
384
419
  * Unit of Work implementation with optimistic concurrency control
@@ -387,19 +422,22 @@ interface UnitOfWorkConfig {
387
422
  * 1. Retrieval phase: Read operations to fetch entities with their versions
388
423
  * 2. Mutation phase: Write operations that check versions before committing
389
424
  *
425
+ * This is the untyped base storage. Use TypedUnitOfWork for type-safe operations.
426
+ *
390
427
  * @example
391
428
  * ```ts
392
429
  * const uow = queryEngine.createUnitOfWork("update-user-balance");
430
+ * const typedUow = uow.forSchema(mySchema);
393
431
  *
394
432
  * // Retrieval phase
395
- * uow.find("users", (b) => b.where("primary", (eb) => eb("id", "=", userId)));
433
+ * typedUow.find("users", (b) => b.whereIndex("primary", (eb) => eb("id", "=", userId)));
396
434
  *
397
435
  * // Execute retrieval and transition to mutation phase
398
436
  * const [users] = await uow.executeRetrieve();
399
437
  *
400
438
  * // Mutation phase with version check
401
439
  * const user = users[0];
402
- * uow.update("users", user.id, (b) => b.set({ balance: newBalance }).check());
440
+ * typedUow.update("users", user.id, (b) => b.set({ balance: newBalance }).check());
403
441
  *
404
442
  * // Execute mutations
405
443
  * const { success } = await uow.executeMutations();
@@ -408,56 +446,70 @@ interface UnitOfWorkConfig {
408
446
  * }
409
447
  * ```
410
448
  */
411
- declare class UnitOfWork<const TSchema extends AnySchema, const TRetrievalResults extends unknown[] = [], const TRawInput = unknown> implements IUnitOfWorkBase {
449
+ declare class UnitOfWork<const TRawInput = unknown> implements IUnitOfWork {
412
450
  #private;
413
- constructor(schema: TSchema, compiler: UOWCompiler<unknown>, executor: UOWExecutor<unknown, TRawInput>, decoder: UOWDecoder<TRawInput>, name?: string, config?: UnitOfWorkConfig, schemaNamespaceMap?: WeakMap<AnySchema, string>);
414
- get schema(): TSchema;
415
- get $results(): Prettify<TRetrievalResults>;
451
+ constructor(compiler: UOWCompiler<unknown>, executor: UOWExecutor<unknown, TRawInput>, decoder: UOWDecoder<TRawInput>, name?: string, config?: UnitOfWorkConfig, schemaNamespaceMap?: WeakMap<AnySchema, string>);
452
+ /**
453
+ * Register a schema with its namespace for cross-fragment operations.
454
+ * This is used for internal fragments like hooks that need to create
455
+ * records in a different schema during the same transaction.
456
+ */
457
+ registerSchema(schema: AnySchema, namespace: string): void;
416
458
  /**
417
- * Get a schema-specific view of this UOW for type-safe operations
418
- * Returns a wrapper that uses a different schema for operations.
459
+ * Get a schema-specific typed view of this UOW for type-safe operations.
460
+ * Returns a wrapper that provides typed operations for the given schema.
419
461
  * The namespace is automatically resolved from the schema-namespace map.
462
+ * The optional hooks parameter is for type inference only - pass your hooks map
463
+ * to get proper typing for triggerHook. The value is not used at runtime.
420
464
  */
421
- forSchema<TOtherSchema extends AnySchema>(schema: TOtherSchema): UnitOfWorkSchemaView<TOtherSchema, [], TRawInput>;
422
- get state(): UOWState;
423
- get name(): string | undefined;
465
+ forSchema<TOtherSchema extends AnySchema, TOtherHooks extends HooksMap = {}>(schema: TOtherSchema, _hooks?: TOtherHooks): TypedUnitOfWork<TOtherSchema, [], TRawInput, TOtherHooks>;
424
466
  /**
425
- * Promise that resolves when the retrieval phase is executed
426
- * Service methods can await this to coordinate multi-phase logic
467
+ * Create a restricted child UOW that cannot execute phases.
468
+ * The child shares the same operation storage but must signal readiness
469
+ * before the parent can execute each phase.
427
470
  */
428
- get retrievalPhase(): Promise<TRetrievalResults>;
471
+ restrict(): UnitOfWork<TRawInput>;
429
472
  /**
430
- * Promise that resolves when the mutation phase is executed
431
- * Service methods can await this to coordinate multi-phase logic
473
+ * Signal that this child is ready for retrieval phase execution.
474
+ * Only valid for restricted (child) UOWs.
432
475
  */
433
- get mutationPhase(): Promise<void>;
476
+ signalReadyForRetrieval(): void;
434
477
  /**
435
- * Execute the retrieval phase and transition to mutation phase
436
- * Returns all results from find operations
478
+ * Signal that this child is ready for mutation phase execution.
479
+ * Only valid for restricted (child) UOWs.
437
480
  */
438
- executeRetrieve(): Promise<TRetrievalResults>;
481
+ signalReadyForMutation(): void;
439
482
  /**
440
- * Add a find operation using a builder callback (retrieval phase only)
483
+ * Reset the UOW to initial state for retry support.
484
+ * Clears operations, resets state, and resets phase promises.
441
485
  */
442
- find<TTableName extends keyof TSchema["tables"] & string, const TBuilderResult>(tableName: TTableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TTableName]>, "build">) => TBuilderResult): UnitOfWork<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], ExtractJoinOut<TBuilderResult>, Extract<ExtractSelect<TBuilderResult>, SelectClause<TSchema["tables"][TTableName]>>>[]], TRawInput>;
443
- find<TTableName extends keyof TSchema["tables"] & string>(tableName: TTableName): UnitOfWork<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], {}, true>[]], TRawInput>;
486
+ reset(): void;
444
487
  /**
445
- * Add a find operation with cursor metadata (retrieval phase only)
488
+ * Trigger a hook to be executed after the transaction commits.
446
489
  */
447
- findWithCursor<TTableName extends keyof TSchema["tables"] & string, const TBuilderResult>(tableName: TTableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TTableName]>, "build">) => TBuilderResult): UnitOfWork<TSchema, [...TRetrievalResults, CursorResult<SelectResult<TSchema["tables"][TTableName], ExtractJoinOut<TBuilderResult>, Extract<ExtractSelect<TBuilderResult>, SelectClause<TSchema["tables"][TTableName]>>>>], TRawInput>;
490
+ triggerHook(hookName: string, payload: unknown, options?: TriggerHookOptions): void;
448
491
  /**
449
- * Add a create operation (mutation phase only)
450
- * Returns a FragnoId with the external ID that can be used immediately in subsequent operations
492
+ * Get all triggered hooks for this UOW.
451
493
  */
452
- create<TableName extends keyof TSchema["tables"] & string>(table: TableName, values: TableToInsertValues<TSchema["tables"][TableName]>): FragnoId;
494
+ getTriggeredHooks(): ReadonlyArray<TriggeredHook>;
495
+ get state(): UOWState;
496
+ get name(): string | undefined;
497
+ get nonce(): string;
453
498
  /**
454
- * Add an update operation using a builder callback (mutation phase only)
499
+ * Promise that resolves when the retrieval phase is executed
500
+ * Service methods can await this to coordinate multi-phase logic
455
501
  */
456
- update<TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn: (builder: Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build">) => Omit<UpdateBuilder<TSchema["tables"][TableName]>, "build"> | void): void;
502
+ get retrievalPhase(): Promise<unknown[]>;
457
503
  /**
458
- * Add a delete operation using a builder callback (mutation phase only)
504
+ * Promise that resolves when the mutation phase is executed
505
+ * Service methods can await this to coordinate multi-phase logic
459
506
  */
460
- delete<TableName extends keyof TSchema["tables"] & string>(table: TableName, id: FragnoId | string, builderFn?: (builder: Omit<DeleteBuilder, "build">) => Omit<DeleteBuilder, "build"> | void): void;
507
+ get mutationPhase(): Promise<void>;
508
+ /**
509
+ * Execute the retrieval phase and transition to mutation phase
510
+ * Returns all results from find operations
511
+ */
512
+ executeRetrieve(): Promise<unknown[]>;
461
513
  /**
462
514
  * Execute the mutation phase
463
515
  * Returns success flag indicating if mutations completed without conflicts
@@ -475,12 +527,12 @@ declare class UnitOfWork<const TSchema extends AnySchema, const TRetrievalResult
475
527
  getMutationOperations(): ReadonlyArray<MutationOperation<AnySchema>>;
476
528
  /**
477
529
  * @internal
478
- * Add a retrieval operation (used by SchemaView)
530
+ * Add a retrieval operation (used by TypedUnitOfWork)
479
531
  */
480
532
  addRetrievalOperation(op: RetrievalOperation<AnySchema>): number;
481
533
  /**
482
534
  * @internal
483
- * Add a mutation operation (used by SchemaView)
535
+ * Add a mutation operation (used by TypedUnitOfWork)
484
536
  */
485
537
  addMutationOperation(op: MutationOperation<AnySchema>): void;
486
538
  /**
@@ -503,33 +555,68 @@ declare class UnitOfWork<const TSchema extends AnySchema, const TRetrievalResult
503
555
  };
504
556
  }
505
557
  /**
506
- * A lightweight wrapper around a parent UOW that provides type-safe operations for a different schema.
507
- * All operations are stored in the parent UOW, but this wrapper ensures the correct schema is used.
558
+ * A typed facade around a UnitOfWork that provides type-safe operations for a specific schema.
559
+ * All operations are stored in the underlying UOW, but this facade ensures type safety and
560
+ * filters retrieval results to only include operations added through this facade.
508
561
  */
509
- declare class UnitOfWorkSchemaView<const TSchema extends AnySchema, const TRetrievalResults extends unknown[] = [], const TRawInput = unknown> implements IUnitOfWorkBase {
562
+ declare class TypedUnitOfWork<const TSchema extends AnySchema, const TRetrievalResults extends unknown[] = [], const TRawInput = unknown, const THooks extends HooksMap = {}> implements IUnitOfWork {
510
563
  #private;
511
- constructor(schema: TSchema, namespace: string | undefined, parent: UnitOfWork<AnySchema, unknown[], TRawInput>);
564
+ constructor(schema: TSchema, namespace: string | undefined, uow: UnitOfWork<TRawInput>);
512
565
  get $results(): Prettify<TRetrievalResults>;
513
566
  get schema(): TSchema;
514
567
  get name(): string | undefined;
568
+ get nonce(): string;
515
569
  get state(): UOWState;
516
570
  get retrievalPhase(): Promise<TRetrievalResults>;
517
571
  get mutationPhase(): Promise<void>;
518
572
  getRetrievalOperations(): readonly RetrievalOperation<AnySchema, AnyTable>[];
519
573
  getMutationOperations(): readonly MutationOperation<AnySchema, AnyTable>[];
520
574
  getCreatedIds(): FragnoId[];
521
- executeRetrieve(): Promise<unknown[]>;
575
+ executeRetrieve(): Promise<TRetrievalResults>;
522
576
  executeMutations(): Promise<{
523
577
  success: boolean;
524
578
  }>;
525
- find<TTableName extends keyof TSchema["tables"] & string, const TBuilderResult>(tableName: TTableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TTableName]>, "build">) => TBuilderResult): UnitOfWorkSchemaView<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], ExtractJoinOut<TBuilderResult>, Extract<ExtractSelect<TBuilderResult>, SelectClause<TSchema["tables"][TTableName]>>>[]], TRawInput>;
526
- find<TTableName extends keyof TSchema["tables"] & string>(tableName: TTableName): UnitOfWorkSchemaView<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], {}, true>[]], TRawInput>;
527
- findWithCursor<TTableName extends keyof TSchema["tables"] & string, const TBuilderResult>(tableName: TTableName, builderFn: (builder: Omit<FindBuilder<TSchema["tables"][TTableName]>, "build">) => TBuilderResult): UnitOfWorkSchemaView<TSchema, [...TRetrievalResults, CursorResult<SelectResult<TSchema["tables"][TTableName], ExtractJoinOut<TBuilderResult>, Extract<ExtractSelect<TBuilderResult>, SelectClause<TSchema["tables"][TTableName]>>>>], TRawInput>;
579
+ restrict(): IUnitOfWork;
580
+ reset(): void;
581
+ forSchema<TOtherSchema extends AnySchema, TOtherHooks extends HooksMap = {}>(schema: TOtherSchema, hooks?: TOtherHooks): TypedUnitOfWork<TOtherSchema, [], TRawInput, TOtherHooks>;
582
+ registerSchema(schema: AnySchema, namespace: string): void;
583
+ compile<TOutput>(compiler: UOWCompiler<TOutput>): {
584
+ name?: string;
585
+ retrievalBatch: TOutput[];
586
+ mutationBatch: CompiledMutation<TOutput>[];
587
+ };
588
+ 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>;
589
+ find<TTableName extends keyof TSchema["tables"] & string>(tableName: TTableName): TypedUnitOfWork<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], {}, true>[]], TRawInput, THooks>;
590
+ 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>;
591
+ findFirst<TTableName extends keyof TSchema["tables"] & string>(tableName: TTableName): TypedUnitOfWork<TSchema, [...TRetrievalResults, SelectResult<TSchema["tables"][TTableName], {}, true> | null], TRawInput, THooks>;
592
+ 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>;
528
593
  create<TableName extends keyof TSchema["tables"] & string>(tableName: TableName, values: TableToInsertValues<TSchema["tables"][TableName]>): FragnoId;
529
594
  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;
530
595
  delete<TableName extends keyof TSchema["tables"] & string>(tableName: TableName, id: FragnoId | string, builderFn?: (builder: Omit<DeleteBuilder, "build">) => Omit<DeleteBuilder, "build"> | void): void;
531
- forSchema<TOtherSchema extends AnySchema>(schema: TOtherSchema): UnitOfWorkSchemaView<TOtherSchema, [], TRawInput>;
596
+ /**
597
+ * Check that a record's version hasn't changed since retrieval.
598
+ * This is useful for ensuring related records remain unchanged during a transaction.
599
+ *
600
+ * @param tableName - The table name
601
+ * @param id - The FragnoId with version information (string IDs are not allowed)
602
+ * @throws Error if the ID is a string without version information
603
+ *
604
+ * @example
605
+ * ```ts
606
+ * // Ensure both accounts haven't changed before creating a transfer
607
+ * uow.check("accounts", fromAccount.id);
608
+ * uow.check("accounts", toAccount.id);
609
+ * uow.create("transactions", { fromAccountId, toAccountId, amount });
610
+ * ```
611
+ */
612
+ check<TableName extends keyof TSchema["tables"] & string>(tableName: TableName, id: FragnoId): void;
613
+ get $hooks(): THooks;
614
+ /**
615
+ * Trigger a hook to be executed after the transaction commits.
616
+ */
617
+ triggerHook<K$1 extends keyof THooks & string>(hookName: K$1, payload: HookPayload<THooks[K$1]>, options?: TriggerHookOptions): void;
618
+ getTriggeredHooks(): ReadonlyArray<TriggeredHook>;
532
619
  }
533
620
  //#endregion
534
- export { CompiledMutation, DeleteBuilder, FindBuilder, IUnitOfWorkBase, IndexColumns, IndexedConditionBuilder, IndexedJoinBuilder, InferIdColumnName, JoinFindBuilder, MutationOperation, MutationResult, RetrievalOperation, UOWCompiler, UOWDecoder, UOWExecutor, UOWState, UnitOfWork, UnitOfWorkConfig, UnitOfWorkSchemaView, UpdateBuilder, UpdateManyBuilder, ValidIndexName, buildJoinIndexed, createUnitOfWork };
621
+ export { CompiledMutation, DeleteBuilder, FindBuilder, IUnitOfWork, IUnitOfWorkRestricted, IndexColumns, IndexedConditionBuilder, IndexedJoinBuilder, InferIdColumnName, JoinFindBuilder, MutationOperation, MutationResult, RetrievalOperation, TypedUnitOfWork, UOWCompiler, UOWDecoder, UOWExecutor, UOWState, UnitOfWork, UnitOfWorkConfig, UpdateBuilder, UpdateManyBuilder, ValidIndexName, buildJoinIndexed, createUnitOfWork };
535
622
  //# sourceMappingURL=unit-of-work.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit-of-work.d.ts","names":[],"sources":["../../../src/query/unit-of-work/unit-of-work.ts"],"sourcesContent":[],"mappings":"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"}