ts-prorm-orm 1.1.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.
Files changed (310) hide show
  1. package/CHANGELOG.md +1111 -0
  2. package/LICENSE +21 -0
  3. package/README.md +573 -0
  4. package/dist/audit/history-query.js +180 -0
  5. package/dist/audit/index.js +23 -0
  6. package/dist/audit/logger.js +236 -0
  7. package/dist/cache/cache-manager.js +84 -0
  8. package/dist/cache/index.js +16 -0
  9. package/dist/cache/redis-cluster-cache.js +557 -0
  10. package/dist/cli.js +2200 -0
  11. package/dist/compliance/audit-trail.js +68 -0
  12. package/dist/compliance/backup-verification.js +685 -0
  13. package/dist/compliance/breach-detector.js +505 -0
  14. package/dist/compliance/consent-record.js +227 -0
  15. package/dist/compliance/consent-versioning.js +331 -0
  16. package/dist/compliance/cross-border-log.js +530 -0
  17. package/dist/compliance/data-classifier.js +258 -0
  18. package/dist/compliance/data-lineage.js +565 -0
  19. package/dist/compliance/data-masker.js +303 -0
  20. package/dist/compliance/data-portability.js +265 -0
  21. package/dist/compliance/data-retention.js +195 -0
  22. package/dist/compliance/dsar-workflow.js +342 -0
  23. package/dist/compliance/field-encryption.js +223 -0
  24. package/dist/compliance/immutable-record.js +148 -0
  25. package/dist/compliance/index.js +260 -0
  26. package/dist/compliance/privacy-impact-assessment.js +364 -0
  27. package/dist/compliance/pseudonymization.js +269 -0
  28. package/dist/compliance/query-firewall.js +1182 -0
  29. package/dist/compliance/rate-limiter.js +580 -0
  30. package/dist/compliance/right-to-erasure.js +117 -0
  31. package/dist/compliance/row-level-security.js +246 -0
  32. package/dist/compliance/security-decorator.js +574 -0
  33. package/dist/compliance/security-monitor.js +525 -0
  34. package/dist/compliance/sensitive-data-discovery.js +476 -0
  35. package/dist/compliance/session-isolation.js +472 -0
  36. package/dist/compliance/tls-enforcer.js +108 -0
  37. package/dist/compliance/worm-storage.js +712 -0
  38. package/dist/connection-manager.js +198 -0
  39. package/dist/connection-pool.js +519 -0
  40. package/dist/decorators/audit.js +136 -0
  41. package/dist/decorators/belongs-to-many.js +115 -0
  42. package/dist/decorators/belongs-to.js +115 -0
  43. package/dist/decorators/check.js +435 -0
  44. package/dist/decorators/collate.js +329 -0
  45. package/dist/decorators/comment.js +205 -0
  46. package/dist/decorators/database-settings.js +236 -0
  47. package/dist/decorators/default.js +244 -0
  48. package/dist/decorators/encryption.js +235 -0
  49. package/dist/decorators/engine.js +97 -0
  50. package/dist/decorators/fk-constraints.js +594 -0
  51. package/dist/decorators/foreign-table.js +136 -0
  52. package/dist/decorators/generated.js +274 -0
  53. package/dist/decorators/has-many.js +127 -0
  54. package/dist/decorators/has-one.js +116 -0
  55. package/dist/decorators/hstore.js +129 -0
  56. package/dist/decorators/index.js +355 -0
  57. package/dist/decorators/json-column.js +83 -0
  58. package/dist/decorators/jsonb.js +101 -0
  59. package/dist/decorators/orm-decorators.js +425 -0
  60. package/dist/decorators/permissions.js +294 -0
  61. package/dist/decorators/procedure.js +210 -0
  62. package/dist/decorators/query-options.js +556 -0
  63. package/dist/decorators/range.js +167 -0
  64. package/dist/decorators/set-column.js +83 -0
  65. package/dist/decorators/spatial.js +114 -0
  66. package/dist/decorators/storage.js +580 -0
  67. package/dist/decorators/timezone.js +512 -0
  68. package/dist/decorators/trigger.js +90 -0
  69. package/dist/decorators/uuid.js +135 -0
  70. package/dist/decorators/view.js +258 -0
  71. package/dist/diagrams/chen-diagram.js +354 -0
  72. package/dist/diagrams/class-diagram.js +384 -0
  73. package/dist/diagrams/dependency-diagram.js +432 -0
  74. package/dist/diagrams/er-diagram.js +605 -0
  75. package/dist/diagrams/flow-diagram.js +394 -0
  76. package/dist/diagrams/gantt-diagram.js +411 -0
  77. package/dist/diagrams/index-diagram.js +353 -0
  78. package/dist/diagrams/index.js +184 -0
  79. package/dist/diagrams/migration-diagram.js +316 -0
  80. package/dist/diagrams/model-diagram.js +616 -0
  81. package/dist/diagrams/package-diagram.js +376 -0
  82. package/dist/diagrams/palette.js +85 -0
  83. package/dist/diagrams/relational-diagram.js +455 -0
  84. package/dist/diagrams/schemadoc-diagram.js +309 -0
  85. package/dist/diagrams/sequence-diagram.js +307 -0
  86. package/dist/diagrams/state-diagram.js +344 -0
  87. package/dist/diagrams/svg-dom.js +111 -0
  88. package/dist/diagrams/tree-diagram.js +250 -0
  89. package/dist/dialects/clickhouse/index.js +1742 -0
  90. package/dist/dialects/cockroachdb/index.js +4677 -0
  91. package/dist/dialects/cratedb/index.js +441 -0
  92. package/dist/dialects/databricks/index.js +517 -0
  93. package/dist/dialects/db2/index.js +2225 -0
  94. package/dist/dialects/dialect.js +720 -0
  95. package/dist/dialects/duckdb/index.js +2014 -0
  96. package/dist/dialects/exasol/index.js +357 -0
  97. package/dist/dialects/firebird/index.js +495 -0
  98. package/dist/dialects/greenplum/index.js +457 -0
  99. package/dist/dialects/hana/index.js +1741 -0
  100. package/dist/dialects/mariadb/index.js +3590 -0
  101. package/dist/dialects/mssql/index.js +2296 -0
  102. package/dist/dialects/mysql/index.js +4058 -0
  103. package/dist/dialects/oracle/index.js +2999 -0
  104. package/dist/dialects/postgres/index.js +5319 -0
  105. package/dist/dialects/query-stream-helper.js +152 -0
  106. package/dist/dialects/questdb/index.js +433 -0
  107. package/dist/dialects/redshift/index.js +2277 -0
  108. package/dist/dialects/singlestore/index.js +354 -0
  109. package/dist/dialects/snowflake/index.js +2082 -0
  110. package/dist/dialects/spanner/index.js +1768 -0
  111. package/dist/dialects/sqlite/index.js +3382 -0
  112. package/dist/dialects/tidb/index.js +377 -0
  113. package/dist/dialects/timescaledb/index.js +164 -0
  114. package/dist/dialects/trino/index.js +420 -0
  115. package/dist/dialects/turso/index.js +227 -0
  116. package/dist/dialects/vertica/index.js +317 -0
  117. package/dist/dialects/yugabytedb/index.js +424 -0
  118. package/dist/errors/index.js +472 -0
  119. package/dist/errors/utils.js +340 -0
  120. package/dist/errors.js +21 -0
  121. package/dist/extensions/catalog/cloud-warehouse-features.js +207 -0
  122. package/dist/extensions/catalog/mssql-features.js +147 -0
  123. package/dist/extensions/catalog/mysql-mariadb-plugins.js +229 -0
  124. package/dist/extensions/catalog/oracle-db2-features.js +196 -0
  125. package/dist/extensions/catalog/postgres-extensions.js +516 -0
  126. package/dist/extensions/index.js +71 -0
  127. package/dist/extensions/types.js +13 -0
  128. package/dist/foreign-data.js +173 -0
  129. package/dist/hooks/hooks-manager.js +350 -0
  130. package/dist/hooks/index.js +37 -0
  131. package/dist/index.js +463 -0
  132. package/dist/logging.js +335 -0
  133. package/dist/migrations/index.js +40 -0
  134. package/dist/migrations/migration.js +196 -0
  135. package/dist/migrations/migrator.js +411 -0
  136. package/dist/migrations/prormmigration.js +275 -0
  137. package/dist/migrations/query-interface.js +435 -0
  138. package/dist/migrations/seeder.js +353 -0
  139. package/dist/models/associations.js +852 -0
  140. package/dist/models/constraints.js +288 -0
  141. package/dist/models/data-types.js +2518 -0
  142. package/dist/models/decorators.js +445 -0
  143. package/dist/models/index.js +33 -0
  144. package/dist/models/indexes.js +531 -0
  145. package/dist/models/methods.js +382 -0
  146. package/dist/models/model-manager.js +103 -0
  147. package/dist/models/model.js +5349 -0
  148. package/dist/models/operators.js +67 -0
  149. package/dist/models/scopes.js +189 -0
  150. package/dist/models/typescript-types.js +26 -0
  151. package/dist/nosql/aerospike/index.js +205 -0
  152. package/dist/nosql/allegrograph/index.js +169 -0
  153. package/dist/nosql/arangodb/index.js +364 -0
  154. package/dist/nosql/azure-blob/index.js +206 -0
  155. package/dist/nosql/beanstalkd/index.js +231 -0
  156. package/dist/nosql/beequeue/index.js +210 -0
  157. package/dist/nosql/bigchaindb/index.js +195 -0
  158. package/dist/nosql/bigtable/index.js +224 -0
  159. package/dist/nosql/blazegraph/index.js +173 -0
  160. package/dist/nosql/bullmq/index.js +191 -0
  161. package/dist/nosql/cassandra/index.js +174 -0
  162. package/dist/nosql/chroma/index.js +190 -0
  163. package/dist/nosql/cloudflare-kv/index.js +220 -0
  164. package/dist/nosql/coherence/index.js +200 -0
  165. package/dist/nosql/cosmosdb/index.js +157 -0
  166. package/dist/nosql/couchbase/index.js +213 -0
  167. package/dist/nosql/dax/index.js +212 -0
  168. package/dist/nosql/deno-kv/index.js +206 -0
  169. package/dist/nosql/dgraph/index.js +171 -0
  170. package/dist/nosql/doris/index.js +169 -0
  171. package/dist/nosql/druid/index.js +162 -0
  172. package/dist/nosql/dynamodb/index.js +937 -0
  173. package/dist/nosql/elasticsearch/index.js +377 -0
  174. package/dist/nosql/etcd/index.js +502 -0
  175. package/dist/nosql/eventhubs/index.js +213 -0
  176. package/dist/nosql/eventstore/index.js +254 -0
  177. package/dist/nosql/faunadb/index.js +188 -0
  178. package/dist/nosql/firestore/index.js +177 -0
  179. package/dist/nosql/fluree/index.js +148 -0
  180. package/dist/nosql/fuseki/index.js +170 -0
  181. package/dist/nosql/gcs/index.js +172 -0
  182. package/dist/nosql/gearman/index.js +160 -0
  183. package/dist/nosql/geode/index.js +196 -0
  184. package/dist/nosql/graphdb/index.js +169 -0
  185. package/dist/nosql/graylog/index.js +188 -0
  186. package/dist/nosql/gridgain/index.js +171 -0
  187. package/dist/nosql/hazelcast/index.js +162 -0
  188. package/dist/nosql/hbase/index.js +230 -0
  189. package/dist/nosql/ignite/index.js +173 -0
  190. package/dist/nosql/immudb/index.js +184 -0
  191. package/dist/nosql/index.js +232 -0
  192. package/dist/nosql/infinispan/index.js +200 -0
  193. package/dist/nosql/influxdb/index.js +0 -0
  194. package/dist/nosql/kafka/index.js +234 -0
  195. package/dist/nosql/keyspaces/index.js +189 -0
  196. package/dist/nosql/kinesis/index.js +253 -0
  197. package/dist/nosql/leveldb/index.js +153 -0
  198. package/dist/nosql/lmdb/index.js +160 -0
  199. package/dist/nosql/loki/index.js +201 -0
  200. package/dist/nosql/marklogic/index.js +204 -0
  201. package/dist/nosql/materialize/index.js +145 -0
  202. package/dist/nosql/meilisearch/index.js +154 -0
  203. package/dist/nosql/memcached/index.js +223 -0
  204. package/dist/nosql/milvus/index.js +410 -0
  205. package/dist/nosql/minio/index.js +265 -0
  206. package/dist/nosql/momento/index.js +179 -0
  207. package/dist/nosql/mongodb/index.js +461 -0
  208. package/dist/nosql/nats/index.js +247 -0
  209. package/dist/nosql/nedb/index.js +164 -0
  210. package/dist/nosql/neo4j/index.js +450 -0
  211. package/dist/nosql/neptune/index.js +470 -0
  212. package/dist/nosql/nsq/index.js +200 -0
  213. package/dist/nosql/opensearch/index.js +186 -0
  214. package/dist/nosql/orientdb/index.js +175 -0
  215. package/dist/nosql/papertrail/index.js +200 -0
  216. package/dist/nosql/pinecone/index.js +0 -0
  217. package/dist/nosql/pinot/index.js +133 -0
  218. package/dist/nosql/pouchdb/index.js +172 -0
  219. package/dist/nosql/prometheus/index.js +174 -0
  220. package/dist/nosql/provendb/index.js +147 -0
  221. package/dist/nosql/pubsub/index.js +187 -0
  222. package/dist/nosql/pulsar/index.js +232 -0
  223. package/dist/nosql/qdrant/index.js +295 -0
  224. package/dist/nosql/qldb/index.js +192 -0
  225. package/dist/nosql/r2/index.js +281 -0
  226. package/dist/nosql/rabbitmq/index.js +237 -0
  227. package/dist/nosql/ravendb/index.js +175 -0
  228. package/dist/nosql/redis/index.js +607 -0
  229. package/dist/nosql/redpanda/index.js +237 -0
  230. package/dist/nosql/resque/index.js +203 -0
  231. package/dist/nosql/rethinkdb/index.js +232 -0
  232. package/dist/nosql/rocksdb/index.js +152 -0
  233. package/dist/nosql/rockset/index.js +126 -0
  234. package/dist/nosql/s3/index.js +298 -0
  235. package/dist/nosql/scylladb/index.js +178 -0
  236. package/dist/nosql/signoz/index.js +227 -0
  237. package/dist/nosql/sns/index.js +201 -0
  238. package/dist/nosql/solr/index.js +231 -0
  239. package/dist/nosql/splunk/index.js +227 -0
  240. package/dist/nosql/sqs/index.js +246 -0
  241. package/dist/nosql/stardog/index.js +169 -0
  242. package/dist/nosql/starrocks/index.js +170 -0
  243. package/dist/nosql/store.js +2 -0
  244. package/dist/nosql/sumologic/index.js +213 -0
  245. package/dist/nosql/surrealdb/index.js +179 -0
  246. package/dist/nosql/terminusdb/index.js +151 -0
  247. package/dist/nosql/tigergraph/index.js +469 -0
  248. package/dist/nosql/typesense/index.js +148 -0
  249. package/dist/nosql/unqlite/index.js +157 -0
  250. package/dist/nosql/upstash/index.js +167 -0
  251. package/dist/nosql/vercel-kv/index.js +166 -0
  252. package/dist/nosql/victoriametrics/index.js +213 -0
  253. package/dist/nosql/virtuoso/index.js +169 -0
  254. package/dist/nosql/weaviate/index.js +276 -0
  255. package/dist/operators/index.js +108 -0
  256. package/dist/operators.js +2690 -0
  257. package/dist/prisma-migrate/index.js +38 -0
  258. package/dist/prisma-migrate/migration-generator.js +125 -0
  259. package/dist/prisma-migrate/model-generator.js +172 -0
  260. package/dist/prisma-migrate/relations.js +100 -0
  261. package/dist/prisma-migrate/schema-parser.js +167 -0
  262. package/dist/prisma-migrate/type-mapper.js +40 -0
  263. package/dist/prorm.js +6832 -0
  264. package/dist/query-builders/cte-builder.js +80 -0
  265. package/dist/query-builders/functions/aggregate.js +390 -0
  266. package/dist/query-builders/functions/conditional.js +503 -0
  267. package/dist/query-builders/functions/datetime.js +695 -0
  268. package/dist/query-builders/functions/fulltext.js +439 -0
  269. package/dist/query-builders/functions/index.js +93 -0
  270. package/dist/query-builders/functions/json.js +427 -0
  271. package/dist/query-builders/functions/math.js +399 -0
  272. package/dist/query-builders/functions/string.js +518 -0
  273. package/dist/query-builders/functions/window.js +328 -0
  274. package/dist/query-builders/include-builder.js +323 -0
  275. package/dist/query-builders/index-expression-builder.js +242 -0
  276. package/dist/query-builders/index.js +161 -0
  277. package/dist/query-builders/insert-builder.js +164 -0
  278. package/dist/query-builders/model-helpers.js +38 -0
  279. package/dist/query-builders/order-limit-builder.js +239 -0
  280. package/dist/query-builders/sql-compiler.js +2040 -0
  281. package/dist/query-builders/subquery-builder.js +152 -0
  282. package/dist/query-builders/update-builder.js +182 -0
  283. package/dist/query-builders/view-builder.js +218 -0
  284. package/dist/query-builders/where-builder.js +1532 -0
  285. package/dist/query-interface.js +622 -0
  286. package/dist/query-optimizers/batch-optimizer.js +426 -0
  287. package/dist/query-optimizers/explain-plans.js +415 -0
  288. package/dist/query-optimizers/index.js +51 -0
  289. package/dist/query-optimizers/prepared-statement-cache.js +423 -0
  290. package/dist/query-optimizers/query-hints.js +438 -0
  291. package/dist/query-optimizers/query-optimizer.js +278 -0
  292. package/dist/query-optimizers/slow-query-logger.js +271 -0
  293. package/dist/replica-manager.js +507 -0
  294. package/dist/schema/index.js +15 -0
  295. package/dist/schema/migration-generator.js +374 -0
  296. package/dist/schema/schema-differ.js +549 -0
  297. package/dist/schema/types.js +6 -0
  298. package/dist/sql-constants.js +300 -0
  299. package/dist/sqlite-advanced.js +1047 -0
  300. package/dist/streams/index.js +12 -0
  301. package/dist/streams/transforms.js +178 -0
  302. package/dist/transaction.js +456 -0
  303. package/dist/types/index.js +180 -0
  304. package/dist/user-management.js +127 -0
  305. package/dist/utils/date.js +300 -0
  306. package/dist/utils/index.js +1079 -0
  307. package/dist/utils/string.js +161 -0
  308. package/dist/validators/index.js +19 -0
  309. package/dist/validators/validator.js +911 -0
  310. package/package.json +190 -0
@@ -0,0 +1,445 @@
1
+ "use strict";
2
+ /**
3
+ * Model Decorators for TypeScript
4
+ *
5
+ * Provides decorators for defining models:
6
+ * - @Table - Configure table options
7
+ * - @Attribute - Define a column attribute
8
+ * - @PrimaryKey - Mark as primary key
9
+ * - @AutoIncrement - Enable auto-increment
10
+ * - @NotNull - Add NOT NULL constraint
11
+ * - @Default - Set default value
12
+ * - @Unique - Add UNIQUE constraint
13
+ * - @Comment - Add column comment
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.Table = Table;
17
+ exports.Attribute = Attribute;
18
+ exports.Column = Column;
19
+ exports.AllowNull = AllowNull;
20
+ exports.PrimaryKey = PrimaryKey;
21
+ exports.AutoIncrement = AutoIncrement;
22
+ exports.NotNull = NotNull;
23
+ exports.Default = Default;
24
+ exports.Unique = Unique;
25
+ exports.Comment = Comment;
26
+ exports.HasOne = HasOne;
27
+ exports.HasMany = HasMany;
28
+ exports.BelongsTo = BelongsTo;
29
+ exports.BelongsToMany = BelongsToMany;
30
+ exports.getModelMetadata = getModelMetadata;
31
+ exports.getAttributeMetadata = getAttributeMetadata;
32
+ exports.getAssociationMetadata = getAssociationMetadata;
33
+ exports.getModelAttributes = getModelAttributes;
34
+ exports.clearMetadata = clearMetadata;
35
+ /**
36
+ * @example
37
+ * ```typescript
38
+ * import { Model, DataTypes, InferAttributes, InferCreationAttributes } from 'orm';
39
+ * import { Table, Attribute, PrimaryKey, AutoIncrement, NotNull, Default } from 'orm/decorators';
40
+ *
41
+ * @Table({ tableName: 'users', timestamps: true })
42
+ * export class User extends Model<InferAttributes<User>, InferCreationAttributes<User>> {
43
+ * @Attribute(DataTypes.INTEGER)
44
+ * @PrimaryKey
45
+ * @AutoIncrement
46
+ * declare id: number;
47
+ *
48
+ * @Attribute(DataTypes.STRING)
49
+ * @NotNull
50
+ * declare name: string;
51
+ *
52
+ * @Attribute(DataTypes.DATE)
53
+ * @Default(DataTypes.NOW)
54
+ * declare createdAt: Date;
55
+ * }
56
+ * ```
57
+ */
58
+ const data_types_1 = require("./data-types");
59
+ // ==================== Metadata Storage ====================
60
+ /**
61
+ * Storage for model and attribute metadata
62
+ */
63
+ const modelMetadata = new Map();
64
+ const attributeMetadata = new Map();
65
+ const associationMetadata = new Map();
66
+ // ==================== Decorators ====================
67
+ /**
68
+ * Define model options (use on model class)
69
+ *
70
+ * @example
71
+ * @Table({ tableName: 'users', timestamps: true })
72
+ */
73
+ function Table(options = {}) {
74
+ return function (target) {
75
+ const modelName = target.name;
76
+ modelMetadata.set(modelName, {
77
+ tableName: options.tableName,
78
+ schema: options.schema,
79
+ schemaDelimiter: options.schemaDelimiter,
80
+ modelName: options.modelName,
81
+ timestamps: options.timestamps,
82
+ createdAt: options.createdAt,
83
+ updatedAt: options.updatedAt,
84
+ deletedAt: options.deletedAt,
85
+ underscored: options.underscored,
86
+ freezeTableName: options.freezeTableName,
87
+ hooks: options.hooks,
88
+ indexes: options.indexes,
89
+ comment: options.comment,
90
+ collate: options.collate,
91
+ primaryKey: options.primaryKey,
92
+ // Prorm also treats an explicit `paranoid: true` (independent of `deletedAt`)
93
+ // as enabling soft-deletes; capture it so callers (Prorm.addModel) can honor it.
94
+ paranoid: options.paranoid,
95
+ defaultScope: options.defaultScope,
96
+ scopes: options.scopes,
97
+ validate: options.validate,
98
+ name: options.name,
99
+ getterMethods: options.getterMethods,
100
+ setterMethods: options.setterMethods,
101
+ version: options.version,
102
+ });
103
+ return target;
104
+ };
105
+ }
106
+ /**
107
+ * Define a model attribute/column
108
+ *
109
+ * @example
110
+ * @Attribute(DataTypes.STRING)
111
+ * @Attribute(DataTypes.INTEGER)
112
+ */
113
+ function Attribute(type) {
114
+ return function (target, propertyKey) {
115
+ const modelName = target.constructor?.name;
116
+ if (!modelName)
117
+ return;
118
+ if (!attributeMetadata.has(modelName)) {
119
+ attributeMetadata.set(modelName, new Map());
120
+ }
121
+ const attrs = attributeMetadata.get(modelName);
122
+ const fieldName = String(propertyKey);
123
+ attrs.set(fieldName, {
124
+ type,
125
+ allowNull: true,
126
+ });
127
+ };
128
+ }
129
+ /**
130
+ * Column decorator - alias for Attribute
131
+ */
132
+ function Column(type) {
133
+ return Attribute(type);
134
+ }
135
+ /**
136
+ * AllowNull decorator - mark attribute as nullable (default)
137
+ */
138
+ function AllowNull(allowNull = true) {
139
+ return function (target, propertyKey) {
140
+ const modelName = target.constructor?.name;
141
+ if (!modelName)
142
+ return;
143
+ const attrs = attributeMetadata.get(modelName);
144
+ if (attrs) {
145
+ const fieldName = String(propertyKey);
146
+ const attr = attrs.get(fieldName);
147
+ if (attr) {
148
+ attr.allowNull = allowNull;
149
+ }
150
+ }
151
+ };
152
+ }
153
+ /**
154
+ * Mark attribute as primary key
155
+ *
156
+ * @example
157
+ * @Attribute(DataTypes.INTEGER)
158
+ * @PrimaryKey
159
+ */
160
+ function PrimaryKey() {
161
+ return function (target, propertyKey) {
162
+ const modelName = target.constructor?.name;
163
+ if (!modelName)
164
+ return;
165
+ const attrs = attributeMetadata.get(modelName);
166
+ if (attrs) {
167
+ const fieldName = String(propertyKey);
168
+ let attr = attrs.get(fieldName);
169
+ if (!attr) {
170
+ attr = { type: data_types_1.DataTypes.INTEGER() };
171
+ attrs.set(fieldName, attr);
172
+ }
173
+ attr.primaryKey = true;
174
+ attr.allowNull = false;
175
+ }
176
+ };
177
+ }
178
+ /**
179
+ * Enable auto-increment on attribute
180
+ *
181
+ * @example
182
+ * @Attribute(DataTypes.INTEGER)
183
+ * @AutoIncrement
184
+ */
185
+ function AutoIncrement() {
186
+ return function (target, propertyKey) {
187
+ const modelName = target.constructor?.name;
188
+ if (!modelName)
189
+ return;
190
+ const attrs = attributeMetadata.get(modelName);
191
+ if (attrs) {
192
+ const fieldName = String(propertyKey);
193
+ const attr = attrs.get(fieldName);
194
+ if (attr) {
195
+ attr.autoIncrement = true;
196
+ }
197
+ }
198
+ };
199
+ }
200
+ /**
201
+ * Add NOT NULL constraint
202
+ *
203
+ * @example
204
+ * @Attribute(DataTypes.STRING)
205
+ * @NotNull
206
+ */
207
+ function NotNull() {
208
+ return function (target, propertyKey) {
209
+ const modelName = target.constructor?.name;
210
+ if (!modelName)
211
+ return;
212
+ const attrs = attributeMetadata.get(modelName);
213
+ if (attrs) {
214
+ const fieldName = String(propertyKey);
215
+ const attr = attrs.get(fieldName);
216
+ if (attr) {
217
+ attr.notNull = true;
218
+ attr.allowNull = false;
219
+ }
220
+ }
221
+ };
222
+ }
223
+ /**
224
+ * Set default value
225
+ *
226
+ * @example
227
+ * @Default('value')
228
+ * @Default(DataTypes.NOW)
229
+ * @Default(() => Math.random())
230
+ */
231
+ function Default(value) {
232
+ return function (target, propertyKey) {
233
+ const modelName = target.constructor?.name;
234
+ if (!modelName)
235
+ return;
236
+ const attrs = attributeMetadata.get(modelName);
237
+ if (attrs) {
238
+ const fieldName = String(propertyKey);
239
+ const attr = attrs.get(fieldName);
240
+ if (attr) {
241
+ attr.defaultValue = value;
242
+ }
243
+ }
244
+ };
245
+ }
246
+ /**
247
+ * Add UNIQUE constraint
248
+ *
249
+ * @example
250
+ * @Unique
251
+ * @Unique('unique_name')
252
+ */
253
+ function Unique(nameOrOptions) {
254
+ return function (target, propertyKey) {
255
+ const modelName = target.constructor?.name;
256
+ if (!modelName)
257
+ return;
258
+ const attrs = attributeMetadata.get(modelName);
259
+ if (attrs) {
260
+ const fieldName = String(propertyKey);
261
+ const attr = attrs.get(fieldName);
262
+ if (attr) {
263
+ attr.unique = typeof nameOrOptions === 'string' ? nameOrOptions : true;
264
+ }
265
+ }
266
+ };
267
+ }
268
+ /**
269
+ * Add comment to column
270
+ *
271
+ * @example
272
+ * @Comment('User email address')
273
+ */
274
+ function Comment(text) {
275
+ return function (target, propertyKey) {
276
+ const modelName = target.constructor?.name;
277
+ if (!modelName)
278
+ return;
279
+ const attrs = attributeMetadata.get(modelName);
280
+ if (attrs) {
281
+ const fieldName = String(propertyKey);
282
+ const attr = attrs.get(fieldName);
283
+ if (attr) {
284
+ attr.comment = text;
285
+ }
286
+ }
287
+ };
288
+ }
289
+ // ==================== Association Decorators ====================
290
+ /**
291
+ * Define a hasOne association
292
+ *
293
+ * @example
294
+ * @HasOne(() => Profile)
295
+ * declare profile: HasOne<Profile>;
296
+ */
297
+ function HasOne(targetFn, options = {}) {
298
+ return function (target, propertyKey) {
299
+ const modelName = target.constructor?.name;
300
+ if (!modelName)
301
+ return;
302
+ if (!associationMetadata.has(modelName)) {
303
+ associationMetadata.set(modelName, []);
304
+ }
305
+ const fieldName = String(propertyKey);
306
+ associationMetadata.get(modelName).push({
307
+ type: 'hasOne',
308
+ propertyKey: fieldName,
309
+ target: targetFn,
310
+ as: options.as || fieldName,
311
+ foreignKey: options.foreignKey,
312
+ sourceKey: options.sourceKey,
313
+ onDelete: options.onDelete,
314
+ onUpdate: options.onUpdate,
315
+ hooks: options.hooks,
316
+ });
317
+ };
318
+ }
319
+ /**
320
+ * Define a hasMany association
321
+ *
322
+ * @example
323
+ * @HasMany(() => Post)
324
+ * declare posts: HasMany<Post>;
325
+ */
326
+ function HasMany(targetFn, options = {}) {
327
+ return function (target, propertyKey) {
328
+ const modelName = target.constructor?.name;
329
+ if (!modelName)
330
+ return;
331
+ if (!associationMetadata.has(modelName)) {
332
+ associationMetadata.set(modelName, []);
333
+ }
334
+ const fieldName = String(propertyKey);
335
+ associationMetadata.get(modelName).push({
336
+ type: 'hasMany',
337
+ propertyKey: fieldName,
338
+ target: targetFn,
339
+ as: options.as || fieldName,
340
+ foreignKey: options.foreignKey,
341
+ sourceKey: options.sourceKey,
342
+ onDelete: options.onDelete,
343
+ onUpdate: options.onUpdate,
344
+ hooks: options.hooks,
345
+ });
346
+ };
347
+ }
348
+ /**
349
+ * Define a belongsTo association
350
+ *
351
+ * @example
352
+ * @BelongsTo(() => User)
353
+ * declare user: BelongsTo<User>;
354
+ */
355
+ function BelongsTo(targetFn, options = {}) {
356
+ return function (target, propertyKey) {
357
+ const modelName = target.constructor?.name;
358
+ if (!modelName)
359
+ return;
360
+ if (!associationMetadata.has(modelName)) {
361
+ associationMetadata.set(modelName, []);
362
+ }
363
+ const fieldName = String(propertyKey);
364
+ associationMetadata.get(modelName).push({
365
+ type: 'belongsTo',
366
+ propertyKey: fieldName,
367
+ target: targetFn,
368
+ as: options.as || fieldName,
369
+ foreignKey: options.foreignKey,
370
+ targetKey: options.targetKey,
371
+ onDelete: options.onDelete,
372
+ onUpdate: options.onUpdate,
373
+ hooks: options.hooks,
374
+ });
375
+ };
376
+ }
377
+ /**
378
+ * Define a belongsToMany association
379
+ *
380
+ * @example
381
+ * @BelongsToMany(() => Role, { through: UserRole })
382
+ * declare roles: BelongsToMany<Role>;
383
+ */
384
+ function BelongsToMany(targetFn, options) {
385
+ return function (target, propertyKey) {
386
+ const modelName = target.constructor?.name;
387
+ if (!modelName)
388
+ return;
389
+ if (!associationMetadata.has(modelName)) {
390
+ associationMetadata.set(modelName, []);
391
+ }
392
+ const fieldName = String(propertyKey);
393
+ associationMetadata.get(modelName).push({
394
+ type: 'belongsToMany',
395
+ propertyKey: fieldName,
396
+ target: targetFn,
397
+ as: options.as || fieldName,
398
+ foreignKey: options.foreignKey,
399
+ otherKey: options.otherKey,
400
+ through: options.through,
401
+ onDelete: options.onDelete,
402
+ onUpdate: options.onUpdate,
403
+ hooks: options.hooks,
404
+ });
405
+ };
406
+ }
407
+ // ==================== Utility Functions ====================
408
+ /**
409
+ * Get model metadata
410
+ */
411
+ function getModelMetadata(modelName) {
412
+ return modelMetadata.get(modelName);
413
+ }
414
+ /**
415
+ * Get attribute metadata for a model
416
+ */
417
+ function getAttributeMetadata(modelName) {
418
+ return attributeMetadata.get(modelName);
419
+ }
420
+ /**
421
+ * Get association metadata (from @HasOne/@HasMany/@BelongsTo/@BelongsToMany)
422
+ * recorded for a model.
423
+ */
424
+ function getAssociationMetadata(modelName) {
425
+ return associationMetadata.get(modelName);
426
+ }
427
+ /**
428
+ * Extract all attributes from a model class
429
+ */
430
+ function getModelAttributes(model) {
431
+ const modelName = model.name;
432
+ const attrs = attributeMetadata.get(modelName);
433
+ if (!attrs) {
434
+ return {};
435
+ }
436
+ return Object.fromEntries(attrs);
437
+ }
438
+ /**
439
+ * Clear all metadata (useful for testing)
440
+ */
441
+ function clearMetadata() {
442
+ modelMetadata.clear();
443
+ attributeMetadata.clear();
444
+ associationMetadata.clear();
445
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * Models module exports
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.Model = exports.ModelManager = void 0;
21
+ __exportStar(require("./data-types"), exports);
22
+ __exportStar(require("./operators"), exports);
23
+ __exportStar(require("./model"), exports);
24
+ __exportStar(require("./associations"), exports);
25
+ __exportStar(require("./scopes"), exports);
26
+ var model_manager_1 = require("./model-manager");
27
+ Object.defineProperty(exports, "ModelManager", { enumerable: true, get: function () { return model_manager_1.ModelManager; } });
28
+ __exportStar(require("./scopes"), exports);
29
+ __exportStar(require("./model-manager"), exports);
30
+ __exportStar(require("./methods"), exports);
31
+ // Export the base Model class for decorator-based definitions
32
+ var model_1 = require("./model");
33
+ Object.defineProperty(exports, "Model", { enumerable: true, get: function () { return model_1.Model; } });