@fragno-dev/db 0.1.15 → 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 (407) hide show
  1. package/.turbo/turbo-build.log +242 -179
  2. package/CHANGELOG.md +23 -0
  3. package/README.md +123 -8
  4. package/dist/adapters/adapters.d.ts +5 -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 -21
  8. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
  9. package/dist/adapters/drizzle/drizzle-adapter.js +7 -54
  10. package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
  11. package/dist/adapters/drizzle/generate.d.ts +3 -0
  12. package/dist/adapters/drizzle/generate.d.ts.map +1 -1
  13. package/dist/adapters/drizzle/generate.js +36 -28
  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 -18
  68. package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
  69. package/dist/adapters/kysely/kysely-adapter.js +6 -165
  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} +47 -61
  72. package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -0
  73. package/dist/adapters/{drizzle/shared.d.ts → shared/table-name-mapper.d.ts} +2 -4
  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 +53 -19
  80. package/dist/db-fragment-definition-builder.d.ts.map +1 -1
  81. package/dist/db-fragment-definition-builder.js +89 -19
  82. package/dist/db-fragment-definition-builder.js.map +1 -1
  83. package/dist/fragments/internal-fragment.d.ts +39 -5
  84. package/dist/fragments/internal-fragment.d.ts.map +1 -1
  85. package/dist/fragments/internal-fragment.js +82 -10
  86. package/dist/fragments/internal-fragment.js.map +1 -1
  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 +23 -61
  94. package/dist/migration-engine/generation-engine.js.map +1 -1
  95. package/dist/mod.d.ts +34 -10
  96. package/dist/mod.d.ts.map +1 -1
  97. package/dist/mod.js +47 -16
  98. package/dist/mod.js.map +1 -1
  99. package/dist/node_modules/.pnpm/{rou3@0.7.8 → rou3@0.7.10}/node_modules/rou3/dist/index.js +1 -1
  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/fragment-instantiator.js +69 -31
  102. package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -1
  103. package/dist/query/column-defaults.js +27 -0
  104. package/dist/query/column-defaults.js.map +1 -0
  105. package/dist/query/cursor.d.ts +4 -4
  106. package/dist/query/cursor.d.ts.map +1 -1
  107. package/dist/query/cursor.js +8 -6
  108. package/dist/query/cursor.js.map +1 -1
  109. package/dist/query/orm/orm.d.ts +1 -1
  110. package/dist/query/orm/orm.js.map +1 -1
  111. package/dist/query/serialize/create-sql-serializer.js +30 -0
  112. package/dist/query/serialize/create-sql-serializer.js.map +1 -0
  113. package/dist/query/serialize/dialect/mysql-serializer.js +87 -0
  114. package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -0
  115. package/dist/query/serialize/dialect/postgres-serializer.js +80 -0
  116. package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -0
  117. package/dist/query/serialize/dialect/sqlite-serializer.js +93 -0
  118. package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -0
  119. package/dist/query/serialize/sql-serializer.js +67 -0
  120. package/dist/query/serialize/sql-serializer.js.map +1 -0
  121. package/dist/query/{query.d.ts → simple-query-interface.d.ts} +5 -5
  122. package/dist/query/simple-query-interface.d.ts.map +1 -0
  123. package/dist/query/{execute-unit-of-work.d.ts → unit-of-work/execute-unit-of-work.d.ts} +13 -3
  124. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
  125. package/dist/query/{execute-unit-of-work.js → unit-of-work/execute-unit-of-work.js} +17 -4
  126. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -0
  127. package/dist/query/{retry-policy.d.ts → unit-of-work/retry-policy.d.ts} +1 -1
  128. package/dist/query/unit-of-work/retry-policy.d.ts.map +1 -0
  129. package/dist/query/{retry-policy.js → unit-of-work/retry-policy.js} +1 -1
  130. package/dist/query/unit-of-work/retry-policy.js.map +1 -0
  131. package/dist/query/{unit-of-work.d.ts → unit-of-work/unit-of-work.d.ts} +51 -18
  132. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -0
  133. package/dist/query/{unit-of-work.js → unit-of-work/unit-of-work.js} +58 -11
  134. package/dist/query/unit-of-work/unit-of-work.js.map +1 -0
  135. package/dist/query/value-decoding.js +71 -0
  136. package/dist/query/value-decoding.js.map +1 -0
  137. package/dist/query/value-encoding.js +124 -0
  138. package/dist/query/value-encoding.js.map +1 -0
  139. package/dist/schema/create.d.ts +3 -0
  140. package/dist/schema/create.d.ts.map +1 -1
  141. package/dist/schema/create.js +4 -0
  142. package/dist/schema/create.js.map +1 -1
  143. package/dist/schema/type-conversion/create-sql-type-mapper.js +29 -0
  144. package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -0
  145. package/dist/schema/type-conversion/dialect/mysql.js +57 -0
  146. package/dist/schema/type-conversion/dialect/mysql.js.map +1 -0
  147. package/dist/schema/type-conversion/dialect/postgres.js +56 -0
  148. package/dist/schema/type-conversion/dialect/postgres.js.map +1 -0
  149. package/dist/schema/type-conversion/dialect/sqlite.js +52 -0
  150. package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -0
  151. package/dist/schema/type-conversion/type-mapping.js +63 -0
  152. package/dist/schema/type-conversion/type-mapping.js.map +1 -0
  153. package/dist/sql-driver/connection/connection-provider.d.ts +13 -0
  154. package/dist/sql-driver/connection/connection-provider.d.ts.map +1 -0
  155. package/dist/sql-driver/connection/connection-provider.js +19 -0
  156. package/dist/sql-driver/connection/connection-provider.js.map +1 -0
  157. package/dist/sql-driver/connection/single-connection-provider.js +23 -0
  158. package/dist/sql-driver/connection/single-connection-provider.js.map +1 -0
  159. package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
  160. package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
  161. package/dist/sql-driver/dialects/dialects.d.ts +2 -0
  162. package/dist/sql-driver/dialects/dialects.js +3 -0
  163. package/dist/sql-driver/dialects/durable-object-dialect.d.ts +72 -0
  164. package/dist/sql-driver/dialects/durable-object-dialect.d.ts.map +1 -0
  165. package/dist/sql-driver/dialects/durable-object-dialect.js +130 -0
  166. package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -0
  167. package/dist/sql-driver/driver/runtime-driver.d.ts +23 -0
  168. package/dist/sql-driver/driver/runtime-driver.d.ts.map +1 -0
  169. package/dist/sql-driver/driver/runtime-driver.js +56 -0
  170. package/dist/sql-driver/driver/runtime-driver.js.map +1 -0
  171. package/dist/sql-driver/query-executor/default-query-executor.js +26 -0
  172. package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -0
  173. package/dist/sql-driver/query-executor/plugin.d.ts +17 -0
  174. package/dist/sql-driver/query-executor/plugin.d.ts.map +1 -0
  175. package/dist/sql-driver/query-executor/query-executor-base.js +25 -0
  176. package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -0
  177. package/dist/sql-driver/query-executor/query-executor.d.ts +36 -0
  178. package/dist/sql-driver/query-executor/query-executor.d.ts.map +1 -0
  179. package/dist/sql-driver/sql-driver-adapter.d.ts +29 -0
  180. package/dist/sql-driver/sql-driver-adapter.d.ts.map +1 -0
  181. package/dist/sql-driver/sql-driver-adapter.js +68 -0
  182. package/dist/sql-driver/sql-driver-adapter.js.map +1 -0
  183. package/dist/sql-driver/sql-driver.d.ts +38 -0
  184. package/dist/sql-driver/sql-driver.d.ts.map +1 -0
  185. package/dist/sql-driver/sql-driver.js +1 -0
  186. package/dist/sql-driver/sql.js +50 -0
  187. package/dist/sql-driver/sql.js.map +1 -0
  188. package/dist/with-database.d.ts +6 -2
  189. package/dist/with-database.d.ts.map +1 -1
  190. package/dist/with-database.js +1 -1
  191. package/dist/with-database.js.map +1 -1
  192. package/package.json +37 -10
  193. package/src/adapters/adapters.ts +8 -5
  194. package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +60 -169
  195. package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts} +31 -55
  196. package/src/adapters/drizzle/drizzle-adapter.ts +15 -107
  197. package/src/adapters/drizzle/generate.test.ts +2 -2
  198. package/src/adapters/drizzle/generate.ts +78 -34
  199. package/src/adapters/drizzle/migrate-drizzle.test.ts +19 -0
  200. package/src/adapters/drizzle/shared.ts +0 -34
  201. package/src/adapters/drizzle/test-utils.ts +3 -3
  202. package/src/adapters/generic-sql/README.md +14 -0
  203. package/src/adapters/generic-sql/driver-config.ts +144 -0
  204. package/src/adapters/generic-sql/generic-sql-adapter.test.ts +50 -0
  205. package/src/adapters/generic-sql/generic-sql-adapter.ts +146 -0
  206. package/src/adapters/generic-sql/generic-sql-uow-executor.ts +130 -0
  207. package/src/adapters/generic-sql/migration/cold-kysely.ts +55 -0
  208. package/src/adapters/{kysely/migration/execute-mysql.test.ts → generic-sql/migration/dialect/mysql.test.ts} +342 -484
  209. package/src/adapters/generic-sql/migration/dialect/mysql.ts +104 -0
  210. package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +1008 -0
  211. package/src/adapters/generic-sql/migration/dialect/postgres.ts +113 -0
  212. package/src/adapters/{kysely/migration/execute-sqlite.test.ts → generic-sql/migration/dialect/sqlite.test.ts} +307 -510
  213. package/src/adapters/generic-sql/migration/dialect/sqlite.ts +189 -0
  214. package/src/adapters/generic-sql/migration/executor.ts +33 -0
  215. package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +661 -0
  216. package/src/adapters/generic-sql/migration/prepared-migrations.ts +214 -0
  217. package/src/adapters/generic-sql/migration/sql-generator.ts +413 -0
  218. package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +36 -0
  219. package/src/adapters/generic-sql/query/cursor-utils.ts +56 -0
  220. package/src/adapters/generic-sql/query/dialect/mysql.ts +34 -0
  221. package/src/adapters/generic-sql/query/dialect/postgres.ts +32 -0
  222. package/src/adapters/generic-sql/query/dialect/sqlite.ts +32 -0
  223. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +1568 -0
  224. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +314 -0
  225. package/src/adapters/generic-sql/query/select-builder.test.ts +256 -0
  226. package/src/adapters/generic-sql/query/select-builder.ts +137 -0
  227. package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +195 -0
  228. package/src/adapters/generic-sql/query/sql-query-compiler.ts +367 -0
  229. package/src/adapters/generic-sql/query/where-builder.test.ts +744 -0
  230. package/src/adapters/generic-sql/query/where-builder.ts +211 -0
  231. package/src/adapters/generic-sql/result-interpreter.ts +102 -0
  232. package/src/adapters/generic-sql/test/generic-drizzle-adapter-sqlite3.test.ts +899 -0
  233. package/src/adapters/generic-sql/uow-decoder.test.ts +399 -0
  234. package/src/adapters/generic-sql/uow-decoder.ts +152 -0
  235. package/src/adapters/generic-sql/uow-encoder.test.ts +183 -0
  236. package/src/adapters/generic-sql/uow-encoder.ts +131 -0
  237. package/src/adapters/kysely/kysely-adapter-pglite.test.ts +26 -76
  238. package/src/adapters/kysely/{kysely-adapter-sqlite.test.ts → kysely-adapter-sqlocal.test.ts} +76 -17
  239. package/src/adapters/kysely/kysely-adapter.ts +10 -250
  240. package/src/adapters/{drizzle/drizzle-query.ts → shared/from-unit-of-work-compiler.ts} +110 -104
  241. package/src/adapters/shared/table-name-mapper.ts +50 -0
  242. package/src/adapters/shared/uow-operation-compiler.ts +211 -0
  243. package/src/db-fragment-definition-builder.test.ts +2 -2
  244. package/src/db-fragment-definition-builder.ts +281 -50
  245. package/src/db-fragment-instantiator.test.ts +78 -2
  246. package/src/db-fragment-integration.test.ts +14 -16
  247. package/src/fragments/internal-fragment.test.ts +434 -45
  248. package/src/fragments/internal-fragment.ts +184 -20
  249. package/src/hooks/hooks.test.ts +575 -0
  250. package/src/hooks/hooks.ts +179 -0
  251. package/src/migration-engine/generation-engine.test.ts +44 -54
  252. package/src/migration-engine/generation-engine.ts +48 -94
  253. package/src/mod.ts +117 -29
  254. package/src/query/column-defaults.ts +49 -0
  255. package/src/query/cursor.test.ts +31 -6
  256. package/src/query/cursor.ts +11 -7
  257. package/src/query/orm/orm.ts +1 -1
  258. package/src/query/query-type.test.ts +9 -9
  259. package/src/query/serialize/create-sql-serializer.ts +34 -0
  260. package/src/query/serialize/dialect/mysql-serializer.ts +142 -0
  261. package/src/query/serialize/dialect/postgres-serializer.ts +129 -0
  262. package/src/query/serialize/dialect/sqlite-serializer.test.ts +251 -0
  263. package/src/query/serialize/dialect/sqlite-serializer.ts +156 -0
  264. package/src/query/serialize/sql-serializer.ts +143 -0
  265. package/src/query/{query.ts → simple-query-interface.ts} +2 -2
  266. package/src/query/{execute-unit-of-work.test.ts → unit-of-work/execute-unit-of-work.test.ts} +16 -16
  267. package/src/query/{execute-unit-of-work.ts → unit-of-work/execute-unit-of-work.ts} +49 -8
  268. package/src/query/{unit-of-work-coordinator.test.ts → unit-of-work/unit-of-work-coordinator.test.ts} +41 -43
  269. package/src/query/{unit-of-work-types.test.ts → unit-of-work/unit-of-work-types.test.ts} +5 -3
  270. package/src/query/{unit-of-work.test.ts → unit-of-work/unit-of-work.test.ts} +100 -9
  271. package/src/query/{unit-of-work.ts → unit-of-work/unit-of-work.ts} +135 -32
  272. package/src/query/{result-transform.test.ts → value-decoding.test.ts} +45 -427
  273. package/src/query/value-decoding.ts +113 -0
  274. package/src/query/value-encoding.test.ts +390 -0
  275. package/src/query/value-encoding.ts +168 -0
  276. package/src/schema/create.test.ts +5 -1
  277. package/src/schema/create.ts +5 -0
  278. package/src/schema/serialize.test.ts +165 -407
  279. package/src/schema/type-conversion/create-sql-type-mapper.ts +28 -0
  280. package/src/schema/type-conversion/dialect/mysql.ts +64 -0
  281. package/src/schema/type-conversion/dialect/postgres.ts +62 -0
  282. package/src/schema/type-conversion/dialect/sqlite.ts +63 -0
  283. package/src/schema/type-conversion/type-mapping.test.ts +137 -0
  284. package/src/schema/type-conversion/type-mapping.ts +153 -0
  285. package/src/shared/connection-pool.ts +5 -5
  286. package/src/sql-driver/better-sqlite3.test.ts +126 -0
  287. package/src/sql-driver/connection/connection-provider.ts +27 -0
  288. package/src/sql-driver/connection/single-connection-provider.ts +42 -0
  289. package/src/sql-driver/dialect-adapter/dialect-adapter.ts +9 -0
  290. package/src/sql-driver/dialect-adapter/sqlite-dialect-adapter.ts +7 -0
  291. package/src/sql-driver/dialects/dialects.ts +1 -0
  292. package/src/sql-driver/dialects/durable-object-dialect.ts +260 -0
  293. package/src/sql-driver/driver/runtime-driver.ts +91 -0
  294. package/src/sql-driver/query-executor/default-query-executor.ts +38 -0
  295. package/src/sql-driver/query-executor/plugin.ts +22 -0
  296. package/src/sql-driver/query-executor/query-executor-base.ts +53 -0
  297. package/src/sql-driver/query-executor/query-executor.ts +44 -0
  298. package/src/sql-driver/sql-driver-adapter.ts +96 -0
  299. package/src/sql-driver/sql-driver.ts +53 -0
  300. package/src/sql-driver/sql.ts +57 -0
  301. package/src/sql-driver/sqlocal.test.ts +117 -0
  302. package/src/with-database.ts +35 -23
  303. package/tsdown.config.ts +7 -2
  304. package/dist/adapters/drizzle/drizzle-connection-pool.js +0 -40
  305. package/dist/adapters/drizzle/drizzle-connection-pool.js.map +0 -1
  306. package/dist/adapters/drizzle/drizzle-query.d.ts +0 -23
  307. package/dist/adapters/drizzle/drizzle-query.d.ts.map +0 -1
  308. package/dist/adapters/drizzle/drizzle-query.js.map +0 -1
  309. package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +0 -10
  310. package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +0 -1
  311. package/dist/adapters/drizzle/drizzle-uow-compiler.js +0 -334
  312. package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +0 -1
  313. package/dist/adapters/drizzle/drizzle-uow-decoder.js +0 -123
  314. package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +0 -1
  315. package/dist/adapters/drizzle/drizzle-uow-executor.js +0 -160
  316. package/dist/adapters/drizzle/drizzle-uow-executor.js.map +0 -1
  317. package/dist/adapters/drizzle/join-column-utils.js +0 -28
  318. package/dist/adapters/drizzle/join-column-utils.js.map +0 -1
  319. package/dist/adapters/drizzle/shared.d.ts.map +0 -1
  320. package/dist/adapters/drizzle/shared.js +0 -35
  321. package/dist/adapters/drizzle/shared.js.map +0 -1
  322. package/dist/adapters/kysely/kysely-connection-pool.js +0 -41
  323. package/dist/adapters/kysely/kysely-connection-pool.js.map +0 -1
  324. package/dist/adapters/kysely/kysely-query-builder.js +0 -321
  325. package/dist/adapters/kysely/kysely-query-builder.js.map +0 -1
  326. package/dist/adapters/kysely/kysely-query-compiler.js +0 -67
  327. package/dist/adapters/kysely/kysely-query-compiler.js.map +0 -1
  328. package/dist/adapters/kysely/kysely-query.d.ts +0 -23
  329. package/dist/adapters/kysely/kysely-query.d.ts.map +0 -1
  330. package/dist/adapters/kysely/kysely-query.js +0 -230
  331. package/dist/adapters/kysely/kysely-query.js.map +0 -1
  332. package/dist/adapters/kysely/kysely-shared.d.ts +0 -14
  333. package/dist/adapters/kysely/kysely-shared.d.ts.map +0 -1
  334. package/dist/adapters/kysely/kysely-shared.js +0 -33
  335. package/dist/adapters/kysely/kysely-shared.js.map +0 -1
  336. package/dist/adapters/kysely/kysely-uow-compiler.js +0 -193
  337. package/dist/adapters/kysely/kysely-uow-compiler.js.map +0 -1
  338. package/dist/adapters/kysely/kysely-uow-executor.js +0 -93
  339. package/dist/adapters/kysely/kysely-uow-executor.js.map +0 -1
  340. package/dist/adapters/kysely/migration/execute-base.js +0 -128
  341. package/dist/adapters/kysely/migration/execute-base.js.map +0 -1
  342. package/dist/adapters/kysely/migration/execute-factory.js +0 -34
  343. package/dist/adapters/kysely/migration/execute-factory.js.map +0 -1
  344. package/dist/adapters/kysely/migration/execute-mssql.js +0 -112
  345. package/dist/adapters/kysely/migration/execute-mssql.js.map +0 -1
  346. package/dist/adapters/kysely/migration/execute-mysql.js +0 -93
  347. package/dist/adapters/kysely/migration/execute-mysql.js.map +0 -1
  348. package/dist/adapters/kysely/migration/execute-postgres.js +0 -104
  349. package/dist/adapters/kysely/migration/execute-postgres.js.map +0 -1
  350. package/dist/adapters/kysely/migration/execute-sqlite.js +0 -123
  351. package/dist/adapters/kysely/migration/execute-sqlite.js.map +0 -1
  352. package/dist/adapters/kysely/migration/execute.js +0 -34
  353. package/dist/adapters/kysely/migration/execute.js.map +0 -1
  354. package/dist/migration-engine/create.d.ts +0 -37
  355. package/dist/migration-engine/create.d.ts.map +0 -1
  356. package/dist/migration-engine/create.js +0 -58
  357. package/dist/migration-engine/create.js.map +0 -1
  358. package/dist/migration-engine/shared.d.ts +0 -112
  359. package/dist/migration-engine/shared.d.ts.map +0 -1
  360. package/dist/node_modules/.pnpm/rou3@0.7.8/node_modules/rou3/dist/index.js.map +0 -1
  361. package/dist/query/execute-unit-of-work.d.ts.map +0 -1
  362. package/dist/query/execute-unit-of-work.js.map +0 -1
  363. package/dist/query/query.d.ts.map +0 -1
  364. package/dist/query/result-transform.js +0 -170
  365. package/dist/query/result-transform.js.map +0 -1
  366. package/dist/query/retry-policy.d.ts.map +0 -1
  367. package/dist/query/retry-policy.js.map +0 -1
  368. package/dist/query/unit-of-work.d.ts.map +0 -1
  369. package/dist/query/unit-of-work.js.map +0 -1
  370. package/dist/schema/serialize.js +0 -111
  371. package/dist/schema/serialize.js.map +0 -1
  372. package/src/adapters/drizzle/drizzle-adapter.test.ts +0 -122
  373. package/src/adapters/drizzle/drizzle-connection-pool.ts +0 -66
  374. package/src/adapters/drizzle/drizzle-query.test.ts +0 -499
  375. package/src/adapters/drizzle/drizzle-uow-compiler-mysql.test.ts +0 -1442
  376. package/src/adapters/drizzle/drizzle-uow-compiler-sqlite.test.ts +0 -1414
  377. package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +0 -1400
  378. package/src/adapters/drizzle/drizzle-uow-compiler.ts +0 -677
  379. package/src/adapters/drizzle/drizzle-uow-decoder.ts +0 -228
  380. package/src/adapters/drizzle/drizzle-uow-executor.ts +0 -309
  381. package/src/adapters/drizzle/join-column-utils.test.ts +0 -79
  382. package/src/adapters/drizzle/join-column-utils.ts +0 -39
  383. package/src/adapters/kysely/kysely-connection-pool.ts +0 -70
  384. package/src/adapters/kysely/kysely-query-builder.test.ts +0 -1344
  385. package/src/adapters/kysely/kysely-query-builder.ts +0 -666
  386. package/src/adapters/kysely/kysely-query-compiler.ts +0 -127
  387. package/src/adapters/kysely/kysely-query.test.ts +0 -498
  388. package/src/adapters/kysely/kysely-query.ts +0 -399
  389. package/src/adapters/kysely/kysely-shared.ts +0 -57
  390. package/src/adapters/kysely/kysely-uow-compiler.test.ts +0 -986
  391. package/src/adapters/kysely/kysely-uow-compiler.ts +0 -350
  392. package/src/adapters/kysely/kysely-uow-executor.ts +0 -164
  393. package/src/adapters/kysely/kysely-uow-joins.test.ts +0 -794
  394. package/src/adapters/kysely/migration/execute-base.ts +0 -256
  395. package/src/adapters/kysely/migration/execute-factory.ts +0 -53
  396. package/src/adapters/kysely/migration/execute-mssql.ts +0 -250
  397. package/src/adapters/kysely/migration/execute-mysql.ts +0 -211
  398. package/src/adapters/kysely/migration/execute-postgres.test.ts +0 -2657
  399. package/src/adapters/kysely/migration/execute-postgres.ts +0 -234
  400. package/src/adapters/kysely/migration/execute-sqlite.ts +0 -247
  401. package/src/adapters/kysely/migration/execute.ts +0 -50
  402. package/src/adapters/kysely/migration/kysely-migrator.test.ts +0 -261
  403. package/src/query/result-transform.ts +0 -274
  404. package/src/schema/serialize.ts +0 -407
  405. /package/dist/query/{query.js → simple-query-interface.js} +0 -0
  406. /package/src/query/{retry-policy.test.ts → unit-of-work/retry-policy.test.ts} +0 -0
  407. /package/src/query/{retry-policy.ts → unit-of-work/retry-policy.ts} +0 -0
@@ -1,58 +0,0 @@
1
- import { generateMigrationFromSchema } from "./auto-from-schema.js";
2
-
3
- //#region src/migration-engine/create.ts
4
- function createMigrator({ settings, generateMigrationFromSchema: generateMigrationFromSchema$1 = generateMigrationFromSchema, schema: targetSchema, executor, sql: sqlConfig, transformers = [] }) {
5
- return {
6
- getVersion() {
7
- return settings.getVersion();
8
- },
9
- async prepareMigration(options = {}) {
10
- return this.prepareMigrationTo(targetSchema.version, options);
11
- },
12
- async prepareMigrationTo(toVersion, options = {}) {
13
- const { updateSettings: updateVersion = true, fromVersion: providedFromVersion } = options;
14
- const fromVersion = providedFromVersion ?? await settings.getVersion();
15
- if (toVersion < 0) throw new Error(`Cannot migrate to negative version: ${toVersion}`);
16
- if (fromVersion < 0) throw new Error(`Cannot migrate from negative version: ${fromVersion}`);
17
- if (toVersion < fromVersion) throw new Error(`Cannot migrate backwards: current version is ${fromVersion}, target is ${toVersion}. Only forward migrations are supported.`);
18
- if (toVersion > targetSchema.version) throw new Error(`Cannot migrate to version ${toVersion}: schema only has version ${targetSchema.version}`);
19
- if (fromVersion > targetSchema.version) throw new Error(`Cannot migrate from version ${fromVersion}: schema only has version ${targetSchema.version}`);
20
- if (toVersion === fromVersion) return {
21
- operations: [],
22
- getSQL: sqlConfig ? () => sqlConfig.toSql([]) : void 0,
23
- execute: async () => {}
24
- };
25
- const context = { async auto() {
26
- let generated = generateMigrationFromSchema$1(targetSchema, fromVersion, toVersion);
27
- for (const transformer of transformers) {
28
- if (!transformer.afterAuto) continue;
29
- generated = transformer.afterAuto(generated, {
30
- fromVersion,
31
- toVersion,
32
- schema: targetSchema,
33
- options
34
- });
35
- }
36
- return generated;
37
- } };
38
- let operations = updateVersion ? [...await context.auto(), ...await settings.updateSettingsInMigration(fromVersion, toVersion)] : await context.auto();
39
- for (const transformer of transformers) {
40
- if (!transformer.afterAll) continue;
41
- operations = transformer.afterAll(operations, {
42
- fromVersion,
43
- toVersion,
44
- schema: targetSchema
45
- });
46
- }
47
- return {
48
- operations,
49
- getSQL: sqlConfig ? () => sqlConfig.toSql(operations) : void 0,
50
- execute: () => executor(operations)
51
- };
52
- }
53
- };
54
- }
55
-
56
- //#endregion
57
- export { createMigrator };
58
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","names":["defaultGenerateMigrationFromSchema","context: MigrationContext","generateMigrationFromSchema"],"sources":["../../src/migration-engine/create.ts"],"sourcesContent":["import { type MigrationOperation } from \"./shared\";\nimport type { AnySchema } from \"../schema/create\";\nimport { generateMigrationFromSchema as defaultGenerateMigrationFromSchema } from \"./auto-from-schema\";\n\ntype Awaitable<T> = T | Promise<T>;\n\ninterface MigrationContext {\n auto: () => Promise<MigrationOperation[]>;\n}\n\nexport type CustomMigrationFn = (context: MigrationContext) => Awaitable<MigrationOperation[]>;\n\nexport interface MigrateOptions {\n /**\n * Update internal settings, it's true by default.\n * We don't recommend to disable it other than testing purposes.\n */\n updateSettings?: boolean;\n}\n\nexport interface PreparedMigration {\n operations: MigrationOperation[];\n getSQL?: () => string;\n execute: () => Promise<void>;\n}\n\nexport interface Migrator {\n /**\n * Get current version (returns 0 if not initialized)\n */\n getVersion: () => Promise<number>;\n\n /**\n * Migrate to the latest schema version\n */\n prepareMigration: (options?: MigrateOptions) => Promise<PreparedMigration>;\n\n /**\n * Migrate to a specific version (only forward migrations allowed)\n * @param toVersion - Target version to migrate to\n * @param options - Migration options including optional fromVersion\n */\n prepareMigrationTo: (\n toVersion: number,\n options?: MigrateOptions & { fromVersion?: number },\n ) => Promise<PreparedMigration>;\n}\n\nexport interface MigrationEngineOptions {\n /**\n * The target schema to migrate to\n */\n schema: AnySchema;\n\n executor: (operations: MigrationOperation[]) => Promise<void>;\n\n generateMigrationFromSchema?: typeof defaultGenerateMigrationFromSchema;\n\n settings: {\n /**\n * Get current version from database (0 if not initialized)\n */\n getVersion: () => Promise<number>;\n\n updateSettingsInMigration: (\n fromVersion: number,\n toVersion: number,\n ) => Awaitable<MigrationOperation[]>;\n };\n\n sql?: {\n toSql: (operations: MigrationOperation[]) => string;\n };\n\n transformers?: MigrationTransformer[];\n}\n\nexport interface MigrationTransformer {\n /**\n * Run after auto-generating migration operations\n */\n afterAuto?: (\n operations: MigrationOperation[],\n context: {\n options: MigrateOptions;\n fromVersion: number;\n toVersion: number;\n schema: AnySchema;\n },\n ) => MigrationOperation[];\n\n /**\n * Run on all migration operations\n */\n afterAll?: (\n operations: MigrationOperation[],\n context: {\n fromVersion: number;\n toVersion: number;\n schema: AnySchema;\n },\n ) => MigrationOperation[];\n}\n\nexport function createMigrator({\n settings,\n generateMigrationFromSchema = defaultGenerateMigrationFromSchema,\n schema: targetSchema,\n executor,\n sql: sqlConfig,\n transformers = [],\n}: MigrationEngineOptions): Migrator {\n const instance: Migrator = {\n getVersion() {\n return settings.getVersion();\n },\n async prepareMigration(options = {}) {\n return this.prepareMigrationTo(targetSchema.version, options);\n },\n async prepareMigrationTo(toVersion, options = {}) {\n const { updateSettings: updateVersion = true, fromVersion: providedFromVersion } = options;\n\n // Use provided fromVersion if available, otherwise query the database\n const fromVersion = providedFromVersion ?? (await settings.getVersion());\n\n if (toVersion < 0) {\n throw new Error(`Cannot migrate to negative version: ${toVersion}`);\n }\n\n if (fromVersion < 0) {\n throw new Error(`Cannot migrate from negative version: ${fromVersion}`);\n }\n\n if (toVersion < fromVersion) {\n throw new Error(\n `Cannot migrate backwards: current version is ${fromVersion}, target is ${toVersion}. Only forward migrations are supported.`,\n );\n }\n\n if (toVersion > targetSchema.version) {\n throw new Error(\n `Cannot migrate to version ${toVersion}: schema only has version ${targetSchema.version}`,\n );\n }\n\n if (fromVersion > targetSchema.version) {\n throw new Error(\n `Cannot migrate from version ${fromVersion}: schema only has version ${targetSchema.version}`,\n );\n }\n\n if (toVersion === fromVersion) {\n // Already at target version, return empty migration\n return {\n operations: [],\n getSQL: sqlConfig ? () => sqlConfig.toSql([]) : undefined,\n execute: async () => {},\n };\n }\n\n const context: MigrationContext = {\n async auto() {\n let generated = generateMigrationFromSchema(targetSchema, fromVersion, toVersion);\n\n for (const transformer of transformers) {\n if (!transformer.afterAuto) {\n continue;\n }\n\n generated = transformer.afterAuto(generated, {\n fromVersion,\n toVersion,\n schema: targetSchema,\n options,\n });\n }\n\n return generated;\n },\n };\n\n let operations = updateVersion\n ? [\n ...(await context.auto()),\n ...(await settings.updateSettingsInMigration(fromVersion, toVersion)),\n ]\n : await context.auto();\n\n for (const transformer of transformers) {\n if (!transformer.afterAll) {\n continue;\n }\n operations = transformer.afterAll(operations, {\n fromVersion,\n toVersion,\n schema: targetSchema,\n });\n }\n\n return {\n operations,\n getSQL: sqlConfig ? () => sqlConfig.toSql(operations) : undefined,\n execute: () => executor(operations),\n };\n },\n };\n\n return instance;\n}\n"],"mappings":";;;AAwGA,SAAgB,eAAe,EAC7B,UACA,6DAA8BA,6BAC9B,QAAQ,cACR,UACA,KAAK,WACL,eAAe,EAAE,IACkB;AAgGnC,QA/F2B;EACzB,aAAa;AACX,UAAO,SAAS,YAAY;;EAE9B,MAAM,iBAAiB,UAAU,EAAE,EAAE;AACnC,UAAO,KAAK,mBAAmB,aAAa,SAAS,QAAQ;;EAE/D,MAAM,mBAAmB,WAAW,UAAU,EAAE,EAAE;GAChD,MAAM,EAAE,gBAAgB,gBAAgB,MAAM,aAAa,wBAAwB;GAGnF,MAAM,cAAc,uBAAwB,MAAM,SAAS,YAAY;AAEvE,OAAI,YAAY,EACd,OAAM,IAAI,MAAM,uCAAuC,YAAY;AAGrE,OAAI,cAAc,EAChB,OAAM,IAAI,MAAM,yCAAyC,cAAc;AAGzE,OAAI,YAAY,YACd,OAAM,IAAI,MACR,gDAAgD,YAAY,cAAc,UAAU,0CACrF;AAGH,OAAI,YAAY,aAAa,QAC3B,OAAM,IAAI,MACR,6BAA6B,UAAU,4BAA4B,aAAa,UACjF;AAGH,OAAI,cAAc,aAAa,QAC7B,OAAM,IAAI,MACR,+BAA+B,YAAY,4BAA4B,aAAa,UACrF;AAGH,OAAI,cAAc,YAEhB,QAAO;IACL,YAAY,EAAE;IACd,QAAQ,kBAAkB,UAAU,MAAM,EAAE,CAAC,GAAG;IAChD,SAAS,YAAY;IACtB;GAGH,MAAMC,UAA4B,EAChC,MAAM,OAAO;IACX,IAAI,YAAYC,8BAA4B,cAAc,aAAa,UAAU;AAEjF,SAAK,MAAM,eAAe,cAAc;AACtC,SAAI,CAAC,YAAY,UACf;AAGF,iBAAY,YAAY,UAAU,WAAW;MAC3C;MACA;MACA,QAAQ;MACR;MACD,CAAC;;AAGJ,WAAO;MAEV;GAED,IAAI,aAAa,gBACb,CACE,GAAI,MAAM,QAAQ,MAAM,EACxB,GAAI,MAAM,SAAS,0BAA0B,aAAa,UAAU,CACrE,GACD,MAAM,QAAQ,MAAM;AAExB,QAAK,MAAM,eAAe,cAAc;AACtC,QAAI,CAAC,YAAY,SACf;AAEF,iBAAa,YAAY,SAAS,YAAY;KAC5C;KACA;KACA,QAAQ;KACT,CAAC;;AAGJ,UAAO;IACL;IACA,QAAQ,kBAAkB,UAAU,MAAM,WAAW,GAAG;IACxD,eAAe,SAAS,WAAW;IACpC;;EAEJ"}
@@ -1,112 +0,0 @@
1
- //#region src/migration-engine/shared.d.ts
2
- interface ForeignKeyInfo {
3
- name: string;
4
- columns: string[];
5
- referencedTable: string;
6
- referencedColumns: string[];
7
- }
8
- /**
9
- * Provider-specific metadata that can be attached to operations during preprocessing.
10
- * This allows providers to add additional context without polluting the core operation types.
11
- */
12
- interface MigrationOperationMetadata {
13
- [key: string]: unknown;
14
- }
15
- interface ColumnInfo {
16
- name: string;
17
- type: "string" | "integer" | "bigint" | "decimal" | "bool" | "date" | "timestamp" | "json" | "binary" | `varchar(${number})`;
18
- isNullable: boolean;
19
- role: "external-id" | "internal-id" | "version" | "reference" | "regular";
20
- default?: {
21
- value: unknown;
22
- } | {
23
- dbSpecial: "now";
24
- } | {
25
- runtime: "cuid" | "now";
26
- };
27
- }
28
- type MigrationOperation<TMeta extends MigrationOperationMetadata = MigrationOperationMetadata> = (TableOperation & {
29
- metadata?: TMeta;
30
- }) | ({
31
- type: "add-foreign-key";
32
- table: string;
33
- value: ForeignKeyInfo;
34
- } & {
35
- metadata?: TMeta;
36
- }) | ({
37
- type: "drop-foreign-key";
38
- table: string;
39
- name: string;
40
- } & {
41
- metadata?: TMeta;
42
- }) | ({
43
- type: "drop-index";
44
- table: string;
45
- name: string;
46
- } & {
47
- metadata?: TMeta;
48
- }) | ({
49
- type: "add-index";
50
- table: string;
51
- columns: string[];
52
- name: string;
53
- unique: boolean;
54
- } & {
55
- metadata?: TMeta;
56
- }) | (CustomOperation & {
57
- metadata?: TMeta;
58
- });
59
- type CustomOperation = {
60
- type: "custom";
61
- } & Record<string, unknown>;
62
- type TableOperation = {
63
- type: "create-table";
64
- name: string;
65
- columns: ColumnInfo[];
66
- } | {
67
- type: "drop-table";
68
- name: string;
69
- } | {
70
- type: "alter-table";
71
- name: string;
72
- value: ColumnOperation[];
73
- } | {
74
- type: "rename-table";
75
- from: string;
76
- to: string;
77
- };
78
- type ColumnOperation = {
79
- type: "rename-column";
80
- from: string;
81
- to: string;
82
- } | {
83
- type: "drop-column";
84
- name: string;
85
- } | {
86
- /**
87
- * Note: unique constraints are not created, please use dedicated operations like `add-index` instead
88
- */
89
- type: "create-column";
90
- value: ColumnInfo;
91
- } | {
92
- /**
93
- * warning: Not supported by SQLite
94
- */
95
- type: "update-column";
96
- name: string;
97
- /**
98
- * For databases like MySQL, it requires the full definition for any modify column statement.
99
- * Hence, you need to specify the full information of your column here.
100
- *
101
- * Then, opt-in for in-detail modification for other databases that supports changing data type/nullable/default separately, such as PostgreSQL.
102
- *
103
- * Note: unique constraints are not updated, please use dedicated operations like `add-index` instead
104
- */
105
- value: ColumnInfo;
106
- updateNullable: boolean;
107
- updateDefault: boolean;
108
- updateDataType: boolean;
109
- };
110
- //#endregion
111
- export { MigrationOperation };
112
- //# sourceMappingURL=shared.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.ts","names":[],"sources":["../../src/migration-engine/shared.ts"],"sourcesContent":[],"mappings":";UAAiB,cAAA;EAAA,IAAA,EAAA,MAAA;EAWA,OAAA,EAAA,MAAA,EAAA;EAYA,eAAU,EAAA,MAAA;EAkBf,iBAAA,EAAA,MAAkB,EAAA;;;;;;AAST,UAvCJ,0BAAA,CAuCI;EAMA,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAA;;UAjCJ,UAAA;;;;;;;;;;;;;KAkBL,iCACI,6BAA6B,+BAExC;aAA8B;;;;SAKtB;;aACQ;;;;;;aAMA;;;;;;aAKA;;;;;;;;aAOA;MAChB;aAA+B;;KAExB,eAAA;;IAER;KAEQ,cAAA;;;WAIG;;;;;;;SASF;;;;;;KAQD,eAAA;;;;;;;;;;;;SAeC;;;;;;;;;;;;;;;SAgBA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../../../../../node_modules/.pnpm/rou3@0.7.8/node_modules/rou3/dist/index.mjs"],"sourcesContent":["//#region src/object.ts\nconst NullProtoObj = /* @__PURE__ */ (() => {\n\tconst e = function() {};\n\treturn e.prototype = Object.create(null), Object.freeze(e.prototype), e;\n})();\n\n//#endregion\n//#region src/context.ts\n/**\n* Create a new router context.\n*/\nfunction createRouter() {\n\tconst ctx = {\n\t\troot: { key: \"\" },\n\t\tstatic: new NullProtoObj()\n\t};\n\treturn ctx;\n}\n\n//#endregion\n//#region src/operations/_utils.ts\nfunction splitPath(path) {\n\tconst [_, ...s] = path.split(\"/\");\n\treturn s[s.length - 1] === \"\" ? s.slice(0, -1) : s;\n}\nfunction getMatchParams(segments, paramsMap) {\n\tconst params = new NullProtoObj();\n\tfor (const [index, name] of paramsMap) {\n\t\tconst segment = index < 0 ? segments.slice(-1 * index).join(\"/\") : segments[index];\n\t\tif (typeof name === \"string\") params[name] = segment;\n\t\telse {\n\t\t\tconst match = segment.match(name);\n\t\t\tif (match) for (const key in match.groups) params[key] = match.groups[key];\n\t\t}\n\t}\n\treturn params;\n}\n\n//#endregion\n//#region src/operations/add.ts\n/**\n* Add a route to the router context.\n*/\nfunction addRoute(ctx, method = \"\", path, data) {\n\tmethod = method.toUpperCase();\n\tif (path.charCodeAt(0) !== 47) path = `/${path}`;\n\tconst segments = splitPath(path);\n\tlet node = ctx.root;\n\tlet _unnamedParamIndex = 0;\n\tconst paramsMap = [];\n\tconst paramsRegexp = [];\n\tfor (let i = 0; i < segments.length; i++) {\n\t\tconst segment = segments[i];\n\t\tif (segment.startsWith(\"**\")) {\n\t\t\tif (!node.wildcard) node.wildcard = { key: \"**\" };\n\t\t\tnode = node.wildcard;\n\t\t\tparamsMap.push([\n\t\t\t\t-i,\n\t\t\t\tsegment.split(\":\")[1] || \"_\",\n\t\t\t\tsegment.length === 2\n\t\t\t]);\n\t\t\tbreak;\n\t\t}\n\t\tif (segment === \"*\" || segment.includes(\":\")) {\n\t\t\tif (!node.param) node.param = { key: \"*\" };\n\t\t\tnode = node.param;\n\t\t\tif (segment === \"*\") paramsMap.push([\n\t\t\t\ti,\n\t\t\t\t`_${_unnamedParamIndex++}`,\n\t\t\t\ttrue\n\t\t\t]);\n\t\t\telse if (segment.includes(\":\", 1)) {\n\t\t\t\tconst regexp = getParamRegexp(segment);\n\t\t\t\tparamsRegexp[i] = regexp;\n\t\t\t\tnode.hasRegexParam = true;\n\t\t\t\tparamsMap.push([\n\t\t\t\t\ti,\n\t\t\t\t\tregexp,\n\t\t\t\t\tfalse\n\t\t\t\t]);\n\t\t\t} else paramsMap.push([\n\t\t\t\ti,\n\t\t\t\tsegment.slice(1),\n\t\t\t\tfalse\n\t\t\t]);\n\t\t\tcontinue;\n\t\t}\n\t\tconst child = node.static?.[segment];\n\t\tif (child) node = child;\n\t\telse {\n\t\t\tconst staticNode = { key: segment };\n\t\t\tif (!node.static) node.static = new NullProtoObj();\n\t\t\tnode.static[segment] = staticNode;\n\t\t\tnode = staticNode;\n\t\t}\n\t}\n\tconst hasParams = paramsMap.length > 0;\n\tif (!node.methods) node.methods = new NullProtoObj();\n\tnode.methods[method] ??= [];\n\tnode.methods[method].push({\n\t\tdata: data || null,\n\t\tparamsRegexp,\n\t\tparamsMap: hasParams ? paramsMap : void 0\n\t});\n\tif (!hasParams) ctx.static[path] = node;\n}\nfunction getParamRegexp(segment) {\n\tconst regex = segment.replace(/:(\\w+)/g, (_, id) => `(?<${id}>[^/]+)`).replace(/\\./g, \"\\\\.\");\n\treturn new RegExp(`^${regex}$`);\n}\n\n//#endregion\n//#region src/operations/find.ts\n/**\n* Find a route by path.\n*/\nfunction findRoute(ctx, method = \"\", path, opts) {\n\tif (path.charCodeAt(path.length - 1) === 47) path = path.slice(0, -1);\n\tconst staticNode = ctx.static[path];\n\tif (staticNode && staticNode.methods) {\n\t\tconst staticMatch = staticNode.methods[method] || staticNode.methods[\"\"];\n\t\tif (staticMatch !== void 0) return staticMatch[0];\n\t}\n\tconst segments = splitPath(path);\n\tconst match = _lookupTree(ctx, ctx.root, method, segments, 0)?.[0];\n\tif (match === void 0) return;\n\tif (opts?.params === false) return match;\n\treturn {\n\t\tdata: match.data,\n\t\tparams: match.paramsMap ? getMatchParams(segments, match.paramsMap) : void 0\n\t};\n}\nfunction _lookupTree(ctx, node, method, segments, index) {\n\tif (index === segments.length) {\n\t\tif (node.methods) {\n\t\t\tconst match = node.methods[method] || node.methods[\"\"];\n\t\t\tif (match) return match;\n\t\t}\n\t\tif (node.param && node.param.methods) {\n\t\t\tconst match = node.param.methods[method] || node.param.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) return match;\n\t\t\t}\n\t\t}\n\t\tif (node.wildcard && node.wildcard.methods) {\n\t\t\tconst match = node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) return match;\n\t\t\t}\n\t\t}\n\t\treturn void 0;\n\t}\n\tconst segment = segments[index];\n\tif (node.static) {\n\t\tconst staticChild = node.static[segment];\n\t\tif (staticChild) {\n\t\t\tconst match = _lookupTree(ctx, staticChild, method, segments, index + 1);\n\t\t\tif (match) return match;\n\t\t}\n\t}\n\tif (node.param) {\n\t\tconst match = _lookupTree(ctx, node.param, method, segments, index + 1);\n\t\tif (match) {\n\t\t\tif (node.param.hasRegexParam) {\n\t\t\t\tconst exactMatch = match.find((m) => m.paramsRegexp[index]?.test(segment)) || match.find((m) => !m.paramsRegexp[index]);\n\t\t\t\treturn exactMatch ? [exactMatch] : void 0;\n\t\t\t}\n\t\t\treturn match;\n\t\t}\n\t}\n\tif (node.wildcard && node.wildcard.methods) return node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n\treturn;\n}\n\n//#endregion\n//#region src/operations/remove.ts\n/**\n* Remove a route from the router context.\n*/\nfunction removeRoute(ctx, method, path) {\n\tconst segments = splitPath(path);\n\treturn _remove(ctx.root, method || \"\", segments, 0);\n}\nfunction _remove(node, method, segments, index) {\n\tif (index === segments.length) {\n\t\tif (node.methods && method in node.methods) {\n\t\t\tdelete node.methods[method];\n\t\t\tif (Object.keys(node.methods).length === 0) node.methods = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tconst segment = segments[index];\n\tif (segment === \"*\") {\n\t\tif (node.param) {\n\t\t\t_remove(node.param, method, segments, index + 1);\n\t\t\tif (_isEmptyNode(node.param)) node.param = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tif (segment.startsWith(\"**\")) {\n\t\tif (node.wildcard) {\n\t\t\t_remove(node.wildcard, method, segments, index + 1);\n\t\t\tif (_isEmptyNode(node.wildcard)) node.wildcard = void 0;\n\t\t}\n\t\treturn;\n\t}\n\tconst childNode = node.static?.[segment];\n\tif (childNode) {\n\t\t_remove(childNode, method, segments, index + 1);\n\t\tif (_isEmptyNode(childNode)) {\n\t\t\tdelete node.static[segment];\n\t\t\tif (Object.keys(node.static).length === 0) node.static = void 0;\n\t\t}\n\t}\n}\nfunction _isEmptyNode(node) {\n\treturn node.methods === void 0 && node.static === void 0 && node.param === void 0 && node.wildcard === void 0;\n}\n\n//#endregion\n//#region src/operations/find-all.ts\n/**\n* Find all route patterns that match the given path.\n*/\nfunction findAllRoutes(ctx, method = \"\", path, opts) {\n\tif (path.charCodeAt(path.length - 1) === 47) path = path.slice(0, -1);\n\tconst segments = splitPath(path);\n\tconst matches = _findAll(ctx, ctx.root, method, segments, 0);\n\tif (opts?.params === false) return matches;\n\treturn matches.map((m) => {\n\t\treturn {\n\t\t\tdata: m.data,\n\t\t\tparams: m.paramsMap ? getMatchParams(segments, m.paramsMap) : void 0\n\t\t};\n\t});\n}\nfunction _findAll(ctx, node, method, segments, index, matches = []) {\n\tconst segment = segments[index];\n\tif (node.wildcard && node.wildcard.methods) {\n\t\tconst match = node.wildcard.methods[method] || node.wildcard.methods[\"\"];\n\t\tif (match) matches.push(...match);\n\t}\n\tif (node.param) {\n\t\t_findAll(ctx, node.param, method, segments, index + 1, matches);\n\t\tif (index === segments.length && node.param.methods) {\n\t\t\tconst match = node.param.methods[method] || node.param.methods[\"\"];\n\t\t\tif (match) {\n\t\t\t\tconst pMap = match[0].paramsMap;\n\t\t\t\tif (pMap?.[pMap?.length - 1]?.[2]) matches.push(...match);\n\t\t\t}\n\t\t}\n\t}\n\tconst staticChild = node.static?.[segment];\n\tif (staticChild) _findAll(ctx, staticChild, method, segments, index + 1, matches);\n\tif (index === segments.length && node.methods) {\n\t\tconst match = node.methods[method] || node.methods[\"\"];\n\t\tif (match) matches.push(...match);\n\t}\n\treturn matches;\n}\n\n//#endregion\n//#region src/regexp.ts\nfunction routeToRegExp(route = \"/\") {\n\tconst reSegments = [];\n\tlet idCtr = 0;\n\tfor (const segment of route.split(\"/\")) {\n\t\tif (!segment) continue;\n\t\tif (segment === \"*\") reSegments.push(`(?<_${idCtr++}>[^/]*)`);\n\t\telse if (segment.startsWith(\"**\")) reSegments.push(segment === \"**\" ? \"?(?<_>.*)\" : `?(?<${segment.slice(3)}>.+)`);\n\t\telse if (segment.includes(\":\")) reSegments.push(segment.replace(/:(\\w+)/g, (_, id) => `(?<${id}>[^/]+)`).replace(/\\./g, \"\\\\.\"));\n\t\telse reSegments.push(segment);\n\t}\n\treturn new RegExp(`^/${reSegments.join(\"/\")}/?$`);\n}\n\n//#endregion\nexport { NullProtoObj, addRoute, createRouter, findAllRoutes, findRoute, removeRoute, routeToRegExp };"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute-unit-of-work.d.ts","names":[],"sources":["../../src/query/execute-unit-of-work.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute-unit-of-work.js","names":["retrievalUow: TypedUnitOfWork<TSchema, TRetrievalResults, TRawInput>","mutationResult: TMutationResult"],"sources":["../../src/query/execute-unit-of-work.ts"],"sourcesContent":["import type { AnySchema } from \"../schema/create\";\nimport type { TypedUnitOfWork, IUnitOfWork } from \"./unit-of-work\";\nimport { NoRetryPolicy, ExponentialBackoffRetryPolicy, type RetryPolicy } from \"./retry-policy\";\nimport type { FragnoId } from \"../schema/create\";\n\n/**\n * Type utility that unwraps promises 1 level deep in objects, arrays, or direct promises\n * Handles tuples, arrays, objects, and direct promises\n */\nexport type AwaitedPromisesInObject<T> =\n // First check if it's a Promise\n T extends Promise<infer U>\n ? Awaited<U>\n : // Check for arrays with known length (tuples) - preserves tuple structure\n T extends readonly [unknown, ...unknown[]]\n ? { [K in keyof T]: AwaitedPromisesInObject<T[K]> }\n : T extends [unknown, ...unknown[]]\n ? { [K in keyof T]: AwaitedPromisesInObject<T[K]> }\n : // Check for regular arrays (unknown length)\n T extends (infer U)[]\n ? Awaited<U>[]\n : T extends readonly (infer U)[]\n ? readonly Awaited<U>[]\n : // Check for objects\n T extends Record<string, unknown>\n ? {\n [K in keyof T]: T[K] extends Promise<infer U> ? Awaited<U> : T[K];\n }\n : // Otherwise return as-is\n T;\n\n/**\n * Await promises in an object 1 level deep\n */\nasync function awaitPromisesInObject<T>(obj: T): Promise<AwaitedPromisesInObject<T>> {\n if (obj === null || obj === undefined) {\n return obj as AwaitedPromisesInObject<T>;\n }\n\n if (typeof obj !== \"object\") {\n return obj as AwaitedPromisesInObject<T>;\n }\n\n // Check if it's a Promise\n if (obj instanceof Promise) {\n return (await obj) as AwaitedPromisesInObject<T>;\n }\n\n // Check if it's an array\n if (Array.isArray(obj)) {\n const awaited = await Promise.all(\n obj.map((item) => (item instanceof Promise ? item : Promise.resolve(item))),\n );\n return awaited as AwaitedPromisesInObject<T>;\n }\n\n // It's a plain object - await promises in each property\n const result = {} as T;\n const entries = Object.entries(obj as Record<string, unknown>);\n const awaitedEntries = await Promise.all(\n entries.map(async ([key, value]) => {\n const awaitedValue = value instanceof Promise ? await value : value;\n return [key, awaitedValue] as const;\n }),\n );\n\n for (const [key, value] of awaitedEntries) {\n (result as Record<string, unknown>)[key] = value;\n }\n\n return result as AwaitedPromisesInObject<T>;\n}\n\n/**\n * Result of executing a Unit of Work with retry support\n * Promises in mutationResult are unwrapped 1 level deep\n */\nexport type ExecuteUnitOfWorkResult<TRetrievalResults, TMutationResult> =\n | {\n success: true;\n results: TRetrievalResults;\n mutationResult: AwaitedPromisesInObject<TMutationResult>;\n createdIds: FragnoId[];\n nonce: string;\n }\n | {\n success: false;\n reason: \"conflict\";\n }\n | {\n success: false;\n reason: \"aborted\";\n }\n | {\n success: false;\n reason: \"error\";\n error: unknown;\n };\n\n/**\n * Callbacks for executing a Unit of Work\n */\nexport interface ExecuteUnitOfWorkCallbacks<\n TSchema extends AnySchema,\n TRetrievalResults extends unknown[],\n TMutationResult,\n TRawInput,\n> {\n /**\n * Retrieval phase callback - adds retrieval operations to the UOW\n */\n retrieve?: (\n uow: TypedUnitOfWork<TSchema, [], TRawInput>,\n ) => TypedUnitOfWork<TSchema, TRetrievalResults, TRawInput>;\n\n /**\n * Mutation phase callback - receives UOW and retrieval results, adds mutation operations\n */\n mutate?: (\n uow: TypedUnitOfWork<TSchema, TRetrievalResults, TRawInput>,\n results: TRetrievalResults,\n ) => TMutationResult | Promise<TMutationResult>;\n\n /**\n * Success callback - invoked after successful execution\n * Promises in mutationResult are already unwrapped 1 level deep\n */\n onSuccess?: (result: {\n results: TRetrievalResults;\n mutationResult: AwaitedPromisesInObject<TMutationResult>;\n createdIds: FragnoId[];\n nonce: string;\n }) => void | Promise<void>;\n}\n\n/**\n * Options for executing a Unit of Work\n */\nexport interface ExecuteUnitOfWorkOptions<TSchema extends AnySchema, TRawInput> {\n /**\n * Factory function that creates or resets a UOW instance for each attempt\n */\n createUnitOfWork: () => TypedUnitOfWork<TSchema, [], TRawInput>;\n\n /**\n * Retry policy for handling optimistic concurrency conflicts\n */\n retryPolicy?: RetryPolicy;\n\n /**\n * Abort signal to cancel execution\n */\n signal?: AbortSignal;\n}\n\n/**\n * Create a bound version of executeUnitOfWork with a pre-configured UOW factory.\n * This is useful for handler contexts where the factory is already known.\n *\n * @param createUnitOfWork - Factory function that creates a fresh UOW instance\n * @returns A bound executeUnitOfWork function that doesn't require the factory parameter\n *\n * @example\n * ```ts\n * const boundExecute = createExecuteUnitOfWork(() => db.createUnitOfWork());\n * const result = await boundExecute({\n * retrieve: (uow) => uow.find(\"users\", (b) => b.whereIndex(\"primary\")),\n * mutate: (uow, [users]) => {\n * uow.update(\"users\", users[0].id, (b) => b.set({ balance: newBalance }));\n * }\n * });\n * ```\n */\nexport function createExecuteUnitOfWork<TSchema extends AnySchema, TRawInput>(\n createUnitOfWork: () => TypedUnitOfWork<TSchema, [], TRawInput>,\n) {\n return async function <TRetrievalResults extends unknown[], TMutationResult = void>(\n callbacks: ExecuteUnitOfWorkCallbacks<TSchema, TRetrievalResults, TMutationResult, TRawInput>,\n options?: Omit<ExecuteUnitOfWorkOptions<TSchema, TRawInput>, \"createUnitOfWork\">,\n ): Promise<ExecuteUnitOfWorkResult<TRetrievalResults, TMutationResult>> {\n return executeUnitOfWork(callbacks, { ...options, createUnitOfWork });\n };\n}\n\n/**\n * Execute a Unit of Work with automatic retry support for optimistic concurrency conflicts.\n *\n * This function orchestrates the two-phase execution (retrieval + mutation) with retry logic.\n * It creates fresh UOW instances for each attempt.\n *\n * @param callbacks - Object containing retrieve, mutate, and onSuccess callbacks\n * @param options - Configuration including UOW factory, retry policy, and abort signal\n * @returns Promise resolving to the execution result\n *\n * @example\n * ```ts\n * const result = await executeUnitOfWork(\n * {\n * retrieve: (uow) => uow.find(\"users\", (b) => b.whereIndex(\"primary\")),\n * mutate: (uow, [users]) => {\n * const user = users[0];\n * uow.update(\"users\", user.id, (b) => b.set({ balance: newBalance }));\n * },\n * onSuccess: async ({ results, mutationResult }) => {\n * console.log(\"Update successful!\");\n * }\n * },\n * {\n * createUnitOfWork: () => queryEngine.createUnitOfWork(),\n * retryPolicy: new ExponentialBackoffRetryPolicy({ maxRetries: 3 })\n * }\n * );\n * ```\n */\nexport async function executeUnitOfWork<\n TSchema extends AnySchema,\n TRetrievalResults extends unknown[],\n TMutationResult = void,\n TRawInput = unknown,\n>(\n callbacks: ExecuteUnitOfWorkCallbacks<TSchema, TRetrievalResults, TMutationResult, TRawInput>,\n options: ExecuteUnitOfWorkOptions<TSchema, TRawInput>,\n): Promise<ExecuteUnitOfWorkResult<TRetrievalResults, TMutationResult>> {\n // Validate that at least one of retrieve or mutate is provided\n if (!callbacks.retrieve && !callbacks.mutate) {\n throw new Error(\"At least one of 'retrieve' or 'mutate' callbacks must be provided\");\n }\n\n const retryPolicy = options.retryPolicy ?? new NoRetryPolicy();\n const signal = options.signal;\n let attempt = 0;\n\n while (true) {\n // Check if aborted before starting attempt\n if (signal?.aborted) {\n return { success: false, reason: \"aborted\" };\n }\n\n try {\n // Create a fresh UOW for this attempt\n const uow = options.createUnitOfWork();\n\n // Apply retrieval phase if provided\n let retrievalUow: TypedUnitOfWork<TSchema, TRetrievalResults, TRawInput>;\n if (callbacks.retrieve) {\n retrievalUow = callbacks.retrieve(uow);\n } else {\n // No retrieval phase, use empty UOW with type cast\n // This is safe because when there's no retrieve, TRetrievalResults should be []\n retrievalUow = uow as unknown as TypedUnitOfWork<TSchema, TRetrievalResults, TRawInput>;\n }\n\n // Execute retrieval phase\n const results = (await retrievalUow.executeRetrieve()) as TRetrievalResults;\n\n // Invoke mutation phase callback if provided\n let mutationResult: TMutationResult;\n if (callbacks.mutate) {\n mutationResult = await callbacks.mutate(retrievalUow, results);\n } else {\n mutationResult = undefined as TMutationResult;\n }\n\n // Execute mutation phase\n const { success } = await retrievalUow.executeMutations();\n\n if (success) {\n // Success! Get created IDs and nonce, then invoke onSuccess if provided\n const createdIds = retrievalUow.getCreatedIds();\n const nonce = retrievalUow.nonce;\n\n // Await promises in mutationResult (1 level deep)\n const awaitedMutationResult = await awaitPromisesInObject(mutationResult);\n\n if (callbacks.onSuccess) {\n await callbacks.onSuccess({\n results,\n mutationResult: awaitedMutationResult,\n createdIds,\n nonce,\n });\n }\n\n return {\n success: true,\n results,\n mutationResult: awaitedMutationResult,\n createdIds,\n nonce,\n };\n }\n\n // Failed - check if we should retry\n // attempt represents the number of attempts completed so far\n if (!retryPolicy.shouldRetry(attempt, undefined, signal)) {\n // No more retries\n return { success: false, reason: \"conflict\" };\n }\n\n // Wait before retrying\n const delayMs = retryPolicy.getDelayMs(attempt);\n if (delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n\n // Increment attempt counter for next iteration\n attempt++;\n } catch (error) {\n // An error was thrown during execution\n return { success: false, reason: \"error\", error };\n }\n }\n}\n\n/**\n * Options for executing a Unit of Work with restricted access\n */\nexport interface ExecuteRestrictedUnitOfWorkOptions {\n /**\n * Factory function that creates or resets a UOW instance for each attempt\n */\n createUnitOfWork: () => IUnitOfWork;\n\n /**\n * Retry policy for handling optimistic concurrency conflicts\n */\n retryPolicy?: RetryPolicy;\n\n /**\n * Abort signal to cancel execution\n */\n signal?: AbortSignal;\n}\n\n/**\n * Execute a Unit of Work with explicit phase control and automatic retry support.\n *\n * This function provides an alternative API where users write a single callback that receives\n * a context object with forSchema, executeRetrieve, and executeMutate methods. The user can\n * create schema-specific UOWs via forSchema, then call executeRetrieve() and executeMutate()\n * to execute the retrieval and mutation phases. The entire callback is re-executed on optimistic\n * concurrency conflicts, ensuring retries work properly.\n *\n * @param callback - Async function that receives a context with forSchema, executeRetrieve, executeMutate, nonce, and currentAttempt\n * @param options - Configuration including UOW factory, retry policy, and abort signal\n * @returns Promise resolving to the callback's return value\n * @throws Error if retries are exhausted or callback throws an error\n *\n * @example\n * ```ts\n * const { userId, profileId } = await executeRestrictedUnitOfWork(\n * async ({ forSchema, executeRetrieve, executeMutate, nonce, currentAttempt }) => {\n * const uow = forSchema(schema);\n * const userId = uow.create(\"users\", { name: \"John\" });\n *\n * // Execute retrieval phase\n * await executeRetrieve();\n *\n * const profileId = uow.create(\"profiles\", { userId });\n *\n * // Execute mutation phase\n * await executeMutate();\n *\n * return { userId, profileId };\n * },\n * {\n * createUnitOfWork: () => db.createUnitOfWork(),\n * retryPolicy: new ExponentialBackoffRetryPolicy({ maxRetries: 5 })\n * }\n * );\n * ```\n */\nexport async function executeRestrictedUnitOfWork<TResult>(\n callback: (context: {\n forSchema: <S extends AnySchema>(schema: S) => TypedUnitOfWork<S, [], unknown>;\n executeRetrieve: () => Promise<void>;\n executeMutate: () => Promise<void>;\n nonce: string;\n currentAttempt: number;\n }) => Promise<TResult>,\n options: ExecuteRestrictedUnitOfWorkOptions,\n): Promise<AwaitedPromisesInObject<TResult>> {\n // Default retry policy with small, fast retries for optimistic concurrency\n const retryPolicy =\n options.retryPolicy ??\n new ExponentialBackoffRetryPolicy({\n maxRetries: 5,\n initialDelayMs: 10,\n maxDelayMs: 100,\n });\n const signal = options.signal;\n let attempt = 0;\n\n while (true) {\n // Check if aborted before starting attempt\n if (signal?.aborted) {\n throw new Error(\"Unit of Work execution aborted\");\n }\n\n try {\n // Create a fresh UOW for this attempt\n const baseUow = options.createUnitOfWork();\n\n // Create context object with forSchema, executeRetrieve, executeMutate, nonce, and currentAttempt\n const context = {\n forSchema: <S extends AnySchema>(schema: S) => {\n return baseUow.forSchema(schema);\n },\n executeRetrieve: async () => {\n await baseUow.executeRetrieve();\n },\n executeMutate: async () => {\n if (baseUow.state === \"executed\") {\n return;\n }\n\n if (baseUow.state === \"building-retrieval\") {\n await baseUow.executeRetrieve();\n }\n\n const result = await baseUow.executeMutations();\n if (!result.success) {\n throw new Error(\"Mutations failed due to conflict\");\n }\n },\n nonce: baseUow.nonce,\n currentAttempt: attempt,\n };\n\n // Execute the callback which will call executeRetrieve and executeMutate\n const result = await callback(context);\n\n // Await promises in the result object (1 level deep)\n const awaitedResult = await awaitPromisesInObject(result);\n\n // Return the awaited result\n return awaitedResult;\n } catch (error) {\n if (signal?.aborted) {\n throw new Error(\"Unit of Work execution aborted\");\n }\n\n if (!retryPolicy.shouldRetry(attempt, error, signal)) {\n // No more retries - check again if aborted or throw conflict error\n if (signal?.aborted) {\n throw new Error(\"Unit of Work execution aborted\");\n }\n throw new Error(\"Unit of Work execution failed: optimistic concurrency conflict\", {\n cause: error,\n });\n }\n\n // Wait before retrying\n const delayMs = retryPolicy.getDelayMs(attempt);\n if (delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n\n // Increment attempt counter for next iteration\n attempt++;\n }\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.d.ts","names":[],"sources":["../../src/query/query.ts"],"sourcesContent":[],"mappings":";;;;;;;KAYY,eAAA,GAAkB,aAAa;KAE/B,uBAAuB,0BAA0B;AAFjD,KAIA,eAJe,CAAA,UAIW,QAJR,CAAA,GAAA,QAElB,MAGE,CAHF,CAAA,SAAY,CAAA,IAAW,MAAA,SAGU,CAHiB,GAAA,KAAA,GAGL,CAHK,GAGD,CAHC,CAAA,SAAA,CAAA,CAGY,CAHZ,CAAA,CAAA,MAAA,CAAA,EAE9D;AAAsC,KAI1B,mBAJ0B,CAAA,UAII,QAJJ,CAAA,GAIgB,QAJhB,CAIyB,eAJzB,CAIyC,CAJzC,CAAA,CAAA;KAMjC,YALS,CAAA,CAAA,CAAA,GAAA,QAA+B,MAM/B,CAN+B,IAAA,IAAA,SAMb,CANa,CAMX,CANW,CAAA,GAMN,CANM,GAAA,KAAA,GAMM,CANN,CAMQ,CANR,CAAA,EAAY;KASpD,eATwD,CAAA,CAAA,CAAA,GAAA,QAAa,MAU5D,CAV4D,IAAA,IAAA,SAU1C,CAV0C,CAUxC,CAVwC,CAAA,GAAA,KAAA,GAU3B,CAV2B,GAUvB,CAVuB,CAUrB,CAVqB,CAAA,EAAC;AAG3E,KAUK,eAVO,CAAA,UAUmB,QAVA,CAAA,GAAA,QAAW,MAW5B,CAX4B,CAAA,SAAA,CAAA,IAAA,MAAA,SAWG,CAXH,GAAA,KAAA,GAWe,CAXf,GAWmB,CAXnB,CAAA,SAAA,CAAA,CAWgC,CAXhC,CAAA,CAAA,KAAA,CAAA,EAAqC;AAAhB,KAcnD,mBAdmD,CAAA,UAcrB,QAdqB,CAAA,GAcT,QAdS,CAe7D,OAf6D,CAerD,YAfqD,CAexC,eAfwC,CAexB,CAfwB,CAAA,CAAA,CAAA,GAejB,eAfiB,CAeD,eAfC,CAee,CAff,CAAA,CAAA,CAAA;AAAT,KAkB1C,mBAlB0C,CAAA,UAkBZ,QAlBY,CAAA,GAAA,QAAQ,MAmBhD,CAnBgD,CAAA,SAAA,CAAA,IAAA,MAAA,SAmBjB,CAnBiB,GAAA,KAAA,GAmBL,CAnBK,IAmBA,CAnBA,CAAA,SAAA,CAAA,CAmBa,CAnBb,CAAA,SAmBwB,QAnBxB,GAAA,KAAA,GAqBxD,CArBwD,CAAA,SAAA,CAAA,CAqB3C,CArB2C,CAAA,CAAA,KAAA,CAAA,EAAqB;KAwB9E,gBArBS,CAAA,UAqBkB,YArBlB,CAqB+B,CArB/B,CAAA,EAAA,UAqB6C,QArB7C,CAAA,GAqByD,CArBzD,SAAA,IAAA,GAsBV,mBAtBU,CAsBU,CAtBV,CAAA,GAuBV,CAvBU,SAAA,CAAA,MAuBO,CAvBP,CAAA,SAAA,CAAA,CAAA,EAAA,GAwBR,QAxBQ,CAAA,QAyBA,CAzBkB,CAAA,MAAA,CAAA,IAAA,MAAA,SAyBU,CAzBV,GAAA,KAAA,GAyBsB,CAzBtB,GAyB0B,CAzB1B,SAAA,MAyB0C,CAzB1C,CAAA,SAAA,CAAA,GA0BpB,CA1BoB,CAAA,SAAA,CAAA,CA0BP,CA1BO,CAAA,CAAA,MAAA,CAAA,GAAA,KAAA,EAAE,CAAA,GAAA,KAAA;AAAK,KA+B3B,YA/B2B,CAAA,UA+BJ,QA/BI,EAAA,OAAA,EAAA,eA+B8B,YA/B9B,CA+B2C,CA/B3C,CAAA,CAAA,GA+BiD,QA/BjD,CAgCrC,gBAhCqC,CAgCpB,MAhCoB,EAgCZ,CAhCY,CAAA,GAgCP,OAhCO,CAAA;UAmC7B,eAnCyC,CAAA,MAAA,CAAA,CAAA;EAAE,GAAA,EAoC9C,MApC8C,GAAA,IAAA;EAAC,IAAA,EAqC9C,MArC8C,EAAA;AAAA;AAIxC,KAoCF,WApCE,CAAA,UAoCoB,QApCpB,EAAA,MAAA,CAAA,CAAA,CAAA,GAAA,QAAkB,MAqClB,CArCkB,CAAA,WAAA,CAAA,GAqCD,CArCC,CAAA,WAAA,CAAA,CAqCc,CArCd,CAAA,SAqCyB,QArCzB,CAAA,KAAA,KAAA,EAAA,KAAA,OAAA,CAAA,GAAA,CAAA,eAsCV,YAtCU,CAsCG,MAtCH,CAAA,GAAA,IAAA,EAAA,UAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAuCd,eAvCc,CAuCE,MAvCF,EAuCU,MAvCV,EAuCkB,OAvClB,EAAA,KAAA,CAAA,EAAA,GAwCrB,WAxCqB,CAyCxB,CAzCwB,EA0CxB,QA1CwB,CA2CtB,GA3CsB,GAAA,SA4Cb,CA5Ce,GA4CX,eA5CW,CA4CK,YA5CL,CA4CkB,MA5ClB,EA4C0B,OA5C1B,EA4CmC,MA5CnC,CAAA,CAAA,CA4C4C,IA5C5C,CAAA,EAAa,CAAA,CAAA,GAAA,KAAA,EAAI;AAAE,KAmDzC,OAnDyC,CAAA,SAAA,MAAA,CAAA,GAAA,CAAA,UAAA,EAmDD,MAnDC,EAAA,KAAA,GAAA,MAAA,CAAA;;AAAC;;;AAIT,KAqDjC,aArDiC,CAAA,CAAA,CAAA,GAuD3C,CAvD2C,SAuDjC,WAvDiC,CAAA,GAAA,EAAA,KAAA,QAAA,EAAA,GAAA,CAAA,GAwDvC,OAxDuC,GA0DvC,CA1DuC,SA0D7B,IA1D6B,CA0DxB,WA1DwB,CAAA,GAAA,EAAA,KAAA,QAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,GA2DrC,OA3DqC,GAAA,IAAA;;;;;AAGjC,KA+DA,cA/DmB,CAAA,CAAA,CAAA,GAiE7B,CAjE6B,SAiEnB,WAjEmB,CAAA,GAAA,EAAA,GAAA,EAAA,KAAA,SAAA,CAAA,GAkEzB,QAlEyB,GAoEzB,CApEyB,SAoEf,IApEe,CAoEV,WApEU,CAAA,GAAA,EAAA,GAAA,EAAA,KAAA,SAAA,CAAA,EAAA,GAAA,CAAA,GAqEvB,QArEuB,GAAA,CAAA,CAAA;AAAW,KAwE9B,gBAxE8B,CAAA,UAyE9B,QAzE8B,GAyEnB,QAzEmB,EAAA,eA0EzB,YA1EyB,CA0EZ,CA1EY,CAAA,GA0EP,YA1EO,CA0EM,CA1EN,CAAA,EAAA,UAAA,CAAA,CAAA,EAAA,eAAA,OAAA,GAAA,IAAA,CAAA,GA6EtC,IA7EsC,CA8ExC,eA9EwC,CA8ExB,CA9EwB,EA8ErB,MA9EqB,EA8Eb,OA9Ea,EA8EJ,MA9EI,CAAA,EA+ExC,MA/EwC,SAAA,IAAA,GAAA,OAAA,GAAA,OAAA,GAAA,QAAA,GAAA,SAAA,CAAA;AACH,KAiF3B,eAjF2B,CAAA,UAkF3B,QAlF2B,GAkFhB,QAlFgB,EAAA,eAmFtB,YAnFsB,CAmFT,CAnFS,CAAA,GAmFJ,YAnFI,CAmFS,CAnFT,CAAA,EAAA,WAAA,CAAA,CAAA,EAAA,eAAA,OAAA,GAAA,IAAA,CAAA,GAAA;EAAhB,MAAA,CAAA,EAuFZ,MAvFY;EAAb,KAAA,CAAA,EAAA,CAAA,EAAA,EAwFK,gBAxFL,CAwFsB,CAxFtB,CAAA,SAAA,CAAA,CAAA,EAAA,GAwFwC,SAxFxC,GAAA,OAAA;EAAR,KAAA,CAAA,EAAA,MAAA;EAA4E,OAAA,CAAA,EA0FlE,OA1FkE,CAAA,MA0FpD,CA1FoD,CAAA,SAAA,CAAA,CAAA,GA0FpC,OA1FoC,CAAA,MA0FtB,CA1FsB,CAAA,SAAA,CAAA,CAAA,EAAA;EAAhB,IAAA,CAAA,EAAA,CAAA,EAAA,EA2FhD,WA3FgD,CA2FpC,CA3FoC,CAAA,EAAA,GAAA,IAAA;CAAhB,GAAA,CA4FzC,MA5FyC,SAAA,IAAA,GAAA;EADQ,MAAA,CAAA,EAAA,MAAA;CAAQ,GAAA,CAAA,CAAA,CAAA;AAIlD,UAgGK,aAhGc,CAAA,gBAgGgB,SAhGhB,EAAA,aAAA,IAAA,CAAA,CAAA;EAAW;;;EACe,IAAA,EAAA;IAAK,CAAA,kBAAA,MAqGjC,OArGiC,CAAA,QAAA,CAAA,GAAA,MAAA,EAAA,oBAAA,CAAA,CAAA,KAAA,EAsGjD,SAtGiD,EAAA,SAAA,EAAA,CAAA,OAAA,EAwG7C,IAxG6C,CAwGxC,WAxGwC,CAwG5B,OAxG4B,CAAA,QAAA,CAAA,CAwGV,SAxGU,CAAA,CAAA,EAAA,OAAA,CAAA,EAAA,GAyGnD,cAzGmD,CAAA,EA0GvD,OA1GuD,CA2GxD,YA3GwD,CA4GtD,OA5GsD,CAAA,QAAA,CAAA,CA4GpC,SA5GoC,CAAA,EA6GtD,cA7GsD,CA6GvC,cA7GuC,CAAA,EA8GtD,OA9GsD,CA8G9C,aA9G8C,CA8GhC,cA9GgC,CAAA,EA8Gf,YA9Ge,CA8GF,OA9GE,CAAA,QAAA,CAAA,CA8GgB,SA9GhB,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA;IAAa,CAAA,kBAAA,MAkH9C,OAlH8C,CAAA,QAAA,CAAA,GAAA,MAAA,CAAA,CAAA,KAAA,EAmH9D,SAnH8D,CAAA,EAoHpE,OApHoE,CAoH5D,YApH4D,CAoH/C,OApH+C,CAAA,QAAA,CAAA,CAoH7B,SApH6B,CAAA,EAAA,CAAA,CAAA,EAAA,IAAA,CAAA,EAAA,CAAA;EAAW,CAAA;EAEhF;;;EAGD,cAAA,EAAA,CAAA,kBAAgB,MAqHsB,OArHtB,CAAA,QAAA,CAAA,GAAA,MAAA,EAAA,oBAAA,CAAA,CAAA,KAAA,EAsHV,SAtHU,EAAA,SAAA,EAAA,CAAA,OAAA,EAwHN,IAxHM,CAwHD,WAxHC,CAwHW,OAxHX,CAAA,QAAA,CAAA,CAwH6B,SAxH7B,CAAA,CAAA,EAAA,OAAA,CAAA,EAAA,GAyHZ,cAzHY,EAAA,GA0Hd,OA1Hc,CA2HjB,YA3HiB,CA4Hf,YA5He,CA6Hb,OA7Ha,CAAA,QAAA,CAAA,CA6HK,SA7HL,CAAA,EA8Hb,cA9Ha,CA8HE,cA9HF,CAAA,EA+Hb,OA/Ha,CA+HL,aA/HK,CA+HS,cA/HT,CAAA,EA+H0B,YA/H1B,CA+HuC,OA/HvC,CAAA,QAAA,CAAA,CA+HyD,SA/HzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;EAAwB;;;;EACrB,SAAA,EAAA;IAApB,CAAA,kBAAA,MA0IyB,OA1IzB,CAAA,QAAA,CAAA,GAAA,MAAA,EAAA,oBAAA,CAAA,CAAA,KAAA,EA2IS,SA3IT,EAAA,SAAA,EAAA,CAAA,OAAA,EA6Ia,IA7Ib,CA6IkB,WA7IlB,CA6I8B,OA7I9B,CAAA,QAAA,CAAA,CA6IgD,SA7IhD,CAAA,CAAA,EAAA,OAAA,CAAA,EAAA,GA8IO,cA9IP,CAAA,EA+IG,OA/IH,CA+IW,YA/IX,CAgJE,OAhJF,CAAA,QAAA,CAAA,CAgJoB,SAhJpB,CAAA,EAiJE,cAjJF,CAiJiB,cAjJjB,CAAA,EAkJE,OAlJF,CAkJU,aAlJV,CAkJwB,cAlJxB,CAAA,EAkJyC,YAlJzC,CAkJsD,OAlJtD,CAAA,QAAA,CAAA,CAkJwE,SAlJxE,CAAA,CAAA,CAAA,CAAA,GAAA,IAAA,CAAA;IACA,CAAA,kBAAA,MAoJyB,OApJzB,CAAA,QAAA,CAAA,GAAA,MAAA,CAAA,CAAA,KAAA,EAqJS,SArJT,CAAA,EAsJG,OAtJH,CAsJW,YAtJX,CAsJwB,OAtJxB,CAAA,QAAA,CAAA,CAsJ0C,SAtJ1C,CAAA,EAAA,CAAA,CAAA,EAAA,IAAA,CAAA,GAAA,IAAA,CAAA;EAAiB,CAAA;EAEP;;;;EAA4D,MAAA,EAAA,CAAA,kBAAA,MA2JvC,OA3JuC,CAAA,QAAA,CAAA,GAAA,MAAA,CAAA,CAAA,KAAA,EA4J/D,SA5J+D,EAAA,MAAA,EA6J9D,mBA7J8D,CA6J1C,OA7J0C,CAAA,QAAA,CAAA,CA6JxB,SA7JwB,CAAA,CAAA,EAAA,GA8JnE,OA9JmE,CA8J3D,QA9J2D,CAAA;EAC9D;;;;EAKA,UAAA,EAAA,CAAA,kBAAY,MA8Je,OA9Jf,CAAA,QAAA,CAAA,GAAA,MAAA,CAAA,CAAA,KAAA,EA+Jb,SA/Ja,EAAA,MAAA,EAgKZ,mBAhKY,CAgKQ,OAhKR,CAAA,QAAA,CAAA,CAgK0B,SAhK1B,CAAA,CAAA,EAAA,EAAA,GAiKjB,OAjKiB,CAiKT,QAjKS,EAAA,CAAA;EAAW;;;;EACR,MAAA,EAAA,CAAA,kBAAA,MAsKQ,OAtKR,CAAA,QAAA,CAAA,GAAA,MAAA,CAAA,CAAA,KAAA,EAuKhB,SAvKgB,EAAA,EAAA,EAwKnB,QAxKmB,GAAA,MAAA,EAAA,SAAA,EAAA,CAAA,OAAA,EA0KZ,IA1KY,CA0KP,aA1KO,CA0KO,OA1KP,CAAA,QAAA,CAAA,CA0KyB,SA1KzB,CAAA,CAAA,EAAA,OAAA,CAAA,EAAA,GA2KlB,IA3KkB,CA2Kb,aA3Ka,CA2KC,OA3KD,CAAA,QAAA,CAAA,CA2KmB,SA3KnB,CAAA,CAAA,EAAA,OAAA,CAAA,EAAA,GA4KpB,OA5KoB,CAAA,IAAA,CAAA;EAAzB;;;;EAGQ,UAAA,EAAA,CAAA,kBAAe,MA+Kc,OA9KhC,CACC,QAAI,CAAA,GAAA,MAAA,CAAA,CAAA,KAAA,EA8KD,SA9KC,EAAA,SAAA,EAAA,CAAA,OAAA,EA+Ka,iBA/Kb,CA+K+B,OA/K/B,CAAA,QAAA,CAAA,CA+KiD,SA/KjD,CAAA,CAAA,EAAA,GAAA,IAAA,EAAA,GAgLL,OAhLK,CAAA,IAAA,CAAA;EAGA;;;EACmB,MAAA,EAAA,CAAA,kBAAA,MAiLI,OAjLJ,CAAA,QAAA,CAAA,GAAA,MAAA,CAAA,CAAA,KAAA,EAkLpB,SAlLoB,EAAA,EAAA,EAmLvB,QAnLuB,GAAA,MAAA,EAAA,SAAA,CAAA,EAAA,CAAA,OAAA,EAoLL,IApLK,CAoLA,aApLA,EAAA,OAAA,CAAA,EAAA,GAoL4B,IApL5B,CAoLiC,aApLjC,EAAA,OAAA,CAAA,EAAA,GAqLxB,OArLwB,CAAA,IAAA,CAAA;EAAe;;;EACxB,UAAA,EAAA,CAAA,kBAAA,MAyLiB,OAzLjB,CAAA,QAAA,CAAA,GAAA,MAAA,CAAA,CAAA,KAAA,EA0LX,SA1LW,EAAA,SAAA,EAAA,CAAA,OAAA,EA4LP,IA5LO,CA4LF,WA5LE,CA4LU,OA5LV,CAAA,QAAA,CAAA,CA4L4B,SA5L5B,CAAA,CAAA,EAAA,OAAA,GAAA,OAAA,CAAA,EAAA,GAAA,IAAA,EAAA,GA8Lf,OA9Le,CAAA,IAAA,CAAA;EACY;;;EAAhB,gBAAA,EAAA,CAAA,IAAA,CAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAkM2B,UAlM3B,EAAA,GAkM0C,eAlM1C,CAkM0D,OAlM1D,EAAA,EAAA,EAAA,OAAA,CAAA"}
@@ -1,170 +0,0 @@
1
- import { createId } from "../id.js";
2
- import { FragnoId, FragnoReference } from "../schema/create.js";
3
- import { deserialize, serialize } from "../schema/serialize.js";
4
-
5
- //#region src/query/result-transform.ts
6
- /**
7
- * Marker class for reference column values that need subquery resolution.
8
- * When a reference column receives a string (external ID), this marker tells
9
- * the query builder to generate a subquery to look up the internal ID.
10
- * @internal
11
- */
12
- var ReferenceSubquery = class {
13
- #referencedTable;
14
- #externalIdValue;
15
- constructor(referencedTable, externalIdValue) {
16
- this.#referencedTable = referencedTable;
17
- this.#externalIdValue = externalIdValue;
18
- }
19
- get referencedTable() {
20
- return this.#referencedTable;
21
- }
22
- get externalIdValue() {
23
- return this.#externalIdValue;
24
- }
25
- };
26
- /**
27
- * Generate a runtime default value for a column that has defaultTo$()
28
- *
29
- * Only generates values for runtime defaults (defaultTo$), NOT static defaults (defaultTo).
30
- * Static defaults should be handled by the database via DEFAULT constraints.
31
- *
32
- * @param column - The column with a default value configuration
33
- * @returns The generated default value, or undefined if the column has no runtime default
34
- *
35
- * @internal
36
- */
37
- function generateRuntimeDefault(column) {
38
- if (!column.default) return;
39
- if ("value" in column.default) return;
40
- if ("dbSpecial" in column.default) return;
41
- const runtime = column.default.runtime;
42
- if (runtime === "cuid") return createId();
43
- if (runtime === "now") return /* @__PURE__ */ new Date();
44
- if (typeof runtime === "function") return runtime();
45
- }
46
- /**
47
- * Encodes a record of values from the application format to database format.
48
- *
49
- * This function transforms object keys to match SQL column names and serializes
50
- * values according to the database provider's requirements (e.g., converting
51
- * JavaScript Date objects to numbers for SQLite).
52
- *
53
- * @param values - The record of values to encode in application format
54
- * @param table - The table schema definition containing column information
55
- * @param generateDefault - Whether to generate default values for undefined columns
56
- * @param provider - The SQL provider (sqlite, postgresql, mysql, etc.)
57
- * @param skipDriverConversions - Skip driver-level type conversions (Date->number, boolean->0/1, bigint->Buffer).
58
- * Set to true when using ORMs like Drizzle that handle these conversions internally.
59
- * @returns A record with database-compatible column names and serialized values
60
- *
61
- * @example
62
- * ```ts
63
- * const encoded = encodeValues(
64
- * { userId: 123, createdAt: new Date() },
65
- * userTable,
66
- * true,
67
- * 'sqlite'
68
- * );
69
- * // Returns: { user_id: 123, created_at: 1234567890 }
70
- * ```
71
- */
72
- function encodeValues(values, table, generateDefault, provider, skipDriverConversions = false) {
73
- const result = {};
74
- for (const k in table.columns) {
75
- const col = table.columns[k];
76
- if (col.role === "internal-id") continue;
77
- let value = values[k];
78
- if (generateDefault && value === void 0) value = generateRuntimeDefault(col);
79
- if (value !== void 0) {
80
- if (col.role === "reference") {
81
- if (typeof value === "string") {
82
- const relation = Object.values(table.relations).find((rel) => rel.on.some(([localCol]) => localCol === k));
83
- if (relation) {
84
- result[col.name] = new ReferenceSubquery(relation.table, value);
85
- continue;
86
- }
87
- throw new Error(`Reference column ${k} not found in table ${table.name}`);
88
- } else if (value instanceof FragnoId) if (value.internalId !== void 0) {
89
- result[col.name] = value.internalId;
90
- continue;
91
- } else {
92
- const relation = Object.values(table.relations).find((rel) => rel.on.some(([localCol]) => localCol === k));
93
- if (relation) {
94
- result[col.name] = new ReferenceSubquery(relation.table, value.externalId);
95
- continue;
96
- }
97
- throw new Error(`Reference column ${k} not found in table ${table.name}`);
98
- }
99
- }
100
- result[col.name] = serialize(value, col, provider, skipDriverConversions);
101
- }
102
- }
103
- return result;
104
- }
105
- /**
106
- * Decodes a database result record to application format.
107
- *
108
- * This function transforms database column names back to application property names
109
- * and deserializes values according to the database provider's format (e.g., converting
110
- * SQLite integers back to JavaScript Date objects).
111
- *
112
- * Supports relation data encoded with the pattern `relationName:columnName`.
113
- *
114
- * @param result - The raw database result record
115
- * @param table - The table schema definition containing column and relation information
116
- * @param provider - The SQL provider (sqlite, postgresql, mysql, etc.)
117
- * @returns A record in application format with deserialized values
118
- *
119
- * @example
120
- * ```ts
121
- * const decoded = decodeResult(
122
- * { user_id: 123, created_at: 1234567890, 'posts:title': 'Hello' },
123
- * userTable,
124
- * 'sqlite'
125
- * );
126
- * // Returns: { userId: 123, createdAt: Date, posts: { title: 'Hello' } }
127
- * ```
128
- */
129
- function decodeResult(result, table, provider) {
130
- const output = {};
131
- const columnValues = {};
132
- const relationData = {};
133
- for (const k in result) {
134
- const colonIndex = k.indexOf(":");
135
- const value = result[k];
136
- if (colonIndex === -1) {
137
- const col = table.columns[k];
138
- if (!col) continue;
139
- columnValues[k] = deserialize(value, col, provider);
140
- continue;
141
- }
142
- const relationName = k.slice(0, colonIndex);
143
- const remainder = k.slice(colonIndex + 1);
144
- if (table.relations[relationName] === void 0) continue;
145
- relationData[relationName] ??= {};
146
- relationData[relationName][remainder] = value;
147
- }
148
- for (const relationName in relationData) {
149
- const relation = table.relations[relationName];
150
- if (!relation) continue;
151
- output[relationName] = decodeResult(relationData[relationName], relation.table, provider);
152
- }
153
- for (const k in columnValues) {
154
- const col = table.columns[k];
155
- if (!col) continue;
156
- if (col.isHidden) continue;
157
- if (col.role === "external-id" && columnValues["_internalId"] !== void 0) output[k] = new FragnoId({
158
- externalId: columnValues[k],
159
- internalId: columnValues["_internalId"],
160
- version: columnValues["_version"]
161
- });
162
- else if (col.role === "reference") output[k] = FragnoReference.fromInternal(columnValues[k]);
163
- else output[k] = columnValues[k];
164
- }
165
- return output;
166
- }
167
-
168
- //#endregion
169
- export { ReferenceSubquery, decodeResult, encodeValues };
170
- //# sourceMappingURL=result-transform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"result-transform.js","names":["#referencedTable","#externalIdValue","result: Record<string, unknown>","output: Record<string, unknown>","columnValues: Record<string, unknown>","relationData: Record<string, Record<string, unknown>>"],"sources":["../../src/query/result-transform.ts"],"sourcesContent":["import type { AnyColumn, AnyTable } from \"../schema/create\";\nimport type { SQLProvider } from \"../shared/providers\";\nimport { deserialize, serialize } from \"../schema/serialize\";\nimport { FragnoId, FragnoReference } from \"../schema/create\";\nimport { createId } from \"../id\";\n\n/**\n * Marker class for reference column values that need subquery resolution.\n * When a reference column receives a string (external ID), this marker tells\n * the query builder to generate a subquery to look up the internal ID.\n * @internal\n */\nexport class ReferenceSubquery {\n #referencedTable: AnyTable;\n #externalIdValue: string;\n\n constructor(referencedTable: AnyTable, externalIdValue: string) {\n this.#referencedTable = referencedTable;\n this.#externalIdValue = externalIdValue;\n }\n\n get referencedTable() {\n return this.#referencedTable;\n }\n\n get externalIdValue() {\n return this.#externalIdValue;\n }\n}\n\n/**\n * Generate a runtime default value for a column that has defaultTo$()\n *\n * Only generates values for runtime defaults (defaultTo$), NOT static defaults (defaultTo).\n * Static defaults should be handled by the database via DEFAULT constraints.\n *\n * @param column - The column with a default value configuration\n * @returns The generated default value, or undefined if the column has no runtime default\n *\n * @internal\n */\nexport function generateRuntimeDefault(column: AnyColumn): unknown {\n // Check if column has a default value configuration\n if (!column.default) {\n return undefined;\n }\n\n // If it's a static default value (defaultTo), return undefined\n // as the database should handle this via DEFAULT constraint\n if (\"value\" in column.default) {\n return undefined;\n }\n\n // If it's a database-level special function (defaultTo(b => b.now())), return undefined\n // as the database should handle this via DEFAULT NOW() or equivalent\n if (\"dbSpecial\" in column.default) {\n return undefined;\n }\n\n // Handle runtime defaults (defaultTo$)\n const runtime = column.default.runtime;\n\n if (runtime === \"cuid\") {\n return createId();\n }\n\n if (runtime === \"now\") {\n return new Date();\n }\n\n if (typeof runtime === \"function\") {\n return runtime();\n }\n\n return undefined;\n}\n\n/**\n * Encodes a record of values from the application format to database format.\n *\n * This function transforms object keys to match SQL column names and serializes\n * values according to the database provider's requirements (e.g., converting\n * JavaScript Date objects to numbers for SQLite).\n *\n * @param values - The record of values to encode in application format\n * @param table - The table schema definition containing column information\n * @param generateDefault - Whether to generate default values for undefined columns\n * @param provider - The SQL provider (sqlite, postgresql, mysql, etc.)\n * @param skipDriverConversions - Skip driver-level type conversions (Date->number, boolean->0/1, bigint->Buffer).\n * Set to true when using ORMs like Drizzle that handle these conversions internally.\n * @returns A record with database-compatible column names and serialized values\n *\n * @example\n * ```ts\n * const encoded = encodeValues(\n * { userId: 123, createdAt: new Date() },\n * userTable,\n * true,\n * 'sqlite'\n * );\n * // Returns: { user_id: 123, created_at: 1234567890 }\n * ```\n */\nexport function encodeValues(\n values: Record<string, unknown>,\n table: AnyTable,\n generateDefault: boolean,\n provider: SQLProvider,\n skipDriverConversions = false,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const k in table.columns) {\n const col = table.columns[k];\n\n // Skip internal ID - never provided by user, auto-generated by database\n if (col.role === \"internal-id\") {\n continue;\n }\n let value = values[k];\n\n if (generateDefault && value === undefined) {\n // Only generate runtime defaults (defaultTo$), not static defaults (defaultTo).\n // Static defaults should be handled by the database via DEFAULT constraints.\n value = generateRuntimeDefault(col);\n }\n\n if (value !== undefined) {\n // Handle string references and FragnoId objects\n if (col.role === \"reference\") {\n if (typeof value === \"string\") {\n // String external ID - generate subquery\n const relation = Object.values(table.relations).find((rel) =>\n rel.on.some(([localCol]) => localCol === k),\n );\n if (relation) {\n result[col.name] = new ReferenceSubquery(relation.table, value);\n continue;\n }\n throw new Error(`Reference column ${k} not found in table ${table.name}`);\n } else if (value instanceof FragnoId) {\n // FragnoId object\n if (value.internalId !== undefined) {\n // If internal ID is populated, use it directly (no subquery needed)\n result[col.name] = value.internalId;\n continue;\n } else {\n // If internal ID is not populated, use external ID via subquery\n const relation = Object.values(table.relations).find((rel) =>\n rel.on.some(([localCol]) => localCol === k),\n );\n if (relation) {\n result[col.name] = new ReferenceSubquery(relation.table, value.externalId);\n continue;\n }\n throw new Error(`Reference column ${k} not found in table ${table.name}`);\n }\n }\n }\n\n result[col.name] = serialize(value, col, provider, skipDriverConversions);\n }\n }\n\n return result;\n}\n\n/**\n * Decodes a database result record to application format.\n *\n * This function transforms database column names back to application property names\n * and deserializes values according to the database provider's format (e.g., converting\n * SQLite integers back to JavaScript Date objects).\n *\n * Supports relation data encoded with the pattern `relationName:columnName`.\n *\n * @param result - The raw database result record\n * @param table - The table schema definition containing column and relation information\n * @param provider - The SQL provider (sqlite, postgresql, mysql, etc.)\n * @returns A record in application format with deserialized values\n *\n * @example\n * ```ts\n * const decoded = decodeResult(\n * { user_id: 123, created_at: 1234567890, 'posts:title': 'Hello' },\n * userTable,\n * 'sqlite'\n * );\n * // Returns: { userId: 123, createdAt: Date, posts: { title: 'Hello' } }\n * ```\n */\nexport function decodeResult(\n result: Record<string, unknown>,\n table: AnyTable,\n provider: SQLProvider,\n): Record<string, unknown> {\n const output: Record<string, unknown> = {};\n // First pass: collect all column values\n const columnValues: Record<string, unknown> = {};\n\n // Collect all relation data (including nested) keyed by relation name\n const relationData: Record<string, Record<string, unknown>> = {};\n\n for (const k in result) {\n const colonIndex = k.indexOf(\":\");\n const value = result[k];\n\n // Direct column (no colon)\n if (colonIndex === -1) {\n const col = table.columns[k];\n if (!col) {\n continue;\n }\n\n // Store all column values (including hidden ones for FragnoId creation)\n columnValues[k] = deserialize(value, col, provider);\n continue;\n }\n\n // Relation column (has colon)\n const relationName = k.slice(0, colonIndex);\n const remainder = k.slice(colonIndex + 1);\n\n const relation = table.relations[relationName];\n if (relation === undefined) {\n continue;\n }\n\n // Collect relation data with the remaining key path\n relationData[relationName] ??= {};\n relationData[relationName][remainder] = value;\n }\n\n // Process each relation's data recursively\n for (const relationName in relationData) {\n const relation = table.relations[relationName];\n if (!relation) {\n continue;\n }\n\n // Recursively decode the relation data\n output[relationName] = decodeResult(relationData[relationName], relation.table, provider);\n }\n\n // Second pass: create output with FragnoId objects where appropriate\n for (const k in columnValues) {\n const col = table.columns[k];\n if (!col) {\n continue;\n }\n\n // Filter out hidden columns (like _internalId, _version) from results\n if (col.isHidden) {\n continue;\n }\n\n // For external ID columns, create FragnoId if we have both external and internal IDs\n if (col.role === \"external-id\" && columnValues[\"_internalId\"] !== undefined) {\n output[k] = new FragnoId({\n externalId: columnValues[k] as string,\n internalId: columnValues[\"_internalId\"] as bigint,\n // _version is always selected as a hidden column, so it should always be present\n version: columnValues[\"_version\"] as number,\n });\n } else if (col.role === \"reference\") {\n // For reference columns, create FragnoReference with internal ID\n output[k] = FragnoReference.fromInternal(columnValues[k] as bigint);\n } else {\n output[k] = columnValues[k];\n }\n }\n\n return output;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry-policy.d.ts","names":[],"sources":["../../src/query/retry-policy.ts"],"sourcesContent":[],"mappings":";;AAGA;AAqBA;AA0Ba,UA/CI,WAAA,CA+CJ;EAMU;;;;AA0BvB;AAqBA;;EAW0D,WAAA,CAAA,OAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAvGD,WAuGC,CAAA,EAAA,OAAA;EAXT;;AA6BjD;;;;;;;;UA5GiB,oCAAA;;;;;;;;;;;;;;;;;;;;;;cA0BJ,6BAAA,YAAyC;;wBAM/B;0DAOmC;;;;;;UAmBzC,+BAAA;;;;;;;;;;;;;;;;;;cAqBJ,wBAAA,YAAoC;;wBAK1B;0DAMmC;;;;;;cAkB7C,aAAA,YAAyB;4DACsB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry-policy.js","names":["#maxRetries","#initialDelayMs","#maxDelayMs","#backoffMultiplier","#delayMs","#incrementMs"],"sources":["../../src/query/retry-policy.ts"],"sourcesContent":["/**\n * Policy for retrying failed Unit of Work operations\n */\nexport interface RetryPolicy {\n /**\n * Determines if the operation should be retried\n * @param attempt - The current attempt number (0-indexed)\n * @param error - Optional error from the previous attempt\n * @param signal - Optional AbortSignal to check for cancellation\n * @returns true if the operation should be retried, false otherwise\n */\n shouldRetry(attempt: number, error?: unknown, signal?: AbortSignal): boolean;\n\n /**\n * Gets the delay in milliseconds before the next retry attempt\n * @param attempt - The current attempt number (0-indexed)\n * @returns Delay in milliseconds\n */\n getDelayMs(attempt: number): number;\n}\n\n/**\n * Options for exponential backoff retry policy\n */\nexport interface ExponentialBackoffRetryPolicyOptions {\n /**\n * Maximum number of retry attempts (default: 3)\n */\n maxRetries?: number;\n\n /**\n * Initial delay in milliseconds (default: 100)\n */\n initialDelayMs?: number;\n\n /**\n * Maximum delay in milliseconds (default: 10000)\n */\n maxDelayMs?: number;\n\n /**\n * Multiplier for exponential backoff (default: 2)\n */\n backoffMultiplier?: number;\n}\n\n/**\n * Exponential backoff retry policy\n * Delay increases exponentially: initialDelay * (multiplier ^ attempt)\n */\nexport class ExponentialBackoffRetryPolicy implements RetryPolicy {\n readonly #maxRetries: number;\n readonly #initialDelayMs: number;\n readonly #maxDelayMs: number;\n readonly #backoffMultiplier: number;\n\n constructor(options: ExponentialBackoffRetryPolicyOptions = {}) {\n this.#maxRetries = options.maxRetries ?? 3;\n this.#initialDelayMs = options.initialDelayMs ?? 100;\n this.#maxDelayMs = options.maxDelayMs ?? 10000;\n this.#backoffMultiplier = options.backoffMultiplier ?? 2;\n }\n\n shouldRetry(attempt: number, _error?: unknown, signal?: AbortSignal): boolean {\n // Check if operation was aborted\n if (signal?.aborted) {\n return false;\n }\n\n // Check if we've exceeded max retries\n return attempt < this.#maxRetries;\n }\n\n getDelayMs(attempt: number): number {\n const delay = this.#initialDelayMs * Math.pow(this.#backoffMultiplier, attempt);\n return Math.min(delay, this.#maxDelayMs);\n }\n}\n\n/**\n * Options for linear backoff retry policy\n */\nexport interface LinearBackoffRetryPolicyOptions {\n /**\n * Maximum number of retry attempts (default: 3)\n */\n maxRetries?: number;\n\n /**\n * Base delay in milliseconds (default: 100)\n */\n delayMs?: number;\n\n /**\n * Increment added to delay for each attempt in milliseconds (default: 100)\n */\n incrementMs?: number;\n}\n\n/**\n * Linear backoff retry policy\n * Delay increases linearly: delayMs + (attempt * incrementMs)\n */\nexport class LinearBackoffRetryPolicy implements RetryPolicy {\n readonly #maxRetries: number;\n readonly #delayMs: number;\n readonly #incrementMs: number;\n\n constructor(options: LinearBackoffRetryPolicyOptions = {}) {\n this.#maxRetries = options.maxRetries ?? 3;\n this.#delayMs = options.delayMs ?? 100;\n this.#incrementMs = options.incrementMs ?? 100;\n }\n\n shouldRetry(attempt: number, _error?: unknown, signal?: AbortSignal): boolean {\n // Check if operation was aborted\n if (signal?.aborted) {\n return false;\n }\n\n // Check if we've exceeded max retries\n return attempt < this.#maxRetries;\n }\n\n getDelayMs(attempt: number): number {\n return this.#delayMs + attempt * this.#incrementMs;\n }\n}\n\n/**\n * No retry policy - never retries failed operations\n */\nexport class NoRetryPolicy implements RetryPolicy {\n shouldRetry(_attempt: number, _error?: unknown, _signal?: AbortSignal): boolean {\n return false;\n }\n\n getDelayMs(_attempt: number): number {\n return 0;\n }\n}\n"],"mappings":";;;;;AAkDA,IAAa,gCAAb,MAAkE;CAChE,CAASA;CACT,CAASC;CACT,CAASC;CACT,CAASC;CAET,YAAY,UAAgD,EAAE,EAAE;AAC9D,QAAKH,aAAc,QAAQ,cAAc;AACzC,QAAKC,iBAAkB,QAAQ,kBAAkB;AACjD,QAAKC,aAAc,QAAQ,cAAc;AACzC,QAAKC,oBAAqB,QAAQ,qBAAqB;;CAGzD,YAAY,SAAiB,QAAkB,QAA+B;AAE5E,MAAI,QAAQ,QACV,QAAO;AAIT,SAAO,UAAU,MAAKH;;CAGxB,WAAW,SAAyB;EAClC,MAAM,QAAQ,MAAKC,iBAAkB,KAAK,IAAI,MAAKE,mBAAoB,QAAQ;AAC/E,SAAO,KAAK,IAAI,OAAO,MAAKD,WAAY;;;;;;;AA4B5C,IAAa,2BAAb,MAA6D;CAC3D,CAASF;CACT,CAASI;CACT,CAASC;CAET,YAAY,UAA2C,EAAE,EAAE;AACzD,QAAKL,aAAc,QAAQ,cAAc;AACzC,QAAKI,UAAW,QAAQ,WAAW;AACnC,QAAKC,cAAe,QAAQ,eAAe;;CAG7C,YAAY,SAAiB,QAAkB,QAA+B;AAE5E,MAAI,QAAQ,QACV,QAAO;AAIT,SAAO,UAAU,MAAKL;;CAGxB,WAAW,SAAyB;AAClC,SAAO,MAAKI,UAAW,UAAU,MAAKC;;;;;;AAO1C,IAAa,gBAAb,MAAkD;CAChD,YAAY,UAAkB,QAAkB,SAAgC;AAC9E,SAAO;;CAGT,WAAW,UAA0B;AACnC,SAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"unit-of-work.d.ts","names":[],"sources":["../../src/query/unit-of-work.ts"],"sourcesContent":[],"mappings":"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"}