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,134 @@
|
|
|
1
|
+
import { isIrSelect, isIrOrderBy, isIrWhere } from "../ir/types.js";
|
|
2
|
+
import { parseArrowToIr, parseArrowToIrPredicate, parseArrowToIrSelect, parseArrowToGroupByPaths, parseArrowToUpdateSet, } from "./parse-arrow.js";
|
|
3
|
+
import { DEFAULT_ROW_PARAM } from "../orm/helpers/query-plan/query-plan.js";
|
|
4
|
+
/** Resolve a where input (pre-built predicate IR or arrow fn) to an IrWhere. */
|
|
5
|
+
export function resolveWhereIr(input, paramKeys = [], subqueryKeys = []) {
|
|
6
|
+
if (isIrWhere(input))
|
|
7
|
+
return input;
|
|
8
|
+
try {
|
|
9
|
+
return parseArrowToIrPredicate(input, { paramKeys, subqueryKeys });
|
|
10
|
+
}
|
|
11
|
+
catch (e) {
|
|
12
|
+
throw new Error("Failed to parse arrow predicate: " + (e instanceof Error ? e.message : String(e)));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function resolveHavingIr(input, paramKeys = [], subqueryKeys = []) {
|
|
16
|
+
return resolveWhereIr(input, paramKeys, subqueryKeys);
|
|
17
|
+
}
|
|
18
|
+
/** Resolve an entity-table join ON input (pre-built predicate IR or arrow fn) to an IrWhere. */
|
|
19
|
+
export function resolveJoinOnIr(joinType, input) {
|
|
20
|
+
if (isIrWhere(input))
|
|
21
|
+
return input;
|
|
22
|
+
try {
|
|
23
|
+
return parseArrowToIrPredicate(input);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
throw new Error(`Failed to parse ${joinType}Join ON predicate: ${e instanceof Error ? e.message : String(e)}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** Resolve an orderBy input (pre-built IrOrderBy, string, or arrow fn) to an IrOrderBy. */
|
|
30
|
+
export function resolveOrderBy(input, direction = "asc", paramKeys = []) {
|
|
31
|
+
if (isIrOrderBy(input))
|
|
32
|
+
return input;
|
|
33
|
+
if (typeof input === "function") {
|
|
34
|
+
try {
|
|
35
|
+
const ir = parseArrowToIr(input, { paramKeys });
|
|
36
|
+
if (ir.kind === "aggregate") {
|
|
37
|
+
throw new Error("[typhex] orderBy does not support aggregate functions directly. " +
|
|
38
|
+
"Select the aggregate with an alias first (e.g. .select(p => ({ total: sum(p.price) }))), " +
|
|
39
|
+
'then orderBy the alias as a string: .orderBy("total", "desc").');
|
|
40
|
+
}
|
|
41
|
+
if (ir.kind !== "member" || ir.path.length === 0) {
|
|
42
|
+
if (ir.kind === "case" || ir.kind === "binary" || ir.kind === "unary") {
|
|
43
|
+
return { expr: ir, direction };
|
|
44
|
+
}
|
|
45
|
+
throw new Error("[typhex] orderBy lambda must select a column (e.g. u => u.name), not the whole row (e.g. u => u)");
|
|
46
|
+
}
|
|
47
|
+
return { expr: ir, direction };
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
throw new Error("Failed to parse orderBy lambda: " + (e instanceof Error ? e.message : String(e)));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const segments = input.split(".").map((s) => s.trim());
|
|
54
|
+
if (segments.length === 0 || segments.some((s) => s.length === 0)) {
|
|
55
|
+
throw new Error('[typhex] orderBy column must be a non-empty dot-separated path (e.g. "company.name")');
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
expr: { kind: "member", param: DEFAULT_ROW_PARAM, path: segments },
|
|
59
|
+
direction,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** Resolve a select input (pre-built IrSelect, column string array, or arrow fn) to an IrSelect. */
|
|
63
|
+
export function resolveSelectIr(input, paramKeys = []) {
|
|
64
|
+
if (typeof input === "function") {
|
|
65
|
+
const parsed = parseArrowToIrSelect(input, paramKeys);
|
|
66
|
+
if (!parsed) {
|
|
67
|
+
throw new Error("select(): could not parse lambda at runtime. Use the Typhex transformer for complex selects, or pass column names / IrSelect.");
|
|
68
|
+
}
|
|
69
|
+
return parsed;
|
|
70
|
+
}
|
|
71
|
+
if (isIrSelect(input))
|
|
72
|
+
return input;
|
|
73
|
+
// string[] — each entry becomes a single-segment path
|
|
74
|
+
return { param: DEFAULT_ROW_PARAM, paths: input.map((c) => [c]), aliases: input };
|
|
75
|
+
}
|
|
76
|
+
/** Resolve a groupBy input (arrow fn, string/number array, or mixed) to Array<string[] | number>. */
|
|
77
|
+
export function resolveGroupByPaths(columnOrFn, ...rest) {
|
|
78
|
+
if (typeof columnOrFn === "function") {
|
|
79
|
+
const entries = parseArrowToGroupByPaths(columnOrFn);
|
|
80
|
+
if (entries.length === 0) {
|
|
81
|
+
throw new Error("[typhex] .groupBy() could not parse the provided function — no column paths were resolved.");
|
|
82
|
+
}
|
|
83
|
+
return entries;
|
|
84
|
+
}
|
|
85
|
+
const cols = Array.isArray(columnOrFn)
|
|
86
|
+
? columnOrFn
|
|
87
|
+
: [columnOrFn, ...rest];
|
|
88
|
+
return cols.map((c) => {
|
|
89
|
+
const n = Number(c);
|
|
90
|
+
if (Number.isInteger(n))
|
|
91
|
+
return n;
|
|
92
|
+
return String(c).split(".");
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** Resolve a join-hint input (string array or arrow fn) to relation key strings. */
|
|
96
|
+
export function resolveJoinKeys(fn) {
|
|
97
|
+
if (Array.isArray(fn))
|
|
98
|
+
return [...new Set(fn)];
|
|
99
|
+
try {
|
|
100
|
+
const parsed = parseArrowToIrSelect(fn);
|
|
101
|
+
if (parsed) {
|
|
102
|
+
const keys = [];
|
|
103
|
+
for (const path of parsed.paths) {
|
|
104
|
+
if (path.length >= 1)
|
|
105
|
+
keys.push(path[0]);
|
|
106
|
+
}
|
|
107
|
+
for (const rel of parsed.relations ?? []) {
|
|
108
|
+
keys.push(rel.name);
|
|
109
|
+
}
|
|
110
|
+
return [...new Set(keys)];
|
|
111
|
+
}
|
|
112
|
+
// Fallback: single member access p => p.author
|
|
113
|
+
const ir = parseArrowToIr(fn, { paramKeys: [] });
|
|
114
|
+
if (ir.kind === "member" && ir.path.length >= 1)
|
|
115
|
+
return [ir.path[0]];
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return [];
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** Resolve an update input (literal map or arrow fn) for the query planner. */
|
|
123
|
+
export function resolveUpdateSet(input) {
|
|
124
|
+
if (typeof input !== "function") {
|
|
125
|
+
return { set: input };
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
return { setIr: parseArrowToUpdateSet(input) };
|
|
129
|
+
}
|
|
130
|
+
catch (e) {
|
|
131
|
+
throw new Error("Failed to parse update lambda: " + (e instanceof Error ? e.message : String(e)));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/parser/resolve.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE5E,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAC5B,KAA+C,EAC/C,YAAsB,EAAE,EACxB,eAAyB,EAAE;IAE3B,IAAI,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,uBAAuB,CAAC,KAA4B,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,mCAAmC,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CACnF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAgD,EAChD,YAAsB,EAAE,EACxB,eAAyB,EAAE;IAE3B,OAAO,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AACxD,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,KAA6D;IAE7D,IAAI,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,uBAAuB,CAAC,KAAoC,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,mBAAmB,QAAQ,sBAAsB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC9F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,cAAc,CAC5B,KAAuD,EACvD,YAA4B,KAAK,EACjC,YAAsB,EAAE;IAExB,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,cAAc,CAAC,KAAwB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACnE,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,kEAAkE;oBAChE,2FAA2F;oBAC3F,gEAAgE,CACnE,CAAC;YACJ,CAAC;YACD,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjD,IAAI,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACtE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;gBACjC,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,kGAAkG,CACnG,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,kCAAkC,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAClF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CACb,sFAAsF,CACvF,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE;QAClE,SAAS;KACV,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,eAAe,CAC7B,KAAwE,EACxE,YAAsB,EAAE;IAExB,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAgC,EAAE,SAAS,CAAC,CAAC;QACjF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,+HAA+H,CAChI,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,sDAAsD;IACtD,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACpF,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,mBAAmB,CACjC,UAA+E,EAC/E,GAAG,IAAyB;IAE5B,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,wBAAwB,CAAC,UAA+B,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAA2B,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAC5D,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAqB,EAAE;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,eAAe,CAAC,EAA0C;IACxE,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAA6B,CAAC,CAAC;QACnE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5B,CAAC;QACD,+CAA+C;QAC/C,MAAM,EAAE,GAAG,cAAc,CAAC,EAAqB,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAOD,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAC9B,KAA4E;IAE5E,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;IACjD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,iCAAiC,GAAG,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CACjF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime parsing for `.select()` arrow lambdas: columns, nested relations,
|
|
3
|
+
* aggregates, rest-spread, and relation query chains (`.query().where()`…).
|
|
4
|
+
*/
|
|
5
|
+
import type { IrSelect } from "../ir/types.js";
|
|
6
|
+
export declare function parseArrowToIrSelect(fn: (...args: unknown[]) => unknown, paramKeys?: string[]): IrSelect | null;
|
|
7
|
+
//# sourceMappingURL=select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/parser/select.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAU,QAAQ,EAAiC,MAAM,gBAAgB,CAAC;AAgCtF,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EACnC,SAAS,GAAE,MAAM,EAAO,GACvB,QAAQ,GAAG,IAAI,CAgBjB"}
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime parsing for `.select()` arrow lambdas: columns, nested relations,
|
|
3
|
+
* aggregates, rest-spread, and relation query chains (`.query().where()`…).
|
|
4
|
+
*/
|
|
5
|
+
import { RELATION_QUERY_METHODS } from "../arrow/constants.js";
|
|
6
|
+
import { extractArrowBody, inferParamNames, parseExpressionSource, normalizeSelectBodySource, sliceNodeSource, } from "./arrow-source.js";
|
|
7
|
+
import { isArrowFunctionExpression, isCallExpression, isIdent, isIdentifier, isLiteral, isMemberExpression, isObjectExpression, isProperty, isSpreadElement, isStringLiteral, memberObjectExpr, objectPropertyValue, propertyKeyName, } from "./acorn-helpers.js";
|
|
8
|
+
import { resolveMemberPath } from "./acorn-member.js";
|
|
9
|
+
import { parseArrowToIrPredicate, parseExpressionToIr, tryParseAggregate, } from "./predicate-walk.js";
|
|
10
|
+
export function parseArrowToIrSelect(fn, paramKeys = []) {
|
|
11
|
+
const src = fn.toString();
|
|
12
|
+
const body = extractArrowBody(src);
|
|
13
|
+
if (!body)
|
|
14
|
+
return null;
|
|
15
|
+
const paramName = inferParamNames(src)[0] ?? "u";
|
|
16
|
+
const fullSrc = normalizeSelectBodySource(body);
|
|
17
|
+
let expr;
|
|
18
|
+
try {
|
|
19
|
+
expr = parseExpressionSource(fullSrc);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return parseTopLevelSelectExpression(expr, paramName, fullSrc, paramKeys);
|
|
25
|
+
}
|
|
26
|
+
function parseTopLevelSelectExpression(expr, paramName, fullSrc, paramKeys) {
|
|
27
|
+
if (isIdent(expr, paramName)) {
|
|
28
|
+
return { param: paramName, paths: [], aliases: [], rest: true };
|
|
29
|
+
}
|
|
30
|
+
if (isMemberExpression(expr)) {
|
|
31
|
+
return parseSingleColumnSelect(expr, paramName);
|
|
32
|
+
}
|
|
33
|
+
if (isCallExpression(expr)) {
|
|
34
|
+
return parseSingleAggregateSelect(expr, paramName, paramKeys);
|
|
35
|
+
}
|
|
36
|
+
if (isObjectExpression(expr)) {
|
|
37
|
+
return parseSelectObjectLiteral(expr, paramName, fullSrc, paramKeys);
|
|
38
|
+
}
|
|
39
|
+
return parseSingleExpressionSelect(expr, paramName, paramKeys);
|
|
40
|
+
}
|
|
41
|
+
function parseSingleExpressionSelect(expr, paramName, paramKeys) {
|
|
42
|
+
try {
|
|
43
|
+
const ir = parseExpressionToIr(expr, [paramName], paramKeys);
|
|
44
|
+
if (ir.kind === "member" || ir.kind === "param")
|
|
45
|
+
return null;
|
|
46
|
+
return {
|
|
47
|
+
param: paramName,
|
|
48
|
+
paths: [],
|
|
49
|
+
aliases: [],
|
|
50
|
+
expressions: [{ expr: ir, alias: "expr" }],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function parseSingleColumnSelect(expr, paramName) {
|
|
58
|
+
const resolved = resolveMemberPath(expr, [paramName]);
|
|
59
|
+
if (!resolved || resolved.path.length === 0)
|
|
60
|
+
return null;
|
|
61
|
+
const alias = resolved.path[resolved.path.length - 1];
|
|
62
|
+
return { param: paramName, paths: [resolved.path], aliases: [alias] };
|
|
63
|
+
}
|
|
64
|
+
function parseSingleAggregateSelect(callNode, paramName, paramKeys = []) {
|
|
65
|
+
const parsed = safeParseAggregate(callNode, paramName, paramKeys);
|
|
66
|
+
if (!parsed)
|
|
67
|
+
return null;
|
|
68
|
+
const alias = parsed.rawName.toLowerCase();
|
|
69
|
+
return {
|
|
70
|
+
param: paramName,
|
|
71
|
+
paths: [],
|
|
72
|
+
aliases: [],
|
|
73
|
+
aggregates: [{ ...parsed.ir, alias }],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function safeParseAggregate(callNode, paramName, paramKeys = []) {
|
|
77
|
+
try {
|
|
78
|
+
return tryParseAggregate(callNode, [paramName], paramKeys, { strictDistinct: false }, []);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function parseSelectObjectLiteral(obj, paramName, fullSrc, paramKeys = []) {
|
|
85
|
+
const paths = [];
|
|
86
|
+
const aliases = [];
|
|
87
|
+
const relations = [];
|
|
88
|
+
const aggregates = [];
|
|
89
|
+
const expressions = [];
|
|
90
|
+
let rest = false;
|
|
91
|
+
for (const raw of obj.properties) {
|
|
92
|
+
if (isSpreadElement(raw)) {
|
|
93
|
+
if (!isIdent(raw.argument, paramName))
|
|
94
|
+
return null;
|
|
95
|
+
rest = true;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (!isProperty(raw) || raw.computed)
|
|
99
|
+
return null;
|
|
100
|
+
const keyName = propertyKeyName(raw.key);
|
|
101
|
+
if (!keyName)
|
|
102
|
+
return null;
|
|
103
|
+
const value = objectPropertyValue(raw.value);
|
|
104
|
+
if (!value)
|
|
105
|
+
return null;
|
|
106
|
+
const handled = parseSelectProperty(value, keyName, paramName, fullSrc, paramKeys);
|
|
107
|
+
if (!handled)
|
|
108
|
+
return null;
|
|
109
|
+
applySelectPropertyResult(handled, keyName, paths, aliases, relations, aggregates, expressions);
|
|
110
|
+
}
|
|
111
|
+
if (paths.length === 0 &&
|
|
112
|
+
relations.length === 0 &&
|
|
113
|
+
aggregates.length === 0 &&
|
|
114
|
+
expressions.length === 0 &&
|
|
115
|
+
!rest) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const result = { param: paramName, paths, aliases };
|
|
119
|
+
if (relations.length > 0)
|
|
120
|
+
result.relations = relations;
|
|
121
|
+
if (rest)
|
|
122
|
+
result.rest = true;
|
|
123
|
+
if (aggregates.length > 0)
|
|
124
|
+
result.aggregates = aggregates;
|
|
125
|
+
if (expressions.length > 0)
|
|
126
|
+
result.expressions = expressions;
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
function parseSelectProperty(value, keyName, paramName, fullSrc, paramKeys = []) {
|
|
130
|
+
if (isObjectExpression(value)) {
|
|
131
|
+
return parseNestedRelationProperty(value, keyName, paramName);
|
|
132
|
+
}
|
|
133
|
+
if (isCallExpression(value)) {
|
|
134
|
+
return parseCallSelectProperty(value, keyName, paramName, fullSrc, paramKeys);
|
|
135
|
+
}
|
|
136
|
+
const resolved = resolveMemberPath(value, [paramName]);
|
|
137
|
+
if (resolved && resolved.path.length > 0) {
|
|
138
|
+
return { kind: "path", path: resolved.path };
|
|
139
|
+
}
|
|
140
|
+
try {
|
|
141
|
+
const expr = parseExpressionToIr(value, [paramName], paramKeys);
|
|
142
|
+
if (expr.kind === "member" || expr.kind === "param")
|
|
143
|
+
return null;
|
|
144
|
+
return { kind: "expression", expr };
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function parseNestedRelationProperty(value, keyName, paramName) {
|
|
151
|
+
const sub = parseRelationSubSelect(value, paramName);
|
|
152
|
+
if (!sub)
|
|
153
|
+
return null;
|
|
154
|
+
return {
|
|
155
|
+
kind: "relation",
|
|
156
|
+
relation: { name: sub.relation, outputKey: keyName, subPaths: sub.subPaths },
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function parseCallSelectProperty(value, keyName, paramName, fullSrc, paramKeys = []) {
|
|
160
|
+
const parsed = safeParseAggregate(value, paramName, paramKeys);
|
|
161
|
+
if (parsed) {
|
|
162
|
+
return { kind: "aggregate", aggregate: { ...parsed.ir, alias: keyName } };
|
|
163
|
+
}
|
|
164
|
+
const relation = parseRelationQueryChain(value, paramName, keyName, fullSrc);
|
|
165
|
+
if (!relation)
|
|
166
|
+
return null;
|
|
167
|
+
return { kind: "relation", relation };
|
|
168
|
+
}
|
|
169
|
+
function applySelectPropertyResult(result, keyName, paths, aliases, relations, aggregates, expressions) {
|
|
170
|
+
switch (result.kind) {
|
|
171
|
+
case "path":
|
|
172
|
+
paths.push(result.path);
|
|
173
|
+
aliases.push(keyName);
|
|
174
|
+
return;
|
|
175
|
+
case "relation":
|
|
176
|
+
relations.push(result.relation);
|
|
177
|
+
return;
|
|
178
|
+
case "aggregate":
|
|
179
|
+
aggregates.push(result.aggregate);
|
|
180
|
+
return;
|
|
181
|
+
case "expression":
|
|
182
|
+
expressions.push({ expr: result.expr, alias: keyName });
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function parseRelationSubSelect(obj, paramName) {
|
|
187
|
+
const subPaths = [];
|
|
188
|
+
let relation = null;
|
|
189
|
+
for (const raw of obj.properties) {
|
|
190
|
+
if (!isProperty(raw) || raw.computed)
|
|
191
|
+
return null;
|
|
192
|
+
const keyName = propertyKeyName(raw.key);
|
|
193
|
+
if (!keyName)
|
|
194
|
+
return null;
|
|
195
|
+
const value = objectPropertyValue(raw.value);
|
|
196
|
+
if (!value)
|
|
197
|
+
return null;
|
|
198
|
+
const resolved = resolveMemberPath(value, [paramName]);
|
|
199
|
+
if (!resolved || resolved.path.length < 2)
|
|
200
|
+
return null;
|
|
201
|
+
const rel = resolved.path[0];
|
|
202
|
+
if (relation !== null && relation !== rel)
|
|
203
|
+
return null;
|
|
204
|
+
relation = rel;
|
|
205
|
+
subPaths.push(resolved.path.slice(1));
|
|
206
|
+
}
|
|
207
|
+
if (!relation || subPaths.length === 0)
|
|
208
|
+
return null;
|
|
209
|
+
return { relation, subPaths };
|
|
210
|
+
}
|
|
211
|
+
function parseRelationQueryChain(node, parentParamName, outputKey, source) {
|
|
212
|
+
const chain = collectChainMethods(node);
|
|
213
|
+
if (!chain)
|
|
214
|
+
return null;
|
|
215
|
+
const headPath = resolveMemberPath(chain.head, [parentParamName]);
|
|
216
|
+
if (!headPath || headPath.path.length !== 1)
|
|
217
|
+
return null;
|
|
218
|
+
const result = { name: headPath.path[0], outputKey };
|
|
219
|
+
for (const method of chain.methods) {
|
|
220
|
+
if (!applyChainMethod(method, result, source))
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
return result;
|
|
224
|
+
}
|
|
225
|
+
function collectChainMethods(node) {
|
|
226
|
+
const methods = [];
|
|
227
|
+
let current = node;
|
|
228
|
+
while (current && isCallExpression(current)) {
|
|
229
|
+
const callee = current.callee;
|
|
230
|
+
if (!isMemberExpression(callee))
|
|
231
|
+
return null;
|
|
232
|
+
const methodName = isIdentifier(callee.property) ? callee.property.name : undefined;
|
|
233
|
+
if (!methodName || !RELATION_QUERY_METHODS.has(methodName))
|
|
234
|
+
return null;
|
|
235
|
+
methods.push({ name: methodName, args: current.arguments });
|
|
236
|
+
const object = memberObjectExpr(callee);
|
|
237
|
+
if (!object)
|
|
238
|
+
return null;
|
|
239
|
+
current = object;
|
|
240
|
+
}
|
|
241
|
+
if (!current || !isMemberExpression(current))
|
|
242
|
+
return null;
|
|
243
|
+
return { methods, head: current };
|
|
244
|
+
}
|
|
245
|
+
function applyChainMethod(method, result, source) {
|
|
246
|
+
switch (method.name) {
|
|
247
|
+
case "query":
|
|
248
|
+
return method.args.length === 0;
|
|
249
|
+
case "where":
|
|
250
|
+
return applyWhereMethod(method.args, result, source);
|
|
251
|
+
case "orderBy":
|
|
252
|
+
return applyOrderByMethod(method.args, result);
|
|
253
|
+
case "limit":
|
|
254
|
+
return applyLimitOrOffsetMethod(method.args, result, "limit");
|
|
255
|
+
case "offset":
|
|
256
|
+
return applyLimitOrOffsetMethod(method.args, result, "offset");
|
|
257
|
+
case "select":
|
|
258
|
+
return applySelectMethod(method.args, result, source);
|
|
259
|
+
default:
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function applyWhereMethod(args, result, source) {
|
|
264
|
+
if (args.length !== 1 || !isArrowFunctionExpression(args[0]))
|
|
265
|
+
return false;
|
|
266
|
+
const argSrc = sliceNodeSource(args[0], source);
|
|
267
|
+
if (!argSrc)
|
|
268
|
+
return false;
|
|
269
|
+
try {
|
|
270
|
+
const whereFn = new Function("return " + argSrc)();
|
|
271
|
+
const paramNames = inferParamNames(argSrc);
|
|
272
|
+
result.whereIr = parseArrowToIrPredicate(whereFn, { paramNames });
|
|
273
|
+
result.whereParams = {};
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function applyOrderByMethod(args, result) {
|
|
281
|
+
if (args.length < 1 || args.length > 2)
|
|
282
|
+
return false;
|
|
283
|
+
const colNode = args[0];
|
|
284
|
+
if (!colNode || colNode.type === "SpreadElement" || !isLiteral(colNode))
|
|
285
|
+
return false;
|
|
286
|
+
const col = String(colNode.value);
|
|
287
|
+
if (!col)
|
|
288
|
+
return false;
|
|
289
|
+
const dirArg = args.length === 2 ? args[1] : undefined;
|
|
290
|
+
const dir = dirArg && dirArg.type !== "SpreadElement" && isStringLiteral(dirArg) && dirArg.value === "desc"
|
|
291
|
+
? "desc"
|
|
292
|
+
: "asc";
|
|
293
|
+
result.orderBy = result.orderBy ?? [];
|
|
294
|
+
result.orderBy.push({
|
|
295
|
+
expr: { kind: "member", param: "u", path: [col] },
|
|
296
|
+
direction: dir,
|
|
297
|
+
});
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
300
|
+
function applyLimitOrOffsetMethod(args, result, kind) {
|
|
301
|
+
if (args.length !== 1)
|
|
302
|
+
return false;
|
|
303
|
+
const node = args[0];
|
|
304
|
+
if (!node || node.type === "SpreadElement" || !isLiteral(node))
|
|
305
|
+
return false;
|
|
306
|
+
const n = Number(node.value);
|
|
307
|
+
if (!Number.isFinite(n) || n < 0)
|
|
308
|
+
return false;
|
|
309
|
+
if (kind === "limit")
|
|
310
|
+
result.limitNum = Math.floor(n);
|
|
311
|
+
else
|
|
312
|
+
result.offsetNum = Math.floor(n);
|
|
313
|
+
return true;
|
|
314
|
+
}
|
|
315
|
+
function applySelectMethod(args, result, source) {
|
|
316
|
+
if (args.length !== 1 || !isArrowFunctionExpression(args[0]))
|
|
317
|
+
return false;
|
|
318
|
+
const argSrc = sliceNodeSource(args[0], source);
|
|
319
|
+
if (!argSrc)
|
|
320
|
+
return false;
|
|
321
|
+
try {
|
|
322
|
+
const selectFn = new Function("return " + argSrc)();
|
|
323
|
+
const sub = parseArrowToIrSelect(selectFn);
|
|
324
|
+
if (!sub || !sub.paths.length)
|
|
325
|
+
return false;
|
|
326
|
+
result.subPaths = sub.paths;
|
|
327
|
+
return true;
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
return false;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/parser/select.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime parsing for `.update(e => ({ col: e.field, ... }))` arrows into
|
|
3
|
+
* a map of column names to IR nodes (member paths or literals).
|
|
4
|
+
*/
|
|
5
|
+
import type { IrNode } from "../ir/types.js";
|
|
6
|
+
export declare function parseArrowToUpdateSet(fn: (...args: unknown[]) => Record<string, unknown>): Record<string, IrNode>;
|
|
7
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/parser/update.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAa7C,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA8CxB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime parsing for `.update(e => ({ col: e.field, ... }))` arrows into
|
|
3
|
+
* a map of column names to IR nodes (member paths or literals).
|
|
4
|
+
*/
|
|
5
|
+
import { DEFAULT_ROW_PARAM } from "../arrow/constants.js";
|
|
6
|
+
import { extractArrowBody, inferParamNames, parseExpressionSource } from "./arrow-source.js";
|
|
7
|
+
import { isLiteral, isMemberExpression, isObjectExpression, isProperty, objectPropertyValue, propertyKeyName, } from "./acorn-helpers.js";
|
|
8
|
+
import { resolveMemberPath } from "./acorn-member.js";
|
|
9
|
+
export function parseArrowToUpdateSet(fn) {
|
|
10
|
+
const src = fn.toString();
|
|
11
|
+
const body = extractArrowBody(src);
|
|
12
|
+
if (!body)
|
|
13
|
+
throw new Error("update lambda must be an arrow function");
|
|
14
|
+
const paramNames = inferParamNames(src);
|
|
15
|
+
const paramName = paramNames[0] ?? DEFAULT_ROW_PARAM;
|
|
16
|
+
const expr = parseExpressionSource(body.startsWith("(") ? body : `(${body})`);
|
|
17
|
+
if (!isObjectExpression(expr)) {
|
|
18
|
+
throw new Error("update lambda must return an object literal");
|
|
19
|
+
}
|
|
20
|
+
const result = {};
|
|
21
|
+
for (const raw of expr.properties) {
|
|
22
|
+
if (!isProperty(raw) || raw.computed) {
|
|
23
|
+
throw new Error("update object keys must be identifiers");
|
|
24
|
+
}
|
|
25
|
+
const keyName = propertyKeyName(raw.key);
|
|
26
|
+
if (!keyName)
|
|
27
|
+
throw new Error("update object keys must be identifiers");
|
|
28
|
+
const value = objectPropertyValue(raw.value);
|
|
29
|
+
if (!value) {
|
|
30
|
+
throw new Error(`update "${keyName}": value must be a column reference or literal`);
|
|
31
|
+
}
|
|
32
|
+
if (isMemberExpression(value)) {
|
|
33
|
+
const resolved = resolveMemberPath(value, paramNames);
|
|
34
|
+
if (!resolved || resolved.path.length === 0) {
|
|
35
|
+
throw new Error(`update "${keyName}": expected ${paramName}.<column> or <ctes>.<cte>.<column>`);
|
|
36
|
+
}
|
|
37
|
+
result[keyName] = { kind: "member", param: resolved.param, path: resolved.path };
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (isLiteral(value)) {
|
|
41
|
+
result[keyName] = { kind: "const", value: value.value };
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`update "${keyName}": value must be a column reference or literal`);
|
|
45
|
+
}
|
|
46
|
+
if (Object.keys(result).length === 0) {
|
|
47
|
+
throw new Error("update lambda must set at least one column");
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/parser/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL-specific aggregate function stubs.
|
|
3
|
+
* Import from "typhex/postgres" 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 a required separator. Compiles to STRING_AGG. */
|
|
7
|
+
export declare function stringAgg(_field: unknown, _separator: string): string;
|
|
8
|
+
/** Collects values into a PostgreSQL array. Compiles to ARRAY_AGG. */
|
|
9
|
+
export declare function arrayAgg<T>(_field: T): T[];
|
|
10
|
+
/** Collects values into a JSON array. Compiles to JSON_AGG. */
|
|
11
|
+
export declare function jsonAgg(_field: unknown): unknown[];
|
|
12
|
+
//# sourceMappingURL=aggregates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregates.d.ts","sourceRoot":"","sources":["../../src/postgres/aggregates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,sEAAsE;AACtE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAE1C;AAED,+DAA+D;AAC/D,wBAAgB,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE,CAElD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PostgreSQL-specific aggregate function stubs.
|
|
3
|
+
* Import from "typhex/postgres" 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 a required separator. Compiles to STRING_AGG. */
|
|
8
|
+
export function stringAgg(_field, _separator) {
|
|
9
|
+
throw new Error(msg("stringAgg"));
|
|
10
|
+
}
|
|
11
|
+
/** Collects values into a PostgreSQL array. Compiles to ARRAY_AGG. */
|
|
12
|
+
export function arrayAgg(_field) {
|
|
13
|
+
throw new Error(msg("arrayAgg"));
|
|
14
|
+
}
|
|
15
|
+
/** Collects values into a JSON array. Compiles to JSON_AGG. */
|
|
16
|
+
export function jsonAgg(_field) {
|
|
17
|
+
throw new Error(msg("jsonAgg"));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=aggregates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregates.js","sourceRoot":"","sources":["../../src/postgres/aggregates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,4DAA4D,CAAC;AAE5F,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,MAAe,EAAE,UAAkB;IAC3D,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAI,MAAS;IACnC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,OAAO,CAAC,MAAe;IACrC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* typhex/postgres — PostgreSQL-specific aggregate functions.
|
|
3
|
+
* Import from "typhex/postgres" to use Postgres-only aggregates in query lambdas.
|
|
4
|
+
*/
|
|
5
|
+
export { stringAgg, arrayAgg, jsonAgg } from "./postgres/aggregates.js";
|
|
6
|
+
//# sourceMappingURL=postgres.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../src/postgres.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/postgres.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../src/postgres.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|