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
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* ModelDiagram — generates a fully-rendered SVG card for a single ORM model
|
|
3
|
+
* ModelDiagram — generates a fully-rendered SVG card for a single ORM model,
|
|
4
|
+
* styled to the "Industry" blueprint design system.
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
*
|
|
6
|
+
* Look:
|
|
7
|
+
* - Solid accent (#5980a6) header bar with the model name in Barlow Condensed
|
|
8
|
+
* - White card body, 1px hairline dividers, SQUARE corners, no drop shadow
|
|
9
|
+
* - L-shaped corner registration marks around the frame (blueprint)
|
|
10
|
+
* - One row per column: name (Barlow) + type (mono, neutral-700) + constraint
|
|
11
|
+
* badges — PK/UQ (accent tint), FK (accent-2 tint), NN/AI/TS (neutral tint)
|
|
12
|
+
* - Associations listed at the bottom with cardinality marks
|
|
13
|
+
* - Hairline footer strip with table name + metadata
|
|
11
14
|
* - Auto-sized SVG viewBox
|
|
12
15
|
*
|
|
13
16
|
* Usage:
|
|
@@ -55,30 +58,6 @@ const fs = __importStar(require("fs"));
|
|
|
55
58
|
const path = __importStar(require("path"));
|
|
56
59
|
const palette_1 = require("./palette");
|
|
57
60
|
const svg_dom_1 = require("./svg-dom");
|
|
58
|
-
const TYPE_COLORS = [
|
|
59
|
-
{ pattern: /STRING|VARCHAR|CHAR|TEXT/i, text: '#059669', bg: '#D1FAE5' },
|
|
60
|
-
{
|
|
61
|
-
pattern: /INT|BIGINT|SMALLINT|TINYINT|FLOAT|DOUBLE|DECIMAL|NUMERIC|NUMBER/i,
|
|
62
|
-
text: '#7C3AED',
|
|
63
|
-
bg: '#EDE9FE',
|
|
64
|
-
},
|
|
65
|
-
{ pattern: /DATE|TIME|TIMESTAMP/i, text: '#EA580C', bg: '#FFEDD5' },
|
|
66
|
-
{ pattern: /BOOL/i, text: '#DB2777', bg: '#FCE7F3' },
|
|
67
|
-
{ pattern: /UUID/i, text: '#0891B2', bg: '#CFFAFE' },
|
|
68
|
-
{ pattern: /JSONB/i, text: '#4338CA', bg: '#E0E7FF' },
|
|
69
|
-
{ pattern: /JSON/i, text: '#4F46E5', bg: '#E0E7FF' },
|
|
70
|
-
{ pattern: /BLOB|BINARY|VARBINARY/i, text: '#92400E', bg: '#FEF3C7' },
|
|
71
|
-
{ pattern: /ENUM/i, text: '#B45309', bg: '#FEF3C7' },
|
|
72
|
-
{ pattern: /ARRAY/i, text: '#0369A1', bg: '#E0F2FE' },
|
|
73
|
-
{ pattern: /GEOMETRY|GEOGRAPHY/i, text: '#166534', bg: '#DCFCE7' },
|
|
74
|
-
];
|
|
75
|
-
function typeColor(t) {
|
|
76
|
-
for (const c of TYPE_COLORS) {
|
|
77
|
-
if (c.pattern.test(t))
|
|
78
|
-
return { text: c.text, bg: c.bg };
|
|
79
|
-
}
|
|
80
|
-
return { text: '#475569', bg: '#F1F5F9' };
|
|
81
|
-
}
|
|
82
61
|
function resolveType(field) {
|
|
83
62
|
const t = field.type;
|
|
84
63
|
if (typeof t === 'string')
|
|
@@ -91,11 +70,12 @@ function resolveType(field) {
|
|
|
91
70
|
}
|
|
92
71
|
return 'UNKNOWN';
|
|
93
72
|
}
|
|
73
|
+
/** Cardinality marks per association type (mono, blueprint). */
|
|
94
74
|
const ASSOC_META = {
|
|
95
|
-
hasOne: {
|
|
96
|
-
hasMany: {
|
|
97
|
-
belongsTo: {
|
|
98
|
-
belongsToMany: {
|
|
75
|
+
hasOne: { mark: '1:1', label: 'hasOne' },
|
|
76
|
+
hasMany: { mark: '1:N', label: 'hasMany' },
|
|
77
|
+
belongsTo: { mark: 'N:1', label: 'belongsTo' },
|
|
78
|
+
belongsToMany: { mark: 'N:N', label: 'belongsToMany' },
|
|
99
79
|
};
|
|
100
80
|
// ─── Main class ────────────────────────────────────────────────────────────
|
|
101
81
|
class ModelDiagram {
|
|
@@ -120,41 +100,74 @@ class ModelDiagram {
|
|
|
120
100
|
// ── Row badge helper ────────────────────────────────────────────────────
|
|
121
101
|
badges(field, isTS) {
|
|
122
102
|
const b = [];
|
|
103
|
+
const A = palette_1.BADGE_TINTS.accent;
|
|
104
|
+
const A2 = palette_1.BADGE_TINTS.accent2;
|
|
105
|
+
const N = palette_1.BADGE_TINTS.neutral;
|
|
123
106
|
if (field.primaryKey)
|
|
124
|
-
b.push({ text: 'PK', bg:
|
|
107
|
+
b.push({ text: 'PK', bg: A.bg, fg: A.fg });
|
|
125
108
|
if (field.foreignKey || field.references)
|
|
126
|
-
b.push({ text: 'FK', bg:
|
|
109
|
+
b.push({ text: 'FK', bg: A2.bg, fg: A2.fg });
|
|
127
110
|
if (field.autoIncrement)
|
|
128
|
-
b.push({ text: 'AI', bg:
|
|
111
|
+
b.push({ text: 'AI', bg: N.bg, fg: N.fg });
|
|
129
112
|
if (field.unique && !field.primaryKey)
|
|
130
|
-
b.push({ text: 'UQ', bg:
|
|
113
|
+
b.push({ text: 'UQ', bg: A.bg, fg: A.fg });
|
|
131
114
|
if (field.allowNull === false)
|
|
132
|
-
b.push({ text: 'NN', bg:
|
|
115
|
+
b.push({ text: 'NN', bg: N.bg, fg: N.fg });
|
|
133
116
|
if (isTS)
|
|
134
|
-
b.push({ text: 'TS', bg:
|
|
117
|
+
b.push({ text: 'TS', bg: N.bg, fg: N.fg });
|
|
135
118
|
return b;
|
|
136
119
|
}
|
|
137
|
-
// ── SVG badge (drawn into a parent group)
|
|
120
|
+
// ── SVG badge (drawn into a parent group) — square, hairline, mono ────────
|
|
138
121
|
drawBadge(parent, b, x, y) {
|
|
139
|
-
const w = b.text.length *
|
|
140
|
-
parent.child('rect', {
|
|
122
|
+
const w = b.text.length * 8 + 12;
|
|
123
|
+
parent.child('rect', {
|
|
124
|
+
x,
|
|
125
|
+
y,
|
|
126
|
+
width: w,
|
|
127
|
+
height: 18,
|
|
128
|
+
rx: 0,
|
|
129
|
+
fill: b.bg,
|
|
130
|
+
stroke: palette_1.INDUSTRY.divider,
|
|
131
|
+
'stroke-width': 1,
|
|
132
|
+
});
|
|
141
133
|
parent
|
|
142
134
|
.child('text', {
|
|
143
135
|
x: x + w / 2,
|
|
144
|
-
y: y +
|
|
145
|
-
'font-family':
|
|
146
|
-
'font-size':
|
|
147
|
-
'font-weight':
|
|
136
|
+
y: y + 13,
|
|
137
|
+
'font-family': palette_1.FONTS.heading,
|
|
138
|
+
'font-size': 11,
|
|
139
|
+
'font-weight': 600,
|
|
140
|
+
'letter-spacing': 0.4,
|
|
148
141
|
fill: b.fg,
|
|
149
142
|
'text-anchor': 'middle',
|
|
150
143
|
})
|
|
151
144
|
.text(b.text);
|
|
152
145
|
return w;
|
|
153
146
|
}
|
|
147
|
+
// ── L-shaped corner registration marks around the frame ──────────────────
|
|
148
|
+
cornerMarks(svg, x, y, w, h) {
|
|
149
|
+
const len = 9;
|
|
150
|
+
const col = palette_1.INDUSTRY.neutral[500];
|
|
151
|
+
const sw = 1;
|
|
152
|
+
const seg = (x1, y1, x2, y2) => svg.child('line', { x1, y1, x2, y2, stroke: col, 'stroke-width': sw });
|
|
153
|
+
// top-left
|
|
154
|
+
seg(x, y, x + len, y);
|
|
155
|
+
seg(x, y, x, y + len);
|
|
156
|
+
// top-right
|
|
157
|
+
seg(x + w - len, y, x + w, y);
|
|
158
|
+
seg(x + w, y, x + w, y + len);
|
|
159
|
+
// bottom-left
|
|
160
|
+
seg(x, y + h, x + len, y + h);
|
|
161
|
+
seg(x, y + h - len, x, y + h);
|
|
162
|
+
// bottom-right
|
|
163
|
+
seg(x + w - len, y + h, x + w, y + h);
|
|
164
|
+
seg(x + w, y + h - len, x + w, y + h);
|
|
165
|
+
}
|
|
154
166
|
// ── Generate full SVG string (built via a real DOM document) ──────────────
|
|
155
167
|
generate() {
|
|
156
168
|
const { name, tableName, fields, associations, timestamps, paranoid, comment, theme, color } = this.opts;
|
|
157
169
|
const accent = (0, palette_1.resolveAccent)(color);
|
|
170
|
+
const a2 = (0, palette_1.accent2Of)(accent);
|
|
158
171
|
const t = (0, palette_1.resolveTheme)(theme);
|
|
159
172
|
const W = ModelDiagram.W;
|
|
160
173
|
const HDR = ModelDiagram.HDR;
|
|
@@ -164,7 +177,6 @@ class ModelDiagram {
|
|
|
164
177
|
const ASSOC_ROW = ModelDiagram.ASSOC_ROW;
|
|
165
178
|
const FOOTER = ModelDiagram.FOOTER;
|
|
166
179
|
const PAD = ModelDiagram.PAD;
|
|
167
|
-
const R = ModelDiagram.R;
|
|
168
180
|
// ── Build field list (add timestamps if requested) ──────────────────
|
|
169
181
|
const fieldEntries = Object.entries(fields);
|
|
170
182
|
const tsFields = ['createdAt', 'updatedAt'];
|
|
@@ -178,115 +190,94 @@ class ModelDiagram {
|
|
|
178
190
|
});
|
|
179
191
|
}
|
|
180
192
|
const hasAssoc = associations.length > 0;
|
|
181
|
-
const assocBlockH = hasAssoc ? ASSOC_HDR + associations.length * ASSOC_ROW
|
|
193
|
+
const assocBlockH = hasAssoc ? ASSOC_HDR + associations.length * ASSOC_ROW : 0;
|
|
182
194
|
const cardH = HDR + COL_HDR + fieldEntries.length * ROW_H + assocBlockH + FOOTER;
|
|
183
195
|
const svgW = W + 2 * PAD;
|
|
184
196
|
const svgH = cardH + 2 * PAD;
|
|
185
197
|
const cx = PAD;
|
|
186
198
|
const cy = PAD;
|
|
187
|
-
const uid = name.replace(/\W/g, '');
|
|
188
199
|
const doc = new svg_dom_1.SvgDocument(svgW, svgH);
|
|
189
200
|
const svg = doc.root;
|
|
190
|
-
//
|
|
201
|
+
// Web fonts for browser renderers.
|
|
202
|
+
doc.style(palette_1.FONT_IMPORT);
|
|
203
|
+
// ── Ground ──────────────────────────────────────────────────────────
|
|
191
204
|
svg.child('rect', { width: svgW, height: svgH, fill: t.canvasBg });
|
|
192
|
-
// ──
|
|
193
|
-
|
|
194
|
-
[0, accent.from],
|
|
195
|
-
[55, accent.mid],
|
|
196
|
-
[100, accent.to],
|
|
197
|
-
]);
|
|
198
|
-
const filter = doc
|
|
199
|
-
.defs()
|
|
200
|
-
.child('filter', { id: `sh${uid}`, x: '-6%', y: '-6%', width: '112%', height: '125%' });
|
|
201
|
-
filter.child('feDropShadow', { dx: 0, dy: 6, stdDeviation: 10, 'flood-color': '#00000025' });
|
|
202
|
-
doc
|
|
203
|
-
.defs()
|
|
204
|
-
.child('clipPath', { id: `cp${uid}` })
|
|
205
|
-
.child('rect', { x: cx, y: cy, width: W, height: cardH, rx: R });
|
|
206
|
-
// ── Card shell + surface ────────────────────────────────────────────
|
|
207
|
-
svg.child('rect', {
|
|
208
|
-
x: cx - 1,
|
|
209
|
-
y: cy - 1,
|
|
210
|
-
width: W + 2,
|
|
211
|
-
height: cardH + 2,
|
|
212
|
-
rx: R + 1,
|
|
213
|
-
fill: t.border,
|
|
214
|
-
filter: `url(#sh${uid})`,
|
|
215
|
-
});
|
|
205
|
+
// ── Card surface + hairline frame (square) ──────────────────────────
|
|
206
|
+
svg.child('rect', { x: cx, y: cy, width: W, height: cardH, fill: t.cardBg });
|
|
216
207
|
svg.child('rect', {
|
|
217
208
|
x: cx,
|
|
218
209
|
y: cy,
|
|
219
210
|
width: W,
|
|
220
211
|
height: cardH,
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
'
|
|
212
|
+
fill: 'none',
|
|
213
|
+
stroke: t.border,
|
|
214
|
+
'stroke-width': 1,
|
|
224
215
|
});
|
|
225
|
-
//
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
icon.child('rect', { x: 12, y: 8, width: 16, height: 20, rx: 2, fill: 'white', opacity: 0.9 });
|
|
230
|
-
icon.child('rect', { x: 15, y: 4, width: 10, height: 6, rx: 1, fill: 'white', opacity: 0.9 });
|
|
231
|
-
icon.child('rect', { x: 17, y: 13, width: 6, height: 2, rx: 1, fill: accent.mid });
|
|
232
|
-
icon.child('rect', { x: 17, y: 17, width: 6, height: 2, rx: 1, fill: accent.mid });
|
|
233
|
-
icon.child('rect', { x: 17, y: 21, width: 4, height: 2, rx: 1, fill: accent.mid });
|
|
216
|
+
// Corner registration marks.
|
|
217
|
+
this.cornerMarks(svg, cx, cy, W, cardH);
|
|
218
|
+
// ── Header (solid accent bar) ───────────────────────────────────────
|
|
219
|
+
svg.child('rect', { x: cx, y: cy, width: W, height: HDR, fill: accent.mid });
|
|
234
220
|
svg
|
|
235
221
|
.child('text', {
|
|
236
|
-
x: cx +
|
|
237
|
-
y: cy +
|
|
238
|
-
'font-family':
|
|
239
|
-
'font-size':
|
|
240
|
-
'font-weight':
|
|
222
|
+
x: cx + 18,
|
|
223
|
+
y: cy + 30,
|
|
224
|
+
'font-family': palette_1.FONTS.heading,
|
|
225
|
+
'font-size': 24,
|
|
226
|
+
'font-weight': 600,
|
|
227
|
+
'letter-spacing': 0.2,
|
|
241
228
|
fill: '#FFFFFF',
|
|
242
229
|
})
|
|
243
230
|
.text(name);
|
|
244
231
|
if (comment) {
|
|
245
232
|
svg
|
|
246
233
|
.child('text', {
|
|
247
|
-
x: cx +
|
|
248
|
-
y: cy +
|
|
249
|
-
'font-family':
|
|
234
|
+
x: cx + 18,
|
|
235
|
+
y: cy + 47,
|
|
236
|
+
'font-family': palette_1.FONTS.body,
|
|
250
237
|
'font-size': 11,
|
|
251
|
-
fill: 'rgba(255,255,255,0.
|
|
238
|
+
fill: 'rgba(255,255,255,0.82)',
|
|
252
239
|
})
|
|
253
|
-
.text(comment);
|
|
240
|
+
.text(comment.length > 60 ? comment.slice(0, 59) + '…' : comment);
|
|
254
241
|
}
|
|
255
|
-
|
|
256
|
-
x: cx + W - 96,
|
|
257
|
-
y: cy + 20,
|
|
258
|
-
width: 80,
|
|
259
|
-
height: 26,
|
|
260
|
-
rx: 13,
|
|
261
|
-
fill: 'rgba(255,255,255,0.18)',
|
|
262
|
-
});
|
|
242
|
+
// Right-aligned kicker label.
|
|
263
243
|
svg
|
|
264
244
|
.child('text', {
|
|
265
|
-
x: cx + W -
|
|
266
|
-
y: cy +
|
|
267
|
-
'font-family':
|
|
245
|
+
x: cx + W - 16,
|
|
246
|
+
y: cy + 22,
|
|
247
|
+
'font-family': palette_1.FONTS.heading,
|
|
268
248
|
'font-size': 11,
|
|
269
|
-
'font-weight':
|
|
270
|
-
|
|
271
|
-
|
|
249
|
+
'font-weight': 600,
|
|
250
|
+
'letter-spacing': 1.4,
|
|
251
|
+
fill: 'rgba(255,255,255,0.85)',
|
|
252
|
+
'text-anchor': 'end',
|
|
272
253
|
})
|
|
273
254
|
.text('ORM MODEL');
|
|
255
|
+
svg
|
|
256
|
+
.child('text', {
|
|
257
|
+
x: cx + W - 16,
|
|
258
|
+
y: cy + 40,
|
|
259
|
+
'font-family': palette_1.FONTS.mono,
|
|
260
|
+
'font-size': 11,
|
|
261
|
+
fill: 'rgba(255,255,255,0.72)',
|
|
262
|
+
'text-anchor': 'end',
|
|
263
|
+
})
|
|
264
|
+
.text(tableName.length > 26 ? tableName.slice(0, 25) + '…' : tableName);
|
|
274
265
|
// ── Column header row ───────────────────────────────────────────────
|
|
275
266
|
const colHdrY = cy + HDR;
|
|
276
267
|
svg.child('rect', { x: cx, y: colHdrY, width: W, height: COL_HDR, fill: t.colHeaderBg });
|
|
277
268
|
const colHdr = (x, label) => svg
|
|
278
269
|
.child('text', {
|
|
279
270
|
x,
|
|
280
|
-
y: colHdrY +
|
|
281
|
-
'font-family':
|
|
271
|
+
y: colHdrY + 20,
|
|
272
|
+
'font-family': palette_1.FONTS.heading,
|
|
282
273
|
'font-size': 11,
|
|
283
|
-
'font-weight':
|
|
274
|
+
'font-weight': 600,
|
|
284
275
|
fill: t.textSecondary,
|
|
285
|
-
'letter-spacing':
|
|
276
|
+
'letter-spacing': 1,
|
|
286
277
|
})
|
|
287
278
|
.text(label);
|
|
288
|
-
colHdr(cx +
|
|
289
|
-
colHdr(cx +
|
|
279
|
+
colHdr(cx + 18, 'COLUMN');
|
|
280
|
+
colHdr(cx + 230, 'TYPE');
|
|
290
281
|
colHdr(cx + 380, 'CONSTRAINTS');
|
|
291
282
|
svg.child('line', {
|
|
292
283
|
x1: cx,
|
|
@@ -300,116 +291,58 @@ class ModelDiagram {
|
|
|
300
291
|
const fieldSectionY = colHdrY + COL_HDR;
|
|
301
292
|
fieldEntries.forEach(([colName, field], i) => {
|
|
302
293
|
const typeStr = resolveType(field);
|
|
303
|
-
const tc = typeColor(typeStr);
|
|
304
294
|
const rowY = fieldSectionY + i * ROW_H;
|
|
305
295
|
const midY = rowY + ROW_H / 2;
|
|
306
|
-
const textBase = midY +
|
|
296
|
+
const textBase = midY + 4;
|
|
307
297
|
const rowBg = i % 2 === 0 ? t.cardBg : t.rowAlt;
|
|
308
298
|
const isTS = tsFields.includes(colName);
|
|
309
299
|
const isPK = !!field.primaryKey;
|
|
310
300
|
const isFK = !!(field.foreignKey || field.references);
|
|
311
301
|
svg.child('rect', { x: cx, y: rowY, width: W, height: ROW_H, fill: rowBg });
|
|
302
|
+
// Left accent stripe: PK → accent, FK → accent-2.
|
|
312
303
|
if (isPK)
|
|
313
|
-
svg.child('rect', { x: cx, y: rowY, width:
|
|
304
|
+
svg.child('rect', { x: cx, y: rowY, width: 3, height: ROW_H, fill: accent.mid });
|
|
314
305
|
else if (isFK)
|
|
315
|
-
svg.child('rect', { x: cx, y: rowY, width:
|
|
316
|
-
//
|
|
317
|
-
const
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
.child('g', { transform: `translate(${iconX - 7}, ${textBase - 10})` })
|
|
321
|
-
.child('path', {
|
|
322
|
-
d: 'M12.65 10A6 6 0 0 1 6 4a6 6 0 0 1 6.65 6H12.65zM2.93 4.93l6.42 6.42a8 8 0 0 1 9.3 0l1.42-1.42a1 1 0 0 0 0-1.41l-1.42-1.42a1 1 0 0 0-1.41 0l-6.42 6.42a1 1 0 0 0 0 1.41l1.42 1.42a1 1 0 0 0 1.41 0l6.42-6.42a8 8 0 0 0 0-11.3L13.08 2.22a1 1 0 0 0-1.08-.28H12a1 1 0 0 0-.77.36L8.7 4.91 2.93 4.93z',
|
|
323
|
-
fill: '#F59E0B',
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
else if (isFK) {
|
|
327
|
-
const g = svg.child('g', { transform: `translate(${iconX - 7}, ${textBase - 10})` });
|
|
328
|
-
g.child('path', {
|
|
329
|
-
d: 'M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71',
|
|
330
|
-
stroke: '#3B82F6',
|
|
331
|
-
'stroke-width': 2,
|
|
332
|
-
fill: 'none',
|
|
333
|
-
'stroke-linecap': 'round',
|
|
334
|
-
});
|
|
335
|
-
g.child('path', {
|
|
336
|
-
d: 'M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71',
|
|
337
|
-
stroke: '#3B82F6',
|
|
338
|
-
'stroke-width': 2,
|
|
339
|
-
fill: 'none',
|
|
340
|
-
'stroke-linecap': 'round',
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
else if (isTS) {
|
|
344
|
-
const g = svg.child('g', { transform: `translate(${iconX - 7}, ${textBase - 10})` });
|
|
345
|
-
g.child('circle', { cx: 8, cy: 8, r: 7, stroke: '#64748B', 'stroke-width': 1.5, fill: 'none' });
|
|
346
|
-
g.child('path', {
|
|
347
|
-
d: 'M8 4v4l3 2',
|
|
348
|
-
stroke: '#64748B',
|
|
349
|
-
'stroke-width': 1.5,
|
|
350
|
-
fill: 'none',
|
|
351
|
-
'stroke-linecap': 'round',
|
|
352
|
-
});
|
|
353
|
-
}
|
|
354
|
-
else {
|
|
355
|
-
svg.child('circle', { cx: iconX, cy: midY, r: 3.5, fill: '#CBD5E1' });
|
|
356
|
-
}
|
|
357
|
-
// Field name
|
|
358
|
-
const nameW = isPK ? 700 : isFK ? 600 : 500;
|
|
359
|
-
const nameC = isPK ? '#F59E0B' : isFK ? '#3B82F6' : t.textPrimary;
|
|
360
|
-
const dispName = colName.length > 22 ? colName.slice(0, 21) + '…' : colName;
|
|
306
|
+
svg.child('rect', { x: cx, y: rowY, width: 3, height: ROW_H, fill: a2.color });
|
|
307
|
+
// Field name (body font).
|
|
308
|
+
const nameW = isPK || isFK ? 600 : 400;
|
|
309
|
+
const nameC = isPK ? accent.text : isFK ? a2.text : t.textPrimary;
|
|
310
|
+
const dispName = colName.length > 24 ? colName.slice(0, 23) + '…' : colName;
|
|
361
311
|
svg
|
|
362
312
|
.child('text', {
|
|
363
|
-
x: cx +
|
|
313
|
+
x: cx + 18,
|
|
364
314
|
y: textBase,
|
|
365
|
-
'font-family':
|
|
315
|
+
'font-family': palette_1.FONTS.body,
|
|
366
316
|
'font-size': 13,
|
|
367
317
|
'font-weight': nameW,
|
|
368
318
|
fill: nameC,
|
|
369
319
|
})
|
|
370
320
|
.text(dispName);
|
|
371
|
-
// Type
|
|
372
|
-
const
|
|
373
|
-
const typTxt = typeStr.length > 18 ? typeStr.slice(0, 17) + '…' : typeStr;
|
|
374
|
-
svg.child('rect', { x: typX, y: rowY + 11, width: 140, height: 20, rx: 6, fill: tc.bg });
|
|
321
|
+
// Type (mono, neutral-700).
|
|
322
|
+
const typTxt = typeStr.length > 22 ? typeStr.slice(0, 21) + '…' : typeStr;
|
|
375
323
|
svg
|
|
376
324
|
.child('text', {
|
|
377
|
-
x:
|
|
378
|
-
y:
|
|
379
|
-
'font-family':
|
|
380
|
-
'font-size':
|
|
381
|
-
|
|
382
|
-
fill: tc.text,
|
|
383
|
-
'text-anchor': 'middle',
|
|
325
|
+
x: cx + 230,
|
|
326
|
+
y: textBase,
|
|
327
|
+
'font-family': palette_1.FONTS.mono,
|
|
328
|
+
'font-size': 12,
|
|
329
|
+
fill: palette_1.INDUSTRY.neutral[700],
|
|
384
330
|
})
|
|
385
331
|
.text(typTxt);
|
|
386
|
-
// Constraint badges
|
|
332
|
+
// Constraint badges.
|
|
387
333
|
let bx = cx + 380;
|
|
388
334
|
for (const b of this.badges(field, isTS)) {
|
|
389
|
-
bx += this.drawBadge(svg, b, bx, rowY +
|
|
390
|
-
}
|
|
391
|
-
// Default value
|
|
392
|
-
if (field.defaultValue !== undefined && field.defaultValue !== null && !isTS) {
|
|
393
|
-
svg
|
|
394
|
-
.child('text', {
|
|
395
|
-
x: cx + W - 10,
|
|
396
|
-
y: textBase,
|
|
397
|
-
'font-family': 'monospace',
|
|
398
|
-
'font-size': 10,
|
|
399
|
-
fill: '#94A3B8',
|
|
400
|
-
'text-anchor': 'end',
|
|
401
|
-
})
|
|
402
|
-
.text(`default: ${String(field.defaultValue).slice(0, 10)}`);
|
|
335
|
+
bx += this.drawBadge(svg, b, bx, rowY + (ROW_H - 18) / 2) + 5;
|
|
403
336
|
}
|
|
404
|
-
// FK reference label
|
|
337
|
+
// FK reference label (below the name).
|
|
405
338
|
if (isFK && field.references) {
|
|
406
339
|
svg
|
|
407
340
|
.child('text', {
|
|
408
|
-
x: cx +
|
|
341
|
+
x: cx + 18,
|
|
409
342
|
y: rowY + ROW_H - 6,
|
|
410
|
-
'font-family':
|
|
343
|
+
'font-family': palette_1.FONTS.mono,
|
|
411
344
|
'font-size': 9,
|
|
412
|
-
fill:
|
|
345
|
+
fill: t.textSecondary,
|
|
413
346
|
})
|
|
414
347
|
.text(`→ ${field.references.model}.${field.references.key}`);
|
|
415
348
|
}
|
|
@@ -425,15 +358,16 @@ class ModelDiagram {
|
|
|
425
358
|
// ── Associations ────────────────────────────────────────────────────
|
|
426
359
|
const assocBaseY = fieldSectionY + fieldEntries.length * ROW_H;
|
|
427
360
|
if (hasAssoc) {
|
|
428
|
-
svg.child('rect', { x: cx, y: assocBaseY, width: W, height: ASSOC_HDR, fill:
|
|
361
|
+
svg.child('rect', { x: cx, y: assocBaseY, width: W, height: ASSOC_HDR, fill: palette_1.INDUSTRY.accentLight });
|
|
362
|
+
svg.child('rect', { x: cx, y: assocBaseY, width: 3, height: ASSOC_HDR, fill: accent.mid });
|
|
429
363
|
svg
|
|
430
364
|
.child('text', {
|
|
431
|
-
x: cx +
|
|
432
|
-
y: assocBaseY +
|
|
433
|
-
'font-family':
|
|
365
|
+
x: cx + 18,
|
|
366
|
+
y: assocBaseY + 22,
|
|
367
|
+
'font-family': palette_1.FONTS.heading,
|
|
434
368
|
'font-size': 12,
|
|
435
|
-
'font-weight':
|
|
436
|
-
fill:
|
|
369
|
+
'font-weight': 600,
|
|
370
|
+
fill: accent.text,
|
|
437
371
|
'letter-spacing': 1,
|
|
438
372
|
})
|
|
439
373
|
.text('ASSOCIATIONS');
|
|
@@ -442,86 +376,87 @@ class ModelDiagram {
|
|
|
442
376
|
y1: assocBaseY + ASSOC_HDR,
|
|
443
377
|
x2: cx + W,
|
|
444
378
|
y2: assocBaseY + ASSOC_HDR,
|
|
445
|
-
stroke:
|
|
379
|
+
stroke: t.border,
|
|
446
380
|
'stroke-width': 1,
|
|
447
381
|
});
|
|
448
382
|
associations.forEach((assoc, i) => {
|
|
449
383
|
const aY = assocBaseY + ASSOC_HDR + i * ASSOC_ROW;
|
|
450
|
-
const meta = ASSOC_META[assoc.type] ?? {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
bg: '#F1F5F9',
|
|
454
|
-
label: assoc.type,
|
|
455
|
-
};
|
|
456
|
-
const rowBg = i % 2 === 0 ? '#F0F9FF' : '#E0F2FE';
|
|
457
|
-
const aTextY = aY + 20;
|
|
384
|
+
const meta = ASSOC_META[assoc.type] ?? { mark: '?', label: assoc.type };
|
|
385
|
+
const rowBg = i % 2 === 0 ? t.cardBg : t.rowAlt;
|
|
386
|
+
const aTextY = aY + 18;
|
|
458
387
|
svg.child('rect', { x: cx, y: aY, width: W, height: ASSOC_ROW, fill: rowBg });
|
|
459
|
-
|
|
460
|
-
|
|
388
|
+
// Cardinality mark (mono, accent tint chip).
|
|
389
|
+
const cbw = 36;
|
|
390
|
+
svg.child('rect', {
|
|
391
|
+
x: cx + 14,
|
|
392
|
+
y: aY + 5,
|
|
393
|
+
width: cbw,
|
|
394
|
+
height: 18,
|
|
395
|
+
fill: palette_1.INDUSTRY.accentLight,
|
|
396
|
+
stroke: palette_1.INDUSTRY.divider,
|
|
397
|
+
'stroke-width': 1,
|
|
398
|
+
});
|
|
461
399
|
svg
|
|
462
400
|
.child('text', {
|
|
463
|
-
x: cx +
|
|
464
|
-
y: aY +
|
|
465
|
-
'font-family':
|
|
466
|
-
'font-size':
|
|
467
|
-
'font-weight':
|
|
468
|
-
fill:
|
|
401
|
+
x: cx + 14 + cbw / 2,
|
|
402
|
+
y: aY + 18,
|
|
403
|
+
'font-family': palette_1.FONTS.mono,
|
|
404
|
+
'font-size': 11,
|
|
405
|
+
'font-weight': 600,
|
|
406
|
+
fill: accent.text,
|
|
469
407
|
'text-anchor': 'middle',
|
|
470
408
|
})
|
|
471
|
-
.text(meta.
|
|
409
|
+
.text(meta.mark);
|
|
472
410
|
svg
|
|
473
411
|
.child('text', {
|
|
474
|
-
x: cx +
|
|
412
|
+
x: cx + 60,
|
|
475
413
|
y: aTextY,
|
|
476
|
-
'font-family':
|
|
414
|
+
'font-family': palette_1.FONTS.body,
|
|
477
415
|
'font-size': 12,
|
|
478
|
-
'font-weight':
|
|
479
|
-
fill:
|
|
416
|
+
'font-weight': 500,
|
|
417
|
+
fill: t.textPrimary,
|
|
480
418
|
})
|
|
481
419
|
.text(meta.label);
|
|
482
|
-
svg
|
|
483
|
-
.child('text', { x: cx + 148, y: aTextY, 'font-size': 14, fill: '#94A3B8' })
|
|
484
|
-
.text('→');
|
|
485
420
|
svg
|
|
486
421
|
.child('text', {
|
|
487
|
-
x: cx +
|
|
422
|
+
x: cx + 162,
|
|
488
423
|
y: aTextY,
|
|
489
|
-
'font-family':
|
|
424
|
+
'font-family': palette_1.FONTS.mono,
|
|
490
425
|
'font-size': 12,
|
|
491
|
-
'font-weight':
|
|
492
|
-
fill:
|
|
426
|
+
'font-weight': 600,
|
|
427
|
+
fill: accent.text,
|
|
493
428
|
})
|
|
494
429
|
.text(assoc.target);
|
|
495
430
|
if (assoc.foreignKey) {
|
|
496
431
|
svg
|
|
497
432
|
.child('text', {
|
|
498
|
-
x: cx +
|
|
433
|
+
x: cx + 300,
|
|
499
434
|
y: aTextY,
|
|
500
|
-
'font-family':
|
|
435
|
+
'font-family': palette_1.FONTS.mono,
|
|
501
436
|
'font-size': 10,
|
|
502
|
-
fill:
|
|
437
|
+
fill: t.textSecondary,
|
|
503
438
|
})
|
|
504
439
|
.text(`(${assoc.foreignKey})`);
|
|
505
440
|
}
|
|
506
441
|
if (assoc.through) {
|
|
507
442
|
svg
|
|
508
443
|
.child('text', {
|
|
509
|
-
x: cx +
|
|
444
|
+
x: cx + 400,
|
|
510
445
|
y: aTextY,
|
|
511
|
-
'font-family':
|
|
446
|
+
'font-family': palette_1.FONTS.mono,
|
|
512
447
|
'font-size': 10,
|
|
513
|
-
fill:
|
|
448
|
+
fill: a2.text,
|
|
514
449
|
})
|
|
515
450
|
.text(`via: ${assoc.through}`);
|
|
516
451
|
}
|
|
517
452
|
if (assoc.as) {
|
|
518
453
|
svg
|
|
519
454
|
.child('text', {
|
|
520
|
-
x: cx + W -
|
|
455
|
+
x: cx + W - 14,
|
|
521
456
|
y: aTextY,
|
|
522
|
-
'font-family':
|
|
457
|
+
'font-family': palette_1.FONTS.mono,
|
|
523
458
|
'font-size': 10,
|
|
524
|
-
fill:
|
|
459
|
+
fill: t.textSecondary,
|
|
525
460
|
'text-anchor': 'end',
|
|
526
461
|
})
|
|
527
462
|
.text(`as: ${assoc.as}`);
|
|
@@ -531,60 +466,64 @@ class ModelDiagram {
|
|
|
531
466
|
y1: aY + ASSOC_ROW,
|
|
532
467
|
x2: cx + W,
|
|
533
468
|
y2: aY + ASSOC_ROW,
|
|
534
|
-
stroke:
|
|
535
|
-
'stroke-width':
|
|
469
|
+
stroke: t.border,
|
|
470
|
+
'stroke-width': 1,
|
|
536
471
|
});
|
|
537
472
|
});
|
|
538
473
|
}
|
|
539
|
-
// ── Footer
|
|
474
|
+
// ── Footer (hairline strip) ─────────────────────────────────────────
|
|
540
475
|
const footerY = assocBaseY + assocBlockH;
|
|
541
476
|
svg.child('rect', { x: cx, y: footerY, width: W, height: FOOTER, fill: t.footerBg });
|
|
542
|
-
svg.child('
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
477
|
+
svg.child('line', {
|
|
478
|
+
x1: cx,
|
|
479
|
+
y1: footerY,
|
|
480
|
+
x2: cx + W,
|
|
481
|
+
y2: footerY,
|
|
482
|
+
stroke: t.border,
|
|
483
|
+
'stroke-width': 1,
|
|
549
484
|
});
|
|
550
485
|
const footTable = svg.child('text', {
|
|
551
|
-
x: cx +
|
|
552
|
-
y: footerY +
|
|
553
|
-
'font-family':
|
|
486
|
+
x: cx + 18,
|
|
487
|
+
y: footerY + 25,
|
|
488
|
+
'font-family': palette_1.FONTS.heading,
|
|
554
489
|
'font-size': 11,
|
|
555
|
-
|
|
490
|
+
'font-weight': 600,
|
|
491
|
+
'letter-spacing': 0.6,
|
|
492
|
+
fill: t.textSecondary,
|
|
556
493
|
});
|
|
557
|
-
footTable.text('TABLE
|
|
558
|
-
footTable
|
|
494
|
+
footTable.text('TABLE ');
|
|
495
|
+
footTable
|
|
496
|
+
.child('tspan', { 'font-family': palette_1.FONTS.mono, 'font-weight': 400, fill: accent.text })
|
|
497
|
+
.text(tableName);
|
|
559
498
|
if (timestamps) {
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
499
|
+
svg
|
|
500
|
+
.child('text', {
|
|
501
|
+
x: cx + 250,
|
|
502
|
+
y: footerY + 25,
|
|
503
|
+
'font-family': palette_1.FONTS.body,
|
|
564
504
|
'font-size': 11,
|
|
565
|
-
fill:
|
|
566
|
-
})
|
|
567
|
-
|
|
568
|
-
ts.text(' timestamps');
|
|
505
|
+
fill: t.textSecondary,
|
|
506
|
+
})
|
|
507
|
+
.text('timestamps');
|
|
569
508
|
}
|
|
570
509
|
if (paranoid) {
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
510
|
+
svg
|
|
511
|
+
.child('text', {
|
|
512
|
+
x: cx + 350,
|
|
513
|
+
y: footerY + 25,
|
|
514
|
+
'font-family': palette_1.FONTS.body,
|
|
575
515
|
'font-size': 11,
|
|
576
|
-
fill:
|
|
577
|
-
})
|
|
578
|
-
|
|
579
|
-
pn.text(' paranoid');
|
|
516
|
+
fill: t.textSecondary,
|
|
517
|
+
})
|
|
518
|
+
.text('paranoid');
|
|
580
519
|
}
|
|
581
520
|
svg
|
|
582
521
|
.child('text', {
|
|
583
|
-
x: cx + W -
|
|
584
|
-
y: footerY +
|
|
585
|
-
'font-family':
|
|
522
|
+
x: cx + W - 14,
|
|
523
|
+
y: footerY + 25,
|
|
524
|
+
'font-family': palette_1.FONTS.body,
|
|
586
525
|
'font-size': 11,
|
|
587
|
-
fill:
|
|
526
|
+
fill: t.textSecondary,
|
|
588
527
|
'text-anchor': 'end',
|
|
589
528
|
})
|
|
590
529
|
.text(`${fieldEntries.length} column${fieldEntries.length !== 1 ? 's' : ''}`);
|
|
@@ -606,11 +545,10 @@ class ModelDiagram {
|
|
|
606
545
|
exports.ModelDiagram = ModelDiagram;
|
|
607
546
|
// Layout constants (px)
|
|
608
547
|
ModelDiagram.W = 600;
|
|
609
|
-
ModelDiagram.HDR =
|
|
610
|
-
ModelDiagram.COL_HDR =
|
|
611
|
-
ModelDiagram.ROW_H =
|
|
612
|
-
ModelDiagram.ASSOC_HDR =
|
|
613
|
-
ModelDiagram.ASSOC_ROW =
|
|
614
|
-
ModelDiagram.FOOTER =
|
|
615
|
-
ModelDiagram.PAD =
|
|
616
|
-
ModelDiagram.R = 14; // border-radius
|
|
548
|
+
ModelDiagram.HDR = 56;
|
|
549
|
+
ModelDiagram.COL_HDR = 30;
|
|
550
|
+
ModelDiagram.ROW_H = 38;
|
|
551
|
+
ModelDiagram.ASSOC_HDR = 34;
|
|
552
|
+
ModelDiagram.ASSOC_ROW = 28;
|
|
553
|
+
ModelDiagram.FOOTER = 40;
|
|
554
|
+
ModelDiagram.PAD = 28;
|