@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
@@ -0,0 +1,50 @@
1
+ import { sql } from "kysely";
2
+
3
+ //#region src/sql-driver/sql.ts
4
+ /**
5
+ * Wrapper around Kysely's RawBuilder that provides a compile() method with a dialect parameter.
6
+ */
7
+ var RawBuilder = class {
8
+ #kyselyBuilder;
9
+ constructor(kyselyBuilder) {
10
+ this.#kyselyBuilder = kyselyBuilder;
11
+ }
12
+ /**
13
+ * Compiles the SQL query using the provided Kysely dialect.
14
+ * Creates a minimal query executor with the dialect's adapter and query compiler.
15
+ *
16
+ * @param dialect - Kysely dialect (e.g., SqliteDialect, PostgresDialect, MysqlDialect)
17
+ * @returns Compiled query with SQL string and parameters
18
+ */
19
+ compile(dialect) {
20
+ const queryCompiler = dialect.createQueryCompiler();
21
+ return this.#kyselyBuilder.compile({ getExecutor() {
22
+ return {
23
+ transformQuery(node, _queryId) {
24
+ return node;
25
+ },
26
+ compileQuery(node, queryId) {
27
+ return queryCompiler.compileQuery(node, queryId);
28
+ }
29
+ };
30
+ } });
31
+ }
32
+ };
33
+ /**
34
+ * Tagged template function for building SQL queries with parameters.
35
+ * Wraps Kysely's sql function to provide a compile() method without arguments.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const userId = 123;
40
+ * const query = sql`SELECT * FROM users WHERE id = ${userId}`;
41
+ * const compiled = query.compile();
42
+ * ```
43
+ */
44
+ function sql$1(strings, ...values) {
45
+ return new RawBuilder(sql(strings, ...values));
46
+ }
47
+
48
+ //#endregion
49
+ export { sql$1 as sql };
50
+ //# sourceMappingURL=sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.js","names":["#kyselyBuilder","sql","kyselySql"],"sources":["../../src/sql-driver/sql.ts"],"sourcesContent":["import type { CompiledQuery, Dialect } from \"./sql-driver\";\nimport {\n sql as kyselySql,\n type QueryExecutor,\n type CompiledQuery as KyselyCompiledQuery,\n} from \"kysely\";\n\n/**\n * Wrapper around Kysely's RawBuilder that provides a compile() method with a dialect parameter.\n */\nexport class RawBuilder {\n #kyselyBuilder: ReturnType<typeof kyselySql>;\n\n constructor(kyselyBuilder: ReturnType<typeof kyselySql>) {\n this.#kyselyBuilder = kyselyBuilder;\n }\n\n /**\n * Compiles the SQL query using the provided Kysely dialect.\n * Creates a minimal query executor with the dialect's adapter and query compiler.\n *\n * @param dialect - Kysely dialect (e.g., SqliteDialect, PostgresDialect, MysqlDialect)\n * @returns Compiled query with SQL string and parameters\n */\n compile(dialect: Dialect): CompiledQuery {\n const queryCompiler = dialect.createQueryCompiler();\n\n return this.#kyselyBuilder.compile({\n getExecutor(): QueryExecutor {\n return {\n transformQuery(node, _queryId) {\n return node;\n },\n compileQuery(node, queryId) {\n return queryCompiler.compileQuery(node, queryId) as KyselyCompiledQuery;\n },\n } as QueryExecutor;\n },\n });\n }\n}\n\n/**\n * Tagged template function for building SQL queries with parameters.\n * Wraps Kysely's sql function to provide a compile() method without arguments.\n *\n * @example\n * ```ts\n * const userId = 123;\n * const query = sql`SELECT * FROM users WHERE id = ${userId}`;\n * const compiled = query.compile();\n * ```\n */\nexport function sql(strings: TemplateStringsArray, ...values: unknown[]): RawBuilder {\n const kyselyBuilder = kyselySql(strings, ...values);\n return new RawBuilder(kyselyBuilder);\n}\n"],"mappings":";;;;;;AAUA,IAAa,aAAb,MAAwB;CACtB;CAEA,YAAY,eAA6C;AACvD,QAAKA,gBAAiB;;;;;;;;;CAUxB,QAAQ,SAAiC;EACvC,MAAM,gBAAgB,QAAQ,qBAAqB;AAEnD,SAAO,MAAKA,cAAe,QAAQ,EACjC,cAA6B;AAC3B,UAAO;IACL,eAAe,MAAM,UAAU;AAC7B,YAAO;;IAET,aAAa,MAAM,SAAS;AAC1B,YAAO,cAAc,aAAa,MAAM,QAAQ;;IAEnD;KAEJ,CAAC;;;;;;;;;;;;;;AAeN,SAAgBC,MAAI,SAA+B,GAAG,QAA+B;AAEnF,QAAO,IAAI,WADWC,IAAU,SAAS,GAAG,OAAO,CACf"}
@@ -1,6 +1,8 @@
1
1
  import { AnySchema } from "./schema/create.js";
2
2
  import { DatabaseFragmentDefinitionBuilder, DatabaseHandlerContext, DatabaseServiceContext, ImplicitDatabaseDependencies } from "./db-fragment-definition-builder.js";
3
- import { FragmentDefinitionBuilder, FragnoPublicConfig, RequestThisContext } from "@fragno-dev/core";
3
+ import { InternalFragmentInstance } from "./fragments/internal-fragment.js";
4
+ import { HooksMap } from "./hooks/hooks.js";
5
+ import { AnyFragnoInstantiatedFragment, FragmentDefinitionBuilder, FragnoPublicConfig, RequestThisContext } from "@fragno-dev/core";
4
6
 
5
7
  //#region src/with-database.d.ts
6
8
 
@@ -22,7 +24,9 @@ import { FragmentDefinitionBuilder, FragnoPublicConfig, RequestThisContext } fro
22
24
  * .build();
23
25
  * ```
24
26
  */
25
- declare function withDatabase<TSchema extends AnySchema>(schema: TSchema, namespace?: string): <TConfig, TDeps, TBaseServices, TServices, TServiceDeps, TPrivateServices, TServiceThisContext extends RequestThisContext, THandlerThisContext extends RequestThisContext, TRequestStorage>(builder: FragmentDefinitionBuilder<TConfig, FragnoPublicConfig, TDeps, TBaseServices, TServices, TServiceDeps, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage>) => DatabaseFragmentDefinitionBuilder<TSchema, TConfig, TDeps & ImplicitDatabaseDependencies<TSchema>, TBaseServices, TServices, TServiceDeps, TPrivateServices, DatabaseServiceContext, DatabaseHandlerContext>;
27
+ declare function withDatabase<TSchema extends AnySchema>(schema: TSchema, namespace?: string): <TConfig, TDeps, TBaseServices, TServices, TServiceDeps, TPrivateServices, TServiceThisContext extends RequestThisContext, THandlerThisContext extends RequestThisContext, TRequestStorage, TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment>>(builder: FragmentDefinitionBuilder<TConfig, FragnoPublicConfig, TDeps, TBaseServices, TServices, TServiceDeps, TPrivateServices, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments>) => DatabaseFragmentDefinitionBuilder<TSchema, TConfig, TDeps & ImplicitDatabaseDependencies<TSchema>, TBaseServices, TServices, TServiceDeps, TPrivateServices, HooksMap, DatabaseServiceContext<HooksMap>, DatabaseHandlerContext, TLinkedFragments & {
28
+ _fragno_internal: InternalFragmentInstance;
29
+ }>;
26
30
  //#endregion
27
31
  export { withDatabase };
28
32
  //# sourceMappingURL=with-database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-database.d.ts","names":[],"sources":["../src/with-database.ts"],"sourcesContent":[],"mappings":";;;;;;;AA+BA;;;;;;;;;;;;;;;;;AA4BE,iBA5Bc,YA4Bd,CAAA,gBA5B2C,SA4B3C,CAAA,CAAA,MAAA,EA3BQ,OA2BR,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,EAAA,KAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,4BAlB4B,kBAkB5B,EAAA,4BAjB4B,kBAiB5B,EAAA,eAAA,CAAA,CAAA,OAAA,EAdS,yBAcT,CAbE,OAaF,EAZE,kBAYF,EAXE,KAWF,EAVE,aAUF,EATE,SASF,EARE,YAQF,EAPE,gBAOF,EANE,mBAMF,EALE,mBAKF,EAJE,eAIF,CAAA,EAAA,GAFG,iCAEH,CADA,OACA,EAAA,OAAA,EACA,KADA,GACQ,4BADR,CACqC,OADrC,CAAA,EAEA,aAFA,EAGA,SAHA,EAIA,YAJA,EAKA,gBALA,EAMA,sBANA,EAOA,sBAPA,CAAA"}
1
+ {"version":3,"file":"with-database.d.ts","names":[],"sources":["../src/with-database.ts"],"sourcesContent":[],"mappings":";;;;;;;;;AAoCA;;;;;;;;;;;;;;;;;AA0BI,iBA1BY,YA0BZ,CAAA,gBA1ByC,SA0BzC,CAAA,CAAA,MAAA,EAzBM,OAyBN,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,EAAA,KAAA,EAAA,aAAA,EAAA,SAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,4BAhB0B,kBAgB1B,EAAA,4BAf0B,kBAe1B,EAAA,eAAA,EAAA,yBAbuB,MAavB,CAAA,MAAA,EAbsC,6BAatC,CAAA,CAAA,CAAA,OAAA,EAXO,yBAWP,CAVA,OAUA,EATA,kBASA,EARA,KAQA,EAPA,aAOA,EANA,SAMA,EALA,YAKA,EAJA,gBAIA,EAHA,mBAGA,EAFA,mBAEA,EADA,eACA,EAAA,gBAAA,CAAA,EAAA,GAEC,iCAFD,CAGF,OAHE,EAIF,OAJE,EAKF,KALE,GAKM,4BALN,CAKmC,OALnC,CAAA,EAMF,aANE,EAOF,SAPE,EAQF,YARE,EASF,gBATE,EAUF,QAVE,EAWF,sBAXE,CAWqB,QAXrB,CAAA,EAYF,sBAZE,EAaF,gBAbE,GAAA;EAXO,gBAAA,EAwB8B,wBAxB9B;CAcT,CAAA"}
@@ -23,7 +23,7 @@ import { internalFragmentDef } from "./fragments/internal-fragment.js";
23
23
  */
24
24
  function withDatabase(schema, namespace) {
25
25
  return (builder) => {
26
- return new DatabaseFragmentDefinitionBuilder(builder.name === "$fragno-internal-fragment" ? builder : builder.withLinkedFragment("_fragno_internal", ({ config, options }) => {
26
+ return new DatabaseFragmentDefinitionBuilder(builder.withLinkedFragment("_fragno_internal", ({ config, options }) => {
27
27
  return instantiate(internalFragmentDef).withConfig(config).withOptions(options).build();
28
28
  }), schema, namespace);
29
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"with-database.js","names":[],"sources":["../src/with-database.ts"],"sourcesContent":["import type { AnySchema } from \"./schema/create\";\nimport type { RequestThisContext, FragnoPublicConfig } from \"@fragno-dev/core\";\nimport { FragmentDefinitionBuilder, instantiate } from \"@fragno-dev/core\";\nimport {\n DatabaseFragmentDefinitionBuilder,\n type DatabaseServiceContext,\n type DatabaseHandlerContext,\n type ImplicitDatabaseDependencies,\n type FragnoPublicConfigWithDatabase,\n type DatabaseRequestStorage,\n} from \"./db-fragment-definition-builder\";\nimport { internalFragmentDef } from \"./fragments/internal-fragment\";\n\n/**\n * Helper to add database support to a fragment builder.\n * Automatically links the internal fragment and adds ImplicitDatabaseDependencies to the TDeps type.\n *\n * @example\n * ```typescript\n * // With .extend() - recommended\n * const def = defineFragment(\"my-frag\")\n * .extend(withDatabase(mySchema))\n * .withDependencies(...)\n * .build();\n *\n * // Or as a function wrapper\n * const def = withDatabase(mySchema)(defineFragment(\"my-frag\"))\n * .withDependencies(...)\n * .build();\n * ```\n */\nexport function withDatabase<TSchema extends AnySchema>(\n schema: TSchema,\n namespace?: string,\n): <\n TConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage,\n>(\n builder: FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage\n >,\n) => DatabaseFragmentDefinitionBuilder<\n TSchema,\n TConfig,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n DatabaseServiceContext,\n DatabaseHandlerContext\n> {\n return <\n TConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage,\n >(\n builder: FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage\n >,\n ) => {\n // Link the internal fragment to all database fragments (except the internal fragment itself)\n // No circular dependency: internal-fragment.ts uses DatabaseFragmentDefinitionBuilder directly\n const isInternalFragment = builder.name === \"$fragno-internal-fragment\";\n const builderWithInternal = isInternalFragment\n ? builder\n : builder.withLinkedFragment(\"_fragno_internal\", ({ config, options }) => {\n // Cast is safe: by the time this callback is invoked during fragment instantiation,\n // the options will be FragnoPublicConfigWithDatabase (enforced by DatabaseFragmentDefinitionBuilder)\n return instantiate(internalFragmentDef)\n .withConfig(config as {})\n .withOptions(options as FragnoPublicConfigWithDatabase)\n .build();\n });\n\n // Cast is safe: we're creating a DatabaseFragmentDefinitionBuilder which internally uses\n // FragnoPublicConfigWithDatabase, but the input builder uses FragnoPublicConfig.\n // The database builder's build() method will enforce FragnoPublicConfigWithDatabase at the end.\n // We also add ImplicitDatabaseDependencies to TDeps so they're available in service constructors.\n // Note: We discard TRequestStorage here because database fragments manage their own storage (DatabaseRequestStorage).\n // We set TServiceThisContext to DatabaseServiceContext (restricted) and THandlerThisContext to DatabaseHandlerContext (full).\n return new DatabaseFragmentDefinitionBuilder<\n TSchema,\n TConfig,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n DatabaseServiceContext,\n DatabaseHandlerContext\n >(\n builderWithInternal as unknown as FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfigWithDatabase,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n DatabaseServiceContext,\n DatabaseHandlerContext,\n DatabaseRequestStorage\n >,\n schema,\n namespace,\n );\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA+BA,SAAgB,aACd,QACA,WAkCA;AACA,SAWE,YAYG;AAqBH,SAAO,IAAI,kCAlBgB,QAAQ,SAAS,8BAExC,UACA,QAAQ,mBAAmB,qBAAqB,EAAE,QAAQ,cAAc;AAGtE,UAAO,YAAY,oBAAoB,CACpC,WAAW,OAAa,CACxB,YAAY,QAA0C,CACtD,OAAO;IACV,EA+BJ,QACA,UACD"}
1
+ {"version":3,"file":"with-database.js","names":[],"sources":["../src/with-database.ts"],"sourcesContent":["import type { AnySchema } from \"./schema/create\";\nimport type {\n RequestThisContext,\n FragnoPublicConfig,\n AnyFragnoInstantiatedFragment,\n} from \"@fragno-dev/core\";\nimport { FragmentDefinitionBuilder, instantiate } from \"@fragno-dev/core\";\nimport {\n DatabaseFragmentDefinitionBuilder,\n type DatabaseServiceContext,\n type DatabaseHandlerContext,\n type ImplicitDatabaseDependencies,\n type FragnoPublicConfigWithDatabase,\n type DatabaseRequestStorage,\n} from \"./db-fragment-definition-builder\";\nimport { internalFragmentDef, type InternalFragmentInstance } from \"./fragments/internal-fragment\";\nimport type { HooksMap } from \"./hooks/hooks\";\n\n/**\n * Helper to add database support to a fragment builder.\n * Automatically links the internal fragment and adds ImplicitDatabaseDependencies to the TDeps type.\n *\n * @example\n * ```typescript\n * // With .extend() - recommended\n * const def = defineFragment(\"my-frag\")\n * .extend(withDatabase(mySchema))\n * .withDependencies(...)\n * .build();\n *\n * // Or as a function wrapper\n * const def = withDatabase(mySchema)(defineFragment(\"my-frag\"))\n * .withDependencies(...)\n * .build();\n * ```\n */\nexport function withDatabase<TSchema extends AnySchema>(\n schema: TSchema,\n namespace?: string,\n): <\n TConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage,\n TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment>,\n>(\n builder: FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >,\n) => DatabaseFragmentDefinitionBuilder<\n TSchema,\n TConfig,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n HooksMap,\n DatabaseServiceContext<HooksMap>,\n DatabaseHandlerContext,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n> {\n return <\n TConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage,\n TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment>,\n >(\n builder: FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >,\n ) => {\n const builderWithInternal = builder.withLinkedFragment(\n \"_fragno_internal\",\n ({ config, options }) => {\n // Cast is safe: by the time this callback is invoked during fragment instantiation,\n // the options will be FragnoPublicConfigWithDatabase (enforced by DatabaseFragmentDefinitionBuilder)\n return instantiate(internalFragmentDef)\n .withConfig(config as {})\n .withOptions(options as FragnoPublicConfigWithDatabase)\n .build();\n },\n );\n\n // Cast is safe: we're creating a DatabaseFragmentDefinitionBuilder which internally uses\n // FragnoPublicConfigWithDatabase, but the input builder uses FragnoPublicConfig.\n // The database builder's build() method will enforce FragnoPublicConfigWithDatabase at the end.\n // We also add ImplicitDatabaseDependencies to TDeps so they're available in service constructors.\n // Note: We discard TRequestStorage here because database fragments manage their own storage (DatabaseRequestStorage).\n // We set TServiceThisContext to DatabaseServiceContext (restricted) and THandlerThisContext to DatabaseHandlerContext (full).\n return new DatabaseFragmentDefinitionBuilder<\n TSchema,\n TConfig,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n {}, // Start with empty hooks, provideHooks() will update this\n DatabaseServiceContext<{}>,\n DatabaseHandlerContext,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n >(\n builderWithInternal as unknown as FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfigWithDatabase,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n DatabaseServiceContext<{}>,\n DatabaseHandlerContext,\n DatabaseRequestStorage,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n >,\n schema,\n namespace,\n );\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoCA,SAAgB,aACd,QACA,WAsCA;AACA,SAYE,YAaG;AAmBH,SAAO,IAAI,kCAlBiB,QAAQ,mBAClC,qBACC,EAAE,QAAQ,cAAc;AAGvB,UAAO,YAAY,oBAAoB,CACpC,WAAW,OAAa,CACxB,YAAY,QAA0C,CACtD,OAAO;IAEb,EAkCC,QACA,UACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fragno-dev/db",
3
- "version": "0.1.15",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -18,10 +18,30 @@
18
18
  "types": "./dist/schema/create.d.ts",
19
19
  "default": "./dist/schema/create.js"
20
20
  },
21
+ "./drivers": {
22
+ "development": "./src/adapters/generic-sql/driver-config.ts",
23
+ "types": "./dist/adapters/generic-sql/driver-config.d.ts",
24
+ "default": "./dist/adapters/generic-sql/driver-config.js"
25
+ },
26
+ "./sql-driver": {
27
+ "development": "./src/sql-driver/sql-driver.ts",
28
+ "types": "./dist/sql-driver/sql-driver.d.ts",
29
+ "default": "./dist/sql-driver/sql-driver.js"
30
+ },
31
+ "./dialects": {
32
+ "development": "./src/sql-driver/dialects/dialects.ts",
33
+ "types": "./dist/sql-driver/dialects/dialects.d.ts",
34
+ "default": "./dist/sql-driver/dialects/dialects.js"
35
+ },
36
+ "./dialects/durable-object": {
37
+ "development": "./src/sql-driver/dialects/durable-object-dialect.ts",
38
+ "types": "./dist/sql-driver/dialects/durable-object-dialect.d.ts",
39
+ "default": "./dist/sql-driver/dialects/durable-object-dialect.js"
40
+ },
21
41
  "./query": {
22
- "development": "./src/query/query.ts",
23
- "types": "./dist/query/query.d.ts",
24
- "default": "./dist/query/query.js"
42
+ "development": "./src/query/simple-query-interface.ts",
43
+ "types": "./dist/query/simple-query-interface.d.ts",
44
+ "default": "./dist/query/simple-query-interface.js"
25
45
  },
26
46
  "./adapters": {
27
47
  "development": "./src/adapters/adapters.ts",
@@ -43,10 +63,15 @@
43
63
  "types": "./dist/adapters/drizzle/generate.d.ts",
44
64
  "default": "./dist/adapters/drizzle/generate.js"
45
65
  },
66
+ "./adapters/generic-sql": {
67
+ "development": "./src/adapters/generic-sql/generic-sql-adapter.ts",
68
+ "types": "./dist/adapters/generic-sql/generic-sql-adapter.d.ts",
69
+ "default": "./dist/adapters/generic-sql/generic-sql-adapter.js"
70
+ },
46
71
  "./unit-of-work": {
47
- "development": "./src/query/unit-of-work.ts",
48
- "types": "./dist/query/unit-of-work.d.ts",
49
- "default": "./dist/query/unit-of-work.js"
72
+ "development": "./src/query/unit-of-work/unit-of-work.ts",
73
+ "types": "./dist/query/unit-of-work/unit-of-work.d.ts",
74
+ "default": "./dist/query/unit-of-work/unit-of-work.js"
50
75
  },
51
76
  "./cursor": {
52
77
  "development": "./src/query/cursor.ts",
@@ -72,16 +97,18 @@
72
97
  "devDependencies": {
73
98
  "@electric-sql/pglite": "^0.3.10",
74
99
  "@libsql/client": "^0.15.15",
100
+ "@types/better-sqlite3": "^7.6.13",
75
101
  "@types/node": "^22",
76
102
  "@vitest/coverage-istanbul": "^3.2.4",
103
+ "better-sqlite3": "^12.5.0",
77
104
  "drizzle-kit": "^0.31.5",
78
105
  "drizzle-orm": "^0.44.6",
79
106
  "kysely-pglite": "^0.6.1",
80
107
  "mysql2": "^3.11.5",
108
+ "sqlocal": "^0.15.2",
81
109
  "vitest": "^3.2.4",
82
110
  "zod": "^4.1.12",
83
- "sqlocal": "^0.15.2",
84
- "@fragno-dev/core": "0.1.9",
111
+ "@fragno-dev/core": "0.1.11",
85
112
  "@fragno-private/typescript-config": "0.0.1",
86
113
  "@fragno-private/vitest-config": "0.0.0"
87
114
  },
@@ -93,7 +120,7 @@
93
120
  "homepage": "https://fragno.dev",
94
121
  "license": "MIT",
95
122
  "dependencies": {
96
- "@paralleldrive/cuid2": "^2.2.2",
123
+ "@paralleldrive/cuid2": "^2.3.1",
97
124
  "kysely": "^0.28.7"
98
125
  },
99
126
  "peerDependencies": {
@@ -1,9 +1,9 @@
1
- import type { Migrator } from "../migration-engine/create";
2
- import type { AbstractQuery } from "../query/query";
1
+ import type { SimpleQueryInterface } from "../query/simple-query-interface";
3
2
  import type { SchemaGenerator } from "../schema-generator/schema-generator";
4
3
  import type { AnySchema } from "../schema/create";
5
4
  import type { RequestContextStorage } from "@fragno-dev/core/internal/request-context-storage";
6
- import type { IUnitOfWork } from "../query/unit-of-work";
5
+ import type { IUnitOfWork } from "../query/unit-of-work/unit-of-work";
6
+ import type { PreparedMigrations } from "./generic-sql/migration/prepared-migrations";
7
7
 
8
8
  export const fragnoDatabaseAdapterNameFakeSymbol = "$fragno-database-adapter-name" as const;
9
9
  export const fragnoDatabaseAdapterVersionFakeSymbol = "$fragno-database-adapter-version" as const;
@@ -42,9 +42,12 @@ export interface DatabaseAdapter<TUOWConfig = void> {
42
42
  createQueryEngine: <const T extends AnySchema>(
43
43
  schema: T,
44
44
  namespace: string,
45
- ) => AbstractQuery<T, TUOWConfig>;
45
+ ) => SimpleQueryInterface<T, TUOWConfig>;
46
46
 
47
- createMigrationEngine?: <const T extends AnySchema>(schema: T, namespace: string) => Migrator;
47
+ prepareMigrations?: <const T extends AnySchema>(
48
+ schema: T,
49
+ namespace: string,
50
+ ) => PreparedMigrations;
48
51
 
49
52
  /**
50
53
  * Generate a combined schema file from one or more fragments.
@@ -1,19 +1,17 @@
1
- import { drizzle } from "drizzle-orm/pglite";
1
+ import { PGlite } from "@electric-sql/pglite";
2
+ import { KyselyPGlite } from "kysely-pglite";
2
3
  import { DrizzleAdapter } from "./drizzle-adapter";
3
4
  import { beforeAll, describe, expect, expectTypeOf, it } from "vitest";
4
5
  import { column, idColumn, referenceColumn, schema } from "../../schema/create";
5
- import type { DBType } from "./shared";
6
- import { createRequire } from "node:module";
7
6
  import { Cursor } from "../../query/cursor";
8
- import type { DrizzleCompiledQuery } from "./drizzle-uow-compiler";
9
- import { writeAndLoadSchema } from "./test-utils";
10
-
11
- // Import drizzle-kit for migrations
12
- const require = createRequire(import.meta.url);
13
- const { generateDrizzleJson, generateMigration } =
14
- require("drizzle-kit/api") as typeof import("drizzle-kit/api");
7
+ import { PGLiteDriverConfig } from "../generic-sql/driver-config";
8
+ import type { CompiledQuery } from "../../sql-driver/sql-driver";
9
+ import { internalSchema } from "../../fragments/internal-fragment";
15
10
 
16
11
  describe("DrizzleAdapter PGLite", () => {
12
+ let pgliteDatabase: PGlite;
13
+ let adapter: DrizzleAdapter;
14
+
17
15
  const testSchema = schema((s) => {
18
16
  return s
19
17
  .addTable("users", (t) => {
@@ -75,43 +73,54 @@ describe("DrizzleAdapter PGLite", () => {
75
73
  });
76
74
  });
77
75
 
78
- let adapter: DrizzleAdapter;
79
- let db: DBType;
76
+ const schema2 = schema((s) => {
77
+ return s
78
+ .addTable("products", (t) => {
79
+ return t
80
+ .addColumn("id", idColumn())
81
+ .addColumn("name", column("string"))
82
+ .addColumn("price", column("integer"))
83
+ .createIndex("name_idx", ["name"]);
84
+ })
85
+ .addTable("orders", (t) => {
86
+ return t
87
+ .addColumn("id", idColumn())
88
+ .addColumn("product_id", referenceColumn())
89
+ .addColumn("quantity", column("integer"))
90
+ .addColumn("user_id", referenceColumn())
91
+ .createIndex("orders_user_idx", ["user_id"])
92
+ .createIndex("orders_product_idx", ["product_id"]);
93
+ });
94
+ });
80
95
 
81
96
  beforeAll(async () => {
82
- // Write schema to file and dynamically import it
83
- const { schemaModule, cleanup } = await writeAndLoadSchema(
84
- "drizzle-adapter-pglite",
85
- testSchema,
86
- "postgresql",
87
- "namespace",
88
- );
97
+ pgliteDatabase = new PGlite();
89
98
 
90
- // Create Drizzle instance with PGLite (in-memory Postgres)
91
- db = drizzle({
92
- schema: schemaModule,
93
- }) as unknown as DBType;
99
+ const { dialect } = new KyselyPGlite(pgliteDatabase);
94
100
 
95
- // Generate and run migrations
96
- const migrationStatements = await generateMigration(
97
- generateDrizzleJson({}), // Empty schema (starting state)
98
- generateDrizzleJson(schemaModule), // Target schema
99
- );
101
+ adapter = new DrizzleAdapter({
102
+ dialect,
103
+ driverConfig: new PGLiteDriverConfig(),
104
+ });
100
105
 
101
- // Execute migration SQL
102
- for (const statement of migrationStatements) {
103
- await db.execute(statement);
106
+ // Create settings table first (needed for version tracking)
107
+ {
108
+ const migrations = adapter.prepareMigrations(internalSchema, "");
109
+ await migrations.executeWithDriver(adapter.driver, 0);
104
110
  }
105
111
 
106
- adapter = new DrizzleAdapter({
107
- db: () => db,
108
- provider: "postgresql",
109
- });
112
+ {
113
+ const migrations = adapter.prepareMigrations(testSchema, "namespace");
114
+ await migrations.executeWithDriver(adapter.driver, 0);
115
+ }
110
116
 
111
- expect(await adapter.isConnectionHealthy()).toBe(true);
117
+ {
118
+ const migrations = adapter.prepareMigrations(schema2, "namespace2");
119
+ await migrations.executeWithDriver(adapter.driver, 0);
120
+ }
112
121
 
113
122
  return async () => {
114
- await cleanup();
123
+ await adapter.close();
115
124
  };
116
125
  }, 12000);
117
126
 
@@ -277,7 +286,7 @@ describe("DrizzleAdapter PGLite", () => {
277
286
 
278
287
  it("should support joins", async () => {
279
288
  const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
280
- const queries: DrizzleCompiledQuery[] = [];
289
+ const queries: CompiledQuery[] = [];
281
290
 
282
291
  const createUow = queryEngine.createUnitOfWork("create-users");
283
292
  createUow.create("users", { name: "Email User", age: 20 });
@@ -312,23 +321,23 @@ describe("DrizzleAdapter PGLite", () => {
312
321
 
313
322
  const [query] = queries;
314
323
  expect(query.sql).toMatchInlineSnapshot(
315
- `"select "emails_namespace"."id", "emails_namespace"."user_id", "emails_namespace"."email", "emails_namespace"."is_primary", "emails_namespace"."_internalId", "emails_namespace"."_version", "emails_namespace_user"."data" as "user" from "emails_namespace" "emails_namespace" left join lateral (select json_build_array("emails_namespace_user"."name", "emails_namespace_user"."id", "emails_namespace_user"."age", "emails_namespace_user"."_internalId", "emails_namespace_user"."_version") as "data" from (select * from "users_namespace" "emails_namespace_user" where "emails_namespace_user"."_internalId" = "emails_namespace"."user_id" limit $1) "emails_namespace_user") "emails_namespace_user" on true"`,
324
+ `"select "user"."name" as "user:name", "user"."id" as "user:id", "user"."age" as "user:age", "user"."_internalId" as "user:_internalId", "user"."_version" as "user:_version", "emails_namespace"."id" as "id", "emails_namespace"."user_id" as "user_id", "emails_namespace"."email" as "email", "emails_namespace"."is_primary" as "is_primary", "emails_namespace"."_internalId" as "_internalId", "emails_namespace"."_version" as "_version" from "emails_namespace" left join "users_namespace" as "user" on "emails_namespace"."user_id" = "user"."_internalId""`,
316
325
  );
317
326
 
318
327
  expect(email).toMatchObject({
319
328
  id: expect.objectContaining({
320
329
  externalId: expect.stringMatching(/^[a-z0-9]{20,}$/),
321
- internalId: expect.any(Number),
330
+ internalId: expect.any(BigInt),
322
331
  }),
323
332
  user_id: expect.objectContaining({
324
- internalId: expect.any(Number),
333
+ internalId: expect.any(BigInt),
325
334
  }),
326
335
  email: "test@example.com",
327
336
  is_primary: true,
328
337
  user: {
329
338
  id: expect.objectContaining({
330
339
  externalId: expect.stringMatching(/^[a-z0-9]{20,}$/),
331
- internalId: expect.any(Number),
340
+ internalId: expect.any(BigInt),
332
341
  }),
333
342
  name: existingUser.name,
334
343
  age: existingUser.age,
@@ -390,7 +399,7 @@ describe("DrizzleAdapter PGLite", () => {
390
399
 
391
400
  it("should support complex nested joins (comments -> post -> author)", async () => {
392
401
  const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
393
- const queries: DrizzleCompiledQuery[] = [];
402
+ const queries: CompiledQuery[] = [];
394
403
 
395
404
  // Create a user (author)
396
405
  const createAuthorUow = queryEngine.createUnitOfWork("create-author");
@@ -463,7 +472,7 @@ describe("DrizzleAdapter PGLite", () => {
463
472
  expect(comment).toMatchObject({
464
473
  id: expect.objectContaining({
465
474
  externalId: expect.stringMatching(/^[a-z0-9]{20,}$/),
466
- internalId: expect.any(Number),
475
+ internalId: expect.any(BigInt),
467
476
  }),
468
477
  text: "Great post!",
469
478
  // Post join (first level)
@@ -493,127 +502,8 @@ describe("DrizzleAdapter PGLite", () => {
493
502
 
494
503
  const [query] = queries;
495
504
  expect(query.sql).toMatchInlineSnapshot(
496
- `"select "comments_namespace"."id", "comments_namespace"."post_id", "comments_namespace"."user_id", "comments_namespace"."text", "comments_namespace"."_internalId", "comments_namespace"."_version", "comments_namespace_post"."data" as "post", "comments_namespace_commenter"."data" as "commenter" from "comments_namespace" "comments_namespace" left join lateral (select json_build_array("comments_namespace_post"."id", "comments_namespace_post"."title", "comments_namespace_post"."content", "comments_namespace_post"."_internalId", "comments_namespace_post"."_version", "comments_namespace_post_author"."data") as "data" from (select * from "posts_namespace" "comments_namespace_post" where "comments_namespace_post"."_internalId" = "comments_namespace"."post_id" order by "comments_namespace_post"."id" desc limit $1) "comments_namespace_post" left join lateral (select json_build_array("comments_namespace_post_author"."id", "comments_namespace_post_author"."name", "comments_namespace_post_author"."age", "comments_namespace_post_author"."_internalId", "comments_namespace_post_author"."_version") as "data" from (select * from "users_namespace" "comments_namespace_post_author" where "comments_namespace_post_author"."_internalId" = "comments_namespace_post"."user_id" order by "comments_namespace_post_author"."name" asc limit $2) "comments_namespace_post_author") "comments_namespace_post_author" on true) "comments_namespace_post" on true left join lateral (select json_build_array("comments_namespace_commenter"."id", "comments_namespace_commenter"."name", "comments_namespace_commenter"."_internalId", "comments_namespace_commenter"."_version") as "data" from (select * from "users_namespace" "comments_namespace_commenter" where "comments_namespace_commenter"."_internalId" = "comments_namespace"."user_id" limit $3) "comments_namespace_commenter") "comments_namespace_commenter" on true"`,
497
- );
498
- });
499
-
500
- it("should support joins with convenience aliases when relations are also aliased", async () => {
501
- // This test demonstrates the solution: include BOTH table aliases AND relations aliases
502
- // in the same schema object. This works around Drizzle's relation resolution bug.
503
- //
504
- // The bug: When Drizzle processes a relational query with `.join()`, it looks up
505
- // tableConfig.relations[relationKey]. If the tableConfig comes from an alias that
506
- // doesn't have matching relations, it returns undefined and crashes.
507
- //
508
- // The fix: For each table alias (e.g., `user`), also add a relations alias
509
- // (e.g., `userRelations`) pointing to the same relations object.
510
-
511
- const authSchema = schema((s) => {
512
- return s
513
- .addTable("user", (t) => {
514
- return t
515
- .addColumn("id", idColumn())
516
- .addColumn("email", column("string"))
517
- .addColumn("passwordHash", column("string"));
518
- })
519
- .addTable("session", (t) => {
520
- return t
521
- .addColumn("id", idColumn())
522
- .addColumn("userId", referenceColumn())
523
- .addColumn("expiresAt", column("timestamp"));
524
- })
525
- .addReference("sessionOwner", {
526
- from: { table: "session", column: "userId" },
527
- to: { table: "user", column: "id" },
528
- type: "one",
529
- });
530
- });
531
-
532
- // Generate schema with BOTH table aliases AND relations aliases
533
- const { schemaModule, cleanup } = await writeAndLoadSchema(
534
- "drizzle-adapter-with-relations-aliases",
535
- authSchema,
536
- "postgresql",
537
- "test-namespace",
505
+ `"select "post"."id" as "post:id", "post"."title" as "post:title", "post"."content" as "post:content", "post"."_internalId" as "post:_internalId", "post"."_version" as "post:_version", "post_author"."id" as "post:author:id", "post_author"."name" as "post:author:name", "post_author"."age" as "post:author:age", "post_author"."_internalId" as "post:author:_internalId", "post_author"."_version" as "post:author:_version", "commenter"."id" as "commenter:id", "commenter"."name" as "commenter:name", "commenter"."_internalId" as "commenter:_internalId", "commenter"."_version" as "commenter:_version", "comments_namespace"."id" as "id", "comments_namespace"."post_id" as "post_id", "comments_namespace"."user_id" as "user_id", "comments_namespace"."text" as "text", "comments_namespace"."_internalId" as "_internalId", "comments_namespace"."_version" as "_version" from "comments_namespace" left join "posts_namespace" as "post" on "comments_namespace"."post_id" = "post"."_internalId" left join "users_namespace" as "post_author" on "post"."user_id" = "post_author"."_internalId" left join "users_namespace" as "commenter" on "comments_namespace"."user_id" = "commenter"."_internalId""`,
538
506
  );
539
-
540
- // The schema now includes:
541
- // - user_test_namespace + user_test_namespaceRelations (physical)
542
- // - user + userRelations (aliases that point to the same objects)
543
- const schemaWithAliases = {
544
- ...schemaModule.test_namespace_schema,
545
- };
546
-
547
- // Create Drizzle instance
548
- const db = drizzle({
549
- schema: schemaWithAliases,
550
- }) as unknown as DBType;
551
-
552
- // Generate and run migrations
553
- const require = createRequire(import.meta.url);
554
- const { generateDrizzleJson, generateMigration } =
555
- require("drizzle-kit/api") as typeof import("drizzle-kit/api");
556
-
557
- const migrationStatements = await generateMigration(
558
- generateDrizzleJson({}),
559
- generateDrizzleJson(schemaModule),
560
- );
561
-
562
- for (const statement of migrationStatements) {
563
- await db.execute(statement);
564
- }
565
-
566
- const adapter = new DrizzleAdapter({
567
- db: async () => db,
568
- provider: "postgresql",
569
- });
570
-
571
- await adapter.isConnectionHealthy();
572
- const queryEngine = adapter.createQueryEngine(authSchema, "test-namespace");
573
-
574
- // Create a user
575
- const createUserUow = queryEngine.createUnitOfWork("create-user");
576
- createUserUow.create("user", {
577
- email: "test@example.com",
578
- passwordHash: "hash",
579
- });
580
- await createUserUow.executeMutations();
581
-
582
- // Create a session
583
- const [[user]] = await queryEngine.createUnitOfWork("get-user").find("user").executeRetrieve();
584
-
585
- const createSessionUow = queryEngine.createUnitOfWork("create-session");
586
- createSessionUow.create("session", {
587
- userId: user.id,
588
- expiresAt: new Date("2025-12-31"),
589
- });
590
- await createSessionUow.executeMutations();
591
-
592
- // Get session
593
- const [[session]] = await queryEngine
594
- .createUnitOfWork("get-session")
595
- .find("session")
596
- .executeRetrieve();
597
-
598
- // Find session with join - this works now!
599
- // The key is that when Drizzle looks up the session's relations,
600
- // it finds BOTH `sessionOwner` (from session_test_namespaceRelations)
601
- // AND the same relations via `sessionRelations` (the alias)
602
- const [[sessionWithUser]] = await queryEngine
603
- .createUnitOfWork("find-session-with-join")
604
- .find("session", (b) =>
605
- b
606
- .whereIndex("primary", (eb) => eb("id", "=", session.id.valueOf()))
607
- .join((j) => j.sessionOwner((b) => b.select(["id", "email"]))),
608
- )
609
- .executeRetrieve();
610
-
611
- // Verify the join worked
612
- expect(sessionWithUser).toBeDefined();
613
- expect(sessionWithUser.sessionOwner).toBeDefined();
614
- expect(sessionWithUser.sessionOwner?.email).toBe("test@example.com");
615
-
616
- await cleanup();
617
507
  });
618
508
 
619
509
  it("should handle timestamps and timezones correctly", async () => {
@@ -673,7 +563,7 @@ describe("DrizzleAdapter PGLite", () => {
673
563
 
674
564
  it("should create user and post in same transaction using returned ID", async () => {
675
565
  const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
676
- const queries: DrizzleCompiledQuery[] = [];
566
+ const queries: CompiledQuery[] = [];
677
567
 
678
568
  // Create UOW and create both user and post in same transaction
679
569
  const uow = queryEngine.createUnitOfWork("create-user-and-post", {
@@ -723,15 +613,16 @@ describe("DrizzleAdapter PGLite", () => {
723
613
 
724
614
  const [insertUserQuery, insertPostQuery] = queries;
725
615
  expect(insertUserQuery.sql).toMatchInlineSnapshot(
726
- `"insert into "users_namespace" ("id", "name", "age", "_internalId", "_version") values ($1, $2, $3, default, default)"`,
616
+ `"insert into "users_namespace" ("id", "name", "age") values ($1, $2, $3) returning "users_namespace"."id" as "id", "users_namespace"."name" as "name", "users_namespace"."age" as "age", "users_namespace"."_internalId" as "_internalId", "users_namespace"."_version" as "_version""`,
727
617
  );
728
- expect(insertUserQuery.params).toEqual([userId.externalId, "UOW Test User", 35]);
618
+ expect(insertUserQuery.parameters).toEqual([userId.externalId, "UOW Test User", 35]);
729
619
  expect(insertPostQuery.sql).toMatchInlineSnapshot(
730
- `"insert into "posts_namespace" ("id", "user_id", "title", "content", "created_at", "_internalId", "_version") values ($1, (select "_internalId" from "users_namespace" where "id" = $2 limit 1), $3, $4, default, default, default)"`,
620
+ `"insert into "posts_namespace" ("id", "user_id", "title", "content") values ($1, (select "_internalId" from "users_namespace" where "id" = $2 limit $3), $4, $5) returning "posts_namespace"."id" as "id", "posts_namespace"."user_id" as "user_id", "posts_namespace"."title" as "title", "posts_namespace"."content" as "content", "posts_namespace"."created_at" as "created_at", "posts_namespace"."_internalId" as "_internalId", "posts_namespace"."_version" as "_version""`,
731
621
  );
732
- expect(insertPostQuery.params).toEqual([
622
+ expect(insertPostQuery.parameters).toEqual([
733
623
  postId.externalId,
734
624
  userId.externalId,
625
+ 1,
735
626
  "UOW Test Post",
736
627
  "This post was created in the same transaction as the user",
737
628
  ]);