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
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChenDiagram — renders a classic Chen-notation Entity-Relationship diagram
|
|
3
|
+
* as SVG, built against a real DOM document (via svg-dom) rather than
|
|
4
|
+
* concatenated markup.
|
|
5
|
+
*
|
|
6
|
+
* Chen notation (distinct from crow's-foot):
|
|
7
|
+
* - Entities → rectangles (weak entities get a double border)
|
|
8
|
+
* - Relationships → diamonds placed between the two entities they connect,
|
|
9
|
+
* with cardinality labels (1, N, M) on the connecting lines
|
|
10
|
+
* - Attributes → ellipses connected to their entity by a line; key
|
|
11
|
+
* attributes have underlined text, multivalued get a double
|
|
12
|
+
* ellipse, derived get a dashed ellipse.
|
|
13
|
+
*
|
|
14
|
+
* Options honor `theme` (light|dark canvas/text) and `color` (accent for
|
|
15
|
+
* entities/diamonds) via resolveTheme/resolveAccent, so both flags change the
|
|
16
|
+
* generated output. The viewBox is auto-sized to the laid-out geometry.
|
|
17
|
+
*
|
|
18
|
+
* Usage:
|
|
19
|
+
* const diag = new ChenDiagram({ entities: [...], relationships: [...] });
|
|
20
|
+
* diag.save('./diagrams/er.svg'); // or: diag.generate()
|
|
21
|
+
*/
|
|
22
|
+
export interface ChenAttribute {
|
|
23
|
+
name: string;
|
|
24
|
+
key?: boolean;
|
|
25
|
+
multivalued?: boolean;
|
|
26
|
+
derived?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface ChenEntity {
|
|
29
|
+
name: string;
|
|
30
|
+
weak?: boolean;
|
|
31
|
+
attributes?: ChenAttribute[];
|
|
32
|
+
}
|
|
33
|
+
export interface ChenRelationship {
|
|
34
|
+
name: string;
|
|
35
|
+
from: string;
|
|
36
|
+
to: string;
|
|
37
|
+
fromCardinality?: string;
|
|
38
|
+
toCardinality?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface ChenDiagramOptions {
|
|
41
|
+
entities: ChenEntity[];
|
|
42
|
+
relationships?: ChenRelationship[];
|
|
43
|
+
title?: string;
|
|
44
|
+
theme?: 'light' | 'dark';
|
|
45
|
+
color?: string;
|
|
46
|
+
}
|
|
47
|
+
export declare class ChenDiagram {
|
|
48
|
+
private opts;
|
|
49
|
+
private static readonly PAD;
|
|
50
|
+
private static readonly TITLE_H;
|
|
51
|
+
private static readonly ENT_W;
|
|
52
|
+
private static readonly ENT_H;
|
|
53
|
+
private static readonly DIA_W;
|
|
54
|
+
private static readonly DIA_H;
|
|
55
|
+
private static readonly ATTR_RX;
|
|
56
|
+
private static readonly ATTR_RY;
|
|
57
|
+
private static readonly ATTR_DIST;
|
|
58
|
+
private static readonly COL_GAP;
|
|
59
|
+
private static readonly ROW_GAP;
|
|
60
|
+
constructor(options: ChenDiagramOptions);
|
|
61
|
+
private attributePositions;
|
|
62
|
+
private drawAttribute;
|
|
63
|
+
private drawEntity;
|
|
64
|
+
private drawRelationship;
|
|
65
|
+
generate(): string;
|
|
66
|
+
/**
|
|
67
|
+
* Write the SVG to a file. Creates parent directories if needed.
|
|
68
|
+
*/
|
|
69
|
+
save(outputPath: string): string;
|
|
70
|
+
}
|
|
@@ -120,7 +120,7 @@ class ChenDiagram {
|
|
|
120
120
|
ry,
|
|
121
121
|
fill: t.cardBg,
|
|
122
122
|
stroke: accent.mid,
|
|
123
|
-
'stroke-width': 1.
|
|
123
|
+
'stroke-width': 1.6,
|
|
124
124
|
'stroke-dasharray': strokeDash,
|
|
125
125
|
});
|
|
126
126
|
const label = attr.name.length > 14 ? attr.name.slice(0, 13) + '…' : attr.name;
|
|
@@ -128,9 +128,9 @@ class ChenDiagram {
|
|
|
128
128
|
.child('text', {
|
|
129
129
|
x: at.x,
|
|
130
130
|
y: at.y + 4,
|
|
131
|
-
'font-family':
|
|
131
|
+
'font-family': palette_1.FONTS.body,
|
|
132
132
|
'font-size': 12,
|
|
133
|
-
'font-weight': attr.key ?
|
|
133
|
+
'font-weight': attr.key ? 600 : 400,
|
|
134
134
|
fill: t.textPrimary,
|
|
135
135
|
'text-anchor': 'middle',
|
|
136
136
|
// key attributes are underlined in Chen notation
|
|
@@ -150,10 +150,10 @@ class ChenDiagram {
|
|
|
150
150
|
y: y - 5,
|
|
151
151
|
width: W + 10,
|
|
152
152
|
height: H + 10,
|
|
153
|
-
rx:
|
|
153
|
+
rx: 0,
|
|
154
154
|
fill: 'none',
|
|
155
|
-
stroke: accent.
|
|
156
|
-
'stroke-width': 1.
|
|
155
|
+
stroke: accent.mid,
|
|
156
|
+
'stroke-width': 1.4,
|
|
157
157
|
});
|
|
158
158
|
}
|
|
159
159
|
svg.child('rect', {
|
|
@@ -161,18 +161,18 @@ class ChenDiagram {
|
|
|
161
161
|
y,
|
|
162
162
|
width: W,
|
|
163
163
|
height: H,
|
|
164
|
-
rx:
|
|
164
|
+
rx: 0,
|
|
165
165
|
fill: accent.light,
|
|
166
|
-
stroke: accent.
|
|
167
|
-
'stroke-width':
|
|
166
|
+
stroke: accent.mid,
|
|
167
|
+
'stroke-width': 1.6,
|
|
168
168
|
});
|
|
169
169
|
svg
|
|
170
170
|
.child('text', {
|
|
171
171
|
x: p.center.x,
|
|
172
172
|
y: p.center.y + 5,
|
|
173
|
-
'font-family':
|
|
174
|
-
'font-size':
|
|
175
|
-
'font-weight':
|
|
173
|
+
'font-family': palette_1.FONTS.heading,
|
|
174
|
+
'font-size': 17,
|
|
175
|
+
'font-weight': 600,
|
|
176
176
|
fill: accent.text,
|
|
177
177
|
'text-anchor': 'middle',
|
|
178
178
|
})
|
|
@@ -188,18 +188,18 @@ class ChenDiagram {
|
|
|
188
188
|
y1: a.y,
|
|
189
189
|
x2: mid.x,
|
|
190
190
|
y2: mid.y,
|
|
191
|
-
stroke:
|
|
192
|
-
'stroke-width': 1.
|
|
191
|
+
stroke: palette_1.INDUSTRY.neutral[600],
|
|
192
|
+
'stroke-width': 1.4,
|
|
193
193
|
});
|
|
194
194
|
svg.child('line', {
|
|
195
195
|
x1: mid.x,
|
|
196
196
|
y1: mid.y,
|
|
197
197
|
x2: b.x,
|
|
198
198
|
y2: b.y,
|
|
199
|
-
stroke:
|
|
200
|
-
'stroke-width': 1.
|
|
199
|
+
stroke: palette_1.INDUSTRY.neutral[600],
|
|
200
|
+
'stroke-width': 1.4,
|
|
201
201
|
});
|
|
202
|
-
// diamond (polygon) centered on mid
|
|
202
|
+
// diamond (polygon) centered on mid — solid accent fill, white label
|
|
203
203
|
const pts = [
|
|
204
204
|
`${mid.x},${mid.y - DH / 2}`,
|
|
205
205
|
`${mid.x + DW / 2},${mid.y}`,
|
|
@@ -208,18 +208,18 @@ class ChenDiagram {
|
|
|
208
208
|
].join(' ');
|
|
209
209
|
svg.child('polygon', {
|
|
210
210
|
points: pts,
|
|
211
|
-
fill: accent.
|
|
212
|
-
stroke: accent.
|
|
213
|
-
'stroke-width':
|
|
211
|
+
fill: accent.mid,
|
|
212
|
+
stroke: accent.text,
|
|
213
|
+
'stroke-width': 1.4,
|
|
214
214
|
});
|
|
215
215
|
svg
|
|
216
216
|
.child('text', {
|
|
217
217
|
x: mid.x,
|
|
218
218
|
y: mid.y + 5,
|
|
219
|
-
'font-family':
|
|
220
|
-
'font-size':
|
|
221
|
-
'font-weight':
|
|
222
|
-
fill:
|
|
219
|
+
'font-family': palette_1.FONTS.heading,
|
|
220
|
+
'font-size': 14,
|
|
221
|
+
'font-weight': 600,
|
|
222
|
+
fill: '#FFFFFF',
|
|
223
223
|
'text-anchor': 'middle',
|
|
224
224
|
})
|
|
225
225
|
.text(rel.name);
|
|
@@ -233,9 +233,9 @@ class ChenDiagram {
|
|
|
233
233
|
.child('text', {
|
|
234
234
|
x: lx,
|
|
235
235
|
y: ly,
|
|
236
|
-
'font-family':
|
|
237
|
-
'font-size':
|
|
238
|
-
'font-weight':
|
|
236
|
+
'font-family': palette_1.FONTS.mono,
|
|
237
|
+
'font-size': 13,
|
|
238
|
+
'font-weight': 600,
|
|
239
239
|
fill: t.textPrimary,
|
|
240
240
|
'text-anchor': 'middle',
|
|
241
241
|
})
|
|
@@ -296,7 +296,9 @@ class ChenDiagram {
|
|
|
296
296
|
const svgH = Math.ceil(maxY + PAD);
|
|
297
297
|
const doc = new svg_dom_1.SvgDocument(svgW, svgH);
|
|
298
298
|
const svg = doc.root;
|
|
299
|
-
//
|
|
299
|
+
// Web fonts for browser renderers.
|
|
300
|
+
doc.style(palette_1.FONT_IMPORT);
|
|
301
|
+
// ── Ground ──────────────────────────────────────────────────────────
|
|
300
302
|
svg.child('rect', { width: svgW, height: svgH, fill: t.canvasBg });
|
|
301
303
|
// ── Title ───────────────────────────────────────────────────────────
|
|
302
304
|
if (title) {
|
|
@@ -304,9 +306,9 @@ class ChenDiagram {
|
|
|
304
306
|
.child('text', {
|
|
305
307
|
x: PAD,
|
|
306
308
|
y: PAD,
|
|
307
|
-
'font-family':
|
|
308
|
-
'font-size':
|
|
309
|
-
'font-weight':
|
|
309
|
+
'font-family': palette_1.FONTS.heading,
|
|
310
|
+
'font-size': 24,
|
|
311
|
+
'font-weight': 600,
|
|
310
312
|
fill: t.textPrimary,
|
|
311
313
|
})
|
|
312
314
|
.text(title);
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClassDiagram — renders one or more classes as UML class boxes.
|
|
3
|
+
*
|
|
4
|
+
* Each class box has three compartments:
|
|
5
|
+
* - a title bar (class name + optional «stereotype»),
|
|
6
|
+
* - an attributes compartment (`+ name: type`, with +/-/# visibility markers),
|
|
7
|
+
* - a methods compartment (`+ name(args): returnType`).
|
|
8
|
+
*
|
|
9
|
+
* Multiple classes are laid out in a responsive grid (wrapping after N
|
|
10
|
+
* columns). When a class declares `extends`, a UML inheritance connector
|
|
11
|
+
* (hollow triangle arrowhead) is drawn to its parent; when it declares plain
|
|
12
|
+
* associations, a simple line connector is drawn instead.
|
|
13
|
+
*
|
|
14
|
+
* `--theme light|dark` drives canvas/box/text colors and `--color <name|hex>`
|
|
15
|
+
* drives the accent used for title bars — both genuinely change fill/stroke
|
|
16
|
+
* values in the generated SVG.
|
|
17
|
+
*
|
|
18
|
+
* Usage:
|
|
19
|
+
* const diag = new ClassDiagram({ classes: [ … ] });
|
|
20
|
+
* diag.save('./diagrams/classes.svg');
|
|
21
|
+
* // or:
|
|
22
|
+
* const svgString = diag.generate();
|
|
23
|
+
*/
|
|
24
|
+
export interface UmlAttribute {
|
|
25
|
+
name: string;
|
|
26
|
+
type?: string;
|
|
27
|
+
visibility?: 'public' | 'private' | 'protected';
|
|
28
|
+
static?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface UmlMethod {
|
|
31
|
+
name: string;
|
|
32
|
+
args?: string;
|
|
33
|
+
returns?: string;
|
|
34
|
+
visibility?: 'public' | 'private' | 'protected';
|
|
35
|
+
}
|
|
36
|
+
export interface UmlClass {
|
|
37
|
+
name: string;
|
|
38
|
+
stereotype?: string;
|
|
39
|
+
attributes?: UmlAttribute[];
|
|
40
|
+
methods?: UmlMethod[];
|
|
41
|
+
/** Name of a parent class in this diagram (drawn as inheritance). */
|
|
42
|
+
extends?: string;
|
|
43
|
+
/** Names of associated classes in this diagram (drawn as plain lines). */
|
|
44
|
+
associations?: string[];
|
|
45
|
+
}
|
|
46
|
+
export interface ClassDiagramOptions {
|
|
47
|
+
classes: UmlClass[];
|
|
48
|
+
title?: string;
|
|
49
|
+
theme?: 'light' | 'dark';
|
|
50
|
+
/** Named palette (e.g. "emerald") or a hex color string. */
|
|
51
|
+
color?: string;
|
|
52
|
+
/** Number of columns before wrapping. Defaults to an auto value. */
|
|
53
|
+
columns?: number;
|
|
54
|
+
}
|
|
55
|
+
export declare class ClassDiagram {
|
|
56
|
+
private opts;
|
|
57
|
+
private static readonly BOX_W;
|
|
58
|
+
private static readonly TITLE_H;
|
|
59
|
+
private static readonly STEREO_EXTRA;
|
|
60
|
+
private static readonly ROW_H;
|
|
61
|
+
private static readonly COMPARTMENT_PAD;
|
|
62
|
+
private static readonly GAP_X;
|
|
63
|
+
private static readonly GAP_Y;
|
|
64
|
+
private static readonly PAD;
|
|
65
|
+
private static readonly TITLE_BAR_H;
|
|
66
|
+
constructor(options: ClassDiagramOptions);
|
|
67
|
+
private boxHeight;
|
|
68
|
+
private layout;
|
|
69
|
+
generate(): string;
|
|
70
|
+
private center;
|
|
71
|
+
private drawAssociation;
|
|
72
|
+
private drawInheritance;
|
|
73
|
+
private drawClassBox;
|
|
74
|
+
/**
|
|
75
|
+
* Write the SVG to a file. Creates parent directories if needed.
|
|
76
|
+
*/
|
|
77
|
+
save(outputPath: string): string;
|
|
78
|
+
}
|
|
@@ -61,6 +61,15 @@ const fs = __importStar(require("fs"));
|
|
|
61
61
|
const path = __importStar(require("path"));
|
|
62
62
|
const palette_1 = require("./palette");
|
|
63
63
|
const svg_dom_1 = require("./svg-dom");
|
|
64
|
+
// ─── Industry design system ────────────────────────────────────────────────
|
|
65
|
+
// Barlow / JetBrains Mono typography, hairline borders and square "blueprint"
|
|
66
|
+
// corners are fixed by the Industry spec; accent + surface colours still route
|
|
67
|
+
// through resolveAccent / resolveTheme so --color / --theme keep working.
|
|
68
|
+
const IND_FONT_HEAD = '"Barlow Condensed", system-ui, sans-serif';
|
|
69
|
+
const IND_FONT_BODY = '"Barlow", system-ui, sans-serif';
|
|
70
|
+
const IND_FONT_MONO = 'ui-monospace, "JetBrains Mono", "SF Mono", Menlo, monospace';
|
|
71
|
+
const IND_HAIRLINE = 'rgba(29,31,32,0.16)';
|
|
72
|
+
const IND_FONT_IMPORT = "@import url('https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;700&family=Barlow+Condensed:wght@400;600&family=JetBrains+Mono&display=swap');";
|
|
64
73
|
const VIS_MARK = {
|
|
65
74
|
public: '+',
|
|
66
75
|
private: '-',
|
|
@@ -150,27 +159,19 @@ class ClassDiagram {
|
|
|
150
159
|
const svgH = maxBottom + ClassDiagram.PAD;
|
|
151
160
|
const doc = new svg_dom_1.SvgDocument(svgW, svgH);
|
|
152
161
|
const svg = doc.root;
|
|
153
|
-
// Background.
|
|
162
|
+
// Background + embedded Industry web-fonts.
|
|
154
163
|
svg.child('rect', { width: svgW, height: svgH, fill: t.canvasBg });
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
[0, accent.from],
|
|
158
|
-
[55, accent.mid],
|
|
159
|
-
[100, accent.to],
|
|
160
|
-
]);
|
|
161
|
-
const filter = doc
|
|
162
|
-
.defs()
|
|
163
|
-
.child('filter', { id: 'classShadow', x: '-8%', y: '-8%', width: '116%', height: '120%' });
|
|
164
|
-
filter.child('feDropShadow', { dx: 0, dy: 4, stdDeviation: 7, 'flood-color': '#00000022' });
|
|
164
|
+
svg.child('style').text(IND_FONT_IMPORT);
|
|
165
|
+
// Blueprint style: solid accent header bars + hairline frames, no gradients.
|
|
165
166
|
// Optional diagram title.
|
|
166
167
|
if (title) {
|
|
167
168
|
svg
|
|
168
169
|
.child('text', {
|
|
169
170
|
x: ClassDiagram.PAD,
|
|
170
171
|
y: ClassDiagram.PAD + 8,
|
|
171
|
-
'font-family':
|
|
172
|
+
'font-family': IND_FONT_HEAD,
|
|
172
173
|
'font-size': 20,
|
|
173
|
-
'font-weight':
|
|
174
|
+
'font-weight': 600,
|
|
174
175
|
fill: t.textPrimary,
|
|
175
176
|
})
|
|
176
177
|
.text(title);
|
|
@@ -254,36 +255,31 @@ class ClassDiagram {
|
|
|
254
255
|
const { cls, x, y, w, h, titleH, attrH } = p;
|
|
255
256
|
const attrs = cls.attributes ?? [];
|
|
256
257
|
const methods = cls.methods ?? [];
|
|
257
|
-
// Outer box.
|
|
258
|
+
// Outer box (white interior, hairline border, square corners).
|
|
258
259
|
svg.child('rect', {
|
|
259
260
|
x,
|
|
260
261
|
y,
|
|
261
262
|
width: w,
|
|
262
263
|
height: h,
|
|
263
|
-
rx: 8,
|
|
264
264
|
fill: t.cardBg,
|
|
265
265
|
stroke: t.border,
|
|
266
|
-
'stroke-width': 1
|
|
267
|
-
filter: 'url(#classShadow)',
|
|
266
|
+
'stroke-width': 1,
|
|
268
267
|
});
|
|
269
|
-
// Title bar (accent
|
|
268
|
+
// Title bar (solid accent — blueprint label bar).
|
|
270
269
|
svg.child('rect', {
|
|
271
270
|
x,
|
|
272
271
|
y,
|
|
273
272
|
width: w,
|
|
274
273
|
height: titleH,
|
|
275
|
-
|
|
276
|
-
fill: 'url(#classHdr)',
|
|
274
|
+
fill: accent.mid,
|
|
277
275
|
});
|
|
278
|
-
// Square off the bottom of the rounded title bar.
|
|
279
|
-
svg.child('rect', { x, y: y + titleH - 8, width: w, height: 8, fill: 'url(#classHdr)' });
|
|
280
276
|
let titleTextY = y + 26;
|
|
281
277
|
if (cls.stereotype) {
|
|
282
278
|
svg
|
|
283
279
|
.child('text', {
|
|
284
280
|
x: x + w / 2,
|
|
285
281
|
y: y + 18,
|
|
286
|
-
'font-family':
|
|
282
|
+
'font-family': IND_FONT_BODY,
|
|
287
283
|
'font-size': 11,
|
|
288
284
|
'font-style': 'italic',
|
|
289
285
|
fill: 'rgba(255,255,255,0.85)',
|
|
@@ -296,9 +292,9 @@ class ClassDiagram {
|
|
|
296
292
|
.child('text', {
|
|
297
293
|
x: x + w / 2,
|
|
298
294
|
y: titleTextY,
|
|
299
|
-
'font-family':
|
|
295
|
+
'font-family': IND_FONT_HEAD,
|
|
300
296
|
'font-size': 15,
|
|
301
|
-
'font-weight':
|
|
297
|
+
'font-weight': 600,
|
|
302
298
|
fill: '#FFFFFF',
|
|
303
299
|
'text-anchor': 'middle',
|
|
304
300
|
})
|
|
@@ -322,7 +318,7 @@ class ClassDiagram {
|
|
|
322
318
|
.child('text', {
|
|
323
319
|
x: x + 12,
|
|
324
320
|
y: rowY,
|
|
325
|
-
'font-family':
|
|
321
|
+
'font-family': IND_FONT_MONO,
|
|
326
322
|
'font-size': 12,
|
|
327
323
|
'font-weight': 500,
|
|
328
324
|
'text-decoration': a.static ? 'underline' : undefined,
|
|
@@ -349,7 +345,7 @@ class ClassDiagram {
|
|
|
349
345
|
.child('text', {
|
|
350
346
|
x: x + 12,
|
|
351
347
|
y: rowY,
|
|
352
|
-
'font-family':
|
|
348
|
+
'font-family': IND_FONT_MONO,
|
|
353
349
|
'font-size': 12,
|
|
354
350
|
'font-weight': 500,
|
|
355
351
|
fill: t.textSecondary,
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DependencyDiagram — renders a directed dependency graph of models/tables.
|
|
3
|
+
*
|
|
4
|
+
* Nodes are models/tables; a directed edge `from → to` means "from depends on
|
|
5
|
+
* to" (e.g. table `from` holds a foreign key into table `to`). The generator:
|
|
6
|
+
*
|
|
7
|
+
* - Computes a layered / topological layout: each node's layer is the longest
|
|
8
|
+
* dependency path to a leaf. Nodes with no dependencies sit in layer 0;
|
|
9
|
+
* their dependents fan out into higher layers.
|
|
10
|
+
* - Detects cycles (back edges) with a DFS colouring pass and visually flags
|
|
11
|
+
* the cyclic edges in red. The layering pass carries its own visited guard
|
|
12
|
+
* so a cycle can never send it into an infinite loop.
|
|
13
|
+
* - Draws each node as a labelled rounded box sized to its label, with arrows
|
|
14
|
+
* between dependent boxes.
|
|
15
|
+
*
|
|
16
|
+
* Accent colour (`color`) drives the node fills / arrowheads; the theme
|
|
17
|
+
* (`light` | `dark`) drives the canvas + text colours. Both genuinely change
|
|
18
|
+
* real fill/stroke values in the emitted SVG. The viewBox auto-sizes to the
|
|
19
|
+
* computed layout.
|
|
20
|
+
*
|
|
21
|
+
* Usage:
|
|
22
|
+
* const d = new DependencyDiagram({ nodes, edges, title: 'Schema deps' });
|
|
23
|
+
* const svg = d.generate();
|
|
24
|
+
* d.save('./diagrams/deps.svg');
|
|
25
|
+
*/
|
|
26
|
+
export interface DepNode {
|
|
27
|
+
name: string;
|
|
28
|
+
group?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface DepEdge {
|
|
31
|
+
from: string;
|
|
32
|
+
to: string;
|
|
33
|
+
label?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface DependencyDiagramOptions {
|
|
36
|
+
nodes: DepNode[];
|
|
37
|
+
edges: DepEdge[];
|
|
38
|
+
title?: string;
|
|
39
|
+
theme?: 'light' | 'dark';
|
|
40
|
+
/** Named palette or hex accent colour */
|
|
41
|
+
color?: string;
|
|
42
|
+
direction?: 'horizontal' | 'vertical';
|
|
43
|
+
}
|
|
44
|
+
export declare class DependencyDiagram {
|
|
45
|
+
private opts;
|
|
46
|
+
private static readonly PAD;
|
|
47
|
+
private static readonly TITLE_H;
|
|
48
|
+
private static readonly NODE_H;
|
|
49
|
+
private static readonly CHAR_W;
|
|
50
|
+
private static readonly NODE_PAD_X;
|
|
51
|
+
private static readonly MIN_NODE_W;
|
|
52
|
+
private static readonly LAYER_GAP;
|
|
53
|
+
private static readonly NODE_GAP;
|
|
54
|
+
private static readonly R;
|
|
55
|
+
constructor(options: DependencyDiagramOptions);
|
|
56
|
+
/** Adjacency: node → the nodes it depends on (its outgoing edge targets). */
|
|
57
|
+
private buildAdjacency;
|
|
58
|
+
/**
|
|
59
|
+
* Assign each node a layer = longest dependency path length (0 for nodes with
|
|
60
|
+
* no dependencies). Uses memoisation plus an on-stack guard so cyclic edges
|
|
61
|
+
* are simply skipped and never cause infinite recursion.
|
|
62
|
+
*/
|
|
63
|
+
private computeLayers;
|
|
64
|
+
/**
|
|
65
|
+
* Detect cyclic edges via DFS colouring. Returns a set of "from→to" keys that
|
|
66
|
+
* are back edges (participate in a cycle).
|
|
67
|
+
*/
|
|
68
|
+
private detectCyclicEdges;
|
|
69
|
+
private nodeWidth;
|
|
70
|
+
/**
|
|
71
|
+
* Point on the boundary of a rectangle along the line from the rect centre
|
|
72
|
+
* toward an external point — used so arrowheads land on the box edge.
|
|
73
|
+
*/
|
|
74
|
+
private edgePoint;
|
|
75
|
+
generate(): string;
|
|
76
|
+
private place;
|
|
77
|
+
private defineArrow;
|
|
78
|
+
/**
|
|
79
|
+
* Write the SVG to a file, creating parent directories as needed.
|
|
80
|
+
*/
|
|
81
|
+
save(outputPath: string): string;
|
|
82
|
+
}
|
|
@@ -63,6 +63,15 @@ const fs = __importStar(require("fs"));
|
|
|
63
63
|
const path = __importStar(require("path"));
|
|
64
64
|
const palette_1 = require("./palette");
|
|
65
65
|
const svg_dom_1 = require("./svg-dom");
|
|
66
|
+
// ─── Industry design system ────────────────────────────────────────────────
|
|
67
|
+
// Barlow / JetBrains Mono typography, hairline borders and square "blueprint"
|
|
68
|
+
// corners are fixed by the Industry spec; accent + surface colours still route
|
|
69
|
+
// through resolveAccent / resolveTheme so --color / --theme keep working.
|
|
70
|
+
const IND_FONT_HEAD = '"Barlow Condensed", system-ui, sans-serif';
|
|
71
|
+
const IND_FONT_BODY = '"Barlow", system-ui, sans-serif';
|
|
72
|
+
const IND_FONT_MONO = 'ui-monospace, "JetBrains Mono", "SF Mono", Menlo, monospace';
|
|
73
|
+
const IND_HAIRLINE = 'rgba(29,31,32,0.16)';
|
|
74
|
+
const IND_FONT_IMPORT = "@import url('https://fonts.googleapis.com/css2?family=Barlow:wght@400;500;700&family=Barlow+Condensed:wght@400;600&family=JetBrains+Mono&display=swap');";
|
|
66
75
|
// ─── Main class ──────────────────────────────────────────────────────────────
|
|
67
76
|
class DependencyDiagram {
|
|
68
77
|
constructor(options) {
|
|
@@ -259,8 +268,9 @@ class DependencyDiagram {
|
|
|
259
268
|
// ── Build the document ──────────────────────────────────────────────
|
|
260
269
|
const doc = new svg_dom_1.SvgDocument(svgW, svgH);
|
|
261
270
|
const svg = doc.root;
|
|
262
|
-
// Background
|
|
271
|
+
// Background + embedded Industry web-fonts.
|
|
263
272
|
svg.child('rect', { width: svgW, height: svgH, fill: t.canvasBg });
|
|
273
|
+
svg.child('style').text(IND_FONT_IMPORT);
|
|
264
274
|
// Arrowhead markers (accent + cyclic red).
|
|
265
275
|
const CYCLE_COLOR = '#DC2626';
|
|
266
276
|
this.defineArrow(doc, 'depArrow', accent.mid);
|
|
@@ -270,9 +280,9 @@ class DependencyDiagram {
|
|
|
270
280
|
.child('text', {
|
|
271
281
|
x: PAD,
|
|
272
282
|
y: PAD + 6,
|
|
273
|
-
'font-family':
|
|
283
|
+
'font-family': IND_FONT_HEAD,
|
|
274
284
|
'font-size': 22,
|
|
275
|
-
'font-weight':
|
|
285
|
+
'font-weight': 600,
|
|
276
286
|
fill: t.textPrimary,
|
|
277
287
|
})
|
|
278
288
|
.text(title);
|
|
@@ -280,7 +290,7 @@ class DependencyDiagram {
|
|
|
280
290
|
.child('text', {
|
|
281
291
|
x: PAD,
|
|
282
292
|
y: PAD + 26,
|
|
283
|
-
'font-family':
|
|
293
|
+
'font-family': IND_FONT_BODY,
|
|
284
294
|
'font-size': 11,
|
|
285
295
|
fill: t.textSecondary,
|
|
286
296
|
})
|
|
@@ -331,7 +341,7 @@ class DependencyDiagram {
|
|
|
331
341
|
.child('text', {
|
|
332
342
|
x: (start.x + end.x) / 2,
|
|
333
343
|
y: (start.y + end.y) / 2 - 4,
|
|
334
|
-
'font-family':
|
|
344
|
+
'font-family': IND_FONT_MONO,
|
|
335
345
|
'font-size': 9,
|
|
336
346
|
fill: isCyclic ? CYCLE_COLOR : t.textSecondary,
|
|
337
347
|
'text-anchor': 'middle',
|
|
@@ -350,15 +360,14 @@ class DependencyDiagram {
|
|
|
350
360
|
y: p.y,
|
|
351
361
|
width: p.w,
|
|
352
362
|
height: p.h,
|
|
353
|
-
rx: R,
|
|
354
363
|
fill: p.fill,
|
|
355
364
|
stroke: p.stroke,
|
|
356
|
-
'stroke-width':
|
|
365
|
+
'stroke-width': 1,
|
|
357
366
|
});
|
|
358
367
|
g.child('text', {
|
|
359
368
|
x: p.x + p.w / 2,
|
|
360
369
|
y: p.y + p.h / 2 + 5,
|
|
361
|
-
'font-family':
|
|
370
|
+
'font-family': IND_FONT_MONO,
|
|
362
371
|
'font-size': 14,
|
|
363
372
|
'font-weight': 700,
|
|
364
373
|
fill: p.text,
|
|
@@ -368,7 +377,7 @@ class DependencyDiagram {
|
|
|
368
377
|
g.child('text', {
|
|
369
378
|
x: p.x + 8,
|
|
370
379
|
y: p.y + 13,
|
|
371
|
-
'font-family':
|
|
380
|
+
'font-family': IND_FONT_BODY,
|
|
372
381
|
'font-size': 9,
|
|
373
382
|
'font-weight': 700,
|
|
374
383
|
fill: p.text,
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ERDiagram — generates a fully-rendered Entity-Relationship diagram SVG for
|
|
3
|
+
* a collection of ORM models and their associations, styled to the "Industry"
|
|
4
|
+
* blueprint design system.
|
|
5
|
+
*
|
|
6
|
+
* Look:
|
|
7
|
+
* - #f2f2f3 ground with a faint hairline blueprint grid
|
|
8
|
+
* - Solid accent (#5980a6) banner, Barlow Condensed title
|
|
9
|
+
* - White entity cards on a grid: SQUARE corners, 1px hairline borders, a solid
|
|
10
|
+
* accent / accent-2 (two-tone) header bar — no vibrant gradients or shadows
|
|
11
|
+
* - Compact rows: name (mono) + type (mono, neutral) + PK/FK marks
|
|
12
|
+
* - Hairline crow's-foot relationship connectors with mono cardinality marks
|
|
13
|
+
* - Legend bottom-right, Barlow labels
|
|
14
|
+
* - Fully self-contained SVG (fonts via an embedded @import + system fallbacks)
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* const er = new ERDiagram({
|
|
18
|
+
* title: 'E-Commerce Schema',
|
|
19
|
+
* models: [userDef, productDef, orderDef],
|
|
20
|
+
* });
|
|
21
|
+
* er.save('./diagrams/schema.svg');
|
|
22
|
+
*/
|
|
23
|
+
import { ModelDiagramOptions } from './model-diagram';
|
|
24
|
+
export interface ERDiagramOptions {
|
|
25
|
+
/** Diagram title shown in the top banner */
|
|
26
|
+
title?: string;
|
|
27
|
+
/** All models to include in the diagram */
|
|
28
|
+
models: ModelDiagramOptions[];
|
|
29
|
+
/**
|
|
30
|
+
* Number of entity columns in the grid.
|
|
31
|
+
* @default 3
|
|
32
|
+
*/
|
|
33
|
+
columns?: number;
|
|
34
|
+
/** Horizontal gap between entity boxes (px) */
|
|
35
|
+
hGap?: number;
|
|
36
|
+
/** Vertical gap between entity boxes (px) */
|
|
37
|
+
vGap?: number;
|
|
38
|
+
/** Theme mode: light or dark */
|
|
39
|
+
theme?: 'light' | 'dark';
|
|
40
|
+
/** Named palette (e.g. "industry") or hex color for the accent */
|
|
41
|
+
color?: string;
|
|
42
|
+
}
|
|
43
|
+
export declare class ERDiagram {
|
|
44
|
+
private opts;
|
|
45
|
+
private static readonly BOX_W;
|
|
46
|
+
private static readonly BOX_HDR;
|
|
47
|
+
private static readonly BOX_ROW;
|
|
48
|
+
private static readonly BOX_FOOT;
|
|
49
|
+
private static readonly MIN_H;
|
|
50
|
+
private static readonly BANNER_H;
|
|
51
|
+
private static readonly LEGEND_W;
|
|
52
|
+
private static readonly LEGEND_PAD;
|
|
53
|
+
private static readonly MARGIN;
|
|
54
|
+
private accentMid;
|
|
55
|
+
private accentText;
|
|
56
|
+
private accentLight;
|
|
57
|
+
private accent2Mid;
|
|
58
|
+
private accent2Text;
|
|
59
|
+
private accent2Light;
|
|
60
|
+
constructor(options: ERDiagramOptions);
|
|
61
|
+
/** Two-tone entity styling — even entities accent, odd accent-2. */
|
|
62
|
+
private entityStyle;
|
|
63
|
+
private boxHeight;
|
|
64
|
+
private computeLayout;
|
|
65
|
+
private renderBox;
|
|
66
|
+
private renderRelationships;
|
|
67
|
+
private crowFoot;
|
|
68
|
+
private singleBar;
|
|
69
|
+
private renderBanner;
|
|
70
|
+
private renderLegend;
|
|
71
|
+
/**
|
|
72
|
+
* Embedded font @import so browsers resolve Barlow / JetBrains Mono. Wrapped
|
|
73
|
+
* in CDATA because the Google-Fonts URL contains raw `&` separators that
|
|
74
|
+
* would otherwise be invalid XML in this string-built document.
|
|
75
|
+
*/
|
|
76
|
+
private fontDefs;
|
|
77
|
+
generate(): string;
|
|
78
|
+
/**
|
|
79
|
+
* Write the SVG to a file. Creates parent directories if needed.
|
|
80
|
+
*/
|
|
81
|
+
save(outputPath: string): string;
|
|
82
|
+
}
|