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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RocksDBStore = void 0;
|
|
3
|
+
exports.RocksDBStore = exports.KvTransaction = exports.KvDocumentLayer = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* RocksDB store.
|
|
6
6
|
*
|
|
@@ -19,6 +19,10 @@ exports.RocksDBStore = void 0;
|
|
|
19
19
|
* inject a pre-built mock `client` instead and never reach the `require`.
|
|
20
20
|
*/
|
|
21
21
|
const errors_1 = require("../../errors");
|
|
22
|
+
const document_layer_1 = require("./document-layer");
|
|
23
|
+
var document_layer_2 = require("./document-layer");
|
|
24
|
+
Object.defineProperty(exports, "KvDocumentLayer", { enumerable: true, get: function () { return document_layer_2.KvDocumentLayer; } });
|
|
25
|
+
Object.defineProperty(exports, "KvTransaction", { enumerable: true, get: function () { return document_layer_2.KvTransaction; } });
|
|
22
26
|
/**
|
|
23
27
|
* `RocksDBStore` wraps a `rocksdb` client and exposes its embedded KV surface:
|
|
24
28
|
* `put`/`get`/`del` for single keys, `batch` for atomic multi-key writes,
|
|
@@ -30,6 +34,16 @@ class RocksDBStore {
|
|
|
30
34
|
this.library = 'rocksdb';
|
|
31
35
|
this.client = null;
|
|
32
36
|
this.connected = false;
|
|
37
|
+
// ---------------------------------------------------------------------
|
|
38
|
+
// Document / ORM model layer
|
|
39
|
+
// ---------------------------------------------------------------------
|
|
40
|
+
//
|
|
41
|
+
// These map the ORM model API onto RocksDB's KV surface (see
|
|
42
|
+
// ./document-layer.ts) so callers query with `where`/`order`/`limit`/
|
|
43
|
+
// `offset`/`include` instead of designing keyspaces and driving iterators
|
|
44
|
+
// by hand. `documents(primaryKey?)` picks the document field used to form
|
|
45
|
+
// keys (default `'id'`); the per-collection helpers below use `'id'`.
|
|
46
|
+
this.docLayer = null;
|
|
33
47
|
this.options = options;
|
|
34
48
|
this.path = options.path ?? './data/rocksdb';
|
|
35
49
|
}
|
|
@@ -147,6 +161,94 @@ class RocksDBStore {
|
|
|
147
161
|
throw this.wrapError('list', err);
|
|
148
162
|
}
|
|
149
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Ordered iteration over `[key, value]` pairs whose key is in `[gte, lt)`.
|
|
166
|
+
* Values are returned as stored (JSON strings, when written through the
|
|
167
|
+
* document layer). Used internally by the document layer's range scans.
|
|
168
|
+
*/
|
|
169
|
+
async *scanRange(gte, lt) {
|
|
170
|
+
const client = this.requireClient();
|
|
171
|
+
try {
|
|
172
|
+
for await (const [key, value] of client.iterator({ gte, lt })) {
|
|
173
|
+
yield [String(key), value];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
throw this.wrapError('scanRange', err);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
kvBackend() {
|
|
181
|
+
return {
|
|
182
|
+
get: (key) => this.get(key),
|
|
183
|
+
put: (key, value) => this.put(key, value),
|
|
184
|
+
del: (key) => this.del(key),
|
|
185
|
+
batch: (ops) => this.batch(ops),
|
|
186
|
+
scanRange: (gte, lt) => this.scanRange(gte, lt),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Returns a document layer bound to this store, keyed by `primaryKey`
|
|
191
|
+
* (default `'id'`). Exposes the full ORM model API
|
|
192
|
+
* (`findAll`/`findOne`/`findByPk`/`create`/`bulkCreate`/`update`/`destroy`/
|
|
193
|
+
* `count`/`truncate`/`upsert`/`increment`/`transaction`).
|
|
194
|
+
*/
|
|
195
|
+
documents(primaryKey = 'id') {
|
|
196
|
+
if (primaryKey !== 'id') {
|
|
197
|
+
return new document_layer_1.KvDocumentLayer(this.kvBackend(), primaryKey);
|
|
198
|
+
}
|
|
199
|
+
if (!this.docLayer) {
|
|
200
|
+
this.docLayer = new document_layer_1.KvDocumentLayer(this.kvBackend(), 'id');
|
|
201
|
+
}
|
|
202
|
+
return this.docLayer;
|
|
203
|
+
}
|
|
204
|
+
/** ORM `findAll` over a collection: where/order/limit/offset/include. */
|
|
205
|
+
findAll(collection, options) {
|
|
206
|
+
return this.documents().findAll(collection, options);
|
|
207
|
+
}
|
|
208
|
+
/** ORM `findOne` over a collection. */
|
|
209
|
+
findOne(collection, options) {
|
|
210
|
+
return this.documents().findOne(collection, options);
|
|
211
|
+
}
|
|
212
|
+
/** ORM `findByPk` over a collection. */
|
|
213
|
+
findByPk(collection, pk, options) {
|
|
214
|
+
return this.documents().findByPk(collection, pk, options);
|
|
215
|
+
}
|
|
216
|
+
/** ORM `count` over a collection. */
|
|
217
|
+
count(collection, where) {
|
|
218
|
+
return this.documents().count(collection, where);
|
|
219
|
+
}
|
|
220
|
+
/** ORM `create` for a single document. */
|
|
221
|
+
create(collection, data) {
|
|
222
|
+
return this.documents().create(collection, data);
|
|
223
|
+
}
|
|
224
|
+
/** ORM `bulkCreate` for many documents (atomic batch). */
|
|
225
|
+
bulkCreate(collection, rows) {
|
|
226
|
+
return this.documents().bulkCreate(collection, rows);
|
|
227
|
+
}
|
|
228
|
+
/** ORM `update`: merge `values` into documents matching `where`. */
|
|
229
|
+
updateWhere(collection, values, where) {
|
|
230
|
+
return this.documents().update(collection, values, where);
|
|
231
|
+
}
|
|
232
|
+
/** ORM `destroy`: delete documents matching `where`. */
|
|
233
|
+
destroy(collection, where) {
|
|
234
|
+
return this.documents().destroy(collection, where);
|
|
235
|
+
}
|
|
236
|
+
/** ORM `truncate`: delete every document in a collection. */
|
|
237
|
+
truncate(collection) {
|
|
238
|
+
return this.documents().truncate(collection);
|
|
239
|
+
}
|
|
240
|
+
/** Upsert a document by primary key. */
|
|
241
|
+
upsert(collection, data) {
|
|
242
|
+
return this.documents().upsert(collection, data);
|
|
243
|
+
}
|
|
244
|
+
/** Atomically increment numeric fields of one document. */
|
|
245
|
+
increment(collection, pk, fields) {
|
|
246
|
+
return this.documents().increment(collection, pk, fields);
|
|
247
|
+
}
|
|
248
|
+
/** Run a function inside an atomic multi-document transaction (single batch commit). */
|
|
249
|
+
transaction(fn) {
|
|
250
|
+
return this.documents().transaction(fn);
|
|
251
|
+
}
|
|
150
252
|
}
|
|
151
253
|
exports.RocksDBStore = RocksDBStore;
|
|
152
254
|
exports.default = RocksDBStore;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory evaluator for the ORM's `where` clause, plus `order` sorting.
|
|
3
|
+
*
|
|
4
|
+
* The embedded key-value stores (RocksDB, LevelDB) have no query engine, so
|
|
5
|
+
* the document layer materializes a collection via a prefix range scan and
|
|
6
|
+
* filters/sorts it here. This module understands the full standard Prorm
|
|
7
|
+
* `where` shape - both the `Op` *symbol* form (`{ age: { [Op.gt]: 18 } }`) and
|
|
8
|
+
* the equivalent `$`-string form (`{ age: { $gt: 18 } }`) produced by the
|
|
9
|
+
* `and`/`or`/`not`/`eq`/... helper functions - as well as implicit-AND plain
|
|
10
|
+
* objects (`{ status: 'active', age: 30 }`) and logical `and`/`or`/`not`
|
|
11
|
+
* groupings. Keeping this self-contained means callers never hand-write a raw
|
|
12
|
+
* iterator filter to query these stores.
|
|
13
|
+
*/
|
|
14
|
+
/** A where clause: plain equality object, operator object, and/or logical groups. */
|
|
15
|
+
export type WhereClause = Record<string | symbol, unknown>;
|
|
16
|
+
/** Order spec: a single field, a list of fields, or `[field, direction]` pairs. */
|
|
17
|
+
export type OrderSpec = string | Array<string | [string, ('ASC' | 'DESC' | 'asc' | 'desc')]>;
|
|
18
|
+
/** Evaluate a full where clause against a document. */
|
|
19
|
+
export declare function matchWhere(doc: Record<string, unknown>, where: WhereClause): boolean;
|
|
20
|
+
/** Return a new array sorted by the order spec (stable, multi-key). */
|
|
21
|
+
export declare function applyOrder<T extends Record<string, unknown>>(rows: T[], order: OrderSpec): T[];
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* In-memory evaluator for the ORM's `where` clause, plus `order` sorting.
|
|
4
|
+
*
|
|
5
|
+
* The embedded key-value stores (RocksDB, LevelDB) have no query engine, so
|
|
6
|
+
* the document layer materializes a collection via a prefix range scan and
|
|
7
|
+
* filters/sorts it here. This module understands the full standard Prorm
|
|
8
|
+
* `where` shape - both the `Op` *symbol* form (`{ age: { [Op.gt]: 18 } }`) and
|
|
9
|
+
* the equivalent `$`-string form (`{ age: { $gt: 18 } }`) produced by the
|
|
10
|
+
* `and`/`or`/`not`/`eq`/... helper functions - as well as implicit-AND plain
|
|
11
|
+
* objects (`{ status: 'active', age: 30 }`) and logical `and`/`or`/`not`
|
|
12
|
+
* groupings. Keeping this self-contained means callers never hand-write a raw
|
|
13
|
+
* iterator filter to query these stores.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.matchWhere = matchWhere;
|
|
17
|
+
exports.applyOrder = applyOrder;
|
|
18
|
+
/** Canonical operator name for a where-clause key, whether symbol or `$string`. */
|
|
19
|
+
function opName(key) {
|
|
20
|
+
if (typeof key === 'symbol') {
|
|
21
|
+
// Symbol descriptions look like `Symbol(gt)` -> description is `gt`.
|
|
22
|
+
return key.description ?? '';
|
|
23
|
+
}
|
|
24
|
+
// Strip a leading `$` from string operator keys (`$gt` -> `gt`).
|
|
25
|
+
return key.startsWith('$') ? key.slice(1) : key;
|
|
26
|
+
}
|
|
27
|
+
const LOGICAL = new Set(['and', 'or', 'not']);
|
|
28
|
+
/** Read a possibly dotted path (`a.b.c`) out of a document. */
|
|
29
|
+
function getPath(doc, path) {
|
|
30
|
+
if (doc == null)
|
|
31
|
+
return undefined;
|
|
32
|
+
if (!path.includes('.'))
|
|
33
|
+
return doc[path];
|
|
34
|
+
let cur = doc;
|
|
35
|
+
for (const part of path.split('.')) {
|
|
36
|
+
if (cur == null || typeof cur !== 'object')
|
|
37
|
+
return undefined;
|
|
38
|
+
cur = cur[part];
|
|
39
|
+
}
|
|
40
|
+
return cur;
|
|
41
|
+
}
|
|
42
|
+
function deepEqual(a, b) {
|
|
43
|
+
if (a === b)
|
|
44
|
+
return true;
|
|
45
|
+
if (a instanceof Date && b instanceof Date)
|
|
46
|
+
return a.getTime() === b.getTime();
|
|
47
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
48
|
+
return a.length === b.length && a.every((x, i) => deepEqual(x, b[i]));
|
|
49
|
+
}
|
|
50
|
+
if (a && b && typeof a === 'object' && typeof b === 'object') {
|
|
51
|
+
const ka = Object.keys(a);
|
|
52
|
+
const kb = Object.keys(b);
|
|
53
|
+
return ka.length === kb.length && ka.every((k) => deepEqual(a[k], b[k]));
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
/** Comparable ordering for `<`/`>` operators, coercing Dates to their epoch. */
|
|
58
|
+
function cmp(a, b) {
|
|
59
|
+
const av = a instanceof Date ? a.getTime() : a;
|
|
60
|
+
const bv = b instanceof Date ? b.getTime() : b;
|
|
61
|
+
if (av < bv)
|
|
62
|
+
return -1;
|
|
63
|
+
if (av > bv)
|
|
64
|
+
return 1;
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
67
|
+
/** Translate a SQL LIKE pattern (`%`, `_`) into an anchored RegExp. */
|
|
68
|
+
function likeToRegExp(pattern, flags) {
|
|
69
|
+
let out = '';
|
|
70
|
+
for (const ch of pattern) {
|
|
71
|
+
if (ch === '%')
|
|
72
|
+
out += '.*';
|
|
73
|
+
else if (ch === '_')
|
|
74
|
+
out += '.';
|
|
75
|
+
else
|
|
76
|
+
out += ch.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
77
|
+
}
|
|
78
|
+
return new RegExp(`^${out}$`, flags);
|
|
79
|
+
}
|
|
80
|
+
/** Evaluate a single operator against an actual field value. */
|
|
81
|
+
function evalOperator(op, actual, operand) {
|
|
82
|
+
switch (op) {
|
|
83
|
+
case 'eq':
|
|
84
|
+
case 'is':
|
|
85
|
+
return deepEqual(actual, operand);
|
|
86
|
+
case 'ne':
|
|
87
|
+
return !deepEqual(actual, operand);
|
|
88
|
+
case 'gt':
|
|
89
|
+
return actual != null && operand != null && cmp(actual, operand) > 0;
|
|
90
|
+
case 'gte':
|
|
91
|
+
return actual != null && operand != null && cmp(actual, operand) >= 0;
|
|
92
|
+
case 'lt':
|
|
93
|
+
return actual != null && operand != null && cmp(actual, operand) < 0;
|
|
94
|
+
case 'lte':
|
|
95
|
+
return actual != null && operand != null && cmp(actual, operand) <= 0;
|
|
96
|
+
case 'in':
|
|
97
|
+
return Array.isArray(operand) && operand.some((v) => deepEqual(actual, v));
|
|
98
|
+
case 'notIn':
|
|
99
|
+
return Array.isArray(operand) && !operand.some((v) => deepEqual(actual, v));
|
|
100
|
+
case 'between':
|
|
101
|
+
return (Array.isArray(operand) && cmp(actual, operand[0]) >= 0 && cmp(actual, operand[1]) <= 0);
|
|
102
|
+
case 'notBetween':
|
|
103
|
+
return (Array.isArray(operand) && !(cmp(actual, operand[0]) >= 0 && cmp(actual, operand[1]) <= 0));
|
|
104
|
+
case 'isNull':
|
|
105
|
+
// `{ field: { [Op.isNull]: true } }` or `false` to invert.
|
|
106
|
+
return operand === false ? actual != null : actual == null;
|
|
107
|
+
case 'isNotNull':
|
|
108
|
+
return operand === false ? actual == null : actual != null;
|
|
109
|
+
case 'like':
|
|
110
|
+
case 'notLike': {
|
|
111
|
+
const ok = typeof actual === 'string' && likeToRegExp(String(operand), '').test(actual);
|
|
112
|
+
return op === 'like' ? ok : !ok;
|
|
113
|
+
}
|
|
114
|
+
case 'iLike':
|
|
115
|
+
case 'notILike': {
|
|
116
|
+
const ok = typeof actual === 'string' && likeToRegExp(String(operand), 'i').test(actual);
|
|
117
|
+
return op === 'iLike' ? ok : !ok;
|
|
118
|
+
}
|
|
119
|
+
case 'startsWith':
|
|
120
|
+
case 'notStartsWith': {
|
|
121
|
+
const ok = typeof actual === 'string' && actual.startsWith(String(operand));
|
|
122
|
+
return op === 'startsWith' ? ok : !ok;
|
|
123
|
+
}
|
|
124
|
+
case 'endsWith':
|
|
125
|
+
case 'notEndsWith': {
|
|
126
|
+
const ok = typeof actual === 'string' && actual.endsWith(String(operand));
|
|
127
|
+
return op === 'endsWith' ? ok : !ok;
|
|
128
|
+
}
|
|
129
|
+
case 'substring':
|
|
130
|
+
case 'notSubstring': {
|
|
131
|
+
const ok = typeof actual === 'string' && actual.includes(String(operand));
|
|
132
|
+
return op === 'substring' ? ok : !ok;
|
|
133
|
+
}
|
|
134
|
+
case 'regexp':
|
|
135
|
+
case 'notRegexp': {
|
|
136
|
+
const ok = typeof actual === 'string' && new RegExp(String(operand)).test(actual);
|
|
137
|
+
return op === 'regexp' ? ok : !ok;
|
|
138
|
+
}
|
|
139
|
+
case 'iRegexp':
|
|
140
|
+
case 'notIRegexp': {
|
|
141
|
+
const ok = typeof actual === 'string' && new RegExp(String(operand), 'i').test(actual);
|
|
142
|
+
return op === 'iRegexp' ? ok : !ok;
|
|
143
|
+
}
|
|
144
|
+
case 'contains': {
|
|
145
|
+
// Array containment: actual (array) contains all operand elements.
|
|
146
|
+
if (!Array.isArray(actual))
|
|
147
|
+
return false;
|
|
148
|
+
const ops = Array.isArray(operand) ? operand : [operand];
|
|
149
|
+
return ops.every((v) => actual.some((a) => deepEqual(a, v)));
|
|
150
|
+
}
|
|
151
|
+
case 'arrayContains':
|
|
152
|
+
return (Array.isArray(actual) &&
|
|
153
|
+
Array.isArray(operand) &&
|
|
154
|
+
operand.every((v) => actual.some((a) => deepEqual(a, v))));
|
|
155
|
+
case 'arrayContainedBy':
|
|
156
|
+
return (Array.isArray(actual) &&
|
|
157
|
+
Array.isArray(operand) &&
|
|
158
|
+
actual.every((a) => operand.some((v) => deepEqual(a, v))));
|
|
159
|
+
case 'arrayOverlaps':
|
|
160
|
+
return (Array.isArray(actual) &&
|
|
161
|
+
Array.isArray(operand) &&
|
|
162
|
+
actual.some((a) => operand.some((v) => deepEqual(a, v))));
|
|
163
|
+
default:
|
|
164
|
+
throw new Error(`Unsupported where operator "${op}" in embedded KV query`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/** Match a single field's value against a condition (equality or operator map). */
|
|
168
|
+
function matchField(actual, condition) {
|
|
169
|
+
if (condition === null)
|
|
170
|
+
return actual == null;
|
|
171
|
+
if (typeof condition !== 'object' ||
|
|
172
|
+
condition instanceof Date ||
|
|
173
|
+
Array.isArray(condition)) {
|
|
174
|
+
// Bare value -> equality.
|
|
175
|
+
return deepEqual(actual, condition);
|
|
176
|
+
}
|
|
177
|
+
// Operator map: every operator must hold (implicit AND).
|
|
178
|
+
const keys = Reflect.ownKeys(condition);
|
|
179
|
+
if (keys.length === 0)
|
|
180
|
+
return true;
|
|
181
|
+
return keys.every((k) => {
|
|
182
|
+
const op = opName(k);
|
|
183
|
+
const operand = condition[k];
|
|
184
|
+
if (LOGICAL.has(op)) {
|
|
185
|
+
// Nested logical operator on a field value is rare but supported.
|
|
186
|
+
return matchField(actual, { [k]: operand });
|
|
187
|
+
}
|
|
188
|
+
return evalOperator(op, actual, operand);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/** Evaluate a full where clause against a document. */
|
|
192
|
+
function matchWhere(doc, where) {
|
|
193
|
+
const keys = Reflect.ownKeys(where);
|
|
194
|
+
return keys.every((key) => {
|
|
195
|
+
const op = opName(key);
|
|
196
|
+
const value = where[key];
|
|
197
|
+
if (op === 'and') {
|
|
198
|
+
const arr = Array.isArray(value) ? value : [value];
|
|
199
|
+
return arr.every((sub) => matchWhere(doc, sub));
|
|
200
|
+
}
|
|
201
|
+
if (op === 'or') {
|
|
202
|
+
const arr = Array.isArray(value) ? value : [value];
|
|
203
|
+
return arr.some((sub) => matchWhere(doc, sub));
|
|
204
|
+
}
|
|
205
|
+
if (op === 'not') {
|
|
206
|
+
const arr = Array.isArray(value) ? value : [value];
|
|
207
|
+
return !arr.some((sub) => matchWhere(doc, sub));
|
|
208
|
+
}
|
|
209
|
+
// Otherwise `key` is a field name (symbol keys only ever encode operators,
|
|
210
|
+
// so a symbol here that is not logical is an operator with no field - skip).
|
|
211
|
+
if (typeof key === 'symbol')
|
|
212
|
+
return true;
|
|
213
|
+
return matchField(getPath(doc, key), value);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
/** Normalize an `order` spec into `[field, ascending]` tuples. */
|
|
217
|
+
function normalizeOrder(order) {
|
|
218
|
+
if (typeof order === 'string')
|
|
219
|
+
return [[order, true]];
|
|
220
|
+
return order.map((entry) => {
|
|
221
|
+
if (typeof entry === 'string')
|
|
222
|
+
return [entry, true];
|
|
223
|
+
const [field, dir] = entry;
|
|
224
|
+
return [field, String(dir).toUpperCase() !== 'DESC'];
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
/** Return a new array sorted by the order spec (stable, multi-key). */
|
|
228
|
+
function applyOrder(rows, order) {
|
|
229
|
+
const keys = normalizeOrder(order);
|
|
230
|
+
return [...rows].sort((a, b) => {
|
|
231
|
+
for (const [field, asc] of keys) {
|
|
232
|
+
const c = cmp(getPath(a, field), getPath(b, field));
|
|
233
|
+
if (c !== 0)
|
|
234
|
+
return asc ? c : -c;
|
|
235
|
+
}
|
|
236
|
+
return 0;
|
|
237
|
+
});
|
|
238
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rockset store.
|
|
3
|
+
*
|
|
4
|
+
* Rockset is a real-time analytics database that indexes streaming and
|
|
5
|
+
* document data (a "converged index" over row, columnar, and inverted
|
|
6
|
+
* indexes) and serves low-latency SQL over it. It is a schemaless,
|
|
7
|
+
* document-oriented, HTTP/JSON service with an official client
|
|
8
|
+
* (`@rockset/client`); there is no relational connection, no server-side
|
|
9
|
+
* transactions, and ingestion is document-based (`addDocuments`), so it does
|
|
10
|
+
* not fit the SQL-shaped `Dialect` interface (`src/dialects/dialect.ts`).
|
|
11
|
+
* This class implements the minimal `NoSqlStore` marker interface
|
|
12
|
+
* (`src/nosql/store.ts`) and exposes Rockset's query + document API directly.
|
|
13
|
+
*
|
|
14
|
+
* ## Driver: `@rockset/client`
|
|
15
|
+
*
|
|
16
|
+
* The `@rockset/client` package is an optional peer dependency, lazily
|
|
17
|
+
* `require`d inside `connect()` so importing this module never forces it to be
|
|
18
|
+
* installed. Tests inject a pre-built mock client via `RocksetStoreOptions.client`,
|
|
19
|
+
* which skips the `require` entirely.
|
|
20
|
+
*/
|
|
21
|
+
import type { NoSqlStore } from '../store';
|
|
22
|
+
/**
|
|
23
|
+
* Minimal structural type for the pieces of a `@rockset/client` instance this
|
|
24
|
+
* store uses. Kept local so this module type-checks without the optional
|
|
25
|
+
* driver installed.
|
|
26
|
+
*/
|
|
27
|
+
export interface RocksetClientLike {
|
|
28
|
+
queries: {
|
|
29
|
+
query(request: {
|
|
30
|
+
sql: {
|
|
31
|
+
query: string;
|
|
32
|
+
parameters?: unknown[];
|
|
33
|
+
};
|
|
34
|
+
}): Promise<any>;
|
|
35
|
+
};
|
|
36
|
+
documents: {
|
|
37
|
+
addDocuments(workspace: string, collection: string, request: {
|
|
38
|
+
data: unknown[];
|
|
39
|
+
}): Promise<any>;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/** Connection options for `RocksetStore`. */
|
|
43
|
+
export interface RocksetStoreOptions {
|
|
44
|
+
/** Rockset API key used to authenticate the client. */
|
|
45
|
+
apiKey?: string;
|
|
46
|
+
/** Rockset API server host, e.g. `https://api.usw2a1.rockset.com`. */
|
|
47
|
+
host?: string;
|
|
48
|
+
/**
|
|
49
|
+
* A pre-built `@rockset/client` instance (or compatible mock). When provided,
|
|
50
|
+
* `connect()` uses it directly and skips `require('@rockset/client')`. This
|
|
51
|
+
* is how tests inject a mock without the real driver installed.
|
|
52
|
+
*/
|
|
53
|
+
client?: RocksetClientLike;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* `RocksetStore` wraps a `@rockset/client` instance and exposes SQL querying
|
|
57
|
+
* (`query`) plus document ingestion (`ingest`) into a `workspace.collection`.
|
|
58
|
+
*/
|
|
59
|
+
export declare class RocksetStore implements NoSqlStore {
|
|
60
|
+
readonly name = "rockset";
|
|
61
|
+
readonly library = "@rockset/client";
|
|
62
|
+
private readonly options;
|
|
63
|
+
private client;
|
|
64
|
+
private connected;
|
|
65
|
+
constructor(options?: RocksetStoreOptions);
|
|
66
|
+
connect(): Promise<void>;
|
|
67
|
+
disconnect(): Promise<void>;
|
|
68
|
+
isConnected(): boolean;
|
|
69
|
+
/** Returns the underlying `@rockset/client` instance for anything not wrapped here. */
|
|
70
|
+
getClient(): RocksetClientLike;
|
|
71
|
+
private requireClient;
|
|
72
|
+
/**
|
|
73
|
+
* Run a SQL query via `client.queries.query({ sql: { query, parameters } })`
|
|
74
|
+
* and return the `results` array from the response.
|
|
75
|
+
*/
|
|
76
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Ingest `docs` into `target` (a `workspace.collection` path, or just a
|
|
79
|
+
* collection name — defaulting the workspace to `commons`) via
|
|
80
|
+
* `client.documents.addDocuments(workspace, collection, { data })`.
|
|
81
|
+
*/
|
|
82
|
+
ingest(target: string, docs: Array<Record<string, unknown>>): Promise<any>;
|
|
83
|
+
}
|
|
84
|
+
export default RocksetStore;
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import type { NoSqlStore } from '../store';
|
|
2
|
+
/**
|
|
3
|
+
* A loosely-typed handle to an AWS v3 `S3Client` (or any object exposing a
|
|
4
|
+
* compatible `send(command)` method). Kept as an interface rather than the
|
|
5
|
+
* real SDK type because `@aws-sdk/client-s3` is loaded lazily and may not be
|
|
6
|
+
* installed at type-check time; tests inject a mock matching this shape.
|
|
7
|
+
*/
|
|
8
|
+
export interface S3ClientLike {
|
|
9
|
+
send(command: unknown): Promise<any>;
|
|
10
|
+
destroy?(): void;
|
|
11
|
+
}
|
|
12
|
+
/** Connection options for `S3Store`. */
|
|
13
|
+
export interface S3StoreOptions {
|
|
14
|
+
/** AWS region, e.g. 'us-east-1'. */
|
|
15
|
+
region?: string;
|
|
16
|
+
/** Static credentials. Omit to fall back to the default AWS credential provider chain. */
|
|
17
|
+
credentials?: {
|
|
18
|
+
accessKeyId: string;
|
|
19
|
+
secretAccessKey: string;
|
|
20
|
+
sessionToken?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Override the service endpoint, e.g. 'http://localhost:9000' for a
|
|
24
|
+
* MinIO / LocalStack S3-compatible server. When set, region and
|
|
25
|
+
* credentials can be dummy values for servers that don't validate them.
|
|
26
|
+
*/
|
|
27
|
+
endpoint?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Use path-style bucket addressing (`endpoint/bucket/key`) instead of
|
|
30
|
+
* virtual-hosted-style (`bucket.endpoint/key`). Usually required for
|
|
31
|
+
* MinIO / LocalStack and other S3-compatible servers.
|
|
32
|
+
*/
|
|
33
|
+
forcePathStyle?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* A pre-built `S3Client` (or compatible object). When provided,
|
|
36
|
+
* `connect()` uses it directly and does NOT require the SDK — this is how
|
|
37
|
+
* tests inject a mock client, and how callers can supply a custom-configured
|
|
38
|
+
* client. When omitted, `connect()` builds a real `S3Client` from the
|
|
39
|
+
* options above.
|
|
40
|
+
*/
|
|
41
|
+
client?: S3ClientLike;
|
|
42
|
+
}
|
|
43
|
+
/** Options for `putObject()`. */
|
|
44
|
+
export interface PutObjectOptions {
|
|
45
|
+
/** MIME type of the body, e.g. 'application/json'. */
|
|
46
|
+
contentType?: string;
|
|
47
|
+
/** Arbitrary user metadata (stored as `x-amz-meta-*` headers). */
|
|
48
|
+
metadata?: Record<string, string>;
|
|
49
|
+
/** Cache-Control header value to store with the object. */
|
|
50
|
+
cacheControl?: string;
|
|
51
|
+
/** Content-Encoding header value to store with the object. */
|
|
52
|
+
contentEncoding?: string;
|
|
53
|
+
/** Canned ACL, e.g. 'private', 'public-read'. */
|
|
54
|
+
acl?: string;
|
|
55
|
+
/** Server-side encryption algorithm, e.g. 'AES256', 'aws:kms'. */
|
|
56
|
+
serverSideEncryption?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Result of `putObject()`. */
|
|
59
|
+
export interface PutObjectResult {
|
|
60
|
+
/** Entity tag of the newly stored object. */
|
|
61
|
+
etag?: string;
|
|
62
|
+
/** Version ID, when the bucket has versioning enabled. */
|
|
63
|
+
versionId?: string;
|
|
64
|
+
}
|
|
65
|
+
/** Result of `getObject()`. */
|
|
66
|
+
export interface GetObjectResult {
|
|
67
|
+
/** The object's body stream/blob, exactly as the SDK returns it. */
|
|
68
|
+
body: unknown;
|
|
69
|
+
contentType?: string;
|
|
70
|
+
contentLength?: number;
|
|
71
|
+
etag?: string;
|
|
72
|
+
lastModified?: Date;
|
|
73
|
+
metadata?: Record<string, string>;
|
|
74
|
+
}
|
|
75
|
+
/** Result of `headObject()` — object metadata without the body. */
|
|
76
|
+
export interface HeadObjectResult {
|
|
77
|
+
contentType?: string;
|
|
78
|
+
contentLength?: number;
|
|
79
|
+
etag?: string;
|
|
80
|
+
lastModified?: Date;
|
|
81
|
+
metadata?: Record<string, string>;
|
|
82
|
+
}
|
|
83
|
+
/** A single object entry in a `listObjects()` result. */
|
|
84
|
+
export interface S3ObjectSummary {
|
|
85
|
+
key?: string;
|
|
86
|
+
size?: number;
|
|
87
|
+
etag?: string;
|
|
88
|
+
lastModified?: Date;
|
|
89
|
+
}
|
|
90
|
+
/** Result of `listObjects()`. */
|
|
91
|
+
export interface ListObjectsResult {
|
|
92
|
+
objects: S3ObjectSummary[];
|
|
93
|
+
/** True when the listing was truncated (more objects exist than were returned). */
|
|
94
|
+
isTruncated: boolean;
|
|
95
|
+
/** Continuation token to fetch the next page, present when `isTruncated`. */
|
|
96
|
+
nextContinuationToken?: string;
|
|
97
|
+
}
|
|
98
|
+
/** Result of `copyObject()`. */
|
|
99
|
+
export interface CopyObjectResult {
|
|
100
|
+
etag?: string;
|
|
101
|
+
lastModified?: Date;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Amazon S3 store, implementing the minimal `NoSqlStore` marker interface.
|
|
105
|
+
* Unlike the SQL dialects, there is no `query(sql)` — S3's operations are
|
|
106
|
+
* object-shaped (Put/Get/Delete/List/Head/Copy) and that shape is preserved
|
|
107
|
+
* here rather than forced into a SQL string.
|
|
108
|
+
*/
|
|
109
|
+
export declare class S3Store implements NoSqlStore {
|
|
110
|
+
readonly name = "s3";
|
|
111
|
+
readonly library = "@aws-sdk/client-s3";
|
|
112
|
+
private readonly options;
|
|
113
|
+
private client;
|
|
114
|
+
private aws;
|
|
115
|
+
private connected;
|
|
116
|
+
constructor(options?: S3StoreOptions);
|
|
117
|
+
connect(): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Attempt to lazy-load `@aws-sdk/client-s3` for its command constructors.
|
|
120
|
+
* Best-effort: when a client was injected (e.g. a test mock) the SDK may
|
|
121
|
+
* not be installed, so a failure here is swallowed and the command classes
|
|
122
|
+
* are loaded on demand instead (see `command()`).
|
|
123
|
+
*/
|
|
124
|
+
private tryLoadSdk;
|
|
125
|
+
disconnect(): Promise<void>;
|
|
126
|
+
isConnected(): boolean;
|
|
127
|
+
/** Returns the underlying `S3Client` (loosely typed) for anything not wrapped here. */
|
|
128
|
+
getClient(): S3ClientLike;
|
|
129
|
+
private requireClient;
|
|
130
|
+
/**
|
|
131
|
+
* Resolve an S3 command constructor by name from the (lazily loaded) SDK,
|
|
132
|
+
* so that with an injected mock client we only load `@aws-sdk/client-s3`
|
|
133
|
+
* the first time a command is actually built. Throws a `ConnectionError`
|
|
134
|
+
* if the SDK genuinely can't be resolved.
|
|
135
|
+
*/
|
|
136
|
+
private command;
|
|
137
|
+
/** Wraps an AWS SDK failure in a `DatabaseError`, preserving the original error. */
|
|
138
|
+
private wrapError;
|
|
139
|
+
/** `PutObject` — store an object's body (and optional metadata) under `bucket`/`key`. */
|
|
140
|
+
putObject(bucket: string, key: string, body: unknown, options?: PutObjectOptions): Promise<PutObjectResult>;
|
|
141
|
+
/** `GetObject` — fetch an object's body and metadata. */
|
|
142
|
+
getObject(bucket: string, key: string): Promise<GetObjectResult>;
|
|
143
|
+
/** `DeleteObject` — remove an object. Succeeds even if the key doesn't exist. */
|
|
144
|
+
deleteObject(bucket: string, key: string): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* `ListObjectsV2` — list objects in `bucket`, optionally restricted to
|
|
147
|
+
* those whose key starts with `prefix`. A single call returns at most
|
|
148
|
+
* 1000 objects; use `result.nextContinuationToken` (via the raw client)
|
|
149
|
+
* to page beyond that.
|
|
150
|
+
*/
|
|
151
|
+
listObjects(bucket: string, prefix?: string): Promise<ListObjectsResult>;
|
|
152
|
+
/** `HeadObject` — fetch an object's metadata without its body. Throws (NotFound) if the object doesn't exist. */
|
|
153
|
+
headObject(bucket: string, key: string): Promise<HeadObjectResult>;
|
|
154
|
+
/**
|
|
155
|
+
* Whether an object exists, implemented via `HeadObject`. Returns `false`
|
|
156
|
+
* when S3 reports the object is missing (a `NotFound` / 404 error) rather
|
|
157
|
+
* than throwing; any other error (e.g. access denied) is re-thrown.
|
|
158
|
+
*/
|
|
159
|
+
objectExists(bucket: string, key: string): Promise<boolean>;
|
|
160
|
+
/** `CopyObject` — server-side copy from `srcBucket`/`srcKey` to `destBucket`/`destKey`. */
|
|
161
|
+
copyObject(srcBucket: string, srcKey: string, destBucket: string, destKey: string): Promise<CopyObjectResult>;
|
|
162
|
+
/**
|
|
163
|
+
* Recognize S3's "object does not exist" errors across the shapes the SDK
|
|
164
|
+
* (and its wrapped form here) can surface them: the raw error's `.name`
|
|
165
|
+
* (`NotFound`, `NoSuchKey`), its HTTP status (404), or the wrapped
|
|
166
|
+
* `DatabaseError`'s `.parent`.
|
|
167
|
+
*/
|
|
168
|
+
private isNotFound;
|
|
169
|
+
}
|
|
170
|
+
export default S3Store;
|