ts-prorm-orm 1.1.0 → 1.2.1
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 +95 -0
- package/README.md +194 -72
- package/dist/audit/history-query.d.ts +35 -0
- package/dist/audit/index.d.ts +16 -0
- package/dist/audit/logger.d.ts +126 -0
- package/dist/cache/cache-manager.d.ts +341 -0
- package/dist/cache/index.d.ts +8 -0
- package/dist/cache/redis-cluster-cache.d.ts +164 -0
- package/dist/cache/redis-cluster-cache.js +19 -36
- package/dist/cli/cloud.d.ts +55 -0
- package/dist/cli/cloud.js +318 -0
- package/dist/cli/commands/auth.d.ts +2 -0
- package/dist/cli/commands/auth.js +345 -0
- package/dist/cli/commands/billing.d.ts +2 -0
- package/dist/cli/commands/billing.js +135 -0
- package/dist/cli/commands/code.d.ts +2 -0
- package/dist/cli/commands/code.js +168 -0
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.js +154 -0
- package/dist/cli/commands/db.d.ts +2 -0
- package/dist/cli/commands/db.js +189 -0
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +22 -0
- package/dist/cli/commands/keys.d.ts +2 -0
- package/dist/cli/commands/keys.js +100 -0
- package/dist/cli/commands/misc.d.ts +2 -0
- package/dist/cli/commands/misc.js +282 -0
- package/dist/cli/commands/pull.d.ts +2 -0
- package/dist/cli/commands/pull.js +306 -0
- package/dist/cli/commands/runners.d.ts +2 -0
- package/dist/cli/commands/runners.js +218 -0
- package/dist/cli/commands/scaffold.d.ts +2 -0
- package/dist/cli/commands/scaffold.js +383 -0
- package/dist/cli/commands/secrets.d.ts +2 -0
- package/dist/cli/commands/secrets.js +162 -0
- package/dist/cli/commands/store.d.ts +2 -0
- package/dist/cli/commands/store.js +274 -0
- package/dist/cli/commands/system.d.ts +10 -0
- package/dist/cli/commands/system.js +169 -0
- package/dist/cli/commands/teams.d.ts +2 -0
- package/dist/cli/commands/teams.js +189 -0
- package/dist/cli/commands/user.d.ts +2 -0
- package/dist/cli/commands/user.js +171 -0
- package/dist/cli/framework.d.ts +103 -0
- package/dist/cli/framework.js +436 -0
- package/dist/cli/io.d.ts +26 -0
- package/dist/cli/io.js +181 -0
- package/dist/cli/keychain.d.ts +10 -0
- package/dist/cli/keychain.js +101 -0
- package/dist/cli/prompt.d.ts +20 -0
- package/dist/cli/prompt.js +111 -0
- package/dist/cli.d.ts +214 -0
- package/dist/cli.js +72 -5
- package/dist/compliance/audit-trail.d.ts +66 -0
- package/dist/compliance/backup-verification.d.ts +279 -0
- package/dist/compliance/breach-detector.d.ts +197 -0
- package/dist/compliance/consent-record.d.ts +107 -0
- package/dist/compliance/consent-versioning.d.ts +169 -0
- package/dist/compliance/cross-border-log.d.ts +254 -0
- package/dist/compliance/data-classifier.d.ts +127 -0
- package/dist/compliance/data-lineage.d.ts +268 -0
- package/dist/compliance/data-masker.d.ts +110 -0
- package/dist/compliance/data-portability.d.ts +98 -0
- package/dist/compliance/data-retention.d.ts +108 -0
- package/dist/compliance/dsar-workflow.d.ts +175 -0
- package/dist/compliance/field-encryption.d.ts +84 -0
- package/dist/compliance/immutable-record.d.ts +84 -0
- package/dist/compliance/index.d.ts +93 -0
- package/dist/compliance/privacy-impact-assessment.d.ts +196 -0
- package/dist/compliance/pseudonymization.d.ts +96 -0
- package/dist/compliance/query-firewall.d.ts +661 -0
- package/dist/compliance/rate-limiter.d.ts +203 -0
- package/dist/compliance/right-to-erasure.d.ts +96 -0
- package/dist/compliance/row-level-security.d.ts +152 -0
- package/dist/compliance/security-decorator.d.ts +388 -0
- package/dist/compliance/security-monitor.d.ts +170 -0
- package/dist/compliance/sensitive-data-discovery.d.ts +151 -0
- package/dist/compliance/session-isolation.d.ts +286 -0
- package/dist/compliance/tls-enforcer.d.ts +51 -0
- package/dist/compliance/worm-storage.d.ts +225 -0
- package/dist/connection-manager.d.ts +130 -0
- package/dist/connection-pool.d.ts +311 -0
- package/dist/decorators/audit.d.ts +49 -0
- package/dist/decorators/check.d.ts +218 -0
- package/dist/decorators/collate.d.ts +346 -0
- package/dist/decorators/comment.d.ts +51 -0
- package/dist/decorators/database-settings.d.ts +193 -0
- package/dist/decorators/default.d.ts +148 -0
- package/dist/decorators/encryption.d.ts +175 -0
- package/dist/decorators/engine.d.ts +97 -0
- package/dist/decorators/fk-constraints.d.ts +387 -0
- package/dist/decorators/foreign-table.d.ts +57 -0
- package/dist/decorators/generated.d.ts +232 -0
- package/dist/decorators/hstore.d.ts +96 -0
- package/dist/decorators/index.d.ts +57 -0
- package/dist/decorators/index.js +14 -30
- package/dist/decorators/json-column.d.ts +47 -0
- package/dist/decorators/jsonb.d.ts +83 -0
- package/dist/decorators/orm-decorators.d.ts +274 -0
- package/dist/decorators/permissions.d.ts +192 -0
- package/dist/decorators/procedure.d.ts +168 -0
- package/dist/decorators/procedure.js +31 -7
- package/dist/decorators/query-options.d.ts +527 -0
- package/dist/decorators/range.d.ts +122 -0
- package/dist/decorators/set-column.d.ts +43 -0
- package/dist/decorators/spatial.d.ts +60 -0
- package/dist/decorators/storage.d.ts +561 -0
- package/dist/decorators/timezone.d.ts +319 -0
- package/dist/decorators/trigger.d.ts +50 -0
- package/dist/decorators/uuid.d.ts +102 -0
- package/dist/decorators/view.d.ts +213 -0
- package/dist/diagrams/chen-diagram.d.ts +70 -0
- package/dist/diagrams/chen-diagram.js +33 -31
- package/dist/diagrams/class-diagram.d.ts +78 -0
- package/dist/diagrams/class-diagram.js +23 -27
- package/dist/diagrams/dependency-diagram.d.ts +82 -0
- package/dist/diagrams/dependency-diagram.js +18 -9
- package/dist/diagrams/er-diagram.d.ts +82 -0
- package/dist/diagrams/er-diagram.js +174 -231
- package/dist/diagrams/flow-diagram.d.ts +70 -0
- package/dist/diagrams/flow-diagram.js +23 -18
- package/dist/diagrams/gantt-diagram.d.ts +67 -0
- package/dist/diagrams/gantt-diagram.js +20 -18
- package/dist/diagrams/index-diagram.d.ts +61 -0
- package/dist/diagrams/index-diagram.js +36 -31
- package/dist/diagrams/index.d.ts +155 -0
- package/dist/diagrams/index.js +7 -1
- package/dist/diagrams/migration-diagram.d.ts +67 -0
- package/dist/diagrams/migration-diagram.js +45 -57
- package/dist/diagrams/model-diagram.d.ts +85 -0
- package/dist/diagrams/model-diagram.js +225 -287
- package/dist/diagrams/package-diagram.d.ts +69 -0
- package/dist/diagrams/package-diagram.js +30 -32
- package/dist/diagrams/palette.d.ts +138 -0
- package/dist/diagrams/palette.js +134 -25
- package/dist/diagrams/relational-diagram.d.ts +82 -0
- package/dist/diagrams/relational-diagram.js +51 -59
- package/dist/diagrams/schemadoc-diagram.d.ts +57 -0
- package/dist/diagrams/schemadoc-diagram.js +36 -28
- package/dist/diagrams/sequence-diagram.d.ts +61 -0
- package/dist/diagrams/sequence-diagram.js +20 -11
- package/dist/diagrams/state-diagram.d.ts +85 -0
- package/dist/diagrams/state-diagram.js +21 -17
- package/dist/diagrams/svg-dom.d.ts +62 -0
- package/dist/diagrams/svg-dom.js +11 -0
- package/dist/diagrams/tree-diagram.d.ts +47 -0
- package/dist/diagrams/tree-diagram.js +19 -10
- package/dist/dialects/clickhouse/index.d.ts +660 -0
- package/dist/dialects/clickhouse/index.js +107 -2
- package/dist/dialects/cockroachdb/index.d.ts +1708 -0
- package/dist/dialects/cockroachdb/index.js +139 -10
- package/dist/dialects/cratedb/index.d.ts +262 -0
- package/dist/dialects/cratedb/index.js +148 -0
- package/dist/dialects/databricks/index.d.ts +397 -0
- package/dist/dialects/databricks/index.js +233 -11
- package/dist/dialects/db2/index.d.ts +729 -0
- package/dist/dialects/db2/index.js +152 -2
- package/dist/dialects/dialect.d.ts +1653 -0
- package/dist/dialects/duckdb/index.d.ts +440 -0
- package/dist/dialects/duckdb/index.js +21 -37
- package/dist/dialects/exasol/index.d.ts +197 -0
- package/dist/dialects/exasol/index.js +14 -0
- package/dist/dialects/firebird/index.d.ts +286 -0
- package/dist/dialects/firebird/index.js +135 -0
- package/dist/dialects/greenplum/index.d.ts +336 -0
- package/dist/dialects/greenplum/index.js +168 -0
- package/dist/dialects/hana/index.d.ts +512 -0
- package/dist/dialects/hana/index.js +17 -35
- package/dist/dialects/mariadb/index.d.ts +1241 -0
- package/dist/dialects/mariadb/index.js +181 -43
- package/dist/dialects/mssql/index.d.ts +729 -0
- package/dist/dialects/mssql/index.js +76 -7
- package/dist/dialects/mysql/index.d.ts +1233 -0
- package/dist/dialects/mysql/index.js +87 -19
- package/dist/dialects/oracle/index.d.ts +1222 -0
- package/dist/dialects/oracle/index.js +210 -9
- package/dist/dialects/postgres/index.d.ts +1598 -0
- package/dist/dialects/postgres/index.js +34 -13
- package/dist/dialects/query-stream-helper.d.ts +58 -0
- package/dist/dialects/questdb/index.d.ts +430 -0
- package/dist/dialects/questdb/index.js +292 -0
- package/dist/dialects/redshift/index.d.ts +933 -0
- package/dist/dialects/redshift/index.js +17 -5
- package/dist/dialects/singlestore/index.d.ts +233 -0
- package/dist/dialects/singlestore/index.js +53 -0
- package/dist/dialects/snowflake/index.d.ts +727 -0
- package/dist/dialects/snowflake/index.js +154 -5
- package/dist/dialects/spanner/index.d.ts +660 -0
- package/dist/dialects/spanner/index.js +43 -21
- package/dist/dialects/sqlite/index.d.ts +1133 -0
- package/dist/dialects/sqlite/index.js +168 -30
- package/dist/dialects/tidb/index.d.ts +226 -0
- package/dist/dialects/tidb/index.js +10 -0
- package/dist/dialects/timescaledb/index.d.ts +286 -0
- package/dist/dialects/timescaledb/index.js +179 -0
- package/dist/dialects/trino/index.d.ts +230 -0
- package/dist/dialects/trino/index.js +85 -10
- package/dist/dialects/turso/index.d.ts +98 -0
- package/dist/dialects/turso/index.js +10 -0
- package/dist/dialects/vertica/index.d.ts +321 -0
- package/dist/dialects/vertica/index.js +161 -0
- package/dist/dialects/yugabytedb/index.d.ts +276 -0
- package/dist/dialects/yugabytedb/index.js +121 -0
- package/dist/errors/index.d.ts +378 -0
- package/dist/errors/index.js +29 -1
- package/dist/errors/utils.d.ts +53 -0
- package/dist/errors.d.ts +5 -0
- package/dist/extensions/catalog/cloud-warehouse-features.d.ts +27 -0
- package/dist/extensions/catalog/mssql-features.d.ts +20 -0
- package/dist/extensions/catalog/mysql-mariadb-plugins.d.ts +18 -0
- package/dist/extensions/catalog/oracle-db2-features.d.ts +17 -0
- package/dist/extensions/catalog/postgres-extensions.d.ts +15 -0
- package/dist/extensions/index.d.ts +34 -0
- package/dist/extensions/types.d.ts +43 -0
- package/dist/external-fields/adapters.d.ts +50 -0
- package/dist/external-fields/adapters.js +227 -0
- package/dist/external-fields/decorator.d.ts +77 -0
- package/dist/external-fields/decorator.js +80 -0
- package/dist/external-fields/index.d.ts +10 -0
- package/dist/external-fields/index.js +19 -0
- package/dist/external-fields/runtime.d.ts +39 -0
- package/dist/external-fields/runtime.js +221 -0
- package/dist/foreign-data.d.ts +168 -0
- package/dist/graph/base-graph-dialect.d.ts +250 -0
- package/dist/graph/base-graph-dialect.js +539 -0
- package/dist/graph/dgraph/index.d.ts +65 -0
- package/dist/graph/dgraph/index.js +559 -0
- package/dist/graph/gremlin/index.d.ts +59 -0
- package/dist/graph/gremlin/index.js +378 -0
- package/dist/graph/index.d.ts +60 -0
- package/dist/graph/index.js +67 -0
- package/dist/graph/neo4j/index.d.ts +50 -0
- package/dist/graph/neo4j/index.js +462 -0
- package/dist/graph/types.d.ts +213 -0
- package/dist/graph/types.js +234 -0
- package/dist/hooks/hooks-manager.d.ts +189 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/index.d.ts +713 -0
- package/dist/index.js +36 -4
- package/dist/logging.d.ts +183 -0
- package/dist/migrations/index.d.ts +9 -0
- package/dist/migrations/migration.d.ts +143 -0
- package/dist/migrations/migrator.d.ts +199 -0
- package/dist/migrations/prormmigration.d.ts +131 -0
- package/dist/migrations/query-interface.d.ts +335 -0
- package/dist/migrations/seeder.d.ts +167 -0
- package/dist/models/associations.d.ts +131 -0
- package/dist/models/associations.js +7 -2
- package/dist/models/constraints.d.ts +175 -0
- package/dist/models/data-types.d.ts +1656 -0
- package/dist/models/decorators.d.ts +328 -0
- package/dist/models/decorators.js +61 -82
- package/dist/models/eager-load.d.ts +86 -0
- package/dist/models/eager-load.js +369 -0
- package/dist/models/index.d.ts +13 -0
- package/dist/models/indexes.d.ts +325 -0
- package/dist/models/methods.d.ts +419 -0
- package/dist/models/model-manager.d.ts +76 -0
- package/dist/models/model.d.ts +820 -0
- package/dist/models/model.js +15 -101
- package/dist/models/operators.d.ts +29 -0
- package/dist/models/scopes.d.ts +71 -0
- package/dist/models/typescript-types.d.ts +177 -0
- package/dist/nosql/aerospike/index.d.ts +126 -0
- package/dist/nosql/allegrograph/index.d.ts +86 -0
- package/dist/nosql/arangodb/index.d.ts +285 -0
- package/dist/nosql/arangodb/index.js +274 -2
- package/dist/nosql/arangodb/where.d.ts +38 -0
- package/dist/nosql/arangodb/where.js +94 -0
- package/dist/nosql/azure-blob/index.d.ts +104 -0
- package/dist/nosql/beanstalkd/index.d.ts +88 -0
- package/dist/nosql/beequeue/index.d.ts +99 -0
- package/dist/nosql/bigchaindb/index.d.ts +113 -0
- package/dist/nosql/bigtable/index.d.ts +144 -0
- package/dist/nosql/blazegraph/index.d.ts +88 -0
- package/dist/nosql/bullmq/index.d.ts +83 -0
- package/dist/nosql/cassandra/index.d.ts +119 -0
- package/dist/nosql/chroma/index.d.ts +151 -0
- package/dist/nosql/cloudflare-kv/index.d.ts +120 -0
- package/dist/nosql/coherence/index.d.ts +91 -0
- package/dist/nosql/cosmosdb/index.d.ts +78 -0
- package/dist/nosql/couchbase/index.d.ts +103 -0
- package/dist/nosql/dax/index.d.ts +118 -0
- package/dist/nosql/deno-kv/index.d.ts +109 -0
- package/dist/nosql/dgraph/index.d.ts +80 -0
- package/dist/nosql/doris/index.d.ts +88 -0
- package/dist/nosql/druid/index.d.ts +95 -0
- package/dist/nosql/dynamodb/index.d.ts +643 -0
- package/dist/nosql/dynamodb/index.js +423 -0
- package/dist/nosql/elasticsearch/index.d.ts +239 -0
- package/dist/nosql/etcd/index.d.ts +243 -0
- package/dist/nosql/eventhubs/index.d.ts +89 -0
- package/dist/nosql/eventstore/index.d.ts +102 -0
- package/dist/nosql/faunadb/index.d.ts +141 -0
- package/dist/nosql/faunadb/index.js +329 -0
- package/dist/nosql/firestore/index.d.ts +67 -0
- package/dist/nosql/fluree/index.d.ts +88 -0
- package/dist/nosql/fuseki/index.d.ts +94 -0
- package/dist/nosql/gcs/index.d.ts +62 -0
- package/dist/nosql/gearman/index.d.ts +77 -0
- package/dist/nosql/geode/index.d.ts +93 -0
- package/dist/nosql/graphdb/index.d.ts +86 -0
- package/dist/nosql/graylog/index.d.ts +118 -0
- package/dist/nosql/gridgain/index.d.ts +78 -0
- package/dist/nosql/hazelcast/index.d.ts +73 -0
- package/dist/nosql/hbase/index.d.ts +123 -0
- package/dist/nosql/ignite/index.d.ts +80 -0
- package/dist/nosql/immudb/index.d.ts +131 -0
- package/dist/nosql/index.d.ts +215 -0
- package/dist/nosql/infinispan/index.d.ts +95 -0
- package/dist/nosql/influxdb/flux-compiler.d.ts +23 -0
- package/dist/nosql/influxdb/flux-compiler.js +170 -0
- package/dist/nosql/influxdb/index.d.ts +300 -0
- package/dist/nosql/influxdb/index.js +0 -0
- package/dist/nosql/kafka/index.d.ts +113 -0
- package/dist/nosql/keyspaces/index.d.ts +122 -0
- package/dist/nosql/kinesis/index.d.ts +121 -0
- package/dist/nosql/leveldb/index.d.ts +112 -0
- package/dist/nosql/leveldb/index.js +103 -1
- package/dist/nosql/lmdb/index.d.ts +76 -0
- package/dist/nosql/loki/index.d.ts +126 -0
- package/dist/nosql/marklogic/index.d.ts +76 -0
- package/dist/nosql/materialize/index.d.ts +91 -0
- package/dist/nosql/meilisearch/index.d.ts +76 -0
- package/dist/nosql/memcached/index.d.ts +138 -0
- package/dist/nosql/milvus/index.d.ts +167 -0
- package/dist/nosql/minio/index.d.ts +122 -0
- package/dist/nosql/momento/index.d.ts +99 -0
- package/dist/nosql/mongodb/index.d.ts +265 -0
- package/dist/nosql/mongodb/index.js +139 -0
- package/dist/nosql/mongodb/where.d.ts +8 -0
- package/dist/nosql/mongodb/where.js +181 -0
- package/dist/nosql/nats/index.d.ts +139 -0
- package/dist/nosql/nedb/index.d.ts +79 -0
- package/dist/nosql/neo4j/index.d.ts +217 -0
- package/dist/nosql/neo4j/index.js +26 -14
- package/dist/nosql/neptune/index.d.ts +234 -0
- package/dist/nosql/neptune/index.js +23 -9
- package/dist/nosql/nsq/index.d.ts +93 -0
- package/dist/nosql/opensearch/index.d.ts +97 -0
- package/dist/nosql/orientdb/index.d.ts +72 -0
- package/dist/nosql/papertrail/index.d.ts +120 -0
- package/dist/nosql/pinecone/index.d.ts +148 -0
- package/dist/nosql/pinot/index.d.ts +90 -0
- package/dist/nosql/pouchdb/index.d.ts +95 -0
- package/dist/nosql/prometheus/index.d.ts +112 -0
- package/dist/nosql/provendb/index.d.ts +143 -0
- package/dist/nosql/provendb/index.js +262 -0
- package/dist/nosql/pubsub/index.d.ts +83 -0
- package/dist/nosql/pulsar/index.d.ts +105 -0
- package/dist/nosql/qdrant/index.d.ts +231 -0
- package/dist/nosql/qldb/index.d.ts +182 -0
- package/dist/nosql/qldb/index.js +302 -1
- package/dist/nosql/r2/index.d.ts +160 -0
- package/dist/nosql/rabbitmq/index.d.ts +131 -0
- package/dist/nosql/ravendb/index.d.ts +138 -0
- package/dist/nosql/ravendb/index.js +323 -9
- package/dist/nosql/ravendb/where.d.ts +38 -0
- package/dist/nosql/ravendb/where.js +94 -0
- package/dist/nosql/redis/index.d.ts +267 -0
- package/dist/nosql/redis/index.js +19 -5
- package/dist/nosql/redpanda/index.d.ts +117 -0
- package/dist/nosql/resque/index.d.ts +91 -0
- package/dist/nosql/rethinkdb/index.d.ts +194 -0
- package/dist/nosql/rethinkdb/index.js +290 -0
- package/dist/nosql/rethinkdb/where.d.ts +38 -0
- package/dist/nosql/rethinkdb/where.js +94 -0
- package/dist/nosql/rocksdb/document-layer.d.ts +162 -0
- package/dist/nosql/rocksdb/document-layer.js +338 -0
- package/dist/nosql/rocksdb/index.d.ts +112 -0
- package/dist/nosql/rocksdb/index.js +103 -1
- package/dist/nosql/rocksdb/where-match.d.ts +21 -0
- package/dist/nosql/rocksdb/where-match.js +238 -0
- package/dist/nosql/rockset/index.d.ts +84 -0
- package/dist/nosql/s3/index.d.ts +170 -0
- package/dist/nosql/scylladb/index.d.ts +117 -0
- package/dist/nosql/signoz/index.d.ts +116 -0
- package/dist/nosql/sns/index.d.ts +99 -0
- package/dist/nosql/solr/index.d.ts +129 -0
- package/dist/nosql/splunk/index.d.ts +125 -0
- package/dist/nosql/sqs/index.d.ts +116 -0
- package/dist/nosql/stardog/index.d.ts +86 -0
- package/dist/nosql/starrocks/index.d.ts +89 -0
- package/dist/nosql/store.d.ts +23 -0
- package/dist/nosql/sumologic/index.d.ts +119 -0
- package/dist/nosql/surrealdb/index.d.ts +156 -0
- package/dist/nosql/surrealdb/index.js +174 -1
- package/dist/nosql/surrealdb/query-compiler.d.ts +26 -0
- package/dist/nosql/surrealdb/query-compiler.js +193 -0
- package/dist/nosql/terminusdb/index.d.ts +95 -0
- package/dist/nosql/tigergraph/index.d.ts +314 -0
- package/dist/nosql/typesense/index.d.ts +82 -0
- package/dist/nosql/unqlite/index.d.ts +68 -0
- package/dist/nosql/upstash/index.d.ts +80 -0
- package/dist/nosql/vercel-kv/index.d.ts +82 -0
- package/dist/nosql/victoriametrics/index.d.ts +129 -0
- package/dist/nosql/virtuoso/index.d.ts +87 -0
- package/dist/nosql/weaviate/index.d.ts +196 -0
- package/dist/operators/index.d.ts +7 -0
- package/dist/operators.d.ts +2947 -0
- package/dist/operators.js +46 -1
- package/dist/prisma-migrate/index.d.ts +28 -0
- package/dist/prisma-migrate/migration-generator.d.ts +21 -0
- package/dist/prisma-migrate/model-generator.d.ts +12 -0
- package/dist/prisma-migrate/relations.d.ts +28 -0
- package/dist/prisma-migrate/schema-parser.d.ts +42 -0
- package/dist/prisma-migrate/type-mapper.d.ts +20 -0
- package/dist/prorm.d.ts +2093 -0
- package/dist/prorm.js +721 -302
- package/dist/query-builders/cte-builder.d.ts +104 -0
- package/dist/query-builders/functions/aggregate.d.ts +199 -0
- package/dist/query-builders/functions/conditional.d.ts +195 -0
- package/dist/query-builders/functions/datetime.d.ts +202 -0
- package/dist/query-builders/functions/fulltext.d.ts +220 -0
- package/dist/query-builders/functions/index.d.ts +17 -0
- package/dist/query-builders/functions/json.d.ts +157 -0
- package/dist/query-builders/functions/math.d.ts +215 -0
- package/dist/query-builders/functions/string.d.ts +233 -0
- package/dist/query-builders/functions/window.d.ts +209 -0
- package/dist/query-builders/include-builder.d.ts +85 -0
- package/dist/query-builders/index-expression-builder.d.ts +153 -0
- package/dist/query-builders/index.d.ts +121 -0
- package/dist/query-builders/index.js +10 -0
- package/dist/query-builders/insert-builder.d.ts +62 -0
- package/dist/query-builders/model-helpers.d.ts +28 -0
- package/dist/query-builders/order-limit-builder.d.ts +84 -0
- package/dist/query-builders/sql-compiler.d.ts +562 -0
- package/dist/query-builders/subquery-builder.d.ts +133 -0
- package/dist/query-builders/update-builder.d.ts +71 -0
- package/dist/query-builders/view-builder.d.ts +189 -0
- package/dist/query-builders/where-builder.d.ts +124 -0
- package/dist/query-interface.d.ts +407 -0
- package/dist/query-interface.js +84 -0
- package/dist/query-optimizers/batch-optimizer.d.ts +175 -0
- package/dist/query-optimizers/explain-plans.d.ts +187 -0
- package/dist/query-optimizers/index.d.ts +27 -0
- package/dist/query-optimizers/prepared-statement-cache.d.ts +252 -0
- package/dist/query-optimizers/query-hints.d.ts +201 -0
- package/dist/query-optimizers/query-optimizer.d.ts +162 -0
- package/dist/query-optimizers/slow-query-logger.d.ts +186 -0
- package/dist/replica-manager.d.ts +235 -0
- package/dist/schema/index.d.ts +7 -0
- package/dist/schema/migration-generator.d.ts +74 -0
- package/dist/schema/schema-differ.d.ts +114 -0
- package/dist/schema/types.d.ts +246 -0
- package/dist/schema-objects.d.ts +78 -0
- package/dist/schema-objects.js +203 -0
- package/dist/sql-constants.d.ts +240 -0
- package/dist/sqlite-advanced.d.ts +572 -0
- package/dist/streams/index.d.ts +5 -0
- package/dist/streams/transforms.d.ts +120 -0
- package/dist/transaction.d.ts +221 -0
- package/dist/types/index.d.ts +3123 -0
- package/dist/user-management.d.ts +141 -0
- package/dist/utils/date.d.ts +149 -0
- package/dist/utils/index.d.ts +359 -0
- package/dist/utils/string.d.ts +88 -0
- package/dist/validators/index.d.ts +7 -0
- package/dist/validators/validator.d.ts +306 -0
- package/package.json +20 -5
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared eager-loading (`include`) implementation.
|
|
4
|
+
*
|
|
5
|
+
* There used to be two separate implementations of this: one inside
|
|
6
|
+
* `Prorm.define()`'s `findAll` closure (used by models created with
|
|
7
|
+
* `prorm.define(...)`) and one in `models/model.ts` (`processNestedIncludes`,
|
|
8
|
+
* used by the class-based `Model` API). Both were live, and they had drifted:
|
|
9
|
+
* the model.ts copy treated `belongsTo` exactly like `hasMany` - querying the
|
|
10
|
+
* target table for a foreign key that actually lives on the parent - and
|
|
11
|
+
* skipped `belongsToMany` entirely with a bare `continue`. Which of the two
|
|
12
|
+
* bugs you hit depended on which API you had used to define the model.
|
|
13
|
+
*
|
|
14
|
+
* Both paths now call `loadIncludes()` below.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.resolvePrimaryKeyAttr = resolvePrimaryKeyAttr;
|
|
18
|
+
exports.resolveIncludeAssociation = resolveIncludeAssociation;
|
|
19
|
+
exports.includeFiltersParents = includeFiltersParents;
|
|
20
|
+
exports.resolveRequiredIncludeFilter = resolveRequiredIncludeFilter;
|
|
21
|
+
exports.loadIncludes = loadIncludes;
|
|
22
|
+
const errors_1 = require("../errors");
|
|
23
|
+
/** Resolve a model's primary key attribute name, defaulting to `id`. */
|
|
24
|
+
function resolvePrimaryKeyAttr(m) {
|
|
25
|
+
const attrs = m?.rawAttributes || m?.attributes;
|
|
26
|
+
if (attrs) {
|
|
27
|
+
for (const [attrName, attr] of Object.entries(attrs)) {
|
|
28
|
+
if (attr?.primaryKey)
|
|
29
|
+
return attrName;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return 'id';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Read a field from a row that may be a plain object or a model instance.
|
|
36
|
+
*/
|
|
37
|
+
function readField(row, field) {
|
|
38
|
+
if (row == null)
|
|
39
|
+
return undefined;
|
|
40
|
+
if (typeof row.getDataValue === 'function') {
|
|
41
|
+
const v = row.getDataValue(field);
|
|
42
|
+
if (v !== undefined)
|
|
43
|
+
return v;
|
|
44
|
+
}
|
|
45
|
+
if (row.dataValues && field in row.dataValues)
|
|
46
|
+
return row.dataValues[field];
|
|
47
|
+
return row[field];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Attach a loaded association to a row, keeping the instance's `dataValues`
|
|
51
|
+
* in sync so both `row.posts` and `row.getDataValue('posts')` see it.
|
|
52
|
+
*/
|
|
53
|
+
function attachField(row, field, value) {
|
|
54
|
+
row[field] = value;
|
|
55
|
+
if (row?.dataValues)
|
|
56
|
+
row.dataValues[field] = value;
|
|
57
|
+
if (typeof row?.setDataValue === 'function') {
|
|
58
|
+
try {
|
|
59
|
+
row.setDataValue(field, value);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
/* instances with a frozen attribute set still get the plain property above */
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function lowerFirst(name) {
|
|
67
|
+
return name ? name.charAt(0).toLowerCase() + name.slice(1) : name;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Normalize the two accepted include shapes: `{ model: Post, as: 'posts' }`
|
|
71
|
+
* and the bare-model shorthand `Post`.
|
|
72
|
+
*/
|
|
73
|
+
function normalizeInclude(rawIncludeOpt) {
|
|
74
|
+
return rawIncludeOpt && !rawIncludeOpt.model && rawIncludeOpt.rawAttributes
|
|
75
|
+
? { model: rawIncludeOpt }
|
|
76
|
+
: rawIncludeOpt;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Find the association backing one `include` entry.
|
|
80
|
+
*
|
|
81
|
+
* Matching is deliberately strict about aliases. The previous implementation
|
|
82
|
+
* scanned for any association linking the two models and took the first hit,
|
|
83
|
+
* with a second pass that also matched the *reverse* direction - so with both
|
|
84
|
+
* `Post.belongsTo(User, { as: 'author' })` and
|
|
85
|
+
* `Post.belongsTo(User, { as: 'editor' })` declared, an unaliased
|
|
86
|
+
* `include: [User]` silently bound to whichever was registered first, and could
|
|
87
|
+
* bind to an association pointing the other way and then apply the wrong
|
|
88
|
+
* foreign-key logic to it.
|
|
89
|
+
*/
|
|
90
|
+
function resolveIncludeAssociation(ctx, parentModel, parentModelName, includeOpt) {
|
|
91
|
+
const includeModel = includeOpt.model;
|
|
92
|
+
const wantedAlias = includeOpt.as;
|
|
93
|
+
const matches = [];
|
|
94
|
+
for (const assoc of ctx.associations) {
|
|
95
|
+
const sourceMatch = assoc.source === parentModel || assoc.source?.name === parentModelName;
|
|
96
|
+
if (!sourceMatch)
|
|
97
|
+
continue;
|
|
98
|
+
const targetMatch = assoc.target === includeModel || assoc.target?.name === includeModel?.name;
|
|
99
|
+
if (!targetMatch)
|
|
100
|
+
continue;
|
|
101
|
+
matches.push(assoc);
|
|
102
|
+
}
|
|
103
|
+
if (wantedAlias) {
|
|
104
|
+
// Compare against the association's effective alias - `assoc.as` - which is
|
|
105
|
+
// what the result is attached under. The old code compared `options.as`,
|
|
106
|
+
// which is undefined whenever the alias was derived rather than passed.
|
|
107
|
+
const byAlias = matches.filter((a) => (a.as ?? a.options?.as) === wantedAlias);
|
|
108
|
+
if (byAlias.length === 1)
|
|
109
|
+
return byAlias[0];
|
|
110
|
+
if (byAlias.length === 0) {
|
|
111
|
+
const available = matches.map((a) => a.as).filter(Boolean);
|
|
112
|
+
throw new errors_1.AssociationError(`${parentModelName} has no association to ${includeModel?.name} aliased '${wantedAlias}'` +
|
|
113
|
+
(available.length ? `. Available: ${available.join(', ')}` : ''), { association: wantedAlias });
|
|
114
|
+
}
|
|
115
|
+
return byAlias[0];
|
|
116
|
+
}
|
|
117
|
+
if (matches.length === 0) {
|
|
118
|
+
throw new errors_1.AssociationError(`${parentModelName} has no association to ${includeModel?.name}. ` +
|
|
119
|
+
`Declare one with ${parentModelName}.hasMany(${includeModel?.name}) / .belongsTo(...) ` +
|
|
120
|
+
`before including it.`, { association: includeModel?.name });
|
|
121
|
+
}
|
|
122
|
+
if (matches.length > 1) {
|
|
123
|
+
const aliases = matches.map((a) => a.as).filter(Boolean);
|
|
124
|
+
throw new errors_1.AssociationError(`${parentModelName} has ${matches.length} associations to ${includeModel?.name} ` +
|
|
125
|
+
`(${aliases.join(', ')}). Disambiguate with \`include: [{ model: ${includeModel?.name}, ` +
|
|
126
|
+
`as: '${aliases[0]}' }]\`.`, { association: includeModel?.name });
|
|
127
|
+
}
|
|
128
|
+
return matches[0];
|
|
129
|
+
}
|
|
130
|
+
/** Resolve a `through` given as a string against the model registry. */
|
|
131
|
+
function resolveThroughModel(ctx, assoc) {
|
|
132
|
+
if (assoc.throughModel && typeof assoc.throughModel.findAll === 'function') {
|
|
133
|
+
return assoc.throughModel;
|
|
134
|
+
}
|
|
135
|
+
const wanted = assoc.through;
|
|
136
|
+
if (!wanted)
|
|
137
|
+
return assoc.throughModel;
|
|
138
|
+
const all = ctx.models instanceof Map ? Array.from(ctx.models.values()) : Object.values(ctx.models || {});
|
|
139
|
+
for (const m of all) {
|
|
140
|
+
if (m?.tableName === wanted || m?.name === wanted)
|
|
141
|
+
return m;
|
|
142
|
+
}
|
|
143
|
+
return assoc.throughModel;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* An include filters its parents when it is `required`, and `required` defaults
|
|
147
|
+
* to true whenever the include carries its own `where` - the same rule Sequelize
|
|
148
|
+
* uses, and the one the docs describe as INNER JOIN semantics.
|
|
149
|
+
*/
|
|
150
|
+
function includeFiltersParents(includeOpt) {
|
|
151
|
+
if (includeOpt.required === true)
|
|
152
|
+
return true;
|
|
153
|
+
if (includeOpt.required === false)
|
|
154
|
+
return false;
|
|
155
|
+
return includeOpt.where !== undefined && includeOpt.where !== null;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Collect the parent-key values that satisfy a filtering (`required`) include.
|
|
159
|
+
*
|
|
160
|
+
* This is what gives `required: true` and `include.where` their INNER JOIN
|
|
161
|
+
* *semantics*: the set of parent keys with a matching child is resolved first,
|
|
162
|
+
* and the caller adds it to the main query's WHERE so that LIMIT/OFFSET apply
|
|
163
|
+
* after filtering rather than before. `include` still does not emit a single
|
|
164
|
+
* JOINed SELECT - associations are fetched with their own queries - but the
|
|
165
|
+
* rows a filtering include selects are now correct.
|
|
166
|
+
*
|
|
167
|
+
* Returns the list of matching parent key values, plus the parent attribute
|
|
168
|
+
* those values should be compared against.
|
|
169
|
+
*/
|
|
170
|
+
async function resolveRequiredIncludeFilter(ctx, parentModel, parentModelName, rawIncludeOpt) {
|
|
171
|
+
const includeOpt = normalizeInclude(rawIncludeOpt);
|
|
172
|
+
if (!includeOpt?.model || !includeFiltersParents(includeOpt))
|
|
173
|
+
return null;
|
|
174
|
+
const assoc = resolveIncludeAssociation(ctx, parentModel, parentModelName, includeOpt);
|
|
175
|
+
const includeModel = includeOpt.model;
|
|
176
|
+
const foreignKey = assoc.foreignKey;
|
|
177
|
+
const sourcePkAttr = resolvePrimaryKeyAttr(parentModel);
|
|
178
|
+
const targetPkAttr = resolvePrimaryKeyAttr(includeModel);
|
|
179
|
+
// Nested required includes constrain their own parent first, so that
|
|
180
|
+
// `include: [{ model: Post, required: true, include: [{ model: Tag, required: true }] }]`
|
|
181
|
+
// keeps only users whose posts have tags.
|
|
182
|
+
const nestedWhere = {
|
|
183
|
+
...(assoc.options?.scope || {}),
|
|
184
|
+
...(includeOpt.where || {}),
|
|
185
|
+
};
|
|
186
|
+
for (const nested of includeOpt.include || []) {
|
|
187
|
+
const nestedFilter = await resolveRequiredIncludeFilter(ctx, includeModel, includeModel.name, nested);
|
|
188
|
+
if (nestedFilter) {
|
|
189
|
+
if (nestedFilter.values.length === 0)
|
|
190
|
+
return { parentAttr: sourcePkAttr, values: [] };
|
|
191
|
+
nestedWhere[nestedFilter.parentAttr] = { $in: nestedFilter.values };
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (assoc.type === 'belongsTo') {
|
|
195
|
+
// Parent holds the FK; keep parents whose referenced target matches.
|
|
196
|
+
const targetRows = await includeModel.findAll({ where: nestedWhere });
|
|
197
|
+
const ids = targetRows
|
|
198
|
+
.map((r) => readField(r, targetPkAttr))
|
|
199
|
+
.filter((v) => v !== undefined && v !== null);
|
|
200
|
+
return { parentAttr: foreignKey, values: ids };
|
|
201
|
+
}
|
|
202
|
+
if (assoc.type === 'belongsToMany') {
|
|
203
|
+
const throughModel = resolveThroughModel(ctx, assoc);
|
|
204
|
+
if (!throughModel || typeof throughModel.findAll !== 'function') {
|
|
205
|
+
throw new errors_1.AssociationError(`Cannot resolve through model for belongsToMany association '${assoc.as}'`, { association: assoc.as });
|
|
206
|
+
}
|
|
207
|
+
const otherKey = assoc.otherKey || `${lowerFirst(includeModel.name)}Id`;
|
|
208
|
+
const targetRows = await includeModel.findAll({ where: nestedWhere });
|
|
209
|
+
const targetIds = targetRows
|
|
210
|
+
.map((r) => readField(r, targetPkAttr))
|
|
211
|
+
.filter((v) => v !== undefined && v !== null);
|
|
212
|
+
if (targetIds.length === 0)
|
|
213
|
+
return { parentAttr: sourcePkAttr, values: [] };
|
|
214
|
+
const junctionRows = await throughModel.findAll({
|
|
215
|
+
where: { [otherKey]: { $in: targetIds } },
|
|
216
|
+
});
|
|
217
|
+
const parentIds = Array.from(new Set(junctionRows
|
|
218
|
+
.map((r) => readField(r, foreignKey))
|
|
219
|
+
.filter((v) => v !== undefined && v !== null)));
|
|
220
|
+
return { parentAttr: sourcePkAttr, values: parentIds };
|
|
221
|
+
}
|
|
222
|
+
// hasOne / hasMany: FK lives on the target, pointing back at the parent.
|
|
223
|
+
const childRows = await includeModel.findAll({ where: nestedWhere });
|
|
224
|
+
const parentIds = Array.from(new Set(childRows
|
|
225
|
+
.map((r) => readField(r, foreignKey))
|
|
226
|
+
.filter((v) => v !== undefined && v !== null)));
|
|
227
|
+
return { parentAttr: sourcePkAttr, values: parentIds };
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Eager-load `includeList` onto `parentRows`, recursing into nested includes.
|
|
231
|
+
*
|
|
232
|
+
* Failures are raised as `EagerLoadError` rather than swallowed. They used to be
|
|
233
|
+
* caught and reported as an empty result, which made a typo'd alias, a missing
|
|
234
|
+
* foreign key column, an unresolvable through model and a genuinely childless
|
|
235
|
+
* parent all look identical - and hid most of the bugs this module now fixes.
|
|
236
|
+
*/
|
|
237
|
+
async function loadIncludes(ctx, parentRows, parentModel, parentModelName, includeList) {
|
|
238
|
+
if (!parentRows.length || !includeList?.length)
|
|
239
|
+
return;
|
|
240
|
+
for (const rawIncludeOpt of includeList) {
|
|
241
|
+
const includeOpt = normalizeInclude(rawIncludeOpt);
|
|
242
|
+
const includeModel = includeOpt?.model;
|
|
243
|
+
if (!includeModel)
|
|
244
|
+
continue;
|
|
245
|
+
// Resolve the association outside the try so that a genuinely bad include
|
|
246
|
+
// (unknown or ambiguous association) surfaces as an AssociationError with a
|
|
247
|
+
// fix in the message, rather than being wrapped as a load failure.
|
|
248
|
+
const assoc = resolveIncludeAssociation(ctx, parentModel, parentModelName, includeOpt);
|
|
249
|
+
const includeAlias = includeOpt.as || assoc.as || includeModel.tableName || includeModel.name;
|
|
250
|
+
const associationType = assoc.type;
|
|
251
|
+
const foreignKey = assoc.foreignKey;
|
|
252
|
+
const sourcePkAttr = resolvePrimaryKeyAttr(parentModel);
|
|
253
|
+
const targetPkAttr = resolvePrimaryKeyAttr(includeModel);
|
|
254
|
+
let fetchedRows = [];
|
|
255
|
+
try {
|
|
256
|
+
// An association `scope` is a fixed set of conditions applied every time
|
|
257
|
+
// the association is traversed. It was accepted by the options type and
|
|
258
|
+
// documented, but never applied by the loader. The include's own `where`
|
|
259
|
+
// wins on conflict so a caller can still narrow further.
|
|
260
|
+
const includeWhere = {
|
|
261
|
+
...(assoc.options?.scope || {}),
|
|
262
|
+
...(includeOpt.where || {}),
|
|
263
|
+
};
|
|
264
|
+
const passThrough = {
|
|
265
|
+
...(includeOpt.attributes ? { attributes: includeOpt.attributes } : {}),
|
|
266
|
+
...(includeOpt.order ? { order: includeOpt.order } : {}),
|
|
267
|
+
};
|
|
268
|
+
if (associationType === 'belongsTo') {
|
|
269
|
+
// The foreign key is a column on the parent, referencing the target's key.
|
|
270
|
+
const fkValues = parentRows
|
|
271
|
+
.map((r) => readField(r, foreignKey))
|
|
272
|
+
.filter((v) => v !== undefined && v !== null);
|
|
273
|
+
if (fkValues.length === 0) {
|
|
274
|
+
for (const row of parentRows)
|
|
275
|
+
attachField(row, includeAlias, null);
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
const targetRows = await includeModel.findAll({
|
|
279
|
+
where: { ...includeWhere, [targetPkAttr]: { $in: fkValues } },
|
|
280
|
+
...passThrough,
|
|
281
|
+
});
|
|
282
|
+
fetchedRows = targetRows;
|
|
283
|
+
const targetMap = new Map();
|
|
284
|
+
for (const tr of targetRows)
|
|
285
|
+
targetMap.set(readField(tr, targetPkAttr), tr);
|
|
286
|
+
for (const row of parentRows) {
|
|
287
|
+
const fkVal = readField(row, foreignKey);
|
|
288
|
+
attachField(row, includeAlias, fkVal !== undefined && fkVal !== null ? targetMap.get(fkVal) ?? null : null);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
else if (associationType === 'belongsToMany') {
|
|
292
|
+
const throughModel = resolveThroughModel(ctx, assoc);
|
|
293
|
+
if (!throughModel || typeof throughModel.findAll !== 'function') {
|
|
294
|
+
throw new Error(`Cannot resolve through model for belongsToMany include '${includeAlias}'`);
|
|
295
|
+
}
|
|
296
|
+
const otherKey = assoc.otherKey || `${lowerFirst(includeModel.name)}Id`;
|
|
297
|
+
const mainPks = parentRows
|
|
298
|
+
.map((r) => readField(r, sourcePkAttr))
|
|
299
|
+
.filter((v) => v !== undefined && v !== null);
|
|
300
|
+
if (mainPks.length === 0)
|
|
301
|
+
continue;
|
|
302
|
+
const junctionRows = await throughModel.findAll({
|
|
303
|
+
where: { [foreignKey]: { $in: mainPks } },
|
|
304
|
+
});
|
|
305
|
+
const targetIdsBySource = new Map();
|
|
306
|
+
const allTargetIds = [];
|
|
307
|
+
for (const jr of junctionRows) {
|
|
308
|
+
const srcVal = readField(jr, foreignKey);
|
|
309
|
+
const tgtVal = readField(jr, otherKey);
|
|
310
|
+
if (tgtVal === undefined || tgtVal === null)
|
|
311
|
+
continue;
|
|
312
|
+
if (!targetIdsBySource.has(srcVal))
|
|
313
|
+
targetIdsBySource.set(srcVal, []);
|
|
314
|
+
targetIdsBySource.get(srcVal).push(tgtVal);
|
|
315
|
+
allTargetIds.push(tgtVal);
|
|
316
|
+
}
|
|
317
|
+
if (allTargetIds.length === 0) {
|
|
318
|
+
for (const row of parentRows)
|
|
319
|
+
attachField(row, includeAlias, []);
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
const targetRows = await includeModel.findAll({
|
|
323
|
+
where: { ...includeWhere, [targetPkAttr]: { $in: allTargetIds } },
|
|
324
|
+
...passThrough,
|
|
325
|
+
});
|
|
326
|
+
fetchedRows = targetRows;
|
|
327
|
+
const targetMap = new Map();
|
|
328
|
+
for (const tr of targetRows)
|
|
329
|
+
targetMap.set(readField(tr, targetPkAttr), tr);
|
|
330
|
+
for (const row of parentRows) {
|
|
331
|
+
const targetIds = targetIdsBySource.get(readField(row, sourcePkAttr)) || [];
|
|
332
|
+
attachField(row, includeAlias, targetIds.map((tid) => targetMap.get(tid)).filter((v) => v !== undefined));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
// hasOne / hasMany: the foreign key is a column on the target table.
|
|
337
|
+
const mainPks = parentRows
|
|
338
|
+
.map((r) => readField(r, sourcePkAttr))
|
|
339
|
+
.filter((v) => v !== undefined && v !== null);
|
|
340
|
+
if (mainPks.length === 0)
|
|
341
|
+
continue;
|
|
342
|
+
includeWhere[foreignKey] = { $in: mainPks };
|
|
343
|
+
const assocRows = await includeModel.findAll({ where: includeWhere, ...passThrough });
|
|
344
|
+
fetchedRows = assocRows;
|
|
345
|
+
const groupedRows = new Map();
|
|
346
|
+
for (const ar of assocRows) {
|
|
347
|
+
const fkVal = readField(ar, foreignKey);
|
|
348
|
+
if (!groupedRows.has(fkVal))
|
|
349
|
+
groupedRows.set(fkVal, []);
|
|
350
|
+
groupedRows.get(fkVal).push(ar);
|
|
351
|
+
}
|
|
352
|
+
for (const row of parentRows) {
|
|
353
|
+
const associated = groupedRows.get(readField(row, sourcePkAttr)) || [];
|
|
354
|
+
attachField(row, includeAlias, associationType === 'hasOne' ? associated[0] ?? null : associated);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// Recurse, treating the rows just fetched as the parents for the next level.
|
|
358
|
+
const nestedIncludes = includeOpt.include;
|
|
359
|
+
if (nestedIncludes?.length && fetchedRows.length > 0) {
|
|
360
|
+
await loadIncludes(ctx, fetchedRows, includeModel, includeModel.name, nestedIncludes);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
if (error instanceof errors_1.EagerLoadError || error instanceof errors_1.AssociationError)
|
|
365
|
+
throw error;
|
|
366
|
+
throw new errors_1.EagerLoadError(parentModelName, includeAlias, associationType, error);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Models module exports
|
|
3
|
+
*/
|
|
4
|
+
export * from './data-types';
|
|
5
|
+
export * from './operators';
|
|
6
|
+
export * from './model';
|
|
7
|
+
export * from './associations';
|
|
8
|
+
export * from './scopes';
|
|
9
|
+
export { ModelManager } from './model-manager';
|
|
10
|
+
export * from './scopes';
|
|
11
|
+
export * from './model-manager';
|
|
12
|
+
export * from './methods';
|
|
13
|
+
export { Model } from './model';
|