@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,4 +1,5 @@
1
1
  import { createId } from "../id.js";
2
+ import { FragnoDbValidationError, createTableStandardSchemaProps, createTableValidator } from "./validator.js";
2
3
  import { generateId } from "./generate-id.js";
3
4
 
4
5
  //#region src/schema/create.ts
@@ -7,21 +8,24 @@ var RelationInit = class {
7
8
  referencedTable;
8
9
  referencer;
9
10
  on = [];
10
- constructor(type, referencedTable, referencer) {
11
+ foreignKey;
12
+ constructor(type, referencedTable, referencer, options) {
11
13
  this.type = type;
12
14
  this.referencedTable = referencedTable;
13
15
  this.referencer = referencer;
16
+ this.foreignKey = options?.foreignKey ?? true;
14
17
  }
15
18
  };
16
19
  var ExplicitRelationInit = class extends RelationInit {
17
- init(ormName) {
20
+ init(name) {
18
21
  return {
19
- id: `${this.referencer.ormName}_${this.referencedTable.ormName}`,
22
+ id: `${this.referencer.name}_${this.referencedTable.name}`,
20
23
  on: this.on,
21
- name: ormName,
24
+ name,
22
25
  referencer: this.referencer,
23
26
  table: this.referencedTable,
24
- type: this.type
27
+ type: this.type,
28
+ foreignKey: this.foreignKey
25
29
  };
26
30
  }
27
31
  };
@@ -42,7 +46,6 @@ const runtimeDefaultBuilder = {
42
46
  var Column = class {
43
47
  type;
44
48
  name = "";
45
- ormName = "";
46
49
  isNullable = false;
47
50
  role = "regular";
48
51
  isHidden = false;
@@ -178,6 +181,20 @@ var VersionColumn = class extends Column {
178
181
  this.defaultTo(0).hidden();
179
182
  }
180
183
  };
184
+ function cloneColumn(col) {
185
+ let clonedCol;
186
+ if (col instanceof InternalIdColumn) clonedCol = new InternalIdColumn();
187
+ else if (col instanceof VersionColumn) clonedCol = new VersionColumn();
188
+ else if (col instanceof IdColumn) clonedCol = new IdColumn(col.type);
189
+ else clonedCol = new Column(col.type);
190
+ clonedCol.name = col.name;
191
+ clonedCol.isNullable = col.isNullable;
192
+ clonedCol.role = col.role;
193
+ clonedCol.isHidden = col.isHidden;
194
+ clonedCol.default = col.default;
195
+ clonedCol.tableName = col.tableName;
196
+ return clonedCol;
197
+ }
181
198
  function column(type) {
182
199
  return new Column(type);
183
200
  }
@@ -197,7 +214,7 @@ function referenceColumn() {
197
214
  * Input accepts string | FragnoId | null, output returns FragnoId.
198
215
  */
199
216
  function idColumn() {
200
- const col = new IdColumn("varchar(30)");
217
+ const col = new IdColumn("varchar(128)");
201
218
  col.role = "external-id";
202
219
  col.defaultTo$((b) => b.cuid());
203
220
  return col;
@@ -304,12 +321,15 @@ var FragnoReference = class FragnoReference {
304
321
  return this.#internalId;
305
322
  }
306
323
  };
324
+ const validationClasses = {
325
+ FragnoId,
326
+ FragnoReference
327
+ };
307
328
  var TableBuilder = class {
308
329
  #name;
309
330
  #columns;
310
331
  #relations;
311
332
  #indexes;
312
- #ormName = "";
313
333
  #columnOrder = [];
314
334
  constructor(name) {
315
335
  this.#name = name;
@@ -332,15 +352,26 @@ var TableBuilder = class {
332
352
  getColumnOrder() {
333
353
  return this.#columnOrder;
334
354
  }
335
- addColumn(ormName, colOrType) {
355
+ addColumn(name, colOrType) {
336
356
  const col = typeof colOrType === "string" ? column(colOrType) : colOrType;
337
- col.ormName = ormName;
338
- col.name = ormName;
339
- this.#columns[ormName] = col;
340
- this.#columnOrder.push(ormName);
357
+ col.name = name;
358
+ this.#columns[name] = col;
359
+ this.#columnOrder.push(name);
341
360
  return this;
342
361
  }
343
362
  /**
363
+ * Alter an existing column.
364
+ */
365
+ alterColumn(name) {
366
+ return { nullable: (nullable) => {
367
+ const column$1 = this.#columns[name];
368
+ if (!column$1) throw new Error(`Unknown column name ${String(name)}`);
369
+ const updated = cloneColumn(column$1).nullable(nullable ?? true);
370
+ this.#columns[name] = updated;
371
+ return this;
372
+ } };
373
+ }
374
+ /**
344
375
  * Create an index on the specified columns.
345
376
  */
346
377
  createIndex(name, columns, options) {
@@ -367,20 +398,16 @@ var TableBuilder = class {
367
398
  let versionCol;
368
399
  if (!this.#columns["_internalId"]) {
369
400
  const col = internalIdColumn();
370
- col.ormName = "_internalId";
371
401
  col.name = "_internalId";
372
402
  this.#columns["_internalId"] = col;
373
403
  }
374
404
  if (!this.#columns["_version"]) {
375
405
  const col = versionColumn();
376
- col.ormName = "_version";
377
406
  col.name = "_version";
378
407
  this.#columns["_version"] = col;
379
408
  }
380
- const ormName = this.#ormName || this.#name;
381
409
  const table = {
382
410
  name: this.#name,
383
- ormName,
384
411
  columns: this.#columns,
385
412
  relations: this.#relations,
386
413
  indexes: this.#indexes,
@@ -397,6 +424,8 @@ var TableBuilder = class {
397
424
  return versionCol;
398
425
  }
399
426
  };
427
+ table["~standard"] = createTableStandardSchemaProps(table, validationClasses);
428
+ table.validate = createTableValidator(table, validationClasses);
400
429
  for (const k in this.#columns) {
401
430
  const column$1 = this.#columns[k];
402
431
  if (!column$1) continue;
@@ -412,15 +441,43 @@ var TableBuilder = class {
412
441
  }
413
442
  };
414
443
  var SchemaBuilder = class SchemaBuilder {
444
+ #name;
415
445
  #tables;
416
446
  #version = 0;
417
447
  #operations = [];
418
- constructor(existingSchema) {
448
+ #tableNames = /* @__PURE__ */ new Set();
449
+ #indexNames = /* @__PURE__ */ new Set();
450
+ constructor(name, existingSchema) {
451
+ this.#name = name;
419
452
  if (existingSchema) {
420
453
  this.#tables = existingSchema.tables;
421
454
  this.#version = existingSchema.version;
422
455
  this.#operations = [...existingSchema.operations];
423
456
  } else this.#tables = {};
457
+ for (const table of Object.values(this.#tables)) {
458
+ this.#registerTableName(table.name);
459
+ for (const index of Object.values(table.indexes)) this.#registerIndexName(index.name, table.name);
460
+ }
461
+ }
462
+ #registerTableName(name) {
463
+ if (this.#tableNames.has(name)) throw new Error(`Duplicate table name "${name}" in schema "${this.#name}".`);
464
+ this.#tableNames.add(name);
465
+ }
466
+ #registerIndexName(name, tableName) {
467
+ if (this.#indexNames.has(name)) throw new Error(`Duplicate index name "${name}" in schema "${this.#name}". Index names must be unique across tables (conflict on "${tableName}").`);
468
+ this.#indexNames.add(name);
469
+ }
470
+ #rebindRelations(tableName, newTable) {
471
+ for (const table of Object.values(this.#tables)) for (const relation of Object.values(table.relations)) {
472
+ if (relation.table.name === tableName) relation.table = newTable;
473
+ if (relation.referencer.name === tableName) relation.referencer = newTable;
474
+ }
475
+ }
476
+ #isJoinColumnIndexed(table, columnName) {
477
+ const idColumnName = table.getIdColumn().name;
478
+ const internalIdColumnName = table.getInternalIdColumn().name;
479
+ if (columnName === idColumnName || columnName === internalIdColumnName) return true;
480
+ return Object.values(table.indexes).some((index) => index.columnNames.some((name) => name === columnName));
424
481
  }
425
482
  /**
426
483
  * Add an existing schema to this builder.
@@ -428,29 +485,39 @@ var SchemaBuilder = class SchemaBuilder {
428
485
  *
429
486
  * @example
430
487
  * ```ts
431
- * const builder = new SchemaBuilder()
488
+ * const builder = new SchemaBuilder("combined")
432
489
  * .add(userSchema)
433
490
  * .add(postSchema)
434
491
  * .addTable("comments", ...);
435
492
  * ```
436
493
  */
437
494
  mergeWithExistingSchema(schema$1) {
495
+ for (const table of Object.values(schema$1.tables)) {
496
+ if (this.#tableNames.has(table.name)) throw new Error(`Duplicate table name "${table.name}" in schema "${this.#name}" when merging.`);
497
+ for (const index of Object.values(table.indexes)) if (this.#indexNames.has(index.name)) throw new Error(`Duplicate index name "${index.name}" in schema "${this.#name}" when merging (conflict on "${table.name}").`);
498
+ }
438
499
  this.#tables = {
439
500
  ...this.#tables,
440
501
  ...schema$1.tables
441
502
  };
442
503
  this.#operations = [...this.#operations, ...schema$1.operations];
443
504
  this.#version += schema$1.version;
505
+ for (const table of Object.values(schema$1.tables)) {
506
+ this.#tableNames.add(table.name);
507
+ for (const index of Object.values(table.indexes)) this.#indexNames.add(index.name);
508
+ }
444
509
  return this;
445
510
  }
446
511
  /**
447
512
  * Add a table to the schema. Increments the version counter.
448
513
  */
449
- addTable(ormName, callback) {
514
+ addTable(name, callback) {
450
515
  this.#version++;
451
- const result = callback(new TableBuilder(ormName));
516
+ if (this.#tableNames.has(name)) throw new Error(`Duplicate table name "${name}" in schema "${this.#name}".`);
517
+ const result = callback(new TableBuilder(name));
452
518
  const builtTable = result.build();
453
- builtTable.ormName = ormName;
519
+ const indexNames = result.getIndexes().map((idx) => idx.name);
520
+ for (const indexName of indexNames) if (this.#indexNames.has(indexName)) throw new Error(`Duplicate index name "${indexName}" in schema "${this.#name}". Index names must be unique across tables (conflict on "${name}").`);
454
521
  const subOperations = [];
455
522
  const columnOrder = result.getColumnOrder();
456
523
  for (const colName of columnOrder) {
@@ -458,34 +525,36 @@ var SchemaBuilder = class SchemaBuilder {
458
525
  subOperations.push({
459
526
  type: "add-column",
460
527
  columnName: colName,
461
- column: col
528
+ column: cloneColumn(col)
462
529
  });
463
530
  }
464
531
  if (builtTable.columns["_internalId"]) subOperations.push({
465
532
  type: "add-column",
466
533
  columnName: "_internalId",
467
- column: builtTable.columns["_internalId"]
534
+ column: cloneColumn(builtTable.columns["_internalId"])
468
535
  });
469
536
  if (builtTable.columns["_version"]) subOperations.push({
470
537
  type: "add-column",
471
538
  columnName: "_version",
472
- column: builtTable.columns["_version"]
539
+ column: cloneColumn(builtTable.columns["_version"])
473
540
  });
474
541
  for (const idx of result.getIndexes()) subOperations.push({
475
542
  type: "add-index",
476
543
  name: idx.name,
477
- columns: idx.columns.map((c) => c.ormName),
544
+ columns: idx.columns.map((c) => c.name),
478
545
  unique: idx.unique
479
546
  });
480
547
  this.#operations.push({
481
548
  type: "add-table",
482
- tableName: ormName,
549
+ tableName: name,
483
550
  operations: subOperations
484
551
  });
485
552
  this.#tables = {
486
553
  ...this.#tables,
487
- [ormName]: builtTable
554
+ [name]: builtTable
488
555
  };
556
+ this.#tableNames.add(name);
557
+ for (const indexName of indexNames) this.#indexNames.add(indexName);
489
558
  return this;
490
559
  }
491
560
  /**
@@ -497,7 +566,7 @@ var SchemaBuilder = class SchemaBuilder {
497
566
  * @example
498
567
  * ```ts
499
568
  * // One-to-one or many-to-one: post -> user
500
- * schema(s => s
569
+ * schema("blog", s => s
501
570
  * .addTable("users", t => t.addColumn("id", idColumn()))
502
571
  * .addTable("posts", t => t
503
572
  * .addColumn("id", idColumn())
@@ -522,24 +591,43 @@ var SchemaBuilder = class SchemaBuilder {
522
591
  * from: { table: "users", column: "invitedBy" },
523
592
  * to: { table: "users", column: "id" },
524
593
  * })
594
+ *
595
+ * // Join-only relation (no foreign key)
596
+ * .addReference("invitedUser", {
597
+ * type: "one",
598
+ * from: { table: "invitations", column: "email" },
599
+ * to: { table: "users", column: "email" },
600
+ * foreignKey: false,
601
+ * })
525
602
  * ```
526
603
  */
527
604
  addReference(referenceName, config) {
528
605
  this.#version++;
529
606
  const table = this.#tables[config.from.table];
530
607
  const referencedTable = this.#tables[config.to.table];
608
+ if (!referenceName || referenceName.trim().length === 0) throw new Error(`referenceName is required for addReference on ${config.from.table}`);
531
609
  if (!table) throw new Error(`Table ${config.from.table} not found in schema`);
532
610
  if (!referencedTable) throw new Error(`Referenced table ${config.to.table} not found in schema`);
533
611
  const columnName = config.from.column;
534
612
  const targetColumnName = config.to.column;
535
- const actualTargetColumnName = targetColumnName === "id" ? "_internalId" : targetColumnName;
613
+ const foreignKey = config.foreignKey !== false;
536
614
  const column$1 = table.columns[columnName];
537
- const referencedColumn = referencedTable.columns[actualTargetColumnName];
615
+ const targetColumn = referencedTable.columns[targetColumnName];
538
616
  if (!column$1) throw new Error(`Column ${columnName} not found in table ${config.from.table}`);
539
- if (!referencedColumn) throw new Error(`Column ${actualTargetColumnName} not found in table ${config.to.table}`);
617
+ if (!targetColumn) throw new Error(`Column ${targetColumnName} not found in table ${config.to.table}`);
618
+ const actualTargetColumnName = targetColumn.role === "external-id" ? referencedTable.getInternalIdColumn().name : targetColumnName;
619
+ if (!referencedTable.columns[actualTargetColumnName]) throw new Error(`Column ${actualTargetColumnName} not found in table ${config.to.table}`);
620
+ if (table.relations[referenceName]) throw new Error(`Reference ${referenceName} already exists on table ${config.from.table}`);
540
621
  if (column$1.role === "reference" && column$1.type !== "bigint") throw new Error(`Reference column ${columnName} must be of type bigint to match internal ID type`);
541
- const init = new ExplicitRelationInit(config.type, referencedTable, table);
542
- init.on.push([columnName, targetColumnName]);
622
+ if (!foreignKey) {
623
+ const missingIndexes = [];
624
+ if (!this.#isJoinColumnIndexed(table, columnName)) missingIndexes.push(`${table.name}.${columnName}`);
625
+ if (!this.#isJoinColumnIndexed(referencedTable, actualTargetColumnName)) missingIndexes.push(`${referencedTable.name}.${actualTargetColumnName}`);
626
+ if (missingIndexes.length > 0) throw new Error(`Join-only relation "${referenceName}" requires indexed join columns: ${missingIndexes.join(", ")}.`);
627
+ }
628
+ const actualFromColumnName = !foreignKey && column$1.role === "external-id" ? table.getInternalIdColumn().name : columnName;
629
+ const init = new ExplicitRelationInit(config.type, referencedTable, table, { foreignKey });
630
+ init.on.push([actualFromColumnName, targetColumnName]);
543
631
  const relation = init.init(referenceName);
544
632
  table.relations[referenceName] = relation;
545
633
  this.#operations.push({
@@ -550,19 +638,20 @@ var SchemaBuilder = class SchemaBuilder {
550
638
  type: config.type,
551
639
  from: {
552
640
  table: config.from.table,
553
- column: columnName
641
+ column: actualFromColumnName
554
642
  },
555
643
  to: {
556
644
  table: config.to.table,
557
645
  column: actualTargetColumnName
558
- }
646
+ },
647
+ foreignKey
559
648
  }
560
649
  });
561
650
  return this;
562
651
  }
563
652
  /**
564
- * Alter an existing table by adding columns or indexes.
565
- * This is used for append-only schema modifications.
653
+ * Alter an existing table by adding columns, altering columns, or adding indexes.
654
+ * This is used for forward-only schema modifications.
566
655
  *
567
656
  * @param tableName - The name of the table to modify
568
657
  * @param callback - A callback that receives a table builder for adding columns/indexes
@@ -570,11 +659,12 @@ var SchemaBuilder = class SchemaBuilder {
570
659
  * @example
571
660
  * ```ts
572
661
  * // Add a new column to an existing table
573
- * schema(s => s
662
+ * schema("blog", s => s
574
663
  * .addTable("users", t => t
575
664
  * .addColumn("id", idColumn())
576
665
  * .addColumn("name", column("string")))
577
666
  * .alterTable("users", t => t
667
+ * .alterColumn("name").nullable()
578
668
  * .addColumn("email", column("string"))
579
669
  * .addColumn("age", column("integer").nullable())
580
670
  * .createIndex("idx_email", ["email"]))
@@ -590,6 +680,8 @@ var SchemaBuilder = class SchemaBuilder {
590
680
  tableBuilder.setIndexes(table.indexes);
591
681
  const existingColumns = new Set(Object.keys(table.columns));
592
682
  const existingIndexes = new Set(Object.keys(table.indexes));
683
+ const existingColumnState = /* @__PURE__ */ new Map();
684
+ for (const [colName, col] of Object.entries(table.columns)) existingColumnState.set(colName, { isNullable: col.isNullable });
593
685
  const resultBuilder = callback(tableBuilder);
594
686
  const newTable = resultBuilder.build();
595
687
  const subOperations = [];
@@ -597,14 +689,29 @@ var SchemaBuilder = class SchemaBuilder {
597
689
  for (const colName of columnOrder) if (!existingColumns.has(colName)) subOperations.push({
598
690
  type: "add-column",
599
691
  columnName: colName,
600
- column: newTable.columns[colName]
601
- });
602
- for (const idx of resultBuilder.getIndexes()) if (!existingIndexes.has(idx.name)) subOperations.push({
603
- type: "add-index",
604
- name: idx.name,
605
- columns: idx.columns.map((c) => c.ormName),
606
- unique: idx.unique
692
+ column: cloneColumn(newTable.columns[colName])
607
693
  });
694
+ for (const [colName, previousState] of existingColumnState.entries()) {
695
+ const updatedColumn = newTable.columns[colName];
696
+ if (!updatedColumn) continue;
697
+ if (previousState.isNullable !== updatedColumn.isNullable) subOperations.push({
698
+ type: "update-column",
699
+ columnName: colName,
700
+ column: cloneColumn(updatedColumn),
701
+ updateNullable: true,
702
+ updateDefault: false,
703
+ updateDataType: false
704
+ });
705
+ }
706
+ for (const idx of resultBuilder.getIndexes()) if (!existingIndexes.has(idx.name)) {
707
+ if (this.#indexNames.has(idx.name)) throw new Error(`Duplicate index name "${idx.name}" in schema "${this.#name}". Index names must be unique across tables (conflict on "${tableName}").`);
708
+ subOperations.push({
709
+ type: "add-index",
710
+ name: idx.name,
711
+ columns: idx.columns.map((c) => c.name),
712
+ unique: idx.unique
713
+ });
714
+ }
608
715
  if (subOperations.length > 0) {
609
716
  this.#version++;
610
717
  this.#operations.push({
@@ -614,6 +721,8 @@ var SchemaBuilder = class SchemaBuilder {
614
721
  });
615
722
  }
616
723
  this.#tables[tableName] = newTable;
724
+ this.#rebindRelations(tableName, newTable);
725
+ for (const idx of resultBuilder.getIndexes()) if (!existingIndexes.has(idx.name)) this.#indexNames.add(idx.name);
617
726
  for (const col of Object.values(newTable.columns)) col.tableName = newTable.name;
618
727
  return this;
619
728
  }
@@ -625,6 +734,7 @@ var SchemaBuilder = class SchemaBuilder {
625
734
  const version = this.#version;
626
735
  const tables = this.#tables;
627
736
  return {
737
+ name: this.#name,
628
738
  version,
629
739
  tables,
630
740
  operations,
@@ -639,7 +749,6 @@ var SchemaBuilder = class SchemaBuilder {
639
749
  else if (col instanceof IdColumn) clonedCol = new IdColumn(col.type);
640
750
  else clonedCol = new Column(col.type);
641
751
  clonedCol.name = col.name;
642
- clonedCol.ormName = col.ormName;
643
752
  clonedCol.isNullable = col.isNullable;
644
753
  clonedCol.role = col.role;
645
754
  clonedCol.isHidden = col.isHidden;
@@ -647,19 +756,24 @@ var SchemaBuilder = class SchemaBuilder {
647
756
  clonedCol.tableName = col.tableName;
648
757
  clonedColumns[colName] = clonedCol;
649
758
  }
650
- cloneTables[k] = {
759
+ const clonedTable = {
651
760
  ...v,
652
761
  columns: clonedColumns
653
762
  };
763
+ clonedTable["~standard"] = createTableStandardSchemaProps(clonedTable, validationClasses);
764
+ clonedTable.validate = createTableValidator(clonedTable, validationClasses);
765
+ cloneTables[k] = clonedTable;
654
766
  }
655
- return new SchemaBuilder({
767
+ const clonedSchema = {
768
+ name: this.#name,
656
769
  version,
657
770
  tables: cloneTables,
658
771
  operations: [...operations],
659
772
  clone: () => {
660
773
  throw new Error("Cannot clone during clone");
661
774
  }
662
- }).build();
775
+ };
776
+ return new SchemaBuilder(this.#name, clonedSchema).build();
663
777
  }
664
778
  };
665
779
  }
@@ -673,19 +787,19 @@ var SchemaBuilder = class SchemaBuilder {
673
787
  /**
674
788
  * Create a new schema with callback pattern.
675
789
  */
676
- function schema(callback) {
677
- return callback(new SchemaBuilder()).build();
790
+ function schema(name, callback) {
791
+ return callback(new SchemaBuilder(name)).build();
678
792
  }
679
- function compileForeignKey(key, nameType = "orm") {
793
+ function compileForeignKey(key) {
680
794
  return {
681
795
  name: key.name,
682
- table: nameType === "sql" ? key.table.name : key.table.ormName,
683
- referencedTable: nameType === "sql" ? key.referencedTable.name : key.referencedTable.ormName,
684
- referencedColumns: key.referencedColumns.map((col) => nameType === "sql" ? col.name : col.ormName),
685
- columns: key.columns.map((col) => nameType === "sql" ? col.name : col.ormName)
796
+ table: key.table.name,
797
+ referencedTable: key.referencedTable.name,
798
+ referencedColumns: key.referencedColumns.map((col) => col.name),
799
+ columns: key.columns.map((col) => col.name)
686
800
  };
687
801
  }
688
802
 
689
803
  //#endregion
690
- export { Column, ExplicitRelationInit, FragnoId, FragnoReference, IdColumn, InternalIdColumn, SchemaBuilder, TableBuilder, VersionColumn, column, compileForeignKey, generateId, idColumn, internalIdColumn, referenceColumn, schema, versionColumn };
804
+ export { Column, ExplicitRelationInit, FragnoDbValidationError, FragnoId, FragnoReference, IdColumn, InternalIdColumn, SchemaBuilder, TableBuilder, VersionColumn, column, compileForeignKey, generateId, idColumn, internalIdColumn, referenceColumn, schema, versionColumn };
691
805
  //# sourceMappingURL=create.js.map