@fragno-dev/db 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/.turbo/turbo-build.log +202 -140
  2. package/CHANGELOG.md +35 -0
  3. package/README.md +30 -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 +27 -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 +55 -16
  14. package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
  15. package/dist/adapters/generic-sql/generic-sql-uow-executor.js +129 -3
  16. package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
  17. package/dist/adapters/generic-sql/migration/dialect/mysql.js +24 -5
  18. package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
  19. package/dist/adapters/generic-sql/migration/dialect/postgres.js +6 -5
  20. package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
  21. package/dist/adapters/generic-sql/migration/dialect/sqlite.js +21 -10
  22. package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
  23. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -1
  24. package/dist/adapters/generic-sql/migration/prepared-migrations.js +8 -8
  25. package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
  26. package/dist/adapters/generic-sql/migration/sql-generator.js +74 -51
  27. package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
  28. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +6 -5
  29. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
  30. package/dist/adapters/generic-sql/query/cursor-utils.js +42 -4
  31. package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -1
  32. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +25 -17
  33. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
  34. package/dist/adapters/generic-sql/query/select-builder.js +5 -3
  35. package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
  36. package/dist/adapters/generic-sql/query/sql-query-compiler.js +15 -12
  37. package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
  38. package/dist/adapters/generic-sql/query/where-builder.js +39 -29
  39. package/dist/adapters/generic-sql/query/where-builder.js.map +1 -1
  40. package/dist/adapters/generic-sql/sqlite-storage.d.ts +13 -0
  41. package/dist/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
  42. package/dist/adapters/generic-sql/sqlite-storage.js +15 -0
  43. package/dist/adapters/generic-sql/sqlite-storage.js.map +1 -0
  44. package/dist/adapters/generic-sql/uow-decoder.js +7 -3
  45. package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
  46. package/dist/adapters/generic-sql/uow-encoder.js +28 -8
  47. package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
  48. package/dist/adapters/in-memory/condition-evaluator.js +131 -0
  49. package/dist/adapters/in-memory/condition-evaluator.js.map +1 -0
  50. package/dist/adapters/in-memory/errors.d.ts +13 -0
  51. package/dist/adapters/in-memory/errors.d.ts.map +1 -0
  52. package/dist/adapters/in-memory/errors.js +23 -0
  53. package/dist/adapters/in-memory/errors.js.map +1 -0
  54. package/dist/adapters/in-memory/in-memory-adapter.d.ts +27 -0
  55. package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -0
  56. package/dist/adapters/in-memory/in-memory-adapter.js +176 -0
  57. package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
  58. package/dist/adapters/in-memory/in-memory-uow.js +648 -0
  59. package/dist/adapters/in-memory/in-memory-uow.js.map +1 -0
  60. package/dist/adapters/in-memory/index.d.ts +4 -0
  61. package/dist/adapters/in-memory/index.js +4 -0
  62. package/dist/adapters/in-memory/options.d.ts +28 -0
  63. package/dist/adapters/in-memory/options.d.ts.map +1 -0
  64. package/dist/adapters/in-memory/options.js +61 -0
  65. package/dist/adapters/in-memory/options.js.map +1 -0
  66. package/dist/adapters/in-memory/reference-resolution.js +26 -0
  67. package/dist/adapters/in-memory/reference-resolution.js.map +1 -0
  68. package/dist/adapters/in-memory/sorted-array-index.js +129 -0
  69. package/dist/adapters/in-memory/sorted-array-index.js.map +1 -0
  70. package/dist/adapters/in-memory/store.js +71 -0
  71. package/dist/adapters/in-memory/store.js.map +1 -0
  72. package/dist/adapters/in-memory/value-comparison.js +28 -0
  73. package/dist/adapters/in-memory/value-comparison.js.map +1 -0
  74. package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -1
  75. package/dist/adapters/shared/uow-operation-compiler.js +11 -11
  76. package/dist/adapters/shared/uow-operation-compiler.js.map +1 -1
  77. package/dist/adapters/sql/index.d.ts +5 -0
  78. package/dist/adapters/sql/index.js +4 -0
  79. package/dist/db-fragment-definition-builder.d.ts +18 -7
  80. package/dist/db-fragment-definition-builder.d.ts.map +1 -1
  81. package/dist/db-fragment-definition-builder.js +116 -54
  82. package/dist/db-fragment-definition-builder.js.map +1 -1
  83. package/dist/dispatchers/cloudflare-do/index.d.ts +26 -0
  84. package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
  85. package/dist/dispatchers/cloudflare-do/index.js +63 -0
  86. package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
  87. package/dist/dispatchers/node/index.d.ts +17 -0
  88. package/dist/dispatchers/node/index.d.ts.map +1 -0
  89. package/dist/dispatchers/node/index.js +59 -0
  90. package/dist/dispatchers/node/index.js.map +1 -0
  91. package/dist/fragments/internal-fragment.d.ts +79 -2
  92. package/dist/fragments/internal-fragment.d.ts.map +1 -1
  93. package/dist/fragments/internal-fragment.js +150 -32
  94. package/dist/fragments/internal-fragment.js.map +1 -1
  95. package/dist/fragments/internal-fragment.routes.js +29 -0
  96. package/dist/fragments/internal-fragment.routes.js.map +1 -0
  97. package/dist/fragments/internal-fragment.schema.d.ts +9 -0
  98. package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
  99. package/dist/fragments/internal-fragment.schema.js +22 -0
  100. package/dist/fragments/internal-fragment.schema.js.map +1 -0
  101. package/dist/hooks/durable-hooks-processor.d.ts +14 -0
  102. package/dist/hooks/durable-hooks-processor.d.ts.map +1 -0
  103. package/dist/hooks/durable-hooks-processor.js +32 -0
  104. package/dist/hooks/durable-hooks-processor.js.map +1 -0
  105. package/dist/hooks/hooks.d.ts +42 -1
  106. package/dist/hooks/hooks.d.ts.map +1 -1
  107. package/dist/hooks/hooks.js +72 -6
  108. package/dist/hooks/hooks.js.map +1 -1
  109. package/dist/migration-engine/auto-from-schema.js +14 -11
  110. package/dist/migration-engine/auto-from-schema.js.map +1 -1
  111. package/dist/migration-engine/generation-engine.d.ts +16 -10
  112. package/dist/migration-engine/generation-engine.d.ts.map +1 -1
  113. package/dist/migration-engine/generation-engine.js +72 -33
  114. package/dist/migration-engine/generation-engine.js.map +1 -1
  115. package/dist/migration-engine/shared.js.map +1 -1
  116. package/dist/mod.d.ts +15 -8
  117. package/dist/mod.d.ts.map +1 -1
  118. package/dist/mod.js +14 -8
  119. package/dist/mod.js.map +1 -1
  120. package/dist/naming/sql-naming.d.ts +19 -0
  121. package/dist/naming/sql-naming.d.ts.map +1 -0
  122. package/dist/naming/sql-naming.js +116 -0
  123. package/dist/naming/sql-naming.js.map +1 -0
  124. package/dist/node_modules/.pnpm/{rou3@0.7.10 → rou3@0.7.12}/node_modules/rou3/dist/index.js +8 -5
  125. package/dist/node_modules/.pnpm/rou3@0.7.12/node_modules/rou3/dist/index.js.map +1 -0
  126. package/dist/outbox/outbox-builder.js +156 -0
  127. package/dist/outbox/outbox-builder.js.map +1 -0
  128. package/dist/outbox/outbox.d.ts +52 -0
  129. package/dist/outbox/outbox.d.ts.map +1 -0
  130. package/dist/outbox/outbox.js +37 -0
  131. package/dist/outbox/outbox.js.map +1 -0
  132. package/dist/packages/fragno/dist/api/fragment-definition-builder.js +3 -2
  133. package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +1 -1
  134. package/dist/packages/fragno/dist/api/fragment-instantiator.js +164 -20
  135. package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -1
  136. package/dist/packages/fragno/dist/api/request-input-context.js +67 -0
  137. package/dist/packages/fragno/dist/api/request-input-context.js.map +1 -1
  138. package/dist/packages/fragno/dist/api/route.js +14 -1
  139. package/dist/packages/fragno/dist/api/route.js.map +1 -1
  140. package/dist/packages/fragno/dist/internal/trace-context.js +12 -0
  141. package/dist/packages/fragno/dist/internal/trace-context.js.map +1 -0
  142. package/dist/query/column-defaults.js +20 -4
  143. package/dist/query/column-defaults.js.map +1 -1
  144. package/dist/query/cursor.d.ts +3 -1
  145. package/dist/query/cursor.d.ts.map +1 -1
  146. package/dist/query/cursor.js +45 -14
  147. package/dist/query/cursor.js.map +1 -1
  148. package/dist/query/db-now.d.ts +8 -0
  149. package/dist/query/db-now.d.ts.map +1 -0
  150. package/dist/query/db-now.js +7 -0
  151. package/dist/query/db-now.js.map +1 -0
  152. package/dist/query/serialize/create-sql-serializer.js +3 -2
  153. package/dist/query/serialize/create-sql-serializer.js.map +1 -1
  154. package/dist/query/serialize/dialect/mysql-serializer.js +12 -6
  155. package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
  156. package/dist/query/serialize/dialect/postgres-serializer.js +25 -7
  157. package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
  158. package/dist/query/serialize/dialect/sqlite-serializer.js +55 -11
  159. package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
  160. package/dist/query/serialize/sql-serializer.js +2 -2
  161. package/dist/query/serialize/sql-serializer.js.map +1 -1
  162. package/dist/query/simple-query-interface.d.ts +6 -1
  163. package/dist/query/simple-query-interface.d.ts.map +1 -1
  164. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
  165. package/dist/query/unit-of-work/execute-unit-of-work.js +11 -6
  166. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
  167. package/dist/query/unit-of-work/unit-of-work.d.ts +50 -14
  168. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
  169. package/dist/query/unit-of-work/unit-of-work.js +86 -5
  170. package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
  171. package/dist/query/value-decoding.js +9 -6
  172. package/dist/query/value-decoding.js.map +1 -1
  173. package/dist/query/value-encoding.js +29 -9
  174. package/dist/query/value-encoding.js.map +1 -1
  175. package/dist/schema/create.d.ts +38 -14
  176. package/dist/schema/create.d.ts.map +1 -1
  177. package/dist/schema/create.js +81 -42
  178. package/dist/schema/create.js.map +1 -1
  179. package/dist/schema/generate-id.js +2 -2
  180. package/dist/schema/generate-id.js.map +1 -1
  181. package/dist/schema/type-conversion/create-sql-type-mapper.js +3 -2
  182. package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
  183. package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
  184. package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
  185. package/dist/schema/validator.d.ts +10 -0
  186. package/dist/schema/validator.d.ts.map +1 -0
  187. package/dist/schema/validator.js +123 -0
  188. package/dist/schema/validator.js.map +1 -0
  189. package/dist/schema-output/drizzle.d.ts +30 -0
  190. package/dist/schema-output/drizzle.d.ts.map +1 -0
  191. package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +82 -56
  192. package/dist/schema-output/drizzle.js.map +1 -0
  193. package/dist/schema-output/prisma.d.ts +17 -0
  194. package/dist/schema-output/prisma.d.ts.map +1 -0
  195. package/dist/schema-output/prisma.js +296 -0
  196. package/dist/schema-output/prisma.js.map +1 -0
  197. package/dist/util/default-database-adapter.js +61 -0
  198. package/dist/util/default-database-adapter.js.map +1 -0
  199. package/dist/with-database.d.ts +1 -1
  200. package/dist/with-database.d.ts.map +1 -1
  201. package/dist/with-database.js +12 -3
  202. package/dist/with-database.js.map +1 -1
  203. package/package.json +43 -28
  204. package/src/adapters/adapters.ts +30 -24
  205. package/src/adapters/drizzle/migrate-drizzle.test.ts +54 -33
  206. package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +599 -0
  207. package/src/adapters/drizzle/test-utils.ts +12 -8
  208. package/src/adapters/generic-sql/driver-config.ts +38 -0
  209. package/src/adapters/generic-sql/generic-sql-adapter.test.ts +5 -5
  210. package/src/adapters/generic-sql/generic-sql-adapter.ts +110 -24
  211. package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +54 -0
  212. package/src/adapters/generic-sql/generic-sql-uow-executor.ts +231 -3
  213. package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +118 -0
  214. package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +26 -8
  215. package/src/adapters/generic-sql/migration/dialect/mysql.ts +46 -8
  216. package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +25 -7
  217. package/src/adapters/generic-sql/migration/dialect/postgres.ts +8 -4
  218. package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +47 -8
  219. package/src/adapters/generic-sql/migration/dialect/sqlite.ts +27 -12
  220. package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +128 -39
  221. package/src/adapters/generic-sql/migration/prepared-migrations.ts +15 -8
  222. package/src/adapters/generic-sql/migration/sql-generator.ts +142 -65
  223. package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +9 -6
  224. package/src/adapters/generic-sql/query/cursor-utils.test.ts +271 -0
  225. package/src/adapters/generic-sql/query/cursor-utils.ts +41 -6
  226. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +27 -27
  227. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +38 -24
  228. package/src/adapters/generic-sql/query/select-builder.test.ts +15 -11
  229. package/src/adapters/generic-sql/query/select-builder.ts +6 -2
  230. package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +52 -2
  231. package/src/adapters/generic-sql/query/sql-query-compiler.ts +50 -15
  232. package/src/adapters/generic-sql/query/where-builder.test.ts +91 -17
  233. package/src/adapters/generic-sql/query/where-builder.ts +90 -38
  234. package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +6 -6
  235. package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +806 -0
  236. package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +11 -11
  237. package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +10 -10
  238. package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +7 -7
  239. package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +6 -6
  240. package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
  241. package/src/adapters/generic-sql/uow-decoder.test.ts +1 -1
  242. package/src/adapters/generic-sql/uow-decoder.ts +21 -3
  243. package/src/adapters/generic-sql/uow-encoder.test.ts +33 -2
  244. package/src/adapters/generic-sql/uow-encoder.ts +50 -11
  245. package/src/adapters/in-memory/condition-evaluator.test.ts +193 -0
  246. package/src/adapters/in-memory/condition-evaluator.ts +275 -0
  247. package/src/adapters/in-memory/errors.ts +20 -0
  248. package/src/adapters/in-memory/in-memory-adapter.ts +277 -0
  249. package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +296 -0
  250. package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +100 -0
  251. package/src/adapters/in-memory/in-memory-uow.ts +1348 -0
  252. package/src/adapters/in-memory/index.ts +3 -0
  253. package/src/adapters/in-memory/options.test.ts +41 -0
  254. package/src/adapters/in-memory/options.ts +87 -0
  255. package/src/adapters/in-memory/reference-resolution.test.ts +50 -0
  256. package/src/adapters/in-memory/reference-resolution.ts +67 -0
  257. package/src/adapters/in-memory/sorted-array-index.test.ts +123 -0
  258. package/src/adapters/in-memory/sorted-array-index.ts +228 -0
  259. package/src/adapters/in-memory/store.test.ts +68 -0
  260. package/src/adapters/in-memory/store.ts +145 -0
  261. package/src/adapters/in-memory/value-comparison.ts +53 -0
  262. package/src/adapters/in-memory/value-normalization.test.ts +57 -0
  263. package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1163 -0
  264. package/src/adapters/shared/from-unit-of-work-compiler.ts +3 -1
  265. package/src/adapters/shared/uow-operation-compiler.ts +26 -16
  266. package/src/adapters/sql/index.ts +12 -0
  267. package/src/db-fragment-definition-builder.test.ts +30 -12
  268. package/src/db-fragment-definition-builder.ts +142 -73
  269. package/src/db-fragment-instantiator.test.ts +105 -13
  270. package/src/db-fragment-integration.test.ts +9 -7
  271. package/src/dispatchers/cloudflare-do/index.test.ts +73 -0
  272. package/src/dispatchers/cloudflare-do/index.ts +104 -0
  273. package/src/dispatchers/node/index.test.ts +91 -0
  274. package/src/dispatchers/node/index.ts +87 -0
  275. package/src/fragments/internal-fragment.routes.ts +42 -0
  276. package/src/fragments/internal-fragment.schema.ts +51 -0
  277. package/src/fragments/internal-fragment.test.ts +458 -8
  278. package/src/fragments/internal-fragment.ts +322 -63
  279. package/src/hooks/durable-hooks-processor.test.ts +117 -0
  280. package/src/hooks/durable-hooks-processor.ts +67 -0
  281. package/src/hooks/hooks.test.ts +165 -5
  282. package/src/hooks/hooks.ts +197 -9
  283. package/src/migration-engine/auto-from-schema.test.ts +14 -14
  284. package/src/migration-engine/auto-from-schema.ts +5 -2
  285. package/src/migration-engine/create.test.ts +2 -2
  286. package/src/migration-engine/generation-engine.test.ts +229 -104
  287. package/src/migration-engine/generation-engine.ts +94 -64
  288. package/src/migration-engine/shared.ts +1 -0
  289. package/src/mod.ts +64 -26
  290. package/src/naming/sql-naming.ts +180 -0
  291. package/src/outbox/outbox-builder.ts +241 -0
  292. package/src/outbox/outbox.test.ts +253 -0
  293. package/src/outbox/outbox.ts +137 -0
  294. package/src/query/column-defaults.ts +41 -3
  295. package/src/query/condition-builder.test.ts +3 -3
  296. package/src/query/cursor.test.ts +116 -18
  297. package/src/query/cursor.ts +75 -26
  298. package/src/query/db-now.ts +6 -0
  299. package/src/query/query-type.test.ts +2 -2
  300. package/src/query/serialize/create-sql-serializer.ts +7 -2
  301. package/src/query/serialize/dialect/mysql-serializer.ts +12 -4
  302. package/src/query/serialize/dialect/postgres-serializer.ts +34 -4
  303. package/src/query/serialize/dialect/sqlite-serializer.test.ts +51 -1
  304. package/src/query/serialize/dialect/sqlite-serializer.ts +92 -9
  305. package/src/query/serialize/sql-serializer.ts +4 -4
  306. package/src/query/simple-query-interface.ts +5 -0
  307. package/src/query/unit-of-work/execute-unit-of-work.test.ts +25 -1
  308. package/src/query/unit-of-work/execute-unit-of-work.ts +25 -8
  309. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +12 -12
  310. package/src/query/unit-of-work/unit-of-work-types.test.ts +1 -1
  311. package/src/query/unit-of-work/unit-of-work.test.ts +168 -37
  312. package/src/query/unit-of-work/unit-of-work.ts +203 -18
  313. package/src/query/value-decoding.test.ts +13 -2
  314. package/src/query/value-decoding.ts +17 -4
  315. package/src/query/value-encoding.test.ts +85 -2
  316. package/src/query/value-encoding.ts +56 -6
  317. package/src/schema/create.test.ts +129 -42
  318. package/src/schema/create.ts +185 -47
  319. package/src/schema/generate-id.test.ts +2 -2
  320. package/src/schema/generate-id.ts +2 -2
  321. package/src/schema/serialize.test.ts +14 -2
  322. package/src/schema/type-conversion/create-sql-type-mapper.ts +7 -2
  323. package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
  324. package/src/schema/type-conversion/type-mapping.test.ts +25 -1
  325. package/src/schema/validator.test.ts +197 -0
  326. package/src/schema/validator.ts +231 -0
  327. package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +179 -129
  328. package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +143 -93
  329. package/src/schema-output/prisma.test.ts +536 -0
  330. package/src/schema-output/prisma.ts +573 -0
  331. package/src/util/default-database-adapter.ts +106 -0
  332. package/src/with-database.ts +22 -3
  333. package/tsdown.config.ts +6 -4
  334. package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
  335. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
  336. package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
  337. package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
  338. package/dist/adapters/drizzle/generate.d.ts +0 -30
  339. package/dist/adapters/drizzle/generate.d.ts.map +0 -1
  340. package/dist/adapters/drizzle/generate.js.map +0 -1
  341. package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
  342. package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
  343. package/dist/adapters/kysely/kysely-adapter.js +0 -17
  344. package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
  345. package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
  346. package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
  347. package/dist/adapters/shared/table-name-mapper.js +0 -43
  348. package/dist/adapters/shared/table-name-mapper.js.map +0 -1
  349. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
  350. package/dist/schema-generator/schema-generator.d.ts +0 -15
  351. package/dist/schema-generator/schema-generator.d.ts.map +0 -1
  352. package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
  353. package/src/adapters/kysely/kysely-adapter.ts +0 -27
  354. package/src/adapters/shared/table-name-mapper.ts +0 -50
  355. package/src/schema-generator/schema-generator.ts +0 -12
@@ -1 +1 @@
1
- {"version":3,"file":"with-database.js","names":[],"sources":["../src/with-database.ts"],"sourcesContent":["import type { AnySchema } from \"./schema/create\";\nimport type {\n RequestThisContext,\n FragnoPublicConfig,\n AnyFragnoInstantiatedFragment,\n} from \"@fragno-dev/core\";\nimport { FragmentDefinitionBuilder, instantiate } from \"@fragno-dev/core\";\nimport {\n DatabaseFragmentDefinitionBuilder,\n type DatabaseServiceContext,\n type DatabaseHandlerContext,\n type ImplicitDatabaseDependencies,\n type FragnoPublicConfigWithDatabase,\n type DatabaseRequestStorage,\n} from \"./db-fragment-definition-builder\";\nimport { internalFragmentDef, type InternalFragmentInstance } from \"./fragments/internal-fragment\";\nimport type { HooksMap } from \"./hooks/hooks\";\n\n/**\n * Helper to add database support to a fragment builder.\n * Automatically links the internal fragment and adds ImplicitDatabaseDependencies to the TDeps type.\n *\n * @example\n * ```typescript\n * // With .extend() - recommended\n * const def = defineFragment(\"my-frag\")\n * .extend(withDatabase(mySchema))\n * .withDependencies(...)\n * .build();\n *\n * // Or as a function wrapper\n * const def = withDatabase(mySchema)(defineFragment(\"my-frag\"))\n * .withDependencies(...)\n * .build();\n * ```\n */\nexport function withDatabase<TSchema extends AnySchema>(\n schema: TSchema,\n namespace?: string,\n): <\n TConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage,\n TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment>,\n>(\n builder: FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >,\n) => DatabaseFragmentDefinitionBuilder<\n TSchema,\n TConfig,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n HooksMap,\n DatabaseServiceContext<HooksMap>,\n DatabaseHandlerContext,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n> {\n return <\n TConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage,\n TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment>,\n >(\n builder: FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >,\n ) => {\n const builderWithInternal = builder.withLinkedFragment(\n \"_fragno_internal\",\n ({ config, options }) => {\n // Cast is safe: by the time this callback is invoked during fragment instantiation,\n // the options will be FragnoPublicConfigWithDatabase (enforced by DatabaseFragmentDefinitionBuilder)\n return instantiate(internalFragmentDef)\n .withConfig(config as {})\n .withOptions(options as FragnoPublicConfigWithDatabase)\n .build();\n },\n );\n\n // Cast is safe: we're creating a DatabaseFragmentDefinitionBuilder which internally uses\n // FragnoPublicConfigWithDatabase, but the input builder uses FragnoPublicConfig.\n // The database builder's build() method will enforce FragnoPublicConfigWithDatabase at the end.\n // We also add ImplicitDatabaseDependencies to TDeps so they're available in service constructors.\n // Note: We discard TRequestStorage here because database fragments manage their own storage (DatabaseRequestStorage).\n // We set TServiceThisContext to DatabaseServiceContext (restricted) and THandlerThisContext to DatabaseHandlerContext (full).\n return new DatabaseFragmentDefinitionBuilder<\n TSchema,\n TConfig,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n {}, // Start with empty hooks, provideHooks() will update this\n DatabaseServiceContext<{}>,\n DatabaseHandlerContext,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n >(\n builderWithInternal as unknown as FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfigWithDatabase,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n DatabaseServiceContext<{}>,\n DatabaseHandlerContext,\n DatabaseRequestStorage,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n >,\n schema,\n namespace,\n );\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAoCA,SAAgB,aACd,QACA,WAsCA;AACA,SAYE,YAaG;AAmBH,SAAO,IAAI,kCAlBiB,QAAQ,mBAClC,qBACC,EAAE,QAAQ,cAAc;AAGvB,UAAO,YAAY,oBAAoB,CACpC,WAAW,OAAa,CACxB,YAAY,QAA0C,CACtD,OAAO;IAEb,EAkCC,QACA,UACD"}
1
+ {"version":3,"file":"with-database.js","names":[],"sources":["../src/with-database.ts"],"sourcesContent":["import type { AnySchema } from \"./schema/create\";\nimport type {\n RequestThisContext,\n FragnoPublicConfig,\n AnyFragnoInstantiatedFragment,\n} from \"@fragno-dev/core\";\nimport { FragmentDefinitionBuilder, instantiate } from \"@fragno-dev/core\";\nimport {\n DatabaseFragmentDefinitionBuilder,\n type DatabaseServiceContext,\n type DatabaseHandlerContext,\n type ImplicitDatabaseDependencies,\n type FragnoPublicConfigWithDatabase,\n type DatabaseRequestStorage,\n} from \"./db-fragment-definition-builder\";\nimport { internalFragmentDef, type InternalFragmentInstance } from \"./fragments/internal-fragment\";\nimport { internalFragmentRoutes } from \"./fragments/internal-fragment.routes\";\nimport type { HooksMap } from \"./hooks/hooks\";\nimport { resolveDatabaseAdapter } from \"./util/default-database-adapter\";\n\nfunction shouldExposeOutboxRoutes(\n options: FragnoPublicConfigWithDatabase,\n schema: AnySchema,\n): boolean {\n const adapter = resolveDatabaseAdapter(options, schema) as { outbox?: { enabled?: boolean } };\n return adapter.outbox?.enabled ?? false;\n}\n\n/**\n * Helper to add database support to a fragment builder.\n * Automatically links the internal fragment and adds ImplicitDatabaseDependencies to the TDeps type.\n *\n * @example\n * ```typescript\n * // With .extend() - recommended\n * const def = defineFragment(\"my-frag\")\n * .extend(withDatabase(mySchema))\n * .withDependencies(...)\n * .build();\n *\n * // Or as a function wrapper\n * const def = withDatabase(mySchema)(defineFragment(\"my-frag\"))\n * .withDependencies(...)\n * .build();\n * ```\n */\nexport function withDatabase<TSchema extends AnySchema>(\n schema: TSchema,\n): <\n TConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage,\n TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment>,\n>(\n builder: FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >,\n) => DatabaseFragmentDefinitionBuilder<\n TSchema,\n TConfig,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n HooksMap,\n DatabaseServiceContext<HooksMap>,\n DatabaseHandlerContext,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n> {\n return <\n TConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext extends RequestThisContext,\n THandlerThisContext extends RequestThisContext,\n TRequestStorage,\n TLinkedFragments extends Record<string, AnyFragnoInstantiatedFragment>,\n >(\n builder: FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfig,\n TDeps,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n TServiceThisContext,\n THandlerThisContext,\n TRequestStorage,\n TLinkedFragments\n >,\n ) => {\n const builderWithInternal = builder.withLinkedFragment(\n \"_fragno_internal\",\n ({ config, options }) => {\n const internalRoutes = shouldExposeOutboxRoutes(\n options as FragnoPublicConfigWithDatabase,\n schema,\n )\n ? [internalFragmentRoutes]\n : [];\n\n // Cast is safe: by the time this callback is invoked during fragment instantiation,\n // the options will be FragnoPublicConfigWithDatabase (enforced by DatabaseFragmentDefinitionBuilder)\n return instantiate(internalFragmentDef)\n .withConfig(config as {})\n .withOptions({\n ...(options as FragnoPublicConfigWithDatabase),\n databaseNamespace: null,\n })\n .withRoutes(internalRoutes)\n .build();\n },\n );\n\n // Cast is safe: we're creating a DatabaseFragmentDefinitionBuilder which internally uses\n // FragnoPublicConfigWithDatabase, but the input builder uses FragnoPublicConfig.\n // The database builder's build() method will enforce FragnoPublicConfigWithDatabase at the end.\n // We also add ImplicitDatabaseDependencies to TDeps so they're available in service constructors.\n // Note: We discard TRequestStorage here because database fragments manage their own storage (DatabaseRequestStorage).\n // We set TServiceThisContext to DatabaseServiceContext (restricted) and THandlerThisContext to DatabaseHandlerContext (full).\n return new DatabaseFragmentDefinitionBuilder<\n TSchema,\n TConfig,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n {}, // Start with empty hooks, provideHooks() will update this\n DatabaseServiceContext<{}>,\n DatabaseHandlerContext,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n >(\n builderWithInternal as unknown as FragmentDefinitionBuilder<\n TConfig,\n FragnoPublicConfigWithDatabase,\n TDeps & ImplicitDatabaseDependencies<TSchema>,\n TBaseServices,\n TServices,\n TServiceDeps,\n TPrivateServices,\n DatabaseServiceContext<{}>,\n DatabaseHandlerContext,\n DatabaseRequestStorage,\n TLinkedFragments & { _fragno_internal: InternalFragmentInstance }\n >,\n schema,\n );\n };\n}\n"],"mappings":";;;;;;;AAoBA,SAAS,yBACP,SACA,QACS;AAET,QADgB,uBAAuB,SAAS,OAAO,CACxC,QAAQ,WAAW;;;;;;;;;;;;;;;;;;;;AAqBpC,SAAgB,aACd,QAsCA;AACA,SAYE,YAaG;AA8BH,SAAO,IAAI,kCA7BiB,QAAQ,mBAClC,qBACC,EAAE,QAAQ,cAAc;GACvB,MAAM,iBAAiB,yBACrB,SACA,OACD,GACG,CAAC,uBAAuB,GACxB,EAAE;AAIN,UAAO,YAAY,oBAAoB,CACpC,WAAW,OAAa,CACxB,YAAY;IACX,GAAI;IACJ,mBAAmB;IACpB,CAAC,CACD,WAAW,eAAe,CAC1B,OAAO;IAEb,EAkCC,OACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fragno-dev/db",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -48,25 +48,25 @@
48
48
  "types": "./dist/adapters/adapters.d.ts",
49
49
  "default": "./dist/adapters/adapters.js"
50
50
  },
51
- "./adapters/kysely": {
52
- "development": "./src/adapters/kysely/kysely-adapter.ts",
53
- "types": "./dist/adapters/kysely/kysely-adapter.d.ts",
54
- "default": "./dist/adapters/kysely/kysely-adapter.js"
51
+ "./adapters/in-memory": {
52
+ "development": "./src/adapters/in-memory/index.ts",
53
+ "types": "./dist/adapters/in-memory/index.d.ts",
54
+ "default": "./dist/adapters/in-memory/index.js"
55
55
  },
56
- "./adapters/drizzle": {
57
- "development": "./src/adapters/drizzle/drizzle-adapter.ts",
58
- "types": "./dist/adapters/drizzle/drizzle-adapter.d.ts",
59
- "default": "./dist/adapters/drizzle/drizzle-adapter.js"
56
+ "./adapters/sql": {
57
+ "development": "./src/adapters/sql/index.ts",
58
+ "types": "./dist/adapters/sql/index.d.ts",
59
+ "default": "./dist/adapters/sql/index.js"
60
60
  },
61
- "./adapters/drizzle/generate": {
62
- "development": "./src/adapters/drizzle/generate.ts",
63
- "types": "./dist/adapters/drizzle/generate.d.ts",
64
- "default": "./dist/adapters/drizzle/generate.js"
61
+ "./schema-output/drizzle": {
62
+ "development": "./src/schema-output/drizzle.ts",
63
+ "types": "./dist/schema-output/drizzle.d.ts",
64
+ "default": "./dist/schema-output/drizzle.js"
65
65
  },
66
- "./adapters/generic-sql": {
67
- "development": "./src/adapters/generic-sql/generic-sql-adapter.ts",
68
- "types": "./dist/adapters/generic-sql/generic-sql-adapter.d.ts",
69
- "default": "./dist/adapters/generic-sql/generic-sql-adapter.js"
66
+ "./schema-output/prisma": {
67
+ "development": "./src/schema-output/prisma.ts",
68
+ "types": "./dist/schema-output/prisma.d.ts",
69
+ "default": "./dist/schema-output/prisma.js"
70
70
  },
71
71
  "./unit-of-work": {
72
72
  "development": "./src/query/unit-of-work/unit-of-work.ts",
@@ -88,6 +88,16 @@
88
88
  "types": "./dist/db-fragment-definition-builder.d.ts",
89
89
  "default": "./dist/db-fragment-definition-builder.js"
90
90
  },
91
+ "./dispatchers/node": {
92
+ "development": "./src/dispatchers/node/index.ts",
93
+ "types": "./dist/dispatchers/node/index.d.ts",
94
+ "default": "./dist/dispatchers/node/index.js"
95
+ },
96
+ "./dispatchers/cloudflare-do": {
97
+ "development": "./src/dispatchers/cloudflare-do/index.ts",
98
+ "types": "./dist/dispatchers/cloudflare-do/index.d.ts",
99
+ "default": "./dist/dispatchers/cloudflare-do/index.js"
100
+ },
91
101
  "./generation-engine": {
92
102
  "development": "./src/migration-engine/generation-engine.ts",
93
103
  "types": "./dist/migration-engine/generation-engine.d.ts",
@@ -95,22 +105,22 @@
95
105
  }
96
106
  },
97
107
  "devDependencies": {
98
- "@electric-sql/pglite": "^0.3.10",
108
+ "@electric-sql/pglite": "^0.3.15",
99
109
  "@libsql/client": "^0.15.15",
100
110
  "@types/better-sqlite3": "^7.6.13",
101
- "@types/node": "^22",
111
+ "@types/node": "^22.19.7",
102
112
  "@vitest/coverage-istanbul": "^3.2.4",
103
- "better-sqlite3": "^12.5.0",
104
- "drizzle-kit": "^0.31.5",
105
- "drizzle-orm": "^0.44.6",
113
+ "better-sqlite3": "^12.6.2",
114
+ "drizzle-kit": "^0.31.8",
115
+ "drizzle-orm": "^0.44.7",
106
116
  "kysely-pglite": "^0.6.1",
107
- "mysql2": "^3.11.5",
117
+ "mysql2": "^3.16.1",
108
118
  "sqlocal": "^0.15.2",
109
119
  "vitest": "^3.2.4",
110
- "zod": "^4.1.12",
111
- "@fragno-dev/core": "0.1.11",
112
- "@fragno-private/vitest-config": "0.0.0",
113
- "@fragno-private/typescript-config": "0.0.1"
120
+ "zod": "^4.3.5",
121
+ "@fragno-dev/core": "0.2.0",
122
+ "@fragno-private/typescript-config": "0.0.1",
123
+ "@fragno-private/vitest-config": "0.0.0"
114
124
  },
115
125
  "repository": {
116
126
  "type": "git",
@@ -121,7 +131,12 @@
121
131
  "license": "MIT",
122
132
  "dependencies": {
123
133
  "@paralleldrive/cuid2": "^2.3.1",
124
- "kysely": "^0.28.7"
134
+ "@standard-schema/spec": "^1.1.0",
135
+ "kysely": "^0.28.10",
136
+ "superjson": "^2.2.1"
137
+ },
138
+ "optionalDependencies": {
139
+ "better-sqlite3": "^12.6.2"
125
140
  },
126
141
  "peerDependencies": {
127
142
  "drizzle-orm": "^0.44.6"
@@ -1,9 +1,11 @@
1
1
  import type { SimpleQueryInterface } from "../query/simple-query-interface";
2
- import type { SchemaGenerator } from "../schema-generator/schema-generator";
3
2
  import type { AnySchema } from "../schema/create";
4
3
  import type { RequestContextStorage } from "@fragno-dev/core/internal/request-context-storage";
5
4
  import type { IUnitOfWork } from "../query/unit-of-work/unit-of-work";
6
5
  import type { PreparedMigrations } from "./generic-sql/migration/prepared-migrations";
6
+ import type { SQLProvider } from "../shared/providers";
7
+ import type { SQLiteStorageMode } from "./generic-sql/sqlite-storage";
8
+ import type { SqlNamingStrategy } from "../naming/sql-naming";
7
9
 
8
10
  export const fragnoDatabaseAdapterNameFakeSymbol = "$fragno-database-adapter-name" as const;
9
11
  export const fragnoDatabaseAdapterVersionFakeSymbol = "$fragno-database-adapter-version" as const;
@@ -16,12 +18,12 @@ export type DatabaseContextStorage = {
16
18
  uow: IUnitOfWork;
17
19
  };
18
20
 
19
- /**
20
- * Maps logical table names (used by fragment authors) to physical table names (with namespace suffix)
21
- */
22
- export interface TableNameMapper {
23
- toPhysical(logicalName: string): string;
24
- toLogical(physicalName: string): string;
21
+ export type SQLiteProfile = "default" | "prisma";
22
+
23
+ export interface DatabaseAdapterMetadata {
24
+ databaseType?: SQLProvider;
25
+ sqliteProfile?: SQLiteProfile;
26
+ sqliteStorageMode?: SQLiteStorageMode;
25
27
  }
26
28
 
27
29
  export interface DatabaseAdapter<TUOWConfig = void> {
@@ -34,36 +36,40 @@ export interface DatabaseAdapter<TUOWConfig = void> {
34
36
  */
35
37
  readonly contextStorage: RequestContextStorage<DatabaseContextStorage>;
36
38
 
39
+ /**
40
+ * Optional adapter override used for durable hook processing.
41
+ * Use this when the public adapter wraps another adapter (e.g. model checker).
42
+ */
43
+ getHookProcessingAdapter?: () => DatabaseAdapter<TUOWConfig>;
44
+
37
45
  /**
38
46
  * Get current schema version, undefined if not initialized.
39
47
  */
40
48
  getSchemaVersion(namespace: string): Promise<string | undefined>;
41
49
 
50
+ /**
51
+ * Optional metadata used by schema output tooling.
52
+ */
53
+ readonly adapterMetadata?: DatabaseAdapterMetadata;
54
+
55
+ /**
56
+ * Naming strategy used for physical SQL identifiers.
57
+ */
58
+ readonly namingStrategy: SqlNamingStrategy;
59
+
60
+ /**
61
+ * @deprecated Avoid using query engines directly in fragment code. Prefer handlerTx/serviceTx.
62
+ */
42
63
  createQueryEngine: <const T extends AnySchema>(
43
64
  schema: T,
44
- namespace: string,
65
+ namespace: string | null,
45
66
  ) => SimpleQueryInterface<T, TUOWConfig>;
46
67
 
47
68
  prepareMigrations?: <const T extends AnySchema>(
48
69
  schema: T,
49
- namespace: string,
70
+ namespace: string | null,
50
71
  ) => PreparedMigrations;
51
72
 
52
- /**
53
- * Generate a combined schema file from one or more fragments.
54
- * If not implemented, schema generation is not supported for this adapter.
55
- */
56
- createSchemaGenerator?: (
57
- fragments: { schema: AnySchema; namespace: string }[],
58
- options?: { path?: string },
59
- ) => SchemaGenerator;
60
-
61
- /**
62
- * Creates a table name mapper for the given namespace.
63
- * Used to convert between logical table names and physical table names.
64
- */
65
- createTableNameMapper: (namespace: string) => TableNameMapper;
66
-
67
73
  isConnectionHealthy: () => Promise<boolean>;
68
74
 
69
75
  close: () => Promise<void>;
@@ -9,7 +9,7 @@ const { generateDrizzleJson, generateMigration } =
9
9
  require("drizzle-kit/api") as typeof import("drizzle-kit/api");
10
10
 
11
11
  describe("generateSchema and migrate", () => {
12
- const testSchema = schema((s) => {
12
+ const testSchema = schema("test", (s) => {
13
13
  return s
14
14
  .addTable("users", (t) => {
15
15
  return t
@@ -155,7 +155,8 @@ describe("generateSchema and migrate", () => {
155
155
  "key" text NOT NULL,
156
156
  "value" text NOT NULL,
157
157
  "_internalId" bigserial PRIMARY KEY NOT NULL,
158
- "_version" integer DEFAULT 0 NOT NULL
158
+ "_version" integer DEFAULT 0 NOT NULL,
159
+ CONSTRAINT "fragno_db_settings_id_unique" UNIQUE("id")
159
160
  );
160
161
 
161
162
  CREATE TABLE "fragno_hooks" (
@@ -172,10 +173,23 @@ describe("generateSchema and migrate", () => {
172
173
  "createdAt" timestamp DEFAULT now() NOT NULL,
173
174
  "nonce" text NOT NULL,
174
175
  "_internalId" bigserial PRIMARY KEY NOT NULL,
175
- "_version" integer DEFAULT 0 NOT NULL
176
+ "_version" integer DEFAULT 0 NOT NULL,
177
+ CONSTRAINT "fragno_hooks_id_unique" UNIQUE("id")
176
178
  );
177
179
 
178
- CREATE TABLE "users" (
180
+ CREATE TABLE "fragno_db_outbox" (
181
+ "id" varchar(30) NOT NULL,
182
+ "versionstamp" text NOT NULL,
183
+ "uowId" text NOT NULL,
184
+ "payload" json NOT NULL,
185
+ "refMap" json,
186
+ "createdAt" timestamp DEFAULT now() NOT NULL,
187
+ "_internalId" bigserial PRIMARY KEY NOT NULL,
188
+ "_version" integer DEFAULT 0 NOT NULL,
189
+ CONSTRAINT "fragno_db_outbox_id_unique" UNIQUE("id")
190
+ );
191
+
192
+ CREATE TABLE "test"."users" (
179
193
  "id" varchar(30) NOT NULL,
180
194
  "name" text NOT NULL,
181
195
  "email" text NOT NULL,
@@ -185,10 +199,11 @@ describe("generateSchema and migrate", () => {
185
199
  "createdAt" timestamp DEFAULT now() NOT NULL,
186
200
  "updatedAt" timestamp DEFAULT now() NOT NULL,
187
201
  "_internalId" bigserial PRIMARY KEY NOT NULL,
188
- "_version" integer DEFAULT 0 NOT NULL
202
+ "_version" integer DEFAULT 0 NOT NULL,
203
+ CONSTRAINT "users_id_unique" UNIQUE("id")
189
204
  );
190
205
 
191
- CREATE TABLE "posts" (
206
+ CREATE TABLE "test"."posts" (
192
207
  "id" varchar(30) NOT NULL,
193
208
  "title" text NOT NULL,
194
209
  "slug" varchar(255) NOT NULL,
@@ -204,10 +219,11 @@ describe("generateSchema and migrate", () => {
204
219
  "thumbnail" "bytea",
205
220
  "createdAt" timestamp DEFAULT now() NOT NULL,
206
221
  "_internalId" bigserial PRIMARY KEY NOT NULL,
207
- "_version" integer DEFAULT 0 NOT NULL
222
+ "_version" integer DEFAULT 0 NOT NULL,
223
+ CONSTRAINT "posts_id_unique" UNIQUE("id")
208
224
  );
209
225
 
210
- CREATE TABLE "comments" (
226
+ CREATE TABLE "test"."comments" (
211
227
  "id" varchar(30) NOT NULL,
212
228
  "content" text NOT NULL,
213
229
  "postId" bigint NOT NULL,
@@ -217,10 +233,11 @@ describe("generateSchema and migrate", () => {
217
233
  "editedAt" timestamp,
218
234
  "isDeleted" boolean DEFAULT false NOT NULL,
219
235
  "_internalId" bigserial PRIMARY KEY NOT NULL,
220
- "_version" integer DEFAULT 0 NOT NULL
236
+ "_version" integer DEFAULT 0 NOT NULL,
237
+ CONSTRAINT "comments_id_unique" UNIQUE("id")
221
238
  );
222
239
 
223
- CREATE TABLE "tags" (
240
+ CREATE TABLE "test"."tags" (
224
241
  "id" varchar(30) NOT NULL,
225
242
  "name" text NOT NULL,
226
243
  "slug" varchar(100) NOT NULL,
@@ -228,42 +245,46 @@ describe("generateSchema and migrate", () => {
228
245
  "color" varchar(7),
229
246
  "usageCount" bigint DEFAULT 0 NOT NULL,
230
247
  "_internalId" bigserial PRIMARY KEY NOT NULL,
231
- "_version" integer DEFAULT 0 NOT NULL
248
+ "_version" integer DEFAULT 0 NOT NULL,
249
+ CONSTRAINT "tags_id_unique" UNIQUE("id")
232
250
  );
233
251
 
234
- CREATE TABLE "postTags" (
252
+ CREATE TABLE "test"."postTags" (
235
253
  "id" varchar(30) NOT NULL,
236
254
  "postId" bigint NOT NULL,
237
255
  "tagId" bigint NOT NULL,
238
256
  "order" integer DEFAULT 0 NOT NULL,
239
257
  "createdAt" timestamp DEFAULT now() NOT NULL,
240
258
  "_internalId" bigserial PRIMARY KEY NOT NULL,
241
- "_version" integer DEFAULT 0 NOT NULL
259
+ "_version" integer DEFAULT 0 NOT NULL,
260
+ CONSTRAINT "postTags_id_unique" UNIQUE("id")
242
261
  );
243
262
 
244
- ALTER TABLE "posts" ADD CONSTRAINT "posts_users_author_fk" FOREIGN KEY ("userId") REFERENCES "public"."users"("_internalId") ON DELETE no action ON UPDATE no action;
245
- ALTER TABLE "comments" ADD CONSTRAINT "comments_posts_post_fk" FOREIGN KEY ("postId") REFERENCES "public"."posts"("_internalId") ON DELETE no action ON UPDATE no action;
246
- ALTER TABLE "comments" ADD CONSTRAINT "comments_users_author_fk" FOREIGN KEY ("userId") REFERENCES "public"."users"("_internalId") ON DELETE no action ON UPDATE no action;
247
- ALTER TABLE "comments" ADD CONSTRAINT "comments_comments_parent_fk" FOREIGN KEY ("parentId") REFERENCES "public"."comments"("_internalId") ON DELETE no action ON UPDATE no action;
248
- ALTER TABLE "postTags" ADD CONSTRAINT "postTags_posts_post_fk" FOREIGN KEY ("postId") REFERENCES "public"."posts"("_internalId") ON DELETE no action ON UPDATE no action;
249
- ALTER TABLE "postTags" ADD CONSTRAINT "postTags_tags_tag_fk" FOREIGN KEY ("tagId") REFERENCES "public"."tags"("_internalId") ON DELETE no action ON UPDATE no action;
263
+ ALTER TABLE "test"."posts" ADD CONSTRAINT "fk_posts_users_author" FOREIGN KEY ("userId") REFERENCES "test"."users"("_internalId") ON DELETE no action ON UPDATE no action;
264
+ ALTER TABLE "test"."comments" ADD CONSTRAINT "fk_comments_posts_post" FOREIGN KEY ("postId") REFERENCES "test"."posts"("_internalId") ON DELETE no action ON UPDATE no action;
265
+ ALTER TABLE "test"."comments" ADD CONSTRAINT "fk_comments_users_author" FOREIGN KEY ("userId") REFERENCES "test"."users"("_internalId") ON DELETE no action ON UPDATE no action;
266
+ ALTER TABLE "test"."comments" ADD CONSTRAINT "fk_comments_comments_parent" FOREIGN KEY ("parentId") REFERENCES "test"."comments"("_internalId") ON DELETE no action ON UPDATE no action;
267
+ ALTER TABLE "test"."postTags" ADD CONSTRAINT "fk_postTags_posts_post" FOREIGN KEY ("postId") REFERENCES "test"."posts"("_internalId") ON DELETE no action ON UPDATE no action;
268
+ ALTER TABLE "test"."postTags" ADD CONSTRAINT "fk_postTags_tags_tag" FOREIGN KEY ("tagId") REFERENCES "test"."tags"("_internalId") ON DELETE no action ON UPDATE no action;
250
269
  CREATE UNIQUE INDEX "unique_key" ON "fragno_db_settings" USING btree ("key");
251
270
  CREATE INDEX "idx_namespace_status_retry" ON "fragno_hooks" USING btree ("namespace","status","nextRetryAt");
252
271
  CREATE INDEX "idx_nonce" ON "fragno_hooks" USING btree ("nonce");
253
- CREATE UNIQUE INDEX "idx_users_email" ON "users" USING btree ("email");
254
- CREATE INDEX "idx_users_name" ON "users" USING btree ("name");
255
- CREATE INDEX "idx_users_active" ON "users" USING btree ("isActive");
256
- CREATE INDEX "idx_posts_user" ON "posts" USING btree ("userId");
257
- CREATE INDEX "idx_posts_title" ON "posts" USING btree ("title");
258
- CREATE UNIQUE INDEX "idx_posts_slug" ON "posts" USING btree ("slug");
259
- CREATE INDEX "idx_posts_published" ON "posts" USING btree ("isPublished","publishedAt");
260
- CREATE INDEX "idx_comments_post" ON "comments" USING btree ("postId");
261
- CREATE INDEX "idx_comments_user" ON "comments" USING btree ("userId");
262
- CREATE INDEX "idx_comments_parent" ON "comments" USING btree ("parentId");
263
- CREATE UNIQUE INDEX "idx_tags_slug" ON "tags" USING btree ("slug");
264
- CREATE INDEX "idx_tags_name" ON "tags" USING btree ("name");
265
- CREATE UNIQUE INDEX "idx_postTags_post_tag" ON "postTags" USING btree ("postId","tagId");
266
- CREATE INDEX "idx_postTags_tag" ON "postTags" USING btree ("tagId");"
272
+ CREATE UNIQUE INDEX "idx_outbox_versionstamp" ON "fragno_db_outbox" USING btree ("versionstamp");
273
+ CREATE INDEX "idx_outbox_uow" ON "fragno_db_outbox" USING btree ("uowId");
274
+ CREATE UNIQUE INDEX "idx_users_email" ON "test"."users" USING btree ("email");
275
+ CREATE INDEX "idx_users_name" ON "test"."users" USING btree ("name");
276
+ CREATE INDEX "idx_users_active" ON "test"."users" USING btree ("isActive");
277
+ CREATE INDEX "idx_posts_user" ON "test"."posts" USING btree ("userId");
278
+ CREATE INDEX "idx_posts_title" ON "test"."posts" USING btree ("title");
279
+ CREATE UNIQUE INDEX "idx_posts_slug" ON "test"."posts" USING btree ("slug");
280
+ CREATE INDEX "idx_posts_published" ON "test"."posts" USING btree ("isPublished","publishedAt");
281
+ CREATE INDEX "idx_comments_post" ON "test"."comments" USING btree ("postId");
282
+ CREATE INDEX "idx_comments_user" ON "test"."comments" USING btree ("userId");
283
+ CREATE INDEX "idx_comments_parent" ON "test"."comments" USING btree ("parentId");
284
+ CREATE UNIQUE INDEX "idx_tags_slug" ON "test"."tags" USING btree ("slug");
285
+ CREATE INDEX "idx_tags_name" ON "test"."tags" USING btree ("name");
286
+ CREATE UNIQUE INDEX "idx_postTags_post_tag" ON "test"."postTags" USING btree ("postId","tagId");
287
+ CREATE INDEX "idx_postTags_tag" ON "test"."postTags" USING btree ("tagId");"
267
288
  `);
268
289
  });
269
290
  });