@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,104 +0,0 @@
1
- import { isUpdated } from "../../../migration-engine/shared.js";
2
- import { BaseMigrationExecutor, createUniqueIndex, dropUniqueIndex, getForeignKeyAction } from "./execute-base.js";
3
- import { sql } from "kysely";
4
-
5
- //#region src/adapters/kysely/migration/execute-postgres.ts
6
- const errors = { IdColumnUpdate: "ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds." };
7
- /**
8
- * PostgreSQL/CockroachDB-specific migration executor.
9
- * Uses explicit USING clauses for type conversion.
10
- */
11
- var PostgresMigrationExecutor = class extends BaseMigrationExecutor {
12
- executeOperation(operation, mapper) {
13
- switch (operation.type) {
14
- case "create-table": return this.createTable(operation, mapper);
15
- case "rename-table": return this.renameTable(operation, mapper);
16
- case "alter-table": return this.alterTable(operation, mapper);
17
- case "drop-table": return this.dropTable(operation, mapper);
18
- case "add-foreign-key": return this.addForeignKey(operation, mapper);
19
- case "drop-foreign-key": return this.dropForeignKey(operation, mapper);
20
- case "add-index": return this.addIndex(operation, mapper);
21
- case "drop-index": return this.dropIndex(operation, mapper);
22
- case "custom": return this.handleCustomOperation(operation);
23
- }
24
- }
25
- createTable(operation, mapper) {
26
- const tableName = this.getTableName(operation.name, mapper);
27
- let builder = this.db.schema.createTable(tableName);
28
- for (const columnInfo of operation.columns) builder = builder.addColumn(columnInfo.name, sql.raw(this.getDBType(columnInfo)), this.getColumnBuilderCallback(columnInfo));
29
- return builder;
30
- }
31
- renameTable(operation, mapper) {
32
- return this.db.schema.alterTable(this.getTableName(operation.from, mapper)).renameTo(this.getTableName(operation.to, mapper));
33
- }
34
- alterTable(operation, mapper) {
35
- const results = [];
36
- const tableName = this.getTableName(operation.name, mapper);
37
- for (const columnOp of operation.value) results.push(...this.executeColumnOperation(tableName, columnOp));
38
- return results;
39
- }
40
- executeColumnOperation(tableName, operation) {
41
- const next = () => this.db.schema.alterTable(tableName);
42
- const results = [];
43
- switch (operation.type) {
44
- case "rename-column":
45
- results.push(next().renameColumn(operation.from, operation.to));
46
- return results;
47
- case "drop-column":
48
- results.push(next().dropColumn(operation.name));
49
- return results;
50
- case "create-column": {
51
- const col = operation.value;
52
- results.push(next().addColumn(col.name, sql.raw(this.getDBType(col)), this.getColumnBuilderCallback(col)));
53
- return results;
54
- }
55
- case "update-column": {
56
- const col = operation.value;
57
- if (col.role === "external-id" || col.role === "internal-id") throw new Error(errors.IdColumnUpdate);
58
- if (!isUpdated(operation)) return results;
59
- if (operation.updateDataType) {
60
- const dbType = sql.raw(this.getDBType(col));
61
- results.push(this.rawToNode(sql`ALTER TABLE ${sql.ref(tableName)} ALTER COLUMN ${sql.ref(operation.name)} TYPE ${dbType} USING (${sql.ref(operation.name)}::${dbType})`));
62
- }
63
- if (operation.updateNullable) results.push(next().alterColumn(operation.name, (build) => col.isNullable ? build.dropNotNull() : build.setNotNull()));
64
- if (operation.updateDefault) {
65
- const defaultValue = this.defaultValueToDB(col);
66
- results.push(next().alterColumn(operation.name, (build) => {
67
- if (!defaultValue) return build.dropDefault();
68
- return build.setDefault(defaultValue);
69
- }));
70
- }
71
- return results;
72
- }
73
- }
74
- }
75
- dropTable(operation, mapper) {
76
- return this.db.schema.dropTable(this.getTableName(operation.name, mapper));
77
- }
78
- addForeignKey(operation, mapper) {
79
- const { table, value } = operation;
80
- const action = getForeignKeyAction(this.provider);
81
- return this.db.schema.alterTable(this.getTableName(table, mapper)).addForeignKeyConstraint(value.name, value.columns, this.getTableName(value.referencedTable, mapper), value.referencedColumns, (b) => b.onUpdate(action).onDelete(action));
82
- }
83
- dropForeignKey(operation, mapper) {
84
- const { table, name } = operation;
85
- return this.db.schema.alterTable(this.getTableName(table, mapper)).dropConstraint(name).ifExists();
86
- }
87
- addIndex(operation, mapper) {
88
- const tableName = this.getTableName(operation.table, mapper);
89
- if (operation.unique) return createUniqueIndex(this.db, operation.name, tableName, operation.columns, this.provider);
90
- return this.db.schema.createIndex(operation.name).on(tableName).columns(operation.columns);
91
- }
92
- dropIndex(operation, mapper) {
93
- const tableName = this.getTableName(operation.table, mapper);
94
- return dropUniqueIndex(this.db, operation.name, tableName, this.provider);
95
- }
96
- handleCustomOperation(operation) {
97
- const statement = sql.raw(operation["sql"]);
98
- return this.rawToNode(statement);
99
- }
100
- };
101
-
102
- //#endregion
103
- export { PostgresMigrationExecutor };
104
- //# sourceMappingURL=execute-postgres.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute-postgres.js","names":["results: ExecuteNode[]"],"sources":["../../../../src/adapters/kysely/migration/execute-postgres.ts"],"sourcesContent":["import { sql } from \"kysely\";\nimport {\n type ColumnOperation,\n isUpdated,\n type MigrationOperation,\n} from \"../../../migration-engine/shared\";\nimport type { TableNameMapper } from \"../kysely-shared\";\nimport {\n BaseMigrationExecutor,\n createUniqueIndex,\n dropUniqueIndex,\n type ExecuteNode,\n getForeignKeyAction,\n} from \"./execute-base\";\n\nconst errors = {\n IdColumnUpdate:\n \"ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.\",\n} as const;\n\n/**\n * PostgreSQL/CockroachDB-specific migration executor.\n * Uses explicit USING clauses for type conversion.\n */\nexport class PostgresMigrationExecutor extends BaseMigrationExecutor {\n executeOperation(\n operation: MigrationOperation,\n mapper?: TableNameMapper,\n ): ExecuteNode | ExecuteNode[] {\n switch (operation.type) {\n case \"create-table\":\n return this.createTable(operation, mapper);\n case \"rename-table\":\n return this.renameTable(operation, mapper);\n case \"alter-table\":\n return this.alterTable(operation, mapper);\n case \"drop-table\":\n return this.dropTable(operation, mapper);\n case \"add-foreign-key\":\n return this.addForeignKey(operation, mapper);\n case \"drop-foreign-key\":\n return this.dropForeignKey(operation, mapper);\n case \"add-index\":\n return this.addIndex(operation, mapper);\n case \"drop-index\":\n return this.dropIndex(operation, mapper);\n case \"custom\":\n return this.handleCustomOperation(operation);\n }\n }\n\n private createTable(\n operation: Extract<MigrationOperation, { type: \"create-table\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n const tableName = this.getTableName(operation.name, mapper);\n let builder = this.db.schema.createTable(tableName);\n\n // Add columns\n for (const columnInfo of operation.columns) {\n builder = builder.addColumn(\n columnInfo.name,\n sql.raw(this.getDBType(columnInfo)),\n this.getColumnBuilderCallback(columnInfo),\n );\n }\n\n return builder;\n }\n\n private renameTable(\n operation: Extract<MigrationOperation, { type: \"rename-table\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n return this.db.schema\n .alterTable(this.getTableName(operation.from, mapper))\n .renameTo(this.getTableName(operation.to, mapper));\n }\n\n private alterTable(\n operation: Extract<MigrationOperation, { type: \"alter-table\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode[] {\n const results: ExecuteNode[] = [];\n const tableName = this.getTableName(operation.name, mapper);\n\n for (const columnOp of operation.value) {\n results.push(...this.executeColumnOperation(tableName, columnOp));\n }\n\n return results;\n }\n\n private executeColumnOperation(tableName: string, operation: ColumnOperation): ExecuteNode[] {\n const next = () => this.db.schema.alterTable(tableName);\n const results: ExecuteNode[] = [];\n\n switch (operation.type) {\n case \"rename-column\":\n results.push(next().renameColumn(operation.from, operation.to));\n return results;\n\n case \"drop-column\":\n results.push(next().dropColumn(operation.name));\n return results;\n\n case \"create-column\": {\n const col = operation.value;\n results.push(\n next().addColumn(\n col.name,\n sql.raw(this.getDBType(col)),\n this.getColumnBuilderCallback(col),\n ),\n );\n return results;\n }\n\n case \"update-column\": {\n const col = operation.value;\n\n if (col.role === \"external-id\" || col.role === \"internal-id\") {\n throw new Error(errors.IdColumnUpdate);\n }\n\n if (!isUpdated(operation)) {\n return results;\n }\n\n // PostgreSQL/CockroachDB: Use explicit USING clause for type conversion\n if (operation.updateDataType) {\n const dbType = sql.raw(this.getDBType(col));\n results.push(\n this.rawToNode(\n sql`ALTER TABLE ${sql.ref(tableName)} ALTER COLUMN ${sql.ref(operation.name)} TYPE ${dbType} USING (${sql.ref(operation.name)}::${dbType})`,\n ),\n );\n }\n\n if (operation.updateNullable) {\n results.push(\n next().alterColumn(operation.name, (build) =>\n col.isNullable ? build.dropNotNull() : build.setNotNull(),\n ),\n );\n }\n\n if (operation.updateDefault) {\n const defaultValue = this.defaultValueToDB(col);\n results.push(\n next().alterColumn(operation.name, (build) => {\n if (!defaultValue) {\n return build.dropDefault();\n }\n return build.setDefault(defaultValue);\n }),\n );\n }\n\n return results;\n }\n }\n }\n\n private dropTable(\n operation: Extract<MigrationOperation, { type: \"drop-table\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n return this.db.schema.dropTable(this.getTableName(operation.name, mapper));\n }\n\n private addForeignKey(\n operation: Extract<MigrationOperation, { type: \"add-foreign-key\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n const { table, value } = operation;\n const action = getForeignKeyAction(this.provider);\n\n return this.db.schema\n .alterTable(this.getTableName(table, mapper))\n .addForeignKeyConstraint(\n value.name,\n value.columns,\n this.getTableName(value.referencedTable, mapper),\n value.referencedColumns,\n (b) => b.onUpdate(action).onDelete(action),\n );\n }\n\n private dropForeignKey(\n operation: Extract<MigrationOperation, { type: \"drop-foreign-key\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n const { table, name } = operation;\n return this.db.schema\n .alterTable(this.getTableName(table, mapper))\n .dropConstraint(name)\n .ifExists();\n }\n\n private addIndex(\n operation: Extract<MigrationOperation, { type: \"add-index\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n const tableName = this.getTableName(operation.table, mapper);\n\n if (operation.unique) {\n return createUniqueIndex(\n this.db,\n operation.name,\n tableName,\n operation.columns,\n this.provider,\n );\n }\n\n return this.db.schema.createIndex(operation.name).on(tableName).columns(operation.columns);\n }\n\n private dropIndex(\n operation: Extract<MigrationOperation, { type: \"drop-index\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n const tableName = this.getTableName(operation.table, mapper);\n return dropUniqueIndex(this.db, operation.name, tableName, this.provider);\n }\n\n private handleCustomOperation(\n operation: Extract<MigrationOperation, { type: \"custom\" }>,\n ): ExecuteNode {\n const statement = sql.raw(operation[\"sql\"] as string);\n return this.rawToNode(statement);\n }\n}\n"],"mappings":"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"}
@@ -1,123 +0,0 @@
1
- import { BaseMigrationExecutor, createUniqueIndex, dropUniqueIndex } from "./execute-base.js";
2
- import { sql } from "kysely";
3
-
4
- //#region src/adapters/kysely/migration/execute-sqlite.ts
5
- const errors = {
6
- IdColumnUpdate: "ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.",
7
- SQLiteUpdateColumn: "SQLite doesn't support updating columns. Recreate the table instead.",
8
- SQLiteUpdateForeignKeys: "SQLite doesn't support modifying foreign keys directly. Use `recreate-table` instead."
9
- };
10
- /**
11
- * SQLite-specific migration executor.
12
- * Handles SQLite's limitations around foreign keys and column updates.
13
- */
14
- var SqliteMigrationExecutor = class extends BaseMigrationExecutor {
15
- /**
16
- * SQLite preprocessing: merge add-foreign-key operations into create-table operations
17
- * when both exist in the same batch.
18
- *
19
- * SQLite requires foreign keys to be defined at table creation time. This preprocessing
20
- * step identifies create-table + add-foreign-key pairs and merges them.
21
- */
22
- preprocessOperations(operations) {
23
- const result = [];
24
- const createTableIndices = /* @__PURE__ */ new Map();
25
- const foreignKeysByTable = /* @__PURE__ */ new Map();
26
- for (const op of operations) if (op.type === "create-table") {
27
- createTableIndices.set(op.name, result.length);
28
- result.push(op);
29
- } else if (op.type === "add-foreign-key") {
30
- if (!foreignKeysByTable.has(op.table)) foreignKeysByTable.set(op.table, []);
31
- foreignKeysByTable.get(op.table).push(op);
32
- } else result.push(op);
33
- for (const [tableName, fkOps] of foreignKeysByTable.entries()) {
34
- const createTableIdx = createTableIndices.get(tableName);
35
- if (createTableIdx !== void 0) {
36
- const createOp = result[createTableIdx];
37
- if (createOp.type === "create-table") result[createTableIdx] = {
38
- ...createOp,
39
- metadata: {
40
- ...createOp.metadata,
41
- inlineForeignKeys: fkOps.map((fkOp) => {
42
- if (fkOp.type === "add-foreign-key") return fkOp.value;
43
- throw new Error("Unexpected operation type");
44
- })
45
- }
46
- };
47
- } else result.push(...fkOps);
48
- }
49
- return result;
50
- }
51
- executeOperation(operation, mapper) {
52
- switch (operation.type) {
53
- case "create-table": return this.createTable(operation, mapper);
54
- case "rename-table": return this.renameTable(operation, mapper);
55
- case "alter-table": return this.alterTable(operation, mapper);
56
- case "drop-table": return this.dropTable(operation, mapper);
57
- case "add-foreign-key": throw new Error(errors.SQLiteUpdateForeignKeys);
58
- case "drop-foreign-key": throw new Error(errors.SQLiteUpdateForeignKeys);
59
- case "add-index": return this.addIndex(operation, mapper);
60
- case "drop-index": return this.dropIndex(operation, mapper);
61
- case "custom": return this.handleCustomOperation(operation);
62
- }
63
- }
64
- createTable(operation, mapper) {
65
- const tableName = this.getTableName(operation.name, mapper);
66
- let builder = this.db.schema.createTable(tableName);
67
- for (const columnInfo of operation.columns) builder = builder.addColumn(columnInfo.name, sql.raw(this.getDBType(columnInfo)), this.getColumnBuilderCallback(columnInfo));
68
- const inlineForeignKeys = operation.metadata?.inlineForeignKeys;
69
- if (inlineForeignKeys) for (const fk of inlineForeignKeys) builder = builder.addForeignKeyConstraint(fk.name, fk.columns, this.getTableName(fk.referencedTable, mapper), fk.referencedColumns, (cb) => cb.onUpdate("restrict").onDelete("restrict"));
70
- return builder;
71
- }
72
- renameTable(operation, mapper) {
73
- return this.db.schema.alterTable(this.getTableName(operation.from, mapper)).renameTo(this.getTableName(operation.to, mapper));
74
- }
75
- alterTable(operation, mapper) {
76
- const results = [];
77
- const tableName = this.getTableName(operation.name, mapper);
78
- for (const columnOp of operation.value) results.push(...this.executeColumnOperation(tableName, columnOp));
79
- return results;
80
- }
81
- executeColumnOperation(tableName, operation) {
82
- const next = () => this.db.schema.alterTable(tableName);
83
- const results = [];
84
- switch (operation.type) {
85
- case "rename-column":
86
- results.push(next().renameColumn(operation.from, operation.to));
87
- return results;
88
- case "drop-column":
89
- results.push(next().dropColumn(operation.name));
90
- return results;
91
- case "create-column": {
92
- const col = operation.value;
93
- results.push(next().addColumn(col.name, sql.raw(this.getDBType(col)), this.getColumnBuilderCallback(col)));
94
- return results;
95
- }
96
- case "update-column": {
97
- const col = operation.value;
98
- if (col.role === "external-id" || col.role === "internal-id") throw new Error(errors.IdColumnUpdate);
99
- throw new Error(errors.SQLiteUpdateColumn);
100
- }
101
- }
102
- }
103
- dropTable(operation, mapper) {
104
- return this.db.schema.dropTable(this.getTableName(operation.name, mapper));
105
- }
106
- addIndex(operation, mapper) {
107
- const tableName = this.getTableName(operation.table, mapper);
108
- if (operation.unique) return createUniqueIndex(this.db, operation.name, tableName, operation.columns, this.provider);
109
- return this.db.schema.createIndex(operation.name).on(tableName).columns(operation.columns);
110
- }
111
- dropIndex(operation, mapper) {
112
- const tableName = this.getTableName(operation.table, mapper);
113
- return dropUniqueIndex(this.db, operation.name, tableName, this.provider);
114
- }
115
- handleCustomOperation(operation) {
116
- const statement = sql.raw(operation["sql"]);
117
- return this.rawToNode(statement);
118
- }
119
- };
120
-
121
- //#endregion
122
- export { SqliteMigrationExecutor };
123
- //# sourceMappingURL=execute-sqlite.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute-sqlite.js","names":["result: MigrationOperation<SqliteCreateTableMetadata>[]","builder: any","results: ExecuteNode[]"],"sources":["../../../../src/adapters/kysely/migration/execute-sqlite.ts"],"sourcesContent":["import { sql } from \"kysely\";\nimport type {\n ColumnOperation,\n MigrationOperation,\n SqliteCreateTableMetadata,\n} from \"../../../migration-engine/shared\";\nimport type { TableNameMapper } from \"../kysely-shared\";\nimport {\n BaseMigrationExecutor,\n createUniqueIndex,\n dropUniqueIndex,\n type ExecuteNode,\n} from \"./execute-base\";\n\nconst errors = {\n IdColumnUpdate:\n \"ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.\",\n SQLiteUpdateColumn: \"SQLite doesn't support updating columns. Recreate the table instead.\",\n SQLiteUpdateForeignKeys:\n \"SQLite doesn't support modifying foreign keys directly. Use `recreate-table` instead.\",\n} as const;\n\n/**\n * SQLite-specific migration executor.\n * Handles SQLite's limitations around foreign keys and column updates.\n */\nexport class SqliteMigrationExecutor extends BaseMigrationExecutor<SqliteCreateTableMetadata> {\n /**\n * SQLite preprocessing: merge add-foreign-key operations into create-table operations\n * when both exist in the same batch.\n *\n * SQLite requires foreign keys to be defined at table creation time. This preprocessing\n * step identifies create-table + add-foreign-key pairs and merges them.\n */\n preprocessOperations(\n operations: MigrationOperation[],\n ): MigrationOperation<SqliteCreateTableMetadata>[] {\n const result: MigrationOperation<SqliteCreateTableMetadata>[] = [];\n const createTableIndices = new Map<string, number>(); // table name -> index in result\n const foreignKeysByTable = new Map<string, (typeof operations)[number][]>();\n\n // First pass: identify create-table operations and collect foreign keys\n for (const op of operations) {\n if (op.type === \"create-table\") {\n createTableIndices.set(op.name, result.length);\n result.push(op);\n } else if (op.type === \"add-foreign-key\") {\n if (!foreignKeysByTable.has(op.table)) {\n foreignKeysByTable.set(op.table, []);\n }\n foreignKeysByTable.get(op.table)!.push(op);\n } else {\n result.push(op);\n }\n }\n\n // Second pass: attach foreign keys as metadata to create-table ops\n for (const [tableName, fkOps] of foreignKeysByTable.entries()) {\n const createTableIdx = createTableIndices.get(tableName);\n\n if (createTableIdx !== undefined) {\n // Table is being created in this batch - attach FKs as metadata\n const createOp = result[createTableIdx];\n if (createOp.type === \"create-table\") {\n result[createTableIdx] = {\n ...createOp,\n metadata: {\n ...createOp.metadata,\n inlineForeignKeys: fkOps.map((fkOp) => {\n if (fkOp.type === \"add-foreign-key\") {\n return fkOp.value;\n }\n throw new Error(\"Unexpected operation type\");\n }),\n },\n };\n }\n } else {\n // Table already exists - keep add-foreign-key operations (will throw error during execution)\n result.push(...fkOps);\n }\n }\n\n return result;\n }\n\n executeOperation(\n operation: MigrationOperation<SqliteCreateTableMetadata>,\n mapper?: TableNameMapper,\n ): ExecuteNode | ExecuteNode[] {\n switch (operation.type) {\n case \"create-table\":\n return this.createTable(operation, mapper);\n case \"rename-table\":\n return this.renameTable(operation, mapper);\n case \"alter-table\":\n return this.alterTable(operation, mapper);\n case \"drop-table\":\n return this.dropTable(operation, mapper);\n case \"add-foreign-key\":\n throw new Error(errors.SQLiteUpdateForeignKeys);\n case \"drop-foreign-key\":\n throw new Error(errors.SQLiteUpdateForeignKeys);\n case \"add-index\":\n return this.addIndex(operation, mapper);\n case \"drop-index\":\n return this.dropIndex(operation, mapper);\n case \"custom\":\n return this.handleCustomOperation(operation);\n }\n }\n\n private createTable(\n operation: Extract<MigrationOperation<SqliteCreateTableMetadata>, { type: \"create-table\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n const tableName = this.getTableName(operation.name, mapper);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let builder: any = this.db.schema.createTable(tableName);\n\n // Add columns\n for (const columnInfo of operation.columns) {\n builder = builder.addColumn(\n columnInfo.name,\n sql.raw(this.getDBType(columnInfo)),\n this.getColumnBuilderCallback(columnInfo),\n );\n }\n\n // Add inline foreign keys from metadata (SQLite-specific)\n const inlineForeignKeys = operation.metadata?.inlineForeignKeys;\n if (inlineForeignKeys) {\n for (const fk of inlineForeignKeys) {\n builder = builder.addForeignKeyConstraint(\n fk.name,\n fk.columns,\n this.getTableName(fk.referencedTable, mapper),\n fk.referencedColumns,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (cb: any) => cb.onUpdate(\"restrict\").onDelete(\"restrict\"),\n );\n }\n }\n\n return builder;\n }\n\n private renameTable(\n operation: Extract<MigrationOperation, { type: \"rename-table\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n return this.db.schema\n .alterTable(this.getTableName(operation.from, mapper))\n .renameTo(this.getTableName(operation.to, mapper));\n }\n\n private alterTable(\n operation: Extract<MigrationOperation, { type: \"alter-table\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode[] {\n const results: ExecuteNode[] = [];\n const tableName = this.getTableName(operation.name, mapper);\n\n for (const columnOp of operation.value) {\n results.push(...this.executeColumnOperation(tableName, columnOp));\n }\n\n return results;\n }\n\n private executeColumnOperation(tableName: string, operation: ColumnOperation): ExecuteNode[] {\n const next = () => this.db.schema.alterTable(tableName);\n const results: ExecuteNode[] = [];\n\n switch (operation.type) {\n case \"rename-column\":\n results.push(next().renameColumn(operation.from, operation.to));\n return results;\n\n case \"drop-column\":\n results.push(next().dropColumn(operation.name));\n return results;\n\n case \"create-column\": {\n const col = operation.value;\n results.push(\n next().addColumn(\n col.name,\n sql.raw(this.getDBType(col)),\n this.getColumnBuilderCallback(col),\n ),\n );\n return results;\n }\n\n case \"update-column\": {\n const col = operation.value;\n // Check for ID columns first to provide a more specific error message\n if (col.role === \"external-id\" || col.role === \"internal-id\") {\n throw new Error(errors.IdColumnUpdate);\n }\n throw new Error(errors.SQLiteUpdateColumn);\n }\n }\n }\n\n private dropTable(\n operation: Extract<MigrationOperation, { type: \"drop-table\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n return this.db.schema.dropTable(this.getTableName(operation.name, mapper));\n }\n\n private addIndex(\n operation: Extract<MigrationOperation, { type: \"add-index\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n const tableName = this.getTableName(operation.table, mapper);\n\n if (operation.unique) {\n return createUniqueIndex(\n this.db,\n operation.name,\n tableName,\n operation.columns,\n this.provider,\n );\n }\n\n return this.db.schema.createIndex(operation.name).on(tableName).columns(operation.columns);\n }\n\n private dropIndex(\n operation: Extract<MigrationOperation, { type: \"drop-index\" }>,\n mapper?: TableNameMapper,\n ): ExecuteNode {\n const tableName = this.getTableName(operation.table, mapper);\n return dropUniqueIndex(this.db, operation.name, tableName, this.provider);\n }\n\n private handleCustomOperation(\n operation: Extract<MigrationOperation, { type: \"custom\" }>,\n ): ExecuteNode {\n const statement = sql.raw(operation[\"sql\"] as string);\n return this.rawToNode(statement);\n }\n}\n"],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- import { createMigrationExecutor } from "./execute-factory.js";
2
-
3
- //#region src/adapters/kysely/migration/execute.ts
4
- /**
5
- * Execute a single migration operation using the appropriate provider-specific executor.
6
- *
7
- * @param operation - The migration operation to execute
8
- * @param config - Kysely configuration with database instance and provider
9
- * @param onCustomNode - Handler for custom operations
10
- * @param mapper - Optional table name mapper for namespacing
11
- * @returns ExecuteNode(s) that can be compiled to SQL or executed
12
- */
13
- function execute(operation, config, onCustomNode, mapper) {
14
- if (operation.type === "custom") return onCustomNode(operation);
15
- return createMigrationExecutor(config).executeOperation(operation, mapper);
16
- }
17
- /**
18
- * Preprocess a batch of migration operations.
19
- * This allows provider-specific transformations before execution.
20
- *
21
- * For example, SQLite merges add-foreign-key operations into create-table operations
22
- * since foreign keys must be defined at table creation time.
23
- *
24
- * @param operations - The migration operations to preprocess
25
- * @param config - Kysely configuration with database instance and provider
26
- * @returns Preprocessed migration operations
27
- */
28
- function preprocessOperations(operations, config) {
29
- return createMigrationExecutor(config).preprocessOperations(operations);
30
- }
31
-
32
- //#endregion
33
- export { execute, preprocessOperations };
34
- //# sourceMappingURL=execute.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute.js","names":[],"sources":["../../../../src/adapters/kysely/migration/execute.ts"],"sourcesContent":["import type { CustomOperation, MigrationOperation } from \"../../../migration-engine/shared\";\nimport type { KyselyConfig } from \"../kysely-adapter\";\nimport type { TableNameMapper } from \"../kysely-shared\";\nimport type { ExecuteNode } from \"./execute-base\";\nimport { createMigrationExecutor } from \"./execute-factory\";\n\nexport type { ExecuteNode };\n\n/**\n * Execute a single migration operation using the appropriate provider-specific executor.\n *\n * @param operation - The migration operation to execute\n * @param config - Kysely configuration with database instance and provider\n * @param onCustomNode - Handler for custom operations\n * @param mapper - Optional table name mapper for namespacing\n * @returns ExecuteNode(s) that can be compiled to SQL or executed\n */\nexport function execute(\n operation: MigrationOperation,\n config: KyselyConfig,\n onCustomNode: (op: CustomOperation) => ExecuteNode | ExecuteNode[],\n mapper?: TableNameMapper,\n): ExecuteNode | ExecuteNode[] {\n // For custom operations, use the provided handler\n if (operation.type === \"custom\") {\n return onCustomNode(operation);\n }\n\n const executor = createMigrationExecutor(config);\n return executor.executeOperation(operation, mapper);\n}\n\n/**\n * Preprocess a batch of migration operations.\n * This allows provider-specific transformations before execution.\n *\n * For example, SQLite merges add-foreign-key operations into create-table operations\n * since foreign keys must be defined at table creation time.\n *\n * @param operations - The migration operations to preprocess\n * @param config - Kysely configuration with database instance and provider\n * @returns Preprocessed migration operations\n */\nexport function preprocessOperations(\n operations: MigrationOperation[],\n config: KyselyConfig,\n): MigrationOperation[] {\n const executor = createMigrationExecutor(config);\n return executor.preprocessOperations(operations);\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,SAAgB,QACd,WACA,QACA,cACA,QAC6B;AAE7B,KAAI,UAAU,SAAS,SACrB,QAAO,aAAa,UAAU;AAIhC,QADiB,wBAAwB,OAAO,CAChC,iBAAiB,WAAW,OAAO;;;;;;;;;;;;;AAcrD,SAAgB,qBACd,YACA,QACsB;AAEtB,QADiB,wBAAwB,OAAO,CAChC,qBAAqB,WAAW"}
@@ -1,7 +0,0 @@
1
- //#region src/bind-services.d.ts
2
- type OmitThisParameter<T> = T extends ((this: infer _This, ...args: infer A) => infer R) ? (...args: A) => R : T;
3
- type BoundServices<T> = { [K in keyof T]: T[K] extends ((...args: never[]) => unknown) ? OmitThisParameter<T[K]> : T[K] extends Record<string, unknown> ? BoundServices<T[K]> : T[K] };
4
- declare function bindServicesToContext<T extends Record<string, unknown>>(services: T): BoundServices<T>;
5
- //#endregion
6
- export { BoundServices, bindServicesToContext };
7
- //# sourceMappingURL=bind-services.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bind-services.d.ts","names":[],"sources":["../src/bind-services.ts"],"sourcesContent":[],"mappings":";KAGK,uBAAuB,yEACd,MAAM,IAChB;AAFC,KAKO,aALU,CAAA,CAAA,CAAA,GAAA,QAAM,MAMd,CANc,GAMV,CANU,CAMR,CANQ,CAAA,UAAA,CAAA,GAAA,IAAA,EAAA,KAAA,EAAA,EAAA,GAAA,OAAA,IAOtB,iBAPsB,CAOJ,CAPI,CAOF,CAPE,CAAA,CAAA,GAQtB,CARsB,CAQpB,CARoB,CAAA,SAQT,MARS,CAAA,MAAA,EAAA,OAAA,CAAA,GASpB,aAToB,CASN,CATM,CASJ,CATI,CAAA,CAAA,GAUpB,CAVoB,CAUlB,CAVkB,CAAA,EACd;AAAM,iBAYJ,qBAZI,CAAA,UAY4B,MAZ5B,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,CAAA,QAAA,EAaR,CAbQ,CAAA,EAcjB,aAdiB,CAcH,CAdG,CAAA"}
@@ -1,14 +0,0 @@
1
- import { serviceContext } from "./fragment.js";
2
-
3
- //#region src/bind-services.ts
4
- function bindServicesToContext(services) {
5
- const bound = {};
6
- for (const [key, value] of Object.entries(services)) if (typeof value === "function") bound[key] = value.bind(serviceContext);
7
- else if (value && typeof value === "object" && !Array.isArray(value)) bound[key] = bindServicesToContext(value);
8
- else bound[key] = value;
9
- return bound;
10
- }
11
-
12
- //#endregion
13
- export { bindServicesToContext };
14
- //# sourceMappingURL=bind-services.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bind-services.js","names":[],"sources":["../src/bind-services.ts"],"sourcesContent":["import { serviceContext } from \"./fragment\";\n\n// Type helper to remove 'this' parameter from functions\ntype OmitThisParameter<T> = T extends (this: infer _This, ...args: infer A) => infer R\n ? (...args: A) => R\n : T;\n\n// Recursively remove 'this' parameter from all functions in an object\nexport type BoundServices<T> = {\n [K in keyof T]: T[K] extends (...args: never[]) => unknown\n ? OmitThisParameter<T[K]>\n : T[K] extends Record<string, unknown>\n ? BoundServices<T[K]>\n : T[K];\n};\n\nexport function bindServicesToContext<T extends Record<string, unknown>>(\n services: T,\n): BoundServices<T> {\n const bound = {} as BoundServices<T>;\n\n for (const [key, value] of Object.entries(services)) {\n if (typeof value === \"function\") {\n // Bind function to serviceContext\n bound[key as keyof T] = value.bind(serviceContext) as BoundServices<T>[keyof T];\n } else if (value && typeof value === \"object\" && !Array.isArray(value)) {\n // Recursively bind nested service objects\n bound[key as keyof T] = bindServicesToContext(\n value as Record<string, unknown>,\n ) as BoundServices<T>[keyof T];\n } else {\n bound[key as keyof T] = value as BoundServices<T>[keyof T];\n }\n }\n\n return bound;\n}\n"],"mappings":";;;AAgBA,SAAgB,sBACd,UACkB;CAClB,MAAM,QAAQ,EAAE;AAEhB,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,SAAS,CACjD,KAAI,OAAO,UAAU,WAEnB,OAAM,OAAkB,MAAM,KAAK,eAAe;UACzC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,MAAM,CAEpE,OAAM,OAAkB,sBACtB,MACD;KAED,OAAM,OAAkB;AAI5B,QAAO"}
@@ -1,173 +0,0 @@
1
- import { AnySchema } from "./schema/create.js";
2
- import { IUnitOfWorkBase, UnitOfWorkSchemaView } from "./query/unit-of-work.js";
3
- import { AbstractQuery } from "./query/query.js";
4
- import { DatabaseAdapter } from "./adapters/adapters.js";
5
- import { BoundServices, bindServicesToContext } from "./bind-services.js";
6
- import { AsyncLocalStorage } from "async_hooks";
7
- import { RequestThisContext } from "@fragno-dev/core/api";
8
- import { FragmentDefinition, FragnoPublicConfig, RequestInputContext, RequestOutputContext } from "@fragno-dev/core";
9
-
10
- //#region src/fragment.d.ts
11
- declare const uowStorage: AsyncLocalStorage<IUnitOfWorkBase>;
12
- /**
13
- * Service context for database fragments, providing access to the Unit of Work.
14
- */
15
- interface DatabaseRequestThisContext extends RequestThisContext {
16
- /**
17
- * Get the Unit of Work from the current context.
18
- * @param schema - Optional schema to get a typed view. If not provided, returns the base UOW.
19
- * @returns IUnitOfWorkBase if no schema provided, or typed UnitOfWorkSchemaView if schema provided.
20
- */
21
- getUnitOfWork(): IUnitOfWorkBase;
22
- getUnitOfWork<TSchema extends AnySchema>(schema: TSchema): UnitOfWorkSchemaView<TSchema, [], any>;
23
- }
24
- declare const serviceContext: DatabaseRequestThisContext;
25
- declare function withUnitOfWork<T>(uow: IUnitOfWorkBase, callback: () => T): Promise<T>;
26
- /**
27
- * Type helper that enforces DatabaseRequestThisContext on all functions in a service object
28
- */
29
- type WithDatabaseThis<T> = { [K in keyof T]: T[K] extends ((...args: infer A) => infer R) ? (this: DatabaseRequestThisContext, ...args: A) => R : T[K] extends Record<string, unknown> ? WithDatabaseThis<T[K]> : T[K] };
30
- /**
31
- * Route handler type for database fragments with access to Unit of Work.
32
- */
33
- type DatabaseRouteHandler = (this: DatabaseRequestThisContext, inputContext: RequestInputContext, outputContext: RequestOutputContext) => Promise<Response>;
34
- /**
35
- * Extended FragnoPublicConfig that includes a database adapter.
36
- * Use this type when creating fragments with database support.
37
- */
38
- type FragnoPublicConfigWithDatabase = FragnoPublicConfig & {
39
- databaseAdapter: DatabaseAdapter<any>;
40
- };
41
- /**
42
- * Additional context provided to database fragments containing the database adapter and ORM instance.
43
- */
44
- type DatabaseFragmentContext<TSchema extends AnySchema> = {
45
- databaseAdapter: DatabaseAdapter<any>;
46
- orm: AbstractQuery<TSchema>;
47
- };
48
- declare class DatabaseFragmentBuilder<const TSchema extends AnySchema, const TConfig, const TDeps = {}, const TServices = {}, const TUsedServices = {}, const TProvidedServices = {}> {
49
- #private;
50
- readonly $types: {
51
- schema: TSchema;
52
- config: TConfig;
53
- deps: TDeps;
54
- services: TServices;
55
- usedServices: TUsedServices;
56
- providedServices: TProvidedServices;
57
- };
58
- constructor(options: {
59
- name: string;
60
- schema?: TSchema;
61
- namespace?: string;
62
- dependencies?: (context: {
63
- config: TConfig;
64
- fragnoConfig: FragnoPublicConfig;
65
- } & DatabaseFragmentContext<TSchema>) => TDeps;
66
- services?: (context: {
67
- config: TConfig;
68
- fragnoConfig: FragnoPublicConfig;
69
- deps: TDeps & TUsedServices;
70
- defineService: <T extends Record<string, unknown>>(services: WithDatabaseThis<T>) => WithDatabaseThis<T>;
71
- } & DatabaseFragmentContext<TSchema>) => TServices;
72
- usedServices?: Record<string, {
73
- name: string;
74
- required: boolean;
75
- }>;
76
- providedServices?: Record<string, unknown>;
77
- });
78
- get $requiredOptions(): FragnoPublicConfigWithDatabase;
79
- get definition(): FragmentDefinition<TConfig, TDeps, BoundServices<TServices>, {
80
- databaseSchema?: TSchema;
81
- databaseNamespace: string;
82
- }, BoundServices<TUsedServices>, BoundServices<TProvidedServices>, DatabaseRequestThisContext>;
83
- withDatabase<TNewSchema extends AnySchema>(schema: TNewSchema, namespace?: string): DatabaseFragmentBuilder<TNewSchema, TConfig, TDeps, TServices, TUsedServices, TProvidedServices>;
84
- withDependencies<TNewDeps>(fn: (context: {
85
- config: TConfig;
86
- fragnoConfig: FragnoPublicConfig;
87
- } & DatabaseFragmentContext<TSchema>) => TNewDeps): DatabaseFragmentBuilder<TSchema, TConfig, TNewDeps, {}, TUsedServices, TProvidedServices>;
88
- /**
89
- * Declare that this fragment uses a service.
90
- * @param serviceName - The name of the service to use
91
- * @param options - Optional configuration: { optional: boolean } (defaults to required)
92
- */
93
- usesService<TServiceName extends string, TService>(serviceName: TServiceName, options?: {
94
- optional?: false;
95
- }): DatabaseFragmentBuilder<TSchema, TConfig, TDeps, TServices, TUsedServices & { [K in TServiceName]: TService }, TProvidedServices>;
96
- usesService<TServiceName extends string, TService>(serviceName: TServiceName, options: {
97
- optional: true;
98
- }): DatabaseFragmentBuilder<TSchema, TConfig, TDeps, TServices, TUsedServices & { [K in TServiceName]: TService | undefined }, TProvidedServices>;
99
- /**
100
- * Define services for this fragment (unnamed).
101
- * Functions in the service will have access to DatabaseRequestThisContext via `this` if using `defineService`.
102
- *
103
- * @example
104
- * With `this` context:
105
- * ```ts
106
- * .providesService(({ defineService }) => defineService({
107
- * createUser: function(name: string) {
108
- * const uow = this.getUnitOfWork(mySchema);
109
- * return uow.create('user', { name });
110
- * }
111
- * }))
112
- * ```
113
- *
114
- * Without `this` context:
115
- * ```ts
116
- * .providesService(({ db }) => ({
117
- * createUser: async (name: string) => {
118
- * return db.create('user', { name });
119
- * }
120
- * }))
121
- * ```
122
- */
123
- providesService<TNewServices>(fn: (context: {
124
- config: TConfig;
125
- fragnoConfig: FragnoPublicConfig;
126
- deps: TDeps & TUsedServices;
127
- db: AbstractQuery<TSchema>;
128
- defineService: <T extends Record<string, unknown>>(services: WithDatabaseThis<T>) => WithDatabaseThis<T>;
129
- }) => TNewServices): DatabaseFragmentBuilder<TSchema, TConfig, TDeps, TNewServices, TUsedServices, TProvidedServices>;
130
- /**
131
- * Provide a named service that other fragments can use.
132
- * Functions in the service will have access to DatabaseRequestThisContext via `this` if using `defineService`.
133
- * You can also pass a service object directly instead of a callback.
134
- *
135
- * @example
136
- * With callback and `this` context:
137
- * ```ts
138
- * .providesService("myService", ({ defineService }) => defineService({
139
- * createUser: function(name: string) {
140
- * const uow = this.getUnitOfWork(mySchema);
141
- * return uow.create('user', { name });
142
- * }
143
- * }))
144
- * ```
145
- *
146
- * With callback, no `this` context:
147
- * ```ts
148
- * .providesService("myService", ({ db }) => ({
149
- * createUser: async (name: string) => {
150
- * return db.create('user', { name });
151
- * }
152
- * }))
153
- * ```
154
- *
155
- * With direct object:
156
- * ```ts
157
- * .providesService("myService", {
158
- * createUser: async (name: string) => { ... }
159
- * })
160
- * ```
161
- */
162
- providesService<TServiceName extends string, TService>(serviceName: TServiceName, fnOrService: ((context: {
163
- config: TConfig;
164
- fragnoConfig: FragnoPublicConfig;
165
- deps: TDeps & TUsedServices;
166
- db: AbstractQuery<TSchema>;
167
- defineService: <T extends Record<string, unknown>>(services: WithDatabaseThis<T>) => WithDatabaseThis<T>;
168
- }) => TService) | TService): DatabaseFragmentBuilder<TSchema, TConfig, TDeps, TServices, TUsedServices, TProvidedServices & { [K in TServiceName]: BoundServices<TService> }>;
169
- }
170
- declare function defineFragmentWithDatabase<TConfig = {}>(name: string): DatabaseFragmentBuilder<never, TConfig, {}, {}, {}, {}>;
171
- //#endregion
172
- export { type BoundServices, DatabaseFragmentBuilder, DatabaseFragmentContext, DatabaseRequestThisContext, DatabaseRouteHandler, FragnoPublicConfigWithDatabase, bindServicesToContext, defineFragmentWithDatabase, serviceContext, uowStorage, withUnitOfWork };
173
- //# sourceMappingURL=fragment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fragment.d.ts","names":[],"sources":["../src/fragment.ts"],"sourcesContent":[],"mappings":"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"}