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,2 @@
1
+ export * from "./types.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Schema and table definition types.
3
+ */
4
+ export interface ColumnDef {
5
+ type: string;
6
+ primaryKey?: boolean;
7
+ autoIncrement?: boolean;
8
+ nullable?: boolean;
9
+ default?: string | number;
10
+ }
11
+ export type TableDefinition = Record<string, string | ColumnDef>;
12
+ /** Normalize to ColumnDef */
13
+ export declare function normalizeCol(def: string | ColumnDef): ColumnDef;
14
+ export declare function getColumnNames(def: TableDefinition): string[];
15
+ export declare function sqlType(def: TableDefinition, col: string): string;
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAMjE,6BAA6B;AAC7B,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAW/D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,EAAE,CAE7D;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAajE"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Schema and table definition types.
3
+ */
4
+ function stripForConstraintCheck(def) {
5
+ return def.replaceAll(/'[^']*'/g, "").replaceAll(/--[^\n]*/g, "");
6
+ }
7
+ /** Normalize to ColumnDef */
8
+ export function normalizeCol(def) {
9
+ if (typeof def === "string") {
10
+ const stripped = stripForConstraintCheck(def);
11
+ return {
12
+ type: def,
13
+ primaryKey: /\bprimary\s+key\b/i.test(stripped),
14
+ autoIncrement: /\bautoincrement\b/i.test(stripped),
15
+ nullable: !/\bnot\s+null\b/i.test(stripped),
16
+ };
17
+ }
18
+ return def;
19
+ }
20
+ export function getColumnNames(def) {
21
+ return Object.keys(def);
22
+ }
23
+ export function sqlType(def, col) {
24
+ const d = def[col];
25
+ const c = normalizeCol(d);
26
+ const lower = c.type.toLowerCase();
27
+ let out = c.type;
28
+ if (c.primaryKey && !lower.includes("primary key"))
29
+ out += " PRIMARY KEY";
30
+ if (c.autoIncrement && !lower.includes("autoincrement"))
31
+ out += " AUTOINCREMENT";
32
+ if (c.nullable === false && !lower.includes("not null"))
33
+ out += " NOT NULL";
34
+ if (c.default !== undefined)
35
+ out +=
36
+ " DEFAULT " +
37
+ (typeof c.default === "number" ? c.default : `'${String(c.default).replaceAll("'", "''")}'`);
38
+ return out;
39
+ }
40
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,SAAS,uBAAuB,CAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACpE,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,YAAY,CAAC,GAAuB;IAClD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO;YACL,IAAI,EAAE,GAAG;YACT,UAAU,EAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC/C,aAAa,EAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAClD,QAAQ,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC5C,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAoB;IACjD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAoB,EAAE,GAAW;IACvD,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;IACjB,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,GAAG,IAAI,cAAc,CAAC;IAC1E,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,GAAG,IAAI,gBAAgB,CAAC;IACjF,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,GAAG,IAAI,WAAW,CAAC;IAC5E,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;QACzB,GAAG;YACD,WAAW;gBACX,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACjG,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * SQLite-specific aggregate function stubs.
3
+ * Import from "typhex/sqlite" to use these inside .select() and .having() lambdas.
4
+ * These are never executed — the transformer/parser reads source text instead.
5
+ */
6
+ /** Concatenates grouped strings with optional separator. Compiles to GROUP_CONCAT. */
7
+ export declare function groupConcat(_field: unknown, _separator?: string): string;
8
+ //# sourceMappingURL=aggregates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregates.d.ts","sourceRoot":"","sources":["../../src/sqlite/aggregates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAExE"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * SQLite-specific aggregate function stubs.
3
+ * Import from "typhex/sqlite" to use these inside .select() and .having() lambdas.
4
+ * These are never executed — the transformer/parser reads source text instead.
5
+ */
6
+ const msg = (n) => `${n}() can only be used inside a .select() or .having() lambda`;
7
+ /** Concatenates grouped strings with optional separator. Compiles to GROUP_CONCAT. */
8
+ export function groupConcat(_field, _separator) {
9
+ throw new Error(msg("groupConcat"));
10
+ }
11
+ //# sourceMappingURL=aggregates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregates.js","sourceRoot":"","sources":["../../src/sqlite/aggregates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,4DAA4D,CAAC;AAE5F,sFAAsF;AACtF,MAAM,UAAU,WAAW,CAAC,MAAe,EAAE,UAAmB;IAC9D,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * typhex/sqlite — SQLite-specific aggregate functions.
3
+ * Import from "typhex/sqlite" to use SQLite-only aggregates in query lambdas.
4
+ */
5
+ export { groupConcat } from "./sqlite/aggregates.js";
6
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/sqlite.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * typhex/sqlite — SQLite-specific aggregate functions.
3
+ * Import from "typhex/sqlite" to use SQLite-only aggregates in query lambdas.
4
+ */
5
+ export { groupConcat } from "./sqlite/aggregates.js";
6
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Arrow parameter binding extraction for the compile-time transformer:
3
+ * simple identifiers, object destructuring, and scope frames for correlated
4
+ * subqueries in nested lambdas.
5
+ */
6
+ import ts from "typescript";
7
+ export interface ParamBindings {
8
+ paramName: string;
9
+ bindings: Map<string, string[]> | null;
10
+ restName: string | null;
11
+ }
12
+ export declare function getParamBindings(param: ts.BindingName | undefined): ParamBindings;
13
+ export interface ScopeFrame {
14
+ paramName: string;
15
+ bindings?: Map<string, string[]>;
16
+ }
17
+ export declare function frameFromBindingName(name: ts.BindingName | undefined): ScopeFrame | null;
18
+ //# sourceMappingURL=bindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../src/transformer/bindings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACvC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAQD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,GAAG,SAAS,GAAG,aAAa,CA2BjF;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAClC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAMxF"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Arrow parameter binding extraction for the compile-time transformer:
3
+ * simple identifiers, object destructuring, and scope frames for correlated
4
+ * subqueries in nested lambdas.
5
+ */
6
+ import ts from "typescript";
7
+ import { DEFAULT_ROW_PARAM } from "../arrow/constants.js";
8
+ const NO_BINDINGS = {
9
+ paramName: DEFAULT_ROW_PARAM,
10
+ bindings: null,
11
+ restName: null,
12
+ };
13
+ export function getParamBindings(param) {
14
+ if (!param)
15
+ return NO_BINDINGS;
16
+ if (ts.isIdentifier(param)) {
17
+ return { paramName: param.text, bindings: null, restName: null };
18
+ }
19
+ if (!ts.isObjectBindingPattern(param))
20
+ return NO_BINDINGS;
21
+ const bindings = new Map();
22
+ let restName = null;
23
+ for (const el of param.elements) {
24
+ if (el.dotDotDotToken) {
25
+ if (ts.isIdentifier(el.name))
26
+ restName = el.name.text;
27
+ continue;
28
+ }
29
+ if (!ts.isIdentifier(el.name))
30
+ continue;
31
+ const localName = el.name.text;
32
+ const sourceKey = el.propertyName && ts.isIdentifier(el.propertyName) ? el.propertyName.text : localName;
33
+ bindings.set(localName, [sourceKey]);
34
+ }
35
+ if (bindings.size === 0 && !restName)
36
+ return NO_BINDINGS;
37
+ return {
38
+ paramName: DEFAULT_ROW_PARAM,
39
+ bindings: bindings.size > 0 ? bindings : null,
40
+ restName,
41
+ };
42
+ }
43
+ export function frameFromBindingName(name) {
44
+ const pb = getParamBindings(name);
45
+ if (pb === NO_BINDINGS)
46
+ return null;
47
+ const frame = { paramName: pb.paramName };
48
+ if (pb.bindings)
49
+ frame.bindings = pb.bindings;
50
+ return frame;
51
+ }
52
+ //# sourceMappingURL=bindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/transformer/bindings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAQ1D,MAAM,WAAW,GAAkB;IACjC,SAAS,EAAE,iBAAiB;IAC5B,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,KAAiC;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC;IAC/B,IAAI,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACnE,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAE1D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC;gBAAE,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YACtD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,SAAS;QACxC,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,MAAM,SAAS,GACb,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,WAAW,CAAC;IACzD,OAAO;QACL,SAAS,EAAE,iBAAiB;QAC5B,QAAQ,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;QAC7C,QAAQ;KACT,CAAC;AACJ,CAAC;AAOD,MAAM,UAAU,oBAAoB,CAAC,IAAgC;IACnE,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,EAAE,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,KAAK,GAAe,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;IACtD,IAAI,EAAE,CAAC,QAAQ;QAAE,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;IAC9C,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * TypeScript transformer for typhex: compiles .where(arrow) and .select(arrow) to IR.
3
+ * Use with ttypescript (ttsc) or ts-patch.
4
+ *
5
+ * tsconfig.json:
6
+ * "compilerOptions": { "plugins": [{ "transform": "typhex/transformer" }] }
7
+ *
8
+ * Or with ts-patch: add "ts-patch" and run with tsc (patched).
9
+ */
10
+ import * as ts from "typescript";
11
+ /** Create the main Typhex transformer. */
12
+ export declare function createTyphexTransformer(program: ts.Program): (ctx: ts.TransformationContext) => ts.Transformer<ts.SourceFile>;
13
+ /** ttsc/ts-patch plugin entry point — wires the transformer into the `before` phase. */
14
+ export default function (program: ts.Program): {
15
+ before: (ctx: ts.TransformationContext) => ts.Transformer<ts.SourceFile>;
16
+ };
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transformer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAkEjC,0CAA0C;AAC1C,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAGjD,KAAK,EAAE,CAAC,qBAAqB,KAAG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAGtE;AAED,wFAAwF;AACxF,MAAM,CAAC,OAAO,WAAW,OAAO,EAAE,EAAE,CAAC,OAAO;kBAN7B,EAAE,CAAC,qBAAqB,KAAG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC;EAUtE"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * TypeScript transformer for typhex: compiles .where(arrow) and .select(arrow) to IR.
3
+ * Use with ttypescript (ttsc) or ts-patch.
4
+ *
5
+ * tsconfig.json:
6
+ * "compilerOptions": { "plugins": [{ "transform": "typhex/transformer" }] }
7
+ *
8
+ * Or with ts-patch: add "ts-patch" and run with tsc (patched).
9
+ */
10
+ import * as ts from "typescript";
11
+ import { transformWhereCall, transformHavingCall } from "./where-transformer.js";
12
+ import { transformSelectCall } from "./select-transformer.js";
13
+ import { transformOrderByCall } from "./orderby-transformer.js";
14
+ import { transformJoinCall } from "./join-transformer.js";
15
+ import { frameFromBindingName } from "./shared.js";
16
+ /**
17
+ * Recursive visitor: for every CallExpression, visit children first (so
18
+ * nested chains are rewritten inside-out) and then try each per-method
19
+ * transformer in turn. Non-call nodes are walked through unchanged.
20
+ *
21
+ * `scope` is a stack of `ScopeFrame`s from enclosing arrow functions — each
22
+ * frame carries the row-param name and any destructured bindings. Per-method
23
+ * transformers consult it so a bare identifier that matches an outer arrow's
24
+ * param resolves as an `IrMember` reference (rather than a closure capture).
25
+ * This is what lets correlated subqueries like `p.userId === u.id` and
26
+ * destructured-outer cases like `({ id }) => p.userId === id` work without
27
+ * any per-call rethreading.
28
+ */
29
+ function visit(node, ctx, checker, scope) {
30
+ if (ts.isArrowFunction(node) || ts.isFunctionExpression(node)) {
31
+ const frames = [];
32
+ for (const p of node.parameters) {
33
+ const frame = frameFromBindingName(p.name);
34
+ if (frame)
35
+ frames.push(frame);
36
+ }
37
+ const innerScope = frames.length > 0 ? [...scope, ...frames] : scope;
38
+ return ts.visitEachChild(node, (n) => visit(n, ctx, checker, innerScope), ctx);
39
+ }
40
+ if (ts.isCallExpression(node)) {
41
+ // Visit children first so nested calls get transformed inside-out.
42
+ // Inner `.where(arrow)` and `.select(arrow)` are rewritten to IR
43
+ // object-literal expressions before this outer call is matched, so the
44
+ // chain walker for inline subqueries consumes already-transformed IR
45
+ // literals rather than re-parsing the inner arrows.
46
+ const visited = ts.visitEachChild(node, (n) => visit(n, ctx, checker, scope), ctx);
47
+ const rewritten = transformSelectCall(visited, checker) ||
48
+ transformWhereCall(visited, checker, scope) ||
49
+ transformOrderByCall(visited, checker) ||
50
+ transformJoinCall(visited, checker) ||
51
+ transformHavingCall(visited, checker, scope);
52
+ if (rewritten)
53
+ return rewritten;
54
+ return visited;
55
+ }
56
+ return ts.visitEachChild(node, (n) => visit(n, ctx, checker, scope), ctx);
57
+ }
58
+ /** Entry point for a single source file — walks its top-level children through `visit`. */
59
+ function visitSourceFile(node, ctx, checker) {
60
+ return ts.visitEachChild(node, (n) => visit(n, ctx, checker, []), ctx);
61
+ }
62
+ /** Create the main Typhex transformer. */
63
+ export function createTyphexTransformer(program) {
64
+ const checker = program.getTypeChecker();
65
+ return (ctx) => {
66
+ return (sf) => visitSourceFile(sf, ctx, checker);
67
+ };
68
+ }
69
+ /** ttsc/ts-patch plugin entry point — wires the transformer into the `before` phase. */
70
+ export default function (program) {
71
+ return {
72
+ before: createTyphexTransformer(program),
73
+ };
74
+ }
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transformer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Serialize IR structures into TypeScript object-literal expression nodes so
3
+ * the transformer can emit pre-built IR as the first argument of rewritten calls.
4
+ */
5
+ import ts from "typescript";
6
+ import type { IrNode, IrSelect, IrWhere, IrOrderBy, IrAggregate } from "../ir/types.js";
7
+ export declare function irNodeToTsLiteral(ir: IrNode): ts.ObjectLiteralExpression;
8
+ export declare function irWhereToTsLiteral(where: IrWhere): ts.ObjectLiteralExpression;
9
+ export declare function irOrderByToTsLiteral(ir: IrOrderBy): ts.ObjectLiteralExpression;
10
+ export declare function irAggregateToTsLiteral(agg: IrAggregate): ts.ObjectLiteralExpression;
11
+ export declare function irSelectToTsLiteral(sel: IrSelect): ts.ObjectLiteralExpression;
12
+ //# sourceMappingURL=ir-emit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir-emit.d.ts","sourceRoot":"","sources":["../../src/transformer/ir-emit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAwBxF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,uBAAuB,CAoFxE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,CAAC,uBAAuB,CAY7E;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,SAAS,GAAG,EAAE,CAAC,uBAAuB,CAM9E;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,EAAE,CAAC,uBAAuB,CAYnF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,QAAQ,GAAG,EAAE,CAAC,uBAAuB,CA0D7E"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Serialize IR structures into TypeScript object-literal expression nodes so
3
+ * the transformer can emit pre-built IR as the first argument of rewritten calls.
4
+ */
5
+ import ts from "typescript";
6
+ function valueToTsExpression(value, f) {
7
+ if (value === null)
8
+ return f.createNull();
9
+ switch (typeof value) {
10
+ case "string":
11
+ return f.createStringLiteral(value);
12
+ case "number":
13
+ return f.createNumericLiteral(value);
14
+ case "boolean":
15
+ return value ? f.createTrue() : f.createFalse();
16
+ }
17
+ if (Array.isArray(value)) {
18
+ return f.createArrayLiteralExpression(value.map((v) => valueToTsExpression(v, f)));
19
+ }
20
+ return f.createStringLiteral(JSON.stringify(value) ?? String(value));
21
+ }
22
+ function stringArrayLiteral(items, f) {
23
+ return f.createArrayLiteralExpression(items.map((p) => f.createStringLiteral(p)));
24
+ }
25
+ export function irNodeToTsLiteral(ir) {
26
+ const f = ts.factory;
27
+ const props = [
28
+ f.createPropertyAssignment("kind", f.createStringLiteral(ir.kind)),
29
+ ];
30
+ switch (ir.kind) {
31
+ case "aggregate":
32
+ return irAggregateToTsLiteral(ir);
33
+ case "binary":
34
+ props.push(f.createPropertyAssignment("op", f.createStringLiteral(ir.op)), f.createPropertyAssignment("left", irNodeToTsLiteral(ir.left)), f.createPropertyAssignment("right", irNodeToTsLiteral(ir.right)));
35
+ break;
36
+ case "unary":
37
+ props.push(f.createPropertyAssignment("op", f.createStringLiteral(ir.op)), f.createPropertyAssignment("operand", irNodeToTsLiteral(ir.operand)));
38
+ break;
39
+ case "member":
40
+ props.push(f.createPropertyAssignment("param", f.createStringLiteral(ir.param)), f.createPropertyAssignment("path", stringArrayLiteral(ir.path, f)));
41
+ break;
42
+ case "const":
43
+ props.push(f.createPropertyAssignment("value", valueToTsExpression(ir.value, f)));
44
+ break;
45
+ case "param":
46
+ props.push(f.createPropertyAssignment("key", f.createStringLiteral(ir.key)));
47
+ break;
48
+ case "in":
49
+ props.push(f.createPropertyAssignment("left", irNodeToTsLiteral(ir.left)), f.createPropertyAssignment("right", irNodeToTsLiteral(ir.right)));
50
+ if (ir.negated)
51
+ props.push(f.createPropertyAssignment("negated", f.createTrue()));
52
+ break;
53
+ case "call":
54
+ props.push(f.createPropertyAssignment("method", f.createStringLiteral(ir.method)), f.createPropertyAssignment("receiver", irNodeToTsLiteral(ir.receiver)), f.createPropertyAssignment("args", f.createArrayLiteralExpression(ir.args.map((a) => irNodeToTsLiteral(a)))));
55
+ break;
56
+ case "exists":
57
+ props.push(f.createPropertyAssignment("rootParam", f.createStringLiteral(ir.rootParam)), f.createPropertyAssignment("relationKey", f.createStringLiteral(ir.relationKey)), f.createPropertyAssignment("innerParam", f.createStringLiteral(ir.innerParam)), f.createPropertyAssignment("innerWhere", irNodeToTsLiteral(ir.innerWhere)));
58
+ if (ir.negated)
59
+ props.push(f.createPropertyAssignment("negated", f.createTrue()));
60
+ break;
61
+ case "subqueryRef":
62
+ props.push(f.createPropertyAssignment("key", f.createStringLiteral(ir.key)));
63
+ break;
64
+ case "case":
65
+ props.push(f.createPropertyAssignment("branches", f.createArrayLiteralExpression(ir.branches.map((b) => f.createObjectLiteralExpression([
66
+ f.createPropertyAssignment("when", irNodeToTsLiteral(b.when)),
67
+ f.createPropertyAssignment("then", irNodeToTsLiteral(b.then)),
68
+ ])))));
69
+ if (ir.else !== undefined) {
70
+ props.push(f.createPropertyAssignment("else", irNodeToTsLiteral(ir.else)));
71
+ }
72
+ break;
73
+ }
74
+ return f.createObjectLiteralExpression(props);
75
+ }
76
+ export function irWhereToTsLiteral(where) {
77
+ const f = ts.factory;
78
+ const props = [
79
+ f.createPropertyAssignment("node", irNodeToTsLiteral(where.node)),
80
+ f.createPropertyAssignment("rootParam", f.createStringLiteral(where.rootParam)),
81
+ ];
82
+ if (where.localParamNames && where.localParamNames.length > 0) {
83
+ props.push(f.createPropertyAssignment("localParamNames", stringArrayLiteral(where.localParamNames, f)));
84
+ }
85
+ return f.createObjectLiteralExpression(props);
86
+ }
87
+ export function irOrderByToTsLiteral(ir) {
88
+ const f = ts.factory;
89
+ return f.createObjectLiteralExpression([
90
+ f.createPropertyAssignment("expr", irNodeToTsLiteral(ir.expr)),
91
+ f.createPropertyAssignment("direction", f.createStringLiteral(ir.direction)),
92
+ ]);
93
+ }
94
+ export function irAggregateToTsLiteral(agg) {
95
+ const f = ts.factory;
96
+ const props = [
97
+ f.createPropertyAssignment("kind", f.createStringLiteral("aggregate")),
98
+ f.createPropertyAssignment("func", f.createStringLiteral(agg.func)),
99
+ f.createPropertyAssignment("arg", agg.arg ? irNodeToTsLiteral(agg.arg) : f.createNull()),
100
+ ];
101
+ if (agg.alias)
102
+ props.push(f.createPropertyAssignment("alias", f.createStringLiteral(agg.alias)));
103
+ if (agg.distinct)
104
+ props.push(f.createPropertyAssignment("distinct", f.createTrue()));
105
+ if (agg.separator !== undefined)
106
+ props.push(f.createPropertyAssignment("separator", f.createStringLiteral(agg.separator)));
107
+ return f.createObjectLiteralExpression(props);
108
+ }
109
+ export function irSelectToTsLiteral(sel) {
110
+ const f = ts.factory;
111
+ const props = [
112
+ f.createPropertyAssignment("param", f.createStringLiteral(sel.param)),
113
+ f.createPropertyAssignment("paths", f.createArrayLiteralExpression(sel.paths.map((path) => stringArrayLiteral(path, f)))),
114
+ ];
115
+ if (sel.aliases && sel.aliases.length > 0) {
116
+ props.push(f.createPropertyAssignment("aliases", stringArrayLiteral(sel.aliases, f)));
117
+ }
118
+ if (sel.rest) {
119
+ props.push(f.createPropertyAssignment("rest", f.createTrue()));
120
+ }
121
+ if (sel.aggregates && sel.aggregates.length > 0) {
122
+ props.push(f.createPropertyAssignment("aggregates", f.createArrayLiteralExpression(sel.aggregates.map(irAggregateToTsLiteral))));
123
+ }
124
+ if (sel.groupBy && sel.groupBy.length > 0) {
125
+ props.push(f.createPropertyAssignment("groupBy", groupByToTsLiteral(sel.groupBy, f)));
126
+ }
127
+ if (sel.subqueries && sel.subqueries.length > 0) {
128
+ props.push(f.createPropertyAssignment("subqueries", f.createArrayLiteralExpression(sel.subqueries.map((entry) => f.createObjectLiteralExpression([
129
+ f.createPropertyAssignment("alias", f.createStringLiteral(entry.alias)),
130
+ f.createPropertyAssignment("subquery", irNodeToTsLiteral(entry.subquery)),
131
+ ])))));
132
+ }
133
+ if (sel.expressions && sel.expressions.length > 0) {
134
+ props.push(f.createPropertyAssignment("expressions", f.createArrayLiteralExpression(sel.expressions.map((e) => f.createObjectLiteralExpression([
135
+ f.createPropertyAssignment("expr", irNodeToTsLiteral(e.expr)),
136
+ f.createPropertyAssignment("alias", f.createStringLiteral(e.alias)),
137
+ ])))));
138
+ }
139
+ return f.createObjectLiteralExpression(props);
140
+ }
141
+ function groupByToTsLiteral(groupBy, f) {
142
+ return f.createArrayLiteralExpression(groupBy.map((entry) => typeof entry === "number" ? f.createNumericLiteral(entry) : stringArrayLiteral(entry, f)));
143
+ }
144
+ //# sourceMappingURL=ir-emit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir-emit.js","sourceRoot":"","sources":["../../src/transformer/ir-emit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Transformer for join calls (innerJoin, leftJoin, rightJoin, crossJoin,
3
+ * fullJoin): converts relation lambdas into a string-array of relation keys.
4
+ */
5
+ import * as ts from "typescript";
6
+ /**
7
+ * Rewrite `innerJoin`/`leftJoin`/`rightJoin`/`crossJoin`/`fullJoin` calls into
8
+ * a simple `[...relationKeys]` string-array argument. Returns null when the
9
+ * call shape isn't recognized — falls back to runtime parsing.
10
+ */
11
+ export declare function transformJoinCall(call: ts.CallExpression, checker: ts.TypeChecker): ts.CallExpression | null;
12
+ //# sourceMappingURL=join-transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-transformer.d.ts","sourceRoot":"","sources":["../../src/transformer/join-transformer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAKjC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,EAAE,CAAC,cAAc,EACvB,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,EAAE,CAAC,cAAc,GAAG,IAAI,CAc1B"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Transformer for join calls (innerJoin, leftJoin, rightJoin, crossJoin,
3
+ * fullJoin): converts relation lambdas into a string-array of relation keys.
4
+ */
5
+ import * as ts from "typescript";
6
+ import { isTyphexType, memberPath, unwrapObjectLiteral } from "./shared.js";
7
+ const JOIN_METHOD_NAMES = new Set(["innerJoin", "leftJoin", "rightJoin", "crossJoin", "fullJoin"]);
8
+ /**
9
+ * Rewrite `innerJoin`/`leftJoin`/`rightJoin`/`crossJoin`/`fullJoin` calls into
10
+ * a simple `[...relationKeys]` string-array argument. Returns null when the
11
+ * call shape isn't recognized — falls back to runtime parsing.
12
+ */
13
+ export function transformJoinCall(call, checker) {
14
+ const fn = matchJoinCall(call, checker);
15
+ if (!fn)
16
+ return null;
17
+ const paramName = getSingleIdentifierParam(fn);
18
+ if (!paramName)
19
+ return null;
20
+ const keys = extractRelationKeys(fn.body, paramName);
21
+ if (!keys || keys.length === 0)
22
+ return null;
23
+ const f = ts.factory;
24
+ return f.updateCallExpression(call, call.expression, call.typeArguments, [
25
+ f.createArrayLiteralExpression(keys.map((k) => f.createStringLiteral(k))),
26
+ ]);
27
+ }
28
+ // ---------------------------------------------------------------------------
29
+ // Call shape validation
30
+ // ---------------------------------------------------------------------------
31
+ /**
32
+ * Validate that `call` is `<typhexExpr>.<joinMethod>(arrow)` — returns the
33
+ * arrow when it matches, or null when it doesn't.
34
+ */
35
+ function matchJoinCall(call, checker) {
36
+ const expr = call.expression;
37
+ if (!ts.isPropertyAccessExpression(expr))
38
+ return null;
39
+ if (!JOIN_METHOD_NAMES.has(expr.name.text))
40
+ return null;
41
+ if (!isTyphexType(expr.expression, checker))
42
+ return null;
43
+ if (call.arguments.length !== 1)
44
+ return null;
45
+ const first = call.arguments[0];
46
+ if (!ts.isArrowFunction(first) && !ts.isFunctionExpression(first))
47
+ return null;
48
+ return first;
49
+ }
50
+ /** Return the first parameter name if it's a plain identifier; null otherwise. */
51
+ function getSingleIdentifierParam(fn) {
52
+ const param = fn.parameters[0]?.name;
53
+ if (!param || !ts.isIdentifier(param))
54
+ return null;
55
+ return param.text;
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // Body shapes: p => ({ author: p.author }) or p => p.author
59
+ // ---------------------------------------------------------------------------
60
+ /**
61
+ * Parse the arrow body into a list of relation keys. Supports both
62
+ * `p => ({ author: p.author })` (object literal) and `p => p.author`
63
+ * (single member access) forms.
64
+ */
65
+ function extractRelationKeys(body, paramName) {
66
+ if (ts.isBlock(body))
67
+ return null;
68
+ // Form 1: p => ({ author: p.author }) — object literal body
69
+ const objLit = unwrapObjectLiteral(ts.isParenthesizedExpression(body) ? body.expression : body);
70
+ if (objLit)
71
+ return extractKeysFromObjectLiteral(objLit);
72
+ // Form 2: p => p.author — single member access
73
+ if (ts.isPropertyAccessExpression(body)) {
74
+ const path = memberPath(body, paramName);
75
+ if (!path || path.length === 0)
76
+ return null;
77
+ return [path[0]];
78
+ }
79
+ return null;
80
+ }
81
+ /** Collect the property key names from an object literal; null if any entry is unsupported. */
82
+ function extractKeysFromObjectLiteral(objLit) {
83
+ const keys = [];
84
+ for (const prop of objLit.properties) {
85
+ if (!ts.isPropertyAssignment(prop))
86
+ return null;
87
+ const keyName = getObjectLiteralKeyName(prop.name);
88
+ if (!keyName)
89
+ return null;
90
+ keys.push(keyName);
91
+ }
92
+ return keys;
93
+ }
94
+ /** Extract the key text of an object literal property name (identifier or string literal). */
95
+ function getObjectLiteralKeyName(name) {
96
+ if (ts.isIdentifier(name))
97
+ return name.text;
98
+ if (ts.isStringLiteral(name))
99
+ return name.text;
100
+ return null;
101
+ }
102
+ //# sourceMappingURL=join-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-transformer.js","sourceRoot":"","sources":["../../src/transformer/join-transformer.ts"],"names":[],"mappings":"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"}