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
@@ -77,6 +77,167 @@ class DynamoDbError extends errors_1.DatabaseError {
77
77
  }
78
78
  }
79
79
  exports.DynamoDbError = DynamoDbError;
80
+ /** Parse an ORM `where` object (string + `Op` symbol keys) into a tree. */
81
+ function parseWhere(where) {
82
+ if (!where || typeof where !== 'object')
83
+ return null;
84
+ const nodes = [];
85
+ for (const sym of Object.getOwnPropertySymbols(where)) {
86
+ const name = sym.description;
87
+ const val = where[sym];
88
+ if (name === 'and' && Array.isArray(val)) {
89
+ nodes.push({ kind: 'and', nodes: val.map(parseWhere).filter(Boolean) });
90
+ }
91
+ else if (name === 'or' && Array.isArray(val)) {
92
+ nodes.push({ kind: 'or', nodes: val.map(parseWhere).filter(Boolean) });
93
+ }
94
+ else if (name === 'not') {
95
+ const inner = parseWhere(val);
96
+ if (inner)
97
+ nodes.push({ kind: 'not', node: inner });
98
+ }
99
+ }
100
+ for (const field of Object.keys(where)) {
101
+ nodes.push(parseFieldCondition(field, where[field]));
102
+ }
103
+ const flat = nodes.filter(Boolean);
104
+ if (flat.length === 0)
105
+ return null;
106
+ return flat.length === 1 ? flat[0] : { kind: 'and', nodes: flat };
107
+ }
108
+ /** Parse the value for a single field into a comparison (or AND of them). */
109
+ function parseFieldCondition(field, value) {
110
+ if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
111
+ const symbols = Object.getOwnPropertySymbols(value);
112
+ if (symbols.length > 0) {
113
+ const cmps = symbols.map((sym) => ({
114
+ kind: 'cmp',
115
+ field,
116
+ op: sym.description ?? 'eq',
117
+ value: value[sym],
118
+ }));
119
+ return cmps.length === 1 ? cmps[0] : { kind: 'and', nodes: cmps };
120
+ }
121
+ }
122
+ return { kind: 'cmp', field, op: value === null ? 'isNull' : 'eq', value };
123
+ }
124
+ /** Collect the top-level AND leaf comparisons of a tree (for key extraction). */
125
+ function topLevelLeaves(node) {
126
+ if (!node)
127
+ return [];
128
+ if (node.kind === 'cmp')
129
+ return [node];
130
+ if (node.kind === 'and')
131
+ return node.nodes.flatMap(topLevelLeaves);
132
+ return [];
133
+ }
134
+ /** Sort-key operators that DynamoDB permits in a KeyConditionExpression. */
135
+ const SORT_KEY_OPS = new Set(['eq', 'gt', 'gte', 'lt', 'lte', 'between', 'startsWith']);
136
+ /**
137
+ * Incrementally builds DynamoDB expression strings while allocating collision-
138
+ * free `#name`/`:value` placeholders (so reserved words and nested paths are
139
+ * always safe).
140
+ */
141
+ class DynamoExprBuilder {
142
+ constructor() {
143
+ this.names = {};
144
+ this.values = {};
145
+ this.n = 0;
146
+ this.v = 0;
147
+ }
148
+ /** Allocate placeholders for a (possibly dotted) attribute path. */
149
+ path(field) {
150
+ return field
151
+ .split('.')
152
+ .map((part) => {
153
+ const key = `#n${this.n++}`;
154
+ this.names[key] = part;
155
+ return key;
156
+ })
157
+ .join('.');
158
+ }
159
+ /** Allocate a value placeholder. */
160
+ val(value) {
161
+ const key = `:v${this.v++}`;
162
+ this.values[key] = value;
163
+ return key;
164
+ }
165
+ /** Render a comparison to a FilterExpression/KeyConditionExpression fragment. */
166
+ cmp(field, op, value) {
167
+ const p = this.path(field);
168
+ switch (op) {
169
+ case 'eq':
170
+ return value === null ? `attribute_not_exists(${p})` : `${p} = ${this.val(value)}`;
171
+ case 'ne':
172
+ return `${p} <> ${this.val(value)}`;
173
+ case 'gt':
174
+ return `${p} > ${this.val(value)}`;
175
+ case 'gte':
176
+ return `${p} >= ${this.val(value)}`;
177
+ case 'lt':
178
+ return `${p} < ${this.val(value)}`;
179
+ case 'lte':
180
+ return `${p} <= ${this.val(value)}`;
181
+ case 'between': {
182
+ const [a, b] = value;
183
+ return `${p} BETWEEN ${this.val(a)} AND ${this.val(b)}`;
184
+ }
185
+ case 'notBetween': {
186
+ const [a, b] = value;
187
+ return `NOT (${p} BETWEEN ${this.val(a)} AND ${this.val(b)})`;
188
+ }
189
+ case 'in': {
190
+ const arr = value ?? [];
191
+ if (arr.length === 0)
192
+ return 'attribute_not_exists(nonexistent_placeholder_attr)';
193
+ return `${p} IN (${arr.map((x) => this.val(x)).join(', ')})`;
194
+ }
195
+ case 'notIn': {
196
+ const arr = value ?? [];
197
+ if (arr.length === 0)
198
+ return 'attribute_exists(' + p + ') OR attribute_not_exists(' + p + ')';
199
+ return `NOT (${p} IN (${arr.map((x) => this.val(x)).join(', ')}))`;
200
+ }
201
+ case 'startsWith':
202
+ return `begins_with(${p}, ${this.val(String(value))})`;
203
+ case 'substring':
204
+ return `contains(${p}, ${this.val(value)})`;
205
+ case 'notSubstring':
206
+ return `NOT contains(${p}, ${this.val(value)})`;
207
+ case 'contains':
208
+ case 'arrayContains':
209
+ return `contains(${p}, ${this.val(Array.isArray(value) ? value[0] : value)})`;
210
+ case 'like': {
211
+ // Only the simple begins_with / contains LIKE shapes are expressible.
212
+ const s = String(value);
213
+ if (/^[^%_]+%$/.test(s))
214
+ return `begins_with(${p}, ${this.val(s.slice(0, -1))})`;
215
+ if (/^%[^%_]+%$/.test(s))
216
+ return `contains(${p}, ${this.val(s.slice(1, -1))})`;
217
+ throw new errors_1.DatabaseError(`DynamoDB ORM layer can only translate LIKE patterns of the form 'x%' or '%x%' (got ${JSON.stringify(s)})`, { code: 'QUERY_ERROR' });
218
+ }
219
+ case 'isNull':
220
+ return `attribute_not_exists(${p})`;
221
+ case 'isNotNull':
222
+ return `attribute_exists(${p})`;
223
+ default:
224
+ throw new errors_1.DatabaseError(`DynamoDB ORM layer does not support operator "${op}" for attribute "${field}"`, { code: 'QUERY_ERROR' });
225
+ }
226
+ }
227
+ /** Render an arbitrary boolean tree to a FilterExpression string. */
228
+ filter(node) {
229
+ switch (node.kind) {
230
+ case 'and':
231
+ return node.nodes.length ? `(${node.nodes.map((n) => this.filter(n)).join(' AND ')})` : '';
232
+ case 'or':
233
+ return node.nodes.length ? `(${node.nodes.map((n) => this.filter(n)).join(' OR ')})` : '';
234
+ case 'not':
235
+ return `NOT (${this.filter(node.node)})`;
236
+ case 'cmp':
237
+ return this.cmp(node.field, node.op, node.value);
238
+ }
239
+ }
240
+ }
80
241
  /**
81
242
  * Amazon DynamoDB store, implementing the minimal `NoSqlStore` marker
82
243
  * interface. Unlike the SQL dialects, there is no `query(sql)` — DynamoDB's
@@ -933,5 +1094,267 @@ class DynamoDbStore {
933
1094
  throw this.wrapError(`ListTagsOfResource on '${resourceArn}'`, err);
934
1095
  }
935
1096
  }
1097
+ // ---------------------------------------------------------------------
1098
+ // ORM model surface (no hand-written Key/Filter expressions needed)
1099
+ // ---------------------------------------------------------------------
1100
+ /**
1101
+ * Compile an ORM `where` clause + read options into either a `QueryParams`
1102
+ * (when the partition key is pinned by equality, so DynamoDB can Query) or a
1103
+ * `ScanParams` (otherwise). Shared by {@link findAll}/{@link findAllPaged}/
1104
+ * {@link count}.
1105
+ */
1106
+ compileRead(options) {
1107
+ const node = parseWhere(options.where);
1108
+ const schema = options.indexName ? options.key?.indexes?.[options.indexName] : options.key;
1109
+ const leaves = topLevelLeaves(node).filter((l) => l.kind === 'cmp');
1110
+ const pkLeaf = schema
1111
+ ? leaves.find((l) => l.field === schema.partitionKey && l.op === 'eq')
1112
+ : undefined;
1113
+ const skLeaf = pkLeaf && schema?.sortKey
1114
+ ? leaves.find((l) => l.field === schema.sortKey && SORT_KEY_OPS.has(l.op))
1115
+ : undefined;
1116
+ const builder = new DynamoExprBuilder();
1117
+ const projectionExpression = options.attributes && options.attributes.length > 0
1118
+ ? options.attributes.map((a) => builder.path(a)).join(', ')
1119
+ : undefined;
1120
+ if (pkLeaf) {
1121
+ const keyParts = [builder.cmp(pkLeaf.field, 'eq', pkLeaf.value)];
1122
+ if (skLeaf)
1123
+ keyParts.push(builder.cmp(skLeaf.field, skLeaf.op, skLeaf.value));
1124
+ const filterLeaves = leaves.filter((l) => l !== pkLeaf && l !== skLeaf);
1125
+ const filterExpression = filterLeaves.length
1126
+ ? filterLeaves.map((l) => builder.filter(l)).join(' AND ')
1127
+ : undefined;
1128
+ return {
1129
+ mode: 'query',
1130
+ params: {
1131
+ indexName: options.indexName,
1132
+ keyConditionExpression: keyParts.join(' AND '),
1133
+ filterExpression,
1134
+ projectionExpression,
1135
+ expressionAttributeNames: Object.keys(builder.names).length ? builder.names : undefined,
1136
+ expressionAttributeValues: Object.keys(builder.values).length
1137
+ ? builder.values
1138
+ : undefined,
1139
+ limit: options.limit,
1140
+ scanIndexForward: options.order ? options.order !== 'DESC' : undefined,
1141
+ exclusiveStartKey: options.exclusiveStartKey,
1142
+ consistentRead: options.consistentRead,
1143
+ },
1144
+ };
1145
+ }
1146
+ const filterExpression = node ? builder.filter(node) || undefined : undefined;
1147
+ return {
1148
+ mode: 'scan',
1149
+ params: {
1150
+ indexName: options.indexName,
1151
+ filterExpression,
1152
+ projectionExpression,
1153
+ expressionAttributeNames: Object.keys(builder.names).length ? builder.names : undefined,
1154
+ expressionAttributeValues: Object.keys(builder.values).length ? builder.values : undefined,
1155
+ limit: options.limit,
1156
+ exclusiveStartKey: options.exclusiveStartKey,
1157
+ consistentRead: options.consistentRead,
1158
+ },
1159
+ };
1160
+ }
1161
+ /**
1162
+ * Fetch items matching the ORM `where` clause. When `options.key` pins the
1163
+ * partition key by equality this issues an efficient `Query`; otherwise it
1164
+ * falls back to a `Scan` (see the warning on {@link scan}). Returns a single
1165
+ * page plus the `lastEvaluatedKey` cursor (pass it back as
1166
+ * `exclusiveStartKey` for the next page, or use {@link findAll} to
1167
+ * auto-paginate).
1168
+ */
1169
+ async findAllPaged(tableName, options = {}) {
1170
+ const compiled = this.compileRead(options);
1171
+ return compiled.mode === 'query'
1172
+ ? this.query(tableName, compiled.params)
1173
+ : this.scan(tableName, compiled.params);
1174
+ }
1175
+ /**
1176
+ * Auto-paginating {@link findAllPaged}: follows `lastEvaluatedKey` and
1177
+ * returns every matching item. `options.limit` still applies per page (as
1178
+ * DynamoDB defines it); to cap total results, slice the return value.
1179
+ */
1180
+ async findAll(tableName, options = {}) {
1181
+ const items = [];
1182
+ let exclusiveStartKey = options.exclusiveStartKey;
1183
+ do {
1184
+ const page = await this.findAllPaged(tableName, { ...options, exclusiveStartKey });
1185
+ items.push(...page.items);
1186
+ exclusiveStartKey = page.lastEvaluatedKey;
1187
+ } while (exclusiveStartKey !== undefined);
1188
+ return items;
1189
+ }
1190
+ /** Fetch the first item matching `where` (page-limited to 1), or `undefined`. */
1191
+ async findOne(tableName, options = {}) {
1192
+ const page = await this.findAllPaged(tableName, { ...options, limit: 1 });
1193
+ return page.items[0];
1194
+ }
1195
+ /**
1196
+ * Count items matching `where` using `Select: 'COUNT'` (server-side count;
1197
+ * items are not returned). Follows pagination automatically and sums each
1198
+ * page's count.
1199
+ */
1200
+ async count(tableName, options = {}) {
1201
+ const client = this.requireClient();
1202
+ const compiled = this.compileRead(options);
1203
+ let total = 0;
1204
+ let exclusiveStartKey = compiled.params.exclusiveStartKey;
1205
+ try {
1206
+ do {
1207
+ if (compiled.mode === 'query') {
1208
+ const p = compiled.params;
1209
+ const result = await client.send(new lib_dynamodb_1.QueryCommand({
1210
+ TableName: tableName,
1211
+ IndexName: p.indexName,
1212
+ KeyConditionExpression: p.keyConditionExpression,
1213
+ FilterExpression: p.filterExpression,
1214
+ ExpressionAttributeNames: p.expressionAttributeNames,
1215
+ ExpressionAttributeValues: p.expressionAttributeValues,
1216
+ ConsistentRead: p.consistentRead,
1217
+ Select: 'COUNT',
1218
+ ExclusiveStartKey: exclusiveStartKey,
1219
+ }));
1220
+ total += result.Count ?? 0;
1221
+ exclusiveStartKey = result.LastEvaluatedKey;
1222
+ }
1223
+ else {
1224
+ const p = compiled.params;
1225
+ const result = await client.send(new lib_dynamodb_1.ScanCommand({
1226
+ TableName: tableName,
1227
+ IndexName: p.indexName,
1228
+ FilterExpression: p.filterExpression,
1229
+ ExpressionAttributeNames: p.expressionAttributeNames,
1230
+ ExpressionAttributeValues: p.expressionAttributeValues,
1231
+ ConsistentRead: p.consistentRead,
1232
+ Select: 'COUNT',
1233
+ ExclusiveStartKey: exclusiveStartKey,
1234
+ }));
1235
+ total += result.Count ?? 0;
1236
+ exclusiveStartKey = result.LastEvaluatedKey;
1237
+ }
1238
+ } while (exclusiveStartKey !== undefined);
1239
+ }
1240
+ catch (err) {
1241
+ throw this.wrapError(`Count on '${tableName}'`, err);
1242
+ }
1243
+ return total;
1244
+ }
1245
+ /**
1246
+ * Insert an item (`PutItem`). By default overwrites any existing item with
1247
+ * the same key (native Put semantics); pass `options.key` with
1248
+ * `options.insertOnly` to add an `attribute_not_exists(<pk>)` condition so a
1249
+ * duplicate primary key fails instead (SQL `INSERT` semantics).
1250
+ */
1251
+ async create(tableName, item, options = {}) {
1252
+ const putOptions = {};
1253
+ if (options.insertOnly && options.key) {
1254
+ putOptions.conditionExpression = 'attribute_not_exists(#pk)';
1255
+ putOptions.expressionAttributeNames = { '#pk': options.key.partitionKey };
1256
+ }
1257
+ await this.putItem(tableName, item, putOptions);
1258
+ return item;
1259
+ }
1260
+ /** Insert many items via chunked/retried `BatchWriteItem` puts. */
1261
+ async bulkCreate(tableName, items, options = {}) {
1262
+ const { unprocessedCount } = await this.batchWriteItem(tableName, items.map((put) => ({ put })), options);
1263
+ return { inserted: items.length - unprocessedCount, unprocessedCount };
1264
+ }
1265
+ /**
1266
+ * Insert-or-replace an item (`PutItem`) — DynamoDB's native Put already has
1267
+ * upsert semantics (it creates the item or overwrites it wholesale).
1268
+ */
1269
+ async upsert(tableName, item) {
1270
+ await this.putItem(tableName, item);
1271
+ return item;
1272
+ }
1273
+ /** Extract a full primary key `{pk, sk?}` from top-level eq leaves, or null. */
1274
+ extractFullKey(schema, leaves) {
1275
+ const pk = leaves.find((l) => l.field === schema.partitionKey && l.op === 'eq');
1276
+ if (!pk)
1277
+ return null;
1278
+ const key = { [schema.partitionKey]: pk.value };
1279
+ let used = 1;
1280
+ if (schema.sortKey) {
1281
+ const sk = leaves.find((l) => l.field === schema.sortKey && l.op === 'eq');
1282
+ if (!sk)
1283
+ return null;
1284
+ key[schema.sortKey] = sk.value;
1285
+ used = 2;
1286
+ }
1287
+ // Only a "full key" if there are no *other* conditions to filter on.
1288
+ return used === leaves.length ? key : null;
1289
+ }
1290
+ /**
1291
+ * Update every item matching `where`, SETting each key in `values`. When
1292
+ * `where` pins the full primary key (and nothing else), this is a single
1293
+ * `UpdateItem`; otherwise it finds matching items (Query/Scan via `key`),
1294
+ * then issues one `UpdateItem` per item. Requires `options.key`. Returns the
1295
+ * number of items updated.
1296
+ */
1297
+ async update(tableName, values, where, options = { key: { partitionKey: '' } }) {
1298
+ const schema = options.key;
1299
+ if (!schema || !schema.partitionKey) {
1300
+ throw new errors_1.DatabaseError('DynamoDB update() requires options.key with a partitionKey', {
1301
+ code: 'VALIDATION_ERROR',
1302
+ });
1303
+ }
1304
+ const leaves = topLevelLeaves(parseWhere(where)).filter((l) => l.kind === 'cmp');
1305
+ const directKey = this.extractFullKey(schema, leaves);
1306
+ if (directKey) {
1307
+ await this.updateItem(tableName, directKey, values);
1308
+ return 1;
1309
+ }
1310
+ const matches = await this.findAll(tableName, {
1311
+ where,
1312
+ key: schema,
1313
+ indexName: options.indexName,
1314
+ });
1315
+ let updated = 0;
1316
+ for (const item of matches) {
1317
+ const key = this.itemKey(schema, item);
1318
+ await this.updateItem(tableName, key, values);
1319
+ updated += 1;
1320
+ }
1321
+ return updated;
1322
+ }
1323
+ /**
1324
+ * Delete every item matching `where`. When `where` pins the full primary key
1325
+ * this is a single `DeleteItem`; otherwise it finds matching items and
1326
+ * deletes them via chunked `BatchWriteItem`. Requires `options.key`. Returns
1327
+ * the number of items deleted.
1328
+ */
1329
+ async destroy(tableName, where, options = { key: { partitionKey: '' } }) {
1330
+ const schema = options.key;
1331
+ if (!schema || !schema.partitionKey) {
1332
+ throw new errors_1.DatabaseError('DynamoDB destroy() requires options.key with a partitionKey', {
1333
+ code: 'VALIDATION_ERROR',
1334
+ });
1335
+ }
1336
+ const leaves = topLevelLeaves(parseWhere(where)).filter((l) => l.kind === 'cmp');
1337
+ const directKey = this.extractFullKey(schema, leaves);
1338
+ if (directKey) {
1339
+ await this.deleteItem(tableName, directKey, { returnValues: 'NONE' });
1340
+ return 1;
1341
+ }
1342
+ const matches = await this.findAll(tableName, {
1343
+ where,
1344
+ key: schema,
1345
+ indexName: options.indexName,
1346
+ });
1347
+ if (matches.length === 0)
1348
+ return 0;
1349
+ await this.batchWriteItem(tableName, matches.map((item) => ({ delete: this.itemKey(schema, item) })));
1350
+ return matches.length;
1351
+ }
1352
+ /** Project an item down to just its key attributes for the given schema. */
1353
+ itemKey(schema, item) {
1354
+ const key = { [schema.partitionKey]: item[schema.partitionKey] };
1355
+ if (schema.sortKey)
1356
+ key[schema.sortKey] = item[schema.sortKey];
1357
+ return key;
1358
+ }
936
1359
  }
937
1360
  exports.DynamoDbStore = DynamoDbStore;
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Elasticsearch store implementation.
3
+ *
4
+ * Elasticsearch is a distributed document store built around an inverted
5
+ * index and a JSON-based Query DSL (`match`/`term`/`bool`/`range` queries,
6
+ * aggregations, sorting) rather than SQL. It has no `JOIN`, no transaction
7
+ * log, and documents are schema-flexible (mappings describe *how* fields
8
+ * are indexed, not a hard constraint like a SQL column type), so it does
9
+ * not fit the SQL-shaped `Dialect` interface used by the SQL dialects in
10
+ * this repo. Instead it implements the minimal `NoSqlStore` marker
11
+ * interface (`src/nosql/store.ts`) and exposes Elasticsearch's real
12
+ * capabilities grouped by concern: connection lifecycle, index management,
13
+ * document CRUD (single + bulk), search, and alias management.
14
+ *
15
+ * Uses the official `@elastic/elasticsearch` driver (v9). This client
16
+ * speaks the Elasticsearch REST API and is also broadly compatible with
17
+ * OpenSearch clusters (which forked from Elasticsearch 7.10) for the
18
+ * subset of the API surface wrapped here - see the README for details and
19
+ * caveats.
20
+ */
21
+ import { Client, estypes } from '@elastic/elasticsearch';
22
+ import type { ClientOptions } from '@elastic/elasticsearch';
23
+ import { NoSqlStore } from '../store';
24
+ /**
25
+ * Connection options for `ElasticsearchStore`. This is a thin pass-through
26
+ * to the driver's own `ClientOptions` (node/nodes URL(s), `auth` for
27
+ * basic/API-key/bearer auth, `tls`, `cloud`, `requestTimeout`,
28
+ * `maxRetries`, etc.) - nothing is renamed or reshaped, since the driver's
29
+ * options already cover connecting to a single node, a list of nodes, or
30
+ * Elastic Cloud.
31
+ */
32
+ export type ElasticsearchStoreOptions = ClientOptions;
33
+ /** Options accepted by `createIndex()`. */
34
+ export interface CreateIndexOptions {
35
+ /** Field mappings (types, analyzers, etc.) for the new index. */
36
+ mappings?: estypes.MappingTypeMapping;
37
+ /** Index settings (shards, replicas, analysis, etc.). */
38
+ settings?: estypes.IndicesIndexSettings;
39
+ /** Aliases to create the index with. */
40
+ aliases?: Record<string, estypes.IndicesAlias>;
41
+ }
42
+ /** Options accepted by `indexDocument()`. */
43
+ export interface IndexDocumentOptions {
44
+ /** `'index'` (default; overwrite) or `'create'` (fail if the ID already exists). */
45
+ opType?: estypes.OpType;
46
+ /** Refresh policy for making the write visible to search immediately. */
47
+ refresh?: estypes.Refresh;
48
+ /** Route the document to a specific shard. */
49
+ routing?: string;
50
+ }
51
+ /** Options accepted by `updateDocument()`. */
52
+ export interface UpdateDocumentOptions {
53
+ /** Document to insert if it doesn't already exist (upsert). */
54
+ upsert?: Record<string, unknown>;
55
+ /** Refresh policy for making the write visible to search immediately. */
56
+ refresh?: estypes.Refresh;
57
+ /** Number of times to retry on a version conflict. */
58
+ retryOnConflict?: number;
59
+ }
60
+ /** Options accepted by `deleteDocument()`. */
61
+ export interface DeleteDocumentOptions {
62
+ refresh?: estypes.Refresh;
63
+ routing?: string;
64
+ }
65
+ /** A single operation for `bulkIndex()`/`bulkDelete()`/`bulk()`. */
66
+ export type BulkAction = {
67
+ action: 'index';
68
+ index: string;
69
+ id?: string;
70
+ document: Record<string, unknown>;
71
+ } | {
72
+ action: 'create';
73
+ index: string;
74
+ id?: string;
75
+ document: Record<string, unknown>;
76
+ } | {
77
+ action: 'update';
78
+ index: string;
79
+ id: string;
80
+ document: Record<string, unknown>;
81
+ upsert?: Record<string, unknown>;
82
+ } | {
83
+ action: 'delete';
84
+ index: string;
85
+ id: string;
86
+ };
87
+ /** Per-item result from a `bulk()` call. */
88
+ export interface BulkItemResult {
89
+ action: 'index' | 'create' | 'update' | 'delete';
90
+ id?: string;
91
+ status: number;
92
+ error?: {
93
+ type: string;
94
+ reason: string;
95
+ };
96
+ }
97
+ /** Result of a `bulk()` call. */
98
+ export interface BulkResult {
99
+ errors: boolean;
100
+ items: BulkItemResult[];
101
+ took: number;
102
+ }
103
+ /** Parameters accepted by `search()`. */
104
+ export interface SearchParams {
105
+ /** Query DSL query (match/term/bool/range/etc.). Omit to match all documents. */
106
+ query?: estypes.QueryDslQueryContainer;
107
+ /** Zero-based offset into the result set, for pagination. */
108
+ from?: number;
109
+ /** Max number of hits to return. */
110
+ size?: number;
111
+ /** Sort order - a field name, `{ field: 'asc' | 'desc' }`, or the driver's raw `Sort` shape. */
112
+ sort?: estypes.Sort;
113
+ /** Named aggregations to compute alongside the search. */
114
+ aggs?: Record<string, estypes.AggregationsAggregationContainer>;
115
+ /** Restrict/exclude which `_source` fields are returned. */
116
+ source?: boolean | string | string[];
117
+ /** Track the exact total hit count (rather than capping at 10,000). */
118
+ trackTotalHits?: boolean | number;
119
+ }
120
+ /** A single search hit. */
121
+ export interface SearchHit<T = Record<string, unknown>> {
122
+ id: string;
123
+ index: string;
124
+ score: number | null;
125
+ source: T | undefined;
126
+ sort?: (string | number | null)[];
127
+ }
128
+ /** Result of a `search()` call. */
129
+ export interface SearchResult<T = Record<string, unknown>> {
130
+ hits: SearchHit<T>[];
131
+ /** Total number of matching documents. `relation` is `'gte'` when the exact count wasn't tracked. */
132
+ total: {
133
+ value: number;
134
+ relation: 'eq' | 'gte';
135
+ };
136
+ maxScore: number | null;
137
+ tookMs: number;
138
+ /** Raw aggregation results, keyed by aggregation name, when `aggs` was requested. */
139
+ aggregations?: Record<string, unknown>;
140
+ }
141
+ declare function isNotFoundError(err: unknown): boolean;
142
+ declare function isConflictError(err: unknown): boolean;
143
+ /**
144
+ * `ElasticsearchStore` wraps the official `@elastic/elasticsearch` v9
145
+ * client and exposes index management, document CRUD (single + bulk),
146
+ * Query-DSL search, and alias management as a typed, promise-based API.
147
+ */
148
+ export declare class ElasticsearchStore implements NoSqlStore {
149
+ readonly name = "elasticsearch";
150
+ readonly library = "@elastic/elasticsearch";
151
+ private readonly options;
152
+ private client;
153
+ private connected;
154
+ constructor(options: ElasticsearchStoreOptions);
155
+ connect(): Promise<void>;
156
+ disconnect(): Promise<void>;
157
+ isConnected(): boolean;
158
+ /** Returns the underlying `@elastic/elasticsearch` client for anything not wrapped here. */
159
+ getClient(): Client;
160
+ private requireClient;
161
+ private exec;
162
+ /** Create an index, optionally with mappings/settings/aliases. */
163
+ createIndex(index: string, options?: CreateIndexOptions): Promise<void>;
164
+ /** Delete an index. Resolves without error if the index doesn't exist. */
165
+ deleteIndex(index: string): Promise<void>;
166
+ /** Whether an index exists. */
167
+ indexExists(index: string): Promise<boolean>;
168
+ /** Get the field mappings for an index. */
169
+ getMapping(index: string): Promise<estypes.MappingTypeMapping | undefined>;
170
+ /** Add/update field mappings on an existing index. Mapping updates are additive - existing field mappings cannot be changed, only new fields added. */
171
+ putMapping(index: string, mappings: estypes.MappingTypeMapping): Promise<void>;
172
+ /** Get an index's settings. */
173
+ getSettings(index: string): Promise<estypes.IndicesIndexSettings | undefined>;
174
+ /** Update dynamic index settings (e.g. `number_of_replicas`, `refresh_interval`). Static settings like `number_of_shards` require closing the index first (not wrapped here - use `getClient()`). */
175
+ putSettings(index: string, settings: estypes.IndicesIndexSettings): Promise<void>;
176
+ /** Refresh an index so recently-written documents become visible to search immediately, rather than waiting for the automatic refresh interval. */
177
+ refreshIndex(index: string): Promise<void>;
178
+ /**
179
+ * Index (create or overwrite) a document. Omit `id` to let Elasticsearch
180
+ * auto-generate one. Returns the assigned `_id`.
181
+ */
182
+ indexDocument(index: string, document: Record<string, unknown>, options?: IndexDocumentOptions & {
183
+ id?: string;
184
+ }): Promise<string>;
185
+ /** Get a document by ID. Returns `null` if it doesn't exist. */
186
+ getDocument<T = Record<string, unknown>>(index: string, id: string): Promise<T | null>;
187
+ /** Whether a document exists. */
188
+ documentExists(index: string, id: string): Promise<boolean>;
189
+ /**
190
+ * Partially update a document by merging `partial` into the stored
191
+ * `_source`. Pass `options.upsert` to insert that document if `id`
192
+ * doesn't already exist yet. Throws `EmptyResultError` if the document
193
+ * doesn't exist and no `upsert` was provided.
194
+ */
195
+ updateDocument(index: string, id: string, partial: Record<string, unknown>, options?: UpdateDocumentOptions): Promise<void>;
196
+ /**
197
+ * Delete a document by ID. Returns `true` if a document was deleted,
198
+ * `false` if it didn't exist (rather than throwing, since "already
199
+ * gone" is a common, non-exceptional outcome for a delete).
200
+ */
201
+ deleteDocument(index: string, id: string, options?: DeleteDocumentOptions): Promise<boolean>;
202
+ /**
203
+ * Run a batch of index/create/update/delete operations in a single
204
+ * request. Unlike a SQL transaction, this is not atomic - each item
205
+ * succeeds or fails independently; check `result.errors` and each
206
+ * item's `error` field rather than assuming all-or-nothing.
207
+ */
208
+ bulk(actions: BulkAction[]): Promise<BulkResult>;
209
+ /** Convenience wrapper around `bulk()` for indexing many documents into one index at once. */
210
+ bulkIndex(index: string, documents: {
211
+ id?: string;
212
+ document: Record<string, unknown>;
213
+ }[]): Promise<BulkResult>;
214
+ /** Convenience wrapper around `bulk()` for deleting many documents from one index at once. */
215
+ bulkDelete(index: string, ids: string[]): Promise<BulkResult>;
216
+ /**
217
+ * Run a Query DSL search (`match`/`term`/`bool`/`range`/etc.) against
218
+ * one or more indices (comma-separated, or a wildcard pattern). Supports
219
+ * `from`/`size` pagination, `sort`, and named `aggs`.
220
+ */
221
+ search<T = Record<string, unknown>>(index: string, params?: SearchParams): Promise<SearchResult<T>>;
222
+ /** Count documents matching a query (or all documents, if `query` is omitted) without fetching them. */
223
+ count(index: string, query?: estypes.QueryDslQueryContainer): Promise<number>;
224
+ /** Point an alias at an index, creating the alias if it doesn't exist. */
225
+ putAlias(index: string, alias: string): Promise<void>;
226
+ /** Remove an alias from an index. */
227
+ deleteAlias(index: string, alias: string): Promise<void>;
228
+ /** List the indices an alias currently points at. */
229
+ getAlias(alias: string): Promise<string[]>;
230
+ /**
231
+ * Atomically repoint an alias from one index to another - the standard
232
+ * zero-downtime reindex pattern (build the new index, then swap the
233
+ * alias in one request so readers never see a moment with no index
234
+ * behind the alias).
235
+ */
236
+ swapAlias(alias: string, fromIndex: string, toIndex: string): Promise<void>;
237
+ }
238
+ export { isNotFoundError as isElasticsearchNotFoundError, isConflictError as isElasticsearchConflictError };
239
+ export default ElasticsearchStore;