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.
- package/CHANGELOG.md +20 -0
- package/LICENSE +21 -0
- package/README.md +417 -0
- package/SECURITY.md +32 -0
- package/dist/arrow/aggregates.d.ts +12 -0
- package/dist/arrow/aggregates.d.ts.map +1 -0
- package/dist/arrow/aggregates.js +32 -0
- package/dist/arrow/aggregates.js.map +1 -0
- package/dist/arrow/constants.d.ts +15 -0
- package/dist/arrow/constants.d.ts.map +1 -0
- package/dist/arrow/constants.js +42 -0
- package/dist/arrow/constants.js.map +1 -0
- package/dist/arrow/index.d.ts +7 -0
- package/dist/arrow/index.d.ts.map +1 -0
- package/dist/arrow/index.js +7 -0
- package/dist/arrow/index.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +4 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/load-config.d.ts +19 -0
- package/dist/config/load-config.d.ts.map +1 -0
- package/dist/config/load-config.js +84 -0
- package/dist/config/load-config.js.map +1 -0
- package/dist/config/load-env.d.ts +7 -0
- package/dist/config/load-env.d.ts.map +1 -0
- package/dist/config/load-env.js +62 -0
- package/dist/config/load-env.js.map +1 -0
- package/dist/config/types.d.ts +20 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +10 -0
- package/dist/config/types.js.map +1 -0
- package/dist/dbs/base-migrator.d.ts +20 -0
- package/dist/dbs/base-migrator.d.ts.map +1 -0
- package/dist/dbs/base-migrator.js +112 -0
- package/dist/dbs/base-migrator.js.map +1 -0
- package/dist/dbs/index.d.ts +9 -0
- package/dist/dbs/index.d.ts.map +1 -0
- package/dist/dbs/index.js +17 -0
- package/dist/dbs/index.js.map +1 -0
- package/dist/dbs/postgres/dialect.d.ts +8 -0
- package/dist/dbs/postgres/dialect.d.ts.map +1 -0
- package/dist/dbs/postgres/dialect.js +17 -0
- package/dist/dbs/postgres/dialect.js.map +1 -0
- package/dist/dbs/postgres/driver.d.ts +42 -0
- package/dist/dbs/postgres/driver.d.ts.map +1 -0
- package/dist/dbs/postgres/driver.js +111 -0
- package/dist/dbs/postgres/driver.js.map +1 -0
- package/dist/dbs/postgres/index.d.ts +6 -0
- package/dist/dbs/postgres/index.d.ts.map +1 -0
- package/dist/dbs/postgres/index.js +5 -0
- package/dist/dbs/postgres/index.js.map +1 -0
- package/dist/dbs/postgres/migrator.d.ts +13 -0
- package/dist/dbs/postgres/migrator.d.ts.map +1 -0
- package/dist/dbs/postgres/migrator.js +22 -0
- package/dist/dbs/postgres/migrator.js.map +1 -0
- package/dist/dbs/postgres/query-compiler.d.ts +22 -0
- package/dist/dbs/postgres/query-compiler.d.ts.map +1 -0
- package/dist/dbs/postgres/query-compiler.js +140 -0
- package/dist/dbs/postgres/query-compiler.js.map +1 -0
- package/dist/dbs/postgres/trx.d.ts +16 -0
- package/dist/dbs/postgres/trx.d.ts.map +1 -0
- package/dist/dbs/postgres/trx.js +68 -0
- package/dist/dbs/postgres/trx.js.map +1 -0
- package/dist/dbs/query-compiler.d.ts +135 -0
- package/dist/dbs/query-compiler.d.ts.map +1 -0
- package/dist/dbs/query-compiler.js +775 -0
- package/dist/dbs/query-compiler.js.map +1 -0
- package/dist/dbs/sqlite/dialect.d.ts +8 -0
- package/dist/dbs/sqlite/dialect.d.ts.map +1 -0
- package/dist/dbs/sqlite/dialect.js +17 -0
- package/dist/dbs/sqlite/dialect.js.map +1 -0
- package/dist/dbs/sqlite/driver.d.ts +9 -0
- package/dist/dbs/sqlite/driver.d.ts.map +1 -0
- package/dist/dbs/sqlite/driver.js +66 -0
- package/dist/dbs/sqlite/driver.js.map +1 -0
- package/dist/dbs/sqlite/index.d.ts +6 -0
- package/dist/dbs/sqlite/index.d.ts.map +1 -0
- package/dist/dbs/sqlite/index.js +5 -0
- package/dist/dbs/sqlite/index.js.map +1 -0
- package/dist/dbs/sqlite/migrator.d.ts +13 -0
- package/dist/dbs/sqlite/migrator.d.ts.map +1 -0
- package/dist/dbs/sqlite/migrator.js +22 -0
- package/dist/dbs/sqlite/migrator.js.map +1 -0
- package/dist/dbs/sqlite/query-compiler.d.ts +26 -0
- package/dist/dbs/sqlite/query-compiler.d.ts.map +1 -0
- package/dist/dbs/sqlite/query-compiler.js +80 -0
- package/dist/dbs/sqlite/query-compiler.js.map +1 -0
- package/dist/dbs/sqlite/trx.d.ts +13 -0
- package/dist/dbs/sqlite/trx.d.ts.map +1 -0
- package/dist/dbs/sqlite/trx.js +69 -0
- package/dist/dbs/sqlite/trx.js.map +1 -0
- package/dist/dbs/types.d.ts +92 -0
- package/dist/dbs/types.d.ts.map +1 -0
- package/dist/dbs/types.js +26 -0
- package/dist/dbs/types.js.map +1 -0
- package/dist/dialect.d.ts +3 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +2 -0
- package/dist/dialect.js.map +1 -0
- package/dist/driver/factory.d.ts +19 -0
- package/dist/driver/factory.d.ts.map +1 -0
- package/dist/driver/factory.js +24 -0
- package/dist/driver/factory.js.map +1 -0
- package/dist/driver/index.d.ts +6 -0
- package/dist/driver/index.d.ts.map +1 -0
- package/dist/driver/index.js +3 -0
- package/dist/driver/index.js.map +1 -0
- package/dist/driver/sqlite.d.ts +15 -0
- package/dist/driver/sqlite.d.ts.map +1 -0
- package/dist/driver/sqlite.js +74 -0
- package/dist/driver/sqlite.js.map +1 -0
- package/dist/driver/types.d.ts +75 -0
- package/dist/driver/types.d.ts.map +1 -0
- package/dist/driver/types.js +2 -0
- package/dist/driver/types.js.map +1 -0
- package/dist/entity/entity.d.ts +67 -0
- package/dist/entity/entity.d.ts.map +1 -0
- package/dist/entity/entity.js +139 -0
- package/dist/entity/entity.js.map +1 -0
- package/dist/entity/global-driver.d.ts +38 -0
- package/dist/entity/global-driver.d.ts.map +1 -0
- package/dist/entity/global-driver.js +109 -0
- package/dist/entity/global-driver.js.map +1 -0
- package/dist/entity/index.d.ts +8 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/index.js +3 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/pk-columns.d.ts +5 -0
- package/dist/entity/pk-columns.d.ts.map +1 -0
- package/dist/entity/pk-columns.js +14 -0
- package/dist/entity/pk-columns.js.map +1 -0
- package/dist/entity/relations.d.ts +134 -0
- package/dist/entity/relations.d.ts.map +1 -0
- package/dist/entity/relations.js +23 -0
- package/dist/entity/relations.js.map +1 -0
- package/dist/entity/schema-inference.d.ts +77 -0
- package/dist/entity/schema-inference.d.ts.map +1 -0
- package/dist/entity/schema-inference.js +6 -0
- package/dist/entity/schema-inference.js.map +1 -0
- package/dist/entity/types.d.ts +30 -0
- package/dist/entity/types.d.ts.map +1 -0
- package/dist/entity/types.js +5 -0
- package/dist/entity/types.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/index.d.ts +2 -0
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +2 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/types.d.ts +148 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +97 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/migration/cli.d.ts +18 -0
- package/dist/migration/cli.d.ts.map +1 -0
- package/dist/migration/cli.js +236 -0
- package/dist/migration/cli.js.map +1 -0
- package/dist/migration/diff.d.ts +10 -0
- package/dist/migration/diff.d.ts.map +1 -0
- package/dist/migration/diff.js +10 -0
- package/dist/migration/diff.js.map +1 -0
- package/dist/migration/generator.d.ts +12 -0
- package/dist/migration/generator.d.ts.map +1 -0
- package/dist/migration/generator.js +98 -0
- package/dist/migration/generator.js.map +1 -0
- package/dist/migration/index.d.ts +7 -0
- package/dist/migration/index.d.ts.map +1 -0
- package/dist/migration/index.js +5 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/runner.d.ts +32 -0
- package/dist/migration/runner.d.ts.map +1 -0
- package/dist/migration/runner.js +279 -0
- package/dist/migration/runner.js.map +1 -0
- package/dist/migration/topo-sort.d.ts +12 -0
- package/dist/migration/topo-sort.d.ts.map +1 -0
- package/dist/migration/topo-sort.js +42 -0
- package/dist/migration/topo-sort.js.map +1 -0
- package/dist/migration/types.d.ts +45 -0
- package/dist/migration/types.d.ts.map +1 -0
- package/dist/migration/types.js +2 -0
- package/dist/migration/types.js.map +1 -0
- package/dist/orm/aggregates.d.ts +19 -0
- package/dist/orm/aggregates.d.ts.map +1 -0
- package/dist/orm/aggregates.js +32 -0
- package/dist/orm/aggregates.js.map +1 -0
- package/dist/orm/db.d.ts +105 -0
- package/dist/orm/db.d.ts.map +1 -0
- package/dist/orm/db.js +172 -0
- package/dist/orm/db.js.map +1 -0
- package/dist/orm/expr.d.ts +125 -0
- package/dist/orm/expr.d.ts.map +1 -0
- package/dist/orm/expr.js +10 -0
- package/dist/orm/expr.js.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.d.ts +9 -0
- package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.d.ts.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.js +44 -0
- package/dist/orm/helpers/insert-graph/insert-graph-batch-executor.js.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-executor.d.ts +13 -0
- package/dist/orm/helpers/insert-graph/insert-graph-executor.d.ts.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-executor.js +42 -0
- package/dist/orm/helpers/insert-graph/insert-graph-executor.js.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-planner.d.ts +46 -0
- package/dist/orm/helpers/insert-graph/insert-graph-planner.d.ts.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-planner.js +258 -0
- package/dist/orm/helpers/insert-graph/insert-graph-planner.js.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.d.ts +7 -0
- package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.d.ts.map +1 -0
- package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.js +8 -0
- package/dist/orm/helpers/insert-graph/insert-graph-sequential-executor.js.map +1 -0
- package/dist/orm/helpers/insert-graph/sequence-id-assigner.d.ts +15 -0
- package/dist/orm/helpers/insert-graph/sequence-id-assigner.d.ts.map +1 -0
- package/dist/orm/helpers/insert-graph/sequence-id-assigner.js +48 -0
- package/dist/orm/helpers/insert-graph/sequence-id-assigner.js.map +1 -0
- package/dist/orm/helpers/query-plan/expr-builder.d.ts +155 -0
- package/dist/orm/helpers/query-plan/expr-builder.d.ts.map +1 -0
- package/dist/orm/helpers/query-plan/expr-builder.js +297 -0
- package/dist/orm/helpers/query-plan/expr-builder.js.map +1 -0
- package/dist/orm/helpers/query-plan/query-ir-analyzer.d.ts +48 -0
- package/dist/orm/helpers/query-plan/query-ir-analyzer.d.ts.map +1 -0
- package/dist/orm/helpers/query-plan/query-ir-analyzer.js +262 -0
- package/dist/orm/helpers/query-plan/query-ir-analyzer.js.map +1 -0
- package/dist/orm/helpers/query-plan/query-plan.d.ts +164 -0
- package/dist/orm/helpers/query-plan/query-plan.d.ts.map +1 -0
- package/dist/orm/helpers/query-plan/query-plan.js +549 -0
- package/dist/orm/helpers/query-plan/query-plan.js.map +1 -0
- package/dist/orm/helpers/query-plan/select-classifier.d.ts +161 -0
- package/dist/orm/helpers/query-plan/select-classifier.d.ts.map +1 -0
- package/dist/orm/helpers/query-plan/select-classifier.js +359 -0
- package/dist/orm/helpers/query-plan/select-classifier.js.map +1 -0
- package/dist/orm/helpers/relations/relation-assembler.d.ts +21 -0
- package/dist/orm/helpers/relations/relation-assembler.d.ts.map +1 -0
- package/dist/orm/helpers/relations/relation-assembler.js +60 -0
- package/dist/orm/helpers/relations/relation-assembler.js.map +1 -0
- package/dist/orm/helpers/relations/relation-fetcher.d.ts +30 -0
- package/dist/orm/helpers/relations/relation-fetcher.d.ts.map +1 -0
- package/dist/orm/helpers/relations/relation-fetcher.js +128 -0
- package/dist/orm/helpers/relations/relation-fetcher.js.map +1 -0
- package/dist/orm/helpers/relations/relation-joins.d.ts +74 -0
- package/dist/orm/helpers/relations/relation-joins.d.ts.map +1 -0
- package/dist/orm/helpers/relations/relation-joins.js +138 -0
- package/dist/orm/helpers/relations/relation-joins.js.map +1 -0
- package/dist/orm/helpers/relations/relation-resolver.d.ts +14 -0
- package/dist/orm/helpers/relations/relation-resolver.d.ts.map +1 -0
- package/dist/orm/helpers/relations/relation-resolver.js +25 -0
- package/dist/orm/helpers/relations/relation-resolver.js.map +1 -0
- package/dist/orm/index.d.ts +7 -0
- package/dist/orm/index.d.ts.map +1 -0
- package/dist/orm/index.js +5 -0
- package/dist/orm/index.js.map +1 -0
- package/dist/orm/query-builder.d.ts +136 -0
- package/dist/orm/query-builder.d.ts.map +1 -0
- package/dist/orm/query-builder.js +433 -0
- package/dist/orm/query-builder.js.map +1 -0
- package/dist/orm/query-helpers.d.ts +35 -0
- package/dist/orm/query-helpers.d.ts.map +1 -0
- package/dist/orm/query-helpers.js +83 -0
- package/dist/orm/query-helpers.js.map +1 -0
- package/dist/orm/query-state.d.ts +56 -0
- package/dist/orm/query-state.d.ts.map +1 -0
- package/dist/orm/query-state.js +112 -0
- package/dist/orm/query-state.js.map +1 -0
- package/dist/orm/single-row-query-builder.d.ts +18 -0
- package/dist/orm/single-row-query-builder.d.ts.map +1 -0
- package/dist/orm/single-row-query-builder.js +90 -0
- package/dist/orm/single-row-query-builder.js.map +1 -0
- package/dist/orm/trx.d.ts +40 -0
- package/dist/orm/trx.d.ts.map +1 -0
- package/dist/orm/trx.js +118 -0
- package/dist/orm/trx.js.map +1 -0
- package/dist/parser/acorn-helpers.d.ts +43 -0
- package/dist/parser/acorn-helpers.d.ts.map +1 -0
- package/dist/parser/acorn-helpers.js +104 -0
- package/dist/parser/acorn-helpers.js.map +1 -0
- package/dist/parser/acorn-member.d.ts +16 -0
- package/dist/parser/acorn-member.d.ts.map +1 -0
- package/dist/parser/acorn-member.js +31 -0
- package/dist/parser/acorn-member.js.map +1 -0
- package/dist/parser/acorn-types.d.ts +14 -0
- package/dist/parser/acorn-types.d.ts.map +1 -0
- package/dist/parser/acorn-types.js +6 -0
- package/dist/parser/acorn-types.js.map +1 -0
- package/dist/parser/arrow-source.d.ts +23 -0
- package/dist/parser/arrow-source.d.ts.map +1 -0
- package/dist/parser/arrow-source.js +70 -0
- package/dist/parser/arrow-source.js.map +1 -0
- package/dist/parser/group-by.d.ts +17 -0
- package/dist/parser/group-by.d.ts.map +1 -0
- package/dist/parser/group-by.js +62 -0
- package/dist/parser/group-by.js.map +1 -0
- package/dist/parser/index.d.ts +5 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +3 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/parse-arrow.d.ts +10 -0
- package/dist/parser/parse-arrow.d.ts.map +1 -0
- package/dist/parser/parse-arrow.js +9 -0
- package/dist/parser/parse-arrow.js.map +1 -0
- package/dist/parser/predicate-walk.d.ts +24 -0
- package/dist/parser/predicate-walk.d.ts.map +1 -0
- package/dist/parser/predicate-walk.js +247 -0
- package/dist/parser/predicate-walk.js.map +1 -0
- package/dist/parser/resolve.d.ts +25 -0
- package/dist/parser/resolve.d.ts.map +1 -0
- package/dist/parser/resolve.js +134 -0
- package/dist/parser/resolve.js.map +1 -0
- package/dist/parser/select.d.ts +7 -0
- package/dist/parser/select.d.ts.map +1 -0
- package/dist/parser/select.js +333 -0
- package/dist/parser/select.js.map +1 -0
- package/dist/parser/update.d.ts +7 -0
- package/dist/parser/update.d.ts.map +1 -0
- package/dist/parser/update.js +51 -0
- package/dist/parser/update.js.map +1 -0
- package/dist/postgres/aggregates.d.ts +12 -0
- package/dist/postgres/aggregates.d.ts.map +1 -0
- package/dist/postgres/aggregates.js +19 -0
- package/dist/postgres/aggregates.js.map +1 -0
- package/dist/postgres.d.ts +6 -0
- package/dist/postgres.d.ts.map +1 -0
- package/dist/postgres.js +6 -0
- package/dist/postgres.js.map +1 -0
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/types.d.ts +16 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +40 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/sqlite/aggregates.d.ts +8 -0
- package/dist/sqlite/aggregates.d.ts.map +1 -0
- package/dist/sqlite/aggregates.js +11 -0
- package/dist/sqlite/aggregates.js.map +1 -0
- package/dist/sqlite.d.ts +6 -0
- package/dist/sqlite.d.ts.map +1 -0
- package/dist/sqlite.js +6 -0
- package/dist/sqlite.js.map +1 -0
- package/dist/transformer/bindings.d.ts +18 -0
- package/dist/transformer/bindings.d.ts.map +1 -0
- package/dist/transformer/bindings.js +52 -0
- package/dist/transformer/bindings.js.map +1 -0
- package/dist/transformer/index.d.ts +17 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +75 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/ir-emit.d.ts +12 -0
- package/dist/transformer/ir-emit.d.ts.map +1 -0
- package/dist/transformer/ir-emit.js +144 -0
- package/dist/transformer/ir-emit.js.map +1 -0
- package/dist/transformer/join-transformer.d.ts +12 -0
- package/dist/transformer/join-transformer.d.ts.map +1 -0
- package/dist/transformer/join-transformer.js +102 -0
- package/dist/transformer/join-transformer.js.map +1 -0
- package/dist/transformer/orderby-transformer.d.ts +13 -0
- package/dist/transformer/orderby-transformer.d.ts.map +1 -0
- package/dist/transformer/orderby-transformer.js +84 -0
- package/dist/transformer/orderby-transformer.js.map +1 -0
- package/dist/transformer/select-transformer.d.ts +9 -0
- package/dist/transformer/select-transformer.d.ts.map +1 -0
- package/dist/transformer/select-transformer.js +222 -0
- package/dist/transformer/select-transformer.js.map +1 -0
- package/dist/transformer/shared.d.ts +12 -0
- package/dist/transformer/shared.d.ts.map +1 -0
- package/dist/transformer/shared.js +12 -0
- package/dist/transformer/shared.js.map +1 -0
- package/dist/transformer/subquery-transformer.d.ts +15 -0
- package/dist/transformer/subquery-transformer.d.ts.map +1 -0
- package/dist/transformer/subquery-transformer.js +43 -0
- package/dist/transformer/subquery-transformer.js.map +1 -0
- package/dist/transformer/ts-aggregates.d.ts +13 -0
- package/dist/transformer/ts-aggregates.d.ts.map +1 -0
- package/dist/transformer/ts-aggregates.js +83 -0
- package/dist/transformer/ts-aggregates.js.map +1 -0
- package/dist/transformer/ts-binary.d.ts +8 -0
- package/dist/transformer/ts-binary.d.ts.map +1 -0
- package/dist/transformer/ts-binary.js +32 -0
- package/dist/transformer/ts-binary.js.map +1 -0
- package/dist/transformer/ts-member.d.ts +12 -0
- package/dist/transformer/ts-member.d.ts.map +1 -0
- package/dist/transformer/ts-member.js +22 -0
- package/dist/transformer/ts-member.js.map +1 -0
- package/dist/transformer/ts-utils.d.ts +10 -0
- package/dist/transformer/ts-utils.d.ts.map +1 -0
- package/dist/transformer/ts-utils.js +38 -0
- package/dist/transformer/ts-utils.js.map +1 -0
- package/dist/transformer/typhex-type.d.ts +8 -0
- package/dist/transformer/typhex-type.d.ts.map +1 -0
- package/dist/transformer/typhex-type.js +52 -0
- package/dist/transformer/typhex-type.js.map +1 -0
- package/dist/transformer/where-transformer.d.ts +33 -0
- package/dist/transformer/where-transformer.d.ts.map +1 -0
- package/dist/transformer/where-transformer.js +400 -0
- package/dist/transformer/where-transformer.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +30 -0
- package/dist/utils.js.map +1 -0
- package/docs/drivers/postgres.md +54 -0
- package/docs/drivers/sqlite.md +33 -0
- package/docs/guide/aggregations.md +272 -0
- package/docs/guide/bulk-operations.md +204 -0
- package/docs/guide/cte-and-unions.md +270 -0
- package/docs/guide/entities-relations.md +208 -0
- package/docs/guide/expressions.md +98 -0
- package/docs/guide/filtering-by-relations.md +166 -0
- package/docs/guide/getting-started.md +277 -0
- package/docs/guide/querying-relations.md +133 -0
- package/docs/guide/subqueries.md +152 -0
- package/docs/guide/transactions.md +146 -0
- package/docs/guide/typescript-transformer.md +138 -0
- package/docs/index.md +33 -0
- package/docs/migrations/overview.md +143 -0
- package/docs/public-api.md +133 -0
- package/docs/reference/api.md +665 -0
- package/docs/reference/architecture.md +83 -0
- package/docs/release-checklist.md +55 -0
- package/etc/typhex.api.md +774 -0
- package/package.json +137 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript AST member-path resolution for transformer predicates and selects.
|
|
3
|
+
* Supports multi-param join shapes like `(u, posts) => u.id === posts.authorId`.
|
|
4
|
+
*/
|
|
5
|
+
import ts from "typescript";
|
|
6
|
+
export interface ResolvedMember {
|
|
7
|
+
param: string;
|
|
8
|
+
path: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function resolveMemberPath(expr: ts.PropertyAccessExpression, paramNames: string[]): ResolvedMember | null;
|
|
11
|
+
export declare function memberPath(expr: ts.PropertyAccessExpression, paramName: string): string[] | null;
|
|
12
|
+
//# sourceMappingURL=ts-member.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-member.d.ts","sourceRoot":"","sources":["../../src/transformer/ts-member.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,EAAE,CAAC,wBAAwB,EACjC,UAAU,EAAE,MAAM,EAAE,GACnB,cAAc,GAAG,IAAI,CAWvB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAGhG"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript AST member-path resolution for transformer predicates and selects.
|
|
3
|
+
* Supports multi-param join shapes like `(u, posts) => u.id === posts.authorId`.
|
|
4
|
+
*/
|
|
5
|
+
import ts from "typescript";
|
|
6
|
+
export function resolveMemberPath(expr, paramNames) {
|
|
7
|
+
const parts = [];
|
|
8
|
+
let current = expr;
|
|
9
|
+
while (ts.isPropertyAccessExpression(current)) {
|
|
10
|
+
parts.unshift(current.name.text);
|
|
11
|
+
current = current.expression;
|
|
12
|
+
}
|
|
13
|
+
if (ts.isIdentifier(current) && paramNames.includes(current.text)) {
|
|
14
|
+
return { param: current.text, path: parts };
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
export function memberPath(expr, paramName) {
|
|
19
|
+
const result = resolveMemberPath(expr, [paramName]);
|
|
20
|
+
return result ? result.path : null;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ts-member.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-member.js","sourceRoot":"","sources":["../../src/transformer/ts-member.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAO5B,MAAM,UAAU,iBAAiB,CAC/B,IAAiC,EACjC,UAAoB;IAEpB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAC/B,CAAC;IACD,IAAI,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAiC,EAAE,SAAiB;IAC7E,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Small TypeScript AST helpers shared by per-method transformers (where,
|
|
3
|
+
* select, orderBy, join): unwrap literals, match Typhex method calls, etc.
|
|
4
|
+
*/
|
|
5
|
+
import ts from "typescript";
|
|
6
|
+
export declare function unwrapObjectLiteral(expr: ts.Expression): ts.ObjectLiteralExpression | null;
|
|
7
|
+
export declare function isIdentifierNamed(node: ts.Node, name: string): boolean;
|
|
8
|
+
export declare function getArrowExpressionBody(fn: ts.ArrowFunction | ts.FunctionExpression): ts.Expression | null;
|
|
9
|
+
export declare function matchTyphexMethodCall(call: ts.CallExpression, methodName: string, checker: ts.TypeChecker, isTyphex: (receiver: ts.Expression, checker: ts.TypeChecker) => boolean): ts.ArrowFunction | ts.FunctionExpression | null;
|
|
10
|
+
//# sourceMappingURL=ts-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-utils.d.ts","sourceRoot":"","sources":["../../src/transformer/ts-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,uBAAuB,GAAG,IAAI,CAG1F;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,GAC3C,EAAE,CAAC,UAAU,GAAG,IAAI,CAMtB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,EAAE,CAAC,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,KAAK,OAAO,GACtE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,GAAG,IAAI,CAUjD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Small TypeScript AST helpers shared by per-method transformers (where,
|
|
3
|
+
* select, orderBy, join): unwrap literals, match Typhex method calls, etc.
|
|
4
|
+
*/
|
|
5
|
+
import ts from "typescript";
|
|
6
|
+
export function unwrapObjectLiteral(expr) {
|
|
7
|
+
const inner = ts.isParenthesizedExpression(expr) ? expr.expression : expr;
|
|
8
|
+
return ts.isObjectLiteralExpression(inner) ? inner : null;
|
|
9
|
+
}
|
|
10
|
+
export function isIdentifierNamed(node, name) {
|
|
11
|
+
return ts.isIdentifier(node) && node.text === name;
|
|
12
|
+
}
|
|
13
|
+
export function getArrowExpressionBody(fn) {
|
|
14
|
+
if (!ts.isBlock(fn.body))
|
|
15
|
+
return fn.body;
|
|
16
|
+
if (fn.body.statements.length !== 1)
|
|
17
|
+
return null;
|
|
18
|
+
const st = fn.body.statements[0];
|
|
19
|
+
if (!st || !ts.isReturnStatement(st) || !st.expression)
|
|
20
|
+
return null;
|
|
21
|
+
return st.expression;
|
|
22
|
+
}
|
|
23
|
+
export function matchTyphexMethodCall(call, methodName, checker, isTyphex) {
|
|
24
|
+
const expr = call.expression;
|
|
25
|
+
if (!ts.isPropertyAccessExpression(expr))
|
|
26
|
+
return null;
|
|
27
|
+
if (expr.name.text !== methodName)
|
|
28
|
+
return null;
|
|
29
|
+
if (!isTyphex(expr.expression, checker))
|
|
30
|
+
return null;
|
|
31
|
+
const first = call.arguments[0];
|
|
32
|
+
if (!first)
|
|
33
|
+
return null;
|
|
34
|
+
if (!ts.isArrowFunction(first) && !ts.isFunctionExpression(first))
|
|
35
|
+
return null;
|
|
36
|
+
return first;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ts-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-utils.js","sourceRoot":"","sources":["../../src/transformer/ts-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,UAAU,mBAAmB,CAAC,IAAmB;IACrD,MAAM,KAAK,GAAG,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,OAAO,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAa,EAAE,IAAY;IAC3D,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,EAA4C;IAE5C,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC,IAAI,CAAC;IACzC,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IACpE,OAAO,EAAE,CAAC,UAAU,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAAuB,EACvB,UAAkB,EAClB,OAAuB,EACvB,QAAuE;IAEvE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAErD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/E,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect whether a TypeScript type/receiver is Typhex's Table or QueryBuilder,
|
|
3
|
+
* gating which `.where()` / `.select()` calls the transformer rewrites.
|
|
4
|
+
*/
|
|
5
|
+
import ts from "typescript";
|
|
6
|
+
export declare function checkSymbolIsTyphex(symbol: ts.Symbol): boolean;
|
|
7
|
+
export declare function isTyphexType(receiver: ts.Expression, checker: ts.TypeChecker): boolean;
|
|
8
|
+
//# sourceMappingURL=typhex-type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typhex-type.d.ts","sourceRoot":"","sources":["../../src/transformer/typhex-type.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,OAAO,CAW9D;AAYD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,GAAG,OAAO,CAOtF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect whether a TypeScript type/receiver is Typhex's Table or QueryBuilder,
|
|
3
|
+
* gating which `.where()` / `.select()` calls the transformer rewrites.
|
|
4
|
+
*/
|
|
5
|
+
export function checkSymbolIsTyphex(symbol) {
|
|
6
|
+
const symbolName = symbol.getName();
|
|
7
|
+
if (symbolName !== "Table" && symbolName !== "QueryBuilder")
|
|
8
|
+
return false;
|
|
9
|
+
const declarations = symbol.getDeclarations();
|
|
10
|
+
if (!declarations || declarations.length === 0)
|
|
11
|
+
return false;
|
|
12
|
+
for (const decl of declarations) {
|
|
13
|
+
if (!isTyphexDeclarationFile(decl.getSourceFile().fileName))
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
function isTyphexDeclarationFile(rawPath) {
|
|
19
|
+
const normalized = rawPath.replaceAll("\\", "/");
|
|
20
|
+
const inTyphexPackage = normalized.includes("/typhex/") || normalized.includes("/typhex\\");
|
|
21
|
+
const inOrmModule = normalized.includes("/orm/table") || normalized.includes("/orm/query-builder");
|
|
22
|
+
const hasValidExtension = normalized.endsWith(".ts") || normalized.endsWith(".js") || normalized.endsWith(".d.ts");
|
|
23
|
+
return inTyphexPackage && inOrmModule && hasValidExtension;
|
|
24
|
+
}
|
|
25
|
+
export function isTyphexType(receiver, checker) {
|
|
26
|
+
try {
|
|
27
|
+
const symbol = resolveTypeSymbol(receiver, checker);
|
|
28
|
+
return symbol ? checkSymbolIsTyphex(symbol) : false;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function resolveTypeSymbol(receiver, checker) {
|
|
35
|
+
const receiverType = checker.getTypeAtLocation(receiver);
|
|
36
|
+
const direct = receiverType.getSymbol();
|
|
37
|
+
if (direct)
|
|
38
|
+
return direct;
|
|
39
|
+
const constructorProp = receiverType.getProperties().find((p) => p.getName() === "constructor");
|
|
40
|
+
if (constructorProp) {
|
|
41
|
+
const signatures = checker
|
|
42
|
+
.getTypeOfSymbolAtLocation(constructorProp, receiver)
|
|
43
|
+
.getCallSignatures();
|
|
44
|
+
if (signatures.length > 0) {
|
|
45
|
+
const fromCtor = signatures[0].getReturnType().getSymbol();
|
|
46
|
+
if (fromCtor)
|
|
47
|
+
return fromCtor;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return receiverType.aliasSymbol;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=typhex-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typhex-type.js","sourceRoot":"","sources":["../../src/transformer/typhex-type.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,cAAc;QAAE,OAAO,KAAK,CAAC;IAE1E,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;IAC9C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7D,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC5F,MAAM,WAAW,GACf,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACjF,MAAM,iBAAiB,GACrB,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3F,OAAO,eAAe,IAAI,WAAW,IAAI,iBAAiB,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAuB,EAAE,OAAuB;IAC3E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAuB,EACvB,OAAuB;IAEvB,MAAM,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC;IACxC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,eAAe,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,aAAa,CAAC,CAAC;IAChG,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,OAAO;aACvB,yBAAyB,CAAC,eAAe,EAAE,QAAQ,CAAC;aACpD,iBAAiB,EAAE,CAAC;QACvB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,CAAC;YAC3D,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,WAAW,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transformer for .where() / .having() calls: converts arrow predicates to IR.
|
|
3
|
+
*/
|
|
4
|
+
import * as ts from "typescript";
|
|
5
|
+
import type { IrNode, IrWhere } from "../ir/types.js";
|
|
6
|
+
import { type ParamBindings, type ScopeFrame } from "./shared.js";
|
|
7
|
+
/** Destructured outer-arrow context. When the surrounding `.select(({ id }) => …)`
|
|
8
|
+
* arrow uses object destructuring, the inner subquery's WHERE may reference
|
|
9
|
+
* the destructured locals (e.g. `id`) — these resolve to IrMember on the
|
|
10
|
+
* outer row rather than free variables. Always carries non-null bindings;
|
|
11
|
+
* when the outer arrow has no destructure, callers pass `undefined` instead. */
|
|
12
|
+
export type OuterDestructured = ParamBindings & {
|
|
13
|
+
bindings: Map<string, string[]>;
|
|
14
|
+
};
|
|
15
|
+
/** Narrow a ParamBindings into an OuterDestructured (or undefined when there
|
|
16
|
+
* are no destructured locals to expose). Centralizes the conversion. */
|
|
17
|
+
export declare function toOuterDestructured(pb: ParamBindings): OuterDestructured | undefined;
|
|
18
|
+
/** Convert a where-style arrow (`p => predicate`) to IR + free-var list.
|
|
19
|
+
* Exposed for the select transformer so it can parse inner WHEREs of
|
|
20
|
+
* inline subqueries used as scalar columns. `outerParamNames` enables
|
|
21
|
+
* correlation: bare references to those names resolve as IrMember rather
|
|
22
|
+
* than as free variables. */
|
|
23
|
+
export declare function parseWhereArrowToIr(fn: ts.ArrowFunction | ts.FunctionExpression, checker: ts.TypeChecker, outerParamNames?: string[], outerDestructured?: OuterDestructured, outerScope?: ScopeFrame[]): {
|
|
24
|
+
ir: IrWhere;
|
|
25
|
+
freeVars: string[];
|
|
26
|
+
} | null;
|
|
27
|
+
/** Convert a single TS expression to IR for select/orderBy transformers. */
|
|
28
|
+
export declare function parseExpressionToIr(expr: ts.Expression, paramNames: string[], freeVars: Set<string>, checker?: ts.TypeChecker): IrNode | null;
|
|
29
|
+
/** Rewrite a `.where(arrow)` call on a Typhex Table/QueryBuilder into IR form. */
|
|
30
|
+
export declare function transformWhereCall(call: ts.CallExpression, checker: ts.TypeChecker, outerScope?: ScopeFrame[]): ts.CallExpression | null;
|
|
31
|
+
/** Rewrite a `.having(arrow)` call on a Typhex Table/QueryBuilder into IR form. */
|
|
32
|
+
export declare function transformHavingCall(call: ts.CallExpression, checker: ts.TypeChecker, outerScope?: ScopeFrame[]): ts.CallExpression | null;
|
|
33
|
+
//# sourceMappingURL=where-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where-transformer.d.ts","sourceRoot":"","sources":["../../src/transformer/where-transformer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,KAAK,EACV,MAAM,EAON,OAAO,EAER,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAGrB;;;;iFAIiF;AACjF,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC;AAEpF;yEACyE;AACzE,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAEpF;AAyZD;;;;8BAI8B;AAC9B,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,EAAE,CAAC,aAAa,GAAG,EAAE,CAAC,kBAAkB,EAC5C,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,eAAe,GAAE,MAAM,EAAO,EAC9B,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,UAAU,CAAC,EAAE,UAAU,EAAE,GACxB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAE5C;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,EAAE,CAAC,UAAU,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EACrB,OAAO,CAAC,EAAE,EAAE,CAAC,WAAW,GACvB,MAAM,GAAG,IAAI,CAOf;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,EAAE,CAAC,cAAc,EACvB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,UAAU,GAAE,UAAU,EAAO,GAC5B,EAAE,CAAC,cAAc,GAAG,IAAI,CAE1B;AAED,mFAAmF;AACnF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,EAAE,CAAC,cAAc,EACvB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,UAAU,GAAE,UAAU,EAAO,GAC5B,EAAE,CAAC,cAAc,GAAG,IAAI,CAE1B"}
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transformer for .where() / .having() calls: converts arrow predicates to IR.
|
|
3
|
+
*/
|
|
4
|
+
import * as ts from "typescript";
|
|
5
|
+
import { buildParamsLiteral, captureSubqueryRef as captureSubqueryRefShared, isTyphexQueryChain, } from "./subquery-transformer.js";
|
|
6
|
+
import { getArrowExpressionBody, isTyphexType, matchTyphexMethodCall, resolveMemberPath, binaryOpFromSyntaxKind, parseTsAggregateCall, irWhereToTsLiteral, getParamBindings, } from "./shared.js";
|
|
7
|
+
import { ALLOWED_METHODS } from "../arrow/constants.js";
|
|
8
|
+
/** Narrow a ParamBindings into an OuterDestructured (or undefined when there
|
|
9
|
+
* are no destructured locals to expose). Centralizes the conversion. */
|
|
10
|
+
export function toOuterDestructured(pb) {
|
|
11
|
+
return pb.bindings ? { ...pb, bindings: pb.bindings } : undefined;
|
|
12
|
+
}
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Expression → IR dispatch
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* Convert a TS expression to IR. Returns null for unsupported expressions;
|
|
18
|
+
* the transformer silently skips them and the runtime parser can handle them
|
|
19
|
+
* later if needed.
|
|
20
|
+
*/
|
|
21
|
+
function exprToIr(expr, ctx) {
|
|
22
|
+
if (ts.isParenthesizedExpression(expr))
|
|
23
|
+
return exprToIr(expr.expression, ctx);
|
|
24
|
+
if (ts.isBinaryExpression(expr))
|
|
25
|
+
return binaryExprToIr(expr, ctx);
|
|
26
|
+
if (isPrefixUnaryExpression(expr))
|
|
27
|
+
return prefixUnaryExprToIr(expr, ctx);
|
|
28
|
+
if (ts.isPropertyAccessExpression(expr))
|
|
29
|
+
return memberExprToIr(expr, ctx);
|
|
30
|
+
if (ts.isIdentifier(expr))
|
|
31
|
+
return identifierToIr(expr, ctx);
|
|
32
|
+
if (isConstantLiteral(expr))
|
|
33
|
+
return literalToIr(expr);
|
|
34
|
+
if (ts.isCallExpression(expr))
|
|
35
|
+
return callExprToIr(expr, ctx);
|
|
36
|
+
if (ts.isArrayLiteralExpression(expr))
|
|
37
|
+
return arrayLiteralToIr(expr, ctx);
|
|
38
|
+
if (ts.isConditionalExpression(expr))
|
|
39
|
+
return conditionalExprToIr(expr, ctx);
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
// ---- Node kind predicates ---------------------------------------------------
|
|
43
|
+
/** Narrowing predicate: is this a `!expr` / `~expr` prefix unary expression? */
|
|
44
|
+
function isPrefixUnaryExpression(expr) {
|
|
45
|
+
return (ts.isPrefixUnaryExpression(expr) &&
|
|
46
|
+
(expr.operator === ts.SyntaxKind.ExclamationToken || expr.operator === ts.SyntaxKind.TildeToken));
|
|
47
|
+
}
|
|
48
|
+
/** True if the expression is a supported literal constant (string/number/bool/null). */
|
|
49
|
+
function isConstantLiteral(expr) {
|
|
50
|
+
return (ts.isStringLiteral(expr) ||
|
|
51
|
+
ts.isNumericLiteral(expr) ||
|
|
52
|
+
expr.kind === ts.SyntaxKind.TrueKeyword ||
|
|
53
|
+
expr.kind === ts.SyntaxKind.FalseKeyword ||
|
|
54
|
+
expr.kind === ts.SyntaxKind.NullKeyword);
|
|
55
|
+
}
|
|
56
|
+
// ---- Per-node-kind handlers -------------------------------------------------
|
|
57
|
+
/** Handle `&&`, `||`, `===`, `in`, etc. — returns IrBinary or IrIn. */
|
|
58
|
+
function binaryExprToIr(expr, ctx) {
|
|
59
|
+
const opStr = binaryOpFromSyntaxKind(expr.operatorToken.kind);
|
|
60
|
+
if (!opStr)
|
|
61
|
+
return null;
|
|
62
|
+
if (opStr === "in" && ctx.checker) {
|
|
63
|
+
const left = exprToIr(expr.left, ctx);
|
|
64
|
+
if (!left)
|
|
65
|
+
return null;
|
|
66
|
+
// Pass paramNames so the inline subquery's inner where can reference
|
|
67
|
+
// the outer arrow's row params (correlated IN subquery).
|
|
68
|
+
const sub = isTyphexQueryChain(expr.right, ctx.checker);
|
|
69
|
+
if (sub)
|
|
70
|
+
return { kind: "in", left, right: captureSubqueryRef(expr.right, ctx) };
|
|
71
|
+
const right = exprToIr(expr.right, ctx);
|
|
72
|
+
if (!right)
|
|
73
|
+
return null;
|
|
74
|
+
return { kind: "in", left, right };
|
|
75
|
+
}
|
|
76
|
+
const left = exprToIr(expr.left, ctx) ?? tryExtractSubqueryRef(expr.left, ctx);
|
|
77
|
+
const right = exprToIr(expr.right, ctx) ?? tryExtractSubqueryRef(expr.right, ctx);
|
|
78
|
+
if (!left || !right)
|
|
79
|
+
return null;
|
|
80
|
+
if (opStr === "in")
|
|
81
|
+
return { kind: "in", left, right };
|
|
82
|
+
return { kind: "binary", op: opStr, left, right };
|
|
83
|
+
}
|
|
84
|
+
function tryExtractSubqueryRef(expr, ctx) {
|
|
85
|
+
if (!ctx.checker)
|
|
86
|
+
return null;
|
|
87
|
+
const sub = isTyphexQueryChain(expr, ctx.checker);
|
|
88
|
+
return sub ? captureSubqueryRef(expr, ctx) : null;
|
|
89
|
+
}
|
|
90
|
+
function captureSubqueryRef(expr, ctx) {
|
|
91
|
+
return captureSubqueryRefShared(expr, ctx.capturedSubqueries);
|
|
92
|
+
}
|
|
93
|
+
/** Handle `!<expr>` / `~<expr>` — `!` wraps inner IR; `~` emits bitwise NOT. */
|
|
94
|
+
function prefixUnaryExprToIr(expr, ctx) {
|
|
95
|
+
const operand = exprToIr(expr.operand, ctx);
|
|
96
|
+
if (!operand)
|
|
97
|
+
return null;
|
|
98
|
+
const op = expr.operator === ts.SyntaxKind.TildeToken ? "~" : "!";
|
|
99
|
+
if (op === "!" && operand.kind === "in")
|
|
100
|
+
return { ...operand, negated: !operand.negated };
|
|
101
|
+
return { kind: "unary", op, operand };
|
|
102
|
+
}
|
|
103
|
+
/** Handle `p.a.b.c` — resolves against the lambda params and returns an IrMember.
|
|
104
|
+
* Falls back to `outerDestructured` so `post.id` works when `post` is a
|
|
105
|
+
* destructured local from the outer arrow, then to `outerScope` so a bare
|
|
106
|
+
* outer-arrow param `u` in `u.id` resolves as IrMember on `u`. */
|
|
107
|
+
function memberExprToIr(expr, ctx) {
|
|
108
|
+
const resolved = resolveMemberPath(expr, ctx.paramNames);
|
|
109
|
+
if (resolved)
|
|
110
|
+
return { kind: "member", param: resolved.param, path: resolved.path };
|
|
111
|
+
// Walk the chain manually so we can resolve the root identifier against
|
|
112
|
+
// outerDestructured / outerScope.
|
|
113
|
+
const parts = [];
|
|
114
|
+
let current = expr;
|
|
115
|
+
while (ts.isPropertyAccessExpression(current)) {
|
|
116
|
+
parts.unshift(current.name.text);
|
|
117
|
+
current = current.expression;
|
|
118
|
+
}
|
|
119
|
+
if (!ts.isIdentifier(current))
|
|
120
|
+
return null;
|
|
121
|
+
if (ctx.outerDestructured) {
|
|
122
|
+
const prefix = ctx.outerDestructured.bindings.get(current.text);
|
|
123
|
+
if (prefix)
|
|
124
|
+
return {
|
|
125
|
+
kind: "member",
|
|
126
|
+
param: ctx.outerDestructured.paramName,
|
|
127
|
+
path: [...prefix, ...parts],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
if (ctx.outerScope) {
|
|
131
|
+
for (const frame of ctx.outerScope) {
|
|
132
|
+
if (frame.paramName === current.text) {
|
|
133
|
+
return { kind: "member", param: current.text, path: parts };
|
|
134
|
+
}
|
|
135
|
+
const bound = frame.bindings?.get(current.text);
|
|
136
|
+
if (bound) {
|
|
137
|
+
return { kind: "member", param: frame.paramName, path: [...bound, ...parts] };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Handle a bare identifier — either a lambda parameter (→ IrMember with
|
|
145
|
+
* empty path) or a closure variable (→ IrParam; the caller records it in
|
|
146
|
+
* `freeVars` so the rewritten call can pass it along at runtime).
|
|
147
|
+
*/
|
|
148
|
+
function identifierToIr(expr, ctx) {
|
|
149
|
+
if (ctx.paramNames.includes(expr.text)) {
|
|
150
|
+
return { kind: "member", param: expr.text, path: [] };
|
|
151
|
+
}
|
|
152
|
+
if (ctx.outerDestructured) {
|
|
153
|
+
const path = ctx.outerDestructured.bindings.get(expr.text);
|
|
154
|
+
if (path)
|
|
155
|
+
return { kind: "member", param: ctx.outerDestructured.paramName, path };
|
|
156
|
+
}
|
|
157
|
+
if (ctx.outerScope) {
|
|
158
|
+
for (const frame of ctx.outerScope) {
|
|
159
|
+
if (frame.paramName === expr.text) {
|
|
160
|
+
return { kind: "member", param: expr.text, path: [] };
|
|
161
|
+
}
|
|
162
|
+
const bound = frame.bindings?.get(expr.text);
|
|
163
|
+
if (bound) {
|
|
164
|
+
return { kind: "member", param: frame.paramName, path: bound };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
ctx.freeVars.add(expr.text);
|
|
169
|
+
return { kind: "param", key: expr.text };
|
|
170
|
+
}
|
|
171
|
+
/** Handle a constant literal expression — wraps the extracted value in an IrConst. */
|
|
172
|
+
function literalToIr(expr) {
|
|
173
|
+
const value = extractLiteralValue(expr);
|
|
174
|
+
return { kind: "const", value };
|
|
175
|
+
}
|
|
176
|
+
/** Convert a literal TS expression into its JS value (string/number/bool/null). */
|
|
177
|
+
function extractLiteralValue(expr) {
|
|
178
|
+
if (ts.isStringLiteral(expr))
|
|
179
|
+
return expr.text;
|
|
180
|
+
if (ts.isNumericLiteral(expr))
|
|
181
|
+
return Number(expr.text);
|
|
182
|
+
if (expr.kind === ts.SyntaxKind.TrueKeyword)
|
|
183
|
+
return true;
|
|
184
|
+
if (expr.kind === ts.SyntaxKind.FalseKeyword)
|
|
185
|
+
return false;
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Handle `[a, b, c]` — only valid as the right-hand-side of `in`, so all
|
|
190
|
+
* elements must reduce to constants. Returns null for spreads / non-literals.
|
|
191
|
+
*/
|
|
192
|
+
function arrayLiteralToIr(expr, ctx) {
|
|
193
|
+
const values = [];
|
|
194
|
+
for (const element of expr.elements) {
|
|
195
|
+
if (element.kind === ts.SyntaxKind.SpreadElement)
|
|
196
|
+
return null;
|
|
197
|
+
const ir = exprToIr(element, ctx);
|
|
198
|
+
if (!ir || ir.kind !== "const")
|
|
199
|
+
return null;
|
|
200
|
+
values.push(ir.value);
|
|
201
|
+
}
|
|
202
|
+
return { kind: "const", value: values };
|
|
203
|
+
}
|
|
204
|
+
/** Handle `test ? consequent : alternate` — flattens nested ternaries in the alternate branch. */
|
|
205
|
+
function conditionalExprToIr(expr, ctx) {
|
|
206
|
+
const when = exprToIr(expr.condition, ctx);
|
|
207
|
+
const then = exprToIr(expr.whenTrue, ctx);
|
|
208
|
+
const alternate = exprToIr(expr.whenFalse, ctx);
|
|
209
|
+
if (!when || !then || !alternate)
|
|
210
|
+
return null;
|
|
211
|
+
if (alternate.kind === "case") {
|
|
212
|
+
return {
|
|
213
|
+
kind: "case",
|
|
214
|
+
branches: [{ when, then }, ...alternate.branches],
|
|
215
|
+
...(alternate.else !== undefined ? { else: alternate.else } : {}),
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return { kind: "case", branches: [{ when, then }], else: alternate };
|
|
219
|
+
}
|
|
220
|
+
// ---- CallExpression handling -----------------------------------------------
|
|
221
|
+
/**
|
|
222
|
+
* Dispatch a CallExpression: method calls go through some/every or the
|
|
223
|
+
* string-method whitelist; identifier calls must be aggregate functions.
|
|
224
|
+
*/
|
|
225
|
+
function callExprToIr(expr, ctx) {
|
|
226
|
+
const callee = expr.expression;
|
|
227
|
+
// Method calls: .some()/.every()/.startsWith()/.endsWith()/.includes()
|
|
228
|
+
if (ts.isPropertyAccessExpression(callee)) {
|
|
229
|
+
// some/every introduce their own inner-row scope; outer destructured locals
|
|
230
|
+
// do not leak into that scope (matches the existing freeVars isolation).
|
|
231
|
+
const exists = tryParseSomeEvery(expr, callee, ctx);
|
|
232
|
+
if (exists)
|
|
233
|
+
return exists;
|
|
234
|
+
return tryParseAllowedMethod(expr, callee, ctx);
|
|
235
|
+
}
|
|
236
|
+
// Identifier calls: aggregates only — SUM, COUNT, groupConcat, etc.
|
|
237
|
+
if (ts.isIdentifier(callee)) {
|
|
238
|
+
const parsed = parseTsAggregateCall(expr, ctx.paramNames);
|
|
239
|
+
return parsed ? parsed.ir : null;
|
|
240
|
+
}
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Parse `.startsWith(arg)`, `.endsWith(arg)`, or `.includes(arg)` — returns
|
|
245
|
+
* an IrCall node, or null if the method isn't in the allowlist or an
|
|
246
|
+
* argument fails to convert.
|
|
247
|
+
*/
|
|
248
|
+
function tryParseAllowedMethod(call, callee, ctx) {
|
|
249
|
+
const method = callee.name.text;
|
|
250
|
+
if (!ALLOWED_METHODS.has(method))
|
|
251
|
+
return null;
|
|
252
|
+
const receiver = exprToIr(callee.expression, ctx);
|
|
253
|
+
if (!receiver)
|
|
254
|
+
return null;
|
|
255
|
+
const args = call.arguments.map((a) => exprToIr(a, ctx));
|
|
256
|
+
if (args.some((a) => a === null))
|
|
257
|
+
return null;
|
|
258
|
+
return { kind: "call", method, receiver, args: args };
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Parse `relation.some(cb)` or `relation.every(cb)` into an IrExists subquery.
|
|
262
|
+
* `.every` becomes a negated exists. Returns null for shapes that don't
|
|
263
|
+
* match.
|
|
264
|
+
*/
|
|
265
|
+
function tryParseSomeEvery(call, callee, ctx) {
|
|
266
|
+
const method = callee.name.text;
|
|
267
|
+
if (method !== "some" && method !== "every")
|
|
268
|
+
return null;
|
|
269
|
+
if (call.arguments.length !== 1)
|
|
270
|
+
return null;
|
|
271
|
+
if (!ts.isPropertyAccessExpression(callee.expression))
|
|
272
|
+
return null;
|
|
273
|
+
const receiver = resolveMemberPath(callee.expression, ctx.paramNames);
|
|
274
|
+
if (!receiver || receiver.path.length < 1)
|
|
275
|
+
return null;
|
|
276
|
+
const innerFn = call.arguments[0];
|
|
277
|
+
if (!ts.isArrowFunction(innerFn) && !ts.isFunctionExpression(innerFn))
|
|
278
|
+
return null;
|
|
279
|
+
const innerParam = getFirstParamName(innerFn) ?? "e";
|
|
280
|
+
const innerExpr = getArrowExpressionBody(innerFn);
|
|
281
|
+
if (!innerExpr)
|
|
282
|
+
return null;
|
|
283
|
+
// Inner free-vars are intentionally discarded — subquery scope is self-contained.
|
|
284
|
+
const innerWhere = exprToIr(innerExpr, {
|
|
285
|
+
paramNames: [innerParam],
|
|
286
|
+
freeVars: new Set(),
|
|
287
|
+
capturedSubqueries: [],
|
|
288
|
+
checker: ctx.checker,
|
|
289
|
+
});
|
|
290
|
+
if (!innerWhere)
|
|
291
|
+
return null;
|
|
292
|
+
return {
|
|
293
|
+
kind: "exists",
|
|
294
|
+
...(method === "every" ? { negated: true } : {}),
|
|
295
|
+
rootParam: receiver.param,
|
|
296
|
+
relationKey: receiver.path[0],
|
|
297
|
+
innerParam,
|
|
298
|
+
innerWhere,
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/** Return the first parameter's name if it's a plain identifier; null otherwise. */
|
|
302
|
+
function getFirstParamName(fn) {
|
|
303
|
+
const param = fn.parameters[0]?.name;
|
|
304
|
+
if (!param || !ts.isIdentifier(param))
|
|
305
|
+
return null;
|
|
306
|
+
return param.text;
|
|
307
|
+
}
|
|
308
|
+
// ---------------------------------------------------------------------------
|
|
309
|
+
// Arrow → IR + free-variable collection
|
|
310
|
+
// ---------------------------------------------------------------------------
|
|
311
|
+
/** Extract the lambda parameter names as strings; defaults to "u" per slot. */
|
|
312
|
+
function extractParamNames(fn) {
|
|
313
|
+
return fn.parameters.map((p) => (p.name && ts.isIdentifier(p.name) ? p.name.text : "u"));
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Convert a where/having arrow into its IR plus the list of closure
|
|
317
|
+
* variables referenced by the predicate. Returns null if the body shape or
|
|
318
|
+
* inner expressions can't be mapped onto the supported IR subset.
|
|
319
|
+
*/
|
|
320
|
+
function arrowToIr(fn, checker, extraParamNames = [], outerDestructured, outerScope) {
|
|
321
|
+
const expr = getArrowExpressionBody(fn);
|
|
322
|
+
if (!expr)
|
|
323
|
+
return null;
|
|
324
|
+
const paramNames = [...extractParamNames(fn), ...extraParamNames];
|
|
325
|
+
const freeVars = new Set();
|
|
326
|
+
const capturedSubqueries = [];
|
|
327
|
+
const ir = exprToIr(expr, {
|
|
328
|
+
paramNames,
|
|
329
|
+
freeVars,
|
|
330
|
+
capturedSubqueries,
|
|
331
|
+
checker,
|
|
332
|
+
outerDestructured,
|
|
333
|
+
outerScope,
|
|
334
|
+
});
|
|
335
|
+
if (!ir)
|
|
336
|
+
return null;
|
|
337
|
+
return {
|
|
338
|
+
ir: {
|
|
339
|
+
node: ir,
|
|
340
|
+
rootParam: paramNames[0] ?? "u",
|
|
341
|
+
localParamNames: paramNames,
|
|
342
|
+
},
|
|
343
|
+
freeVars: [...freeVars],
|
|
344
|
+
capturedSubqueries,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
// ---------------------------------------------------------------------------
|
|
348
|
+
// Transform orchestration — where() and having() share everything.
|
|
349
|
+
// ---------------------------------------------------------------------------
|
|
350
|
+
/**
|
|
351
|
+
* Validate the call site, parse the arrow, and emit the rewritten call of
|
|
352
|
+
* the form `table.<method>(irLiteral, freeVarsLiteral)`. Returns null when
|
|
353
|
+
* the call shouldn't be rewritten.
|
|
354
|
+
*/
|
|
355
|
+
function transformArrowCall(call, checker, methodName, outerScope = []) {
|
|
356
|
+
const arrow = matchTyphexMethodCall(call, methodName, checker, isTyphexType);
|
|
357
|
+
if (!arrow)
|
|
358
|
+
return null;
|
|
359
|
+
// If the where/having arrow's first param is destructured, expose its
|
|
360
|
+
// bindings so a bare local (or member access on a destructured local)
|
|
361
|
+
// inside an inline subquery's correlated WHERE resolves to the outer row.
|
|
362
|
+
const pb = getParamBindings(arrow.parameters[0]?.name);
|
|
363
|
+
const result = arrowToIr(arrow, checker, [], toOuterDestructured(pb), outerScope);
|
|
364
|
+
if (!result)
|
|
365
|
+
return null;
|
|
366
|
+
const args = [
|
|
367
|
+
irWhereToTsLiteral(result.ir),
|
|
368
|
+
buildParamsLiteral(result.freeVars, result.capturedSubqueries),
|
|
369
|
+
];
|
|
370
|
+
return ts.factory.updateCallExpression(call, call.expression, call.typeArguments, args);
|
|
371
|
+
}
|
|
372
|
+
// ---------------------------------------------------------------------------
|
|
373
|
+
// Public entry points
|
|
374
|
+
// ---------------------------------------------------------------------------
|
|
375
|
+
/** Convert a where-style arrow (`p => predicate`) to IR + free-var list.
|
|
376
|
+
* Exposed for the select transformer so it can parse inner WHEREs of
|
|
377
|
+
* inline subqueries used as scalar columns. `outerParamNames` enables
|
|
378
|
+
* correlation: bare references to those names resolve as IrMember rather
|
|
379
|
+
* than as free variables. */
|
|
380
|
+
export function parseWhereArrowToIr(fn, checker, outerParamNames = [], outerDestructured, outerScope) {
|
|
381
|
+
return arrowToIr(fn, checker, outerParamNames, outerDestructured, outerScope);
|
|
382
|
+
}
|
|
383
|
+
/** Convert a single TS expression to IR for select/orderBy transformers. */
|
|
384
|
+
export function parseExpressionToIr(expr, paramNames, freeVars, checker) {
|
|
385
|
+
return exprToIr(expr, {
|
|
386
|
+
paramNames,
|
|
387
|
+
freeVars,
|
|
388
|
+
capturedSubqueries: [],
|
|
389
|
+
checker,
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
/** Rewrite a `.where(arrow)` call on a Typhex Table/QueryBuilder into IR form. */
|
|
393
|
+
export function transformWhereCall(call, checker, outerScope = []) {
|
|
394
|
+
return transformArrowCall(call, checker, "where", outerScope);
|
|
395
|
+
}
|
|
396
|
+
/** Rewrite a `.having(arrow)` call on a Typhex Table/QueryBuilder into IR form. */
|
|
397
|
+
export function transformHavingCall(call, checker, outerScope = []) {
|
|
398
|
+
return transformArrowCall(call, checker, "having", outerScope);
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=where-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"where-transformer.js","sourceRoot":"","sources":["../../src/transformer/where-transformer.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function toArray<T>(value: T | T[] | undefined): T[];
|
|
2
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
3
|
+
export declare function groupBy<T, K>(items: Iterable<T>, keyFn: (item: T) => K): Map<K, T[]>;
|
|
4
|
+
export declare function extractBaseType(def: string): string;
|
|
5
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,GAAG,CAAC,EAAE,CAG1D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CASpF;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASnD"}
|