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,194 @@
1
+ /**
2
+ * RethinkDB store implementation.
3
+ *
4
+ * RethinkDB is a document store whose queries are built by chaining methods
5
+ * on a term-builder (`r`) and executed with a trailing `.run()` - e.g.
6
+ * `r.table('users').filter({ active: true }).run(conn)`. That fluent,
7
+ * function-composition query model is nothing like the SQL-shaped `Dialect`
8
+ * interface (no `query(sql)`, no identifier escaping, no relational DDL), so
9
+ * this class implements the minimal `NoSqlStore` marker interface for
10
+ * connection lifecycle and otherwise exposes RethinkDB's real surface
11
+ * directly: document CRUD, ReQL `filter` predicates, table/database
12
+ * creation, and a `run()` escape hatch for arbitrary ReQL terms.
13
+ *
14
+ * Uses the `rethinkdb-ts` driver. The driver is lazily `require`d inside
15
+ * `connect()` so importing this module never forces `rethinkdb-ts` to be
16
+ * installed; the term-builder (`r`) and/or a `connection` can also be
17
+ * injected via the constructor options (used by the tests, and handy when a
18
+ * pool is managed elsewhere), in which case `connect()` skips the require.
19
+ */
20
+ import { NoSqlStore } from '../store';
21
+ /**
22
+ * Connection options for `RethinkDBStore`.
23
+ *
24
+ * `host`/`port`/`db` configure the connection made by the lazily-required
25
+ * `rethinkdb-ts` driver. Alternatively, an already-built term-builder (`r`)
26
+ * and/or an established `connection` can be injected: when `r` is provided,
27
+ * `connect()` uses it as-is and does not `require('rethinkdb-ts')`; when
28
+ * `connection` is provided, queries run against it (single-connection mode)
29
+ * instead of a driver-managed pool.
30
+ */
31
+ export interface RethinkDBStoreOptions {
32
+ /** RethinkDB host. Defaults to `'localhost'`. */
33
+ host?: string;
34
+ /** RethinkDB client-driver port. Defaults to `28015`. */
35
+ port?: number;
36
+ /** Default database queries run against. Defaults to `'test'`. */
37
+ db?: string;
38
+ /**
39
+ * Injected `rethinkdb-ts` term-builder. When provided, `connect()` uses
40
+ * it directly and skips `require('rethinkdb-ts')` (used by tests to inject
41
+ * a mock, and to share an `r` configured elsewhere).
42
+ */
43
+ r?: any;
44
+ /**
45
+ * Injected connection. When provided, queries `.run(connection)` against
46
+ * it (single-connection mode) rather than relying on the driver's pool.
47
+ */
48
+ connection?: any;
49
+ }
50
+ /** One `[field, direction]` ordering term, e.g. `['createdAt', 'DESC']`. */
51
+ export type OrderTerm = [string, 'ASC' | 'DESC'] | string;
52
+ /** Options for {@link RethinkDBStore.findAll}/{@link RethinkDBStore.findOne}. */
53
+ export interface RethinkFindOptions {
54
+ /** Ordering terms applied in sequence. A bare string sorts ascending. */
55
+ order?: OrderTerm | OrderTerm[];
56
+ /** Maximum number of documents to return. */
57
+ limit?: number;
58
+ /** Number of leading documents to skip (offset). */
59
+ offset?: number;
60
+ }
61
+ /** A group-aggregation request for {@link RethinkDBStore.aggregate}. */
62
+ export interface RethinkAggregateOptions {
63
+ /** ORM `where` filter applied before grouping. */
64
+ where?: Record<string | symbol, unknown>;
65
+ /** Field(s) to group by. Omit for a single whole-table group. */
66
+ groupBy?: string | string[];
67
+ /** Emit a `count` per group. */
68
+ count?: boolean;
69
+ /** Fields to `sum` per group, keyed by output name → source field. */
70
+ sum?: Record<string, string>;
71
+ /** Fields to `avg` per group, keyed by output name → source field. */
72
+ avg?: Record<string, string>;
73
+ /** Fields to `min` per group, keyed by output name → source field. */
74
+ min?: Record<string, string>;
75
+ /** Fields to `max` per group, keyed by output name → source field. */
76
+ max?: Record<string, string>;
77
+ }
78
+ /**
79
+ * `RethinkDBStore` wraps the `rethinkdb-ts` term-builder (`r`) in a small,
80
+ * promise-based convenience layer over document CRUD, ReQL `filter`
81
+ * queries, and table/database creation, plus a `run()` escape hatch for
82
+ * arbitrary ReQL terms.
83
+ */
84
+ export declare class RethinkDBStore implements NoSqlStore {
85
+ readonly name = "rethinkdb";
86
+ readonly library = "rethinkdb-ts";
87
+ private readonly options;
88
+ /** The `rethinkdb-ts` term-builder (`r`) once connected. */
89
+ private r;
90
+ /** A single connection, when in single-connection (injected) mode. */
91
+ private connection;
92
+ private connected;
93
+ constructor(options?: RethinkDBStoreOptions);
94
+ connect(): Promise<void>;
95
+ disconnect(): Promise<void>;
96
+ isConnected(): boolean;
97
+ /** Returns the underlying `rethinkdb-ts` term-builder (`r`). */
98
+ getClient(): unknown;
99
+ private requireR;
100
+ /**
101
+ * Execute a built ReQL query. In single-connection mode the connection is
102
+ * passed to `.run(connection)`; with a driver-managed pool `.run()` needs
103
+ * no argument.
104
+ */
105
+ private runQuery;
106
+ private exec;
107
+ /** Insert a document (or array of documents) into `table`. */
108
+ insert<T = any>(table: string, doc: Record<string, unknown> | Record<string, unknown>[]): Promise<T>;
109
+ /** Fetch a single document from `table` by its primary key. Resolves to `null` if not found. */
110
+ get<T = any>(table: string, id: unknown): Promise<T | null>;
111
+ /** Partially update the document with primary key `id` in `table`, merging `patch`. */
112
+ update<T = any>(table: string, id: unknown, patch: Record<string, unknown>): Promise<T>;
113
+ /** Delete the document with primary key `id` from `table`. */
114
+ delete<T = any>(table: string, id: unknown): Promise<T>;
115
+ /**
116
+ * Return all documents in `table` matching `predicate` as an array.
117
+ * `predicate` is any ReQL `filter` argument - a match object
118
+ * (`{ active: true }`) or a predicate function (`row => row('age').gt(18)`).
119
+ * The result is materialized (cursor drained to an array) before returning.
120
+ */
121
+ filter<T = any>(table: string, predicate: unknown): Promise<T[]>;
122
+ /** Drain a ReQL cursor to an array (arrays and plain values are passed through). */
123
+ private toArray;
124
+ private applyOrderLimit;
125
+ /**
126
+ * Fetch all documents in `table` matching an ORM `where` clause, with
127
+ * optional ordering, offset, and limit. The `where` object accepts the full
128
+ * ORM operator surface (`Op.gt`, `Op.in`, `Op.like`, `Op.and`/`Op.or`, ...),
129
+ * translated to a native ReQL `filter` predicate - so standard queries never
130
+ * require hand-written ReQL.
131
+ */
132
+ findAll<T = any>(table: string, where?: Record<string | symbol, unknown>, options?: RethinkFindOptions): Promise<T[]>;
133
+ /** Fetch the first document in `table` matching an ORM `where` clause (respecting `order`), or `null`. */
134
+ findOne<T = any>(table: string, where?: Record<string | symbol, unknown>, options?: Omit<RethinkFindOptions, 'limit'>): Promise<T | null>;
135
+ /** Count documents in `table` matching an ORM `where` clause. */
136
+ count(table: string, where?: Record<string | symbol, unknown>): Promise<number>;
137
+ /** Update every document in `table` matching an ORM `where` clause, merging `patch`. */
138
+ updateWhere<T = any>(table: string, where: Record<string | symbol, unknown>, patch: Record<string, unknown>): Promise<T>;
139
+ /** Delete every document in `table` matching an ORM `where` clause. */
140
+ deleteWhere<T = any>(table: string, where: Record<string | symbol, unknown>): Promise<T>;
141
+ /**
142
+ * Insert `doc`, updating (or replacing) the existing row on a primary-key
143
+ * conflict - RethinkDB's native upsert via `insert(..., { conflict })`.
144
+ */
145
+ upsert<T = any>(table: string, doc: Record<string, unknown> | Record<string, unknown>[], conflict?: 'update' | 'replace'): Promise<T>;
146
+ /** Distinct values of `field` across `table` (optionally over a secondary index). */
147
+ distinct<T = any>(table: string, field?: string, index?: string): Promise<T[]>;
148
+ /** Fetch documents whose key (or secondary-index value) is one of `keys`. */
149
+ getAll<T = any>(table: string, keys: unknown[], index?: string): Promise<T[]>;
150
+ /**
151
+ * Grouped aggregation over `table` using ReQL's native `group`/reduction
152
+ * chain (`count`/`sum`/`avg`/`min`/`max`), with an optional ORM `where`
153
+ * pre-filter. Returns one entry per group: `{ group, ...aggregates }`.
154
+ */
155
+ aggregate(table: string, options?: RethinkAggregateOptions): Promise<Array<Record<string, unknown>>>;
156
+ /** Create a secondary index on `table`. `indexer` may be a field name, list of fields (compound), or a ReQL function. */
157
+ indexCreate<T = any>(table: string, name: string, indexer?: unknown, options?: Record<string, unknown>): Promise<T>;
158
+ /** Drop a secondary index from `table`. */
159
+ indexDrop<T = any>(table: string, name: string): Promise<T>;
160
+ /** List secondary index names on `table`. */
161
+ indexList(table: string): Promise<string[]>;
162
+ /** Wait for one or all secondary indexes on `table` to finish building. */
163
+ indexWait<T = any>(table: string, ...names: string[]): Promise<T>;
164
+ /**
165
+ * Create a table. Pass a single `name` to create it in the connection's
166
+ * default database, or `(db, name)` to create it in a specific database.
167
+ */
168
+ createTable<T = any>(dbOrName: string, name?: string): Promise<T>;
169
+ /** Drop a table. Pass a single `name`, or `(db, name)` for a specific database. */
170
+ dropTable<T = any>(dbOrName: string, name?: string): Promise<T>;
171
+ /** List tables in the default (or given) database. */
172
+ listTables(db?: string): Promise<string[]>;
173
+ /** Create a database. */
174
+ createDatabase<T = any>(name: string): Promise<T>;
175
+ /** Drop a database. */
176
+ dropDatabase<T = any>(name: string): Promise<T>;
177
+ /** List all databases. */
178
+ listDatabases(): Promise<string[]>;
179
+ /**
180
+ * RethinkDB has no multi-document transactions. Single-document writes are
181
+ * atomic, and {@link updateWhere}/{@link deleteWhere} apply atomically per
182
+ * document, but there is no way to commit changes across documents/tables
183
+ * as a unit. This throws a clear, typed capability error rather than
184
+ * silently pretending to provide isolation.
185
+ */
186
+ withTransaction<T>(_fn: (store: this) => Promise<T>): Promise<never>;
187
+ /**
188
+ * Run an arbitrary ReQL `query` term (built from `getClient()`), for
189
+ * operations not wrapped here. In single-connection mode the store's
190
+ * connection is supplied to `.run()` automatically.
191
+ */
192
+ run<T = any>(query: any): Promise<T>;
193
+ }
194
+ export default RethinkDBStore;
@@ -21,9 +21,113 @@
21
21
  Object.defineProperty(exports, "__esModule", { value: true });
22
22
  exports.RethinkDBStore = void 0;
23
23
  const errors_1 = require("../../errors");
24
+ const operators_1 = require("../../operators");
25
+ const where_1 = require("./where");
24
26
  const DEFAULT_HOST = 'localhost';
25
27
  const DEFAULT_PORT = 28015;
26
28
  const DEFAULT_DB = 'test';
29
+ /** Whether `order` is a single `[field, direction]` tuple rather than a list of terms. */
30
+ function isSingleOrderTerm(order) {
31
+ return (order.length === 2 &&
32
+ typeof order[0] === 'string' &&
33
+ (order[1] === 'ASC' || order[1] === 'DESC'));
34
+ }
35
+ /** Access a possibly-dotted field path on a ReQL `row`, e.g. `a.b` → `row('a')('b')`. */
36
+ function reqlField(row, field) {
37
+ const parts = field.split('.');
38
+ let acc = row(parts[0]);
39
+ for (let i = 1; i < parts.length; i++)
40
+ acc = acc(parts[i]);
41
+ return acc;
42
+ }
43
+ /**
44
+ * Render a {@link WhereNode} into a ReQL predicate function
45
+ * (`row => booleanTerm`) using the term-builder `r`. Covers the standard ORM
46
+ * comparison and logical operators so callers never hand-write ReQL filters.
47
+ */
48
+ function buildReqlPredicate(r, node) {
49
+ switch (node.kind) {
50
+ case 'true':
51
+ return () => r.expr(true);
52
+ case 'and': {
53
+ const parts = node.nodes.map((n) => buildReqlPredicate(r, n));
54
+ return (row) => parts.slice(1).reduce((acc, p) => acc.and(p(row)), parts[0] ? parts[0](row) : r.expr(true));
55
+ }
56
+ case 'or': {
57
+ const parts = node.nodes.map((n) => buildReqlPredicate(r, n));
58
+ return (row) => parts.slice(1).reduce((acc, p) => acc.or(p(row)), parts[0] ? parts[0](row) : r.expr(false));
59
+ }
60
+ case 'not': {
61
+ const inner = buildReqlPredicate(r, node.node);
62
+ return (row) => inner(row).not();
63
+ }
64
+ case 'cmp':
65
+ return (row) => buildReqlCmp(r, row, node.field, node.op, node.value);
66
+ }
67
+ }
68
+ function buildReqlCmp(r, row, field, op, value) {
69
+ const f = reqlField(row, field);
70
+ switch (op) {
71
+ case operators_1.Op.eq:
72
+ return value === null ? f.eq(null).or(r.not(row.hasFields(field))) : f.eq(value);
73
+ case operators_1.Op.ne:
74
+ return value === null ? f.eq(null).not().and(row.hasFields(field)) : f.ne(value);
75
+ case operators_1.Op.gt:
76
+ return f.gt(value);
77
+ case operators_1.Op.gte:
78
+ return f.ge(value);
79
+ case operators_1.Op.lt:
80
+ return f.lt(value);
81
+ case operators_1.Op.lte:
82
+ return f.le(value);
83
+ case operators_1.Op.in:
84
+ return r.expr(value).contains(f);
85
+ case operators_1.Op.notIn:
86
+ return r.expr(value).contains(f).not();
87
+ case operators_1.Op.between: {
88
+ const [lo, hi] = value;
89
+ return f.ge(lo).and(f.le(hi));
90
+ }
91
+ case operators_1.Op.notBetween: {
92
+ const [lo, hi] = value;
93
+ return f.ge(lo).and(f.le(hi)).not();
94
+ }
95
+ case operators_1.Op.isNull:
96
+ return f.eq(null).or(r.not(row.hasFields(field)));
97
+ case operators_1.Op.isNotNull:
98
+ return row.hasFields(field).and(f.eq(null).not());
99
+ case operators_1.Op.like:
100
+ return f.match((0, where_1.likeToRegex)(String(value)));
101
+ case operators_1.Op.notLike:
102
+ return f.match((0, where_1.likeToRegex)(String(value))).not();
103
+ case operators_1.Op.iLike:
104
+ return f.match((0, where_1.likeToRegex)(String(value), true));
105
+ case operators_1.Op.notILike:
106
+ return f.match((0, where_1.likeToRegex)(String(value), true)).not();
107
+ case operators_1.Op.startsWith:
108
+ return f.match(`^${escapeReqlRegex(String(value))}`);
109
+ case operators_1.Op.endsWith:
110
+ return f.match(`${escapeReqlRegex(String(value))}$`);
111
+ case operators_1.Op.substring:
112
+ case operators_1.Op.contains:
113
+ return f.match(escapeReqlRegex(String(value)));
114
+ case operators_1.Op.regexp:
115
+ return f.match(String(value));
116
+ case operators_1.Op.notRegexp:
117
+ return f.match(String(value)).not();
118
+ case operators_1.Op.iRegexp:
119
+ return f.match(`(?i)${String(value)}`);
120
+ case operators_1.Op.notIRegexp:
121
+ return f.match(`(?i)${String(value)}`).not();
122
+ default:
123
+ throw new errors_1.DatabaseError(`RethinkDB: unsupported where operator "${op.toString()}"`, {
124
+ code: errors_1.ErrorCodes.QUERY_ERROR,
125
+ });
126
+ }
127
+ }
128
+ function escapeReqlRegex(s) {
129
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
130
+ }
27
131
  function wrapConnectionError(err, host) {
28
132
  const parent = err instanceof Error ? err : new Error(String(err));
29
133
  const message = /econnrefused/i.test(parent.message)
@@ -189,6 +293,159 @@ class RethinkDBStore {
189
293
  return result == null ? [] : [result];
190
294
  }
191
295
  // ---------------------------------------------------------------------
296
+ // ORM-shaped queries (no hand-written ReQL required)
297
+ // ---------------------------------------------------------------------
298
+ applyOrderLimit(r, query, options = {}) {
299
+ let q = query;
300
+ if (options.order !== undefined) {
301
+ const terms = Array.isArray(options.order) && !isSingleOrderTerm(options.order)
302
+ ? options.order
303
+ : [options.order];
304
+ const reqlTerms = terms.map((term) => {
305
+ if (typeof term === 'string')
306
+ return r.asc(term);
307
+ const [field, dir] = term;
308
+ return dir === 'DESC' ? r.desc(field) : r.asc(field);
309
+ });
310
+ q = q.orderBy(...reqlTerms);
311
+ }
312
+ if (typeof options.offset === 'number')
313
+ q = q.skip(options.offset);
314
+ if (typeof options.limit === 'number')
315
+ q = q.limit(options.limit);
316
+ return q;
317
+ }
318
+ /**
319
+ * Fetch all documents in `table` matching an ORM `where` clause, with
320
+ * optional ordering, offset, and limit. The `where` object accepts the full
321
+ * ORM operator surface (`Op.gt`, `Op.in`, `Op.like`, `Op.and`/`Op.or`, ...),
322
+ * translated to a native ReQL `filter` predicate - so standard queries never
323
+ * require hand-written ReQL.
324
+ */
325
+ async findAll(table, where = {}, options = {}) {
326
+ const result = await this.exec((r) => {
327
+ const pred = buildReqlPredicate(r, (0, where_1.parseWhere)(where));
328
+ return this.applyOrderLimit(r, r.table(table).filter(pred), options);
329
+ }, 'findAll');
330
+ return this.toArray(result);
331
+ }
332
+ /** Fetch the first document in `table` matching an ORM `where` clause (respecting `order`), or `null`. */
333
+ async findOne(table, where = {}, options = {}) {
334
+ const rows = await this.findAll(table, where, { ...options, limit: 1 });
335
+ return rows.length > 0 ? rows[0] : null;
336
+ }
337
+ /** Count documents in `table` matching an ORM `where` clause. */
338
+ async count(table, where = {}) {
339
+ return this.exec((r) => {
340
+ const pred = buildReqlPredicate(r, (0, where_1.parseWhere)(where));
341
+ return r.table(table).filter(pred).count();
342
+ }, 'count');
343
+ }
344
+ /** Update every document in `table` matching an ORM `where` clause, merging `patch`. */
345
+ async updateWhere(table, where, patch) {
346
+ return this.exec((r) => {
347
+ const pred = buildReqlPredicate(r, (0, where_1.parseWhere)(where));
348
+ return r.table(table).filter(pred).update(patch);
349
+ }, 'updateWhere');
350
+ }
351
+ /** Delete every document in `table` matching an ORM `where` clause. */
352
+ async deleteWhere(table, where) {
353
+ return this.exec((r) => {
354
+ const pred = buildReqlPredicate(r, (0, where_1.parseWhere)(where));
355
+ return r.table(table).filter(pred).delete();
356
+ }, 'deleteWhere');
357
+ }
358
+ /**
359
+ * Insert `doc`, updating (or replacing) the existing row on a primary-key
360
+ * conflict - RethinkDB's native upsert via `insert(..., { conflict })`.
361
+ */
362
+ async upsert(table, doc, conflict = 'update') {
363
+ return this.exec((r) => r.table(table).insert(doc, { conflict }), 'upsert');
364
+ }
365
+ /** Distinct values of `field` across `table` (optionally over a secondary index). */
366
+ async distinct(table, field, index) {
367
+ const result = await this.exec((r) => {
368
+ let q = r.table(table);
369
+ if (index)
370
+ return q.distinct({ index });
371
+ if (field)
372
+ q = q.getField(field);
373
+ return q.distinct();
374
+ }, 'distinct');
375
+ return this.toArray(result);
376
+ }
377
+ /** Fetch documents whose key (or secondary-index value) is one of `keys`. */
378
+ async getAll(table, keys, index) {
379
+ const result = await this.exec((r) => index ? r.table(table).getAll(...keys, { index }) : r.table(table).getAll(...keys), 'getAll');
380
+ return this.toArray(result);
381
+ }
382
+ /**
383
+ * Grouped aggregation over `table` using ReQL's native `group`/reduction
384
+ * chain (`count`/`sum`/`avg`/`min`/`max`), with an optional ORM `where`
385
+ * pre-filter. Returns one entry per group: `{ group, ...aggregates }`.
386
+ */
387
+ async aggregate(table, options = {}) {
388
+ const result = await this.exec((r) => {
389
+ let q = r.table(table);
390
+ if (options.where)
391
+ q = q.filter(buildReqlPredicate(r, (0, where_1.parseWhere)(options.where)));
392
+ const groupFields = options.groupBy
393
+ ? Array.isArray(options.groupBy)
394
+ ? options.groupBy
395
+ : [options.groupBy]
396
+ : [];
397
+ const grouped = groupFields.length > 0 ? q.group(...groupFields) : q.group(() => r.expr(null));
398
+ const aggregates = {};
399
+ if (options.count)
400
+ aggregates.count = grouped.count();
401
+ for (const [out, src] of Object.entries(options.sum ?? {}))
402
+ aggregates[out] = grouped.sum(src);
403
+ for (const [out, src] of Object.entries(options.avg ?? {}))
404
+ aggregates[out] = grouped.avg(src);
405
+ for (const [out, src] of Object.entries(options.min ?? {}))
406
+ aggregates[out] = grouped.min(src)(src);
407
+ for (const [out, src] of Object.entries(options.max ?? {}))
408
+ aggregates[out] = grouped.max(src)(src);
409
+ if (Object.keys(aggregates).length === 0)
410
+ aggregates.count = grouped.count();
411
+ // Ungroup each aggregate stream and merge by group key on the client.
412
+ const streams = Object.entries(aggregates).map(([name, agg]) => agg.ungroup().map((row) => ({ group: row('group'), name, value: row('reduction') })));
413
+ return r.union(...streams).coerceTo('array');
414
+ }, 'aggregate');
415
+ const rows = await this.toArray(result);
416
+ const byGroup = new Map();
417
+ for (const row of rows) {
418
+ const key = JSON.stringify(row.group);
419
+ const entry = byGroup.get(key) ?? { group: row.group };
420
+ entry[row.name] = row.value;
421
+ byGroup.set(key, entry);
422
+ }
423
+ return Array.from(byGroup.values());
424
+ }
425
+ // ---------------------------------------------------------------------
426
+ // Secondary indexes
427
+ // ---------------------------------------------------------------------
428
+ /** Create a secondary index on `table`. `indexer` may be a field name, list of fields (compound), or a ReQL function. */
429
+ async indexCreate(table, name, indexer, options) {
430
+ return this.exec((r) => {
431
+ if (indexer === undefined)
432
+ return r.table(table).indexCreate(name, options);
433
+ return r.table(table).indexCreate(name, indexer, options);
434
+ }, 'indexCreate');
435
+ }
436
+ /** Drop a secondary index from `table`. */
437
+ async indexDrop(table, name) {
438
+ return this.exec((r) => r.table(table).indexDrop(name), 'indexDrop');
439
+ }
440
+ /** List secondary index names on `table`. */
441
+ async indexList(table) {
442
+ return this.exec((r) => r.table(table).indexList(), 'indexList');
443
+ }
444
+ /** Wait for one or all secondary indexes on `table` to finish building. */
445
+ async indexWait(table, ...names) {
446
+ return this.exec((r) => (names.length > 0 ? r.table(table).indexWait(...names) : r.table(table).indexWait()), 'indexWait');
447
+ }
448
+ // ---------------------------------------------------------------------
192
449
  // Schema / administration
193
450
  // ---------------------------------------------------------------------
194
451
  /**
@@ -201,10 +458,43 @@ class RethinkDBStore {
201
458
  }
202
459
  return this.exec((r) => r.tableCreate(dbOrName), 'createTable');
203
460
  }
461
+ /** Drop a table. Pass a single `name`, or `(db, name)` for a specific database. */
462
+ async dropTable(dbOrName, name) {
463
+ if (name !== undefined) {
464
+ return this.exec((r) => r.db(dbOrName).tableDrop(name), 'dropTable');
465
+ }
466
+ return this.exec((r) => r.tableDrop(dbOrName), 'dropTable');
467
+ }
468
+ /** List tables in the default (or given) database. */
469
+ async listTables(db) {
470
+ return this.exec((r) => (db ? r.db(db).tableList() : r.tableList()), 'listTables');
471
+ }
204
472
  /** Create a database. */
205
473
  async createDatabase(name) {
206
474
  return this.exec((r) => r.dbCreate(name), 'createDatabase');
207
475
  }
476
+ /** Drop a database. */
477
+ async dropDatabase(name) {
478
+ return this.exec((r) => r.dbDrop(name), 'dropDatabase');
479
+ }
480
+ /** List all databases. */
481
+ async listDatabases() {
482
+ return this.exec((r) => r.dbList(), 'listDatabases');
483
+ }
484
+ // ---------------------------------------------------------------------
485
+ // Transactions (unsupported)
486
+ // ---------------------------------------------------------------------
487
+ /**
488
+ * RethinkDB has no multi-document transactions. Single-document writes are
489
+ * atomic, and {@link updateWhere}/{@link deleteWhere} apply atomically per
490
+ * document, but there is no way to commit changes across documents/tables
491
+ * as a unit. This throws a clear, typed capability error rather than
492
+ * silently pretending to provide isolation.
493
+ */
494
+ async withTransaction(_fn) {
495
+ throw new errors_1.DatabaseError('RethinkDB does not support multi-document transactions. Single-document writes are atomic; ' +
496
+ 'for cross-document atomicity model the data in one document or use conditional (compare-and-set) updates.', { code: errors_1.ErrorCodes.QUERY_ERROR });
497
+ }
208
498
  // ---------------------------------------------------------------------
209
499
  // Escape hatch
210
500
  // ---------------------------------------------------------------------
@@ -0,0 +1,38 @@
1
+ /** A single field comparison, e.g. `age >= 18`. */
2
+ export interface CmpNode {
3
+ kind: 'cmp';
4
+ field: string;
5
+ op: symbol;
6
+ value: unknown;
7
+ }
8
+ /** A normalized boolean tree produced by {@link parseWhere}. */
9
+ export type WhereNode = CmpNode | {
10
+ kind: 'and';
11
+ nodes: WhereNode[];
12
+ } | {
13
+ kind: 'or';
14
+ nodes: WhereNode[];
15
+ } | {
16
+ kind: 'not';
17
+ node: WhereNode;
18
+ } | {
19
+ kind: 'true';
20
+ };
21
+ /**
22
+ * Parse an ORM `where` object into a {@link WhereNode} tree.
23
+ *
24
+ * - String keys are field conditions: a scalar means equality, an array means
25
+ * `Op.in`, and a nested `{ [Op.*]: value }` object expands to one comparison
26
+ * per operator.
27
+ * - `Op.and`/`Op.or` take an array of sub-`where` objects; `Op.not` negates a
28
+ * single sub-`where`.
29
+ */
30
+ export declare function parseWhere(where: Record<string | symbol, unknown> | undefined | null): WhereNode;
31
+ /** Escape a string for safe inclusion in a regular expression. */
32
+ export declare function escapeRegex(s: string): string;
33
+ /**
34
+ * Translate a SQL `LIKE`/`ILIKE` pattern into an anchored regular expression
35
+ * (`%` → `.*`, `_` → `.`), so stores that only speak regex can honor ORM
36
+ * `Op.like` queries without the caller hand-writing a pattern.
37
+ */
38
+ export declare function likeToRegex(pattern: string, caseInsensitive?: boolean): string;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseWhere = parseWhere;
4
+ exports.escapeRegex = escapeRegex;
5
+ exports.likeToRegex = likeToRegex;
6
+ /**
7
+ * ORM where-clause parser for the RethinkDB store.
8
+ *
9
+ * Turns the ORM's `where` shape (plain-object field conditions, `Op.*`
10
+ * comparison symbols, and `Op.and`/`Op.or`/`Op.not` logical symbols) into a
11
+ * small, store-agnostic {@link WhereNode} tree that the store then renders to
12
+ * a ReQL `filter` predicate. This is what lets callers write standard ORM
13
+ * queries (`{ age: { [Op.gte]: 18 } }`) instead of hand-building ReQL row
14
+ * predicates.
15
+ */
16
+ const operators_1 = require("../../operators");
17
+ /** Whether `v` is a plain object carrying `Op.*` comparison symbols (e.g. `{ [Op.gt]: 5 }`). */
18
+ function hasOpSymbols(v) {
19
+ return (v !== null &&
20
+ typeof v === 'object' &&
21
+ !Array.isArray(v) &&
22
+ Object.getOwnPropertySymbols(v).length > 0);
23
+ }
24
+ /**
25
+ * Parse an ORM `where` object into a {@link WhereNode} tree.
26
+ *
27
+ * - String keys are field conditions: a scalar means equality, an array means
28
+ * `Op.in`, and a nested `{ [Op.*]: value }` object expands to one comparison
29
+ * per operator.
30
+ * - `Op.and`/`Op.or` take an array of sub-`where` objects; `Op.not` negates a
31
+ * single sub-`where`.
32
+ */
33
+ function parseWhere(where) {
34
+ if (!where)
35
+ return { kind: 'true' };
36
+ const nodes = [];
37
+ for (const sym of Object.getOwnPropertySymbols(where)) {
38
+ const val = where[sym];
39
+ if (sym === operators_1.Op.and) {
40
+ nodes.push({ kind: 'and', nodes: asArray(val).map(parseWhere) });
41
+ }
42
+ else if (sym === operators_1.Op.or) {
43
+ nodes.push({ kind: 'or', nodes: asArray(val).map(parseWhere) });
44
+ }
45
+ else if (sym === operators_1.Op.not) {
46
+ nodes.push({ kind: 'not', node: parseWhere(val) });
47
+ }
48
+ }
49
+ for (const field of Object.keys(where)) {
50
+ const val = where[field];
51
+ if (hasOpSymbols(val)) {
52
+ for (const opSym of Object.getOwnPropertySymbols(val)) {
53
+ nodes.push({ kind: 'cmp', field, op: opSym, value: val[opSym] });
54
+ }
55
+ continue;
56
+ }
57
+ if (Array.isArray(val)) {
58
+ nodes.push({ kind: 'cmp', field, op: operators_1.Op.in, value: val });
59
+ }
60
+ else {
61
+ nodes.push({ kind: 'cmp', field, op: operators_1.Op.eq, value: val });
62
+ }
63
+ }
64
+ if (nodes.length === 0)
65
+ return { kind: 'true' };
66
+ if (nodes.length === 1)
67
+ return nodes[0];
68
+ return { kind: 'and', nodes };
69
+ }
70
+ function asArray(v) {
71
+ return (Array.isArray(v) ? v : [v]);
72
+ }
73
+ /** Escape a string for safe inclusion in a regular expression. */
74
+ function escapeRegex(s) {
75
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
76
+ }
77
+ /**
78
+ * Translate a SQL `LIKE`/`ILIKE` pattern into an anchored regular expression
79
+ * (`%` → `.*`, `_` → `.`), so stores that only speak regex can honor ORM
80
+ * `Op.like` queries without the caller hand-writing a pattern.
81
+ */
82
+ function likeToRegex(pattern, caseInsensitive = false) {
83
+ let out = '';
84
+ for (let i = 0; i < pattern.length; i++) {
85
+ const ch = pattern[i];
86
+ if (ch === '%')
87
+ out += '.*';
88
+ else if (ch === '_')
89
+ out += '.';
90
+ else
91
+ out += escapeRegex(ch);
92
+ }
93
+ return `${caseInsensitive ? '(?i)' : ''}^${out}$`;
94
+ }