@fragno-dev/db 0.2.2 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/.turbo/turbo-build.log +404 -175
  2. package/CHANGELOG.md +109 -0
  3. package/README.md +54 -9
  4. package/dist/adapters/adapters.d.ts +23 -21
  5. package/dist/adapters/adapters.d.ts.map +1 -1
  6. package/dist/adapters/adapters.js.map +1 -1
  7. package/dist/adapters/generic-sql/driver-config.d.ts +16 -1
  8. package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -1
  9. package/dist/adapters/generic-sql/driver-config.js +23 -1
  10. package/dist/adapters/generic-sql/driver-config.js.map +1 -1
  11. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +24 -9
  12. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
  13. package/dist/adapters/generic-sql/generic-sql-adapter.js +60 -22
  14. package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
  15. package/dist/adapters/generic-sql/generic-sql-uow-executor.js +169 -3
  16. package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
  17. package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -1
  18. package/dist/adapters/generic-sql/migration/dialect/mysql.js +25 -6
  19. package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
  20. package/dist/adapters/generic-sql/migration/dialect/postgres.js +7 -6
  21. package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
  22. package/dist/adapters/generic-sql/migration/dialect/sqlite.js +193 -16
  23. package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
  24. package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -1
  25. package/dist/adapters/generic-sql/migration/executor.js +30 -3
  26. package/dist/adapters/generic-sql/migration/executor.js.map +1 -1
  27. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -1
  28. package/dist/adapters/generic-sql/migration/prepared-migrations.js +9 -9
  29. package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
  30. package/dist/adapters/generic-sql/migration/sql-generator.js +75 -52
  31. package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
  32. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +7 -6
  33. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
  34. package/dist/adapters/generic-sql/query/cursor-utils.js +42 -4
  35. package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -1
  36. package/dist/adapters/generic-sql/query/db-now-sql.js +27 -0
  37. package/dist/adapters/generic-sql/query/db-now-sql.js.map +1 -0
  38. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +32 -21
  39. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
  40. package/dist/adapters/generic-sql/query/select-builder.js +5 -3
  41. package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
  42. package/dist/adapters/generic-sql/query/sql-query-compiler.js +49 -18
  43. package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
  44. package/dist/adapters/generic-sql/query/where-builder.js +43 -29
  45. package/dist/adapters/generic-sql/query/where-builder.js.map +1 -1
  46. package/dist/adapters/generic-sql/sqlite-storage.d.ts +13 -0
  47. package/dist/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
  48. package/dist/adapters/generic-sql/sqlite-storage.js +15 -0
  49. package/dist/adapters/generic-sql/sqlite-storage.js.map +1 -0
  50. package/dist/adapters/generic-sql/uow-decoder.js +6 -2
  51. package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
  52. package/dist/adapters/generic-sql/uow-encoder.js +27 -8
  53. package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
  54. package/dist/adapters/in-memory/condition-evaluator.js +135 -0
  55. package/dist/adapters/in-memory/condition-evaluator.js.map +1 -0
  56. package/dist/adapters/in-memory/errors.d.ts +13 -0
  57. package/dist/adapters/in-memory/errors.d.ts.map +1 -0
  58. package/dist/adapters/in-memory/errors.js +23 -0
  59. package/dist/adapters/in-memory/errors.js.map +1 -0
  60. package/dist/adapters/in-memory/in-memory-adapter.d.ts +27 -0
  61. package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -0
  62. package/dist/adapters/in-memory/in-memory-adapter.js +196 -0
  63. package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
  64. package/dist/adapters/in-memory/in-memory-uow.js +871 -0
  65. package/dist/adapters/in-memory/in-memory-uow.js.map +1 -0
  66. package/dist/adapters/in-memory/index.d.ts +4 -0
  67. package/dist/adapters/in-memory/index.js +4 -0
  68. package/dist/adapters/in-memory/options.d.ts +30 -0
  69. package/dist/adapters/in-memory/options.d.ts.map +1 -0
  70. package/dist/adapters/in-memory/options.js +62 -0
  71. package/dist/adapters/in-memory/options.js.map +1 -0
  72. package/dist/adapters/in-memory/reference-resolution.js +26 -0
  73. package/dist/adapters/in-memory/reference-resolution.js.map +1 -0
  74. package/dist/adapters/in-memory/sorted-array-index.js +129 -0
  75. package/dist/adapters/in-memory/sorted-array-index.js.map +1 -0
  76. package/dist/adapters/in-memory/store.js +71 -0
  77. package/dist/adapters/in-memory/store.js.map +1 -0
  78. package/dist/adapters/in-memory/value-comparison.js +28 -0
  79. package/dist/adapters/in-memory/value-comparison.js.map +1 -0
  80. package/dist/adapters/shared/from-unit-of-work-compiler.js +51 -24
  81. package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -1
  82. package/dist/adapters/shared/uow-operation-compiler.js +11 -11
  83. package/dist/adapters/shared/uow-operation-compiler.js.map +1 -1
  84. package/dist/adapters/sql/index.d.ts +5 -0
  85. package/dist/adapters/sql/index.js +4 -0
  86. package/dist/browser/adapters/adapters.d.ts +61 -0
  87. package/dist/browser/adapters/adapters.d.ts.map +1 -0
  88. package/dist/browser/adapters/generic-sql/migration/executor.d.ts +15 -0
  89. package/dist/browser/adapters/generic-sql/migration/executor.d.ts.map +1 -0
  90. package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
  91. package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
  92. package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts +11 -0
  93. package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
  94. package/dist/browser/adapters/in-memory/in-memory-adapter.d.ts +5 -0
  95. package/dist/browser/adapters/in-memory/index.d.ts +2 -0
  96. package/dist/browser/adapters/in-memory/options.d.ts +1 -0
  97. package/dist/browser/db-fragment-definition-builder.d.ts +237 -0
  98. package/dist/browser/db-fragment-definition-builder.d.ts.map +1 -0
  99. package/dist/browser/durable-hooks.d.ts +3 -0
  100. package/dist/browser/fragments/internal-fragment.d.ts +317 -0
  101. package/dist/browser/fragments/internal-fragment.d.ts.map +1 -0
  102. package/dist/browser/fragments/internal-fragment.schema.d.ts +1 -0
  103. package/dist/browser/hooks/durable-hooks-logger.d.ts +10 -0
  104. package/dist/browser/hooks/durable-hooks-logger.d.ts.map +1 -0
  105. package/dist/browser/hooks/hooks.d.ts +146 -0
  106. package/dist/browser/hooks/hooks.d.ts.map +1 -0
  107. package/dist/browser/id.js +1 -0
  108. package/dist/browser/internal/adapter-registry.d.ts +4 -0
  109. package/dist/browser/internal/outbox-state.d.ts +2 -0
  110. package/dist/browser/mod.d.ts +15 -0
  111. package/dist/browser/mod.d.ts.map +1 -0
  112. package/dist/browser/mod.js +17 -0
  113. package/dist/browser/mod.js.map +1 -0
  114. package/dist/browser/mod2.d.ts +48 -0
  115. package/dist/browser/mod2.d.ts.map +1 -0
  116. package/dist/browser/naming/sql-naming.d.ts +19 -0
  117. package/dist/browser/naming/sql-naming.d.ts.map +1 -0
  118. package/dist/browser/outbox/outbox.d.ts +21 -0
  119. package/dist/browser/outbox/outbox.d.ts.map +1 -0
  120. package/dist/browser/query/column-defaults.js +1 -0
  121. package/dist/browser/query/condition-builder.d.ts +44 -0
  122. package/dist/browser/query/condition-builder.d.ts.map +1 -0
  123. package/dist/browser/query/condition-builder.js +97 -0
  124. package/dist/browser/query/condition-builder.js.map +1 -0
  125. package/dist/browser/query/cursor.d.ts +105 -0
  126. package/dist/browser/query/cursor.d.ts.map +1 -0
  127. package/dist/browser/query/cursor.js +150 -0
  128. package/dist/browser/query/cursor.js.map +1 -0
  129. package/dist/browser/query/db-now.d.ts +22 -0
  130. package/dist/browser/query/db-now.d.ts.map +1 -0
  131. package/dist/browser/query/db-now.js +33 -0
  132. package/dist/browser/query/db-now.js.map +1 -0
  133. package/dist/browser/query/orm/orm.d.ts +18 -0
  134. package/dist/browser/query/orm/orm.d.ts.map +1 -0
  135. package/dist/browser/query/simple-query-interface.d.ts +108 -0
  136. package/dist/browser/query/simple-query-interface.d.ts.map +1 -0
  137. package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts +423 -0
  138. package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
  139. package/dist/browser/query/unit-of-work/execute-unit-of-work.js +507 -0
  140. package/dist/browser/query/unit-of-work/execute-unit-of-work.js.map +1 -0
  141. package/dist/browser/query/unit-of-work/retry-policy.d.ts +23 -0
  142. package/dist/browser/query/unit-of-work/retry-policy.d.ts.map +1 -0
  143. package/dist/browser/query/unit-of-work/retry-policy.js +40 -0
  144. package/dist/browser/query/unit-of-work/retry-policy.js.map +1 -0
  145. package/dist/browser/query/unit-of-work/unit-of-work.d.ts +703 -0
  146. package/dist/browser/query/unit-of-work/unit-of-work.d.ts.map +1 -0
  147. package/dist/browser/query/unit-of-work/unit-of-work.js +1206 -0
  148. package/dist/browser/query/unit-of-work/unit-of-work.js.map +1 -0
  149. package/dist/browser/query/value-encoding.js +38 -0
  150. package/dist/browser/query/value-encoding.js.map +1 -0
  151. package/dist/browser/schema/create.d.ts +326 -0
  152. package/dist/browser/schema/create.d.ts.map +1 -0
  153. package/dist/browser/schema/create.js +89 -0
  154. package/dist/browser/schema/create.js.map +1 -0
  155. package/dist/browser/schema/generate-id.js +28 -0
  156. package/dist/browser/schema/generate-id.js.map +1 -0
  157. package/dist/browser/shared/providers.d.ts +6 -0
  158. package/dist/browser/shared/providers.d.ts.map +1 -0
  159. package/dist/browser/sql-driver/connection/connection-provider.d.ts +13 -0
  160. package/dist/browser/sql-driver/connection/connection-provider.d.ts.map +1 -0
  161. package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
  162. package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
  163. package/dist/browser/sql-driver/driver/runtime-driver.d.ts +23 -0
  164. package/dist/browser/sql-driver/driver/runtime-driver.d.ts.map +1 -0
  165. package/dist/browser/sql-driver/query-executor/plugin.d.ts +17 -0
  166. package/dist/browser/sql-driver/query-executor/plugin.d.ts.map +1 -0
  167. package/dist/browser/sql-driver/query-executor/query-executor.d.ts +36 -0
  168. package/dist/browser/sql-driver/query-executor/query-executor.d.ts.map +1 -0
  169. package/dist/browser/sql-driver/sql-driver-adapter.d.ts +29 -0
  170. package/dist/browser/sql-driver/sql-driver-adapter.d.ts.map +1 -0
  171. package/dist/browser/sql-driver/sql-driver.d.ts +38 -0
  172. package/dist/browser/sql-driver/sql-driver.d.ts.map +1 -0
  173. package/dist/browser/sync/commands.d.ts +15 -0
  174. package/dist/browser/sync/commands.d.ts.map +1 -0
  175. package/dist/browser/sync/commands.js +27 -0
  176. package/dist/browser/sync/commands.js.map +1 -0
  177. package/dist/browser/sync/types.d.ts +63 -0
  178. package/dist/browser/sync/types.d.ts.map +1 -0
  179. package/dist/browser/util/types.d.ts +8 -0
  180. package/dist/browser/util/types.d.ts.map +1 -0
  181. package/dist/browser/with-database.d.ts +29 -0
  182. package/dist/browser/with-database.d.ts.map +1 -0
  183. package/dist/client.d.ts +4 -0
  184. package/dist/client.js +5 -0
  185. package/dist/db-fragment-definition-builder.d.ts +101 -33
  186. package/dist/db-fragment-definition-builder.d.ts.map +1 -1
  187. package/dist/db-fragment-definition-builder.js +450 -60
  188. package/dist/db-fragment-definition-builder.js.map +1 -1
  189. package/dist/dispatchers/cloudflare-do/dispatcher.d.ts +20 -0
  190. package/dist/dispatchers/cloudflare-do/dispatcher.d.ts.map +1 -0
  191. package/dist/dispatchers/cloudflare-do/dispatcher.js +147 -0
  192. package/dist/dispatchers/cloudflare-do/dispatcher.js.map +1 -0
  193. package/dist/dispatchers/cloudflare-do/index.d.ts +11 -0
  194. package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
  195. package/dist/dispatchers/cloudflare-do/index.js +31 -0
  196. package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
  197. package/dist/dispatchers/node/dispatcher.d.ts +14 -0
  198. package/dist/dispatchers/node/dispatcher.d.ts.map +1 -0
  199. package/dist/dispatchers/node/dispatcher.js +80 -0
  200. package/dist/dispatchers/node/dispatcher.js.map +1 -0
  201. package/dist/dispatchers/node/index.d.ts +12 -0
  202. package/dist/dispatchers/node/index.d.ts.map +1 -0
  203. package/dist/dispatchers/node/index.js +27 -0
  204. package/dist/dispatchers/node/index.js.map +1 -0
  205. package/dist/durable-hooks.d.ts +31 -0
  206. package/dist/durable-hooks.d.ts.map +1 -0
  207. package/dist/durable-hooks.js +23 -0
  208. package/dist/durable-hooks.js.map +1 -0
  209. package/dist/fragments/internal-fragment.d.ts +186 -8
  210. package/dist/fragments/internal-fragment.d.ts.map +1 -1
  211. package/dist/fragments/internal-fragment.js +203 -38
  212. package/dist/fragments/internal-fragment.js.map +1 -1
  213. package/dist/fragments/internal-fragment.routes.js +164 -0
  214. package/dist/fragments/internal-fragment.routes.js.map +1 -0
  215. package/dist/fragments/internal-fragment.schema.d.ts +15 -0
  216. package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
  217. package/dist/fragments/internal-fragment.schema.js +39 -0
  218. package/dist/fragments/internal-fragment.schema.js.map +1 -0
  219. package/dist/hooks/durable-hooks-logger.d.ts +10 -0
  220. package/dist/hooks/durable-hooks-logger.d.ts.map +1 -0
  221. package/dist/hooks/durable-hooks-logger.js +75 -0
  222. package/dist/hooks/durable-hooks-logger.js.map +1 -0
  223. package/dist/hooks/durable-hooks-processor.d.ts +1 -0
  224. package/dist/hooks/durable-hooks-processor.js +80 -0
  225. package/dist/hooks/durable-hooks-processor.js.map +1 -0
  226. package/dist/hooks/durable-hooks-runtime.js +44 -0
  227. package/dist/hooks/durable-hooks-runtime.js.map +1 -0
  228. package/dist/hooks/hooks.d.ts +100 -1
  229. package/dist/hooks/hooks.d.ts.map +1 -1
  230. package/dist/hooks/hooks.js +254 -27
  231. package/dist/hooks/hooks.js.map +1 -1
  232. package/dist/id.d.ts +2 -2
  233. package/dist/id.js +2 -2
  234. package/dist/internal/adapter-registry.d.ts +11 -0
  235. package/dist/internal/adapter-registry.d.ts.map +1 -0
  236. package/dist/internal/adapter-registry.js +135 -0
  237. package/dist/internal/adapter-registry.js.map +1 -0
  238. package/dist/internal/outbox-state.d.ts +2 -0
  239. package/dist/internal/outbox-state.js +26 -0
  240. package/dist/internal/outbox-state.js.map +1 -0
  241. package/dist/migration-engine/auto-from-schema.d.ts +33 -0
  242. package/dist/migration-engine/auto-from-schema.d.ts.map +1 -0
  243. package/dist/migration-engine/auto-from-schema.js +223 -37
  244. package/dist/migration-engine/auto-from-schema.js.map +1 -1
  245. package/dist/migration-engine/generation-engine.d.ts +16 -10
  246. package/dist/migration-engine/generation-engine.d.ts.map +1 -1
  247. package/dist/migration-engine/generation-engine.js +86 -35
  248. package/dist/migration-engine/generation-engine.js.map +1 -1
  249. package/dist/migration-engine/shared.d.ts +113 -0
  250. package/dist/migration-engine/shared.d.ts.map +1 -0
  251. package/dist/migration-engine/shared.js.map +1 -1
  252. package/dist/mod.d.ts +20 -12
  253. package/dist/mod.d.ts.map +1 -1
  254. package/dist/mod.js +18 -12
  255. package/dist/mod.js.map +1 -1
  256. package/dist/naming/sql-naming.d.ts +19 -0
  257. package/dist/naming/sql-naming.d.ts.map +1 -0
  258. package/dist/naming/sql-naming.js +116 -0
  259. package/dist/naming/sql-naming.js.map +1 -0
  260. package/dist/outbox/outbox-builder.js +156 -0
  261. package/dist/outbox/outbox-builder.js.map +1 -0
  262. package/dist/outbox/outbox.d.ts +54 -0
  263. package/dist/outbox/outbox.d.ts.map +1 -0
  264. package/dist/outbox/outbox.js +37 -0
  265. package/dist/outbox/outbox.js.map +1 -0
  266. package/dist/query/column-defaults.js +20 -4
  267. package/dist/query/column-defaults.js.map +1 -1
  268. package/dist/query/condition-builder.d.ts +7 -1
  269. package/dist/query/condition-builder.d.ts.map +1 -1
  270. package/dist/query/condition-builder.js +5 -1
  271. package/dist/query/condition-builder.js.map +1 -1
  272. package/dist/query/cursor-client.d.ts +105 -0
  273. package/dist/query/cursor-client.d.ts.map +1 -0
  274. package/dist/query/cursor-client.js +165 -0
  275. package/dist/query/cursor-client.js.map +1 -0
  276. package/dist/query/cursor.d.ts +3 -1
  277. package/dist/query/cursor.d.ts.map +1 -1
  278. package/dist/query/cursor.js +51 -14
  279. package/dist/query/cursor.js.map +1 -1
  280. package/dist/query/db-now.d.ts +22 -0
  281. package/dist/query/db-now.d.ts.map +1 -0
  282. package/dist/query/db-now.js +35 -0
  283. package/dist/query/db-now.js.map +1 -0
  284. package/dist/query/orm/orm.js.map +1 -1
  285. package/dist/query/serialize/create-sql-serializer.js +5 -4
  286. package/dist/query/serialize/create-sql-serializer.js.map +1 -1
  287. package/dist/query/serialize/dialect/mysql-serializer.js +12 -6
  288. package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
  289. package/dist/query/serialize/dialect/postgres-serializer.js +25 -7
  290. package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
  291. package/dist/query/serialize/dialect/sqlite-serializer.js +60 -12
  292. package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
  293. package/dist/query/serialize/sql-serializer.js +2 -2
  294. package/dist/query/serialize/sql-serializer.js.map +1 -1
  295. package/dist/query/simple-query-interface.d.ts +13 -4
  296. package/dist/query/simple-query-interface.d.ts.map +1 -1
  297. package/dist/query/unit-of-work/execute-unit-of-work.d.ts +37 -2
  298. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
  299. package/dist/query/unit-of-work/execute-unit-of-work.js +50 -24
  300. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
  301. package/dist/query/unit-of-work/unit-of-work.d.ts +92 -30
  302. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
  303. package/dist/query/unit-of-work/unit-of-work.js +136 -11
  304. package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
  305. package/dist/query/value-decoding.js +16 -6
  306. package/dist/query/value-decoding.js.map +1 -1
  307. package/dist/query/value-encoding.js +29 -9
  308. package/dist/query/value-encoding.js.map +1 -1
  309. package/dist/schema/create.d.ts +103 -35
  310. package/dist/schema/create.d.ts.map +1 -1
  311. package/dist/schema/create.js +172 -58
  312. package/dist/schema/create.js.map +1 -1
  313. package/dist/schema/generate-id.js +2 -2
  314. package/dist/schema/generate-id.js.map +1 -1
  315. package/dist/schema/type-conversion/create-sql-type-mapper.js +4 -3
  316. package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
  317. package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
  318. package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
  319. package/dist/schema/validator.d.ts +10 -0
  320. package/dist/schema/validator.d.ts.map +1 -0
  321. package/dist/schema/validator.js +123 -0
  322. package/dist/schema/validator.js.map +1 -0
  323. package/dist/schema-output/drizzle.d.ts +30 -0
  324. package/dist/schema-output/drizzle.d.ts.map +1 -0
  325. package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +88 -60
  326. package/dist/schema-output/drizzle.js.map +1 -0
  327. package/dist/schema-output/prisma.d.ts +17 -0
  328. package/dist/schema-output/prisma.d.ts.map +1 -0
  329. package/dist/schema-output/prisma.js +307 -0
  330. package/dist/schema-output/prisma.js.map +1 -0
  331. package/dist/sql-driver/dialects/durable-object-dialect.js +3 -9
  332. package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -1
  333. package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -1
  334. package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -1
  335. package/dist/sql-driver/sql-driver-adapter.js.map +1 -1
  336. package/dist/sql-driver/sql.js.map +1 -1
  337. package/dist/sync/commands.d.ts +15 -0
  338. package/dist/sync/commands.d.ts.map +1 -0
  339. package/dist/sync/commands.js +27 -0
  340. package/dist/sync/commands.js.map +1 -0
  341. package/dist/sync/index.d.ts +4 -0
  342. package/dist/sync/index.js +4 -0
  343. package/dist/sync/read-tracking.d.ts +25 -0
  344. package/dist/sync/read-tracking.d.ts.map +1 -0
  345. package/dist/sync/read-tracking.js +148 -0
  346. package/dist/sync/read-tracking.js.map +1 -0
  347. package/dist/sync/submit.js +213 -0
  348. package/dist/sync/submit.js.map +1 -0
  349. package/dist/sync/types.d.ts +63 -0
  350. package/dist/sync/types.d.ts.map +1 -0
  351. package/dist/util/default-database-adapter.js +66 -0
  352. package/dist/util/default-database-adapter.js.map +1 -0
  353. package/dist/with-database.d.ts +3 -6
  354. package/dist/with-database.d.ts.map +1 -1
  355. package/dist/with-database.js +8 -7
  356. package/dist/with-database.js.map +1 -1
  357. package/package.json +62 -55
  358. package/src/adapters/adapters.ts +33 -26
  359. package/src/adapters/drizzle/migrate-drizzle.test.ts +99 -41
  360. package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +601 -0
  361. package/src/adapters/drizzle/test-utils.ts +13 -8
  362. package/src/adapters/generic-sql/driver-config.ts +38 -0
  363. package/src/adapters/generic-sql/generic-sql-adapter.test.ts +10 -8
  364. package/src/adapters/generic-sql/generic-sql-adapter.ts +117 -34
  365. package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +55 -0
  366. package/src/adapters/generic-sql/generic-sql-uow-executor.ts +297 -3
  367. package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +120 -0
  368. package/src/adapters/generic-sql/migration/cold-kysely.ts +1 -0
  369. package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +27 -8
  370. package/src/adapters/generic-sql/migration/dialect/mysql.ts +47 -8
  371. package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +28 -9
  372. package/src/adapters/generic-sql/migration/dialect/postgres.ts +9 -4
  373. package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +839 -8
  374. package/src/adapters/generic-sql/migration/dialect/sqlite.ts +396 -53
  375. package/src/adapters/generic-sql/migration/executor.test.ts +52 -0
  376. package/src/adapters/generic-sql/migration/executor.ts +47 -4
  377. package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +238 -46
  378. package/src/adapters/generic-sql/migration/prepared-migrations.ts +21 -13
  379. package/src/adapters/generic-sql/migration/sql-generator.ts +145 -66
  380. package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +11 -8
  381. package/src/adapters/generic-sql/query/cursor-utils.test.ts +272 -0
  382. package/src/adapters/generic-sql/query/cursor-utils.ts +42 -7
  383. package/src/adapters/generic-sql/query/db-now-sql.ts +49 -0
  384. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +171 -35
  385. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +53 -40
  386. package/src/adapters/generic-sql/query/select-builder.test.ts +16 -11
  387. package/src/adapters/generic-sql/query/select-builder.ts +7 -3
  388. package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +75 -6
  389. package/src/adapters/generic-sql/query/sql-query-compiler.ts +129 -24
  390. package/src/adapters/generic-sql/query/where-builder.test.ts +96 -20
  391. package/src/adapters/generic-sql/query/where-builder.ts +112 -41
  392. package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +11 -20
  393. package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +851 -0
  394. package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +18 -15
  395. package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +282 -14
  396. package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +129 -12
  397. package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +9 -7
  398. package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
  399. package/src/adapters/generic-sql/uow-decoder.test.ts +5 -4
  400. package/src/adapters/generic-sql/uow-decoder.ts +23 -5
  401. package/src/adapters/generic-sql/uow-encoder.test.ts +36 -3
  402. package/src/adapters/generic-sql/uow-encoder.ts +48 -13
  403. package/src/adapters/in-memory/condition-evaluator.test.ts +194 -0
  404. package/src/adapters/in-memory/condition-evaluator.ts +280 -0
  405. package/src/adapters/in-memory/errors.ts +20 -0
  406. package/src/adapters/in-memory/in-memory-adapter.ts +388 -0
  407. package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +344 -0
  408. package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +255 -0
  409. package/src/adapters/in-memory/in-memory-uow.ts +1724 -0
  410. package/src/adapters/in-memory/index.ts +3 -0
  411. package/src/adapters/in-memory/options.test.ts +42 -0
  412. package/src/adapters/in-memory/options.ts +91 -0
  413. package/src/adapters/in-memory/outbox.test.ts +361 -0
  414. package/src/adapters/in-memory/reference-resolution.test.ts +51 -0
  415. package/src/adapters/in-memory/reference-resolution.ts +67 -0
  416. package/src/adapters/in-memory/sorted-array-index.test.ts +124 -0
  417. package/src/adapters/in-memory/sorted-array-index.ts +228 -0
  418. package/src/adapters/in-memory/store.test.ts +69 -0
  419. package/src/adapters/in-memory/store.ts +145 -0
  420. package/src/adapters/in-memory/value-comparison.ts +53 -0
  421. package/src/adapters/in-memory/value-normalization.test.ts +58 -0
  422. package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1207 -0
  423. package/src/adapters/shared/from-unit-of-work-compiler.ts +159 -47
  424. package/src/adapters/shared/uow-operation-compiler.ts +28 -18
  425. package/src/adapters/sql/index.ts +12 -0
  426. package/src/browser/mod.ts +64 -0
  427. package/src/client.ts +19 -0
  428. package/src/db-fragment-definition-builder.test.ts +845 -53
  429. package/src/db-fragment-definition-builder.ts +911 -95
  430. package/src/db-fragment-instantiator.test.ts +210 -94
  431. package/src/db-fragment-integration.test.ts +17 -12
  432. package/src/dispatchers/cloudflare-do/dispatcher.ts +204 -0
  433. package/src/dispatchers/cloudflare-do/index.test.ts +206 -0
  434. package/src/dispatchers/cloudflare-do/index.ts +63 -0
  435. package/src/dispatchers/node/dispatcher.ts +112 -0
  436. package/src/dispatchers/node/index.test.ts +120 -0
  437. package/src/dispatchers/node/index.ts +50 -0
  438. package/src/durable-hooks.test.ts +80 -0
  439. package/src/durable-hooks.ts +67 -0
  440. package/src/fragments/internal-fragment.routes.test.ts +570 -0
  441. package/src/fragments/internal-fragment.routes.ts +334 -0
  442. package/src/fragments/internal-fragment.schema.ts +95 -0
  443. package/src/fragments/internal-fragment.test.ts +505 -83
  444. package/src/fragments/internal-fragment.ts +453 -70
  445. package/src/hooks/durable-hooks-logger.ts +126 -0
  446. package/src/hooks/durable-hooks-processor.pglite.test.ts +87 -0
  447. package/src/hooks/durable-hooks-processor.test.ts +282 -0
  448. package/src/hooks/durable-hooks-processor.ts +173 -0
  449. package/src/hooks/durable-hooks-runtime.test.ts +65 -0
  450. package/src/hooks/durable-hooks-runtime.ts +81 -0
  451. package/src/hooks/hooks.test.ts +455 -34
  452. package/src/hooks/hooks.ts +501 -34
  453. package/src/id.test.ts +34 -0
  454. package/src/id.ts +1 -3
  455. package/src/internal/adapter-registry.test.ts +93 -0
  456. package/src/internal/adapter-registry.ts +239 -0
  457. package/src/internal/outbox-state.ts +43 -0
  458. package/src/migration-engine/auto-from-schema.test.ts +107 -14
  459. package/src/migration-engine/auto-from-schema.ts +365 -44
  460. package/src/migration-engine/create.test.ts +4 -3
  461. package/src/migration-engine/create.ts +1 -1
  462. package/src/migration-engine/generation-engine.test.ts +292 -110
  463. package/src/migration-engine/generation-engine.ts +117 -66
  464. package/src/migration-engine/shared.ts +14 -0
  465. package/src/mod.ts +95 -39
  466. package/src/naming/sql-naming.ts +181 -0
  467. package/src/outbox/outbox-builder.ts +241 -0
  468. package/src/outbox/outbox.test.ts +424 -0
  469. package/src/outbox/outbox.ts +139 -0
  470. package/src/query/column-defaults.ts +42 -4
  471. package/src/query/condition-builder.test.ts +18 -3
  472. package/src/query/condition-builder.ts +7 -0
  473. package/src/query/cursor-client.test.ts +70 -0
  474. package/src/query/cursor-client.ts +263 -0
  475. package/src/query/cursor.test.ts +119 -20
  476. package/src/query/cursor.ts +88 -27
  477. package/src/query/db-now.ts +73 -0
  478. package/src/query/orm/orm.ts +2 -2
  479. package/src/query/query-type.test.ts +4 -3
  480. package/src/query/serialize/create-sql-serializer.ts +10 -5
  481. package/src/query/serialize/dialect/mysql-serializer.ts +13 -5
  482. package/src/query/serialize/dialect/postgres-serializer.ts +35 -5
  483. package/src/query/serialize/dialect/sqlite-serializer.test.ts +90 -3
  484. package/src/query/serialize/dialect/sqlite-serializer.ts +108 -12
  485. package/src/query/serialize/sql-serializer.ts +4 -4
  486. package/src/query/simple-query-interface.ts +15 -4
  487. package/src/query/unit-of-work/execute-unit-of-work.test.ts +372 -10
  488. package/src/query/unit-of-work/execute-unit-of-work.ts +87 -27
  489. package/src/query/unit-of-work/retry-policy.test.ts +1 -0
  490. package/src/query/unit-of-work/tx-builder.test.ts +73 -1
  491. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +17 -16
  492. package/src/query/unit-of-work/unit-of-work-types.test.ts +42 -12
  493. package/src/query/unit-of-work/unit-of-work.test.ts +196 -39
  494. package/src/query/unit-of-work/unit-of-work.ts +309 -38
  495. package/src/query/value-decoding.test.ts +63 -4
  496. package/src/query/value-decoding.ts +32 -6
  497. package/src/query/value-encoding.test.ts +86 -2
  498. package/src/query/value-encoding.ts +56 -6
  499. package/src/schema/create.test.ts +293 -47
  500. package/src/schema/create.ts +406 -70
  501. package/src/schema/generate-id.test.ts +3 -2
  502. package/src/schema/generate-id.ts +2 -2
  503. package/src/schema/serialize.test.ts +18 -5
  504. package/src/schema/type-conversion/create-sql-type-mapper.ts +8 -3
  505. package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
  506. package/src/schema/type-conversion/type-mapping.test.ts +26 -1
  507. package/src/schema/validator.test.ts +199 -0
  508. package/src/schema/validator.ts +232 -0
  509. package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +232 -129
  510. package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +155 -99
  511. package/src/schema-output/prisma.test.ts +694 -0
  512. package/src/schema-output/prisma.ts +593 -0
  513. package/src/sql-driver/better-sqlite3.test.ts +5 -3
  514. package/src/sql-driver/dialects/durable-object-dialect.ts +3 -8
  515. package/src/sql-driver/query-executor/default-query-executor.ts +1 -1
  516. package/src/sql-driver/query-executor/query-executor-base.ts +1 -1
  517. package/src/sql-driver/query-executor/query-executor.ts +1 -1
  518. package/src/sql-driver/sql-driver-adapter.ts +2 -2
  519. package/src/sql-driver/sql.ts +2 -1
  520. package/src/sql-driver/sqlocal.test.ts +4 -2
  521. package/src/sync/commands.test.ts +39 -0
  522. package/src/sync/commands.ts +51 -0
  523. package/src/sync/conflict-checker.test.ts +450 -0
  524. package/src/sync/conflict-checker.ts +248 -0
  525. package/src/sync/index.ts +14 -0
  526. package/src/sync/plan.ts +9 -0
  527. package/src/sync/read-tracking.test.ts +177 -0
  528. package/src/sync/read-tracking.ts +287 -0
  529. package/src/sync/submit.test.ts +205 -0
  530. package/src/sync/submit.ts +328 -0
  531. package/src/sync/types.ts +80 -0
  532. package/src/util/default-database-adapter.ts +119 -0
  533. package/src/with-database.ts +20 -31
  534. package/tsconfig.json +1 -1
  535. package/tsdown.config.ts +38 -24
  536. package/vitest.config.ts +1 -0
  537. package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
  538. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
  539. package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
  540. package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
  541. package/dist/adapters/drizzle/generate.d.ts +0 -30
  542. package/dist/adapters/drizzle/generate.d.ts.map +0 -1
  543. package/dist/adapters/drizzle/generate.js.map +0 -1
  544. package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
  545. package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
  546. package/dist/adapters/kysely/kysely-adapter.js +0 -17
  547. package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
  548. package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
  549. package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
  550. package/dist/adapters/shared/table-name-mapper.js +0 -43
  551. package/dist/adapters/shared/table-name-mapper.js.map +0 -1
  552. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +0 -165
  553. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
  554. package/dist/packages/fragno/dist/api/bind-services.js +0 -20
  555. package/dist/packages/fragno/dist/api/bind-services.js.map +0 -1
  556. package/dist/packages/fragno/dist/api/error.js +0 -48
  557. package/dist/packages/fragno/dist/api/error.js.map +0 -1
  558. package/dist/packages/fragno/dist/api/fragment-definition-builder.js +0 -320
  559. package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +0 -1
  560. package/dist/packages/fragno/dist/api/fragment-instantiator.js +0 -525
  561. package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +0 -1
  562. package/dist/packages/fragno/dist/api/fragno-response.js +0 -73
  563. package/dist/packages/fragno/dist/api/fragno-response.js.map +0 -1
  564. package/dist/packages/fragno/dist/api/internal/response-stream.js +0 -81
  565. package/dist/packages/fragno/dist/api/internal/response-stream.js.map +0 -1
  566. package/dist/packages/fragno/dist/api/internal/route.js +0 -10
  567. package/dist/packages/fragno/dist/api/internal/route.js.map +0 -1
  568. package/dist/packages/fragno/dist/api/mutable-request-state.js +0 -97
  569. package/dist/packages/fragno/dist/api/mutable-request-state.js.map +0 -1
  570. package/dist/packages/fragno/dist/api/request-context-storage.js +0 -43
  571. package/dist/packages/fragno/dist/api/request-context-storage.js.map +0 -1
  572. package/dist/packages/fragno/dist/api/request-input-context.js +0 -118
  573. package/dist/packages/fragno/dist/api/request-input-context.js.map +0 -1
  574. package/dist/packages/fragno/dist/api/request-middleware.js +0 -83
  575. package/dist/packages/fragno/dist/api/request-middleware.js.map +0 -1
  576. package/dist/packages/fragno/dist/api/request-output-context.js +0 -119
  577. package/dist/packages/fragno/dist/api/request-output-context.js.map +0 -1
  578. package/dist/packages/fragno/dist/api/route.js +0 -17
  579. package/dist/packages/fragno/dist/api/route.js.map +0 -1
  580. package/dist/packages/fragno/dist/internal/symbols.js +0 -10
  581. package/dist/packages/fragno/dist/internal/symbols.js.map +0 -1
  582. package/dist/schema-generator/schema-generator.d.ts +0 -15
  583. package/dist/schema-generator/schema-generator.d.ts.map +0 -1
  584. package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
  585. package/src/adapters/kysely/kysely-adapter.ts +0 -27
  586. package/src/adapters/shared/table-name-mapper.ts +0 -50
  587. package/src/schema-generator/schema-generator.ts +0 -12
@@ -1,14 +1,16 @@
1
1
  import { describe, it, expect, assert, expectTypeOf } from "vitest";
2
+
2
3
  import { column, schema, idColumn, FragnoId } from "../../schema/create";
4
+ import { createIndexedBuilder } from "../condition-builder";
5
+ import type { SimpleQueryInterface } from "../simple-query-interface";
3
6
  import {
4
7
  type UOWCompiler,
5
8
  type UOWDecoder,
6
9
  createUnitOfWork,
10
+ UnitOfWork,
7
11
  type InferIdColumnName,
8
12
  type IndexColumns,
9
13
  } from "./unit-of-work";
10
- import { createIndexedBuilder } from "../condition-builder";
11
- import type { SimpleQueryInterface } from "../simple-query-interface";
12
14
 
13
15
  // Mock compiler and executor for testing
14
16
  function createMockCompiler(): UOWCompiler<unknown> {
@@ -38,7 +40,7 @@ function createMockDecoder(): UOWDecoder {
38
40
 
39
41
  describe("FindBuilder", () => {
40
42
  it("should support primary index", () => {
41
- const testSchema = schema((s) =>
43
+ const testSchema = schema("test", (s) =>
42
44
  s.addTable("users", (t) =>
43
45
  t
44
46
  .addColumn("id", idColumn())
@@ -59,7 +61,7 @@ describe("FindBuilder", () => {
59
61
  });
60
62
 
61
63
  it("should support custom indexes", () => {
62
- const testSchema = schema((s) =>
64
+ const testSchema = schema("test", (s) =>
63
65
  s.addTable("users", (t) =>
64
66
  t
65
67
  .addColumn("id", idColumn())
@@ -82,7 +84,7 @@ describe("FindBuilder", () => {
82
84
  });
83
85
 
84
86
  it("should support cursor-based pagination", () => {
85
- const testSchema = schema((s) =>
87
+ const testSchema = schema("test", (s) =>
86
88
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
87
89
  );
88
90
 
@@ -102,7 +104,7 @@ describe("FindBuilder", () => {
102
104
  });
103
105
 
104
106
  it("should support backward cursor pagination", () => {
105
- const testSchema = schema((s) =>
107
+ const testSchema = schema("test", (s) =>
106
108
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
107
109
  );
108
110
 
@@ -122,7 +124,7 @@ describe("FindBuilder", () => {
122
124
  });
123
125
 
124
126
  it("should throw RangeError for pageSize <= 0", () => {
125
- const testSchema = schema((s) =>
127
+ const testSchema = schema("test", (s) =>
126
128
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
127
129
  );
128
130
 
@@ -142,7 +144,7 @@ describe("FindBuilder", () => {
142
144
  });
143
145
 
144
146
  it("should throw RangeError for non-integer pageSize", () => {
145
- const testSchema = schema((s) =>
147
+ const testSchema = schema("test", (s) =>
146
148
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
147
149
  );
148
150
 
@@ -166,7 +168,7 @@ describe("FindBuilder", () => {
166
168
  });
167
169
 
168
170
  it("should throw if index doesn't exist", () => {
169
- const testSchema = schema((s) =>
171
+ const testSchema = schema("test", (s) =>
170
172
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
171
173
  );
172
174
 
@@ -177,7 +179,7 @@ describe("FindBuilder", () => {
177
179
  });
178
180
 
179
181
  it("should throw if finalized without index", () => {
180
- const testSchema = schema((s) =>
182
+ const testSchema = schema("test", (s) =>
181
183
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
182
184
  );
183
185
 
@@ -190,7 +192,7 @@ describe("FindBuilder", () => {
190
192
  });
191
193
 
192
194
  it("should support count operations", () => {
193
- const testSchema = schema((s) =>
195
+ const testSchema = schema("test", (s) =>
194
196
  s.addTable("users", (t) =>
195
197
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("age", "integer"),
196
198
  ),
@@ -205,7 +207,7 @@ describe("FindBuilder", () => {
205
207
  });
206
208
 
207
209
  it("should throw when using both select and selectCount", () => {
208
- const testSchema = schema((s) =>
210
+ const testSchema = schema("test", (s) =>
209
211
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
210
212
  );
211
213
 
@@ -228,7 +230,7 @@ describe("FindBuilder", () => {
228
230
  });
229
231
 
230
232
  it("should support orderByIndex", () => {
231
- const testSchema = schema((s) =>
233
+ const testSchema = schema("test", (s) =>
232
234
  s.addTable("users", (t) =>
233
235
  t
234
236
  .addColumn("id", idColumn())
@@ -257,7 +259,7 @@ describe("FindBuilder", () => {
257
259
  });
258
260
 
259
261
  it("should support join operations", () => {
260
- const testSchema = schema((s) =>
262
+ const testSchema = schema("test", (s) =>
261
263
  s
262
264
  .addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
263
265
  .addTable("posts", (t) =>
@@ -291,7 +293,7 @@ describe("FindBuilder", () => {
291
293
  });
292
294
 
293
295
  it("should support join operations without builder function", () => {
294
- const testSchema = schema((s) =>
296
+ const testSchema = schema("test", (s) =>
295
297
  s
296
298
  .addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
297
299
  .addTable("posts", (t) =>
@@ -325,7 +327,7 @@ describe("FindBuilder", () => {
325
327
  });
326
328
 
327
329
  it("should support join with whereIndex", () => {
328
- const testSchema = schema((s) =>
330
+ const testSchema = schema("test", (s) =>
329
331
  s
330
332
  .addTable("users", (t) =>
331
333
  t
@@ -373,7 +375,7 @@ describe("FindBuilder", () => {
373
375
  });
374
376
 
375
377
  it("should support join with orderByIndex", () => {
376
- const testSchema = schema((s) =>
378
+ const testSchema = schema("test", (s) =>
377
379
  s
378
380
  .addTable("users", (t) =>
379
381
  t
@@ -418,7 +420,7 @@ describe("FindBuilder", () => {
418
420
  });
419
421
 
420
422
  it("should support join with pageSize", () => {
421
- const testSchema = schema((s) =>
423
+ const testSchema = schema("test", (s) =>
422
424
  s
423
425
  .addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
424
426
  .addTable("posts", (t) =>
@@ -453,7 +455,7 @@ describe("FindBuilder", () => {
453
455
  });
454
456
 
455
457
  it("should throw RangeError for invalid pageSize in join", () => {
456
- const testSchema = schema((s) =>
458
+ const testSchema = schema("test", (s) =>
457
459
  s
458
460
  .addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
459
461
  .addTable("posts", (t) =>
@@ -498,7 +500,7 @@ describe("FindBuilder", () => {
498
500
  });
499
501
 
500
502
  it("should support nested joins", () => {
501
- const testSchema = schema((s) =>
503
+ const testSchema = schema("test", (s) =>
502
504
  s
503
505
  .addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string"))
504
506
  .addTable("posts", (t) =>
@@ -564,7 +566,7 @@ describe("FindBuilder", () => {
564
566
  });
565
567
 
566
568
  describe("IndexedConditionBuilder", () => {
567
- const testSchema = schema((s) =>
569
+ const testSchema = schema("test", (s) =>
568
570
  s.addTable("users", (t) =>
569
571
  t
570
572
  .addColumn("id", idColumn())
@@ -585,7 +587,7 @@ describe("IndexedConditionBuilder", () => {
585
587
  const indexedColumns = new Set<string>();
586
588
  for (const index of Object.values(usersTable.indexes)) {
587
589
  for (const col of index.columns) {
588
- indexedColumns.add(col.ormName);
590
+ indexedColumns.add(col.name);
589
591
  }
590
592
  }
591
593
 
@@ -712,7 +714,7 @@ describe("IndexedConditionBuilder", () => {
712
714
  describe("type safety", () => {
713
715
  it("should restrict to only indexed columns at type level", () => {
714
716
  // This schema has "bio" column that is NOT indexed
715
- const typeTestSchema = schema((s) =>
717
+ const typeTestSchema = schema("typetest", (s) =>
716
718
  s.addTable("users", (t) =>
717
719
  t
718
720
  .addColumn("id", idColumn())
@@ -770,7 +772,7 @@ describe("IndexedConditionBuilder", () => {
770
772
  });
771
773
 
772
774
  describe("UpdateBuilder with string ID", () => {
773
- const testSchema = schema((s) =>
775
+ const testSchema = schema("test", (s) =>
774
776
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
775
777
  );
776
778
 
@@ -806,7 +808,7 @@ describe("UpdateBuilder with string ID", () => {
806
808
  });
807
809
 
808
810
  describe("DeleteBuilder with string ID", () => {
809
- const testSchema = schema((s) =>
811
+ const testSchema = schema("test", (s) =>
810
812
  s.addTable("users", (t) => t.addColumn("id", idColumn()).addColumn("name", "string")),
811
813
  );
812
814
 
@@ -839,7 +841,7 @@ describe("DeleteBuilder with string ID", () => {
839
841
  });
840
842
 
841
843
  describe("generateId", () => {
842
- const testSchema = schema((s) =>
844
+ const testSchema = schema("test", (s) =>
843
845
  s.addTable("users", (t) =>
844
846
  t.addColumn("id", idColumn()).addColumn("email", "string").addColumn("name", "string"),
845
847
  ),
@@ -903,7 +905,7 @@ describe("generateId", () => {
903
905
  });
904
906
 
905
907
  describe("getCreatedIds", () => {
906
- const testSchema = schema((s) =>
908
+ const testSchema = schema("test", (s) =>
907
909
  s.addTable("users", (t) =>
908
910
  t.addColumn("id", idColumn()).addColumn("email", "string").addColumn("name", "string"),
909
911
  ),
@@ -1019,20 +1021,20 @@ describe("getCreatedIds", () => {
1019
1021
  describe("Phase promises with multiple views", () => {
1020
1022
  it("should return only operations added to the current view when using retrievalPhase promise", async () => {
1021
1023
  // Create two separate schemas
1022
- const schema1 = schema((s) =>
1024
+ const schema1 = schema("schema1", (s) =>
1023
1025
  s.addTable("users", (t) =>
1024
1026
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1025
1027
  ),
1026
1028
  );
1027
1029
 
1028
- const schema2 = schema((s) =>
1030
+ const schema2 = schema("schema2", (s) =>
1029
1031
  s.addTable("posts", (t) =>
1030
1032
  t.addColumn("id", idColumn()).addColumn("title", "string").addColumn("content", "string"),
1031
1033
  ),
1032
1034
  );
1033
1035
 
1034
1036
  // Create a schema namespace map
1035
- const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string>();
1037
+ const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string | null>();
1036
1038
  schemaNamespaceMap.set(schema1, "namespace1");
1037
1039
  schemaNamespaceMap.set(schema2, "namespace2");
1038
1040
 
@@ -1089,7 +1091,7 @@ describe("Phase promises with multiple views", () => {
1089
1091
  });
1090
1092
 
1091
1093
  it("should isolate operations when getUnitOfWork is called multiple times with same schema", async () => {
1092
- const testSchema = schema((s) =>
1094
+ const testSchema = schema("test", (s) =>
1093
1095
  s.addTable("users", (t) =>
1094
1096
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1095
1097
  ),
@@ -1135,19 +1137,19 @@ describe("Phase promises with multiple views", () => {
1135
1137
  });
1136
1138
 
1137
1139
  it("should show that getCreatedIds returns ALL created IDs regardless of which view created them", async () => {
1138
- const schema1 = schema((s) =>
1140
+ const schema1 = schema("schema1", (s) =>
1139
1141
  s.addTable("users", (t) =>
1140
1142
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1141
1143
  ),
1142
1144
  );
1143
1145
 
1144
- const schema2 = schema((s) =>
1146
+ const schema2 = schema("schema2", (s) =>
1145
1147
  s.addTable("posts", (t) =>
1146
1148
  t.addColumn("id", idColumn()).addColumn("title", "string").addColumn("content", "string"),
1147
1149
  ),
1148
1150
  );
1149
1151
 
1150
- const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string>();
1152
+ const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string | null>();
1151
1153
  schemaNamespaceMap.set(schema1, "namespace1");
1152
1154
  schemaNamespaceMap.set(schema2, "namespace2");
1153
1155
 
@@ -1190,19 +1192,19 @@ describe("Phase promises with multiple views", () => {
1190
1192
  });
1191
1193
 
1192
1194
  it("should generate unique IDs when multiple views create items", async () => {
1193
- const schema1 = schema((s) =>
1195
+ const schema1 = schema("schema1", (s) =>
1194
1196
  s.addTable("users", (t) =>
1195
1197
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1196
1198
  ),
1197
1199
  );
1198
1200
 
1199
- const schema2 = schema((s) =>
1201
+ const schema2 = schema("schema2", (s) =>
1200
1202
  s.addTable("posts", (t) =>
1201
1203
  t.addColumn("id", idColumn()).addColumn("title", "string").addColumn("content", "string"),
1202
1204
  ),
1203
1205
  );
1204
1206
 
1205
- const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string>();
1207
+ const schemaNamespaceMap = new WeakMap<typeof schema1 | typeof schema2, string | null>();
1206
1208
  schemaNamespaceMap.set(schema1, "namespace1");
1207
1209
  schemaNamespaceMap.set(schema2, "namespace2");
1208
1210
 
@@ -1257,8 +1259,138 @@ describe("Phase promises with multiple views", () => {
1257
1259
  });
1258
1260
  });
1259
1261
 
1262
+ describe("Instrumentation", () => {
1263
+ const testSchema = schema("test", (s) =>
1264
+ s.addTable("users", (t) =>
1265
+ t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1266
+ ),
1267
+ );
1268
+
1269
+ it("should run instrumentation hooks around retrieve and mutate phases", async () => {
1270
+ const calls: string[] = [];
1271
+ const contexts: Array<{
1272
+ phase: string;
1273
+ idempotencyKey: string;
1274
+ retrievalOpsCount: number;
1275
+ mutationOpsCount: number;
1276
+ }> = [];
1277
+
1278
+ const executor = {
1279
+ executeRetrievalPhase: async () => [[]],
1280
+ executeMutationPhase: async () => ({ success: true, createdInternalIds: [] }),
1281
+ };
1282
+
1283
+ const uow = new UnitOfWork(createMockCompiler(), executor, createMockDecoder(), undefined, {
1284
+ instrumentation: {
1285
+ beforeRetrieve: (ctx) => {
1286
+ calls.push("beforeRetrieve");
1287
+ contexts.push({
1288
+ phase: ctx.phase,
1289
+ idempotencyKey: ctx.idempotencyKey,
1290
+ retrievalOpsCount: ctx.retrievalOpsCount,
1291
+ mutationOpsCount: ctx.mutationOpsCount,
1292
+ });
1293
+ },
1294
+ afterRetrieve: (ctx) => {
1295
+ calls.push("afterRetrieve");
1296
+ contexts.push({
1297
+ phase: ctx.phase,
1298
+ idempotencyKey: ctx.idempotencyKey,
1299
+ retrievalOpsCount: ctx.retrievalOpsCount,
1300
+ mutationOpsCount: ctx.mutationOpsCount,
1301
+ });
1302
+ },
1303
+ beforeMutate: (ctx) => {
1304
+ calls.push("beforeMutate");
1305
+ contexts.push({
1306
+ phase: ctx.phase,
1307
+ idempotencyKey: ctx.idempotencyKey,
1308
+ retrievalOpsCount: ctx.retrievalOpsCount,
1309
+ mutationOpsCount: ctx.mutationOpsCount,
1310
+ });
1311
+ },
1312
+ afterMutate: (ctx) => {
1313
+ calls.push("afterMutate");
1314
+ contexts.push({
1315
+ phase: ctx.phase,
1316
+ idempotencyKey: ctx.idempotencyKey,
1317
+ retrievalOpsCount: ctx.retrievalOpsCount,
1318
+ mutationOpsCount: ctx.mutationOpsCount,
1319
+ });
1320
+ },
1321
+ },
1322
+ });
1323
+
1324
+ const typed = uow.forSchema(testSchema);
1325
+ typed.find("users", (b) => b.whereIndex("primary"));
1326
+ typed.create("users", { name: "Alice", email: "alice@example.com" });
1327
+
1328
+ await uow.executeRetrieve();
1329
+ await uow.executeMutations();
1330
+
1331
+ expect(calls).toEqual(["beforeRetrieve", "afterRetrieve", "beforeMutate", "afterMutate"]);
1332
+
1333
+ for (const ctx of contexts) {
1334
+ expect(ctx.idempotencyKey).toBeTypeOf("string");
1335
+ expect(ctx.idempotencyKey.length).toBeGreaterThan(0);
1336
+ expect(ctx.retrievalOpsCount).toBe(1);
1337
+ expect(ctx.mutationOpsCount).toBe(1);
1338
+ }
1339
+ });
1340
+
1341
+ it("should short-circuit mutations on conflict injection", async () => {
1342
+ let mutationExecuted = false;
1343
+
1344
+ const executor = {
1345
+ executeRetrievalPhase: async () => [],
1346
+ executeMutationPhase: async () => {
1347
+ mutationExecuted = true;
1348
+ return { success: true, createdInternalIds: [] };
1349
+ },
1350
+ };
1351
+
1352
+ const uow = new UnitOfWork(createMockCompiler(), executor, createMockDecoder(), undefined, {
1353
+ instrumentation: {
1354
+ beforeMutate: () => ({ type: "conflict", reason: "Injected conflict" }),
1355
+ afterMutate: () => {
1356
+ throw new Error("afterMutate should not run");
1357
+ },
1358
+ },
1359
+ });
1360
+
1361
+ uow.forSchema(testSchema).create("users", { name: "Alice", email: "alice@example.com" });
1362
+
1363
+ const result = await uow.executeMutations();
1364
+ expect(result.success).toBe(false);
1365
+ expect(mutationExecuted).toBe(false);
1366
+ });
1367
+
1368
+ it("should throw on error injection before retrieval", async () => {
1369
+ let retrievalExecuted = false;
1370
+
1371
+ const executor = {
1372
+ executeRetrievalPhase: async () => {
1373
+ retrievalExecuted = true;
1374
+ return [];
1375
+ },
1376
+ executeMutationPhase: async () => ({ success: true, createdInternalIds: [] }),
1377
+ };
1378
+
1379
+ const uow = new UnitOfWork(createMockCompiler(), executor, createMockDecoder(), undefined, {
1380
+ instrumentation: {
1381
+ beforeRetrieve: () => ({ type: "error", error: new Error("Injected failure") }),
1382
+ },
1383
+ });
1384
+
1385
+ uow.forSchema(testSchema).find("users", (b) => b.whereIndex("primary"));
1386
+
1387
+ await expect(uow.executeRetrieve()).rejects.toThrow("Injected failure");
1388
+ expect(retrievalExecuted).toBe(false);
1389
+ });
1390
+ });
1391
+
1260
1392
  describe("Error Handling", () => {
1261
- const testSchema = schema((s) =>
1393
+ const testSchema = schema("test", (s) =>
1262
1394
  s.addTable("users", (t) =>
1263
1395
  t.addColumn("id", idColumn()).addColumn("name", "string").addColumn("email", "string"),
1264
1396
  ),
@@ -1543,7 +1675,7 @@ describe("Error Handling", () => {
1543
1675
  });
1544
1676
 
1545
1677
  describe("findFirst convenience method", () => {
1546
- const testSchema = schema((s) =>
1678
+ const testSchema = schema("test", (s) =>
1547
1679
  s
1548
1680
  .addTable("users", (t) =>
1549
1681
  t
@@ -1778,3 +1910,28 @@ describe("findFirst convenience method", () => {
1778
1910
  expect(ops[0]?.indexName).toBe("_primary");
1779
1911
  });
1780
1912
  });
1913
+
1914
+ describe("triggerHook namespace resolution", () => {
1915
+ it("should fall back to schema name when namespace is null", () => {
1916
+ const hooksSchema = schema("hooks_test", (s) =>
1917
+ s.addTable("events", (t) => t.addColumn("id", idColumn())),
1918
+ );
1919
+ const uow = createUnitOfWork(createMockCompiler(), createMockExecutor(), createMockDecoder());
1920
+ uow.registerSchema(hooksSchema, null);
1921
+
1922
+ const hooks = {
1923
+ onTest: (_payload: { value: string }) => {},
1924
+ };
1925
+
1926
+ const typedUow = uow.forSchema(hooksSchema, hooks);
1927
+ typedUow.triggerHook("onTest", { value: "ok" });
1928
+
1929
+ const triggeredHooks = uow.getTriggeredHooks();
1930
+ expect(triggeredHooks).toHaveLength(1);
1931
+ expect(triggeredHooks[0]).toMatchObject({
1932
+ namespace: hooksSchema.name,
1933
+ hookName: "onTest",
1934
+ payload: { value: "ok" },
1935
+ });
1936
+ });
1937
+ });