@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,397 +1,11 @@
1
1
  import { assert, describe, expect, it } from "vitest";
2
2
  import { column, idColumn, referenceColumn, schema, FragnoId } from "../schema/create";
3
- import { decodeResult, encodeValues, ReferenceSubquery } from "./result-transform";
4
-
5
- describe("encodeValues", () => {
6
- const testSchema = schema((s) => {
7
- return s
8
- .addTable("users", (t) => {
9
- return t
10
- .addColumn("id", idColumn())
11
- .addColumn("name", column("string"))
12
- .addColumn("email", column("string"))
13
- .addColumn("age", column("integer").nullable())
14
- .addColumn("isActive", column("bool"))
15
- .addColumn("createdAt", column("timestamp"));
16
- })
17
- .addTable("posts", (t) => {
18
- return t
19
- .addColumn("id", idColumn())
20
- .addColumn("title", column("string"))
21
- .addColumn("userId", referenceColumn())
22
- .addColumn("viewCount", column("integer").defaultTo(0))
23
- .addColumn("publishedAt", column("timestamp").nullable());
24
- })
25
- .addReference("author", {
26
- type: "one",
27
- from: { table: "posts", column: "userId" },
28
- to: { table: "users", column: "id" },
29
- });
30
- });
31
-
32
- const usersTable = testSchema.tables.users;
33
- const postsTable = testSchema.tables.posts;
34
-
35
- describe("basic encoding", () => {
36
- it("should encode string values", () => {
37
- const result = encodeValues(
38
- { id: "user1", name: "John", email: "john@example.com" },
39
- usersTable,
40
- false,
41
- "sqlite",
42
- );
43
-
44
- expect(result).toEqual({
45
- id: "user1",
46
- name: "John",
47
- email: "john@example.com",
48
- });
49
- });
50
-
51
- it("should encode integer values", () => {
52
- const result = encodeValues({ age: 25 }, usersTable, false, "sqlite");
53
-
54
- expect(result).toEqual({ age: 25 });
55
- });
56
-
57
- it("should encode boolean values for sqlite", () => {
58
- const result = encodeValues({ isActive: true }, usersTable, false, "sqlite");
59
-
60
- expect(result).toEqual({ isActive: 1 });
61
- });
62
-
63
- it("should encode boolean values for postgresql", () => {
64
- const result = encodeValues({ isActive: true }, usersTable, false, "postgresql");
65
-
66
- expect(result).toEqual({ isActive: true });
67
- });
68
- });
69
-
70
- describe("date encoding", () => {
71
- it("should encode Date to number for sqlite", () => {
72
- const date = new Date("2024-01-15T10:30:00Z");
73
- const result = encodeValues({ createdAt: date }, usersTable, false, "sqlite");
74
-
75
- expect(result).toEqual({ createdAt: date.getTime() });
76
- });
77
-
78
- it("should keep Date as Date for postgresql", () => {
79
- const date = new Date("2024-01-15T10:30:00Z");
80
- const result = encodeValues({ createdAt: date }, usersTable, false, "postgresql");
81
-
82
- expect(result).toEqual({ createdAt: date });
83
- });
84
-
85
- it("should keep Date as Date for mysql", () => {
86
- const date = new Date("2024-01-15T10:30:00Z");
87
- const result = encodeValues({ createdAt: date }, usersTable, false, "mysql");
88
-
89
- expect(result).toEqual({ createdAt: date });
90
- });
91
- });
92
-
93
- describe("nullable columns", () => {
94
- it("should handle null values", () => {
95
- const result = encodeValues({ age: null }, usersTable, false, "sqlite");
96
-
97
- expect(result).toEqual({ age: null });
98
- });
99
-
100
- it("should omit undefined values", () => {
101
- const result = encodeValues({ age: undefined }, usersTable, false, "sqlite");
102
-
103
- expect(result).toEqual({});
104
- });
105
-
106
- it("should handle nullable timestamp", () => {
107
- const result = encodeValues({ publishedAt: null }, postsTable, false, "sqlite");
108
-
109
- expect(result).toEqual({ publishedAt: null });
110
- });
111
- });
112
-
113
- describe("default value generation", () => {
114
- it("should generate runtime defaults when generateDefault is true", () => {
115
- const result = encodeValues(
116
- { title: "Test Post", userId: "user1" },
117
- postsTable,
118
- true,
119
- "sqlite",
120
- );
121
-
122
- expect(result["title"]).toBe("Test Post");
123
- expect(result["userId"]).instanceOf(ReferenceSubquery);
124
- // viewCount has static default (defaultTo), so it's omitted to let DB handle it
125
- expect(result["viewCount"]).toBeUndefined();
126
- expect(result["id"]).toBeDefined();
127
- expect(typeof result["id"]).toBe("string");
128
- });
129
-
130
- it("should not generate default values when generateDefault is false", () => {
131
- const result = encodeValues(
132
- { title: "Test Post", userId: "user1" },
133
- postsTable,
134
- false,
135
- "sqlite",
136
- );
137
-
138
- expect(result).toEqual({
139
- title: "Test Post",
140
- userId: expect.any(ReferenceSubquery),
141
- });
142
- });
143
-
144
- it("should not override explicitly provided values", () => {
145
- const result = encodeValues(
146
- { title: "Test Post", userId: "user1", viewCount: 100 },
147
- postsTable,
148
- true,
149
- "sqlite",
150
- );
151
-
152
- expect(result["viewCount"]).toBe(100);
153
- });
154
- });
155
-
156
- describe("complete record encoding", () => {
157
- it("should encode all fields correctly", () => {
158
- const date = new Date("2024-01-15T10:30:00Z");
159
- const result = encodeValues(
160
- {
161
- id: "user1",
162
- name: "Alice",
163
- email: "alice@example.com",
164
- age: 30,
165
- isActive: false,
166
- createdAt: date,
167
- },
168
- usersTable,
169
- false,
170
- "sqlite",
171
- );
172
-
173
- expect(result).toEqual({
174
- id: "user1",
175
- name: "Alice",
176
- email: "alice@example.com",
177
- age: 30,
178
- isActive: 0,
179
- createdAt: date.getTime(),
180
- });
181
- });
182
- });
183
-
184
- describe("FragnoId encoding", () => {
185
- it("should encode FragnoId with external ID only", () => {
186
- const fragnoId = FragnoId.fromExternal("user123", 1);
187
- const result = encodeValues({ id: fragnoId, name: "John" }, usersTable, false, "postgresql");
188
-
189
- expect(result).toEqual({
190
- id: "user123",
191
- name: "John",
192
- });
193
- });
194
-
195
- it("should encode FragnoId with both IDs", () => {
196
- const fragnoId = new FragnoId({
197
- externalId: "user123",
198
- internalId: BigInt(456),
199
- version: 1,
200
- });
201
- const result = encodeValues({ id: fragnoId, name: "John" }, usersTable, false, "postgresql");
202
-
203
- expect(result).toEqual({
204
- id: "user123",
205
- name: "John",
206
- });
207
- });
208
-
209
- it("should encode FragnoId in reference columns", () => {
210
- const fragnoId = new FragnoId({
211
- externalId: "user123",
212
- internalId: BigInt(456),
213
- version: 1,
214
- });
215
- const result = encodeValues(
216
- { title: "Test Post", userId: fragnoId },
217
- postsTable,
218
- false,
219
- "postgresql",
220
- );
221
-
222
- // Reference columns should use the internal ID (bigint)
223
- expect(result).toEqual({
224
- title: "Test Post",
225
- userId: BigInt(456),
226
- });
227
- });
228
-
229
- it("should convert FragnoId without internalId to ReferenceSubquery for reference columns", () => {
230
- const fragnoId = new FragnoId({
231
- externalId: "user123",
232
- version: 1,
233
- });
234
- const result = encodeValues(
235
- { title: "Test Post", userId: fragnoId },
236
- postsTable,
237
- false,
238
- "postgresql",
239
- );
240
-
241
- // FragnoId without internalId should be converted to ReferenceSubquery for database lookup
242
- expect(result["title"]).toBe("Test Post");
243
- expect(result["userId"]).toBeInstanceOf(ReferenceSubquery);
244
- expect((result["userId"] as ReferenceSubquery).externalIdValue).toBe("user123");
245
- });
246
-
247
- it("should handle FragnoId across different providers", () => {
248
- const fragnoId = new FragnoId({
249
- externalId: "user123",
250
- internalId: BigInt(456),
251
- version: 1,
252
- });
253
- const testData = { id: fragnoId, name: "John" };
254
-
255
- // Test across providers
256
- const sqliteResult = encodeValues(testData, usersTable, false, "sqlite");
257
- const postgresqlResult = encodeValues(testData, usersTable, false, "postgresql");
258
- const mysqlResult = encodeValues(testData, usersTable, false, "mysql");
259
-
260
- expect(sqliteResult).toEqual({ id: "user123", name: "John" });
261
- expect(postgresqlResult).toEqual({ id: "user123", name: "John" });
262
- expect(mysqlResult).toEqual({ id: "user123", name: "John" });
263
- });
264
- });
265
-
266
- describe("skipDriverConversions parameter", () => {
267
- it("should skip Date to number conversion for sqlite when skipDriverConversions is true", () => {
268
- const date = new Date("2024-01-15T10:30:00Z");
269
- const result = encodeValues({ createdAt: date }, usersTable, false, "sqlite", true);
270
-
271
- // Date should remain as Date object, not converted to timestamp
272
- expect(result).toEqual({ createdAt: date });
273
- });
274
-
275
- it("should skip boolean to number conversion for sqlite when skipDriverConversions is true", () => {
276
- const result = encodeValues({ isActive: true }, usersTable, false, "sqlite", true);
277
-
278
- // Boolean should remain as boolean, not converted to 1
279
- expect(result).toEqual({ isActive: true });
280
- });
281
-
282
- it("should skip bigint to Buffer conversion for sqlite when skipDriverConversions is true", () => {
283
- const schemaWithBigInt = schema((s) => {
284
- return s.addTable("items", (t) => {
285
- return t.addColumn("id", idColumn()).addColumn("count", column("bigint"));
286
- });
287
- });
288
-
289
- const result = encodeValues(
290
- { count: BigInt(12345) },
291
- schemaWithBigInt.tables.items,
292
- false,
293
- "sqlite",
294
- true,
295
- );
296
-
297
- // BigInt should remain as bigint, not converted to Buffer
298
- expect(result).toEqual({ count: BigInt(12345) });
299
- });
300
-
301
- it("should still perform conversions for sqlite when skipDriverConversions is false", () => {
302
- const date = new Date("2024-01-15T10:30:00Z");
303
- const result = encodeValues(
304
- { createdAt: date, isActive: true },
305
- usersTable,
306
- false,
307
- "sqlite",
308
- false,
309
- );
310
-
311
- // Conversions should happen as normal
312
- expect(result).toEqual({ createdAt: date.getTime(), isActive: 1 });
313
- });
314
-
315
- it("should not affect PostgreSQL encoding (no conversions to skip)", () => {
316
- const date = new Date("2024-01-15T10:30:00Z");
317
- const resultWithSkip = encodeValues(
318
- { createdAt: date },
319
- usersTable,
320
- false,
321
- "postgresql",
322
- true,
323
- );
324
- const resultWithoutSkip = encodeValues(
325
- { createdAt: date },
326
- usersTable,
327
- false,
328
- "postgresql",
329
- false,
330
- );
331
-
332
- // Both should be the same since PostgreSQL doesn't do these conversions
333
- expect(resultWithSkip).toEqual({ createdAt: date });
334
- expect(resultWithoutSkip).toEqual({ createdAt: date });
335
- });
336
-
337
- it("should work with complete record encoding when skipDriverConversions is true", () => {
338
- const date = new Date("2024-01-15T10:30:00Z");
339
- const result = encodeValues(
340
- {
341
- id: "user1",
342
- name: "Alice",
343
- email: "alice@example.com",
344
- age: 30,
345
- isActive: false,
346
- createdAt: date,
347
- },
348
- usersTable,
349
- false,
350
- "sqlite",
351
- true,
352
- );
353
-
354
- // All values should remain in their original types
355
- expect(result).toEqual({
356
- id: "user1",
357
- name: "Alice",
358
- email: "alice@example.com",
359
- age: 30,
360
- isActive: false, // Not converted to 0
361
- createdAt: date, // Not converted to timestamp
362
- });
363
- });
364
-
365
- it("should still handle FragnoId and ReferenceSubquery correctly with skipDriverConversions", () => {
366
- const fragnoId = FragnoId.fromExternal("user123", 1);
367
- const result = encodeValues(
368
- { id: fragnoId, name: "John" },
369
- usersTable,
370
- false,
371
- "sqlite",
372
- true,
373
- );
374
-
375
- // FragnoId handling should still work
376
- expect(result).toEqual({
377
- id: "user123",
378
- name: "John",
379
- });
380
-
381
- // Test ReferenceSubquery
382
- const refResult = encodeValues(
383
- { title: "Test Post", userId: "user_external_id" },
384
- postsTable,
385
- false,
386
- "sqlite",
387
- true,
388
- );
389
-
390
- expect(refResult["title"]).toBe("Test Post");
391
- expect(refResult["userId"]).toBeInstanceOf(ReferenceSubquery);
392
- });
393
- });
394
- });
3
+ import { decodeResult } from "./value-decoding";
4
+ import {
5
+ SQLocalDriverConfig,
6
+ NodePostgresDriverConfig,
7
+ MySQL2DriverConfig,
8
+ } from "../adapters/generic-sql/driver-config";
395
9
 
396
10
  describe("decodeResult", () => {
397
11
  const testSchema = schema((s) => {
@@ -424,12 +38,16 @@ describe("decodeResult", () => {
424
38
  const usersTable = testSchema.tables.users;
425
39
  const postsTable = testSchema.tables.posts;
426
40
 
41
+ const sqliteConfig = new SQLocalDriverConfig();
42
+ const postgresqlConfig = new NodePostgresDriverConfig();
43
+ const mysqlConfig = new MySQL2DriverConfig();
44
+
427
45
  describe("basic decoding", () => {
428
46
  it("should decode string values", () => {
429
47
  const result = decodeResult(
430
48
  { id: "user1", name: "John", email: "john@example.com" },
431
49
  usersTable,
432
- "sqlite",
50
+ sqliteConfig,
433
51
  );
434
52
 
435
53
  expect(result).toEqual({
@@ -440,25 +58,25 @@ describe("decodeResult", () => {
440
58
  });
441
59
 
442
60
  it("should decode integer values", () => {
443
- const result = decodeResult({ age: 25 }, usersTable, "sqlite");
61
+ const result = decodeResult({ age: 25 }, usersTable, sqliteConfig);
444
62
 
445
63
  expect(result).toEqual({ age: 25 });
446
64
  });
447
65
 
448
66
  it("should decode boolean values from sqlite", () => {
449
- const result = decodeResult({ isActive: 1 }, usersTable, "sqlite");
67
+ const result = decodeResult({ isActive: 1 }, usersTable, sqliteConfig);
450
68
 
451
69
  expect(result).toEqual({ isActive: true });
452
70
  });
453
71
 
454
72
  it("should decode boolean false from sqlite", () => {
455
- const result = decodeResult({ isActive: 0 }, usersTable, "sqlite");
73
+ const result = decodeResult({ isActive: 0 }, usersTable, sqliteConfig);
456
74
 
457
75
  expect(result).toEqual({ isActive: false });
458
76
  });
459
77
 
460
78
  it("should decode boolean values from postgresql", () => {
461
- const result = decodeResult({ isActive: true }, usersTable, "postgresql");
79
+ const result = decodeResult({ isActive: true }, usersTable, postgresqlConfig);
462
80
 
463
81
  expect(result).toEqual({ isActive: true });
464
82
  });
@@ -467,7 +85,7 @@ describe("decodeResult", () => {
467
85
  describe("date decoding", () => {
468
86
  it("should decode number to Date for sqlite timestamp", () => {
469
87
  const timestamp = 1705317000000;
470
- const result = decodeResult({ createdAt: timestamp }, usersTable, "sqlite");
88
+ const result = decodeResult({ createdAt: timestamp }, usersTable, sqliteConfig);
471
89
 
472
90
  expect(result["createdAt"]).toBeInstanceOf(Date);
473
91
  expect((result["createdAt"] as Date).getTime()).toBe(timestamp);
@@ -475,7 +93,7 @@ describe("decodeResult", () => {
475
93
 
476
94
  it("should decode ISO string to Date for sqlite timestamp", () => {
477
95
  const isoString = "2024-01-15T10:30:00.000Z";
478
- const result = decodeResult({ createdAt: isoString }, usersTable, "sqlite");
96
+ const result = decodeResult({ createdAt: isoString }, usersTable, sqliteConfig);
479
97
 
480
98
  expect(result["createdAt"]).toBeInstanceOf(Date);
481
99
  expect((result["createdAt"] as Date).toISOString()).toBe(isoString);
@@ -483,7 +101,7 @@ describe("decodeResult", () => {
483
101
 
484
102
  it("should keep Date as Date for postgresql", () => {
485
103
  const date = new Date("2024-01-15T10:30:00Z");
486
- const result = decodeResult({ createdAt: date }, usersTable, "postgresql");
104
+ const result = decodeResult({ createdAt: date }, usersTable, postgresqlConfig);
487
105
 
488
106
  expect(result["createdAt"]).toBe(date);
489
107
  });
@@ -491,13 +109,13 @@ describe("decodeResult", () => {
491
109
 
492
110
  describe("nullable columns", () => {
493
111
  it("should handle null values", () => {
494
- const result = decodeResult({ age: null }, usersTable, "sqlite");
112
+ const result = decodeResult({ age: null }, usersTable, sqliteConfig);
495
113
 
496
114
  expect(result).toEqual({ age: null });
497
115
  });
498
116
 
499
117
  it("should handle nullable timestamp", () => {
500
- const result = decodeResult({ publishedAt: null }, postsTable, "sqlite");
118
+ const result = decodeResult({ publishedAt: null }, postsTable, sqliteConfig);
501
119
 
502
120
  expect(result).toEqual({ publishedAt: null });
503
121
  });
@@ -514,7 +132,7 @@ describe("decodeResult", () => {
514
132
  "author:email": "alice@example.com",
515
133
  },
516
134
  postsTable,
517
- "sqlite",
135
+ sqliteConfig,
518
136
  );
519
137
 
520
138
  expect(result).toEqual({
@@ -539,7 +157,7 @@ describe("decodeResult", () => {
539
157
  "author:createdAt": timestamp,
540
158
  },
541
159
  postsTable,
542
- "sqlite",
160
+ sqliteConfig,
543
161
  );
544
162
 
545
163
  expect(result["author"]).toEqual({
@@ -557,7 +175,7 @@ describe("decodeResult", () => {
557
175
  "unknownRelation:field": "value",
558
176
  },
559
177
  postsTable,
560
- "sqlite",
178
+ sqliteConfig,
561
179
  );
562
180
 
563
181
  expect(result).toEqual({
@@ -575,7 +193,7 @@ describe("decodeResult", () => {
575
193
  "author:unknownField": "value",
576
194
  },
577
195
  postsTable,
578
- "sqlite",
196
+ sqliteConfig,
579
197
  );
580
198
 
581
199
  expect(result).toEqual({
@@ -625,7 +243,7 @@ describe("decodeResult", () => {
625
243
  "category:name": "Technology",
626
244
  },
627
245
  schemaWithMultipleRelations.tables.posts,
628
- "sqlite",
246
+ sqliteConfig,
629
247
  );
630
248
 
631
249
  expect(result).toEqual({
@@ -655,7 +273,7 @@ describe("decodeResult", () => {
655
273
  "author:name": "Alice",
656
274
  },
657
275
  postsTable,
658
- "sqlite",
276
+ sqliteConfig,
659
277
  );
660
278
 
661
279
  // Main table id should be FragnoId
@@ -686,7 +304,7 @@ describe("decodeResult", () => {
686
304
  createdAt: timestamp,
687
305
  },
688
306
  usersTable,
689
- "sqlite",
307
+ sqliteConfig,
690
308
  );
691
309
 
692
310
  expect(result).toEqual({
@@ -702,7 +320,7 @@ describe("decodeResult", () => {
702
320
 
703
321
  describe("edge cases", () => {
704
322
  it("should handle empty result", () => {
705
- const result = decodeResult({}, usersTable, "sqlite");
323
+ const result = decodeResult({}, usersTable, sqliteConfig);
706
324
 
707
325
  expect(result).toEqual({});
708
326
  });
@@ -714,7 +332,7 @@ describe("decodeResult", () => {
714
332
  "author:name": "Alice",
715
333
  },
716
334
  postsTable,
717
- "sqlite",
335
+ sqliteConfig,
718
336
  );
719
337
 
720
338
  expect(result).toEqual({
@@ -737,7 +355,7 @@ describe("decodeResult", () => {
737
355
  "author:name": "Alice",
738
356
  },
739
357
  postsTable,
740
- "sqlite",
358
+ sqliteConfig,
741
359
  );
742
360
 
743
361
  expect(result).toEqual({
@@ -762,14 +380,14 @@ describe("decodeResult", () => {
762
380
  name: "John",
763
381
  },
764
382
  usersTable,
765
- "postgresql",
383
+ postgresqlConfig,
766
384
  );
767
385
 
768
386
  const fragnoId = result["id"];
769
387
  assert(fragnoId instanceof FragnoId);
770
388
 
771
389
  expect(fragnoId.externalId).toBe("user123");
772
- expect(fragnoId.internalId).toBe(456);
390
+ expect(fragnoId.internalId).toBe(456n);
773
391
  expect(result["name"]).toBe("John");
774
392
  });
775
393
 
@@ -781,7 +399,7 @@ describe("decodeResult", () => {
781
399
  name: "John",
782
400
  },
783
401
  usersTable,
784
- "postgresql",
402
+ postgresqlConfig,
785
403
  );
786
404
 
787
405
  const fragnoId = result["id"];
@@ -799,7 +417,7 @@ describe("decodeResult", () => {
799
417
  name: "John",
800
418
  },
801
419
  usersTable,
802
- "postgresql",
420
+ postgresqlConfig,
803
421
  );
804
422
 
805
423
  expect(result).toEqual({
@@ -817,9 +435,9 @@ describe("decodeResult", () => {
817
435
  };
818
436
 
819
437
  // Test across providers
820
- const sqliteResult = decodeResult(testData, usersTable, "sqlite");
821
- const postgresqlResult = decodeResult(testData, usersTable, "postgresql");
822
- const mysqlResult = decodeResult(testData, usersTable, "mysql");
438
+ const sqliteResult = decodeResult(testData, usersTable, sqliteConfig);
439
+ const postgresqlResult = decodeResult(testData, usersTable, postgresqlConfig);
440
+ const mysqlResult = decodeResult(testData, usersTable, mysqlConfig);
823
441
 
824
442
  // All should create FragnoId objects
825
443
  expect(sqliteResult["id"]).toBeInstanceOf(FragnoId);
@@ -827,7 +445,7 @@ describe("decodeResult", () => {
827
445
  expect(mysqlResult["id"]).toBeInstanceOf(FragnoId);
828
446
 
829
447
  expect((sqliteResult["id"] as FragnoId).externalId).toBe("user123");
830
- expect((sqliteResult["id"] as FragnoId).internalId).toBe(456);
448
+ expect((sqliteResult["id"] as FragnoId).internalId).toBe(456n);
831
449
  });
832
450
 
833
451
  it("should create FragnoId in relation data when both IDs present", () => {
@@ -841,7 +459,7 @@ describe("decodeResult", () => {
841
459
  "author:name": "Alice",
842
460
  },
843
461
  postsTable,
844
- "postgresql",
462
+ postgresqlConfig,
845
463
  );
846
464
 
847
465
  expect(result["id"]).toBe("post1");
@@ -850,7 +468,7 @@ describe("decodeResult", () => {
850
468
  const author: Record<string, unknown> = result["author"] as Record<string, unknown>;
851
469
  assert(author["id"] instanceof FragnoId);
852
470
  expect(author["id"].externalId).toBe("user123");
853
- expect(author["id"].internalId).toBe(456);
471
+ expect(author["id"].internalId).toBe(456n);
854
472
  expect(author["name"]).toBe("Alice");
855
473
  });
856
474
 
@@ -863,7 +481,7 @@ describe("decodeResult", () => {
863
481
  "author:name": "Alice",
864
482
  },
865
483
  postsTable,
866
- "postgresql",
484
+ postgresqlConfig,
867
485
  );
868
486
 
869
487
  expect(result).toEqual({
@@ -891,12 +509,12 @@ describe("decodeResult", () => {
891
509
  createdAt: timestamp,
892
510
  },
893
511
  usersTable,
894
- "sqlite",
512
+ sqliteConfig,
895
513
  );
896
514
 
897
515
  expect(result["id"]).toBeInstanceOf(FragnoId);
898
516
  expect((result["id"] as FragnoId).externalId).toBe("user123");
899
- expect((result["id"] as FragnoId).internalId).toBe(456);
517
+ expect((result["id"] as FragnoId).internalId).toBe(456n);
900
518
  expect(result["name"]).toBe("Alice");
901
519
  expect(result["email"]).toBe("alice@example.com");
902
520
  expect(result["age"]).toBe(30);
@@ -912,12 +530,12 @@ describe("decodeResult", () => {
912
530
  name: "John",
913
531
  },
914
532
  usersTable,
915
- "postgresql",
533
+ postgresqlConfig,
916
534
  );
917
535
 
918
536
  expect(result["id"]).toBeInstanceOf(FragnoId);
919
537
  expect((result["id"] as FragnoId).externalId).toBe("user123");
920
- expect((result["id"] as FragnoId).internalId).toBe(789);
538
+ expect((result["id"] as FragnoId).internalId).toBe(789n);
921
539
  expect(result["name"]).toBe("John");
922
540
  });
923
541
  });