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
@@ -0,0 +1,276 @@
1
+ /**
2
+ * YugabyteDB dialect implementation for the TypeScript ORM
3
+ *
4
+ * YugabyteDB's YSQL API reuses the PostgreSQL query layer (it is literally
5
+ * forked from the PostgreSQL source), so it speaks the PostgreSQL wire
6
+ * protocol and is largely SQL-compatible with PostgreSQL. This dialect
7
+ * therefore `extends PostgresDialect` and reuses the same `pg` driver
8
+ * (`library === 'pg'`). Notable differences from the Postgres dialect that
9
+ * this class layers on top:
10
+ *
11
+ * - Default port is 5433 (not Postgres's 5432). YugabyteDB's YSQL server
12
+ * listens on 5433 by default; 5432 is used by other services in some
13
+ * deployments.
14
+ * - `SPLIT INTO n TABLETS` / `SPLIT AT VALUES (...)`: because YugabyteDB
15
+ * shards ("tablets") tables across nodes, `CREATE TABLE`/`CREATE INDEX`
16
+ * accepts pre-splitting clauses to control the initial tablet layout.
17
+ * `SPLIT INTO n TABLETS` presplits a hash-sharded table/index into `n`
18
+ * tablets; `SPLIT AT VALUES ((a), (b), ...)` presplits a range-sharded
19
+ * table/index at the given range boundaries. See
20
+ * https://docs.yugabyte.com/preview/api/ysql/the-sql-language/statements/ddl_create_table/#split-into
21
+ * - Colocated tables: small tables can be co-located onto a single tablet
22
+ * with `WITH (colocated = true)` (older syntax) / `WITH (colocation = true)`
23
+ * to avoid the overhead of a tablet-per-table. See
24
+ * https://docs.yugabyte.com/preview/architecture/docdb-sharding/colocated-tables/
25
+ * - Primary-key column ordering: unlike Postgres, a YugabyteDB primary key
26
+ * column carries a sharding/sort directive — `HASH` (hash-sharded, the
27
+ * default for the first PK column) or `ASC`/`DESC` (range-sharded). This is
28
+ * emitted as `PRIMARY KEY (id HASH, created_at DESC)`. See
29
+ * https://docs.yugabyte.com/preview/architecture/docdb-sharding/sharding/
30
+ * - `CREATE TABLEGROUP`: YugabyteDB groups tables that should share tablets
31
+ * into a tablegroup; `createTableGroup()` is a small helper that emits the
32
+ * DDL and `buildCreateTableGroupSQL()` builds it synchronously.
33
+ *
34
+ * Behavioral notes shared with PostgreSQL (inherited, called out here so
35
+ * callers know the caveats):
36
+ * - Because YSQL is the PostgreSQL wire protocol, connection handling,
37
+ * parameter binding, transactions, and most query building are inherited
38
+ * unchanged from {@link PostgresDialect}.
39
+ * - `CREATE INDEX ... CONCURRENTLY` behaves differently: in YugabyteDB online
40
+ * index backfill is the default mechanism and `CONCURRENTLY` has its own
41
+ * semantics/restrictions (and cannot run inside a transaction block), so it
42
+ * should not be assumed to behave identically to vanilla PostgreSQL.
43
+ * - Some PostgreSQL system-catalog (`pg_catalog`) internals differ: YugabyteDB
44
+ * emulates the catalogs for compatibility but a handful of columns/values
45
+ * reflect its distributed storage rather than a single-node heap.
46
+ */
47
+ import { PostgresDialect, PostgresDialectOptions, PostgresTransaction } from '../postgres/index';
48
+ import { ColumnDefinition, TableOptions, IndexOptions } from '../dialect';
49
+ import { QueryOptions, QueryResult, TransactionOptions } from '../../types';
50
+ /**
51
+ * Sharding/sort directive for a single YugabyteDB primary-key column.
52
+ *
53
+ * - `HASH` — hash-shard on this column (the storage is distributed by a hash
54
+ * of the column; only meaningful on leading PK columns).
55
+ * - `ASC` / `DESC` — range-shard, storing rows in ascending/descending order
56
+ * of this column.
57
+ */
58
+ export type YugabytePrimaryKeyOrder = 'HASH' | 'ASC' | 'DESC';
59
+ /** A single primary-key column together with its sharding/sort directive. */
60
+ export interface YugabytePrimaryKeyColumn {
61
+ /** Column name */
62
+ name: string;
63
+ /** Sharding/sort order for this PK column (`HASH` / `ASC` / `DESC`). */
64
+ order?: YugabytePrimaryKeyOrder;
65
+ }
66
+ /**
67
+ * YugabyteDB-specific `CREATE TABLE` options. These extend the shared
68
+ * {@link TableOptions} with YugabyteDB's distributed-storage knobs. Passed
69
+ * alongside the common options to {@link YugabyteDBDialect.buildCreateTableSQL}
70
+ * / {@link YugabyteDBDialect.createTable}.
71
+ */
72
+ export interface YugabyteTableOptions extends TableOptions {
73
+ /**
74
+ * Table-level primary key with per-column sharding/sort directives, emitted
75
+ * as `PRIMARY KEY (col HASH, col2 ASC, ...)`. Use this (instead of the
76
+ * column-level `primaryKey: true`) when the PK needs an explicit `HASH` /
77
+ * `ASC` / `DESC` layout.
78
+ */
79
+ primaryKey?: YugabytePrimaryKeyColumn[];
80
+ /**
81
+ * Presplit a hash-sharded table into this many tablets:
82
+ * `SPLIT INTO n TABLETS`.
83
+ */
84
+ splitIntoTablets?: number;
85
+ /**
86
+ * Presplit a range-sharded table at the given boundaries:
87
+ * `SPLIT AT VALUES ((a), (b), ...)`. Each inner array is one split point's
88
+ * column value(s).
89
+ */
90
+ splitAtValues?: Array<Array<string | number>>;
91
+ /**
92
+ * Co-locate this table onto the database's colocation tablet:
93
+ * `WITH (colocated = true)`.
94
+ */
95
+ colocated?: boolean;
96
+ /** Alias for {@link YugabyteTableOptions.colocated} using the newer keyword `colocation`. */
97
+ colocation?: boolean;
98
+ /** Place the table in a tablegroup: `TABLEGROUP name`. */
99
+ tablegroup?: string;
100
+ }
101
+ /** Options for {@link YugabyteDBDialect.createTableGroup}. */
102
+ export interface YugabyteCreateTableGroupOptions {
103
+ /** Emit `IF NOT EXISTS`. */
104
+ ifNotExists?: boolean;
105
+ /** Owner role for the tablegroup (`OWNER role`). */
106
+ owner?: string;
107
+ }
108
+ /**
109
+ * YugabyteDB connection options — identical to {@link PostgresDialectOptions}
110
+ * (same `pg` driver), just defaulting to port 5433.
111
+ */
112
+ export interface YugabyteDBDialectOptions extends PostgresDialectOptions {
113
+ }
114
+ /**
115
+ * Options for {@link YugabyteDBDialect.runTransaction}: the standard
116
+ * {@link TransactionOptions} plus a `maxRetries` cap on how many times the
117
+ * transaction body is re-run after a retryable (serialization/conflict) error.
118
+ */
119
+ export interface YugabyteRunTransactionOptions extends TransactionOptions {
120
+ /**
121
+ * Maximum number of times the transaction body is retried after a retryable
122
+ * error (SQLSTATE 40001 serialization failure, 40P01 deadlock, or a
123
+ * YugabyteDB "Restart read required"/conflict abort) before the error is
124
+ * rethrown. Defaults to 5.
125
+ */
126
+ maxRetries?: number;
127
+ }
128
+ /**
129
+ * YugabyteDB dialect. Postgres-wire-compatible: reuses the `pg` driver and the
130
+ * PostgreSQL query-building layer, layering on YugabyteDB's distributed-table
131
+ * DDL (tablet splitting, colocation, hash/range primary keys, tablegroups).
132
+ */
133
+ export declare class YugabyteDBDialect extends PostgresDialect {
134
+ readonly name: YugabyteDBDialect["name"];
135
+ constructor(config: YugabyteDBDialectOptions);
136
+ /** Default cap on transaction/statement retries after a retryable error. */
137
+ private static readonly DEFAULT_MAX_RETRIES;
138
+ /**
139
+ * Determine whether an error signals that the client should retry the
140
+ * transaction (or statement) that produced it. Detects the SQLSTATE codes
141
+ * (`40001`, `40P01`) as well as YugabyteDB's textual conflict/read-restart
142
+ * signals, which some driver/wrapper paths surface without a `.code`.
143
+ */
144
+ isRetryableError(error: unknown): boolean;
145
+ /** Sleep with capped exponential backoff + jitter for retry attempt `n` (1-based). */
146
+ private backoffDelay;
147
+ /**
148
+ * Execute a single SQL statement, automatically retrying it on a retryable
149
+ * serialization/conflict error. Statements run through {@link query} are
150
+ * auto-committed by the server, so retrying the whole statement is safe and
151
+ * correct. Statements executed inside an explicit transaction go through the
152
+ * transaction's own client (not this method), so they are unaffected — use
153
+ * {@link runTransaction} to retry a multi-statement unit of work atomically.
154
+ */
155
+ query(sql: string, options?: QueryOptions): Promise<QueryResult>;
156
+ /**
157
+ * Run a function inside a YugabyteDB transaction, retrying the *entire
158
+ * transaction body* on a retryable serialization/conflict error (SQLSTATE
159
+ * `40001`/`40P01`, or a "Restart read required"/conflict abort). This
160
+ * implements YugabyteDB's documented client-side retry contract: on a
161
+ * retryable failure the transaction is rolled back and re-run from the
162
+ * beginning on a fresh connection.
163
+ *
164
+ * @param fn - Callback that receives the transaction and performs the work to
165
+ * (re)try. It may be invoked more than once, so it must be idempotent apart
166
+ * from its database effects (which are rolled back between attempts).
167
+ * @param options - Transaction options plus an optional `maxRetries` (default
168
+ * 5) capping how many times `fn` is retried before the error is rethrown.
169
+ */
170
+ runTransaction<T>(fn: (tx: PostgresTransaction) => Promise<T>, options?: YugabyteRunTransactionOptions): Promise<T>;
171
+ /**
172
+ * Quote a `SPLIT AT VALUES` / `PRIMARY KEY` scalar for inlining into DDL:
173
+ * numbers pass through, everything else is single-quoted and escaped.
174
+ */
175
+ private quoteSplitValue;
176
+ /**
177
+ * Build the trailing YugabyteDB-specific clauses for a `CREATE TABLE`
178
+ * statement (colocation, tablegroup, tablet splitting), in the order
179
+ * YugabyteDB expects them. Returns an empty string when none apply.
180
+ */
181
+ private buildYugabyteTableClauses;
182
+ /**
183
+ * Format a column `DEFAULT` value for inlining into DDL. Mirrors the base
184
+ * PostgreSQL dialect's behavior (which lives in a private helper we cannot
185
+ * call from here): numbers/booleans pass through; strings that look like a
186
+ * SQL function call (`gen_random_uuid()`), a `CURRENT_*` keyword, or `NULL`
187
+ * are emitted raw rather than quoted; `DataType` instances that expose
188
+ * `toDefaultValue()` (e.g. `DataTypes.NOW`) delegate to it; everything else
189
+ * is single-quoted and escaped.
190
+ */
191
+ private formatDefaultValue;
192
+ /**
193
+ * Emit a column-level `REFERENCES` (foreign key) clause, if the column
194
+ * carries one. Handles composite reference targets.
195
+ */
196
+ private buildColumnReferencesSql;
197
+ /**
198
+ * Build a single column definition for a `CREATE TABLE` statement. Kept
199
+ * self-contained (rather than reusing the base class's private helper) so
200
+ * this dialect can synchronously assemble DDL. Column-level `primaryKey` is
201
+ * intentionally NOT emitted here — YugabyteDB primary keys are emitted as a
202
+ * table-level `PRIMARY KEY (...)` (see {@link buildPrimaryKeyClause}) so the
203
+ * per-column `HASH`/`ASC`/`DESC` directive can be attached.
204
+ */
205
+ private buildColumnDefinitionSql;
206
+ /**
207
+ * Build a table-level constraint clause (`PRIMARY KEY`/`UNIQUE`/
208
+ * `FOREIGN KEY`/`CHECK`) for inlining into a `CREATE TABLE` statement.
209
+ * Mirrors the base PostgreSQL dialect's private helper (which we cannot call
210
+ * from here). Returns null for an unrecognized/empty constraint.
211
+ */
212
+ private buildYbConstraintSql;
213
+ /**
214
+ * Build the table-level `PRIMARY KEY (col HASH, col2 ASC, ...)` clause from
215
+ * either the explicit {@link YugabyteTableOptions.primaryKey} directive list
216
+ * or, failing that, any columns flagged with column-level `primaryKey: true`
217
+ * (which get no explicit sharding directive). Returns null when there is no
218
+ * primary key to emit.
219
+ */
220
+ private buildPrimaryKeyClause;
221
+ /**
222
+ * Synchronously build a YugabyteDB `CREATE TABLE` statement, including the
223
+ * distributed-table clauses (hash/range primary key, colocation,
224
+ * tablegroup, tablet splitting). Used by {@link createTable} and directly
225
+ * testable without a live connection.
226
+ */
227
+ buildCreateTableSQL(tableName: string, columns: Record<string, ColumnDefinition>, options?: YugabyteTableOptions): string;
228
+ /**
229
+ * Create a new table. Overrides {@link PostgresDialect.createTable} so the
230
+ * YugabyteDB-specific clauses (tablet splitting, colocation, hash/range
231
+ * primary keys, tablegroup) are emitted. Falls back to the inherited
232
+ * Postgres implementation when no YugabyteDB-specific option is present, so
233
+ * indexes/comments/uniqueKeys handling is preserved for the common case.
234
+ */
235
+ createTable(tableName: string, columns: Record<string, ColumnDefinition>, options?: YugabyteTableOptions): Promise<void>;
236
+ /**
237
+ * Emit the follow-up statements PostgresDialect runs after `CREATE TABLE`
238
+ * (unique keys, table comment, sequence start value, secondary indexes).
239
+ * Kept here because the base dialect performs them inline in its own
240
+ * `createTable`, which the YugabyteDB custom-DDL path bypasses.
241
+ */
242
+ private applyPostCreateTableSteps;
243
+ /**
244
+ * Add an index to a table.
245
+ *
246
+ * Overrides {@link PostgresDialect.addIndex} only to account for
247
+ * YugabyteDB's `CREATE INDEX ... CONCURRENTLY` divergence: in YugabyteDB
248
+ * index backfill is already online by default, and `CONCURRENTLY` carries
249
+ * different semantics/restrictions (notably it cannot run inside a
250
+ * transaction block). Like the CockroachDB dialect, a requested
251
+ * `concurrently` flag is ignored (with a warning) rather than emitted, so
252
+ * the generated SQL stays safe to run in the common (transactional) case.
253
+ * All other index-building behavior is inherited unchanged.
254
+ */
255
+ addIndex(tableName: string, indexName: string, fields?: string[], options?: IndexOptions): Promise<void>;
256
+ /**
257
+ * Build a `CREATE TABLEGROUP` statement synchronously.
258
+ */
259
+ buildCreateTableGroupSQL(name: string, options?: YugabyteCreateTableGroupOptions): string;
260
+ /**
261
+ * Create a tablegroup (`CREATE TABLEGROUP name`). Tables created with the
262
+ * `tablegroup` option share the tablegroup's tablets.
263
+ */
264
+ createTableGroup(name: string, options?: YugabyteCreateTableGroupOptions): Promise<void>;
265
+ /**
266
+ * Drop a tablegroup (`DROP TABLEGROUP [IF EXISTS] name`).
267
+ */
268
+ dropTableGroup(name: string, options?: {
269
+ ifExists?: boolean;
270
+ }): Promise<void>;
271
+ }
272
+ /**
273
+ * Create a new YugabyteDB dialect instance.
274
+ */
275
+ export declare function createYugabyteDBDialect(options?: YugabyteDBDialectOptions): YugabyteDBDialect;
276
+ export default YugabyteDBDialect;
@@ -63,6 +63,108 @@ class YugabyteDBDialect extends index_1.PostgresDialect {
63
63
  // pg driver, so `library` ('pg') is inherited unchanged.
64
64
  this.name = 'yugabytedb';
65
65
  }
66
+ /**
67
+ * Determine whether an error signals that the client should retry the
68
+ * transaction (or statement) that produced it. Detects the SQLSTATE codes
69
+ * (`40001`, `40P01`) as well as YugabyteDB's textual conflict/read-restart
70
+ * signals, which some driver/wrapper paths surface without a `.code`.
71
+ */
72
+ isRetryableError(error) {
73
+ if (!error) {
74
+ return false;
75
+ }
76
+ const err = error;
77
+ if (err.code === '40001' || err.code === '40P01') {
78
+ return true;
79
+ }
80
+ if (err.cause && err.cause !== error && this.isRetryableError(err.cause)) {
81
+ return true;
82
+ }
83
+ const message = typeof err.message === 'string' ? err.message : String(error);
84
+ const normalized = message.toLowerCase();
85
+ return (message.includes('40001') ||
86
+ message.includes('40P01') ||
87
+ normalized.includes('serialization_failure') ||
88
+ normalized.includes('could not serialize') ||
89
+ normalized.includes('restart read required') ||
90
+ normalized.includes('read restart') ||
91
+ normalized.includes('restart transaction') ||
92
+ normalized.includes('conflicts with higher priority transaction') ||
93
+ normalized.includes('conflicts with committed transaction') ||
94
+ normalized.includes('transaction aborted') ||
95
+ normalized.includes('all transparent retries exhausted') ||
96
+ normalized.includes('operation expired'));
97
+ }
98
+ /** Sleep with capped exponential backoff + jitter for retry attempt `n` (1-based). */
99
+ async backoffDelay(attempt) {
100
+ const base = 50;
101
+ const max = 2000;
102
+ const delay = Math.min(max, base * 2 ** (attempt - 1));
103
+ const jittered = delay / 2 + Math.random() * (delay / 2);
104
+ await new Promise((resolve) => setTimeout(resolve, jittered));
105
+ }
106
+ /**
107
+ * Execute a single SQL statement, automatically retrying it on a retryable
108
+ * serialization/conflict error. Statements run through {@link query} are
109
+ * auto-committed by the server, so retrying the whole statement is safe and
110
+ * correct. Statements executed inside an explicit transaction go through the
111
+ * transaction's own client (not this method), so they are unaffected — use
112
+ * {@link runTransaction} to retry a multi-statement unit of work atomically.
113
+ */
114
+ async query(sql, options) {
115
+ const maxRetries = YugabyteDBDialect.DEFAULT_MAX_RETRIES;
116
+ for (let attempt = 0;; attempt++) {
117
+ try {
118
+ return await super.query(sql, options);
119
+ }
120
+ catch (error) {
121
+ if (attempt < maxRetries && this.isRetryableError(error)) {
122
+ await this.backoffDelay(attempt + 1);
123
+ continue;
124
+ }
125
+ throw error;
126
+ }
127
+ }
128
+ }
129
+ /**
130
+ * Run a function inside a YugabyteDB transaction, retrying the *entire
131
+ * transaction body* on a retryable serialization/conflict error (SQLSTATE
132
+ * `40001`/`40P01`, or a "Restart read required"/conflict abort). This
133
+ * implements YugabyteDB's documented client-side retry contract: on a
134
+ * retryable failure the transaction is rolled back and re-run from the
135
+ * beginning on a fresh connection.
136
+ *
137
+ * @param fn - Callback that receives the transaction and performs the work to
138
+ * (re)try. It may be invoked more than once, so it must be idempotent apart
139
+ * from its database effects (which are rolled back between attempts).
140
+ * @param options - Transaction options plus an optional `maxRetries` (default
141
+ * 5) capping how many times `fn` is retried before the error is rethrown.
142
+ */
143
+ async runTransaction(fn, options) {
144
+ const maxRetries = options?.maxRetries ?? YugabyteDBDialect.DEFAULT_MAX_RETRIES;
145
+ for (let attempt = 0;; attempt++) {
146
+ const transaction = (await this.startTransaction(options));
147
+ try {
148
+ const result = await fn(transaction);
149
+ await this.commitTransaction(transaction);
150
+ return result;
151
+ }
152
+ catch (error) {
153
+ try {
154
+ await this.rollbackTransaction(transaction);
155
+ }
156
+ catch {
157
+ // The connection/transaction may already be unusable after the abort;
158
+ // ignore the rollback failure and act on the original error.
159
+ }
160
+ if (attempt < maxRetries && this.isRetryableError(error)) {
161
+ await this.backoffDelay(attempt + 1);
162
+ continue;
163
+ }
164
+ throw error;
165
+ }
166
+ }
167
+ }
66
168
  /**
67
169
  * Quote a `SPLIT AT VALUES` / `PRIMARY KEY` scalar for inlining into DDL:
68
170
  * numbers pass through, everything else is single-quoted and escaped.
@@ -415,6 +517,25 @@ class YugabyteDBDialect extends index_1.PostgresDialect {
415
517
  }
416
518
  }
417
519
  exports.YugabyteDBDialect = YugabyteDBDialect;
520
+ // ---------------------------------------------------------------------------
521
+ // Distributed transaction retry.
522
+ //
523
+ // YugabyteDB is a distributed, strongly-consistent SQL database. Like
524
+ // CockroachDB (and unlike single-node Postgres), concurrent transactions can
525
+ // abort mid-flight with a serialization/conflict error that the client is
526
+ // expected to retry — SQLSTATE 40001 ("could not serialize"), 40P01
527
+ // (deadlock), or a YugabyteDB-specific "Restart read required"/"conflicts
528
+ // with ... transaction" abort. The inherited Postgres dialect performs no
529
+ // such retry (its query() only retries connection-level errors, and only when
530
+ // an explicit `retry` option is passed), so YugabyteDB layers automatic retry
531
+ // on top: single statements retry in `query()`, and multi-statement units of
532
+ // work retry as a whole via `runTransaction()`.
533
+ //
534
+ // @see https://docs.yugabyte.com/preview/architecture/transactions/read-restart-error/
535
+ // @see https://docs.yugabyte.com/preview/develop/learn/transactions/transactions-retries-ysql/
536
+ // ---------------------------------------------------------------------------
537
+ /** Default cap on transaction/statement retries after a retryable error. */
538
+ YugabyteDBDialect.DEFAULT_MAX_RETRIES = 5;
418
539
  /**
419
540
  * Create a new YugabyteDB dialect instance.
420
541
  */