typhex 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +21 -0
  3. package/README.md +417 -0
  4. package/SECURITY.md +32 -0
  5. package/dist/arrow/aggregates.d.ts +12 -0
  6. package/dist/arrow/aggregates.d.ts.map +1 -0
  7. package/dist/arrow/aggregates.js +32 -0
  8. package/dist/arrow/aggregates.js.map +1 -0
  9. package/dist/arrow/constants.d.ts +15 -0
  10. package/dist/arrow/constants.d.ts.map +1 -0
  11. package/dist/arrow/constants.js +42 -0
  12. package/dist/arrow/constants.js.map +1 -0
  13. package/dist/arrow/index.d.ts +7 -0
  14. package/dist/arrow/index.d.ts.map +1 -0
  15. package/dist/arrow/index.js +7 -0
  16. package/dist/arrow/index.js.map +1 -0
  17. package/dist/config/index.d.ts +6 -0
  18. package/dist/config/index.d.ts.map +1 -0
  19. package/dist/config/index.js +4 -0
  20. package/dist/config/index.js.map +1 -0
  21. package/dist/config/load-config.d.ts +19 -0
  22. package/dist/config/load-config.d.ts.map +1 -0
  23. package/dist/config/load-config.js +84 -0
  24. package/dist/config/load-config.js.map +1 -0
  25. package/dist/config/load-env.d.ts +7 -0
  26. package/dist/config/load-env.d.ts.map +1 -0
  27. package/dist/config/load-env.js +62 -0
  28. package/dist/config/load-env.js.map +1 -0
  29. package/dist/config/types.d.ts +20 -0
  30. package/dist/config/types.d.ts.map +1 -0
  31. package/dist/config/types.js +10 -0
  32. package/dist/config/types.js.map +1 -0
  33. package/dist/dbs/base-migrator.d.ts +20 -0
  34. package/dist/dbs/base-migrator.d.ts.map +1 -0
  35. package/dist/dbs/base-migrator.js +112 -0
  36. package/dist/dbs/base-migrator.js.map +1 -0
  37. package/dist/dbs/index.d.ts +9 -0
  38. package/dist/dbs/index.d.ts.map +1 -0
  39. package/dist/dbs/index.js +17 -0
  40. package/dist/dbs/index.js.map +1 -0
  41. package/dist/dbs/postgres/dialect.d.ts +8 -0
  42. package/dist/dbs/postgres/dialect.d.ts.map +1 -0
  43. package/dist/dbs/postgres/dialect.js +17 -0
  44. package/dist/dbs/postgres/dialect.js.map +1 -0
  45. package/dist/dbs/postgres/driver.d.ts +42 -0
  46. package/dist/dbs/postgres/driver.d.ts.map +1 -0
  47. package/dist/dbs/postgres/driver.js +111 -0
  48. package/dist/dbs/postgres/driver.js.map +1 -0
  49. package/dist/dbs/postgres/index.d.ts +6 -0
  50. package/dist/dbs/postgres/index.d.ts.map +1 -0
  51. package/dist/dbs/postgres/index.js +5 -0
  52. package/dist/dbs/postgres/index.js.map +1 -0
  53. package/dist/dbs/postgres/migrator.d.ts +13 -0
  54. package/dist/dbs/postgres/migrator.d.ts.map +1 -0
  55. package/dist/dbs/postgres/migrator.js +22 -0
  56. package/dist/dbs/postgres/migrator.js.map +1 -0
  57. package/dist/dbs/postgres/query-compiler.d.ts +22 -0
  58. package/dist/dbs/postgres/query-compiler.d.ts.map +1 -0
  59. package/dist/dbs/postgres/query-compiler.js +140 -0
  60. package/dist/dbs/postgres/query-compiler.js.map +1 -0
  61. package/dist/dbs/postgres/trx.d.ts +16 -0
  62. package/dist/dbs/postgres/trx.d.ts.map +1 -0
  63. package/dist/dbs/postgres/trx.js +68 -0
  64. package/dist/dbs/postgres/trx.js.map +1 -0
  65. package/dist/dbs/query-compiler.d.ts +135 -0
  66. package/dist/dbs/query-compiler.d.ts.map +1 -0
  67. package/dist/dbs/query-compiler.js +775 -0
  68. package/dist/dbs/query-compiler.js.map +1 -0
  69. package/dist/dbs/sqlite/dialect.d.ts +8 -0
  70. package/dist/dbs/sqlite/dialect.d.ts.map +1 -0
  71. package/dist/dbs/sqlite/dialect.js +17 -0
  72. package/dist/dbs/sqlite/dialect.js.map +1 -0
  73. package/dist/dbs/sqlite/driver.d.ts +9 -0
  74. package/dist/dbs/sqlite/driver.d.ts.map +1 -0
  75. package/dist/dbs/sqlite/driver.js +66 -0
  76. package/dist/dbs/sqlite/driver.js.map +1 -0
  77. package/dist/dbs/sqlite/index.d.ts +6 -0
  78. package/dist/dbs/sqlite/index.d.ts.map +1 -0
  79. package/dist/dbs/sqlite/index.js +5 -0
  80. package/dist/dbs/sqlite/index.js.map +1 -0
  81. package/dist/dbs/sqlite/migrator.d.ts +13 -0
  82. package/dist/dbs/sqlite/migrator.d.ts.map +1 -0
  83. package/dist/dbs/sqlite/migrator.js +22 -0
  84. package/dist/dbs/sqlite/migrator.js.map +1 -0
  85. package/dist/dbs/sqlite/query-compiler.d.ts +26 -0
  86. package/dist/dbs/sqlite/query-compiler.d.ts.map +1 -0
  87. package/dist/dbs/sqlite/query-compiler.js +80 -0
  88. package/dist/dbs/sqlite/query-compiler.js.map +1 -0
  89. package/dist/dbs/sqlite/trx.d.ts +13 -0
  90. package/dist/dbs/sqlite/trx.d.ts.map +1 -0
  91. package/dist/dbs/sqlite/trx.js +69 -0
  92. package/dist/dbs/sqlite/trx.js.map +1 -0
  93. package/dist/dbs/types.d.ts +92 -0
  94. package/dist/dbs/types.d.ts.map +1 -0
  95. package/dist/dbs/types.js +26 -0
  96. package/dist/dbs/types.js.map +1 -0
  97. package/dist/dialect.d.ts +3 -0
  98. package/dist/dialect.d.ts.map +1 -0
  99. package/dist/dialect.js +2 -0
  100. package/dist/dialect.js.map +1 -0
  101. package/dist/driver/factory.d.ts +19 -0
  102. package/dist/driver/factory.d.ts.map +1 -0
  103. package/dist/driver/factory.js +24 -0
  104. package/dist/driver/factory.js.map +1 -0
  105. package/dist/driver/index.d.ts +6 -0
  106. package/dist/driver/index.d.ts.map +1 -0
  107. package/dist/driver/index.js +3 -0
  108. package/dist/driver/index.js.map +1 -0
  109. package/dist/driver/sqlite.d.ts +15 -0
  110. package/dist/driver/sqlite.d.ts.map +1 -0
  111. package/dist/driver/sqlite.js +74 -0
  112. package/dist/driver/sqlite.js.map +1 -0
  113. package/dist/driver/types.d.ts +75 -0
  114. package/dist/driver/types.d.ts.map +1 -0
  115. package/dist/driver/types.js +2 -0
  116. package/dist/driver/types.js.map +1 -0
  117. package/dist/entity/entity.d.ts +67 -0
  118. package/dist/entity/entity.d.ts.map +1 -0
  119. package/dist/entity/entity.js +139 -0
  120. package/dist/entity/entity.js.map +1 -0
  121. package/dist/entity/global-driver.d.ts +38 -0
  122. package/dist/entity/global-driver.d.ts.map +1 -0
  123. package/dist/entity/global-driver.js +109 -0
  124. package/dist/entity/global-driver.js.map +1 -0
  125. package/dist/entity/index.d.ts +8 -0
  126. package/dist/entity/index.d.ts.map +1 -0
  127. package/dist/entity/index.js +3 -0
  128. package/dist/entity/index.js.map +1 -0
  129. package/dist/entity/pk-columns.d.ts +5 -0
  130. package/dist/entity/pk-columns.d.ts.map +1 -0
  131. package/dist/entity/pk-columns.js +14 -0
  132. package/dist/entity/pk-columns.js.map +1 -0
  133. package/dist/entity/relations.d.ts +134 -0
  134. package/dist/entity/relations.d.ts.map +1 -0
  135. package/dist/entity/relations.js +23 -0
  136. package/dist/entity/relations.js.map +1 -0
  137. package/dist/entity/schema-inference.d.ts +77 -0
  138. package/dist/entity/schema-inference.d.ts.map +1 -0
  139. package/dist/entity/schema-inference.js +6 -0
  140. package/dist/entity/schema-inference.js.map +1 -0
  141. package/dist/entity/types.d.ts +30 -0
  142. package/dist/entity/types.d.ts.map +1 -0
  143. package/dist/entity/types.js +5 -0
  144. package/dist/entity/types.js.map +1 -0
  145. package/dist/index.d.ts +25 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +12 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/ir/index.d.ts +2 -0
  150. package/dist/ir/index.d.ts.map +1 -0
  151. package/dist/ir/index.js +2 -0
  152. package/dist/ir/index.js.map +1 -0
  153. package/dist/ir/types.d.ts +148 -0
  154. package/dist/ir/types.d.ts.map +1 -0
  155. package/dist/ir/types.js +97 -0
  156. package/dist/ir/types.js.map +1 -0
  157. package/dist/migration/cli.d.ts +18 -0
  158. package/dist/migration/cli.d.ts.map +1 -0
  159. package/dist/migration/cli.js +236 -0
  160. package/dist/migration/cli.js.map +1 -0
  161. package/dist/migration/diff.d.ts +10 -0
  162. package/dist/migration/diff.d.ts.map +1 -0
  163. package/dist/migration/diff.js +10 -0
  164. package/dist/migration/diff.js.map +1 -0
  165. package/dist/migration/generator.d.ts +12 -0
  166. package/dist/migration/generator.d.ts.map +1 -0
  167. package/dist/migration/generator.js +98 -0
  168. package/dist/migration/generator.js.map +1 -0
  169. package/dist/migration/index.d.ts +7 -0
  170. package/dist/migration/index.d.ts.map +1 -0
  171. package/dist/migration/index.js +5 -0
  172. package/dist/migration/index.js.map +1 -0
  173. package/dist/migration/runner.d.ts +32 -0
  174. package/dist/migration/runner.d.ts.map +1 -0
  175. package/dist/migration/runner.js +279 -0
  176. package/dist/migration/runner.js.map +1 -0
  177. package/dist/migration/topo-sort.d.ts +12 -0
  178. package/dist/migration/topo-sort.d.ts.map +1 -0
  179. package/dist/migration/topo-sort.js +42 -0
  180. package/dist/migration/topo-sort.js.map +1 -0
  181. package/dist/migration/types.d.ts +45 -0
  182. package/dist/migration/types.d.ts.map +1 -0
  183. package/dist/migration/types.js +2 -0
  184. package/dist/migration/types.js.map +1 -0
  185. package/dist/orm/aggregates.d.ts +19 -0
  186. package/dist/orm/aggregates.d.ts.map +1 -0
  187. package/dist/orm/aggregates.js +32 -0
  188. package/dist/orm/aggregates.js.map +1 -0
  189. package/dist/orm/db.d.ts +105 -0
  190. package/dist/orm/db.d.ts.map +1 -0
  191. package/dist/orm/db.js +172 -0
  192. package/dist/orm/db.js.map +1 -0
  193. package/dist/orm/expr.d.ts +125 -0
  194. package/dist/orm/expr.d.ts.map +1 -0
  195. package/dist/orm/expr.js +10 -0
  196. package/dist/orm/expr.js.map +1 -0
  197. package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.d.ts +9 -0
  198. package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.d.ts.map +1 -0
  199. package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.js +44 -0
  200. package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.js.map +1 -0
  201. package/dist/orm/helpers/insert-graph/insert-graph-executor.d.ts +13 -0
  202. package/dist/orm/helpers/insert-graph/insert-graph-executor.d.ts.map +1 -0
  203. package/dist/orm/helpers/insert-graph/insert-graph-executor.js +42 -0
  204. package/dist/orm/helpers/insert-graph/insert-graph-executor.js.map +1 -0
  205. package/dist/orm/helpers/insert-graph/insert-graph-planner.d.ts +46 -0
  206. package/dist/orm/helpers/insert-graph/insert-graph-planner.d.ts.map +1 -0
  207. package/dist/orm/helpers/insert-graph/insert-graph-planner.js +258 -0
  208. package/dist/orm/helpers/insert-graph/insert-graph-planner.js.map +1 -0
  209. package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.d.ts +7 -0
  210. package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.d.ts.map +1 -0
  211. package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.js +8 -0
  212. package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.js.map +1 -0
  213. package/dist/orm/helpers/insert-graph/sequence-id-assigner.d.ts +15 -0
  214. package/dist/orm/helpers/insert-graph/sequence-id-assigner.d.ts.map +1 -0
  215. package/dist/orm/helpers/insert-graph/sequence-id-assigner.js +48 -0
  216. package/dist/orm/helpers/insert-graph/sequence-id-assigner.js.map +1 -0
  217. package/dist/orm/helpers/query-plan/expr-builder.d.ts +155 -0
  218. package/dist/orm/helpers/query-plan/expr-builder.d.ts.map +1 -0
  219. package/dist/orm/helpers/query-plan/expr-builder.js +297 -0
  220. package/dist/orm/helpers/query-plan/expr-builder.js.map +1 -0
  221. package/dist/orm/helpers/query-plan/query-ir-analyzer.d.ts +48 -0
  222. package/dist/orm/helpers/query-plan/query-ir-analyzer.d.ts.map +1 -0
  223. package/dist/orm/helpers/query-plan/query-ir-analyzer.js +262 -0
  224. package/dist/orm/helpers/query-plan/query-ir-analyzer.js.map +1 -0
  225. package/dist/orm/helpers/query-plan/query-plan.d.ts +164 -0
  226. package/dist/orm/helpers/query-plan/query-plan.d.ts.map +1 -0
  227. package/dist/orm/helpers/query-plan/query-plan.js +549 -0
  228. package/dist/orm/helpers/query-plan/query-plan.js.map +1 -0
  229. package/dist/orm/helpers/query-plan/select-classifier.d.ts +161 -0
  230. package/dist/orm/helpers/query-plan/select-classifier.d.ts.map +1 -0
  231. package/dist/orm/helpers/query-plan/select-classifier.js +359 -0
  232. package/dist/orm/helpers/query-plan/select-classifier.js.map +1 -0
  233. package/dist/orm/helpers/relations/relation-assembler.d.ts +21 -0
  234. package/dist/orm/helpers/relations/relation-assembler.d.ts.map +1 -0
  235. package/dist/orm/helpers/relations/relation-assembler.js +60 -0
  236. package/dist/orm/helpers/relations/relation-assembler.js.map +1 -0
  237. package/dist/orm/helpers/relations/relation-fetcher.d.ts +30 -0
  238. package/dist/orm/helpers/relations/relation-fetcher.d.ts.map +1 -0
  239. package/dist/orm/helpers/relations/relation-fetcher.js +128 -0
  240. package/dist/orm/helpers/relations/relation-fetcher.js.map +1 -0
  241. package/dist/orm/helpers/relations/relation-joins.d.ts +74 -0
  242. package/dist/orm/helpers/relations/relation-joins.d.ts.map +1 -0
  243. package/dist/orm/helpers/relations/relation-joins.js +138 -0
  244. package/dist/orm/helpers/relations/relation-joins.js.map +1 -0
  245. package/dist/orm/helpers/relations/relation-resolver.d.ts +14 -0
  246. package/dist/orm/helpers/relations/relation-resolver.d.ts.map +1 -0
  247. package/dist/orm/helpers/relations/relation-resolver.js +25 -0
  248. package/dist/orm/helpers/relations/relation-resolver.js.map +1 -0
  249. package/dist/orm/index.d.ts +7 -0
  250. package/dist/orm/index.d.ts.map +1 -0
  251. package/dist/orm/index.js +5 -0
  252. package/dist/orm/index.js.map +1 -0
  253. package/dist/orm/query-builder.d.ts +136 -0
  254. package/dist/orm/query-builder.d.ts.map +1 -0
  255. package/dist/orm/query-builder.js +433 -0
  256. package/dist/orm/query-builder.js.map +1 -0
  257. package/dist/orm/query-helpers.d.ts +35 -0
  258. package/dist/orm/query-helpers.d.ts.map +1 -0
  259. package/dist/orm/query-helpers.js +83 -0
  260. package/dist/orm/query-helpers.js.map +1 -0
  261. package/dist/orm/query-state.d.ts +56 -0
  262. package/dist/orm/query-state.d.ts.map +1 -0
  263. package/dist/orm/query-state.js +112 -0
  264. package/dist/orm/query-state.js.map +1 -0
  265. package/dist/orm/single-row-query-builder.d.ts +18 -0
  266. package/dist/orm/single-row-query-builder.d.ts.map +1 -0
  267. package/dist/orm/single-row-query-builder.js +90 -0
  268. package/dist/orm/single-row-query-builder.js.map +1 -0
  269. package/dist/orm/trx.d.ts +40 -0
  270. package/dist/orm/trx.d.ts.map +1 -0
  271. package/dist/orm/trx.js +118 -0
  272. package/dist/orm/trx.js.map +1 -0
  273. package/dist/parser/acorn-helpers.d.ts +43 -0
  274. package/dist/parser/acorn-helpers.d.ts.map +1 -0
  275. package/dist/parser/acorn-helpers.js +104 -0
  276. package/dist/parser/acorn-helpers.js.map +1 -0
  277. package/dist/parser/acorn-member.d.ts +16 -0
  278. package/dist/parser/acorn-member.d.ts.map +1 -0
  279. package/dist/parser/acorn-member.js +31 -0
  280. package/dist/parser/acorn-member.js.map +1 -0
  281. package/dist/parser/acorn-types.d.ts +14 -0
  282. package/dist/parser/acorn-types.d.ts.map +1 -0
  283. package/dist/parser/acorn-types.js +6 -0
  284. package/dist/parser/acorn-types.js.map +1 -0
  285. package/dist/parser/arrow-source.d.ts +23 -0
  286. package/dist/parser/arrow-source.d.ts.map +1 -0
  287. package/dist/parser/arrow-source.js +70 -0
  288. package/dist/parser/arrow-source.js.map +1 -0
  289. package/dist/parser/group-by.d.ts +17 -0
  290. package/dist/parser/group-by.d.ts.map +1 -0
  291. package/dist/parser/group-by.js +62 -0
  292. package/dist/parser/group-by.js.map +1 -0
  293. package/dist/parser/index.d.ts +5 -0
  294. package/dist/parser/index.d.ts.map +1 -0
  295. package/dist/parser/index.js +3 -0
  296. package/dist/parser/index.js.map +1 -0
  297. package/dist/parser/parse-arrow.d.ts +10 -0
  298. package/dist/parser/parse-arrow.d.ts.map +1 -0
  299. package/dist/parser/parse-arrow.js +9 -0
  300. package/dist/parser/parse-arrow.js.map +1 -0
  301. package/dist/parser/predicate-walk.d.ts +24 -0
  302. package/dist/parser/predicate-walk.d.ts.map +1 -0
  303. package/dist/parser/predicate-walk.js +247 -0
  304. package/dist/parser/predicate-walk.js.map +1 -0
  305. package/dist/parser/resolve.d.ts +25 -0
  306. package/dist/parser/resolve.d.ts.map +1 -0
  307. package/dist/parser/resolve.js +134 -0
  308. package/dist/parser/resolve.js.map +1 -0
  309. package/dist/parser/select.d.ts +7 -0
  310. package/dist/parser/select.d.ts.map +1 -0
  311. package/dist/parser/select.js +333 -0
  312. package/dist/parser/select.js.map +1 -0
  313. package/dist/parser/update.d.ts +7 -0
  314. package/dist/parser/update.d.ts.map +1 -0
  315. package/dist/parser/update.js +51 -0
  316. package/dist/parser/update.js.map +1 -0
  317. package/dist/postgres/aggregates.d.ts +12 -0
  318. package/dist/postgres/aggregates.d.ts.map +1 -0
  319. package/dist/postgres/aggregates.js +19 -0
  320. package/dist/postgres/aggregates.js.map +1 -0
  321. package/dist/postgres.d.ts +6 -0
  322. package/dist/postgres.d.ts.map +1 -0
  323. package/dist/postgres.js +6 -0
  324. package/dist/postgres.js.map +1 -0
  325. package/dist/schema/index.d.ts +2 -0
  326. package/dist/schema/index.d.ts.map +1 -0
  327. package/dist/schema/index.js +2 -0
  328. package/dist/schema/index.js.map +1 -0
  329. package/dist/schema/types.d.ts +16 -0
  330. package/dist/schema/types.d.ts.map +1 -0
  331. package/dist/schema/types.js +40 -0
  332. package/dist/schema/types.js.map +1 -0
  333. package/dist/sqlite/aggregates.d.ts +8 -0
  334. package/dist/sqlite/aggregates.d.ts.map +1 -0
  335. package/dist/sqlite/aggregates.js +11 -0
  336. package/dist/sqlite/aggregates.js.map +1 -0
  337. package/dist/sqlite.d.ts +6 -0
  338. package/dist/sqlite.d.ts.map +1 -0
  339. package/dist/sqlite.js +6 -0
  340. package/dist/sqlite.js.map +1 -0
  341. package/dist/transformer/bindings.d.ts +18 -0
  342. package/dist/transformer/bindings.d.ts.map +1 -0
  343. package/dist/transformer/bindings.js +52 -0
  344. package/dist/transformer/bindings.js.map +1 -0
  345. package/dist/transformer/index.d.ts +17 -0
  346. package/dist/transformer/index.d.ts.map +1 -0
  347. package/dist/transformer/index.js +75 -0
  348. package/dist/transformer/index.js.map +1 -0
  349. package/dist/transformer/ir-emit.d.ts +12 -0
  350. package/dist/transformer/ir-emit.d.ts.map +1 -0
  351. package/dist/transformer/ir-emit.js +144 -0
  352. package/dist/transformer/ir-emit.js.map +1 -0
  353. package/dist/transformer/join-transformer.d.ts +12 -0
  354. package/dist/transformer/join-transformer.d.ts.map +1 -0
  355. package/dist/transformer/join-transformer.js +102 -0
  356. package/dist/transformer/join-transformer.js.map +1 -0
  357. package/dist/transformer/orderby-transformer.d.ts +13 -0
  358. package/dist/transformer/orderby-transformer.d.ts.map +1 -0
  359. package/dist/transformer/orderby-transformer.js +84 -0
  360. package/dist/transformer/orderby-transformer.js.map +1 -0
  361. package/dist/transformer/select-transformer.d.ts +9 -0
  362. package/dist/transformer/select-transformer.d.ts.map +1 -0
  363. package/dist/transformer/select-transformer.js +222 -0
  364. package/dist/transformer/select-transformer.js.map +1 -0
  365. package/dist/transformer/shared.d.ts +12 -0
  366. package/dist/transformer/shared.d.ts.map +1 -0
  367. package/dist/transformer/shared.js +12 -0
  368. package/dist/transformer/shared.js.map +1 -0
  369. package/dist/transformer/subquery-transformer.d.ts +15 -0
  370. package/dist/transformer/subquery-transformer.d.ts.map +1 -0
  371. package/dist/transformer/subquery-transformer.js +43 -0
  372. package/dist/transformer/subquery-transformer.js.map +1 -0
  373. package/dist/transformer/ts-aggregates.d.ts +13 -0
  374. package/dist/transformer/ts-aggregates.d.ts.map +1 -0
  375. package/dist/transformer/ts-aggregates.js +83 -0
  376. package/dist/transformer/ts-aggregates.js.map +1 -0
  377. package/dist/transformer/ts-binary.d.ts +8 -0
  378. package/dist/transformer/ts-binary.d.ts.map +1 -0
  379. package/dist/transformer/ts-binary.js +32 -0
  380. package/dist/transformer/ts-binary.js.map +1 -0
  381. package/dist/transformer/ts-member.d.ts +12 -0
  382. package/dist/transformer/ts-member.d.ts.map +1 -0
  383. package/dist/transformer/ts-member.js +22 -0
  384. package/dist/transformer/ts-member.js.map +1 -0
  385. package/dist/transformer/ts-utils.d.ts +10 -0
  386. package/dist/transformer/ts-utils.d.ts.map +1 -0
  387. package/dist/transformer/ts-utils.js +38 -0
  388. package/dist/transformer/ts-utils.js.map +1 -0
  389. package/dist/transformer/typhex-type.d.ts +8 -0
  390. package/dist/transformer/typhex-type.d.ts.map +1 -0
  391. package/dist/transformer/typhex-type.js +52 -0
  392. package/dist/transformer/typhex-type.js.map +1 -0
  393. package/dist/transformer/where-transformer.d.ts +33 -0
  394. package/dist/transformer/where-transformer.d.ts.map +1 -0
  395. package/dist/transformer/where-transformer.js +400 -0
  396. package/dist/transformer/where-transformer.js.map +1 -0
  397. package/dist/utils.d.ts +5 -0
  398. package/dist/utils.d.ts.map +1 -0
  399. package/dist/utils.js +30 -0
  400. package/dist/utils.js.map +1 -0
  401. package/docs/drivers/postgres.md +54 -0
  402. package/docs/drivers/sqlite.md +33 -0
  403. package/docs/guide/aggregations.md +272 -0
  404. package/docs/guide/bulk-operations.md +204 -0
  405. package/docs/guide/cte-and-unions.md +270 -0
  406. package/docs/guide/entities-relations.md +208 -0
  407. package/docs/guide/expressions.md +98 -0
  408. package/docs/guide/filtering-by-relations.md +166 -0
  409. package/docs/guide/getting-started.md +277 -0
  410. package/docs/guide/querying-relations.md +133 -0
  411. package/docs/guide/subqueries.md +152 -0
  412. package/docs/guide/transactions.md +146 -0
  413. package/docs/guide/typescript-transformer.md +138 -0
  414. package/docs/index.md +33 -0
  415. package/docs/migrations/overview.md +143 -0
  416. package/docs/public-api.md +133 -0
  417. package/docs/reference/api.md +665 -0
  418. package/docs/reference/architecture.md +83 -0
  419. package/docs/release-checklist.md +55 -0
  420. package/etc/typhex.api.md +774 -0
  421. package/package.json +137 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-fetcher.d.ts","sourceRoot":"","sources":["../../../../src/orm/helpers/relations/relation-fetcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAOzE,MAAM,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAE7F,yFAAyF;AACzF,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAHJ,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,OAAO,EAAE,qBAAqB,EAAE,EAChC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;IAG9B,KAAK,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAS3C,OAAO,CAAC,aAAa;IAarB,qFAAqF;YACvE,cAAc;IAY5B,gGAAgG;YAClF,aAAa;IAW3B,+FAA+F;YACjF,eAAe;IAoC7B,OAAO,CAAC,sBAAsB;IAyB9B,0FAA0F;YAC5E,SAAS;IA6BvB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;CAG5B"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Relation fetcher: fetches related entities via WHERE IN queries.
3
+ * Does NOT mutate rows — returns fetched data as maps.
4
+ */
5
+ import { whereAnd, makeCompositeKey, buildRelationFetchWhereIr } from "../../query-helpers.js";
6
+ import { getEntityByTableName } from "../../../entity/global-driver.js";
7
+ import { groupBy } from "../../../utils.js";
8
+ /** Runs one WHERE IN query per pending relation fetch and collects keyed result maps. */
9
+ export class RelationFetcher {
10
+ qe;
11
+ rows;
12
+ fetches;
13
+ skip;
14
+ constructor(qe, rows, fetches, skip) {
15
+ this.qe = qe;
16
+ this.rows = rows;
17
+ this.fetches = fetches;
18
+ this.skip = skip;
19
+ }
20
+ async fetch() {
21
+ const result = new Map();
22
+ for (const meta of this.fetches) {
23
+ if (this.skip.has(meta.relation.name))
24
+ continue;
25
+ result.set(meta.relation.name, await this.fetchRelation(meta));
26
+ }
27
+ return result;
28
+ }
29
+ fetchRelation(meta) {
30
+ switch (meta.relationType) {
31
+ case "many-to-many":
32
+ return this.fetchManyToMany(meta);
33
+ case "one-to-many":
34
+ return this.fetchOneToMany(meta);
35
+ default:
36
+ return this.fetchOneToOne(meta);
37
+ }
38
+ }
39
+ /** Fetch a to-many relation: WHERE IN on FK columns, grouped by FK composite key. */
40
+ async fetchOneToMany(meta) {
41
+ const parentPkCols = meta.parentPkColumns;
42
+ const related = await this.fetchRows(this.rows, parentPkCols, meta.fkColumns, meta.targetEntity, meta.relation);
43
+ return this.groupByCompositeKey(related, meta.fkColumns);
44
+ }
45
+ /** Fetch a to-one relation: WHERE IN on FK to target-PK, indexed by target PK composite key. */
46
+ async fetchOneToOne(meta) {
47
+ const related = await this.fetchRows(this.rows, meta.fkColumns, meta.targetPkColumns, meta.targetEntity, meta.relation);
48
+ return this.indexByCompositeKey(related, meta.targetPkColumns);
49
+ }
50
+ /** Many-to-many: two fetchRows calls through the junction, grouped by parent composite key. */
51
+ async fetchManyToMany(meta) {
52
+ const j = meta.junction;
53
+ const parentPkCols = meta.parentPkColumns;
54
+ const out = new Map();
55
+ for (const row of this.rows)
56
+ out.set(makeCompositeKey(row, parentPkCols), []);
57
+ const junctionEntity = getEntityByTableName(j.table);
58
+ const junctionRows = (await this.fetchRows(this.rows, parentPkCols, j.foreignKey, junctionEntity));
59
+ if (junctionRows.length === 0)
60
+ return out;
61
+ const related = await this.fetchRows(junctionRows, j.referenceKey, meta.targetPkColumns, meta.targetEntity, meta.relation);
62
+ const targetToParents = this.buildTargetParentIndex(junctionRows, meta);
63
+ for (const target of related) {
64
+ const targetKey = makeCompositeKey(target, meta.targetPkColumns);
65
+ for (const parentKey of targetToParents.get(targetKey) ?? []) {
66
+ const arr = out.get(parentKey) ?? [];
67
+ arr.push(target);
68
+ out.set(parentKey, arr);
69
+ }
70
+ }
71
+ return out;
72
+ }
73
+ buildTargetParentIndex(junctionRows, meta) {
74
+ const j = meta.junction;
75
+ const parentPkCols = meta.parentPkColumns;
76
+ const targetToParents = new Map();
77
+ for (const jr of junctionRows) {
78
+ const parentKey = makeCompositeKey(this.remapCols(jr, j.foreignKey, parentPkCols), parentPkCols);
79
+ const targetKey = makeCompositeKey(this.remapCols(jr, j.referenceKey, meta.targetPkColumns), meta.targetPkColumns);
80
+ const arr = targetToParents.get(targetKey) ?? [];
81
+ arr.push(parentKey);
82
+ targetToParents.set(targetKey, arr);
83
+ }
84
+ return targetToParents;
85
+ }
86
+ /** Batch-fetch rows from `entity` by mapping source column values onto target columns. */
87
+ async fetchRows(srcRows, srcCols, tgtCols, entity, rel) {
88
+ const baseWhere = buildRelationFetchWhereIr(srcRows, srcCols, tgtCols);
89
+ if (!baseWhere)
90
+ return [];
91
+ const whereIr = rel?.whereIr ? whereAnd(baseWhere, rel.whereIr) : baseWhere;
92
+ let chain = entity.query(this.qe).where(whereIr, rel?.whereParams ?? {});
93
+ for (const o of rel?.orderBy ?? []) {
94
+ const col = o.expr.kind === "member" ? (o.expr.path[0] ?? "") : "";
95
+ chain = chain.orderBy(col, o.direction);
96
+ }
97
+ if (rel?.limitNum != null)
98
+ chain = chain.limit(rel.limitNum);
99
+ if (rel?.offsetNum != null)
100
+ chain = chain.offset(rel.offsetNum);
101
+ if (rel?.subPaths && rel.subPaths.length > 0) {
102
+ const cols = rel.subPaths.flatMap((p) => p[0] ?? p);
103
+ for (const col of tgtCols) {
104
+ if (!cols.includes(col))
105
+ cols.push(col);
106
+ }
107
+ chain = chain.select(cols);
108
+ }
109
+ return chain.toArray();
110
+ }
111
+ remapCols(row, from, to) {
112
+ const r = {};
113
+ for (let i = 0; i < to.length; i++)
114
+ r[to[i]] = row[from[i] ?? from[0]];
115
+ return r;
116
+ }
117
+ indexByCompositeKey(rows, keys) {
118
+ const map = new Map();
119
+ for (const row of rows) {
120
+ map.set(makeCompositeKey(row, keys), row);
121
+ }
122
+ return map;
123
+ }
124
+ groupByCompositeKey(rows, keys) {
125
+ return groupBy(rows, (row) => makeCompositeKey(row, keys));
126
+ }
127
+ }
128
+ //# sourceMappingURL=relation-fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-fetcher.js","sourceRoot":"","sources":["../../../../src/orm/helpers/relations/relation-fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Relation join resolution: extract relations from where IR and build JOIN metadata.
3
+ * When a relation is referenced in where (e.g. p.author.name === "Alice"), emit a JOIN
4
+ * instead of failing on non-existent column.
5
+ */
6
+ import type { IrExists, JoinHint, JoinType } from "../../../ir/types.js";
7
+ import type { RelationsMap, RelationDef } from "../../../entity/relations.js";
8
+ export interface RelationJoinMeta {
9
+ relationKey: string;
10
+ alias: string;
11
+ targetTable: string;
12
+ targetPkColumns: string[];
13
+ foreignKeys: string[];
14
+ relType: "many-to-one" | "one-to-one";
15
+ joinType: JoinType;
16
+ }
17
+ export interface OneToManyExistsMeta {
18
+ targetTable: string;
19
+ fkColumns: string[];
20
+ mainPk: string[];
21
+ alias: string;
22
+ }
23
+ export interface RelationJoinContext {
24
+ relations: RelationsMap;
25
+ tableName: string;
26
+ columnNames: string[];
27
+ pkColumns: string[];
28
+ resolveTarget: (rel: RelationDef) => {
29
+ table: string;
30
+ pk: string[];
31
+ } | null;
32
+ }
33
+ /**
34
+ * Builds EXISTS metadata for one-to-many relation predicates.
35
+ * One-to-many uses EXISTS instead of JOIN to avoid row duplication.
36
+ */
37
+ export declare class OneToManyExistsBuilder {
38
+ private readonly existsNodes;
39
+ private readonly relations;
40
+ private readonly rootParam;
41
+ private readonly mainPk;
42
+ private readonly resolveTarget;
43
+ private readonly localParamNames;
44
+ private readonly aliasPrefix;
45
+ private aliasIndex;
46
+ constructor(existsNodes: IrExists[], relations: RelationsMap, rootParam: string, mainPk: string[], resolveTarget: (rel: RelationDef) => {
47
+ table: string;
48
+ pk: string[];
49
+ } | null, localParamNames?: string[], aliasPrefix?: string);
50
+ build(): Record<string, OneToManyExistsMeta>;
51
+ private buildExistsInfo;
52
+ }
53
+ /**
54
+ * Builds JOIN metadata for relations used in the where clause or orderBy.
55
+ * Relations used only in select are loaded via whereIn; select IR is not consulted here.
56
+ */
57
+ export declare class RelationJoinBuilder {
58
+ private readonly ctx;
59
+ private readonly relationKeys;
60
+ private readonly joinHints?;
61
+ private aliasIndex;
62
+ constructor(ctx: RelationJoinContext, relationKeys: Set<string>, joinHints?: JoinHint[] | undefined);
63
+ build(): RelationJoinMeta[];
64
+ private buildJoin;
65
+ private resolveJoinType;
66
+ }
67
+ /** Builds a lookup from `${param}.${relationKey}` to the JOIN alias. */
68
+ export declare class RelationPathAliasBuilder {
69
+ private readonly joins;
70
+ private readonly params;
71
+ constructor(joins: RelationJoinMeta[], params: string[]);
72
+ build(): Record<string, string>;
73
+ }
74
+ //# sourceMappingURL=relation-joins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-joins.d.ts","sourceRoot":"","sources":["../../../../src/orm/helpers/relations/relation-joins.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAmB,MAAM,8BAA8B,CAAC;AAG/F,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,aAAa,GAAG,YAAY,CAAC;IACtC,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,aAAa,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CAC7E;AAED;;;GAGG;AACH,qBAAa,sBAAsB;IAI/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAT9B,OAAO,CAAC,UAAU,CAAK;gBAGJ,WAAW,EAAE,QAAQ,EAAE,EACvB,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,aAAa,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,EAC3E,eAAe,GAAE,MAAM,EAAgB,EACvC,WAAW,SAAO;IAGrC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAc5C,OAAO,CAAC,eAAe;CA2BxB;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAL7B,OAAO,CAAC,UAAU,CAAK;gBAGJ,GAAG,EAAE,mBAAmB,EACxB,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,EACzB,SAAS,CAAC,EAAE,QAAQ,EAAE,YAAA;IAGzC,KAAK,IAAI,gBAAgB,EAAE;IAW3B,OAAO,CAAC,SAAS;IA2BjB,OAAO,CAAC,eAAe;CAOxB;AAED,wEAAwE;AACxE,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,KAAK,EAAE,gBAAgB,EAAE,EACzB,MAAM,EAAE,MAAM,EAAE;IAGnC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAShC"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Relation join resolution: extract relations from where IR and build JOIN metadata.
3
+ * When a relation is referenced in where (e.g. p.author.name === "Alice"), emit a JOIN
4
+ * instead of failing on non-existent column.
5
+ */
6
+ import { toArray } from "../../../utils.js";
7
+ /**
8
+ * Builds EXISTS metadata for one-to-many relation predicates.
9
+ * One-to-many uses EXISTS instead of JOIN to avoid row duplication.
10
+ */
11
+ export class OneToManyExistsBuilder {
12
+ existsNodes;
13
+ relations;
14
+ rootParam;
15
+ mainPk;
16
+ resolveTarget;
17
+ localParamNames;
18
+ aliasPrefix;
19
+ aliasIndex = 0;
20
+ constructor(existsNodes, relations, rootParam, mainPk, resolveTarget, localParamNames = [rootParam], aliasPrefix = "ex") {
21
+ this.existsNodes = existsNodes;
22
+ this.relations = relations;
23
+ this.rootParam = rootParam;
24
+ this.mainPk = mainPk;
25
+ this.resolveTarget = resolveTarget;
26
+ this.localParamNames = localParamNames;
27
+ this.aliasPrefix = aliasPrefix;
28
+ }
29
+ build() {
30
+ const result = {};
31
+ const rootParams = new Set([this.rootParam, ...this.localParamNames]);
32
+ for (const node of this.existsNodes) {
33
+ if (!rootParams.has(node.rootParam))
34
+ continue;
35
+ const key = `${node.rootParam}.${node.relationKey}`;
36
+ if (result[key])
37
+ continue;
38
+ result[key] = this.buildExistsInfo(node);
39
+ }
40
+ return result;
41
+ }
42
+ buildExistsInfo(node) {
43
+ const rel = this.relations[node.relationKey];
44
+ if (!rel) {
45
+ throw new Error(`[typhex] EXISTS relation "${node.relationKey}" is not defined on this entity`);
46
+ }
47
+ if (rel._relType !== "one-to-many") {
48
+ throw new Error(`[typhex] EXISTS relation "${node.relationKey}" must be one-to-many to use .some()/.every()`);
49
+ }
50
+ if (this.mainPk.length === 0) {
51
+ throw new Error(`[typhex] EXISTS relation "${node.relationKey}" requires a primary key on the parent entity`);
52
+ }
53
+ const target = this.resolveTarget(rel);
54
+ const opts = rel._options;
55
+ return {
56
+ targetTable: target.table,
57
+ fkColumns: toArray(opts.foreignKey),
58
+ mainPk: this.mainPk,
59
+ alias: `${this.aliasPrefix}${this.aliasIndex++}`,
60
+ };
61
+ }
62
+ }
63
+ /**
64
+ * Builds JOIN metadata for relations used in the where clause or orderBy.
65
+ * Relations used only in select are loaded via whereIn; select IR is not consulted here.
66
+ */
67
+ export class RelationJoinBuilder {
68
+ ctx;
69
+ relationKeys;
70
+ joinHints;
71
+ aliasIndex = 1;
72
+ constructor(ctx, relationKeys, joinHints) {
73
+ this.ctx = ctx;
74
+ this.relationKeys = relationKeys;
75
+ this.joinHints = joinHints;
76
+ }
77
+ build() {
78
+ const result = [];
79
+ for (const relKey of this.relationKeys) {
80
+ const join = this.buildJoin(relKey);
81
+ if (join)
82
+ result.push(join);
83
+ }
84
+ return result;
85
+ }
86
+ buildJoin(relKey) {
87
+ const rel = this.ctx.relations[relKey];
88
+ if (!rel)
89
+ return null;
90
+ const opts = rel._options;
91
+ if (opts.junction)
92
+ return null;
93
+ const relType = rel._relType;
94
+ if (relType !== "many-to-one" && relType !== "one-to-one")
95
+ return null;
96
+ const target = this.ctx.resolveTarget(rel);
97
+ if (!target)
98
+ return null;
99
+ const foreignKeys = opts.foreignKey ? toArray(opts.foreignKey) : [];
100
+ if (foreignKeys.length === 0)
101
+ return null;
102
+ return {
103
+ relationKey: relKey,
104
+ alias: `t${this.aliasIndex++}`,
105
+ targetTable: target.table,
106
+ targetPkColumns: target.pk,
107
+ foreignKeys,
108
+ relType,
109
+ joinType: this.resolveJoinType(relKey),
110
+ };
111
+ }
112
+ resolveJoinType(relKey) {
113
+ const hint = this.joinHints
114
+ ?.slice()
115
+ .reverse()
116
+ .find((h) => h.relationKey === relKey);
117
+ return hint?.joinType ?? "left";
118
+ }
119
+ }
120
+ /** Builds a lookup from `${param}.${relationKey}` to the JOIN alias. */
121
+ export class RelationPathAliasBuilder {
122
+ joins;
123
+ params;
124
+ constructor(joins, params) {
125
+ this.joins = joins;
126
+ this.params = params;
127
+ }
128
+ build() {
129
+ const map = {};
130
+ for (const join of this.joins) {
131
+ for (const param of this.params) {
132
+ map[`${param}.${join.relationKey}`] = join.alias;
133
+ }
134
+ }
135
+ return map;
136
+ }
137
+ }
138
+ //# sourceMappingURL=relation-joins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-joins.js","sourceRoot":"","sources":["../../../../src/orm/helpers/relations/relation-joins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Relation resolver: top-level orchestrator for relation loading.
3
+ */
4
+ import type { QueryExecutor } from "../../db.js";
5
+ import type { QueryPlan } from "../query-plan/query-plan.js";
6
+ /** Executes the full relation-loading pipeline for a set of result rows. */
7
+ export declare class RelationResolver {
8
+ private readonly plan;
9
+ private readonly qe;
10
+ private readonly rows;
11
+ constructor(plan: QueryPlan, qe: QueryExecutor, rows: Record<string, unknown>[]);
12
+ resolve(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=relation-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-resolver.d.ts","sourceRoot":"","sources":["../../../../src/orm/helpers/relations/relation-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAI7D,4EAA4E;AAC5E,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAG5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAa/B"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Relation resolver: top-level orchestrator for relation loading.
3
+ */
4
+ import { RelationFetcher } from "./relation-fetcher.js";
5
+ import { RelationAssembler } from "./relation-assembler.js";
6
+ /** Executes the full relation-loading pipeline for a set of result rows. */
7
+ export class RelationResolver {
8
+ plan;
9
+ qe;
10
+ rows;
11
+ constructor(plan, qe, rows) {
12
+ this.plan = plan;
13
+ this.qe = qe;
14
+ this.rows = rows;
15
+ }
16
+ async resolve() {
17
+ const fetched = await new RelationFetcher(this.qe, this.rows, this.plan.relationFetches, this.plan.skipLoadFor).fetch();
18
+ const assembler = new RelationAssembler(this.rows);
19
+ if (this.plan.joinedProjections.length > 0) {
20
+ assembler.assembleJoined(this.plan.joinedProjections);
21
+ }
22
+ assembler.assembleFetched(this.plan.relationFetches, fetched, this.plan.skipLoadFor);
23
+ }
24
+ }
25
+ //# sourceMappingURL=relation-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation-resolver.js","sourceRoot":"","sources":["../../../../src/orm/helpers/relations/relation-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,4EAA4E;AAC5E,MAAM,OAAO,gBAAgB;IAER;IACA;IACA;IAHnB,YACmB,IAAe,EACf,EAAiB,EACjB,IAA+B;QAF/B,SAAI,GAAJ,IAAI,CAAW;QACf,OAAE,GAAF,EAAE,CAAe;QACjB,SAAI,GAAJ,IAAI,CAA2B;IAC/C,CAAC;IAEJ,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,GAAG,MAAM,IAAI,eAAe,CACvC,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,CAAC,eAAe,EACzB,IAAI,CAAC,IAAI,CAAC,WAAW,CACtB,CAAC,KAAK,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxD,CAAC;QACD,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvF,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export { Db } from "./db.js";
2
+ export { Trx } from "./trx.js";
3
+ export type { DbOptions, QueryExecutor } from "./db.js";
4
+ export type { OrderDirection } from "../ir/types.js";
5
+ export { QueryBuilder, InsertBuilder, type RegisteredCtes, type NoCtes, type QueryFromKind, } from "./query-builder.js";
6
+ export { SingleRowQueryBuilder } from "./single-row-query-builder.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,YAAY,EACZ,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,MAAM,EACX,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { Db } from "./db.js";
2
+ export { Trx } from "./trx.js";
3
+ export { QueryBuilder, InsertBuilder, } from "./query-builder.js";
4
+ export { SingleRowQueryBuilder } from "./single-row-query-builder.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAG/B,OAAO,EACL,YAAY,EACZ,aAAa,GAId,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Query builder: the single place where all SQL is built and executed.
3
+ * Provides both query (select, count) and mutation (insert, update, delete)
4
+ * methods. All methods that hit the database return Promises
5
+ * (except insert, which is synchronous to support save()).
6
+ */
7
+ import { type OrderDirection } from "../ir/types.js";
8
+ import type { AnyEntityClass, EntityInstance, SelectRow } from "../entity/entity.js";
9
+ /** Whether the builder reads from the base table or a registered CTE. */
10
+ export type QueryFromKind = "table" | "cte";
11
+ /** Default `Ctes` map: no registered names (`keyof` is `never`, not `string`). */
12
+ export type NoCtes = Record<never, never>;
13
+ /** Registered CTE names → row types (second arg to `where` / `withCte` callback). */
14
+ export type RegisteredCtes<Ctes extends Record<string, unknown>> = Ctes;
15
+ /** Base table row for `where` / `update` (not merged with CTE namespaces). */
16
+ export type TableRow<C extends AnyEntityClass, T, FromKind extends QueryFromKind> = FromKind extends "cte" ? T : T extends EntityInstance<C> ? T : EntityInstance<C>;
17
+ type HasRegisteredCtes<Ctes extends Record<string, unknown>> = keyof Ctes extends never ? false : true;
18
+ /** C = entity; T = row shape; Ctes = registered CTE names → row types; FromKind = table vs CTE read. */
19
+ export declare class QueryBuilder<C extends AnyEntityClass = AnyEntityClass, T = EntityInstance<C>, Ctes extends Record<string, unknown> = NoCtes, FromKind extends QueryFromKind = "table"> {
20
+ /** Return a shallow copy of this builder with mutable state (params, orderBy) deep-copied,
21
+ * so chained calls do not mutate the original. */
22
+ clone(): QueryBuilder<C, T, Ctes, FromKind>;
23
+ protected requirePkColumns(context: string): string[];
24
+ private static splitParams;
25
+ /** Set or replace the WHERE predicate (requires Typhex transformer when using arrows). */
26
+ where(predicate: FromKind extends "cte" ? (row: T) => boolean : HasRegisteredCtes<Ctes> extends true ? (row: TableRow<C, T, FromKind>, ctes: RegisteredCtes<Ctes>) => boolean : (row: TableRow<C, T, FromKind>) => boolean, params?: Record<string, unknown>): this;
27
+ /** Append an ORDER BY clause. Accepts a dot-separated column string or
28
+ * an arrow function parsed to a member path at runtime. */
29
+ orderBy(col: string | ((row: T) => unknown), direction?: OrderDirection): this;
30
+ private addOrderByIr;
31
+ private addOrderByInput;
32
+ private addInlineParams;
33
+ /** Adds an INNER JOIN for relation keys, or to an entity table with a custom ON. */
34
+ innerJoin(keysOrFn: string[] | ((row: T) => unknown)): this;
35
+ innerJoin<E extends AnyEntityClass>(entity: E, on: (joined: EntityInstance<E>, row: T) => boolean): this;
36
+ /** Adds a LEFT JOIN for relation keys, or to an entity table with a custom ON. */
37
+ leftJoin(keysOrFn: string[] | ((row: T) => unknown)): this;
38
+ leftJoin<E extends AnyEntityClass>(entity: E, on: (joined: EntityInstance<E>, row: T) => boolean): this;
39
+ /** Adds a RIGHT JOIN for relation keys, or to an entity table with a custom ON. */
40
+ rightJoin(keysOrFn: string[] | ((row: T) => unknown)): this;
41
+ rightJoin<E extends AnyEntityClass>(entity: E, on: (joined: EntityInstance<E>, row: T) => boolean): this;
42
+ /** Adds a CROSS JOIN for the given relation keys or accessor function. */
43
+ crossJoin(keysOrFn: string[] | ((row: T) => unknown)): this;
44
+ /** Adds a FULL OUTER JOIN for relation keys, or to an entity table with a custom ON. */
45
+ fullJoin(keysOrFn: string[] | ((row: T) => unknown)): this;
46
+ fullJoin<E extends AnyEntityClass>(entity: E, on: (joined: EntityInstance<E>, row: T) => boolean): this;
47
+ private addJoin;
48
+ private static isEntityClass;
49
+ private addJoinHints;
50
+ /** Set the maximum number of rows to return. */
51
+ limit(n: number): this;
52
+ /** Set the number of rows to skip before returning results. */
53
+ offset(n: number): this;
54
+ withCte<const N extends string, IC extends AnyEntityClass, IT>(name: N, subquery: QueryBuilder<IC, IT, any, any>): QueryBuilder<C, T, Ctes & Record<N, IT>, FromKind>;
55
+ withCte<const N extends string, IC extends AnyEntityClass, IT>(name: N, build: (ctes: RegisteredCtes<Ctes>) => QueryBuilder<IC, IT, any, any>): QueryBuilder<C, T, Ctes & Record<N, IT>, FromKind>;
56
+ /**
57
+ * Register a recursive CTE: `WITH RECURSIVE name AS (<anchor> UNION ALL <recursive>)`.
58
+ * The body should use `.unionAll()` for the recursive step and may `.from(name)` for self-reference.
59
+ */
60
+ withRecursiveCte<const N extends string, IC extends AnyEntityClass, IT>(name: N, subquery: QueryBuilder<IC, IT, any, any>): QueryBuilder<C, T, Ctes & Record<N, IT>, FromKind>;
61
+ /** Append a `UNION ALL` branch to this SELECT (used for recursive CTE bodies). */
62
+ unionAll<OC extends AnyEntityClass, OT>(other: QueryBuilder<OC, OT, any, any>): QueryBuilder<C, T, Ctes, FromKind>;
63
+ /**
64
+ * Set the outer FROM source: registered CTE name, inline subquery, or base table.
65
+ * Omit the argument to read from the entity's base table.
66
+ */
67
+ from<N extends keyof Ctes & string>(name: N): QueryBuilder<C, Ctes[N], Ctes, "cte">;
68
+ from<Row = EntityInstance<C>>(name: string): QueryBuilder<C, Row, Ctes, "cte">;
69
+ from<Row>(source: QueryBuilder<any, Row>): QueryBuilder<C, Row, Ctes, "table">;
70
+ from(): QueryBuilder<C, EntityInstance<C>, Ctes, "table">;
71
+ /** Sets the SELECT projection using an arrow function parsed at runtime or by the TypeScript transformer. */
72
+ select<U>(fn: (row: SelectRow<C>) => U): QueryBuilder<C, U, Ctes>;
73
+ /** Sets the SELECT projection using an explicit list of column names. */
74
+ select(columns: string[]): QueryBuilder<C, T, Ctes>;
75
+ /** Adds a GROUP BY clause. Accepts column names, index numbers, or an arrow function selecting group-by fields. */
76
+ groupBy(columnOrFn: string | string[] | number | number[] | ((row: EntityInstance<C>) => unknown), ...rest: (string | number)[]): this;
77
+ /** Adds a HAVING clause to filter aggregated groups (use together with `groupBy`). */
78
+ having(predicate: HasRegisteredCtes<Ctes> extends true ? (row: EntityInstance<C>, ctes: RegisteredCtes<Ctes>) => boolean : (row: EntityInstance<C>) => boolean, params?: Record<string, unknown>): this;
79
+ /** Update matching rows with `set`, then re-fetch and return the updated row,
80
+ * or null if no matching row is found after the update. */
81
+ patch(set: Record<string, unknown>): Promise<EntityInstance<C> | null>;
82
+ /** Insert a single row. Awaitable directly, or chain `.onConflict(cols).doUpdate()` / `.doNothing()`. */
83
+ insert(row: Record<string, unknown>): InsertBuilder<C, EntityInstance<C> | undefined>;
84
+ /** Insert multiple rows in one statement. Awaitable directly, or chain `.onConflict(cols).doUpdate()` / `.doNothing()`. */
85
+ insertMany(rows: Record<string, unknown>[]): InsertBuilder<C, EntityInstance<C>[]>;
86
+ /** Inserts an entity and its nested related entities in a single transactional operation. */
87
+ insertGraph(graph: Record<string, unknown>): Promise<EntityInstance<C>>;
88
+ /** Inserts multiple entities and their nested related entities in a single transactional operation. */
89
+ insertGraph(graphs: Record<string, unknown>[]): Promise<EntityInstance<C>[]>;
90
+ /** Select single row by primary key (scalar or composite object). */
91
+ findById(id: unknown): Promise<EntityInstance<C> | null>;
92
+ /** Execute the query and return all matching rows, with relations loaded
93
+ * and the hydration function applied if one is set. */
94
+ toArray(): Promise<EntityInstance<C>[]>;
95
+ /** Return the first matching row, or undefined if the result set is empty. */
96
+ first(): Promise<EntityInstance<C> | undefined>;
97
+ /** Execute a COUNT query and return rows the query would produce without limit/offset/orderBy. */
98
+ count(): Promise<number>;
99
+ /** Execute an UPDATE for the current WHERE clause and return the number of affected rows. */
100
+ update(set: Record<string, unknown>): Promise<number>;
101
+ update(setFn: HasRegisteredCtes<Ctes> extends true ? (row: EntityInstance<C>, ctes: RegisteredCtes<Ctes>) => Record<string, unknown> : (row: EntityInstance<C>) => Record<string, unknown>): Promise<number>;
102
+ /** UPDATE ... RETURNING * (when supported); returns hydrated rows. */
103
+ updateReturning(set: Record<string, unknown>): Promise<EntityInstance<C>[]>;
104
+ updateReturning(setFn: HasRegisteredCtes<Ctes> extends true ? (row: EntityInstance<C>, ctes: RegisteredCtes<Ctes>) => Record<string, unknown> : (row: EntityInstance<C>) => Record<string, unknown>): Promise<EntityInstance<C>[]>;
105
+ /** Execute a DELETE for the current WHERE clause and return the number of affected rows. */
106
+ delete(): Promise<number>;
107
+ /** DELETE ... RETURNING * (when supported). */
108
+ deleteReturning(): Promise<EntityInstance<C>[]>;
109
+ }
110
+ /**
111
+ * Deferred insert returned by `insert()` / `insertMany()`.
112
+ * Extends `QueryBuilder` so it owns its execution logic and has direct access to state.
113
+ * Awaitable directly (no conflict handling) or chain `.onConflict(cols).doUpdate()` / `.doNothing()`.
114
+ *
115
+ * @example
116
+ * await qb.insert(row);
117
+ * await qb.insert(row).onConflict(["sku"]).doUpdate();
118
+ * await qb.insertMany(rows).onConflict(["sku"]).doNothing();
119
+ */
120
+ export declare class InsertBuilder<C extends AnyEntityClass, R> extends QueryBuilder<C> implements PromiseLike<R> {
121
+ private _conflictCols?;
122
+ private readonly _payload;
123
+ /** Store the conflict target columns; returns `this` for chaining. */
124
+ onConflict(columns: string[]): this;
125
+ /** `ON CONFLICT (...) DO UPDATE SET ...` — executes the insert. */
126
+ doUpdate(updateColumns?: string[]): Promise<R>;
127
+ /** `ON CONFLICT (...) DO NOTHING` — executes the insert. */
128
+ doNothing(): Promise<R>;
129
+ /** PromiseLike: allows `await insert(row)` without a conflict clause. */
130
+ then<T1 = R, T2 = never>(res?: ((v: R) => T1 | PromiseLike<T1>) | null, rej?: ((e: unknown) => T2 | PromiseLike<T2>) | null): PromiseLike<T1 | T2>;
131
+ private _execute;
132
+ private _doInsert;
133
+ private _doInsertMany;
134
+ }
135
+ export {};
136
+ //# sourceMappingURL=query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/orm/query-builder.ts"],"names":[],"mappings":"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"}