@fragno-dev/db 0.2.2 → 0.4.1

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 (587) hide show
  1. package/.turbo/turbo-build.log +404 -175
  2. package/CHANGELOG.md +109 -0
  3. package/README.md +54 -9
  4. package/dist/adapters/adapters.d.ts +23 -21
  5. package/dist/adapters/adapters.d.ts.map +1 -1
  6. package/dist/adapters/adapters.js.map +1 -1
  7. package/dist/adapters/generic-sql/driver-config.d.ts +16 -1
  8. package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -1
  9. package/dist/adapters/generic-sql/driver-config.js +23 -1
  10. package/dist/adapters/generic-sql/driver-config.js.map +1 -1
  11. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +24 -9
  12. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
  13. package/dist/adapters/generic-sql/generic-sql-adapter.js +60 -22
  14. package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
  15. package/dist/adapters/generic-sql/generic-sql-uow-executor.js +169 -3
  16. package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
  17. package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -1
  18. package/dist/adapters/generic-sql/migration/dialect/mysql.js +25 -6
  19. package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
  20. package/dist/adapters/generic-sql/migration/dialect/postgres.js +7 -6
  21. package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
  22. package/dist/adapters/generic-sql/migration/dialect/sqlite.js +193 -16
  23. package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
  24. package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -1
  25. package/dist/adapters/generic-sql/migration/executor.js +30 -3
  26. package/dist/adapters/generic-sql/migration/executor.js.map +1 -1
  27. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -1
  28. package/dist/adapters/generic-sql/migration/prepared-migrations.js +9 -9
  29. package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
  30. package/dist/adapters/generic-sql/migration/sql-generator.js +75 -52
  31. package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
  32. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +7 -6
  33. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
  34. package/dist/adapters/generic-sql/query/cursor-utils.js +42 -4
  35. package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -1
  36. package/dist/adapters/generic-sql/query/db-now-sql.js +27 -0
  37. package/dist/adapters/generic-sql/query/db-now-sql.js.map +1 -0
  38. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +32 -21
  39. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
  40. package/dist/adapters/generic-sql/query/select-builder.js +5 -3
  41. package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
  42. package/dist/adapters/generic-sql/query/sql-query-compiler.js +49 -18
  43. package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
  44. package/dist/adapters/generic-sql/query/where-builder.js +43 -29
  45. package/dist/adapters/generic-sql/query/where-builder.js.map +1 -1
  46. package/dist/adapters/generic-sql/sqlite-storage.d.ts +13 -0
  47. package/dist/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
  48. package/dist/adapters/generic-sql/sqlite-storage.js +15 -0
  49. package/dist/adapters/generic-sql/sqlite-storage.js.map +1 -0
  50. package/dist/adapters/generic-sql/uow-decoder.js +6 -2
  51. package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
  52. package/dist/adapters/generic-sql/uow-encoder.js +27 -8
  53. package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
  54. package/dist/adapters/in-memory/condition-evaluator.js +135 -0
  55. package/dist/adapters/in-memory/condition-evaluator.js.map +1 -0
  56. package/dist/adapters/in-memory/errors.d.ts +13 -0
  57. package/dist/adapters/in-memory/errors.d.ts.map +1 -0
  58. package/dist/adapters/in-memory/errors.js +23 -0
  59. package/dist/adapters/in-memory/errors.js.map +1 -0
  60. package/dist/adapters/in-memory/in-memory-adapter.d.ts +27 -0
  61. package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -0
  62. package/dist/adapters/in-memory/in-memory-adapter.js +196 -0
  63. package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
  64. package/dist/adapters/in-memory/in-memory-uow.js +871 -0
  65. package/dist/adapters/in-memory/in-memory-uow.js.map +1 -0
  66. package/dist/adapters/in-memory/index.d.ts +4 -0
  67. package/dist/adapters/in-memory/index.js +4 -0
  68. package/dist/adapters/in-memory/options.d.ts +30 -0
  69. package/dist/adapters/in-memory/options.d.ts.map +1 -0
  70. package/dist/adapters/in-memory/options.js +62 -0
  71. package/dist/adapters/in-memory/options.js.map +1 -0
  72. package/dist/adapters/in-memory/reference-resolution.js +26 -0
  73. package/dist/adapters/in-memory/reference-resolution.js.map +1 -0
  74. package/dist/adapters/in-memory/sorted-array-index.js +129 -0
  75. package/dist/adapters/in-memory/sorted-array-index.js.map +1 -0
  76. package/dist/adapters/in-memory/store.js +71 -0
  77. package/dist/adapters/in-memory/store.js.map +1 -0
  78. package/dist/adapters/in-memory/value-comparison.js +28 -0
  79. package/dist/adapters/in-memory/value-comparison.js.map +1 -0
  80. package/dist/adapters/shared/from-unit-of-work-compiler.js +51 -24
  81. package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -1
  82. package/dist/adapters/shared/uow-operation-compiler.js +11 -11
  83. package/dist/adapters/shared/uow-operation-compiler.js.map +1 -1
  84. package/dist/adapters/sql/index.d.ts +5 -0
  85. package/dist/adapters/sql/index.js +4 -0
  86. package/dist/browser/adapters/adapters.d.ts +61 -0
  87. package/dist/browser/adapters/adapters.d.ts.map +1 -0
  88. package/dist/browser/adapters/generic-sql/migration/executor.d.ts +15 -0
  89. package/dist/browser/adapters/generic-sql/migration/executor.d.ts.map +1 -0
  90. package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
  91. package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
  92. package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts +11 -0
  93. package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
  94. package/dist/browser/adapters/in-memory/in-memory-adapter.d.ts +5 -0
  95. package/dist/browser/adapters/in-memory/index.d.ts +2 -0
  96. package/dist/browser/adapters/in-memory/options.d.ts +1 -0
  97. package/dist/browser/db-fragment-definition-builder.d.ts +237 -0
  98. package/dist/browser/db-fragment-definition-builder.d.ts.map +1 -0
  99. package/dist/browser/durable-hooks.d.ts +3 -0
  100. package/dist/browser/fragments/internal-fragment.d.ts +317 -0
  101. package/dist/browser/fragments/internal-fragment.d.ts.map +1 -0
  102. package/dist/browser/fragments/internal-fragment.schema.d.ts +1 -0
  103. package/dist/browser/hooks/durable-hooks-logger.d.ts +10 -0
  104. package/dist/browser/hooks/durable-hooks-logger.d.ts.map +1 -0
  105. package/dist/browser/hooks/hooks.d.ts +146 -0
  106. package/dist/browser/hooks/hooks.d.ts.map +1 -0
  107. package/dist/browser/id.js +1 -0
  108. package/dist/browser/internal/adapter-registry.d.ts +4 -0
  109. package/dist/browser/internal/outbox-state.d.ts +2 -0
  110. package/dist/browser/mod.d.ts +15 -0
  111. package/dist/browser/mod.d.ts.map +1 -0
  112. package/dist/browser/mod.js +17 -0
  113. package/dist/browser/mod.js.map +1 -0
  114. package/dist/browser/mod2.d.ts +48 -0
  115. package/dist/browser/mod2.d.ts.map +1 -0
  116. package/dist/browser/naming/sql-naming.d.ts +19 -0
  117. package/dist/browser/naming/sql-naming.d.ts.map +1 -0
  118. package/dist/browser/outbox/outbox.d.ts +21 -0
  119. package/dist/browser/outbox/outbox.d.ts.map +1 -0
  120. package/dist/browser/query/column-defaults.js +1 -0
  121. package/dist/browser/query/condition-builder.d.ts +44 -0
  122. package/dist/browser/query/condition-builder.d.ts.map +1 -0
  123. package/dist/browser/query/condition-builder.js +97 -0
  124. package/dist/browser/query/condition-builder.js.map +1 -0
  125. package/dist/browser/query/cursor.d.ts +105 -0
  126. package/dist/browser/query/cursor.d.ts.map +1 -0
  127. package/dist/browser/query/cursor.js +150 -0
  128. package/dist/browser/query/cursor.js.map +1 -0
  129. package/dist/browser/query/db-now.d.ts +22 -0
  130. package/dist/browser/query/db-now.d.ts.map +1 -0
  131. package/dist/browser/query/db-now.js +33 -0
  132. package/dist/browser/query/db-now.js.map +1 -0
  133. package/dist/browser/query/orm/orm.d.ts +18 -0
  134. package/dist/browser/query/orm/orm.d.ts.map +1 -0
  135. package/dist/browser/query/simple-query-interface.d.ts +108 -0
  136. package/dist/browser/query/simple-query-interface.d.ts.map +1 -0
  137. package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts +423 -0
  138. package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
  139. package/dist/browser/query/unit-of-work/execute-unit-of-work.js +507 -0
  140. package/dist/browser/query/unit-of-work/execute-unit-of-work.js.map +1 -0
  141. package/dist/browser/query/unit-of-work/retry-policy.d.ts +23 -0
  142. package/dist/browser/query/unit-of-work/retry-policy.d.ts.map +1 -0
  143. package/dist/browser/query/unit-of-work/retry-policy.js +40 -0
  144. package/dist/browser/query/unit-of-work/retry-policy.js.map +1 -0
  145. package/dist/browser/query/unit-of-work/unit-of-work.d.ts +703 -0
  146. package/dist/browser/query/unit-of-work/unit-of-work.d.ts.map +1 -0
  147. package/dist/browser/query/unit-of-work/unit-of-work.js +1206 -0
  148. package/dist/browser/query/unit-of-work/unit-of-work.js.map +1 -0
  149. package/dist/browser/query/value-encoding.js +38 -0
  150. package/dist/browser/query/value-encoding.js.map +1 -0
  151. package/dist/browser/schema/create.d.ts +326 -0
  152. package/dist/browser/schema/create.d.ts.map +1 -0
  153. package/dist/browser/schema/create.js +89 -0
  154. package/dist/browser/schema/create.js.map +1 -0
  155. package/dist/browser/schema/generate-id.js +28 -0
  156. package/dist/browser/schema/generate-id.js.map +1 -0
  157. package/dist/browser/shared/providers.d.ts +6 -0
  158. package/dist/browser/shared/providers.d.ts.map +1 -0
  159. package/dist/browser/sql-driver/connection/connection-provider.d.ts +13 -0
  160. package/dist/browser/sql-driver/connection/connection-provider.d.ts.map +1 -0
  161. package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
  162. package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
  163. package/dist/browser/sql-driver/driver/runtime-driver.d.ts +23 -0
  164. package/dist/browser/sql-driver/driver/runtime-driver.d.ts.map +1 -0
  165. package/dist/browser/sql-driver/query-executor/plugin.d.ts +17 -0
  166. package/dist/browser/sql-driver/query-executor/plugin.d.ts.map +1 -0
  167. package/dist/browser/sql-driver/query-executor/query-executor.d.ts +36 -0
  168. package/dist/browser/sql-driver/query-executor/query-executor.d.ts.map +1 -0
  169. package/dist/browser/sql-driver/sql-driver-adapter.d.ts +29 -0
  170. package/dist/browser/sql-driver/sql-driver-adapter.d.ts.map +1 -0
  171. package/dist/browser/sql-driver/sql-driver.d.ts +38 -0
  172. package/dist/browser/sql-driver/sql-driver.d.ts.map +1 -0
  173. package/dist/browser/sync/commands.d.ts +15 -0
  174. package/dist/browser/sync/commands.d.ts.map +1 -0
  175. package/dist/browser/sync/commands.js +27 -0
  176. package/dist/browser/sync/commands.js.map +1 -0
  177. package/dist/browser/sync/types.d.ts +63 -0
  178. package/dist/browser/sync/types.d.ts.map +1 -0
  179. package/dist/browser/util/types.d.ts +8 -0
  180. package/dist/browser/util/types.d.ts.map +1 -0
  181. package/dist/browser/with-database.d.ts +29 -0
  182. package/dist/browser/with-database.d.ts.map +1 -0
  183. package/dist/client.d.ts +4 -0
  184. package/dist/client.js +5 -0
  185. package/dist/db-fragment-definition-builder.d.ts +101 -33
  186. package/dist/db-fragment-definition-builder.d.ts.map +1 -1
  187. package/dist/db-fragment-definition-builder.js +450 -60
  188. package/dist/db-fragment-definition-builder.js.map +1 -1
  189. package/dist/dispatchers/cloudflare-do/dispatcher.d.ts +20 -0
  190. package/dist/dispatchers/cloudflare-do/dispatcher.d.ts.map +1 -0
  191. package/dist/dispatchers/cloudflare-do/dispatcher.js +147 -0
  192. package/dist/dispatchers/cloudflare-do/dispatcher.js.map +1 -0
  193. package/dist/dispatchers/cloudflare-do/index.d.ts +11 -0
  194. package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
  195. package/dist/dispatchers/cloudflare-do/index.js +31 -0
  196. package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
  197. package/dist/dispatchers/node/dispatcher.d.ts +14 -0
  198. package/dist/dispatchers/node/dispatcher.d.ts.map +1 -0
  199. package/dist/dispatchers/node/dispatcher.js +80 -0
  200. package/dist/dispatchers/node/dispatcher.js.map +1 -0
  201. package/dist/dispatchers/node/index.d.ts +12 -0
  202. package/dist/dispatchers/node/index.d.ts.map +1 -0
  203. package/dist/dispatchers/node/index.js +27 -0
  204. package/dist/dispatchers/node/index.js.map +1 -0
  205. package/dist/durable-hooks.d.ts +31 -0
  206. package/dist/durable-hooks.d.ts.map +1 -0
  207. package/dist/durable-hooks.js +23 -0
  208. package/dist/durable-hooks.js.map +1 -0
  209. package/dist/fragments/internal-fragment.d.ts +186 -8
  210. package/dist/fragments/internal-fragment.d.ts.map +1 -1
  211. package/dist/fragments/internal-fragment.js +203 -38
  212. package/dist/fragments/internal-fragment.js.map +1 -1
  213. package/dist/fragments/internal-fragment.routes.js +164 -0
  214. package/dist/fragments/internal-fragment.routes.js.map +1 -0
  215. package/dist/fragments/internal-fragment.schema.d.ts +15 -0
  216. package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
  217. package/dist/fragments/internal-fragment.schema.js +39 -0
  218. package/dist/fragments/internal-fragment.schema.js.map +1 -0
  219. package/dist/hooks/durable-hooks-logger.d.ts +10 -0
  220. package/dist/hooks/durable-hooks-logger.d.ts.map +1 -0
  221. package/dist/hooks/durable-hooks-logger.js +75 -0
  222. package/dist/hooks/durable-hooks-logger.js.map +1 -0
  223. package/dist/hooks/durable-hooks-processor.d.ts +1 -0
  224. package/dist/hooks/durable-hooks-processor.js +80 -0
  225. package/dist/hooks/durable-hooks-processor.js.map +1 -0
  226. package/dist/hooks/durable-hooks-runtime.js +44 -0
  227. package/dist/hooks/durable-hooks-runtime.js.map +1 -0
  228. package/dist/hooks/hooks.d.ts +100 -1
  229. package/dist/hooks/hooks.d.ts.map +1 -1
  230. package/dist/hooks/hooks.js +254 -27
  231. package/dist/hooks/hooks.js.map +1 -1
  232. package/dist/id.d.ts +2 -2
  233. package/dist/id.js +2 -2
  234. package/dist/internal/adapter-registry.d.ts +11 -0
  235. package/dist/internal/adapter-registry.d.ts.map +1 -0
  236. package/dist/internal/adapter-registry.js +135 -0
  237. package/dist/internal/adapter-registry.js.map +1 -0
  238. package/dist/internal/outbox-state.d.ts +2 -0
  239. package/dist/internal/outbox-state.js +26 -0
  240. package/dist/internal/outbox-state.js.map +1 -0
  241. package/dist/migration-engine/auto-from-schema.d.ts +33 -0
  242. package/dist/migration-engine/auto-from-schema.d.ts.map +1 -0
  243. package/dist/migration-engine/auto-from-schema.js +223 -37
  244. package/dist/migration-engine/auto-from-schema.js.map +1 -1
  245. package/dist/migration-engine/generation-engine.d.ts +16 -10
  246. package/dist/migration-engine/generation-engine.d.ts.map +1 -1
  247. package/dist/migration-engine/generation-engine.js +86 -35
  248. package/dist/migration-engine/generation-engine.js.map +1 -1
  249. package/dist/migration-engine/shared.d.ts +113 -0
  250. package/dist/migration-engine/shared.d.ts.map +1 -0
  251. package/dist/migration-engine/shared.js.map +1 -1
  252. package/dist/mod.d.ts +20 -12
  253. package/dist/mod.d.ts.map +1 -1
  254. package/dist/mod.js +18 -12
  255. package/dist/mod.js.map +1 -1
  256. package/dist/naming/sql-naming.d.ts +19 -0
  257. package/dist/naming/sql-naming.d.ts.map +1 -0
  258. package/dist/naming/sql-naming.js +116 -0
  259. package/dist/naming/sql-naming.js.map +1 -0
  260. package/dist/outbox/outbox-builder.js +156 -0
  261. package/dist/outbox/outbox-builder.js.map +1 -0
  262. package/dist/outbox/outbox.d.ts +54 -0
  263. package/dist/outbox/outbox.d.ts.map +1 -0
  264. package/dist/outbox/outbox.js +37 -0
  265. package/dist/outbox/outbox.js.map +1 -0
  266. package/dist/query/column-defaults.js +20 -4
  267. package/dist/query/column-defaults.js.map +1 -1
  268. package/dist/query/condition-builder.d.ts +7 -1
  269. package/dist/query/condition-builder.d.ts.map +1 -1
  270. package/dist/query/condition-builder.js +5 -1
  271. package/dist/query/condition-builder.js.map +1 -1
  272. package/dist/query/cursor-client.d.ts +105 -0
  273. package/dist/query/cursor-client.d.ts.map +1 -0
  274. package/dist/query/cursor-client.js +165 -0
  275. package/dist/query/cursor-client.js.map +1 -0
  276. package/dist/query/cursor.d.ts +3 -1
  277. package/dist/query/cursor.d.ts.map +1 -1
  278. package/dist/query/cursor.js +51 -14
  279. package/dist/query/cursor.js.map +1 -1
  280. package/dist/query/db-now.d.ts +22 -0
  281. package/dist/query/db-now.d.ts.map +1 -0
  282. package/dist/query/db-now.js +35 -0
  283. package/dist/query/db-now.js.map +1 -0
  284. package/dist/query/orm/orm.js.map +1 -1
  285. package/dist/query/serialize/create-sql-serializer.js +5 -4
  286. package/dist/query/serialize/create-sql-serializer.js.map +1 -1
  287. package/dist/query/serialize/dialect/mysql-serializer.js +12 -6
  288. package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
  289. package/dist/query/serialize/dialect/postgres-serializer.js +25 -7
  290. package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
  291. package/dist/query/serialize/dialect/sqlite-serializer.js +60 -12
  292. package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
  293. package/dist/query/serialize/sql-serializer.js +2 -2
  294. package/dist/query/serialize/sql-serializer.js.map +1 -1
  295. package/dist/query/simple-query-interface.d.ts +13 -4
  296. package/dist/query/simple-query-interface.d.ts.map +1 -1
  297. package/dist/query/unit-of-work/execute-unit-of-work.d.ts +37 -2
  298. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
  299. package/dist/query/unit-of-work/execute-unit-of-work.js +50 -24
  300. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
  301. package/dist/query/unit-of-work/unit-of-work.d.ts +92 -30
  302. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
  303. package/dist/query/unit-of-work/unit-of-work.js +136 -11
  304. package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
  305. package/dist/query/value-decoding.js +16 -6
  306. package/dist/query/value-decoding.js.map +1 -1
  307. package/dist/query/value-encoding.js +29 -9
  308. package/dist/query/value-encoding.js.map +1 -1
  309. package/dist/schema/create.d.ts +103 -35
  310. package/dist/schema/create.d.ts.map +1 -1
  311. package/dist/schema/create.js +172 -58
  312. package/dist/schema/create.js.map +1 -1
  313. package/dist/schema/generate-id.js +2 -2
  314. package/dist/schema/generate-id.js.map +1 -1
  315. package/dist/schema/type-conversion/create-sql-type-mapper.js +4 -3
  316. package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
  317. package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
  318. package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
  319. package/dist/schema/validator.d.ts +10 -0
  320. package/dist/schema/validator.d.ts.map +1 -0
  321. package/dist/schema/validator.js +123 -0
  322. package/dist/schema/validator.js.map +1 -0
  323. package/dist/schema-output/drizzle.d.ts +30 -0
  324. package/dist/schema-output/drizzle.d.ts.map +1 -0
  325. package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +88 -60
  326. package/dist/schema-output/drizzle.js.map +1 -0
  327. package/dist/schema-output/prisma.d.ts +17 -0
  328. package/dist/schema-output/prisma.d.ts.map +1 -0
  329. package/dist/schema-output/prisma.js +307 -0
  330. package/dist/schema-output/prisma.js.map +1 -0
  331. package/dist/sql-driver/dialects/durable-object-dialect.js +3 -9
  332. package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -1
  333. package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -1
  334. package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -1
  335. package/dist/sql-driver/sql-driver-adapter.js.map +1 -1
  336. package/dist/sql-driver/sql.js.map +1 -1
  337. package/dist/sync/commands.d.ts +15 -0
  338. package/dist/sync/commands.d.ts.map +1 -0
  339. package/dist/sync/commands.js +27 -0
  340. package/dist/sync/commands.js.map +1 -0
  341. package/dist/sync/index.d.ts +4 -0
  342. package/dist/sync/index.js +4 -0
  343. package/dist/sync/read-tracking.d.ts +25 -0
  344. package/dist/sync/read-tracking.d.ts.map +1 -0
  345. package/dist/sync/read-tracking.js +148 -0
  346. package/dist/sync/read-tracking.js.map +1 -0
  347. package/dist/sync/submit.js +213 -0
  348. package/dist/sync/submit.js.map +1 -0
  349. package/dist/sync/types.d.ts +63 -0
  350. package/dist/sync/types.d.ts.map +1 -0
  351. package/dist/util/default-database-adapter.js +66 -0
  352. package/dist/util/default-database-adapter.js.map +1 -0
  353. package/dist/with-database.d.ts +3 -6
  354. package/dist/with-database.d.ts.map +1 -1
  355. package/dist/with-database.js +8 -7
  356. package/dist/with-database.js.map +1 -1
  357. package/package.json +62 -55
  358. package/src/adapters/adapters.ts +33 -26
  359. package/src/adapters/drizzle/migrate-drizzle.test.ts +99 -41
  360. package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +601 -0
  361. package/src/adapters/drizzle/test-utils.ts +13 -8
  362. package/src/adapters/generic-sql/driver-config.ts +38 -0
  363. package/src/adapters/generic-sql/generic-sql-adapter.test.ts +10 -8
  364. package/src/adapters/generic-sql/generic-sql-adapter.ts +117 -34
  365. package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +55 -0
  366. package/src/adapters/generic-sql/generic-sql-uow-executor.ts +297 -3
  367. package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +120 -0
  368. package/src/adapters/generic-sql/migration/cold-kysely.ts +1 -0
  369. package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +27 -8
  370. package/src/adapters/generic-sql/migration/dialect/mysql.ts +47 -8
  371. package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +28 -9
  372. package/src/adapters/generic-sql/migration/dialect/postgres.ts +9 -4
  373. package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +839 -8
  374. package/src/adapters/generic-sql/migration/dialect/sqlite.ts +396 -53
  375. package/src/adapters/generic-sql/migration/executor.test.ts +52 -0
  376. package/src/adapters/generic-sql/migration/executor.ts +47 -4
  377. package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +238 -46
  378. package/src/adapters/generic-sql/migration/prepared-migrations.ts +21 -13
  379. package/src/adapters/generic-sql/migration/sql-generator.ts +145 -66
  380. package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +11 -8
  381. package/src/adapters/generic-sql/query/cursor-utils.test.ts +272 -0
  382. package/src/adapters/generic-sql/query/cursor-utils.ts +42 -7
  383. package/src/adapters/generic-sql/query/db-now-sql.ts +49 -0
  384. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +171 -35
  385. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +53 -40
  386. package/src/adapters/generic-sql/query/select-builder.test.ts +16 -11
  387. package/src/adapters/generic-sql/query/select-builder.ts +7 -3
  388. package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +75 -6
  389. package/src/adapters/generic-sql/query/sql-query-compiler.ts +129 -24
  390. package/src/adapters/generic-sql/query/where-builder.test.ts +96 -20
  391. package/src/adapters/generic-sql/query/where-builder.ts +112 -41
  392. package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +11 -20
  393. package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +851 -0
  394. package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +18 -15
  395. package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +282 -14
  396. package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +129 -12
  397. package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +9 -7
  398. package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
  399. package/src/adapters/generic-sql/uow-decoder.test.ts +5 -4
  400. package/src/adapters/generic-sql/uow-decoder.ts +23 -5
  401. package/src/adapters/generic-sql/uow-encoder.test.ts +36 -3
  402. package/src/adapters/generic-sql/uow-encoder.ts +48 -13
  403. package/src/adapters/in-memory/condition-evaluator.test.ts +194 -0
  404. package/src/adapters/in-memory/condition-evaluator.ts +280 -0
  405. package/src/adapters/in-memory/errors.ts +20 -0
  406. package/src/adapters/in-memory/in-memory-adapter.ts +388 -0
  407. package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +344 -0
  408. package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +255 -0
  409. package/src/adapters/in-memory/in-memory-uow.ts +1724 -0
  410. package/src/adapters/in-memory/index.ts +3 -0
  411. package/src/adapters/in-memory/options.test.ts +42 -0
  412. package/src/adapters/in-memory/options.ts +91 -0
  413. package/src/adapters/in-memory/outbox.test.ts +361 -0
  414. package/src/adapters/in-memory/reference-resolution.test.ts +51 -0
  415. package/src/adapters/in-memory/reference-resolution.ts +67 -0
  416. package/src/adapters/in-memory/sorted-array-index.test.ts +124 -0
  417. package/src/adapters/in-memory/sorted-array-index.ts +228 -0
  418. package/src/adapters/in-memory/store.test.ts +69 -0
  419. package/src/adapters/in-memory/store.ts +145 -0
  420. package/src/adapters/in-memory/value-comparison.ts +53 -0
  421. package/src/adapters/in-memory/value-normalization.test.ts +58 -0
  422. package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1207 -0
  423. package/src/adapters/shared/from-unit-of-work-compiler.ts +159 -47
  424. package/src/adapters/shared/uow-operation-compiler.ts +28 -18
  425. package/src/adapters/sql/index.ts +12 -0
  426. package/src/browser/mod.ts +64 -0
  427. package/src/client.ts +19 -0
  428. package/src/db-fragment-definition-builder.test.ts +845 -53
  429. package/src/db-fragment-definition-builder.ts +911 -95
  430. package/src/db-fragment-instantiator.test.ts +210 -94
  431. package/src/db-fragment-integration.test.ts +17 -12
  432. package/src/dispatchers/cloudflare-do/dispatcher.ts +204 -0
  433. package/src/dispatchers/cloudflare-do/index.test.ts +206 -0
  434. package/src/dispatchers/cloudflare-do/index.ts +63 -0
  435. package/src/dispatchers/node/dispatcher.ts +112 -0
  436. package/src/dispatchers/node/index.test.ts +120 -0
  437. package/src/dispatchers/node/index.ts +50 -0
  438. package/src/durable-hooks.test.ts +80 -0
  439. package/src/durable-hooks.ts +67 -0
  440. package/src/fragments/internal-fragment.routes.test.ts +570 -0
  441. package/src/fragments/internal-fragment.routes.ts +334 -0
  442. package/src/fragments/internal-fragment.schema.ts +95 -0
  443. package/src/fragments/internal-fragment.test.ts +505 -83
  444. package/src/fragments/internal-fragment.ts +453 -70
  445. package/src/hooks/durable-hooks-logger.ts +126 -0
  446. package/src/hooks/durable-hooks-processor.pglite.test.ts +87 -0
  447. package/src/hooks/durable-hooks-processor.test.ts +282 -0
  448. package/src/hooks/durable-hooks-processor.ts +173 -0
  449. package/src/hooks/durable-hooks-runtime.test.ts +65 -0
  450. package/src/hooks/durable-hooks-runtime.ts +81 -0
  451. package/src/hooks/hooks.test.ts +455 -34
  452. package/src/hooks/hooks.ts +501 -34
  453. package/src/id.test.ts +34 -0
  454. package/src/id.ts +1 -3
  455. package/src/internal/adapter-registry.test.ts +93 -0
  456. package/src/internal/adapter-registry.ts +239 -0
  457. package/src/internal/outbox-state.ts +43 -0
  458. package/src/migration-engine/auto-from-schema.test.ts +107 -14
  459. package/src/migration-engine/auto-from-schema.ts +365 -44
  460. package/src/migration-engine/create.test.ts +4 -3
  461. package/src/migration-engine/create.ts +1 -1
  462. package/src/migration-engine/generation-engine.test.ts +292 -110
  463. package/src/migration-engine/generation-engine.ts +117 -66
  464. package/src/migration-engine/shared.ts +14 -0
  465. package/src/mod.ts +95 -39
  466. package/src/naming/sql-naming.ts +181 -0
  467. package/src/outbox/outbox-builder.ts +241 -0
  468. package/src/outbox/outbox.test.ts +424 -0
  469. package/src/outbox/outbox.ts +139 -0
  470. package/src/query/column-defaults.ts +42 -4
  471. package/src/query/condition-builder.test.ts +18 -3
  472. package/src/query/condition-builder.ts +7 -0
  473. package/src/query/cursor-client.test.ts +70 -0
  474. package/src/query/cursor-client.ts +263 -0
  475. package/src/query/cursor.test.ts +119 -20
  476. package/src/query/cursor.ts +88 -27
  477. package/src/query/db-now.ts +73 -0
  478. package/src/query/orm/orm.ts +2 -2
  479. package/src/query/query-type.test.ts +4 -3
  480. package/src/query/serialize/create-sql-serializer.ts +10 -5
  481. package/src/query/serialize/dialect/mysql-serializer.ts +13 -5
  482. package/src/query/serialize/dialect/postgres-serializer.ts +35 -5
  483. package/src/query/serialize/dialect/sqlite-serializer.test.ts +90 -3
  484. package/src/query/serialize/dialect/sqlite-serializer.ts +108 -12
  485. package/src/query/serialize/sql-serializer.ts +4 -4
  486. package/src/query/simple-query-interface.ts +15 -4
  487. package/src/query/unit-of-work/execute-unit-of-work.test.ts +372 -10
  488. package/src/query/unit-of-work/execute-unit-of-work.ts +87 -27
  489. package/src/query/unit-of-work/retry-policy.test.ts +1 -0
  490. package/src/query/unit-of-work/tx-builder.test.ts +73 -1
  491. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +17 -16
  492. package/src/query/unit-of-work/unit-of-work-types.test.ts +42 -12
  493. package/src/query/unit-of-work/unit-of-work.test.ts +196 -39
  494. package/src/query/unit-of-work/unit-of-work.ts +309 -38
  495. package/src/query/value-decoding.test.ts +63 -4
  496. package/src/query/value-decoding.ts +32 -6
  497. package/src/query/value-encoding.test.ts +86 -2
  498. package/src/query/value-encoding.ts +56 -6
  499. package/src/schema/create.test.ts +293 -47
  500. package/src/schema/create.ts +406 -70
  501. package/src/schema/generate-id.test.ts +3 -2
  502. package/src/schema/generate-id.ts +2 -2
  503. package/src/schema/serialize.test.ts +18 -5
  504. package/src/schema/type-conversion/create-sql-type-mapper.ts +8 -3
  505. package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
  506. package/src/schema/type-conversion/type-mapping.test.ts +26 -1
  507. package/src/schema/validator.test.ts +199 -0
  508. package/src/schema/validator.ts +232 -0
  509. package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +232 -129
  510. package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +155 -99
  511. package/src/schema-output/prisma.test.ts +694 -0
  512. package/src/schema-output/prisma.ts +593 -0
  513. package/src/sql-driver/better-sqlite3.test.ts +5 -3
  514. package/src/sql-driver/dialects/durable-object-dialect.ts +3 -8
  515. package/src/sql-driver/query-executor/default-query-executor.ts +1 -1
  516. package/src/sql-driver/query-executor/query-executor-base.ts +1 -1
  517. package/src/sql-driver/query-executor/query-executor.ts +1 -1
  518. package/src/sql-driver/sql-driver-adapter.ts +2 -2
  519. package/src/sql-driver/sql.ts +2 -1
  520. package/src/sql-driver/sqlocal.test.ts +4 -2
  521. package/src/sync/commands.test.ts +39 -0
  522. package/src/sync/commands.ts +51 -0
  523. package/src/sync/conflict-checker.test.ts +450 -0
  524. package/src/sync/conflict-checker.ts +248 -0
  525. package/src/sync/index.ts +14 -0
  526. package/src/sync/plan.ts +9 -0
  527. package/src/sync/read-tracking.test.ts +177 -0
  528. package/src/sync/read-tracking.ts +287 -0
  529. package/src/sync/submit.test.ts +205 -0
  530. package/src/sync/submit.ts +328 -0
  531. package/src/sync/types.ts +80 -0
  532. package/src/util/default-database-adapter.ts +119 -0
  533. package/src/with-database.ts +20 -31
  534. package/tsconfig.json +1 -1
  535. package/tsdown.config.ts +38 -24
  536. package/vitest.config.ts +1 -0
  537. package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
  538. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
  539. package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
  540. package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
  541. package/dist/adapters/drizzle/generate.d.ts +0 -30
  542. package/dist/adapters/drizzle/generate.d.ts.map +0 -1
  543. package/dist/adapters/drizzle/generate.js.map +0 -1
  544. package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
  545. package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
  546. package/dist/adapters/kysely/kysely-adapter.js +0 -17
  547. package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
  548. package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
  549. package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
  550. package/dist/adapters/shared/table-name-mapper.js +0 -43
  551. package/dist/adapters/shared/table-name-mapper.js.map +0 -1
  552. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +0 -165
  553. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
  554. package/dist/packages/fragno/dist/api/bind-services.js +0 -20
  555. package/dist/packages/fragno/dist/api/bind-services.js.map +0 -1
  556. package/dist/packages/fragno/dist/api/error.js +0 -48
  557. package/dist/packages/fragno/dist/api/error.js.map +0 -1
  558. package/dist/packages/fragno/dist/api/fragment-definition-builder.js +0 -320
  559. package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +0 -1
  560. package/dist/packages/fragno/dist/api/fragment-instantiator.js +0 -525
  561. package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +0 -1
  562. package/dist/packages/fragno/dist/api/fragno-response.js +0 -73
  563. package/dist/packages/fragno/dist/api/fragno-response.js.map +0 -1
  564. package/dist/packages/fragno/dist/api/internal/response-stream.js +0 -81
  565. package/dist/packages/fragno/dist/api/internal/response-stream.js.map +0 -1
  566. package/dist/packages/fragno/dist/api/internal/route.js +0 -10
  567. package/dist/packages/fragno/dist/api/internal/route.js.map +0 -1
  568. package/dist/packages/fragno/dist/api/mutable-request-state.js +0 -97
  569. package/dist/packages/fragno/dist/api/mutable-request-state.js.map +0 -1
  570. package/dist/packages/fragno/dist/api/request-context-storage.js +0 -43
  571. package/dist/packages/fragno/dist/api/request-context-storage.js.map +0 -1
  572. package/dist/packages/fragno/dist/api/request-input-context.js +0 -118
  573. package/dist/packages/fragno/dist/api/request-input-context.js.map +0 -1
  574. package/dist/packages/fragno/dist/api/request-middleware.js +0 -83
  575. package/dist/packages/fragno/dist/api/request-middleware.js.map +0 -1
  576. package/dist/packages/fragno/dist/api/request-output-context.js +0 -119
  577. package/dist/packages/fragno/dist/api/request-output-context.js.map +0 -1
  578. package/dist/packages/fragno/dist/api/route.js +0 -17
  579. package/dist/packages/fragno/dist/api/route.js.map +0 -1
  580. package/dist/packages/fragno/dist/internal/symbols.js +0 -10
  581. package/dist/packages/fragno/dist/internal/symbols.js.map +0 -1
  582. package/dist/schema-generator/schema-generator.d.ts +0 -15
  583. package/dist/schema-generator/schema-generator.d.ts.map +0 -1
  584. package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
  585. package/src/adapters/kysely/kysely-adapter.ts +0 -27
  586. package/src/adapters/shared/table-name-mapper.ts +0 -50
  587. package/src/schema-generator/schema-generator.ts +0 -12
package/CHANGELOG.md CHANGED
@@ -1,5 +1,114 @@
1
1
  # @fragno-dev/db
2
2
 
3
+ ## 0.4.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [0020e39]
8
+ - @fragno-dev/core@0.2.2
9
+
10
+ ## 0.4.0
11
+
12
+ ### Minor Changes
13
+
14
+ - 8a96998: feat: allow altering existing columns to become nullable
15
+
16
+ ### Patch Changes
17
+
18
+ - 3e2ff94: feat: register schemas via adapter registry and mount internal routes
19
+ - f34d7d7: fix: ensure cross-schema durable hook enqueuing works reliably
20
+ - 4d141f8: fix: remove development exports from published packages
21
+ - c8841b5: feat: add callServices helper with implicit request context
22
+ - ae54a60: fix: add browser-safe db entry and rewrite sync command imports for browser builds
23
+ - 7dd7055: feat: remove deps.db and add db-time helpers on builders
24
+ - e178bf4: fix: treat missing left-joined relations as null/[]
25
+ - d2f68ba: feat: add db now offsets and interval helpers
26
+ - 75191db: fix: return fresh DO SQL connections per acquire
27
+ - d395ad2: fix: improve durable hook claiming and wake scheduling
28
+ - 75407f3: feat: add durable hook pagination and newest-first indexing
29
+ - bfdd4b1: fix: skip better-sqlite3 fallback in Cloudflare workers
30
+ - 3ffa711: fix: align dev browser exports to avoid server entry in clients
31
+ - c2c3229: fix: ignore join-only relations in in-memory FK enforcement
32
+ - e559425: feat: add serviceCalls helper to preserve tuple inference for service deps
33
+ - fc5c256: fix(fragno-db): decode bigint values from SQLite blob columns
34
+ - 93fa469: fix: replace cuid2 with a shared Web Crypto id generator
35
+ - 14e00b1: feat: expose hook event metadata in HookContext
36
+ - f33286c: feat: add join-only addReference foreignKey:false support
37
+ - 95cdf95: feat: add browser-safe client exports entrypoint
38
+ - eabdb9c: feat(db): add in-memory outbox support
39
+ - 9eeba53: feat: add internal fragment describe metadata and adapter identity
40
+ - 49a9f4f: feat: add internal outbox mutation log and sync request tables
41
+ - dcba383: fix: write outbox mutation log rows during commits
42
+ - c895c07: feat(db): add internal sync submit endpoint and idempotency
43
+ - ed4b4a0: fix: add workerd/worker export conditions for server entry resolution
44
+ - 1102ce0: fix: support multi-column cursor pagination for SQL adapters
45
+ - ad2ef56: feat: move outbox opt-in to fragment options
46
+ - 0f9b7ef: refactor: replace linked fragments with internal routes
47
+ - 6d043ea: feat: add durable hooks runtime and dispatcher helpers
48
+ - fe55a13: feat(db): add read tracking hooks and plan mode support
49
+ - 01fc2cb: fix: scope db roundtrip guard to route handlers and enable by default in tests
50
+ - 0176aa8: fix: coerce join-only left-side ids and join where aliases
51
+ - 00f2631: feat: allow triggerHook to accept explicit hook ids
52
+ - c13c1c1: fix: handle sqlite FK preprocessing when FK columns are added in alter-table
53
+ - 0a6c8da: fix: stabilize sqlite recreate-table migrations
54
+ - 7a40517: fix: stabilize schema output ordering by schema name
55
+ - 91a2ac0: feat: add WorkflowStepTx API for step-scoped mutations
56
+ - 7bda0b2: feat(db): add sync command registry, registration, and sync entrypoint
57
+ - c115600: feat: widen external ids to 128 chars
58
+ - Updated dependencies [3e2ff94]
59
+ - Updated dependencies [f34d7d7]
60
+ - Updated dependencies [4d141f8]
61
+ - Updated dependencies [c8841b5]
62
+ - Updated dependencies [83f6223]
63
+ - Updated dependencies [567c3b3]
64
+ - Updated dependencies [8a2da9d]
65
+ - Updated dependencies [93fa469]
66
+ - Updated dependencies [b3ad7eb]
67
+ - Updated dependencies [9eeba53]
68
+ - Updated dependencies [2ae432c]
69
+ - Updated dependencies [9f87189]
70
+ - Updated dependencies [0f9b7ef]
71
+ - Updated dependencies [f4aedad]
72
+ - Updated dependencies [f042c9d]
73
+ - Updated dependencies [7bda0b2]
74
+ - Updated dependencies [b84a3d0]
75
+ - @fragno-dev/core@0.2.1
76
+
77
+ ## 0.3.0
78
+
79
+ ### Minor Changes
80
+
81
+ - 8e9b6cd: feat(db,cli): add SqlAdapter and explicit schema output formats
82
+
83
+ BREAKING CHANGE: The database adapter API now requires SqlAdapter with explicit schema output
84
+ formats.
85
+
86
+ ### Patch Changes
87
+
88
+ - dbbbf60: fix: ensure unit-of-work after-phase hooks run on errors
89
+ - 3e07799: fix: allow durable hook processing to bypass wrapper adapters and widen drain helpers
90
+ - 20a98f8: feat: expose internal outbox route under /\_internal when outbox is enabled
91
+ - 1902f30: fix(db): normalize postgres timestamp decoding for timezone-less values.
92
+ - 15e3263: feat(db): require schema names and support namespace-aware SQL naming
93
+ - 208cb8e: feat: add runtime validation for table inserts
94
+ - 33f671b: fix(db): add dbNow value support, cursor pagination, and retry conflict handling
95
+ - fc803fc: fix(db): ensure Drizzle SQLite external ids are enforced as unique indexes.
96
+ - 0628c1f: fix(db): requeue durable hooks stuck in processing after a timeout
97
+ - 7e1eb47: feat(db): add processAt scheduling and reusable durable hooks dispatchers.
98
+ - 1dc4e7f: fix: disable handlerTx retries when no retrieve ops and reject explicit retry policies
99
+ - 3c9fbac: fix(db): align GenericSQL migration defaults and constraint names with Drizzle output.
100
+ - a5ead11: feat(db): add Prisma adapter and SQLite Prisma profile support.
101
+ - c4d4cc6: feat: default to sqlite adapter when databaseAdapter is omitted (better-sqlite3
102
+ installed)
103
+ - d4baad3: fix: explicit databaseNamespace values are now used as-is without sanitization; default
104
+ namespace (from schema.name) is still sanitized
105
+ - 548bf37: feat(db): expose handlerTx in durable hook context and deprecate direct query engines.
106
+ - 3041732: fix: run durable hooks off-request and relax pending task leases
107
+ - 7e179d1: feat(db): remove workflows dispatcher packages in favor of db dispatchers.
108
+ - 0013fa6: fix(db): store outbox versionstamps as strings.
109
+ - 69b9a79: fix: harden durable hook claiming and wake scheduling
110
+ - 5cef16e: feat(db,test): add SQL outbox support and adapter testing configuration.
111
+
3
112
  ## 0.2.2
4
113
 
5
114
  ### Patch Changes
package/README.md CHANGED
@@ -2,8 +2,9 @@
2
2
 
3
3
  Optional, ORM-agnostic database layer for Fragno libraries.
4
4
 
5
- Library authors define a type-safe schema; users plug in their existing Kysely or Drizzle setup so
6
- data is written directly into their database.
5
+ Library authors define a type-safe schema; users plug in the SqlAdapter (configured with Kysely
6
+ dialects) so data is written directly into their database. Schema output can be generated for SQL
7
+ migrations, Drizzle, or Prisma workflows.
7
8
 
8
9
  Full docs live at
9
10
  [Database integration for library authors](https://fragno.dev/docs/fragno/for-library-authors/database-integration/overview).
@@ -39,7 +40,7 @@ pnpm add --dev @fragno-dev/cli
39
40
  // schema.ts
40
41
  import { schema, idColumn, column } from "@fragno-dev/db/schema";
41
42
 
42
- export const commentSchema = schema((s) => {
43
+ export const commentSchema = schema("comment", (s) => {
43
44
  return s
44
45
  .addTable("comment", (t) => {
45
46
  return t
@@ -91,22 +92,66 @@ export function createCommentLibrary(
91
92
  }
92
93
  ```
93
94
 
94
- Your users pass their own database adapter (Kysely or Drizzle) via `options`.
95
+ Your users pass a SqlAdapter via `options`. If `better-sqlite3` is installed, `databaseAdapter` is
96
+ optional and defaults to a local SQLite file per fragment in `FRAGNO_DATA_DIR` (default:
97
+ `~/.fragno`).
98
+
99
+ ```ts
100
+ // User's application code
101
+ import { SqlAdapter } from "@fragno-dev/db";
102
+ import { PostgresDialect } from "kysely";
103
+ import { Pool } from "pg";
104
+
105
+ const commentLib = createCommentLibrary(
106
+ { maxCommentsPerPost: 10 },
107
+ {
108
+ databaseAdapter: new SqlAdapter({
109
+ dialect: new PostgresDialect({
110
+ pool: new Pool({
111
+ /* connection config */
112
+ }),
113
+ }),
114
+ }),
115
+ },
116
+ );
117
+ ```
95
118
 
96
119
  ## Key features
97
120
 
98
121
  - **Schema definition**: define tables, columns, indexes, and relations with a fluent, typed API.
99
122
  - **Type-safe ORM**: full TypeScript inference for queries and results.
100
123
  - **User-owned database**: your library never owns the database; users provide the adapter.
101
- - **ORM agnostic**: works with Kysely or Drizzle (and more to come).
124
+ - **ORM agnostic**: SQL runtime with explicit schema output formats (SQL, Drizzle, Prisma).
102
125
  - **Namespaced tables**: avoids conflicts with user tables.
103
126
 
104
- ## ORM and database support
127
+ ## Internal registry + describe route
128
+
129
+ When multiple fragments share a database adapter, Fragno maintains an in-memory, adapter-scoped
130
+ registry of schemas and fragment mount routes. Each fragment exposes a lightweight internal describe
131
+ endpoint at `/_internal` (mounted under the fragment's mount route) that aggregates this registry.
132
+
133
+ Example response:
105
134
 
106
- `@fragno-dev/db` works with:
135
+ ```json
136
+ {
137
+ "fragments": [{ "name": "comment-library", "mountRoute": "/api/comment-library" }],
138
+ "schemas": [
139
+ { "name": "comment", "namespace": "comment", "version": 1, "tables": ["comment", "user"] }
140
+ ],
141
+ "routes": { "internal": "/_internal", "outbox": "/_internal/outbox" }
142
+ }
143
+ ```
144
+
145
+ Notes:
146
+
147
+ - `schemas` excludes the internal Fragno schema.
148
+ - `fragments` only includes fragments that opted into outbox support via fragment options.
149
+ - `routes.outbox` is only present when at least one fragment has outbox enabled.
150
+
151
+ ## ORM and database support
107
152
 
108
- - **Kysely**
109
- - **Drizzle**
153
+ `@fragno-dev/db` works with Kysely dialects for runtime execution and supports SQL migrations plus
154
+ Drizzle or Prisma schema outputs.
110
155
 
111
156
  Backed by Postgres and SQLite, including PGLite and Cloudflare Durable Objects.
112
157
 
@@ -1,7 +1,9 @@
1
1
  import { AnySchema } from "../schema/create.js";
2
+ import { SqlNamingStrategy } from "../naming/sql-naming.js";
3
+ import { SQLiteStorageMode } from "./generic-sql/sqlite-storage.js";
2
4
  import { IUnitOfWork } from "../query/unit-of-work/unit-of-work.js";
3
5
  import { SimpleQueryInterface } from "../query/simple-query-interface.js";
4
- import { SchemaGenerator } from "../schema-generator/schema-generator.js";
6
+ import { SQLProvider } from "../shared/providers.js";
5
7
  import { PreparedMigrations } from "./generic-sql/migration/prepared-migrations.js";
6
8
  import { RequestContextStorage } from "@fragno-dev/core/internal/request-context-storage";
7
9
 
@@ -15,12 +17,11 @@ declare const fragnoDatabaseAdapterVersionFakeSymbol: "$fragno-database-adapter-
15
17
  type DatabaseContextStorage = {
16
18
  uow: IUnitOfWork;
17
19
  };
18
- /**
19
- * Maps logical table names (used by fragment authors) to physical table names (with namespace suffix)
20
- */
21
- interface TableNameMapper {
22
- toPhysical(logicalName: string): string;
23
- toLogical(physicalName: string): string;
20
+ type SQLiteProfile = "default" | "prisma";
21
+ interface DatabaseAdapterMetadata {
22
+ databaseType?: SQLProvider;
23
+ sqliteProfile?: SQLiteProfile;
24
+ sqliteStorageMode?: SQLiteStorageMode;
24
25
  }
25
26
  interface DatabaseAdapter<TUOWConfig = void> {
26
27
  [fragnoDatabaseAdapterNameFakeSymbol]: string;
@@ -30,30 +31,31 @@ interface DatabaseAdapter<TUOWConfig = void> {
30
31
  * This allows multiple fragments to participate in the same Unit of Work.
31
32
  */
32
33
  readonly contextStorage: RequestContextStorage<DatabaseContextStorage>;
34
+ /**
35
+ * Optional adapter override used for durable hook processing.
36
+ * Use this when the public adapter wraps another adapter (e.g. model checker).
37
+ */
38
+ getHookProcessingAdapter?: () => DatabaseAdapter<TUOWConfig>;
33
39
  /**
34
40
  * Get current schema version, undefined if not initialized.
35
41
  */
36
42
  getSchemaVersion(namespace: string): Promise<string | undefined>;
37
- createQueryEngine: <const T extends AnySchema>(schema: T, namespace: string) => SimpleQueryInterface<T, TUOWConfig>;
38
- prepareMigrations?: <const T extends AnySchema>(schema: T, namespace: string) => PreparedMigrations;
39
43
  /**
40
- * Generate a combined schema file from one or more fragments.
41
- * If not implemented, schema generation is not supported for this adapter.
44
+ * Optional metadata used by schema output tooling.
45
+ */
46
+ readonly adapterMetadata?: DatabaseAdapterMetadata;
47
+ /**
48
+ * Naming strategy used for physical SQL identifiers.
42
49
  */
43
- createSchemaGenerator?: (fragments: {
44
- schema: AnySchema;
45
- namespace: string;
46
- }[], options?: {
47
- path?: string;
48
- }) => SchemaGenerator;
50
+ readonly namingStrategy: SqlNamingStrategy;
49
51
  /**
50
- * Creates a table name mapper for the given namespace.
51
- * Used to convert between logical table names and physical table names.
52
+ * @deprecated Avoid using query engines directly in fragment code. Prefer handlerTx/serviceTx.
52
53
  */
53
- createTableNameMapper: (namespace: string) => TableNameMapper;
54
+ createQueryEngine: <const T extends AnySchema>(schema: T, namespace: string | null) => SimpleQueryInterface<T, TUOWConfig>;
55
+ prepareMigrations?: <const T extends AnySchema>(schema: T, namespace: string | null) => PreparedMigrations;
54
56
  isConnectionHealthy: () => Promise<boolean>;
55
57
  close: () => Promise<void>;
56
58
  }
57
59
  //#endregion
58
- export { DatabaseAdapter, DatabaseContextStorage, TableNameMapper, fragnoDatabaseAdapterNameFakeSymbol, fragnoDatabaseAdapterVersionFakeSymbol };
60
+ export { DatabaseAdapter, DatabaseAdapterMetadata, DatabaseContextStorage, SQLiteProfile, fragnoDatabaseAdapterNameFakeSymbol, fragnoDatabaseAdapterVersionFakeSymbol };
59
61
  //# sourceMappingURL=adapters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.d.ts","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":[],"mappings":";;;;;;;;cAOa;cACA;AADb;AACA;AAMA;AAOA;AAKiB,KAZL,sBAAA,GAYoB;EAC7B,GAAA,EAZI,WAYJ;CACA;;;;AAamC,UApBrB,eAAA,CAoBqB;EAC1B,UAAA,CAAA,WAAA,EAAA,MAAA,CAAA,EAAA,MAAA;EAEgB,SAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;AAArB,UAlBU,eAkBV,CAAA,aAAA,IAAA,CAAA,CAAA;EAEgC,CAnBpC,mCAAA,CAmBoC,EAAA,MAAA;EAC3B,CAnBT,sCAAA,CAmBS,EAAA,MAAA;EAEL;;;;EAiBsB,SAAA,cAAA,EAhCF,qBAgCE,CAhCoB,sBAgCpB,CAAA;EAEd;;;uCA7BwB;sCAED,mBAC1B,yBAEL,qBAAqB,GAAG;uCAEQ,mBAC3B,yBAEL;;;;;;YAOkB;;;;QAElB;;;;;gDAMyC;6BAEnB;eAEd"}
1
+ {"version":3,"file":"adapters.d.ts","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cAUa;cACA;AADb;AACA;AAMA;AAIA;AAEiB,KANL,sBAAA,GAM4B;EACvB,GAAA,EANV,WAMU;CACC;AACI,KALV,aAAA,GAKU,SAAA,GAAA,QAAA;AAAiB,UAHtB,uBAAA,CAGsB;EAGtB,YAAA,CAAA,EALA,WAKe;EAC7B,aAAA,CAAA,EALe,aAKf;EACA,iBAAA,CAAA,EALmB,iBAKnB;;AAMwB,UARV,eAQU,CAAA,aAAA,IAAA,CAAA,CAAA;EAMwB,CAbhD,mCAAA,CAagD,EAAA,MAAA;EAAhB,CAZhC,sCAAA,CAYgC,EAAA,MAAA;EAKI;;;;EAgB3B,SAAA,cAAA,EA3Be,qBA2Bf,CA3BqC,sBA2BrC,CAAA;EAEgB;;;;EAGhB,wBAAA,CAAA,EAAA,GAAA,GA1BuB,eA0BvB,CA1BuC,UA0BvC,CAAA;EAEL;;;EAIe,gBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EA3BiB,OA2BjB,CAAA,MAAA,GAAA,SAAA,CAAA;;;;6BAtBO;;;;2BAKF;;;;sCAKW,mBAC1B,gCAEL,qBAAqB,GAAG;uCAEQ,mBAC3B,gCAEL;6BAEsB;eAEd"}
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.js","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":["import type { SimpleQueryInterface } from \"../query/simple-query-interface\";\nimport type { SchemaGenerator } from \"../schema-generator/schema-generator\";\nimport type { AnySchema } from \"../schema/create\";\nimport type { RequestContextStorage } from \"@fragno-dev/core/internal/request-context-storage\";\nimport type { IUnitOfWork } from \"../query/unit-of-work/unit-of-work\";\nimport type { PreparedMigrations } from \"./generic-sql/migration/prepared-migrations\";\n\nexport const fragnoDatabaseAdapterNameFakeSymbol = \"$fragno-database-adapter-name\" as const;\nexport const fragnoDatabaseAdapterVersionFakeSymbol = \"$fragno-database-adapter-version\" as const;\n\n/**\n * Storage type for database context - stores the Unit of Work.\n * This is shared across all fragments using the same adapter.\n */\nexport type DatabaseContextStorage = {\n uow: IUnitOfWork;\n};\n\n/**\n * Maps logical table names (used by fragment authors) to physical table names (with namespace suffix)\n */\nexport interface TableNameMapper {\n toPhysical(logicalName: string): string;\n toLogical(physicalName: string): string;\n}\n\nexport interface DatabaseAdapter<TUOWConfig = void> {\n [fragnoDatabaseAdapterNameFakeSymbol]: string;\n [fragnoDatabaseAdapterVersionFakeSymbol]: number;\n\n /**\n * Request context storage shared across all fragments using this adapter.\n * This allows multiple fragments to participate in the same Unit of Work.\n */\n readonly contextStorage: RequestContextStorage<DatabaseContextStorage>;\n\n /**\n * Get current schema version, undefined if not initialized.\n */\n getSchemaVersion(namespace: string): Promise<string | undefined>;\n\n createQueryEngine: <const T extends AnySchema>(\n schema: T,\n namespace: string,\n ) => SimpleQueryInterface<T, TUOWConfig>;\n\n prepareMigrations?: <const T extends AnySchema>(\n schema: T,\n namespace: string,\n ) => PreparedMigrations;\n\n /**\n * Generate a combined schema file from one or more fragments.\n * If not implemented, schema generation is not supported for this adapter.\n */\n createSchemaGenerator?: (\n fragments: { schema: AnySchema; namespace: string }[],\n options?: { path?: string },\n ) => SchemaGenerator;\n\n /**\n * Creates a table name mapper for the given namespace.\n * Used to convert between logical table names and physical table names.\n */\n createTableNameMapper: (namespace: string) => TableNameMapper;\n\n isConnectionHealthy: () => Promise<boolean>;\n\n close: () => Promise<void>;\n}\n"],"mappings":";AAOA,MAAa,sCAAsC;AACnD,MAAa,yCAAyC"}
1
+ {"version":3,"file":"adapters.js","names":[],"sources":["../../src/adapters/adapters.ts"],"sourcesContent":["import type { RequestContextStorage } from \"@fragno-dev/core/internal/request-context-storage\";\n\nimport type { SqlNamingStrategy } from \"../naming/sql-naming\";\nimport type { SimpleQueryInterface } from \"../query/simple-query-interface\";\nimport type { IUnitOfWork } from \"../query/unit-of-work/unit-of-work\";\nimport type { AnySchema } from \"../schema/create\";\nimport type { SQLProvider } from \"../shared/providers\";\nimport type { PreparedMigrations } from \"./generic-sql/migration/prepared-migrations\";\nimport type { SQLiteStorageMode } from \"./generic-sql/sqlite-storage\";\n\nexport const fragnoDatabaseAdapterNameFakeSymbol = \"$fragno-database-adapter-name\" as const;\nexport const fragnoDatabaseAdapterVersionFakeSymbol = \"$fragno-database-adapter-version\" as const;\n\n/**\n * Storage type for database context - stores the Unit of Work.\n * This is shared across all fragments using the same adapter.\n */\nexport type DatabaseContextStorage = {\n uow: IUnitOfWork;\n};\n\nexport type SQLiteProfile = \"default\" | \"prisma\";\n\nexport interface DatabaseAdapterMetadata {\n databaseType?: SQLProvider;\n sqliteProfile?: SQLiteProfile;\n sqliteStorageMode?: SQLiteStorageMode;\n}\n\nexport interface DatabaseAdapter<TUOWConfig = void> {\n [fragnoDatabaseAdapterNameFakeSymbol]: string;\n [fragnoDatabaseAdapterVersionFakeSymbol]: number;\n\n /**\n * Request context storage shared across all fragments using this adapter.\n * This allows multiple fragments to participate in the same Unit of Work.\n */\n readonly contextStorage: RequestContextStorage<DatabaseContextStorage>;\n\n /**\n * Optional adapter override used for durable hook processing.\n * Use this when the public adapter wraps another adapter (e.g. model checker).\n */\n getHookProcessingAdapter?: () => DatabaseAdapter<TUOWConfig>;\n\n /**\n * Get current schema version, undefined if not initialized.\n */\n getSchemaVersion(namespace: string): Promise<string | undefined>;\n\n /**\n * Optional metadata used by schema output tooling.\n */\n readonly adapterMetadata?: DatabaseAdapterMetadata;\n\n /**\n * Naming strategy used for physical SQL identifiers.\n */\n readonly namingStrategy: SqlNamingStrategy;\n\n /**\n * @deprecated Avoid using query engines directly in fragment code. Prefer handlerTx/serviceTx.\n */\n createQueryEngine: <const T extends AnySchema>(\n schema: T,\n namespace: string | null,\n ) => SimpleQueryInterface<T, TUOWConfig>;\n\n prepareMigrations?: <const T extends AnySchema>(\n schema: T,\n namespace: string | null,\n ) => PreparedMigrations;\n\n isConnectionHealthy: () => Promise<boolean>;\n\n close: () => Promise<void>;\n}\n"],"mappings":";AAUA,MAAa,sCAAsC;AACnD,MAAa,yCAAyC"}
@@ -1,3 +1,5 @@
1
+ import { SqlNamingStrategy } from "../../naming/sql-naming.js";
2
+
1
3
  //#region src/adapters/generic-sql/driver-config.d.ts
2
4
  declare const supportedDatabases: readonly ["sqlite", "postgresql", "mysql"];
3
5
  type SupportedDatabase = (typeof supportedDatabases)[number];
@@ -8,12 +10,17 @@ declare abstract class DriverConfig<T extends SupportedDriverType = SupportedDri
8
10
  abstract readonly databaseType: SupportedDatabase;
9
11
  abstract readonly supportsReturning: boolean;
10
12
  abstract readonly supportsJson: boolean;
13
+ abstract readonly outboxVersionstampStrategy: OutboxVersionstampStrategy;
11
14
  /**
12
15
  * Column name for internal ID in RETURNING results.
13
16
  * Only defined if supportsReturning is true.
14
17
  */
15
18
  abstract readonly internalIdColumn: string | undefined;
19
+ /**
20
+ * SQLite storage selection is handled by adapters, not driver config.
21
+ */
16
22
  get supportsRowsAffected(): boolean;
23
+ get defaultNamingStrategy(): SqlNamingStrategy;
17
24
  /**
18
25
  * Extract the number of affected rows from a query result.
19
26
  * Only implemented for drivers that support affected rows reporting.
@@ -24,12 +31,15 @@ declare abstract class DriverConfig<T extends SupportedDriverType = SupportedDri
24
31
  */
25
32
  extractAffectedRows?(result: Record<string, unknown>): bigint;
26
33
  }
34
+ declare const defaultNamingStrategyForDatabase: (databaseType: SupportedDatabase) => SqlNamingStrategy;
35
+ type OutboxVersionstampStrategy = "update-returning" | "insert-on-conflict-returning" | "insert-on-duplicate-last-insert-id";
27
36
  declare class SQLocalDriverConfig extends DriverConfig<"sqlocal"> {
28
37
  readonly driverType = "sqlocal";
29
38
  readonly databaseType = "sqlite";
30
39
  readonly supportsReturning = true;
31
40
  readonly supportsJson = false;
32
41
  readonly internalIdColumn = "_internalId";
42
+ readonly outboxVersionstampStrategy = "insert-on-conflict-returning";
33
43
  }
34
44
  declare class CloudflareDurableObjectsDriverConfig extends DriverConfig<"cloudflare_durable_objects"> {
35
45
  readonly driverType = "cloudflare_durable_objects";
@@ -37,6 +47,7 @@ declare class CloudflareDurableObjectsDriverConfig extends DriverConfig<"cloudfl
37
47
  readonly supportsReturning = true;
38
48
  readonly supportsJson = false;
39
49
  readonly internalIdColumn = "_internalId";
50
+ readonly outboxVersionstampStrategy = "insert-on-conflict-returning";
40
51
  }
41
52
  declare class BetterSQLite3DriverConfig extends DriverConfig<"better-sqlite3"> {
42
53
  readonly driverType = "better-sqlite3";
@@ -44,6 +55,7 @@ declare class BetterSQLite3DriverConfig extends DriverConfig<"better-sqlite3"> {
44
55
  readonly supportsReturning = true;
45
56
  readonly supportsJson = false;
46
57
  readonly internalIdColumn = "_internalId";
58
+ readonly outboxVersionstampStrategy = "insert-on-conflict-returning";
47
59
  extractAffectedRows(result: Record<string, unknown>): bigint;
48
60
  }
49
61
  declare class NodePostgresDriverConfig extends DriverConfig<"pg"> {
@@ -52,6 +64,7 @@ declare class NodePostgresDriverConfig extends DriverConfig<"pg"> {
52
64
  readonly supportsReturning = true;
53
65
  readonly supportsJson = true;
54
66
  readonly internalIdColumn = "_internalId";
67
+ readonly outboxVersionstampStrategy = "insert-on-conflict-returning";
55
68
  extractAffectedRows(result: Record<string, unknown>): bigint;
56
69
  }
57
70
  declare class PGLiteDriverConfig extends DriverConfig<"pglite"> {
@@ -60,6 +73,7 @@ declare class PGLiteDriverConfig extends DriverConfig<"pglite"> {
60
73
  readonly supportsReturning = true;
61
74
  readonly supportsJson = true;
62
75
  readonly internalIdColumn = "_internalId";
76
+ readonly outboxVersionstampStrategy = "insert-on-conflict-returning";
63
77
  extractAffectedRows(result: Record<string, unknown>): bigint;
64
78
  }
65
79
  declare class MySQL2DriverConfig extends DriverConfig<"mysql2"> {
@@ -68,7 +82,8 @@ declare class MySQL2DriverConfig extends DriverConfig<"mysql2"> {
68
82
  readonly supportsReturning = false;
69
83
  readonly supportsJson = true;
70
84
  readonly internalIdColumn: undefined;
85
+ readonly outboxVersionstampStrategy = "insert-on-duplicate-last-insert-id";
71
86
  }
72
87
  //#endregion
73
- export { BetterSQLite3DriverConfig, CloudflareDurableObjectsDriverConfig, DriverConfig, MySQL2DriverConfig, NodePostgresDriverConfig, PGLiteDriverConfig, SQLocalDriverConfig, SupportedDatabase, SupportedDriverType, supportedDatabases, supportedDriverTypes };
88
+ export { BetterSQLite3DriverConfig, CloudflareDurableObjectsDriverConfig, DriverConfig, MySQL2DriverConfig, NodePostgresDriverConfig, OutboxVersionstampStrategy, PGLiteDriverConfig, SQLocalDriverConfig, SupportedDatabase, SupportedDriverType, defaultNamingStrategyForDatabase, supportedDatabases, supportedDriverTypes };
74
89
  //# sourceMappingURL=driver-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"driver-config.d.ts","names":[],"sources":["../../../src/adapters/generic-sql/driver-config.ts"],"sourcesContent":[],"mappings":";cAAa;AAAA,KACD,iBAAA,GADgE,CAAA,OACpC,kBADoC,CAAA,CAAA,MAAA,CAAA;AAChE,cAEC,oBAF2B,EAAA,SAAA,CAAA,SAAkB,EAAA,4BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,CAAA;AAE7C,KASD,mBAAA,GAFF,CAAA,OAEgC,oBAFhC,CAAA,CAAA,MAAA,CAAA;AAEE,uBAEU,YAFoB,CAAA,UAEG,mBAFiB,GAEK,mBAFL,CAAA,CAAA;EAExC,kBAAY,UAAA,EACF,CADE;EAAW,kBAAA,YAAA,EAEX,iBAFW;EAAsB,kBAAA,iBAAA,EAAA,OAAA;EACnC,kBAAA,YAAA,EAAA,OAAA;EACE;;;AA0BlC;EAQa,kBAAA,gBAAA,EAAA,MAAqC,GAAA,SAAQ;EAQ7C,IAAA,oBAAA,CAAA,CAAA,EAA0B,OAAA;EAwB1B;AAgCb;AAuBA;;;;;;+BAlG+B;;cAGlB,mBAAA,SAA4B;;;;;;;cAQ5B,oCAAA,SAA6C;;;;;;;cAQ7C,yBAAA,SAAkC;;;;;;8BAOR;;cAiB1B,wBAAA,SAAiC;;;;;;8BAOP;;cAyB1B,kBAAA,SAA2B;;;;;;8BAOD;;cAgB1B,kBAAA,SAA2B"}
1
+ {"version":3,"file":"driver-config.d.ts","names":[],"sources":["../../../src/adapters/generic-sql/driver-config.ts"],"sourcesContent":[],"mappings":";;;cAMa;KACD,iBAAA,WAA4B;AAD3B,cAGA,oBAH+D,EAAA,SAAA,CAAA,SAAA,EAAA,4BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,CAAA;AAChE,KAWA,mBAAA,GAXiB,CAAA,OAWa,oBAXgB,CAAA,CAAA,MAAA,CAAA;AAE7C,uBAWS,YAJZ,CAAA,UAImC,mBAJnC,GAIyD,mBAJzD,CAAA,CAAA;EAEE,kBAAA,UAAmB,EAGC,CAHD;EAET,kBAAY,YAAA,EAEA,iBAFA;EAAW,kBAAA,iBAAA,EAAA,OAAA;EAAsB,kBAAA,YAAA,EAAA,OAAA;EACnC,kBAAA,0BAAA,EAKgB,0BALhB;EACE;;;;EA+BG,kBAAA,gBAAA,EAAA,MAAA,GAAA,SAAA;EAGxB;AAab;AAKA;EASa,IAAA,oBAAA,CAAA,CAAA,EAAA,OAAA;EASA,IAAA,qBAAA,CAAA,CAAA,EAnDkB,iBA2DQ;EAiB1B;AAiCb;AAwBA;;;;;;+BAzH+B;;cAGlB,iDACG,sBACb;KAWS,0BAAA;cAKC,mBAAA,SAA4B;;;;;;;;cAS5B,oCAAA,SAA6C;;;;;;;;cAS7C,yBAAA,SAAkC;;;;;;;8BAQR;;cAiB1B,wBAAA,SAAiC;;;;;;;8BAQP;;cAyB1B,kBAAA,SAA2B;;;;;;;8BAQD;;cAgB1B,kBAAA,SAA2B"}
@@ -1,3 +1,5 @@
1
+ import { schemaNamingStrategy, suffixNamingStrategy } from "../../naming/sql-naming.js";
2
+
1
3
  //#region src/adapters/generic-sql/driver-config.ts
2
4
  const supportedDatabases = [
3
5
  "sqlite",
@@ -13,9 +15,23 @@ const supportedDriverTypes = [
13
15
  "mysql2"
14
16
  ];
15
17
  var DriverConfig = class {
18
+ /**
19
+ * SQLite storage selection is handled by adapters, not driver config.
20
+ */
16
21
  get supportsRowsAffected() {
17
22
  return !!this.extractAffectedRows;
18
23
  }
24
+ get defaultNamingStrategy() {
25
+ return defaultNamingStrategyForDatabase(this.databaseType);
26
+ }
27
+ };
28
+ const defaultNamingStrategyForDatabase = (databaseType) => {
29
+ switch (databaseType) {
30
+ case "postgresql": return schemaNamingStrategy;
31
+ case "sqlite":
32
+ case "mysql":
33
+ default: return suffixNamingStrategy;
34
+ }
19
35
  };
20
36
  var SQLocalDriverConfig = class extends DriverConfig {
21
37
  driverType = "sqlocal";
@@ -23,6 +39,7 @@ var SQLocalDriverConfig = class extends DriverConfig {
23
39
  supportsReturning = true;
24
40
  supportsJson = false;
25
41
  internalIdColumn = "_internalId";
42
+ outboxVersionstampStrategy = "insert-on-conflict-returning";
26
43
  };
27
44
  var CloudflareDurableObjectsDriverConfig = class extends DriverConfig {
28
45
  driverType = "cloudflare_durable_objects";
@@ -30,6 +47,7 @@ var CloudflareDurableObjectsDriverConfig = class extends DriverConfig {
30
47
  supportsReturning = true;
31
48
  supportsJson = false;
32
49
  internalIdColumn = "_internalId";
50
+ outboxVersionstampStrategy = "insert-on-conflict-returning";
33
51
  };
34
52
  var BetterSQLite3DriverConfig = class extends DriverConfig {
35
53
  driverType = "better-sqlite3";
@@ -37,6 +55,7 @@ var BetterSQLite3DriverConfig = class extends DriverConfig {
37
55
  supportsReturning = true;
38
56
  supportsJson = false;
39
57
  internalIdColumn = "_internalId";
58
+ outboxVersionstampStrategy = "insert-on-conflict-returning";
40
59
  extractAffectedRows(result) {
41
60
  if ("numAffectedRows" in result) {
42
61
  const value = result["numAffectedRows"];
@@ -52,6 +71,7 @@ var NodePostgresDriverConfig = class extends DriverConfig {
52
71
  supportsReturning = true;
53
72
  supportsJson = true;
54
73
  internalIdColumn = "_internalId";
74
+ outboxVersionstampStrategy = "insert-on-conflict-returning";
55
75
  extractAffectedRows(result) {
56
76
  if ("numAffectedRows" in result) {
57
77
  const value = result["numAffectedRows"];
@@ -72,6 +92,7 @@ var PGLiteDriverConfig = class extends DriverConfig {
72
92
  supportsReturning = true;
73
93
  supportsJson = true;
74
94
  internalIdColumn = "_internalId";
95
+ outboxVersionstampStrategy = "insert-on-conflict-returning";
75
96
  extractAffectedRows(result) {
76
97
  if ("affectedRows" in result) {
77
98
  const value = result["affectedRows"];
@@ -87,8 +108,9 @@ var MySQL2DriverConfig = class extends DriverConfig {
87
108
  supportsReturning = false;
88
109
  supportsJson = true;
89
110
  internalIdColumn = void 0;
111
+ outboxVersionstampStrategy = "insert-on-duplicate-last-insert-id";
90
112
  };
91
113
 
92
114
  //#endregion
93
- export { BetterSQLite3DriverConfig, CloudflareDurableObjectsDriverConfig, DriverConfig, MySQL2DriverConfig, NodePostgresDriverConfig, PGLiteDriverConfig, SQLocalDriverConfig, supportedDatabases, supportedDriverTypes };
115
+ export { BetterSQLite3DriverConfig, CloudflareDurableObjectsDriverConfig, DriverConfig, MySQL2DriverConfig, NodePostgresDriverConfig, PGLiteDriverConfig, SQLocalDriverConfig, defaultNamingStrategyForDatabase, supportedDatabases, supportedDriverTypes };
94
116
  //# sourceMappingURL=driver-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"driver-config.js","names":[],"sources":["../../../src/adapters/generic-sql/driver-config.ts"],"sourcesContent":["export const supportedDatabases = [\"sqlite\", \"postgresql\", \"mysql\"] as const;\nexport type SupportedDatabase = (typeof supportedDatabases)[number];\n\nexport const supportedDriverTypes = [\n \"sqlocal\",\n \"cloudflare_durable_objects\",\n \"better-sqlite3\",\n \"pg\",\n \"pglite\",\n \"mysql2\",\n] as const;\n\nexport type SupportedDriverType = (typeof supportedDriverTypes)[number];\n\nexport abstract class DriverConfig<T extends SupportedDriverType = SupportedDriverType> {\n abstract readonly driverType: T;\n abstract readonly databaseType: SupportedDatabase;\n\n abstract readonly supportsReturning: boolean;\n abstract readonly supportsJson: boolean;\n\n /**\n * Column name for internal ID in RETURNING results.\n * Only defined if supportsReturning is true.\n */\n abstract readonly internalIdColumn: string | undefined;\n\n get supportsRowsAffected(): boolean {\n return !!this.extractAffectedRows;\n }\n\n /**\n * Extract the number of affected rows from a query result.\n * Only implemented for drivers that support affected rows reporting.\n *\n * @param result - The query result from the SQL driver\n * @returns The number of affected rows as bigint\n * @throws Error if affected rows information is not found in the result\n */\n extractAffectedRows?(result: Record<string, unknown>): bigint;\n}\n\nexport class SQLocalDriverConfig extends DriverConfig<\"sqlocal\"> {\n override readonly driverType = \"sqlocal\";\n override readonly databaseType = \"sqlite\";\n override readonly supportsReturning = true;\n override readonly supportsJson = false;\n override readonly internalIdColumn = \"_internalId\";\n}\n\nexport class CloudflareDurableObjectsDriverConfig extends DriverConfig<\"cloudflare_durable_objects\"> {\n override readonly driverType = \"cloudflare_durable_objects\";\n override readonly databaseType = \"sqlite\";\n override readonly supportsReturning = true;\n override readonly supportsJson = false;\n override readonly internalIdColumn = \"_internalId\";\n}\n\nexport class BetterSQLite3DriverConfig extends DriverConfig<\"better-sqlite3\"> {\n override readonly driverType = \"better-sqlite3\";\n override readonly databaseType = \"sqlite\";\n override readonly supportsReturning = true;\n override readonly supportsJson = false;\n override readonly internalIdColumn = \"_internalId\";\n\n override extractAffectedRows(result: Record<string, unknown>): bigint {\n if (\"numAffectedRows\" in result) {\n const value = result[\"numAffectedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n\n throw new Error(\n `No affected rows found in result: ${JSON.stringify(result)}. Driver ${this.driverType} is expected to support affected rows.`,\n );\n }\n}\n\nexport class NodePostgresDriverConfig extends DriverConfig<\"pg\"> {\n override readonly driverType = \"pg\";\n override readonly databaseType = \"postgresql\";\n override readonly supportsReturning = true;\n override readonly supportsJson = true;\n override readonly internalIdColumn = \"_internalId\";\n\n override extractAffectedRows(result: Record<string, unknown>): bigint {\n if (\"numAffectedRows\" in result) {\n const value = result[\"numAffectedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n if (\"numChangedRows\" in result) {\n const value = result[\"numChangedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n throw new Error(\n `No affected rows found in result: ${JSON.stringify(result)}. Driver ${this.driverType} is expected to support affected rows.`,\n );\n }\n}\n\nexport class PGLiteDriverConfig extends DriverConfig<\"pglite\"> {\n override readonly driverType = \"pglite\";\n override readonly databaseType = \"postgresql\";\n override readonly supportsReturning = true;\n override readonly supportsJson = true;\n override readonly internalIdColumn = \"_internalId\";\n\n override extractAffectedRows(result: Record<string, unknown>): bigint {\n if (\"affectedRows\" in result) {\n const value = result[\"affectedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n throw new Error(\n `No affected rows found in result: ${JSON.stringify(result)}. Driver ${this.driverType} is expected to support affected rows.`,\n );\n }\n}\n\nexport class MySQL2DriverConfig extends DriverConfig<\"mysql2\"> {\n override readonly driverType = \"mysql2\";\n override readonly databaseType = \"mysql\";\n override readonly supportsReturning = false;\n override readonly supportsJson = true;\n override readonly internalIdColumn = undefined;\n}\n"],"mappings":";AAAA,MAAa,qBAAqB;CAAC;CAAU;CAAc;CAAQ;AAGnE,MAAa,uBAAuB;CAClC;CACA;CACA;CACA;CACA;CACA;CACD;AAID,IAAsB,eAAtB,MAAwF;CAatF,IAAI,uBAAgC;AAClC,SAAO,CAAC,CAAC,KAAK;;;AAclB,IAAa,sBAAb,cAAyC,aAAwB;CAC/D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;;AAGvC,IAAa,uCAAb,cAA0D,aAA2C;CACnG,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;;AAGvC,IAAa,4BAAb,cAA+C,aAA+B;CAC5E,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CAErC,AAAS,oBAAoB,QAAyC;AACpE,MAAI,qBAAqB,QAAQ;GAC/B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAIxB,QAAM,IAAI,MACR,qCAAqC,KAAK,UAAU,OAAO,CAAC,WAAW,KAAK,WAAW,wCACxF;;;AAIL,IAAa,2BAAb,cAA8C,aAAmB;CAC/D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CAErC,AAAS,oBAAoB,QAAyC;AACpE,MAAI,qBAAqB,QAAQ;GAC/B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAGxB,MAAI,oBAAoB,QAAQ;GAC9B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAGxB,QAAM,IAAI,MACR,qCAAqC,KAAK,UAAU,OAAO,CAAC,WAAW,KAAK,WAAW,wCACxF;;;AAIL,IAAa,qBAAb,cAAwC,aAAuB;CAC7D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CAErC,AAAS,oBAAoB,QAAyC;AACpE,MAAI,kBAAkB,QAAQ;GAC5B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAGxB,QAAM,IAAI,MACR,qCAAqC,KAAK,UAAU,OAAO,CAAC,WAAW,KAAK,WAAW,wCACxF;;;AAIL,IAAa,qBAAb,cAAwC,aAAuB;CAC7D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB"}
1
+ {"version":3,"file":"driver-config.js","names":[],"sources":["../../../src/adapters/generic-sql/driver-config.ts"],"sourcesContent":["import {\n schemaNamingStrategy,\n suffixNamingStrategy,\n type SqlNamingStrategy,\n} from \"../../naming/sql-naming\";\n\nexport const supportedDatabases = [\"sqlite\", \"postgresql\", \"mysql\"] as const;\nexport type SupportedDatabase = (typeof supportedDatabases)[number];\n\nexport const supportedDriverTypes = [\n \"sqlocal\",\n \"cloudflare_durable_objects\",\n \"better-sqlite3\",\n \"pg\",\n \"pglite\",\n \"mysql2\",\n] as const;\n\nexport type SupportedDriverType = (typeof supportedDriverTypes)[number];\n\nexport abstract class DriverConfig<T extends SupportedDriverType = SupportedDriverType> {\n abstract readonly driverType: T;\n abstract readonly databaseType: SupportedDatabase;\n\n abstract readonly supportsReturning: boolean;\n abstract readonly supportsJson: boolean;\n abstract readonly outboxVersionstampStrategy: OutboxVersionstampStrategy;\n\n /**\n * Column name for internal ID in RETURNING results.\n * Only defined if supportsReturning is true.\n */\n abstract readonly internalIdColumn: string | undefined;\n\n /**\n * SQLite storage selection is handled by adapters, not driver config.\n */\n get supportsRowsAffected(): boolean {\n return !!this.extractAffectedRows;\n }\n\n get defaultNamingStrategy(): SqlNamingStrategy {\n return defaultNamingStrategyForDatabase(this.databaseType);\n }\n\n /**\n * Extract the number of affected rows from a query result.\n * Only implemented for drivers that support affected rows reporting.\n *\n * @param result - The query result from the SQL driver\n * @returns The number of affected rows as bigint\n * @throws Error if affected rows information is not found in the result\n */\n extractAffectedRows?(result: Record<string, unknown>): bigint;\n}\n\nexport const defaultNamingStrategyForDatabase = (\n databaseType: SupportedDatabase,\n): SqlNamingStrategy => {\n switch (databaseType) {\n case \"postgresql\":\n return schemaNamingStrategy;\n case \"sqlite\":\n case \"mysql\":\n default:\n return suffixNamingStrategy;\n }\n};\n\nexport type OutboxVersionstampStrategy =\n | \"update-returning\"\n | \"insert-on-conflict-returning\"\n | \"insert-on-duplicate-last-insert-id\";\n\nexport class SQLocalDriverConfig extends DriverConfig<\"sqlocal\"> {\n override readonly driverType = \"sqlocal\";\n override readonly databaseType = \"sqlite\";\n override readonly supportsReturning = true;\n override readonly supportsJson = false;\n override readonly internalIdColumn = \"_internalId\";\n override readonly outboxVersionstampStrategy = \"insert-on-conflict-returning\";\n}\n\nexport class CloudflareDurableObjectsDriverConfig extends DriverConfig<\"cloudflare_durable_objects\"> {\n override readonly driverType = \"cloudflare_durable_objects\";\n override readonly databaseType = \"sqlite\";\n override readonly supportsReturning = true;\n override readonly supportsJson = false;\n override readonly internalIdColumn = \"_internalId\";\n override readonly outboxVersionstampStrategy = \"insert-on-conflict-returning\";\n}\n\nexport class BetterSQLite3DriverConfig extends DriverConfig<\"better-sqlite3\"> {\n override readonly driverType = \"better-sqlite3\";\n override readonly databaseType = \"sqlite\";\n override readonly supportsReturning = true;\n override readonly supportsJson = false;\n override readonly internalIdColumn = \"_internalId\";\n override readonly outboxVersionstampStrategy = \"insert-on-conflict-returning\";\n\n override extractAffectedRows(result: Record<string, unknown>): bigint {\n if (\"numAffectedRows\" in result) {\n const value = result[\"numAffectedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n\n throw new Error(\n `No affected rows found in result: ${JSON.stringify(result)}. Driver ${this.driverType} is expected to support affected rows.`,\n );\n }\n}\n\nexport class NodePostgresDriverConfig extends DriverConfig<\"pg\"> {\n override readonly driverType = \"pg\";\n override readonly databaseType = \"postgresql\";\n override readonly supportsReturning = true;\n override readonly supportsJson = true;\n override readonly internalIdColumn = \"_internalId\";\n override readonly outboxVersionstampStrategy = \"insert-on-conflict-returning\";\n\n override extractAffectedRows(result: Record<string, unknown>): bigint {\n if (\"numAffectedRows\" in result) {\n const value = result[\"numAffectedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n if (\"numChangedRows\" in result) {\n const value = result[\"numChangedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n throw new Error(\n `No affected rows found in result: ${JSON.stringify(result)}. Driver ${this.driverType} is expected to support affected rows.`,\n );\n }\n}\n\nexport class PGLiteDriverConfig extends DriverConfig<\"pglite\"> {\n override readonly driverType = \"pglite\";\n override readonly databaseType = \"postgresql\";\n override readonly supportsReturning = true;\n override readonly supportsJson = true;\n override readonly internalIdColumn = \"_internalId\";\n override readonly outboxVersionstampStrategy = \"insert-on-conflict-returning\";\n\n override extractAffectedRows(result: Record<string, unknown>): bigint {\n if (\"affectedRows\" in result) {\n const value = result[\"affectedRows\"];\n if (typeof value === \"bigint\") {\n return value;\n }\n if (typeof value === \"number\") {\n return BigInt(value);\n }\n }\n throw new Error(\n `No affected rows found in result: ${JSON.stringify(result)}. Driver ${this.driverType} is expected to support affected rows.`,\n );\n }\n}\n\nexport class MySQL2DriverConfig extends DriverConfig<\"mysql2\"> {\n override readonly driverType = \"mysql2\";\n override readonly databaseType = \"mysql\";\n override readonly supportsReturning = false;\n override readonly supportsJson = true;\n override readonly internalIdColumn = undefined;\n override readonly outboxVersionstampStrategy = \"insert-on-duplicate-last-insert-id\";\n}\n"],"mappings":";;;AAMA,MAAa,qBAAqB;CAAC;CAAU;CAAc;CAAQ;AAGnE,MAAa,uBAAuB;CAClC;CACA;CACA;CACA;CACA;CACA;CACD;AAID,IAAsB,eAAtB,MAAwF;;;;CAiBtF,IAAI,uBAAgC;AAClC,SAAO,CAAC,CAAC,KAAK;;CAGhB,IAAI,wBAA2C;AAC7C,SAAO,iCAAiC,KAAK,aAAa;;;AAc9D,MAAa,oCACX,iBACsB;AACtB,SAAQ,cAAR;EACE,KAAK,aACH,QAAO;EACT,KAAK;EACL,KAAK;EACL,QACE,QAAO;;;AASb,IAAa,sBAAb,cAAyC,aAAwB;CAC/D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B;;AAGjD,IAAa,uCAAb,cAA0D,aAA2C;CACnG,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B;;AAGjD,IAAa,4BAAb,cAA+C,aAA+B;CAC5E,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B;CAE/C,AAAS,oBAAoB,QAAyC;AACpE,MAAI,qBAAqB,QAAQ;GAC/B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAIxB,QAAM,IAAI,MACR,qCAAqC,KAAK,UAAU,OAAO,CAAC,WAAW,KAAK,WAAW,wCACxF;;;AAIL,IAAa,2BAAb,cAA8C,aAAmB;CAC/D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B;CAE/C,AAAS,oBAAoB,QAAyC;AACpE,MAAI,qBAAqB,QAAQ;GAC/B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAGxB,MAAI,oBAAoB,QAAQ;GAC9B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAGxB,QAAM,IAAI,MACR,qCAAqC,KAAK,UAAU,OAAO,CAAC,WAAW,KAAK,WAAW,wCACxF;;;AAIL,IAAa,qBAAb,cAAwC,aAAuB;CAC7D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B;CAE/C,AAAS,oBAAoB,QAAyC;AACpE,MAAI,kBAAkB,QAAQ;GAC5B,MAAM,QAAQ,OAAO;AACrB,OAAI,OAAO,UAAU,SACnB,QAAO;AAET,OAAI,OAAO,UAAU,SACnB,QAAO,OAAO,MAAM;;AAGxB,QAAM,IAAI,MACR,qCAAqC,KAAK,UAAU,OAAO,CAAC,WAAW,KAAK,WAAW,wCACxF;;;AAIL,IAAa,qBAAb,cAAwC,aAAuB;CAC7D,AAAkB,aAAa;CAC/B,AAAkB,eAAe;CACjC,AAAkB,oBAAoB;CACtC,AAAkB,eAAe;CACjC,AAAkB,mBAAmB;CACrC,AAAkB,6BAA6B"}
@@ -1,43 +1,58 @@
1
1
  import { AnySchema } from "../../schema/create.js";
2
+ import { SqlNamingStrategy } from "../../naming/sql-naming.js";
2
3
  import { DriverConfig } from "./driver-config.js";
4
+ import { SQLiteStorageMode, sqliteStorageDefault, sqliteStoragePrisma } from "./sqlite-storage.js";
5
+ import { OutboxConfig } from "../../outbox/outbox.js";
6
+ import { UOWInstrumentation } from "../../query/unit-of-work/unit-of-work.js";
3
7
  import { SimpleQueryInterface } from "../../query/simple-query-interface.js";
4
8
  import { CompiledQuery, Dialect } from "../../sql-driver/sql-driver.js";
5
9
  import { SqlDriverAdapter } from "../../sql-driver/sql-driver-adapter.js";
6
10
  import { PreparedMigrations } from "./migration/prepared-migrations.js";
7
- import { DatabaseAdapter, DatabaseContextStorage, TableNameMapper, fragnoDatabaseAdapterNameFakeSymbol, fragnoDatabaseAdapterVersionFakeSymbol } from "../adapters.js";
11
+ import { DatabaseAdapter, DatabaseAdapterMetadata, DatabaseContextStorage, SQLiteProfile, fragnoDatabaseAdapterNameFakeSymbol, fragnoDatabaseAdapterVersionFakeSymbol } from "../adapters.js";
8
12
  import { RequestContextStorage } from "@fragno-dev/core/internal/request-context-storage";
9
13
 
10
14
  //#region src/adapters/generic-sql/generic-sql-adapter.d.ts
11
15
  interface UnitOfWorkConfig {
12
16
  onQuery?: (query: CompiledQuery) => void;
13
17
  dryRun?: boolean;
18
+ instrumentation?: UOWInstrumentation;
14
19
  }
15
- interface GenericSQLOptions {
20
+ interface SqlAdapterOptions {
16
21
  dialect: Dialect;
17
22
  driverConfig: DriverConfig;
18
23
  uowConfig?: UnitOfWorkConfig;
24
+ sqliteProfile?: SQLiteProfile;
25
+ sqliteStorageMode?: SQLiteStorageMode;
26
+ namingStrategy?: SqlNamingStrategy;
19
27
  }
20
- declare class GenericSQLAdapter implements DatabaseAdapter<UnitOfWorkConfig> {
28
+ declare const sqliteProfiles: Record<SQLiteProfile, SQLiteStorageMode>;
29
+ declare class SqlAdapter implements DatabaseAdapter<UnitOfWorkConfig> {
21
30
  #private;
22
31
  readonly dialect: Dialect;
23
32
  readonly driverConfig: DriverConfig;
24
33
  readonly uowConfig?: UnitOfWorkConfig;
34
+ readonly sqliteStorageMode?: SQLiteStorageMode;
35
+ readonly sqliteProfile?: SQLiteProfile;
36
+ readonly adapterMetadata: DatabaseAdapterMetadata;
37
+ readonly namingStrategy: SqlNamingStrategy;
25
38
  constructor({
26
39
  dialect,
27
40
  driverConfig,
28
- uowConfig
29
- }: GenericSQLOptions);
41
+ uowConfig,
42
+ sqliteProfile,
43
+ sqliteStorageMode,
44
+ namingStrategy
45
+ }: SqlAdapterOptions);
30
46
  get driver(): SqlDriverAdapter;
31
47
  get [fragnoDatabaseAdapterNameFakeSymbol](): string;
32
48
  get [fragnoDatabaseAdapterVersionFakeSymbol](): number;
33
49
  get contextStorage(): RequestContextStorage<DatabaseContextStorage>;
34
50
  close(): Promise<void>;
35
51
  isConnectionHealthy(): Promise<boolean>;
36
- prepareMigrations<T extends AnySchema>(schema: T, namespace: string): PreparedMigrations;
37
- createTableNameMapper(namespace: string): TableNameMapper;
52
+ prepareMigrations<T extends AnySchema>(schema: T, namespace: string | null): PreparedMigrations;
38
53
  getSchemaVersion(namespace: string): Promise<string | undefined>;
39
- createQueryEngine<T extends AnySchema>(schema: T, namespace: string): SimpleQueryInterface<T, UnitOfWorkConfig>;
54
+ createQueryEngine<T extends AnySchema>(schema: T, namespace: string | null): SimpleQueryInterface<T, UnitOfWorkConfig>;
40
55
  }
41
56
  //#endregion
42
- export { GenericSQLAdapter, GenericSQLOptions, UnitOfWorkConfig };
57
+ export { SqlAdapter, SqlAdapterOptions, UnitOfWorkConfig, sqliteProfiles };
43
58
  //# sourceMappingURL=generic-sql-adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generic-sql-adapter.d.ts","names":[],"sources":["../../../src/adapters/generic-sql/generic-sql-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;UAyBiB,gBAAA;oBACG;EADH,MAAA,CAAA,EAAA,OAAA;AAKjB;AACW,UADM,iBAAA,CACN;EACK,OAAA,EADL,OACK;EACF,YAAA,EADE,YACF;EAAgB,SAAA,CAAA,EAAhB,gBAAgB;AAG9B;AAA0D,cAA7C,iBAAA,YAA6B,eAAgB,CAAA,gBAAA,CAAA,CAAA;EACtC,CAAA,OAAA;EACK,SAAA,OAAA,EADL,OACK;EACF,SAAA,YAAA,EADE,YACF;EAOP,SAAA,SAAA,CAAA,EAPO,gBAOP;EAAS,WAAA,CAAA;IAAA,OAAA;IAAA,YAAA;IAAA;EAAA,CAAA,EAA2B,iBAA3B;EAAc,IAAA,MAAA,CAAA,CAAA,EAWvB,gBAXuB;EAAa,KAe7C,mCAAA,GAf6C,EAAA,MAAA;EAWpC,KAQT,sCAAA,GARS,EAAA,MAAA;EAIT,IAAA,cAAA,CAAA,CAAA,EAQiB,qBARjB,CAQuC,sBARvC,CAAA;EAIA,KAAA,CAAA,CAAA,EAQI,OARJ,CAAA,IAAA,CAAA;EAIuC,mBAAA,CAAA,CAAA,EAQf,OARe,CAAA,OAAA,CAAA;EAAtB,iBAAA,CAAA,UAaM,SAbN,CAAA,CAAA,MAAA,EAayB,CAbzB,EAAA,SAAA,EAAA,MAAA,CAAA,EAagD,kBAbhD;EAIb,qBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAmBiC,eAnBjC;EAIoB,gBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAmBc,OAnBd,CAAA,MAAA,GAAA,SAAA,CAAA;EAKD,iBAAA,CAAA,UA2CA,SA3CA,CAAA,CAAA,MAAA,EA4ClB,CA5CkB,EAAA,SAAA,EAAA,MAAA,CAAA,EA8CzB,oBA9CyB,CA8CJ,CA9CI,EA8CD,gBA9CC,CAAA"}
1
+ {"version":3,"file":"generic-sql-adapter.d.ts","names":[],"sources":["../../../src/adapters/generic-sql/generic-sql-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;;;;;UAoCiB,gBAAA;oBACG;;EADH,eAAA,CAAA,EAGG,kBAFA;AAKpB;AACW,UADM,iBAAA,CACN;EACK,OAAA,EADL,OACK;EACF,YAAA,EADE,YACF;EACI,SAAA,CAAA,EADJ,gBACI;EACI,aAAA,CAAA,EADJ,aACI;EACH,iBAAA,CAAA,EADG,iBACH;EAAiB,cAAA,CAAA,EAAjB,iBAAiB;AAGpC;AAAoC,cAAvB,cAAuB,EAAP,MAAO,CAAA,aAAA,EAAe,iBAAf,CAAA;AAAe,cAKtC,UAAA,YAAsB,eALgB,CAKA,gBALA,CAAA,CAAA;EAAtB,CAAA,OAAA;EAAM,SAAA,OAAA,EAMf,OANe;EAKtB,SAAA,YAAW,EAEC,YAFD;EAA2B,SAAA,SAAA,CAAA,EAG5B,gBAH4B;EAC/B,SAAA,iBAAA,CAAA,EAGW,iBAHX;EACK,SAAA,aAAA,CAAA,EAGE,aAHF;EACF,SAAA,eAAA,EAGK,uBAHL;EACQ,SAAA,cAAA,EAGJ,iBAHI;EACJ,WAAA,CAAA;IAAA,OAAA;IAAA,YAAA;IAAA,SAAA;IAAA,aAAA;IAAA,iBAAA;IAAA;EAAA,CAAA,EAgBtB,iBAhBsB;EACC,IAAA,MAAA,CAAA,CAAA,EA6CZ,gBA7CY;EACD,KAgDpB,mCAAA,GAhDoB,EAAA,MAAA;EAQvB,KA4CG,sCAAA,GA5CH,EAAA,MAAA;EACA,IAAA,cAAA,CAAA,CAAA,EA+CoB,qBA/CpB,CA+C0C,sBA/C1C,CAAA;EACA,KAAA,CAAA,CAAA,EAkDO,OAlDP,CAAA,IAAA,CAAA;EACA,mBAAA,CAAA,CAAA,EAqD2B,OArD3B,CAAA,OAAA,CAAA;EACA,iBAAA,CAAA,UA0D0B,SA1D1B,CAAA,CAAA,MAAA,EA0D6C,CA1D7C,EAAA,SAAA,EAAA,MAAA,GAAA,IAAA,CAAA,EA0D2E,kBA1D3E;EACA,gBAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAsEyC,OAtEzC,CAAA,MAAA,GAAA,SAAA,CAAA;EACC,iBAAA,CAAA,UAkGyB,SAlGzB,CAAA,CAAA,MAAA,EAmGO,CAnGP,EAAA,SAAA,EAAA,MAAA,GAAA,IAAA,CAAA,EAqGA,oBArGA,CAqGqB,CArGrB,EAqGwB,gBArGxB,CAAA"}