@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,12 +1,16 @@
1
- import { Kysely, PostgresDialect } from "kysely";
2
1
  import { beforeAll, describe, expect, it } from "vitest";
3
- import { column, idColumn, referenceColumn, schema } from "../../../schema/create";
4
- import { fullSQLName, buildWhere, processReferenceSubqueries } from "./where-builder";
2
+
3
+ import { Kysely, PostgresDialect } from "kysely";
4
+
5
+ import { createNamingResolver, type SqlNamingStrategy } from "../../../naming/sql-naming";
6
+ import { dbNow } from "../../../query/db-now";
5
7
  import { ReferenceSubquery } from "../../../query/value-encoding";
8
+ import { column, idColumn, referenceColumn, schema } from "../../../schema/create";
6
9
  import { BetterSQLite3DriverConfig, NodePostgresDriverConfig } from "../driver-config";
10
+ import { fullSQLName, buildWhere, processReferenceSubqueries } from "./where-builder";
7
11
 
8
12
  describe("where-builder", () => {
9
- const testSchema = schema((s) => {
13
+ const testSchema = schema("test", (s) => {
10
14
  return s
11
15
  .addTable("users", (t) => {
12
16
  return t
@@ -15,7 +19,8 @@ describe("where-builder", () => {
15
19
  .addColumn("email", column("string"))
16
20
  .addColumn("age", column("integer").nullable())
17
21
  .addColumn("isActive", column("bool"))
18
- .addColumn("createdAt", column("timestamp"));
22
+ .addColumn("createdAt", column("timestamp"))
23
+ .addColumn("birthDate", column("date").nullable());
19
24
  })
20
25
  .addTable("posts", (t) => {
21
26
  return t
@@ -52,12 +57,18 @@ describe("where-builder", () => {
52
57
  expect(result).toBe("users.id");
53
58
  });
54
59
 
55
- it("should work with table name mapper", () => {
56
- const mapper = {
57
- toPhysical: (ormName: string) => `prefix_${ormName}`,
58
- toLogical: (physicalName: string) => physicalName.replace("prefix_", ""),
60
+ it("should work with naming resolver", () => {
61
+ const namingStrategy: SqlNamingStrategy = {
62
+ namespaceScope: "suffix",
63
+ namespaceToSchema: (namespace) => namespace,
64
+ tableName: (logicalTable) => `prefix_${logicalTable}`,
65
+ columnName: (logicalColumn) => logicalColumn,
66
+ indexName: (logicalIndex) => logicalIndex,
67
+ uniqueIndexName: (logicalIndex) => logicalIndex,
68
+ foreignKeyName: ({ referenceName }) => referenceName,
59
69
  };
60
- const result = fullSQLName(usersTable.columns.name, mapper);
70
+ const resolver = createNamingResolver(testSchema, "namespace", namingStrategy);
71
+ const result = fullSQLName(usersTable.columns.name, resolver);
61
72
  expect(result).toBe("prefix_users.name");
62
73
  });
63
74
  });
@@ -111,6 +122,56 @@ describe("where-builder", () => {
111
122
  };
112
123
 
113
124
  describe("comparison operators", () => {
125
+ it("should serialize dbNow to CURRENT_TIMESTAMP", () => {
126
+ const condition = {
127
+ type: "compare" as const,
128
+ a: usersTable.columns.createdAt,
129
+ operator: "<=" as const,
130
+ b: dbNow(),
131
+ };
132
+
133
+ type TestDB = { users: { id: string } };
134
+ const db = new Kysely<TestDB>({
135
+ dialect: new PostgresDialect({ pool: {} as any }), // eslint-disable-line @typescript-eslint/no-explicit-any
136
+ });
137
+
138
+ const query = db
139
+ .selectFrom("users")
140
+ .select("id")
141
+ .where((eb) => buildWhere(condition, eb, new NodePostgresDriverConfig()));
142
+
143
+ expect(query.compile().sql).toContain("CURRENT_TIMESTAMP");
144
+ });
145
+
146
+ it("should respect sqlite date storage for dbNow", () => {
147
+ const condition = {
148
+ type: "compare" as const,
149
+ a: usersTable.columns.birthDate,
150
+ operator: "<=" as const,
151
+ b: dbNow(),
152
+ };
153
+
154
+ type TestDB = { users: { id: string } };
155
+ const db = new Kysely<TestDB>({
156
+ dialect: new PostgresDialect({ pool: {} as any }), // eslint-disable-line @typescript-eslint/no-explicit-any
157
+ });
158
+
159
+ const query = db
160
+ .selectFrom("users")
161
+ .select("id")
162
+ .where((eb) =>
163
+ buildWhere(condition, eb, new BetterSQLite3DriverConfig(), {
164
+ timestampStorage: "epoch-ms",
165
+ dateStorage: "iso-text",
166
+ bigintStorage: "blob",
167
+ }),
168
+ );
169
+
170
+ const sqlText = query.compile().sql;
171
+ expect(sqlText).toContain("CURRENT_TIMESTAMP");
172
+ expect(sqlText).not.toContain("julianday");
173
+ });
174
+
114
175
  it("should build simple equality comparison", () => {
115
176
  const condition = {
116
177
  type: "compare" as const,
@@ -532,6 +593,7 @@ describe("where-builder", () => {
532
593
  eb,
533
594
  new NodePostgresDriverConfig(),
534
595
  undefined,
596
+ undefined,
535
597
  postsTable,
536
598
  );
537
599
 
@@ -561,6 +623,7 @@ describe("where-builder", () => {
561
623
  createMockEB(),
562
624
  new NodePostgresDriverConfig(),
563
625
  undefined,
626
+ undefined,
564
627
  postsTable,
565
628
  );
566
629
 
@@ -573,11 +636,17 @@ describe("where-builder", () => {
573
636
  });
574
637
  });
575
638
 
576
- it("should generate subquery with table name mapper", () => {
577
- const mapper = {
578
- toPhysical: (ormName: string) => `prefix_${ormName}`,
579
- toLogical: (physicalName: string) => physicalName.replace("prefix_", ""),
639
+ it("should generate subquery with naming resolver", () => {
640
+ const namingStrategy: SqlNamingStrategy = {
641
+ namespaceScope: "suffix",
642
+ namespaceToSchema: (namespace) => namespace,
643
+ tableName: (logicalTable) => `prefix_${logicalTable}`,
644
+ columnName: (logicalColumn) => logicalColumn,
645
+ indexName: (logicalIndex) => logicalIndex,
646
+ uniqueIndexName: (logicalIndex) => logicalIndex,
647
+ foreignKeyName: ({ referenceName }) => referenceName,
580
648
  };
649
+ const resolver = createNamingResolver(testSchema, "namespace", namingStrategy);
581
650
 
582
651
  const condition = {
583
652
  type: "compare" as const,
@@ -591,7 +660,8 @@ describe("where-builder", () => {
591
660
  condition,
592
661
  eb,
593
662
  new NodePostgresDriverConfig(),
594
- mapper,
663
+ undefined,
664
+ resolver,
595
665
  postsTable,
596
666
  );
597
667
 
@@ -682,17 +752,23 @@ describe("where-builder", () => {
682
752
  expect(processed).toEqual(values);
683
753
  });
684
754
 
685
- it("should use table name mapper when provided", () => {
686
- const mapper = {
687
- toPhysical: (ormName: string) => `prefix_${ormName}`,
688
- toLogical: (physicalName: string) => physicalName.replace("prefix_", ""),
755
+ it("should use naming resolver when provided", () => {
756
+ const namingStrategy: SqlNamingStrategy = {
757
+ namespaceScope: "suffix",
758
+ namespaceToSchema: (namespace) => namespace,
759
+ tableName: (logicalTable) => `prefix_${logicalTable}`,
760
+ columnName: (logicalColumn) => logicalColumn,
761
+ indexName: (logicalIndex) => logicalIndex,
762
+ uniqueIndexName: (logicalIndex) => logicalIndex,
763
+ foreignKeyName: ({ referenceName }) => referenceName,
689
764
  };
765
+ const resolver = createNamingResolver(testSchema, "namespace", namingStrategy);
690
766
 
691
767
  const values = {
692
768
  userId: new ReferenceSubquery(usersTable, "user-123"),
693
769
  };
694
770
 
695
- const processed = processReferenceSubqueries(values, kysely, mapper);
771
+ const processed = processReferenceSubqueries(values, kysely, resolver);
696
772
 
697
773
  // Compile the subquery to check it uses the mapped table name
698
774
  const subquery = processed["userId"] as unknown as { compile: () => { sql: string } };
@@ -1,4 +1,10 @@
1
1
  import { sql, type BinaryOperator } from "kysely";
2
+
3
+ import type { NamingResolver } from "../../../naming/sql-naming";
4
+ import type { Condition } from "../../../query/condition-builder";
5
+ import { getDbNowOffsetMs, isDbNow } from "../../../query/db-now";
6
+ import { createSQLSerializer } from "../../../query/serialize/create-sql-serializer";
7
+ import { ReferenceSubquery, resolveFragnoIdValue } from "../../../query/value-encoding";
2
8
  import {
3
9
  type AnyColumn,
4
10
  type AnyTable,
@@ -6,24 +12,38 @@ import {
6
12
  FragnoId,
7
13
  FragnoReference,
8
14
  } from "../../../schema/create";
9
- import type { Condition } from "../../../query/condition-builder";
10
- import { createSQLSerializer } from "../../../query/serialize/create-sql-serializer";
11
- import type { TableNameMapper } from "../../shared/table-name-mapper";
12
15
  import type { DriverConfig } from "../driver-config";
13
- import { ReferenceSubquery, resolveFragnoIdValue } from "../../../query/value-encoding";
16
+ import type { SQLiteStorageMode } from "../sqlite-storage";
17
+ import { buildDbNowSql } from "./db-now-sql";
14
18
  import type { AnyKysely, AnyExpressionBuilder, AnyExpressionWrapper } from "./sql-query-compiler";
15
19
 
16
20
  /**
17
21
  * Returns the fully qualified SQL name for a column (table.column).
18
22
  *
19
23
  * @param column - The column to get the full name for
20
- * @param mapper - Optional table name mapper for namespace prefixing
24
+ * @param resolver - Optional naming resolver for namespace prefixing
21
25
  * @returns The fully qualified SQL name in the format "tableName.columnName"
22
26
  * @internal
23
27
  */
24
- export function fullSQLName(column: AnyColumn, mapper?: TableNameMapper): string {
25
- const tableName = mapper ? mapper.toPhysical(column.tableName) : column.tableName;
26
- return `${tableName}.${column.name}`;
28
+ export function fullSQLName(column: AnyColumn, resolver?: NamingResolver): string {
29
+ const tableName = resolver ? resolver.getTableName(column.tableName) : column.tableName;
30
+ const columnName = resolver ? resolver.getColumnName(column.tableName, column.name) : column.name;
31
+ return `${tableName}.${columnName}`;
32
+ }
33
+
34
+ function fullSQLNameWithAlias(
35
+ column: AnyColumn,
36
+ resolver?: NamingResolver,
37
+ table?: AnyTable,
38
+ tableAlias?: string,
39
+ ): string {
40
+ if (table && tableAlias && column.tableName === table.name) {
41
+ const columnName = resolver
42
+ ? resolver.getColumnName(column.tableName, column.name)
43
+ : column.name;
44
+ return `${tableAlias}.${columnName}`;
45
+ }
46
+ return fullSQLName(column, resolver);
27
47
  }
28
48
 
29
49
  /**
@@ -36,7 +56,7 @@ export function fullSQLName(column: AnyColumn, mapper?: TableNameMapper): string
36
56
  * @param condition - The condition tree to build the WHERE clause from
37
57
  * @param eb - Kysely expression builder for constructing SQL expressions
38
58
  * @param database - The database type (affects SQL generation)
39
- * @param mapper - Optional table name mapper for namespace prefixing
59
+ * @param resolver - Optional naming resolver for namespace prefixing
40
60
  * @param table - The table being queried (used for resolving reference columns)
41
61
  * @returns A Kysely expression wrapper representing the WHERE clause
42
62
  * @internal
@@ -45,10 +65,12 @@ export function buildWhere(
45
65
  condition: Condition,
46
66
  eb: AnyExpressionBuilder,
47
67
  driverConfig: DriverConfig,
48
- mapper?: TableNameMapper,
68
+ sqliteStorageMode?: SQLiteStorageMode,
69
+ resolver?: NamingResolver,
49
70
  table?: AnyTable,
71
+ tableAlias?: string,
50
72
  ): AnyExpressionWrapper {
51
- const serializer = createSQLSerializer(driverConfig);
73
+ const serializer = createSQLSerializer(driverConfig, sqliteStorageMode);
52
74
 
53
75
  if (condition.type === "compare") {
54
76
  const left = condition.a;
@@ -56,25 +78,40 @@ export function buildWhere(
56
78
  let val = condition.b;
57
79
 
58
80
  if (!(val instanceof Column)) {
59
- // Handle reference columns specially
60
- if (left.role === "reference" && table) {
81
+ if (isDbNow(val)) {
82
+ val = buildDbNowSql({
83
+ driverConfig,
84
+ columnType: left.type,
85
+ offsetMs: getDbNowOffsetMs(val),
86
+ sqliteStorageMode,
87
+ });
88
+ } else if (left.role === "reference" && table) {
89
+ // Handle reference columns specially
61
90
  if (typeof val === "string") {
62
91
  // String external ID - create subquery to lookup internal ID
63
92
  const relation = Object.values(table.relations).find((rel) =>
64
- rel.on.some(([localCol]) => localCol === left.ormName),
93
+ rel.on.some(([localCol]) => localCol === left.name),
65
94
  );
66
95
  if (relation) {
67
96
  const refTable = relation.table;
68
97
  const internalIdCol = refTable.getInternalIdColumn();
69
98
  const idCol = refTable.getIdColumn();
70
- const physicalTableName = mapper
71
- ? mapper.toPhysical(refTable.ormName)
72
- : refTable.ormName;
99
+ const physicalTableName = resolver
100
+ ? resolver.getTableName(refTable.name)
101
+ : refTable.name;
73
102
 
74
103
  val = eb
75
104
  .selectFrom(physicalTableName)
76
- .select(internalIdCol.name)
77
- .where(idCol.name, "=", val)
105
+ .select(
106
+ resolver
107
+ ? resolver.getColumnName(refTable.name, internalIdCol.name)
108
+ : internalIdCol.name,
109
+ )
110
+ .where(
111
+ resolver ? resolver.getColumnName(refTable.name, idCol.name) : idCol.name,
112
+ "=",
113
+ val,
114
+ )
78
115
  .limit(1);
79
116
  }
80
117
  } else if (val instanceof FragnoId && val.internalId !== undefined) {
@@ -83,20 +120,28 @@ export function buildWhere(
83
120
  } else if (val instanceof FragnoId && val.internalId === undefined) {
84
121
  // FragnoId without internal ID - create subquery using external ID
85
122
  const relation = Object.values(table.relations).find((rel) =>
86
- rel.on.some(([localCol]) => localCol === left.ormName),
123
+ rel.on.some(([localCol]) => localCol === left.name),
87
124
  );
88
125
  if (relation) {
89
126
  const refTable = relation.table;
90
127
  const internalIdCol = refTable.getInternalIdColumn();
91
128
  const idCol = refTable.getIdColumn();
92
- const physicalTableName = mapper
93
- ? mapper.toPhysical(refTable.ormName)
94
- : refTable.ormName;
129
+ const physicalTableName = resolver
130
+ ? resolver.getTableName(refTable.name)
131
+ : refTable.name;
95
132
 
96
133
  val = eb
97
134
  .selectFrom(physicalTableName)
98
- .select(internalIdCol.name)
99
- .where(idCol.name, "=", val.externalId)
135
+ .select(
136
+ resolver
137
+ ? resolver.getColumnName(refTable.name, internalIdCol.name)
138
+ : internalIdCol.name,
139
+ )
140
+ .where(
141
+ resolver ? resolver.getColumnName(refTable.name, idCol.name) : idCol.name,
142
+ "=",
143
+ val.externalId,
144
+ )
100
145
  .limit(1);
101
146
  }
102
147
  } else if (val instanceof FragnoReference) {
@@ -122,54 +167,75 @@ export function buildWhere(
122
167
  v = "like";
123
168
  rhs =
124
169
  val instanceof Column
125
- ? sql`concat('%', ${eb.ref(fullSQLName(val, mapper))}, '%')`
170
+ ? sql`concat('%', ${eb.ref(fullSQLNameWithAlias(val, resolver, table, tableAlias))}, '%')`
126
171
  : `%${val}%`;
127
172
  break;
128
173
  case "not contains":
129
174
  v = "not like";
130
175
  rhs =
131
176
  val instanceof Column
132
- ? sql`concat('%', ${eb.ref(fullSQLName(val, mapper))}, '%')`
177
+ ? sql`concat('%', ${eb.ref(fullSQLNameWithAlias(val, resolver, table, tableAlias))}, '%')`
133
178
  : `%${val}%`;
134
179
  break;
135
180
  case "starts with":
136
181
  v = "like";
137
182
  rhs =
138
- val instanceof Column ? sql`concat(${eb.ref(fullSQLName(val, mapper))}, '%')` : `${val}%`;
183
+ val instanceof Column
184
+ ? sql`concat(${eb.ref(fullSQLNameWithAlias(val, resolver, table, tableAlias))}, '%')`
185
+ : `${val}%`;
139
186
  break;
140
187
  case "not starts with":
141
188
  v = "not like";
142
189
  rhs =
143
- val instanceof Column ? sql`concat(${eb.ref(fullSQLName(val, mapper))}, '%')` : `${val}%`;
190
+ val instanceof Column
191
+ ? sql`concat(${eb.ref(fullSQLNameWithAlias(val, resolver, table, tableAlias))}, '%')`
192
+ : `${val}%`;
144
193
  break;
145
194
  case "ends with":
146
195
  v = "like";
147
196
  rhs =
148
- val instanceof Column ? sql`concat('%', ${eb.ref(fullSQLName(val, mapper))})` : `%${val}`;
197
+ val instanceof Column
198
+ ? sql`concat('%', ${eb.ref(fullSQLNameWithAlias(val, resolver, table, tableAlias))})`
199
+ : `%${val}`;
149
200
  break;
150
201
  case "not ends with":
151
202
  v = "not like";
152
203
  rhs =
153
- val instanceof Column ? sql`concat('%', ${eb.ref(fullSQLName(val, mapper))})` : `%${val}`;
204
+ val instanceof Column
205
+ ? sql`concat('%', ${eb.ref(fullSQLNameWithAlias(val, resolver, table, tableAlias))})`
206
+ : `%${val}`;
154
207
  break;
155
208
  default:
156
209
  v = op;
157
- rhs = val instanceof Column ? eb.ref(fullSQLName(val, mapper)) : val;
210
+ rhs =
211
+ val instanceof Column
212
+ ? eb.ref(fullSQLNameWithAlias(val, resolver, table, tableAlias))
213
+ : val;
158
214
  }
159
215
 
160
- return eb(fullSQLName(left, mapper), v, rhs);
216
+ return eb(fullSQLNameWithAlias(left, resolver, table, tableAlias), v, rhs);
161
217
  }
162
218
 
163
219
  // Nested conditions
164
220
  if (condition.type === "and") {
165
- return eb.and(condition.items.map((v) => buildWhere(v, eb, driverConfig, mapper, table)));
221
+ return eb.and(
222
+ condition.items.map((v) =>
223
+ buildWhere(v, eb, driverConfig, sqliteStorageMode, resolver, table, tableAlias),
224
+ ),
225
+ );
166
226
  }
167
227
 
168
228
  if (condition.type === "not") {
169
- return eb.not(buildWhere(condition.item, eb, driverConfig, mapper, table));
229
+ return eb.not(
230
+ buildWhere(condition.item, eb, driverConfig, sqliteStorageMode, resolver, table, tableAlias),
231
+ );
170
232
  }
171
233
 
172
- return eb.or(condition.items.map((v) => buildWhere(v, eb, driverConfig, mapper, table)));
234
+ return eb.or(
235
+ condition.items.map((v) =>
236
+ buildWhere(v, eb, driverConfig, sqliteStorageMode, resolver, table, tableAlias),
237
+ ),
238
+ );
173
239
  }
174
240
 
175
241
  /**
@@ -177,17 +243,18 @@ export function buildWhere(
177
243
  *
178
244
  * @param values - The encoded values that may contain ReferenceSubquery objects
179
245
  * @param kysely - The Kysely database instance for building subqueries
180
- * @param mapper - Optional table name mapper for namespace prefixing
246
+ * @param resolver - Optional naming resolver for namespace prefixing
181
247
  * @returns Processed values with subqueries in place of ReferenceSubquery markers
182
248
  * @internal
183
249
  */
184
250
  export function processReferenceSubqueries(
185
251
  values: Record<string, unknown>,
186
252
  kysely: AnyKysely,
187
- mapper?: TableNameMapper,
253
+ resolver?: NamingResolver,
188
254
  ): Record<string, unknown> {
189
255
  const processed: Record<string, unknown> = {};
190
- const getTableName = (table: AnyTable) => (mapper ? mapper.toPhysical(table.name) : table.name);
256
+ const getTableName = (table: AnyTable) =>
257
+ resolver ? resolver.getTableName(table.name) : table.name;
191
258
 
192
259
  for (const [key, value] of Object.entries(values)) {
193
260
  if (value instanceof ReferenceSubquery) {
@@ -196,11 +263,15 @@ export function processReferenceSubqueries(
196
263
  const tableName = getTableName(refTable);
197
264
  const internalIdCol = refTable.getInternalIdColumn().name;
198
265
  const idCol = refTable.getIdColumn().name;
266
+ const internalIdColumnName = resolver
267
+ ? resolver.getColumnName(refTable.name, internalIdCol)
268
+ : internalIdCol;
269
+ const idColumnName = resolver ? resolver.getColumnName(refTable.name, idCol) : idCol;
199
270
 
200
271
  processed[key] = kysely
201
272
  .selectFrom(tableName)
202
- .select(internalIdCol)
203
- .where(idCol, "=", externalId)
273
+ .select(internalIdColumnName)
274
+ .where(idColumnName, "=", externalId)
204
275
  .limit(1);
205
276
  } else {
206
277
  processed[key] = value;
@@ -1,20 +1,15 @@
1
- import { KyselyPGlite } from "kysely-pglite";
2
1
  import { beforeAll, describe, expect, expectTypeOf, it } from "vitest";
3
- import { KyselyAdapter } from "./kysely-adapter";
4
- import {
5
- column,
6
- idColumn,
7
- referenceColumn,
8
- schema,
9
- type FragnoId,
10
- type FragnoReference,
11
- } from "../../schema/create";
12
- import { Cursor } from "../../query/cursor";
13
- import { PGLiteDriverConfig } from "../generic-sql/driver-config";
2
+
3
+ import { KyselyPGlite } from "kysely-pglite";
4
+
14
5
  import { internalSchema } from "../../fragments/internal-fragment";
6
+ import { Cursor } from "../../query/cursor";
7
+ import { column, idColumn, referenceColumn, schema, type FragnoId } from "../../schema/create";
8
+ import { PGLiteDriverConfig } from "./driver-config";
9
+ import { SqlAdapter } from "./generic-sql-adapter";
15
10
 
16
- describe("KyselyAdapter PGLite", () => {
17
- const testSchema = schema((s) => {
11
+ describe("SqlAdapter PGLite", () => {
12
+ const testSchema = schema("test", (s) => {
18
13
  return s
19
14
  .addTable("users", (t) => {
20
15
  return t
@@ -96,12 +91,12 @@ describe("KyselyAdapter PGLite", () => {
96
91
  });
97
92
  });
98
93
 
99
- let adapter: KyselyAdapter;
94
+ let adapter: SqlAdapter;
100
95
 
101
96
  beforeAll(async () => {
102
97
  const { dialect } = await KyselyPGlite.create();
103
98
 
104
- adapter = new KyselyAdapter({
99
+ adapter = new SqlAdapter({
105
100
  dialect,
106
101
  driverConfig: new PGLiteDriverConfig(),
107
102
  });
@@ -478,7 +473,6 @@ describe("KyselyAdapter PGLite", () => {
478
473
  type PostTag = Prettify<InferArrayElement<typeof postTags>>;
479
474
  type Tag = Prettify<RemoveIndex<PostTag["tag"]>>;
480
475
  expectTypeOf<Tag>().toEqualTypeOf<{
481
- id: FragnoId;
482
476
  name: string;
483
477
  } | null>();
484
478
 
@@ -487,10 +481,7 @@ describe("KyselyAdapter PGLite", () => {
487
481
  expect(typeScriptPosts).toHaveLength(1);
488
482
  type Post = Prettify<(typeof typeScriptPosts)[number]["post"]>;
489
483
  expectTypeOf<Post>().toEqualTypeOf<{
490
- id: FragnoId;
491
- user_id: FragnoReference;
492
484
  title: string;
493
- content: string;
494
485
  } | null>();
495
486
  expect(typeScriptPosts[0]!.post!.title).toBe("TypeScript Tips");
496
487