@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
@@ -1,20 +1,25 @@
1
- import { importGenerator } from "../../util/import-generator";
2
- import { ident, parseVarchar } from "../../util/parse";
1
+ import {
2
+ defaultNamingStrategyForDatabase,
3
+ type SupportedDatabase,
4
+ } from "../adapters/generic-sql/driver-config";
5
+ import { internalSchema } from "../fragments/internal-fragment.schema";
6
+ import {
7
+ createNamingResolver,
8
+ sanitizeNamespace,
9
+ type NamingResolver,
10
+ type SqlNamingStrategy,
11
+ } from "../naming/sql-naming";
3
12
  import {
4
13
  type AnyColumn,
5
14
  type AnySchema,
6
15
  type AnyTable,
7
16
  type Relation,
8
17
  InternalIdColumn,
9
- } from "../../schema/create";
10
- import type { SQLProvider } from "../../shared/providers";
11
- import {
12
- createTableNameMapper,
13
- sanitizeNamespace,
14
- type TableNameMapper,
15
- } from "../shared/table-name-mapper";
16
- import { type DatabaseTypeLiteral } from "../../schema/type-conversion/type-mapping";
17
- import { createSQLTypeMapper } from "../../schema/type-conversion/create-sql-type-mapper";
18
+ } from "../schema/create";
19
+ import { createSQLTypeMapper } from "../schema/type-conversion/create-sql-type-mapper";
20
+ import { type DatabaseTypeLiteral } from "../schema/type-conversion/type-mapping";
21
+ import { importGenerator } from "../util/import-generator";
22
+ import { ident, parseVarchar } from "../util/parse";
18
23
 
19
24
  // ============================================================================
20
25
  // PROVIDER CONFIGURATION
@@ -32,7 +37,7 @@ const PROVIDER_TABLE_FUNCTIONS = {
32
37
  sqlite: "sqliteTable",
33
38
  } as const;
34
39
 
35
- export type SupportedProvider = Exclude<SQLProvider, "cockroachdb" | "mssql">;
40
+ export type SupportedProvider = SupportedDatabase;
36
41
 
37
42
  // ============================================================================
38
43
  // CONTEXT
@@ -47,7 +52,7 @@ interface GeneratorContext {
47
52
  }
48
53
 
49
54
  function createContext(
50
- provider: SupportedProvider,
55
+ provider: SupportedDatabase,
51
56
  idGeneratorImport?: { name: string; from: string },
52
57
  ): GeneratorContext {
53
58
  return {
@@ -224,7 +229,7 @@ function mapDBTypeToDrizzleFunction(
224
229
  case "text":
225
230
  // Check if it's JSON
226
231
  if (column.type === "json") {
227
- return { name: "blob", params: [`{ mode: "json" }`] };
232
+ return { name: "text", params: [`{ mode: "json" }`] };
228
233
  }
229
234
  return { name: "text" };
230
235
  case "real":
@@ -243,17 +248,10 @@ function mapDBTypeToDrizzleFunction(
243
248
  // ============================================================================
244
249
 
245
250
  /**
246
- * Get the physical table name (with namespace suffix) using the mapper if available
251
+ * Get the physical table name using the naming resolver if available
247
252
  */
248
- function getPhysicalTableName(
249
- logicalName: string,
250
- namespace: string | undefined,
251
- mapper: TableNameMapper | undefined,
252
- ): string {
253
- if (!namespace) {
254
- return logicalName;
255
- }
256
- return mapper ? mapper.toPhysical(logicalName) : `${logicalName}_${sanitizeNamespace(namespace)}`;
253
+ function getPhysicalTableName(logicalName: string, resolver?: NamingResolver): string {
254
+ return resolver ? resolver.getTableName(logicalName) : logicalName;
257
255
  }
258
256
 
259
257
  // ============================================================================
@@ -264,12 +262,13 @@ function generateColumnDefinition(
264
262
  ctx: GeneratorContext,
265
263
  column: AnyColumn,
266
264
  customTypes: string[],
265
+ physicalColumnName: string,
267
266
  ): string {
268
267
  const parts: string[] = [];
269
268
  const typeFn = getColumnTypeFunction(ctx, column, customTypes);
270
269
 
271
270
  // Column type with parameters
272
- const params: string[] = [`"${column.name}"`, ...(typeFn.params ?? [])];
271
+ const params: string[] = [`"${physicalColumnName}"`, ...(typeFn.params ?? [])];
273
272
  if (!typeFn.isCustomType) {
274
273
  ctx.imports.addImport(typeFn.name, ctx.importSource);
275
274
  }
@@ -295,6 +294,11 @@ function generateColumnDefinition(
295
294
  parts.push("notNull()");
296
295
  }
297
296
 
297
+ // External IDs are unique by definition in Fragno's SQL migrations.
298
+ if (column.role === "external-id") {
299
+ parts.push("unique()");
300
+ }
301
+
298
302
  // Default values
299
303
  if (column.default) {
300
304
  if ("value" in column.default) {
@@ -310,7 +314,12 @@ function generateColumnDefinition(
310
314
  } else if ("dbSpecial" in column.default) {
311
315
  // Database-level special functions: defaultTo(b => b.now())
312
316
  if (column.default.dbSpecial === "now") {
313
- parts.push("defaultNow()");
317
+ if (ctx.provider === "mysql") {
318
+ ctx.imports.addImport("sql", "drizzle-orm");
319
+ parts.push("default(sql`(now())`)");
320
+ } else {
321
+ parts.push("defaultNow()");
322
+ }
314
323
  }
315
324
  } else if ("runtime" in column.default) {
316
325
  // Runtime defaults: defaultTo$()
@@ -326,16 +335,22 @@ function generateColumnDefinition(
326
335
  }
327
336
  }
328
337
 
329
- return ` ${column.ormName}: ${parts.join(".")}`;
338
+ return ` ${column.name}: ${parts.join(".")}`;
330
339
  }
331
340
 
332
341
  function generateAllColumns(
333
342
  ctx: GeneratorContext,
334
343
  table: AnyTable,
335
344
  customTypes: string[],
345
+ resolver?: NamingResolver,
336
346
  ): string[] {
337
347
  return Object.values(table.columns).map((column) =>
338
- generateColumnDefinition(ctx, column, customTypes),
348
+ generateColumnDefinition(
349
+ ctx,
350
+ column,
351
+ customTypes,
352
+ resolver ? resolver.getColumnName(table.name, column.name) : column.name,
353
+ ),
339
354
  );
340
355
  }
341
356
 
@@ -346,44 +361,47 @@ function generateAllColumns(
346
361
  function generateForeignKeys(
347
362
  ctx: GeneratorContext,
348
363
  table: AnyTable,
349
- namespace?: string,
350
- mapper?: TableNameMapper,
364
+ namespace?: string | null,
365
+ resolver?: NamingResolver,
351
366
  ): string[] {
352
367
  const keys: string[] = [];
353
368
 
354
369
  for (const relation of Object.values(table.relations)) {
355
370
  // Only "one" relations generate foreign keys
356
371
  // "many" relations don't have foreign keys (they're on the other side)
357
- if (relation.type === "many") {
372
+ if (relation.type === "many" || relation.foreignKey === false) {
358
373
  continue;
359
374
  }
360
375
 
361
376
  const columns: string[] = [];
362
377
  const foreignColumns: string[] = [];
363
- const isSelfReference = relation.table.ormName === table.ormName;
378
+ const isSelfReference = relation.table.name === table.name;
364
379
 
365
380
  for (const [localCol, refCol] of relation.on) {
366
381
  columns.push(`table.${localCol}`);
367
382
  // Foreign keys always reference internal IDs
368
- const actualRefCol = refCol === "id" ? "_internalId" : refCol;
383
+ const actualRefCol = refCol !== "id" ? refCol : "_internalId";
369
384
  // For self-referencing foreign keys, use table parameter instead of table constant
370
385
  if (isSelfReference) {
371
386
  foreignColumns.push(`table.${actualRefCol}`);
372
387
  } else {
373
388
  // Use sanitized TypeScript export name for identifier reference
374
389
  const foreignTableRef = namespace
375
- ? `${relation.table.ormName}_${sanitizeNamespace(namespace)}`
376
- : relation.table.ormName;
390
+ ? `${relation.table.name}_${sanitizeNamespace(namespace)}`
391
+ : relation.table.name;
377
392
  foreignColumns.push(`${foreignTableRef}.${actualRefCol}`);
378
393
  }
379
394
  }
380
395
 
381
396
  ctx.imports.addImport("foreignKey", ctx.importSource);
382
397
  // Include namespace in FK name to avoid collisions
383
- const fkName =
384
- namespace && mapper
385
- ? "fk_" + mapper.toPhysical(`${table.ormName}_${relation.table.ormName}_${relation.name}`)
386
- : `${table.ormName}_${relation.table.ormName}_${relation.name}_fk`;
398
+ const fkName = resolver
399
+ ? resolver.getForeignKeyName({
400
+ logicalTable: table.name,
401
+ logicalReferencedTable: relation.table.name,
402
+ referenceName: relation.name,
403
+ })
404
+ : `${table.name}_${relation.table.name}_${relation.name}_fk`;
387
405
 
388
406
  keys.push(`foreignKey({
389
407
  columns: [${columns.join(", ")}],
@@ -395,14 +413,24 @@ function generateForeignKeys(
395
413
  return keys;
396
414
  }
397
415
 
398
- function generateIndexes(ctx: GeneratorContext, table: AnyTable, namespace?: string): string[] {
416
+ function generateIndexes(
417
+ ctx: GeneratorContext,
418
+ table: AnyTable,
419
+ namespace?: string | null,
420
+ resolver?: NamingResolver,
421
+ ): string[] {
399
422
  const indexes: string[] = [];
400
423
 
401
424
  for (const idx of Object.values(table.indexes)) {
402
- const columns = idx.columns.map((col) => `table.${col.ormName}`).join(", ");
425
+ const columns = idx.columns.map((col) => `table.${col.name}`).join(", ");
403
426
 
404
- // Include namespace in index name to avoid collisions
405
- const indexName = namespace ? `${idx.name}_${namespace}` : idx.name;
427
+ const indexName = resolver
428
+ ? idx.unique
429
+ ? resolver.getUniqueIndexName(idx.name, table.name)
430
+ : resolver.getIndexName(idx.name, table.name)
431
+ : namespace
432
+ ? `${idx.name}_${namespace}`
433
+ : idx.name;
406
434
 
407
435
  if (idx.unique) {
408
436
  ctx.imports.addImport("uniqueIndex", ctx.importSource);
@@ -419,13 +447,30 @@ function generateIndexes(ctx: GeneratorContext, table: AnyTable, namespace?: str
419
447
  function generateTableConstraints(
420
448
  ctx: GeneratorContext,
421
449
  table: AnyTable,
422
- namespace?: string,
423
- mapper?: TableNameMapper,
450
+ namespace?: string | null,
451
+ resolver?: NamingResolver,
424
452
  ): string[] {
425
- return [
426
- ...generateForeignKeys(ctx, table, namespace, mapper),
427
- ...generateIndexes(ctx, table, namespace),
453
+ const constraints: string[] = [
454
+ ...generateForeignKeys(ctx, table, namespace, resolver),
455
+ ...generateIndexes(ctx, table, namespace, resolver),
428
456
  ];
457
+
458
+ if (ctx.provider === "sqlite") {
459
+ const externalIdColumn = Object.values(table.columns).find(
460
+ (column) => column.role === "external-id",
461
+ );
462
+ if (externalIdColumn) {
463
+ const indexName = resolver
464
+ ? resolver.getUniqueIndexName(`idx_${table.name}_external_id`, table.name)
465
+ : namespace
466
+ ? `idx_${table.name}_external_id_${namespace}`
467
+ : `idx_${table.name}_external_id`;
468
+ ctx.imports.addImport("uniqueIndex", ctx.importSource);
469
+ constraints.push(`uniqueIndex("${indexName}").on(table.${externalIdColumn.name})`);
470
+ }
471
+ }
472
+
473
+ return constraints;
429
474
  }
430
475
 
431
476
  // ============================================================================
@@ -436,19 +481,22 @@ function generateTable(
436
481
  ctx: GeneratorContext,
437
482
  table: AnyTable,
438
483
  customTypes: string[],
439
- namespace?: string,
440
- mapper?: TableNameMapper,
484
+ namespace?: string | null,
485
+ resolver?: NamingResolver,
486
+ schemaRef?: string,
441
487
  ): string {
442
- const tableFn = PROVIDER_TABLE_FUNCTIONS[ctx.provider];
443
- ctx.imports.addImport(tableFn, ctx.importSource);
488
+ const tableFn = schemaRef ? `${schemaRef}.table` : PROVIDER_TABLE_FUNCTIONS[ctx.provider];
489
+ if (!schemaRef) {
490
+ ctx.imports.addImport(tableFn, ctx.importSource);
491
+ }
444
492
 
445
- const columns = generateAllColumns(ctx, table, customTypes);
446
- const constraints = generateTableConstraints(ctx, table, namespace, mapper);
493
+ const columns = generateAllColumns(ctx, table, customTypes, resolver);
494
+ const constraints = generateTableConstraints(ctx, table, namespace, resolver);
447
495
 
448
496
  // Physical table name in the database (respects mapper configuration)
449
- const physicalTableName = getPhysicalTableName(table.ormName, namespace, mapper);
497
+ const physicalTableName = getPhysicalTableName(table.name, resolver);
450
498
  // TypeScript export name must always be sanitized to be a valid JavaScript identifier
451
- const exportName = namespace ? `${table.ormName}_${sanitizeNamespace(namespace)}` : table.ormName;
499
+ const exportName = namespace ? `${table.name}_${sanitizeNamespace(namespace)}` : table.name;
452
500
 
453
501
  const args: string[] = [`"${physicalTableName}"`, `{\n${columns.join(",\n")}\n}`];
454
502
 
@@ -466,9 +514,9 @@ function generateTable(
466
514
  function generateRelation(
467
515
  ctx: GeneratorContext,
468
516
  table: AnyTable,
469
- namespace?: string,
517
+ namespace?: string | null,
470
518
  inverseRelations?: Array<{ fromTable: AnyTable; relation: Relation }>,
471
- _mapper?: TableNameMapper,
519
+ _resolver?: NamingResolver,
472
520
  ): string | undefined {
473
521
  const relations: string[] = [];
474
522
  let hasOne = false;
@@ -476,6 +524,9 @@ function generateRelation(
476
524
 
477
525
  // Generate explicit relations defined on this table
478
526
  for (const relation of Object.values(table.relations)) {
527
+ if (relation.foreignKey === false) {
528
+ continue;
529
+ }
479
530
  const options: string[] = [`relationName: "${relation.id}"`];
480
531
 
481
532
  // Track which relation types are used
@@ -491,17 +542,15 @@ function generateRelation(
491
542
  const references: string[] = [];
492
543
 
493
544
  // Use sanitized TypeScript export names for identifier references
494
- const tableRef = namespace
495
- ? `${table.ormName}_${sanitizeNamespace(namespace)}`
496
- : table.ormName;
545
+ const tableRef = namespace ? `${table.name}_${sanitizeNamespace(namespace)}` : table.name;
497
546
  const relatedTableRef = namespace
498
- ? `${relation.table.ormName}_${sanitizeNamespace(namespace)}`
499
- : relation.table.ormName;
547
+ ? `${relation.table.name}_${sanitizeNamespace(namespace)}`
548
+ : relation.table.name;
500
549
 
501
550
  for (const [left, right] of relation.on) {
502
551
  fields.push(`${tableRef}.${left}`);
503
552
  // Relations reference internal IDs
504
- const actualRight = right === "id" ? "_internalId" : right;
553
+ const actualRight = right !== "id" ? right : "_internalId";
505
554
  references.push(`${relatedTableRef}.${actualRight}`);
506
555
  }
507
556
 
@@ -509,8 +558,8 @@ function generateRelation(
509
558
  }
510
559
 
511
560
  const relatedTableRef = namespace
512
- ? `${relation.table.ormName}_${sanitizeNamespace(namespace)}`
513
- : relation.table.ormName;
561
+ ? `${relation.table.name}_${sanitizeNamespace(namespace)}`
562
+ : relation.table.name;
514
563
 
515
564
  const args: string[] = [relatedTableRef];
516
565
  if (options.length > 0) {
@@ -525,17 +574,17 @@ function generateRelation(
525
574
  if (inverseRelations && inverseRelations.length > 0) {
526
575
  for (const { fromTable, relation } of inverseRelations) {
527
576
  // Only generate inverse for "one" relations (they become "many" on this side)
528
- if (relation.type === "one") {
577
+ if (relation.type === "one" && relation.foreignKey !== false) {
529
578
  hasMany = true;
530
579
 
531
580
  // Use sanitized TypeScript export name for identifier reference
532
581
  const fromTableRef = namespace
533
- ? `${fromTable.ormName}_${sanitizeNamespace(namespace)}`
534
- : fromTable.ormName;
582
+ ? `${fromTable.name}_${sanitizeNamespace(namespace)}`
583
+ : fromTable.name;
535
584
 
536
585
  // Generate inverse relation name with consistent suffix
537
586
  // e.g., if session has "sessionOwner" relation to user, user gets "sessionList" inverse relation
538
- const inverseRelationName = `${fromTable.ormName}List`;
587
+ const inverseRelationName = `${fromTable.name}List`;
539
588
 
540
589
  const options: string[] = [`relationName: "${relation.id}"`];
541
590
  const args: string[] = [fromTableRef, `{\n${ident(options.join(",\n"))}\n}`];
@@ -560,10 +609,8 @@ function generateRelation(
560
609
  const relationParams = params.length > 0 ? `{ ${params.join(", ")} }` : "{}";
561
610
 
562
611
  // Use sanitized names for TypeScript export identifiers
563
- const exportTableRef = namespace
564
- ? `${table.ormName}_${sanitizeNamespace(namespace)}`
565
- : table.ormName;
566
- const relationsName = namespace ? `${exportTableRef}Relations` : `${table.ormName}Relations`;
612
+ const exportTableRef = namespace ? `${table.name}_${sanitizeNamespace(namespace)}` : table.name;
613
+ const relationsName = namespace ? `${exportTableRef}Relations` : `${table.name}Relations`;
567
614
 
568
615
  ctx.imports.addImport("relations", "drizzle-orm");
569
616
  return `export const ${relationsName} = relations(${exportTableRef}, (${relationParams}) => ({
@@ -581,24 +628,22 @@ ${relations.join(",\n")}
581
628
  */
582
629
  function generateFragmentSchemaExport(
583
630
  schema: AnySchema,
584
- namespace: string,
631
+ namespace: string | null,
585
632
  tablesWithRelations?: Set<string>,
586
- _mapper?: TableNameMapper,
633
+ _resolver?: NamingResolver,
587
634
  ): string {
588
635
  const drizzleEntries: string[] = [];
589
636
 
590
637
  for (const table of Object.values(schema.tables)) {
591
638
  // TypeScript export name (always sanitized for valid JS identifiers)
592
- const exportName = namespace
593
- ? `${table.ormName}_${sanitizeNamespace(namespace)}`
594
- : table.ormName;
639
+ const exportName = namespace ? `${table.name}_${sanitizeNamespace(namespace)}` : table.name;
595
640
 
596
641
  // Add physical table name to drizzle schema
597
642
  drizzleEntries.push(` ${exportName}: ${exportName}`);
598
643
 
599
644
  // Include relations for this table if they exist (either explicit or inverse)
600
645
  if (tablesWithRelations?.has(table.name)) {
601
- const relationsName = namespace ? `${exportName}Relations` : `${table.ormName}Relations`;
646
+ const relationsName = namespace ? `${exportName}Relations` : `${table.name}Relations`;
602
647
 
603
648
  drizzleEntries.push(` ${relationsName}: ${relationsName}`);
604
649
  }
@@ -607,12 +652,12 @@ function generateFragmentSchemaExport(
607
652
  // The key insight: Drizzle needs BOTH the table alias AND its relations alias
608
653
  // in the same schema object for relational queries to work
609
654
  if (namespace) {
610
- drizzleEntries.push(` ${table.ormName}: ${exportName}`);
655
+ drizzleEntries.push(` ${table.name}: ${exportName}`);
611
656
 
612
657
  // Also add the relations under the aliased name if they exist
613
658
  if (tablesWithRelations?.has(table.name)) {
614
659
  const physicalRelationsName = `${exportName}Relations`;
615
- const aliasRelationsName = `${table.ormName}Relations`;
660
+ const aliasRelationsName = `${table.name}Relations`;
616
661
  drizzleEntries.push(` ${aliasRelationsName}: ${physicalRelationsName}`);
617
662
  }
618
663
  }
@@ -639,8 +684,8 @@ export interface GenerateSchemaOptions {
639
684
  /** Module to import from */
640
685
  from: string;
641
686
  };
642
- /** Optional mapper factory for creating table name mappers with custom sanitization */
643
- mapperFactory?: (namespace: string | undefined) => TableNameMapper | undefined;
687
+ /** Optional naming strategy override for physical names */
688
+ namingStrategy?: SqlNamingStrategy;
644
689
  }
645
690
 
646
691
  /**
@@ -649,35 +694,45 @@ export interface GenerateSchemaOptions {
649
694
  /**
650
695
  * Generate a schema file from one or more fragments with automatic de-duplication
651
696
  */
652
- export function generateSchema(
653
- fragments: { namespace: string; schema: AnySchema }[],
654
- provider: SupportedProvider,
697
+ export function generateDrizzleSchema(
698
+ fragments: { namespace: string | null; schema: AnySchema }[],
699
+ provider: SupportedDatabase,
655
700
  options?: GenerateSchemaOptions,
656
701
  ): string {
657
702
  const ctx = createContext(provider, options?.idGeneratorImport);
658
703
  const customTypes: string[] = [];
659
704
  const sections: string[] = [];
660
- const getMapper =
661
- options?.mapperFactory ||
662
- ((ns: string | undefined) => (ns ? createTableNameMapper(ns, true) : undefined));
705
+ const namingStrategy = options?.namingStrategy ?? defaultNamingStrategyForDatabase(provider);
663
706
 
664
707
  for (const { schema, namespace } of fragments) {
665
708
  const fragmentTables: string[] = [];
666
- const mapper = getMapper(namespace);
709
+ const resolver = createNamingResolver(schema, namespace, namingStrategy);
710
+ const schemaName = resolver.getSchemaName();
711
+ const schemaRef =
712
+ ctx.provider === "postgresql" && schemaName
713
+ ? `schema_${sanitizeNamespace(schemaName)}`
714
+ : undefined;
667
715
 
668
716
  // Add section header
669
717
  fragmentTables.push("");
670
718
  fragmentTables.push(
671
719
  "// ============================================================================",
672
720
  );
673
- fragmentTables.push(`// Fragment: ${namespace}`);
721
+ const namespaceLabel = namespace ?? "(none)";
722
+ fragmentTables.push(`// Fragment: ${namespaceLabel}`);
674
723
  fragmentTables.push(
675
724
  "// ============================================================================",
676
725
  );
677
726
 
727
+ if (schemaRef && schemaName) {
728
+ ctx.imports.addImport("pgSchema", ctx.importSource);
729
+ fragmentTables.push("");
730
+ fragmentTables.push(`const ${schemaRef} = pgSchema("${schemaName}");`);
731
+ }
732
+
678
733
  // Generate tables for this fragment
679
734
  for (const table of Object.values(schema.tables)) {
680
- const tableCode = generateTable(ctx, table, customTypes, namespace, mapper);
735
+ const tableCode = generateTable(ctx, table, customTypes, namespace, resolver, schemaRef);
681
736
  fragmentTables.push("");
682
737
  fragmentTables.push(tableCode);
683
738
  }
@@ -687,6 +742,9 @@ export function generateSchema(
687
742
  const inverseRelations = new Map<string, Array<{ fromTable: AnyTable; relation: Relation }>>();
688
743
  for (const table of Object.values(schema.tables)) {
689
744
  for (const relation of Object.values(table.relations)) {
745
+ if (relation.foreignKey === false) {
746
+ continue;
747
+ }
690
748
  // Track this relation as an inverse on the target table
691
749
  const targetTableName = relation.table.name;
692
750
  if (!inverseRelations.has(targetTableName)) {
@@ -704,7 +762,7 @@ export function generateSchema(
704
762
  table,
705
763
  namespace,
706
764
  inverseRelations.get(table.name),
707
- mapper,
765
+ resolver,
708
766
  );
709
767
  if (relationCode) {
710
768
  fragmentTables.push("");
@@ -713,12 +771,10 @@ export function generateSchema(
713
771
  }
714
772
  }
715
773
 
716
- // Generate schema export object (skip for empty namespace to avoid duplicate _schema exports)
717
- if (namespace !== "") {
774
+ // Generate schema export object (skip for internal fragment to avoid duplicate _schema exports)
775
+ if (!(namespace === null && schema.name === internalSchema.name)) {
718
776
  fragmentTables.push("");
719
- fragmentTables.push(
720
- generateFragmentSchemaExport(schema, namespace, tablesWithRelations, mapper),
721
- );
777
+ fragmentTables.push(generateFragmentSchemaExport(schema, namespace, tablesWithRelations));
722
778
  }
723
779
 
724
780
  sections.push(...fragmentTables);