ts-prorm-orm 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/CHANGELOG.md +1111 -0
  2. package/LICENSE +21 -0
  3. package/README.md +573 -0
  4. package/dist/audit/history-query.js +180 -0
  5. package/dist/audit/index.js +23 -0
  6. package/dist/audit/logger.js +236 -0
  7. package/dist/cache/cache-manager.js +84 -0
  8. package/dist/cache/index.js +16 -0
  9. package/dist/cache/redis-cluster-cache.js +557 -0
  10. package/dist/cli.js +2200 -0
  11. package/dist/compliance/audit-trail.js +68 -0
  12. package/dist/compliance/backup-verification.js +685 -0
  13. package/dist/compliance/breach-detector.js +505 -0
  14. package/dist/compliance/consent-record.js +227 -0
  15. package/dist/compliance/consent-versioning.js +331 -0
  16. package/dist/compliance/cross-border-log.js +530 -0
  17. package/dist/compliance/data-classifier.js +258 -0
  18. package/dist/compliance/data-lineage.js +565 -0
  19. package/dist/compliance/data-masker.js +303 -0
  20. package/dist/compliance/data-portability.js +265 -0
  21. package/dist/compliance/data-retention.js +195 -0
  22. package/dist/compliance/dsar-workflow.js +342 -0
  23. package/dist/compliance/field-encryption.js +223 -0
  24. package/dist/compliance/immutable-record.js +148 -0
  25. package/dist/compliance/index.js +260 -0
  26. package/dist/compliance/privacy-impact-assessment.js +364 -0
  27. package/dist/compliance/pseudonymization.js +269 -0
  28. package/dist/compliance/query-firewall.js +1182 -0
  29. package/dist/compliance/rate-limiter.js +580 -0
  30. package/dist/compliance/right-to-erasure.js +117 -0
  31. package/dist/compliance/row-level-security.js +246 -0
  32. package/dist/compliance/security-decorator.js +574 -0
  33. package/dist/compliance/security-monitor.js +525 -0
  34. package/dist/compliance/sensitive-data-discovery.js +476 -0
  35. package/dist/compliance/session-isolation.js +472 -0
  36. package/dist/compliance/tls-enforcer.js +108 -0
  37. package/dist/compliance/worm-storage.js +712 -0
  38. package/dist/connection-manager.js +198 -0
  39. package/dist/connection-pool.js +519 -0
  40. package/dist/decorators/audit.js +136 -0
  41. package/dist/decorators/belongs-to-many.js +115 -0
  42. package/dist/decorators/belongs-to.js +115 -0
  43. package/dist/decorators/check.js +435 -0
  44. package/dist/decorators/collate.js +329 -0
  45. package/dist/decorators/comment.js +205 -0
  46. package/dist/decorators/database-settings.js +236 -0
  47. package/dist/decorators/default.js +244 -0
  48. package/dist/decorators/encryption.js +235 -0
  49. package/dist/decorators/engine.js +97 -0
  50. package/dist/decorators/fk-constraints.js +594 -0
  51. package/dist/decorators/foreign-table.js +136 -0
  52. package/dist/decorators/generated.js +274 -0
  53. package/dist/decorators/has-many.js +127 -0
  54. package/dist/decorators/has-one.js +116 -0
  55. package/dist/decorators/hstore.js +129 -0
  56. package/dist/decorators/index.js +355 -0
  57. package/dist/decorators/json-column.js +83 -0
  58. package/dist/decorators/jsonb.js +101 -0
  59. package/dist/decorators/orm-decorators.js +425 -0
  60. package/dist/decorators/permissions.js +294 -0
  61. package/dist/decorators/procedure.js +210 -0
  62. package/dist/decorators/query-options.js +556 -0
  63. package/dist/decorators/range.js +167 -0
  64. package/dist/decorators/set-column.js +83 -0
  65. package/dist/decorators/spatial.js +114 -0
  66. package/dist/decorators/storage.js +580 -0
  67. package/dist/decorators/timezone.js +512 -0
  68. package/dist/decorators/trigger.js +90 -0
  69. package/dist/decorators/uuid.js +135 -0
  70. package/dist/decorators/view.js +258 -0
  71. package/dist/diagrams/chen-diagram.js +354 -0
  72. package/dist/diagrams/class-diagram.js +384 -0
  73. package/dist/diagrams/dependency-diagram.js +432 -0
  74. package/dist/diagrams/er-diagram.js +605 -0
  75. package/dist/diagrams/flow-diagram.js +394 -0
  76. package/dist/diagrams/gantt-diagram.js +411 -0
  77. package/dist/diagrams/index-diagram.js +353 -0
  78. package/dist/diagrams/index.js +184 -0
  79. package/dist/diagrams/migration-diagram.js +316 -0
  80. package/dist/diagrams/model-diagram.js +616 -0
  81. package/dist/diagrams/package-diagram.js +376 -0
  82. package/dist/diagrams/palette.js +85 -0
  83. package/dist/diagrams/relational-diagram.js +455 -0
  84. package/dist/diagrams/schemadoc-diagram.js +309 -0
  85. package/dist/diagrams/sequence-diagram.js +307 -0
  86. package/dist/diagrams/state-diagram.js +344 -0
  87. package/dist/diagrams/svg-dom.js +111 -0
  88. package/dist/diagrams/tree-diagram.js +250 -0
  89. package/dist/dialects/clickhouse/index.js +1742 -0
  90. package/dist/dialects/cockroachdb/index.js +4677 -0
  91. package/dist/dialects/cratedb/index.js +441 -0
  92. package/dist/dialects/databricks/index.js +517 -0
  93. package/dist/dialects/db2/index.js +2225 -0
  94. package/dist/dialects/dialect.js +720 -0
  95. package/dist/dialects/duckdb/index.js +2014 -0
  96. package/dist/dialects/exasol/index.js +357 -0
  97. package/dist/dialects/firebird/index.js +495 -0
  98. package/dist/dialects/greenplum/index.js +457 -0
  99. package/dist/dialects/hana/index.js +1741 -0
  100. package/dist/dialects/mariadb/index.js +3590 -0
  101. package/dist/dialects/mssql/index.js +2296 -0
  102. package/dist/dialects/mysql/index.js +4058 -0
  103. package/dist/dialects/oracle/index.js +2999 -0
  104. package/dist/dialects/postgres/index.js +5319 -0
  105. package/dist/dialects/query-stream-helper.js +152 -0
  106. package/dist/dialects/questdb/index.js +433 -0
  107. package/dist/dialects/redshift/index.js +2277 -0
  108. package/dist/dialects/singlestore/index.js +354 -0
  109. package/dist/dialects/snowflake/index.js +2082 -0
  110. package/dist/dialects/spanner/index.js +1768 -0
  111. package/dist/dialects/sqlite/index.js +3382 -0
  112. package/dist/dialects/tidb/index.js +377 -0
  113. package/dist/dialects/timescaledb/index.js +164 -0
  114. package/dist/dialects/trino/index.js +420 -0
  115. package/dist/dialects/turso/index.js +227 -0
  116. package/dist/dialects/vertica/index.js +317 -0
  117. package/dist/dialects/yugabytedb/index.js +424 -0
  118. package/dist/errors/index.js +472 -0
  119. package/dist/errors/utils.js +340 -0
  120. package/dist/errors.js +21 -0
  121. package/dist/extensions/catalog/cloud-warehouse-features.js +207 -0
  122. package/dist/extensions/catalog/mssql-features.js +147 -0
  123. package/dist/extensions/catalog/mysql-mariadb-plugins.js +229 -0
  124. package/dist/extensions/catalog/oracle-db2-features.js +196 -0
  125. package/dist/extensions/catalog/postgres-extensions.js +516 -0
  126. package/dist/extensions/index.js +71 -0
  127. package/dist/extensions/types.js +13 -0
  128. package/dist/foreign-data.js +173 -0
  129. package/dist/hooks/hooks-manager.js +350 -0
  130. package/dist/hooks/index.js +37 -0
  131. package/dist/index.js +463 -0
  132. package/dist/logging.js +335 -0
  133. package/dist/migrations/index.js +40 -0
  134. package/dist/migrations/migration.js +196 -0
  135. package/dist/migrations/migrator.js +411 -0
  136. package/dist/migrations/prormmigration.js +275 -0
  137. package/dist/migrations/query-interface.js +435 -0
  138. package/dist/migrations/seeder.js +353 -0
  139. package/dist/models/associations.js +852 -0
  140. package/dist/models/constraints.js +288 -0
  141. package/dist/models/data-types.js +2518 -0
  142. package/dist/models/decorators.js +445 -0
  143. package/dist/models/index.js +33 -0
  144. package/dist/models/indexes.js +531 -0
  145. package/dist/models/methods.js +382 -0
  146. package/dist/models/model-manager.js +103 -0
  147. package/dist/models/model.js +5349 -0
  148. package/dist/models/operators.js +67 -0
  149. package/dist/models/scopes.js +189 -0
  150. package/dist/models/typescript-types.js +26 -0
  151. package/dist/nosql/aerospike/index.js +205 -0
  152. package/dist/nosql/allegrograph/index.js +169 -0
  153. package/dist/nosql/arangodb/index.js +364 -0
  154. package/dist/nosql/azure-blob/index.js +206 -0
  155. package/dist/nosql/beanstalkd/index.js +231 -0
  156. package/dist/nosql/beequeue/index.js +210 -0
  157. package/dist/nosql/bigchaindb/index.js +195 -0
  158. package/dist/nosql/bigtable/index.js +224 -0
  159. package/dist/nosql/blazegraph/index.js +173 -0
  160. package/dist/nosql/bullmq/index.js +191 -0
  161. package/dist/nosql/cassandra/index.js +174 -0
  162. package/dist/nosql/chroma/index.js +190 -0
  163. package/dist/nosql/cloudflare-kv/index.js +220 -0
  164. package/dist/nosql/coherence/index.js +200 -0
  165. package/dist/nosql/cosmosdb/index.js +157 -0
  166. package/dist/nosql/couchbase/index.js +213 -0
  167. package/dist/nosql/dax/index.js +212 -0
  168. package/dist/nosql/deno-kv/index.js +206 -0
  169. package/dist/nosql/dgraph/index.js +171 -0
  170. package/dist/nosql/doris/index.js +169 -0
  171. package/dist/nosql/druid/index.js +162 -0
  172. package/dist/nosql/dynamodb/index.js +937 -0
  173. package/dist/nosql/elasticsearch/index.js +377 -0
  174. package/dist/nosql/etcd/index.js +502 -0
  175. package/dist/nosql/eventhubs/index.js +213 -0
  176. package/dist/nosql/eventstore/index.js +254 -0
  177. package/dist/nosql/faunadb/index.js +188 -0
  178. package/dist/nosql/firestore/index.js +177 -0
  179. package/dist/nosql/fluree/index.js +148 -0
  180. package/dist/nosql/fuseki/index.js +170 -0
  181. package/dist/nosql/gcs/index.js +172 -0
  182. package/dist/nosql/gearman/index.js +160 -0
  183. package/dist/nosql/geode/index.js +196 -0
  184. package/dist/nosql/graphdb/index.js +169 -0
  185. package/dist/nosql/graylog/index.js +188 -0
  186. package/dist/nosql/gridgain/index.js +171 -0
  187. package/dist/nosql/hazelcast/index.js +162 -0
  188. package/dist/nosql/hbase/index.js +230 -0
  189. package/dist/nosql/ignite/index.js +173 -0
  190. package/dist/nosql/immudb/index.js +184 -0
  191. package/dist/nosql/index.js +232 -0
  192. package/dist/nosql/infinispan/index.js +200 -0
  193. package/dist/nosql/influxdb/index.js +0 -0
  194. package/dist/nosql/kafka/index.js +234 -0
  195. package/dist/nosql/keyspaces/index.js +189 -0
  196. package/dist/nosql/kinesis/index.js +253 -0
  197. package/dist/nosql/leveldb/index.js +153 -0
  198. package/dist/nosql/lmdb/index.js +160 -0
  199. package/dist/nosql/loki/index.js +201 -0
  200. package/dist/nosql/marklogic/index.js +204 -0
  201. package/dist/nosql/materialize/index.js +145 -0
  202. package/dist/nosql/meilisearch/index.js +154 -0
  203. package/dist/nosql/memcached/index.js +223 -0
  204. package/dist/nosql/milvus/index.js +410 -0
  205. package/dist/nosql/minio/index.js +265 -0
  206. package/dist/nosql/momento/index.js +179 -0
  207. package/dist/nosql/mongodb/index.js +461 -0
  208. package/dist/nosql/nats/index.js +247 -0
  209. package/dist/nosql/nedb/index.js +164 -0
  210. package/dist/nosql/neo4j/index.js +450 -0
  211. package/dist/nosql/neptune/index.js +470 -0
  212. package/dist/nosql/nsq/index.js +200 -0
  213. package/dist/nosql/opensearch/index.js +186 -0
  214. package/dist/nosql/orientdb/index.js +175 -0
  215. package/dist/nosql/papertrail/index.js +200 -0
  216. package/dist/nosql/pinecone/index.js +0 -0
  217. package/dist/nosql/pinot/index.js +133 -0
  218. package/dist/nosql/pouchdb/index.js +172 -0
  219. package/dist/nosql/prometheus/index.js +174 -0
  220. package/dist/nosql/provendb/index.js +147 -0
  221. package/dist/nosql/pubsub/index.js +187 -0
  222. package/dist/nosql/pulsar/index.js +232 -0
  223. package/dist/nosql/qdrant/index.js +295 -0
  224. package/dist/nosql/qldb/index.js +192 -0
  225. package/dist/nosql/r2/index.js +281 -0
  226. package/dist/nosql/rabbitmq/index.js +237 -0
  227. package/dist/nosql/ravendb/index.js +175 -0
  228. package/dist/nosql/redis/index.js +607 -0
  229. package/dist/nosql/redpanda/index.js +237 -0
  230. package/dist/nosql/resque/index.js +203 -0
  231. package/dist/nosql/rethinkdb/index.js +232 -0
  232. package/dist/nosql/rocksdb/index.js +152 -0
  233. package/dist/nosql/rockset/index.js +126 -0
  234. package/dist/nosql/s3/index.js +298 -0
  235. package/dist/nosql/scylladb/index.js +178 -0
  236. package/dist/nosql/signoz/index.js +227 -0
  237. package/dist/nosql/sns/index.js +201 -0
  238. package/dist/nosql/solr/index.js +231 -0
  239. package/dist/nosql/splunk/index.js +227 -0
  240. package/dist/nosql/sqs/index.js +246 -0
  241. package/dist/nosql/stardog/index.js +169 -0
  242. package/dist/nosql/starrocks/index.js +170 -0
  243. package/dist/nosql/store.js +2 -0
  244. package/dist/nosql/sumologic/index.js +213 -0
  245. package/dist/nosql/surrealdb/index.js +179 -0
  246. package/dist/nosql/terminusdb/index.js +151 -0
  247. package/dist/nosql/tigergraph/index.js +469 -0
  248. package/dist/nosql/typesense/index.js +148 -0
  249. package/dist/nosql/unqlite/index.js +157 -0
  250. package/dist/nosql/upstash/index.js +167 -0
  251. package/dist/nosql/vercel-kv/index.js +166 -0
  252. package/dist/nosql/victoriametrics/index.js +213 -0
  253. package/dist/nosql/virtuoso/index.js +169 -0
  254. package/dist/nosql/weaviate/index.js +276 -0
  255. package/dist/operators/index.js +108 -0
  256. package/dist/operators.js +2690 -0
  257. package/dist/prisma-migrate/index.js +38 -0
  258. package/dist/prisma-migrate/migration-generator.js +125 -0
  259. package/dist/prisma-migrate/model-generator.js +172 -0
  260. package/dist/prisma-migrate/relations.js +100 -0
  261. package/dist/prisma-migrate/schema-parser.js +167 -0
  262. package/dist/prisma-migrate/type-mapper.js +40 -0
  263. package/dist/prorm.js +6832 -0
  264. package/dist/query-builders/cte-builder.js +80 -0
  265. package/dist/query-builders/functions/aggregate.js +390 -0
  266. package/dist/query-builders/functions/conditional.js +503 -0
  267. package/dist/query-builders/functions/datetime.js +695 -0
  268. package/dist/query-builders/functions/fulltext.js +439 -0
  269. package/dist/query-builders/functions/index.js +93 -0
  270. package/dist/query-builders/functions/json.js +427 -0
  271. package/dist/query-builders/functions/math.js +399 -0
  272. package/dist/query-builders/functions/string.js +518 -0
  273. package/dist/query-builders/functions/window.js +328 -0
  274. package/dist/query-builders/include-builder.js +323 -0
  275. package/dist/query-builders/index-expression-builder.js +242 -0
  276. package/dist/query-builders/index.js +161 -0
  277. package/dist/query-builders/insert-builder.js +164 -0
  278. package/dist/query-builders/model-helpers.js +38 -0
  279. package/dist/query-builders/order-limit-builder.js +239 -0
  280. package/dist/query-builders/sql-compiler.js +2040 -0
  281. package/dist/query-builders/subquery-builder.js +152 -0
  282. package/dist/query-builders/update-builder.js +182 -0
  283. package/dist/query-builders/view-builder.js +218 -0
  284. package/dist/query-builders/where-builder.js +1532 -0
  285. package/dist/query-interface.js +622 -0
  286. package/dist/query-optimizers/batch-optimizer.js +426 -0
  287. package/dist/query-optimizers/explain-plans.js +415 -0
  288. package/dist/query-optimizers/index.js +51 -0
  289. package/dist/query-optimizers/prepared-statement-cache.js +423 -0
  290. package/dist/query-optimizers/query-hints.js +438 -0
  291. package/dist/query-optimizers/query-optimizer.js +278 -0
  292. package/dist/query-optimizers/slow-query-logger.js +271 -0
  293. package/dist/replica-manager.js +507 -0
  294. package/dist/schema/index.js +15 -0
  295. package/dist/schema/migration-generator.js +374 -0
  296. package/dist/schema/schema-differ.js +549 -0
  297. package/dist/schema/types.js +6 -0
  298. package/dist/sql-constants.js +300 -0
  299. package/dist/sqlite-advanced.js +1047 -0
  300. package/dist/streams/index.js +12 -0
  301. package/dist/streams/transforms.js +178 -0
  302. package/dist/transaction.js +456 -0
  303. package/dist/types/index.js +180 -0
  304. package/dist/user-management.js +127 -0
  305. package/dist/utils/date.js +300 -0
  306. package/dist/utils/index.js +1079 -0
  307. package/dist/utils/string.js +161 -0
  308. package/dist/validators/index.js +19 -0
  309. package/dist/validators/validator.js +911 -0
  310. package/package.json +190 -0
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ /**
3
+ * OpenLink Virtuoso store implementation.
4
+ *
5
+ * Virtuoso is a multi-model server whose RDF triplestore is queried over the
6
+ * SPARQL 1.1 Protocol via a single combined HTTP endpoint (`/sparql`) used for
7
+ * both queries and updates (dispatched by request content-type). There is no
8
+ * SQL-shaped RDF surface here, so it implements the minimal `NoSqlStore`
9
+ * marker interface (`src/nosql/store.ts`) rather than the SQL `Dialect`
10
+ * interface.
11
+ *
12
+ * ## No canonical driver - HTTP over `fetch`
13
+ *
14
+ * Virtuoso's SPARQL endpoint is just an HTTP/SPARQL API. This store talks to
15
+ * the server with the global `fetch`. For tests (and for callers who want
16
+ * their own transport) an alternative client can be injected via
17
+ * `VirtuosoStoreOptions.client`; when omitted, a tiny internal client over
18
+ * `fetch` + `endpoint` is built at connect time.
19
+ *
20
+ * ## Surface
21
+ *
22
+ * - `query(sparql)` -> POST to `/sparql`, returns bindings
23
+ * - `update(sparql)` -> POST to `/sparql`
24
+ * - `ask(sparql)` -> POST an ASK query, returns the boolean
25
+ * - `add(triples)` -> `INSERT DATA { ... }` update
26
+ * - `drop(graph?)` -> `DROP GRAPH <g>` / `DROP ALL` update
27
+ */
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.VirtuosoStore = exports.DEFAULT_VIRTUOSO_SPARQL_PATH = exports.DEFAULT_VIRTUOSO_ENDPOINT = void 0;
30
+ exports.createFetchClient = createFetchClient;
31
+ const errors_1 = require("../../errors");
32
+ /** Default Virtuoso base URL. */
33
+ exports.DEFAULT_VIRTUOSO_ENDPOINT = 'http://localhost:8890';
34
+ /** SPARQL endpoint path. */
35
+ exports.DEFAULT_VIRTUOSO_SPARQL_PATH = '/sparql';
36
+ /** Build a `fetch`-backed SPARQL client for the given endpoint. */
37
+ function createFetchClient(endpoint, headers) {
38
+ const base = endpoint.endsWith('/') ? endpoint : `${endpoint}/`;
39
+ const buildUrl = (path) => new URL(path.replace(/^\//, ''), base).toString();
40
+ return {
41
+ async query(path, sparql) {
42
+ const res = await fetch(buildUrl(path), {
43
+ method: 'POST',
44
+ headers: {
45
+ 'Content-Type': 'application/sparql-query',
46
+ Accept: 'application/sparql-results+json',
47
+ ...(headers ?? {}),
48
+ },
49
+ body: sparql,
50
+ });
51
+ if (!res.ok)
52
+ throw new Error(`HTTP ${res.status} ${res.statusText}`);
53
+ return res.json();
54
+ },
55
+ async update(path, sparql) {
56
+ const res = await fetch(buildUrl(path), {
57
+ method: 'POST',
58
+ headers: { 'Content-Type': 'application/sparql-update', ...(headers ?? {}) },
59
+ body: sparql,
60
+ });
61
+ if (!res.ok)
62
+ throw new Error(`HTTP ${res.status} ${res.statusText}`);
63
+ const text = await res.text();
64
+ return text || undefined;
65
+ },
66
+ };
67
+ }
68
+ /**
69
+ * `VirtuosoStore` wraps Virtuoso's `/sparql` endpoint behind the `NoSqlStore`
70
+ * lifecycle.
71
+ */
72
+ class VirtuosoStore {
73
+ constructor(options = {}) {
74
+ this.name = 'virtuoso';
75
+ this.library = 'fetch';
76
+ this.client = null;
77
+ this.connected = false;
78
+ this.endpoint = options.endpoint ?? exports.DEFAULT_VIRTUOSO_ENDPOINT;
79
+ this.sparqlPath = options.sparqlPath ?? exports.DEFAULT_VIRTUOSO_SPARQL_PATH;
80
+ this.injectedClient = options.client;
81
+ this.headers = options.headers;
82
+ }
83
+ /** SPARQL query endpoint path. */
84
+ get queryPath() {
85
+ return this.sparqlPath;
86
+ }
87
+ /** SPARQL update endpoint path (same endpoint). */
88
+ get updatePath() {
89
+ return this.sparqlPath;
90
+ }
91
+ // ---------------------------------------------------------------------
92
+ // Connection lifecycle
93
+ // ---------------------------------------------------------------------
94
+ async connect() {
95
+ if (this.connected && this.client)
96
+ return;
97
+ this.client = this.injectedClient ?? createFetchClient(this.endpoint, this.headers);
98
+ this.connected = true;
99
+ }
100
+ async disconnect() {
101
+ this.client = null;
102
+ this.connected = false;
103
+ }
104
+ isConnected() {
105
+ return this.connected && this.client !== null;
106
+ }
107
+ /** Returns the underlying (internal or injected) SPARQL HTTP client. */
108
+ getClient() {
109
+ return this.requireClient();
110
+ }
111
+ requireClient() {
112
+ if (!this.client) {
113
+ throw new errors_1.ConnectionError('Not connected to Virtuoso', {
114
+ database: 'virtuoso',
115
+ host: this.endpoint,
116
+ });
117
+ }
118
+ return this.client;
119
+ }
120
+ // ---------------------------------------------------------------------
121
+ // SPARQL surface
122
+ // ---------------------------------------------------------------------
123
+ /** Runs a SPARQL SELECT/CONSTRUCT query; returns the result bindings. */
124
+ async query(sparql) {
125
+ const client = this.requireClient();
126
+ try {
127
+ const body = await client.query(this.queryPath, sparql);
128
+ return body?.results?.bindings ?? [];
129
+ }
130
+ catch (err) {
131
+ const parent = err instanceof Error ? err : new Error(String(err));
132
+ throw errors_1.DatabaseError.from(parent, { message: `Virtuoso query failed: ${parent.message}`, sql: sparql });
133
+ }
134
+ }
135
+ /** Runs a SPARQL ASK query; returns the boolean answer. */
136
+ async ask(sparql) {
137
+ const client = this.requireClient();
138
+ try {
139
+ const body = await client.query(this.queryPath, sparql);
140
+ return Boolean(body?.boolean);
141
+ }
142
+ catch (err) {
143
+ const parent = err instanceof Error ? err : new Error(String(err));
144
+ throw errors_1.DatabaseError.from(parent, { message: `Virtuoso ask failed: ${parent.message}`, sql: sparql });
145
+ }
146
+ }
147
+ /** Runs a SPARQL UPDATE (INSERT/DELETE/DROP/...). */
148
+ async update(sparql) {
149
+ const client = this.requireClient();
150
+ try {
151
+ return await client.update(this.updatePath, sparql);
152
+ }
153
+ catch (err) {
154
+ const parent = err instanceof Error ? err : new Error(String(err));
155
+ throw errors_1.DatabaseError.from(parent, { message: `Virtuoso update failed: ${parent.message}`, sql: sparql });
156
+ }
157
+ }
158
+ /** Inserts triples via `INSERT DATA { ... }`. Accepts a triple string or array. */
159
+ async add(triples, graph) {
160
+ const body = Array.isArray(triples) ? triples.join('\n') : triples;
161
+ const inner = graph ? `GRAPH <${graph}> { ${body} }` : body;
162
+ return this.update(`INSERT DATA { ${inner} }`);
163
+ }
164
+ /** Drops a named graph, or all graphs when no graph is given. */
165
+ async drop(graph) {
166
+ return this.update(graph ? `DROP GRAPH <${graph}>` : 'DROP ALL');
167
+ }
168
+ }
169
+ exports.VirtuosoStore = VirtuosoStore;
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+ /**
3
+ * Weaviate store implementation.
4
+ *
5
+ * Weaviate is a vector database: collections ("classes") hold objects (a
6
+ * UUID, a JSON `properties` bag, and one or more dense vectors), and the
7
+ * primary query shape is "find the objects whose vector is closest to this
8
+ * vector/text" (optionally constrained by a structured filter), plus plain
9
+ * property-filtered fetches - not SQL, not `WHERE`, not joins. It does not
10
+ * fit the SQL-shaped `Dialect` interface used by the SQL dialects in this
11
+ * repo, so this class implements the minimal `NoSqlStore` marker interface
12
+ * and exposes Weaviate's real collection/object/query operations instead of
13
+ * forcing them into a `query(sql)` shape.
14
+ *
15
+ * Uses the official `weaviate-client` (v3) driver, which exposes a
16
+ * collection-oriented fluent API (`client.collections.get(name).data.*` /
17
+ * `.query.*`) built on gRPC, rather than the older `weaviate-ts-client` (v2)
18
+ * REST/GraphQL client.
19
+ */
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.WeaviateStore = void 0;
25
+ const weaviate_client_1 = __importDefault(require("weaviate-client"));
26
+ const errors_1 = require("../../errors");
27
+ function wrapConnectionError(err, host) {
28
+ const parent = err instanceof Error ? err : new Error(String(err));
29
+ const message = /ECONNREFUSED|fetch failed|WeaviateConnectionError/i.test(parent.message)
30
+ ? 'Connection refused'
31
+ : `Unable to connect to Weaviate: ${parent.message}`;
32
+ return new errors_1.ConnectionError(message, { parent, database: 'weaviate', host });
33
+ }
34
+ function wrapDatabaseError(err, message) {
35
+ const parent = err instanceof Error ? err : new Error(String(err));
36
+ // Keep the `action` context (e.g. "Weaviate NEAR VECTOR failed") but don't
37
+ // discard the real underlying Weaviate error text (e.g. "collection
38
+ // 'Article' not found") - append it so callers inspecting `err.message`
39
+ // still see what actually went wrong.
40
+ const combined = message ? `${message}: ${parent.message}` : parent.message;
41
+ return errors_1.DatabaseError.from(parent, { message: combined });
42
+ }
43
+ /**
44
+ * `WeaviateStore` wraps a `weaviate-client` (v3) `WeaviateClient` and exposes
45
+ * Weaviate's collection management, object insert/query/update/delete, and
46
+ * near-vector/near-text similarity search as a typed, promise-based API.
47
+ */
48
+ class WeaviateStore {
49
+ constructor(options = {}) {
50
+ this.name = 'weaviate';
51
+ this.library = 'weaviate-client';
52
+ this.client = null;
53
+ this.connected = false;
54
+ this.options = options;
55
+ }
56
+ // ---------------------------------------------------------------------
57
+ // Connection lifecycle
58
+ // ---------------------------------------------------------------------
59
+ async connect() {
60
+ if (this.connected && this.client) {
61
+ return;
62
+ }
63
+ try {
64
+ const client = this.options.clusterURL
65
+ ? await weaviate_client_1.default.connectToWeaviateCloud(this.options.clusterURL, this.options)
66
+ : await weaviate_client_1.default.connectToLocal(this.options);
67
+ // Unlike ioredis, `connectToLocal`/`connectToWeaviateCloud` already
68
+ // perform init checks (readiness/liveness) by default and throw if
69
+ // they fail, so there's no separate "verify the connection" step
70
+ // needed here - a resolved promise means the client is usable.
71
+ this.client = client;
72
+ this.connected = true;
73
+ }
74
+ catch (err) {
75
+ this.client = null;
76
+ this.connected = false;
77
+ throw wrapConnectionError(err, this.hostForErrors());
78
+ }
79
+ }
80
+ hostForErrors() {
81
+ if (this.options.clusterURL) {
82
+ return this.options.clusterURL;
83
+ }
84
+ const local = this.options;
85
+ return local.host;
86
+ }
87
+ async disconnect() {
88
+ if (this.client) {
89
+ await this.client.close();
90
+ this.client = null;
91
+ }
92
+ this.connected = false;
93
+ }
94
+ isConnected() {
95
+ return this.connected && this.client !== null;
96
+ }
97
+ /** Returns the underlying `weaviate-client` `WeaviateClient` for anything not wrapped here. */
98
+ getClient() {
99
+ return this.requireClient();
100
+ }
101
+ requireClient() {
102
+ if (!this.client) {
103
+ throw new errors_1.ConnectionError('Not connected to Weaviate', { database: 'weaviate' });
104
+ }
105
+ return this.client;
106
+ }
107
+ async exec(fn, action) {
108
+ const client = this.requireClient();
109
+ try {
110
+ return await fn(client);
111
+ }
112
+ catch (err) {
113
+ throw wrapDatabaseError(err, `Weaviate ${action} failed`);
114
+ }
115
+ }
116
+ collection(collectionName) {
117
+ return this.requireClient().collections.get(collectionName);
118
+ }
119
+ /**
120
+ * Build a `FilterValue` (see `nearVector()`/`fetchObjects()`/`deleteMany()`'s
121
+ * `filters` option) against a collection's schema, e.g.
122
+ * `store.filter('Article').byProperty('title').equal('Hello')`.
123
+ */
124
+ filter(collectionName) {
125
+ return this.collection(collectionName).filter;
126
+ }
127
+ // ---------------------------------------------------------------------
128
+ // Collection (class) management
129
+ // ---------------------------------------------------------------------
130
+ /**
131
+ * Create a new collection ("class"). `properties` declares the object
132
+ * schema (name/dataType/indexing per field); `vectorizer` configures how
133
+ * vectors are produced - pass `weaviate.configure.vectorizer.none()` for
134
+ * bring-your-own vectors, or a module config like
135
+ * `weaviate.configure.vectorizer.text2VecOpenAI()` to have Weaviate call
136
+ * out to an embedding provider (which requires the corresponding API key
137
+ * in `headers`, e.g. `X-OpenAI-Api-Key`, at connect time).
138
+ */
139
+ async createCollection(collectionName, properties = [], vectorizer, options = {}) {
140
+ return this.exec(async (c) => {
141
+ const created = await c.collections.create({
142
+ name: collectionName,
143
+ properties,
144
+ vectorizers: vectorizer,
145
+ ...options,
146
+ });
147
+ return created.config.get();
148
+ }, 'CREATE COLLECTION');
149
+ }
150
+ /** Delete a collection and all of its objects. */
151
+ async deleteCollection(collectionName) {
152
+ return this.exec((c) => c.collections.delete(collectionName), 'DELETE COLLECTION');
153
+ }
154
+ /** List every collection's configuration. */
155
+ async listCollections() {
156
+ return this.exec((c) => c.collections.listAll(), 'LIST COLLECTIONS');
157
+ }
158
+ /** Whether a collection with this name exists. */
159
+ async collectionExists(collectionName) {
160
+ return this.exec((c) => c.collections.exists(collectionName), 'COLLECTION EXISTS');
161
+ }
162
+ /** Detailed schema/config for one collection (properties, vectorizer, replication, etc). */
163
+ async getCollection(collectionName) {
164
+ return this.exec((c) => c.collections.export(collectionName), 'GET COLLECTION');
165
+ }
166
+ // ---------------------------------------------------------------------
167
+ // Object insert
168
+ // ---------------------------------------------------------------------
169
+ /**
170
+ * Insert a single object. `object.vector` (renamed `vectors` on the wire)
171
+ * may be omitted entirely for collections with a server-side vectorizer
172
+ * module, or supplied explicitly (a plain array, or a `{ name: vector }`
173
+ * map for named-vector collections) for `none`/self-provided vectorizers.
174
+ * Returns the object's UUID (generated if `object.id` wasn't given).
175
+ */
176
+ async insertObject(collectionName, object = {}) {
177
+ return this.exec((c) => c.collections.get(collectionName).data.insert(object), 'INSERT');
178
+ }
179
+ /**
180
+ * Insert multiple objects in a single request (no client-side batching -
181
+ * all `objects` are sent together). Per-object failures are reported in
182
+ * the returned `errors`/`hasErrors` rather than rejecting the whole call;
183
+ * check `hasErrors` to detect partial failures.
184
+ */
185
+ async insertMany(collectionName, objects) {
186
+ return this.exec((c) => c.collections.get(collectionName).data.insertMany(objects), 'INSERT MANY');
187
+ }
188
+ // ---------------------------------------------------------------------
189
+ // Query / similarity search
190
+ // ---------------------------------------------------------------------
191
+ /** Find the objects whose vector is closest to `vector`, optionally constrained by `options.filters`. */
192
+ async nearVector(collectionName, vector, options = {}) {
193
+ return this.exec((c) => c.collections.get(collectionName).query.nearVector(vector, options), 'NEAR VECTOR');
194
+ }
195
+ /**
196
+ * Find the objects whose vector is closest to the vectorized form of
197
+ * `query` (a single string, or multiple strings averaged together).
198
+ * Requires the collection to have a text vectorizer module configured
199
+ * (this is not a keyword/BM25 search - use `getClient()` for that).
200
+ */
201
+ async nearText(collectionName, query, options = {}) {
202
+ return this.exec((c) => c.collections.get(collectionName).query.nearText(query, options), 'NEAR TEXT');
203
+ }
204
+ /**
205
+ * Fetch objects without a similarity search - the vector-store analogue
206
+ * of `SELECT ... WHERE ...`. Supports `limit`/`offset`/cursor-based
207
+ * pagination (`after`), `filters`, and `returnProperties` to select which
208
+ * fields come back.
209
+ */
210
+ async fetchObjects(collectionName, options = {}) {
211
+ return this.exec((c) => c.collections.get(collectionName).query.fetchObjects(options), 'FETCH OBJECTS');
212
+ }
213
+ /** Fetch a single object by its UUID. Returns `null` if no object with that ID exists. */
214
+ async fetchObjectById(collectionName, id, options = {}) {
215
+ return this.exec((c) => c.collections.get(collectionName).query.fetchObjectById(id, options), 'FETCH OBJECT BY ID');
216
+ }
217
+ // ---------------------------------------------------------------------
218
+ // Update / replace
219
+ // ---------------------------------------------------------------------
220
+ /**
221
+ * Partially update an object (`PATCH` semantics) - only the fields in
222
+ * `fields.properties`/`fields.vectors` are changed; everything else on
223
+ * the object is left as-is.
224
+ */
225
+ async updateObject(collectionName, id, fields) {
226
+ return this.exec((c) => c.collections.get(collectionName).data.update({ id, ...fields }), 'UPDATE');
227
+ }
228
+ /**
229
+ * Fully replace an object (`PUT` semantics) - any property not present in
230
+ * `fields.properties` is cleared, unlike `updateObject()`.
231
+ */
232
+ async replaceObject(collectionName, id, fields) {
233
+ return this.exec((c) => c.collections.get(collectionName).data.replace({ id, ...fields }), 'REPLACE');
234
+ }
235
+ // ---------------------------------------------------------------------
236
+ // Delete
237
+ // ---------------------------------------------------------------------
238
+ /** Whether an object with this UUID exists in the collection. */
239
+ async objectExists(collectionName, id) {
240
+ return this.exec((c) => c.collections.get(collectionName).data.exists(id), 'OBJECT EXISTS');
241
+ }
242
+ /**
243
+ * Delete a single object by its UUID. Returns `true` if an object was
244
+ * actually deleted.
245
+ *
246
+ * The real `weaviate-client` `data.deleteById()` issues a REST `DELETE`
247
+ * and resolves `true` unconditionally (Weaviate's `DELETE
248
+ * /objects/{id}` returns success whether or not an object with that id
249
+ * existed) - it does not itself report whether anything was deleted.
250
+ * Check existence first so the documented "returns whether something
251
+ * was actually deleted" contract holds against the real driver, not
252
+ * just the test mock (whose `Map.delete()` happens to return that for
253
+ * free).
254
+ */
255
+ async deleteObject(collectionName, id) {
256
+ return this.exec(async (c) => {
257
+ const collection = c.collections.get(collectionName);
258
+ const existed = await collection.data.exists(id);
259
+ if (!existed) {
260
+ return false;
261
+ }
262
+ await collection.data.deleteById(id);
263
+ return true;
264
+ }, 'DELETE');
265
+ }
266
+ /**
267
+ * Delete every object matching `where` (build one with `filter()`). Pass
268
+ * `{ verbose: true }` to get back the per-object outcome in
269
+ * `result.objects`; otherwise only the aggregate counts are populated.
270
+ */
271
+ async deleteMany(collectionName, where, options = {}) {
272
+ return this.exec((c) => c.collections.get(collectionName).data.deleteMany(where, options), 'DELETE MANY');
273
+ }
274
+ }
275
+ exports.WeaviateStore = WeaviateStore;
276
+ exports.default = WeaviateStore;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * Operators module - re-exports all operators and helper functions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.endsWith = exports.notStartsWith = exports.startsWith = exports.arrayAll = exports.arrayAny = exports.arrayOverlaps = exports.arrayContainedBy = exports.arrayContains = exports.jsonPathQuery = exports.jsonPathExists = exports.jsonDeletePath = exports.jsonDelete = exports.jsonConcat = exports.jsonHasKey = exports.jsonContains = exports.jsonKey = exports.json = exports.overlap = exports.contains = exports.notExists = exports.exists = exports.isNotNull = exports.isNull = exports.notBetween = exports.between = exports.notIn = exports.inOp = exports.notIRegexp = exports.iRegexp = exports.notRegexp = exports.regexp = exports.notILike = exports.iLike = exports.notLike = exports.like = exports.lte = exports.lt = exports.gte = exports.gt = exports.ne = exports.eq = exports.not = exports.or = exports.and = exports.where = exports.operatorToWhereKey = exports.getOperatorString = exports.isOperator = exports.Operators = exports.Op = void 0;
7
+ exports.isOrderExpression = exports.random = exports.desc = exports.asc = exports.phraseToTsquery = exports.plainToTsquery = exports.toTsquery = exports.toTsvector = exports.matchFulltext = exports.matchAgainst = exports.Cast = exports.isConvExpression = exports.isExtractExpression = exports.isCastExpression = exports.conv = exports.extract = exports.cast = exports.isRawLiteral = exports.isLiteralExpression = exports.isColExpression = exports.isFnExpression = exports.literalExpr = exports.literal = exports.col = exports.fn = exports.all = exports.any = exports.notSubstring = exports.substring = exports.notEndsWith = void 0;
8
+ // Re-export all operators and symbols
9
+ var operators_1 = require("../operators");
10
+ Object.defineProperty(exports, "Op", { enumerable: true, get: function () { return operators_1.Op; } });
11
+ Object.defineProperty(exports, "Operators", { enumerable: true, get: function () { return operators_1.Operators; } });
12
+ Object.defineProperty(exports, "isOperator", { enumerable: true, get: function () { return operators_1.isOperator; } });
13
+ Object.defineProperty(exports, "getOperatorString", { enumerable: true, get: function () { return operators_1.getOperatorString; } });
14
+ Object.defineProperty(exports, "operatorToWhereKey", { enumerable: true, get: function () { return operators_1.operatorToWhereKey; } });
15
+ // Re-export helper functions
16
+ var operators_2 = require("../operators");
17
+ // Core where helpers
18
+ Object.defineProperty(exports, "where", { enumerable: true, get: function () { return operators_2.where; } });
19
+ Object.defineProperty(exports, "and", { enumerable: true, get: function () { return operators_2.and; } });
20
+ Object.defineProperty(exports, "or", { enumerable: true, get: function () { return operators_2.or; } });
21
+ Object.defineProperty(exports, "not", { enumerable: true, get: function () { return operators_2.not; } });
22
+ // Comparison helpers
23
+ Object.defineProperty(exports, "eq", { enumerable: true, get: function () { return operators_2.eq; } });
24
+ Object.defineProperty(exports, "ne", { enumerable: true, get: function () { return operators_2.ne; } });
25
+ Object.defineProperty(exports, "gt", { enumerable: true, get: function () { return operators_2.gt; } });
26
+ Object.defineProperty(exports, "gte", { enumerable: true, get: function () { return operators_2.gte; } });
27
+ Object.defineProperty(exports, "lt", { enumerable: true, get: function () { return operators_2.lt; } });
28
+ Object.defineProperty(exports, "lte", { enumerable: true, get: function () { return operators_2.lte; } });
29
+ // Like operators
30
+ Object.defineProperty(exports, "like", { enumerable: true, get: function () { return operators_2.like; } });
31
+ Object.defineProperty(exports, "notLike", { enumerable: true, get: function () { return operators_2.notLike; } });
32
+ Object.defineProperty(exports, "iLike", { enumerable: true, get: function () { return operators_2.iLike; } });
33
+ Object.defineProperty(exports, "notILike", { enumerable: true, get: function () { return operators_2.notILike; } });
34
+ // Regexp operators
35
+ Object.defineProperty(exports, "regexp", { enumerable: true, get: function () { return operators_2.regexp; } });
36
+ Object.defineProperty(exports, "notRegexp", { enumerable: true, get: function () { return operators_2.notRegexp; } });
37
+ Object.defineProperty(exports, "iRegexp", { enumerable: true, get: function () { return operators_2.iRegexp; } });
38
+ Object.defineProperty(exports, "notIRegexp", { enumerable: true, get: function () { return operators_2.notIRegexp; } });
39
+ // Array/in operators
40
+ Object.defineProperty(exports, "inOp", { enumerable: true, get: function () { return operators_2.in; } });
41
+ Object.defineProperty(exports, "notIn", { enumerable: true, get: function () { return operators_2.notIn; } });
42
+ Object.defineProperty(exports, "between", { enumerable: true, get: function () { return operators_2.between; } });
43
+ Object.defineProperty(exports, "notBetween", { enumerable: true, get: function () { return operators_2.notBetween; } });
44
+ // Null operators
45
+ Object.defineProperty(exports, "isNull", { enumerable: true, get: function () { return operators_2.isNull; } });
46
+ Object.defineProperty(exports, "isNotNull", { enumerable: true, get: function () { return operators_2.isNotNull; } });
47
+ // Exists operators for anti-joins
48
+ Object.defineProperty(exports, "exists", { enumerable: true, get: function () { return operators_2.exists; } });
49
+ Object.defineProperty(exports, "notExists", { enumerable: true, get: function () { return operators_2.notExists; } });
50
+ // JSON/Array operators
51
+ Object.defineProperty(exports, "contains", { enumerable: true, get: function () { return operators_2.contains; } });
52
+ Object.defineProperty(exports, "overlap", { enumerable: true, get: function () { return operators_2.overlap; } });
53
+ Object.defineProperty(exports, "json", { enumerable: true, get: function () { return operators_2.json; } });
54
+ Object.defineProperty(exports, "jsonKey", { enumerable: true, get: function () { return operators_2.jsonKey; } });
55
+ Object.defineProperty(exports, "jsonContains", { enumerable: true, get: function () { return operators_2.jsonContains; } });
56
+ Object.defineProperty(exports, "jsonHasKey", { enumerable: true, get: function () { return operators_2.jsonHasKey; } });
57
+ Object.defineProperty(exports, "jsonConcat", { enumerable: true, get: function () { return operators_2.jsonConcat; } });
58
+ Object.defineProperty(exports, "jsonDelete", { enumerable: true, get: function () { return operators_2.jsonDelete; } });
59
+ Object.defineProperty(exports, "jsonDeletePath", { enumerable: true, get: function () { return operators_2.jsonDeletePath; } });
60
+ Object.defineProperty(exports, "jsonPathExists", { enumerable: true, get: function () { return operators_2.jsonPathExists; } });
61
+ Object.defineProperty(exports, "jsonPathQuery", { enumerable: true, get: function () { return operators_2.jsonPathQuery; } });
62
+ // PostgreSQL Array operators
63
+ Object.defineProperty(exports, "arrayContains", { enumerable: true, get: function () { return operators_2.arrayContains; } });
64
+ Object.defineProperty(exports, "arrayContainedBy", { enumerable: true, get: function () { return operators_2.arrayContainedBy; } });
65
+ Object.defineProperty(exports, "arrayOverlaps", { enumerable: true, get: function () { return operators_2.arrayOverlaps; } });
66
+ Object.defineProperty(exports, "arrayAny", { enumerable: true, get: function () { return operators_2.arrayAny; } });
67
+ Object.defineProperty(exports, "arrayAll", { enumerable: true, get: function () { return operators_2.arrayAll; } });
68
+ // Search operators
69
+ Object.defineProperty(exports, "startsWith", { enumerable: true, get: function () { return operators_2.startsWith; } });
70
+ Object.defineProperty(exports, "notStartsWith", { enumerable: true, get: function () { return operators_2.notStartsWith; } });
71
+ Object.defineProperty(exports, "endsWith", { enumerable: true, get: function () { return operators_2.endsWith; } });
72
+ Object.defineProperty(exports, "notEndsWith", { enumerable: true, get: function () { return operators_2.notEndsWith; } });
73
+ Object.defineProperty(exports, "substring", { enumerable: true, get: function () { return operators_2.substring; } });
74
+ Object.defineProperty(exports, "notSubstring", { enumerable: true, get: function () { return operators_2.notSubstring; } });
75
+ // Array ANY/ALL operators
76
+ Object.defineProperty(exports, "any", { enumerable: true, get: function () { return operators_2.any; } });
77
+ Object.defineProperty(exports, "all", { enumerable: true, get: function () { return operators_2.all; } });
78
+ // SQL Functions
79
+ Object.defineProperty(exports, "fn", { enumerable: true, get: function () { return operators_2.fn; } });
80
+ Object.defineProperty(exports, "col", { enumerable: true, get: function () { return operators_2.col; } });
81
+ Object.defineProperty(exports, "literal", { enumerable: true, get: function () { return operators_2.literal; } });
82
+ Object.defineProperty(exports, "literalExpr", { enumerable: true, get: function () { return operators_2.literalExpr; } });
83
+ Object.defineProperty(exports, "isFnExpression", { enumerable: true, get: function () { return operators_2.isFnExpression; } });
84
+ Object.defineProperty(exports, "isColExpression", { enumerable: true, get: function () { return operators_2.isColExpression; } });
85
+ Object.defineProperty(exports, "isLiteralExpression", { enumerable: true, get: function () { return operators_2.isLiteralExpression; } });
86
+ Object.defineProperty(exports, "isRawLiteral", { enumerable: true, get: function () { return operators_2.isRawLiteral; } });
87
+ // Cast/Extract/Convert functions
88
+ Object.defineProperty(exports, "cast", { enumerable: true, get: function () { return operators_2.cast; } });
89
+ Object.defineProperty(exports, "extract", { enumerable: true, get: function () { return operators_2.extract; } });
90
+ Object.defineProperty(exports, "conv", { enumerable: true, get: function () { return operators_2.conv; } });
91
+ Object.defineProperty(exports, "isCastExpression", { enumerable: true, get: function () { return operators_2.isCastExpression; } });
92
+ Object.defineProperty(exports, "isExtractExpression", { enumerable: true, get: function () { return operators_2.isExtractExpression; } });
93
+ Object.defineProperty(exports, "isConvExpression", { enumerable: true, get: function () { return operators_2.isConvExpression; } });
94
+ // Cast helpers
95
+ Object.defineProperty(exports, "Cast", { enumerable: true, get: function () { return operators_2.Cast; } });
96
+ // Full-text search operators
97
+ Object.defineProperty(exports, "matchAgainst", { enumerable: true, get: function () { return operators_2.matchAgainst; } });
98
+ Object.defineProperty(exports, "matchFulltext", { enumerable: true, get: function () { return operators_2.matchFulltext; } });
99
+ Object.defineProperty(exports, "toTsvector", { enumerable: true, get: function () { return operators_2.toTsvector; } });
100
+ Object.defineProperty(exports, "toTsquery", { enumerable: true, get: function () { return operators_2.toTsquery; } });
101
+ Object.defineProperty(exports, "plainToTsquery", { enumerable: true, get: function () { return operators_2.plainToTsquery; } });
102
+ Object.defineProperty(exports, "phraseToTsquery", { enumerable: true, get: function () { return operators_2.phraseToTsquery; } });
103
+ // Re-export order helper functions
104
+ var operators_3 = require("../operators");
105
+ Object.defineProperty(exports, "asc", { enumerable: true, get: function () { return operators_3.asc; } });
106
+ Object.defineProperty(exports, "desc", { enumerable: true, get: function () { return operators_3.desc; } });
107
+ Object.defineProperty(exports, "random", { enumerable: true, get: function () { return operators_3.random; } });
108
+ Object.defineProperty(exports, "isOrderExpression", { enumerable: true, get: function () { return operators_3.isOrderExpression; } });