@fragno-dev/db 0.2.1 → 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 (362) hide show
  1. package/.turbo/turbo-build.log +206 -140
  2. package/CHANGELOG.md +67 -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 +38 -28
  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 +45 -96
  80. package/dist/db-fragment-definition-builder.d.ts.map +1 -1
  81. package/dist/db-fragment-definition-builder.js +121 -99
  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 +172 -9
  92. package/dist/fragments/internal-fragment.d.ts.map +1 -1
  93. package/dist/fragments/internal-fragment.js +193 -74
  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 +47 -4
  106. package/dist/hooks/hooks.d.ts.map +1 -1
  107. package/dist/hooks/hooks.js +106 -39
  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 +17 -10
  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 +351 -100
  165. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
  166. package/dist/query/unit-of-work/execute-unit-of-work.js +440 -267
  167. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
  168. package/dist/query/unit-of-work/unit-of-work.d.ts +67 -22
  169. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
  170. package/dist/query/unit-of-work/unit-of-work.js +110 -13
  171. package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
  172. package/dist/query/value-decoding.js +8 -5
  173. package/dist/query/value-decoding.js.map +1 -1
  174. package/dist/query/value-encoding.js +29 -9
  175. package/dist/query/value-encoding.js.map +1 -1
  176. package/dist/schema/create.d.ts +40 -14
  177. package/dist/schema/create.d.ts.map +1 -1
  178. package/dist/schema/create.js +82 -42
  179. package/dist/schema/create.js.map +1 -1
  180. package/dist/schema/generate-id.d.ts +20 -0
  181. package/dist/schema/generate-id.d.ts.map +1 -0
  182. package/dist/schema/generate-id.js +28 -0
  183. package/dist/schema/generate-id.js.map +1 -0
  184. package/dist/schema/type-conversion/create-sql-type-mapper.js +3 -2
  185. package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
  186. package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
  187. package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
  188. package/dist/schema/validator.d.ts +10 -0
  189. package/dist/schema/validator.d.ts.map +1 -0
  190. package/dist/schema/validator.js +123 -0
  191. package/dist/schema/validator.js.map +1 -0
  192. package/dist/schema-output/drizzle.d.ts +30 -0
  193. package/dist/schema-output/drizzle.d.ts.map +1 -0
  194. package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +82 -56
  195. package/dist/schema-output/drizzle.js.map +1 -0
  196. package/dist/schema-output/prisma.d.ts +17 -0
  197. package/dist/schema-output/prisma.d.ts.map +1 -0
  198. package/dist/schema-output/prisma.js +296 -0
  199. package/dist/schema-output/prisma.js.map +1 -0
  200. package/dist/util/default-database-adapter.js +61 -0
  201. package/dist/util/default-database-adapter.js.map +1 -0
  202. package/dist/with-database.d.ts +1 -1
  203. package/dist/with-database.d.ts.map +1 -1
  204. package/dist/with-database.js +12 -3
  205. package/dist/with-database.js.map +1 -1
  206. package/package.json +43 -28
  207. package/src/adapters/adapters.ts +30 -24
  208. package/src/adapters/drizzle/migrate-drizzle.test.ts +54 -33
  209. package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +599 -0
  210. package/src/adapters/drizzle/test-utils.ts +12 -8
  211. package/src/adapters/generic-sql/driver-config.ts +38 -0
  212. package/src/adapters/generic-sql/generic-sql-adapter.test.ts +5 -5
  213. package/src/adapters/generic-sql/generic-sql-adapter.ts +110 -24
  214. package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +54 -0
  215. package/src/adapters/generic-sql/generic-sql-uow-executor.ts +231 -3
  216. package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +118 -0
  217. package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +26 -8
  218. package/src/adapters/generic-sql/migration/dialect/mysql.ts +46 -8
  219. package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +25 -7
  220. package/src/adapters/generic-sql/migration/dialect/postgres.ts +8 -4
  221. package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +47 -8
  222. package/src/adapters/generic-sql/migration/dialect/sqlite.ts +27 -12
  223. package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +128 -39
  224. package/src/adapters/generic-sql/migration/prepared-migrations.ts +15 -8
  225. package/src/adapters/generic-sql/migration/sql-generator.ts +142 -65
  226. package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +9 -6
  227. package/src/adapters/generic-sql/query/cursor-utils.test.ts +271 -0
  228. package/src/adapters/generic-sql/query/cursor-utils.ts +41 -6
  229. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +27 -27
  230. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +38 -24
  231. package/src/adapters/generic-sql/query/select-builder.test.ts +15 -11
  232. package/src/adapters/generic-sql/query/select-builder.ts +6 -2
  233. package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +52 -2
  234. package/src/adapters/generic-sql/query/sql-query-compiler.ts +50 -15
  235. package/src/adapters/generic-sql/query/where-builder.test.ts +91 -17
  236. package/src/adapters/generic-sql/query/where-builder.ts +90 -38
  237. package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +6 -6
  238. package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +806 -0
  239. package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +11 -11
  240. package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +49 -35
  241. package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +48 -32
  242. package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +6 -6
  243. package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
  244. package/src/adapters/generic-sql/uow-decoder.test.ts +1 -1
  245. package/src/adapters/generic-sql/uow-decoder.ts +21 -3
  246. package/src/adapters/generic-sql/uow-encoder.test.ts +33 -2
  247. package/src/adapters/generic-sql/uow-encoder.ts +50 -11
  248. package/src/adapters/in-memory/condition-evaluator.test.ts +193 -0
  249. package/src/adapters/in-memory/condition-evaluator.ts +275 -0
  250. package/src/adapters/in-memory/errors.ts +20 -0
  251. package/src/adapters/in-memory/in-memory-adapter.ts +277 -0
  252. package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +296 -0
  253. package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +100 -0
  254. package/src/adapters/in-memory/in-memory-uow.ts +1348 -0
  255. package/src/adapters/in-memory/index.ts +3 -0
  256. package/src/adapters/in-memory/options.test.ts +41 -0
  257. package/src/adapters/in-memory/options.ts +87 -0
  258. package/src/adapters/in-memory/reference-resolution.test.ts +50 -0
  259. package/src/adapters/in-memory/reference-resolution.ts +67 -0
  260. package/src/adapters/in-memory/sorted-array-index.test.ts +123 -0
  261. package/src/adapters/in-memory/sorted-array-index.ts +228 -0
  262. package/src/adapters/in-memory/store.test.ts +68 -0
  263. package/src/adapters/in-memory/store.ts +145 -0
  264. package/src/adapters/in-memory/value-comparison.ts +53 -0
  265. package/src/adapters/in-memory/value-normalization.test.ts +57 -0
  266. package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1163 -0
  267. package/src/adapters/shared/from-unit-of-work-compiler.ts +3 -1
  268. package/src/adapters/shared/uow-operation-compiler.ts +26 -16
  269. package/src/adapters/sql/index.ts +12 -0
  270. package/src/db-fragment-definition-builder.test.ts +88 -54
  271. package/src/db-fragment-definition-builder.ts +201 -322
  272. package/src/db-fragment-instantiator.test.ts +169 -101
  273. package/src/db-fragment-integration.test.ts +301 -149
  274. package/src/dispatchers/cloudflare-do/index.test.ts +73 -0
  275. package/src/dispatchers/cloudflare-do/index.ts +104 -0
  276. package/src/dispatchers/node/index.test.ts +91 -0
  277. package/src/dispatchers/node/index.ts +87 -0
  278. package/src/fragments/internal-fragment.routes.ts +42 -0
  279. package/src/fragments/internal-fragment.schema.ts +51 -0
  280. package/src/fragments/internal-fragment.test.ts +730 -274
  281. package/src/fragments/internal-fragment.ts +447 -154
  282. package/src/hooks/durable-hooks-processor.test.ts +117 -0
  283. package/src/hooks/durable-hooks-processor.ts +67 -0
  284. package/src/hooks/hooks.test.ts +411 -259
  285. package/src/hooks/hooks.ts +265 -66
  286. package/src/migration-engine/auto-from-schema.test.ts +14 -14
  287. package/src/migration-engine/auto-from-schema.ts +5 -2
  288. package/src/migration-engine/create.test.ts +2 -2
  289. package/src/migration-engine/generation-engine.test.ts +229 -104
  290. package/src/migration-engine/generation-engine.ts +94 -64
  291. package/src/migration-engine/shared.ts +1 -0
  292. package/src/mod.ts +78 -30
  293. package/src/naming/sql-naming.ts +180 -0
  294. package/src/outbox/outbox-builder.ts +241 -0
  295. package/src/outbox/outbox.test.ts +253 -0
  296. package/src/outbox/outbox.ts +137 -0
  297. package/src/query/column-defaults.ts +41 -3
  298. package/src/query/condition-builder.test.ts +3 -3
  299. package/src/query/cursor.test.ts +116 -18
  300. package/src/query/cursor.ts +75 -26
  301. package/src/query/db-now.ts +6 -0
  302. package/src/query/query-type.test.ts +2 -2
  303. package/src/query/serialize/create-sql-serializer.ts +7 -2
  304. package/src/query/serialize/dialect/mysql-serializer.ts +12 -4
  305. package/src/query/serialize/dialect/postgres-serializer.ts +34 -4
  306. package/src/query/serialize/dialect/sqlite-serializer.test.ts +51 -1
  307. package/src/query/serialize/dialect/sqlite-serializer.ts +92 -9
  308. package/src/query/serialize/sql-serializer.ts +4 -4
  309. package/src/query/simple-query-interface.ts +5 -0
  310. package/src/query/unit-of-work/execute-unit-of-work.test.ts +1512 -1458
  311. package/src/query/unit-of-work/execute-unit-of-work.ts +1708 -596
  312. package/src/query/unit-of-work/tx-builder.test.ts +1041 -0
  313. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +32 -32
  314. package/src/query/unit-of-work/unit-of-work-types.test.ts +1 -1
  315. package/src/query/unit-of-work/unit-of-work.test.ts +231 -36
  316. package/src/query/unit-of-work/unit-of-work.ts +229 -31
  317. package/src/query/value-decoding.test.ts +13 -2
  318. package/src/query/value-decoding.ts +17 -4
  319. package/src/query/value-encoding.test.ts +85 -2
  320. package/src/query/value-encoding.ts +56 -6
  321. package/src/schema/create.test.ts +129 -42
  322. package/src/schema/create.ts +187 -47
  323. package/src/schema/generate-id.test.ts +57 -0
  324. package/src/schema/generate-id.ts +38 -0
  325. package/src/schema/serialize.test.ts +14 -2
  326. package/src/schema/type-conversion/create-sql-type-mapper.ts +7 -2
  327. package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
  328. package/src/schema/type-conversion/type-mapping.test.ts +25 -1
  329. package/src/schema/validator.test.ts +197 -0
  330. package/src/schema/validator.ts +231 -0
  331. package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +179 -129
  332. package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +143 -93
  333. package/src/schema-output/prisma.test.ts +536 -0
  334. package/src/schema-output/prisma.ts +573 -0
  335. package/src/util/default-database-adapter.ts +106 -0
  336. package/src/with-database.ts +22 -3
  337. package/tsdown.config.ts +6 -4
  338. package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
  339. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
  340. package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
  341. package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
  342. package/dist/adapters/drizzle/generate.d.ts +0 -30
  343. package/dist/adapters/drizzle/generate.d.ts.map +0 -1
  344. package/dist/adapters/drizzle/generate.js.map +0 -1
  345. package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
  346. package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
  347. package/dist/adapters/kysely/kysely-adapter.js +0 -17
  348. package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
  349. package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
  350. package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
  351. package/dist/adapters/shared/table-name-mapper.js +0 -43
  352. package/dist/adapters/shared/table-name-mapper.js.map +0 -1
  353. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
  354. package/dist/schema-generator/schema-generator.d.ts +0 -15
  355. package/dist/schema-generator/schema-generator.d.ts.map +0 -1
  356. package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
  357. package/src/adapters/kysely/kysely-adapter.ts +0 -27
  358. package/src/adapters/shared/table-name-mapper.ts +0 -50
  359. package/src/schema-generator/schema-generator.ts +0 -12
  360. package/src/shared/config.ts +0 -10
  361. package/src/shared/connection-pool.ts +0 -24
  362. package/src/shared/prisma.ts +0 -45
@@ -1,6 +1,7 @@
1
+ import { generateId } from "../../schema/generate-id.js";
1
2
  import { FragnoId } from "../../schema/create.js";
2
- import { buildCondition } from "../condition-builder.js";
3
3
  import { Cursor } from "../cursor.js";
4
+ import { buildCondition } from "../condition-builder.js";
4
5
 
5
6
  //#region src/query/unit-of-work/unit-of-work.ts
6
7
  /**
@@ -303,7 +304,7 @@ function buildJoinIndexed(table, fn) {
303
304
  for (const name in table.relations) {
304
305
  const relation = table.relations[name];
305
306
  builder[name] = (builderFn) => {
306
- const joinBuilder = new JoinFindBuilder(relation.table.ormName, relation.table);
307
+ const joinBuilder = new JoinFindBuilder(relation.table.name, relation.table);
307
308
  if (builderFn) builderFn(joinBuilder);
308
309
  const config = joinBuilder.build();
309
310
  let conditions;
@@ -345,6 +346,11 @@ function buildJoinIndexed(table, fn) {
345
346
  function createUnitOfWork(compiler, executor, decoder, schemaNamespaceMap, name) {
346
347
  return new UnitOfWork(compiler, executor, decoder, name, void 0, schemaNamespaceMap);
347
348
  }
349
+ function isUowInstrumentationInjection(value) {
350
+ if (!value || typeof value !== "object") return false;
351
+ const injection = value;
352
+ return injection.type === "conflict" || injection.type === "error";
353
+ }
348
354
  /**
349
355
  * Encapsulates a promise with its resolver/rejecter functions.
350
356
  * Simplifies management of deferred promises with built-in error handling.
@@ -535,7 +541,7 @@ var UOWChildCoordinator = class {
535
541
  var UnitOfWork = class UnitOfWork {
536
542
  #name;
537
543
  #config;
538
- #nonce;
544
+ #idempotencyKey;
539
545
  #state = "building-retrieval";
540
546
  #retrievalOps = [];
541
547
  #mutationOps = [];
@@ -558,7 +564,40 @@ var UnitOfWork = class UnitOfWork {
558
564
  this.#schemaNamespaceMap = schemaNamespaceMap ?? /* @__PURE__ */ new WeakMap();
559
565
  this.#name = name;
560
566
  this.#config = config;
561
- this.#nonce = config?.nonce ?? crypto.randomUUID();
567
+ this.#idempotencyKey = config?.idempotencyKey ?? crypto.randomUUID();
568
+ }
569
+ #createInstrumentationContext(phase) {
570
+ return {
571
+ phase,
572
+ uowName: this.#name,
573
+ idempotencyKey: this.#idempotencyKey,
574
+ retrievalOpsCount: this.#retrievalOps.length,
575
+ mutationOpsCount: this.#mutationOps.length,
576
+ uow: this
577
+ };
578
+ }
579
+ async #runInstrumentation(phase) {
580
+ const hook = this.#config?.instrumentation?.[phase];
581
+ if (!hook) return null;
582
+ const result = await hook(this.#createInstrumentationContext(phase));
583
+ if (isUowInstrumentationInjection(result)) return result;
584
+ return null;
585
+ }
586
+ async #runInstrumentationFinalizer(phase) {
587
+ const hook = this.#config?.instrumentationFinalizer?.[phase];
588
+ if (!hook) return;
589
+ await hook(this.#createInstrumentationContext(phase));
590
+ }
591
+ #handleRetrieveInjection(injection) {
592
+ if (injection.type === "error") throw injection.error;
593
+ throw new Error(injection.reason ?? "Injected conflict");
594
+ }
595
+ #handleMutationInjection(injection) {
596
+ if (injection.type === "error") throw injection.error;
597
+ this.#state = "executed";
598
+ this.#createdInternalIds.length = 0;
599
+ this.#mutationPhaseDeferred.resolve();
600
+ return { success: false };
562
601
  }
563
602
  /**
564
603
  * Register a schema with its namespace for cross-fragment operations.
@@ -592,7 +631,7 @@ var UnitOfWork = class UnitOfWork {
592
631
  const readyFor = options?.readyFor ?? "mutation";
593
632
  const child = new UnitOfWork(this.#compiler, this.#executor, this.#decoder, this.#name, {
594
633
  ...this.#config,
595
- nonce: this.#nonce
634
+ idempotencyKey: this.#idempotencyKey
596
635
  }, this.#schemaNamespaceMap);
597
636
  child.#coordinator.setAsRestricted(this, this.#coordinator);
598
637
  child.#retrievalOps = this.#retrievalOps;
@@ -663,8 +702,8 @@ var UnitOfWork = class UnitOfWork {
663
702
  get name() {
664
703
  return this.#name;
665
704
  }
666
- get nonce() {
667
- return this.#nonce;
705
+ get idempotencyKey() {
706
+ return this.#idempotencyKey;
668
707
  }
669
708
  /**
670
709
  * Promise that resolves when the retrieval phase is executed
@@ -687,11 +726,18 @@ var UnitOfWork = class UnitOfWork {
687
726
  async executeRetrieve() {
688
727
  if (this.#coordinator.isRestricted) throw new Error("executeRetrieve() cannot be called on restricted child UOWs");
689
728
  if (this.#state !== "building-retrieval") throw new Error(`Cannot execute retrieval from state ${this.#state}. Must be in building-retrieval state.`);
729
+ let afterRan = false;
730
+ let failed = false;
690
731
  try {
691
732
  await this.#coordinator.retrievalReadinessPromise;
733
+ const beforeInjection = await this.#runInstrumentation("beforeRetrieve");
734
+ if (beforeInjection) return this.#handleRetrieveInjection(beforeInjection);
692
735
  if (this.#retrievalOps.length === 0) {
693
736
  this.#state = "building-mutation";
694
737
  const emptyResults = [];
738
+ afterRan = true;
739
+ const afterInjection$1 = await this.#runInstrumentation("afterRetrieve");
740
+ if (afterInjection$1) return this.#handleRetrieveInjection(afterInjection$1);
695
741
  this.#retrievalPhaseDeferred.resolve(emptyResults);
696
742
  return emptyResults;
697
743
  }
@@ -706,17 +752,31 @@ var UnitOfWork = class UnitOfWork {
706
752
  if (this.#config?.dryRun) {
707
753
  this.#state = "executed";
708
754
  const emptyResults = [];
755
+ afterRan = true;
756
+ const afterInjection$1 = await this.#runInstrumentation("afterRetrieve");
757
+ if (afterInjection$1) return this.#handleRetrieveInjection(afterInjection$1);
709
758
  this.#retrievalPhaseDeferred.resolve(emptyResults);
710
759
  return emptyResults;
711
760
  }
712
761
  const rawResults = await this.#executor.executeRetrievalPhase(retrievalBatch);
713
762
  this.#retrievalResults = this.#decoder.decode(rawResults, this.#retrievalOps);
714
763
  this.#state = "building-mutation";
764
+ afterRan = true;
765
+ const afterInjection = await this.#runInstrumentation("afterRetrieve");
766
+ if (afterInjection) return this.#handleRetrieveInjection(afterInjection);
715
767
  this.#retrievalPhaseDeferred.resolve(this.#retrievalResults);
716
768
  return this.#retrievalResults;
717
769
  } catch (error) {
718
770
  this.#retrievalError = error instanceof Error ? error : new Error(String(error));
771
+ failed = true;
719
772
  throw error;
773
+ } finally {
774
+ try {
775
+ await this.#runInstrumentationFinalizer("afterRetrieve");
776
+ } catch {}
777
+ if (!afterRan && failed) try {
778
+ await this.#runInstrumentation("afterRetrieve");
779
+ } catch {}
720
780
  }
721
781
  }
722
782
  /**
@@ -726,18 +786,26 @@ var UnitOfWork = class UnitOfWork {
726
786
  async executeMutations() {
727
787
  if (this.#coordinator.isRestricted) throw new Error("executeMutations() cannot be called on restricted child UOWs");
728
788
  if (this.#state === "executed") throw new Error(`Cannot execute mutations from state ${this.#state}.`);
789
+ let afterRan = false;
790
+ let failed = false;
729
791
  try {
730
792
  await this.#coordinator.mutationReadinessPromise;
793
+ const beforeInjection = await this.#runInstrumentation("beforeMutate");
794
+ if (beforeInjection) return this.#handleMutationInjection(beforeInjection);
731
795
  const mutationBatch = [];
732
796
  for (const op of this.#mutationOps) {
733
797
  const compiled = this.#compiler.compileMutationOperation(op);
734
798
  if (compiled !== null) {
799
+ compiled.uowId = this.#idempotencyKey;
735
800
  this.#config?.onQuery?.(compiled);
736
801
  mutationBatch.push(compiled);
737
802
  }
738
803
  }
739
804
  if (this.#config?.dryRun) {
740
805
  this.#state = "executed";
806
+ afterRan = true;
807
+ const afterInjection$1 = await this.#runInstrumentation("afterMutate");
808
+ if (afterInjection$1) return this.#handleMutationInjection(afterInjection$1);
741
809
  this.#mutationPhaseDeferred.resolve();
742
810
  return { success: true };
743
811
  }
@@ -747,11 +815,22 @@ var UnitOfWork = class UnitOfWork {
747
815
  this.#createdInternalIds.length = 0;
748
816
  this.#createdInternalIds.push(...result.createdInternalIds);
749
817
  }
818
+ afterRan = true;
819
+ const afterInjection = await this.#runInstrumentation("afterMutate");
820
+ if (afterInjection) return this.#handleMutationInjection(afterInjection);
750
821
  this.#mutationPhaseDeferred.resolve();
751
822
  return { success: result.success };
752
823
  } catch (error) {
753
824
  this.#mutationError = error instanceof Error ? error : new Error(String(error));
825
+ failed = true;
754
826
  throw error;
827
+ } finally {
828
+ try {
829
+ await this.#runInstrumentationFinalizer("afterMutate");
830
+ } catch {}
831
+ if (!afterRan && failed) try {
832
+ await this.#runInstrumentation("afterMutate");
833
+ } catch {}
755
834
  }
756
835
  }
757
836
  /**
@@ -819,7 +898,10 @@ var UnitOfWork = class UnitOfWork {
819
898
  const mutationBatch = [];
820
899
  for (const op of this.#mutationOps) {
821
900
  const compiled = compiler.compileMutationOperation(op);
822
- if (compiled !== null) mutationBatch.push(compiled);
901
+ if (compiled !== null) {
902
+ compiled.uowId = this.#idempotencyKey;
903
+ mutationBatch.push(compiled);
904
+ }
823
905
  }
824
906
  return {
825
907
  name: this.#name,
@@ -853,8 +935,8 @@ var TypedUnitOfWork = class {
853
935
  get name() {
854
936
  return this.#uow.name;
855
937
  }
856
- get nonce() {
857
- return this.#uow.nonce;
938
+ get idempotencyKey() {
939
+ return this.#uow.idempotencyKey;
858
940
  }
859
941
  get state() {
860
942
  return this.#uow.state;
@@ -966,22 +1048,37 @@ var TypedUnitOfWork = class {
966
1048
  this.#operationIndices.push(operationIndex);
967
1049
  return this;
968
1050
  }
1051
+ /**
1052
+ * Generate a new ID for a table without creating a record.
1053
+ * This is useful when you need to reference an ID before actually creating the record,
1054
+ * or when you need to pass the ID to external services.
1055
+ *
1056
+ * @example
1057
+ * ```ts
1058
+ * const userId = uow.generateId("users");
1059
+ * // Use userId in related records or pass to external services
1060
+ * uow.create("users", { id: userId, name: "John" });
1061
+ * ```
1062
+ */
1063
+ generateId(tableName) {
1064
+ return generateId(this.#schema, tableName);
1065
+ }
969
1066
  create(tableName, values) {
970
1067
  const tableSchema = this.#schema.tables[tableName];
971
1068
  if (!tableSchema) throw new Error(`Table ${tableName} not found in schema`);
972
1069
  const idColumn = tableSchema.getIdColumn();
973
1070
  let externalId;
974
1071
  let updatedValues = values;
975
- const providedIdValue = values[idColumn.ormName];
1072
+ const providedIdValue = values[idColumn.name];
976
1073
  if (providedIdValue !== void 0) if (typeof providedIdValue === "object" && providedIdValue !== null && "externalId" in providedIdValue) externalId = providedIdValue.externalId;
977
1074
  else externalId = providedIdValue;
978
1075
  else {
979
1076
  const generated = idColumn.generateDefaultValue();
980
- if (generated === void 0) throw new Error(`No ID value provided and ID column ${idColumn.ormName} has no default generator`);
1077
+ if (generated === void 0) throw new Error(`No ID value provided and ID column ${idColumn.name} has no default generator`);
981
1078
  externalId = generated;
982
1079
  updatedValues = {
983
1080
  ...values,
984
- [idColumn.ormName]: externalId
1081
+ [idColumn.name]: externalId
985
1082
  };
986
1083
  }
987
1084
  this.#uow.addMutationOperation({