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,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.translateWhereToMongo = translateWhereToMongo;
|
|
4
|
+
exports.translateOrderToMongo = translateOrderToMongo;
|
|
5
|
+
/**
|
|
6
|
+
* ORM where-clause translator for the MongoDB store.
|
|
7
|
+
*
|
|
8
|
+
* Turns the ORM's `where` shape (plain-object field conditions, `Op.*`
|
|
9
|
+
* comparison symbols, and `Op.and`/`Op.or`/`Op.not` logical symbols) directly
|
|
10
|
+
* into a native MongoDB query filter (`$gt`, `$in`, `$regex`, `$and`/`$or`/
|
|
11
|
+
* `$nor`, ...). This is what lets callers write standard ORM queries
|
|
12
|
+
* (`{ age: { [Op.gte]: 18 } }`) instead of hand-building Mongo filter objects.
|
|
13
|
+
*/
|
|
14
|
+
const operators_1 = require("../../operators");
|
|
15
|
+
const index_1 = require("../../errors/index");
|
|
16
|
+
/** Whether `v` is a plain object carrying `Op.*` comparison symbols. */
|
|
17
|
+
function hasOpSymbols(v) {
|
|
18
|
+
return (v !== null &&
|
|
19
|
+
typeof v === 'object' &&
|
|
20
|
+
!Array.isArray(v) &&
|
|
21
|
+
Object.getOwnPropertySymbols(v).length > 0);
|
|
22
|
+
}
|
|
23
|
+
function escapeRegex(s) {
|
|
24
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
25
|
+
}
|
|
26
|
+
/** Translate a SQL `LIKE` pattern into a MongoDB `$regex` source string. */
|
|
27
|
+
function likeToRegexSource(pattern) {
|
|
28
|
+
let out = '^';
|
|
29
|
+
for (const ch of pattern) {
|
|
30
|
+
if (ch === '%')
|
|
31
|
+
out += '.*';
|
|
32
|
+
else if (ch === '_')
|
|
33
|
+
out += '.';
|
|
34
|
+
else
|
|
35
|
+
out += escapeRegex(ch);
|
|
36
|
+
}
|
|
37
|
+
return out + '$';
|
|
38
|
+
}
|
|
39
|
+
/** Translate one `{ [Op.*]: value }` object into the Mongo operators for a single field. */
|
|
40
|
+
function translateFieldOps(opObj) {
|
|
41
|
+
const out = {};
|
|
42
|
+
for (const op of Object.getOwnPropertySymbols(opObj)) {
|
|
43
|
+
const value = opObj[op];
|
|
44
|
+
switch (op) {
|
|
45
|
+
case operators_1.Op.eq:
|
|
46
|
+
out.$eq = value;
|
|
47
|
+
break;
|
|
48
|
+
case operators_1.Op.ne:
|
|
49
|
+
out.$ne = value;
|
|
50
|
+
break;
|
|
51
|
+
case operators_1.Op.gt:
|
|
52
|
+
out.$gt = value;
|
|
53
|
+
break;
|
|
54
|
+
case operators_1.Op.gte:
|
|
55
|
+
out.$gte = value;
|
|
56
|
+
break;
|
|
57
|
+
case operators_1.Op.lt:
|
|
58
|
+
out.$lt = value;
|
|
59
|
+
break;
|
|
60
|
+
case operators_1.Op.lte:
|
|
61
|
+
out.$lte = value;
|
|
62
|
+
break;
|
|
63
|
+
case operators_1.Op.in:
|
|
64
|
+
out.$in = value;
|
|
65
|
+
break;
|
|
66
|
+
case operators_1.Op.notIn:
|
|
67
|
+
out.$nin = value;
|
|
68
|
+
break;
|
|
69
|
+
case operators_1.Op.between: {
|
|
70
|
+
const [lo, hi] = value;
|
|
71
|
+
out.$gte = lo;
|
|
72
|
+
out.$lte = hi;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case operators_1.Op.notBetween: {
|
|
76
|
+
const [lo, hi] = value;
|
|
77
|
+
out.$not = { $gte: lo, $lte: hi };
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case operators_1.Op.isNull:
|
|
81
|
+
out.$eq = null;
|
|
82
|
+
break;
|
|
83
|
+
case operators_1.Op.isNotNull:
|
|
84
|
+
out.$ne = null;
|
|
85
|
+
break;
|
|
86
|
+
case operators_1.Op.like:
|
|
87
|
+
out.$regex = likeToRegexSource(String(value));
|
|
88
|
+
break;
|
|
89
|
+
case operators_1.Op.iLike:
|
|
90
|
+
out.$regex = likeToRegexSource(String(value));
|
|
91
|
+
out.$options = 'i';
|
|
92
|
+
break;
|
|
93
|
+
case operators_1.Op.notLike:
|
|
94
|
+
// $not requires a BSON regex, not a { $regex } document (that throws
|
|
95
|
+
// "$not needs a regex or a document" at query time).
|
|
96
|
+
out.$not = new RegExp(likeToRegexSource(String(value)));
|
|
97
|
+
break;
|
|
98
|
+
case operators_1.Op.notILike:
|
|
99
|
+
out.$not = new RegExp(likeToRegexSource(String(value)), 'i');
|
|
100
|
+
break;
|
|
101
|
+
case operators_1.Op.startsWith:
|
|
102
|
+
out.$regex = '^' + escapeRegex(String(value));
|
|
103
|
+
break;
|
|
104
|
+
case operators_1.Op.endsWith:
|
|
105
|
+
out.$regex = escapeRegex(String(value)) + '$';
|
|
106
|
+
break;
|
|
107
|
+
case operators_1.Op.substring:
|
|
108
|
+
case operators_1.Op.contains:
|
|
109
|
+
out.$regex = escapeRegex(String(value));
|
|
110
|
+
break;
|
|
111
|
+
case operators_1.Op.regexp:
|
|
112
|
+
out.$regex = String(value);
|
|
113
|
+
break;
|
|
114
|
+
case operators_1.Op.iRegexp:
|
|
115
|
+
out.$regex = String(value);
|
|
116
|
+
out.$options = 'i';
|
|
117
|
+
break;
|
|
118
|
+
case operators_1.Op.notRegexp:
|
|
119
|
+
out.$not = new RegExp(String(value));
|
|
120
|
+
break;
|
|
121
|
+
case operators_1.Op.notIRegexp:
|
|
122
|
+
out.$not = new RegExp(String(value), 'i');
|
|
123
|
+
break;
|
|
124
|
+
default:
|
|
125
|
+
throw new index_1.DatabaseError(`MongoDB: unsupported where operator "${op.toString()}"`, {
|
|
126
|
+
code: index_1.ErrorCodes.QUERY_ERROR,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Translate an ORM `where` object into a native MongoDB filter document.
|
|
134
|
+
* A bare `{ field: value }` maps to equality, an array value to `$in`, and
|
|
135
|
+
* `Op.and`/`Op.or`/`Op.not` to `$and`/`$or`/`$nor`.
|
|
136
|
+
*/
|
|
137
|
+
function translateWhereToMongo(where) {
|
|
138
|
+
if (!where)
|
|
139
|
+
return {};
|
|
140
|
+
const out = {};
|
|
141
|
+
for (const sym of Object.getOwnPropertySymbols(where)) {
|
|
142
|
+
const val = where[sym];
|
|
143
|
+
if (sym === operators_1.Op.and) {
|
|
144
|
+
out.$and = val.map(translateWhereToMongo);
|
|
145
|
+
}
|
|
146
|
+
else if (sym === operators_1.Op.or) {
|
|
147
|
+
out.$or = val.map(translateWhereToMongo);
|
|
148
|
+
}
|
|
149
|
+
else if (sym === operators_1.Op.not) {
|
|
150
|
+
out.$nor = [translateWhereToMongo(val)];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
for (const field of Object.keys(where)) {
|
|
154
|
+
const val = where[field];
|
|
155
|
+
if (hasOpSymbols(val)) {
|
|
156
|
+
out[field] = translateFieldOps(val);
|
|
157
|
+
}
|
|
158
|
+
else if (Array.isArray(val)) {
|
|
159
|
+
out[field] = { $in: val };
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
out[field] = val;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return out;
|
|
166
|
+
}
|
|
167
|
+
/** Build a MongoDB `sort` document from ORM ordering terms. */
|
|
168
|
+
function translateOrderToMongo(order) {
|
|
169
|
+
if (order === undefined)
|
|
170
|
+
return undefined;
|
|
171
|
+
const single = Array.isArray(order) && order.length === 2 && typeof order[0] === 'string' && (order[1] === 'ASC' || order[1] === 'DESC');
|
|
172
|
+
const terms = (Array.isArray(order) && !single ? order : [order]);
|
|
173
|
+
const sort = {};
|
|
174
|
+
for (const term of terms) {
|
|
175
|
+
if (typeof term === 'string')
|
|
176
|
+
sort[term] = 1;
|
|
177
|
+
else
|
|
178
|
+
sort[term[0]] = term[1] === 'DESC' ? -1 : 1;
|
|
179
|
+
}
|
|
180
|
+
return sort;
|
|
181
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NATS store implementation.
|
|
3
|
+
*
|
|
4
|
+
* NATS is a lightweight publish/subscribe and request/reply messaging system.
|
|
5
|
+
* Its JetStream layer adds persistence, including a key/value (KV) store built
|
|
6
|
+
* on top of streams. NATS has no query language and does not fit the
|
|
7
|
+
* SQL-shaped `Dialect` interface, so this class implements the minimal
|
|
8
|
+
* `NoSqlStore` marker interface and exposes NATS's real operations
|
|
9
|
+
* (core pub/sub, request/reply, and JetStream KV) instead of forcing
|
|
10
|
+
* everything into a `query(sql)` shape.
|
|
11
|
+
*
|
|
12
|
+
* Uses the `nats` driver (`nats.js`). The driver is lazy-loaded inside
|
|
13
|
+
* `connect()` via `require('nats')` so that importing this module never
|
|
14
|
+
* pulls in the driver unless a connection is actually opened; tests inject a
|
|
15
|
+
* pre-built connection through the `client` option and never touch the real
|
|
16
|
+
* driver or the network.
|
|
17
|
+
*
|
|
18
|
+
* Encoding: NATS messages are byte payloads (`Uint8Array`). `publish()` and
|
|
19
|
+
* `request()` accept either a `string` (UTF-8 encoded via `TextEncoder`) or a
|
|
20
|
+
* `Uint8Array` (passed through unchanged). `subscribe()` handlers and
|
|
21
|
+
* `request()` replies deliver the raw `Uint8Array` payload; decode with
|
|
22
|
+
* `TextDecoder` (or the message's own `.string()`/`.json()` helpers when using
|
|
23
|
+
* the real driver) as needed. JetStream KV values are encoded the same way on
|
|
24
|
+
* write, and `kvGet()` returns the entry's raw `Uint8Array` value (or `null`
|
|
25
|
+
* when the key is absent).
|
|
26
|
+
*/
|
|
27
|
+
import { NoSqlStore } from '../store';
|
|
28
|
+
/**
|
|
29
|
+
* A NATS message payload accepted by `publish()`/`request()`/`kvPut()`.
|
|
30
|
+
* Strings are UTF-8 encoded; `Uint8Array` values are sent as-is.
|
|
31
|
+
*/
|
|
32
|
+
export type NatsPayload = string | Uint8Array;
|
|
33
|
+
/**
|
|
34
|
+
* A minimal structural view of the pieces of a `nats` `NatsConnection` this
|
|
35
|
+
* store uses. Kept intentionally loose (`any`-returning) because the real
|
|
36
|
+
* driver's types are not available at build time (the package is optional).
|
|
37
|
+
*/
|
|
38
|
+
export interface NatsConnectionLike {
|
|
39
|
+
publish(subject: string, data?: Uint8Array, opts?: unknown): void;
|
|
40
|
+
subscribe(subject: string, opts?: unknown): unknown;
|
|
41
|
+
request(subject: string, data?: Uint8Array, opts?: unknown): Promise<unknown>;
|
|
42
|
+
jetstream(opts?: unknown): {
|
|
43
|
+
views: {
|
|
44
|
+
kv(bucket: string, opts?: unknown): Promise<NatsKvLike>;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
drain?(): Promise<void>;
|
|
48
|
+
close?(): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
/** A minimal structural view of a JetStream KV bucket view. */
|
|
51
|
+
export interface NatsKvLike {
|
|
52
|
+
put(key: string, value: Uint8Array): Promise<number>;
|
|
53
|
+
get(key: string): Promise<{
|
|
54
|
+
value: Uint8Array;
|
|
55
|
+
} | null>;
|
|
56
|
+
delete(key: string): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
/** A handler invoked for each message delivered to a `subscribe()` subject. */
|
|
59
|
+
export type NatsMessageHandler = (err: Error | null, msg: unknown) => void;
|
|
60
|
+
/** Connection options for `NatsStore`. */
|
|
61
|
+
export interface NatsStoreOptions {
|
|
62
|
+
/**
|
|
63
|
+
* One or more NATS server URLs (e.g. `nats://localhost:4222`). Passed
|
|
64
|
+
* straight through to the driver's `connect({ servers })`.
|
|
65
|
+
*/
|
|
66
|
+
servers?: string | string[];
|
|
67
|
+
/** Token auth. */
|
|
68
|
+
token?: string;
|
|
69
|
+
/** Username for user/password auth. */
|
|
70
|
+
user?: string;
|
|
71
|
+
/** Password for user/password auth. */
|
|
72
|
+
pass?: string;
|
|
73
|
+
/**
|
|
74
|
+
* A pre-built `NatsConnection`. When provided, `connect()` adopts it
|
|
75
|
+
* directly and never calls `require('nats')` — this is how tests inject a
|
|
76
|
+
* mock connection without the real driver or a network.
|
|
77
|
+
*/
|
|
78
|
+
client?: NatsConnectionLike;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* `NatsStore` wraps a `nats` `NatsConnection` and exposes NATS's core
|
|
82
|
+
* publish/subscribe and request/reply operations plus JetStream KV
|
|
83
|
+
* (`kvPut`/`kvGet`/`kvDelete`) as a typed, promise-based API.
|
|
84
|
+
*/
|
|
85
|
+
export declare class NatsStore implements NoSqlStore {
|
|
86
|
+
readonly name = "nats";
|
|
87
|
+
readonly library = "nats";
|
|
88
|
+
private readonly options;
|
|
89
|
+
private connection;
|
|
90
|
+
private connected;
|
|
91
|
+
/** Cached JetStream KV bucket views, keyed by bucket name. */
|
|
92
|
+
private readonly kvCache;
|
|
93
|
+
constructor(options?: NatsStoreOptions);
|
|
94
|
+
connect(): Promise<void>;
|
|
95
|
+
disconnect(): Promise<void>;
|
|
96
|
+
isConnected(): boolean;
|
|
97
|
+
/** Returns the underlying `nats` connection for anything not wrapped here. */
|
|
98
|
+
getClient(): NatsConnectionLike;
|
|
99
|
+
private requireConnection;
|
|
100
|
+
/**
|
|
101
|
+
* Publish `data` to `subject`. The payload is encoded per the module's
|
|
102
|
+
* encoding rules (string → UTF-8, `Uint8Array` → as-is).
|
|
103
|
+
*/
|
|
104
|
+
publish(subject: string, data: NatsPayload): void;
|
|
105
|
+
/**
|
|
106
|
+
* Subscribe to `subject`, invoking `handler` for each message via the
|
|
107
|
+
* driver's callback option (`subscribe(subject, { callback })`). Returns the
|
|
108
|
+
* driver's `Subscription` (call `.unsubscribe()` / `.drain()` on it to stop).
|
|
109
|
+
* The callback style is chosen over the async-iterator style so a handler
|
|
110
|
+
* can be registered without spawning a consuming loop.
|
|
111
|
+
*/
|
|
112
|
+
subscribe(subject: string, handler: NatsMessageHandler): unknown;
|
|
113
|
+
/**
|
|
114
|
+
* Send a request to `subject` and await a single reply. `opts` is passed
|
|
115
|
+
* straight through to the driver (e.g. `{ timeout }`). Resolves with the
|
|
116
|
+
* driver's reply `Msg`; read `.data` / `.string()` / `.json()` off it.
|
|
117
|
+
*/
|
|
118
|
+
request(subject: string, data: NatsPayload, opts?: unknown): Promise<unknown>;
|
|
119
|
+
/**
|
|
120
|
+
* Lazily resolve (and cache) the JetStream KV bucket view for `bucket` via
|
|
121
|
+
* `connection.jetstream().views.kv(bucket)`. Subsequent calls for the same
|
|
122
|
+
* bucket return the cached view.
|
|
123
|
+
*/
|
|
124
|
+
kv(bucket: string): Promise<NatsKvLike>;
|
|
125
|
+
/**
|
|
126
|
+
* Put `value` at `key` in `bucket`'s KV store (encoded per the module's
|
|
127
|
+
* encoding rules). Returns the revision number assigned by JetStream.
|
|
128
|
+
*/
|
|
129
|
+
kvPut(bucket: string, key: string, value: NatsPayload): Promise<number>;
|
|
130
|
+
/**
|
|
131
|
+
* Get the raw value stored at `key` in `bucket`, or `null` if the key is
|
|
132
|
+
* absent (or holds a deleted/purged entry). Returns the entry's
|
|
133
|
+
* `Uint8Array` value; decode with `TextDecoder` as needed.
|
|
134
|
+
*/
|
|
135
|
+
kvGet(bucket: string, key: string): Promise<Uint8Array | null>;
|
|
136
|
+
/** Delete `key` from `bucket`'s KV store. */
|
|
137
|
+
kvDelete(bucket: string, key: string): Promise<void>;
|
|
138
|
+
}
|
|
139
|
+
export default NatsStore;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { NoSqlStore } from '../store';
|
|
2
|
+
/** A single entry in a `batch()` write: a `put` (with document value) or a `del`. */
|
|
3
|
+
export type NedbBatchOp = {
|
|
4
|
+
type: 'put';
|
|
5
|
+
key: string;
|
|
6
|
+
value: Record<string, unknown>;
|
|
7
|
+
} | {
|
|
8
|
+
type: 'del';
|
|
9
|
+
key: string;
|
|
10
|
+
};
|
|
11
|
+
/** A NeDB document: an arbitrary record that carries an `_id`. */
|
|
12
|
+
export type NedbDoc = Record<string, unknown> & {
|
|
13
|
+
_id?: string;
|
|
14
|
+
};
|
|
15
|
+
type NodeCallback<T> = (err: Error | null, result?: T) => void;
|
|
16
|
+
/**
|
|
17
|
+
* Minimal structural type for the pieces of a `nedb` `Datastore` this store
|
|
18
|
+
* uses. Kept local (rather than importing from `nedb`) so this module
|
|
19
|
+
* type-checks without the optional driver installed.
|
|
20
|
+
*/
|
|
21
|
+
export interface NedbClientLike {
|
|
22
|
+
insert(doc: NedbDoc, cb: NodeCallback<NedbDoc>): void;
|
|
23
|
+
findOne(query: Record<string, unknown>, cb: NodeCallback<NedbDoc | null>): void;
|
|
24
|
+
find(query: Record<string, unknown>, cb: NodeCallback<NedbDoc[]>): void;
|
|
25
|
+
remove(query: Record<string, unknown>, options: Record<string, unknown>, cb: NodeCallback<number>): void;
|
|
26
|
+
}
|
|
27
|
+
/** Connection options for `NedbStore`. */
|
|
28
|
+
export interface NedbStoreOptions {
|
|
29
|
+
/**
|
|
30
|
+
* Filesystem path for the NeDB datafile. Omit for a purely in-memory store.
|
|
31
|
+
*/
|
|
32
|
+
filename?: string;
|
|
33
|
+
/**
|
|
34
|
+
* A pre-built `nedb` `Datastore` (or a compatible mock). When provided,
|
|
35
|
+
* `connect()` uses it directly and skips `require('nedb')` entirely — this
|
|
36
|
+
* is how tests inject a mock without the real driver installed.
|
|
37
|
+
*/
|
|
38
|
+
client?: NedbClientLike;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* `NedbStore` wraps a `nedb` `Datastore` and exposes both a common KV surface
|
|
42
|
+
* — `put`/`get`/`del` keyed on `_id`, `batch`, `list` — and NeDB's native
|
|
43
|
+
* document operations `insert`/`find`.
|
|
44
|
+
*/
|
|
45
|
+
export declare class NedbStore implements NoSqlStore {
|
|
46
|
+
readonly name = "nedb";
|
|
47
|
+
readonly library = "nedb";
|
|
48
|
+
private readonly options;
|
|
49
|
+
private client;
|
|
50
|
+
private connected;
|
|
51
|
+
constructor(options?: NedbStoreOptions);
|
|
52
|
+
connect(): Promise<void>;
|
|
53
|
+
disconnect(): Promise<void>;
|
|
54
|
+
isConnected(): boolean;
|
|
55
|
+
/** Returns the underlying `nedb` `Datastore` for anything not wrapped here. */
|
|
56
|
+
getClient(): NedbClientLike;
|
|
57
|
+
private requireClient;
|
|
58
|
+
private wrapError;
|
|
59
|
+
/** Wrap a callback-style NeDB call into a Promise. */
|
|
60
|
+
private promisify;
|
|
61
|
+
/**
|
|
62
|
+
* Writes a document keyed by `_id = key`. Maps onto NeDB's `insert`, merging
|
|
63
|
+
* `key` into the document as its `_id`.
|
|
64
|
+
*/
|
|
65
|
+
put(key: string, value: Record<string, unknown>): Promise<NedbDoc>;
|
|
66
|
+
/** Reads a document by `_id` (NeDB `findOne({ _id })`). Returns `null` if absent. */
|
|
67
|
+
get(key: string): Promise<NedbDoc | null>;
|
|
68
|
+
/** Deletes a document by `_id` (NeDB `remove({ _id })`). Returns the number removed. */
|
|
69
|
+
del(key: string): Promise<number>;
|
|
70
|
+
/** Native `insert`: adds a document (NeDB assigns an `_id` if omitted). */
|
|
71
|
+
insert(doc: NedbDoc): Promise<NedbDoc>;
|
|
72
|
+
/** Native `find`: returns every document matching the Mongo-style `query`. */
|
|
73
|
+
find(query?: Record<string, unknown>): Promise<NedbDoc[]>;
|
|
74
|
+
/** Applies a list of `put`/`del` operations sequentially. */
|
|
75
|
+
batch(ops: NedbBatchOp[]): Promise<void>;
|
|
76
|
+
/** Lists all document `_id`s (via `find({})`). */
|
|
77
|
+
list(): Promise<string[]>;
|
|
78
|
+
}
|
|
79
|
+
export default NedbStore;
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Neo4j store implementation.
|
|
3
|
+
*
|
|
4
|
+
* Neo4j is a graph database: data is modeled as labeled nodes and typed
|
|
5
|
+
* relationships (both carrying arbitrary properties) instead of rows in
|
|
6
|
+
* tables, and queried with Cypher instead of SQL. It has no `Dialect`-shaped
|
|
7
|
+
* `query(sql)`/identifier-escaping/DDL surface, so this class implements the
|
|
8
|
+
* minimal `NoSqlStore` marker interface and exposes Neo4j's real primitives
|
|
9
|
+
* — sessions, (managed and explicit) transactions, and raw parameterized
|
|
10
|
+
* Cypher — plus a thin layer of Cypher-generating convenience helpers for
|
|
11
|
+
* common node/relationship CRUD, rather than forcing a graph database into
|
|
12
|
+
* a `query(sql)` shape.
|
|
13
|
+
*
|
|
14
|
+
* Uses the official `neo4j-driver` (Bolt protocol) driver.
|
|
15
|
+
*/
|
|
16
|
+
import type { Driver, Session, ManagedTransaction, Config as Neo4jDriverConfig, AuthToken, Integer } from 'neo4j-driver';
|
|
17
|
+
import { NoSqlStore } from '../store';
|
|
18
|
+
/**
|
|
19
|
+
* Connection options for `Neo4jStore`.
|
|
20
|
+
*
|
|
21
|
+
* Accepts either a pre-built `AuthToken` (e.g. from `neo4j.auth.kerberos()`/
|
|
22
|
+
* `neo4j.auth.bearer()`) or a plain `username`/`password` pair, which is
|
|
23
|
+
* turned into a basic auth token. Any other `neo4j-driver` `Config` fields
|
|
24
|
+
* (`maxConnectionPoolSize`, `connectionTimeout`, `encrypted`, etc) are
|
|
25
|
+
* passed straight through via `config`.
|
|
26
|
+
*/
|
|
27
|
+
export interface Neo4jStoreOptions {
|
|
28
|
+
/** Bolt/neo4j connection URI, e.g. `'neo4j://localhost:7687'` or `'bolt://localhost:7687'`. */
|
|
29
|
+
uri: string;
|
|
30
|
+
/** Basic-auth username. Ignored if `auth` is provided. */
|
|
31
|
+
username?: string;
|
|
32
|
+
/** Basic-auth password. Ignored if `auth` is provided. */
|
|
33
|
+
password?: string;
|
|
34
|
+
/** A pre-built auth token (`neo4j.auth.basic/kerberos/bearer/custom`). Overrides `username`/`password`. */
|
|
35
|
+
auth?: AuthToken;
|
|
36
|
+
/** Default database to run sessions/queries against (Neo4j 4.0+ multi-database). */
|
|
37
|
+
database?: string;
|
|
38
|
+
/** Any other `neo4j-driver` `Config` fields, passed straight through to `neo4j.driver()`. */
|
|
39
|
+
config?: Neo4jDriverConfig;
|
|
40
|
+
}
|
|
41
|
+
/** Parameters for a parameterized Cypher query. */
|
|
42
|
+
export type CypherParams = Record<string, unknown>;
|
|
43
|
+
/** Session-level options shared by `session()`, `run()`, `executeRead()`/`executeWrite()`, and `beginTransaction()`. */
|
|
44
|
+
export interface SessionOptions {
|
|
45
|
+
/** Database to run against; falls back to `Neo4jStoreOptions.database`, then the server default. */
|
|
46
|
+
database?: string;
|
|
47
|
+
/** `'READ'` or `'WRITE'` — determines routing in a cluster and eligibility for read-replica routing. */
|
|
48
|
+
defaultAccessMode?: 'READ' | 'WRITE';
|
|
49
|
+
}
|
|
50
|
+
/** A subset of `ResultSummary.counters` surfaced as plain numbers. */
|
|
51
|
+
export interface CypherSummary {
|
|
52
|
+
queryType: string;
|
|
53
|
+
nodesCreated: number;
|
|
54
|
+
nodesDeleted: number;
|
|
55
|
+
relationshipsCreated: number;
|
|
56
|
+
relationshipsDeleted: number;
|
|
57
|
+
propertiesSet: number;
|
|
58
|
+
labelsAdded: number;
|
|
59
|
+
labelsRemoved: number;
|
|
60
|
+
}
|
|
61
|
+
/** The result of running a Cypher query: mapped plain-object records plus a summary. */
|
|
62
|
+
export interface CypherResult<T = Record<string, unknown>> {
|
|
63
|
+
records: T[];
|
|
64
|
+
/** Field names present on each record, in order. */
|
|
65
|
+
keys: string[];
|
|
66
|
+
summary: CypherSummary;
|
|
67
|
+
}
|
|
68
|
+
/** A Neo4j node, mapped to a plain object (see "Result mapping" in the README). */
|
|
69
|
+
export interface GraphNode<P = Record<string, unknown>> {
|
|
70
|
+
elementId: string;
|
|
71
|
+
/** Legacy numeric ID (unwrapped from Neo4j's `Integer` type - see `intToNumber`/README "Known limitations"). */
|
|
72
|
+
identity: number;
|
|
73
|
+
labels: string[];
|
|
74
|
+
properties: P;
|
|
75
|
+
}
|
|
76
|
+
/** A Neo4j relationship, mapped to a plain object. */
|
|
77
|
+
export interface GraphRelationship<P = Record<string, unknown>> {
|
|
78
|
+
elementId: string;
|
|
79
|
+
identity: number;
|
|
80
|
+
type: string;
|
|
81
|
+
startElementId: string;
|
|
82
|
+
endElementId: string;
|
|
83
|
+
start: number;
|
|
84
|
+
end: number;
|
|
85
|
+
properties: P;
|
|
86
|
+
}
|
|
87
|
+
/** Pagination options for `findNodes()`/`findRelationships()`. */
|
|
88
|
+
export interface FindOptions {
|
|
89
|
+
skip?: number;
|
|
90
|
+
limit?: number;
|
|
91
|
+
}
|
|
92
|
+
/** Options for `deleteNode()`. */
|
|
93
|
+
export interface DeleteNodeOptions {
|
|
94
|
+
/** Also delete any relationships attached to the node (Cypher `DETACH DELETE`). Without this, deleting a node with existing relationships fails. */
|
|
95
|
+
detach?: boolean;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* A handle to an explicit (begin/commit/rollback) transaction, returned by
|
|
99
|
+
* `beginTransaction()`. Unlike `executeRead()`/`executeWrite()`, this is not
|
|
100
|
+
* automatically retried on transient errors - the caller drives commit/
|
|
101
|
+
* rollback explicitly.
|
|
102
|
+
*/
|
|
103
|
+
export interface Neo4jTransaction {
|
|
104
|
+
run<T = Record<string, unknown>>(cypher: string, params?: CypherParams): Promise<CypherResult<T>>;
|
|
105
|
+
commit(): Promise<void>;
|
|
106
|
+
rollback(): Promise<void>;
|
|
107
|
+
/** `true` until `commit()`/`rollback()` has completed. */
|
|
108
|
+
isOpen(): boolean;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Unwrap a single Neo4j `Integer` (its 64-bit integer type, used for
|
|
112
|
+
* identities, counts, and any Cypher `INTEGER` value) into a JS `number`.
|
|
113
|
+
* Values outside `Number.MAX_SAFE_INTEGER` lose precision on this
|
|
114
|
+
* conversion - see "Known limitations" in the README for the lossless
|
|
115
|
+
* alternative (`neo4j-driver`'s `disableLosslessIntegers`/`useBigInt`
|
|
116
|
+
* config, passed through via `Neo4jStoreOptions.config`).
|
|
117
|
+
*/
|
|
118
|
+
export declare function intToNumber(value: Integer): number;
|
|
119
|
+
/**
|
|
120
|
+
* `Neo4jStore` wraps a `neo4j-driver` `Driver` and exposes:
|
|
121
|
+
* - raw parameterized Cypher (`run()`) - the general escape hatch,
|
|
122
|
+
* - session management (`session()`),
|
|
123
|
+
* - transaction functions with automatic retry (`executeRead()`/`executeWrite()`),
|
|
124
|
+
* - explicit begin/commit/rollback transactions (`beginTransaction()`),
|
|
125
|
+
* - and Cypher-generating node/relationship CRUD convenience helpers
|
|
126
|
+
* (`createNode()`, `findNodes()`, `createRelationship()`, etc) built on
|
|
127
|
+
* top of `run()` - these are thin Cypher generators, not a separate
|
|
128
|
+
* query engine, so anything they don't cover is one `run()` call away.
|
|
129
|
+
*/
|
|
130
|
+
export declare class Neo4jStore implements NoSqlStore {
|
|
131
|
+
readonly name = "neo4j";
|
|
132
|
+
readonly library = "neo4j-driver";
|
|
133
|
+
private readonly options;
|
|
134
|
+
private driverInstance;
|
|
135
|
+
private connected;
|
|
136
|
+
constructor(options: Neo4jStoreOptions);
|
|
137
|
+
private resolveAuth;
|
|
138
|
+
connect(): Promise<void>;
|
|
139
|
+
disconnect(): Promise<void>;
|
|
140
|
+
isConnected(): boolean;
|
|
141
|
+
/** Returns the underlying `neo4j-driver` `Driver` for anything not wrapped here. */
|
|
142
|
+
getClient(): Driver;
|
|
143
|
+
private requireDriver;
|
|
144
|
+
/**
|
|
145
|
+
* Open a new `Session`. Sessions are lightweight and disposable - open
|
|
146
|
+
* one per logical unit of work and close it when done (`run()`,
|
|
147
|
+
* `executeRead()`/`executeWrite()`, and `beginTransaction()` all do this
|
|
148
|
+
* for you; call this directly only if you need the raw `Session`, e.g.
|
|
149
|
+
* for `session.run()`'s streaming `subscribe()` API).
|
|
150
|
+
*/
|
|
151
|
+
session(options?: SessionOptions): Session;
|
|
152
|
+
/**
|
|
153
|
+
* Run a single parameterized Cypher statement as an auto-commit query,
|
|
154
|
+
* on a session opened and closed for just this call. Always parameterize
|
|
155
|
+
* user-supplied values (`$name`, not string concatenation) - the driver
|
|
156
|
+
* sends `params` separately from the query text, the same protection
|
|
157
|
+
* bind parameters give you against SQL injection.
|
|
158
|
+
*/
|
|
159
|
+
run<T = Record<string, unknown>>(cypher: string, params?: CypherParams, options?: SessionOptions): Promise<CypherResult<T>>;
|
|
160
|
+
/**
|
|
161
|
+
* Run `work` inside a managed read transaction. The driver automatically
|
|
162
|
+
* retries `work` on transient errors (e.g. deadlocks, leader switches in
|
|
163
|
+
* a cluster) - `work` may run more than once, so it must be idempotent
|
|
164
|
+
* and side-effect-free outside of the transaction it's given.
|
|
165
|
+
*/
|
|
166
|
+
executeRead<T>(work: (tx: ManagedTransaction) => Promise<T> | T, options?: SessionOptions): Promise<T>;
|
|
167
|
+
/** Like `executeRead()`, but for a managed write transaction (`defaultAccessMode: 'WRITE'`). */
|
|
168
|
+
executeWrite<T>(work: (tx: ManagedTransaction) => Promise<T> | T, options?: SessionOptions): Promise<T>;
|
|
169
|
+
/**
|
|
170
|
+
* Begin an explicit transaction spanning multiple `run()` calls, on a
|
|
171
|
+
* session held open until `commit()`/`rollback()`. Unlike
|
|
172
|
+
* `executeRead()`/`executeWrite()`, this is never retried automatically
|
|
173
|
+
* - use it when you need multiple round trips with logic in between, or
|
|
174
|
+
* full manual control over commit/rollback.
|
|
175
|
+
*/
|
|
176
|
+
beginTransaction(options?: SessionOptions): Promise<Neo4jTransaction>;
|
|
177
|
+
/** `CREATE (n:Label1:Label2) SET n = $properties RETURN n` */
|
|
178
|
+
createNode<P extends Record<string, unknown> = Record<string, unknown>>(labels: string | string[], properties?: P): Promise<GraphNode<P>>;
|
|
179
|
+
/** `MATCH (n) WHERE elementId(n) = $elementId RETURN n` */
|
|
180
|
+
getNodeByElementId<P extends Record<string, unknown> = Record<string, unknown>>(elementId: string): Promise<GraphNode<P> | null>;
|
|
181
|
+
/**
|
|
182
|
+
* `MATCH (n:Label) WHERE n.k1 = $k1 AND ... RETURN n [SKIP $skip] [LIMIT $limit]`
|
|
183
|
+
*
|
|
184
|
+
* `where` is an equality-only match on node properties (no operators,
|
|
185
|
+
* ranges, or `OR`) - use `run()` directly for anything more expressive.
|
|
186
|
+
*/
|
|
187
|
+
findNodes<P extends Record<string, unknown> = Record<string, unknown>>(labels?: string | string[], where?: Record<string, unknown>, options?: FindOptions): Promise<GraphNode<P>[]>;
|
|
188
|
+
/** `MATCH (n) WHERE elementId(n) = $elementId SET n += $properties RETURN n` (merges, does not replace, existing properties) */
|
|
189
|
+
updateNode<P extends Record<string, unknown> = Record<string, unknown>>(elementId: string, properties: Partial<P>): Promise<GraphNode<P> | null>;
|
|
190
|
+
/**
|
|
191
|
+
* `MATCH (n) WHERE elementId(n) = $elementId [DETACH] DELETE n`
|
|
192
|
+
*
|
|
193
|
+
* Without `options.detach`, deleting a node that still has relationships
|
|
194
|
+
* fails (Neo4j refuses to leave dangling relationships) - the underlying
|
|
195
|
+
* error surfaces as a `DatabaseError`. Returns whether a node was
|
|
196
|
+
* actually deleted (based on the query's `nodesDeleted` counter).
|
|
197
|
+
*/
|
|
198
|
+
deleteNode(elementId: string, options?: DeleteNodeOptions): Promise<boolean>;
|
|
199
|
+
/** `MATCH (n:Label) WHERE ... RETURN count(n) AS count` */
|
|
200
|
+
countNodes(labels?: string | string[], where?: Record<string, unknown>): Promise<number>;
|
|
201
|
+
/**
|
|
202
|
+
* `MATCH (a), (b) WHERE elementId(a) = $fromElementId AND elementId(b) = $toElementId`
|
|
203
|
+
* `CREATE (a)-[r:TYPE]->(b) SET r = $properties RETURN r`
|
|
204
|
+
*/
|
|
205
|
+
createRelationship<P extends Record<string, unknown> = Record<string, unknown>>(fromElementId: string, toElementId: string, type: string, properties?: P): Promise<GraphRelationship<P>>;
|
|
206
|
+
/** `MATCH ()-[r]->() WHERE elementId(r) = $elementId RETURN r` */
|
|
207
|
+
getRelationshipByElementId<P extends Record<string, unknown> = Record<string, unknown>>(elementId: string): Promise<GraphRelationship<P> | null>;
|
|
208
|
+
/**
|
|
209
|
+
* `MATCH (a)-[r:TYPE]->(b) WHERE r.k1 = $k1 AND ... RETURN r [SKIP $skip] [LIMIT $limit]`
|
|
210
|
+
*
|
|
211
|
+
* Omit `type` to match relationships of any type.
|
|
212
|
+
*/
|
|
213
|
+
findRelationships<P extends Record<string, unknown> = Record<string, unknown>>(type?: string, where?: Record<string, unknown>, options?: FindOptions): Promise<GraphRelationship<P>[]>;
|
|
214
|
+
/** `MATCH (a)-[r]->(b) WHERE elementId(r) = $elementId DELETE r` - returns whether a relationship was actually deleted. */
|
|
215
|
+
deleteRelationship(elementId: string): Promise<boolean>;
|
|
216
|
+
}
|
|
217
|
+
export default Neo4jStore;
|