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,335 @@
1
+ "use strict";
2
+ /**
3
+ * Logging system for the ORM
4
+ * Provides configurable logging with different levels and custom logger support
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Logger = exports.LogLevelStrings = exports.LogLevel = void 0;
8
+ exports.createLogger = createLogger;
9
+ exports.createSilentLogger = createSilentLogger;
10
+ exports.getDefaultLogger = getDefaultLogger;
11
+ exports.setDefaultLogger = setDefaultLogger;
12
+ exports.resetDefaultLogger = resetDefaultLogger;
13
+ const events_1 = require("events");
14
+ /**
15
+ * Log levels
16
+ */
17
+ var LogLevel;
18
+ (function (LogLevel) {
19
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
20
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
21
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
22
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
23
+ LogLevel[LogLevel["QUIET"] = 4] = "QUIET";
24
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
25
+ /**
26
+ * Log level string mapping
27
+ */
28
+ exports.LogLevelStrings = {
29
+ debug: LogLevel.DEBUG,
30
+ info: LogLevel.INFO,
31
+ warn: LogLevel.WARN,
32
+ error: LogLevel.ERROR,
33
+ quiet: LogLevel.QUIET,
34
+ };
35
+ /**
36
+ * Logger class for the ORM
37
+ * Supports multiple log levels, custom loggers, and SQL query logging
38
+ */
39
+ class Logger extends events_1.EventEmitter {
40
+ constructor(options = {}) {
41
+ super();
42
+ this.level = LogLevel.INFO;
43
+ this.logSQL = false;
44
+ this.slowQueryThreshold = 1000; // 1 second default
45
+ this.logSlowQueries = true;
46
+ this.useColors = true;
47
+ if (options.level !== undefined) {
48
+ this.setLevel(options.level);
49
+ }
50
+ if (options.logSQL !== undefined) {
51
+ this.logSQL = options.logSQL;
52
+ }
53
+ if (options.slowQueryThreshold !== undefined) {
54
+ this.slowQueryThreshold = options.slowQueryThreshold;
55
+ }
56
+ if (options.logSlowQueries !== undefined) {
57
+ this.logSlowQueries = options.logSlowQueries;
58
+ }
59
+ if (options.logging !== undefined) {
60
+ this.customLogger = options.logging;
61
+ }
62
+ if (options.prormLogging !== undefined) {
63
+ this.prormLogger = options.prormLogging;
64
+ }
65
+ if (options.colors !== undefined) {
66
+ this.useColors = options.colors;
67
+ }
68
+ }
69
+ /**
70
+ * Set the minimum log level
71
+ */
72
+ setLevel(level) {
73
+ if (typeof level === 'string') {
74
+ this.level = exports.LogLevelStrings[level] ?? LogLevel.INFO;
75
+ }
76
+ else {
77
+ this.level = level;
78
+ }
79
+ }
80
+ /**
81
+ * Get the current log level
82
+ */
83
+ getLevel() {
84
+ return this.level;
85
+ }
86
+ /**
87
+ * Get the current log level name
88
+ */
89
+ getLevelName() {
90
+ return LogLevel[this.level];
91
+ }
92
+ /**
93
+ * Log a debug message
94
+ */
95
+ debug(message, meta) {
96
+ this.log(LogLevel.DEBUG, message, meta);
97
+ }
98
+ /**
99
+ * Log an info message
100
+ */
101
+ info(message, meta) {
102
+ this.log(LogLevel.INFO, message, meta);
103
+ }
104
+ /**
105
+ * Log a warning message
106
+ */
107
+ warn(message, meta) {
108
+ this.log(LogLevel.WARN, message, meta);
109
+ }
110
+ /**
111
+ * Log an error message
112
+ */
113
+ error(message, meta) {
114
+ this.log(LogLevel.ERROR, message, meta);
115
+ }
116
+ /**
117
+ * Core log method
118
+ */
119
+ log(level, message, meta) {
120
+ if (level < this.level)
121
+ return;
122
+ const entry = {
123
+ level,
124
+ levelName: LogLevel[level],
125
+ message,
126
+ timestamp: new Date(),
127
+ meta,
128
+ };
129
+ // Emit log event
130
+ this.emit('log', entry);
131
+ // Output to logger
132
+ this.output(level, message, meta);
133
+ }
134
+ /**
135
+ * Output log message
136
+ */
137
+ output(level, message, meta) {
138
+ const prefix = this.formatPrefix(level);
139
+ const metaStr = meta ? ` ${JSON.stringify(meta)}` : '';
140
+ const fullMessage = `${prefix}${message}${metaStr}`;
141
+ if (this.customLogger) {
142
+ // Use custom logger
143
+ const isDebug = level === LogLevel.DEBUG;
144
+ this.customLogger(fullMessage, isDebug);
145
+ }
146
+ else {
147
+ // Use default console logging
148
+ this.defaultOutput(level, fullMessage);
149
+ }
150
+ }
151
+ /**
152
+ * Default console output
153
+ */
154
+ defaultOutput(level, message) {
155
+ const color = this.getLevelColor(level);
156
+ const coloredMessage = this.useColors ? `${color}${message}${Logger.colors.reset}` : message;
157
+ switch (level) {
158
+ case LogLevel.DEBUG:
159
+ console.log(coloredMessage);
160
+ break;
161
+ case LogLevel.INFO:
162
+ console.log(coloredMessage);
163
+ break;
164
+ case LogLevel.WARN:
165
+ console.warn(coloredMessage);
166
+ break;
167
+ case LogLevel.ERROR:
168
+ console.error(coloredMessage);
169
+ break;
170
+ }
171
+ }
172
+ /**
173
+ * Get color for log level
174
+ */
175
+ getLevelColor(level) {
176
+ if (!this.useColors)
177
+ return '';
178
+ switch (level) {
179
+ case LogLevel.DEBUG:
180
+ return Logger.colors.gray;
181
+ case LogLevel.INFO:
182
+ return Logger.colors.blue;
183
+ case LogLevel.WARN:
184
+ return Logger.colors.yellow;
185
+ case LogLevel.ERROR:
186
+ return Logger.colors.red;
187
+ default:
188
+ return Logger.colors.reset;
189
+ }
190
+ }
191
+ /**
192
+ * Format log prefix
193
+ */
194
+ formatPrefix(level) {
195
+ const timestamp = new Date().toISOString();
196
+ const levelName = LogLevel[level].padEnd(5);
197
+ const color = this.getLevelColor(level);
198
+ const reset = this.useColors ? Logger.colors.reset : '';
199
+ return `[${timestamp}] ${color}${levelName}${reset}: `;
200
+ }
201
+ /**
202
+ * Log a SQL query with timing
203
+ */
204
+ logQuery(sql, duration) {
205
+ // Emit query event
206
+ this.emit('query', sql, duration || 0);
207
+ // Use Prorm-style logger if provided
208
+ if (this.prormLogger) {
209
+ this.prormLogger(sql, duration);
210
+ return;
211
+ }
212
+ // Log the SQL if enabled
213
+ if (this.logSQL && this.level <= LogLevel.DEBUG) {
214
+ this.debug(`Executing SQL: ${sql}`);
215
+ }
216
+ // Log slow queries
217
+ if (duration !== undefined && duration > this.slowQueryThreshold) {
218
+ const message = `Slow query (${duration}ms): ${sql}`;
219
+ if (this.logSlowQueries) {
220
+ this.warn(message);
221
+ }
222
+ this.emit('slowQuery', sql, duration);
223
+ }
224
+ }
225
+ /**
226
+ * Set whether to log SQL queries
227
+ */
228
+ setLogSQL(logSQL) {
229
+ this.logSQL = logSQL;
230
+ }
231
+ /**
232
+ * Set slow query threshold
233
+ */
234
+ setSlowQueryThreshold(threshold) {
235
+ this.slowQueryThreshold = threshold;
236
+ }
237
+ /**
238
+ * Check if logging is enabled for a level
239
+ */
240
+ isLevelEnabled(level) {
241
+ return level >= this.level;
242
+ }
243
+ /**
244
+ * Create a child logger with additional context
245
+ */
246
+ child(meta) {
247
+ const childLogger = new Logger({
248
+ level: this.level,
249
+ logSQL: this.logSQL,
250
+ slowQueryThreshold: this.slowQueryThreshold,
251
+ logSlowQueries: this.logSlowQueries,
252
+ logging: this.customLogger,
253
+ colors: this.useColors,
254
+ });
255
+ // Wrap the log method to include child metadata
256
+ const originalDebug = childLogger.debug.bind(childLogger);
257
+ const originalInfo = childLogger.info.bind(childLogger);
258
+ const originalWarn = childLogger.warn.bind(childLogger);
259
+ const originalError = childLogger.error.bind(childLogger);
260
+ childLogger.debug = (message, childMeta) => {
261
+ originalDebug(message, { ...meta, ...childMeta });
262
+ };
263
+ childLogger.info = (message, childMeta) => {
264
+ originalInfo(message, { ...meta, ...childMeta });
265
+ };
266
+ childLogger.warn = (message, childMeta) => {
267
+ originalWarn(message, { ...meta, ...childMeta });
268
+ };
269
+ childLogger.error = (message, childMeta) => {
270
+ originalError(message, { ...meta, ...childMeta });
271
+ };
272
+ return childLogger;
273
+ }
274
+ }
275
+ exports.Logger = Logger;
276
+ // ANSI color codes
277
+ Logger.colors = {
278
+ reset: '\x1b[0m',
279
+ bright: '\x1b[1m',
280
+ dim: '\x1b[2m',
281
+ red: '\x1b[31m',
282
+ yellow: '\x1b[33m',
283
+ blue: '\x1b[34m',
284
+ cyan: '\x1b[36m',
285
+ green: '\x1b[32m',
286
+ magenta: '\x1b[35m',
287
+ gray: '\x1b[90m',
288
+ };
289
+ /**
290
+ * Create a default logger instance
291
+ */
292
+ function createLogger(options = {}) {
293
+ return new Logger(options);
294
+ }
295
+ /**
296
+ * Create a no-op logger (for testing)
297
+ */
298
+ function createSilentLogger() {
299
+ return new Logger({ level: LogLevel.QUIET });
300
+ }
301
+ /**
302
+ * Default logger for Prorm
303
+ */
304
+ let defaultLogger = null;
305
+ /**
306
+ * Get or create the default logger
307
+ */
308
+ function getDefaultLogger(options = {}) {
309
+ if (!defaultLogger) {
310
+ defaultLogger = new Logger(options);
311
+ }
312
+ return defaultLogger;
313
+ }
314
+ /**
315
+ * Set the default logger
316
+ */
317
+ function setDefaultLogger(logger) {
318
+ defaultLogger = logger;
319
+ }
320
+ /**
321
+ * Reset the default logger
322
+ */
323
+ function resetDefaultLogger() {
324
+ defaultLogger = null;
325
+ }
326
+ exports.default = {
327
+ Logger,
328
+ LogLevel,
329
+ LogLevelStrings: exports.LogLevelStrings,
330
+ createLogger,
331
+ createSilentLogger,
332
+ getDefaultLogger,
333
+ setDefaultLogger,
334
+ resetDefaultLogger,
335
+ };
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Migration System - Main entry point for all migration-related exports
4
+ * Provides migration management capabilities for the TypeScript ORM
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.PrormMigration = exports.createQueryInterface = exports.QueryInterface = exports.createMigration = exports.createMigrator = exports.Migrator = exports.buildMigrationTemplate = exports.createMigrationTemplate = exports.Migration = void 0;
22
+ // Re-export Migration class and helpers
23
+ var migration_1 = require("./migration");
24
+ Object.defineProperty(exports, "Migration", { enumerable: true, get: function () { return migration_1.Migration; } });
25
+ Object.defineProperty(exports, "createMigrationTemplate", { enumerable: true, get: function () { return migration_1.createMigrationTemplate; } });
26
+ Object.defineProperty(exports, "buildMigrationTemplate", { enumerable: true, get: function () { return migration_1.buildMigrationTemplate; } });
27
+ // Re-export Migrator class
28
+ var migrator_1 = require("./migrator");
29
+ Object.defineProperty(exports, "Migrator", { enumerable: true, get: function () { return migrator_1.Migrator; } });
30
+ Object.defineProperty(exports, "createMigrator", { enumerable: true, get: function () { return migrator_1.createMigrator; } });
31
+ Object.defineProperty(exports, "createMigration", { enumerable: true, get: function () { return migrator_1.createMigration; } });
32
+ // Re-export QueryInterface for migrations
33
+ var query_interface_1 = require("./query-interface");
34
+ Object.defineProperty(exports, "QueryInterface", { enumerable: true, get: function () { return query_interface_1.QueryInterface; } });
35
+ Object.defineProperty(exports, "createQueryInterface", { enumerable: true, get: function () { return query_interface_1.createQueryInterface; } });
36
+ // Re-export PrormMigration integration
37
+ var prormmigration_1 = require("./prormmigration");
38
+ Object.defineProperty(exports, "PrormMigration", { enumerable: true, get: function () { return prormmigration_1.PrormMigration; } });
39
+ // Re-export Schema diffing and migration generation
40
+ __exportStar(require("../schema"), exports);
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ /**
3
+ * Migration class - Base class for all migrations
4
+ * Stores migration metadata including name, batch number, and timestamp
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Migration = void 0;
8
+ exports.buildMigrationTemplate = buildMigrationTemplate;
9
+ exports.createMigrationTemplate = createMigrationTemplate;
10
+ /**
11
+ * Migration class representing a single database migration
12
+ */
13
+ class Migration {
14
+ /**
15
+ * Create a new Migration instance
16
+ * @param options - Migration options
17
+ */
18
+ constructor(options) {
19
+ this.name = options.name;
20
+ this.timestamp = Date.now();
21
+ this.batch = 0;
22
+ this.migrationUp = options.up;
23
+ this.migrationDown = options.down;
24
+ }
25
+ /**
26
+ * Get the up migration function
27
+ */
28
+ get up() {
29
+ return this.migrationUp;
30
+ }
31
+ /**
32
+ * Get the down migration function
33
+ */
34
+ get down() {
35
+ return this.migrationDown;
36
+ }
37
+ /**
38
+ * Set the up migration function
39
+ */
40
+ setUp(up) {
41
+ this.migrationUp = up;
42
+ }
43
+ /**
44
+ * Set the down migration function
45
+ */
46
+ setDown(down) {
47
+ this.migrationDown = down;
48
+ }
49
+ /**
50
+ * Execute the migration (run up)
51
+ * @param queryInterface - The query interface to use
52
+ * @param prorm - The prorm instance
53
+ */
54
+ async runUp(queryInterface, prorm) {
55
+ if (this.migrationUp) {
56
+ await this.migrationUp(queryInterface, prorm);
57
+ }
58
+ }
59
+ /**
60
+ * Revert the migration (run down)
61
+ * @param queryInterface - The query interface to use
62
+ * @param prorm - The prorm instance
63
+ */
64
+ async runDown(queryInterface, prorm) {
65
+ if (this.migrationDown) {
66
+ await this.migrationDown(queryInterface, prorm);
67
+ }
68
+ }
69
+ /**
70
+ * Get migration metadata
71
+ */
72
+ getMeta() {
73
+ return {
74
+ id: this.id,
75
+ name: this.name,
76
+ timestamp: this.timestamp,
77
+ batch: this.batch,
78
+ };
79
+ }
80
+ /**
81
+ * Set migration metadata from database record
82
+ */
83
+ setMeta(meta) {
84
+ this.id = meta.id;
85
+ // Note: name and timestamp are intentionally not modified here
86
+ // as they represent the original migration definition
87
+ this.batch = meta.batch;
88
+ }
89
+ /**
90
+ * Check if migration has been executed
91
+ */
92
+ isExecuted() {
93
+ return this.id !== undefined;
94
+ }
95
+ /**
96
+ * Get a timestamp string for the migration name
97
+ */
98
+ static getTimestamp() {
99
+ const now = new Date();
100
+ const year = now.getFullYear();
101
+ const month = String(now.getMonth() + 1).padStart(2, '0');
102
+ const day = String(now.getDate()).padStart(2, '0');
103
+ const hours = String(now.getHours()).padStart(2, '0');
104
+ const minutes = String(now.getMinutes()).padStart(2, '0');
105
+ const seconds = String(now.getSeconds()).padStart(2, '0');
106
+ return `${year}${month}${day}${hours}${minutes}${seconds}`;
107
+ }
108
+ /**
109
+ * Generate a migration file name with timestamp
110
+ */
111
+ static generateFileName(name) {
112
+ return `${this.getTimestamp()}-${name}`;
113
+ }
114
+ /**
115
+ * Parse migration file name to extract timestamp and name
116
+ */
117
+ static parseFileName(filename) {
118
+ const match = filename.match(/^(\d{14})-(.+)$/);
119
+ if (match) {
120
+ return {
121
+ timestamp: match[1],
122
+ name: match[2],
123
+ };
124
+ }
125
+ return null;
126
+ }
127
+ }
128
+ exports.Migration = Migration;
129
+ /**
130
+ * The single canonical migration file template used by every migration
131
+ * generator in this codebase (Migrator.createMigration, MigrationCli.create,
132
+ * cli.ts migration:create). Produces a CommonJS `module.exports = { up, down }`
133
+ * file, which is the format `Migrator.loadMigrationFile()` requires via
134
+ * `require()` (for `.ts` files this is transpiled on the fly via ts-node).
135
+ *
136
+ * Keeping exactly one template in one place means the loader and the
137
+ * generator can never drift out of sync again.
138
+ */
139
+ function buildMigrationTemplate(name) {
140
+ return `/**
141
+ * Migration: ${name}
142
+ * Created at: ${new Date().toISOString()}
143
+ */
144
+
145
+ module.exports = {
146
+ up: async (queryInterface, prorm) => {
147
+ /**
148
+ * Add migration commands here
149
+ *
150
+ * Example:
151
+ * await queryInterface.createTable('users', {
152
+ * id: {
153
+ * type: Prorm.INTEGER,
154
+ * primaryKey: true,
155
+ * autoIncrement: true
156
+ * },
157
+ * name: {
158
+ * type: Prorm.STRING,
159
+ * allowNull: false
160
+ * },
161
+ * createdAt: {
162
+ * type: Prorm.DATE,
163
+ * allowNull: false,
164
+ * defaultValue: prorm.literal('CURRENT_TIMESTAMP')
165
+ * },
166
+ * updatedAt: {
167
+ * type: Prorm.DATE,
168
+ * allowNull: false,
169
+ * defaultValue: prorm.literal('CURRENT_TIMESTAMP')
170
+ * }
171
+ * });
172
+ */
173
+ },
174
+
175
+ down: async (queryInterface, prorm) => {
176
+ /**
177
+ * Add commands to revert migration here
178
+ *
179
+ * Example:
180
+ * await queryInterface.dropTable('users');
181
+ */
182
+ }
183
+ };
184
+ `;
185
+ }
186
+ /**
187
+ * @deprecated Use `buildMigrationTemplate` instead. This used to emit an
188
+ * ESM-style (`export const up = ...`) template that was incompatible with
189
+ * `Migrator.loadMigrationFile()`, which only ever loaded migrations via
190
+ * CommonJS `require()`. It now delegates to the canonical CommonJS template
191
+ * so any existing callers keep working, but new code should call
192
+ * `buildMigrationTemplate` directly.
193
+ */
194
+ function createMigrationTemplate(name) {
195
+ return buildMigrationTemplate(name);
196
+ }