@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,25 +1,48 @@
1
1
  import { describe, it, expect, beforeAll, beforeEach, vi, afterEach } from "vitest";
2
+
2
3
  import { DummyDriver, MysqlAdapter, PostgresAdapter, SqliteAdapter } from "kysely";
3
- import {
4
- postProcessMigrationFilenames,
5
- type GenerationInternalResult,
6
- generateMigrationsOrSchema,
7
- } from "./generation-engine";
8
- import { KyselyAdapter } from "../adapters/kysely/kysely-adapter";
9
- import { column, idColumn, schema, type AnySchema } from "../schema/create";
10
- import { FragnoDatabase } from "../mod";
4
+
11
5
  import {
12
6
  MySQL2DriverConfig,
13
7
  NodePostgresDriverConfig,
14
8
  SQLocalDriverConfig,
15
9
  } from "../adapters/generic-sql/driver-config";
10
+ import { SqlAdapter } from "../adapters/generic-sql/generic-sql-adapter";
11
+ import { FragnoDatabase } from "../mod";
12
+ import { column, idColumn, schema, type AnySchema } from "../schema/create";
13
+ import {
14
+ postProcessMigrationFilenames,
15
+ type GenerationInternalResult,
16
+ generateSchemaArtifacts,
17
+ } from "./generation-engine";
16
18
 
17
- describe("generateMigrationsOrSchema - kysely", () => {
19
+ const buildFile = (
20
+ overrides: Partial<GenerationInternalResult> &
21
+ Pick<GenerationInternalResult, "schema" | "namespace" | "fromVersion" | "toVersion">,
22
+ ): GenerationInternalResult => {
23
+ const namespace = overrides.namespace ?? null;
24
+ const schemaName = overrides.schemaName ?? "test";
25
+ const namespaceKey = overrides.namespaceKey ?? namespace ?? schemaName;
26
+ const isSettings = overrides.isSettings ?? false;
27
+
28
+ return {
29
+ schema: overrides.schema,
30
+ path: overrides.path ?? "placeholder.sql",
31
+ namespace,
32
+ namespaceKey,
33
+ schemaName,
34
+ isSettings,
35
+ fromVersion: overrides.fromVersion,
36
+ toVersion: overrides.toVersion,
37
+ };
38
+ };
39
+
40
+ describe("generateSchemaArtifacts - sql", () => {
18
41
  const mockDate = new Date("2025-10-24T12:00:00Z");
19
- let adapter: KyselyAdapter;
42
+ let adapter: SqlAdapter;
20
43
 
21
44
  beforeAll(() => {
22
- adapter = new KyselyAdapter({
45
+ adapter = new SqlAdapter({
23
46
  dialect: {
24
47
  createAdapter: () => new PostgresAdapter(),
25
48
  createDriver: () => new DummyDriver(),
@@ -48,7 +71,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
48
71
  });
49
72
 
50
73
  it("should generate migration for single database from version 0", async () => {
51
- const testSchema: AnySchema = schema((s) => {
74
+ const testSchema: AnySchema = schema("test", (s) => {
52
75
  return s.addTable("users", (t) => {
53
76
  return t.addColumn("id", idColumn()).addColumn("name", column("string"));
54
77
  });
@@ -60,10 +83,10 @@ describe("generateMigrationsOrSchema - kysely", () => {
60
83
  adapter,
61
84
  });
62
85
 
63
- const results = await generateMigrationsOrSchema([fragnoDb]);
86
+ const results = await generateSchemaArtifacts([fragnoDb]);
64
87
 
65
88
  expect(results).toHaveLength(2); // Settings + test-db
66
- expect(results[0].namespace).toBe(""); // Empty namespace for settings table
89
+ expect(results[0].namespace).toBeNull();
67
90
  expect(results[0].path).toMatch(/^20251024_001_f000_t00\d_fragno_db_settings.sql$/);
68
91
  expect(results[0].schema).toContain("create table");
69
92
  expect(results[0].schema).toContain("fragno_db_settings");
@@ -71,23 +94,23 @@ describe("generateMigrationsOrSchema - kysely", () => {
71
94
  expect(results[1].namespace).toBe("test-db");
72
95
  expect(results[1].path).toBe("20251024_002_f000_t001_test-db.sql");
73
96
  expect(results[1].schema).toContain("create table");
74
- expect(results[1].schema).toContain("users_test-db");
97
+ expect(results[1].schema).toContain('"test-db"."users"');
75
98
  });
76
99
 
77
100
  it("should generate migrations for multiple databases in alphabetical order", async () => {
78
- const schema1: AnySchema = schema((s) => {
101
+ const schema1: AnySchema = schema("schema1", (s) => {
79
102
  return s.addTable("users", (t) => {
80
103
  return t.addColumn("id", idColumn()).addColumn("name", column("string"));
81
104
  });
82
105
  });
83
106
 
84
- const schema2: AnySchema = schema((s) => {
107
+ const schema2: AnySchema = schema("schema2", (s) => {
85
108
  return s.addTable("posts", (t) => {
86
109
  return t.addColumn("id", idColumn()).addColumn("title", column("string"));
87
110
  });
88
111
  });
89
112
 
90
- const schema3: AnySchema = schema((s) => {
113
+ const schema3: AnySchema = schema("schema3", (s) => {
91
114
  return s.addTable("comments", (t) => {
92
115
  return t.addColumn("id", idColumn()).addColumn("text", column("string"));
93
116
  });
@@ -111,27 +134,27 @@ describe("generateMigrationsOrSchema - kysely", () => {
111
134
  adapter,
112
135
  });
113
136
 
114
- const results = await generateMigrationsOrSchema([fragnoDb1, fragnoDb2, fragnoDb3]);
137
+ const results = await generateSchemaArtifacts([fragnoDb1, fragnoDb2, fragnoDb3]);
115
138
 
116
139
  expect(results).toHaveLength(4); // Settings + 3 databases
117
- expect(results[0].namespace).toBe(""); // Empty namespace for settings table
140
+ expect(results[0].namespace).toBeNull();
118
141
  expect(results[0].path).toMatch(/^20251024_001_f000_t00\d_fragno_db_settings.sql$/);
119
142
 
120
143
  expect(results[1].namespace).toBe("apple-db");
121
144
  expect(results[1].path).toBe("20251024_002_f000_t001_apple-db.sql");
122
- expect(results[1].schema).toContain("posts_apple-db");
145
+ expect(results[1].schema).toContain('"apple-db"."posts"');
123
146
 
124
147
  expect(results[2].namespace).toBe("mango-db");
125
148
  expect(results[2].path).toBe("20251024_003_f000_t001_mango-db.sql");
126
- expect(results[2].schema).toContain("comments_mango-db");
149
+ expect(results[2].schema).toContain('"mango-db"."comments"');
127
150
 
128
151
  expect(results[3].namespace).toBe("zebra-db");
129
152
  expect(results[3].path).toBe("20251024_004_f000_t001_zebra-db.sql");
130
- expect(results[3].schema).toContain("users_zebra-db");
153
+ expect(results[3].schema).toContain('"zebra-db"."users"');
131
154
  });
132
155
 
133
156
  it("should handle existing settings version and generate both settings and fragment migrations", async () => {
134
- const testSchema: AnySchema = schema((s) => {
157
+ const testSchema: AnySchema = schema("test", (s) => {
135
158
  return s
136
159
  .addTable("users", (t) => {
137
160
  return t.addColumn("id", idColumn()).addColumn("name", column("string"));
@@ -150,12 +173,12 @@ describe("generateMigrationsOrSchema - kysely", () => {
150
173
  adapter,
151
174
  });
152
175
 
153
- const results = await generateMigrationsOrSchema([fragnoDb]);
176
+ const results = await generateSchemaArtifacts([fragnoDb]);
154
177
 
155
178
  // Settings table already at version 1, so no settings migration needed
156
179
  // But fragment migration is still generated
157
180
  expect(results).toHaveLength(2);
158
- expect(results[0].namespace).toBe(""); // Empty namespace for settings table
181
+ expect(results[0].namespace).toBeNull();
159
182
  expect(results[1].namespace).toBe("test-db");
160
183
  expect(results[1].path).toBe("20251024_002_f000_t002_test-db.sql");
161
184
  expect(results[1].schema).toContain("create table");
@@ -163,7 +186,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
163
186
  });
164
187
 
165
188
  it("should generate settings migration even with no fragment changes", async () => {
166
- const testSchema: AnySchema = schema((s) => {
189
+ const testSchema: AnySchema = schema("test", (s) => {
167
190
  return s.addTable("users", (t) => {
168
191
  return t.addColumn("id", idColumn()).addColumn("name", column("string"));
169
192
  });
@@ -176,24 +199,26 @@ describe("generateMigrationsOrSchema - kysely", () => {
176
199
  });
177
200
 
178
201
  // Generate with toVersion = 0, fromVersion = 0 (no fragment changes)
179
- const results = await generateMigrationsOrSchema([fragnoDb], {
202
+ const results = await generateSchemaArtifacts([fragnoDb], {
180
203
  toVersion: 0,
181
204
  fromVersion: 0,
182
205
  });
183
206
 
184
- // Settings migration is generated, but no fragment migration (since toVersion=0)
185
- expect(results).toHaveLength(1);
186
- expect(results[0].namespace).toBe(""); // Empty namespace for settings table
207
+ // Settings migration is generated, and fragment migration creates schema (toVersion=0)
208
+ expect(results).toHaveLength(2);
209
+ expect(results[0].namespace).toBeNull();
210
+ expect(results[1].namespace).toBe("test-db");
211
+ expect(results[1].schema).toContain('CREATE SCHEMA IF NOT EXISTS "test-db"');
187
212
  });
188
213
 
189
214
  it("should throw error when no databases provided", async () => {
190
- await expect(generateMigrationsOrSchema([])).rejects.toThrow(
215
+ await expect(generateSchemaArtifacts([])).rejects.toThrow(
191
216
  "No databases provided for schema generation",
192
217
  );
193
218
  });
194
219
 
195
220
  it("should throw error when database connection is unhealthy", async () => {
196
- const testSchema: AnySchema = schema((s) => {
221
+ const testSchema: AnySchema = schema("test", (s) => {
197
222
  return s.addTable("users", (t) => {
198
223
  return t.addColumn("id", idColumn()).addColumn("name", column("string"));
199
224
  });
@@ -208,13 +233,13 @@ describe("generateMigrationsOrSchema - kysely", () => {
208
233
  adapter,
209
234
  });
210
235
 
211
- await expect(generateMigrationsOrSchema([fragnoDb])).rejects.toThrow(
236
+ await expect(generateSchemaArtifacts([fragnoDb])).rejects.toThrow(
212
237
  "Database connection is not healthy",
213
238
  );
214
239
  });
215
240
 
216
241
  it("should generate SQL with correct version tracking in settings", async () => {
217
- const testSchema: AnySchema = schema((s) => {
242
+ const testSchema: AnySchema = schema("test", (s) => {
218
243
  return s.addTable("users", (t) => {
219
244
  return t.addColumn("id", idColumn()).addColumn("name", column("string"));
220
245
  });
@@ -226,7 +251,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
226
251
  adapter,
227
252
  });
228
253
 
229
- const results = await generateMigrationsOrSchema([fragnoDb]);
254
+ const results = await generateSchemaArtifacts([fragnoDb]);
230
255
 
231
256
  // Check settings migration includes version tracking
232
257
  expect(results[0].schema).toContain("fragno_db_settings");
@@ -239,7 +264,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
239
264
  });
240
265
 
241
266
  it("should generate INSERT for version 0->N and UPDATE for version N->M", async () => {
242
- const testSchema: AnySchema = schema((s) => {
267
+ const testSchema: AnySchema = schema("test", (s) => {
243
268
  return s
244
269
  .addTable("users", (t) => {
245
270
  return t.addColumn("id", idColumn()).addColumn("name", column("string"));
@@ -257,7 +282,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
257
282
 
258
283
  // First migration: 0 -> 1 (should use INSERT)
259
284
  vi.spyOn(adapter, "getSchemaVersion").mockResolvedValueOnce(undefined);
260
- const resultsV1 = await generateMigrationsOrSchema([fragnoDb], {
285
+ const resultsV1 = await generateSchemaArtifacts([fragnoDb], {
261
286
  fromVersion: 0,
262
287
  toVersion: 1,
263
288
  });
@@ -268,14 +293,16 @@ describe("generateMigrationsOrSchema - kysely", () => {
268
293
  expect(resultsV1[1].schema).toContain("test-db.schema_version");
269
294
  expect(resultsV1[1].schema).toContain("'1'");
270
295
  expect(resultsV1[1].schema).toMatchInlineSnapshot(`
271
- "create table "users_test-db" ("id" varchar(30) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
296
+ "CREATE SCHEMA IF NOT EXISTS "test-db";
297
+
298
+ create table "test-db"."users" ("id" varchar(128) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
272
299
 
273
300
  insert into "fragno_db_settings" ("id", "key", "value") values ('6_U2SCfiaNG9VyYmQ_JwzQ', 'test-db.schema_version', '1');"
274
301
  `);
275
302
 
276
303
  // Second migration: 1 -> 2 (should use UPDATE)
277
304
  vi.spyOn(adapter, "getSchemaVersion").mockResolvedValueOnce("1");
278
- const resultsV2 = await generateMigrationsOrSchema([fragnoDb], {
305
+ const resultsV2 = await generateSchemaArtifacts([fragnoDb], {
279
306
  fromVersion: 1,
280
307
  toVersion: 2,
281
308
  });
@@ -287,14 +314,16 @@ describe("generateMigrationsOrSchema - kysely", () => {
287
314
  expect(resultsV2[1].schema).toContain("test-db.schema_version");
288
315
  expect(resultsV2[1].schema).toContain("'2'");
289
316
  expect(resultsV2[1].schema).toMatchInlineSnapshot(`
290
- "alter table "users_test-db" add column "email" text;
317
+ "CREATE SCHEMA IF NOT EXISTS "test-db";
318
+
319
+ alter table "test-db"."users" add column "email" text;
291
320
 
292
321
  update "fragno_db_settings" set "value" = '2' where "key" = 'test-db.schema_version';"
293
322
  `);
294
323
  });
295
324
 
296
325
  it("should include MySQL-specific foreign key checks in generated SQL", async () => {
297
- const mysqlAdapter = new KyselyAdapter({
326
+ const mysqlAdapter = new SqlAdapter({
298
327
  dialect: {
299
328
  createAdapter: () => new MysqlAdapter(),
300
329
  createDriver: () => new DummyDriver(),
@@ -311,7 +340,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
311
340
  vi.spyOn(mysqlAdapter, "isConnectionHealthy").mockResolvedValue(true);
312
341
  vi.spyOn(mysqlAdapter, "getSchemaVersion").mockResolvedValue(undefined);
313
342
 
314
- const testSchema: AnySchema = schema((s) => {
343
+ const testSchema: AnySchema = schema("test", (s) => {
315
344
  return s.addTable("users", (t) => {
316
345
  return t.addColumn("id", idColumn()).addColumn("name", column("string"));
317
346
  });
@@ -323,7 +352,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
323
352
  adapter: mysqlAdapter,
324
353
  });
325
354
 
326
- const results = await generateMigrationsOrSchema([fragnoDb]);
355
+ const results = await generateSchemaArtifacts([fragnoDb]);
327
356
 
328
357
  expect(results).toHaveLength(2);
329
358
  // Check that MySQL foreign key checks are included
@@ -339,7 +368,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
339
368
  });
340
369
 
341
370
  it("should include SQLite-specific pragma in generated SQL", async () => {
342
- const sqliteAdapter = new KyselyAdapter({
371
+ const sqliteAdapter = new SqlAdapter({
343
372
  dialect: {
344
373
  createAdapter: () => new SqliteAdapter(),
345
374
  createDriver: () => new DummyDriver(),
@@ -356,7 +385,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
356
385
  vi.spyOn(sqliteAdapter, "isConnectionHealthy").mockResolvedValue(true);
357
386
  vi.spyOn(sqliteAdapter, "getSchemaVersion").mockResolvedValue(undefined);
358
387
 
359
- const testSchema: AnySchema = schema((s) => {
388
+ const testSchema: AnySchema = schema("test", (s) => {
360
389
  return s.addTable("users", (t) => {
361
390
  return t.addColumn("id", idColumn()).addColumn("name", column("string"));
362
391
  });
@@ -368,7 +397,7 @@ describe("generateMigrationsOrSchema - kysely", () => {
368
397
  adapter: sqliteAdapter,
369
398
  });
370
399
 
371
- const results = await generateMigrationsOrSchema([fragnoDb]);
400
+ const results = await generateSchemaArtifacts([fragnoDb]);
372
401
 
373
402
  expect(results).toHaveLength(2);
374
403
  // Check that SQLite pragma is included
@@ -381,6 +410,166 @@ describe("generateMigrationsOrSchema - kysely", () => {
381
410
  });
382
411
  });
383
412
 
413
+ describe("generateSchemaArtifacts - schema outputs", () => {
414
+ it("should generate drizzle schema without requiring a healthy connection", async () => {
415
+ const adapter = new SqlAdapter({
416
+ dialect: {
417
+ createAdapter: () => new PostgresAdapter(),
418
+ createDriver: () => new DummyDriver(),
419
+ createQueryCompiler: () => ({
420
+ compileQuery: () => ({
421
+ sql: "",
422
+ parameters: [],
423
+ }),
424
+ }),
425
+ },
426
+ driverConfig: new NodePostgresDriverConfig(),
427
+ });
428
+
429
+ const testSchema: AnySchema = schema("test", (s) => {
430
+ return s.addTable("users", (t) => {
431
+ return t.addColumn("id", idColumn()).addColumn("name", column("string"));
432
+ });
433
+ });
434
+
435
+ const fragnoDb = new FragnoDatabase({
436
+ namespace: "drizzle-db",
437
+ schema: testSchema,
438
+ adapter,
439
+ });
440
+
441
+ const healthSpy = vi.spyOn(adapter, "isConnectionHealthy").mockResolvedValue(false);
442
+ const [result] = await generateSchemaArtifacts([fragnoDb], { format: "drizzle" });
443
+
444
+ expect(result.path).toBe("fragno-schema.ts");
445
+ expect(result.schema).toContain("schemaVersion");
446
+ expect(healthSpy).not.toHaveBeenCalled();
447
+ });
448
+
449
+ it("should order drizzle schema fragments deterministically by schema name", async () => {
450
+ const adapter = new SqlAdapter({
451
+ dialect: {
452
+ createAdapter: () => new PostgresAdapter(),
453
+ createDriver: () => new DummyDriver(),
454
+ createQueryCompiler: () => ({
455
+ compileQuery: () => ({
456
+ sql: "",
457
+ parameters: [],
458
+ }),
459
+ }),
460
+ },
461
+ driverConfig: new NodePostgresDriverConfig(),
462
+ });
463
+
464
+ const schemaAlpha: AnySchema = schema("alpha", (s) => {
465
+ return s.addTable("alpha_table", (t) => {
466
+ return t.addColumn("id", idColumn()).addColumn("name", column("string"));
467
+ });
468
+ });
469
+
470
+ const schemaBeta: AnySchema = schema("beta", (s) => {
471
+ return s.addTable("beta_table", (t) => {
472
+ return t.addColumn("id", idColumn()).addColumn("title", column("string"));
473
+ });
474
+ });
475
+
476
+ const fragnoDbBeta = new FragnoDatabase({
477
+ namespace: "alpha",
478
+ schema: schemaBeta,
479
+ adapter,
480
+ });
481
+
482
+ const fragnoDbAlpha = new FragnoDatabase({
483
+ namespace: "zulu",
484
+ schema: schemaAlpha,
485
+ adapter,
486
+ });
487
+
488
+ const [result] = await generateSchemaArtifacts([fragnoDbBeta, fragnoDbAlpha], {
489
+ format: "drizzle",
490
+ });
491
+
492
+ const schemaOutput = result.schema;
493
+ const internalIndex = schemaOutput.indexOf("Fragment: (none)");
494
+ const alphaIndex = schemaOutput.indexOf("Fragment: zulu");
495
+ const betaIndex = schemaOutput.indexOf("Fragment: alpha");
496
+
497
+ expect(internalIndex).toBeGreaterThanOrEqual(0);
498
+ expect(alphaIndex).toBeGreaterThanOrEqual(0);
499
+ expect(betaIndex).toBeGreaterThanOrEqual(0);
500
+ expect(internalIndex).toBeLessThan(alphaIndex);
501
+ expect(alphaIndex).toBeLessThan(betaIndex);
502
+ });
503
+
504
+ it("should reject from/to versions for prisma output", async () => {
505
+ const adapter = new SqlAdapter({
506
+ dialect: {
507
+ createAdapter: () => new SqliteAdapter(),
508
+ createDriver: () => new DummyDriver(),
509
+ createQueryCompiler: () => ({
510
+ compileQuery: () => ({
511
+ sql: "",
512
+ parameters: [],
513
+ }),
514
+ }),
515
+ },
516
+ driverConfig: new SQLocalDriverConfig(),
517
+ sqliteProfile: "prisma",
518
+ });
519
+
520
+ const testSchema: AnySchema = schema("test", (s) => {
521
+ return s.addTable("events", (t) => {
522
+ return t.addColumn("id", idColumn()).addColumn("createdAt", column("timestamp"));
523
+ });
524
+ });
525
+
526
+ const fragnoDb = new FragnoDatabase({
527
+ namespace: "prisma-db",
528
+ schema: testSchema,
529
+ adapter,
530
+ });
531
+
532
+ await expect(
533
+ generateSchemaArtifacts([fragnoDb], { format: "prisma", fromVersion: 0 }),
534
+ ).rejects.toThrow("--from and --to are only supported when generating SQL migrations.");
535
+ });
536
+
537
+ it("should honor sqlite prisma profile for schema output", async () => {
538
+ const adapter = new SqlAdapter({
539
+ dialect: {
540
+ createAdapter: () => new SqliteAdapter(),
541
+ createDriver: () => new DummyDriver(),
542
+ createQueryCompiler: () => ({
543
+ compileQuery: () => ({
544
+ sql: "",
545
+ parameters: [],
546
+ }),
547
+ }),
548
+ },
549
+ driverConfig: new SQLocalDriverConfig(),
550
+ sqliteProfile: "prisma",
551
+ });
552
+
553
+ const testSchema: AnySchema = schema("test", (s) => {
554
+ return s.addTable("events", (t) => {
555
+ return t.addColumn("id", idColumn()).addColumn("createdAt", column("timestamp"));
556
+ });
557
+ });
558
+
559
+ const fragnoDb = new FragnoDatabase({
560
+ namespace: "prisma-db",
561
+ schema: testSchema,
562
+ adapter,
563
+ });
564
+
565
+ const [result] = await generateSchemaArtifacts([fragnoDb], { format: "prisma" });
566
+
567
+ expect(result.path).toBe("fragno.prisma");
568
+ expect(result.schema).toContain("model Events_prisma_db");
569
+ expect(result.schema).toContain("DateTime");
570
+ });
571
+ });
572
+
384
573
  describe("postProcessMigrationFilenames", () => {
385
574
  const mockDate = new Date("2025-10-24T12:00:00Z");
386
575
 
@@ -400,59 +589,56 @@ describe("postProcessMigrationFilenames", () => {
400
589
 
401
590
  it("should order settings namespace first", () => {
402
591
  const files: GenerationInternalResult[] = [
403
- {
592
+ buildFile({
404
593
  schema: "schema1",
405
- path: "placeholder.sql",
406
594
  namespace: "fragno-db-comment-db",
407
595
  fromVersion: 0,
408
596
  toVersion: 3,
409
- },
410
- {
597
+ }),
598
+ buildFile({
411
599
  schema: "schema2",
412
- path: "placeholder.sql",
413
- namespace: "", // Empty namespace for settings table
600
+ namespace: null,
601
+ namespaceKey: "fragno_db_settings",
602
+ schemaName: "fragno_internal",
603
+ isSettings: true,
414
604
  fromVersion: 0,
415
605
  toVersion: 1,
416
- },
417
- {
606
+ }),
607
+ buildFile({
418
608
  schema: "schema3",
419
- path: "placeholder.sql",
420
609
  namespace: "fragno-db-rating-db",
421
610
  fromVersion: 0,
422
611
  toVersion: 2,
423
- },
612
+ }),
424
613
  ];
425
614
 
426
615
  const result = postProcessMigrationFilenames(files);
427
616
 
428
617
  expect(result).toHaveLength(3);
429
- expect(result[0].namespace).toBe(""); // Empty namespace for settings table
618
+ expect(result[0].namespace).toBeNull();
430
619
  expect(result[0].path).toBe("20251024_001_f000_t001_fragno_db_settings.sql");
431
620
  });
432
621
 
433
622
  it("should sort non-settings namespaces alphabetically", () => {
434
623
  const files: GenerationInternalResult[] = [
435
- {
624
+ buildFile({
436
625
  schema: "schema1",
437
- path: "placeholder.sql",
438
626
  namespace: "zebra-db",
439
627
  fromVersion: 0,
440
628
  toVersion: 1,
441
- },
442
- {
629
+ }),
630
+ buildFile({
443
631
  schema: "schema2",
444
- path: "placeholder.sql",
445
632
  namespace: "apple-db",
446
633
  fromVersion: 0,
447
634
  toVersion: 1,
448
- },
449
- {
635
+ }),
636
+ buildFile({
450
637
  schema: "schema3",
451
- path: "placeholder.sql",
452
638
  namespace: "mango-db",
453
639
  fromVersion: 0,
454
640
  toVersion: 1,
455
- },
641
+ }),
456
642
  ];
457
643
 
458
644
  const result = postProcessMigrationFilenames(files);
@@ -465,20 +651,21 @@ describe("postProcessMigrationFilenames", () => {
465
651
 
466
652
  it("should format filename with correct ordering and version numbers", () => {
467
653
  const files: GenerationInternalResult[] = [
468
- {
654
+ buildFile({
469
655
  schema: "CREATE TABLE users;",
470
- path: "placeholder.sql",
471
- namespace: "", // Empty namespace for settings table
656
+ namespace: null,
657
+ namespaceKey: "fragno_db_settings",
658
+ schemaName: "fragno_internal",
659
+ isSettings: true,
472
660
  fromVersion: 0,
473
661
  toVersion: 5,
474
- },
475
- {
662
+ }),
663
+ buildFile({
476
664
  schema: "CREATE TABLE comments;",
477
- path: "placeholder.sql",
478
665
  namespace: "comment-db",
479
666
  fromVersion: 5,
480
667
  toVersion: 10,
481
- },
668
+ }),
482
669
  ];
483
670
 
484
671
  const result = postProcessMigrationFilenames(files);
@@ -489,13 +676,12 @@ describe("postProcessMigrationFilenames", () => {
489
676
 
490
677
  it("should pad numbers to 3 digits", () => {
491
678
  const files: GenerationInternalResult[] = [
492
- {
679
+ buildFile({
493
680
  schema: "schema",
494
- path: "placeholder.sql",
495
681
  namespace: "test-db",
496
682
  fromVersion: 99,
497
683
  toVersion: 999,
498
- },
684
+ }),
499
685
  ];
500
686
 
501
687
  const result = postProcessMigrationFilenames(files);
@@ -505,13 +691,12 @@ describe("postProcessMigrationFilenames", () => {
505
691
 
506
692
  it("should sanitize namespace with invalid characters", () => {
507
693
  const files: GenerationInternalResult[] = [
508
- {
694
+ buildFile({
509
695
  schema: "schema",
510
- path: "placeholder.sql",
511
696
  namespace: "test@db#special!chars",
512
697
  fromVersion: 0,
513
698
  toVersion: 1,
514
- },
699
+ }),
515
700
  ];
516
701
 
517
702
  const result = postProcessMigrationFilenames(files);
@@ -521,13 +706,12 @@ describe("postProcessMigrationFilenames", () => {
521
706
 
522
707
  it("should preserve schema content", () => {
523
708
  const files: GenerationInternalResult[] = [
524
- {
709
+ buildFile({
525
710
  schema: "CREATE TABLE users (id INT);",
526
- path: "placeholder.sql",
527
711
  namespace: "user-db",
528
712
  fromVersion: 0,
529
713
  toVersion: 1,
530
- },
714
+ }),
531
715
  ];
532
716
 
533
717
  const result = postProcessMigrationFilenames(files);
@@ -537,40 +721,39 @@ describe("postProcessMigrationFilenames", () => {
537
721
 
538
722
  it("should handle multiple files with settings first and others sorted", () => {
539
723
  const files: GenerationInternalResult[] = [
540
- {
724
+ buildFile({
541
725
  schema: "schema1",
542
- path: "placeholder.sql",
543
726
  namespace: "zoo-db",
544
727
  fromVersion: 1,
545
728
  toVersion: 2,
546
- },
547
- {
729
+ }),
730
+ buildFile({
548
731
  schema: "schema2",
549
- path: "placeholder.sql",
550
- namespace: "", // Empty namespace for settings table
732
+ namespace: null,
733
+ namespaceKey: "fragno_db_settings",
734
+ schemaName: "fragno_internal",
735
+ isSettings: true,
551
736
  fromVersion: 0,
552
737
  toVersion: 5,
553
- },
554
- {
738
+ }),
739
+ buildFile({
555
740
  schema: "schema3",
556
- path: "placeholder.sql",
557
741
  namespace: "apple-db",
558
742
  fromVersion: 3,
559
743
  toVersion: 4,
560
- },
561
- {
744
+ }),
745
+ buildFile({
562
746
  schema: "schema4",
563
- path: "placeholder.sql",
564
747
  namespace: "mango-db",
565
748
  fromVersion: 2,
566
749
  toVersion: 3,
567
- },
750
+ }),
568
751
  ];
569
752
 
570
753
  const result = postProcessMigrationFilenames(files);
571
754
 
572
755
  expect(result).toHaveLength(4);
573
- expect(result[0].namespace).toBe(""); // Empty namespace for settings table
756
+ expect(result[0].namespace).toBeNull();
574
757
  expect(result[0].path).toBe("20251024_001_f000_t005_fragno_db_settings.sql");
575
758
  expect(result[1].namespace).toBe("apple-db");
576
759
  expect(result[1].path).toBe("20251024_002_f003_t004_apple-db.sql");
@@ -581,13 +764,14 @@ describe("postProcessMigrationFilenames", () => {
581
764
  });
582
765
 
583
766
  it("should handle ordering numbers beyond 100", () => {
584
- const files: GenerationInternalResult[] = Array.from({ length: 150 }, (_, i) => ({
585
- schema: `schema${i}`,
586
- path: "placeholder.sql",
587
- namespace: `db-${String(i).padStart(3, "0")}`,
588
- fromVersion: 0,
589
- toVersion: 1,
590
- }));
767
+ const files: GenerationInternalResult[] = Array.from({ length: 150 }, (_, i) =>
768
+ buildFile({
769
+ schema: `schema${i}`,
770
+ namespace: `db-${String(i).padStart(3, "0")}`,
771
+ fromVersion: 0,
772
+ toVersion: 1,
773
+ }),
774
+ );
591
775
 
592
776
  const result = postProcessMigrationFilenames(files);
593
777
 
@@ -598,13 +782,12 @@ describe("postProcessMigrationFilenames", () => {
598
782
 
599
783
  it("should preserve hyphens in namespace", () => {
600
784
  const files: GenerationInternalResult[] = [
601
- {
785
+ buildFile({
602
786
  schema: "schema",
603
- path: "placeholder.sql",
604
787
  namespace: "my-awesome-db-fragment",
605
788
  fromVersion: 0,
606
789
  toVersion: 1,
607
- },
790
+ }),
608
791
  ];
609
792
 
610
793
  const result = postProcessMigrationFilenames(files);
@@ -614,13 +797,12 @@ describe("postProcessMigrationFilenames", () => {
614
797
 
615
798
  it("should use current date in YYYYMMDD format", () => {
616
799
  const files: GenerationInternalResult[] = [
617
- {
800
+ buildFile({
618
801
  schema: "schema",
619
- path: "placeholder.sql",
620
802
  namespace: "test-db",
621
803
  fromVersion: 0,
622
804
  toVersion: 1,
623
- },
805
+ }),
624
806
  ];
625
807
 
626
808
  const result = postProcessMigrationFilenames(files);