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,180 @@
1
+ "use strict";
2
+ /**
3
+ * TypeScript interfaces for the Prorm-like ORM
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.QueryTypes = exports.IsolationLevel = exports.Transaction = exports.LockLevel = exports.ValidateOn = exports.SortDirection = exports.LoggingLevel = exports.ReferentialAction = void 0;
7
+ // ==================== Referential Actions ====================
8
+ /**
9
+ * Referential actions for foreign key constraints (onDelete / onUpdate).
10
+ *
11
+ * This enum is a companion to the existing string-literal unions used for
12
+ * `onDelete`/`onUpdate` fields (e.g. `'CASCADE' | 'RESTRICT' | ...`). Both
13
+ * forms are accepted wherever these fields appear, so existing string
14
+ * literals continue to work unchanged.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { ReferentialAction } from 'prorm';
19
+ *
20
+ * User.hasMany(Post, {
21
+ * foreignKey: 'userId',
22
+ * onDelete: ReferentialAction.Cascade,
23
+ * onUpdate: ReferentialAction.Cascade,
24
+ * });
25
+ *
26
+ * // Equivalent to the string-literal form:
27
+ * User.hasMany(Post, {
28
+ * foreignKey: 'userId',
29
+ * onDelete: 'CASCADE',
30
+ * onUpdate: 'CASCADE',
31
+ * });
32
+ * ```
33
+ */
34
+ var ReferentialAction;
35
+ (function (ReferentialAction) {
36
+ ReferentialAction["Cascade"] = "CASCADE";
37
+ ReferentialAction["Restrict"] = "RESTRICT";
38
+ ReferentialAction["SetNull"] = "SET NULL";
39
+ ReferentialAction["NoAction"] = "NO ACTION";
40
+ ReferentialAction["SetDefault"] = "SET DEFAULT";
41
+ })(ReferentialAction || (exports.ReferentialAction = ReferentialAction = {}));
42
+ // ==================== Logging Levels ====================
43
+ /**
44
+ * Minimum log level for Prorm's built-in logger.
45
+ *
46
+ * This enum is a companion to the existing string-literal union used for
47
+ * `loggingLevel` (`'debug' | 'info' | 'warn' | 'error'`). Both forms are
48
+ * accepted wherever this field appears, so existing string literals
49
+ * continue to work unchanged.
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * import { LoggingLevel } from 'prorm';
54
+ *
55
+ * new Prorm({
56
+ * dialect: 'postgres',
57
+ * loggingLevel: LoggingLevel.Warn,
58
+ * });
59
+ *
60
+ * // Equivalent to the string-literal form:
61
+ * new Prorm({
62
+ * dialect: 'postgres',
63
+ * loggingLevel: 'warn',
64
+ * });
65
+ * ```
66
+ */
67
+ var LoggingLevel;
68
+ (function (LoggingLevel) {
69
+ LoggingLevel["Debug"] = "debug";
70
+ LoggingLevel["Info"] = "info";
71
+ LoggingLevel["Warn"] = "warn";
72
+ LoggingLevel["Error"] = "error";
73
+ })(LoggingLevel || (exports.LoggingLevel = LoggingLevel = {}));
74
+ /**
75
+ * Sort direction for index column ordering.
76
+ *
77
+ * Companion enum for the `'ASC' | 'DESC'` string-literal union used by
78
+ * {@link IndexField.order}. Raw string literals remain valid; the enum is an
79
+ * additive, opt-in alternative.
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * // Using raw string literals (still supported)
84
+ * indexes: [{ fields: [{ name: 'email', order: 'DESC' }] }]
85
+ *
86
+ * // Using the SortDirection enum
87
+ * import { SortDirection } from 'prorm';
88
+ * indexes: [{ fields: [{ name: 'email', order: SortDirection.DESC }] }]
89
+ * ```
90
+ */
91
+ var SortDirection;
92
+ (function (SortDirection) {
93
+ SortDirection["ASC"] = "ASC";
94
+ SortDirection["DESC"] = "DESC";
95
+ })(SortDirection || (exports.SortDirection = SortDirection = {}));
96
+ /**
97
+ * Companion enum for `ValidateOnOption`. Mirrors the same fixed set of
98
+ * string values so callers who prefer enums (autocomplete, refactor-safe
99
+ * references, etc.) can use `ValidateOn.Create` instead of the raw string
100
+ * literal `'create'`. Both forms are accepted anywhere `ValidateOnOption`
101
+ * is used - this is purely additive and does not replace the string
102
+ * literal union.
103
+ */
104
+ var ValidateOn;
105
+ (function (ValidateOn) {
106
+ ValidateOn["Create"] = "create";
107
+ ValidateOn["Update"] = "update";
108
+ ValidateOn["Save"] = "save";
109
+ ValidateOn["SaveOnly"] = "saveOnly";
110
+ })(ValidateOn || (exports.ValidateOn = ValidateOn = {}));
111
+ /**
112
+ * Lock types for row-level locking
113
+ * - 'UPDATE': FOR UPDATE (PostgreSQL/MySQL) - prevents other transactions from modifying the rows
114
+ * - 'SHARE': FOR SHARE (PostgreSQL) / LOCK IN SHARE MODE (MySQL) - allows other transactions to read but not modify
115
+ * - 'KEY SHARE': FOR KEY SHARE (PostgreSQL only) - prevents key updates but allows row updates
116
+ */
117
+ var LockLevel;
118
+ (function (LockLevel) {
119
+ LockLevel["Share"] = "SHARE";
120
+ LockLevel["Update"] = "UPDATE";
121
+ LockLevel["KeyShare"] = "KEY SHARE";
122
+ })(LockLevel || (exports.LockLevel = LockLevel = {}));
123
+ // ==================== Transaction Options ====================
124
+ /**
125
+ * Transaction class
126
+ */
127
+ class Transaction {
128
+ constructor(options) {
129
+ this.id = `tx_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
130
+ this.finished = false;
131
+ this.options = options || {};
132
+ this.parent = null;
133
+ this.savepoints = [];
134
+ }
135
+ async commit() {
136
+ this.finished = true;
137
+ }
138
+ async rollback() {
139
+ this.finished = true;
140
+ }
141
+ }
142
+ exports.Transaction = Transaction;
143
+ /**
144
+ * ANSI SQL transaction isolation levels.
145
+ *
146
+ * This is a companion enum for `IsolationLevelString` / the
147
+ * `TransactionOptions.isolationLevel` field. The field accepts both this
148
+ * enum and the raw string literals for backwards compatibility, so either
149
+ * of the following work:
150
+ * @example
151
+ * transaction.start({ isolationLevel: 'SERIALIZABLE' });
152
+ * @example
153
+ * transaction.start({ isolationLevel: IsolationLevel.Serializable });
154
+ */
155
+ var IsolationLevel;
156
+ (function (IsolationLevel) {
157
+ IsolationLevel["ReadUncommitted"] = "READ UNCOMMITTED";
158
+ IsolationLevel["ReadCommitted"] = "READ COMMITTED";
159
+ IsolationLevel["RepeatableRead"] = "REPEATABLE READ";
160
+ IsolationLevel["Serializable"] = "SERIALIZABLE";
161
+ })(IsolationLevel || (exports.IsolationLevel = IsolationLevel = {}));
162
+ // ==================== Query Types ====================
163
+ /**
164
+ * Enum for query types used in prorm.query()
165
+ * @example
166
+ * prorm.query('SELECT * FROM users', { type: QueryTypes.SELECT })
167
+ * prorm.query('INSERT INTO users VALUES(...)', { type: QueryTypes.INSERT })
168
+ */
169
+ var QueryTypes;
170
+ (function (QueryTypes) {
171
+ QueryTypes["SELECT"] = "SELECT";
172
+ QueryTypes["INSERT"] = "INSERT";
173
+ QueryTypes["UPDATE"] = "UPDATE";
174
+ QueryTypes["DELETE"] = "DELETE";
175
+ QueryTypes["BULKINSERT"] = "BULKINSERT";
176
+ QueryTypes["BULKUPDATE"] = "BULKUPDATE";
177
+ QueryTypes["BULKDELETE"] = "BULKDELETE";
178
+ QueryTypes["RAW"] = "RAW";
179
+ QueryTypes["CALL"] = "CALL";
180
+ })(QueryTypes || (exports.QueryTypes = QueryTypes = {}));
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * User and privilege management for the TypeScript ORM.
4
+ * Supported dialects: MySQL, MariaDB (MySQL 8+ roles also supported).
5
+ * SQLite throws DatabaseError – user management is not a concept in SQLite.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.UserManager = exports.PRIVILEGE_LEVELS = void 0;
9
+ /**
10
+ * Convenience groupings of privilege types by category.
11
+ */
12
+ exports.PRIVILEGE_LEVELS = {
13
+ ALL: ['ALL PRIVILEGES'],
14
+ READ: ['SELECT'],
15
+ WRITE: ['INSERT', 'UPDATE', 'DELETE'],
16
+ DDL: ['CREATE', 'DROP', 'ALTER', 'INDEX'],
17
+ DML: ['SELECT', 'INSERT', 'UPDATE', 'DELETE'],
18
+ ROUTINE: ['EXECUTE', 'CREATE ROUTINE', 'ALTER ROUTINE'],
19
+ VIEW: ['CREATE VIEW', 'SHOW VIEW'],
20
+ };
21
+ class UserManager {
22
+ constructor(prorm) {
23
+ this.prorm = prorm;
24
+ }
25
+ // ---- User CRUD ----
26
+ async createUser(username, options) {
27
+ const dialect = this.prorm.dialect;
28
+ if (!dialect)
29
+ throw new Error('Database not connected');
30
+ const sql = dialect.buildCreateUserQuery(username, options);
31
+ await dialect.query(sql);
32
+ }
33
+ async alterUser(username, options) {
34
+ const dialect = this.prorm.dialect;
35
+ if (!dialect)
36
+ throw new Error('Database not connected');
37
+ const sql = dialect.buildAlterUserQuery(username, options);
38
+ await dialect.query(sql);
39
+ }
40
+ async dropUser(username, options) {
41
+ const dialect = this.prorm.dialect;
42
+ if (!dialect)
43
+ throw new Error('Database not connected');
44
+ const sql = dialect.buildDropUserQuery(username, options);
45
+ await dialect.query(sql);
46
+ }
47
+ async getUsers() {
48
+ const dialect = this.prorm.dialect;
49
+ if (!dialect)
50
+ throw new Error('Database not connected');
51
+ const sql = dialect.getUsersQuery();
52
+ const result = await dialect.query(sql);
53
+ return result.rows || [];
54
+ }
55
+ async userExists(username, host) {
56
+ const users = await this.getUsers();
57
+ return users.some((u) => u.user === username && (!host || u.host === host));
58
+ }
59
+ // ---- Grants ----
60
+ async grant(options) {
61
+ const dialect = this.prorm.dialect;
62
+ if (!dialect)
63
+ throw new Error('Database not connected');
64
+ const sql = dialect.buildGrantQuery(options);
65
+ await dialect.query(sql);
66
+ }
67
+ async revoke(options) {
68
+ const dialect = this.prorm.dialect;
69
+ if (!dialect)
70
+ throw new Error('Database not connected');
71
+ const sql = dialect.buildRevokeQuery(options);
72
+ await dialect.query(sql);
73
+ }
74
+ async showGrants(username, host) {
75
+ const dialect = this.prorm.dialect;
76
+ if (!dialect)
77
+ throw new Error('Database not connected');
78
+ const sql = dialect.buildShowGrantsQuery(username, host);
79
+ const result = await dialect.query(sql);
80
+ return result.rows || [];
81
+ }
82
+ async flushPrivileges() {
83
+ const dialect = this.prorm.dialect;
84
+ if (!dialect)
85
+ throw new Error('Database not connected');
86
+ const sql = dialect.buildFlushPrivilegesQuery();
87
+ await dialect.query(sql);
88
+ }
89
+ // ---- Roles (MySQL 8+ / MariaDB) ----
90
+ async createRole(roleName, options) {
91
+ const dialect = this.prorm.dialect;
92
+ if (!dialect)
93
+ throw new Error('Database not connected');
94
+ const sql = dialect.buildCreateRoleQuery(roleName, options);
95
+ await dialect.query(sql);
96
+ }
97
+ async dropRole(roleName, options) {
98
+ const dialect = this.prorm.dialect;
99
+ if (!dialect)
100
+ throw new Error('Database not connected');
101
+ const sql = dialect.buildDropRoleQuery(roleName, options);
102
+ await dialect.query(sql);
103
+ }
104
+ async grantRole(role, to, options) {
105
+ const dialect = this.prorm.dialect;
106
+ if (!dialect)
107
+ throw new Error('Database not connected');
108
+ const sql = dialect.buildGrantRoleQuery(role, to, options);
109
+ await dialect.query(sql);
110
+ }
111
+ async revokeRole(role, from, options) {
112
+ const dialect = this.prorm.dialect;
113
+ if (!dialect)
114
+ throw new Error('Database not connected');
115
+ const sql = dialect.buildRevokeRoleQuery(role, from, options);
116
+ await dialect.query(sql);
117
+ }
118
+ async getRoles() {
119
+ const dialect = this.prorm.dialect;
120
+ if (!dialect)
121
+ throw new Error('Database not connected');
122
+ const sql = dialect.getRolesQuery();
123
+ const result = await dialect.query(sql);
124
+ return (result.rows || []).map((r) => r.role || r.Role || r.rolname || '');
125
+ }
126
+ }
127
+ exports.UserManager = UserManager;
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ /**
3
+ * Date utility functions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.dateUtils = exports.format = void 0;
7
+ exports.now = now;
8
+ exports.today = today;
9
+ exports.tomorrow = tomorrow;
10
+ exports.yesterday = yesterday;
11
+ exports.addDays = addDays;
12
+ exports.subtractDays = subtractDays;
13
+ exports.addMonths = addMonths;
14
+ exports.subtractMonths = subtractMonths;
15
+ exports.addYears = addYears;
16
+ exports.subtractYears = subtractYears;
17
+ exports.formatDate = formatDate;
18
+ exports.formatISO = formatISO;
19
+ exports.formatRelative = formatRelative;
20
+ exports.isToday = isToday;
21
+ exports.isTomorrow = isTomorrow;
22
+ exports.isYesterday = isYesterday;
23
+ exports.isSameDay = isSameDay;
24
+ exports.startOfDay = startOfDay;
25
+ exports.endOfDay = endOfDay;
26
+ exports.startOfMonth = startOfMonth;
27
+ exports.endOfMonth = endOfMonth;
28
+ exports.startOfYear = startOfYear;
29
+ exports.endOfYear = endOfYear;
30
+ exports.daysBetween = daysBetween;
31
+ exports.isValidDate = isValidDate;
32
+ // ==================== Date Utils ====================
33
+ /**
34
+ * Get current date/time
35
+ */
36
+ function now() {
37
+ return new Date();
38
+ }
39
+ /**
40
+ * Get today's date (midnight)
41
+ */
42
+ function today() {
43
+ const d = new Date();
44
+ d.setHours(0, 0, 0, 0);
45
+ return d;
46
+ }
47
+ /**
48
+ * Get tomorrow's date (midnight)
49
+ */
50
+ function tomorrow() {
51
+ const d = today();
52
+ d.setDate(d.getDate() + 1);
53
+ return d;
54
+ }
55
+ /**
56
+ * Get yesterday's date (midnight)
57
+ */
58
+ function yesterday() {
59
+ const d = today();
60
+ d.setDate(d.getDate() - 1);
61
+ return d;
62
+ }
63
+ /**
64
+ * Add days to a date
65
+ */
66
+ function addDays(date, days) {
67
+ const result = new Date(date);
68
+ result.setDate(result.getDate() + days);
69
+ return result;
70
+ }
71
+ /**
72
+ * Subtract days from a date
73
+ */
74
+ function subtractDays(date, days) {
75
+ return addDays(date, -days);
76
+ }
77
+ /**
78
+ * Add months to a date
79
+ */
80
+ function addMonths(date, months) {
81
+ const result = new Date(date);
82
+ result.setMonth(result.getMonth() + months);
83
+ return result;
84
+ }
85
+ /**
86
+ * Subtract months from a date
87
+ */
88
+ function subtractMonths(date, months) {
89
+ return addMonths(date, -months);
90
+ }
91
+ /**
92
+ * Add years to a date
93
+ */
94
+ function addYears(date, years) {
95
+ const result = new Date(date);
96
+ result.setFullYear(result.getFullYear() + years);
97
+ return result;
98
+ }
99
+ /**
100
+ * Subtract years from a date
101
+ */
102
+ function subtractYears(date, years) {
103
+ return addYears(date, -years);
104
+ }
105
+ /**
106
+ * Format a date
107
+ * Format tokens: YYYY, YY, MM, DD, HH, mm, ss
108
+ *
109
+ * Note: exported as `formatDate` (not `format`) so it doesn't collide with
110
+ * the numeric `format(value, decimals)` helper in './index'. Local exports
111
+ * in index.ts take precedence over this module's `export * from './date'`
112
+ * re-export for identically-named bindings, so a top-level `utils.format`
113
+ * pointing at a date formatter would silently break numeric-formatting
114
+ * callers (and vice versa).
115
+ */
116
+ function formatDate(date, formatStr = 'YYYY-MM-DD') {
117
+ // Use UTC getters so formatting is stable regardless of the host's local
118
+ // timezone. `new Date('2024-01-15')` (a date-only ISO string) parses as
119
+ // UTC midnight; using local getters (getDate/getMonth/...) shifts the
120
+ // result by a day in timezones behind UTC.
121
+ const year = date.getUTCFullYear();
122
+ const month = String(date.getUTCMonth() + 1).padStart(2, '0');
123
+ const day = String(date.getUTCDate()).padStart(2, '0');
124
+ const hours = String(date.getUTCHours()).padStart(2, '0');
125
+ const minutes = String(date.getUTCMinutes()).padStart(2, '0');
126
+ const seconds = String(date.getUTCSeconds()).padStart(2, '0');
127
+ return formatStr
128
+ .replace('YYYY', String(year))
129
+ .replace('YY', String(year).slice(-2))
130
+ .replace('MM', month)
131
+ .replace('DD', day)
132
+ .replace('HH', hours)
133
+ .replace('mm', minutes)
134
+ .replace('ss', seconds);
135
+ }
136
+ /**
137
+ * Format a date (alias for formatDate). Kept for direct
138
+ * `import { format } from './utils/date'` consumers; not re-exported at the
139
+ * top-level `utils` barrel under this name (see note above).
140
+ */
141
+ exports.format = formatDate;
142
+ /**
143
+ * Format date as ISO string (YYYY-MM-DD)
144
+ */
145
+ function formatISO(date) {
146
+ return date.toISOString().split('T')[0];
147
+ }
148
+ /**
149
+ * Get relative time string (e.g., "2 hours ago", "in 3 days")
150
+ */
151
+ function formatRelative(date) {
152
+ const now = new Date();
153
+ const diffMs = date.getTime() - now.getTime();
154
+ const diffSeconds = Math.round(diffMs / 1000);
155
+ const diffMinutes = Math.round(diffSeconds / 60);
156
+ const diffHours = Math.round(diffMinutes / 60);
157
+ const diffDays = Math.round(diffHours / 24);
158
+ if (diffSeconds < 0) {
159
+ // Past
160
+ if (Math.abs(diffSeconds) < 60)
161
+ return 'just now';
162
+ if (Math.abs(diffMinutes) < 60)
163
+ return `${Math.abs(diffMinutes)} minute${Math.abs(diffMinutes) === 1 ? '' : 's'} ago`;
164
+ if (Math.abs(diffHours) < 24)
165
+ return `${Math.abs(diffHours)} hour${Math.abs(diffHours) === 1 ? '' : 's'} ago`;
166
+ if (Math.abs(diffDays) < 30)
167
+ return `${Math.abs(diffDays)} day${Math.abs(diffDays) === 1 ? '' : 's'} ago`;
168
+ return (0, exports.format)(date);
169
+ }
170
+ else {
171
+ // Future
172
+ if (diffSeconds < 60)
173
+ return 'just now';
174
+ if (diffMinutes < 60)
175
+ return `in ${diffMinutes} minute${diffMinutes === 1 ? '' : 's'}`;
176
+ if (diffHours < 24)
177
+ return `in ${diffHours} hour${diffHours === 1 ? '' : 's'}`;
178
+ if (diffDays < 30)
179
+ return `in ${diffDays} day${diffDays === 1 ? '' : 's'}`;
180
+ return (0, exports.format)(date);
181
+ }
182
+ }
183
+ /**
184
+ * Check if date is today
185
+ */
186
+ function isToday(date) {
187
+ return isSameDay(date, new Date());
188
+ }
189
+ /**
190
+ * Check if date is tomorrow
191
+ */
192
+ function isTomorrow(date) {
193
+ return isSameDay(date, tomorrow());
194
+ }
195
+ /**
196
+ * Check if date is yesterday
197
+ */
198
+ function isYesterday(date) {
199
+ return isSameDay(date, yesterday());
200
+ }
201
+ /**
202
+ * Check if two dates are the same day
203
+ */
204
+ function isSameDay(date1, date2) {
205
+ return (date1.getFullYear() === date2.getFullYear() &&
206
+ date1.getMonth() === date2.getMonth() &&
207
+ date1.getDate() === date2.getDate());
208
+ }
209
+ /**
210
+ * Get start of day (midnight)
211
+ */
212
+ function startOfDay(date) {
213
+ const result = new Date(date);
214
+ result.setHours(0, 0, 0, 0);
215
+ return result;
216
+ }
217
+ /**
218
+ * Get end of day (23:59:59.999)
219
+ */
220
+ function endOfDay(date) {
221
+ const result = new Date(date);
222
+ result.setHours(23, 59, 59, 999);
223
+ return result;
224
+ }
225
+ /**
226
+ * Get start of month
227
+ */
228
+ function startOfMonth(date) {
229
+ const result = new Date(date);
230
+ result.setDate(1);
231
+ return startOfDay(result);
232
+ }
233
+ /**
234
+ * Get end of month
235
+ */
236
+ function endOfMonth(date) {
237
+ const result = new Date(date.getFullYear(), date.getMonth() + 1, 0);
238
+ return endOfDay(result);
239
+ }
240
+ /**
241
+ * Get start of year
242
+ */
243
+ function startOfYear(date) {
244
+ const result = new Date(date);
245
+ result.setMonth(0, 1);
246
+ return startOfDay(result);
247
+ }
248
+ /**
249
+ * Get end of year
250
+ */
251
+ function endOfYear(date) {
252
+ const result = new Date(date.getFullYear(), 11, 31);
253
+ return endOfDay(result);
254
+ }
255
+ /**
256
+ * Get number of days between two dates
257
+ */
258
+ function daysBetween(date1, date2) {
259
+ const oneDay = 24 * 60 * 60 * 1000;
260
+ const firstDay = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
261
+ const secondDay = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
262
+ return Math.round((secondDay.getTime() - firstDay.getTime()) / oneDay);
263
+ }
264
+ /**
265
+ * Check if value is a valid date
266
+ */
267
+ function isValidDate(date) {
268
+ return date instanceof Date && !isNaN(date.getTime());
269
+ }
270
+ /**
271
+ * Date utilities object for convenient access
272
+ */
273
+ exports.dateUtils = {
274
+ now,
275
+ today,
276
+ tomorrow,
277
+ yesterday,
278
+ addDays,
279
+ subtractDays,
280
+ addMonths,
281
+ subtractMonths,
282
+ addYears,
283
+ subtractYears,
284
+ format: exports.format,
285
+ formatISO,
286
+ formatRelative,
287
+ isToday,
288
+ isTomorrow,
289
+ isYesterday,
290
+ isSameDay,
291
+ startOfDay,
292
+ endOfDay,
293
+ startOfMonth,
294
+ endOfMonth,
295
+ startOfYear,
296
+ endOfYear,
297
+ daysBetween,
298
+ isValidDate,
299
+ };
300
+ exports.default = exports.dateUtils;