ts-prorm-orm 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +194 -72
  3. package/dist/audit/history-query.d.ts +35 -0
  4. package/dist/audit/index.d.ts +16 -0
  5. package/dist/audit/logger.d.ts +126 -0
  6. package/dist/cache/cache-manager.d.ts +341 -0
  7. package/dist/cache/index.d.ts +8 -0
  8. package/dist/cache/redis-cluster-cache.d.ts +164 -0
  9. package/dist/cache/redis-cluster-cache.js +19 -36
  10. package/dist/cli/cloud.d.ts +55 -0
  11. package/dist/cli/cloud.js +318 -0
  12. package/dist/cli/commands/auth.d.ts +2 -0
  13. package/dist/cli/commands/auth.js +345 -0
  14. package/dist/cli/commands/billing.d.ts +2 -0
  15. package/dist/cli/commands/billing.js +135 -0
  16. package/dist/cli/commands/code.d.ts +2 -0
  17. package/dist/cli/commands/code.js +168 -0
  18. package/dist/cli/commands/config.d.ts +2 -0
  19. package/dist/cli/commands/config.js +154 -0
  20. package/dist/cli/commands/db.d.ts +2 -0
  21. package/dist/cli/commands/db.js +189 -0
  22. package/dist/cli/commands/index.d.ts +1 -0
  23. package/dist/cli/commands/index.js +22 -0
  24. package/dist/cli/commands/keys.d.ts +2 -0
  25. package/dist/cli/commands/keys.js +100 -0
  26. package/dist/cli/commands/misc.d.ts +2 -0
  27. package/dist/cli/commands/misc.js +282 -0
  28. package/dist/cli/commands/pull.d.ts +2 -0
  29. package/dist/cli/commands/pull.js +306 -0
  30. package/dist/cli/commands/runners.d.ts +2 -0
  31. package/dist/cli/commands/runners.js +218 -0
  32. package/dist/cli/commands/scaffold.d.ts +2 -0
  33. package/dist/cli/commands/scaffold.js +383 -0
  34. package/dist/cli/commands/secrets.d.ts +2 -0
  35. package/dist/cli/commands/secrets.js +162 -0
  36. package/dist/cli/commands/store.d.ts +2 -0
  37. package/dist/cli/commands/store.js +274 -0
  38. package/dist/cli/commands/system.d.ts +10 -0
  39. package/dist/cli/commands/system.js +169 -0
  40. package/dist/cli/commands/teams.d.ts +2 -0
  41. package/dist/cli/commands/teams.js +189 -0
  42. package/dist/cli/commands/user.d.ts +2 -0
  43. package/dist/cli/commands/user.js +171 -0
  44. package/dist/cli/framework.d.ts +103 -0
  45. package/dist/cli/framework.js +436 -0
  46. package/dist/cli/io.d.ts +26 -0
  47. package/dist/cli/io.js +181 -0
  48. package/dist/cli/keychain.d.ts +10 -0
  49. package/dist/cli/keychain.js +101 -0
  50. package/dist/cli/prompt.d.ts +20 -0
  51. package/dist/cli/prompt.js +111 -0
  52. package/dist/cli.d.ts +214 -0
  53. package/dist/cli.js +72 -5
  54. package/dist/compliance/audit-trail.d.ts +66 -0
  55. package/dist/compliance/backup-verification.d.ts +279 -0
  56. package/dist/compliance/breach-detector.d.ts +197 -0
  57. package/dist/compliance/consent-record.d.ts +107 -0
  58. package/dist/compliance/consent-versioning.d.ts +169 -0
  59. package/dist/compliance/cross-border-log.d.ts +254 -0
  60. package/dist/compliance/data-classifier.d.ts +127 -0
  61. package/dist/compliance/data-lineage.d.ts +268 -0
  62. package/dist/compliance/data-masker.d.ts +110 -0
  63. package/dist/compliance/data-portability.d.ts +98 -0
  64. package/dist/compliance/data-retention.d.ts +108 -0
  65. package/dist/compliance/dsar-workflow.d.ts +175 -0
  66. package/dist/compliance/field-encryption.d.ts +84 -0
  67. package/dist/compliance/immutable-record.d.ts +84 -0
  68. package/dist/compliance/index.d.ts +93 -0
  69. package/dist/compliance/privacy-impact-assessment.d.ts +196 -0
  70. package/dist/compliance/pseudonymization.d.ts +96 -0
  71. package/dist/compliance/query-firewall.d.ts +661 -0
  72. package/dist/compliance/rate-limiter.d.ts +203 -0
  73. package/dist/compliance/right-to-erasure.d.ts +96 -0
  74. package/dist/compliance/row-level-security.d.ts +152 -0
  75. package/dist/compliance/security-decorator.d.ts +388 -0
  76. package/dist/compliance/security-monitor.d.ts +170 -0
  77. package/dist/compliance/sensitive-data-discovery.d.ts +151 -0
  78. package/dist/compliance/session-isolation.d.ts +286 -0
  79. package/dist/compliance/tls-enforcer.d.ts +51 -0
  80. package/dist/compliance/worm-storage.d.ts +225 -0
  81. package/dist/connection-manager.d.ts +130 -0
  82. package/dist/connection-pool.d.ts +311 -0
  83. package/dist/decorators/audit.d.ts +49 -0
  84. package/dist/decorators/check.d.ts +218 -0
  85. package/dist/decorators/collate.d.ts +346 -0
  86. package/dist/decorators/comment.d.ts +51 -0
  87. package/dist/decorators/database-settings.d.ts +193 -0
  88. package/dist/decorators/default.d.ts +148 -0
  89. package/dist/decorators/encryption.d.ts +175 -0
  90. package/dist/decorators/engine.d.ts +97 -0
  91. package/dist/decorators/fk-constraints.d.ts +387 -0
  92. package/dist/decorators/foreign-table.d.ts +57 -0
  93. package/dist/decorators/generated.d.ts +232 -0
  94. package/dist/decorators/hstore.d.ts +96 -0
  95. package/dist/decorators/index.d.ts +57 -0
  96. package/dist/decorators/index.js +14 -30
  97. package/dist/decorators/json-column.d.ts +47 -0
  98. package/dist/decorators/jsonb.d.ts +83 -0
  99. package/dist/decorators/orm-decorators.d.ts +274 -0
  100. package/dist/decorators/permissions.d.ts +192 -0
  101. package/dist/decorators/procedure.d.ts +168 -0
  102. package/dist/decorators/procedure.js +31 -7
  103. package/dist/decorators/query-options.d.ts +527 -0
  104. package/dist/decorators/range.d.ts +122 -0
  105. package/dist/decorators/set-column.d.ts +43 -0
  106. package/dist/decorators/spatial.d.ts +60 -0
  107. package/dist/decorators/storage.d.ts +561 -0
  108. package/dist/decorators/timezone.d.ts +319 -0
  109. package/dist/decorators/trigger.d.ts +50 -0
  110. package/dist/decorators/uuid.d.ts +102 -0
  111. package/dist/decorators/view.d.ts +213 -0
  112. package/dist/diagrams/chen-diagram.d.ts +70 -0
  113. package/dist/diagrams/chen-diagram.js +33 -31
  114. package/dist/diagrams/class-diagram.d.ts +78 -0
  115. package/dist/diagrams/class-diagram.js +23 -27
  116. package/dist/diagrams/dependency-diagram.d.ts +82 -0
  117. package/dist/diagrams/dependency-diagram.js +18 -9
  118. package/dist/diagrams/er-diagram.d.ts +82 -0
  119. package/dist/diagrams/er-diagram.js +174 -231
  120. package/dist/diagrams/flow-diagram.d.ts +70 -0
  121. package/dist/diagrams/flow-diagram.js +23 -18
  122. package/dist/diagrams/gantt-diagram.d.ts +67 -0
  123. package/dist/diagrams/gantt-diagram.js +20 -18
  124. package/dist/diagrams/index-diagram.d.ts +61 -0
  125. package/dist/diagrams/index-diagram.js +36 -31
  126. package/dist/diagrams/index.d.ts +155 -0
  127. package/dist/diagrams/index.js +7 -1
  128. package/dist/diagrams/migration-diagram.d.ts +67 -0
  129. package/dist/diagrams/migration-diagram.js +45 -57
  130. package/dist/diagrams/model-diagram.d.ts +85 -0
  131. package/dist/diagrams/model-diagram.js +225 -287
  132. package/dist/diagrams/package-diagram.d.ts +69 -0
  133. package/dist/diagrams/package-diagram.js +30 -32
  134. package/dist/diagrams/palette.d.ts +138 -0
  135. package/dist/diagrams/palette.js +134 -25
  136. package/dist/diagrams/relational-diagram.d.ts +82 -0
  137. package/dist/diagrams/relational-diagram.js +51 -59
  138. package/dist/diagrams/schemadoc-diagram.d.ts +57 -0
  139. package/dist/diagrams/schemadoc-diagram.js +36 -28
  140. package/dist/diagrams/sequence-diagram.d.ts +61 -0
  141. package/dist/diagrams/sequence-diagram.js +20 -11
  142. package/dist/diagrams/state-diagram.d.ts +85 -0
  143. package/dist/diagrams/state-diagram.js +21 -17
  144. package/dist/diagrams/svg-dom.d.ts +62 -0
  145. package/dist/diagrams/svg-dom.js +11 -0
  146. package/dist/diagrams/tree-diagram.d.ts +47 -0
  147. package/dist/diagrams/tree-diagram.js +19 -10
  148. package/dist/dialects/clickhouse/index.d.ts +660 -0
  149. package/dist/dialects/clickhouse/index.js +107 -2
  150. package/dist/dialects/cockroachdb/index.d.ts +1708 -0
  151. package/dist/dialects/cockroachdb/index.js +139 -10
  152. package/dist/dialects/cratedb/index.d.ts +262 -0
  153. package/dist/dialects/cratedb/index.js +148 -0
  154. package/dist/dialects/databricks/index.d.ts +397 -0
  155. package/dist/dialects/databricks/index.js +233 -11
  156. package/dist/dialects/db2/index.d.ts +729 -0
  157. package/dist/dialects/db2/index.js +152 -2
  158. package/dist/dialects/dialect.d.ts +1653 -0
  159. package/dist/dialects/duckdb/index.d.ts +440 -0
  160. package/dist/dialects/duckdb/index.js +21 -37
  161. package/dist/dialects/exasol/index.d.ts +197 -0
  162. package/dist/dialects/exasol/index.js +14 -0
  163. package/dist/dialects/firebird/index.d.ts +286 -0
  164. package/dist/dialects/firebird/index.js +135 -0
  165. package/dist/dialects/greenplum/index.d.ts +336 -0
  166. package/dist/dialects/greenplum/index.js +168 -0
  167. package/dist/dialects/hana/index.d.ts +512 -0
  168. package/dist/dialects/hana/index.js +17 -35
  169. package/dist/dialects/mariadb/index.d.ts +1241 -0
  170. package/dist/dialects/mariadb/index.js +181 -43
  171. package/dist/dialects/mssql/index.d.ts +729 -0
  172. package/dist/dialects/mssql/index.js +76 -7
  173. package/dist/dialects/mysql/index.d.ts +1233 -0
  174. package/dist/dialects/mysql/index.js +87 -19
  175. package/dist/dialects/oracle/index.d.ts +1222 -0
  176. package/dist/dialects/oracle/index.js +210 -9
  177. package/dist/dialects/postgres/index.d.ts +1598 -0
  178. package/dist/dialects/postgres/index.js +34 -13
  179. package/dist/dialects/query-stream-helper.d.ts +58 -0
  180. package/dist/dialects/questdb/index.d.ts +430 -0
  181. package/dist/dialects/questdb/index.js +292 -0
  182. package/dist/dialects/redshift/index.d.ts +933 -0
  183. package/dist/dialects/redshift/index.js +17 -5
  184. package/dist/dialects/singlestore/index.d.ts +233 -0
  185. package/dist/dialects/singlestore/index.js +53 -0
  186. package/dist/dialects/snowflake/index.d.ts +727 -0
  187. package/dist/dialects/snowflake/index.js +154 -5
  188. package/dist/dialects/spanner/index.d.ts +660 -0
  189. package/dist/dialects/spanner/index.js +43 -21
  190. package/dist/dialects/sqlite/index.d.ts +1133 -0
  191. package/dist/dialects/sqlite/index.js +168 -30
  192. package/dist/dialects/tidb/index.d.ts +226 -0
  193. package/dist/dialects/tidb/index.js +10 -0
  194. package/dist/dialects/timescaledb/index.d.ts +286 -0
  195. package/dist/dialects/timescaledb/index.js +179 -0
  196. package/dist/dialects/trino/index.d.ts +230 -0
  197. package/dist/dialects/trino/index.js +85 -10
  198. package/dist/dialects/turso/index.d.ts +98 -0
  199. package/dist/dialects/turso/index.js +10 -0
  200. package/dist/dialects/vertica/index.d.ts +321 -0
  201. package/dist/dialects/vertica/index.js +161 -0
  202. package/dist/dialects/yugabytedb/index.d.ts +276 -0
  203. package/dist/dialects/yugabytedb/index.js +121 -0
  204. package/dist/errors/index.d.ts +378 -0
  205. package/dist/errors/index.js +29 -1
  206. package/dist/errors/utils.d.ts +53 -0
  207. package/dist/errors.d.ts +5 -0
  208. package/dist/extensions/catalog/cloud-warehouse-features.d.ts +27 -0
  209. package/dist/extensions/catalog/mssql-features.d.ts +20 -0
  210. package/dist/extensions/catalog/mysql-mariadb-plugins.d.ts +18 -0
  211. package/dist/extensions/catalog/oracle-db2-features.d.ts +17 -0
  212. package/dist/extensions/catalog/postgres-extensions.d.ts +15 -0
  213. package/dist/extensions/index.d.ts +34 -0
  214. package/dist/extensions/types.d.ts +43 -0
  215. package/dist/external-fields/adapters.d.ts +50 -0
  216. package/dist/external-fields/adapters.js +227 -0
  217. package/dist/external-fields/decorator.d.ts +77 -0
  218. package/dist/external-fields/decorator.js +80 -0
  219. package/dist/external-fields/index.d.ts +10 -0
  220. package/dist/external-fields/index.js +19 -0
  221. package/dist/external-fields/runtime.d.ts +39 -0
  222. package/dist/external-fields/runtime.js +221 -0
  223. package/dist/foreign-data.d.ts +168 -0
  224. package/dist/graph/base-graph-dialect.d.ts +250 -0
  225. package/dist/graph/base-graph-dialect.js +539 -0
  226. package/dist/graph/dgraph/index.d.ts +65 -0
  227. package/dist/graph/dgraph/index.js +559 -0
  228. package/dist/graph/gremlin/index.d.ts +59 -0
  229. package/dist/graph/gremlin/index.js +378 -0
  230. package/dist/graph/index.d.ts +60 -0
  231. package/dist/graph/index.js +67 -0
  232. package/dist/graph/neo4j/index.d.ts +50 -0
  233. package/dist/graph/neo4j/index.js +462 -0
  234. package/dist/graph/types.d.ts +213 -0
  235. package/dist/graph/types.js +234 -0
  236. package/dist/hooks/hooks-manager.d.ts +189 -0
  237. package/dist/hooks/index.d.ts +8 -0
  238. package/dist/index.d.ts +713 -0
  239. package/dist/index.js +36 -4
  240. package/dist/logging.d.ts +183 -0
  241. package/dist/migrations/index.d.ts +9 -0
  242. package/dist/migrations/migration.d.ts +143 -0
  243. package/dist/migrations/migrator.d.ts +199 -0
  244. package/dist/migrations/prormmigration.d.ts +131 -0
  245. package/dist/migrations/query-interface.d.ts +335 -0
  246. package/dist/migrations/seeder.d.ts +167 -0
  247. package/dist/models/associations.d.ts +131 -0
  248. package/dist/models/associations.js +7 -2
  249. package/dist/models/constraints.d.ts +175 -0
  250. package/dist/models/data-types.d.ts +1656 -0
  251. package/dist/models/decorators.d.ts +328 -0
  252. package/dist/models/decorators.js +61 -82
  253. package/dist/models/eager-load.d.ts +86 -0
  254. package/dist/models/eager-load.js +369 -0
  255. package/dist/models/index.d.ts +13 -0
  256. package/dist/models/indexes.d.ts +325 -0
  257. package/dist/models/methods.d.ts +419 -0
  258. package/dist/models/model-manager.d.ts +76 -0
  259. package/dist/models/model.d.ts +820 -0
  260. package/dist/models/model.js +15 -101
  261. package/dist/models/operators.d.ts +29 -0
  262. package/dist/models/scopes.d.ts +71 -0
  263. package/dist/models/typescript-types.d.ts +177 -0
  264. package/dist/nosql/aerospike/index.d.ts +126 -0
  265. package/dist/nosql/allegrograph/index.d.ts +86 -0
  266. package/dist/nosql/arangodb/index.d.ts +285 -0
  267. package/dist/nosql/arangodb/index.js +274 -2
  268. package/dist/nosql/arangodb/where.d.ts +38 -0
  269. package/dist/nosql/arangodb/where.js +94 -0
  270. package/dist/nosql/azure-blob/index.d.ts +104 -0
  271. package/dist/nosql/beanstalkd/index.d.ts +88 -0
  272. package/dist/nosql/beequeue/index.d.ts +99 -0
  273. package/dist/nosql/bigchaindb/index.d.ts +113 -0
  274. package/dist/nosql/bigtable/index.d.ts +144 -0
  275. package/dist/nosql/blazegraph/index.d.ts +88 -0
  276. package/dist/nosql/bullmq/index.d.ts +83 -0
  277. package/dist/nosql/cassandra/index.d.ts +119 -0
  278. package/dist/nosql/chroma/index.d.ts +151 -0
  279. package/dist/nosql/cloudflare-kv/index.d.ts +120 -0
  280. package/dist/nosql/coherence/index.d.ts +91 -0
  281. package/dist/nosql/cosmosdb/index.d.ts +78 -0
  282. package/dist/nosql/couchbase/index.d.ts +103 -0
  283. package/dist/nosql/dax/index.d.ts +118 -0
  284. package/dist/nosql/deno-kv/index.d.ts +109 -0
  285. package/dist/nosql/dgraph/index.d.ts +80 -0
  286. package/dist/nosql/doris/index.d.ts +88 -0
  287. package/dist/nosql/druid/index.d.ts +95 -0
  288. package/dist/nosql/dynamodb/index.d.ts +643 -0
  289. package/dist/nosql/dynamodb/index.js +423 -0
  290. package/dist/nosql/elasticsearch/index.d.ts +239 -0
  291. package/dist/nosql/etcd/index.d.ts +243 -0
  292. package/dist/nosql/eventhubs/index.d.ts +89 -0
  293. package/dist/nosql/eventstore/index.d.ts +102 -0
  294. package/dist/nosql/faunadb/index.d.ts +141 -0
  295. package/dist/nosql/faunadb/index.js +329 -0
  296. package/dist/nosql/firestore/index.d.ts +67 -0
  297. package/dist/nosql/fluree/index.d.ts +88 -0
  298. package/dist/nosql/fuseki/index.d.ts +94 -0
  299. package/dist/nosql/gcs/index.d.ts +62 -0
  300. package/dist/nosql/gearman/index.d.ts +77 -0
  301. package/dist/nosql/geode/index.d.ts +93 -0
  302. package/dist/nosql/graphdb/index.d.ts +86 -0
  303. package/dist/nosql/graylog/index.d.ts +118 -0
  304. package/dist/nosql/gridgain/index.d.ts +78 -0
  305. package/dist/nosql/hazelcast/index.d.ts +73 -0
  306. package/dist/nosql/hbase/index.d.ts +123 -0
  307. package/dist/nosql/ignite/index.d.ts +80 -0
  308. package/dist/nosql/immudb/index.d.ts +131 -0
  309. package/dist/nosql/index.d.ts +215 -0
  310. package/dist/nosql/infinispan/index.d.ts +95 -0
  311. package/dist/nosql/influxdb/flux-compiler.d.ts +23 -0
  312. package/dist/nosql/influxdb/flux-compiler.js +170 -0
  313. package/dist/nosql/influxdb/index.d.ts +300 -0
  314. package/dist/nosql/influxdb/index.js +0 -0
  315. package/dist/nosql/kafka/index.d.ts +113 -0
  316. package/dist/nosql/keyspaces/index.d.ts +122 -0
  317. package/dist/nosql/kinesis/index.d.ts +121 -0
  318. package/dist/nosql/leveldb/index.d.ts +112 -0
  319. package/dist/nosql/leveldb/index.js +103 -1
  320. package/dist/nosql/lmdb/index.d.ts +76 -0
  321. package/dist/nosql/loki/index.d.ts +126 -0
  322. package/dist/nosql/marklogic/index.d.ts +76 -0
  323. package/dist/nosql/materialize/index.d.ts +91 -0
  324. package/dist/nosql/meilisearch/index.d.ts +76 -0
  325. package/dist/nosql/memcached/index.d.ts +138 -0
  326. package/dist/nosql/milvus/index.d.ts +167 -0
  327. package/dist/nosql/minio/index.d.ts +122 -0
  328. package/dist/nosql/momento/index.d.ts +99 -0
  329. package/dist/nosql/mongodb/index.d.ts +265 -0
  330. package/dist/nosql/mongodb/index.js +139 -0
  331. package/dist/nosql/mongodb/where.d.ts +8 -0
  332. package/dist/nosql/mongodb/where.js +181 -0
  333. package/dist/nosql/nats/index.d.ts +139 -0
  334. package/dist/nosql/nedb/index.d.ts +79 -0
  335. package/dist/nosql/neo4j/index.d.ts +217 -0
  336. package/dist/nosql/neo4j/index.js +26 -14
  337. package/dist/nosql/neptune/index.d.ts +234 -0
  338. package/dist/nosql/neptune/index.js +23 -9
  339. package/dist/nosql/nsq/index.d.ts +93 -0
  340. package/dist/nosql/opensearch/index.d.ts +97 -0
  341. package/dist/nosql/orientdb/index.d.ts +72 -0
  342. package/dist/nosql/papertrail/index.d.ts +120 -0
  343. package/dist/nosql/pinecone/index.d.ts +148 -0
  344. package/dist/nosql/pinot/index.d.ts +90 -0
  345. package/dist/nosql/pouchdb/index.d.ts +95 -0
  346. package/dist/nosql/prometheus/index.d.ts +112 -0
  347. package/dist/nosql/provendb/index.d.ts +143 -0
  348. package/dist/nosql/provendb/index.js +262 -0
  349. package/dist/nosql/pubsub/index.d.ts +83 -0
  350. package/dist/nosql/pulsar/index.d.ts +105 -0
  351. package/dist/nosql/qdrant/index.d.ts +231 -0
  352. package/dist/nosql/qldb/index.d.ts +182 -0
  353. package/dist/nosql/qldb/index.js +302 -1
  354. package/dist/nosql/r2/index.d.ts +160 -0
  355. package/dist/nosql/rabbitmq/index.d.ts +131 -0
  356. package/dist/nosql/ravendb/index.d.ts +138 -0
  357. package/dist/nosql/ravendb/index.js +323 -9
  358. package/dist/nosql/ravendb/where.d.ts +38 -0
  359. package/dist/nosql/ravendb/where.js +94 -0
  360. package/dist/nosql/redis/index.d.ts +267 -0
  361. package/dist/nosql/redis/index.js +19 -5
  362. package/dist/nosql/redpanda/index.d.ts +117 -0
  363. package/dist/nosql/resque/index.d.ts +91 -0
  364. package/dist/nosql/rethinkdb/index.d.ts +194 -0
  365. package/dist/nosql/rethinkdb/index.js +290 -0
  366. package/dist/nosql/rethinkdb/where.d.ts +38 -0
  367. package/dist/nosql/rethinkdb/where.js +94 -0
  368. package/dist/nosql/rocksdb/document-layer.d.ts +162 -0
  369. package/dist/nosql/rocksdb/document-layer.js +338 -0
  370. package/dist/nosql/rocksdb/index.d.ts +112 -0
  371. package/dist/nosql/rocksdb/index.js +103 -1
  372. package/dist/nosql/rocksdb/where-match.d.ts +21 -0
  373. package/dist/nosql/rocksdb/where-match.js +238 -0
  374. package/dist/nosql/rockset/index.d.ts +84 -0
  375. package/dist/nosql/s3/index.d.ts +170 -0
  376. package/dist/nosql/scylladb/index.d.ts +117 -0
  377. package/dist/nosql/signoz/index.d.ts +116 -0
  378. package/dist/nosql/sns/index.d.ts +99 -0
  379. package/dist/nosql/solr/index.d.ts +129 -0
  380. package/dist/nosql/splunk/index.d.ts +125 -0
  381. package/dist/nosql/sqs/index.d.ts +116 -0
  382. package/dist/nosql/stardog/index.d.ts +86 -0
  383. package/dist/nosql/starrocks/index.d.ts +89 -0
  384. package/dist/nosql/store.d.ts +23 -0
  385. package/dist/nosql/sumologic/index.d.ts +119 -0
  386. package/dist/nosql/surrealdb/index.d.ts +156 -0
  387. package/dist/nosql/surrealdb/index.js +174 -1
  388. package/dist/nosql/surrealdb/query-compiler.d.ts +26 -0
  389. package/dist/nosql/surrealdb/query-compiler.js +193 -0
  390. package/dist/nosql/terminusdb/index.d.ts +95 -0
  391. package/dist/nosql/tigergraph/index.d.ts +314 -0
  392. package/dist/nosql/typesense/index.d.ts +82 -0
  393. package/dist/nosql/unqlite/index.d.ts +68 -0
  394. package/dist/nosql/upstash/index.d.ts +80 -0
  395. package/dist/nosql/vercel-kv/index.d.ts +82 -0
  396. package/dist/nosql/victoriametrics/index.d.ts +129 -0
  397. package/dist/nosql/virtuoso/index.d.ts +87 -0
  398. package/dist/nosql/weaviate/index.d.ts +196 -0
  399. package/dist/operators/index.d.ts +7 -0
  400. package/dist/operators.d.ts +2947 -0
  401. package/dist/operators.js +46 -1
  402. package/dist/prisma-migrate/index.d.ts +28 -0
  403. package/dist/prisma-migrate/migration-generator.d.ts +21 -0
  404. package/dist/prisma-migrate/model-generator.d.ts +12 -0
  405. package/dist/prisma-migrate/relations.d.ts +28 -0
  406. package/dist/prisma-migrate/schema-parser.d.ts +42 -0
  407. package/dist/prisma-migrate/type-mapper.d.ts +20 -0
  408. package/dist/prorm.d.ts +2093 -0
  409. package/dist/prorm.js +721 -302
  410. package/dist/query-builders/cte-builder.d.ts +104 -0
  411. package/dist/query-builders/functions/aggregate.d.ts +199 -0
  412. package/dist/query-builders/functions/conditional.d.ts +195 -0
  413. package/dist/query-builders/functions/datetime.d.ts +202 -0
  414. package/dist/query-builders/functions/fulltext.d.ts +220 -0
  415. package/dist/query-builders/functions/index.d.ts +17 -0
  416. package/dist/query-builders/functions/json.d.ts +157 -0
  417. package/dist/query-builders/functions/math.d.ts +215 -0
  418. package/dist/query-builders/functions/string.d.ts +233 -0
  419. package/dist/query-builders/functions/window.d.ts +209 -0
  420. package/dist/query-builders/include-builder.d.ts +85 -0
  421. package/dist/query-builders/index-expression-builder.d.ts +153 -0
  422. package/dist/query-builders/index.d.ts +121 -0
  423. package/dist/query-builders/index.js +10 -0
  424. package/dist/query-builders/insert-builder.d.ts +62 -0
  425. package/dist/query-builders/model-helpers.d.ts +28 -0
  426. package/dist/query-builders/order-limit-builder.d.ts +84 -0
  427. package/dist/query-builders/sql-compiler.d.ts +562 -0
  428. package/dist/query-builders/subquery-builder.d.ts +133 -0
  429. package/dist/query-builders/update-builder.d.ts +71 -0
  430. package/dist/query-builders/view-builder.d.ts +189 -0
  431. package/dist/query-builders/where-builder.d.ts +124 -0
  432. package/dist/query-interface.d.ts +407 -0
  433. package/dist/query-interface.js +84 -0
  434. package/dist/query-optimizers/batch-optimizer.d.ts +175 -0
  435. package/dist/query-optimizers/explain-plans.d.ts +187 -0
  436. package/dist/query-optimizers/index.d.ts +27 -0
  437. package/dist/query-optimizers/prepared-statement-cache.d.ts +252 -0
  438. package/dist/query-optimizers/query-hints.d.ts +201 -0
  439. package/dist/query-optimizers/query-optimizer.d.ts +162 -0
  440. package/dist/query-optimizers/slow-query-logger.d.ts +186 -0
  441. package/dist/replica-manager.d.ts +235 -0
  442. package/dist/schema/index.d.ts +7 -0
  443. package/dist/schema/migration-generator.d.ts +74 -0
  444. package/dist/schema/schema-differ.d.ts +114 -0
  445. package/dist/schema/types.d.ts +246 -0
  446. package/dist/schema-objects.d.ts +78 -0
  447. package/dist/schema-objects.js +203 -0
  448. package/dist/sql-constants.d.ts +240 -0
  449. package/dist/sqlite-advanced.d.ts +572 -0
  450. package/dist/streams/index.d.ts +5 -0
  451. package/dist/streams/transforms.d.ts +120 -0
  452. package/dist/transaction.d.ts +221 -0
  453. package/dist/types/index.d.ts +3123 -0
  454. package/dist/user-management.d.ts +141 -0
  455. package/dist/utils/date.d.ts +149 -0
  456. package/dist/utils/index.d.ts +359 -0
  457. package/dist/utils/string.d.ts +88 -0
  458. package/dist/validators/index.d.ts +7 -0
  459. package/dist/validators/validator.d.ts +306 -0
  460. package/package.json +20 -5
@@ -1,17 +1,18 @@
1
1
  "use strict";
2
2
  /**
3
3
  * ERDiagram — generates a fully-rendered Entity-Relationship diagram SVG for
4
- * a collection of ORM models and their associations.
4
+ * a collection of ORM models and their associations, styled to the "Industry"
5
+ * blueprint design system.
5
6
  *
6
- * Features:
7
- * - Auto-layout (configurable columns, auto-height per entity)
8
- * - Color-coded entity headers (unique hue per model)
9
- * - Compact field rows: name + type badge + PK/FK icons
10
- * - Crow's-foot relationship lines with cardinality labels
11
- * - Bezier curves that avoid box overlap
12
- * - Relationship legend bottom-right
13
- * - Title bar & metadata strip
14
- * - Fully self-contained SVG (no external resources)
7
+ * Look:
8
+ * - #f2f2f3 ground with a faint hairline blueprint grid
9
+ * - Solid accent (#5980a6) banner, Barlow Condensed title
10
+ * - White entity cards on a grid: SQUARE corners, 1px hairline borders, a solid
11
+ * accent / accent-2 (two-tone) header bar no vibrant gradients or shadows
12
+ * - Compact rows: name (mono) + type (mono, neutral) + PK/FK marks
13
+ * - Hairline crow's-foot relationship connectors with mono cardinality marks
14
+ * - Legend bottom-right, Barlow labels
15
+ * - Fully self-contained SVG (fonts via an embedded @import + system fallbacks)
15
16
  *
16
17
  * Usage:
17
18
  * const er = new ERDiagram({
@@ -57,46 +58,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
57
58
  exports.ERDiagram = void 0;
58
59
  const fs = __importStar(require("fs"));
59
60
  const path = __importStar(require("path"));
60
- // ─── Color palette for entity headers (cycles for > 12 models) ─────────────
61
- const ENTITY_COLORS = [
62
- { header: '#1E3A8A', mid: '#2563EB', light: '#DBEAFE', text: '#1E3A8A' }, // blue
63
- { header: '#5B21B6', mid: '#7C3AED', light: '#EDE9FE', text: '#5B21B6' }, // violet
64
- { header: '#065F46', mid: '#059669', light: '#D1FAE5', text: '#065F46' }, // emerald
65
- { header: '#92400E', mid: '#D97706', light: '#FEF3C7', text: '#92400E' }, // amber
66
- { header: '#831843', mid: '#DB2777', light: '#FCE7F3', text: '#831843' }, // pink
67
- { header: '#0C4A6E', mid: '#0284C7', light: '#E0F2FE', text: '#0C4A6E' }, // sky
68
- { header: '#1E1B4B', mid: '#4338CA', light: '#E0E7FF', text: '#1E1B4B' }, // indigo
69
- { header: '#4A1942', mid: '#9333EA', light: '#F3E8FF', text: '#4A1942' }, // purple
70
- { header: '#7F1D1D', mid: '#DC2626', light: '#FEE2E2', text: '#7F1D1D' }, // red
71
- { header: '#134E4A', mid: '#0D9488', light: '#CCFBF1', text: '#134E4A' }, // teal
72
- { header: '#1C1917', mid: '#44403C', light: '#F5F5F4', text: '#1C1917' }, // stone
73
- { header: '#14532D', mid: '#16A34A', light: '#DCFCE7', text: '#14532D' }, // green
74
- ];
75
- // ─── Type-color helper (compact, same palette as model-diagram) ─────────────
76
- function typeCol(t) {
77
- const s = t.toUpperCase();
78
- if (/STRING|VARCHAR|CHAR|TEXT/.test(s))
79
- return { text: '#059669', bg: '#D1FAE5' };
80
- if (/INT|BIGINT|SMALLINT|FLOAT|DOUBLE|DECIMAL|NUMERIC/.test(s))
81
- return { text: '#7C3AED', bg: '#EDE9FE' };
82
- if (/DATE|TIME|TIMESTAMP/.test(s))
83
- return { text: '#EA580C', bg: '#FFEDD5' };
84
- if (/BOOL/.test(s))
85
- return { text: '#DB2777', bg: '#FCE7F3' };
86
- if (/UUID/.test(s))
87
- return { text: '#0891B2', bg: '#CFFAFE' };
88
- if (/JSONB/.test(s))
89
- return { text: '#4338CA', bg: '#E0E7FF' };
90
- if (/JSON/.test(s))
91
- return { text: '#4F46E5', bg: '#E0E7FF' };
92
- if (/BLOB|BINARY/.test(s))
93
- return { text: '#92400E', bg: '#FEF3C7' };
94
- if (/ENUM/.test(s))
95
- return { text: '#B45309', bg: '#FEF3C7' };
96
- if (/ARRAY/.test(s))
97
- return { text: '#0369A1', bg: '#E0F2FE' };
98
- return { text: '#475569', bg: '#F1F5F9' };
99
- }
61
+ const palette_1 = require("./palette");
62
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
100
63
  function xmlEsc(s) {
101
64
  return String(s ?? '')
102
65
  .replace(/&/g, '&')
@@ -119,6 +82,13 @@ function resolveType(field) {
119
82
  // ─── ERDiagram class ────────────────────────────────────────────────────────
120
83
  class ERDiagram {
121
84
  constructor(options) {
85
+ // Resolved Industry colors (populated per-generate()).
86
+ this.accentMid = palette_1.INDUSTRY.accent;
87
+ this.accentText = palette_1.INDUSTRY.accentText;
88
+ this.accentLight = palette_1.INDUSTRY.accentLight;
89
+ this.accent2Mid = palette_1.INDUSTRY.accent2;
90
+ this.accent2Text = palette_1.INDUSTRY.accent2Text;
91
+ this.accent2Light = palette_1.INDUSTRY.accent2Light;
122
92
  this.opts = {
123
93
  title: options.title ?? 'Entity-Relationship Diagram',
124
94
  columns: options.columns ?? 3,
@@ -129,6 +99,12 @@ class ERDiagram {
129
99
  color: options.color ?? '',
130
100
  };
131
101
  }
102
+ /** Two-tone entity styling — even entities accent, odd accent-2. */
103
+ entityStyle(idx) {
104
+ return idx % 2 === 0
105
+ ? { header: this.accentMid, light: this.accentLight, text: this.accentText }
106
+ : { header: this.accent2Mid, light: this.accent2Light, text: this.accent2Text };
107
+ }
132
108
  // ── Compute box height for a model ──────────────────────────────────────
133
109
  boxHeight(model) {
134
110
  const fieldCount = Object.keys(model.fields ?? {}).length;
@@ -181,106 +157,73 @@ class ERDiagram {
181
157
  return layout;
182
158
  }
183
159
  // ── Draw a single entity box ─────────────────────────────────────────────
184
- renderBox(box, colorIdx) {
160
+ renderBox(box, idx) {
185
161
  const { model, x, y, w, h } = box;
186
- const colors = ENTITY_COLORS[colorIdx % ENTITY_COLORS.length];
187
- const uid = model.name.replace(/\W/g, '') + colorIdx;
162
+ const style = this.entityStyle(idx);
188
163
  const HDR = ERDiagram.BOX_HDR;
189
164
  const ROW = ERDiagram.BOX_ROW;
190
165
  const FOOT = ERDiagram.BOX_FOOT;
191
- const R = 10;
166
+ const div = palette_1.INDUSTRY.divider;
192
167
  const fieldEntries = Object.entries(model.fields ?? {});
193
168
  let out = `\n <!-- ═ Entity: ${xmlEsc(model.name)} ═ -->`;
194
- // ── Shadow & shell ──
195
- out += `\n <defs>
196
- <linearGradient id="ehg${uid}" x1="0" y1="0" x2="1" y2="1" gradientUnits="objectBoundingBox">
197
- <stop offset="0%" stop-color="${colors.header}"/>
198
- <stop offset="100%" stop-color="${colors.mid}"/>
199
- </linearGradient>
200
- <filter id="esh${uid}" x="-8%" y="-8%" width="116%" height="130%">
201
- <feDropShadow dx="0" dy="3" stdDeviation="6" flood-color="#00000020"/>
202
- </filter>
203
- </defs>`;
204
- out += `\n <rect x="${x - 1}" y="${y - 1}" width="${w + 2}" height="${h + 2}"
205
- rx="${R + 1}" fill="#CBD5E1" filter="url(#esh${uid})"/>`;
206
- out += `\n <rect x="${x}" y="${y}" width="${w}" height="${h}"
207
- rx="${R}" fill="#FFFFFF"/>`;
208
- // ── Header ──
209
- out += `\n <rect x="${x}" y="${y}" width="${w}" height="${HDR}"
210
- rx="${R}" fill="url(#ehg${uid})"/>`;
211
- // flatten bottom of header
212
- out += `\n <rect x="${x}" y="${y + HDR - R}" width="${w}" height="${R}"
213
- fill="url(#ehg${uid})"/>`;
214
- // Entity name
215
- out += `\n <text x="${x + w / 2}" y="${y + 28}"
216
- font-family="system-ui,-apple-system,sans-serif"
217
- font-size="16" font-weight="800" fill="#FFFFFF"
218
- text-anchor="middle">${xmlEsc(model.name)}</text>`;
219
- // Table name sub-label
169
+ // ── Surface + hairline frame (square) ──
170
+ out += `\n <rect x="${x}" y="${y}" width="${w}" height="${h}" fill="${palette_1.INDUSTRY.card}"/>`;
171
+ out += `\n <rect x="${x}" y="${y}" width="${w}" height="${h}" fill="none" stroke="${div}" stroke-width="1"/>`;
172
+ // ── Header (solid accent bar) ──
173
+ out += `\n <rect x="${x}" y="${y}" width="${w}" height="${HDR}" fill="${style.header}"/>`;
174
+ out += `\n <text x="${x + 12}" y="${y + 20}"
175
+ font-family='${palette_1.FONTS.heading}'
176
+ font-size="17" font-weight="600" fill="#FFFFFF">${xmlEsc(model.name)}</text>`;
220
177
  const tbl = model.tableName ?? model.name.toLowerCase() + 's';
221
- out += `\n <text x="${x + w / 2}" y="${y + 42}"
222
- font-family="'SF Mono',monospace" font-size="10"
223
- fill="rgba(255,255,255,0.65)" text-anchor="middle">${xmlEsc(tbl)}</text>`;
178
+ out += `\n <text x="${x + 12}" y="${y + 35}"
179
+ font-family='${palette_1.FONTS.mono}' font-size="10"
180
+ fill="rgba(255,255,255,0.78)">${xmlEsc(tbl)}</text>`;
224
181
  // ── Field rows ──
225
182
  fieldEntries.forEach(([colName, field], fi) => {
226
183
  const fy = y + HDR + fi * ROW;
227
184
  const isPK = !!field.primaryKey;
228
185
  const isFK = !!(field.foreignKey || field.references);
229
186
  const typeStr = resolveType(field);
230
- const tc = typeCol(typeStr);
231
- const rowBg = fi % 2 === 0 ? '#FFFFFF' : '#F9FAFB';
187
+ const rowBg = fi % 2 === 0 ? palette_1.INDUSTRY.card : palette_1.INDUSTRY.neutral[100];
232
188
  out += `\n <rect x="${x}" y="${fy}" width="${w}" height="${ROW}" fill="${rowBg}"/>`;
233
- // Accent stripe
189
+ // Accent stripe: PK → accent, FK → accent-2.
234
190
  if (isPK)
235
- out += `\n <rect x="${x}" y="${fy}" width="4" height="${ROW}" fill="#F59E0B"/>`;
191
+ out += `\n <rect x="${x}" y="${fy}" width="3" height="${ROW}" fill="${this.accentMid}"/>`;
236
192
  else if (isFK)
237
- out += `\n <rect x="${x}" y="${fy}" width="4" height="${ROW}" fill="#3B82F6"/>`;
238
- // Icon (SVG instead of emoji)
239
- const ixc = x + 14;
193
+ out += `\n <rect x="${x}" y="${fy}" width="3" height="${ROW}" fill="${this.accent2Mid}"/>`;
240
194
  const ity = fy + ROW / 2 + 4;
241
- if (isPK) {
242
- out += `\n <g transform="translate(${ixc - 5}, ${ity - 7})">
243
- <path d="M9 1l3 3-3 3 2 2 3-3 3 3 2-2-3-3 3-3-2-2-3 3-3-3z" fill="#F59E0B"/>
244
- </g>`;
245
- }
246
- else if (isFK) {
247
- out += `\n <g transform="translate(${ixc - 5}, ${ity - 7})">
248
- <path d="M6 4l4 4-4 4M10 4l4 4" stroke="#3B82F6" stroke-width="1.5" fill="none"/>
249
- </g>`;
195
+ // PK/FK mark chip.
196
+ if (isPK || isFK) {
197
+ out += `\n <text x="${x + 12}" y="${ity}"
198
+ font-family='${palette_1.FONTS.heading}' font-size="9" font-weight="600"
199
+ fill="${isPK ? this.accentText : this.accent2Text}">${isPK ? 'PK' : 'FK'}</text>`;
250
200
  }
251
201
  else {
252
- out += `\n <circle cx="${ixc}" cy="${fy + ROW / 2}" r="2.5" fill="#CBD5E1"/>`;
202
+ out += `\n <circle cx="${x + 15}" cy="${fy + ROW / 2}" r="2" fill="${palette_1.INDUSTRY.neutral[400]}"/>`;
253
203
  }
254
- // Column name
255
- const nameC = isPK ? '#92400E' : isFK ? '#1E40AF' : '#1E293B';
256
- const nameW = isPK ? '700' : isFK ? '600' : '400';
257
- const dispN = colName.length > 18 ? colName.slice(0, 17) + '…' : colName;
258
- out += `\n <text x="${x + 24}" y="${ity}"
259
- font-family="'SF Mono',monospace" font-size="11"
204
+ // Column name.
205
+ const nameC = isPK ? this.accentText : isFK ? this.accent2Text : palette_1.INDUSTRY.text;
206
+ const nameW = isPK || isFK ? '600' : '400';
207
+ const dispN = colName.length > 16 ? colName.slice(0, 15) + '…' : colName;
208
+ out += `\n <text x="${x + 30}" y="${ity}"
209
+ font-family='${palette_1.FONTS.mono}' font-size="11"
260
210
  font-weight="${nameW}" fill="${nameC}">${xmlEsc(dispN)}</text>`;
261
- // Type badge (right-aligned)
262
- const typTxt = typeStr.length > 12 ? typeStr.slice(0, 11) + '…' : typeStr;
263
- const tbW = typTxt.length * 6.5 + 10;
264
- const tbX = x + w - tbW - 6;
265
- out += `\n <rect x="${tbX}" y="${fy + 6}" width="${tbW}" height="16" rx="4" fill="${tc.bg}"/>`;
266
- out += `\n <text x="${tbX + tbW / 2}" y="${fy + 18}"
267
- font-family="'SF Mono',monospace" font-size="9"
268
- font-weight="600" fill="${tc.text}" text-anchor="middle">${xmlEsc(typTxt)}</text>`;
269
- // Row separator
211
+ // Type (right-aligned, mono neutral).
212
+ const typTxt = typeStr.length > 14 ? typeStr.slice(0, 13) + '…' : typeStr;
213
+ out += `\n <text x="${x + w - 8}" y="${ity}"
214
+ font-family='${palette_1.FONTS.mono}' font-size="10"
215
+ fill="${palette_1.INDUSTRY.neutral[700]}" text-anchor="end">${xmlEsc(typTxt)}</text>`;
216
+ // Row separator (hairline).
270
217
  out += `\n <line x1="${x}" y1="${fy + ROW}" x2="${x + w}" y2="${fy + ROW}"
271
- stroke="#E2E8F0" stroke-width="0.5"/>`;
218
+ stroke="${div}" stroke-width="1"/>`;
272
219
  });
273
220
  // ── Footer ──
274
221
  const footY = y + HDR + fieldEntries.length * ROW;
275
- out += `\n <rect x="${x}" y="${footY}" width="${w}" height="${FOOT}" fill="${colors.light}"/>`;
276
- // round bottom
277
- out += `\n <rect x="${x}" y="${footY + FOOT - R}" width="${w}" height="${R}"
278
- rx="${R}" fill="${colors.light}"/>`;
222
+ out += `\n <rect x="${x}" y="${footY}" width="${w}" height="${FOOT}" fill="${style.light}"/>`;
223
+ out += `\n <line x1="${x}" y1="${footY}" x2="${x + w}" y2="${footY}" stroke="${div}" stroke-width="1"/>`;
279
224
  const assocCount = (model.associations ?? []).length;
280
- out += `\n <text x="${x + 10}" y="${footY + 19}"
281
- font-family="system-ui,sans-serif" font-size="10" fill="${colors.text}" font-weight="600">
282
- ${Object.keys(model.fields ?? {}).length} fields${assocCount > 0 ? ` · ${assocCount} associations` : ''}
283
- </text>`;
225
+ out += `\n <text x="${x + 12}" y="${footY + 17}"
226
+ font-family='${palette_1.FONTS.body}' font-size="10" fill="${palette_1.INDUSTRY.neutral[700]}">${Object.keys(model.fields ?? {}).length} fields${assocCount > 0 ? ` · ${assocCount} associations` : ''}</text>`;
284
227
  return out;
285
228
  }
286
229
  // ── Draw relationship lines (crow's-foot) ──────────────────────────────
@@ -288,12 +231,14 @@ class ERDiagram {
288
231
  const byName = new Map();
289
232
  layout.forEach((b) => byName.set(b.model.name, b));
290
233
  let out = '\n <!-- ═══ RELATIONSHIPS ═══ -->';
291
- // Relationship line colors
292
- const REL_COLORS = {
293
- hasOne: '#0891B2',
294
- hasMany: '#7C3AED',
295
- belongsTo: '#059669',
296
- belongsToMany: '#DC2626',
234
+ // Single-hue (accent) connectors — blueprint monochrome.
235
+ const color = this.accentMid;
236
+ // Cardinality marks per association type.
237
+ const REL_MARK = {
238
+ hasOne: '1:1',
239
+ hasMany: '1:N',
240
+ belongsTo: 'N:1',
241
+ belongsToMany: 'N:N',
297
242
  };
298
243
  // Track drawn pairs to avoid duplicates
299
244
  const drawn = new Set();
@@ -308,15 +253,13 @@ class ERDiagram {
308
253
  if (drawn.has(pairKey))
309
254
  return;
310
255
  drawn.add(pairKey);
311
- const color = REL_COLORS[assoc.type] ?? '#94A3B8';
312
- const label = assoc.type;
256
+ const label = REL_MARK[assoc.type] ?? assoc.type;
313
257
  // Choose connection points (pick nearest horizontal sides)
314
258
  let sx, sy, tx, ty;
315
259
  let srcSide, tgtSide;
316
260
  const srcMidX = srcBox.x + srcBox.w / 2;
317
261
  const tgtMidX = tgtBox.x + tgtBox.w / 2;
318
262
  if (tgtMidX >= srcMidX) {
319
- // target is to the right
320
263
  sx = srcBox.x + srcBox.w;
321
264
  sy = srcBox.y + srcBox.h / 2;
322
265
  tx = tgtBox.x;
@@ -325,7 +268,6 @@ class ERDiagram {
325
268
  tgtSide = 'left';
326
269
  }
327
270
  else {
328
- // target is to the left
329
271
  sx = srcBox.x;
330
272
  sy = srcBox.y + srcBox.h / 2;
331
273
  tx = tgtBox.x + tgtBox.w;
@@ -355,10 +297,9 @@ class ERDiagram {
355
297
  const cpOffset = Math.max(dx * 0.5, 60);
356
298
  const cpsx = srcSide === 'right' ? sx + cpOffset : sx - cpOffset;
357
299
  const cptx = tgtSide === 'left' ? tx - cpOffset : tx + cpOffset;
358
- // Main line
300
+ // Main line (hairline).
359
301
  out += `\n <path d="M ${sx} ${sy} C ${cpsx} ${sy}, ${cptx} ${ty}, ${tx} ${ty}"
360
- fill="none" stroke="${color}" stroke-width="1.8"
361
- stroke-dasharray="0" opacity="0.85"/>`;
302
+ fill="none" stroke="${color}" stroke-width="1.4"/>`;
362
303
  // ── Crow's foot at TARGET (many side for hasMany/belongsToMany) ──
363
304
  const manyAtTarget = assoc.type === 'hasMany' || assoc.type === 'belongsToMany';
364
305
  const manyAtSource = assoc.type === 'belongsTo' || assoc.type === 'belongsToMany';
@@ -374,19 +315,19 @@ class ERDiagram {
374
315
  else {
375
316
  out += this.singleBar(sx, sy, srcSide === 'right' ? 'left' : 'right', color);
376
317
  }
377
- // Relationship label at midpoint
318
+ // Cardinality label at midpoint (mono, hairline chip).
378
319
  const mx = (sx + tx) / 2;
379
320
  const my = (sy + ty) / 2;
380
- const labelW = label.length * 7 + 16;
381
- out += `\n <rect x="${mx - labelW / 2}" y="${my - 11}" width="${labelW}" height="18"
382
- rx="5" fill="white" stroke="${color}" stroke-width="1" opacity="0.95"/>`;
321
+ const labelW = label.length * 8 + 14;
322
+ out += `\n <rect x="${mx - labelW / 2}" y="${my - 10}" width="${labelW}" height="18"
323
+ fill="${palette_1.INDUSTRY.card}" stroke="${color}" stroke-width="1"/>`;
383
324
  out += `\n <text x="${mx}" y="${my + 3}"
384
- font-family="system-ui,sans-serif" font-size="10" font-weight="600"
385
- fill="${color}" text-anchor="middle">${xmlEsc(label)}</text>`;
325
+ font-family='${palette_1.FONTS.mono}' font-size="11" font-weight="600"
326
+ fill="${this.accentText}" text-anchor="middle">${xmlEsc(label)}</text>`;
386
327
  // Alias label (smaller, below)
387
328
  if (assoc.as) {
388
- out += `\n <text x="${mx}" y="${my + 18}"
389
- font-family="'SF Mono',monospace" font-size="9" fill="#94A3B8"
329
+ out += `\n <text x="${mx}" y="${my + 20}"
330
+ font-family='${palette_1.FONTS.mono}' font-size="9" fill="${palette_1.INDUSTRY.neutral[600]}"
390
331
  text-anchor="middle">as: ${xmlEsc(assoc.as)}</text>`;
391
332
  }
392
333
  });
@@ -394,23 +335,20 @@ class ERDiagram {
394
335
  return out;
395
336
  }
396
337
  // ── Crow's foot symbol ──────────────────────────────────────────────────
397
- // direction = which way the line is approaching the symbol
398
- // (the symbol points AWAY from the entity)
399
338
  crowFoot(x, y, dir, color) {
400
- // 'right' means line comes from the right → symbol points left into the entity
401
339
  const sign = dir === 'right' ? -1 : 1;
402
340
  const reach = 12;
403
341
  const spread = 7;
404
342
  return `
405
343
  <!-- crow foot at (${x},${y}) dir=${dir} -->
406
344
  <line x1="${x}" y1="${y}" x2="${x + sign * reach}" y2="${y - spread}"
407
- stroke="${color}" stroke-width="1.8"/>
345
+ stroke="${color}" stroke-width="1.4"/>
408
346
  <line x1="${x}" y1="${y}" x2="${x + sign * reach}" y2="${y}"
409
- stroke="${color}" stroke-width="1.8"/>
347
+ stroke="${color}" stroke-width="1.4"/>
410
348
  <line x1="${x}" y1="${y}" x2="${x + sign * reach}" y2="${y + spread}"
411
- stroke="${color}" stroke-width="1.8"/>
349
+ stroke="${color}" stroke-width="1.4"/>
412
350
  <line x1="${x + sign * reach}" y1="${y - spread}" x2="${x + sign * reach}" y2="${y + spread}"
413
- stroke="${color}" stroke-width="1.5"/>`;
351
+ stroke="${color}" stroke-width="1.2"/>`;
414
352
  }
415
353
  // ── Single bar (one) symbol ─────────────────────────────────────────────
416
354
  singleBar(x, y, dir, color) {
@@ -421,9 +359,9 @@ class ERDiagram {
421
359
  return `
422
360
  <!-- single bar at (${x},${y}) dir=${dir} -->
423
361
  <line x1="${x + sign * gap}" y1="${y - ht}" x2="${x + sign * gap}" y2="${y + ht}"
424
- stroke="${color}" stroke-width="1.8"/>
362
+ stroke="${color}" stroke-width="1.6"/>
425
363
  <line x1="${x + sign * reach}" y1="${y - ht}" x2="${x + sign * reach}" y2="${y + ht}"
426
- stroke="${color}" stroke-width="1.8"/>`;
364
+ stroke="${color}" stroke-width="1.6"/>`;
427
365
  }
428
366
  // ── Banner ──────────────────────────────────────────────────────────────
429
367
  renderBanner(totalW) {
@@ -432,91 +370,94 @@ class ERDiagram {
432
370
  const now = new Date().toISOString().slice(0, 10);
433
371
  return /* xml */ `
434
372
  <!-- ═══ BANNER ═══ -->
435
- <defs>
436
- <linearGradient id="erBanner" x1="0" y1="0" x2="1" y2="0"
437
- gradientUnits="objectBoundingBox">
438
- <stop offset="0%" stop-color="#0F172A"/>
439
- <stop offset="60%" stop-color="#1E3A8A"/>
440
- <stop offset="100%" stop-color="#2563EB"/>
441
- </linearGradient>
442
- </defs>
443
- <rect width="${totalW}" height="${H}" fill="url(#erBanner)"/>
444
- <text x="24" y="36"
445
- font-family="system-ui,-apple-system,sans-serif"
446
- font-size="24" font-weight="800" fill="#FFFFFF">${xmlEsc(title)}</text>
447
- <text x="24" y="54"
448
- font-family="system-ui,sans-serif" font-size="12" fill="rgba(255,255,255,0.55)">
449
- ${models.length} entities · generated ${now}
450
- </text>
451
- <!-- ER tag pill -->
452
- <rect x="${totalW - 100}" y="18" width="80" height="28" rx="14"
453
- fill="rgba(255,255,255,0.15)"/>
454
- <text x="${totalW - 60}" y="37"
455
- font-family="'SF Mono',monospace" font-size="12" font-weight="700"
456
- fill="rgba(255,255,255,0.9)" text-anchor="middle">ER DIAGRAM</text>`;
373
+ <rect width="${totalW}" height="${H}" fill="${this.accentMid}"/>
374
+ <text x="24" y="30"
375
+ font-family='${palette_1.FONTS.heading}'
376
+ font-size="24" font-weight="600" fill="#FFFFFF">${xmlEsc(title)}</text>
377
+ <text x="24" y="48"
378
+ font-family='${palette_1.FONTS.body}' font-size="12" fill="rgba(255,255,255,0.82)">${models.length} entities · generated ${now}</text>
379
+ <text x="${totalW - 20}" y="30"
380
+ font-family='${palette_1.FONTS.heading}' font-size="12" font-weight="600"
381
+ letter-spacing="1.4" fill="rgba(255,255,255,0.85)" text-anchor="end">ER DIAGRAM</text>`;
457
382
  }
458
383
  // ── Legend ──────────────────────────────────────────────────────────────
459
384
  renderLegend(lx, ly) {
460
385
  const LW = ERDiagram.LEGEND_W;
461
386
  const LP = ERDiagram.LEGEND_PAD;
462
387
  const lineH = 28;
388
+ const div = palette_1.INDUSTRY.divider;
463
389
  const items = [
464
- { type: 'hasOne', icon: '1:1', color: '#0891B2', label: 'Has One' },
465
- { type: 'hasMany', icon: '1:N', color: '#7C3AED', label: 'Has Many' },
466
- { type: 'belongsTo', icon: 'N:1', color: '#059669', label: 'Belongs To' },
467
- { type: 'belongsToMany', icon: 'N:N', color: '#DC2626', label: 'Belongs To Many' },
390
+ { mark: '1:1', label: 'Has One' },
391
+ { mark: '1:N', label: 'Has Many' },
392
+ { mark: 'N:1', label: 'Belongs To' },
393
+ { mark: 'N:N', label: 'Belongs To Many' },
468
394
  ];
469
- const legendH = LP * 2 + 24 + items.length * lineH;
395
+ const legendH = LP * 2 + 24 + items.length * lineH + 44;
470
396
  let out = `\n <!-- ═══ LEGEND ═══ -->`;
471
397
  out += `\n <rect x="${lx}" y="${ly}" width="${LW}" height="${legendH}"
472
- rx="10" fill="white" stroke="#E2E8F0" stroke-width="1.5"/>`;
473
- out += `\n <rect x="${lx}" y="${ly}" width="${LW}" height="34"
474
- rx="10" fill="#0F172A"/>`;
475
- out += `\n <rect x="${lx}" y="${ly + 20}" width="${LW}" height="14" fill="#0F172A"/>`;
476
- out += `\n <text x="${lx + LW / 2}" y="${ly + 23}"
477
- font-family="system-ui,sans-serif" font-size="12" font-weight="700"
478
- fill="#FFFFFF" text-anchor="middle">LEGEND</text>`;
398
+ fill="${palette_1.INDUSTRY.card}" stroke="${div}" stroke-width="1"/>`;
399
+ out += `\n <rect x="${lx}" y="${ly}" width="${LW}" height="30" fill="${this.accentMid}"/>`;
400
+ out += `\n <text x="${lx + LP}" y="${ly + 20}"
401
+ font-family='${palette_1.FONTS.heading}' font-size="13" font-weight="600"
402
+ letter-spacing="1" fill="#FFFFFF">LEGEND</text>`;
479
403
  items.forEach((item, i) => {
480
- const iy = ly + 34 + LP + i * lineH;
481
- const badgeW = 32;
482
- out += `\n <rect x="${lx + LP}" y="${iy + 5}" width="${badgeW}" height="18"
483
- rx="5" fill="${item.color}22"/>`;
484
- out += `\n <text x="${lx + LP + badgeW / 2}" y="${iy + 18}"
485
- font-family="monospace" font-size="10" font-weight="700"
486
- fill="${item.color}" text-anchor="middle">${item.icon}</text>`;
487
- // Sample line
488
- out += `\n <line x1="${lx + LP + badgeW + 6}" y1="${iy + 14}"
489
- x2="${lx + LP + badgeW + 28}" y2="${iy + 14}"
490
- stroke="${item.color}" stroke-width="2"/>`;
491
- out += `\n <text x="${lx + LP + badgeW + 34}" y="${iy + 18}"
492
- font-family="system-ui,sans-serif" font-size="12"
493
- fill="#374151">${item.label}</text>`;
494
- // Key icon legend (SVG instead of emoji)
495
- if (i === items.length - 1) {
496
- const ky = iy + lineH + 4;
497
- // Key icon
498
- out += `\n <g transform="translate(${lx + LP}, ${ky + 2})">
499
- <path d="M8 0l2 2-2 2 1.5 1.5 2-2 2 2 1.5-1.5-2-2 2-2-1.5-1.5-2 2-2-2z" fill="#F59E0B"/>
500
- </g>`;
501
- out += `\n <text x="${lx + LP + 22}" y="${ky + 14}"
502
- font-family="system-ui,sans-serif" font-size="11" fill="#64748B">Primary Key</text>`;
503
- // Link icon
504
- out += `\n <g transform="translate(${lx + LP}, ${ky + 18})">
505
- <path d="M4 2l4 4-4 4M8 2l4 4" stroke="#3B82F6" stroke-width="1.5" fill="none"/>
506
- </g>`;
507
- out += `\n <text x="${lx + LP + 22}" y="${ky + 30}"
508
- font-family="system-ui,sans-serif" font-size="11" fill="#64748B">Foreign Key</text>`;
509
- }
404
+ const iy = ly + 30 + LP + i * lineH;
405
+ const badgeW = 34;
406
+ out += `\n <rect x="${lx + LP}" y="${iy + 4}" width="${badgeW}" height="18"
407
+ fill="${this.accentLight}" stroke="${div}" stroke-width="1"/>`;
408
+ out += `\n <text x="${lx + LP + badgeW / 2}" y="${iy + 17}"
409
+ font-family='${palette_1.FONTS.mono}' font-size="10" font-weight="600"
410
+ fill="${this.accentText}" text-anchor="middle">${item.mark}</text>`;
411
+ // Sample connector line.
412
+ out += `\n <line x1="${lx + LP + badgeW + 8}" y1="${iy + 13}"
413
+ x2="${lx + LP + badgeW + 30}" y2="${iy + 13}"
414
+ stroke="${this.accentMid}" stroke-width="1.4"/>`;
415
+ out += `\n <text x="${lx + LP + badgeW + 38}" y="${iy + 17}"
416
+ font-family='${palette_1.FONTS.body}' font-size="12"
417
+ fill="${palette_1.INDUSTRY.text}">${item.label}</text>`;
510
418
  });
419
+ // PK/FK key.
420
+ const ky = ly + 30 + LP + items.length * lineH + 6;
421
+ out += `\n <line x1="${lx + LP}" y1="${ky + 4}" x2="${lx + LP + 44}" y2="${ky + 4}" stroke="${div}" stroke-width="1"/>`;
422
+ out += `\n <text x="${lx + LP}" y="${ky + 20}"
423
+ font-family='${palette_1.FONTS.heading}' font-size="9" font-weight="600"
424
+ fill="${this.accentText}">PK</text>`;
425
+ out += `\n <text x="${lx + LP + 22}" y="${ky + 20}"
426
+ font-family='${palette_1.FONTS.body}' font-size="11" fill="${palette_1.INDUSTRY.neutral[700]}">Primary Key</text>`;
427
+ out += `\n <text x="${lx + LP}" y="${ky + 36}"
428
+ font-family='${palette_1.FONTS.heading}' font-size="9" font-weight="600"
429
+ fill="${this.accent2Text}">FK</text>`;
430
+ out += `\n <text x="${lx + LP + 22}" y="${ky + 36}"
431
+ font-family='${palette_1.FONTS.body}' font-size="11" fill="${palette_1.INDUSTRY.neutral[700]}">Foreign Key</text>`;
511
432
  return out;
512
433
  }
434
+ /**
435
+ * Embedded font @import so browsers resolve Barlow / JetBrains Mono. Wrapped
436
+ * in CDATA because the Google-Fonts URL contains raw `&` separators that
437
+ * would otherwise be invalid XML in this string-built document.
438
+ */
439
+ fontDefs() {
440
+ return `\n <defs><style type="text/css"><![CDATA[${palette_1.FONT_IMPORT}]]></style></defs>`;
441
+ }
513
442
  // ── Generate the full SVG ────────────────────────────────────────────────
514
443
  generate() {
515
- const { models, hGap, vGap, columns } = this.opts;
444
+ const { models, columns } = this.opts;
445
+ void columns;
516
446
  const MARGIN = ERDiagram.MARGIN;
517
447
  const BANNER = ERDiagram.BANNER_H;
518
448
  const LEGEND_W = ERDiagram.LEGEND_W;
519
449
  const BOX_W = ERDiagram.BOX_W;
450
+ // Resolve accent / accent-2 from --color (Industry defaults otherwise).
451
+ const accent = (0, palette_1.resolveAccent)(this.opts.color);
452
+ const a2 = (0, palette_1.accent2Of)(accent);
453
+ this.accentMid = accent.mid;
454
+ this.accentText = accent.text;
455
+ this.accentLight = accent.light;
456
+ this.accent2Mid = a2.color;
457
+ this.accent2Text = a2.text;
458
+ this.accent2Light = a2.light;
459
+ // Theme reserved for future dark-mode support of ER (kept API-compatible).
460
+ void (0, palette_1.resolveTheme)(this.opts.theme);
520
461
  const layout = this.computeLayout();
521
462
  // Guard: with no models there are no boxes, so `Math.max(...[])` would be
522
463
  // -Infinity and produce invalid width/height/viewBox. Emit a minimal, valid
@@ -530,10 +471,11 @@ class ERDiagram {
530
471
  `<svg xmlns="http://www.w3.org/2000/svg"`,
531
472
  ` width="${emptyW}" height="${emptyH}"`,
532
473
  ` viewBox="0 0 ${emptyW} ${emptyH}">`,
533
- ` <rect width="${emptyW}" height="${emptyH}" fill="#F0F4F8"/>`,
474
+ this.fontDefs(),
475
+ ` <rect width="${emptyW}" height="${emptyH}" fill="${palette_1.INDUSTRY.ground}"/>`,
534
476
  this.renderBanner(emptyW),
535
477
  ` <text x="${emptyW / 2}" y="${BANNER + MARGIN + 20}"`,
536
- ` font-family="system-ui,sans-serif" font-size="14" fill="#64748B"`,
478
+ ` font-family='${palette_1.FONTS.body}' font-size="14" fill="${palette_1.INDUSTRY.neutral[600]}"`,
537
479
  ` text-anchor="middle">No entities to display</text>`,
538
480
  `</svg>`,
539
481
  ].join('\n');
@@ -553,17 +495,18 @@ class ERDiagram {
553
495
  ` width="${totalW}" height="${totalH}"`,
554
496
  ` viewBox="0 0 ${totalW} ${totalH}">`,
555
497
  ].join('\n');
556
- // Background
557
- svg += `\n <rect width="${totalW}" height="${totalH}" fill="#F0F4F8"/>`;
558
- // Grid guide lines (subtle)
559
- svg += `\n <!-- background grid -->`;
498
+ svg += this.fontDefs();
499
+ // Ground
500
+ svg += `\n <rect width="${totalW}" height="${totalH}" fill="${palette_1.INDUSTRY.ground}"/>`;
501
+ // Faint hairline blueprint grid.
502
+ svg += `\n <!-- blueprint grid -->`;
560
503
  for (let gx = 0; gx < totalW; gx += 40) {
561
504
  svg += `\n <line x1="${gx}" y1="${BANNER}" x2="${gx}" y2="${totalH}"
562
- stroke="#E2E8F0" stroke-width="0.4" opacity="0.6"/>`;
505
+ stroke="${palette_1.INDUSTRY.neutral[200]}" stroke-width="0.5" opacity="0.6"/>`;
563
506
  }
564
507
  for (let gy = BANNER; gy < totalH; gy += 40) {
565
508
  svg += `\n <line x1="0" y1="${gy}" x2="${totalW}" y2="${gy}"
566
- stroke="#E2E8F0" stroke-width="0.4" opacity="0.6"/>`;
509
+ stroke="${palette_1.INDUSTRY.neutral[200]}" stroke-width="0.5" opacity="0.6"/>`;
567
510
  }
568
511
  // Banner
569
512
  svg += this.renderBanner(totalW);
@@ -594,12 +537,12 @@ class ERDiagram {
594
537
  exports.ERDiagram = ERDiagram;
595
538
  // Entity box constants (px)
596
539
  ERDiagram.BOX_W = 270;
597
- ERDiagram.BOX_HDR = 44;
540
+ ERDiagram.BOX_HDR = 42;
598
541
  ERDiagram.BOX_ROW = 26;
599
- ERDiagram.BOX_FOOT = 28;
542
+ ERDiagram.BOX_FOOT = 26;
600
543
  ERDiagram.MIN_H = 100;
601
544
  // Diagram chrome constants
602
- ERDiagram.BANNER_H = 64;
603
- ERDiagram.LEGEND_W = 200;
545
+ ERDiagram.BANNER_H = 60;
546
+ ERDiagram.LEGEND_W = 210;
604
547
  ERDiagram.LEGEND_PAD = 16;
605
548
  ERDiagram.MARGIN = 48;