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,258 @@
1
+ import { getPkColumnsFromSchema, } from "../../../entity/entity.js";
2
+ import { getEntityByTableName } from "../../../entity/global-driver.js";
3
+ import { isRecord, toArray } from "../../../utils.js";
4
+ import { InsertGraphBatchExecutor } from "./insert-graph-batch-executor.js";
5
+ import { InsertGraphSequentialExecutor } from "./insert-graph-sequential-executor.js";
6
+ export class InsertGraphPlanner {
7
+ state;
8
+ input;
9
+ constructor(state, input) {
10
+ this.state = state;
11
+ this.input = input;
12
+ }
13
+ async execute() {
14
+ const graphs = toArray(this.input);
15
+ if (graphs.length === 0)
16
+ return [];
17
+ const capabilities = this.state.qe.dialect.insertCapabilities;
18
+ const plan = this.buildInsertGraphPlan(graphs, capabilities);
19
+ await selectExecutor(plan).execute();
20
+ const roots = await this.materializeRootRows(plan);
21
+ return Array.isArray(this.input)
22
+ ? roots
23
+ : roots[0];
24
+ }
25
+ buildInsertGraphPlan(graphs, capabilities) {
26
+ const plan = {
27
+ qe: this.state.qe,
28
+ nodes: [],
29
+ rootNodeIds: [],
30
+ };
31
+ const rootInfo = createEntityInfo(this.state.entity);
32
+ for (const graph of graphs) {
33
+ const rootNode = this.planGraphNode(plan, capabilities, rootInfo, graph);
34
+ plan.rootNodeIds.push(rootNode.id);
35
+ }
36
+ return plan;
37
+ }
38
+ planGraphNode(plan, capabilities, entityInfo, graph) {
39
+ const { scalarData, relationData } = splitGraphPayload(entityInfo, graph);
40
+ const node = registerPlannedNode(plan, {
41
+ tableName: entityInfo.tableName,
42
+ entity: entityInfo.entity,
43
+ scalarData,
44
+ pkColumns: entityInfo.pkColumns,
45
+ idResolution: resolveIdResolution(scalarData, entityInfo.pkColumns, capabilities),
46
+ });
47
+ for (const [relKey, relValue] of Object.entries(relationData)) {
48
+ const relDef = assertKnownRelation(relKey, entityInfo);
49
+ switch (relDef._relType) {
50
+ case "one-to-one":
51
+ case "many-to-one":
52
+ assertRelationIsRecord(relKey, relDef._relType, relValue);
53
+ this.planOwningToOneRelation(plan, capabilities, node, relDef, relValue);
54
+ break;
55
+ case "one-to-many":
56
+ assertRelationIsArray(relKey, relDef._relType, relValue);
57
+ this.planOneToManyChildren(plan, capabilities, node, relKey, relDef, relValue);
58
+ break;
59
+ case "many-to-many":
60
+ assertRelationIsArray(relKey, relDef._relType, relValue);
61
+ this.planManyToManyRelations(plan, capabilities, node, relKey, relDef, relValue);
62
+ break;
63
+ }
64
+ }
65
+ return node;
66
+ }
67
+ planOwningToOneRelation(plan, capabilities, node, relDef, relValue) {
68
+ const options = relDef._options;
69
+ const info = resolveTargetInfo(relDef);
70
+ const parentNode = this.planGraphNode(plan, capabilities, info, relValue);
71
+ addDependency(node, parentNode.id, getReferenceColumns(info, options), toArray(options.foreignKey));
72
+ }
73
+ planOneToManyChildren(plan, capabilities, node, relKey, relDef, relValue) {
74
+ const options = relDef._options;
75
+ const info = resolveTargetInfo(relDef);
76
+ const fkColumns = toArray(options.foreignKey);
77
+ for (const item of relValue) {
78
+ assertChildIsRecord(relKey, item);
79
+ const childNode = this.planGraphNode(plan, capabilities, info, item);
80
+ addDependency(childNode, node.id, node.pkColumns, fkColumns);
81
+ }
82
+ }
83
+ planManyToManyRelations(plan, capabilities, node, relKey, relDef, relValue) {
84
+ const info = resolveTargetInfo(relDef);
85
+ const junction = resolveJunctionInfo(relDef);
86
+ for (const item of relValue) {
87
+ assertChildIsRecord(relKey, item);
88
+ const relatedNode = this.resolveManyToManyTargetNode(plan, capabilities, info, relKey, item);
89
+ const junctionNode = this.createJunctionNode(plan, junction);
90
+ addDependency(junctionNode, node.id, node.pkColumns, junction.fkColumns);
91
+ addDependency(junctionNode, relatedNode.id, info.pkColumns, junction.refColumns);
92
+ }
93
+ }
94
+ resolveManyToManyTargetNode(plan, capabilities, info, relKey, item) {
95
+ const referenceRow = parseManyToManyReference(relKey, info.pkColumns, item);
96
+ if (referenceRow) {
97
+ return this.createReferenceNode(plan, info.entity, info.pkColumns, referenceRow);
98
+ }
99
+ return this.planGraphNode(plan, capabilities, info, item);
100
+ }
101
+ createJunctionNode(plan, junction) {
102
+ return registerPlannedNode(plan, {
103
+ tableName: junction.table,
104
+ entity: junction.entity,
105
+ scalarData: {},
106
+ pkColumns: [],
107
+ idResolution: "provided",
108
+ });
109
+ }
110
+ createReferenceNode(plan, targetEntity, pkColumns, referenceRow) {
111
+ return registerPlannedNode(plan, {
112
+ tableName: targetEntity.table._table,
113
+ entity: targetEntity,
114
+ scalarData: { ...referenceRow },
115
+ pkColumns,
116
+ idResolution: "provided",
117
+ insertedRow: { ...referenceRow },
118
+ materializedRow: { ...referenceRow },
119
+ });
120
+ }
121
+ async materializeRootRows(plan) {
122
+ const roots = [];
123
+ for (const nodeId of plan.rootNodeIds) {
124
+ roots.push(await materializeRoot(plan, plan.nodes[nodeId]));
125
+ }
126
+ return roots;
127
+ }
128
+ }
129
+ async function materializeRoot(plan, node) {
130
+ if (node.materializedRow)
131
+ return node.materializedRow;
132
+ if (!node.insertedRow) {
133
+ throw new Error("insertGraph: root row was not inserted");
134
+ }
135
+ const refetched = await node.entity.query(plan.qe).findById(node.insertedRow);
136
+ if (refetched == null) {
137
+ throw new Error("insertGraph: insert succeeded but root row could not be fetched back");
138
+ }
139
+ node.materializedRow = refetched;
140
+ return node.materializedRow;
141
+ }
142
+ function selectExecutor(plan) {
143
+ const canBatch = plan.nodes.every((node) => node.idResolution !== "unresolvableInBatch");
144
+ return canBatch ? new InsertGraphBatchExecutor(plan) : new InsertGraphSequentialExecutor(plan);
145
+ }
146
+ function createEntityInfo(entity) {
147
+ return {
148
+ tableName: entity.table._table,
149
+ columnSet: new Set(Object.keys(entity.table._schema)),
150
+ rels: entity.table._relations,
151
+ pkColumns: getPkColumnsFromSchema(entity.table._schema),
152
+ entity,
153
+ };
154
+ }
155
+ function assertKnownRelation(relKey, entityInfo) {
156
+ const relDef = entityInfo.rels?.[relKey];
157
+ if (!relDef) {
158
+ throw new Error(`insertGraph: unknown relation "${relKey}" on entity "${entityInfo.tableName}"`);
159
+ }
160
+ return relDef;
161
+ }
162
+ function assertRelationIsRecord(relKey, relType, value) {
163
+ if (!isRecord(value)) {
164
+ throw new Error(`insertGraph: relation "${relKey}" (${relType}) expects an object`);
165
+ }
166
+ }
167
+ function assertRelationIsArray(relKey, relType, value) {
168
+ if (!Array.isArray(value)) {
169
+ throw new Error(`insertGraph: relation "${relKey}" (${relType}) expects an array`);
170
+ }
171
+ }
172
+ function assertChildIsRecord(relKey, item) {
173
+ if (!isRecord(item)) {
174
+ throw new Error(`insertGraph: relation "${relKey}" array items must be objects`);
175
+ }
176
+ }
177
+ function splitGraphPayload(entityInfo, graph) {
178
+ const scalarData = {};
179
+ const relationData = {};
180
+ const { columnSet, rels, tableName } = entityInfo;
181
+ for (const [key, value] of Object.entries(graph)) {
182
+ if (value === undefined)
183
+ continue;
184
+ if (rels && key in rels) {
185
+ relationData[key] = value;
186
+ }
187
+ else if (columnSet.has(key)) {
188
+ scalarData[key] = value;
189
+ }
190
+ else {
191
+ throw new Error(`insertGraph: unknown key "${key}" on entity "${tableName}"`);
192
+ }
193
+ }
194
+ return { scalarData, relationData };
195
+ }
196
+ function resolveIdResolution(scalarData, pkColumns, capabilities) {
197
+ if (pkColumns.every((column) => scalarData[column] !== undefined))
198
+ return "provided";
199
+ if (capabilities.supportsReturning)
200
+ return "needsReturning";
201
+ if (capabilities.supportsSequences && pkColumns.length === 1)
202
+ return "needsSequence";
203
+ return "unresolvableInBatch";
204
+ }
205
+ function parseManyToManyReference(relKey, targetPkColumns, data) {
206
+ const pkSet = new Set(targetPkColumns);
207
+ const pkKeys = [];
208
+ const extraKeys = [];
209
+ for (const key of Object.keys(data)) {
210
+ if (data[key] === undefined)
211
+ continue;
212
+ if (pkSet.has(key))
213
+ pkKeys.push(key);
214
+ else
215
+ extraKeys.push(key);
216
+ }
217
+ if (pkKeys.length === 0)
218
+ return null;
219
+ if (pkKeys.length < targetPkColumns.length) {
220
+ throw new Error(`insertGraph: relation "${relKey}" expects either all target primary key fields or none`);
221
+ }
222
+ if (extraKeys.length > 0) {
223
+ throw new Error(`insertGraph: relation "${relKey}" reference objects may only contain primary key fields`);
224
+ }
225
+ return data;
226
+ }
227
+ function getReferenceColumns(info, options) {
228
+ if (options.references == null)
229
+ return info.pkColumns;
230
+ return toArray(options.references);
231
+ }
232
+ function resolveTargetInfo(relDef) {
233
+ return createEntityInfo(relDef._target());
234
+ }
235
+ function resolveJunctionInfo(relDef) {
236
+ const options = relDef._options;
237
+ return {
238
+ table: options.junction,
239
+ entity: getEntityByTableName(options.junction),
240
+ fkColumns: toArray(options.foreignKey),
241
+ refColumns: toArray(options.referenceKey),
242
+ };
243
+ }
244
+ function addDependency(node, sourceNodeId, sourceColumns, targetColumns) {
245
+ node.dependencyIds.push(sourceNodeId);
246
+ node.pendingCopies.push({ sourceNodeId, sourceColumns, targetColumns });
247
+ }
248
+ function registerPlannedNode(plan, fields) {
249
+ const node = {
250
+ id: plan.nodes.length,
251
+ dependencyIds: [],
252
+ pendingCopies: [],
253
+ ...fields,
254
+ };
255
+ plan.nodes.push(node);
256
+ return node;
257
+ }
258
+ //# sourceMappingURL=insert-graph-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-graph-planner.js","sourceRoot":"","sources":["../../../../src/orm/helpers/insert-graph/insert-graph-planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { QueryExecutor } from "../../db.js";
2
+ import { InsertGraphExecutor } from "./insert-graph-executor.js";
3
+ import type { PlannedNode } from "./insert-graph-planner.js";
4
+ export declare class InsertGraphSequentialExecutor extends InsertGraphExecutor {
5
+ protected insertReadyNodes(qe: QueryExecutor, nodes: PlannedNode[]): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=insert-graph-sequential-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-graph-sequential-executor.d.ts","sourceRoot":"","sources":["../../../../src/orm/helpers/insert-graph/insert-graph-sequential-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,qBAAa,6BAA8B,SAAQ,mBAAmB;cACpD,gBAAgB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzF"}
@@ -0,0 +1,8 @@
1
+ import { InsertGraphExecutor } from "./insert-graph-executor.js";
2
+ export class InsertGraphSequentialExecutor extends InsertGraphExecutor {
3
+ async insertReadyNodes(qe, nodes) {
4
+ for (const node of nodes)
5
+ await this.insertSingleNode(qe, node);
6
+ }
7
+ }
8
+ //# sourceMappingURL=insert-graph-sequential-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-graph-sequential-executor.js","sourceRoot":"","sources":["../../../../src/orm/helpers/insert-graph/insert-graph-sequential-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,MAAM,OAAO,6BAA8B,SAAQ,mBAAmB;IAC1D,KAAK,CAAC,gBAAgB,CAAC,EAAiB,EAAE,KAAoB;QACtE,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { QueryCompiler } from "../../../dbs/types.js";
2
+ import type { QueryExecutor } from "../../db.js";
3
+ import type { PlannedNode } from "./insert-graph-planner.js";
4
+ export declare class SequenceIdAssigner {
5
+ private readonly compiler;
6
+ private readonly qe;
7
+ private readonly tableName;
8
+ private readonly nodes;
9
+ constructor(compiler: QueryCompiler, qe: QueryExecutor, tableName: string, nodes: PlannedNode[]);
10
+ assign(): Promise<void>;
11
+ private requireSinglePkColumn;
12
+ private allocateValues;
13
+ private extractValues;
14
+ }
15
+ //# sourceMappingURL=sequence-id-assigner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence-id-assigner.d.ts","sourceRoot":"","sources":["../../../../src/orm/helpers/insert-graph/sequence-id-assigner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAHL,QAAQ,EAAE,aAAa,EACvB,EAAE,EAAE,aAAa,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,EAAE;IAGjC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7B,OAAO,CAAC,qBAAqB;YASf,cAAc;IAM5B,OAAO,CAAC,aAAa;CActB"}
@@ -0,0 +1,48 @@
1
+ export class SequenceIdAssigner {
2
+ compiler;
3
+ qe;
4
+ tableName;
5
+ nodes;
6
+ constructor(compiler, qe, tableName, nodes) {
7
+ this.compiler = compiler;
8
+ this.qe = qe;
9
+ this.tableName = tableName;
10
+ this.nodes = nodes;
11
+ }
12
+ async assign() {
13
+ const sequenceNodes = this.nodes.filter((node) => node.idResolution === "needsSequence");
14
+ if (sequenceNodes.length === 0)
15
+ return;
16
+ const pkColumn = this.requireSinglePkColumn(sequenceNodes[0].pkColumns);
17
+ const values = await this.allocateValues(pkColumn, sequenceNodes.length);
18
+ for (const [index, node] of sequenceNodes.entries()) {
19
+ node.scalarData[pkColumn] = values[index];
20
+ node.idResolution = "provided";
21
+ }
22
+ }
23
+ requireSinglePkColumn(pkColumns) {
24
+ if (pkColumns.length !== 1) {
25
+ throw new Error("insertGraph: sequence-backed batch inserts require a single primary key column");
26
+ }
27
+ return pkColumns[0];
28
+ }
29
+ async allocateValues(pkColumn, count) {
30
+ const compiled = this.compiler.compileNextSequenceValues(this.tableName, pkColumn, count);
31
+ const rows = await this.qe.query(compiled.sql, compiled.params);
32
+ return this.extractValues(rows, count);
33
+ }
34
+ extractValues(rows, expectedCount) {
35
+ if (rows.length !== expectedCount) {
36
+ throw new Error("insertGraph: sequence allocation did not return the expected number of rows");
37
+ }
38
+ return rows.map((row) => {
39
+ if (row != null && typeof row === "object") {
40
+ const values = Object.values(row);
41
+ if (values.length === 1)
42
+ return values[0];
43
+ }
44
+ throw new Error("insertGraph: sequence allocation rows must contain exactly one value");
45
+ });
46
+ }
47
+ }
48
+ //# sourceMappingURL=sequence-id-assigner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence-id-assigner.js","sourceRoot":"","sources":["../../../../src/orm/helpers/insert-graph/sequence-id-assigner.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,kBAAkB;IAEV;IACA;IACA;IACA;IAJnB,YACmB,QAAuB,EACvB,EAAiB,EACjB,SAAiB,EACjB,KAAoB;QAHpB,aAAQ,GAAR,QAAQ,CAAe;QACvB,OAAE,GAAF,EAAE,CAAe;QACjB,cAAS,GAAT,SAAS,CAAQ;QACjB,UAAK,GAAL,KAAK,CAAe;IACpC,CAAC;IAEJ,KAAK,CAAC,MAAM;QACV,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,eAAe,CAAC,CAAC;QACzF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACzE,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,SAAmB;QAC/C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,KAAa;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAEO,aAAa,CAAC,IAAe,EAAE,aAAqB;QAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACtB,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAA8B,CAAC,CAAC;gBAC7D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * IR → Expr conversion.
3
+ *
4
+ * The planner-side IR (`src/ir/types.ts`) is the parser's output: arrow
5
+ * predicates and select bodies turned into a tree of nodes that still
6
+ * reference user-facing names like the row parameter (`u`, `c`, …) and
7
+ * relation keys (`u.author`). The runtime Expr model (`src/orm/expr.ts`)
8
+ * is what the dialect compiles to SQL: every column reference has been
9
+ * resolved to a (table-alias, column-path) pair, every captured
10
+ * `QueryBuilder` has been inlined as a child `QueryPlan`, and every
11
+ * one-to-many `EXISTS` has been pre-resolved to its target table and
12
+ * join keys.
13
+ *
14
+ * `ExprBuilder` performs that conversion. The planner constructs it once
15
+ * per plan with precomputed context: row-param aliases, relation join
16
+ * aliases, one-to-many EXISTS metadata, and already-built child subquery
17
+ * plans. It does not build child plans itself; when conversion reaches a
18
+ * subquery placeholder, it only swaps in the `QueryPlan` the planner
19
+ * prepared earlier.
20
+ */
21
+ import type { IrNode, IrSubqueryRef, IrAggregate } from "../../../ir/types.js";
22
+ import type { Expr, ExprColumn, ExprAggregate } from "../../expr.js";
23
+ import type { OneToManyExistsMeta } from "../relations/relation-joins.js";
24
+ import type { QueryPlan } from "./query-plan.js";
25
+ export type SubqueryPlans = Map<string, QueryPlan>;
26
+ /**
27
+ * Converts IR nodes to runtime `Expr` against a precomputed alias context.
28
+ *
29
+ * Constructor inputs:
30
+ * - `paramToAlias` — maps every row-param name in scope (including
31
+ * outer-correlated ones) to its SQL table alias. Built by the planner's
32
+ * `buildParamToAlias` phase.
33
+ * - `relationPathToAlias` — maps `"<param>.<relKey>"` to the join alias
34
+ * the planner allocated for that relation. Drives the column-path
35
+ * rewrite in `resolveColumn` (a member access through a joined relation
36
+ * becomes a column reference on the join's alias).
37
+ * - `oneToManyExists` — pre-resolved EXISTS metadata keyed by
38
+ * `"<rootParam>.<relationKey>"`. Lets `convertExists` emit a fully
39
+ * structured `ExprExists` without redoing the relation lookup.
40
+ * - `subqueryPlans` — child plans keyed by the runtime param/subquery
41
+ * placeholder names that reference captured `QueryBuilder`s.
42
+ */
43
+ export declare class ExprBuilder {
44
+ private readonly paramToAlias;
45
+ private readonly relationPathToAlias;
46
+ private readonly oneToManyExists;
47
+ private readonly subqueryPlans;
48
+ private readonly relationKeys;
49
+ private readonly cteNames;
50
+ constructor(paramToAlias: Record<string, string>, relationPathToAlias: Record<string, string>, oneToManyExists: Record<string, OneToManyExistsMeta>, subqueryPlans: SubqueryPlans, relationKeys?: Set<string>, cteNames?: Set<string>);
51
+ /**
52
+ * Recursively convert any IR node to an `Expr`.
53
+ *
54
+ * `scope` is the row-param-to-table-alias mapping in effect for this
55
+ * conversion. It defaults to the builder's `paramToAlias` (the top-level
56
+ * scope of the plan being built). `convertExists` augments and re-passes
57
+ * it: when an `EXISTS` predicate binds a fresh inner row-param (e.g.
58
+ * `d.employees.some(e => e.name === "Alice")` binds `e`), the recursive
59
+ * call uses `{ ...scope, [innerParam]: innerAlias }` so the inner
60
+ * predicate's `e.name` resolves against the inner-relation table alias
61
+ * rather than the outer row's.
62
+ *
63
+ * Throws on unknown node kinds — the IR types are a closed union, so
64
+ * hitting the default branch means a future-added kind wasn't handled.
65
+ */
66
+ convert(node: IrNode, scope?: Record<string, string>, inlineParams?: Record<string, unknown>): Expr;
67
+ /**
68
+ * Resolve `param.path` (an IR member reference) to a (alias, column-path)
69
+ * pair the dialect can render directly.
70
+ *
71
+ * Resolution proceeds in two steps:
72
+ *
73
+ * 1. **Alias lookup.** The starting alias is `scope[param]`. The planner
74
+ * builds that scope before conversion, including local and correlated
75
+ * row params.
76
+ *
77
+ * 2. **Relation rewrite.** If `path[0]` names a relation that has been
78
+ * joined into the query (`relationPathToAlias` has an entry for
79
+ * `"<param>.<path[0]>"`), the alias is replaced with the join's
80
+ * alias and the leading segment is dropped from the path. Example:
81
+ * `u.author.name` with `relationPathToAlias["u.author"] = "t1"`
82
+ * rewrites to `(alias: "t1", column: ["name"])`.
83
+ *
84
+ * The returned `ExprColumn.column` is a path array: empty means the
85
+ * alias itself (rare — only when relation rewrite consumed the entire
86
+ * path), single element is a leaf column, multiple elements is a
87
+ * dotted path (rare; preserved for forward compatibility).
88
+ */
89
+ resolveColumn(param: string, path: string[], scope?: Record<string, string>): ExprColumn;
90
+ private assertColumnPath;
91
+ /**
92
+ * Convert an `IrAggregate` (e.g. `count(u.id)`, `sum(p.price)`) to an
93
+ * `ExprAggregate`. The argument expression — when present — is converted
94
+ * recursively so nested member paths resolve through the same alias
95
+ * scope. `null` arg means `COUNT(*)` style.
96
+ *
97
+ * Public so the planner's `buildSelectItems` can convert select-list
98
+ * aggregates directly without a wrapping `IrNode` that would otherwise
99
+ * route through `convert`.
100
+ */
101
+ convertAggregate(agg: IrAggregate, scope?: Record<string, string>, inlineParams?: Record<string, unknown>): ExprAggregate;
102
+ /**
103
+ * Convert an `IrSubqueryRef` (a transformer-emitted placeholder pointing
104
+ * at a captured `QueryBuilder` in the param bags) to an `ExprSubquery`
105
+ * by looking up the child plan the planner already built.
106
+ * Public so `buildSelectItems` can use it for select-list subqueries
107
+ * (`Entity.query()....` projected as a column value).
108
+ */
109
+ convertSubqueryRef(ref: IrSubqueryRef): Expr;
110
+ /**
111
+ * Resolve an `IrParam` (free variable referenced by name from a runtime-
112
+ * parsed predicate). Captured subqueries are represented as
113
+ * `IrSubqueryRef`, so params always stay late-bound.
114
+ */
115
+ private resolveParamRef;
116
+ /**
117
+ * Convert `<expr> IN <rhs>` (or `NOT IN`). The right-hand side has three
118
+ * legal IR shapes that map to three different `ExprInRhs` shapes:
119
+ *
120
+ * - `IrConst` array → `{ kind: "values", values }` — inline literal list,
121
+ * compiled to `(?, ?, ?)` placeholders.
122
+ * - `IrParam` → a late-bound param reference. It expands at execution
123
+ * time when the dialect resolves `__param` sentinels.
124
+ * - `IrSubqueryRef` → a pre-built inline subquery plan.
125
+ *
126
+ * Anything else throws — IN's right side is a closed union by spec.
127
+ */
128
+ private convertIn;
129
+ /**
130
+ * Convert an `IrExists` (a one-to-many `EXISTS (...)` subquery).
131
+ *
132
+ * The relation lookup was done up-front by the planner's
133
+ * `OneToManyExistsBuilder`, which produced `oneToManyExists` keyed by
134
+ * `"<rootParam>.<relationKey>"`. We just look up the entry and stamp it
135
+ * onto the runtime `ExprExists`.
136
+ *
137
+ * Two scope details worth noting:
138
+ *
139
+ * 1. **outerAlias.** This is the alias the EXISTS predicate joins
140
+ * against (typically the main table). Resolving via
141
+ * `scope[node.rootParam]` is what makes nested EXISTS work: when an
142
+ * EXISTS is itself inside another EXISTS' inner predicate, the
143
+ * inner-most rootParam is actually the parent EXISTS' bound row,
144
+ * and `scope` will have been augmented to map it to the parent's
145
+ * inner alias.
146
+ *
147
+ * 2. **innerScope.** Augmenting with `[innerParam]: info.alias` is what
148
+ * lets the inner predicate's column references (`e.name` in
149
+ * `.some(e => e.name === ...)`) resolve to the inner relation's
150
+ * table alias rather than the outer row's.
151
+ */
152
+ private convertExists;
153
+ private getSubqueryPlan;
154
+ }
155
+ //# sourceMappingURL=expr-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expr-builder.d.ts","sourceRoot":"","sources":["../../../../src/orm/helpers/query-plan/expr-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBALR,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACpD,aAAa,EAAE,aAAa,EAC5B,YAAY,GAAE,GAAG,CAAC,MAAM,CAAa,EACrC,QAAQ,GAAE,GAAG,CAAC,MAAM,CAAa;IAGpD;;;;;;;;;;;;;;OAcG;IACH,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAqB,EACjD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,IAAI;IAoDP;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,aAAa,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAqB,GAChD,UAAU;IAiBb,OAAO,CAAC,gBAAgB;IAcxB;;;;;;;;;OASG;IACH,gBAAgB,CACd,GAAG,EAAE,WAAW,EAChB,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAqB,EACjD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,aAAa;IAWhB;;;;;;OAMG;IACH,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAI5C;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAmBvB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,SAAS;IA0BjB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,eAAe;CAGxB"}