@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
@@ -4,6 +4,7 @@ import {
4
4
  type UOWCompiler,
5
5
  type UOWDecoder,
6
6
  createUnitOfWork,
7
+ UnitOfWork,
7
8
  type InferIdColumnName,
8
9
  type IndexColumns,
9
10
  } from "./unit-of-work";
@@ -38,7 +39,7 @@ function createMockDecoder(): UOWDecoder {
38
39
 
39
40
  describe("FindBuilder", () => {
40
41
  it("should support primary index", () => {
41
- const testSchema = schema((s) =>
42
+ const testSchema = schema("test", (s) =>
42
43
  s.addTable("users", (t) =>
43
44
  t
44
45
  .addColumn("id", idColumn())
@@ -59,7 +60,7 @@ describe("FindBuilder", () => {
59
60
  });
60
61
 
61
62
  it("should support custom indexes", () => {
62
- const testSchema = schema((s) =>
63
+ const testSchema = schema("test", (s) =>
63
64
  s.addTable("users", (t) =>
64
65
  t
65
66
  .addColumn("id", idColumn())
@@ -82,7 +83,7 @@ describe("FindBuilder", () => {
82
83
  });
83
84
 
84
85
  it("should support cursor-based pagination", () => {
85
- const testSchema = schema((s) =>
86
+ const testSchema = schema("test", (s) =>
86
87
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
87
88
  );
88
89
 
@@ -102,7 +103,7 @@ describe("FindBuilder", () => {
102
103
  });
103
104
 
104
105
  it("should support backward cursor pagination", () => {
105
- const testSchema = schema((s) =>
106
+ const testSchema = schema("test", (s) =>
106
107
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
107
108
  );
108
109
 
@@ -122,7 +123,7 @@ describe("FindBuilder", () => {
122
123
  });
123
124
 
124
125
  it("should throw RangeError for pageSize <= 0", () => {
125
- const testSchema = schema((s) =>
126
+ const testSchema = schema("test", (s) =>
126
127
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
127
128
  );
128
129
 
@@ -142,7 +143,7 @@ describe("FindBuilder", () => {
142
143
  });
143
144
 
144
145
  it("should throw RangeError for non-integer pageSize", () => {
145
- const testSchema = schema((s) =>
146
+ const testSchema = schema("test", (s) =>
146
147
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
147
148
  );
148
149
 
@@ -166,7 +167,7 @@ describe("FindBuilder", () => {
166
167
  });
167
168
 
168
169
  it("should throw if index doesn't exist", () => {
169
- const testSchema = schema((s) =>
170
+ const testSchema = schema("test", (s) =>
170
171
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
171
172
  );
172
173
 
@@ -177,7 +178,7 @@ describe("FindBuilder", () => {
177
178
  });
178
179
 
179
180
  it("should throw if finalized without index", () => {
180
- const testSchema = schema((s) =>
181
+ const testSchema = schema("test", (s) =>
181
182
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
182
183
  );
183
184
 
@@ -190,7 +191,7 @@ describe("FindBuilder", () => {
190
191
  });
191
192
 
192
193
  it("should support count operations", () => {
193
- const testSchema = schema((s) =>
194
+ const testSchema = schema("test", (s) =>
194
195
  s.addTable("users", (t) =>
195
196
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("age", "integer"),
196
197
  ),
@@ -205,7 +206,7 @@ describe("FindBuilder", () => {
205
206
  });
206
207
 
207
208
  it("should throw when using both select and selectCount", () => {
208
- const testSchema = schema((s) =>
209
+ const testSchema = schema("test", (s) =>
209
210
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
210
211
  );
211
212
 
@@ -228,7 +229,7 @@ describe("FindBuilder", () => {
228
229
  });
229
230
 
230
231
  it("should support orderByIndex", () => {
231
- const testSchema = schema((s) =>
232
+ const testSchema = schema("test", (s) =>
232
233
  s.addTable("users", (t) =>
233
234
  t
234
235
  .addColumn("id", idColumn())
@@ -257,7 +258,7 @@ describe("FindBuilder", () => {
257
258
  });
258
259
 
259
260
  it("should support join operations", () => {
260
- const testSchema = schema((s) =>
261
+ const testSchema = schema("test", (s) =>
261
262
  s
262
263
  .addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
263
264
  .addTable("posts", (t) =>
@@ -291,7 +292,7 @@ describe("FindBuilder", () => {
291
292
  });
292
293
 
293
294
  it("should support join operations without builder function", () => {
294
- const testSchema = schema((s) =>
295
+ const testSchema = schema("test", (s) =>
295
296
  s
296
297
  .addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
297
298
  .addTable("posts", (t) =>
@@ -325,7 +326,7 @@ describe("FindBuilder", () => {
325
326
  });
326
327
 
327
328
  it("should support join with whereIndex", () => {
328
- const testSchema = schema((s) =>
329
+ const testSchema = schema("test", (s) =>
329
330
  s
330
331
  .addTable("users", (t) =>
331
332
  t
@@ -373,7 +374,7 @@ describe("FindBuilder", () => {
373
374
  });
374
375
 
375
376
  it("should support join with orderByIndex", () => {
376
- const testSchema = schema((s) =>
377
+ const testSchema = schema("test", (s) =>
377
378
  s
378
379
  .addTable("users", (t) =>
379
380
  t
@@ -418,7 +419,7 @@ describe("FindBuilder", () => {
418
419
  });
419
420
 
420
421
  it("should support join with pageSize", () => {
421
- const testSchema = schema((s) =>
422
+ const testSchema = schema("test", (s) =>
422
423
  s
423
424
  .addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
424
425
  .addTable("posts", (t) =>
@@ -453,7 +454,7 @@ describe("FindBuilder", () => {
453
454
  });
454
455
 
455
456
  it("should throw RangeError for invalid pageSize in join", () => {
456
- const testSchema = schema((s) =>
457
+ const testSchema = schema("test", (s) =>
457
458
  s
458
459
  .addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
459
460
  .addTable("posts", (t) =>
@@ -498,7 +499,7 @@ describe("FindBuilder", () => {
498
499
  });
499
500
 
500
501
  it("should support nested joins", () => {
501
- const testSchema = schema((s) =>
502
+ const testSchema = schema("test", (s) =>
502
503
  s
503
504
  .addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
504
505
  .addTable("posts", (t) =>
@@ -564,7 +565,7 @@ describe("FindBuilder", () => {
564
565
  });
565
566
 
566
567
  describe("IndexedConditionBuilder", () => {
567
- const testSchema = schema((s) =>
568
+ const testSchema = schema("test", (s) =>
568
569
  s.addTable("users", (t) =>
569
570
  t
570
571
  .addColumn("id", idColumn())
@@ -585,7 +586,7 @@ describe("IndexedConditionBuilder", () => {
585
586
  const indexedColumns = new Set<string>();
586
587
  for (const index of Object.values(usersTable.indexes)) {
587
588
  for (const col of index.columns) {
588
- indexedColumns.add(col.ormName);
589
+ indexedColumns.add(col.name);
589
590
  }
590
591
  }
591
592
 
@@ -712,7 +713,7 @@ describe("IndexedConditionBuilder", () => {
712
713
  describe("type safety", () => {
713
714
  it("should restrict to only indexed columns at type level", () => {
714
715
  // This schema has "bio" column that is NOT indexed
715
- const typeTestSchema = schema((s) =>
716
+ const typeTestSchema = schema("typetest", (s) =>
716
717
  s.addTable("users", (t) =>
717
718
  t
718
719
  .addColumn("id", idColumn())
@@ -770,7 +771,7 @@ describe("IndexedConditionBuilder", () => {
770
771
  });
771
772
 
772
773
  describe("UpdateBuilder with string ID", () => {
773
- const testSchema = schema((s) =>
774
+ const testSchema = schema("test", (s) =>
774
775
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
775
776
  );
776
777
 
@@ -806,7 +807,7 @@ describe("UpdateBuilder with string ID", () => {
806
807
  });
807
808
 
808
809
  describe("DeleteBuilder with string ID", () => {
809
- const testSchema = schema((s) =>
810
+ const testSchema = schema("test", (s) =>
810
811
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
811
812
  );
812
813
 
@@ -838,8 +839,72 @@ describe("DeleteBuilder with string ID", () => {
838
839
  });
839
840
  });
840
841
 
842
+ describe("generateId", () => {
843
+ const testSchema = schema("test", (s) =>
844
+ s.addTable("users", (t) =>
845
+ t.addColumn("id", idColumn()).addColumn("email", "string").addColumn("name", "string"),
846
+ ),
847
+ );
848
+
849
+ it("should generate a new FragnoId without creating a record", () => {
850
+ const uow = createUnitOfWork(createMockCompiler(), createMockExecutor(), createMockDecoder());
851
+
852
+ const id = uow.forSchema(testSchema).generateId("users");
853
+
854
+ expect(id).toBeInstanceOf(FragnoId);
855
+ expect(id.externalId).toBeDefined();
856
+ expect(typeof id.externalId).toBe("string");
857
+ expect(id.externalId.length).toBeGreaterThan(0);
858
+ expect(id.version).toBe(0);
859
+
860
+ // No mutation operations should be added
861
+ expect(uow.getMutationOperations()).toHaveLength(0);
862
+ });
863
+
864
+ it("should generate unique IDs on each call", () => {
865
+ const uow = createUnitOfWork(createMockCompiler(), createMockExecutor(), createMockDecoder());
866
+ const typedUow = uow.forSchema(testSchema);
867
+
868
+ const id1 = typedUow.generateId("users");
869
+ const id2 = typedUow.generateId("users");
870
+
871
+ expect(id1.externalId).not.toBe(id2.externalId);
872
+ });
873
+
874
+ it("should allow using generated ID in create", async () => {
875
+ const executor = {
876
+ executeRetrievalPhase: async () => [],
877
+ executeMutationPhase: async () => ({
878
+ success: true,
879
+ createdInternalIds: [1n],
880
+ }),
881
+ };
882
+
883
+ const uow = createUnitOfWork(createMockCompiler(), executor, createMockDecoder());
884
+ const typedUow = uow.forSchema(testSchema);
885
+
886
+ const id = typedUow.generateId("users");
887
+ typedUow.create("users", { id, email: "test@example.com", name: "Test" });
888
+
889
+ await uow.executeMutations();
890
+ const createdIds = uow.getCreatedIds();
891
+
892
+ expect(createdIds).toHaveLength(1);
893
+ expect(createdIds[0].externalId).toBe(id.externalId);
894
+ });
895
+
896
+ it("should throw for non-existent table", () => {
897
+ const uow = createUnitOfWork(createMockCompiler(), createMockExecutor(), createMockDecoder());
898
+
899
+ expect(() => {
900
+ // @ts-expect-error - testing runtime error for non-existent table
901
+ uow.forSchema(testSchema).generateId("nonexistent");
902
+ }).toThrow("Table nonexistent not found in schema");
903
+ });
904
+ });
905
+
841
906
  describe("getCreatedIds", () => {
842
- const testSchema = schema((s) =>
907
+ const testSchema = schema("test", (s) =>
843
908
  s.addTable("users", (t) =>
844
909
  t.addColumn("id", idColumn()).addColumn("email", "string").addColumn("name", "string"),
845
910
  ),
@@ -955,20 +1020,20 @@ describe("getCreatedIds", () => {
955
1020
  describe("Phase promises with multiple views", () => {
956
1021
  it("should return only operations added to the current view when using retrievalPhase promise", async () => {
957
1022
  // Create two separate schemas
958
- const schema1 = schema((s) =>
1023
+ const schema1 = schema("schema1", (s) =>
959
1024
  s.addTable("users", (t) =>
960
1025
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
961
1026
  ),
962
1027
  );
963
1028
 
964
- const schema2 = schema((s) =>
1029
+ const schema2 = schema("schema2", (s) =>
965
1030
  s.addTable("posts", (t) =>
966
1031
  t.addColumn("id", idColumn()).addColumn("title", "string").addColumn("content", "string"),
967
1032
  ),
968
1033
  );
969
1034
 
970
1035
  // Create a schema namespace map
971
- const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string>();
1036
+ const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string | null>();
972
1037
  schemaNamespaceMap.set(schema1, "namespace1");
973
1038
  schemaNamespaceMap.set(schema2, "namespace2");
974
1039
 
@@ -1025,7 +1090,7 @@ describe("Phase promises with multiple views", () => {
1025
1090
  });
1026
1091
 
1027
1092
  it("should isolate operations when getUnitOfWork is called multiple times with same schema", async () => {
1028
- const testSchema = schema((s) =>
1093
+ const testSchema = schema("test", (s) =>
1029
1094
  s.addTable("users", (t) =>
1030
1095
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1031
1096
  ),
@@ -1071,19 +1136,19 @@ describe("Phase promises with multiple views", () => {
1071
1136
  });
1072
1137
 
1073
1138
  it("should show that getCreatedIds returns ALL created IDs regardless of which view created them", async () => {
1074
- const schema1 = schema((s) =>
1139
+ const schema1 = schema("schema1", (s) =>
1075
1140
  s.addTable("users", (t) =>
1076
1141
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1077
1142
  ),
1078
1143
  );
1079
1144
 
1080
- const schema2 = schema((s) =>
1145
+ const schema2 = schema("schema2", (s) =>
1081
1146
  s.addTable("posts", (t) =>
1082
1147
  t.addColumn("id", idColumn()).addColumn("title", "string").addColumn("content", "string"),
1083
1148
  ),
1084
1149
  );
1085
1150
 
1086
- const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string>();
1151
+ const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string | null>();
1087
1152
  schemaNamespaceMap.set(schema1, "namespace1");
1088
1153
  schemaNamespaceMap.set(schema2, "namespace2");
1089
1154
 
@@ -1126,19 +1191,19 @@ describe("Phase promises with multiple views", () => {
1126
1191
  });
1127
1192
 
1128
1193
  it("should generate unique IDs when multiple views create items", async () => {
1129
- const schema1 = schema((s) =>
1194
+ const schema1 = schema("schema1", (s) =>
1130
1195
  s.addTable("users", (t) =>
1131
1196
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1132
1197
  ),
1133
1198
  );
1134
1199
 
1135
- const schema2 = schema((s) =>
1200
+ const schema2 = schema("schema2", (s) =>
1136
1201
  s.addTable("posts", (t) =>
1137
1202
  t.addColumn("id", idColumn()).addColumn("title", "string").addColumn("content", "string"),
1138
1203
  ),
1139
1204
  );
1140
1205
 
1141
- const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string>();
1206
+ const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string | null>();
1142
1207
  schemaNamespaceMap.set(schema1, "namespace1");
1143
1208
  schemaNamespaceMap.set(schema2, "namespace2");
1144
1209
 
@@ -1193,8 +1258,138 @@ describe("Phase promises with multiple views", () => {
1193
1258
  });
1194
1259
  });
1195
1260
 
1261
+ describe("Instrumentation", () => {
1262
+ const testSchema = schema("test", (s) =>
1263
+ s.addTable("users", (t) =>
1264
+ t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1265
+ ),
1266
+ );
1267
+
1268
+ it("should run instrumentation hooks around retrieve and mutate phases", async () => {
1269
+ const calls: string[] = [];
1270
+ const contexts: Array<{
1271
+ phase: string;
1272
+ idempotencyKey: string;
1273
+ retrievalOpsCount: number;
1274
+ mutationOpsCount: number;
1275
+ }> = [];
1276
+
1277
+ const executor = {
1278
+ executeRetrievalPhase: async () => [[]],
1279
+ executeMutationPhase: async () => ({ success: true, createdInternalIds: [] }),
1280
+ };
1281
+
1282
+ const uow = new UnitOfWork(createMockCompiler(), executor, createMockDecoder(), undefined, {
1283
+ instrumentation: {
1284
+ beforeRetrieve: (ctx) => {
1285
+ calls.push("beforeRetrieve");
1286
+ contexts.push({
1287
+ phase: ctx.phase,
1288
+ idempotencyKey: ctx.idempotencyKey,
1289
+ retrievalOpsCount: ctx.retrievalOpsCount,
1290
+ mutationOpsCount: ctx.mutationOpsCount,
1291
+ });
1292
+ },
1293
+ afterRetrieve: (ctx) => {
1294
+ calls.push("afterRetrieve");
1295
+ contexts.push({
1296
+ phase: ctx.phase,
1297
+ idempotencyKey: ctx.idempotencyKey,
1298
+ retrievalOpsCount: ctx.retrievalOpsCount,
1299
+ mutationOpsCount: ctx.mutationOpsCount,
1300
+ });
1301
+ },
1302
+ beforeMutate: (ctx) => {
1303
+ calls.push("beforeMutate");
1304
+ contexts.push({
1305
+ phase: ctx.phase,
1306
+ idempotencyKey: ctx.idempotencyKey,
1307
+ retrievalOpsCount: ctx.retrievalOpsCount,
1308
+ mutationOpsCount: ctx.mutationOpsCount,
1309
+ });
1310
+ },
1311
+ afterMutate: (ctx) => {
1312
+ calls.push("afterMutate");
1313
+ contexts.push({
1314
+ phase: ctx.phase,
1315
+ idempotencyKey: ctx.idempotencyKey,
1316
+ retrievalOpsCount: ctx.retrievalOpsCount,
1317
+ mutationOpsCount: ctx.mutationOpsCount,
1318
+ });
1319
+ },
1320
+ },
1321
+ });
1322
+
1323
+ const typed = uow.forSchema(testSchema);
1324
+ typed.find("users", (b) => b.whereIndex("primary"));
1325
+ typed.create("users", { name: "Alice", email: "alice@example.com" });
1326
+
1327
+ await uow.executeRetrieve();
1328
+ await uow.executeMutations();
1329
+
1330
+ expect(calls).toEqual(["beforeRetrieve", "afterRetrieve", "beforeMutate", "afterMutate"]);
1331
+
1332
+ for (const ctx of contexts) {
1333
+ expect(ctx.idempotencyKey).toBeTypeOf("string");
1334
+ expect(ctx.idempotencyKey.length).toBeGreaterThan(0);
1335
+ expect(ctx.retrievalOpsCount).toBe(1);
1336
+ expect(ctx.mutationOpsCount).toBe(1);
1337
+ }
1338
+ });
1339
+
1340
+ it("should short-circuit mutations on conflict injection", async () => {
1341
+ let mutationExecuted = false;
1342
+
1343
+ const executor = {
1344
+ executeRetrievalPhase: async () => [],
1345
+ executeMutationPhase: async () => {
1346
+ mutationExecuted = true;
1347
+ return { success: true, createdInternalIds: [] };
1348
+ },
1349
+ };
1350
+
1351
+ const uow = new UnitOfWork(createMockCompiler(), executor, createMockDecoder(), undefined, {
1352
+ instrumentation: {
1353
+ beforeMutate: () => ({ type: "conflict", reason: "Injected conflict" }),
1354
+ afterMutate: () => {
1355
+ throw new Error("afterMutate should not run");
1356
+ },
1357
+ },
1358
+ });
1359
+
1360
+ uow.forSchema(testSchema).create("users", { name: "Alice", email: "alice@example.com" });
1361
+
1362
+ const result = await uow.executeMutations();
1363
+ expect(result.success).toBe(false);
1364
+ expect(mutationExecuted).toBe(false);
1365
+ });
1366
+
1367
+ it("should throw on error injection before retrieval", async () => {
1368
+ let retrievalExecuted = false;
1369
+
1370
+ const executor = {
1371
+ executeRetrievalPhase: async () => {
1372
+ retrievalExecuted = true;
1373
+ return [];
1374
+ },
1375
+ executeMutationPhase: async () => ({ success: true, createdInternalIds: [] }),
1376
+ };
1377
+
1378
+ const uow = new UnitOfWork(createMockCompiler(), executor, createMockDecoder(), undefined, {
1379
+ instrumentation: {
1380
+ beforeRetrieve: () => ({ type: "error", error: new Error("Injected failure") }),
1381
+ },
1382
+ });
1383
+
1384
+ uow.forSchema(testSchema).find("users", (b) => b.whereIndex("primary"));
1385
+
1386
+ await expect(uow.executeRetrieve()).rejects.toThrow("Injected failure");
1387
+ expect(retrievalExecuted).toBe(false);
1388
+ });
1389
+ });
1390
+
1196
1391
  describe("Error Handling", () => {
1197
- const testSchema = schema((s) =>
1392
+ const testSchema = schema("test", (s) =>
1198
1393
  s.addTable("users", (t) =>
1199
1394
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1200
1395
  ),
@@ -1479,7 +1674,7 @@ describe("Error Handling", () => {
1479
1674
  });
1480
1675
 
1481
1676
  describe("findFirst convenience method", () => {
1482
- const testSchema = schema((s) =>
1677
+ const testSchema = schema("test", (s) =>
1483
1678
  s
1484
1679
  .addTable("users", (t) =>
1485
1680
  t