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,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis store implementation.
|
|
3
|
+
*
|
|
4
|
+
* Redis is a key-value store with several typed data structures (strings,
|
|
5
|
+
* hashes, lists, sets, sorted sets, streams) plus pub/sub and pipelining. It has no
|
|
6
|
+
* query language and does not fit the SQL-shaped `Dialect` interface, so
|
|
7
|
+
* this class implements the minimal `NoSqlStore` marker interface and
|
|
8
|
+
* exposes Redis's real operations grouped by data structure instead of
|
|
9
|
+
* forcing everything into a `query(sql)` shape.
|
|
10
|
+
*
|
|
11
|
+
* Uses the `ioredis` driver.
|
|
12
|
+
*/
|
|
13
|
+
import type Redis from 'ioredis';
|
|
14
|
+
import type { RedisOptions, ChainableCommander } from 'ioredis';
|
|
15
|
+
import { NoSqlStore } from '../store';
|
|
16
|
+
/**
|
|
17
|
+
* Connection options for `RedisStore`.
|
|
18
|
+
*
|
|
19
|
+
* Accepts either a connection URL (`redis://` / `rediss://`) or standard
|
|
20
|
+
* ioredis `RedisOptions` (host/port/password/db/tls/etc). All of ioredis's
|
|
21
|
+
* `RedisOptions` fields are passed straight through.
|
|
22
|
+
*/
|
|
23
|
+
export type RedisStoreOptions = ({
|
|
24
|
+
url: string;
|
|
25
|
+
} & Partial<RedisOptions>) | (RedisOptions & {
|
|
26
|
+
url?: undefined;
|
|
27
|
+
});
|
|
28
|
+
/** Options for `set()`. */
|
|
29
|
+
export interface SetOptions {
|
|
30
|
+
/** Expire after this many seconds. */
|
|
31
|
+
ex?: number;
|
|
32
|
+
/** Expire after this many milliseconds. */
|
|
33
|
+
px?: number;
|
|
34
|
+
/** Only set the key if it does not already exist. */
|
|
35
|
+
nx?: boolean;
|
|
36
|
+
/** Only set the key if it already exists. */
|
|
37
|
+
xx?: boolean;
|
|
38
|
+
/** Retain the key's existing TTL. */
|
|
39
|
+
keepttl?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** A single member/score pair for sorted-set commands. */
|
|
42
|
+
export interface ZMember {
|
|
43
|
+
score: number;
|
|
44
|
+
member: string;
|
|
45
|
+
}
|
|
46
|
+
/** Options for `zrange()`/`zrangebyscore()`. */
|
|
47
|
+
export interface ZRangeOptions {
|
|
48
|
+
withScores?: boolean;
|
|
49
|
+
/** Reverse iteration order (ZREVRANGE-equivalent behavior for zrange). */
|
|
50
|
+
rev?: boolean;
|
|
51
|
+
limit?: {
|
|
52
|
+
offset: number;
|
|
53
|
+
count: number;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** A single Redis Stream entry: an auto/explicit ID plus its field/value pairs. */
|
|
57
|
+
export interface StreamEntry {
|
|
58
|
+
id: string;
|
|
59
|
+
fields: Record<string, string>;
|
|
60
|
+
}
|
|
61
|
+
/** A `xread`/`xreadgroup` result for one stream key. */
|
|
62
|
+
export interface StreamReadResult {
|
|
63
|
+
key: string;
|
|
64
|
+
entries: StreamEntry[];
|
|
65
|
+
}
|
|
66
|
+
/** Options for `xread()`/`xreadgroup()`. */
|
|
67
|
+
export interface XReadOptions {
|
|
68
|
+
/** Max number of entries to return per stream. */
|
|
69
|
+
count?: number;
|
|
70
|
+
/** Block for up to this many milliseconds waiting for new entries (0 = block forever). */
|
|
71
|
+
block?: number;
|
|
72
|
+
}
|
|
73
|
+
/** Trim strategy for `xtrim()`. */
|
|
74
|
+
export type XTrimStrategy = 'MAXLEN' | 'MINID';
|
|
75
|
+
/**
|
|
76
|
+
* `RedisStore` wraps an `ioredis` client and exposes Redis's data-structure
|
|
77
|
+
* commands (string/hash/list/set/sorted-set/stream), pub/sub, and
|
|
78
|
+
* pipelining as a typed, promise-based API.
|
|
79
|
+
*/
|
|
80
|
+
export declare class RedisStore implements NoSqlStore {
|
|
81
|
+
readonly name = "redis";
|
|
82
|
+
readonly library = "ioredis";
|
|
83
|
+
private readonly options;
|
|
84
|
+
private client;
|
|
85
|
+
private subscriber;
|
|
86
|
+
private connected;
|
|
87
|
+
/**
|
|
88
|
+
* Per-channel handlers for the shared subscriber connection. A single
|
|
89
|
+
* `message` listener is attached once and dispatches to the handler
|
|
90
|
+
* registered for the incoming message's channel, so each `subscribe()`
|
|
91
|
+
* call's handler only ever receives messages for its own channel.
|
|
92
|
+
*/
|
|
93
|
+
private readonly channelHandlers;
|
|
94
|
+
/**
|
|
95
|
+
* Per-pattern handlers for the shared subscriber connection, mirroring
|
|
96
|
+
* `channelHandlers` but for `PSUBSCRIBE`/`PUNSUBSCRIBE`.
|
|
97
|
+
*/
|
|
98
|
+
private readonly patternHandlers;
|
|
99
|
+
constructor(options?: RedisStoreOptions);
|
|
100
|
+
private createClient;
|
|
101
|
+
connect(): Promise<void>;
|
|
102
|
+
disconnect(): Promise<void>;
|
|
103
|
+
isConnected(): boolean;
|
|
104
|
+
/** Returns the underlying `ioredis` client for anything not wrapped here. */
|
|
105
|
+
getClient(): Redis;
|
|
106
|
+
private requireClient;
|
|
107
|
+
private exec;
|
|
108
|
+
/** Serialize a value with `JSON.stringify` and `SET` it. */
|
|
109
|
+
setJSON<T>(key: string, value: T, options?: SetOptions): Promise<'OK' | null>;
|
|
110
|
+
/** `GET` a key and `JSON.parse` it. Returns `null` if the key is missing. */
|
|
111
|
+
getJSON<T>(key: string): Promise<T | null>;
|
|
112
|
+
get(key: string): Promise<string | null>;
|
|
113
|
+
set(key: string, value: string | number, options?: SetOptions): Promise<'OK' | null>;
|
|
114
|
+
del(...keys: string[]): Promise<number>;
|
|
115
|
+
exists(...keys: string[]): Promise<number>;
|
|
116
|
+
incr(key: string): Promise<number>;
|
|
117
|
+
incrby(key: string, amount: number): Promise<number>;
|
|
118
|
+
expire(key: string, seconds: number): Promise<number>;
|
|
119
|
+
ttl(key: string): Promise<number>;
|
|
120
|
+
hget(key: string, field: string): Promise<string | null>;
|
|
121
|
+
hset(key: string, fields: Record<string, string | number>): Promise<number>;
|
|
122
|
+
hgetall(key: string): Promise<Record<string, string>>;
|
|
123
|
+
hdel(key: string, ...fields: string[]): Promise<number>;
|
|
124
|
+
hincrby(key: string, field: string, amount: number): Promise<number>;
|
|
125
|
+
lpush(key: string, ...values: (string | number)[]): Promise<number>;
|
|
126
|
+
rpush(key: string, ...values: (string | number)[]): Promise<number>;
|
|
127
|
+
lrange(key: string, start: number, stop: number): Promise<string[]>;
|
|
128
|
+
lpop(key: string, count?: number): Promise<string | string[] | null>;
|
|
129
|
+
rpop(key: string, count?: number): Promise<string | string[] | null>;
|
|
130
|
+
sadd(key: string, ...members: string[]): Promise<number>;
|
|
131
|
+
srem(key: string, ...members: string[]): Promise<number>;
|
|
132
|
+
smembers(key: string): Promise<string[]>;
|
|
133
|
+
sismember(key: string, member: string): Promise<boolean>;
|
|
134
|
+
zadd(key: string, ...members: ZMember[]): Promise<number>;
|
|
135
|
+
zrange(key: string, start: number, stop: number, options?: ZRangeOptions): Promise<string[]>;
|
|
136
|
+
zrangebyscore(key: string, min: number | string, max: number | string, options?: Omit<ZRangeOptions, 'rev'>): Promise<string[]>;
|
|
137
|
+
zrem(key: string, ...members: string[]): Promise<number>;
|
|
138
|
+
zscore(key: string, member: string): Promise<string | null>;
|
|
139
|
+
/**
|
|
140
|
+
* `XADD` - append an entry to a stream, creating it if it doesn't exist.
|
|
141
|
+
* Pass `'*'` as `id` to let Redis auto-generate a monotonic
|
|
142
|
+
* `<ms>-<seq>` ID (the common case); returns the ID that was assigned.
|
|
143
|
+
*/
|
|
144
|
+
xadd(key: string, id: string, fields: Record<string, string | number>): Promise<string>;
|
|
145
|
+
/** `XRANGE` - read entries with IDs between `start` and `end` (inclusive), in ID order. Use `'-'`/`'+'` for the full range. */
|
|
146
|
+
xrange(key: string, start: string, end: string, count?: number): Promise<StreamEntry[]>;
|
|
147
|
+
/** `XREVRANGE` - like `xrange()` but in reverse ID order; `start` is the higher/first ID, `end` the lower/last. */
|
|
148
|
+
xrevrange(key: string, start: string, end: string, count?: number): Promise<StreamEntry[]>;
|
|
149
|
+
/**
|
|
150
|
+
* `XREAD` - read entries newer than `ids` from one or more streams.
|
|
151
|
+
* `keys[i]` is paired with `ids[i]`; pass `'$'` for an ID to only read
|
|
152
|
+
* entries added after the call starts, or `'0'` to read from the
|
|
153
|
+
* beginning. With `options.block`, blocks (up to that many ms, or
|
|
154
|
+
* forever if `0`) waiting for new entries instead of returning
|
|
155
|
+
* immediately. Returns `null` if nothing matched (e.g. a non-blocking
|
|
156
|
+
* read found nothing new).
|
|
157
|
+
*/
|
|
158
|
+
xread(keys: string[], ids: string[], options?: XReadOptions): Promise<StreamReadResult[] | null>;
|
|
159
|
+
/** `XLEN` - number of entries in a stream. */
|
|
160
|
+
xlen(key: string): Promise<number>;
|
|
161
|
+
/** `XDEL` - remove specific entries from a stream by ID. Returns the number actually removed. */
|
|
162
|
+
xdel(key: string, ids: string[]): Promise<number>;
|
|
163
|
+
/**
|
|
164
|
+
* `XTRIM` - trim a stream to (approximately) `threshold` entries
|
|
165
|
+
* (`'MAXLEN'`) or drop entries older than a given ID (`'MINID'`).
|
|
166
|
+
* Returns the number of entries removed.
|
|
167
|
+
*/
|
|
168
|
+
xtrim(key: string, strategy: XTrimStrategy, threshold: number | string): Promise<number>;
|
|
169
|
+
/**
|
|
170
|
+
* `XGROUP CREATE` - create a consumer group on a stream, starting
|
|
171
|
+
* delivery from `id` (default `'$'`, i.e. only new entries). Creates the
|
|
172
|
+
* stream first (via `MKSTREAM`) if it doesn't exist yet.
|
|
173
|
+
*/
|
|
174
|
+
xgroupCreate(key: string, groupName: string, id?: string): Promise<'OK'>;
|
|
175
|
+
/**
|
|
176
|
+
* `XREADGROUP` - read entries from one or more streams as a named
|
|
177
|
+
* consumer within a consumer group, so entries are tracked in the
|
|
178
|
+
* group's pending-entries list until `xack()`'d. Pass `'>'` for an ID to
|
|
179
|
+
* receive only entries never delivered to this group; any other ID
|
|
180
|
+
* re-reads this consumer's already-delivered-but-unacked entries.
|
|
181
|
+
*/
|
|
182
|
+
xreadgroup(groupName: string, consumerName: string, keys: string[], ids: string[], options?: XReadOptions): Promise<StreamReadResult[] | null>;
|
|
183
|
+
/** `XACK` - acknowledge that a consumer group has finished processing the given entry IDs. */
|
|
184
|
+
xack(key: string, groupName: string, ids: string[]): Promise<number>;
|
|
185
|
+
/**
|
|
186
|
+
* `EVAL` - run a Lua `script` server-side, atomically. `keys` are passed
|
|
187
|
+
* as Redis's `KEYS[1..N]` (and count toward the `numkeys` argument),
|
|
188
|
+
* `args` as `ARGV[1..N]`. Prefer `evalsha()` once a script has been
|
|
189
|
+
* cached (via `scriptLoad()` or a prior `eval()`) to avoid resending the
|
|
190
|
+
* source on every call.
|
|
191
|
+
*/
|
|
192
|
+
eval<T = unknown>(script: string, keys?: string[], args?: (string | number)[]): Promise<T>;
|
|
193
|
+
/**
|
|
194
|
+
* `EVALSHA` - run a previously cached Lua script by its SHA1 digest
|
|
195
|
+
* (see `scriptLoad()`), avoiding the cost of resending the script body.
|
|
196
|
+
* Redis replies with a `NOSCRIPT` error (surfaced here as a
|
|
197
|
+
* `DatabaseError`) if the script isn't cached on the server.
|
|
198
|
+
*/
|
|
199
|
+
evalsha<T = unknown>(sha1: string, keys?: string[], args?: (string | number)[]): Promise<T>;
|
|
200
|
+
/**
|
|
201
|
+
* `SCRIPT LOAD` - cache a Lua script on the server without executing it,
|
|
202
|
+
* returning its SHA1 digest for later `evalsha()` calls.
|
|
203
|
+
*/
|
|
204
|
+
scriptLoad(script: string): Promise<string>;
|
|
205
|
+
/** `PFADD` - add elements to a HyperLogLog. Returns `1` if the estimated cardinality changed, `0` otherwise. */
|
|
206
|
+
pfadd(key: string, ...elements: string[]): Promise<number>;
|
|
207
|
+
/** `PFCOUNT` - the approximate cardinality of one HyperLogLog, or the union of several. */
|
|
208
|
+
pfcount(...keys: string[]): Promise<number>;
|
|
209
|
+
/** `PFMERGE` - merge one or more source HyperLogLogs into `destKey` (created/overwritten as the union). */
|
|
210
|
+
pfmerge(destKey: string, ...sourceKeys: string[]): Promise<'OK'>;
|
|
211
|
+
publish(channel: string, message: string): Promise<number>;
|
|
212
|
+
/**
|
|
213
|
+
* Subscribe to a channel and invoke `handler` for each message received.
|
|
214
|
+
*
|
|
215
|
+
* Pub/sub requires a dedicated connection in Redis (a subscribed
|
|
216
|
+
* connection can't issue other commands), so this lazily creates a
|
|
217
|
+
* second `ioredis` client reusing the same connection options and keeps
|
|
218
|
+
* it alive for the lifetime of the store (or until `unsubscribe`/
|
|
219
|
+
* `disconnect` is called).
|
|
220
|
+
*/
|
|
221
|
+
/**
|
|
222
|
+
* Lazily create the shared subscriber connection and attach the
|
|
223
|
+
* `message`/`pmessage` dispatch listeners exactly once. Both `subscribe()`
|
|
224
|
+
* and `psubscribe()` share this single connection (a subscribed Redis
|
|
225
|
+
* connection can't issue other commands, so both plain and pattern
|
|
226
|
+
* subscriptions ride the same dedicated socket).
|
|
227
|
+
*/
|
|
228
|
+
private ensureSubscriber;
|
|
229
|
+
subscribe(channel: string, handler: (message: string, channel: string) => void): Promise<void>;
|
|
230
|
+
unsubscribe(channel?: string): Promise<void>;
|
|
231
|
+
/**
|
|
232
|
+
* `PSUBSCRIBE` - subscribe to all channels matching a glob-style `pattern`
|
|
233
|
+
* (e.g. `news.*`, `__keyevent@0__:expired`) and invoke `handler` for each
|
|
234
|
+
* matching message. This is the standard mechanism for consuming Redis
|
|
235
|
+
* keyspace notifications (e.g. subscribing to
|
|
236
|
+
* `__keyevent@0__:expired` to react to key expirations), where the
|
|
237
|
+
* concrete channel name varies and only a pattern subscription can catch
|
|
238
|
+
* all of them. Shares the same lazily-created subscriber connection as
|
|
239
|
+
* `subscribe()`.
|
|
240
|
+
*/
|
|
241
|
+
psubscribe(pattern: string, handler: (message: string, channel: string, pattern: string) => void): Promise<void>;
|
|
242
|
+
/**
|
|
243
|
+
* `PUNSUBSCRIBE` - stop receiving messages for `pattern` (or every pattern
|
|
244
|
+
* subscription, if omitted). Closes the shared subscriber connection once
|
|
245
|
+
* both the channel and pattern handler sets are empty.
|
|
246
|
+
*/
|
|
247
|
+
punsubscribe(pattern?: string): Promise<void>;
|
|
248
|
+
/** Tear down the shared subscriber connection once nothing is subscribed through it. */
|
|
249
|
+
private closeSubscriberIfIdle;
|
|
250
|
+
/**
|
|
251
|
+
* Queue multiple commands and send them in a single round trip. Unlike
|
|
252
|
+
* `multi()`, commands are not guaranteed atomic — a failure in one
|
|
253
|
+
* command does not abort the others. Returns the ioredis chainable
|
|
254
|
+
* commander; call `.exec()` to run it.
|
|
255
|
+
*/
|
|
256
|
+
pipeline(): ChainableCommander;
|
|
257
|
+
/**
|
|
258
|
+
* Queue multiple commands to run atomically (Redis `MULTI`/`EXEC`). This
|
|
259
|
+
* is Redis's substitute for cross-key transactions: all queued commands
|
|
260
|
+
* either all run or (if `.discard()` is called) none do, but there is no
|
|
261
|
+
* rollback of partial effects and no cross-command isolation the way a
|
|
262
|
+
* SQL transaction provides. Returns the ioredis chainable commander;
|
|
263
|
+
* call `.exec()` to run it.
|
|
264
|
+
*/
|
|
265
|
+
multi(): ChainableCommander;
|
|
266
|
+
}
|
|
267
|
+
export default RedisStore;
|
|
@@ -11,12 +11,25 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Uses the `ioredis` driver.
|
|
13
13
|
*/
|
|
14
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
-
};
|
|
17
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
15
|
exports.RedisStore = void 0;
|
|
19
|
-
|
|
16
|
+
// Lazily-loaded `ioredis` driver. Required only when a connection is opened, so
|
|
17
|
+
// importing this ORM never loads the ioredis driver.
|
|
18
|
+
let ioredisCtor = null;
|
|
19
|
+
function loadIoRedis() {
|
|
20
|
+
if (!ioredisCtor) {
|
|
21
|
+
try {
|
|
22
|
+
const mod = require('ioredis');
|
|
23
|
+
ioredisCtor = mod && mod.default ? mod.default : mod;
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
throw new Error("The 'ioredis' package is required to use the Redis store but could not be loaded. " +
|
|
27
|
+
'Install it with `npm install ioredis`. Original error: ' +
|
|
28
|
+
(err instanceof Error ? err.message : String(err)));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return ioredisCtor;
|
|
32
|
+
}
|
|
20
33
|
const errors_1 = require("../../errors");
|
|
21
34
|
function wrapConnectionError(err, host) {
|
|
22
35
|
const parent = err instanceof Error ? err : new Error(String(err));
|
|
@@ -89,7 +102,8 @@ class RedisStore {
|
|
|
89
102
|
// explicitly opt into eager connection and await `connect()` below to
|
|
90
103
|
// surface connection failures immediately.
|
|
91
104
|
const opts = { lazyConnect: true, ...rest };
|
|
92
|
-
|
|
105
|
+
const RedisCtor = loadIoRedis();
|
|
106
|
+
return url ? new RedisCtor(url, opts) : new RedisCtor(opts);
|
|
93
107
|
}
|
|
94
108
|
async connect() {
|
|
95
109
|
if (this.connected && this.client) {
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redpanda store implementation.
|
|
3
|
+
*
|
|
4
|
+
* Redpanda is a streaming data platform that is wire-compatible with the
|
|
5
|
+
* Apache Kafka protocol - it speaks the exact same protocol, so it reuses the
|
|
6
|
+
* `kafkajs` driver unchanged. Like Kafka, it has no query language and does
|
|
7
|
+
* not fit the SQL-shaped `Dialect` interface, so this class implements the
|
|
8
|
+
* minimal `NoSqlStore` marker interface and exposes Redpanda's real
|
|
9
|
+
* operations - producing to topics, creating/listing topics via the admin
|
|
10
|
+
* client, and subscribing consumers - instead of a `query(sql)` shape.
|
|
11
|
+
*
|
|
12
|
+
* Because Redpanda speaks the Kafka protocol, this store is a mirror of
|
|
13
|
+
* `KafkaStore`: same `kafkajs` client, same producer/consumer/admin surface.
|
|
14
|
+
* `kafkajs` is loaded lazily inside `connect()` (or supplied pre-built via
|
|
15
|
+
* `options.client`) so importing this module does not require the driver to
|
|
16
|
+
* be installed.
|
|
17
|
+
*/
|
|
18
|
+
import { NoSqlStore } from '../store';
|
|
19
|
+
/**
|
|
20
|
+
* SASL authentication options passed straight through to kafkajs.
|
|
21
|
+
*/
|
|
22
|
+
export interface RedpandaSaslOptions {
|
|
23
|
+
mechanism: string;
|
|
24
|
+
username: string;
|
|
25
|
+
password: string;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Connection options for `RedpandaStore`.
|
|
30
|
+
*
|
|
31
|
+
* Mirrors kafkajs's `Kafka` constructor options. `brokers` is the list of
|
|
32
|
+
* `host:port` seed brokers (Redpanda broker addresses). A pre-built kafkajs
|
|
33
|
+
* `Kafka` instance can be injected via `client`, in which case `connect()`
|
|
34
|
+
* uses it directly and skips loading the driver (this is how tests inject a
|
|
35
|
+
* mock).
|
|
36
|
+
*/
|
|
37
|
+
export interface RedpandaStoreOptions {
|
|
38
|
+
/** Client identifier reported to the broker. */
|
|
39
|
+
clientId?: string;
|
|
40
|
+
/** Seed broker list, e.g. `['localhost:9092']`. */
|
|
41
|
+
brokers?: string[];
|
|
42
|
+
/** Enable TLS, or pass a kafkajs TLS options object. */
|
|
43
|
+
ssl?: boolean | Record<string, unknown>;
|
|
44
|
+
/** SASL authentication configuration. */
|
|
45
|
+
sasl?: RedpandaSaslOptions;
|
|
46
|
+
/**
|
|
47
|
+
* A pre-built kafkajs `Kafka` instance. When provided, `connect()` uses it
|
|
48
|
+
* directly and does not `require('kafkajs')`.
|
|
49
|
+
*/
|
|
50
|
+
client?: any;
|
|
51
|
+
}
|
|
52
|
+
/** A single message to produce to a topic. */
|
|
53
|
+
export interface RedpandaMessage {
|
|
54
|
+
key?: string | Buffer | null;
|
|
55
|
+
value: string | Buffer | null;
|
|
56
|
+
partition?: number;
|
|
57
|
+
headers?: Record<string, string | Buffer>;
|
|
58
|
+
timestamp?: string;
|
|
59
|
+
[key: string]: unknown;
|
|
60
|
+
}
|
|
61
|
+
/** Options for `createTopic()`. */
|
|
62
|
+
export interface CreateTopicOptions {
|
|
63
|
+
numPartitions?: number;
|
|
64
|
+
replicationFactor?: number;
|
|
65
|
+
}
|
|
66
|
+
/** Options for `subscribe()`. */
|
|
67
|
+
export interface SubscribeOptions {
|
|
68
|
+
/** Consumer group id. Defaults to a generated id. */
|
|
69
|
+
groupId?: string;
|
|
70
|
+
/** Consume from the beginning of the topic rather than the latest offset. */
|
|
71
|
+
fromBeginning?: boolean;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* `RedpandaStore` wraps a `kafkajs` client (Redpanda is Kafka-protocol
|
|
75
|
+
* compatible) and exposes the core streaming operations: producing messages,
|
|
76
|
+
* topic administration, and consumer subscriptions.
|
|
77
|
+
*/
|
|
78
|
+
export declare class RedpandaStore implements NoSqlStore {
|
|
79
|
+
readonly name = "redpanda";
|
|
80
|
+
readonly library = "kafkajs";
|
|
81
|
+
private readonly options;
|
|
82
|
+
private client;
|
|
83
|
+
private producer;
|
|
84
|
+
/** Consumers created via `subscribe()`, tracked so `disconnect()` can stop them all. */
|
|
85
|
+
private readonly consumers;
|
|
86
|
+
private connected;
|
|
87
|
+
constructor(options?: RedpandaStoreOptions);
|
|
88
|
+
connect(): Promise<void>;
|
|
89
|
+
disconnect(): Promise<void>;
|
|
90
|
+
isConnected(): boolean;
|
|
91
|
+
/** Returns the underlying `kafkajs` `Kafka` client for anything not wrapped here. */
|
|
92
|
+
getClient(): any;
|
|
93
|
+
private requireClient;
|
|
94
|
+
private requireProducer;
|
|
95
|
+
/**
|
|
96
|
+
* Produce one or more messages to `topic`. Returns kafkajs's record
|
|
97
|
+
* metadata (per-partition base offsets).
|
|
98
|
+
*/
|
|
99
|
+
produce(topic: string, messages: RedpandaMessage[]): Promise<any>;
|
|
100
|
+
/**
|
|
101
|
+
* Create `topic` via a short-lived admin connection. Returns kafkajs's
|
|
102
|
+
* boolean indicating whether the topic was newly created (`false` if it
|
|
103
|
+
* already existed).
|
|
104
|
+
*/
|
|
105
|
+
createTopic(topic: string, opts?: CreateTopicOptions): Promise<boolean>;
|
|
106
|
+
/** List all topic names known to the cluster via a short-lived admin connection. */
|
|
107
|
+
listTopics(): Promise<string[]>;
|
|
108
|
+
/**
|
|
109
|
+
* Subscribe a new consumer to `topics` and invoke `handler` for each
|
|
110
|
+
* message (kafkajs's `eachMessage` payload: `{ topic, partition, message }`).
|
|
111
|
+
* The consumer joins the group `options.groupId` (a generated id is used if
|
|
112
|
+
* omitted) and is tracked so `disconnect()` stops it. Returns the created
|
|
113
|
+
* kafkajs consumer.
|
|
114
|
+
*/
|
|
115
|
+
subscribe(topics: string | string[], handler: (payload: any) => Promise<void> | void, options?: SubscribeOptions): Promise<any>;
|
|
116
|
+
}
|
|
117
|
+
export default RedpandaStore;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resque (node-resque) job/task-queue store.
|
|
3
|
+
*
|
|
4
|
+
* node-resque is a Redis-backed background-job system compatible with Ruby's
|
|
5
|
+
* Resque. A `Queue` enqueues jobs (a job class name plus args) into named
|
|
6
|
+
* queues, and a `Worker`/`MultiWorker` pulls jobs and runs the matching
|
|
7
|
+
* handler from a *jobs* map. It is not a database and does not fit the
|
|
8
|
+
* SQL-shaped `Dialect` interface, so this class implements the minimal
|
|
9
|
+
* `NoSqlStore` marker interface and exposes node-resque's real
|
|
10
|
+
* enqueue/worker operations instead.
|
|
11
|
+
*
|
|
12
|
+
* Uses the `node-resque` driver. It is an optional peer loaded lazily (via
|
|
13
|
+
* `require`) inside `connect()`, so importing this module does not require it
|
|
14
|
+
* to be installed unless you actually connect. A pre-built driver module
|
|
15
|
+
* (providing `Queue` and `Worker` constructors) can be injected via
|
|
16
|
+
* `ResqueStoreOptions.client`, in which case `connect()` adopts it and skips
|
|
17
|
+
* the `require` entirely (used by the unit tests to inject mocks).
|
|
18
|
+
*/
|
|
19
|
+
import type { NoSqlStore } from '../store';
|
|
20
|
+
/** Connection options for `ResqueStore`. */
|
|
21
|
+
export interface ResqueStoreOptions {
|
|
22
|
+
/**
|
|
23
|
+
* node-resque connection descriptor, e.g.
|
|
24
|
+
* `{ pkg: 'ioredis', host, port, database }`. Defaults to
|
|
25
|
+
* `{ host: '127.0.0.1', port: 6379 }`.
|
|
26
|
+
*/
|
|
27
|
+
connection?: any;
|
|
28
|
+
/**
|
|
29
|
+
* A pre-built `node-resque` module (or a stand-in exposing `Queue` and
|
|
30
|
+
* `Worker` constructors). When provided, `connect()` adopts it and does not
|
|
31
|
+
* `require('node-resque')` — used for injecting mocks in tests.
|
|
32
|
+
*/
|
|
33
|
+
client?: any;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A job descriptor for `enqueue()`: the registered job `name` plus its
|
|
37
|
+
* positional `args`. A bare string is treated as the job name with no args.
|
|
38
|
+
*/
|
|
39
|
+
export interface ResqueJobSpec {
|
|
40
|
+
name: string;
|
|
41
|
+
args?: any[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* `ResqueStore` wraps a node-resque `Queue` for producing and a pool of
|
|
45
|
+
* `Worker`s (one per queue name) for consuming, exposing the common queue
|
|
46
|
+
* surface.
|
|
47
|
+
*/
|
|
48
|
+
export declare class ResqueStore implements NoSqlStore {
|
|
49
|
+
readonly name = "resque";
|
|
50
|
+
readonly library = "node-resque";
|
|
51
|
+
private readonly options;
|
|
52
|
+
private driver;
|
|
53
|
+
private queue;
|
|
54
|
+
private connected;
|
|
55
|
+
private readonly workers;
|
|
56
|
+
/** Accumulated `{ jobName: handler }` map shared across workers. */
|
|
57
|
+
private readonly jobs;
|
|
58
|
+
constructor(options?: ResqueStoreOptions);
|
|
59
|
+
connect(): Promise<void>;
|
|
60
|
+
disconnect(): Promise<void>;
|
|
61
|
+
isConnected(): boolean;
|
|
62
|
+
/** Returns the underlying node-resque `Queue` for operations not wrapped here. */
|
|
63
|
+
getClient(): any;
|
|
64
|
+
private requireQueue;
|
|
65
|
+
private get connectionOpts();
|
|
66
|
+
/**
|
|
67
|
+
* Enqueue a job onto a named queue via `queue.enqueue(queue, name, args)`.
|
|
68
|
+
* node-resque assigns no client-visible job id, so this resolves to `null`.
|
|
69
|
+
*/
|
|
70
|
+
enqueue(queue: string, jobData: ResqueJobSpec | string): Promise<null>;
|
|
71
|
+
/**
|
|
72
|
+
* Register a `Worker` on a queue that runs `handler` for jobs on it. The
|
|
73
|
+
* handler is added to the shared jobs map under the queue name, and one
|
|
74
|
+
* worker is cached per queue name (a repeat `process()` returns it).
|
|
75
|
+
*/
|
|
76
|
+
process(queue: string, handler: (...args: any[]) => any | Promise<any>, opts?: any): Promise<any>;
|
|
77
|
+
/**
|
|
78
|
+
* List queued jobs on a named queue (node-resque `queue.queued(queue,
|
|
79
|
+
* start, stop)`). node-resque has no addressable per-id lookup, so `id` is
|
|
80
|
+
* interpreted as the 0-based index into the returned list.
|
|
81
|
+
*/
|
|
82
|
+
getJob(queue: string, id: string | number): Promise<any>;
|
|
83
|
+
/**
|
|
84
|
+
* Remove matching jobs from a queue via `queue.del(queue, name, args)`.
|
|
85
|
+
* `id` is the registered job name to delete.
|
|
86
|
+
*/
|
|
87
|
+
remove(queue: string, id: string): Promise<any>;
|
|
88
|
+
/** Return the number of jobs currently queued on a named queue. */
|
|
89
|
+
stats(queue: string): Promise<number>;
|
|
90
|
+
}
|
|
91
|
+
export default ResqueStore;
|