@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,6 +1,7 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { column, idColumn, referenceColumn, schema } from "../../schema/create";
3
3
  import { generateSchema } from "./generate";
4
+ import { internalSchema } from "../../fragments/internal-fragment";
4
5
 
5
6
  describe("generateSchema", () => {
6
7
  const testSchema = schema((s) => {
@@ -35,26 +36,10 @@ describe("generateSchema", () => {
35
36
  it("should generate PostgreSQL schema", () => {
36
37
  const generated = generateSchema([{ namespace: "test", schema: testSchema }], "postgresql");
37
38
  expect(generated).toMatchInlineSnapshot(`
38
- "import { pgTable, varchar, text, bigserial, integer, uniqueIndex, index, bigint, foreignKey } from "drizzle-orm/pg-core"
39
+ "import { pgTable, varchar, text, integer, bigserial, uniqueIndex, index, bigint, foreignKey } from "drizzle-orm/pg-core"
39
40
  import { createId } from "@fragno-dev/db/id"
40
41
  import { relations } from "drizzle-orm"
41
42
 
42
- // ============================================================================
43
- // Settings Table (shared across all fragments)
44
- // ============================================================================
45
-
46
- export const fragno_db_settings = pgTable("fragno_db_settings", {
47
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
48
- key: text("key").notNull(),
49
- value: text("value").notNull(),
50
- _internalId: bigserial("_internalId", { mode: "number" }).primaryKey().notNull(),
51
- _version: integer("_version").notNull().default(0)
52
- }, (table) => [
53
- uniqueIndex("unique_key").on(table.key)
54
- ])
55
-
56
- export const fragnoDbSettingSchemaVersion = 1;
57
-
58
43
  // ============================================================================
59
44
  // Fragment: test
60
45
  // ============================================================================
@@ -122,26 +107,10 @@ describe("generateSchema", () => {
122
107
  it("should generate MySQL schema", () => {
123
108
  const generated = generateSchema([{ namespace: "test", schema: testSchema }], "mysql");
124
109
  expect(generated).toMatchInlineSnapshot(`
125
- "import { mysqlTable, varchar, text, bigint, integer, uniqueIndex, index, foreignKey } from "drizzle-orm/mysql-core"
110
+ "import { mysqlTable, varchar, text, int, bigint, uniqueIndex, index, foreignKey } from "drizzle-orm/mysql-core"
126
111
  import { createId } from "@fragno-dev/db/id"
127
112
  import { relations } from "drizzle-orm"
128
113
 
129
- // ============================================================================
130
- // Settings Table (shared across all fragments)
131
- // ============================================================================
132
-
133
- export const fragno_db_settings = mysqlTable("fragno_db_settings", {
134
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
135
- key: text("key").notNull(),
136
- value: text("value").notNull(),
137
- _internalId: bigint("_internalId").primaryKey().autoincrement().notNull(),
138
- _version: integer("_version").notNull().default(0)
139
- }, (table) => [
140
- uniqueIndex("unique_key").on(table.key)
141
- ])
142
-
143
- export const fragnoDbSettingSchemaVersion = 1;
144
-
145
114
  // ============================================================================
146
115
  // Fragment: test
147
116
  // ============================================================================
@@ -150,9 +119,9 @@ describe("generateSchema", () => {
150
119
  id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
151
120
  name: text("name").notNull(),
152
121
  email: text("email").notNull(),
153
- age: integer("age"),
154
- _internalId: bigint("_internalId").primaryKey().autoincrement().notNull(),
155
- _version: integer("_version").notNull().default(0)
122
+ age: int("age"),
123
+ _internalId: bigint("_internalId", { mode: "number" }).primaryKey().autoincrement().notNull(),
124
+ _version: int("_version").notNull().default(0)
156
125
  }, (table) => [
157
126
  uniqueIndex("idx_email_test").on(table.email),
158
127
  index("idx_name_test").on(table.name)
@@ -162,10 +131,10 @@ describe("generateSchema", () => {
162
131
  id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
163
132
  title: text("title").notNull(),
164
133
  content: text("content").notNull(),
165
- userId: bigint("userId").notNull(),
166
- viewCount: integer("viewCount").notNull().default(0),
167
- _internalId: bigint("_internalId").primaryKey().autoincrement().notNull(),
168
- _version: integer("_version").notNull().default(0)
134
+ userId: bigint("userId", { mode: "number" }).notNull(),
135
+ viewCount: int("viewCount").notNull().default(0),
136
+ _internalId: bigint("_internalId", { mode: "number" }).primaryKey().autoincrement().notNull(),
137
+ _version: int("_version").notNull().default(0)
169
138
  }, (table) => [
170
139
  foreignKey({
171
140
  columns: [table.userId],
@@ -213,22 +182,6 @@ describe("generateSchema", () => {
213
182
  import { createId } from "@fragno-dev/db/id"
214
183
  import { relations } from "drizzle-orm"
215
184
 
216
- // ============================================================================
217
- // Settings Table (shared across all fragments)
218
- // ============================================================================
219
-
220
- export const fragno_db_settings = sqliteTable("fragno_db_settings", {
221
- id: text("id").notNull().$defaultFn(() => createId()),
222
- key: text("key").notNull(),
223
- value: text("value").notNull(),
224
- _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
225
- _version: integer("_version").notNull().default(0)
226
- }, (table) => [
227
- uniqueIndex("unique_key").on(table.key)
228
- ])
229
-
230
- export const fragnoDbSettingSchemaVersion = 1;
231
-
232
185
  // ============================================================================
233
186
  // Fragment: test
234
187
  // ============================================================================
@@ -308,25 +261,9 @@ describe("generateSchema", () => {
308
261
  "postgresql",
309
262
  );
310
263
  expect(generated).toMatchInlineSnapshot(`
311
- "import { pgTable, varchar, text, bigserial, integer, uniqueIndex, timestamp } from "drizzle-orm/pg-core"
264
+ "import { pgTable, varchar, timestamp, bigserial, integer } from "drizzle-orm/pg-core"
312
265
  import { createId } from "@fragno-dev/db/id"
313
266
 
314
- // ============================================================================
315
- // Settings Table (shared across all fragments)
316
- // ============================================================================
317
-
318
- export const fragno_db_settings = pgTable("fragno_db_settings", {
319
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
320
- key: text("key").notNull(),
321
- value: text("value").notNull(),
322
- _internalId: bigserial("_internalId", { mode: "number" }).primaryKey().notNull(),
323
- _version: integer("_version").notNull().default(0)
324
- }, (table) => [
325
- uniqueIndex("unique_key").on(table.key)
326
- ])
327
-
328
- export const fragnoDbSettingSchemaVersion = 1;
329
-
330
267
  // ============================================================================
331
268
  // Fragment: test
332
269
  // ============================================================================
@@ -361,25 +298,9 @@ describe("generateSchema", () => {
361
298
  "postgresql",
362
299
  );
363
300
  expect(generated).toMatchInlineSnapshot(`
364
- "import { pgTable, varchar, text, bigserial, integer, uniqueIndex, timestamp } from "drizzle-orm/pg-core"
301
+ "import { pgTable, varchar, timestamp, bigserial, integer } from "drizzle-orm/pg-core"
365
302
  import { createId } from "@fragno-dev/db/id"
366
303
 
367
- // ============================================================================
368
- // Settings Table (shared across all fragments)
369
- // ============================================================================
370
-
371
- export const fragno_db_settings = pgTable("fragno_db_settings", {
372
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
373
- key: text("key").notNull(),
374
- value: text("value").notNull(),
375
- _internalId: bigserial("_internalId", { mode: "number" }).primaryKey().notNull(),
376
- _version: integer("_version").notNull().default(0)
377
- }, (table) => [
378
- uniqueIndex("unique_key").on(table.key)
379
- ])
380
-
381
- export const fragnoDbSettingSchemaVersion = 1;
382
-
383
304
  // ============================================================================
384
305
  // Fragment: test
385
306
  // ============================================================================
@@ -410,7 +331,7 @@ describe("generateSchema", () => {
410
331
 
411
332
  const generated = generateSchema([{ namespace: "test", schema: binarySchema }], "postgresql");
412
333
  expect(generated).toMatchInlineSnapshot(`
413
- "import { pgTable, varchar, text, bigserial, integer, uniqueIndex, customType } from "drizzle-orm/pg-core"
334
+ "import { pgTable, varchar, customType, bigserial, integer } from "drizzle-orm/pg-core"
414
335
  import { createId } from "@fragno-dev/db/id"
415
336
  const customBinary = customType<
416
337
  {
@@ -429,22 +350,6 @@ describe("generateSchema", () => {
429
350
  }
430
351
  });
431
352
 
432
- // ============================================================================
433
- // Settings Table (shared across all fragments)
434
- // ============================================================================
435
-
436
- export const fragno_db_settings = pgTable("fragno_db_settings", {
437
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
438
- key: text("key").notNull(),
439
- value: text("value").notNull(),
440
- _internalId: bigserial("_internalId", { mode: "number" }).primaryKey().notNull(),
441
- _version: integer("_version").notNull().default(0)
442
- }, (table) => [
443
- uniqueIndex("unique_key").on(table.key)
444
- ])
445
-
446
- export const fragnoDbSettingSchemaVersion = 1;
447
-
448
353
  // ============================================================================
449
354
  // Fragment: test
450
355
  // ============================================================================
@@ -496,26 +401,10 @@ describe("generateSchema", () => {
496
401
  "postgresql",
497
402
  );
498
403
  expect(generated).toMatchInlineSnapshot(`
499
- "import { pgTable, varchar, text, bigserial, integer, uniqueIndex, bigint, foreignKey, index } from "drizzle-orm/pg-core"
404
+ "import { pgTable, varchar, text, bigserial, integer, bigint, foreignKey, index } from "drizzle-orm/pg-core"
500
405
  import { createId } from "@fragno-dev/db/id"
501
406
  import { relations } from "drizzle-orm"
502
407
 
503
- // ============================================================================
504
- // Settings Table (shared across all fragments)
505
- // ============================================================================
506
-
507
- export const fragno_db_settings = pgTable("fragno_db_settings", {
508
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
509
- key: text("key").notNull(),
510
- value: text("value").notNull(),
511
- _internalId: bigserial("_internalId", { mode: "number" }).primaryKey().notNull(),
512
- _version: integer("_version").notNull().default(0)
513
- }, (table) => [
514
- uniqueIndex("unique_key").on(table.key)
515
- ])
516
-
517
- export const fragnoDbSettingSchemaVersion = 1;
518
-
519
408
  // ============================================================================
520
409
  // Fragment: test
521
410
  // ============================================================================
@@ -576,26 +465,10 @@ describe("generateSchema", () => {
576
465
  it("should generate MySQL schema with many relations", () => {
577
466
  const generated = generateSchema([{ namespace: "test", schema: oneToManySchema }], "mysql");
578
467
  expect(generated).toMatchInlineSnapshot(`
579
- "import { mysqlTable, varchar, text, bigint, integer, uniqueIndex, foreignKey, index } from "drizzle-orm/mysql-core"
468
+ "import { mysqlTable, varchar, text, bigint, int, foreignKey, index } from "drizzle-orm/mysql-core"
580
469
  import { createId } from "@fragno-dev/db/id"
581
470
  import { relations } from "drizzle-orm"
582
471
 
583
- // ============================================================================
584
- // Settings Table (shared across all fragments)
585
- // ============================================================================
586
-
587
- export const fragno_db_settings = mysqlTable("fragno_db_settings", {
588
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
589
- key: text("key").notNull(),
590
- value: text("value").notNull(),
591
- _internalId: bigint("_internalId").primaryKey().autoincrement().notNull(),
592
- _version: integer("_version").notNull().default(0)
593
- }, (table) => [
594
- uniqueIndex("unique_key").on(table.key)
595
- ])
596
-
597
- export const fragnoDbSettingSchemaVersion = 1;
598
-
599
472
  // ============================================================================
600
473
  // Fragment: test
601
474
  // ============================================================================
@@ -603,16 +476,16 @@ describe("generateSchema", () => {
603
476
  export const users_test = mysqlTable("users_test", {
604
477
  id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
605
478
  name: text("name").notNull(),
606
- _internalId: bigint("_internalId").primaryKey().autoincrement().notNull(),
607
- _version: integer("_version").notNull().default(0)
479
+ _internalId: bigint("_internalId", { mode: "number" }).primaryKey().autoincrement().notNull(),
480
+ _version: int("_version").notNull().default(0)
608
481
  })
609
482
 
610
483
  export const posts_test = mysqlTable("posts_test", {
611
484
  id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
612
485
  title: text("title").notNull(),
613
- userId: bigint("userId").notNull(),
614
- _internalId: bigint("_internalId").primaryKey().autoincrement().notNull(),
615
- _version: integer("_version").notNull().default(0)
486
+ userId: bigint("userId", { mode: "number" }).notNull(),
487
+ _internalId: bigint("_internalId", { mode: "number" }).primaryKey().autoincrement().notNull(),
488
+ _version: int("_version").notNull().default(0)
616
489
  }, (table) => [
617
490
  foreignKey({
618
491
  columns: [table.userId],
@@ -656,26 +529,10 @@ describe("generateSchema", () => {
656
529
  it("should generate SQLite schema with many relations", () => {
657
530
  const generated = generateSchema([{ namespace: "test", schema: oneToManySchema }], "sqlite");
658
531
  expect(generated).toMatchInlineSnapshot(`
659
- "import { sqliteTable, text, integer, uniqueIndex, foreignKey, index } from "drizzle-orm/sqlite-core"
532
+ "import { sqliteTable, text, integer, foreignKey, index } from "drizzle-orm/sqlite-core"
660
533
  import { createId } from "@fragno-dev/db/id"
661
534
  import { relations } from "drizzle-orm"
662
535
 
663
- // ============================================================================
664
- // Settings Table (shared across all fragments)
665
- // ============================================================================
666
-
667
- export const fragno_db_settings = sqliteTable("fragno_db_settings", {
668
- id: text("id").notNull().$defaultFn(() => createId()),
669
- key: text("key").notNull(),
670
- value: text("value").notNull(),
671
- _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
672
- _version: integer("_version").notNull().default(0)
673
- }, (table) => [
674
- uniqueIndex("unique_key").on(table.key)
675
- ])
676
-
677
- export const fragnoDbSettingSchemaVersion = 1;
678
-
679
536
  // ============================================================================
680
537
  // Fragment: test
681
538
  // ============================================================================
@@ -772,26 +629,10 @@ describe("generateSchema", () => {
772
629
  // Should have schema export
773
630
  expect(generated).toContain("export const test_schema = {");
774
631
  expect(generated).toMatchInlineSnapshot(`
775
- "import { pgTable, varchar, text, bigserial, integer, uniqueIndex, bigint } from "drizzle-orm/pg-core"
632
+ "import { pgTable, varchar, text, bigserial, integer, bigint } from "drizzle-orm/pg-core"
776
633
  import { createId } from "@fragno-dev/db/id"
777
634
  import { relations } from "drizzle-orm"
778
635
 
779
- // ============================================================================
780
- // Settings Table (shared across all fragments)
781
- // ============================================================================
782
-
783
- export const fragno_db_settings = pgTable("fragno_db_settings", {
784
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
785
- key: text("key").notNull(),
786
- value: text("value").notNull(),
787
- _internalId: bigserial("_internalId", { mode: "number" }).primaryKey().notNull(),
788
- _version: integer("_version").notNull().default(0)
789
- }, (table) => [
790
- uniqueIndex("unique_key").on(table.key)
791
- ])
792
-
793
- export const fragnoDbSettingSchemaVersion = 1;
794
-
795
636
  // ============================================================================
796
637
  // Fragment: test
797
638
  // ============================================================================
@@ -864,26 +705,10 @@ describe("generateSchema", () => {
864
705
  expect(fkMatches).toHaveLength(1);
865
706
 
866
707
  expect(generated).toMatchInlineSnapshot(`
867
- "import { pgTable, varchar, text, bigserial, integer, uniqueIndex, bigint, foreignKey } from "drizzle-orm/pg-core"
708
+ "import { pgTable, varchar, text, bigint, bigserial, integer, foreignKey } from "drizzle-orm/pg-core"
868
709
  import { createId } from "@fragno-dev/db/id"
869
710
  import { relations } from "drizzle-orm"
870
711
 
871
- // ============================================================================
872
- // Settings Table (shared across all fragments)
873
- // ============================================================================
874
-
875
- export const fragno_db_settings = pgTable("fragno_db_settings", {
876
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
877
- key: text("key").notNull(),
878
- value: text("value").notNull(),
879
- _internalId: bigserial("_internalId", { mode: "number" }).primaryKey().notNull(),
880
- _version: integer("_version").notNull().default(0)
881
- }, (table) => [
882
- uniqueIndex("unique_key").on(table.key)
883
- ])
884
-
885
- export const fragnoDbSettingSchemaVersion = 1;
886
-
887
712
  // ============================================================================
888
713
  // Fragment: test
889
714
  // ============================================================================
@@ -950,26 +775,10 @@ describe("generateSchema", () => {
950
775
  "postgresql",
951
776
  );
952
777
  expect(generated).toMatchInlineSnapshot(`
953
- "import { pgTable, varchar, text, bigserial, integer, uniqueIndex, bigint, foreignKey, index } from "drizzle-orm/pg-core"
778
+ "import { pgTable, varchar, text, bigint, bigserial, integer, foreignKey, index } from "drizzle-orm/pg-core"
954
779
  import { createId } from "@fragno-dev/db/id"
955
780
  import { relations } from "drizzle-orm"
956
781
 
957
- // ============================================================================
958
- // Settings Table (shared across all fragments)
959
- // ============================================================================
960
-
961
- export const fragno_db_settings = pgTable("fragno_db_settings", {
962
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
963
- key: text("key").notNull(),
964
- value: text("value").notNull(),
965
- _internalId: bigserial("_internalId", { mode: "number" }).primaryKey().notNull(),
966
- _version: integer("_version").notNull().default(0)
967
- }, (table) => [
968
- uniqueIndex("unique_key").on(table.key)
969
- ])
970
-
971
- export const fragnoDbSettingSchemaVersion = 1;
972
-
973
782
  // ============================================================================
974
783
  // Fragment: test
975
784
  // ============================================================================
@@ -1013,26 +822,10 @@ describe("generateSchema", () => {
1013
822
  it("should generate MySQL self-referencing foreign key using table parameter", () => {
1014
823
  const generated = generateSchema([{ namespace: "test", schema: selfRefSchema }], "mysql");
1015
824
  expect(generated).toMatchInlineSnapshot(`
1016
- "import { mysqlTable, varchar, text, bigint, integer, uniqueIndex, foreignKey, index } from "drizzle-orm/mysql-core"
825
+ "import { mysqlTable, varchar, text, bigint, int, foreignKey, index } from "drizzle-orm/mysql-core"
1017
826
  import { createId } from "@fragno-dev/db/id"
1018
827
  import { relations } from "drizzle-orm"
1019
828
 
1020
- // ============================================================================
1021
- // Settings Table (shared across all fragments)
1022
- // ============================================================================
1023
-
1024
- export const fragno_db_settings = mysqlTable("fragno_db_settings", {
1025
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
1026
- key: text("key").notNull(),
1027
- value: text("value").notNull(),
1028
- _internalId: bigint("_internalId").primaryKey().autoincrement().notNull(),
1029
- _version: integer("_version").notNull().default(0)
1030
- }, (table) => [
1031
- uniqueIndex("unique_key").on(table.key)
1032
- ])
1033
-
1034
- export const fragnoDbSettingSchemaVersion = 1;
1035
-
1036
829
  // ============================================================================
1037
830
  // Fragment: test
1038
831
  // ============================================================================
@@ -1040,9 +833,9 @@ describe("generateSchema", () => {
1040
833
  export const comment_test = mysqlTable("comment_test", {
1041
834
  id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
1042
835
  content: text("content").notNull(),
1043
- parentId: bigint("parentId"),
1044
- _internalId: bigint("_internalId").primaryKey().autoincrement().notNull(),
1045
- _version: integer("_version").notNull().default(0)
836
+ parentId: bigint("parentId", { mode: "number" }),
837
+ _internalId: bigint("_internalId", { mode: "number" }).primaryKey().autoincrement().notNull(),
838
+ _version: int("_version").notNull().default(0)
1046
839
  }, (table) => [
1047
840
  foreignKey({
1048
841
  columns: [table.parentId],
@@ -1076,26 +869,10 @@ describe("generateSchema", () => {
1076
869
  it("should generate SQLite self-referencing foreign key using table parameter", () => {
1077
870
  const generated = generateSchema([{ namespace: "test", schema: selfRefSchema }], "sqlite");
1078
871
  expect(generated).toMatchInlineSnapshot(`
1079
- "import { sqliteTable, text, integer, uniqueIndex, foreignKey, index } from "drizzle-orm/sqlite-core"
872
+ "import { sqliteTable, text, integer, foreignKey, index } from "drizzle-orm/sqlite-core"
1080
873
  import { createId } from "@fragno-dev/db/id"
1081
874
  import { relations } from "drizzle-orm"
1082
875
 
1083
- // ============================================================================
1084
- // Settings Table (shared across all fragments)
1085
- // ============================================================================
1086
-
1087
- export const fragno_db_settings = sqliteTable("fragno_db_settings", {
1088
- id: text("id").notNull().$defaultFn(() => createId()),
1089
- key: text("key").notNull(),
1090
- value: text("value").notNull(),
1091
- _internalId: integer("_internalId").primaryKey({ autoIncrement: true }).notNull(),
1092
- _version: integer("_version").notNull().default(0)
1093
- }, (table) => [
1094
- uniqueIndex("unique_key").on(table.key)
1095
- ])
1096
-
1097
- export const fragnoDbSettingSchemaVersion = 1;
1098
-
1099
876
  // ============================================================================
1100
877
  // Fragment: test
1101
878
  // ============================================================================
@@ -1209,26 +986,10 @@ describe("generateSchema", () => {
1209
986
  expect(generated).toContain('pgTable("posts_my_fragment_v2"');
1210
987
 
1211
988
  expect(generated).toMatchInlineSnapshot(`
1212
- "import { pgTable, varchar, text, bigserial, integer, uniqueIndex, index, bigint, foreignKey } from "drizzle-orm/pg-core"
989
+ "import { pgTable, varchar, text, integer, bigserial, uniqueIndex, index, bigint, foreignKey } from "drizzle-orm/pg-core"
1213
990
  import { createId } from "@fragno-dev/db/id"
1214
991
  import { relations } from "drizzle-orm"
1215
992
 
1216
- // ============================================================================
1217
- // Settings Table (shared across all fragments)
1218
- // ============================================================================
1219
-
1220
- export const fragno_db_settings = pgTable("fragno_db_settings", {
1221
- id: varchar("id", { length: 30 }).notNull().$defaultFn(() => createId()),
1222
- key: text("key").notNull(),
1223
- value: text("value").notNull(),
1224
- _internalId: bigserial("_internalId", { mode: "number" }).primaryKey().notNull(),
1225
- _version: integer("_version").notNull().default(0)
1226
- }, (table) => [
1227
- uniqueIndex("unique_key").on(table.key)
1228
- ])
1229
-
1230
- export const fragnoDbSettingSchemaVersion = 1;
1231
-
1232
993
  // ============================================================================
1233
994
  // Fragment: my-fragment-v2
1234
995
  // ============================================================================
@@ -1291,4 +1052,76 @@ describe("generateSchema", () => {
1291
1052
  `);
1292
1053
  });
1293
1054
  });
1055
+
1056
+ describe("schema generation", () => {
1057
+ it("should generate settings schema and multiple user fragments", () => {
1058
+ // settingsSchema is imported at the top to simulate what happens with linked internal fragments
1059
+ const fragment1Schema = schema((s) => {
1060
+ return s.addTable("users", (t) => {
1061
+ return t.addColumn("id", idColumn()).addColumn("name", column("string"));
1062
+ });
1063
+ });
1064
+
1065
+ const fragment2Schema = schema((s) => {
1066
+ return s.addTable("posts", (t) => {
1067
+ return t.addColumn("id", idColumn()).addColumn("title", column("string"));
1068
+ });
1069
+ });
1070
+
1071
+ // De-duplication happens in generation-engine.ts before calling generateSchema
1072
+ // This test verifies generateSchema works correctly with already-deduplicated inputs
1073
+ const generated = generateSchema(
1074
+ [
1075
+ { namespace: "", schema: internalSchema }, // Internal fragment (namespace: "")
1076
+ { namespace: "fragment1", schema: fragment1Schema },
1077
+ { namespace: "fragment2", schema: fragment2Schema },
1078
+ ],
1079
+ "postgresql",
1080
+ );
1081
+
1082
+ // Count how many times fragno_db_settings appears in the output
1083
+ const settingsTableMatches = generated.match(/export const fragno_db_settings = /g);
1084
+ expect(settingsTableMatches).toHaveLength(1);
1085
+
1086
+ // Verify it appears before the fragment tables
1087
+ const lines = generated.split("\n");
1088
+ const settingsIndex = lines.findIndex((line) =>
1089
+ line.includes("export const fragno_db_settings"),
1090
+ );
1091
+ const usersIndex = lines.findIndex((line) => line.includes("export const users_fragment1"));
1092
+ const postsIndex = lines.findIndex((line) => line.includes("export const posts_fragment2"));
1093
+
1094
+ expect(settingsIndex).toBeLessThan(usersIndex);
1095
+ expect(settingsIndex).toBeLessThan(postsIndex);
1096
+
1097
+ // Verify the structure includes all expected tables
1098
+ expect(generated).toContain("export const fragno_db_settings");
1099
+ expect(generated).toContain("export const users_fragment1");
1100
+ expect(generated).toContain("export const posts_fragment2");
1101
+ expect(generated).toContain("export const fragment1_schema");
1102
+ expect(generated).toContain("export const fragment2_schema");
1103
+ });
1104
+
1105
+ it("should generate schema for single fragment with custom namespace", () => {
1106
+ // Test a simple single-schema generation
1107
+ const sharedSchema = schema((s) => {
1108
+ return s.addTable("shared_table", (t) => {
1109
+ return t.addColumn("id", idColumn()).addColumn("data", column("string"));
1110
+ });
1111
+ });
1112
+
1113
+ // De-duplication happens in generation-engine.ts, so we pass pre-deduplicated input
1114
+ const generated = generateSchema(
1115
+ [{ namespace: "namespace1", schema: sharedSchema }],
1116
+ "postgresql",
1117
+ );
1118
+
1119
+ // Should generate the schema with the provided namespace
1120
+ const sharedTableMatches = generated.match(/export const shared_table_/g);
1121
+ expect(sharedTableMatches).toHaveLength(1);
1122
+
1123
+ expect(generated).toContain("export const shared_table_namespace1");
1124
+ expect(generated).toContain("export const namespace1_schema");
1125
+ });
1126
+ });
1294
1127
  });