@fragno-dev/db 0.1.14 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/.turbo/turbo-build.log +242 -139
  2. package/CHANGELOG.md +47 -0
  3. package/README.md +123 -8
  4. package/dist/adapters/adapters.d.ts +19 -5
  5. package/dist/adapters/adapters.d.ts.map +1 -1
  6. package/dist/adapters/adapters.js.map +1 -1
  7. package/dist/adapters/drizzle/drizzle-adapter.d.ts +6 -19
  8. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
  9. package/dist/adapters/drizzle/drizzle-adapter.js +7 -47
  10. package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
  11. package/dist/adapters/drizzle/generate.d.ts +7 -1
  12. package/dist/adapters/drizzle/generate.d.ts.map +1 -1
  13. package/dist/adapters/drizzle/generate.js +46 -45
  14. package/dist/adapters/drizzle/generate.js.map +1 -1
  15. package/dist/adapters/generic-sql/driver-config.d.ts +74 -0
  16. package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -0
  17. package/dist/adapters/generic-sql/driver-config.js +94 -0
  18. package/dist/adapters/generic-sql/driver-config.js.map +1 -0
  19. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +43 -0
  20. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -0
  21. package/dist/adapters/generic-sql/generic-sql-adapter.js +87 -0
  22. package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -0
  23. package/dist/adapters/generic-sql/generic-sql-uow-executor.js +67 -0
  24. package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -0
  25. package/dist/adapters/generic-sql/migration/cold-kysely.js +33 -0
  26. package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -0
  27. package/dist/adapters/generic-sql/migration/dialect/mysql.js +60 -0
  28. package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -0
  29. package/dist/adapters/generic-sql/migration/dialect/postgres.js +59 -0
  30. package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -0
  31. package/dist/adapters/generic-sql/migration/dialect/sqlite.js +96 -0
  32. package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -0
  33. package/dist/adapters/generic-sql/migration/executor.d.ts +15 -0
  34. package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -0
  35. package/dist/adapters/generic-sql/migration/executor.js +18 -0
  36. package/dist/adapters/generic-sql/migration/executor.js.map +1 -0
  37. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
  38. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
  39. package/dist/adapters/generic-sql/migration/prepared-migrations.js +68 -0
  40. package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -0
  41. package/dist/adapters/generic-sql/migration/sql-generator.js +212 -0
  42. package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -0
  43. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +32 -0
  44. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -0
  45. package/dist/adapters/generic-sql/query/cursor-utils.js +37 -0
  46. package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -0
  47. package/dist/adapters/generic-sql/query/dialect/mysql.js +33 -0
  48. package/dist/adapters/generic-sql/query/dialect/mysql.js.map +1 -0
  49. package/dist/adapters/generic-sql/query/dialect/postgres.js +32 -0
  50. package/dist/adapters/generic-sql/query/dialect/postgres.js.map +1 -0
  51. package/dist/adapters/generic-sql/query/dialect/sqlite.js +32 -0
  52. package/dist/adapters/generic-sql/query/dialect/sqlite.js.map +1 -0
  53. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +152 -0
  54. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -0
  55. package/dist/adapters/generic-sql/query/select-builder.js +69 -0
  56. package/dist/adapters/generic-sql/query/select-builder.js.map +1 -0
  57. package/dist/adapters/generic-sql/query/sql-query-compiler.js +145 -0
  58. package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -0
  59. package/dist/adapters/generic-sql/query/where-builder.js +129 -0
  60. package/dist/adapters/generic-sql/query/where-builder.js.map +1 -0
  61. package/dist/adapters/generic-sql/result-interpreter.js +74 -0
  62. package/dist/adapters/generic-sql/result-interpreter.js.map +1 -0
  63. package/dist/adapters/generic-sql/uow-decoder.js +105 -0
  64. package/dist/adapters/generic-sql/uow-decoder.js.map +1 -0
  65. package/dist/adapters/generic-sql/uow-encoder.js +93 -0
  66. package/dist/adapters/generic-sql/uow-encoder.js.map +1 -0
  67. package/dist/adapters/kysely/kysely-adapter.d.ts +5 -16
  68. package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
  69. package/dist/adapters/kysely/kysely-adapter.js +6 -159
  70. package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
  71. package/dist/adapters/{drizzle/drizzle-query.js → shared/from-unit-of-work-compiler.js} +48 -62
  72. package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -0
  73. package/dist/adapters/{kysely/kysely-shared.d.ts → shared/table-name-mapper.d.ts} +3 -2
  74. package/dist/adapters/shared/table-name-mapper.d.ts.map +1 -0
  75. package/dist/adapters/shared/table-name-mapper.js +43 -0
  76. package/dist/adapters/shared/table-name-mapper.js.map +1 -0
  77. package/dist/adapters/shared/uow-operation-compiler.js +105 -0
  78. package/dist/adapters/shared/uow-operation-compiler.js.map +1 -0
  79. package/dist/db-fragment-definition-builder.d.ts +186 -0
  80. package/dist/db-fragment-definition-builder.d.ts.map +1 -0
  81. package/dist/db-fragment-definition-builder.js +207 -0
  82. package/dist/db-fragment-definition-builder.js.map +1 -0
  83. package/dist/fragments/internal-fragment.d.ts +53 -0
  84. package/dist/fragments/internal-fragment.d.ts.map +1 -0
  85. package/dist/fragments/internal-fragment.js +111 -0
  86. package/dist/fragments/internal-fragment.js.map +1 -0
  87. package/dist/hooks/hooks.d.ts +51 -0
  88. package/dist/hooks/hooks.d.ts.map +1 -0
  89. package/dist/hooks/hooks.js +88 -0
  90. package/dist/hooks/hooks.js.map +1 -0
  91. package/dist/migration-engine/generation-engine.d.ts +0 -2
  92. package/dist/migration-engine/generation-engine.d.ts.map +1 -1
  93. package/dist/migration-engine/generation-engine.js +38 -56
  94. package/dist/migration-engine/generation-engine.js.map +1 -1
  95. package/dist/mod.d.ts +35 -23
  96. package/dist/mod.d.ts.map +1 -1
  97. package/dist/mod.js +48 -45
  98. package/dist/mod.js.map +1 -1
  99. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +165 -0
  100. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +1 -0
  101. package/dist/packages/fragno/dist/api/bind-services.js +20 -0
  102. package/dist/packages/fragno/dist/api/bind-services.js.map +1 -0
  103. package/dist/packages/fragno/dist/api/error.js +48 -0
  104. package/dist/packages/fragno/dist/api/error.js.map +1 -0
  105. package/dist/packages/fragno/dist/api/fragment-definition-builder.js +320 -0
  106. package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +1 -0
  107. package/dist/packages/fragno/dist/api/fragment-instantiator.js +525 -0
  108. package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -0
  109. package/dist/packages/fragno/dist/api/fragno-response.js +73 -0
  110. package/dist/packages/fragno/dist/api/fragno-response.js.map +1 -0
  111. package/dist/packages/fragno/dist/api/internal/response-stream.js +81 -0
  112. package/dist/packages/fragno/dist/api/internal/response-stream.js.map +1 -0
  113. package/dist/packages/fragno/dist/api/internal/route.js +10 -0
  114. package/dist/packages/fragno/dist/api/internal/route.js.map +1 -0
  115. package/dist/packages/fragno/dist/api/mutable-request-state.js +97 -0
  116. package/dist/packages/fragno/dist/api/mutable-request-state.js.map +1 -0
  117. package/dist/packages/fragno/dist/api/request-context-storage.js +43 -0
  118. package/dist/packages/fragno/dist/api/request-context-storage.js.map +1 -0
  119. package/dist/packages/fragno/dist/api/request-input-context.js +118 -0
  120. package/dist/packages/fragno/dist/api/request-input-context.js.map +1 -0
  121. package/dist/packages/fragno/dist/api/request-middleware.js +83 -0
  122. package/dist/packages/fragno/dist/api/request-middleware.js.map +1 -0
  123. package/dist/packages/fragno/dist/api/request-output-context.js +119 -0
  124. package/dist/packages/fragno/dist/api/request-output-context.js.map +1 -0
  125. package/dist/packages/fragno/dist/api/route.js +17 -0
  126. package/dist/packages/fragno/dist/api/route.js.map +1 -0
  127. package/dist/packages/fragno/dist/internal/symbols.js +10 -0
  128. package/dist/packages/fragno/dist/internal/symbols.js.map +1 -0
  129. package/dist/query/column-defaults.js +27 -0
  130. package/dist/query/column-defaults.js.map +1 -0
  131. package/dist/query/cursor.d.ts +14 -6
  132. package/dist/query/cursor.d.ts.map +1 -1
  133. package/dist/query/cursor.js +16 -7
  134. package/dist/query/cursor.js.map +1 -1
  135. package/dist/query/orm/orm.d.ts +1 -1
  136. package/dist/query/orm/orm.js.map +1 -1
  137. package/dist/query/serialize/create-sql-serializer.js +30 -0
  138. package/dist/query/serialize/create-sql-serializer.js.map +1 -0
  139. package/dist/query/serialize/dialect/mysql-serializer.js +87 -0
  140. package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -0
  141. package/dist/query/serialize/dialect/postgres-serializer.js +80 -0
  142. package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -0
  143. package/dist/query/serialize/dialect/sqlite-serializer.js +93 -0
  144. package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -0
  145. package/dist/query/serialize/sql-serializer.js +67 -0
  146. package/dist/query/serialize/sql-serializer.js.map +1 -0
  147. package/dist/query/{query.d.ts → simple-query-interface.d.ts} +6 -6
  148. package/dist/query/simple-query-interface.d.ts.map +1 -0
  149. package/dist/query/unit-of-work/execute-unit-of-work.d.ts +133 -0
  150. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
  151. package/dist/query/unit-of-work/execute-unit-of-work.js +197 -0
  152. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -0
  153. package/dist/query/unit-of-work/retry-policy.d.ts +88 -0
  154. package/dist/query/unit-of-work/retry-policy.d.ts.map +1 -0
  155. package/dist/query/unit-of-work/retry-policy.js +61 -0
  156. package/dist/query/unit-of-work/retry-policy.js.map +1 -0
  157. package/dist/query/{unit-of-work.d.ts → unit-of-work/unit-of-work.d.ts} +145 -58
  158. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -0
  159. package/dist/query/{unit-of-work.js → unit-of-work/unit-of-work.js} +435 -198
  160. package/dist/query/unit-of-work/unit-of-work.js.map +1 -0
  161. package/dist/query/value-decoding.js +71 -0
  162. package/dist/query/value-decoding.js.map +1 -0
  163. package/dist/query/value-encoding.js +124 -0
  164. package/dist/query/value-encoding.js.map +1 -0
  165. package/dist/schema/create.d.ts +3 -0
  166. package/dist/schema/create.d.ts.map +1 -1
  167. package/dist/schema/create.js +4 -0
  168. package/dist/schema/create.js.map +1 -1
  169. package/dist/schema/type-conversion/create-sql-type-mapper.js +29 -0
  170. package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -0
  171. package/dist/schema/type-conversion/dialect/mysql.js +57 -0
  172. package/dist/schema/type-conversion/dialect/mysql.js.map +1 -0
  173. package/dist/schema/type-conversion/dialect/postgres.js +56 -0
  174. package/dist/schema/type-conversion/dialect/postgres.js.map +1 -0
  175. package/dist/schema/type-conversion/dialect/sqlite.js +52 -0
  176. package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -0
  177. package/dist/schema/type-conversion/type-mapping.js +63 -0
  178. package/dist/schema/type-conversion/type-mapping.js.map +1 -0
  179. package/dist/sql-driver/connection/connection-provider.d.ts +13 -0
  180. package/dist/sql-driver/connection/connection-provider.d.ts.map +1 -0
  181. package/dist/sql-driver/connection/connection-provider.js +19 -0
  182. package/dist/sql-driver/connection/connection-provider.js.map +1 -0
  183. package/dist/sql-driver/connection/single-connection-provider.js +23 -0
  184. package/dist/sql-driver/connection/single-connection-provider.js.map +1 -0
  185. package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
  186. package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
  187. package/dist/sql-driver/dialects/dialects.d.ts +2 -0
  188. package/dist/sql-driver/dialects/dialects.js +3 -0
  189. package/dist/sql-driver/dialects/durable-object-dialect.d.ts +72 -0
  190. package/dist/sql-driver/dialects/durable-object-dialect.d.ts.map +1 -0
  191. package/dist/sql-driver/dialects/durable-object-dialect.js +130 -0
  192. package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -0
  193. package/dist/sql-driver/driver/runtime-driver.d.ts +23 -0
  194. package/dist/sql-driver/driver/runtime-driver.d.ts.map +1 -0
  195. package/dist/sql-driver/driver/runtime-driver.js +56 -0
  196. package/dist/sql-driver/driver/runtime-driver.js.map +1 -0
  197. package/dist/sql-driver/query-executor/default-query-executor.js +26 -0
  198. package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -0
  199. package/dist/sql-driver/query-executor/plugin.d.ts +17 -0
  200. package/dist/sql-driver/query-executor/plugin.d.ts.map +1 -0
  201. package/dist/sql-driver/query-executor/query-executor-base.js +25 -0
  202. package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -0
  203. package/dist/sql-driver/query-executor/query-executor.d.ts +36 -0
  204. package/dist/sql-driver/query-executor/query-executor.d.ts.map +1 -0
  205. package/dist/sql-driver/sql-driver-adapter.d.ts +29 -0
  206. package/dist/sql-driver/sql-driver-adapter.d.ts.map +1 -0
  207. package/dist/sql-driver/sql-driver-adapter.js +68 -0
  208. package/dist/sql-driver/sql-driver-adapter.js.map +1 -0
  209. package/dist/sql-driver/sql-driver.d.ts +38 -0
  210. package/dist/sql-driver/sql-driver.d.ts.map +1 -0
  211. package/dist/sql-driver/sql-driver.js +1 -0
  212. package/dist/sql-driver/sql.js +50 -0
  213. package/dist/sql-driver/sql.js.map +1 -0
  214. package/dist/with-database.d.ts +32 -0
  215. package/dist/with-database.d.ts.map +1 -0
  216. package/dist/with-database.js +34 -0
  217. package/dist/with-database.js.map +1 -0
  218. package/package.json +43 -9
  219. package/src/adapters/adapters.ts +23 -4
  220. package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +140 -185
  221. package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts} +187 -55
  222. package/src/adapters/drizzle/drizzle-adapter.ts +14 -93
  223. package/src/adapters/drizzle/generate.test.ts +102 -269
  224. package/src/adapters/drizzle/generate.ts +89 -63
  225. package/src/adapters/drizzle/migrate-drizzle.test.ts +19 -0
  226. package/src/adapters/drizzle/shared.ts +0 -34
  227. package/src/adapters/drizzle/test-utils.ts +36 -5
  228. package/src/adapters/generic-sql/README.md +14 -0
  229. package/src/adapters/generic-sql/driver-config.ts +144 -0
  230. package/src/adapters/generic-sql/generic-sql-adapter.test.ts +50 -0
  231. package/src/adapters/generic-sql/generic-sql-adapter.ts +146 -0
  232. package/src/adapters/generic-sql/generic-sql-uow-executor.ts +130 -0
  233. package/src/adapters/generic-sql/migration/cold-kysely.ts +55 -0
  234. package/src/adapters/{kysely/migration/execute-mysql.test.ts → generic-sql/migration/dialect/mysql.test.ts} +342 -484
  235. package/src/adapters/generic-sql/migration/dialect/mysql.ts +104 -0
  236. package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +1008 -0
  237. package/src/adapters/generic-sql/migration/dialect/postgres.ts +113 -0
  238. package/src/adapters/{kysely/migration/execute-sqlite.test.ts → generic-sql/migration/dialect/sqlite.test.ts} +307 -510
  239. package/src/adapters/generic-sql/migration/dialect/sqlite.ts +189 -0
  240. package/src/adapters/generic-sql/migration/executor.ts +33 -0
  241. package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +661 -0
  242. package/src/adapters/generic-sql/migration/prepared-migrations.ts +214 -0
  243. package/src/adapters/generic-sql/migration/sql-generator.ts +413 -0
  244. package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +36 -0
  245. package/src/adapters/generic-sql/query/cursor-utils.ts +56 -0
  246. package/src/adapters/generic-sql/query/dialect/mysql.ts +34 -0
  247. package/src/adapters/generic-sql/query/dialect/postgres.ts +32 -0
  248. package/src/adapters/generic-sql/query/dialect/sqlite.ts +32 -0
  249. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +1568 -0
  250. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +314 -0
  251. package/src/adapters/generic-sql/query/select-builder.test.ts +256 -0
  252. package/src/adapters/generic-sql/query/select-builder.ts +137 -0
  253. package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +195 -0
  254. package/src/adapters/generic-sql/query/sql-query-compiler.ts +367 -0
  255. package/src/adapters/generic-sql/query/where-builder.test.ts +744 -0
  256. package/src/adapters/generic-sql/query/where-builder.ts +211 -0
  257. package/src/adapters/generic-sql/result-interpreter.ts +102 -0
  258. package/src/adapters/generic-sql/test/generic-drizzle-adapter-sqlite3.test.ts +899 -0
  259. package/src/adapters/generic-sql/uow-decoder.test.ts +399 -0
  260. package/src/adapters/generic-sql/uow-decoder.ts +152 -0
  261. package/src/adapters/generic-sql/uow-encoder.test.ts +183 -0
  262. package/src/adapters/generic-sql/uow-encoder.ts +131 -0
  263. package/src/adapters/kysely/kysely-adapter-pglite.test.ts +90 -96
  264. package/src/adapters/kysely/kysely-adapter-sqlocal.test.ts +215 -0
  265. package/src/adapters/kysely/kysely-adapter.ts +10 -242
  266. package/src/adapters/{drizzle/drizzle-query.ts → shared/from-unit-of-work-compiler.ts} +111 -106
  267. package/src/adapters/shared/table-name-mapper.ts +50 -0
  268. package/src/adapters/shared/uow-operation-compiler.ts +211 -0
  269. package/src/db-fragment-definition-builder.test.ts +887 -0
  270. package/src/db-fragment-definition-builder.ts +737 -0
  271. package/src/db-fragment-instantiator.test.ts +543 -0
  272. package/src/db-fragment-integration.test.ts +406 -0
  273. package/src/fragments/internal-fragment.test.ts +549 -0
  274. package/src/fragments/internal-fragment.ts +249 -0
  275. package/src/hooks/hooks.test.ts +575 -0
  276. package/src/hooks/hooks.ts +179 -0
  277. package/src/migration-engine/generation-engine.test.ts +60 -27
  278. package/src/migration-engine/generation-engine.ts +99 -92
  279. package/src/mod.ts +139 -78
  280. package/src/query/column-defaults.ts +49 -0
  281. package/src/query/cursor.test.ts +147 -3
  282. package/src/query/cursor.ts +25 -8
  283. package/src/query/orm/orm.ts +1 -1
  284. package/src/query/query-type.test.ts +9 -9
  285. package/src/query/serialize/create-sql-serializer.ts +34 -0
  286. package/src/query/serialize/dialect/mysql-serializer.ts +142 -0
  287. package/src/query/serialize/dialect/postgres-serializer.ts +129 -0
  288. package/src/query/serialize/dialect/sqlite-serializer.test.ts +251 -0
  289. package/src/query/serialize/dialect/sqlite-serializer.ts +156 -0
  290. package/src/query/serialize/sql-serializer.ts +143 -0
  291. package/src/query/{query.ts → simple-query-interface.ts} +4 -4
  292. package/src/query/unit-of-work/execute-unit-of-work.test.ts +1310 -0
  293. package/src/query/unit-of-work/execute-unit-of-work.ts +504 -0
  294. package/src/query/unit-of-work/retry-policy.test.ts +217 -0
  295. package/src/query/unit-of-work/retry-policy.ts +141 -0
  296. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +831 -0
  297. package/src/query/{unit-of-work-types.test.ts → unit-of-work/unit-of-work-types.test.ts} +7 -5
  298. package/src/query/unit-of-work/unit-of-work.test.ts +1716 -0
  299. package/src/query/{unit-of-work.ts → unit-of-work/unit-of-work.ts} +716 -420
  300. package/src/query/{result-transform.test.ts → value-decoding.test.ts} +45 -298
  301. package/src/query/value-decoding.ts +113 -0
  302. package/src/query/value-encoding.test.ts +390 -0
  303. package/src/query/value-encoding.ts +168 -0
  304. package/src/schema/create.test.ts +5 -1
  305. package/src/schema/create.ts +5 -0
  306. package/src/schema/serialize.test.ts +165 -407
  307. package/src/schema/type-conversion/create-sql-type-mapper.ts +28 -0
  308. package/src/schema/type-conversion/dialect/mysql.ts +64 -0
  309. package/src/schema/type-conversion/dialect/postgres.ts +62 -0
  310. package/src/schema/type-conversion/dialect/sqlite.ts +63 -0
  311. package/src/schema/type-conversion/type-mapping.test.ts +137 -0
  312. package/src/schema/type-conversion/type-mapping.ts +153 -0
  313. package/src/shared/connection-pool.ts +5 -5
  314. package/src/sql-driver/better-sqlite3.test.ts +126 -0
  315. package/src/sql-driver/connection/connection-provider.ts +27 -0
  316. package/src/sql-driver/connection/single-connection-provider.ts +42 -0
  317. package/src/sql-driver/dialect-adapter/dialect-adapter.ts +9 -0
  318. package/src/sql-driver/dialect-adapter/sqlite-dialect-adapter.ts +7 -0
  319. package/src/sql-driver/dialects/dialects.ts +1 -0
  320. package/src/sql-driver/dialects/durable-object-dialect.ts +260 -0
  321. package/src/sql-driver/driver/runtime-driver.ts +91 -0
  322. package/src/sql-driver/query-executor/default-query-executor.ts +38 -0
  323. package/src/sql-driver/query-executor/plugin.ts +22 -0
  324. package/src/sql-driver/query-executor/query-executor-base.ts +53 -0
  325. package/src/sql-driver/query-executor/query-executor.ts +44 -0
  326. package/src/sql-driver/sql-driver-adapter.ts +96 -0
  327. package/src/sql-driver/sql-driver.ts +53 -0
  328. package/src/sql-driver/sql.ts +57 -0
  329. package/src/sql-driver/sqlocal.test.ts +117 -0
  330. package/src/with-database.ts +152 -0
  331. package/tsdown.config.ts +8 -2
  332. package/dist/adapters/drizzle/drizzle-connection-pool.js +0 -40
  333. package/dist/adapters/drizzle/drizzle-connection-pool.js.map +0 -1
  334. package/dist/adapters/drizzle/drizzle-query.d.ts +0 -23
  335. package/dist/adapters/drizzle/drizzle-query.d.ts.map +0 -1
  336. package/dist/adapters/drizzle/drizzle-query.js.map +0 -1
  337. package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +0 -10
  338. package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +0 -1
  339. package/dist/adapters/drizzle/drizzle-uow-compiler.js +0 -315
  340. package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +0 -1
  341. package/dist/adapters/drizzle/drizzle-uow-decoder.js +0 -116
  342. package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +0 -1
  343. package/dist/adapters/drizzle/drizzle-uow-executor.js +0 -149
  344. package/dist/adapters/drizzle/drizzle-uow-executor.js.map +0 -1
  345. package/dist/adapters/drizzle/join-column-utils.js +0 -28
  346. package/dist/adapters/drizzle/join-column-utils.js.map +0 -1
  347. package/dist/adapters/drizzle/shared.d.ts +0 -14
  348. package/dist/adapters/drizzle/shared.d.ts.map +0 -1
  349. package/dist/adapters/drizzle/shared.js +0 -35
  350. package/dist/adapters/drizzle/shared.js.map +0 -1
  351. package/dist/adapters/kysely/kysely-connection-pool.js +0 -41
  352. package/dist/adapters/kysely/kysely-connection-pool.js.map +0 -1
  353. package/dist/adapters/kysely/kysely-query-builder.js +0 -321
  354. package/dist/adapters/kysely/kysely-query-builder.js.map +0 -1
  355. package/dist/adapters/kysely/kysely-query-compiler.js +0 -66
  356. package/dist/adapters/kysely/kysely-query-compiler.js.map +0 -1
  357. package/dist/adapters/kysely/kysely-query.d.ts +0 -22
  358. package/dist/adapters/kysely/kysely-query.d.ts.map +0 -1
  359. package/dist/adapters/kysely/kysely-query.js +0 -223
  360. package/dist/adapters/kysely/kysely-query.js.map +0 -1
  361. package/dist/adapters/kysely/kysely-shared.d.ts.map +0 -1
  362. package/dist/adapters/kysely/kysely-shared.js +0 -18
  363. package/dist/adapters/kysely/kysely-shared.js.map +0 -1
  364. package/dist/adapters/kysely/kysely-uow-compiler.js +0 -170
  365. package/dist/adapters/kysely/kysely-uow-compiler.js.map +0 -1
  366. package/dist/adapters/kysely/kysely-uow-executor.js +0 -89
  367. package/dist/adapters/kysely/kysely-uow-executor.js.map +0 -1
  368. package/dist/adapters/kysely/migration/execute-base.js +0 -128
  369. package/dist/adapters/kysely/migration/execute-base.js.map +0 -1
  370. package/dist/adapters/kysely/migration/execute-factory.js +0 -34
  371. package/dist/adapters/kysely/migration/execute-factory.js.map +0 -1
  372. package/dist/adapters/kysely/migration/execute-mssql.js +0 -112
  373. package/dist/adapters/kysely/migration/execute-mssql.js.map +0 -1
  374. package/dist/adapters/kysely/migration/execute-mysql.js +0 -93
  375. package/dist/adapters/kysely/migration/execute-mysql.js.map +0 -1
  376. package/dist/adapters/kysely/migration/execute-postgres.js +0 -104
  377. package/dist/adapters/kysely/migration/execute-postgres.js.map +0 -1
  378. package/dist/adapters/kysely/migration/execute-sqlite.js +0 -123
  379. package/dist/adapters/kysely/migration/execute-sqlite.js.map +0 -1
  380. package/dist/adapters/kysely/migration/execute.js +0 -34
  381. package/dist/adapters/kysely/migration/execute.js.map +0 -1
  382. package/dist/bind-services.d.ts +0 -7
  383. package/dist/bind-services.d.ts.map +0 -1
  384. package/dist/bind-services.js +0 -14
  385. package/dist/bind-services.js.map +0 -1
  386. package/dist/fragment.d.ts +0 -173
  387. package/dist/fragment.d.ts.map +0 -1
  388. package/dist/fragment.js +0 -191
  389. package/dist/fragment.js.map +0 -1
  390. package/dist/migration-engine/create.d.ts +0 -37
  391. package/dist/migration-engine/create.d.ts.map +0 -1
  392. package/dist/migration-engine/create.js +0 -58
  393. package/dist/migration-engine/create.js.map +0 -1
  394. package/dist/migration-engine/shared.d.ts +0 -112
  395. package/dist/migration-engine/shared.d.ts.map +0 -1
  396. package/dist/query/query.d.ts.map +0 -1
  397. package/dist/query/result-transform.js +0 -168
  398. package/dist/query/result-transform.js.map +0 -1
  399. package/dist/query/unit-of-work.d.ts.map +0 -1
  400. package/dist/query/unit-of-work.js.map +0 -1
  401. package/dist/schema/serialize.js +0 -106
  402. package/dist/schema/serialize.js.map +0 -1
  403. package/dist/shared/settings-schema.js +0 -36
  404. package/dist/shared/settings-schema.js.map +0 -1
  405. package/src/adapters/drizzle/drizzle-adapter.test.ts +0 -170
  406. package/src/adapters/drizzle/drizzle-connection-pool.ts +0 -66
  407. package/src/adapters/drizzle/drizzle-query.test.ts +0 -499
  408. package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +0 -1383
  409. package/src/adapters/drizzle/drizzle-uow-compiler.ts +0 -636
  410. package/src/adapters/drizzle/drizzle-uow-decoder.ts +0 -218
  411. package/src/adapters/drizzle/drizzle-uow-executor.ts +0 -276
  412. package/src/adapters/drizzle/join-column-utils.test.ts +0 -79
  413. package/src/adapters/drizzle/join-column-utils.ts +0 -39
  414. package/src/adapters/kysely/kysely-connection-pool.ts +0 -70
  415. package/src/adapters/kysely/kysely-query-builder.test.ts +0 -1344
  416. package/src/adapters/kysely/kysely-query-builder.ts +0 -666
  417. package/src/adapters/kysely/kysely-query-compiler.ts +0 -132
  418. package/src/adapters/kysely/kysely-query.test.ts +0 -498
  419. package/src/adapters/kysely/kysely-query.ts +0 -390
  420. package/src/adapters/kysely/kysely-shared.ts +0 -23
  421. package/src/adapters/kysely/kysely-uow-compiler.test.ts +0 -998
  422. package/src/adapters/kysely/kysely-uow-compiler.ts +0 -318
  423. package/src/adapters/kysely/kysely-uow-executor.ts +0 -145
  424. package/src/adapters/kysely/kysely-uow-joins.test.ts +0 -811
  425. package/src/adapters/kysely/migration/execute-base.ts +0 -256
  426. package/src/adapters/kysely/migration/execute-factory.ts +0 -53
  427. package/src/adapters/kysely/migration/execute-mssql.ts +0 -250
  428. package/src/adapters/kysely/migration/execute-mysql.ts +0 -211
  429. package/src/adapters/kysely/migration/execute-postgres.test.ts +0 -2657
  430. package/src/adapters/kysely/migration/execute-postgres.ts +0 -234
  431. package/src/adapters/kysely/migration/execute-sqlite.ts +0 -247
  432. package/src/adapters/kysely/migration/execute.ts +0 -50
  433. package/src/adapters/kysely/migration/kysely-migrator.test.ts +0 -261
  434. package/src/bind-services.test.ts +0 -214
  435. package/src/bind-services.ts +0 -37
  436. package/src/db-fragment.test.ts +0 -800
  437. package/src/fragment.ts +0 -727
  438. package/src/query/result-transform.ts +0 -271
  439. package/src/query/unit-of-work-multi-schema.test.ts +0 -64
  440. package/src/query/unit-of-work.test.ts +0 -943
  441. package/src/schema/serialize.ts +0 -396
  442. package/src/shared/settings-schema.ts +0 -61
  443. package/src/uow-context-integration.test.ts +0 -102
  444. package/src/uow-context.test.ts +0 -182
  445. /package/dist/query/{query.js → simple-query-interface.js} +0 -0
@@ -1,306 +1,43 @@
1
- import { describe, expect, it } from "vitest";
2
- import { column, FragnoId } from "./create";
3
- import { dbToSchemaType, deserialize, schemaToDBType, serialize } from "./serialize";
1
+ import { assert, describe, expect, it } from "vitest";
2
+ import { column, referenceColumn, internalIdColumn } from "./create";
3
+ import { createSQLSerializer } from "../query/serialize/create-sql-serializer";
4
+ import type { AnyColumn } from "./create";
5
+ import type { DriverConfig } from "../adapters/generic-sql/driver-config";
6
+ import {
7
+ BetterSQLite3DriverConfig,
8
+ NodePostgresDriverConfig,
9
+ MySQL2DriverConfig,
10
+ } from "../adapters/generic-sql/driver-config";
11
+
12
+ function createMockDriverConfig(provider: string): DriverConfig {
13
+ if (provider === "postgresql" || provider === "cockroachdb") {
14
+ return new NodePostgresDriverConfig();
15
+ }
16
+ if (provider === "mysql") {
17
+ return new MySQL2DriverConfig();
18
+ }
19
+ return new BetterSQLite3DriverConfig();
20
+ }
21
+
22
+ // Helper functions for testing
23
+ function deserialize(value: unknown, col: AnyColumn, provider: string) {
24
+ const driverConfig = createMockDriverConfig(provider);
25
+ const serializer = createSQLSerializer(driverConfig);
26
+ return serializer.deserialize(value, col);
27
+ }
28
+
29
+ function serialize(
30
+ value: unknown,
31
+ col: AnyColumn,
32
+ provider: string,
33
+ skipDriverConversions = false,
34
+ ) {
35
+ const driverConfig = createMockDriverConfig(provider);
36
+ const serializer = createSQLSerializer(driverConfig);
37
+ return serializer.serialize(value, col, skipDriverConversions);
38
+ }
4
39
 
5
40
  describe("serialize", () => {
6
- describe("dbToSchemaType", () => {
7
- describe("sqlite", () => {
8
- it("should map integer types correctly", () => {
9
- expect(dbToSchemaType("integer", "sqlite", {})).toEqual([
10
- "bool",
11
- "date",
12
- "timestamp",
13
- "bigint",
14
- "integer",
15
- ]);
16
- expect(dbToSchemaType("INTEGER", "sqlite", {})).toEqual([
17
- "bool",
18
- "date",
19
- "timestamp",
20
- "bigint",
21
- "integer",
22
- ]);
23
- });
24
-
25
- it("should map text types correctly", () => {
26
- expect(dbToSchemaType("text", "sqlite", {})).toEqual([
27
- "json",
28
- "string",
29
- "bigint",
30
- "varchar(n)",
31
- ]);
32
- });
33
-
34
- it("should map numeric types correctly", () => {
35
- expect(dbToSchemaType("real", "sqlite", {})).toEqual(["decimal"]);
36
- expect(dbToSchemaType("numeric", "sqlite", {})).toEqual(["decimal"]);
37
- });
38
-
39
- it("should map blob types correctly", () => {
40
- expect(dbToSchemaType("blob", "sqlite", {})).toEqual(["bigint", "binary"]);
41
- });
42
- });
43
-
44
- describe("postgresql", () => {
45
- it("should map decimal types correctly", () => {
46
- expect(dbToSchemaType("decimal", "postgresql", {})).toEqual(["decimal"]);
47
- expect(dbToSchemaType("real", "postgresql", {})).toEqual(["decimal"]);
48
- expect(dbToSchemaType("numeric", "postgresql", {})).toEqual(["decimal"]);
49
- expect(dbToSchemaType("double precision", "postgresql", {})).toEqual(["decimal"]);
50
- });
51
-
52
- it("should map timestamp types correctly", () => {
53
- expect(dbToSchemaType("timestamp", "postgresql", {})).toEqual(["timestamp"]);
54
- expect(dbToSchemaType("timestamptz", "postgresql", {})).toEqual(["timestamp"]);
55
- });
56
-
57
- it("should map varchar with length correctly", () => {
58
- expect(dbToSchemaType("varchar", "postgresql", { length: 255 })).toEqual(["varchar(255)"]);
59
- });
60
-
61
- it("should map varchar without length to string", () => {
62
- expect(dbToSchemaType("varchar", "postgresql", {})).toEqual(["string"]);
63
- });
64
-
65
- it("should map text types correctly", () => {
66
- expect(dbToSchemaType("text", "postgresql", {})).toEqual(["string"]);
67
- });
68
-
69
- it("should map boolean types correctly", () => {
70
- expect(dbToSchemaType("boolean", "postgresql", {})).toEqual(["bool"]);
71
- expect(dbToSchemaType("bool", "postgresql", {})).toEqual(["bool"]);
72
- });
73
-
74
- it("should map binary types correctly", () => {
75
- expect(dbToSchemaType("bytea", "postgresql", {})).toEqual(["binary"]);
76
- });
77
- });
78
-
79
- describe("cockroachdb", () => {
80
- it("should behave like postgresql", () => {
81
- expect(dbToSchemaType("timestamp", "cockroachdb", {})).toEqual(["timestamp"]);
82
- expect(dbToSchemaType("text", "cockroachdb", {})).toEqual(["string"]);
83
- });
84
- });
85
-
86
- describe("mysql", () => {
87
- it("should map boolean types correctly", () => {
88
- expect(dbToSchemaType("bool", "mysql", {})).toEqual(["bool"]);
89
- expect(dbToSchemaType("boolean", "mysql", {})).toEqual(["bool"]);
90
- });
91
-
92
- it("should map integer types correctly", () => {
93
- expect(dbToSchemaType("integer", "mysql", {})).toEqual(["integer"]);
94
- expect(dbToSchemaType("int", "mysql", {})).toEqual(["integer"]);
95
- });
96
-
97
- it("should map decimal types correctly", () => {
98
- expect(dbToSchemaType("decimal", "mysql", {})).toEqual(["decimal"]);
99
- expect(dbToSchemaType("numeric", "mysql", {})).toEqual(["decimal"]);
100
- expect(dbToSchemaType("float", "mysql", {})).toEqual(["decimal"]);
101
- expect(dbToSchemaType("double", "mysql", {})).toEqual(["decimal"]);
102
- });
103
-
104
- it("should map datetime types correctly", () => {
105
- expect(dbToSchemaType("datetime", "mysql", {})).toEqual(["timestamp"]);
106
- });
107
-
108
- it("should map varchar with length correctly", () => {
109
- expect(dbToSchemaType("varchar", "mysql", { length: 100 })).toEqual(["varchar(100)"]);
110
- });
111
-
112
- it("should map varchar without length to string", () => {
113
- expect(dbToSchemaType("varchar", "mysql", {})).toEqual(["string"]);
114
- });
115
-
116
- it("should map text types correctly", () => {
117
- expect(dbToSchemaType("text", "mysql", {})).toEqual(["string"]);
118
- });
119
-
120
- it("should map blob types correctly", () => {
121
- expect(dbToSchemaType("longblob", "mysql", {})).toEqual(["binary"]);
122
- expect(dbToSchemaType("blob", "mysql", {})).toEqual(["binary"]);
123
- expect(dbToSchemaType("mediumblob", "mysql", {})).toEqual(["binary"]);
124
- expect(dbToSchemaType("tinyblob", "mysql", {})).toEqual(["binary"]);
125
- });
126
- });
127
-
128
- describe("mssql", () => {
129
- it("should map integer types correctly", () => {
130
- expect(dbToSchemaType("int", "mssql", {})).toEqual(["integer"]);
131
- });
132
-
133
- it("should map decimal types correctly", () => {
134
- expect(dbToSchemaType("decimal", "mssql", {})).toEqual(["decimal"]);
135
- expect(dbToSchemaType("float", "mssql", {})).toEqual(["decimal"]);
136
- expect(dbToSchemaType("real", "mssql", {})).toEqual(["decimal"]);
137
- expect(dbToSchemaType("numeric", "mssql", {})).toEqual(["decimal"]);
138
- });
139
-
140
- it("should map bit type correctly", () => {
141
- expect(dbToSchemaType("bit", "mssql", {})).toEqual(["bool"]);
142
- });
143
-
144
- it("should map datetime types correctly", () => {
145
- expect(dbToSchemaType("datetime", "mssql", {})).toEqual(["timestamp"]);
146
- expect(dbToSchemaType("datetime2", "mssql", {})).toEqual(["timestamp"]);
147
- });
148
-
149
- it("should map varchar with length correctly", () => {
150
- expect(dbToSchemaType("varchar", "mssql", { length: 50 })).toEqual(["varchar(50)"]);
151
- expect(dbToSchemaType("nvarchar", "mssql", { length: 50 })).toEqual(["varchar(50)"]);
152
- });
153
-
154
- it("should map varchar without length to string/json", () => {
155
- expect(dbToSchemaType("varchar", "mssql", {})).toEqual(["string", "json"]);
156
- expect(dbToSchemaType("nvarchar", "mssql", {})).toEqual(["string", "json"]);
157
- });
158
-
159
- it("should map text types correctly", () => {
160
- expect(dbToSchemaType("ntext", "mssql", {})).toEqual(["string", "json"]);
161
- expect(dbToSchemaType("text", "mssql", {})).toEqual(["string", "json"]);
162
- expect(dbToSchemaType("varchar(max)", "mssql", {})).toEqual(["string", "json"]);
163
- expect(dbToSchemaType("nvarchar(max)", "mssql", {})).toEqual(["string", "json"]);
164
- });
165
-
166
- it("should map binary types correctly", () => {
167
- expect(dbToSchemaType("binary", "mssql", {})).toEqual(["binary"]);
168
- expect(dbToSchemaType("varbinary", "mssql", {})).toEqual(["binary"]);
169
- });
170
- });
171
- });
172
-
173
- describe("schemaToDBType", () => {
174
- describe("sqlite", () => {
175
- it("should convert integer types to integer", () => {
176
- expect(schemaToDBType(column("integer"), "sqlite")).toBe("integer");
177
- });
178
-
179
- it("should convert timestamp to integer", () => {
180
- expect(schemaToDBType(column("timestamp"), "sqlite")).toBe("integer");
181
- });
182
-
183
- it("should convert date to integer", () => {
184
- expect(schemaToDBType(column("date"), "sqlite")).toBe("integer");
185
- });
186
-
187
- it("should convert bool to integer", () => {
188
- expect(schemaToDBType(column("bool"), "sqlite")).toBe("integer");
189
- });
190
-
191
- it("should convert binary to blob", () => {
192
- expect(schemaToDBType(column("binary"), "sqlite")).toBe("blob");
193
- });
194
-
195
- it("should convert bigint to blob", () => {
196
- expect(schemaToDBType(column("bigint"), "sqlite")).toBe("blob");
197
- });
198
-
199
- it("should convert json to text", () => {
200
- expect(schemaToDBType(column("json"), "sqlite")).toBe("text");
201
- });
202
-
203
- it("should convert string to text", () => {
204
- expect(schemaToDBType(column("string"), "sqlite")).toBe("text");
205
- });
206
-
207
- it("should convert varchar to text", () => {
208
- expect(schemaToDBType({ type: "varchar(255)" }, "sqlite")).toBe("text");
209
- });
210
-
211
- it("should convert decimal to real", () => {
212
- expect(schemaToDBType(column("decimal"), "sqlite")).toBe("real");
213
- });
214
- });
215
-
216
- describe("mssql", () => {
217
- it("should convert bool to bit", () => {
218
- expect(schemaToDBType(column("bool"), "mssql")).toBe("bit");
219
- });
220
-
221
- it("should convert timestamp to datetime", () => {
222
- expect(schemaToDBType(column("timestamp"), "mssql")).toBe("datetime");
223
- });
224
-
225
- it("should convert integer to int", () => {
226
- expect(schemaToDBType(column("integer"), "mssql")).toBe("int");
227
- });
228
-
229
- it("should convert string to varchar(max)", () => {
230
- expect(schemaToDBType(column("string"), "mssql")).toBe("varchar(max)");
231
- });
232
-
233
- it("should convert binary to varbinary(max)", () => {
234
- expect(schemaToDBType(column("binary"), "mssql")).toBe("varbinary(max)");
235
- });
236
-
237
- it("should convert json to varchar(max)", () => {
238
- expect(schemaToDBType(column("json"), "mssql")).toBe("varchar(max)");
239
- });
240
-
241
- it("should preserve varchar with length", () => {
242
- expect(schemaToDBType({ type: "varchar(100)" }, "mssql")).toBe("varchar(100)");
243
- });
244
- });
245
-
246
- describe("postgresql", () => {
247
- it("should convert bool to boolean", () => {
248
- expect(schemaToDBType(column("bool"), "postgresql")).toBe("boolean");
249
- });
250
-
251
- it("should convert json to json", () => {
252
- expect(schemaToDBType(column("json"), "postgresql")).toBe("json");
253
- });
254
-
255
- it("should convert string to text", () => {
256
- expect(schemaToDBType(column("string"), "postgresql")).toBe("text");
257
- });
258
-
259
- it("should convert binary to bytea", () => {
260
- expect(schemaToDBType(column("binary"), "postgresql")).toBe("bytea");
261
- });
262
-
263
- it("should preserve varchar with length", () => {
264
- expect(schemaToDBType({ type: "varchar(200)" }, "postgresql")).toBe("varchar(200)");
265
- });
266
-
267
- it("should preserve other types", () => {
268
- expect(schemaToDBType(column("timestamp"), "postgresql")).toBe("timestamp");
269
- expect(schemaToDBType(column("integer"), "postgresql")).toBe("integer");
270
- });
271
- });
272
-
273
- describe("cockroachdb", () => {
274
- it("should behave like postgresql", () => {
275
- expect(schemaToDBType(column("bool"), "cockroachdb")).toBe("boolean");
276
- expect(schemaToDBType(column("string"), "cockroachdb")).toBe("text");
277
- });
278
- });
279
-
280
- describe("mysql", () => {
281
- it("should convert bool to boolean", () => {
282
- expect(schemaToDBType(column("bool"), "mysql")).toBe("boolean");
283
- });
284
-
285
- it("should convert string to text", () => {
286
- expect(schemaToDBType(column("string"), "mysql")).toBe("text");
287
- });
288
-
289
- it("should convert binary to longblob", () => {
290
- expect(schemaToDBType(column("binary"), "mysql")).toBe("longblob");
291
- });
292
-
293
- it("should preserve varchar with length", () => {
294
- expect(schemaToDBType({ type: "varchar(150)" }, "mysql")).toBe("varchar(150)");
295
- });
296
-
297
- it("should preserve other types", () => {
298
- expect(schemaToDBType(column("integer"), "mysql")).toBe("integer");
299
- expect(schemaToDBType(column("json"), "mysql")).toBe("json");
300
- });
301
- });
302
- });
303
-
304
41
  describe("deserialize", () => {
305
42
  it("should return null for null values", () => {
306
43
  expect(deserialize(null, column("string"), "sqlite")).toBe(null);
@@ -347,7 +84,7 @@ describe("serialize", () => {
347
84
  const timestampCol = column("timestamp");
348
85
  const time = "2024-06-15T14:30:00+05:30"; // India Standard Time
349
86
  const result = deserialize(time, timestampCol, "sqlite");
350
- expect(result).toBeInstanceOf(Date);
87
+ assert.instanceOf(result, Date);
351
88
  expect(result.toISOString()).toBe("2024-06-15T09:00:00.000Z");
352
89
  });
353
90
 
@@ -355,7 +92,7 @@ describe("serialize", () => {
355
92
  const timestampCol = column("timestamp");
356
93
  const time = "2024-06-15T14:30:00-08:00"; // Pacific Time
357
94
  const result = deserialize(time, timestampCol, "sqlite");
358
- expect(result).toBeInstanceOf(Date);
95
+ assert.instanceOf(result, Date);
359
96
  expect(result.toISOString()).toBe("2024-06-15T22:30:00.000Z");
360
97
  });
361
98
 
@@ -366,7 +103,7 @@ describe("serialize", () => {
366
103
  const numericTimestamp = specificDate.getTime();
367
104
 
368
105
  const result = deserialize(numericTimestamp, timestampCol, "sqlite");
369
- expect(result).toBeInstanceOf(Date);
106
+ assert.instanceOf(result, Date);
370
107
  expect(result.getTime()).toBe(numericTimestamp);
371
108
  expect(result.toISOString()).toBe("2024-06-15T12:00:00.000Z");
372
109
  });
@@ -376,6 +113,7 @@ describe("serialize", () => {
376
113
  // Start with a date with timezone info
377
114
  const originalTime = "2024-06-15T14:30:00+02:00";
378
115
  const deserialized = deserialize(originalTime, timestampCol, "sqlite");
116
+ assert.instanceOf(deserialized, Date);
379
117
 
380
118
  // SQLite would store this as a number
381
119
  const numericValue = deserialized.getTime();
@@ -383,7 +121,7 @@ describe("serialize", () => {
383
121
  // Deserialize the numeric value back
384
122
  const roundTrip = deserialize(numericValue, timestampCol, "sqlite");
385
123
 
386
- expect(roundTrip).toBeInstanceOf(Date);
124
+ assert.instanceOf(roundTrip, Date);
387
125
  expect(roundTrip.getTime()).toBe(deserialized.getTime());
388
126
  expect(roundTrip.toISOString()).toBe(deserialized.toISOString());
389
127
  });
@@ -412,7 +150,7 @@ describe("serialize", () => {
412
150
  const timestampCol = column("timestamp");
413
151
  const time = "2024-06-15T14:30:00+05:30"; // India Standard Time
414
152
  const result = deserialize(time, timestampCol, "postgresql");
415
- expect(result).toBeInstanceOf(Date);
153
+ assert.instanceOf(result, Date);
416
154
  expect(result.toISOString()).toBe("2024-06-15T09:00:00.000Z");
417
155
  });
418
156
 
@@ -420,7 +158,7 @@ describe("serialize", () => {
420
158
  const timestampCol = column("timestamp");
421
159
  const time = "2024-06-15T14:30:00-08:00"; // Pacific Time
422
160
  const result = deserialize(time, timestampCol, "postgresql");
423
- expect(result).toBeInstanceOf(Date);
161
+ assert.instanceOf(result, Date);
424
162
  expect(result.toISOString()).toBe("2024-06-15T22:30:00.000Z");
425
163
  });
426
164
 
@@ -428,7 +166,7 @@ describe("serialize", () => {
428
166
  const timestampCol = column("timestamp");
429
167
  const time = "2024-06-15T14:30:45.123+01:00"; // Central European Time
430
168
  const result = deserialize(time, timestampCol, "postgresql");
431
- expect(result).toBeInstanceOf(Date);
169
+ assert.instanceOf(result, Date);
432
170
  expect(result.toISOString()).toBe("2024-06-15T13:30:45.123Z");
433
171
  expect(result.getTime()).toBe(new Date("2024-06-15T13:30:45.123Z").getTime());
434
172
  });
@@ -444,6 +182,10 @@ describe("serialize", () => {
444
182
  const estResult = deserialize(estTime, timestampCol, "postgresql");
445
183
  const jstResult = deserialize(jstTime, timestampCol, "postgresql");
446
184
 
185
+ assert.instanceOf(utcResult, Date);
186
+ assert.instanceOf(estResult, Date);
187
+ assert.instanceOf(jstResult, Date);
188
+
447
189
  // All should represent the same absolute time
448
190
  expect(utcResult.getTime()).toBe(estResult.getTime());
449
191
  expect(utcResult.getTime()).toBe(jstResult.getTime());
@@ -474,7 +216,7 @@ describe("serialize", () => {
474
216
  const timestampCol = column("timestamp");
475
217
  const time = "2024-06-15T14:30:00+05:30"; // India Standard Time
476
218
  const result = deserialize(time, timestampCol, "mysql");
477
- expect(result).toBeInstanceOf(Date);
219
+ assert.instanceOf(result, Date);
478
220
  expect(result.toISOString()).toBe("2024-06-15T09:00:00.000Z");
479
221
  });
480
222
 
@@ -482,7 +224,7 @@ describe("serialize", () => {
482
224
  const timestampCol = column("timestamp");
483
225
  const time = "2024-06-15T14:30:00-08:00"; // Pacific Time
484
226
  const result = deserialize(time, timestampCol, "mysql");
485
- expect(result).toBeInstanceOf(Date);
227
+ assert.instanceOf(result, Date);
486
228
  expect(result.toISOString()).toBe("2024-06-15T22:30:00.000Z");
487
229
  });
488
230
 
@@ -490,7 +232,7 @@ describe("serialize", () => {
490
232
  const timestampCol = column("timestamp");
491
233
  const time = "2024-06-15T14:30:45.123+01:00"; // Central European Time
492
234
  const result = deserialize(time, timestampCol, "mysql");
493
- expect(result).toBeInstanceOf(Date);
235
+ assert.instanceOf(result, Date);
494
236
  expect(result.toISOString()).toBe("2024-06-15T13:30:45.123Z");
495
237
  });
496
238
 
@@ -505,6 +247,10 @@ describe("serialize", () => {
505
247
  const cstResult = deserialize(cstTime, timestampCol, "mysql");
506
248
  const pstResult = deserialize(pstTime, timestampCol, "mysql");
507
249
 
250
+ assert.instanceOf(utcResult, Date);
251
+ assert.instanceOf(cstResult, Date);
252
+ assert.instanceOf(pstResult, Date);
253
+
508
254
  // All should represent the same absolute time
509
255
  expect(utcResult.getTime()).toBe(cstResult.getTime());
510
256
  expect(utcResult.getTime()).toBe(pstResult.getTime());
@@ -529,7 +275,7 @@ describe("serialize", () => {
529
275
  const timestampCol = column("timestamp");
530
276
  const time = "2024-06-15T14:30:00+05:30"; // India Standard Time
531
277
  const result = deserialize(time, timestampCol, "cockroachdb");
532
- expect(result).toBeInstanceOf(Date);
278
+ assert.instanceOf(result, Date);
533
279
  expect(result.toISOString()).toBe("2024-06-15T09:00:00.000Z");
534
280
  });
535
281
 
@@ -537,7 +283,7 @@ describe("serialize", () => {
537
283
  const timestampCol = column("timestamp");
538
284
  const time = "2024-06-15T14:30:00-08:00"; // Pacific Time
539
285
  const result = deserialize(time, timestampCol, "cockroachdb");
540
- expect(result).toBeInstanceOf(Date);
286
+ assert.instanceOf(result, Date);
541
287
  expect(result.toISOString()).toBe("2024-06-15T22:30:00.000Z");
542
288
  });
543
289
 
@@ -545,7 +291,7 @@ describe("serialize", () => {
545
291
  const timestampCol = column("timestamp");
546
292
  const time = "2024-06-15T14:30:45.123+01:00"; // Central European Time
547
293
  const result = deserialize(time, timestampCol, "cockroachdb");
548
- expect(result).toBeInstanceOf(Date);
294
+ assert.instanceOf(result, Date);
549
295
  expect(result.toISOString()).toBe("2024-06-15T13:30:45.123Z");
550
296
  });
551
297
 
@@ -560,6 +306,10 @@ describe("serialize", () => {
560
306
  const aestResult = deserialize(aestTime, timestampCol, "cockroachdb");
561
307
  const brtResult = deserialize(brtTime, timestampCol, "cockroachdb");
562
308
 
309
+ assert.instanceOf(utcResult, Date);
310
+ assert.instanceOf(aestResult, Date);
311
+ assert.instanceOf(brtResult, Date);
312
+
563
313
  // All should represent the same absolute time
564
314
  expect(utcResult.getTime()).toBe(aestResult.getTime());
565
315
  expect(utcResult.getTime()).toBe(brtResult.getTime());
@@ -607,8 +357,8 @@ describe("serialize", () => {
607
357
  const binaryCol = column("binary");
608
358
  const buffer = Buffer.from([1, 2, 3, 4]);
609
359
  const result = deserialize(buffer, binaryCol, "postgresql");
610
- expect(result).toBeInstanceOf(Uint8Array);
611
- expect(Array.from(result as Uint8Array)).toEqual([1, 2, 3, 4]);
360
+ assert.instanceOf(result, Uint8Array);
361
+ expect(Array.from(result)).toEqual([1, 2, 3, 4]);
612
362
  });
613
363
  });
614
364
  });
@@ -660,8 +410,8 @@ describe("serialize", () => {
660
410
  it("should convert bigint to Buffer", () => {
661
411
  const bigintValue = 123456789n;
662
412
  const result = serialize(bigintValue, column("bigint"), "sqlite");
663
- expect(result).toBeInstanceOf(Buffer);
664
- expect((result as Buffer).readBigInt64BE(0)).toBe(bigintValue);
413
+ assert.instanceOf(result, Buffer);
414
+ expect(result.readBigInt64BE(0)).toBe(bigintValue);
665
415
  });
666
416
  });
667
417
 
@@ -670,8 +420,8 @@ describe("serialize", () => {
670
420
  const binaryCol = column("binary");
671
421
  const uint8 = new Uint8Array([1, 2, 3, 4]);
672
422
  const result = serialize(uint8, binaryCol, "postgresql");
673
- expect(result).toBeInstanceOf(Buffer);
674
- expect(Array.from(result as Buffer)).toEqual([1, 2, 3, 4]);
423
+ assert.instanceOf(result, Buffer);
424
+ expect(Array.from(result)).toEqual([1, 2, 3, 4]);
675
425
  });
676
426
 
677
427
  it("should handle Buffer as-is", () => {
@@ -679,7 +429,7 @@ describe("serialize", () => {
679
429
  const buffer = Buffer.from([1, 2, 3, 4]);
680
430
  const result = serialize(buffer, binaryCol, "mysql");
681
431
  // Buffer is also a Uint8Array, so it should be converted
682
- expect(result).toBeInstanceOf(Buffer);
432
+ assert.instanceOf(result, Buffer);
683
433
  });
684
434
  });
685
435
 
@@ -691,92 +441,100 @@ describe("serialize", () => {
691
441
  });
692
442
  });
693
443
 
694
- describe("FragnoId handling", () => {
695
- it("should serialize FragnoId for external-id column", () => {
696
- const externalIdCol = column("string");
697
- externalIdCol.role = "external-id";
698
- const fragnoId = FragnoId.fromExternal("user123", 0);
699
-
700
- expect(serialize(fragnoId, externalIdCol, "postgresql")).toBe("user123");
701
- expect(serialize(fragnoId, externalIdCol, "sqlite")).toBe("user123");
702
- expect(serialize(fragnoId, externalIdCol, "mysql")).toBe("user123");
703
- });
704
-
705
- it("should serialize FragnoId for internal-id column", () => {
706
- const internalIdCol = column("bigint");
707
- internalIdCol.role = "internal-id";
708
- const fragnoId = new FragnoId({
709
- externalId: "user123",
710
- internalId: BigInt(456),
711
- version: 0,
712
- });
713
-
714
- expect(serialize(fragnoId, internalIdCol, "postgresql")).toBe(BigInt(456));
715
- expect(serialize(fragnoId, internalIdCol, "sqlite")).toBe(BigInt(456));
716
- expect(serialize(fragnoId, internalIdCol, "mysql")).toBe(BigInt(456));
717
- });
718
-
719
- it("should throw error when FragnoId lacks internal ID for internal-id column", () => {
720
- const internalIdCol = column("bigint");
721
- internalIdCol.role = "internal-id";
722
- const fragnoId = FragnoId.fromExternal("user123", 0);
723
-
724
- expect(() => serialize(fragnoId, internalIdCol, "postgresql")).toThrow(
725
- "FragnoId must have internalId for internal-id column",
726
- );
727
- });
728
-
729
- it("should serialize FragnoId for reference column (prefer internal ID)", () => {
730
- const referenceCol = column("bigint");
731
- referenceCol.role = "reference";
732
- const fragnoId = new FragnoId({
733
- externalId: "user123",
734
- internalId: BigInt(456),
735
- version: 0,
736
- });
737
-
738
- expect(serialize(fragnoId, referenceCol, "postgresql")).toBe(BigInt(456));
739
- expect(serialize(fragnoId, referenceCol, "sqlite")).toBe(BigInt(456));
740
- expect(serialize(fragnoId, referenceCol, "mysql")).toBe(BigInt(456));
741
- });
742
-
743
- it("should fallback to external ID for reference column when internal ID unavailable", () => {
744
- const referenceCol = column("bigint");
745
- referenceCol.role = "reference";
746
- const fragnoId = FragnoId.fromExternal("user123", 0);
747
-
748
- expect(serialize(fragnoId, referenceCol, "postgresql")).toBe("user123");
749
- expect(serialize(fragnoId, referenceCol, "sqlite")).toBe("user123");
750
- });
751
-
752
- it("should serialize FragnoId for regular column (use external ID)", () => {
753
- const regularCol = column("string");
754
- regularCol.role = "regular";
755
- const fragnoId = new FragnoId({
756
- externalId: "user123",
757
- internalId: BigInt(456),
758
- version: 0,
759
- });
760
-
761
- expect(serialize(fragnoId, regularCol, "postgresql")).toBe("user123");
762
- expect(serialize(fragnoId, regularCol, "mysql")).toBe("user123");
763
- });
764
-
765
- it("should handle FragnoId serialization with different providers", () => {
766
- const externalIdCol = column("string");
767
- externalIdCol.role = "external-id";
768
- const fragnoId = new FragnoId({
769
- externalId: "user123",
770
- internalId: BigInt(456),
771
- version: 0,
772
- });
773
-
774
- // Test across different providers
775
- expect(serialize(fragnoId, externalIdCol, "sqlite")).toBe("user123");
776
- expect(serialize(fragnoId, externalIdCol, "postgresql")).toBe("user123");
777
- expect(serialize(fragnoId, externalIdCol, "mysql")).toBe("user123");
778
- expect(serialize(fragnoId, externalIdCol, "mssql")).toBe("user123");
779
- expect(serialize(fragnoId, externalIdCol, "cockroachdb")).toBe("user123");
444
+ describe("skipDriverConversions", () => {
445
+ it("should skip Date to number conversion for SQLite when enabled", () => {
446
+ const date = new Date("2024-01-01T00:00:00.000Z");
447
+ const timestampCol = column("timestamp");
448
+
449
+ // Default behavior: converts to number
450
+ const withConversion = serialize(date, timestampCol, "sqlite", false);
451
+ expect(withConversion).toBe(date.getTime());
452
+ expect(typeof withConversion).toBe("number");
453
+
454
+ // With skipDriverConversions: passes through Date
455
+ const withoutConversion = serialize(date, timestampCol, "sqlite", true);
456
+ expect(withoutConversion).toBe(date);
457
+ assert.instanceOf(withoutConversion, Date);
458
+ });
459
+
460
+ it("should skip boolean to number conversion for SQLite when enabled", () => {
461
+ const boolCol = column("bool");
462
+
463
+ // Default behavior: converts to 0/1
464
+ expect(serialize(true, boolCol, "sqlite", false)).toBe(1);
465
+ expect(serialize(false, boolCol, "sqlite", false)).toBe(0);
466
+
467
+ // With skipDriverConversions: passes through boolean
468
+ expect(serialize(true, boolCol, "sqlite", true)).toBe(true);
469
+ expect(serialize(false, boolCol, "sqlite", true)).toBe(false);
470
+ });
471
+
472
+ it("should skip bigint to Buffer conversion for SQLite when enabled", () => {
473
+ const bigintValue = 123456789n;
474
+ const bigintCol = column("bigint");
475
+
476
+ // Default behavior: converts to Buffer
477
+ const withConversion = serialize(bigintValue, bigintCol, "sqlite", false);
478
+ assert.instanceOf(withConversion, Buffer);
479
+ expect(withConversion.readBigInt64BE(0)).toBe(bigintValue);
480
+
481
+ // With skipDriverConversions: passes through bigint
482
+ const withoutConversion = serialize(bigintValue, bigintCol, "sqlite", true);
483
+ expect(withoutConversion).toBe(bigintValue);
484
+ expect(typeof withoutConversion).toBe("bigint");
485
+ });
486
+
487
+ it("should skip reference column bigint to Number conversion for SQLite when enabled", () => {
488
+ const bigintValue = 123456789n;
489
+ const refCol = referenceColumn();
490
+
491
+ // Default behavior: converts to Number for reference columns
492
+ const withConversion = serialize(bigintValue, refCol, "sqlite", false);
493
+ expect(withConversion).toBe(123456789);
494
+ expect(typeof withConversion).toBe("number");
495
+
496
+ // With skipDriverConversions: passes through bigint
497
+ const withoutConversion = serialize(bigintValue, refCol, "sqlite", true);
498
+ expect(withoutConversion).toBe(bigintValue);
499
+ expect(typeof withoutConversion).toBe("bigint");
500
+ });
501
+
502
+ it("should skip internal-id column bigint to Number conversion for SQLite when enabled", () => {
503
+ const bigintValue = 123456789n;
504
+ const internalIdCol = internalIdColumn();
505
+
506
+ // Default behavior: converts to Number for internal-id columns
507
+ const withConversion = serialize(bigintValue, internalIdCol, "sqlite", false);
508
+ expect(withConversion).toBe(123456789);
509
+ expect(typeof withConversion).toBe("number");
510
+
511
+ // With skipDriverConversions: passes through bigint
512
+ const withoutConversion = serialize(bigintValue, internalIdCol, "sqlite", true);
513
+ expect(withoutConversion).toBe(bigintValue);
514
+ expect(typeof withoutConversion).toBe("bigint");
515
+ });
516
+
517
+ it("should still handle JSON stringification when skipDriverConversions is enabled", () => {
518
+ const jsonCol = column("json");
519
+ const obj = { key: "value" };
520
+
521
+ // JSON stringification happens regardless of skipDriverConversions
522
+ expect(serialize(obj, jsonCol, "sqlite", false)).toBe('{"key":"value"}');
523
+ expect(serialize(obj, jsonCol, "sqlite", true)).toBe('{"key":"value"}');
524
+ });
525
+
526
+ it("should still handle binary conversion when skipDriverConversions is enabled", () => {
527
+ const binaryCol = column("binary");
528
+ const uint8 = new Uint8Array([1, 2, 3, 4]);
529
+
530
+ // Binary conversion happens regardless of skipDriverConversions
531
+ const withConversion = serialize(uint8, binaryCol, "sqlite", false);
532
+ assert.instanceOf(withConversion, Buffer);
533
+ expect(Array.from(withConversion)).toEqual([1, 2, 3, 4]);
534
+
535
+ const withoutConversion = serialize(uint8, binaryCol, "sqlite", true);
536
+ assert.instanceOf(withoutConversion, Buffer);
537
+ expect(Array.from(withoutConversion)).toEqual([1, 2, 3, 4]);
780
538
  });
781
539
  });
782
540
  });