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.
- package/CHANGELOG.md +1111 -0
- package/LICENSE +21 -0
- package/README.md +573 -0
- package/dist/audit/history-query.js +180 -0
- package/dist/audit/index.js +23 -0
- package/dist/audit/logger.js +236 -0
- package/dist/cache/cache-manager.js +84 -0
- package/dist/cache/index.js +16 -0
- package/dist/cache/redis-cluster-cache.js +557 -0
- package/dist/cli.js +2200 -0
- package/dist/compliance/audit-trail.js +68 -0
- package/dist/compliance/backup-verification.js +685 -0
- package/dist/compliance/breach-detector.js +505 -0
- package/dist/compliance/consent-record.js +227 -0
- package/dist/compliance/consent-versioning.js +331 -0
- package/dist/compliance/cross-border-log.js +530 -0
- package/dist/compliance/data-classifier.js +258 -0
- package/dist/compliance/data-lineage.js +565 -0
- package/dist/compliance/data-masker.js +303 -0
- package/dist/compliance/data-portability.js +265 -0
- package/dist/compliance/data-retention.js +195 -0
- package/dist/compliance/dsar-workflow.js +342 -0
- package/dist/compliance/field-encryption.js +223 -0
- package/dist/compliance/immutable-record.js +148 -0
- package/dist/compliance/index.js +260 -0
- package/dist/compliance/privacy-impact-assessment.js +364 -0
- package/dist/compliance/pseudonymization.js +269 -0
- package/dist/compliance/query-firewall.js +1182 -0
- package/dist/compliance/rate-limiter.js +580 -0
- package/dist/compliance/right-to-erasure.js +117 -0
- package/dist/compliance/row-level-security.js +246 -0
- package/dist/compliance/security-decorator.js +574 -0
- package/dist/compliance/security-monitor.js +525 -0
- package/dist/compliance/sensitive-data-discovery.js +476 -0
- package/dist/compliance/session-isolation.js +472 -0
- package/dist/compliance/tls-enforcer.js +108 -0
- package/dist/compliance/worm-storage.js +712 -0
- package/dist/connection-manager.js +198 -0
- package/dist/connection-pool.js +519 -0
- package/dist/decorators/audit.js +136 -0
- package/dist/decorators/belongs-to-many.js +115 -0
- package/dist/decorators/belongs-to.js +115 -0
- package/dist/decorators/check.js +435 -0
- package/dist/decorators/collate.js +329 -0
- package/dist/decorators/comment.js +205 -0
- package/dist/decorators/database-settings.js +236 -0
- package/dist/decorators/default.js +244 -0
- package/dist/decorators/encryption.js +235 -0
- package/dist/decorators/engine.js +97 -0
- package/dist/decorators/fk-constraints.js +594 -0
- package/dist/decorators/foreign-table.js +136 -0
- package/dist/decorators/generated.js +274 -0
- package/dist/decorators/has-many.js +127 -0
- package/dist/decorators/has-one.js +116 -0
- package/dist/decorators/hstore.js +129 -0
- package/dist/decorators/index.js +355 -0
- package/dist/decorators/json-column.js +83 -0
- package/dist/decorators/jsonb.js +101 -0
- package/dist/decorators/orm-decorators.js +425 -0
- package/dist/decorators/permissions.js +294 -0
- package/dist/decorators/procedure.js +210 -0
- package/dist/decorators/query-options.js +556 -0
- package/dist/decorators/range.js +167 -0
- package/dist/decorators/set-column.js +83 -0
- package/dist/decorators/spatial.js +114 -0
- package/dist/decorators/storage.js +580 -0
- package/dist/decorators/timezone.js +512 -0
- package/dist/decorators/trigger.js +90 -0
- package/dist/decorators/uuid.js +135 -0
- package/dist/decorators/view.js +258 -0
- package/dist/diagrams/chen-diagram.js +354 -0
- package/dist/diagrams/class-diagram.js +384 -0
- package/dist/diagrams/dependency-diagram.js +432 -0
- package/dist/diagrams/er-diagram.js +605 -0
- package/dist/diagrams/flow-diagram.js +394 -0
- package/dist/diagrams/gantt-diagram.js +411 -0
- package/dist/diagrams/index-diagram.js +353 -0
- package/dist/diagrams/index.js +184 -0
- package/dist/diagrams/migration-diagram.js +316 -0
- package/dist/diagrams/model-diagram.js +616 -0
- package/dist/diagrams/package-diagram.js +376 -0
- package/dist/diagrams/palette.js +85 -0
- package/dist/diagrams/relational-diagram.js +455 -0
- package/dist/diagrams/schemadoc-diagram.js +309 -0
- package/dist/diagrams/sequence-diagram.js +307 -0
- package/dist/diagrams/state-diagram.js +344 -0
- package/dist/diagrams/svg-dom.js +111 -0
- package/dist/diagrams/tree-diagram.js +250 -0
- package/dist/dialects/clickhouse/index.js +1742 -0
- package/dist/dialects/cockroachdb/index.js +4677 -0
- package/dist/dialects/cratedb/index.js +441 -0
- package/dist/dialects/databricks/index.js +517 -0
- package/dist/dialects/db2/index.js +2225 -0
- package/dist/dialects/dialect.js +720 -0
- package/dist/dialects/duckdb/index.js +2014 -0
- package/dist/dialects/exasol/index.js +357 -0
- package/dist/dialects/firebird/index.js +495 -0
- package/dist/dialects/greenplum/index.js +457 -0
- package/dist/dialects/hana/index.js +1741 -0
- package/dist/dialects/mariadb/index.js +3590 -0
- package/dist/dialects/mssql/index.js +2296 -0
- package/dist/dialects/mysql/index.js +4058 -0
- package/dist/dialects/oracle/index.js +2999 -0
- package/dist/dialects/postgres/index.js +5319 -0
- package/dist/dialects/query-stream-helper.js +152 -0
- package/dist/dialects/questdb/index.js +433 -0
- package/dist/dialects/redshift/index.js +2277 -0
- package/dist/dialects/singlestore/index.js +354 -0
- package/dist/dialects/snowflake/index.js +2082 -0
- package/dist/dialects/spanner/index.js +1768 -0
- package/dist/dialects/sqlite/index.js +3382 -0
- package/dist/dialects/tidb/index.js +377 -0
- package/dist/dialects/timescaledb/index.js +164 -0
- package/dist/dialects/trino/index.js +420 -0
- package/dist/dialects/turso/index.js +227 -0
- package/dist/dialects/vertica/index.js +317 -0
- package/dist/dialects/yugabytedb/index.js +424 -0
- package/dist/errors/index.js +472 -0
- package/dist/errors/utils.js +340 -0
- package/dist/errors.js +21 -0
- package/dist/extensions/catalog/cloud-warehouse-features.js +207 -0
- package/dist/extensions/catalog/mssql-features.js +147 -0
- package/dist/extensions/catalog/mysql-mariadb-plugins.js +229 -0
- package/dist/extensions/catalog/oracle-db2-features.js +196 -0
- package/dist/extensions/catalog/postgres-extensions.js +516 -0
- package/dist/extensions/index.js +71 -0
- package/dist/extensions/types.js +13 -0
- package/dist/foreign-data.js +173 -0
- package/dist/hooks/hooks-manager.js +350 -0
- package/dist/hooks/index.js +37 -0
- package/dist/index.js +463 -0
- package/dist/logging.js +335 -0
- package/dist/migrations/index.js +40 -0
- package/dist/migrations/migration.js +196 -0
- package/dist/migrations/migrator.js +411 -0
- package/dist/migrations/prormmigration.js +275 -0
- package/dist/migrations/query-interface.js +435 -0
- package/dist/migrations/seeder.js +353 -0
- package/dist/models/associations.js +852 -0
- package/dist/models/constraints.js +288 -0
- package/dist/models/data-types.js +2518 -0
- package/dist/models/decorators.js +445 -0
- package/dist/models/index.js +33 -0
- package/dist/models/indexes.js +531 -0
- package/dist/models/methods.js +382 -0
- package/dist/models/model-manager.js +103 -0
- package/dist/models/model.js +5349 -0
- package/dist/models/operators.js +67 -0
- package/dist/models/scopes.js +189 -0
- package/dist/models/typescript-types.js +26 -0
- package/dist/nosql/aerospike/index.js +205 -0
- package/dist/nosql/allegrograph/index.js +169 -0
- package/dist/nosql/arangodb/index.js +364 -0
- package/dist/nosql/azure-blob/index.js +206 -0
- package/dist/nosql/beanstalkd/index.js +231 -0
- package/dist/nosql/beequeue/index.js +210 -0
- package/dist/nosql/bigchaindb/index.js +195 -0
- package/dist/nosql/bigtable/index.js +224 -0
- package/dist/nosql/blazegraph/index.js +173 -0
- package/dist/nosql/bullmq/index.js +191 -0
- package/dist/nosql/cassandra/index.js +174 -0
- package/dist/nosql/chroma/index.js +190 -0
- package/dist/nosql/cloudflare-kv/index.js +220 -0
- package/dist/nosql/coherence/index.js +200 -0
- package/dist/nosql/cosmosdb/index.js +157 -0
- package/dist/nosql/couchbase/index.js +213 -0
- package/dist/nosql/dax/index.js +212 -0
- package/dist/nosql/deno-kv/index.js +206 -0
- package/dist/nosql/dgraph/index.js +171 -0
- package/dist/nosql/doris/index.js +169 -0
- package/dist/nosql/druid/index.js +162 -0
- package/dist/nosql/dynamodb/index.js +937 -0
- package/dist/nosql/elasticsearch/index.js +377 -0
- package/dist/nosql/etcd/index.js +502 -0
- package/dist/nosql/eventhubs/index.js +213 -0
- package/dist/nosql/eventstore/index.js +254 -0
- package/dist/nosql/faunadb/index.js +188 -0
- package/dist/nosql/firestore/index.js +177 -0
- package/dist/nosql/fluree/index.js +148 -0
- package/dist/nosql/fuseki/index.js +170 -0
- package/dist/nosql/gcs/index.js +172 -0
- package/dist/nosql/gearman/index.js +160 -0
- package/dist/nosql/geode/index.js +196 -0
- package/dist/nosql/graphdb/index.js +169 -0
- package/dist/nosql/graylog/index.js +188 -0
- package/dist/nosql/gridgain/index.js +171 -0
- package/dist/nosql/hazelcast/index.js +162 -0
- package/dist/nosql/hbase/index.js +230 -0
- package/dist/nosql/ignite/index.js +173 -0
- package/dist/nosql/immudb/index.js +184 -0
- package/dist/nosql/index.js +232 -0
- package/dist/nosql/infinispan/index.js +200 -0
- package/dist/nosql/influxdb/index.js +0 -0
- package/dist/nosql/kafka/index.js +234 -0
- package/dist/nosql/keyspaces/index.js +189 -0
- package/dist/nosql/kinesis/index.js +253 -0
- package/dist/nosql/leveldb/index.js +153 -0
- package/dist/nosql/lmdb/index.js +160 -0
- package/dist/nosql/loki/index.js +201 -0
- package/dist/nosql/marklogic/index.js +204 -0
- package/dist/nosql/materialize/index.js +145 -0
- package/dist/nosql/meilisearch/index.js +154 -0
- package/dist/nosql/memcached/index.js +223 -0
- package/dist/nosql/milvus/index.js +410 -0
- package/dist/nosql/minio/index.js +265 -0
- package/dist/nosql/momento/index.js +179 -0
- package/dist/nosql/mongodb/index.js +461 -0
- package/dist/nosql/nats/index.js +247 -0
- package/dist/nosql/nedb/index.js +164 -0
- package/dist/nosql/neo4j/index.js +450 -0
- package/dist/nosql/neptune/index.js +470 -0
- package/dist/nosql/nsq/index.js +200 -0
- package/dist/nosql/opensearch/index.js +186 -0
- package/dist/nosql/orientdb/index.js +175 -0
- package/dist/nosql/papertrail/index.js +200 -0
- package/dist/nosql/pinecone/index.js +0 -0
- package/dist/nosql/pinot/index.js +133 -0
- package/dist/nosql/pouchdb/index.js +172 -0
- package/dist/nosql/prometheus/index.js +174 -0
- package/dist/nosql/provendb/index.js +147 -0
- package/dist/nosql/pubsub/index.js +187 -0
- package/dist/nosql/pulsar/index.js +232 -0
- package/dist/nosql/qdrant/index.js +295 -0
- package/dist/nosql/qldb/index.js +192 -0
- package/dist/nosql/r2/index.js +281 -0
- package/dist/nosql/rabbitmq/index.js +237 -0
- package/dist/nosql/ravendb/index.js +175 -0
- package/dist/nosql/redis/index.js +607 -0
- package/dist/nosql/redpanda/index.js +237 -0
- package/dist/nosql/resque/index.js +203 -0
- package/dist/nosql/rethinkdb/index.js +232 -0
- package/dist/nosql/rocksdb/index.js +152 -0
- package/dist/nosql/rockset/index.js +126 -0
- package/dist/nosql/s3/index.js +298 -0
- package/dist/nosql/scylladb/index.js +178 -0
- package/dist/nosql/signoz/index.js +227 -0
- package/dist/nosql/sns/index.js +201 -0
- package/dist/nosql/solr/index.js +231 -0
- package/dist/nosql/splunk/index.js +227 -0
- package/dist/nosql/sqs/index.js +246 -0
- package/dist/nosql/stardog/index.js +169 -0
- package/dist/nosql/starrocks/index.js +170 -0
- package/dist/nosql/store.js +2 -0
- package/dist/nosql/sumologic/index.js +213 -0
- package/dist/nosql/surrealdb/index.js +179 -0
- package/dist/nosql/terminusdb/index.js +151 -0
- package/dist/nosql/tigergraph/index.js +469 -0
- package/dist/nosql/typesense/index.js +148 -0
- package/dist/nosql/unqlite/index.js +157 -0
- package/dist/nosql/upstash/index.js +167 -0
- package/dist/nosql/vercel-kv/index.js +166 -0
- package/dist/nosql/victoriametrics/index.js +213 -0
- package/dist/nosql/virtuoso/index.js +169 -0
- package/dist/nosql/weaviate/index.js +276 -0
- package/dist/operators/index.js +108 -0
- package/dist/operators.js +2690 -0
- package/dist/prisma-migrate/index.js +38 -0
- package/dist/prisma-migrate/migration-generator.js +125 -0
- package/dist/prisma-migrate/model-generator.js +172 -0
- package/dist/prisma-migrate/relations.js +100 -0
- package/dist/prisma-migrate/schema-parser.js +167 -0
- package/dist/prisma-migrate/type-mapper.js +40 -0
- package/dist/prorm.js +6832 -0
- package/dist/query-builders/cte-builder.js +80 -0
- package/dist/query-builders/functions/aggregate.js +390 -0
- package/dist/query-builders/functions/conditional.js +503 -0
- package/dist/query-builders/functions/datetime.js +695 -0
- package/dist/query-builders/functions/fulltext.js +439 -0
- package/dist/query-builders/functions/index.js +93 -0
- package/dist/query-builders/functions/json.js +427 -0
- package/dist/query-builders/functions/math.js +399 -0
- package/dist/query-builders/functions/string.js +518 -0
- package/dist/query-builders/functions/window.js +328 -0
- package/dist/query-builders/include-builder.js +323 -0
- package/dist/query-builders/index-expression-builder.js +242 -0
- package/dist/query-builders/index.js +161 -0
- package/dist/query-builders/insert-builder.js +164 -0
- package/dist/query-builders/model-helpers.js +38 -0
- package/dist/query-builders/order-limit-builder.js +239 -0
- package/dist/query-builders/sql-compiler.js +2040 -0
- package/dist/query-builders/subquery-builder.js +152 -0
- package/dist/query-builders/update-builder.js +182 -0
- package/dist/query-builders/view-builder.js +218 -0
- package/dist/query-builders/where-builder.js +1532 -0
- package/dist/query-interface.js +622 -0
- package/dist/query-optimizers/batch-optimizer.js +426 -0
- package/dist/query-optimizers/explain-plans.js +415 -0
- package/dist/query-optimizers/index.js +51 -0
- package/dist/query-optimizers/prepared-statement-cache.js +423 -0
- package/dist/query-optimizers/query-hints.js +438 -0
- package/dist/query-optimizers/query-optimizer.js +278 -0
- package/dist/query-optimizers/slow-query-logger.js +271 -0
- package/dist/replica-manager.js +507 -0
- package/dist/schema/index.js +15 -0
- package/dist/schema/migration-generator.js +374 -0
- package/dist/schema/schema-differ.js +549 -0
- package/dist/schema/types.js +6 -0
- package/dist/sql-constants.js +300 -0
- package/dist/sqlite-advanced.js +1047 -0
- package/dist/streams/index.js +12 -0
- package/dist/streams/transforms.js +178 -0
- package/dist/transaction.js +456 -0
- package/dist/types/index.js +180 -0
- package/dist/user-management.js +127 -0
- package/dist/utils/date.js +300 -0
- package/dist/utils/index.js +1079 -0
- package/dist/utils/string.js +161 -0
- package/dist/validators/index.js +19 -0
- package/dist/validators/validator.js +911 -0
- package/package.json +190 -0
package/dist/logging.js
ADDED
|
@@ -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
|
+
}
|