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,472 @@
1
+ "use strict";
2
+ /**
3
+ * Error classes for the ORM
4
+ * Provides structured error handling with error codes for programmatic handling
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.EmptyResultError = exports.AssociationError = exports.BulkRecordError = exports.ResourceLockedError = exports.TimeoutError = exports.ExclusionConstraintError = exports.ForeignKeyConstraintError = exports.UniqueConstraintError = exports.ValidationError = exports.DatabaseError = exports.ConnectionError = exports.PrormError = exports.ErrorCodes = void 0;
8
+ exports.isPrormError = isPrormError;
9
+ exports.isValidationError = isValidationError;
10
+ exports.isConnectionError = isConnectionError;
11
+ exports.isConstraintError = isConstraintError;
12
+ exports.isEmptyResultError = isEmptyResultError;
13
+ // Error code constants for programmatic error handling
14
+ exports.ErrorCodes = {
15
+ // Connection errors
16
+ CONNECTION_ERROR: 'CONNECTION_ERROR',
17
+ CONNECTION_REFUSED: 'CONNECTION_REFUSED',
18
+ CONNECTION_TIMED_OUT: 'CONNECTION_TIMED_OUT',
19
+ HOST_NOT_REACHABLE: 'HOST_NOT_REACHABLE',
20
+ INVALID_CONNECTION: 'INVALID_CONNECTION',
21
+ // Database errors
22
+ DATABASE_ERROR: 'DATABASE_ERROR',
23
+ QUERY_ERROR: 'QUERY_ERROR',
24
+ UNKNOWN: 'UNKNOWN',
25
+ // Validation errors
26
+ VALIDATION_ERROR: 'VALIDATION_ERROR',
27
+ VALIDATION_FAILED: 'VALIDATION_FAILED',
28
+ // Constraint errors
29
+ UNIQUE_CONSTRAINT_ERROR: 'UNIQUE_CONSTRAINT_ERROR',
30
+ FOREIGN_KEY_CONSTRAINT_ERROR: 'FOREIGN_KEY_CONSTRAINT_ERROR',
31
+ EXCLUSION_CONSTRAINT_ERROR: 'EXCLUSION_CONSTRAINT_ERROR',
32
+ CHECK_CONSTRAINT_ERROR: 'CHECK_CONSTRAINT_ERROR',
33
+ NOT_NULL_CONSTRAINT_ERROR: 'NOT_NULL_CONSTRAINT_ERROR',
34
+ // Resource errors
35
+ TIMEOUT_ERROR: 'TIMEOUT_ERROR',
36
+ RESOURCE_LOCKED_ERROR: 'RESOURCE_LOCKED_ERROR',
37
+ DEADLOCK_ERROR: 'DEADLOCK_ERROR',
38
+ // Bulk operation errors
39
+ BULK_RECORD_ERROR: 'BULK_RECORD_ERROR',
40
+ // Association errors
41
+ ASSOCIATION_ERROR: 'ASSOCIATION_ERROR',
42
+ EAGER_LOAD_ERROR: 'EAGER_LOAD_ERROR',
43
+ };
44
+ /**
45
+ * Base error class for all Prorm errors
46
+ */
47
+ class PrormError extends Error {
48
+ constructor(message, options = {}) {
49
+ super(message);
50
+ this.name = this.constructor.name;
51
+ this.code = options.code || exports.ErrorCodes.UNKNOWN;
52
+ this.parent = options.parent;
53
+ this.sql = options.sql;
54
+ this.metadata = options.metadata;
55
+ // Maintains proper stack trace for where our error was thrown (V8 engines)
56
+ if (Error.captureStackTrace) {
57
+ Error.captureStackTrace(this, PrormError);
58
+ }
59
+ }
60
+ /**
61
+ * Convert to JSON for serialization
62
+ */
63
+ toJSON() {
64
+ return {
65
+ name: this.name,
66
+ message: this.message,
67
+ code: this.code,
68
+ parent: this.parent?.message,
69
+ sql: this.sql,
70
+ metadata: this.metadata,
71
+ stack: this.stack,
72
+ };
73
+ }
74
+ }
75
+ exports.PrormError = PrormError;
76
+ /**
77
+ * Error for database connection issues
78
+ */
79
+ class ConnectionError extends PrormError {
80
+ constructor(message = 'Unable to connect to database', options = {}) {
81
+ super(message, {
82
+ code: options.code || exports.ErrorCodes.CONNECTION_ERROR,
83
+ parent: options.parent,
84
+ sql: options.sql,
85
+ metadata: {
86
+ database: options.database,
87
+ host: options.host,
88
+ },
89
+ });
90
+ this.database = options.database;
91
+ this.host = options.host;
92
+ this.name = 'ConnectionError';
93
+ if (Error.captureStackTrace) {
94
+ Error.captureStackTrace(this, ConnectionError);
95
+ }
96
+ }
97
+ /**
98
+ * Create a connection refused error
99
+ */
100
+ static refused(options = {}) {
101
+ return new ConnectionError('Connection refused', {
102
+ code: exports.ErrorCodes.CONNECTION_REFUSED,
103
+ ...options,
104
+ });
105
+ }
106
+ /**
107
+ * Create a connection timeout error
108
+ */
109
+ static timedOut(options = {}) {
110
+ return new ConnectionError('Connection timed out', {
111
+ code: exports.ErrorCodes.CONNECTION_TIMED_OUT,
112
+ ...options,
113
+ });
114
+ }
115
+ /**
116
+ * Create a host unreachable error
117
+ */
118
+ static unreachable(options = {}) {
119
+ return new ConnectionError('Database host not reachable', {
120
+ code: exports.ErrorCodes.HOST_NOT_REACHABLE,
121
+ ...options,
122
+ });
123
+ }
124
+ /**
125
+ * Create an invalid connection error
126
+ */
127
+ static invalid(options = {}) {
128
+ return new ConnectionError('Invalid connection configuration', {
129
+ code: exports.ErrorCodes.INVALID_CONNECTION,
130
+ ...options,
131
+ });
132
+ }
133
+ }
134
+ exports.ConnectionError = ConnectionError;
135
+ /**
136
+ * Error for general database errors
137
+ */
138
+ class DatabaseError extends PrormError {
139
+ constructor(message = 'Database error occurred', options = {}) {
140
+ super(message, {
141
+ code: options.code || exports.ErrorCodes.DATABASE_ERROR,
142
+ parent: options.parent,
143
+ sql: options.sql,
144
+ metadata: {
145
+ original: options.original,
146
+ },
147
+ });
148
+ this.original = options.original;
149
+ this.name = 'DatabaseError';
150
+ if (Error.captureStackTrace) {
151
+ Error.captureStackTrace(this, DatabaseError);
152
+ }
153
+ }
154
+ /**
155
+ * Create from a parent error
156
+ */
157
+ static from(parent, options = {}) {
158
+ return new DatabaseError(options.message || parent.message, {
159
+ code: exports.ErrorCodes.QUERY_ERROR,
160
+ parent,
161
+ sql: options.sql,
162
+ original: parent.message,
163
+ });
164
+ }
165
+ }
166
+ exports.DatabaseError = DatabaseError;
167
+ /**
168
+ * Error for validation failures
169
+ */
170
+ class ValidationError extends PrormError {
171
+ constructor(message = 'Validation error', errors = []) {
172
+ super(message, {
173
+ code: exports.ErrorCodes.VALIDATION_ERROR,
174
+ metadata: { errors },
175
+ });
176
+ this.errors = errors;
177
+ this.name = 'ValidationError';
178
+ if (Error.captureStackTrace) {
179
+ Error.captureStackTrace(this, ValidationError);
180
+ }
181
+ }
182
+ /**
183
+ * Get all validation error messages
184
+ */
185
+ getMessages() {
186
+ return this.errors.map((err) => err.message);
187
+ }
188
+ /**
189
+ * Get errors for a specific field
190
+ */
191
+ getFieldErrors(path) {
192
+ return this.errors.filter((err) => err.path === path);
193
+ }
194
+ }
195
+ exports.ValidationError = ValidationError;
196
+ /**
197
+ * Error for unique constraint violations
198
+ */
199
+ class UniqueConstraintError extends ValidationError {
200
+ constructor(message = 'Unique constraint violation', options = {}) {
201
+ super(message, options.errors || []);
202
+ this.fields = options.fields;
203
+ this.name = 'UniqueConstraintError';
204
+ if (Error.captureStackTrace) {
205
+ Error.captureStackTrace(this, UniqueConstraintError);
206
+ }
207
+ }
208
+ /**
209
+ * Create from database error
210
+ */
211
+ static from(parent, options = {}) {
212
+ const errorItem = {
213
+ message: parent.message || 'Unique constraint violation',
214
+ type: 'UNIQUE_CONSTRAINT_ERROR',
215
+ value: undefined,
216
+ };
217
+ return new UniqueConstraintError(options.message || 'Unique constraint violation', {
218
+ errors: [errorItem],
219
+ fields: options.fields,
220
+ parent,
221
+ sql: options.sql,
222
+ });
223
+ }
224
+ }
225
+ exports.UniqueConstraintError = UniqueConstraintError;
226
+ /**
227
+ * Error for foreign key constraint violations
228
+ */
229
+ class ForeignKeyConstraintError extends PrormError {
230
+ constructor(message = 'Foreign key constraint violation', options = {}) {
231
+ super(message, {
232
+ code: options.code || exports.ErrorCodes.FOREIGN_KEY_CONSTRAINT_ERROR,
233
+ parent: options.parent,
234
+ sql: options.sql,
235
+ metadata: {
236
+ field: options.field,
237
+ table: options.table,
238
+ value: options.value,
239
+ },
240
+ });
241
+ this.field = options.field;
242
+ this.table = options.table;
243
+ this.value = options.value;
244
+ this.name = 'ForeignKeyConstraintError';
245
+ if (Error.captureStackTrace) {
246
+ Error.captureStackTrace(this, ForeignKeyConstraintError);
247
+ }
248
+ }
249
+ /**
250
+ * Create from database error
251
+ */
252
+ static from(parent, options = {}) {
253
+ return new ForeignKeyConstraintError('Foreign key constraint violation', {
254
+ field: options.field,
255
+ table: options.table,
256
+ value: options.value,
257
+ parent,
258
+ sql: options.sql,
259
+ });
260
+ }
261
+ }
262
+ exports.ForeignKeyConstraintError = ForeignKeyConstraintError;
263
+ /**
264
+ * Error for exclusion constraint violations
265
+ */
266
+ class ExclusionConstraintError extends PrormError {
267
+ constructor(message = 'Exclusion constraint violation', options = {}) {
268
+ super(message, {
269
+ code: exports.ErrorCodes.EXCLUSION_CONSTRAINT_ERROR,
270
+ parent: options.parent,
271
+ sql: options.sql,
272
+ metadata: {
273
+ constraint: options.constraint,
274
+ },
275
+ });
276
+ this.constraint = options.constraint;
277
+ this.name = 'ExclusionConstraintError';
278
+ if (Error.captureStackTrace) {
279
+ Error.captureStackTrace(this, ExclusionConstraintError);
280
+ }
281
+ }
282
+ }
283
+ exports.ExclusionConstraintError = ExclusionConstraintError;
284
+ /**
285
+ * Error for query timeout
286
+ */
287
+ class TimeoutError extends PrormError {
288
+ constructor(message = 'Query timeout', options = {}) {
289
+ super(message, {
290
+ code: exports.ErrorCodes.TIMEOUT_ERROR,
291
+ parent: options.parent,
292
+ sql: options.sql,
293
+ metadata: {
294
+ timeout: options.timeout,
295
+ },
296
+ });
297
+ this.timeout = options.timeout || 0;
298
+ this.name = 'TimeoutError';
299
+ if (Error.captureStackTrace) {
300
+ Error.captureStackTrace(this, TimeoutError);
301
+ }
302
+ }
303
+ }
304
+ exports.TimeoutError = TimeoutError;
305
+ /**
306
+ * Error for resource locked
307
+ */
308
+ class ResourceLockedError extends PrormError {
309
+ constructor(message = 'Resource is locked', options = {}) {
310
+ super(message, {
311
+ code: exports.ErrorCodes.RESOURCE_LOCKED_ERROR,
312
+ parent: options.parent,
313
+ sql: options.sql,
314
+ metadata: {
315
+ resource: options.resource,
316
+ },
317
+ });
318
+ this.resource = options.resource;
319
+ this.name = 'ResourceLockedError';
320
+ if (Error.captureStackTrace) {
321
+ Error.captureStackTrace(this, ResourceLockedError);
322
+ }
323
+ }
324
+ }
325
+ exports.ResourceLockedError = ResourceLockedError;
326
+ /**
327
+ * Error for bulk operation failures
328
+ */
329
+ class BulkRecordError extends PrormError {
330
+ constructor(message = 'Bulk operation error', options = {}) {
331
+ super(message, {
332
+ code: exports.ErrorCodes.BULK_RECORD_ERROR,
333
+ parent: options.parent,
334
+ sql: options.sql,
335
+ metadata: {
336
+ errorCount: options.errors?.length || 0,
337
+ },
338
+ });
339
+ this.errors = options.errors || [];
340
+ this.name = 'BulkRecordError';
341
+ if (Error.captureStackTrace) {
342
+ Error.captureStackTrace(this, BulkRecordError);
343
+ }
344
+ }
345
+ /**
346
+ * Get total number of errors
347
+ */
348
+ get errorCount() {
349
+ return this.errors.length;
350
+ }
351
+ /**
352
+ * Get all error messages
353
+ */
354
+ getMessages() {
355
+ return this.errors.map((err) => {
356
+ const errorMsg = typeof err.error === 'string' ? err.error : err.error.message;
357
+ return `Record ${err.index}: ${errorMsg}`;
358
+ });
359
+ }
360
+ }
361
+ exports.BulkRecordError = BulkRecordError;
362
+ /**
363
+ * Error for association errors
364
+ */
365
+ class AssociationError extends PrormError {
366
+ constructor(message = 'Association error', options = {}) {
367
+ super(message, {
368
+ code: exports.ErrorCodes.ASSOCIATION_ERROR,
369
+ parent: options.parent,
370
+ metadata: {
371
+ association: options.association,
372
+ },
373
+ });
374
+ this.association = options.association;
375
+ this.name = 'AssociationError';
376
+ if (Error.captureStackTrace) {
377
+ Error.captureStackTrace(this, AssociationError);
378
+ }
379
+ }
380
+ }
381
+ exports.AssociationError = AssociationError;
382
+ /**
383
+ * Error when no results are found but results were expected
384
+ */
385
+ class EmptyResultError extends PrormError {
386
+ constructor(message = 'No results found', options = {}) {
387
+ super(message, {
388
+ code: exports.ErrorCodes.UNKNOWN,
389
+ parent: options.parent,
390
+ metadata: {
391
+ model: options.model,
392
+ primaryKey: options.primaryKey,
393
+ where: options.where,
394
+ },
395
+ });
396
+ this.model = options.model;
397
+ this.primaryKey = options.primaryKey;
398
+ this.where = options.where;
399
+ this.name = 'EmptyResultError';
400
+ if (Error.captureStackTrace) {
401
+ Error.captureStackTrace(this, EmptyResultError);
402
+ }
403
+ }
404
+ /**
405
+ * Get a descriptive message for the error
406
+ */
407
+ getMessage() {
408
+ if (this.model && this.primaryKey !== undefined) {
409
+ return `Instance with ${this.model} and primary key ${JSON.stringify(this.primaryKey)} not found`;
410
+ }
411
+ if (this.model) {
412
+ return `No instance with the provided criteria found in ${this.model}`;
413
+ }
414
+ return this.message;
415
+ }
416
+ }
417
+ exports.EmptyResultError = EmptyResultError;
418
+ /**
419
+ * Type guard to check if error is a Prorm error
420
+ */
421
+ function isPrormError(error) {
422
+ return error instanceof PrormError;
423
+ }
424
+ /**
425
+ * Type guard to check if error is a ValidationError
426
+ */
427
+ function isValidationError(error) {
428
+ return error instanceof ValidationError;
429
+ }
430
+ /**
431
+ * Type guard to check if error is a ConnectionError
432
+ */
433
+ function isConnectionError(error) {
434
+ return error instanceof ConnectionError;
435
+ }
436
+ /**
437
+ * Type guard to check if error is a constraint error
438
+ */
439
+ function isConstraintError(error) {
440
+ return (error instanceof UniqueConstraintError ||
441
+ error instanceof ForeignKeyConstraintError ||
442
+ error instanceof ExclusionConstraintError);
443
+ }
444
+ /**
445
+ * Type guard to check if error is an EmptyResultError
446
+ */
447
+ function isEmptyResultError(error) {
448
+ return error instanceof EmptyResultError;
449
+ }
450
+ /**
451
+ * Export all error classes
452
+ */
453
+ exports.default = {
454
+ PrormError,
455
+ ConnectionError,
456
+ DatabaseError,
457
+ ValidationError,
458
+ UniqueConstraintError,
459
+ ForeignKeyConstraintError,
460
+ ExclusionConstraintError,
461
+ TimeoutError,
462
+ ResourceLockedError,
463
+ BulkRecordError,
464
+ AssociationError,
465
+ EmptyResultError,
466
+ ErrorCodes: exports.ErrorCodes,
467
+ isPrormError,
468
+ isValidationError,
469
+ isConnectionError,
470
+ isConstraintError,
471
+ isEmptyResultError,
472
+ };