ts-prorm-orm 1.1.0 → 1.2.1

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 (460) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +194 -72
  3. package/dist/audit/history-query.d.ts +35 -0
  4. package/dist/audit/index.d.ts +16 -0
  5. package/dist/audit/logger.d.ts +126 -0
  6. package/dist/cache/cache-manager.d.ts +341 -0
  7. package/dist/cache/index.d.ts +8 -0
  8. package/dist/cache/redis-cluster-cache.d.ts +164 -0
  9. package/dist/cache/redis-cluster-cache.js +19 -36
  10. package/dist/cli/cloud.d.ts +55 -0
  11. package/dist/cli/cloud.js +318 -0
  12. package/dist/cli/commands/auth.d.ts +2 -0
  13. package/dist/cli/commands/auth.js +345 -0
  14. package/dist/cli/commands/billing.d.ts +2 -0
  15. package/dist/cli/commands/billing.js +135 -0
  16. package/dist/cli/commands/code.d.ts +2 -0
  17. package/dist/cli/commands/code.js +168 -0
  18. package/dist/cli/commands/config.d.ts +2 -0
  19. package/dist/cli/commands/config.js +154 -0
  20. package/dist/cli/commands/db.d.ts +2 -0
  21. package/dist/cli/commands/db.js +189 -0
  22. package/dist/cli/commands/index.d.ts +1 -0
  23. package/dist/cli/commands/index.js +22 -0
  24. package/dist/cli/commands/keys.d.ts +2 -0
  25. package/dist/cli/commands/keys.js +100 -0
  26. package/dist/cli/commands/misc.d.ts +2 -0
  27. package/dist/cli/commands/misc.js +282 -0
  28. package/dist/cli/commands/pull.d.ts +2 -0
  29. package/dist/cli/commands/pull.js +306 -0
  30. package/dist/cli/commands/runners.d.ts +2 -0
  31. package/dist/cli/commands/runners.js +218 -0
  32. package/dist/cli/commands/scaffold.d.ts +2 -0
  33. package/dist/cli/commands/scaffold.js +383 -0
  34. package/dist/cli/commands/secrets.d.ts +2 -0
  35. package/dist/cli/commands/secrets.js +162 -0
  36. package/dist/cli/commands/store.d.ts +2 -0
  37. package/dist/cli/commands/store.js +274 -0
  38. package/dist/cli/commands/system.d.ts +10 -0
  39. package/dist/cli/commands/system.js +169 -0
  40. package/dist/cli/commands/teams.d.ts +2 -0
  41. package/dist/cli/commands/teams.js +189 -0
  42. package/dist/cli/commands/user.d.ts +2 -0
  43. package/dist/cli/commands/user.js +171 -0
  44. package/dist/cli/framework.d.ts +103 -0
  45. package/dist/cli/framework.js +436 -0
  46. package/dist/cli/io.d.ts +26 -0
  47. package/dist/cli/io.js +181 -0
  48. package/dist/cli/keychain.d.ts +10 -0
  49. package/dist/cli/keychain.js +101 -0
  50. package/dist/cli/prompt.d.ts +20 -0
  51. package/dist/cli/prompt.js +111 -0
  52. package/dist/cli.d.ts +214 -0
  53. package/dist/cli.js +72 -5
  54. package/dist/compliance/audit-trail.d.ts +66 -0
  55. package/dist/compliance/backup-verification.d.ts +279 -0
  56. package/dist/compliance/breach-detector.d.ts +197 -0
  57. package/dist/compliance/consent-record.d.ts +107 -0
  58. package/dist/compliance/consent-versioning.d.ts +169 -0
  59. package/dist/compliance/cross-border-log.d.ts +254 -0
  60. package/dist/compliance/data-classifier.d.ts +127 -0
  61. package/dist/compliance/data-lineage.d.ts +268 -0
  62. package/dist/compliance/data-masker.d.ts +110 -0
  63. package/dist/compliance/data-portability.d.ts +98 -0
  64. package/dist/compliance/data-retention.d.ts +108 -0
  65. package/dist/compliance/dsar-workflow.d.ts +175 -0
  66. package/dist/compliance/field-encryption.d.ts +84 -0
  67. package/dist/compliance/immutable-record.d.ts +84 -0
  68. package/dist/compliance/index.d.ts +93 -0
  69. package/dist/compliance/privacy-impact-assessment.d.ts +196 -0
  70. package/dist/compliance/pseudonymization.d.ts +96 -0
  71. package/dist/compliance/query-firewall.d.ts +661 -0
  72. package/dist/compliance/rate-limiter.d.ts +203 -0
  73. package/dist/compliance/right-to-erasure.d.ts +96 -0
  74. package/dist/compliance/row-level-security.d.ts +152 -0
  75. package/dist/compliance/security-decorator.d.ts +388 -0
  76. package/dist/compliance/security-monitor.d.ts +170 -0
  77. package/dist/compliance/sensitive-data-discovery.d.ts +151 -0
  78. package/dist/compliance/session-isolation.d.ts +286 -0
  79. package/dist/compliance/tls-enforcer.d.ts +51 -0
  80. package/dist/compliance/worm-storage.d.ts +225 -0
  81. package/dist/connection-manager.d.ts +130 -0
  82. package/dist/connection-pool.d.ts +311 -0
  83. package/dist/decorators/audit.d.ts +49 -0
  84. package/dist/decorators/check.d.ts +218 -0
  85. package/dist/decorators/collate.d.ts +346 -0
  86. package/dist/decorators/comment.d.ts +51 -0
  87. package/dist/decorators/database-settings.d.ts +193 -0
  88. package/dist/decorators/default.d.ts +148 -0
  89. package/dist/decorators/encryption.d.ts +175 -0
  90. package/dist/decorators/engine.d.ts +97 -0
  91. package/dist/decorators/fk-constraints.d.ts +387 -0
  92. package/dist/decorators/foreign-table.d.ts +57 -0
  93. package/dist/decorators/generated.d.ts +232 -0
  94. package/dist/decorators/hstore.d.ts +96 -0
  95. package/dist/decorators/index.d.ts +57 -0
  96. package/dist/decorators/index.js +14 -30
  97. package/dist/decorators/json-column.d.ts +47 -0
  98. package/dist/decorators/jsonb.d.ts +83 -0
  99. package/dist/decorators/orm-decorators.d.ts +274 -0
  100. package/dist/decorators/permissions.d.ts +192 -0
  101. package/dist/decorators/procedure.d.ts +168 -0
  102. package/dist/decorators/procedure.js +31 -7
  103. package/dist/decorators/query-options.d.ts +527 -0
  104. package/dist/decorators/range.d.ts +122 -0
  105. package/dist/decorators/set-column.d.ts +43 -0
  106. package/dist/decorators/spatial.d.ts +60 -0
  107. package/dist/decorators/storage.d.ts +561 -0
  108. package/dist/decorators/timezone.d.ts +319 -0
  109. package/dist/decorators/trigger.d.ts +50 -0
  110. package/dist/decorators/uuid.d.ts +102 -0
  111. package/dist/decorators/view.d.ts +213 -0
  112. package/dist/diagrams/chen-diagram.d.ts +70 -0
  113. package/dist/diagrams/chen-diagram.js +33 -31
  114. package/dist/diagrams/class-diagram.d.ts +78 -0
  115. package/dist/diagrams/class-diagram.js +23 -27
  116. package/dist/diagrams/dependency-diagram.d.ts +82 -0
  117. package/dist/diagrams/dependency-diagram.js +18 -9
  118. package/dist/diagrams/er-diagram.d.ts +82 -0
  119. package/dist/diagrams/er-diagram.js +174 -231
  120. package/dist/diagrams/flow-diagram.d.ts +70 -0
  121. package/dist/diagrams/flow-diagram.js +23 -18
  122. package/dist/diagrams/gantt-diagram.d.ts +67 -0
  123. package/dist/diagrams/gantt-diagram.js +20 -18
  124. package/dist/diagrams/index-diagram.d.ts +61 -0
  125. package/dist/diagrams/index-diagram.js +36 -31
  126. package/dist/diagrams/index.d.ts +155 -0
  127. package/dist/diagrams/index.js +7 -1
  128. package/dist/diagrams/migration-diagram.d.ts +67 -0
  129. package/dist/diagrams/migration-diagram.js +45 -57
  130. package/dist/diagrams/model-diagram.d.ts +85 -0
  131. package/dist/diagrams/model-diagram.js +225 -287
  132. package/dist/diagrams/package-diagram.d.ts +69 -0
  133. package/dist/diagrams/package-diagram.js +30 -32
  134. package/dist/diagrams/palette.d.ts +138 -0
  135. package/dist/diagrams/palette.js +134 -25
  136. package/dist/diagrams/relational-diagram.d.ts +82 -0
  137. package/dist/diagrams/relational-diagram.js +51 -59
  138. package/dist/diagrams/schemadoc-diagram.d.ts +57 -0
  139. package/dist/diagrams/schemadoc-diagram.js +36 -28
  140. package/dist/diagrams/sequence-diagram.d.ts +61 -0
  141. package/dist/diagrams/sequence-diagram.js +20 -11
  142. package/dist/diagrams/state-diagram.d.ts +85 -0
  143. package/dist/diagrams/state-diagram.js +21 -17
  144. package/dist/diagrams/svg-dom.d.ts +62 -0
  145. package/dist/diagrams/svg-dom.js +11 -0
  146. package/dist/diagrams/tree-diagram.d.ts +47 -0
  147. package/dist/diagrams/tree-diagram.js +19 -10
  148. package/dist/dialects/clickhouse/index.d.ts +660 -0
  149. package/dist/dialects/clickhouse/index.js +107 -2
  150. package/dist/dialects/cockroachdb/index.d.ts +1708 -0
  151. package/dist/dialects/cockroachdb/index.js +139 -10
  152. package/dist/dialects/cratedb/index.d.ts +262 -0
  153. package/dist/dialects/cratedb/index.js +148 -0
  154. package/dist/dialects/databricks/index.d.ts +397 -0
  155. package/dist/dialects/databricks/index.js +233 -11
  156. package/dist/dialects/db2/index.d.ts +729 -0
  157. package/dist/dialects/db2/index.js +152 -2
  158. package/dist/dialects/dialect.d.ts +1653 -0
  159. package/dist/dialects/duckdb/index.d.ts +440 -0
  160. package/dist/dialects/duckdb/index.js +21 -37
  161. package/dist/dialects/exasol/index.d.ts +197 -0
  162. package/dist/dialects/exasol/index.js +14 -0
  163. package/dist/dialects/firebird/index.d.ts +286 -0
  164. package/dist/dialects/firebird/index.js +135 -0
  165. package/dist/dialects/greenplum/index.d.ts +336 -0
  166. package/dist/dialects/greenplum/index.js +168 -0
  167. package/dist/dialects/hana/index.d.ts +512 -0
  168. package/dist/dialects/hana/index.js +17 -35
  169. package/dist/dialects/mariadb/index.d.ts +1241 -0
  170. package/dist/dialects/mariadb/index.js +181 -43
  171. package/dist/dialects/mssql/index.d.ts +729 -0
  172. package/dist/dialects/mssql/index.js +76 -7
  173. package/dist/dialects/mysql/index.d.ts +1233 -0
  174. package/dist/dialects/mysql/index.js +87 -19
  175. package/dist/dialects/oracle/index.d.ts +1222 -0
  176. package/dist/dialects/oracle/index.js +210 -9
  177. package/dist/dialects/postgres/index.d.ts +1598 -0
  178. package/dist/dialects/postgres/index.js +34 -13
  179. package/dist/dialects/query-stream-helper.d.ts +58 -0
  180. package/dist/dialects/questdb/index.d.ts +430 -0
  181. package/dist/dialects/questdb/index.js +292 -0
  182. package/dist/dialects/redshift/index.d.ts +933 -0
  183. package/dist/dialects/redshift/index.js +17 -5
  184. package/dist/dialects/singlestore/index.d.ts +233 -0
  185. package/dist/dialects/singlestore/index.js +53 -0
  186. package/dist/dialects/snowflake/index.d.ts +727 -0
  187. package/dist/dialects/snowflake/index.js +154 -5
  188. package/dist/dialects/spanner/index.d.ts +660 -0
  189. package/dist/dialects/spanner/index.js +43 -21
  190. package/dist/dialects/sqlite/index.d.ts +1133 -0
  191. package/dist/dialects/sqlite/index.js +168 -30
  192. package/dist/dialects/tidb/index.d.ts +226 -0
  193. package/dist/dialects/tidb/index.js +10 -0
  194. package/dist/dialects/timescaledb/index.d.ts +286 -0
  195. package/dist/dialects/timescaledb/index.js +179 -0
  196. package/dist/dialects/trino/index.d.ts +230 -0
  197. package/dist/dialects/trino/index.js +85 -10
  198. package/dist/dialects/turso/index.d.ts +98 -0
  199. package/dist/dialects/turso/index.js +10 -0
  200. package/dist/dialects/vertica/index.d.ts +321 -0
  201. package/dist/dialects/vertica/index.js +161 -0
  202. package/dist/dialects/yugabytedb/index.d.ts +276 -0
  203. package/dist/dialects/yugabytedb/index.js +121 -0
  204. package/dist/errors/index.d.ts +378 -0
  205. package/dist/errors/index.js +29 -1
  206. package/dist/errors/utils.d.ts +53 -0
  207. package/dist/errors.d.ts +5 -0
  208. package/dist/extensions/catalog/cloud-warehouse-features.d.ts +27 -0
  209. package/dist/extensions/catalog/mssql-features.d.ts +20 -0
  210. package/dist/extensions/catalog/mysql-mariadb-plugins.d.ts +18 -0
  211. package/dist/extensions/catalog/oracle-db2-features.d.ts +17 -0
  212. package/dist/extensions/catalog/postgres-extensions.d.ts +15 -0
  213. package/dist/extensions/index.d.ts +34 -0
  214. package/dist/extensions/types.d.ts +43 -0
  215. package/dist/external-fields/adapters.d.ts +50 -0
  216. package/dist/external-fields/adapters.js +227 -0
  217. package/dist/external-fields/decorator.d.ts +77 -0
  218. package/dist/external-fields/decorator.js +80 -0
  219. package/dist/external-fields/index.d.ts +10 -0
  220. package/dist/external-fields/index.js +19 -0
  221. package/dist/external-fields/runtime.d.ts +39 -0
  222. package/dist/external-fields/runtime.js +221 -0
  223. package/dist/foreign-data.d.ts +168 -0
  224. package/dist/graph/base-graph-dialect.d.ts +250 -0
  225. package/dist/graph/base-graph-dialect.js +539 -0
  226. package/dist/graph/dgraph/index.d.ts +65 -0
  227. package/dist/graph/dgraph/index.js +559 -0
  228. package/dist/graph/gremlin/index.d.ts +59 -0
  229. package/dist/graph/gremlin/index.js +378 -0
  230. package/dist/graph/index.d.ts +60 -0
  231. package/dist/graph/index.js +67 -0
  232. package/dist/graph/neo4j/index.d.ts +50 -0
  233. package/dist/graph/neo4j/index.js +462 -0
  234. package/dist/graph/types.d.ts +213 -0
  235. package/dist/graph/types.js +234 -0
  236. package/dist/hooks/hooks-manager.d.ts +189 -0
  237. package/dist/hooks/index.d.ts +8 -0
  238. package/dist/index.d.ts +713 -0
  239. package/dist/index.js +36 -4
  240. package/dist/logging.d.ts +183 -0
  241. package/dist/migrations/index.d.ts +9 -0
  242. package/dist/migrations/migration.d.ts +143 -0
  243. package/dist/migrations/migrator.d.ts +199 -0
  244. package/dist/migrations/prormmigration.d.ts +131 -0
  245. package/dist/migrations/query-interface.d.ts +335 -0
  246. package/dist/migrations/seeder.d.ts +167 -0
  247. package/dist/models/associations.d.ts +131 -0
  248. package/dist/models/associations.js +7 -2
  249. package/dist/models/constraints.d.ts +175 -0
  250. package/dist/models/data-types.d.ts +1656 -0
  251. package/dist/models/decorators.d.ts +328 -0
  252. package/dist/models/decorators.js +61 -82
  253. package/dist/models/eager-load.d.ts +86 -0
  254. package/dist/models/eager-load.js +369 -0
  255. package/dist/models/index.d.ts +13 -0
  256. package/dist/models/indexes.d.ts +325 -0
  257. package/dist/models/methods.d.ts +419 -0
  258. package/dist/models/model-manager.d.ts +76 -0
  259. package/dist/models/model.d.ts +820 -0
  260. package/dist/models/model.js +15 -101
  261. package/dist/models/operators.d.ts +29 -0
  262. package/dist/models/scopes.d.ts +71 -0
  263. package/dist/models/typescript-types.d.ts +177 -0
  264. package/dist/nosql/aerospike/index.d.ts +126 -0
  265. package/dist/nosql/allegrograph/index.d.ts +86 -0
  266. package/dist/nosql/arangodb/index.d.ts +285 -0
  267. package/dist/nosql/arangodb/index.js +274 -2
  268. package/dist/nosql/arangodb/where.d.ts +38 -0
  269. package/dist/nosql/arangodb/where.js +94 -0
  270. package/dist/nosql/azure-blob/index.d.ts +104 -0
  271. package/dist/nosql/beanstalkd/index.d.ts +88 -0
  272. package/dist/nosql/beequeue/index.d.ts +99 -0
  273. package/dist/nosql/bigchaindb/index.d.ts +113 -0
  274. package/dist/nosql/bigtable/index.d.ts +144 -0
  275. package/dist/nosql/blazegraph/index.d.ts +88 -0
  276. package/dist/nosql/bullmq/index.d.ts +83 -0
  277. package/dist/nosql/cassandra/index.d.ts +119 -0
  278. package/dist/nosql/chroma/index.d.ts +151 -0
  279. package/dist/nosql/cloudflare-kv/index.d.ts +120 -0
  280. package/dist/nosql/coherence/index.d.ts +91 -0
  281. package/dist/nosql/cosmosdb/index.d.ts +78 -0
  282. package/dist/nosql/couchbase/index.d.ts +103 -0
  283. package/dist/nosql/dax/index.d.ts +118 -0
  284. package/dist/nosql/deno-kv/index.d.ts +109 -0
  285. package/dist/nosql/dgraph/index.d.ts +80 -0
  286. package/dist/nosql/doris/index.d.ts +88 -0
  287. package/dist/nosql/druid/index.d.ts +95 -0
  288. package/dist/nosql/dynamodb/index.d.ts +643 -0
  289. package/dist/nosql/dynamodb/index.js +423 -0
  290. package/dist/nosql/elasticsearch/index.d.ts +239 -0
  291. package/dist/nosql/etcd/index.d.ts +243 -0
  292. package/dist/nosql/eventhubs/index.d.ts +89 -0
  293. package/dist/nosql/eventstore/index.d.ts +102 -0
  294. package/dist/nosql/faunadb/index.d.ts +141 -0
  295. package/dist/nosql/faunadb/index.js +329 -0
  296. package/dist/nosql/firestore/index.d.ts +67 -0
  297. package/dist/nosql/fluree/index.d.ts +88 -0
  298. package/dist/nosql/fuseki/index.d.ts +94 -0
  299. package/dist/nosql/gcs/index.d.ts +62 -0
  300. package/dist/nosql/gearman/index.d.ts +77 -0
  301. package/dist/nosql/geode/index.d.ts +93 -0
  302. package/dist/nosql/graphdb/index.d.ts +86 -0
  303. package/dist/nosql/graylog/index.d.ts +118 -0
  304. package/dist/nosql/gridgain/index.d.ts +78 -0
  305. package/dist/nosql/hazelcast/index.d.ts +73 -0
  306. package/dist/nosql/hbase/index.d.ts +123 -0
  307. package/dist/nosql/ignite/index.d.ts +80 -0
  308. package/dist/nosql/immudb/index.d.ts +131 -0
  309. package/dist/nosql/index.d.ts +215 -0
  310. package/dist/nosql/infinispan/index.d.ts +95 -0
  311. package/dist/nosql/influxdb/flux-compiler.d.ts +23 -0
  312. package/dist/nosql/influxdb/flux-compiler.js +170 -0
  313. package/dist/nosql/influxdb/index.d.ts +300 -0
  314. package/dist/nosql/influxdb/index.js +0 -0
  315. package/dist/nosql/kafka/index.d.ts +113 -0
  316. package/dist/nosql/keyspaces/index.d.ts +122 -0
  317. package/dist/nosql/kinesis/index.d.ts +121 -0
  318. package/dist/nosql/leveldb/index.d.ts +112 -0
  319. package/dist/nosql/leveldb/index.js +103 -1
  320. package/dist/nosql/lmdb/index.d.ts +76 -0
  321. package/dist/nosql/loki/index.d.ts +126 -0
  322. package/dist/nosql/marklogic/index.d.ts +76 -0
  323. package/dist/nosql/materialize/index.d.ts +91 -0
  324. package/dist/nosql/meilisearch/index.d.ts +76 -0
  325. package/dist/nosql/memcached/index.d.ts +138 -0
  326. package/dist/nosql/milvus/index.d.ts +167 -0
  327. package/dist/nosql/minio/index.d.ts +122 -0
  328. package/dist/nosql/momento/index.d.ts +99 -0
  329. package/dist/nosql/mongodb/index.d.ts +265 -0
  330. package/dist/nosql/mongodb/index.js +139 -0
  331. package/dist/nosql/mongodb/where.d.ts +8 -0
  332. package/dist/nosql/mongodb/where.js +181 -0
  333. package/dist/nosql/nats/index.d.ts +139 -0
  334. package/dist/nosql/nedb/index.d.ts +79 -0
  335. package/dist/nosql/neo4j/index.d.ts +217 -0
  336. package/dist/nosql/neo4j/index.js +26 -14
  337. package/dist/nosql/neptune/index.d.ts +234 -0
  338. package/dist/nosql/neptune/index.js +23 -9
  339. package/dist/nosql/nsq/index.d.ts +93 -0
  340. package/dist/nosql/opensearch/index.d.ts +97 -0
  341. package/dist/nosql/orientdb/index.d.ts +72 -0
  342. package/dist/nosql/papertrail/index.d.ts +120 -0
  343. package/dist/nosql/pinecone/index.d.ts +148 -0
  344. package/dist/nosql/pinot/index.d.ts +90 -0
  345. package/dist/nosql/pouchdb/index.d.ts +95 -0
  346. package/dist/nosql/prometheus/index.d.ts +112 -0
  347. package/dist/nosql/provendb/index.d.ts +143 -0
  348. package/dist/nosql/provendb/index.js +262 -0
  349. package/dist/nosql/pubsub/index.d.ts +83 -0
  350. package/dist/nosql/pulsar/index.d.ts +105 -0
  351. package/dist/nosql/qdrant/index.d.ts +231 -0
  352. package/dist/nosql/qldb/index.d.ts +182 -0
  353. package/dist/nosql/qldb/index.js +302 -1
  354. package/dist/nosql/r2/index.d.ts +160 -0
  355. package/dist/nosql/rabbitmq/index.d.ts +131 -0
  356. package/dist/nosql/ravendb/index.d.ts +138 -0
  357. package/dist/nosql/ravendb/index.js +323 -9
  358. package/dist/nosql/ravendb/where.d.ts +38 -0
  359. package/dist/nosql/ravendb/where.js +94 -0
  360. package/dist/nosql/redis/index.d.ts +267 -0
  361. package/dist/nosql/redis/index.js +19 -5
  362. package/dist/nosql/redpanda/index.d.ts +117 -0
  363. package/dist/nosql/resque/index.d.ts +91 -0
  364. package/dist/nosql/rethinkdb/index.d.ts +194 -0
  365. package/dist/nosql/rethinkdb/index.js +290 -0
  366. package/dist/nosql/rethinkdb/where.d.ts +38 -0
  367. package/dist/nosql/rethinkdb/where.js +94 -0
  368. package/dist/nosql/rocksdb/document-layer.d.ts +162 -0
  369. package/dist/nosql/rocksdb/document-layer.js +338 -0
  370. package/dist/nosql/rocksdb/index.d.ts +112 -0
  371. package/dist/nosql/rocksdb/index.js +103 -1
  372. package/dist/nosql/rocksdb/where-match.d.ts +21 -0
  373. package/dist/nosql/rocksdb/where-match.js +238 -0
  374. package/dist/nosql/rockset/index.d.ts +84 -0
  375. package/dist/nosql/s3/index.d.ts +170 -0
  376. package/dist/nosql/scylladb/index.d.ts +117 -0
  377. package/dist/nosql/signoz/index.d.ts +116 -0
  378. package/dist/nosql/sns/index.d.ts +99 -0
  379. package/dist/nosql/solr/index.d.ts +129 -0
  380. package/dist/nosql/splunk/index.d.ts +125 -0
  381. package/dist/nosql/sqs/index.d.ts +116 -0
  382. package/dist/nosql/stardog/index.d.ts +86 -0
  383. package/dist/nosql/starrocks/index.d.ts +89 -0
  384. package/dist/nosql/store.d.ts +23 -0
  385. package/dist/nosql/sumologic/index.d.ts +119 -0
  386. package/dist/nosql/surrealdb/index.d.ts +156 -0
  387. package/dist/nosql/surrealdb/index.js +174 -1
  388. package/dist/nosql/surrealdb/query-compiler.d.ts +26 -0
  389. package/dist/nosql/surrealdb/query-compiler.js +193 -0
  390. package/dist/nosql/terminusdb/index.d.ts +95 -0
  391. package/dist/nosql/tigergraph/index.d.ts +314 -0
  392. package/dist/nosql/typesense/index.d.ts +82 -0
  393. package/dist/nosql/unqlite/index.d.ts +68 -0
  394. package/dist/nosql/upstash/index.d.ts +80 -0
  395. package/dist/nosql/vercel-kv/index.d.ts +82 -0
  396. package/dist/nosql/victoriametrics/index.d.ts +129 -0
  397. package/dist/nosql/virtuoso/index.d.ts +87 -0
  398. package/dist/nosql/weaviate/index.d.ts +196 -0
  399. package/dist/operators/index.d.ts +7 -0
  400. package/dist/operators.d.ts +2947 -0
  401. package/dist/operators.js +46 -1
  402. package/dist/prisma-migrate/index.d.ts +28 -0
  403. package/dist/prisma-migrate/migration-generator.d.ts +21 -0
  404. package/dist/prisma-migrate/model-generator.d.ts +12 -0
  405. package/dist/prisma-migrate/relations.d.ts +28 -0
  406. package/dist/prisma-migrate/schema-parser.d.ts +42 -0
  407. package/dist/prisma-migrate/type-mapper.d.ts +20 -0
  408. package/dist/prorm.d.ts +2093 -0
  409. package/dist/prorm.js +721 -302
  410. package/dist/query-builders/cte-builder.d.ts +104 -0
  411. package/dist/query-builders/functions/aggregate.d.ts +199 -0
  412. package/dist/query-builders/functions/conditional.d.ts +195 -0
  413. package/dist/query-builders/functions/datetime.d.ts +202 -0
  414. package/dist/query-builders/functions/fulltext.d.ts +220 -0
  415. package/dist/query-builders/functions/index.d.ts +17 -0
  416. package/dist/query-builders/functions/json.d.ts +157 -0
  417. package/dist/query-builders/functions/math.d.ts +215 -0
  418. package/dist/query-builders/functions/string.d.ts +233 -0
  419. package/dist/query-builders/functions/window.d.ts +209 -0
  420. package/dist/query-builders/include-builder.d.ts +85 -0
  421. package/dist/query-builders/index-expression-builder.d.ts +153 -0
  422. package/dist/query-builders/index.d.ts +121 -0
  423. package/dist/query-builders/index.js +10 -0
  424. package/dist/query-builders/insert-builder.d.ts +62 -0
  425. package/dist/query-builders/model-helpers.d.ts +28 -0
  426. package/dist/query-builders/order-limit-builder.d.ts +84 -0
  427. package/dist/query-builders/sql-compiler.d.ts +562 -0
  428. package/dist/query-builders/subquery-builder.d.ts +133 -0
  429. package/dist/query-builders/update-builder.d.ts +71 -0
  430. package/dist/query-builders/view-builder.d.ts +189 -0
  431. package/dist/query-builders/where-builder.d.ts +124 -0
  432. package/dist/query-interface.d.ts +407 -0
  433. package/dist/query-interface.js +84 -0
  434. package/dist/query-optimizers/batch-optimizer.d.ts +175 -0
  435. package/dist/query-optimizers/explain-plans.d.ts +187 -0
  436. package/dist/query-optimizers/index.d.ts +27 -0
  437. package/dist/query-optimizers/prepared-statement-cache.d.ts +252 -0
  438. package/dist/query-optimizers/query-hints.d.ts +201 -0
  439. package/dist/query-optimizers/query-optimizer.d.ts +162 -0
  440. package/dist/query-optimizers/slow-query-logger.d.ts +186 -0
  441. package/dist/replica-manager.d.ts +235 -0
  442. package/dist/schema/index.d.ts +7 -0
  443. package/dist/schema/migration-generator.d.ts +74 -0
  444. package/dist/schema/schema-differ.d.ts +114 -0
  445. package/dist/schema/types.d.ts +246 -0
  446. package/dist/schema-objects.d.ts +78 -0
  447. package/dist/schema-objects.js +203 -0
  448. package/dist/sql-constants.d.ts +240 -0
  449. package/dist/sqlite-advanced.d.ts +572 -0
  450. package/dist/streams/index.d.ts +5 -0
  451. package/dist/streams/transforms.d.ts +120 -0
  452. package/dist/transaction.d.ts +221 -0
  453. package/dist/types/index.d.ts +3123 -0
  454. package/dist/user-management.d.ts +141 -0
  455. package/dist/utils/date.d.ts +149 -0
  456. package/dist/utils/index.d.ts +359 -0
  457. package/dist/utils/string.d.ts +88 -0
  458. package/dist/validators/index.d.ts +7 -0
  459. package/dist/validators/validator.d.ts +306 -0
  460. package/package.json +20 -5
package/CHANGELOG.md CHANGED
@@ -5,6 +5,101 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.2.1]
9
+
10
+ ### Fixed
11
+
12
+ - `EagerLoadError` and `UnsupportedSchemaObjectError` were not exported from the
13
+ package root, so callers could not catch by name the errors that `include` and
14
+ the schema-object methods actually throw. Both are now exported, along with the
15
+ schema-object SQL builders and their option types (the two whose names already
16
+ existed in `./types` are aliased as `CreateSequenceOptions` and
17
+ `CreatePolicyOptions` rather than shadowing them). A test now pins the public
18
+ error surface.
19
+
20
+ ## [1.2.0]
21
+
22
+ ### Fixed — relations
23
+
24
+ - **Eager-load failures are no longer swallowed.** `include` caught every error
25
+ and reported an empty result, so a typo'd alias, a missing foreign key column,
26
+ an unresolvable through model and a genuinely childless parent were
27
+ indistinguishable. Failures now raise `EagerLoadError`; unknown or ambiguous
28
+ associations raise `AssociationError` before any query runs.
29
+ - **`hasOne` inferred its foreign key from the wrong model.** `User.hasOne(Profile)`
30
+ means `profiles.userId`; it produced `profileId`, a column that is never
31
+ populated, so the association always resolved to null.
32
+ - **One eager-loader instead of two.** `prorm.define()` and the class-based
33
+ `Model` API each had their own copy and they had drifted — the `model.ts` copy
34
+ treated `belongsTo` like `hasMany` and skipped `belongsToMany` entirely.
35
+ - **Ambiguous includes are reported.** Two associations to the same model (e.g.
36
+ `author` and `editor`) previously bound to whichever was registered first.
37
+ - **Composite foreign keys work.** Array `foreignKey` values were silently
38
+ dropped; they now emit a table-level `FOREIGN KEY` constraint.
39
+ - **Synthesized foreign key columns match the referenced key's type** instead of
40
+ being hardcoded `INTEGER`, which broke UUID and STRING primary keys.
41
+ - **Decorator associations bind regardless of registration order**, and a target
42
+ that is never registered fails `sync()` by name rather than silently omitting
43
+ the constraint.
44
+ - Association `scope` is now applied, by both `include` and the generated getters.
45
+
46
+ ### Fixed — core
47
+
48
+ - **`instance.save()` was broken for every model.** It swept internal
49
+ bookkeeping (`_previousDataValues`, `_changed`) into the UPDATE, so
50
+ `row.field = x; await row.save()` failed with `no such column`.
51
+ - **Attribute decorators are order-independent.** `@Column` replaced the whole
52
+ attribute entry, and stacked decorators apply bottom-up, so the documented
53
+ ordering discarded `@PrimaryKey` and `@AutoIncrement` — decorator-defined
54
+ models were getting tables with no primary key.
55
+ - **Auto-increment keys no longer fail their own INSERT**; create-time
56
+ validation exempts them and columns with a default.
57
+ - **`count()` issues a real aggregate.** It previously fetched every matching
58
+ row (eager-loading its associations) and took `.length`, and discarded
59
+ `distinct`, `col` and `group`.
60
+ - **Default `sync()` no longer creates a duplicate table.** Two of six table-name
61
+ derivations omitted pluralization, so `define('User')` + `sync()` created an
62
+ empty `User` beside `users` on every call.
63
+ - `sync()` creates tables in foreign-key dependency order.
64
+ - `findOrCreate` no longer inserts operator objects from `where`, and treats a
65
+ unique violation as a lost race.
66
+ - SQLite emitted `REFERENCES "users""id"` without parentheses in table-level
67
+ constraints.
68
+ - A table-level composite `PRIMARY KEY` no longer also gets an injected `id`.
69
+
70
+ ### Added
71
+
72
+ - **`@ExternalField`** — model fields whose contents live in an object or
73
+ key-value store while the row lives in the database. Register a store with
74
+ `prorm.registerStore()`; S3, MinIO, R2, GCS, Azure Blob and Redis are
75
+ supported directly, with their differing APIs normalized internally.
76
+ - **`required` / `include.where` filter parent rows**, applied before
77
+ `LIMIT`/`OFFSET` so pagination is correct, and composing through nesting.
78
+ - **Schema objects through the ORM**: `createSequence`, `createTrigger`,
79
+ `enableRowLevelSecurity`, `createPolicy` and `createFullTextIndex` on
80
+ `QueryInterface`, raising `UnsupportedSchemaObjectError` naming the
81
+ alternative where a database has no equivalent.
82
+ - **`sync()` applies annotation DDL** — `@View`, `@MaterializedView`, `@Trigger`,
83
+ and `@Procedure`/`@SqlFunction` via `prorm.registerProcedures()`.
84
+ - **`literalExpr(sql, bindings)`** substitutes values through each dialect's
85
+ escaping, so the escape hatch is no longer string concatenation.
86
+
87
+ ### Removed
88
+
89
+ - The orphaned parallel `@HasOne`/`@HasMany`/`@BelongsTo`/`@BelongsToMany` under
90
+ `src/decorators/`. They stored metadata that `addModel()` never read, so which
91
+ implementation an import resolved to decided whether the association existed.
92
+ The wired versions in `src/models/decorators.ts` are unchanged.
93
+
94
+ ### Packaging
95
+
96
+ - `prepublishOnly` now runs `check:package`, which fails the publish if `dist/`
97
+ contains no declarations or a declared entry point is missing. **1.1.0 shipped
98
+ zero `.d.ts` files** despite declaring `types`, leaving every TypeScript
99
+ consumer without types.
100
+ - Jest no longer scans stale worktrees under `.claude/`, which made `npm test`
101
+ (and therefore `npm publish`) fail.
102
+
8
103
  ## [Unreleased]
9
104
 
10
105
  ### Comprehensive Feature Reference
package/README.md CHANGED
@@ -1,18 +1,27 @@
1
- # prorm
1
+ # ts-prorm-orm
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/@mstone6969/prorm.svg?logo=npm)](https://www.npmjs.com/package/@mstone6969/prorm)
4
- [![npm downloads](https://img.shields.io/npm/dm/@mstone6969/prorm.svg)](https://www.npmjs.com/package/@mstone6969/prorm)
5
- [![license](https://img.shields.io/npm/l/@mstone6969/prorm.svg)](./LICENSE)
3
+ [![npm version](https://img.shields.io/npm/v/ts-prorm-orm.svg?logo=npm)](https://www.npmjs.com/package/ts-prorm-orm)
4
+ [![npm downloads](https://img.shields.io/npm/dm/ts-prorm-orm.svg)](https://www.npmjs.com/package/ts-prorm-orm)
5
+ [![license](https://img.shields.io/npm/l/ts-prorm-orm.svg)](./LICENSE)
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-ready-3178C6.svg?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
7
7
  [![pipeline status](https://gitlab.com/Malcolmston/prod-orm/badges/main/pipeline.svg)](https://gitlab.com/Malcolmston/prod-orm/-/pipelines)
8
8
 
9
9
  A TypeScript ORM supporting multiple database dialects with full TypeScript support.
10
10
 
11
- > Published on npm as **[`@mstone6969/prorm`](https://www.npmjs.com/package/@mstone6969/prorm)** — `npm install @mstone6969/prorm`
11
+ > Published on npm as **[`ts-prorm-orm`](https://www.npmjs.com/package/ts-prorm-orm)** — `npm install ts-prorm-orm`
12
12
 
13
13
  ## Features
14
14
 
15
- - **Multi-database support**: 14 dialects SQLite, MySQL, PostgreSQL, MariaDB, Oracle, MSSQL, CockroachDB, Amazon Redshift, IBM Db2, Snowflake, ClickHouse, DuckDB, SAP HANA, Google Cloud Spanner
15
+ - **Multi-database support**: 27 SQL dialects. Core implementations for SQLite,
16
+ PostgreSQL, MySQL, MariaDB, Oracle, MSSQL, CockroachDB, Amazon Redshift, IBM Db2,
17
+ Snowflake, ClickHouse, DuckDB, SAP HANA and Google Cloud Spanner; Postgres-derived
18
+ support for TimescaleDB, Greenplum, YugabyteDB, Vertica, Trino, Exasol, CrateDB,
19
+ QuestDB and Firebird; MySQL-derived for TiDB, SingleStore and Databricks; and
20
+ Turso/libSQL on SQLite. See [Supported Dialects](#supported-dialects) for what is
21
+ verified against a real engine.
22
+ - **Relations without SQL**: `hasOne`/`hasMany`/`belongsTo`/`belongsToMany` via
23
+ methods or decorators, eager loading with `include`, and `required` / `include.where`
24
+ to filter parents by their children — applied before `LIMIT`, so pagination is correct
16
25
  - **TypeScript-first**: Full TypeScript support with decorators
17
26
  - **CRUD operations**: Full query builder with associations, scopes, transactions
18
27
  - **Migrations**: Database versioning and seeding
@@ -20,13 +29,16 @@ A TypeScript ORM supporting multiple database dialects with full TypeScript supp
20
29
  - **Validation**: Built-in and custom validators
21
30
  - **Stored Procedures**: Create and call stored procedures (across supported dialects)
22
31
  - **Triggers**: Database triggers with FOR EACH ROW and WHEN clauses (across supported dialects)
23
- - **Sequences**: Sequence support across all dialects
32
+ - **Sequences**: `createSequence()` on PostgreSQL, MariaDB, Oracle, MSSQL, Db2 and
33
+ friends. SQLite and MySQL have no sequences and report that explicitly rather
34
+ than emitting SQL the driver rejects
24
35
  - **Table Partitions**: RANGE, LIST, HASH partitioning (across supported dialects)
25
36
  - **Partial Indexes**: Conditional indexes for MySQL, MariaDB, PostgreSQL, Oracle, MSSQL
26
37
  - **Row-Level Security (RLS)**: PostgreSQL, Oracle VPD, MSSQL Security Policies
27
38
  - **Materialized Views**: With FAST/COMPLETE refresh (PostgreSQL, Oracle)
28
39
  - **Views**: Database views support
29
- - **Full-Text Search**: SQLite FTS5 and PostgreSQL full-text search
40
+ - **Full-Text Search**: one `createFullTextIndex()` call resolves per dialect —
41
+ GIN over `to_tsvector` on PostgreSQL, `FULLTEXT` on MySQL/MariaDB, FTS5 on SQLite
30
42
  - **JSON/JSONB**: Native JSON data type support
31
43
  - **Spatial Data**: PostGIS support for PostgreSQL
32
44
  - **Foreign Data Wrappers**: PostgreSQL FDW support
@@ -36,6 +48,10 @@ A TypeScript ORM supporting multiple database dialects with full TypeScript supp
36
48
  - **Audit Logging**: Built-in audit trail functionality
37
49
  - **Polymorphic Associations**: Built-in helpers for polymorphic relationships
38
50
  - **Self-referential Associations**: Tree structure support
51
+ - **Object, key-value and document stores**: S3, MinIO, R2, GCS, Azure Blob, Redis,
52
+ MongoDB, DynamoDB, Cassandra, Elasticsearch and ~90 more ship as standalone
53
+ `*Store` classes with APIs matching each engine. These are **not** part of the
54
+ model/relation layer — see [NoSQL Stores](#nosql-stores)
39
55
 
40
56
  ## Installation
41
57
 
@@ -100,6 +116,19 @@ SQL dialects and 102 NoSQL/data stores (129 engines). Full taxonomy:
100
116
 
101
117
  ## Supported Dialects
102
118
 
119
+ **How these are verified.** SQLite and DuckDB are embedded, so the test suite runs
120
+ against the real engine on every commit. PostgreSQL, MySQL, MariaDB, MSSQL, Oracle,
121
+ CockroachDB and ClickHouse have real servers available via `docker-compose.test.yml`
122
+ and are exercised by `npm run test:integration`. The remaining dialects are covered
123
+ by unit tests against an in-memory SQL simulator, which checks generated SQL but not
124
+ engine behaviour. "Stable" below means the implementation is complete, not that it
125
+ has been run against that vendor's server in CI.
126
+
127
+ Dialects not listed in the table are implemented as subclasses of a core dialect and
128
+ inherit its behaviour: TimescaleDB, Greenplum, YugabyteDB, Vertica, Trino, Exasol,
129
+ CrateDB, QuestDB and Firebird extend PostgreSQL; TiDB, SingleStore and Databricks
130
+ extend MySQL; Turso/libSQL extends SQLite.
131
+
103
132
  | Dialect | Status | Features |
104
133
  |---------|--------|-----------|
105
134
  | SQLite | Stable | FTS5, CTEs, Window Functions, UPSERT |
@@ -152,7 +181,7 @@ index map, flowchart, tree, Chen-ER, package, gantt) built on a shared
152
181
  DOM-backed SVG builder with light/dark themes and configurable accent colours.
153
182
 
154
183
  ```ts
155
- import { ModelDiagram } from '@mstone6969/prorm';
184
+ import { ModelDiagram } from 'ts-prorm-orm';
156
185
 
157
186
  new ModelDiagram({
158
187
  name: 'User',
@@ -164,6 +193,74 @@ new ModelDiagram({
164
193
 
165
194
  See the [diagram module guide](./docs/diagrams/README.md) for every generator.
166
195
 
196
+ ## External Fields
197
+
198
+ A model field whose *contents* live in an object or key-value store, while the
199
+ row lives in the database. The table column holds only the object key; the ORM
200
+ keeps the two in step, so the link between a row and its object isn't something
201
+ you maintain by hand.
202
+
203
+ ```typescript
204
+ import { Prorm, DataTypes, ExternalField, Table, Column, PrimaryKey, AutoIncrement } from 'ts-prorm-orm';
205
+ import { S3Store } from 'ts-prorm-orm';
206
+
207
+ const s3 = new S3Store({ region: 'us-east-1' });
208
+ await s3.connect();
209
+
210
+ prorm.registerStore('assets', s3, { defaultBucket: 'avatars' });
211
+
212
+ @Table()
213
+ class User {
214
+ @Column(DataTypes.INTEGER())
215
+ @PrimaryKey()
216
+ @AutoIncrement()
217
+ declare id: number;
218
+
219
+ @Column(DataTypes.STRING(100))
220
+ declare name: string;
221
+
222
+ // `avatarKey` is registered for you; only the key is stored in the table
223
+ @ExternalField({ store: 'assets', contentType: 'image/png' })
224
+ declare avatar: Buffer;
225
+ }
226
+
227
+ prorm.addModel(User);
228
+ await prorm.sync();
229
+
230
+ const user = await User.create({ name: 'Ada' });
231
+
232
+ user.avatar = pngBytes;
233
+ await user.save(); // PUT to S3, then persists avatarKey
234
+
235
+ const fetched = await User.findByPk(user.id);
236
+ await fetched.loadAvatar(); // GET from S3
237
+ fetched.avatar; // Buffer
238
+
239
+ await fetched.deleteAvatar(); // removes the object and clears the key
240
+ await fetched.destroy(); // deleting the row cleans up its objects
241
+ ```
242
+
243
+ Each external field `x` gets `loadX()`, `saveX(value)`, `deleteX()` and `hasX()`.
244
+
245
+ **Any shipped store works without an adapter.** S3, MinIO, R2, GCS, Azure Blob
246
+ and Redis all have different method names (`putObject` vs `uploadObject` vs
247
+ `uploadBlob`; `deleteObject` vs `removeObject` vs `deleteBlob`) — these are
248
+ normalized internally, so `registerStore()` takes the store directly. Key-value
249
+ stores have no bucket concept, so a configured bucket becomes a key prefix, and
250
+ binary payloads round-trip through base64.
251
+
252
+ | Option | Default | Purpose |
253
+ |--------|---------|---------|
254
+ | `store` | — | Name the store was registered under |
255
+ | `bucket` | store's `defaultBucket` | Bucket/container; a key prefix on key-value stores |
256
+ | `keyColumn` | `<field>Key` | Column holding the object key |
257
+ | `keyPrefix` | `<field>/` | Prefix for generated keys |
258
+ | `contentType` | — | Recorded on write where the store supports it |
259
+ | `encoding` | `buffer` | `buffer`, `utf8`, or `json` (parsed on read, stringified on write) |
260
+
261
+ Pass your own object implementing `ExternalStoreAdapter` to `registerStore()` for
262
+ a store that isn't recognized.
263
+
167
264
  ## NoSQL Stores
168
265
 
169
266
  NoSQL engines don't share the SQL-shaped `Dialect` interface used above (no `query(sql)`, no identifier escaping, no DDL). Instead, each is its own store class under `src/nosql/<name>/`, exposing the operations that engine actually supports — see each store's README for full details.
@@ -175,7 +272,7 @@ NoSQL engines don't share the SQL-shaped `Dialect` interface used above (no `que
175
272
  | Amazon DynamoDB | Stable | `@aws-sdk/client-dynamodb` + `@aws-sdk/lib-dynamodb`, partition/sort-key CRUD, Query/Scan, batch and transactional writes, no arbitrary queries |
176
273
 
177
274
  ```ts
178
- import { MongoStore, RedisStore, DynamoDbStore } from '@mstone6969/prorm';
275
+ import { MongoStore, RedisStore, DynamoDbStore } from 'ts-prorm-orm';
179
276
 
180
277
  const mongo = new MongoStore({ uri: 'mongodb://localhost:27017', database: 'app' });
181
278
  await mongo.connect();
@@ -214,7 +311,7 @@ unit-tested without the driver installed. Full pages under
214
311
  | [RethinkDBStore](./docs/stores/rethinkdb.md) | `rethinkdb-ts` | RethinkDB |
215
312
 
216
313
  ```ts
217
- import { S3Store, KafkaStore } from '@mstone6969/prorm';
314
+ import { S3Store, KafkaStore } from 'ts-prorm-orm';
218
315
 
219
316
  const s3 = new S3Store({ region: 'us-east-1' });
220
317
  await s3.connect();
@@ -255,12 +352,13 @@ const User = prorm.define('User', {
255
352
  }
256
353
  });
257
354
 
258
- // Use FTS5 for full-text search
259
- await prorm.query(`
260
- CREATE VIRTUAL TABLE IF NOT EXISTS users_fts USING fts5(
261
- name, email, content='users', content_rowid='id'
262
- )
263
- `);
355
+ // Full-text search (FTS5 on SQLite, GIN/to_tsvector on Postgres,
356
+ // FULLTEXT on MySQL/MariaDB - the dialect decides)
357
+ await prorm.getQueryInterface().createFullTextIndex({
358
+ name: 'users_fts',
359
+ table: 'users',
360
+ columns: ['name', 'email'],
361
+ });
264
362
 
265
363
  // Upsert (INSERT OR REPLACE)
266
364
  await User.upsert({
@@ -304,18 +402,25 @@ const User = prorm.define('User', {
304
402
  }
305
403
  });
306
404
 
307
- // Create stored procedure
308
- await prorm.query(`
309
- CREATE PROCEDURE get_user_by_email(IN user_email VARCHAR(255))
310
- BEGIN
311
- SELECT * FROM users WHERE email = user_email;
312
- END
313
- `);
314
-
315
- // Call stored procedure
316
- await prorm.query('CALL get_user_by_email(?)', {
317
- replacements: ['john@example.com']
318
- });
405
+ // Declare a stored procedure with @Procedure, then let sync() create it
406
+ import { Procedure, ProcedureRegistry } from 'ts-prorm-orm';
407
+
408
+ class UserProcedures {
409
+ @Procedure({
410
+ name: 'get_user_by_email',
411
+ params: [{ name: 'user_email', type: 'VARCHAR(255)', mode: 'IN' }],
412
+ body: 'SELECT * FROM users WHERE email = user_email;',
413
+ })
414
+ getUserByEmail(email: string) {}
415
+ }
416
+
417
+ prorm.registerProcedures(UserProcedures);
418
+ await prorm.sync(); // issues the CREATE PROCEDURE
419
+
420
+ // Call it
421
+ const rows = await ProcedureRegistry.call(
422
+ prorm, UserProcedures, 'getUserByEmail', ['john@example.com']
423
+ );
319
424
  ```
320
425
 
321
426
  ### PostgreSQL
@@ -356,26 +461,26 @@ const User = prorm.define('User', {
356
461
  properties: DataTypes.HSTORE,
357
462
  });
358
463
 
359
- // Row-Level Security (RLS)
360
- await prorm.query(`
361
- ALTER TABLE users ENABLE ROW LEVEL SECURITY
362
- `);
464
+ const qi = prorm.getQueryInterface();
363
465
 
364
- await prorm.query(`
365
- CREATE POLICY users_policy ON users
366
- USING (user_id = current_user_id())
367
- `);
466
+ // Row-Level Security (RLS)
467
+ await qi.enableRowLevelSecurity('users');
468
+ await qi.createPolicy({
469
+ name: 'users_policy',
470
+ table: 'users',
471
+ using: 'user_id = current_user_id()',
472
+ });
368
473
 
369
474
  // Full-text search
370
- await prorm.query(`
371
- CREATE INDEX users_fts_idx ON users
372
- USING GIN (to_tsvector('english', name || ' ' || email))
373
- `);
475
+ await qi.createFullTextIndex({
476
+ name: 'users_fts_idx',
477
+ table: 'users',
478
+ columns: ['name', 'email'],
479
+ language: 'english',
480
+ });
374
481
 
375
- // Sequence example
376
- await prorm.query(`
377
- CREATE SEQUENCE user_id_seq START WITH 1000
378
- `);
482
+ // Sequence
483
+ await qi.createSequence('user_id_seq', { start: 1000 });
379
484
  ```
380
485
 
381
486
  ### MariaDB
@@ -411,17 +516,22 @@ const Product = prorm.define('Product', {
411
516
  attributes: DataTypes.JSON,
412
517
  });
413
518
 
414
- // Stored procedure
415
- await prorm.query(`
416
- CREATE PROCEDURE get_products_by_price(IN min_price DECIMAL(10,2))
417
- BEGIN
418
- SELECT * FROM products WHERE price >= min_price;
419
- END
420
- `);
519
+ // Stored procedure - declared once, created by sync()
520
+ class ProductProcedures {
521
+ @Procedure({
522
+ name: 'get_products_by_price',
523
+ params: [{ name: 'min_price', type: 'DECIMAL(10,2)', mode: 'IN' }],
524
+ body: 'SELECT * FROM products WHERE price >= min_price;',
525
+ })
526
+ getProductsByPrice(minPrice: number) {}
527
+ }
528
+
529
+ prorm.registerProcedures(ProductProcedures);
530
+ await prorm.sync();
421
531
 
422
- await prorm.query('CALL get_products_by_price(?)', {
423
- replacements: [10.00]
424
- });
532
+ const rows = await ProcedureRegistry.call(
533
+ prorm, ProductProcedures, 'getProductsByPrice', [10.0]
534
+ );
425
535
  ```
426
536
 
427
537
  ### Oracle
@@ -453,19 +563,23 @@ const Employee = prorm.define('Employee', {
453
563
  });
454
564
 
455
565
  // Oracle sequence
456
- await prorm.query(`
457
- CREATE SEQUENCE employee_seq START WITH 1000 INCREMENT BY 1
458
- `);
566
+ await prorm.getQueryInterface().createSequence('employee_seq', {
567
+ start: 1000,
568
+ increment: 1,
569
+ });
459
570
 
460
- // Stored procedure with OUT parameter
461
- await prorm.query(`
462
- CREATE OR REPLACE PROCEDURE get_employee_count(
463
- p_count OUT NUMBER
464
- ) AS
465
- BEGIN
466
- SELECT COUNT(*) INTO p_count FROM employees;
467
- END;
468
- `);
571
+ // Stored procedure with an OUT parameter
572
+ class EmployeeProcedures {
573
+ @Procedure({
574
+ name: 'get_employee_count',
575
+ params: [{ name: 'p_count', type: 'NUMBER', mode: 'OUT' }],
576
+ body: 'SELECT COUNT(*) INTO p_count FROM employees;',
577
+ })
578
+ getEmployeeCount() {}
579
+ }
580
+
581
+ prorm.registerProcedures(EmployeeProcedures);
582
+ await prorm.sync();
469
583
  ```
470
584
 
471
585
  ### MSSQL
@@ -499,11 +613,14 @@ const Order = prorm.define('Order', {
499
613
  });
500
614
 
501
615
  // MSSQL sequence
502
- await prorm.query(`
503
- CREATE SEQUENCE order_id_seq START WITH 1000 INCREMENT BY 1
504
- `);
616
+ await prorm.getQueryInterface().createSequence('order_id_seq', {
617
+ start: 1000,
618
+ increment: 1,
619
+ });
505
620
 
506
- // Row-Level Security
621
+ // Row-Level Security. SQL Server models RLS as a security policy bound to a
622
+ // predicate function rather than as a per-table policy, and prorm has no
623
+ // builder for it yet - this is one of the few places raw SQL is still needed.
507
624
  await prorm.query(`
508
625
  CREATE SECURITY POLICY SalesFilter
509
626
  ADD FILTER PREDICATE dbo.fn_tenantAccessPredicate(TenantId)
@@ -515,7 +632,7 @@ await prorm.query(`
515
632
 
516
633
  ```bash
517
634
  # Generate a model
518
- npm run model:generate -- --name User --attributes name:string,email:string
635
+ npm run model:create -- --name User --attributes name:string,email:string
519
636
 
520
637
  # Run migrations
521
638
  npm run model:create
@@ -568,6 +685,11 @@ In-depth, code-level reference docs for each major subsystem, living alongside t
568
685
 
569
686
  Online documentation: [GitLab Pages](https://malcolmston.gitlab.io/prod-orm)
570
687
 
688
+ ## Contributing
689
+
690
+ See [CONTRIBUTING.md](./CONTRIBUTING.md) for the development workflow, testing,
691
+ the release/publish flow, and the CI/CD + deployment runbook.
692
+
571
693
  ## License
572
694
 
573
695
  MIT
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Audit History Query methods
3
+ * Provides model-level and instance-level methods for querying audit history
4
+ */
5
+ import { AuditLogger } from './logger';
6
+ /**
7
+ * Set the global AuditLogger instance
8
+ * This should be called once when setting up audit logging
9
+ *
10
+ * @param logger - The AuditLogger instance
11
+ */
12
+ export declare function setAuditLogger(logger: AuditLogger): void;
13
+ /**
14
+ * Get the current AuditLogger instance
15
+ */
16
+ export declare function getAuditLogger(): AuditLogger | null;
17
+ /**
18
+ * Add model-level audit history methods to a Model class
19
+ *
20
+ * @param model - The Model static (class) to add methods to
21
+ */
22
+ export declare function addAuditHistoryToModel(model: any): void;
23
+ /**
24
+ * Add instance-level audit history methods to a ModelInstance
25
+ *
26
+ * @param instance - The Model instance prototype
27
+ */
28
+ export declare function addAuditHistoryToInstance(instance: any): void;
29
+ declare const _default: {
30
+ setAuditLogger: typeof setAuditLogger;
31
+ getAuditLogger: typeof getAuditLogger;
32
+ addAuditHistoryToModel: typeof addAuditHistoryToModel;
33
+ addAuditHistoryToInstance: typeof addAuditHistoryToInstance;
34
+ };
35
+ export default _default;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Audit Module
3
+ * Provides audit logging capabilities for tracking model changes
4
+ */
5
+ export { AuditLogger, AuditLog, AuditLoggerOptions } from './logger';
6
+ export { setAuditLogger, getAuditLogger, addAuditHistoryToModel, addAuditHistoryToInstance, } from './history-query';
7
+ import { AuditLogger } from './logger';
8
+ import { setAuditLogger, getAuditLogger, addAuditHistoryToModel, addAuditHistoryToInstance } from './history-query';
9
+ declare const _default: {
10
+ AuditLogger: typeof AuditLogger;
11
+ setAuditLogger: typeof setAuditLogger;
12
+ getAuditLogger: typeof getAuditLogger;
13
+ addAuditHistoryToModel: typeof addAuditHistoryToModel;
14
+ addAuditHistoryToInstance: typeof addAuditHistoryToInstance;
15
+ };
16
+ export default _default;
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Audit Logger for the TypeScript ORM
3
+ * Provides persistent audit logging for model changes with database storage
4
+ */
5
+ import { Prorm, ModelStatic } from '../prorm';
6
+ /**
7
+ * Represents a single audit log entry
8
+ */
9
+ export interface AuditLog {
10
+ /** Unique identifier for the audit log entry */
11
+ id: number;
12
+ /** Name of the table that was modified */
13
+ tableName: string;
14
+ /** Type of action performed (CREATE, UPDATE, DELETE) */
15
+ action: 'CREATE' | 'UPDATE' | 'DELETE';
16
+ /** Primary key identifier of the affected record */
17
+ recordId: string | number;
18
+ /** Previous state of the record (for UPDATE/DELETE) */
19
+ oldValues?: Record<string, any>;
20
+ /** New state of the record (for CREATE/UPDATE) */
21
+ newValues?: Record<string, any>;
22
+ /** ID of the user who made the change */
23
+ userId?: string | number;
24
+ /** Timestamp of when the change occurred */
25
+ timestamp: Date;
26
+ /** IP address of the client that made the change */
27
+ ipAddress?: string;
28
+ }
29
+ /**
30
+ * Options for configuring the AuditLogger
31
+ */
32
+ export interface AuditLoggerOptions {
33
+ /** Custom table name for the audit log. Default: 'AuditLogs' */
34
+ tableName?: string;
35
+ /** Function to get the current user ID */
36
+ userIdGetter?: () => string | number | undefined;
37
+ /** Function to get the current IP address */
38
+ ipAddressGetter?: () => string | undefined;
39
+ /** Custom model name for the audit log model */
40
+ modelName?: string;
41
+ }
42
+ /**
43
+ * AuditLogger - Provides persistent audit logging for model changes
44
+ *
45
+ * @example
46
+ * const auditLogger = new AuditLogger(prorm);
47
+ * await auditLogger.setupHooks();
48
+ *
49
+ * // Manually log an action
50
+ * await auditLogger.logAction('CREATE', 'User', 1, {}, { name: 'John' });
51
+ *
52
+ * // Get audit history
53
+ * const history = await auditLogger.getHistory('User', 1);
54
+ */
55
+ export declare class AuditLogger {
56
+ private prorm;
57
+ private options;
58
+ private auditModel;
59
+ private hookedModels;
60
+ /**
61
+ * Create a new AuditLogger instance
62
+ *
63
+ * @param prorm - The Prorm instance
64
+ * @param options - Optional configuration options
65
+ */
66
+ constructor(prorm: Prorm, options?: AuditLoggerOptions);
67
+ /**
68
+ * Get the audit model
69
+ */
70
+ getModel(): ModelStatic<any> | null;
71
+ /**
72
+ * Get the current user ID
73
+ */
74
+ private getUserId;
75
+ /**
76
+ * Get the current IP address
77
+ */
78
+ private getIpAddress;
79
+ /**
80
+ * Define and create the audit log model
81
+ */
82
+ private ensureAuditModel;
83
+ /**
84
+ * Log an audit action
85
+ *
86
+ * @param action - The type of action (CREATE, UPDATE, DELETE)
87
+ * @param tableName - The name of the table
88
+ * @param recordId - The primary key of the record
89
+ * @param oldValues - The previous values (for UPDATE/DELETE)
90
+ * @param newValues - The new values (for CREATE/UPDATE)
91
+ */
92
+ logAction(action: 'CREATE' | 'UPDATE' | 'DELETE', tableName: string, recordId: string | number, oldValues?: Record<string, any>, newValues?: Record<string, any>): Promise<void>;
93
+ /**
94
+ * Get audit history for a table and optional record
95
+ *
96
+ * @param tableName - The name of the table
97
+ * @param recordId - Optional record ID to filter by
98
+ * @param options - Query options
99
+ */
100
+ getHistory(tableName: string, recordId?: string | number, options?: {
101
+ limit?: number;
102
+ offset?: number;
103
+ startDate?: Date;
104
+ endDate?: Date;
105
+ }): Promise<AuditLog[]>;
106
+ /**
107
+ * Setup hooks for all models to automatically log changes
108
+ *
109
+ * This method iterates through all registered models and adds
110
+ * beforeCreate, beforeUpdate, and beforeDestroy hooks
111
+ */
112
+ setupHooks(): void;
113
+ /**
114
+ * Add audit hooks to a specific model
115
+ *
116
+ * @param model - The model to add hooks to
117
+ */
118
+ addHooksToModel(model: ModelStatic<any>): void;
119
+ /**
120
+ * Check if a model has audit hooks
121
+ *
122
+ * @param model - The model to check
123
+ */
124
+ hasHooks(model: ModelStatic<any>): boolean;
125
+ }
126
+ export default AuditLogger;