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,105 @@
1
+ /**
2
+ * Db: the rich database class. Transaction logic lives in dialect-specific Trx subclasses
3
+ * (see src/orm/trx.ts and dialect trx subclasses). Db.transaction() manages the connection
4
+ * lifecycle and delegates to Driver.createTrx() for the dialect-specific scope.
5
+ */
6
+ import type { DialectInfo, Driver, TransactionOptions } from "../driver/types.js";
7
+ import type { DialectName } from "../dbs/types.js";
8
+ import type { MigrationFile } from "../migration/types.js";
9
+ import { Trx, getActiveTrx } from "./trx.js";
10
+ export { Trx, getActiveTrx };
11
+ /** Minimal interface satisfied by both `Db` and `Trx` — pass either as the executor for query builders. */
12
+ export interface QueryExecutor {
13
+ /** The SQL dialect in use. */
14
+ readonly dialect: DialectInfo;
15
+ /** Runs a SQL query and returns all result rows. */
16
+ query(sql: string, params?: unknown[]): Promise<unknown[]>;
17
+ /** Executes a SQL statement and returns affected-row metadata. */
18
+ run(sql: string, params?: unknown[]): Promise<{
19
+ lastID?: number;
20
+ changes: number;
21
+ }>;
22
+ }
23
+ /** Options passed to the `Db` constructor: either a pre-built driver or dialect + connection details. */
24
+ export type DbOptions = {
25
+ driver: Driver;
26
+ migrationsFolder?: string;
27
+ } | {
28
+ dialect: DialectName;
29
+ database?: string;
30
+ url?: string;
31
+ migrationsFolder?: string;
32
+ };
33
+ /** Root database class. Create via `new Db(options)` or `Db.fromConfig()`. */
34
+ export declare class Db implements QueryExecutor {
35
+ private _migrationsFolder;
36
+ constructor(options: DbOptions | Driver);
37
+ /** Create Db from config file. Loads config and creates driver internally. */
38
+ static fromConfig(options?: {
39
+ configPath?: string;
40
+ cwd?: string;
41
+ }): Promise<Db>;
42
+ /** The SQL dialect used by this `Db` instance. */
43
+ get dialect(): DialectInfo;
44
+ /** The underlying database driver. */
45
+ get driver(): Driver;
46
+ /** Runs a SQL query and returns all result rows. */
47
+ query(sql: string, params?: unknown[]): Promise<unknown[]>;
48
+ /** Executes a SQL statement and returns affected-row metadata. */
49
+ run(sql: string, params?: unknown[]): Promise<{
50
+ lastID?: number;
51
+ changes: number;
52
+ }>;
53
+ /** Runs `fn` inside a transaction; commits on success, rolls back on error. */
54
+ transaction<T>(fn: (trx: Trx) => Promise<T>, options?: TransactionOptions): Promise<T>;
55
+ /**
56
+ * Begin an explicit transaction and return the Trx handle.
57
+ * You are responsible for calling trx.commit() or trx.rollback().
58
+ *
59
+ * @example
60
+ * const trx = await db.beginTrx();
61
+ * try {
62
+ * await User.query(trx).insert({ name: "Alice" });
63
+ * const nested = await trx.beginTrx();
64
+ * try {
65
+ * await Post.query(nested).insert({ title: "Hello", authorId: 1 });
66
+ * await nested.commit();
67
+ * } catch { await nested.rollback(); }
68
+ * await trx.commit();
69
+ * } catch { await trx.rollback(); }
70
+ */
71
+ beginTrx(options?: TransactionOptions): Promise<Trx>;
72
+ /** CREATE TABLE IF NOT EXISTS for all registered entities (ordered by FK deps). */
73
+ migrate(): Promise<void>;
74
+ /** Validate all registered entities against the database. Throws on mismatch. */
75
+ validate(): Promise<void>;
76
+ /**
77
+ * Diff entity definitions against the database and generate migration files.
78
+ * Returns the generated files (also written to disk).
79
+ */
80
+ generateMigrations(dir?: string): Promise<MigrationFile[]>;
81
+ /** Apply pending migration scripts from the migrations directory. */
82
+ runMigrations(dir?: string): Promise<import("../migration/runner.js").MigrationResult>;
83
+ /** Show applied and pending migration status. */
84
+ migrationStatus(dir?: string): Promise<{
85
+ applied: import("../migration/types.js").MigrationRecord[];
86
+ pending: string[];
87
+ }>;
88
+ /** Return applied migration records without inspecting pending files. */
89
+ appliedMigrations(): Promise<import("../migration/types.js").MigrationRecord[]>;
90
+ /** Return pending executable migration files without applying them. */
91
+ pendingMigrations(dir?: string): Promise<import("../migration/types.js").PendingMigration[]>;
92
+ /** Preview migration execution without applying any SQL. */
93
+ dryRunMigrations(dir?: string): Promise<{
94
+ applied: import("../migration/types.js").MigrationRecord[];
95
+ pending: import("../migration/types.js").PendingMigration[];
96
+ skipped: string[];
97
+ }>;
98
+ /** Apply a specific migration by name. Throws if already applied or file not found. */
99
+ upMigration(name: string, dir?: string): Promise<void>;
100
+ /** Roll back a specific migration by name. Throws if not applied or file not found. */
101
+ downMigration(name: string, dir?: string): Promise<void>;
102
+ /** Closes the underlying database connection pool. */
103
+ close(): Promise<void>;
104
+ }
105
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/orm/db.ts"],"names":[],"mappings":"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"}
package/dist/orm/db.js ADDED
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Db: the rich database class. Transaction logic lives in dialect-specific Trx subclasses
3
+ * (see src/orm/trx.ts and dialect trx subclasses). Db.transaction() manages the connection
4
+ * lifecycle and delegates to Driver.createTrx() for the dialect-specific scope.
5
+ */
6
+ import { createDriver } from "../driver/factory.js";
7
+ import { getRegisteredEntities, setDefaultDb } from "../entity/global-driver.js";
8
+ import { generateMigrationFiles, writeMigrationFiles } from "../migration/generator.js";
9
+ import { appliedMigrations as appliedMig, downMigration as downMig, dryRunMigrations as dryRunMig, migrationStatus as migStatus, pendingMigrations as pendingMig, runMigrations as runMig, upMigration as upMig, } from "../migration/runner.js";
10
+ import { parseFkDependencies, topoSort } from "../migration/topo-sort.js";
11
+ import { loadConfig } from "../config/load-config.js";
12
+ import { Trx, getActiveTrx, runInTrxStorage } from "./trx.js";
13
+ export { Trx, getActiveTrx };
14
+ function isDriver(v) {
15
+ return v != null && typeof v === "object" && "execute" in v && "connect" in v && "close" in v;
16
+ }
17
+ /** Internal symbol: only used for the Db internal constructor overload. */
18
+ const INTERNAL = Symbol("db-internal");
19
+ /** Root database class. Create via `new Db(options)` or `Db.fromConfig()`. */
20
+ export class Db {
21
+ /** @internal */
22
+ _driver;
23
+ _migrationsFolder;
24
+ constructor(arg, internal) {
25
+ this._driver = (isDriver(arg)
26
+ ? arg
27
+ : isDriver(arg.driver)
28
+ ? arg.driver
29
+ : createDriver(arg));
30
+ this._migrationsFolder =
31
+ arg.migrationsFolder ?? "./migrations";
32
+ if (internal !== INTERNAL)
33
+ setDefaultDb(this);
34
+ }
35
+ /** Create Db from config file. Loads config and creates driver internally. */
36
+ static async fromConfig(options) {
37
+ const config = await loadConfig({
38
+ configPath: options?.configPath,
39
+ cwd: options?.cwd,
40
+ });
41
+ return new Db(config);
42
+ }
43
+ /** The SQL dialect used by this `Db` instance. */
44
+ get dialect() {
45
+ return this._driver.dialect;
46
+ }
47
+ /** The underlying database driver. */
48
+ get driver() {
49
+ return this._driver;
50
+ }
51
+ /** Runs a SQL query and returns all result rows. */
52
+ query(sql, params) {
53
+ return this._driver.execute(sql, params).then((r) => r.rows);
54
+ }
55
+ /** Executes a SQL statement and returns affected-row metadata. */
56
+ run(sql, params) {
57
+ return this._driver
58
+ .execute(sql, params)
59
+ .then((r) => ({ lastID: r.lastID, changes: r.changes }));
60
+ }
61
+ /** Runs `fn` inside a transaction; commits on success, rolls back on error. */
62
+ async transaction(fn, options) {
63
+ const conn = await this._driver.connect();
64
+ const trx = this._driver.createTrx(conn, options);
65
+ try {
66
+ return await runInTrxStorage(trx, () => trx.transaction(fn));
67
+ }
68
+ finally {
69
+ await conn.release();
70
+ }
71
+ }
72
+ /**
73
+ * Begin an explicit transaction and return the Trx handle.
74
+ * You are responsible for calling trx.commit() or trx.rollback().
75
+ *
76
+ * @example
77
+ * const trx = await db.beginTrx();
78
+ * try {
79
+ * await User.query(trx).insert({ name: "Alice" });
80
+ * const nested = await trx.beginTrx();
81
+ * try {
82
+ * await Post.query(nested).insert({ title: "Hello", authorId: 1 });
83
+ * await nested.commit();
84
+ * } catch { await nested.rollback(); }
85
+ * await trx.commit();
86
+ * } catch { await trx.rollback(); }
87
+ */
88
+ async beginTrx(options) {
89
+ const conn = await this._driver.connect();
90
+ const trx = this._driver.createTrx(conn, options);
91
+ await trx._initRoot(() => conn.release());
92
+ return trx;
93
+ }
94
+ /** CREATE TABLE IF NOT EXISTS for all registered entities (ordered by FK deps). */
95
+ async migrate() {
96
+ const compiler = this._driver.dialect.queryCompiler;
97
+ const entities = getRegisteredEntities();
98
+ const deps = parseFkDependencies(entities);
99
+ const names = entities.map((e) => e.table._table);
100
+ const sorted = topoSort(names, deps);
101
+ const byName = new Map(entities.map((e) => [e.table._table, e]));
102
+ for (const name of sorted) {
103
+ const entity = byName.get(name);
104
+ if (!entity)
105
+ continue;
106
+ const { _schema: schema } = entity.table;
107
+ await this.run(compiler.compileCreateTableIfNotExists(name, schema));
108
+ }
109
+ }
110
+ /** Validate all registered entities against the database. Throws on mismatch. */
111
+ async validate() {
112
+ for (const entity of getRegisteredEntities()) {
113
+ const { _table: name, _schema: schema } = entity.table;
114
+ const expectedCols = Object.keys(schema);
115
+ const rows = await this._driver.dialect.migrator.getDbColumns(this._driver, name);
116
+ if (rows.length === 0) {
117
+ throw new Error(`validate: table "${name}" does not exist in the database.`);
118
+ }
119
+ const dbCols = new Map(rows.map((r) => [r.name, r]));
120
+ for (const col of expectedCols) {
121
+ if (!dbCols.has(col)) {
122
+ throw new Error(`validate: column "${col}" is defined in Entity("${name}") but does not exist in the table.`);
123
+ }
124
+ }
125
+ }
126
+ }
127
+ /**
128
+ * Diff entity definitions against the database and generate migration files.
129
+ * Returns the generated files (also written to disk).
130
+ */
131
+ async generateMigrations(dir = this._migrationsFolder) {
132
+ const entities = getRegisteredEntities();
133
+ const files = await generateMigrationFiles(this._driver, entities);
134
+ if (files.length > 0)
135
+ writeMigrationFiles(dir, files);
136
+ return files;
137
+ }
138
+ /** Apply pending migration scripts from the migrations directory. */
139
+ async runMigrations(dir = this._migrationsFolder) {
140
+ return runMig(this._driver, dir);
141
+ }
142
+ /** Show applied and pending migration status. */
143
+ async migrationStatus(dir = this._migrationsFolder) {
144
+ return migStatus(this._driver, dir);
145
+ }
146
+ /** Return applied migration records without inspecting pending files. */
147
+ async appliedMigrations() {
148
+ return appliedMig(this._driver);
149
+ }
150
+ /** Return pending executable migration files without applying them. */
151
+ async pendingMigrations(dir = this._migrationsFolder) {
152
+ return pendingMig(this._driver, dir);
153
+ }
154
+ /** Preview migration execution without applying any SQL. */
155
+ async dryRunMigrations(dir = this._migrationsFolder) {
156
+ return dryRunMig(this._driver, dir);
157
+ }
158
+ /** Apply a specific migration by name. Throws if already applied or file not found. */
159
+ async upMigration(name, dir = this._migrationsFolder) {
160
+ return upMig(this._driver, dir, name);
161
+ }
162
+ /** Roll back a specific migration by name. Throws if not applied or file not found. */
163
+ async downMigration(name, dir = this._migrationsFolder) {
164
+ return downMig(this._driver, dir, name);
165
+ }
166
+ /** Closes the underlying database connection pool. */
167
+ async close() {
168
+ setDefaultDb(null);
169
+ await this._driver.close();
170
+ }
171
+ }
172
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/orm/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Runtime expression model — what the dialect compiles to SQL.
3
+ *
4
+ * Independent of the parser-side IR (`src/ir/types.ts`). The QueryPlanBuilder
5
+ * converts IR to Expr once during planning, resolving member paths to alias +
6
+ * column pairs and inlining subquery plans. The dialect walks Expr; it never
7
+ * imports from `src/ir/`.
8
+ */
9
+ import type { JoinType } from "../ir/types.js";
10
+ import type { QueryPlan } from "./helpers/query-plan/query-plan.js";
11
+ export type BinaryOp = "&&" | "||" | "===" | "!==" | "==" | "!=" | ">" | ">=" | "<" | "<=" | "+" | "-" | "*" | "/" | "%" | "&" | "|" | "^" | "<<" | ">>";
12
+ export type AggregateFn = "SUM" | "AVG" | "MIN" | "MAX" | "COUNT" | "GROUP_CONCAT" | "STRING_AGG" | "ARRAY_AGG" | "JSON_AGG";
13
+ export type Expr = ExprBinary | ExprUnary | ExprColumn | ExprConst | ExprParam | ExprIn | ExprCall | ExprAggregate | ExprExists | ExprSubquery | ExprCase;
14
+ export interface ExprBinary {
15
+ kind: "binary";
16
+ op: BinaryOp;
17
+ left: Expr;
18
+ right: Expr;
19
+ }
20
+ export interface ExprUnary {
21
+ kind: "unary";
22
+ op: "!" | "~";
23
+ operand: Expr;
24
+ }
25
+ /** Resolved column reference. `alias` is the SQL table alias (e.g. "t0", "t1").
26
+ * `column` is the column path: empty array means the alias itself (rare —
27
+ * used when a member path was fully consumed by relation rewrite); a single
28
+ * element is a leaf column; multiple elements are a multi-segment path
29
+ * rendered as quoted dotted segments. */
30
+ export interface ExprColumn {
31
+ kind: "column";
32
+ alias: string;
33
+ column: string[];
34
+ }
35
+ export interface ExprConst {
36
+ kind: "const";
37
+ value: unknown;
38
+ }
39
+ /** Late-bound parameter — resolved at runtime against the plan's param bags. */
40
+ export interface ExprParam {
41
+ kind: "param";
42
+ name: string;
43
+ }
44
+ export interface ExprIn {
45
+ kind: "in";
46
+ left: Expr;
47
+ right: ExprInRhs;
48
+ negated?: boolean;
49
+ }
50
+ export type ExprInRhs = {
51
+ kind: "values";
52
+ values: unknown[];
53
+ } | {
54
+ kind: "param";
55
+ name: string;
56
+ } | {
57
+ kind: "subquery";
58
+ plan: QueryPlan;
59
+ };
60
+ export interface ExprCall {
61
+ kind: "call";
62
+ method: string;
63
+ receiver: Expr;
64
+ args: Expr[];
65
+ }
66
+ export interface ExprAggregate {
67
+ kind: "aggregate";
68
+ func: AggregateFn;
69
+ arg: Expr | null;
70
+ alias?: string;
71
+ distinct?: boolean;
72
+ separator?: string;
73
+ }
74
+ /** Pre-resolved EXISTS subquery for one-to-many filters. The planner has
75
+ * already chosen `outerAlias`/`innerAlias` and resolved the predicate's
76
+ * inner row-param to `innerAlias`. */
77
+ export interface ExprExists {
78
+ kind: "exists";
79
+ negated?: boolean;
80
+ outerAlias: string;
81
+ innerAlias: string;
82
+ targetTable: string;
83
+ fkColumns: string[];
84
+ mainPk: string[];
85
+ predicate: Expr;
86
+ }
87
+ /** Embedded subquery — fully built child plan. */
88
+ export interface ExprSubquery {
89
+ kind: "subquery";
90
+ plan: QueryPlan;
91
+ }
92
+ export interface ExprCase {
93
+ kind: "case";
94
+ branches: Array<{
95
+ when: Expr;
96
+ then: Expr;
97
+ }>;
98
+ else?: Expr;
99
+ }
100
+ /** A SELECT-list item. `alias` is optional — when undefined no AS clause is emitted. */
101
+ export interface SelectItem {
102
+ expr: Expr;
103
+ alias?: string;
104
+ }
105
+ export type OrderDirection = "asc" | "desc";
106
+ export interface OrderItem {
107
+ expr: Expr;
108
+ direction: OrderDirection;
109
+ }
110
+ export type GroupByItem = ExprColumn | {
111
+ kind: "index";
112
+ index: number;
113
+ };
114
+ export interface JoinSpec {
115
+ relationKey: string;
116
+ alias: string;
117
+ targetTable: string;
118
+ targetPkColumns: string[];
119
+ foreignKeys: string[];
120
+ relType: "many-to-one" | "one-to-one";
121
+ joinType: JoinType;
122
+ /** Custom ON for entity-table joins; when set, FK columns are ignored. */
123
+ on?: Expr;
124
+ }
125
+ //# sourceMappingURL=expr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expr.d.ts","sourceRoot":"","sources":["../../src/orm/expr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Runtime expression model — what the dialect compiles to SQL.
3
+ *
4
+ * Independent of the parser-side IR (`src/ir/types.ts`). The QueryPlanBuilder
5
+ * converts IR to Expr once during planning, resolving member paths to alias +
6
+ * column pairs and inlining subquery plans. The dialect walks Expr; it never
7
+ * imports from `src/ir/`.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=expr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expr.js","sourceRoot":"","sources":["../../src/orm/expr.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,9 @@
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 InsertGraphBatchExecutor extends InsertGraphExecutor {
5
+ protected insertReadyNodes(qe: QueryExecutor, nodes: PlannedNode[]): Promise<void>;
6
+ private insertNodeGroup;
7
+ private insertNodeBatch;
8
+ }
9
+ //# sourceMappingURL=insert-graph-batch-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-graph-batch-executor.d.ts","sourceRoot":"","sources":["../../../../src/orm/helpers/insert-graph/insert-graph-batch-executor.ts"],"names":[],"mappings":"AACA,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;AAU7D,qBAAa,wBAAyB,SAAQ,mBAAmB;cAC/C,gBAAgB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAO1E,eAAe;YAaf,eAAe;CAgB9B"}
@@ -0,0 +1,44 @@
1
+ import { InsertGraphExecutor } from "./insert-graph-executor.js";
2
+ import { groupBy } from "../../../utils.js";
3
+ import { SequenceIdAssigner } from "./sequence-id-assigner.js";
4
+ export class InsertGraphBatchExecutor extends InsertGraphExecutor {
5
+ async insertReadyNodes(qe, nodes) {
6
+ const compiler = qe.dialect.queryCompiler;
7
+ for (const group of groupByTable(nodes)) {
8
+ await this.insertNodeGroup(compiler, qe, group);
9
+ }
10
+ }
11
+ async insertNodeGroup(compiler, qe, group) {
12
+ await new SequenceIdAssigner(compiler, qe, group.tableName, group.items).assign();
13
+ if (group.mode === "single") {
14
+ await this.insertSingleNode(qe, group.items[0]);
15
+ return;
16
+ }
17
+ await this.insertNodeBatch(qe, group);
18
+ }
19
+ async insertNodeBatch(qe, group) {
20
+ const entity = group.items[0].entity;
21
+ const inserted = await entity.query(qe).insertMany(group.items.map((node) => node.scalarData));
22
+ if (inserted.length > 0 && inserted.length !== group.items.length) {
23
+ throw new Error("insertGraph: insertMany did not return the expected number of rows");
24
+ }
25
+ for (const [index, node] of group.items.entries()) {
26
+ const insertedRow = inserted[index];
27
+ if (insertedRow) {
28
+ node.insertedRow = insertedRow;
29
+ node.materializedRow = insertedRow;
30
+ }
31
+ else {
32
+ node.insertedRow = { ...node.scalarData };
33
+ }
34
+ }
35
+ }
36
+ }
37
+ function groupByTable(nodes) {
38
+ return [...groupBy(nodes, (node) => node.tableName)].map(([tableName, items]) => ({
39
+ tableName,
40
+ items,
41
+ mode: items.length === 1 ? "single" : "batch",
42
+ }));
43
+ }
44
+ //# sourceMappingURL=insert-graph-batch-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-graph-batch-executor.js","sourceRoot":"","sources":["../../../../src/orm/helpers/insert-graph/insert-graph-batch-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,MAAM,OAAO,wBAAyB,SAAQ,mBAAmB;IACrD,KAAK,CAAC,gBAAgB,CAAC,EAAiB,EAAE,KAAoB;QACtE,MAAM,QAAQ,GAAI,EAAE,CAAC,OAAmB,CAAC,aAAa,CAAC;QACvD,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,QAAuB,EACvB,EAAiB,EACjB,KAAkB;QAElB,MAAM,IAAI,kBAAkB,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAClF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,EAAiB,EAAE,KAAkB;QACjE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAwC,CAAC;YAC3E,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;gBAC/B,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,SAAS,YAAY,CAAC,KAAoB;IACxC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAChF,SAAS;QACT,KAAK;QACL,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;KAC9C,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { QueryExecutor } from "../../db.js";
2
+ import type { InsertGraphPlan, PlannedNode } from "./insert-graph-planner.js";
3
+ export declare abstract class InsertGraphExecutor {
4
+ protected readonly plan: InsertGraphPlan;
5
+ constructor(plan: InsertGraphPlan);
6
+ execute(): Promise<void>;
7
+ private drainNodes;
8
+ protected insertSingleNode(qe: QueryExecutor, node: PlannedNode): Promise<void>;
9
+ private getReadyNodes;
10
+ private applyPendingCopies;
11
+ protected abstract insertReadyNodes(qe: QueryExecutor, nodes: PlannedNode[]): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=insert-graph-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-graph-executor.d.ts","sourceRoot":"","sources":["../../../../src/orm/helpers/insert-graph/insert-graph-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE9E,8BAAsB,mBAAmB;IAC3B,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe;gBAArB,IAAI,EAAE,eAAe;IAE9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAIhB,UAAU;cAaR,gBAAgB,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IASrF,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,kBAAkB;IAS1B,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAC5F"}
@@ -0,0 +1,42 @@
1
+ export class InsertGraphExecutor {
2
+ plan;
3
+ constructor(plan) {
4
+ this.plan = plan;
5
+ }
6
+ async execute() {
7
+ await this.drainNodes();
8
+ }
9
+ async drainNodes() {
10
+ let ready = this.getReadyNodes();
11
+ while (ready.length > 0) {
12
+ for (const node of ready)
13
+ this.applyPendingCopies(node);
14
+ await this.insertReadyNodes(this.plan.qe, ready);
15
+ ready = this.getReadyNodes();
16
+ }
17
+ const stuck = this.plan.nodes.filter((node) => node.insertedRow == null);
18
+ if (stuck.length > 0) {
19
+ throw new Error("insertGraph: unresolved node dependencies");
20
+ }
21
+ }
22
+ async insertSingleNode(qe, node) {
23
+ const inserted = (await node.entity.query(qe).insert(node.scalarData));
24
+ node.insertedRow = inserted;
25
+ node.materializedRow = inserted;
26
+ }
27
+ getReadyNodes() {
28
+ return this.plan.nodes
29
+ .filter((node) => node.insertedRow == null &&
30
+ node.dependencyIds.every((id) => this.plan.nodes[id]?.insertedRow != null))
31
+ .sort((left, right) => left.id - right.id);
32
+ }
33
+ applyPendingCopies(node) {
34
+ for (const copy of node.pendingCopies) {
35
+ const sourceRow = this.plan.nodes[copy.sourceNodeId].insertedRow;
36
+ for (let i = 0; i < copy.targetColumns.length; i++) {
37
+ node.scalarData[copy.targetColumns[i]] = sourceRow[copy.sourceColumns[i]];
38
+ }
39
+ }
40
+ }
41
+ }
42
+ //# sourceMappingURL=insert-graph-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-graph-executor.js","sourceRoot":"","sources":["../../../../src/orm/helpers/insert-graph/insert-graph-executor.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,mBAAmB;IACR;IAA/B,YAA+B,IAAqB;QAArB,SAAI,GAAJ,IAAI,CAAiB;IAAG,CAAC;IAExD,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACjD,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/B,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAES,KAAK,CAAC,gBAAgB,CAAC,EAAiB,EAAE,IAAiB;QACnE,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAGpE,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;IAClC,CAAC;IAEO,aAAa;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;aACnB,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,WAAW,IAAI,IAAI;YACxB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,WAAW,IAAI,IAAI,CAAC,CAC7E;aACA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IAEO,kBAAkB,CAAC,IAAiB;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAY,CAAC;YAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;CAGF"}
@@ -0,0 +1,46 @@
1
+ import { type AnyEntityClass, type EntityInstance } from "../../../entity/entity.js";
2
+ import type { QueryExecutor } from "../../db.js";
3
+ import { type QueryState } from "../../query-state.js";
4
+ type InsertGraphInput = Record<string, unknown> | Record<string, unknown>[];
5
+ type GraphInsertIdResolution = "provided" | "needsReturning" | "needsSequence" | "unresolvableInBatch";
6
+ type ColumnCopyInstruction = {
7
+ sourceNodeId: number;
8
+ sourceColumns: string[];
9
+ targetColumns: string[];
10
+ };
11
+ export type PlannedNodeInput = {
12
+ tableName: string;
13
+ entity: AnyEntityClass;
14
+ scalarData: Record<string, unknown>;
15
+ pkColumns: string[];
16
+ idResolution: GraphInsertIdResolution;
17
+ insertedRow?: Record<string, unknown>;
18
+ materializedRow?: Record<string, unknown>;
19
+ };
20
+ export type PlannedNode = PlannedNodeInput & {
21
+ id: number;
22
+ dependencyIds: number[];
23
+ pendingCopies: ColumnCopyInstruction[];
24
+ };
25
+ export type InsertGraphPlan = {
26
+ qe: QueryExecutor;
27
+ nodes: PlannedNode[];
28
+ rootNodeIds: number[];
29
+ };
30
+ export declare class InsertGraphPlanner<C extends AnyEntityClass> {
31
+ private readonly state;
32
+ private readonly input;
33
+ constructor(state: QueryState<EntityInstance<C>>, input: InsertGraphInput);
34
+ execute(): Promise<EntityInstance<C> | EntityInstance<C>[]>;
35
+ private buildInsertGraphPlan;
36
+ private planGraphNode;
37
+ private planOwningToOneRelation;
38
+ private planOneToManyChildren;
39
+ private planManyToManyRelations;
40
+ private resolveManyToManyTargetNode;
41
+ private createJunctionNode;
42
+ private createReferenceNode;
43
+ private materializeRootRows;
44
+ }
45
+ export {};
46
+ //# sourceMappingURL=insert-graph-planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-graph-planner.d.ts","sourceRoot":"","sources":["../../../../src/orm/helpers/insert-graph/insert-graph-planner.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AAUnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAKvD,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;AAE5E,KAAK,uBAAuB,GACxB,UAAU,GACV,gBAAgB,GAChB,eAAe,GACf,qBAAqB,CAAC;AAE1B,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,uBAAuB,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,qBAAqB,EAAE,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,aAAa,CAAC;IAClB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAUF,qBAAa,kBAAkB,CAAC,CAAC,SAAS,cAAc;IAEpD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,KAAK,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EACpC,KAAK,EAAE,gBAAgB;IAGpC,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAcjE,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,2BAA2B;IAcnC,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,mBAAmB;YAiBb,mBAAmB;CAOlC"}