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,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.commands = void 0;
|
|
37
|
+
// Storage command module for the prorm CLI. Manages the S3-backed user/team
|
|
38
|
+
// "store" via the dashboard API, which brokers presigned URLs so file bytes flow
|
|
39
|
+
// directly between the CLI and S3 (never through the dashboard). Also manages the
|
|
40
|
+
// set of buckets registered for the account/team.
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const framework_1 = require("../framework");
|
|
44
|
+
const cloud_1 = require("../cloud");
|
|
45
|
+
const prompt_1 = require("../prompt");
|
|
46
|
+
const io_1 = require("../io");
|
|
47
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
48
|
+
const CONTENT_TYPES = {
|
|
49
|
+
'.png': 'image/png',
|
|
50
|
+
'.jpg': 'image/jpeg',
|
|
51
|
+
'.jpeg': 'image/jpeg',
|
|
52
|
+
'.txt': 'text/plain',
|
|
53
|
+
'.json': 'application/json',
|
|
54
|
+
};
|
|
55
|
+
function contentTypeFor(file) {
|
|
56
|
+
return CONTENT_TYPES[path.extname(file).toLowerCase()] ?? 'application/octet-stream';
|
|
57
|
+
}
|
|
58
|
+
/** Read an optional string flag, treating empty strings as absent. */
|
|
59
|
+
function str(ctx, name) {
|
|
60
|
+
const v = ctx.flags[name];
|
|
61
|
+
return typeof v === 'string' && v ? v : undefined;
|
|
62
|
+
}
|
|
63
|
+
// ─── Commands ─────────────────────────────────────────────────────────────────
|
|
64
|
+
const push = (0, framework_1.defineCommand)({
|
|
65
|
+
name: 'store push',
|
|
66
|
+
description: 'Upload one or more files to the store via presigned URLs.',
|
|
67
|
+
group: 'Storage',
|
|
68
|
+
positionals: [{ name: 'files', description: 'Path(s) or globs to upload.', required: true, variadic: true }],
|
|
69
|
+
flags: [
|
|
70
|
+
{
|
|
71
|
+
name: 'kind',
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'Object kind.',
|
|
74
|
+
choices: ['avatar', 'log', 'image', 'file'],
|
|
75
|
+
default: 'file',
|
|
76
|
+
},
|
|
77
|
+
{ name: 'team', type: 'string', description: 'Team slug or id to upload under.' },
|
|
78
|
+
{ name: 'public', type: 'boolean', description: 'Make the object publicly readable.' },
|
|
79
|
+
{ name: 'name', type: 'string', description: 'Override the stored object name (single file only).' },
|
|
80
|
+
{ name: 'content-type', type: 'string', description: 'Override the guessed MIME type.' },
|
|
81
|
+
{ name: 'dry-run', type: 'boolean', description: 'Show what would be uploaded without uploading.' },
|
|
82
|
+
],
|
|
83
|
+
examples: [
|
|
84
|
+
'orm-cli store push ./avatar.png --kind avatar',
|
|
85
|
+
'orm-cli store push ./logs/*.log --kind log',
|
|
86
|
+
'orm-cli store push ./report.json --team acme --name reports/latest.json',
|
|
87
|
+
],
|
|
88
|
+
run: async (ctx) => {
|
|
89
|
+
(0, cloud_1.requireAuth)();
|
|
90
|
+
const files = (0, io_1.expandGlobs)(ctx.positionals);
|
|
91
|
+
if (!files.length) {
|
|
92
|
+
framework_1.out.error('No files to upload.');
|
|
93
|
+
return 1;
|
|
94
|
+
}
|
|
95
|
+
const kind = (str(ctx, 'kind') ?? 'file');
|
|
96
|
+
const team = str(ctx, 'team');
|
|
97
|
+
const isPublic = ctx.flags.public === true;
|
|
98
|
+
const nameOverride = str(ctx, 'name');
|
|
99
|
+
const ctOverride = str(ctx, 'content-type');
|
|
100
|
+
if (nameOverride && files.length > 1) {
|
|
101
|
+
framework_1.out.error('--name can only be used with a single file.');
|
|
102
|
+
return 1;
|
|
103
|
+
}
|
|
104
|
+
if (ctx.flags['dry-run']) {
|
|
105
|
+
framework_1.out.info(`Would upload ${files.length} file(s):`);
|
|
106
|
+
files.forEach((f) => framework_1.out.dim(` ${f} → ${nameOverride ?? path.basename(f)} (${ctOverride ?? contentTypeFor(f)})`));
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
for (const file of files) {
|
|
110
|
+
if (!fs.existsSync(file)) {
|
|
111
|
+
framework_1.out.warn(`Skipping missing file: ${file}`);
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const name = nameOverride ?? path.basename(file);
|
|
115
|
+
const contentType = ctOverride ?? contentTypeFor(file);
|
|
116
|
+
const { url, key } = await (0, cloud_1.api)('/api/dashboard/storage/presign', {
|
|
117
|
+
method: 'POST',
|
|
118
|
+
body: { name, kind, team, contentType, public: isPublic },
|
|
119
|
+
});
|
|
120
|
+
const spin = (0, io_1.spinner)(`Uploading ${name}…`);
|
|
121
|
+
let size;
|
|
122
|
+
try {
|
|
123
|
+
size = await (0, io_1.uploadFile)(url, file, contentType);
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
spin.stop();
|
|
127
|
+
}
|
|
128
|
+
await (0, cloud_1.api)('/api/dashboard/storage/commit', {
|
|
129
|
+
method: 'POST',
|
|
130
|
+
body: { key, size, kind, team, public: isPublic },
|
|
131
|
+
});
|
|
132
|
+
framework_1.out.success(`Uploaded ${key}`);
|
|
133
|
+
}
|
|
134
|
+
return 0;
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
const pull = (0, framework_1.defineCommand)({
|
|
138
|
+
name: 'store pull',
|
|
139
|
+
description: 'Download an object from the store via a presigned URL.',
|
|
140
|
+
group: 'Storage',
|
|
141
|
+
positionals: [{ name: 'key', description: 'The object key to download.', required: true }],
|
|
142
|
+
flags: [
|
|
143
|
+
{ name: 'out', type: 'string', description: 'Output path (default: basename of key).' },
|
|
144
|
+
{ name: 'yes', alias: 'y', type: 'boolean', description: 'Overwrite an existing local file without prompting.' },
|
|
145
|
+
],
|
|
146
|
+
examples: [
|
|
147
|
+
'orm-cli store pull avatars/me.png',
|
|
148
|
+
'orm-cli store pull reports/latest.json --out ./latest.json',
|
|
149
|
+
],
|
|
150
|
+
run: async (ctx) => {
|
|
151
|
+
(0, cloud_1.requireAuth)();
|
|
152
|
+
const key = ctx.positionals[0];
|
|
153
|
+
const dest = str(ctx, 'out') ?? path.basename(key);
|
|
154
|
+
const assumeYes = ctx.flags.yes === true || (0, framework_1.getGlobalOptions)().assumeYes;
|
|
155
|
+
if (!(await (0, io_1.ensureOverwrite)(dest, assumeYes)))
|
|
156
|
+
return 1;
|
|
157
|
+
const { url } = await (0, cloud_1.api)('/api/dashboard/storage/presign-get', {
|
|
158
|
+
query: { key },
|
|
159
|
+
});
|
|
160
|
+
const spin = (0, io_1.spinner)(`Downloading ${key}…`);
|
|
161
|
+
try {
|
|
162
|
+
await (0, io_1.downloadFile)(url, dest);
|
|
163
|
+
}
|
|
164
|
+
finally {
|
|
165
|
+
spin.stop();
|
|
166
|
+
}
|
|
167
|
+
framework_1.out.success(`Downloaded ${key} → ${dest}`);
|
|
168
|
+
return 0;
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
const list = (0, framework_1.defineCommand)({
|
|
172
|
+
name: 'store list',
|
|
173
|
+
description: 'List objects in the store.',
|
|
174
|
+
group: 'Storage',
|
|
175
|
+
flags: [
|
|
176
|
+
{ name: 'team', type: 'string', description: 'Filter by team slug or id.' },
|
|
177
|
+
{ name: 'kind', type: 'string', description: 'Filter by object kind.' },
|
|
178
|
+
{ name: 'prefix', type: 'string', description: 'Filter by object key prefix.' },
|
|
179
|
+
{ name: 'limit', type: 'number', description: 'Max objects to return.', default: 50 },
|
|
180
|
+
{ name: 'offset', type: 'number', description: 'Skip this many objects.' },
|
|
181
|
+
{ name: 'json', type: 'boolean', description: 'Output raw JSON.' },
|
|
182
|
+
],
|
|
183
|
+
examples: [
|
|
184
|
+
'orm-cli store list',
|
|
185
|
+
'orm-cli store list --team acme --kind image',
|
|
186
|
+
'orm-cli store list --prefix logs/ --limit 100 --offset 100',
|
|
187
|
+
],
|
|
188
|
+
run: async (ctx) => {
|
|
189
|
+
(0, cloud_1.requireAuth)();
|
|
190
|
+
const { objects } = await (0, cloud_1.api)('/api/dashboard/storage', {
|
|
191
|
+
query: {
|
|
192
|
+
team: str(ctx, 'team'),
|
|
193
|
+
kind: str(ctx, 'kind'),
|
|
194
|
+
prefix: str(ctx, 'prefix'),
|
|
195
|
+
limit: typeof ctx.flags.limit === 'number' ? ctx.flags.limit : undefined,
|
|
196
|
+
offset: typeof ctx.flags.offset === 'number' ? ctx.flags.offset : undefined,
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
if (ctx.flags.json) {
|
|
200
|
+
framework_1.out.json(objects);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
framework_1.out.table(objects.map((o) => ({
|
|
204
|
+
key: o.key,
|
|
205
|
+
kind: o.kind,
|
|
206
|
+
size: o.size,
|
|
207
|
+
contentType: o.contentType,
|
|
208
|
+
createdAt: o.createdAt,
|
|
209
|
+
})));
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
const rm = (0, framework_1.defineCommand)({
|
|
213
|
+
name: 'store rm',
|
|
214
|
+
description: 'Delete an object from the store.',
|
|
215
|
+
group: 'Storage',
|
|
216
|
+
positionals: [{ name: 'key', description: 'The object key to delete.', required: true }],
|
|
217
|
+
flags: [{ name: 'yes', alias: 'y', type: 'boolean', description: 'Skip the confirmation prompt.' }],
|
|
218
|
+
examples: ['orm-cli store rm logs/old.log --yes', 'orm-cli store rm avatars/me.png -y'],
|
|
219
|
+
run: async (ctx) => {
|
|
220
|
+
(0, cloud_1.requireAuth)();
|
|
221
|
+
const key = ctx.positionals[0];
|
|
222
|
+
const assumeYes = ctx.flags.yes === true || (0, framework_1.getGlobalOptions)().assumeYes;
|
|
223
|
+
framework_1.out.warn(`This will permanently delete ${key}.`);
|
|
224
|
+
if (!(await (0, prompt_1.confirm)(`Delete ${key}?`, { assumeYes, default: false }))) {
|
|
225
|
+
framework_1.out.info('Aborted (pass --yes to skip this prompt in a non-interactive session).');
|
|
226
|
+
return 1;
|
|
227
|
+
}
|
|
228
|
+
await (0, cloud_1.api)('/api/dashboard/storage', { method: 'DELETE', query: { key } });
|
|
229
|
+
framework_1.out.success(`Deleted ${key}`);
|
|
230
|
+
return 0;
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
const bucketList = (0, framework_1.defineCommand)({
|
|
234
|
+
name: 'bucket list',
|
|
235
|
+
description: 'List the buckets registered for the account.',
|
|
236
|
+
group: 'Storage',
|
|
237
|
+
flags: [{ name: 'json', type: 'boolean', description: 'Output raw JSON.' }],
|
|
238
|
+
examples: ['orm-cli bucket list', 'orm-cli bucket list --json'],
|
|
239
|
+
run: async (ctx) => {
|
|
240
|
+
(0, cloud_1.requireAuth)();
|
|
241
|
+
const { buckets } = await (0, cloud_1.api)('/api/dashboard/storage/buckets');
|
|
242
|
+
if (ctx.flags.json) {
|
|
243
|
+
framework_1.out.json(buckets);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
framework_1.out.table(buckets.map((b) => ({ name: b.name, region: b.region, default: b.default })));
|
|
247
|
+
},
|
|
248
|
+
});
|
|
249
|
+
const bucketAdd = (0, framework_1.defineCommand)({
|
|
250
|
+
name: 'bucket add',
|
|
251
|
+
description: 'Register a new bucket for the account or team.',
|
|
252
|
+
group: 'Storage',
|
|
253
|
+
flags: [
|
|
254
|
+
{ name: 'name', type: 'string', description: 'Bucket name.', required: true },
|
|
255
|
+
{ name: 'region', type: 'string', description: 'AWS region.', default: 'us-east-1' },
|
|
256
|
+
{ name: 'team', type: 'string', description: 'Team slug or id to register the bucket under.' },
|
|
257
|
+
],
|
|
258
|
+
examples: [
|
|
259
|
+
'orm-cli bucket add --name my-bucket',
|
|
260
|
+
'orm-cli bucket add --name my-bucket --region eu-west-1 --team acme',
|
|
261
|
+
],
|
|
262
|
+
run: async (ctx) => {
|
|
263
|
+
(0, cloud_1.requireAuth)();
|
|
264
|
+
const name = str(ctx, 'name');
|
|
265
|
+
const region = str(ctx, 'region') ?? 'us-east-1';
|
|
266
|
+
const team = str(ctx, 'team');
|
|
267
|
+
await (0, cloud_1.api)('/api/dashboard/storage/buckets', {
|
|
268
|
+
method: 'POST',
|
|
269
|
+
body: { name, region, team },
|
|
270
|
+
});
|
|
271
|
+
framework_1.out.success(`Added bucket ${name} (${region})`);
|
|
272
|
+
},
|
|
273
|
+
});
|
|
274
|
+
exports.commands = [push, pull, list, rm, bucketList, bucketAdd];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Command } from '../framework';
|
|
2
|
+
interface VersionInfo {
|
|
3
|
+
current: string;
|
|
4
|
+
latest?: string;
|
|
5
|
+
updateAvailable: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Query the npm registry for the latest published version (best-effort). */
|
|
8
|
+
export declare function fetchLatestVersion(current: string): Promise<VersionInfo>;
|
|
9
|
+
export declare const commands: Command[];
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.commands = void 0;
|
|
4
|
+
exports.fetchLatestVersion = fetchLatestVersion;
|
|
5
|
+
// System commands for the prorm CLI: shell completion script generation and a
|
|
6
|
+
// self-update helper with an "update available" check against the npm registry.
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const framework_1 = require("../framework");
|
|
9
|
+
const cloud_1 = require("../cloud");
|
|
10
|
+
const PKG = 'ts-prorm-orm';
|
|
11
|
+
const BIN = 'orm-cli';
|
|
12
|
+
/** Unique top-level command words (first token of each registered command). */
|
|
13
|
+
function topLevelWords() {
|
|
14
|
+
return [...new Set((0, framework_1.allCommands)().map((cmd) => cmd.name.split(' ')[0]))].sort();
|
|
15
|
+
}
|
|
16
|
+
/** Subcommand words for a given top-level word (e.g. add/list for "db"). */
|
|
17
|
+
function subWords(top) {
|
|
18
|
+
return [
|
|
19
|
+
...new Set((0, framework_1.allCommands)()
|
|
20
|
+
.filter((cmd) => cmd.name.startsWith(top + ' '))
|
|
21
|
+
.map((cmd) => cmd.name.split(' ')[1])),
|
|
22
|
+
].sort();
|
|
23
|
+
}
|
|
24
|
+
function bashScript() {
|
|
25
|
+
const tops = topLevelWords();
|
|
26
|
+
const caseArms = tops
|
|
27
|
+
.filter((t) => subWords(t).length)
|
|
28
|
+
.map((t) => ` ${t}) opts="${subWords(t).join(' ')}" ;;`)
|
|
29
|
+
.join('\n');
|
|
30
|
+
return `# bash completion for ${BIN}
|
|
31
|
+
_${BIN.replace(/-/g, '_')}() {
|
|
32
|
+
local cur prev words cword
|
|
33
|
+
_init_completion 2>/dev/null || { cur="\${COMP_WORDS[COMP_CWORD]}"; prev="\${COMP_WORDS[COMP_CWORD-1]}"; }
|
|
34
|
+
local tops="${tops.join(' ')}"
|
|
35
|
+
if [ "\$COMP_CWORD" -eq 1 ]; then
|
|
36
|
+
COMPREPLY=( \$(compgen -W "\$tops" -- "\$cur") ); return 0
|
|
37
|
+
fi
|
|
38
|
+
local opts=""
|
|
39
|
+
case "\${COMP_WORDS[1]}" in
|
|
40
|
+
${caseArms}
|
|
41
|
+
esac
|
|
42
|
+
COMPREPLY=( \$(compgen -W "\$opts" -- "\$cur") )
|
|
43
|
+
}
|
|
44
|
+
complete -F _${BIN.replace(/-/g, '_')} ${BIN}
|
|
45
|
+
`;
|
|
46
|
+
}
|
|
47
|
+
function zshScript() {
|
|
48
|
+
const tops = topLevelWords();
|
|
49
|
+
const subCases = tops
|
|
50
|
+
.filter((t) => subWords(t).length)
|
|
51
|
+
.map((t) => ` ${t}) compadd ${subWords(t).join(' ')} ;;`)
|
|
52
|
+
.join('\n');
|
|
53
|
+
return `#compdef ${BIN}
|
|
54
|
+
_${BIN.replace(/-/g, '_')}() {
|
|
55
|
+
local -a tops
|
|
56
|
+
tops=(${tops.join(' ')})
|
|
57
|
+
if (( CURRENT == 2 )); then
|
|
58
|
+
compadd \${tops[@]}
|
|
59
|
+
return
|
|
60
|
+
fi
|
|
61
|
+
case "\${words[2]}" in
|
|
62
|
+
${subCases}
|
|
63
|
+
esac
|
|
64
|
+
}
|
|
65
|
+
_${BIN.replace(/-/g, '_')} "\$@"
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
function fishScript() {
|
|
69
|
+
const lines = [`# fish completion for ${BIN}`];
|
|
70
|
+
for (const top of topLevelWords()) {
|
|
71
|
+
lines.push(`complete -c ${BIN} -n "__fish_use_subcommand" -a "${top}"`);
|
|
72
|
+
for (const sub of subWords(top)) {
|
|
73
|
+
lines.push(`complete -c ${BIN} -n "__fish_seen_subcommand_from ${top}" -a "${sub}"`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return lines.join('\n') + '\n';
|
|
77
|
+
}
|
|
78
|
+
const completion = (0, framework_1.defineCommand)({
|
|
79
|
+
name: 'completion',
|
|
80
|
+
description: 'Print a shell completion script (bash, zsh, or fish).',
|
|
81
|
+
group: 'System',
|
|
82
|
+
positionals: [
|
|
83
|
+
{ name: 'shell', description: 'Target shell.', required: true, choices: ['bash', 'zsh', 'fish'] },
|
|
84
|
+
],
|
|
85
|
+
examples: [
|
|
86
|
+
'orm-cli completion bash >> ~/.bashrc',
|
|
87
|
+
'orm-cli completion zsh > "${fpath[1]}/_orm-cli"',
|
|
88
|
+
'orm-cli completion fish > ~/.config/fish/completions/orm-cli.fish',
|
|
89
|
+
],
|
|
90
|
+
run: (ctx) => {
|
|
91
|
+
const shell = ctx.positionals[0];
|
|
92
|
+
const script = shell === 'bash' ? bashScript() : shell === 'zsh' ? zshScript() : fishScript();
|
|
93
|
+
process.stdout.write(script);
|
|
94
|
+
return 0;
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
/** Compare two dotted semver-ish strings; returns true if `b` is newer. */
|
|
98
|
+
function isNewer(a, b) {
|
|
99
|
+
const pa = a.split('.').map((n) => parseInt(n, 10) || 0);
|
|
100
|
+
const pb = b.split('.').map((n) => parseInt(n, 10) || 0);
|
|
101
|
+
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
|
102
|
+
if ((pb[i] ?? 0) > (pa[i] ?? 0))
|
|
103
|
+
return true;
|
|
104
|
+
if ((pb[i] ?? 0) < (pa[i] ?? 0))
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
/** Query the npm registry for the latest published version (best-effort). */
|
|
110
|
+
async function fetchLatestVersion(current) {
|
|
111
|
+
try {
|
|
112
|
+
const data = await (0, cloud_1.api)(`https://registry.npmjs.org/${PKG}/latest`, {
|
|
113
|
+
auth: false,
|
|
114
|
+
retries: 1,
|
|
115
|
+
timeoutMs: 5000,
|
|
116
|
+
});
|
|
117
|
+
const latest = data?.version;
|
|
118
|
+
return { current, latest, updateAvailable: Boolean(latest && isNewer(current, latest)) };
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return { current, updateAvailable: false };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const upgrade = (0, framework_1.defineCommand)({
|
|
125
|
+
name: 'upgrade',
|
|
126
|
+
description: 'Check for and install a newer version of the CLI.',
|
|
127
|
+
group: 'System',
|
|
128
|
+
flags: [
|
|
129
|
+
{ name: 'check', type: 'boolean', description: 'Only check; do not install.' },
|
|
130
|
+
],
|
|
131
|
+
examples: ['orm-cli upgrade', 'orm-cli upgrade --check', 'orm-cli upgrade --json'],
|
|
132
|
+
run: async (ctx) => {
|
|
133
|
+
// Resolve the current version from package.json via the same helper misc uses.
|
|
134
|
+
let current = '0.0.0';
|
|
135
|
+
try {
|
|
136
|
+
current = require('../../../package.json').version || current;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// ignore
|
|
140
|
+
}
|
|
141
|
+
const info = await fetchLatestVersion(current);
|
|
142
|
+
if (ctx.flags.json) {
|
|
143
|
+
framework_1.out.json(info);
|
|
144
|
+
return info.updateAvailable ? 0 : 0;
|
|
145
|
+
}
|
|
146
|
+
if (!info.latest) {
|
|
147
|
+
framework_1.out.warn('Could not determine the latest version (registry unreachable).');
|
|
148
|
+
return 1;
|
|
149
|
+
}
|
|
150
|
+
if (!info.updateAvailable) {
|
|
151
|
+
framework_1.out.success(`Up to date (v${current}).`);
|
|
152
|
+
return 0;
|
|
153
|
+
}
|
|
154
|
+
framework_1.out.info(`Update available: v${current} → v${info.latest}`);
|
|
155
|
+
if (ctx.flags.check) {
|
|
156
|
+
framework_1.out.info(`Run \`npm install -g ${PKG}\` (or \`orm-cli upgrade\`) to update.`);
|
|
157
|
+
return 0;
|
|
158
|
+
}
|
|
159
|
+
framework_1.out.info(`Installing ${PKG}@${info.latest} …`);
|
|
160
|
+
const r = (0, child_process_1.spawnSync)('npm', ['install', '-g', `${PKG}@${info.latest}`], { stdio: 'inherit' });
|
|
161
|
+
if (r.status !== 0) {
|
|
162
|
+
framework_1.out.error('Upgrade failed. Try running the install command manually.');
|
|
163
|
+
return 1;
|
|
164
|
+
}
|
|
165
|
+
framework_1.out.success(`Upgraded to v${info.latest}.`);
|
|
166
|
+
return 0;
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
exports.commands = [completion, upgrade];
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.commands = void 0;
|
|
4
|
+
// Teams command module for the prorm CLI. Manages teams, membership, and the
|
|
5
|
+
// currently-selected team context against the dashboard API.
|
|
6
|
+
const framework_1 = require("../framework");
|
|
7
|
+
const cloud_1 = require("../cloud");
|
|
8
|
+
/** Resolve the target team slug from --team or the stored current team. */
|
|
9
|
+
function resolveTeam(ctx) {
|
|
10
|
+
const flag = ctx.flags.team;
|
|
11
|
+
if (typeof flag === 'string' && flag)
|
|
12
|
+
return flag;
|
|
13
|
+
return (0, cloud_1.loadConfig)().teamSlug;
|
|
14
|
+
}
|
|
15
|
+
const create = (0, framework_1.defineCommand)({
|
|
16
|
+
name: 'team create',
|
|
17
|
+
description: 'Create a new team.',
|
|
18
|
+
group: 'Teams',
|
|
19
|
+
flags: [
|
|
20
|
+
{ name: 'name', type: 'string', description: 'Team display name.', required: true },
|
|
21
|
+
{ name: 'slug', type: 'string', description: 'URL slug (server derives one if omitted).' },
|
|
22
|
+
],
|
|
23
|
+
examples: [
|
|
24
|
+
'orm-cli team create --name "Acme Inc"',
|
|
25
|
+
'orm-cli team create --name "Acme Inc" --slug acme',
|
|
26
|
+
],
|
|
27
|
+
run: async (ctx) => {
|
|
28
|
+
(0, cloud_1.requireAuth)();
|
|
29
|
+
const body = { name: ctx.flags.name };
|
|
30
|
+
if (typeof ctx.flags.slug === 'string' && ctx.flags.slug)
|
|
31
|
+
body.slug = ctx.flags.slug;
|
|
32
|
+
const team = await (0, cloud_1.api)('/api/dashboard/teams', { method: 'POST', body });
|
|
33
|
+
framework_1.out.success(`Created team ${team.slug}`);
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
const list = (0, framework_1.defineCommand)({
|
|
37
|
+
name: 'team list',
|
|
38
|
+
description: 'List teams you belong to.',
|
|
39
|
+
group: 'Teams',
|
|
40
|
+
flags: [{ name: 'json', type: 'boolean', description: 'Output raw JSON.' }],
|
|
41
|
+
examples: ['orm-cli team list', 'orm-cli team list --json'],
|
|
42
|
+
run: async (ctx) => {
|
|
43
|
+
(0, cloud_1.requireAuth)();
|
|
44
|
+
const { teams } = await (0, cloud_1.api)('/api/dashboard/teams');
|
|
45
|
+
if (ctx.flags.json) {
|
|
46
|
+
framework_1.out.json(teams);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const current = (0, cloud_1.loadConfig)().teamSlug;
|
|
50
|
+
framework_1.out.table(teams.map((t) => ({
|
|
51
|
+
current: t.slug === current ? '*' : '',
|
|
52
|
+
id: t.id,
|
|
53
|
+
name: t.name,
|
|
54
|
+
slug: t.slug,
|
|
55
|
+
role: t.role ?? '',
|
|
56
|
+
})));
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
const switchTeam = (0, framework_1.defineCommand)({
|
|
60
|
+
name: 'team switch',
|
|
61
|
+
description: 'Switch the current team context.',
|
|
62
|
+
group: 'Teams',
|
|
63
|
+
positionals: [{ name: 'slug', description: 'Team slug to switch to.', required: true }],
|
|
64
|
+
examples: ['orm-cli team switch acme'],
|
|
65
|
+
run: async (ctx) => {
|
|
66
|
+
(0, cloud_1.requireAuth)();
|
|
67
|
+
const slug = ctx.positionals[0];
|
|
68
|
+
const { teams } = await (0, cloud_1.api)('/api/dashboard/teams', { query: { slug } });
|
|
69
|
+
const found = teams.find((t) => t.slug === slug);
|
|
70
|
+
if (!found) {
|
|
71
|
+
framework_1.out.error(`Team not found: ${slug}`);
|
|
72
|
+
return 1;
|
|
73
|
+
}
|
|
74
|
+
(0, cloud_1.updateConfig)({ teamId: found.id, teamSlug: slug });
|
|
75
|
+
framework_1.out.success(`Switched to ${slug}`);
|
|
76
|
+
return 0;
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
const invite = (0, framework_1.defineCommand)({
|
|
80
|
+
name: 'team invite',
|
|
81
|
+
description: 'Invite a user to a team by email.',
|
|
82
|
+
group: 'Teams',
|
|
83
|
+
positionals: [{ name: 'email', description: 'Email address to invite.', required: true }],
|
|
84
|
+
flags: [
|
|
85
|
+
{ name: 'role', type: 'string', description: 'Role for the invitee.', choices: ['admin', 'member'], default: 'member' },
|
|
86
|
+
{ name: 'team', type: 'string', description: 'Team slug (defaults to current team).' },
|
|
87
|
+
],
|
|
88
|
+
examples: [
|
|
89
|
+
'orm-cli team invite dev@acme.com',
|
|
90
|
+
'orm-cli team invite dev@acme.com --role admin --team acme',
|
|
91
|
+
],
|
|
92
|
+
run: async (ctx) => {
|
|
93
|
+
(0, cloud_1.requireAuth)();
|
|
94
|
+
const team = resolveTeam(ctx);
|
|
95
|
+
if (!team) {
|
|
96
|
+
framework_1.out.error('No team selected. Use --team or `team switch`.');
|
|
97
|
+
return 1;
|
|
98
|
+
}
|
|
99
|
+
const email = ctx.positionals[0];
|
|
100
|
+
const role = ctx.flags.role;
|
|
101
|
+
const res = await (0, cloud_1.api)('/api/dashboard/teams/' + team + '/invites', { method: 'POST', body: { email, role } });
|
|
102
|
+
framework_1.out.success(`Invited ${email}`);
|
|
103
|
+
if (res.inviteUrl)
|
|
104
|
+
framework_1.out.info(res.inviteUrl);
|
|
105
|
+
return 0;
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
const members = (0, framework_1.defineCommand)({
|
|
109
|
+
name: 'team members',
|
|
110
|
+
description: 'List members of a team.',
|
|
111
|
+
group: 'Teams',
|
|
112
|
+
flags: [
|
|
113
|
+
{ name: 'team', type: 'string', description: 'Team slug (defaults to current team).' },
|
|
114
|
+
{ name: 'limit', type: 'number', description: 'Max members to return.', default: 50 },
|
|
115
|
+
{ name: 'offset', type: 'number', description: 'Skip this many members.' },
|
|
116
|
+
{ name: 'json', type: 'boolean', description: 'Output raw JSON.' },
|
|
117
|
+
],
|
|
118
|
+
examples: ['orm-cli team members', 'orm-cli team members --team acme --limit 100'],
|
|
119
|
+
run: async (ctx) => {
|
|
120
|
+
(0, cloud_1.requireAuth)();
|
|
121
|
+
const team = resolveTeam(ctx);
|
|
122
|
+
if (!team) {
|
|
123
|
+
framework_1.out.error('No team selected. Use --team or `team switch`.');
|
|
124
|
+
return 1;
|
|
125
|
+
}
|
|
126
|
+
const { members: rows } = await (0, cloud_1.api)('/api/dashboard/teams/' + team + '/members', {
|
|
127
|
+
query: {
|
|
128
|
+
limit: typeof ctx.flags.limit === 'number' ? ctx.flags.limit : undefined,
|
|
129
|
+
offset: typeof ctx.flags.offset === 'number' ? ctx.flags.offset : undefined,
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
if (ctx.flags.json) {
|
|
133
|
+
framework_1.out.json(rows);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
framework_1.out.table(rows.map((m) => ({
|
|
137
|
+
userId: m.userId,
|
|
138
|
+
email: m.email,
|
|
139
|
+
name: m.name ?? '',
|
|
140
|
+
role: m.role,
|
|
141
|
+
joinedAt: m.joinedAt ?? '',
|
|
142
|
+
})));
|
|
143
|
+
return 0;
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
const current = (0, framework_1.defineCommand)({
|
|
147
|
+
name: 'team current',
|
|
148
|
+
description: 'Print the currently-selected team context.',
|
|
149
|
+
group: 'Teams',
|
|
150
|
+
flags: [{ name: 'json', type: 'boolean', description: 'Output raw JSON.' }],
|
|
151
|
+
examples: ['orm-cli team current', 'orm-cli team current --json'],
|
|
152
|
+
run: (ctx) => {
|
|
153
|
+
const cfg = (0, cloud_1.loadConfig)();
|
|
154
|
+
if (ctx.flags.json) {
|
|
155
|
+
framework_1.out.json({ teamSlug: cfg.teamSlug ?? null, teamId: cfg.teamId ?? null });
|
|
156
|
+
return 0;
|
|
157
|
+
}
|
|
158
|
+
if (!cfg.teamSlug && !cfg.teamId) {
|
|
159
|
+
framework_1.out.info('No team selected. Use `team switch <slug>` or --team.');
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
framework_1.out.info(`Team: ${cfg.teamSlug ?? '(unknown slug)'}${cfg.teamId ? ` (${cfg.teamId})` : ''}`);
|
|
163
|
+
return 0;
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
const removeMember = (0, framework_1.defineCommand)({
|
|
167
|
+
name: 'team remove-member',
|
|
168
|
+
description: 'Remove a member from a team.',
|
|
169
|
+
group: 'Teams',
|
|
170
|
+
positionals: [{ name: 'userId', description: 'User ID to remove.', required: true }],
|
|
171
|
+
flags: [{ name: 'team', type: 'string', description: 'Team slug (defaults to current team).' }],
|
|
172
|
+
examples: [
|
|
173
|
+
'orm-cli team remove-member user_123',
|
|
174
|
+
'orm-cli team remove-member user_123 --team acme',
|
|
175
|
+
],
|
|
176
|
+
run: async (ctx) => {
|
|
177
|
+
(0, cloud_1.requireAuth)();
|
|
178
|
+
const team = resolveTeam(ctx);
|
|
179
|
+
if (!team) {
|
|
180
|
+
framework_1.out.error('No team selected. Use --team or `team switch`.');
|
|
181
|
+
return 1;
|
|
182
|
+
}
|
|
183
|
+
const userId = ctx.positionals[0];
|
|
184
|
+
await (0, cloud_1.api)('/api/dashboard/teams/' + team + '/members/' + userId, { method: 'DELETE' });
|
|
185
|
+
framework_1.out.success(`Removed member ${userId}`);
|
|
186
|
+
return 0;
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
exports.commands = [create, list, switchTeam, current, invite, members, removeMember];
|