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
package/dist/dialect.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect.js","sourceRoot":"","sources":["../src/dialect.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create driver from dialect and connection options.
|
|
3
|
+
*/
|
|
4
|
+
import type { Driver } from "./types.js";
|
|
5
|
+
import type { SqliteDriverOptions } from "./sqlite.js";
|
|
6
|
+
import type { PostgresDriverOptions } from "../dbs/postgres/driver.js";
|
|
7
|
+
/** SQLite driver options (path required). */
|
|
8
|
+
export type { SqliteDriverOptions };
|
|
9
|
+
/** PostgreSQL driver options (connectionString or host/port/database). */
|
|
10
|
+
export type { PostgresDriverOptions };
|
|
11
|
+
/** Union of driver options — use `dialect` to discriminate. */
|
|
12
|
+
export type CreateDriverOptions = ({
|
|
13
|
+
dialect: "sqlite";
|
|
14
|
+
} & SqliteDriverOptions) | ({
|
|
15
|
+
dialect: "postgres";
|
|
16
|
+
} & PostgresDriverOptions);
|
|
17
|
+
/** Creates a driver from a discriminated options object (`{ dialect: 'sqlite' | 'postgres', … }`). */
|
|
18
|
+
export declare function createDriver(options: CreateDriverOptions): Driver;
|
|
19
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/driver/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,6CAA6C;AAC7C,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,0EAA0E;AAC1E,YAAY,EAAE,qBAAqB,EAAE,CAAC;AAEtC,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAC3B,CAAC;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,GAAG,mBAAmB,CAAC,GAC7C,CAAC;IAAE,OAAO,EAAE,UAAU,CAAA;CAAE,GAAG,qBAAqB,CAAC,CAAC;AAEtD,sGAAsG;AACtG,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAgBjE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create driver from dialect and connection options.
|
|
3
|
+
*/
|
|
4
|
+
import { createSqliteDriver } from "./sqlite.js";
|
|
5
|
+
import { createPostgresDriver } from "../dbs/postgres/driver.js";
|
|
6
|
+
/** Creates a driver from a discriminated options object (`{ dialect: 'sqlite' | 'postgres', … }`). */
|
|
7
|
+
export function createDriver(options) {
|
|
8
|
+
switch (options.dialect) {
|
|
9
|
+
case "sqlite": {
|
|
10
|
+
const { dialect: _, ...rest } = options;
|
|
11
|
+
if (rest.path === undefined && rest.database === undefined) {
|
|
12
|
+
return createSqliteDriver({ ...rest, path: ":memory:" });
|
|
13
|
+
}
|
|
14
|
+
return createSqliteDriver(rest);
|
|
15
|
+
}
|
|
16
|
+
case "postgres": {
|
|
17
|
+
const { dialect: _, ...rest } = options;
|
|
18
|
+
return createPostgresDriver(rest);
|
|
19
|
+
}
|
|
20
|
+
default:
|
|
21
|
+
throw new Error(`Unknown dialect: ${options.dialect}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/driver/factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAcjE,sGAAsG;AACtG,MAAM,UAAU,YAAY,CAAC,OAA4B;IACvD,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;YACxC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3D,OAAO,kBAAkB,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;YACxC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,oBAAqB,OAA+B,CAAC,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { Driver, ExecuteResult } from "./types.js";
|
|
2
|
+
export { createSqliteDriver } from "./sqlite.js";
|
|
3
|
+
export type { SqliteDriverOptions } from "./sqlite.js";
|
|
4
|
+
export { createDriver } from "./factory.js";
|
|
5
|
+
export type { CreateDriverOptions } from "./factory.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite driver using better-sqlite3.
|
|
3
|
+
* Serializes Date/boolean so bound params are valid for SQLite (numbers, strings, bigints, buffers, null).
|
|
4
|
+
*/
|
|
5
|
+
import type { Driver } from "./types.js";
|
|
6
|
+
/** Options for `createSqliteDriver`: `path` (or alias `database`) to the SQLite file. */
|
|
7
|
+
export interface SqliteDriverOptions {
|
|
8
|
+
/** Path to database file or ":memory:". Either `path` or `database` is required. */
|
|
9
|
+
path?: string;
|
|
10
|
+
/** Alias for `path`. Useful when reading from a config file. */
|
|
11
|
+
database?: string;
|
|
12
|
+
}
|
|
13
|
+
/** Creates a SQLite driver backed by `better-sqlite3`. */
|
|
14
|
+
export declare function createSqliteDriver(options: SqliteDriverOptions): Driver;
|
|
15
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/driver/sqlite.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,MAAM,EAKP,MAAM,YAAY,CAAC;AAyCpB,yFAAyF;AACzF,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,0DAA0D;AAC1D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAuCvE"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite driver using better-sqlite3.
|
|
3
|
+
* Serializes Date/boolean so bound params are valid for SQLite (numbers, strings, bigints, buffers, null).
|
|
4
|
+
*/
|
|
5
|
+
import { createRequire } from "node:module";
|
|
6
|
+
import { SqliteTrx } from "../dbs/sqlite/trx.js";
|
|
7
|
+
import { sqliteDialect } from "../dbs/sqlite/dialect.js";
|
|
8
|
+
import { isRecord } from "../utils.js";
|
|
9
|
+
const require = createRequire(import.meta.url);
|
|
10
|
+
/** Convert a value to a type SQLite can bind (number, string, bigint, Buffer, null). */
|
|
11
|
+
function toBindable(value) {
|
|
12
|
+
if (value === undefined || value === null)
|
|
13
|
+
return null;
|
|
14
|
+
if (value instanceof Date)
|
|
15
|
+
return value.toISOString();
|
|
16
|
+
if (typeof value === "boolean")
|
|
17
|
+
return value ? 1 : 0;
|
|
18
|
+
if (typeof value === "number" ||
|
|
19
|
+
typeof value === "string" ||
|
|
20
|
+
typeof value === "bigint" ||
|
|
21
|
+
Buffer.isBuffer(value))
|
|
22
|
+
return value;
|
|
23
|
+
if (isRecord(value))
|
|
24
|
+
return JSON.stringify(value);
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function bindableParams(params) {
|
|
28
|
+
return params.map(toBindable);
|
|
29
|
+
}
|
|
30
|
+
/** Execute a statement against the better-sqlite3 Database instance. */
|
|
31
|
+
function executeSql(db, sql, params) {
|
|
32
|
+
const stmt = db.prepare(sql);
|
|
33
|
+
if (stmt.reader) {
|
|
34
|
+
return { rows: stmt.all(...bindableParams(params)), changes: 0 };
|
|
35
|
+
}
|
|
36
|
+
const info = stmt.run(...bindableParams(params));
|
|
37
|
+
return { rows: [], lastID: info.lastInsertRowid, changes: info.changes };
|
|
38
|
+
}
|
|
39
|
+
/** Creates a SQLite driver backed by `better-sqlite3`. */
|
|
40
|
+
export function createSqliteDriver(options) {
|
|
41
|
+
const path = options.path ?? options.database;
|
|
42
|
+
if (!path) {
|
|
43
|
+
throw new Error("createSqliteDriver: `path` (or `database`) is required");
|
|
44
|
+
}
|
|
45
|
+
const Database = require("better-sqlite3");
|
|
46
|
+
const db = new Database(path);
|
|
47
|
+
function makeConnection() {
|
|
48
|
+
return {
|
|
49
|
+
dialect: sqliteDialect,
|
|
50
|
+
async execute(sql, params = []) {
|
|
51
|
+
return executeSql(db, sql, params);
|
|
52
|
+
},
|
|
53
|
+
async release() {
|
|
54
|
+
/* no-op for SQLite */
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
dialect: sqliteDialect,
|
|
60
|
+
async execute(sql, params = []) {
|
|
61
|
+
return executeSql(db, sql, params);
|
|
62
|
+
},
|
|
63
|
+
connect() {
|
|
64
|
+
return Promise.resolve(makeConnection());
|
|
65
|
+
},
|
|
66
|
+
createTrx(conn, options) {
|
|
67
|
+
return new SqliteTrx(conn, options);
|
|
68
|
+
},
|
|
69
|
+
async close() {
|
|
70
|
+
db.close();
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/driver/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { DialectName } from "../dialect.js";
|
|
2
|
+
import type { Trx } from "../orm/trx.js";
|
|
3
|
+
/** Public dialect metadata exposed by drivers. */
|
|
4
|
+
export interface DialectInfo {
|
|
5
|
+
readonly name: DialectName;
|
|
6
|
+
}
|
|
7
|
+
/** Options forwarded to the underlying driver when beginning a transaction. */
|
|
8
|
+
export interface TransactionOptions {
|
|
9
|
+
/** ANSI isolation level. SQLite only supports "SERIALIZABLE" (mapped to BEGIN IMMEDIATE). */
|
|
10
|
+
isolationLevel?: "READ_UNCOMMITTED" | "READ_COMMITTED" | "REPEATABLE_READ" | "SERIALIZABLE";
|
|
11
|
+
/**
|
|
12
|
+
* Open the transaction as read-only (PostgreSQL only).
|
|
13
|
+
* Generates: BEGIN [ISOLATION LEVEL ...] READ ONLY
|
|
14
|
+
*/
|
|
15
|
+
readOnly?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Make the transaction deferrable (PostgreSQL only).
|
|
18
|
+
* Requires isolationLevel: "SERIALIZABLE" and readOnly: true.
|
|
19
|
+
* Generates: BEGIN ISOLATION LEVEL SERIALIZABLE READ ONLY DEFERRABLE
|
|
20
|
+
*/
|
|
21
|
+
deferrable?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* SQLite-native transaction mode. Takes precedence over isolationLevel for SQLite.
|
|
24
|
+
* "deferred" = BEGIN DEFERRED (default — acquire locks lazily)
|
|
25
|
+
* "immediate" = BEGIN IMMEDIATE (acquire write lock immediately)
|
|
26
|
+
* "exclusive" = BEGIN EXCLUSIVE (block all other connections)
|
|
27
|
+
*/
|
|
28
|
+
sqliteMode?: "deferred" | "immediate" | "exclusive";
|
|
29
|
+
}
|
|
30
|
+
/** Result returned by Driver.execute() and Connection.execute(). */
|
|
31
|
+
export interface ExecuteResult {
|
|
32
|
+
/** Rows returned by the statement (non-empty for SELECT/WITH/PRAGMA/EXPLAIN). */
|
|
33
|
+
rows: unknown[];
|
|
34
|
+
/**
|
|
35
|
+
* Auto-generated primary key from the last INSERT, when applicable.
|
|
36
|
+
* MySQL: result.insertId | PostgreSQL: first RETURNING column | SQLite: lastInsertRowid
|
|
37
|
+
*/
|
|
38
|
+
lastID?: number;
|
|
39
|
+
/** Number of rows affected (INSERT/UPDATE/DELETE). */
|
|
40
|
+
changes: number;
|
|
41
|
+
}
|
|
42
|
+
/** A dedicated connection acquired from the pool — used inside transactions. */
|
|
43
|
+
export interface Connection<TDialect extends DialectInfo = DialectInfo> {
|
|
44
|
+
/** The SQL dialect this connection speaks. */
|
|
45
|
+
readonly dialect: TDialect;
|
|
46
|
+
/**
|
|
47
|
+
* Execute any SQL statement on this dedicated connection.
|
|
48
|
+
* See Driver.execute() for the implementer mapping guide.
|
|
49
|
+
*/
|
|
50
|
+
execute(sql: string, params?: unknown[]): Promise<ExecuteResult>;
|
|
51
|
+
/** Returns this connection to the pool. */
|
|
52
|
+
release(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
/** Thin adapter — raw DB operations only. Transaction logic lives in Db. */
|
|
55
|
+
export interface Driver<TDialect extends DialectInfo = DialectInfo> {
|
|
56
|
+
/** The SQL dialect this driver targets. */
|
|
57
|
+
readonly dialect: TDialect;
|
|
58
|
+
/**
|
|
59
|
+
* Execute any SQL statement. Returns rows (for SELECT) and mutation
|
|
60
|
+
* metadata (for INSERT/UPDATE/DELETE).
|
|
61
|
+
*
|
|
62
|
+
* Implementer mapping:
|
|
63
|
+
* MySQL: rows = result, lastID = result.insertId, changes = result.affectedRows
|
|
64
|
+
* PostgreSQL: rows = result.rows, lastID = first RETURNING col, changes = result.rowCount
|
|
65
|
+
* SQLite: rows = stmt.all(), lastID = lastInsertRowid, changes = info.changes
|
|
66
|
+
*/
|
|
67
|
+
execute(sql: string, params?: unknown[]): Promise<ExecuteResult>;
|
|
68
|
+
/** Acquire a dedicated connection (e.g. pg.PoolClient, or SQLite db wrapper). */
|
|
69
|
+
connect(): Promise<Connection<TDialect>>;
|
|
70
|
+
/** Create a dialect-specific transaction scope for the given connection. */
|
|
71
|
+
createTrx(conn: Connection<TDialect>, options?: TransactionOptions): Trx;
|
|
72
|
+
/** Closes all pooled connections and tears down the driver. */
|
|
73
|
+
close(): Promise<void>;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/driver/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,kDAAkD;AAClD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,6FAA6F;IAC7F,cAAc,CAAC,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,cAAc,CAAC;IAC5F;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;CACrD;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,iFAAiF;IACjF,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gFAAgF;AAChF,MAAM,WAAW,UAAU,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW;IACpE,8CAA8C;IAC9C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjE,2CAA2C;IAC3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,4EAA4E;AAC5E,MAAM,WAAW,MAAM,CAAC,QAAQ,SAAS,WAAW,GAAG,WAAW;IAChE,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B;;;;;;;;OAQG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjE,iFAAiF;IACjF,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,4EAA4E;IAC5E,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,GAAG,CAAC;IACzE,+DAA+D;IAC/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/driver/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity(table, schema, relations) — the only supported way to define entities.
|
|
3
|
+
* Returns a class whose instances are Row<TSchema, TRels>.
|
|
4
|
+
*/
|
|
5
|
+
import type { Trx } from "../orm/trx.js";
|
|
6
|
+
import type { QueryExecutor } from "../orm/db.js";
|
|
7
|
+
import { QueryBuilder } from "../orm/query-builder.js";
|
|
8
|
+
import type { InferTable, Flatten, Materialized, MaterializeShape } from "./schema-inference.js";
|
|
9
|
+
import type { RelationDef, RelationsMap, RelationQueryable, RelationQueryBuilder, ManyRelation } from "./relations.js";
|
|
10
|
+
import type { TableDef, EntityBase } from "./types.js";
|
|
11
|
+
export { getPkColumnsFromSchema } from "./pk-columns.js";
|
|
12
|
+
/** Resolved relation value type for a `RelationDef` R: an array for to-many, a single instance for to-one. */
|
|
13
|
+
export type RelationLoadedValue<R> = R extends RelationDef<infer E, infer TType> ? E extends AnyEntityClass ? unknown extends E ? TType extends "one-to-many" | "many-to-many" ? RelationQueryBuilder<any> & EntityBase[] : EntityBase : TType extends "one-to-many" | "many-to-many" ? ManyRelation<EntityInstance<E>> : EntityInstance<E> : TType extends "one-to-many" | "many-to-many" ? RelationQueryBuilder<any> & EntityBase[] : EntityBase : never;
|
|
14
|
+
/** Base row type: materialized columns merged with loaded relation values and `EntityBase`. */
|
|
15
|
+
export type Row<TShape extends Record<string, unknown>, TRels extends RelationsMap = {}> = Flatten<MaterializeShape<TShape> & {
|
|
16
|
+
[K in keyof TRels]: RelationLoadedValue<TRels[K]>;
|
|
17
|
+
}> & EntityBase;
|
|
18
|
+
/** Structural interface satisfied by every entity class returned by `Entity()`. */
|
|
19
|
+
export interface AnyEntityClass {
|
|
20
|
+
/** The table descriptor: name, schema, and relations. */
|
|
21
|
+
table: TableDef<Record<string, string>, RelationsMap>;
|
|
22
|
+
/** Returns a `QueryBuilder` scoped to this entity, optionally within a transaction or `Db` instance. */
|
|
23
|
+
query<C extends AnyEntityClass>(this: C, executor?: QueryExecutor): QueryBuilder<C, EntityInstance<C>>;
|
|
24
|
+
/** Runs `fn` inside a transaction on the default (or entity-scoped) database. */
|
|
25
|
+
transaction<T>(fn: (trx: Trx) => Promise<T>): Promise<T>;
|
|
26
|
+
}
|
|
27
|
+
/** The raw schema record declared on entity E. */
|
|
28
|
+
export type EntitySchema<E extends AnyEntityClass> = E["table"] extends TableDef<infer S, any> ? S : never;
|
|
29
|
+
/** The `RelationsMap` declared on entity E. */
|
|
30
|
+
export type EntityRelations<E extends AnyEntityClass> = E["table"] extends TableDef<any, infer R> ? R : never;
|
|
31
|
+
/** Materialized column types of entity E (e.g. `{ id: number; name: string }`). */
|
|
32
|
+
export type EntityFields<E extends AnyEntityClass> = Materialized<EntitySchema<E>>;
|
|
33
|
+
/** Resolved type for a `RelationDef` R: the related entity instance, or the raw target type. */
|
|
34
|
+
export type RelationTarget<R> = R extends RelationDef<infer E, any> ? (E extends AnyEntityClass ? EntityInstance<E> : E) : never;
|
|
35
|
+
/** Relation properties of E typed as lazy query builders (`RelationQueryable`). */
|
|
36
|
+
export type EntityRelationProps<E extends AnyEntityClass> = {
|
|
37
|
+
[K in keyof EntityRelations<E>]: RelationQueryable<EntityRelations<E>[K]>;
|
|
38
|
+
};
|
|
39
|
+
/** Relation properties of E typed as loaded values (arrays or single instances). */
|
|
40
|
+
export type EntityRelationPropsLoaded<E extends AnyEntityClass> = {
|
|
41
|
+
[K in keyof EntityRelations<E>]: RelationLoadedValue<EntityRelations<E>[K]>;
|
|
42
|
+
};
|
|
43
|
+
/** Table-derived instance type (used when E is not a class or as fallback). */
|
|
44
|
+
type EntityInstanceFromTable<E extends AnyEntityClass> = Flatten<EntityFields<E> & EntityRelationPropsLoaded<E>> & EntityBase;
|
|
45
|
+
/** Table-derived select row type. */
|
|
46
|
+
type SelectRowFromTable<E extends AnyEntityClass> = Flatten<EntityFields<E> & EntityRelationProps<E>> & EntityBase;
|
|
47
|
+
/** Loaded entity instance. Uses InstanceType<E> when E is a class so subclass declare (OneToMany etc.) flows through. */
|
|
48
|
+
export type EntityInstance<E extends AnyEntityClass> = E extends new (...args: any[]) => infer R ? R extends EntityBase ? R : EntityInstanceFromTable<E> : EntityInstanceFromTable<E>;
|
|
49
|
+
/** Row type in select(u => ...) callback. Uses InstanceType<E> when E is a class so subclass declare flows through. */
|
|
50
|
+
export type SelectRow<E extends AnyEntityClass> = E extends new (...args: any[]) => infer R ? R extends EntityBase ? R : SelectRowFromTable<E> : SelectRowFromTable<E>;
|
|
51
|
+
/** Alias for `EntityInstance<E>`; resolves to `never` when E is not an entity class. */
|
|
52
|
+
export type EntityRow<E> = E extends AnyEntityClass ? EntityInstance<E> : never;
|
|
53
|
+
/** Extracts the entity class from an entity instance type. */
|
|
54
|
+
export type EntityClassOf<T> = T extends EntityInstance<infer E> ? E : T extends AnyEntityClass ? T : never;
|
|
55
|
+
/** Typed entity class returned by `Entity()`. Extends `AnyEntityClass` with schema-specific types. */
|
|
56
|
+
export interface EntityClass<_TTable extends string, TSchema extends Record<string, string>, TRels extends RelationsMap = {}> extends AnyEntityClass {
|
|
57
|
+
/** Construct a new (unsaved) entity instance with optional partial data. */
|
|
58
|
+
new (data?: Partial<InferTable<TSchema>>): Row<Materialized<TSchema>, TRels>;
|
|
59
|
+
/** Typed table descriptor for this entity. */
|
|
60
|
+
table: TableDef<TSchema, TRels>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Define an entity. Schema keys and SQL-like type strings are inferred so that
|
|
64
|
+
* instances and create() get correct types (e.g. id: number, name: string).
|
|
65
|
+
*/
|
|
66
|
+
export declare function Entity<TTable extends string, const TSchema extends Record<string, string>, const TRels extends RelationsMap = {}>(tableName: TTable, schema: TSchema, relations?: TRels): EntityClass<TTable, TSchema, TRels>;
|
|
67
|
+
//# sourceMappingURL=entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/entity/entity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,OAAO,KAAK,EACV,UAAU,EAEV,OAAO,EACP,YAAY,EACZ,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAEV,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,8GAA8G;AAC9G,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAC/B,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,GACvC,CAAC,SAAS,cAAc,GACtB,OAAO,SAAS,CAAC,GACf,KAAK,SAAS,aAAa,GAAG,cAAc,GAC1C,oBAAoB,CAAC,GAAG,CAAC,GAAG,UAAU,EAAE,GACxC,UAAU,GACZ,KAAK,SAAS,aAAa,GAAG,cAAc,GAC1C,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAC/B,cAAc,CAAC,CAAC,CAAC,GACrB,KAAK,SAAS,aAAa,GAAG,cAAc,GAC1C,oBAAoB,CAAC,GAAG,CAAC,GAAG,UAAU,EAAE,GACxC,UAAU,GACd,KAAK,CAAC;AAEZ,+FAA+F;AAC/F,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,SAAS,YAAY,GAAG,EAAE,IAAI,OAAO,CAChG,gBAAgB,CAAC,MAAM,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CAAE,CACjF,GACC,UAAU,CAAC;AAEb,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC;IACtD,wGAAwG;IACxG,KAAK,CAAC,CAAC,SAAS,cAAc,EAC5B,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,aAAa,GACvB,YAAY,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,iFAAiF;IACjF,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC1D;AAED,kDAAkD;AAClD,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,IAC/C,CAAC,CAAC,OAAO,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACxD,+CAA+C;AAC/C,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,cAAc,IAClD,CAAC,CAAC,OAAO,CAAC,SAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAExD,mFAAmF;AACnF,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,cAAc,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,gGAAgG;AAChG,MAAM,MAAM,cAAc,CAAC,CAAC,IAC1B,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAEnG,mFAAmF;AACnF,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,cAAc,IAAI;KACzD,CAAC,IAAI,MAAM,eAAe,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1E,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,cAAc,IAAI;KAC/D,CAAC,IAAI,MAAM,eAAe,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5E,CAAC;AAEF,+EAA+E;AAC/E,KAAK,uBAAuB,CAAC,CAAC,SAAS,cAAc,IAAI,OAAO,CAC9D,YAAY,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAC/C,GACC,UAAU,CAAC;AAEb,qCAAqC;AACrC,KAAK,kBAAkB,CAAC,CAAC,SAAS,cAAc,IAAI,OAAO,CACzD,YAAY,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CACzC,GACC,UAAU,CAAC;AAEb,yHAAyH;AACzH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,cAAc,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GAC5F,CAAC,SAAS,UAAU,GAClB,CAAC,GACD,uBAAuB,CAAC,CAAC,CAAC,GAC5B,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAE/B,uHAAuH;AACvH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,cAAc,IAAI,CAAC,SAAS,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GACvF,CAAC,SAAS,UAAU,GAClB,CAAC,GACD,kBAAkB,CAAC,CAAC,CAAC,GACvB,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAE1B,wFAAwF;AACxF,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAEhF,8DAA8D;AAC9D,MAAM,MAAM,aAAa,CAAC,CAAC,IACzB,CAAC,SAAS,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC;AAgB/E,sGAAsG;AACtG,MAAM,WAAW,WAAW,CAC1B,OAAO,SAAS,MAAM,EACtB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,KAAK,SAAS,YAAY,GAAG,EAAE,CAC/B,SAAQ,cAAc;IACtB,4EAA4E;IAC5E,KAAK,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7E,8CAA8C;IAC9C,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,MAAM,CACpB,MAAM,SAAS,MAAM,EACrB,KAAK,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5C,KAAK,CAAC,KAAK,SAAS,YAAY,GAAG,EAAE,EACrC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAoI5F"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity(table, schema, relations) — the only supported way to define entities.
|
|
3
|
+
* Returns a class whose instances are Row<TSchema, TRels>.
|
|
4
|
+
*/
|
|
5
|
+
import { getColumnNames } from "../schema/types.js";
|
|
6
|
+
import { QueryBuilder } from "../orm/query-builder.js";
|
|
7
|
+
import { QueryState } from "../orm/query-state.js";
|
|
8
|
+
import { SingleRowQueryBuilder } from "../orm/single-row-query-builder.js";
|
|
9
|
+
import { getDefaultDb, registerEntity, enqueuePendingJunction } from "./global-driver.js";
|
|
10
|
+
import { getActiveTrx } from "../orm/db.js";
|
|
11
|
+
import { getPkColumns } from "./pk-columns.js";
|
|
12
|
+
export { getPkColumnsFromSchema } from "./pk-columns.js";
|
|
13
|
+
function createTableDef(table, schema, relations) {
|
|
14
|
+
return {
|
|
15
|
+
_table: table,
|
|
16
|
+
_schema: schema,
|
|
17
|
+
_relations: relations,
|
|
18
|
+
_selectType: undefined,
|
|
19
|
+
_insertType: undefined,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Define an entity. Schema keys and SQL-like type strings are inferred so that
|
|
24
|
+
* instances and create() get correct types (e.g. id: number, name: string).
|
|
25
|
+
*/
|
|
26
|
+
export function Entity(tableName, schema, relations) {
|
|
27
|
+
const rels = (relations ?? {});
|
|
28
|
+
const tableDef = createTableDef(tableName, schema, rels);
|
|
29
|
+
const cols = getColumnNames(schema);
|
|
30
|
+
const pkCols = getPkColumns(schema);
|
|
31
|
+
function resolveDb() {
|
|
32
|
+
const resolved = getDefaultDb();
|
|
33
|
+
if (!resolved)
|
|
34
|
+
throw new Error(`Entity "${tableName}": no Db. Use new Db(driver) to instantiate typhex.`);
|
|
35
|
+
return resolved;
|
|
36
|
+
}
|
|
37
|
+
function resolveRelationTarget(rel) {
|
|
38
|
+
try {
|
|
39
|
+
const target = rel._target();
|
|
40
|
+
const entityClass = target && typeof target === "function"
|
|
41
|
+
? target
|
|
42
|
+
: target
|
|
43
|
+
?._selectType;
|
|
44
|
+
const tbl = entityClass?.table;
|
|
45
|
+
if (tbl) {
|
|
46
|
+
const schema = tbl._schema;
|
|
47
|
+
return { table: tbl._table, pk: getPkColumns(schema), schema };
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
if (e instanceof TypeError || e instanceof ReferenceError)
|
|
53
|
+
return null;
|
|
54
|
+
throw e;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function baseState(executor) {
|
|
58
|
+
return new QueryState({
|
|
59
|
+
tableName,
|
|
60
|
+
columnNames: cols,
|
|
61
|
+
qe: executor ?? resolveDb(),
|
|
62
|
+
pkColumns: pkCols,
|
|
63
|
+
whereIr: null,
|
|
64
|
+
whereParams: {},
|
|
65
|
+
subqueryParams: {},
|
|
66
|
+
orderBy: [],
|
|
67
|
+
havingIr: null,
|
|
68
|
+
havingParams: {},
|
|
69
|
+
limitNum: null,
|
|
70
|
+
offsetNum: null,
|
|
71
|
+
selectIr: null,
|
|
72
|
+
relations: rels,
|
|
73
|
+
resolveRelationTarget,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
function runHook(self, name) {
|
|
77
|
+
return typeof self[name] === "function" ? Promise.resolve(self[name]()) : Promise.resolve();
|
|
78
|
+
}
|
|
79
|
+
class EntityClassImpl {
|
|
80
|
+
static table = tableDef;
|
|
81
|
+
static async transaction(fn) {
|
|
82
|
+
const db = resolveDb();
|
|
83
|
+
return db.transaction(fn);
|
|
84
|
+
}
|
|
85
|
+
static _registerJunctions() {
|
|
86
|
+
for (const rd of Object.values(rels)) {
|
|
87
|
+
if (rd._relType !== "many-to-many")
|
|
88
|
+
continue;
|
|
89
|
+
const opts = rd._options;
|
|
90
|
+
enqueuePendingJunction({
|
|
91
|
+
sourceTable: tableName,
|
|
92
|
+
sourceSchema: schema,
|
|
93
|
+
sourcePkCols: pkCols,
|
|
94
|
+
options: opts,
|
|
95
|
+
resolveTarget: () => resolveRelationTarget(rd),
|
|
96
|
+
materialize: (junctionSchema) => {
|
|
97
|
+
Entity(opts.junction, junctionSchema);
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
static _resolveRelations(Ctor) {
|
|
103
|
+
const classRels = Ctor.relations;
|
|
104
|
+
return classRels && Object.keys(classRels).length > 0 ? classRels : rels;
|
|
105
|
+
}
|
|
106
|
+
static query(executor) {
|
|
107
|
+
const Ctor = this;
|
|
108
|
+
const effectiveRels = EntityClassImpl._resolveRelations(Ctor);
|
|
109
|
+
return new QueryBuilder({
|
|
110
|
+
...baseState(executor),
|
|
111
|
+
entity: Ctor,
|
|
112
|
+
relations: effectiveRels,
|
|
113
|
+
async hydrate(row) {
|
|
114
|
+
const inst = new Ctor(row);
|
|
115
|
+
inst._isNew = false;
|
|
116
|
+
inst._dirty = new Set();
|
|
117
|
+
await runHook(inst, "afterLoad");
|
|
118
|
+
return inst;
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
constructor(data) {
|
|
123
|
+
const row = (data ?? {});
|
|
124
|
+
for (const key of Object.keys(row)) {
|
|
125
|
+
if (row[key] !== undefined)
|
|
126
|
+
this[key] = row[key];
|
|
127
|
+
}
|
|
128
|
+
this._isNew = !pkCols.every((c) => this[c] !== undefined);
|
|
129
|
+
this._dirty = new Set(Object.keys(row).filter((k) => cols.includes(k)));
|
|
130
|
+
}
|
|
131
|
+
query(executor) {
|
|
132
|
+
return new SingleRowQueryBuilder(this, baseState(executor ?? getActiveTrx()), runHook, pkCols, cols);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const result = EntityClassImpl;
|
|
136
|
+
registerEntity(result);
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/entity/entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global default Db and entity registry.
|
|
3
|
+
* - Db: set by Db constructor, fallback when entities don't have a per-entity Db.
|
|
4
|
+
* - Registry: populated by Entity(), used by Db.migrate() / Db.validate().
|
|
5
|
+
*/
|
|
6
|
+
import type { Db } from "../orm/db.js";
|
|
7
|
+
import type { JunctionOptions } from "./relations.js";
|
|
8
|
+
export declare function getDefaultDb(): Db | null;
|
|
9
|
+
export declare function setDefaultDb(db: Db | null): void;
|
|
10
|
+
/** Minimal view of an entity class as held in the global registry. */
|
|
11
|
+
export interface RegisteredEntity {
|
|
12
|
+
/** Table name and schema, used for migrations and validation. */
|
|
13
|
+
table: {
|
|
14
|
+
_table: string;
|
|
15
|
+
_schema: Record<string, string>;
|
|
16
|
+
};
|
|
17
|
+
/** Called once after registration to wire up many-to-many junction relations. */
|
|
18
|
+
_registerJunctions?: () => void;
|
|
19
|
+
}
|
|
20
|
+
export interface PendingJunction {
|
|
21
|
+
sourceTable: string;
|
|
22
|
+
sourceSchema: Record<string, string>;
|
|
23
|
+
sourcePkCols: string[];
|
|
24
|
+
options: JunctionOptions;
|
|
25
|
+
resolveTarget: () => {
|
|
26
|
+
table: string;
|
|
27
|
+
pk: string[];
|
|
28
|
+
schema: Record<string, string>;
|
|
29
|
+
} | null;
|
|
30
|
+
/** Materialize the junction entity given a fully-built schema. Captured at enqueue time so finalize doesn't need to import Entity (avoids cycle). */
|
|
31
|
+
materialize: (junctionSchema: Record<string, string>) => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function enqueuePendingJunction(p: PendingJunction): void;
|
|
34
|
+
export declare function registerEntity(entity: RegisteredEntity): void;
|
|
35
|
+
export declare function getRegisteredEntities(): readonly RegisteredEntity[];
|
|
36
|
+
export declare function getEntityByTableName(tableName: string): RegisteredEntity | undefined;
|
|
37
|
+
export declare function clearRegistry(): void;
|
|
38
|
+
//# sourceMappingURL=global-driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-driver.d.ts","sourceRoot":"","sources":["../../src/entity/global-driver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKtD,wBAAgB,YAAY,IAAI,EAAE,GAAG,IAAI,CAExC;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,CAEhD;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAC3D,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,eAAe,CAAC;IACzB,aAAa,EAAE,MAAM;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5F,qJAAqJ;IACrJ,WAAW,EAAE,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;CAC/D;AAkGD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,eAAe,GAAG,IAAI,CAE/D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAG7D;AAED,wBAAgB,qBAAqB,IAAI,SAAS,gBAAgB,EAAE,CAInE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEpF;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}
|