ts-prorm-orm 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +83 -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 +711 -0
- package/dist/index.js +19 -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
|
@@ -19,6 +19,188 @@
|
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
20
|
exports.FaunaDbStore = void 0;
|
|
21
21
|
const errors_1 = require("../../errors");
|
|
22
|
+
/** Parse an ORM `where` object (string + `Op` symbol keys) into a tree. */
|
|
23
|
+
function parseWhere(where) {
|
|
24
|
+
if (!where || typeof where !== 'object')
|
|
25
|
+
return null;
|
|
26
|
+
const nodes = [];
|
|
27
|
+
for (const sym of Object.getOwnPropertySymbols(where)) {
|
|
28
|
+
const name = sym.description;
|
|
29
|
+
const val = where[sym];
|
|
30
|
+
if (name === 'and' && Array.isArray(val)) {
|
|
31
|
+
nodes.push({ kind: 'and', nodes: val.map(parseWhere).filter(Boolean) });
|
|
32
|
+
}
|
|
33
|
+
else if (name === 'or' && Array.isArray(val)) {
|
|
34
|
+
nodes.push({ kind: 'or', nodes: val.map(parseWhere).filter(Boolean) });
|
|
35
|
+
}
|
|
36
|
+
else if (name === 'not') {
|
|
37
|
+
const inner = parseWhere(val);
|
|
38
|
+
if (inner)
|
|
39
|
+
nodes.push({ kind: 'not', node: inner });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
for (const field of Object.keys(where)) {
|
|
43
|
+
nodes.push(parseFieldCondition(field, where[field]));
|
|
44
|
+
}
|
|
45
|
+
const flat = nodes.filter(Boolean);
|
|
46
|
+
if (flat.length === 0)
|
|
47
|
+
return null;
|
|
48
|
+
return flat.length === 1 ? flat[0] : { kind: 'and', nodes: flat };
|
|
49
|
+
}
|
|
50
|
+
/** Parse the value for a single field into a comparison (or AND of them). */
|
|
51
|
+
function parseFieldCondition(field, value) {
|
|
52
|
+
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
53
|
+
const symbols = Object.getOwnPropertySymbols(value);
|
|
54
|
+
if (symbols.length > 0) {
|
|
55
|
+
const cmps = symbols.map((sym) => ({
|
|
56
|
+
kind: 'cmp',
|
|
57
|
+
field,
|
|
58
|
+
op: sym.description ?? 'eq',
|
|
59
|
+
value: value[sym],
|
|
60
|
+
}));
|
|
61
|
+
return cmps.length === 1 ? cmps[0] : { kind: 'and', nodes: cmps };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return { kind: 'cmp', field, op: value === null ? 'isNull' : 'eq', value };
|
|
65
|
+
}
|
|
66
|
+
/** Escape a string for safe embedding in a Fauna `ContainsStrRegex` pattern. */
|
|
67
|
+
function escapeRegex(value) {
|
|
68
|
+
return String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
69
|
+
}
|
|
70
|
+
/** Convert a SQL `LIKE` pattern (`%`/`_` wildcards) to a regex source. */
|
|
71
|
+
function likeToRegex(pattern) {
|
|
72
|
+
let out = '^';
|
|
73
|
+
for (const ch of String(pattern)) {
|
|
74
|
+
if (ch === '%')
|
|
75
|
+
out += '.*';
|
|
76
|
+
else if (ch === '_')
|
|
77
|
+
out += '.';
|
|
78
|
+
else
|
|
79
|
+
out += ch.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
80
|
+
}
|
|
81
|
+
return out + '$';
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Build an FQL boolean predicate over the bound document variable `doc`
|
|
85
|
+
* (a materialized Fauna document, so fields live under `data`). Returns a
|
|
86
|
+
* raw FQL expression built with the injected query builder `q`.
|
|
87
|
+
*/
|
|
88
|
+
function buildFaunaPredicate(q, doc, node) {
|
|
89
|
+
if (!node)
|
|
90
|
+
return true;
|
|
91
|
+
const sel = (field) => q.Select(['data', ...field.split('.')], doc, null);
|
|
92
|
+
switch (node.kind) {
|
|
93
|
+
case 'and': {
|
|
94
|
+
if (node.nodes.length === 0)
|
|
95
|
+
return true;
|
|
96
|
+
if (node.nodes.length === 1)
|
|
97
|
+
return buildFaunaPredicate(q, doc, node.nodes[0]);
|
|
98
|
+
return q.And(...node.nodes.map((n) => buildFaunaPredicate(q, doc, n)));
|
|
99
|
+
}
|
|
100
|
+
case 'or': {
|
|
101
|
+
if (node.nodes.length === 0)
|
|
102
|
+
return false;
|
|
103
|
+
if (node.nodes.length === 1)
|
|
104
|
+
return buildFaunaPredicate(q, doc, node.nodes[0]);
|
|
105
|
+
return q.Or(...node.nodes.map((n) => buildFaunaPredicate(q, doc, n)));
|
|
106
|
+
}
|
|
107
|
+
case 'not':
|
|
108
|
+
return q.Not(buildFaunaPredicate(q, doc, node.node));
|
|
109
|
+
case 'cmp':
|
|
110
|
+
return buildFaunaCmp(q, sel(node.field), node.op, node.value);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function buildFaunaCmp(q, sel, op, value) {
|
|
114
|
+
switch (op) {
|
|
115
|
+
case 'eq':
|
|
116
|
+
return q.Equals(sel, value ?? null);
|
|
117
|
+
case 'ne':
|
|
118
|
+
return q.Not(q.Equals(sel, value ?? null));
|
|
119
|
+
case 'gt':
|
|
120
|
+
return q.GT(sel, value);
|
|
121
|
+
case 'gte':
|
|
122
|
+
return q.GTE(sel, value);
|
|
123
|
+
case 'lt':
|
|
124
|
+
return q.LT(sel, value);
|
|
125
|
+
case 'lte':
|
|
126
|
+
return q.LTE(sel, value);
|
|
127
|
+
case 'in': {
|
|
128
|
+
const arr = value ?? [];
|
|
129
|
+
if (arr.length === 0)
|
|
130
|
+
return false;
|
|
131
|
+
return q.Or(...arr.map((v) => q.Equals(sel, v)));
|
|
132
|
+
}
|
|
133
|
+
case 'notIn': {
|
|
134
|
+
const arr = value ?? [];
|
|
135
|
+
if (arr.length === 0)
|
|
136
|
+
return true;
|
|
137
|
+
return q.Not(q.Or(...arr.map((v) => q.Equals(sel, v))));
|
|
138
|
+
}
|
|
139
|
+
case 'between': {
|
|
140
|
+
const [a, b] = value;
|
|
141
|
+
return q.And(q.GTE(sel, a), q.LTE(sel, b));
|
|
142
|
+
}
|
|
143
|
+
case 'notBetween': {
|
|
144
|
+
const [a, b] = value;
|
|
145
|
+
return q.Not(q.And(q.GTE(sel, a), q.LTE(sel, b)));
|
|
146
|
+
}
|
|
147
|
+
case 'like':
|
|
148
|
+
return q.ContainsStrRegex(sel, likeToRegex(value));
|
|
149
|
+
case 'notLike':
|
|
150
|
+
return q.Not(q.ContainsStrRegex(sel, likeToRegex(value)));
|
|
151
|
+
case 'startsWith':
|
|
152
|
+
return q.ContainsStrRegex(sel, `^${escapeRegex(value)}`);
|
|
153
|
+
case 'endsWith':
|
|
154
|
+
return q.ContainsStrRegex(sel, `${escapeRegex(value)}$`);
|
|
155
|
+
case 'substring':
|
|
156
|
+
return q.ContainsStr(sel, String(value));
|
|
157
|
+
case 'regexp':
|
|
158
|
+
return q.ContainsStrRegex(sel, String(value));
|
|
159
|
+
case 'isNull':
|
|
160
|
+
return q.Equals(sel, null);
|
|
161
|
+
case 'isNotNull':
|
|
162
|
+
return q.Not(q.Equals(sel, null));
|
|
163
|
+
default:
|
|
164
|
+
throw new errors_1.DatabaseError(`FaunaDB ORM layer does not support operator "${op}"`, {
|
|
165
|
+
code: 'QUERY_ERROR',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/** A raw Fauna document (`{ ref, data, ts }`); normalize to `data` + `id`. */
|
|
170
|
+
function normalizeFaunaDoc(doc) {
|
|
171
|
+
const data = (doc?.data ?? {});
|
|
172
|
+
const id = doc?.ref?.id ?? doc?.ref?.value?.id;
|
|
173
|
+
return (id !== undefined ? { id, ...data } : data);
|
|
174
|
+
}
|
|
175
|
+
/** Apply ORM order/limit/offset to already-fetched documents, client-side. */
|
|
176
|
+
function applyClientSideShape(rows, options) {
|
|
177
|
+
let out = rows;
|
|
178
|
+
if (options.order && options.order.length > 0) {
|
|
179
|
+
const order = options.order;
|
|
180
|
+
out = [...out].sort((a, b) => {
|
|
181
|
+
for (const [field, dir] of order) {
|
|
182
|
+
const av = a?.[field];
|
|
183
|
+
const bv = b?.[field];
|
|
184
|
+
if (av === bv)
|
|
185
|
+
continue;
|
|
186
|
+
const cmp = av === undefined || av === null
|
|
187
|
+
? -1
|
|
188
|
+
: bv === undefined || bv === null
|
|
189
|
+
? 1
|
|
190
|
+
: av < bv
|
|
191
|
+
? -1
|
|
192
|
+
: 1;
|
|
193
|
+
return dir.toUpperCase() === 'DESC' ? -cmp : cmp;
|
|
194
|
+
}
|
|
195
|
+
return 0;
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
if (typeof options.offset === 'number')
|
|
199
|
+
out = out.slice(options.offset);
|
|
200
|
+
if (typeof options.limit === 'number')
|
|
201
|
+
out = out.slice(0, options.limit);
|
|
202
|
+
return out;
|
|
203
|
+
}
|
|
22
204
|
class FaunaDbStore {
|
|
23
205
|
constructor(options = {}) {
|
|
24
206
|
this.name = 'faunadb';
|
|
@@ -176,6 +358,153 @@ class FaunaDbStore {
|
|
|
176
358
|
throw wrapDatabaseError(err, 'FaunaDB query failed');
|
|
177
359
|
}
|
|
178
360
|
}
|
|
361
|
+
// ---------------------------------------------------------------------
|
|
362
|
+
// ORM model surface (no hand-written FQL needed)
|
|
363
|
+
// ---------------------------------------------------------------------
|
|
364
|
+
/**
|
|
365
|
+
* Fetch every document in `collection` matching the ORM `where` clause. The
|
|
366
|
+
* `where` is compiled to an FQL predicate applied via `Filter` over the
|
|
367
|
+
* collection's documents; `order`/`limit`/`offset` are applied client-side.
|
|
368
|
+
* Each result is normalized to its `data` fields plus an `id`.
|
|
369
|
+
*
|
|
370
|
+
* This scans the collection (bounded by `pageSize`). For large collections,
|
|
371
|
+
* define a Fauna index and use the raw {@link query} escape hatch for an
|
|
372
|
+
* index-driven read.
|
|
373
|
+
*/
|
|
374
|
+
async findAll(collection, options = {}) {
|
|
375
|
+
const client = this.requireClient();
|
|
376
|
+
const q = this.requireQuery();
|
|
377
|
+
const node = parseWhere(options.where);
|
|
378
|
+
const size = options.pageSize ?? 100000;
|
|
379
|
+
try {
|
|
380
|
+
const materialized = q.Map(q.Paginate(q.Documents(q.Collection(collection)), { size }), q.Lambda('ref', q.Get(q.Var('ref'))));
|
|
381
|
+
const filtered = node
|
|
382
|
+
? q.Filter(materialized, q.Lambda('doc', buildFaunaPredicate(q, q.Var('doc'), node)))
|
|
383
|
+
: materialized;
|
|
384
|
+
const result = await client.query(filtered);
|
|
385
|
+
const docs = result?.data ?? [];
|
|
386
|
+
const rows = docs.map((d) => normalizeFaunaDoc(d));
|
|
387
|
+
return applyClientSideShape(rows, options);
|
|
388
|
+
}
|
|
389
|
+
catch (err) {
|
|
390
|
+
throw wrapDatabaseError(err, 'FaunaDB findAll failed');
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/** Fetch the first document matching `where` (client-side `limit 1`), or `null`. */
|
|
394
|
+
async findOne(collection, options = {}) {
|
|
395
|
+
const rows = await this.findAll(collection, { ...options, limit: 1 });
|
|
396
|
+
return rows[0] ?? null;
|
|
397
|
+
}
|
|
398
|
+
/** Count documents in `collection` matching `where`. */
|
|
399
|
+
async count(collection, where) {
|
|
400
|
+
const rows = await this.findAll(collection, { where });
|
|
401
|
+
return rows.length;
|
|
402
|
+
}
|
|
403
|
+
/** Insert `data` and return the new document's id. Alias of {@link insert}. */
|
|
404
|
+
async create(collection, data) {
|
|
405
|
+
return this.insert(collection, data);
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Insert many documents atomically in a single FQL `Map`/`Create`, returning
|
|
409
|
+
* the new document ids in order.
|
|
410
|
+
*/
|
|
411
|
+
async bulkCreate(collection, docs) {
|
|
412
|
+
if (docs.length === 0)
|
|
413
|
+
return [];
|
|
414
|
+
const client = this.requireClient();
|
|
415
|
+
const q = this.requireQuery();
|
|
416
|
+
try {
|
|
417
|
+
const result = await client.query(q.Map(docs, q.Lambda('d', q.Create(q.Collection(collection), { data: q.Var('d') }))));
|
|
418
|
+
const created = Array.isArray(result) ? result : (result?.data ?? []);
|
|
419
|
+
return created.map((r) => r?.ref?.id ?? r?.data?.id);
|
|
420
|
+
}
|
|
421
|
+
catch (err) {
|
|
422
|
+
throw wrapDatabaseError(err, 'FaunaDB bulkCreate failed');
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Update every document matching `where`, merging `values` into each match's
|
|
427
|
+
* `data`, all in a single atomic FQL expression. Returns the number of
|
|
428
|
+
* documents updated.
|
|
429
|
+
*/
|
|
430
|
+
async updateMany(collection, values, where) {
|
|
431
|
+
const client = this.requireClient();
|
|
432
|
+
const q = this.requireQuery();
|
|
433
|
+
const node = parseWhere(where);
|
|
434
|
+
try {
|
|
435
|
+
const materialized = q.Map(q.Paginate(q.Documents(q.Collection(collection)), { size: 100000 }), q.Lambda('ref', q.Get(q.Var('ref'))));
|
|
436
|
+
const filtered = node
|
|
437
|
+
? q.Filter(materialized, q.Lambda('doc', buildFaunaPredicate(q, q.Var('doc'), node)))
|
|
438
|
+
: materialized;
|
|
439
|
+
const result = await client.query(q.Map(filtered, q.Lambda('doc', q.Update(q.Select('ref', q.Var('doc')), { data: values }))));
|
|
440
|
+
const updated = Array.isArray(result) ? result : (result?.data ?? []);
|
|
441
|
+
return updated.length;
|
|
442
|
+
}
|
|
443
|
+
catch (err) {
|
|
444
|
+
throw wrapDatabaseError(err, 'FaunaDB updateMany failed');
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Delete every document matching `where` in a single atomic FQL expression.
|
|
449
|
+
* Returns the number of documents deleted.
|
|
450
|
+
*/
|
|
451
|
+
async destroy(collection, where) {
|
|
452
|
+
const client = this.requireClient();
|
|
453
|
+
const q = this.requireQuery();
|
|
454
|
+
const node = parseWhere(where);
|
|
455
|
+
try {
|
|
456
|
+
const materialized = q.Map(q.Paginate(q.Documents(q.Collection(collection)), { size: 100000 }), q.Lambda('ref', q.Get(q.Var('ref'))));
|
|
457
|
+
const filtered = node
|
|
458
|
+
? q.Filter(materialized, q.Lambda('doc', buildFaunaPredicate(q, q.Var('doc'), node)))
|
|
459
|
+
: materialized;
|
|
460
|
+
const result = await client.query(q.Map(filtered, q.Lambda('doc', q.Delete(q.Select('ref', q.Var('doc'))))));
|
|
461
|
+
const deleted = Array.isArray(result) ? result : (result?.data ?? []);
|
|
462
|
+
return deleted.length;
|
|
463
|
+
}
|
|
464
|
+
catch (err) {
|
|
465
|
+
throw wrapDatabaseError(err, 'FaunaDB destroy failed');
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Insert-or-update: if a document matching `where` exists, merge `data` into
|
|
470
|
+
* the first match; otherwise create a new document seeded with the `where`
|
|
471
|
+
* equality keys plus `data`. Returns `{ created }`.
|
|
472
|
+
*/
|
|
473
|
+
async upsert(collection, data, where) {
|
|
474
|
+
const existing = await this.findAll(collection, { where, limit: 1 });
|
|
475
|
+
if (existing.length > 0 && existing[0].id !== undefined) {
|
|
476
|
+
await this.update(collection, String(existing[0].id), data);
|
|
477
|
+
return { created: false };
|
|
478
|
+
}
|
|
479
|
+
const seed = {};
|
|
480
|
+
for (const field of Object.keys(where)) {
|
|
481
|
+
const val = where[field];
|
|
482
|
+
if (val === null || typeof val !== 'object' || Array.isArray(val))
|
|
483
|
+
seed[field] = val;
|
|
484
|
+
}
|
|
485
|
+
await this.insert(collection, { ...seed, ...data });
|
|
486
|
+
return { created: true };
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Run several FQL write expressions atomically in a single transaction via
|
|
490
|
+
* FQL's `Do` (Fauna evaluates a single query as one serializable
|
|
491
|
+
* transaction). Pass expressions built with the query builder from
|
|
492
|
+
* {@link getQuery}. Returns the value of the last expression.
|
|
493
|
+
*/
|
|
494
|
+
async transaction(expressions) {
|
|
495
|
+
const client = this.requireClient();
|
|
496
|
+
const q = this.requireQuery();
|
|
497
|
+
try {
|
|
498
|
+
return await client.query(q.Do(...expressions));
|
|
499
|
+
}
|
|
500
|
+
catch (err) {
|
|
501
|
+
throw wrapDatabaseError(err, 'FaunaDB transaction failed');
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
/** Exposes the FQL query builder (`faunadb.query`) for building raw expressions. */
|
|
505
|
+
getQuery() {
|
|
506
|
+
return this.requireQuery();
|
|
507
|
+
}
|
|
179
508
|
}
|
|
180
509
|
exports.FaunaDbStore = FaunaDbStore;
|
|
181
510
|
function wrapDatabaseError(err, message) {
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Cloud Firestore store implementation for the Prorm NoSQL layer.
|
|
3
|
+
*
|
|
4
|
+
* Firestore is a document database organized as collections of documents,
|
|
5
|
+
* each addressed by an id, with rich structured querying. It does not fit the
|
|
6
|
+
* SQL-shaped `Dialect` interface, so this class implements the minimal
|
|
7
|
+
* `NoSqlStore` marker interface for connection lifecycle and exposes
|
|
8
|
+
* Firestore's real `collection().doc()` CRUD plus `where()` query API through
|
|
9
|
+
* a small convenience layer.
|
|
10
|
+
*
|
|
11
|
+
* Uses the official `@google-cloud/firestore` driver. That driver is an
|
|
12
|
+
* optional peer dependency and is loaded lazily inside `connect()` so
|
|
13
|
+
* importing this module never requires it to be installed. Tests inject a
|
|
14
|
+
* pre-built mock `client` via `options.client`, which bypasses the lazy
|
|
15
|
+
* `require` entirely - no real driver and no network are needed.
|
|
16
|
+
*/
|
|
17
|
+
import { NoSqlStore } from '../store';
|
|
18
|
+
/** A native `Firestore` handle, left untyped because the driver is an optional
|
|
19
|
+
* dependency not imported here. */
|
|
20
|
+
type Firestore = any;
|
|
21
|
+
/** A single Firestore query condition: `[field, operator, value]`. */
|
|
22
|
+
export type FirestoreCondition = [string, string, unknown];
|
|
23
|
+
/**
|
|
24
|
+
* Connection options for `FirestoreStore`.
|
|
25
|
+
*
|
|
26
|
+
* `projectId`/`keyFilename` configure the underlying `Firestore` client. When
|
|
27
|
+
* a pre-built `client` is supplied (e.g. in tests), `connect()` uses it
|
|
28
|
+
* directly and skips loading the `@google-cloud/firestore` driver.
|
|
29
|
+
*/
|
|
30
|
+
export interface FirestoreStoreOptions {
|
|
31
|
+
projectId?: string;
|
|
32
|
+
keyFilename?: string;
|
|
33
|
+
/** A pre-built `Firestore` client to use instead of the driver. */
|
|
34
|
+
client?: Firestore;
|
|
35
|
+
}
|
|
36
|
+
export declare class FirestoreStore implements NoSqlStore {
|
|
37
|
+
readonly name = "firestore";
|
|
38
|
+
readonly library = "@google-cloud/firestore";
|
|
39
|
+
private readonly options;
|
|
40
|
+
private client;
|
|
41
|
+
private connected;
|
|
42
|
+
constructor(options?: FirestoreStoreOptions);
|
|
43
|
+
connect(): Promise<void>;
|
|
44
|
+
disconnect(): Promise<void>;
|
|
45
|
+
isConnected(): boolean;
|
|
46
|
+
getClient(): Firestore;
|
|
47
|
+
private requireClient;
|
|
48
|
+
/**
|
|
49
|
+
* Add a document to `collection`. If `doc.id` is set the document is written
|
|
50
|
+
* to that id via `doc(id).set(doc)`; otherwise Firestore auto-assigns one
|
|
51
|
+
* via `collection.add(doc)`. Returns the resulting document id.
|
|
52
|
+
*/
|
|
53
|
+
insert(collection: string, doc: Record<string, unknown>): Promise<unknown>;
|
|
54
|
+
/** Fetch a document by id, returning its data (or `undefined` if missing). */
|
|
55
|
+
get(collection: string, id: string): Promise<unknown>;
|
|
56
|
+
/** Partially update a document by id, returning the applied `patch`. */
|
|
57
|
+
update(collection: string, id: string, patch: Record<string, unknown>): Promise<unknown>;
|
|
58
|
+
/** Delete a document by id. */
|
|
59
|
+
delete(collection: string, id: string): Promise<unknown>;
|
|
60
|
+
/**
|
|
61
|
+
* Query `collection`. `filter` may be an array of `[field, op, value]`
|
|
62
|
+
* conditions or a plain object (treated as equality on each key). Returns
|
|
63
|
+
* the matched documents, each shaped as `{ id, ...data }`.
|
|
64
|
+
*/
|
|
65
|
+
query(collection: string, filter?: FirestoreCondition[] | Record<string, unknown>): Promise<unknown[]>;
|
|
66
|
+
}
|
|
67
|
+
export default FirestoreStore;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fluree store implementation.
|
|
3
|
+
*
|
|
4
|
+
* Fluree is an immutable, time-travel ledger database: every transaction is
|
|
5
|
+
* appended as a set of cryptographically-hashed "flakes" into a blockchain-
|
|
6
|
+
* like log, so no data is ever overwritten and any past state (by block or
|
|
7
|
+
* time) is queryable. It speaks a JSON query/transaction API (FlureeQL) over
|
|
8
|
+
* HTTP, not SQL.
|
|
9
|
+
*
|
|
10
|
+
* ## No canonical driver - HTTP over `fetch`
|
|
11
|
+
*
|
|
12
|
+
* Fluree has no single canonical npm client; it is an HTTP/JSON API. Like the
|
|
13
|
+
* Prometheus store, this class talks to the server with the global `fetch`
|
|
14
|
+
* (so `library === 'fetch'`) and accepts an injected HTTP client via
|
|
15
|
+
* `FlureeStoreOptions.client` for tests / custom transports. It implements the
|
|
16
|
+
* minimal `NoSqlStore` marker interface plus the shared ledger surface:
|
|
17
|
+
* - `append(collection, data)` -> `POST /fdb/<ledger>/transact`.
|
|
18
|
+
* - `get(collection, id)` -> `POST /fdb/<ledger>/query`.
|
|
19
|
+
* - `history(collection, id)` -> `POST /fdb/<ledger>/history`.
|
|
20
|
+
* - `verify(collection, id)` -> `POST /fdb/<ledger>/history` with block
|
|
21
|
+
* metadata (the flake's block hash is its tamper-evidence proof).
|
|
22
|
+
* - `query(flureeql)` -> raw `POST /fdb/<ledger>/query`.
|
|
23
|
+
*/
|
|
24
|
+
import { NoSqlStore } from '../store';
|
|
25
|
+
/** Default Fluree HTTP API base URL. */
|
|
26
|
+
export declare const DEFAULT_FLUREE_BASE_URL = "http://localhost:8090";
|
|
27
|
+
/** The subset of an HTTP client this store needs. */
|
|
28
|
+
export interface FlureeHttpClient {
|
|
29
|
+
/** Issue a POST with a JSON body and return the parsed JSON response. */
|
|
30
|
+
post(path: string, body: unknown): Promise<any>;
|
|
31
|
+
}
|
|
32
|
+
/** Connection options for `FlureeStore`. */
|
|
33
|
+
export interface FlureeStoreOptions {
|
|
34
|
+
/** Base URL of the Fluree server. Defaults to `http://localhost:8090`. */
|
|
35
|
+
baseURL?: string;
|
|
36
|
+
/** Ledger (network/db) name, e.g. `'my/ledger'`. */
|
|
37
|
+
ledger: string;
|
|
38
|
+
/** Optional pre-built HTTP client; when provided, `baseURL` is ignored. */
|
|
39
|
+
client?: FlureeHttpClient;
|
|
40
|
+
/** Extra HTTP headers (e.g. an auth `Authorization` bearer). */
|
|
41
|
+
headers?: Record<string, string>;
|
|
42
|
+
}
|
|
43
|
+
/** Build a `fetch`-backed JSON client for the given base URL. */
|
|
44
|
+
export declare function createFlureeFetchClient(baseURL: string, headers?: Record<string, string>): FlureeHttpClient;
|
|
45
|
+
/**
|
|
46
|
+
* `FlureeStore` wraps Fluree's HTTP query/transact API behind the shared
|
|
47
|
+
* ledger surface.
|
|
48
|
+
*/
|
|
49
|
+
export declare class FlureeStore implements NoSqlStore {
|
|
50
|
+
readonly name = "fluree";
|
|
51
|
+
readonly library = "fetch";
|
|
52
|
+
private readonly baseURL;
|
|
53
|
+
private readonly ledger;
|
|
54
|
+
private readonly injectedClient?;
|
|
55
|
+
private readonly headers?;
|
|
56
|
+
private client;
|
|
57
|
+
private connected;
|
|
58
|
+
constructor(options: FlureeStoreOptions);
|
|
59
|
+
connect(): Promise<void>;
|
|
60
|
+
disconnect(): Promise<void>;
|
|
61
|
+
isConnected(): boolean;
|
|
62
|
+
/** Returns the underlying (internal or injected) HTTP client. */
|
|
63
|
+
getClient(): FlureeHttpClient;
|
|
64
|
+
private requireClient;
|
|
65
|
+
private endpoint;
|
|
66
|
+
private post;
|
|
67
|
+
/**
|
|
68
|
+
* Append `data` to `collection` as a transaction (`POST .../transact`).
|
|
69
|
+
* Returns the transaction response (block, flakes, temp-id map, and the
|
|
70
|
+
* block hash that anchors the write into the immutable log).
|
|
71
|
+
*/
|
|
72
|
+
append(collection: string, data: Record<string, unknown>): Promise<unknown>;
|
|
73
|
+
/** Read subject `id` from `collection` (`POST .../query`). */
|
|
74
|
+
get(collection: string, id: string | number): Promise<unknown>;
|
|
75
|
+
/** Return the flake-level history of subject `id` (`POST .../history`). */
|
|
76
|
+
history(collection: string, id: string | number): Promise<unknown>;
|
|
77
|
+
/**
|
|
78
|
+
* Return the provenance/proof for subject `id`: its history with block
|
|
79
|
+
* metadata (`meta: true`), so callers see the block hash and instant that
|
|
80
|
+
* cryptographically anchor each revision into Fluree's tamper-evident log.
|
|
81
|
+
*/
|
|
82
|
+
verify(collection: string, id: string | number): Promise<unknown>;
|
|
83
|
+
/** Run a raw FlureeQL query object (`POST .../query`). */
|
|
84
|
+
query(flureeql: unknown): Promise<unknown>;
|
|
85
|
+
/** Run a raw FlureeQL transaction (`POST .../transact`). */
|
|
86
|
+
transact(transaction: unknown): Promise<unknown>;
|
|
87
|
+
}
|
|
88
|
+
export default FlureeStore;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Apache Jena Fuseki store implementation.
|
|
3
|
+
*
|
|
4
|
+
* Fuseki is a SPARQL server over the Jena RDF triplestore. It is queried and
|
|
5
|
+
* updated entirely over HTTP using the SPARQL 1.1 Protocol: a dataset exposes
|
|
6
|
+
* a query endpoint (`/<dataset>/query`) and an update endpoint
|
|
7
|
+
* (`/<dataset>/update`). There is no SQL-shaped surface (no rows, no DDL, no
|
|
8
|
+
* identifier escaping), so it implements the minimal `NoSqlStore` marker
|
|
9
|
+
* interface (`src/nosql/store.ts`) rather than the SQL `Dialect` interface.
|
|
10
|
+
*
|
|
11
|
+
* ## No canonical driver - HTTP over `fetch`
|
|
12
|
+
*
|
|
13
|
+
* Fuseki has no dedicated npm client; it is just a SPARQL/HTTP endpoint.
|
|
14
|
+
* Rather than depend on any package, this store talks to the server with the
|
|
15
|
+
* global `fetch`. For tests (and for callers who want their own transport) an
|
|
16
|
+
* alternative client can be injected via `FusekiStoreOptions.client`; when
|
|
17
|
+
* omitted, a tiny internal client over `fetch` + `endpoint` is built at
|
|
18
|
+
* connect time.
|
|
19
|
+
*
|
|
20
|
+
* ## Surface
|
|
21
|
+
*
|
|
22
|
+
* - `query(sparql)` -> POST to `/<dataset>/query`, returns result bindings
|
|
23
|
+
* - `update(sparql)` -> POST to `/<dataset>/update`
|
|
24
|
+
* - `ask(sparql)` -> POST an ASK query, returns the boolean
|
|
25
|
+
* - `add(triples)` -> `INSERT DATA { ... }` update
|
|
26
|
+
* - `drop(graph?)` -> `DROP GRAPH <g>` / `DROP ALL` update
|
|
27
|
+
*/
|
|
28
|
+
import { NoSqlStore } from '../store';
|
|
29
|
+
/** Default Fuseki base URL. */
|
|
30
|
+
export declare const DEFAULT_FUSEKI_ENDPOINT = "http://localhost:3030";
|
|
31
|
+
/** Default dataset name. */
|
|
32
|
+
export declare const DEFAULT_FUSEKI_DATASET = "ds";
|
|
33
|
+
/**
|
|
34
|
+
* The subset of a SPARQL HTTP client this store needs. The internal
|
|
35
|
+
* `fetch`-based client implements this; tests inject a mock with the shape.
|
|
36
|
+
*/
|
|
37
|
+
export interface SparqlHttpClient {
|
|
38
|
+
/** POST a SPARQL query to `path`; returns the parsed results envelope. */
|
|
39
|
+
query(path: string, sparql: string): Promise<any>;
|
|
40
|
+
/** POST a SPARQL update to `path`. */
|
|
41
|
+
update(path: string, sparql: string): Promise<any>;
|
|
42
|
+
}
|
|
43
|
+
/** Connection options for `FusekiStore`. */
|
|
44
|
+
export interface FusekiStoreOptions {
|
|
45
|
+
/** Base URL of the Fuseki server. Defaults to `http://localhost:3030`. */
|
|
46
|
+
endpoint?: string;
|
|
47
|
+
/** Dataset name. Defaults to `ds`. */
|
|
48
|
+
dataset?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Optional pre-built SPARQL HTTP client. When provided it is used verbatim
|
|
51
|
+
* and `endpoint` is ignored; otherwise an internal `fetch`-based client is
|
|
52
|
+
* built against `endpoint` on `connect()`.
|
|
53
|
+
*/
|
|
54
|
+
client?: SparqlHttpClient;
|
|
55
|
+
/** Extra HTTP headers sent with every internal-client request. */
|
|
56
|
+
headers?: Record<string, string>;
|
|
57
|
+
}
|
|
58
|
+
/** Build a `fetch`-backed SPARQL client for the given endpoint. */
|
|
59
|
+
export declare function createFetchClient(endpoint: string, headers?: Record<string, string>): SparqlHttpClient;
|
|
60
|
+
/**
|
|
61
|
+
* `FusekiStore` wraps a Fuseki dataset's SPARQL query/update endpoints behind
|
|
62
|
+
* the `NoSqlStore` lifecycle.
|
|
63
|
+
*/
|
|
64
|
+
export declare class FusekiStore implements NoSqlStore {
|
|
65
|
+
readonly name = "fuseki";
|
|
66
|
+
readonly library = "fetch";
|
|
67
|
+
private readonly endpoint;
|
|
68
|
+
private readonly dataset;
|
|
69
|
+
private readonly injectedClient?;
|
|
70
|
+
private readonly headers?;
|
|
71
|
+
private client;
|
|
72
|
+
private connected;
|
|
73
|
+
constructor(options?: FusekiStoreOptions);
|
|
74
|
+
/** SPARQL query endpoint path for the configured dataset. */
|
|
75
|
+
get queryPath(): string;
|
|
76
|
+
/** SPARQL update endpoint path for the configured dataset. */
|
|
77
|
+
get updatePath(): string;
|
|
78
|
+
connect(): Promise<void>;
|
|
79
|
+
disconnect(): Promise<void>;
|
|
80
|
+
isConnected(): boolean;
|
|
81
|
+
/** Returns the underlying (internal or injected) SPARQL HTTP client. */
|
|
82
|
+
getClient(): SparqlHttpClient;
|
|
83
|
+
private requireClient;
|
|
84
|
+
/** Runs a SPARQL SELECT/CONSTRUCT query; returns the result bindings. */
|
|
85
|
+
query(sparql: string): Promise<any[]>;
|
|
86
|
+
/** Runs a SPARQL ASK query; returns the boolean answer. */
|
|
87
|
+
ask(sparql: string): Promise<boolean>;
|
|
88
|
+
/** Runs a SPARQL UPDATE (INSERT/DELETE/DROP/...). */
|
|
89
|
+
update(sparql: string): Promise<any>;
|
|
90
|
+
/** Inserts triples via `INSERT DATA { ... }`. Accepts a triple string or array. */
|
|
91
|
+
add(triples: string | string[], graph?: string): Promise<any>;
|
|
92
|
+
/** Drops a named graph, or all graphs when no graph is given. */
|
|
93
|
+
drop(graph?: string): Promise<any>;
|
|
94
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { NoSqlStore } from '../store';
|
|
2
|
+
/**
|
|
3
|
+
* Connection options for `GCSStore`.
|
|
4
|
+
*/
|
|
5
|
+
export interface GCSStoreOptions {
|
|
6
|
+
/** GCP project ID. Falls back to the ambient credentials' project when omitted. */
|
|
7
|
+
projectId?: string;
|
|
8
|
+
/** Path to a service-account key JSON file. Omit to use Application Default Credentials. */
|
|
9
|
+
keyFilename?: string;
|
|
10
|
+
/**
|
|
11
|
+
* A pre-built `Storage` instance (from `new Storage(...)`). When provided,
|
|
12
|
+
* `connect()` uses it directly and skips loading `@google-cloud/storage`.
|
|
13
|
+
* Primarily an injection seam for tests, but also useful for sharing a
|
|
14
|
+
* client or supplying custom constructor options.
|
|
15
|
+
*/
|
|
16
|
+
client?: unknown;
|
|
17
|
+
}
|
|
18
|
+
/** Options passed straight through to `file.save()` (contentType, metadata, resumable, etc). */
|
|
19
|
+
export type UploadObjectOptions = Record<string, unknown>;
|
|
20
|
+
/**
|
|
21
|
+
* Google Cloud Storage store, implementing the minimal `NoSqlStore` marker
|
|
22
|
+
* interface. Unlike the SQL dialects there is no `query(sql)` - GCS's
|
|
23
|
+
* operations are object-shaped (`bucket(name).file(key).<op>()`) and that
|
|
24
|
+
* shape is preserved here rather than forced into a SQL string.
|
|
25
|
+
*/
|
|
26
|
+
export declare class GCSStore implements NoSqlStore {
|
|
27
|
+
readonly name = "gcs";
|
|
28
|
+
readonly library = "@google-cloud/storage";
|
|
29
|
+
private readonly options;
|
|
30
|
+
private client;
|
|
31
|
+
private connected;
|
|
32
|
+
constructor(options?: GCSStoreOptions);
|
|
33
|
+
connect(): Promise<void>;
|
|
34
|
+
disconnect(): Promise<void>;
|
|
35
|
+
isConnected(): boolean;
|
|
36
|
+
/** Returns the underlying `@google-cloud/storage` `Storage` client for anything not wrapped here. */
|
|
37
|
+
getClient(): unknown;
|
|
38
|
+
private requireClient;
|
|
39
|
+
/** Resolve a `File` handle for `(bucket, key)` off the live client. */
|
|
40
|
+
private file;
|
|
41
|
+
private wrapError;
|
|
42
|
+
/**
|
|
43
|
+
* Upload (or overwrite) an object. `data` may be a `Buffer` or string;
|
|
44
|
+
* `options` is passed straight through to `file.save()` (e.g.
|
|
45
|
+
* `{ contentType, metadata, resumable }`).
|
|
46
|
+
*/
|
|
47
|
+
uploadObject(bucket: string, key: string, data: Buffer | string, options?: UploadObjectOptions): Promise<void>;
|
|
48
|
+
/** Download an object's contents as a `Buffer`. Throws if the object does not exist. */
|
|
49
|
+
downloadObject(bucket: string, key: string): Promise<Buffer>;
|
|
50
|
+
/** Delete an object. Throws if the object does not exist. */
|
|
51
|
+
deleteObject(bucket: string, key: string): Promise<void>;
|
|
52
|
+
/** Returns whether an object exists. */
|
|
53
|
+
objectExists(bucket: string, key: string): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* List objects in a bucket, optionally restricted to those whose name
|
|
56
|
+
* starts with `prefix`. Returns the raw `File` objects from the driver.
|
|
57
|
+
*/
|
|
58
|
+
listObjects(bucket: string, prefix?: string): Promise<any[]>;
|
|
59
|
+
/** Fetch an object's metadata (size, contentType, updated, custom metadata, etc). */
|
|
60
|
+
getMetadata(bucket: string, key: string): Promise<Record<string, unknown>>;
|
|
61
|
+
}
|
|
62
|
+
export default GCSStore;
|