@ragestudio/scylla-odm 0.14.0 → 0.15.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 (251) hide show
  1. package/_virtual/_rolldown/runtime.js +26 -0
  2. package/client.d.ts +5 -3
  3. package/client.js +29 -27
  4. package/client.js.map +1 -1
  5. package/cql_gen/create_keyspace.d.ts +12 -0
  6. package/cql_gen/create_keyspace.js +14 -0
  7. package/cql_gen/create_keyspace.js.map +1 -0
  8. package/document/index.d.ts +2 -2
  9. package/driver/index.d.ts +301 -0
  10. package/driver/index.js +53 -0
  11. package/driver/index.js.map +1 -0
  12. package/driver/lib/auth/base-dse-authenticator.js +58 -0
  13. package/driver/lib/auth/base-dse-authenticator.js.map +1 -0
  14. package/driver/lib/auth/dse-gssapi-auth-provider.js +177 -0
  15. package/driver/lib/auth/dse-gssapi-auth-provider.js.map +1 -0
  16. package/driver/lib/auth/dse-plain-text-auth-provider.js +90 -0
  17. package/driver/lib/auth/dse-plain-text-auth-provider.js.map +1 -0
  18. package/driver/lib/auth/gssapi-client.js +113 -0
  19. package/driver/lib/auth/gssapi-client.js.map +1 -0
  20. package/driver/lib/auth/index.d.ts +47 -0
  21. package/driver/lib/auth/index.js +31 -0
  22. package/driver/lib/auth/index.js.map +1 -0
  23. package/driver/lib/auth/no-auth-provider.js +52 -0
  24. package/driver/lib/auth/no-auth-provider.js.map +1 -0
  25. package/driver/lib/auth/plain-text-auth-provider.js +66 -0
  26. package/driver/lib/auth/plain-text-auth-provider.js.map +1 -0
  27. package/driver/lib/auth/provider.js +59 -0
  28. package/driver/lib/auth/provider.js.map +1 -0
  29. package/driver/lib/client-options.js +230 -0
  30. package/driver/lib/client-options.js.map +1 -0
  31. package/driver/lib/client.js +982 -0
  32. package/driver/lib/client.js.map +1 -0
  33. package/driver/lib/concurrent/index.d.ts +1 -0
  34. package/driver/lib/concurrent/index.js +244 -0
  35. package/driver/lib/concurrent/index.js.map +1 -0
  36. package/driver/lib/connection.js +578 -0
  37. package/driver/lib/connection.js.map +1 -0
  38. package/driver/lib/control-connection.js +765 -0
  39. package/driver/lib/control-connection.js.map +1 -0
  40. package/driver/lib/datastax/graph/complex-type-helper.js +60 -0
  41. package/driver/lib/datastax/graph/complex-type-helper.js.map +1 -0
  42. package/driver/lib/datastax/graph/custom-type-serializers.js +279 -0
  43. package/driver/lib/datastax/graph/custom-type-serializers.js.map +1 -0
  44. package/driver/lib/datastax/graph/graph-executor.js +182 -0
  45. package/driver/lib/datastax/graph/graph-executor.js.map +1 -0
  46. package/driver/lib/datastax/graph/graph-serializer.js +196 -0
  47. package/driver/lib/datastax/graph/graph-serializer.js.map +1 -0
  48. package/driver/lib/datastax/graph/index.js +67 -0
  49. package/driver/lib/datastax/graph/index.js.map +1 -0
  50. package/driver/lib/datastax/graph/options.js +232 -0
  51. package/driver/lib/datastax/graph/options.js.map +1 -0
  52. package/driver/lib/datastax/graph/result-set.js +125 -0
  53. package/driver/lib/datastax/graph/result-set.js.map +1 -0
  54. package/driver/lib/datastax/graph/structure.js +147 -0
  55. package/driver/lib/datastax/graph/structure.js.map +1 -0
  56. package/driver/lib/datastax/graph/type-serializers.js +380 -0
  57. package/driver/lib/datastax/graph/type-serializers.js.map +1 -0
  58. package/driver/lib/datastax/graph/wrappers.js +80 -0
  59. package/driver/lib/datastax/graph/wrappers.js.map +1 -0
  60. package/driver/lib/datastax/search/date-range.js +380 -0
  61. package/driver/lib/datastax/search/date-range.js.map +1 -0
  62. package/driver/lib/datastax/search/index.js +21 -0
  63. package/driver/lib/datastax/search/index.js.map +1 -0
  64. package/driver/lib/encoder.js +1584 -0
  65. package/driver/lib/encoder.js.map +1 -0
  66. package/driver/lib/errors.js +155 -0
  67. package/driver/lib/errors.js.map +1 -0
  68. package/driver/lib/execution-options.js +453 -0
  69. package/driver/lib/execution-options.js.map +1 -0
  70. package/driver/lib/execution-profile.js +222 -0
  71. package/driver/lib/execution-profile.js.map +1 -0
  72. package/driver/lib/geometry/geometry.js +101 -0
  73. package/driver/lib/geometry/geometry.js.map +1 -0
  74. package/driver/lib/geometry/index.js +25 -0
  75. package/driver/lib/geometry/index.js.map +1 -0
  76. package/driver/lib/geometry/line-string.js +150 -0
  77. package/driver/lib/geometry/line-string.js.map +1 -0
  78. package/driver/lib/geometry/point.js +108 -0
  79. package/driver/lib/geometry/point.js.map +1 -0
  80. package/driver/lib/geometry/polygon.js +196 -0
  81. package/driver/lib/geometry/polygon.js.map +1 -0
  82. package/driver/lib/host-connection-pool.js +338 -0
  83. package/driver/lib/host-connection-pool.js.map +1 -0
  84. package/driver/lib/host.js +517 -0
  85. package/driver/lib/host.js.map +1 -0
  86. package/driver/lib/insights-client.js +355 -0
  87. package/driver/lib/insights-client.js.map +1 -0
  88. package/driver/lib/mapping/cache.js +143 -0
  89. package/driver/lib/mapping/cache.js.map +1 -0
  90. package/driver/lib/mapping/doc-info-adapter.js +123 -0
  91. package/driver/lib/mapping/doc-info-adapter.js.map +1 -0
  92. package/driver/lib/mapping/index.d.ts +143 -0
  93. package/driver/lib/mapping/index.js +30 -0
  94. package/driver/lib/mapping/index.js.map +1 -0
  95. package/driver/lib/mapping/mapper.js +149 -0
  96. package/driver/lib/mapping/mapper.js.map +1 -0
  97. package/driver/lib/mapping/mapping-handler.js +258 -0
  98. package/driver/lib/mapping/mapping-handler.js.map +1 -0
  99. package/driver/lib/mapping/model-batch-item.js +168 -0
  100. package/driver/lib/mapping/model-batch-item.js.map +1 -0
  101. package/driver/lib/mapping/model-batch-mapper.js +113 -0
  102. package/driver/lib/mapping/model-batch-mapper.js.map +1 -0
  103. package/driver/lib/mapping/model-mapper.js +276 -0
  104. package/driver/lib/mapping/model-mapper.js.map +1 -0
  105. package/driver/lib/mapping/model-mapping-info.js +120 -0
  106. package/driver/lib/mapping/model-mapping-info.js.map +1 -0
  107. package/driver/lib/mapping/object-selector.js +162 -0
  108. package/driver/lib/mapping/object-selector.js.map +1 -0
  109. package/driver/lib/mapping/q.js +105 -0
  110. package/driver/lib/mapping/q.js.map +1 -0
  111. package/driver/lib/mapping/query-generator.js +285 -0
  112. package/driver/lib/mapping/query-generator.js.map +1 -0
  113. package/driver/lib/mapping/result-mapper.js +73 -0
  114. package/driver/lib/mapping/result-mapper.js.map +1 -0
  115. package/driver/lib/mapping/result.js +103 -0
  116. package/driver/lib/mapping/result.js.map +1 -0
  117. package/driver/lib/mapping/table-mappings.js +103 -0
  118. package/driver/lib/mapping/table-mappings.js.map +1 -0
  119. package/driver/lib/mapping/tree.js +109 -0
  120. package/driver/lib/mapping/tree.js.map +1 -0
  121. package/driver/lib/metadata/aggregate.js +69 -0
  122. package/driver/lib/metadata/aggregate.js.map +1 -0
  123. package/driver/lib/metadata/client-state.js +80 -0
  124. package/driver/lib/metadata/client-state.js.map +1 -0
  125. package/driver/lib/metadata/data-collection.js +171 -0
  126. package/driver/lib/metadata/data-collection.js.map +1 -0
  127. package/driver/lib/metadata/event-debouncer.js +113 -0
  128. package/driver/lib/metadata/event-debouncer.js.map +1 -0
  129. package/driver/lib/metadata/index.d.ts +185 -0
  130. package/driver/lib/metadata/index.js +810 -0
  131. package/driver/lib/metadata/index.js.map +1 -0
  132. package/driver/lib/metadata/materialized-view.js +40 -0
  133. package/driver/lib/metadata/materialized-view.js.map +1 -0
  134. package/driver/lib/metadata/schema-function.js +88 -0
  135. package/driver/lib/metadata/schema-function.js.map +1 -0
  136. package/driver/lib/metadata/schema-index.js +121 -0
  137. package/driver/lib/metadata/schema-index.js.map +1 -0
  138. package/driver/lib/metadata/schema-parser.js +928 -0
  139. package/driver/lib/metadata/schema-parser.js.map +1 -0
  140. package/driver/lib/metadata/table-metadata.js +66 -0
  141. package/driver/lib/metadata/table-metadata.js.map +1 -0
  142. package/driver/lib/metrics/client-metrics.js +102 -0
  143. package/driver/lib/metrics/client-metrics.js.map +1 -0
  144. package/driver/lib/metrics/default-metrics.js +168 -0
  145. package/driver/lib/metrics/default-metrics.js.map +1 -0
  146. package/driver/lib/metrics/index.d.ts +45 -0
  147. package/driver/lib/metrics/index.js +20 -0
  148. package/driver/lib/metrics/index.js.map +1 -0
  149. package/driver/lib/operation-state.js +144 -0
  150. package/driver/lib/operation-state.js.map +1 -0
  151. package/driver/lib/policies/address-resolution.js +108 -0
  152. package/driver/lib/policies/address-resolution.js.map +1 -0
  153. package/driver/lib/policies/index.d.ts +136 -0
  154. package/driver/lib/policies/index.js +75 -0
  155. package/driver/lib/policies/index.js.map +1 -0
  156. package/driver/lib/policies/load-balancing.js +630 -0
  157. package/driver/lib/policies/load-balancing.js.map +1 -0
  158. package/driver/lib/policies/reconnection.js +118 -0
  159. package/driver/lib/policies/reconnection.js.map +1 -0
  160. package/driver/lib/policies/retry.js +226 -0
  161. package/driver/lib/policies/retry.js.map +1 -0
  162. package/driver/lib/policies/speculative-execution.js +102 -0
  163. package/driver/lib/policies/speculative-execution.js.map +1 -0
  164. package/driver/lib/policies/timestamp-generation.js +131 -0
  165. package/driver/lib/policies/timestamp-generation.js.map +1 -0
  166. package/driver/lib/prepare-handler.js +203 -0
  167. package/driver/lib/prepare-handler.js.map +1 -0
  168. package/driver/lib/promise-utils.js +125 -0
  169. package/driver/lib/promise-utils.js.map +1 -0
  170. package/driver/lib/readers.js +429 -0
  171. package/driver/lib/readers.js.map +1 -0
  172. package/driver/lib/request-execution.js +301 -0
  173. package/driver/lib/request-execution.js.map +1 -0
  174. package/driver/lib/request-handler.js +201 -0
  175. package/driver/lib/request-handler.js.map +1 -0
  176. package/driver/lib/requests.js +390 -0
  177. package/driver/lib/requests.js.map +1 -0
  178. package/driver/lib/stream-id-stack.js +154 -0
  179. package/driver/lib/stream-id-stack.js.map +1 -0
  180. package/driver/lib/streams.js +528 -0
  181. package/driver/lib/streams.js.map +1 -0
  182. package/driver/lib/token.js +231 -0
  183. package/driver/lib/token.js.map +1 -0
  184. package/driver/lib/tokenizer.js +392 -0
  185. package/driver/lib/tokenizer.js.map +1 -0
  186. package/driver/lib/tracker/index.d.ts +46 -0
  187. package/driver/lib/tracker/index.js +17 -0
  188. package/driver/lib/tracker/index.js.map +1 -0
  189. package/driver/lib/tracker/request-logger.js +195 -0
  190. package/driver/lib/tracker/request-logger.js.map +1 -0
  191. package/driver/lib/tracker/request-tracker.js +55 -0
  192. package/driver/lib/tracker/request-tracker.js.map +1 -0
  193. package/driver/lib/types/big-decimal.js +210 -0
  194. package/driver/lib/types/big-decimal.js.map +1 -0
  195. package/driver/lib/types/duration.js +415 -0
  196. package/driver/lib/types/duration.js.map +1 -0
  197. package/driver/lib/types/index.d.ts +321 -0
  198. package/driver/lib/types/index.js +560 -0
  199. package/driver/lib/types/index.js.map +1 -0
  200. package/driver/lib/types/inet-address.js +179 -0
  201. package/driver/lib/types/inet-address.js.map +1 -0
  202. package/driver/lib/types/integer.js +579 -0
  203. package/driver/lib/types/integer.js.map +1 -0
  204. package/driver/lib/types/local-date.js +191 -0
  205. package/driver/lib/types/local-date.js.map +1 -0
  206. package/driver/lib/types/local-time.js +235 -0
  207. package/driver/lib/types/local-time.js.map +1 -0
  208. package/driver/lib/types/mutable-long.js +252 -0
  209. package/driver/lib/types/mutable-long.js.map +1 -0
  210. package/driver/lib/types/protocol-version.js +281 -0
  211. package/driver/lib/types/protocol-version.js.map +1 -0
  212. package/driver/lib/types/result-set.js +224 -0
  213. package/driver/lib/types/result-set.js.map +1 -0
  214. package/driver/lib/types/result-stream.js +105 -0
  215. package/driver/lib/types/result-stream.js.map +1 -0
  216. package/driver/lib/types/row.js +64 -0
  217. package/driver/lib/types/row.js.map +1 -0
  218. package/driver/lib/types/time-uuid.js +326 -0
  219. package/driver/lib/types/time-uuid.js.map +1 -0
  220. package/driver/lib/types/tuple.js +77 -0
  221. package/driver/lib/types/tuple.js.map +1 -0
  222. package/driver/lib/types/uuid.js +112 -0
  223. package/driver/lib/types/uuid.js.map +1 -0
  224. package/driver/lib/types/vector.js +88 -0
  225. package/driver/lib/types/vector.js.map +1 -0
  226. package/driver/lib/types/version-number.js +71 -0
  227. package/driver/lib/types/version-number.js.map +1 -0
  228. package/driver/lib/utils.js +1020 -0
  229. package/driver/lib/utils.js.map +1 -0
  230. package/driver/lib/writers.js +256 -0
  231. package/driver/lib/writers.js.map +1 -0
  232. package/logger/index.d.ts +10 -0
  233. package/logger/index.js +17 -0
  234. package/logger/index.js.map +1 -0
  235. package/model/index.d.ts +1 -1
  236. package/model/index.js.map +1 -1
  237. package/operations/delete.d.ts +2 -2
  238. package/operations/find.js.map +1 -1
  239. package/operations/update.js.map +1 -1
  240. package/package.js +29 -0
  241. package/package.js.map +1 -0
  242. package/package.json +6 -3
  243. package/types.d.ts +2 -1
  244. package/types.js.map +1 -1
  245. package/utils/delay.d.ts +5 -0
  246. package/utils/delay.js +8 -0
  247. package/utils/delay.js.map +1 -0
  248. package/utils/queryParser.js +3 -3
  249. package/utils/queryParser.js.map +1 -1
  250. package/utils/typeChecker.js +3 -3
  251. package/utils/typeChecker.js.map +1 -1
@@ -0,0 +1,26 @@
1
+ import { createRequire } from "node:module";
2
+ //#region \0rolldown/runtime.js
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
12
+ key = keys[i];
13
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
14
+ get: ((k) => from[k]).bind(null, key),
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
21
+ value: mod,
22
+ enumerable: true
23
+ }) : target, mod));
24
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
25
+ //#endregion
26
+ export { __commonJSMin, __require, __toESM };
package/client.d.ts CHANGED
@@ -1,6 +1,8 @@
1
+ import { mapping } from "./driver/lib/mapping/index.js";
2
+ import { Client as Client$1 } from "./driver/index.js";
1
3
  import { Model } from "./model/index.js";
2
4
  import { ClientConfig } from "./types.js";
3
- import { Client as Client$1, mapping } from "cassandra-driver";
5
+ import { Logger } from "./logger/index.js";
4
6
 
5
7
  //#region src/client.d.ts
6
8
  declare class Client {
@@ -10,12 +12,12 @@ declare class Client {
10
12
  mapper: mapping.Mapper;
11
13
  models: Map<string, Model<any>>;
12
14
  model(name: string): Model<any> | undefined;
15
+ logger: Logger;
13
16
  initialize(options?: {
14
17
  sync?: boolean;
15
18
  }): Promise<void>;
16
- private connectWithRetry;
17
- private delay;
18
19
  shutdown(): Promise<void>;
20
+ private connectWithRetry;
19
21
  executeWithRetry<T>(operation: () => Promise<T>, operationName?: string): Promise<T>;
20
22
  private isRetryableError;
21
23
  }
package/client.js CHANGED
@@ -1,9 +1,13 @@
1
+ import { __toESM } from "./_virtual/_rolldown/runtime.js";
2
+ import { require_driver } from "./driver/index.js";
3
+ import { Model } from "./model/index.js";
4
+ import { Logger } from "./logger/index.js";
1
5
  import loadModels_default from "./utils/loadModels.js";
2
6
  import buildMapper_default from "./utils/buildMapper.js";
3
- import { Model } from "./model/index.js";
7
+ import delay from "./utils/delay.js";
4
8
  import path from "node:path";
5
- import Cassandra from "cassandra-driver";
6
9
  //#region src/client.ts
10
+ var import_driver = /* @__PURE__ */ __toESM(require_driver(), 1);
7
11
  const DEFAULT_MAX_RETRIES = 3;
8
12
  const DEFAULT_RETRY_DELAY = 1e3;
9
13
  const { SCYLLA_CONTACT_POINTS, SCYLLA_LOCAL_DATA_CENTER, SCYLLA_KEYSPACE } = process.env;
@@ -14,7 +18,7 @@ var Client = class {
14
18
  modelsPath: path.resolve(process.cwd(), "db"),
15
19
  contactPoints: config.contactPoints ?? SCYLLA_CONTACT_POINTS?.split(",") ?? ["127.0.0.1"],
16
20
  localDataCenter: config.localDataCenter ?? SCYLLA_LOCAL_DATA_CENTER ?? "datacenter1",
17
- keyspace: config.keyspace ?? SCYLLA_KEYSPACE ?? "default",
21
+ keyspace: config.keyspace ?? SCYLLA_KEYSPACE ?? "default_keyspace",
18
22
  port: 9042,
19
23
  maxRetries: DEFAULT_MAX_RETRIES,
20
24
  retryDelay: DEFAULT_RETRY_DELAY,
@@ -27,7 +31,7 @@ var Client = class {
27
31
  protocolOptions: { port: this.config.port }
28
32
  };
29
33
  if (this.config.pooling) clientOptions.pooling = this.config.pooling;
30
- this.driver = new Cassandra.Client(clientOptions);
34
+ this.driver = new import_driver.Client(clientOptions);
31
35
  }
32
36
  config;
33
37
  driver;
@@ -36,6 +40,7 @@ var Client = class {
36
40
  model(name) {
37
41
  return this.models.get(name);
38
42
  }
43
+ logger = new Logger();
39
44
  async initialize(options = {}) {
40
45
  let models;
41
46
  try {
@@ -44,15 +49,25 @@ var Client = class {
44
49
  throw new Error(`Failed to load models: ${error.message}`);
45
50
  }
46
51
  models = models.filter((schema) => schema instanceof Model);
47
- this.mapper = new Cassandra.mapping.Mapper(this.driver, { models: buildMapper_default(models) });
52
+ this.mapper = new import_driver.mapping.Mapper(this.driver, { models: buildMapper_default(models) });
48
53
  globalThis.__scylla_client = this;
54
+ this.logger.log("Connecting...");
55
+ await this.connectWithRetry();
56
+ this.logger.log("Connected");
49
57
  for (let model of models) {
50
58
  this.models.set(model.name, model);
51
59
  if (options?.sync === true) await model._sync();
52
60
  }
53
- console.log("Connecting to ScyllaDB");
54
- await this.connectWithRetry();
55
- console.log("ScyllaDB Connected");
61
+ }
62
+ async shutdown() {
63
+ try {
64
+ await this.driver.shutdown();
65
+ this.logger.log("connection closed");
66
+ delete globalThis.__scylla_client;
67
+ } catch (error) {
68
+ this.logger.error("error shutting down connection:", error);
69
+ throw error;
70
+ }
56
71
  }
57
72
  async connectWithRetry() {
58
73
  let lastError = null;
@@ -61,27 +76,14 @@ var Client = class {
61
76
  return;
62
77
  } catch (error) {
63
78
  lastError = error;
64
- console.warn(`Connection attempt ${attempt} failed: ${error.message}`);
79
+ this.logger.warn(`Connection attempt ${attempt} failed: ${error.message}`);
65
80
  if (attempt < this.config.maxRetries) {
66
- console.log(`Retrying in ${this.config.retryDelay}ms...`);
67
- await this.delay(this.config.retryDelay);
81
+ this.logger.log(`Retrying in ${this.config.retryDelay}ms...`);
82
+ await delay(this.config.retryDelay);
68
83
  }
69
84
  }
70
85
  throw new Error(`Failed to connect to ScyllaDB after ${this.config.maxRetries} attempts: ${lastError?.message}`);
71
86
  }
72
- delay(ms) {
73
- return new Promise((resolve) => setTimeout(resolve, ms));
74
- }
75
- async shutdown() {
76
- try {
77
- await this.driver.shutdown();
78
- console.log("ScyllaDB connection closed");
79
- delete globalThis.__scylla_client;
80
- } catch (error) {
81
- console.error("Error shutting down ScyllaDB connection:", error);
82
- throw error;
83
- }
84
- }
85
87
  async executeWithRetry(operation, operationName = "operation") {
86
88
  let lastError = null;
87
89
  for (let attempt = 1; attempt <= this.config.maxRetries; attempt++) try {
@@ -89,9 +91,9 @@ var Client = class {
89
91
  } catch (error) {
90
92
  lastError = error;
91
93
  if (this.isRetryableError(error) && attempt < this.config.maxRetries) {
92
- console.warn(`Operation ${operationName} attempt ${attempt} failed: ${error.message}`);
93
- console.log(`Retrying in ${this.config.retryDelay}ms...`);
94
- await this.delay(this.config.retryDelay);
94
+ this.logger.warn(`Operation ${operationName} attempt ${attempt} failed: ${error.message}`);
95
+ this.logger.log(`Retrying in ${this.config.retryDelay}ms...`);
96
+ await delay(this.config.retryDelay);
95
97
  continue;
96
98
  }
97
99
  throw error;
package/client.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":["loadModels","buildMapper"],"sources":["../src/client.ts"],"sourcesContent":["import type {\n\tClient as T_CassandraClient,\n\tClientOptions as T_CassandraClientOptions,\n\tmapping as T_CassandraMapping,\n} from \"cassandra-driver\"\nimport type { ClientConfig } from \"./types\"\n\n//@ts-ignore\nimport path from \"node:path\"\n//@ts-ignore\nimport Cassandra from \"cassandra-driver\"\nimport loadModels from \"./utils/loadModels\"\nimport buildMapper from \"./utils/buildMapper\"\n\nimport { Model } from \"./model\"\n\nconst DEFAULT_MAX_RETRIES = 3\nconst DEFAULT_RETRY_DELAY = 1000\nconst { SCYLLA_CONTACT_POINTS, SCYLLA_LOCAL_DATA_CENTER, SCYLLA_KEYSPACE } =\n\tprocess.env\n\nexport class Client {\n\tconstructor(config: ClientConfig = {}) {\n\t\tif (globalThis.__scylla_client) {\n\t\t\tthrow new Error(\n\t\t\t\t\"An instance of Scylla Client is already initialized\",\n\t\t\t)\n\t\t}\n\n\t\tthis.config = {\n\t\t\tmodelsPath: path.resolve(process.cwd(), \"db\"),\n\t\t\tcontactPoints: config.contactPoints ??\n\t\t\t\tSCYLLA_CONTACT_POINTS?.split(\",\") ?? [\"127.0.0.1\"],\n\t\t\tlocalDataCenter:\n\t\t\t\tconfig.localDataCenter ??\n\t\t\t\tSCYLLA_LOCAL_DATA_CENTER ??\n\t\t\t\t\"datacenter1\",\n\t\t\tkeyspace: config.keyspace ?? SCYLLA_KEYSPACE ?? \"default\",\n\t\t\tport: 9042,\n\t\t\tmaxRetries: DEFAULT_MAX_RETRIES,\n\t\t\tretryDelay: DEFAULT_RETRY_DELAY,\n\t\t\t...config,\n\t\t}\n\n\t\tconst clientOptions: T_CassandraClientOptions = {\n\t\t\tcontactPoints: this.config.contactPoints,\n\t\t\tlocalDataCenter: this.config.localDataCenter,\n\t\t\tkeyspace: this.config.keyspace,\n\t\t\tprotocolOptions: {\n\t\t\t\tport: this.config.port,\n\t\t\t},\n\t\t}\n\n\t\tif (this.config.pooling) {\n\t\t\tclientOptions.pooling = this.config.pooling\n\t\t}\n\n\t\tthis.driver = new Cassandra.Client(clientOptions)\n\t}\n\n\tconfig: ClientConfig\n\tdriver: T_CassandraClient\n\tmapper!: T_CassandraMapping.Mapper\n\tmodels: Map<string, Model<any>> = new Map()\n\n\tmodel(name: string): Model<any> | undefined {\n\t\treturn this.models.get(name)\n\t}\n\n\tasync initialize(options: { sync?: boolean } = {}) {\n\t\tlet models: Model<any>[]\n\n\t\ttry {\n\t\t\tmodels = await loadModels(this.config.modelsPath!)\n\t\t} catch (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to load models: ${(error as Error).message}`,\n\t\t\t)\n\t\t}\n\n\t\tmodels = models.filter((schema) => schema instanceof Model)\n\n\t\tthis.mapper = new Cassandra.mapping.Mapper(this.driver, {\n\t\t\tmodels: buildMapper(models),\n\t\t})\n\n\t\tglobalThis.__scylla_client = this\n\n\t\tfor (let model of models) {\n\t\t\tthis.models.set(model.name, model as Model<typeof model.schema>)\n\n\t\t\tif (options?.sync === true) {\n\t\t\t\tawait model._sync()\n\t\t\t}\n\t\t}\n\n\t\tconsole.log(\"Connecting to ScyllaDB\")\n\t\tawait this.connectWithRetry()\n\t\tconsole.log(\"ScyllaDB Connected\")\n\t}\n\n\tprivate async connectWithRetry(): Promise<void> {\n\t\tlet lastError: Error | null = null\n\n\t\tfor (let attempt = 1; attempt <= this.config.maxRetries!; attempt++) {\n\t\t\ttry {\n\t\t\t\tawait this.driver.connect()\n\t\t\t\treturn\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Connection attempt ${attempt} failed: ${(error as Error).message}`,\n\t\t\t\t)\n\n\t\t\t\tif (attempt < this.config.maxRetries!) {\n\t\t\t\t\tconsole.log(`Retrying in ${this.config.retryDelay}ms...`)\n\t\t\t\t\tawait this.delay(this.config.retryDelay!)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`Failed to connect to ScyllaDB after ${this.config.maxRetries} attempts: ${lastError?.message}`,\n\t\t)\n\t}\n\n\tprivate delay(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms))\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.driver.shutdown()\n\t\t\tconsole.log(\"ScyllaDB connection closed\")\n\n\t\t\tdelete globalThis.__scylla_client\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error shutting down ScyllaDB connection:\", error)\n\t\t\tthrow error\n\t\t}\n\t}\n\n\tasync executeWithRetry<T>(\n\t\toperation: () => Promise<T>,\n\t\toperationName: string = \"operation\",\n\t): Promise<T> {\n\t\tlet lastError: Error | null = null\n\n\t\tfor (let attempt = 1; attempt <= this.config.maxRetries!; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn await operation()\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error\n\n\t\t\t\t// check if error is retryable\n\t\t\t\tif (\n\t\t\t\t\tthis.isRetryableError(error) &&\n\t\t\t\t\tattempt < this.config.maxRetries!\n\t\t\t\t) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`Operation ${operationName} attempt ${attempt} failed: ${(error as Error).message}`,\n\t\t\t\t\t)\n\t\t\t\t\tconsole.log(`Retrying in ${this.config.retryDelay}ms...`)\n\n\t\t\t\t\tawait this.delay(this.config.retryDelay!)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// if not retryable or last attempt, throw\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`Operation ${operationName} failed after ${this.config.maxRetries} attempts: ${lastError?.message}`,\n\t\t)\n\t}\n\n\tprivate isRetryableError(error: any): boolean {\n\t\t// retry on network errors, timeouts, and certain ScyllaDB errors\n\t\tconst retryableMessages = [\n\t\t\t\"timeout\",\n\t\t\t\"connection\",\n\t\t\t\"network\",\n\t\t\t\"unavailable\",\n\t\t\t\"overloaded\",\n\t\t\t\"no hosts available\",\n\t\t]\n\n\t\tconst errorMessage = error.message?.toLowerCase() || \"\"\n\n\t\treturn retryableMessages.some((msg) => errorMessage.includes(msg))\n\t}\n}\n\nexport default Client\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":["loadModels","buildMapper"],"sources":["../src/client.ts"],"sourcesContent":["import type {\n\tClient as T_CassandraClient,\n\tClientOptions as T_CassandraClientOptions,\n\tmapping as T_CassandraMapping,\n} from \"../driver\"\nimport type { ClientConfig } from \"./types\"\n\n//@ts-ignore\nimport path from \"node:path\"\n//@ts-ignore\nimport Cassandra from \"../driver\"\nimport Model from \"./model\"\nimport Logger from \"./logger\"\n\nimport loadModels from \"./utils/loadModels\"\nimport buildMapper from \"./utils/buildMapper\"\nimport delay from \"./utils/delay\"\n\nconst DEFAULT_MAX_RETRIES = 3\nconst DEFAULT_RETRY_DELAY = 1000\nconst { SCYLLA_CONTACT_POINTS, SCYLLA_LOCAL_DATA_CENTER, SCYLLA_KEYSPACE } =\n\tprocess.env\n\nexport class Client {\n\tconstructor(config: ClientConfig = {}) {\n\t\tif (globalThis.__scylla_client) {\n\t\t\tthrow new Error(\n\t\t\t\t\"An instance of Scylla Client is already initialized\",\n\t\t\t)\n\t\t}\n\n\t\tthis.config = {\n\t\t\tmodelsPath: path.resolve(process.cwd(), \"db\"),\n\t\t\tcontactPoints: config.contactPoints ??\n\t\t\t\tSCYLLA_CONTACT_POINTS?.split(\",\") ?? [\"127.0.0.1\"],\n\t\t\tlocalDataCenter:\n\t\t\t\tconfig.localDataCenter ??\n\t\t\t\tSCYLLA_LOCAL_DATA_CENTER ??\n\t\t\t\t\"datacenter1\",\n\t\t\tkeyspace: config.keyspace ?? SCYLLA_KEYSPACE ?? \"default_keyspace\",\n\t\t\tport: 9042,\n\t\t\tmaxRetries: DEFAULT_MAX_RETRIES,\n\t\t\tretryDelay: DEFAULT_RETRY_DELAY,\n\t\t\t...config,\n\t\t}\n\n\t\tconst clientOptions: T_CassandraClientOptions = {\n\t\t\tcontactPoints: this.config.contactPoints,\n\t\t\tlocalDataCenter: this.config.localDataCenter,\n\t\t\tkeyspace: this.config.keyspace,\n\t\t\tprotocolOptions: {\n\t\t\t\tport: this.config.port,\n\t\t\t},\n\t\t}\n\n\t\tif (this.config.pooling) {\n\t\t\tclientOptions.pooling = this.config.pooling\n\t\t}\n\n\t\tthis.driver = new Cassandra.Client(clientOptions)\n\t}\n\n\tconfig: ClientConfig\n\tdriver: T_CassandraClient\n\tmapper!: T_CassandraMapping.Mapper\n\tmodels: Map<string, Model<any>> = new Map()\n\n\tmodel(name: string): Model<any> | undefined {\n\t\treturn this.models.get(name)\n\t}\n\n\tlogger: Logger = new Logger()\n\n\tasync initialize(options: { sync?: boolean } = {}) {\n\t\tlet models: Model<any>[]\n\n\t\ttry {\n\t\t\tmodels = await loadModels(this.config.modelsPath!)\n\t\t} catch (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to load models: ${(error as Error).message}`,\n\t\t\t)\n\t\t}\n\n\t\tmodels = models.filter((schema) => schema instanceof Model)\n\n\t\tthis.mapper = new Cassandra.mapping.Mapper(this.driver, {\n\t\t\tmodels: buildMapper(models),\n\t\t})\n\n\t\tglobalThis.__scylla_client = this\n\n\t\tthis.logger.log(\"Connecting...\")\n\t\tawait this.connectWithRetry()\n\t\tthis.logger.log(\"Connected\")\n\n\t\tfor (let model of models) {\n\t\t\tthis.models.set(model.name, model as Model<typeof model.schema>)\n\n\t\t\tif (options?.sync === true) {\n\t\t\t\tawait model._sync()\n\t\t\t}\n\t\t}\n\t}\n\n\tasync shutdown(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.driver.shutdown()\n\t\t\tthis.logger.log(\"connection closed\")\n\n\t\t\tdelete globalThis.__scylla_client\n\t\t} catch (error) {\n\t\t\tthis.logger.error(\"error shutting down connection:\", error)\n\t\t\tthrow error\n\t\t}\n\t}\n\n\tprivate async connectWithRetry(): Promise<void> {\n\t\tlet lastError: Error | null = null\n\n\t\tfor (let attempt = 1; attempt <= this.config.maxRetries!; attempt++) {\n\t\t\ttry {\n\t\t\t\tawait this.driver.connect()\n\t\t\t\treturn\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error\n\t\t\t\tthis.logger.warn(\n\t\t\t\t\t`Connection attempt ${attempt} failed: ${(error as Error).message}`,\n\t\t\t\t)\n\n\t\t\t\tif (attempt < this.config.maxRetries!) {\n\t\t\t\t\tthis.logger.log(\n\t\t\t\t\t\t`Retrying in ${this.config.retryDelay}ms...`,\n\t\t\t\t\t)\n\t\t\t\t\tawait delay(this.config.retryDelay!)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`Failed to connect to ScyllaDB after ${this.config.maxRetries} attempts: ${lastError?.message}`,\n\t\t)\n\t}\n\n\tasync executeWithRetry<T>(\n\t\toperation: () => Promise<T>,\n\t\toperationName: string = \"operation\",\n\t): Promise<T> {\n\t\tlet lastError: Error | null = null\n\n\t\tfor (let attempt = 1; attempt <= this.config.maxRetries!; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn await operation()\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error\n\n\t\t\t\t// check if error is retryable\n\t\t\t\tif (\n\t\t\t\t\tthis.isRetryableError(error) &&\n\t\t\t\t\tattempt < this.config.maxRetries!\n\t\t\t\t) {\n\t\t\t\t\tthis.logger.warn(\n\t\t\t\t\t\t`Operation ${operationName} attempt ${attempt} failed: ${(error as Error).message}`,\n\t\t\t\t\t)\n\t\t\t\t\tthis.logger.log(\n\t\t\t\t\t\t`Retrying in ${this.config.retryDelay}ms...`,\n\t\t\t\t\t)\n\n\t\t\t\t\tawait delay(this.config.retryDelay!)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\t// if not retryable or last attempt, throw\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t`Operation ${operationName} failed after ${this.config.maxRetries} attempts: ${lastError?.message}`,\n\t\t)\n\t}\n\n\tprivate isRetryableError(error: any): boolean {\n\t\t// retry on network errors, timeouts, and certain ScyllaDB errors\n\t\tconst retryableMessages = [\n\t\t\t\"timeout\",\n\t\t\t\"connection\",\n\t\t\t\"network\",\n\t\t\t\"unavailable\",\n\t\t\t\"overloaded\",\n\t\t\t\"no hosts available\",\n\t\t]\n\n\t\tconst errorMessage = error.message?.toLowerCase() || \"\"\n\n\t\treturn retryableMessages.some((msg) => errorMessage.includes(msg))\n\t}\n}\n\nexport default Client\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ //#region src/cql_gen/create_keyspace.d.ts
2
+ type KeyspaceCreateOptions = {
3
+ keyspace: string;
4
+ replication?: {
5
+ strategy: string;
6
+ options: Record<string, string>;
7
+ };
8
+ };
9
+ declare function createKeyspace(options: KeyspaceCreateOptions): string;
10
+ //#endregion
11
+ export { createKeyspace as default };
12
+ //# sourceMappingURL=create_keyspace.d.ts.map
@@ -0,0 +1,14 @@
1
+ //#region src/cql_gen/create_keyspace.ts
2
+ function createKeyspace(options) {
3
+ let clause = {};
4
+ if (options.replication) clause = options.replication;
5
+ else clause = {
6
+ strategy: "SimpleStrategy",
7
+ options: { replication_factor: "1" }
8
+ };
9
+ return `CREATE KEYSPACE IF NOT EXISTS ${options.keyspace} WITH REPLICATION = ${JSON.stringify(clause)};`;
10
+ }
11
+ //#endregion
12
+ export { createKeyspace as default };
13
+
14
+ //# sourceMappingURL=create_keyspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_keyspace.js","names":[],"sources":["../../src/cql_gen/create_keyspace.ts"],"sourcesContent":["type KeyspaceCreateOptions = {\n\tkeyspace: string\n\treplication?: {\n\t\tstrategy: string\n\t\toptions: Record<string, string>\n\t}\n}\n\nexport default function createKeyspace(options: KeyspaceCreateOptions): string {\n\tlet clause = {}\n\n\tif (options.replication) {\n\t\tclause = options.replication\n\t} else {\n\t\tclause = {\n\t\t\tstrategy: \"SimpleStrategy\",\n\t\t\toptions: { replication_factor: \"1\" },\n\t\t}\n\t}\n\n\treturn `CREATE KEYSPACE IF NOT EXISTS ${options.keyspace} WITH REPLICATION = ${JSON.stringify(clause)};`\n}\n"],"mappings":";AAQA,SAAwB,eAAe,SAAwC;CAC9E,IAAI,SAAS,EAAE;AAEf,KAAI,QAAQ,YACX,UAAS,QAAQ;KAEjB,UAAS;EACR,UAAU;EACV,SAAS,EAAE,oBAAoB,KAAK;EACpC;AAGF,QAAO,iCAAiC,QAAQ,SAAS,sBAAsB,KAAK,UAAU,OAAO,CAAC"}
@@ -1,13 +1,13 @@
1
+ import { mapping } from "../driver/lib/mapping/index.js";
1
2
  import { Model } from "../model/index.js";
2
3
  import { Doc } from "../types.js";
3
- import * as _$cassandra_driver0 from "cassandra-driver";
4
4
 
5
5
  //#region src/document/index.d.ts
6
6
  declare class Document<TDoc = any> {
7
7
  constructor(data: TDoc, model: Model<any, TDoc>);
8
8
  _model: Model<any, TDoc>;
9
9
  save(): Promise<Doc<TDoc>>;
10
- delete(): Promise<_$cassandra_driver0.mapping.Result<any>>;
10
+ delete(): Promise<mapping.Result<any>>;
11
11
  toRaw(): TDoc;
12
12
  isValid(): boolean;
13
13
  getChangedFields(original: Partial<TDoc>): (keyof TDoc)[];
@@ -0,0 +1,301 @@
1
+ import { auth } from "./lib/auth/index.js";
2
+ import { types } from "./lib/types/index.js";
3
+ import { policies } from "./lib/policies/index.js";
4
+ import { metrics } from "./lib/metrics/index.js";
5
+ import { tracker } from "./lib/tracker/index.js";
6
+ import { metadata } from "./lib/metadata/index.js";
7
+ import { mapping } from "./lib/mapping/index.js";
8
+ import * as events from "events";
9
+ import * as tls from "tls";
10
+
11
+ //#region driver/index.d.ts
12
+ type ValueCallback<T> = (err: Error, val: T) => void;
13
+ type EmptyCallback = (err: Error) => void;
14
+ type ArrayOrObject = any[] | {
15
+ [key: string]: any;
16
+ };
17
+ declare class Client extends events.EventEmitter {
18
+ hosts: HostMap;
19
+ keyspace: string;
20
+ metadata: metadata.Metadata;
21
+ metrics: metrics.ClientMetrics;
22
+ constructor(options: DseClientOptions);
23
+ connect(): Promise<void>;
24
+ connect(callback: EmptyCallback): void;
25
+ execute(query: string, params?: ArrayOrObject, options?: QueryOptions): Promise<types.ResultSet>;
26
+ execute(query: string, params: ArrayOrObject, options: QueryOptions, callback: ValueCallback<types.ResultSet>): void;
27
+ execute(query: string, params: ArrayOrObject, callback: ValueCallback<types.ResultSet>): void;
28
+ execute(query: string, callback: ValueCallback<types.ResultSet>): void;
29
+ executeGraph(traversal: string, parameters: {
30
+ [name: string]: any;
31
+ } | undefined, options: GraphQueryOptions, callback: ValueCallback<graph.GraphResultSet>): void;
32
+ executeGraph(traversal: string, parameters: {
33
+ [name: string]: any;
34
+ } | undefined, callback: ValueCallback<graph.GraphResultSet>): void;
35
+ executeGraph(traversal: string, callback: ValueCallback<graph.GraphResultSet>): void;
36
+ executeGraph(traversal: string, parameters?: {
37
+ [name: string]: any;
38
+ }, options?: GraphQueryOptions): Promise<graph.GraphResultSet>;
39
+ eachRow(query: string, params: ArrayOrObject, options: QueryOptions, rowCallback: (n: number, row: types.Row) => void, callback?: ValueCallback<types.ResultSet>): void;
40
+ eachRow(query: string, params: ArrayOrObject, rowCallback: (n: number, row: types.Row) => void, callback?: ValueCallback<types.ResultSet>): void;
41
+ eachRow(query: string, rowCallback: (n: number, row: types.Row) => void): void;
42
+ stream(query: string, params?: ArrayOrObject, options?: QueryOptions, callback?: EmptyCallback): events.EventEmitter;
43
+ batch(queries: Array<string | {
44
+ query: string;
45
+ params?: ArrayOrObject;
46
+ }>, options?: QueryOptions): Promise<types.ResultSet>;
47
+ batch(queries: Array<string | {
48
+ query: string;
49
+ params?: ArrayOrObject;
50
+ }>, options: QueryOptions, callback: ValueCallback<types.ResultSet>): void;
51
+ batch(queries: Array<string | {
52
+ query: string;
53
+ params?: ArrayOrObject;
54
+ }>, callback: ValueCallback<types.ResultSet>): void;
55
+ shutdown(): Promise<void>;
56
+ shutdown(callback: EmptyCallback): void;
57
+ getReplicas(keyspace: string, token: Buffer): Host[];
58
+ getState(): metadata.ClientState;
59
+ }
60
+ interface HostMap extends events.EventEmitter {
61
+ length: number;
62
+ forEach(callback: (value: Host, key: string) => void): void;
63
+ get(key: string): Host;
64
+ keys(): string[];
65
+ values(): Host[];
66
+ }
67
+ interface Host extends events.EventEmitter {
68
+ address: string;
69
+ cassandraVersion: string;
70
+ datacenter: string;
71
+ rack: string;
72
+ tokens: string[];
73
+ hostId: types.Uuid;
74
+ canBeConsideredAsUp(): boolean;
75
+ getCassandraVersion(): number[];
76
+ isUp(): boolean;
77
+ }
78
+ interface ExecutionOptions {
79
+ getCaptureStackTrace(): boolean;
80
+ getConsistency(): types.consistencies;
81
+ getCustomPayload(): {
82
+ [key: string]: any;
83
+ };
84
+ getFetchSize(): number;
85
+ getFixedHost(): Host;
86
+ getHints(): string[] | string[][];
87
+ isAutoPage(): boolean;
88
+ isBatchCounter(): boolean;
89
+ isBatchLogged(): boolean;
90
+ isIdempotent(): boolean;
91
+ isPrepared(): boolean;
92
+ isQueryTracing(): boolean;
93
+ getKeyspace(): string;
94
+ getLoadBalancingPolicy(): policies.loadBalancing.LoadBalancingPolicy;
95
+ getPageState(): Buffer;
96
+ getRawQueryOptions(): QueryOptions;
97
+ getReadTimeout(): number;
98
+ getRetryPolicy(): policies.retry.RetryPolicy;
99
+ getRoutingKey(): Buffer | Buffer[];
100
+ getSerialConsistency(): types.consistencies;
101
+ getTimestamp(): number | Long | undefined | null;
102
+ setHints(hints: string[]): void;
103
+ }
104
+ interface ClientOptions {
105
+ contactPoints?: string[];
106
+ localDataCenter?: string;
107
+ keyspace?: string;
108
+ authProvider?: auth.AuthProvider;
109
+ credentials?: {
110
+ username: string;
111
+ password: string;
112
+ };
113
+ encoding?: {
114
+ map?: Function;
115
+ set?: Function;
116
+ copyBuffer?: boolean;
117
+ useUndefinedAsUnset?: boolean;
118
+ useBigIntAsLong?: boolean;
119
+ useBigIntAsVarint?: boolean;
120
+ };
121
+ isMetadataSyncEnabled?: boolean;
122
+ maxPrepared?: number;
123
+ metrics?: metrics.ClientMetrics;
124
+ policies?: {
125
+ addressResolution?: policies.addressResolution.AddressTranslator;
126
+ loadBalancing?: policies.loadBalancing.LoadBalancingPolicy;
127
+ reconnection?: policies.reconnection.ReconnectionPolicy;
128
+ retry?: policies.retry.RetryPolicy;
129
+ speculativeExecution?: policies.speculativeExecution.SpeculativeExecutionPolicy;
130
+ timestampGeneration?: policies.timestampGeneration.TimestampGenerator;
131
+ };
132
+ pooling?: {
133
+ coreConnectionsPerHost?: {
134
+ [key: number]: number;
135
+ };
136
+ heartBeatInterval?: number;
137
+ maxRequestsPerConnection?: number;
138
+ warmup?: boolean;
139
+ };
140
+ prepareOnAllHosts?: boolean;
141
+ profiles?: ExecutionProfile[];
142
+ protocolOptions?: {
143
+ maxSchemaAgreementWaitSeconds?: number;
144
+ maxVersion?: number;
145
+ noCompact?: boolean;
146
+ port?: number;
147
+ };
148
+ promiseFactory?: (handler: (callback: (err: Error, result?: any) => void) => void) => Promise<any>;
149
+ queryOptions?: QueryOptions;
150
+ refreshSchemaDelay?: number;
151
+ rePrepareOnUp?: boolean;
152
+ requestTracker?: tracker.RequestTracker;
153
+ socketOptions?: {
154
+ coalescingThreshold?: number;
155
+ connectTimeout?: number;
156
+ defunctReadTimeoutThreshold?: number;
157
+ keepAlive?: boolean;
158
+ keepAliveDelay?: number;
159
+ readTimeout?: number;
160
+ tcpNoDelay?: boolean;
161
+ };
162
+ sslOptions?: tls.ConnectionOptions;
163
+ }
164
+ interface QueryOptions {
165
+ autoPage?: boolean;
166
+ captureStackTrace?: boolean;
167
+ consistency?: number;
168
+ counter?: boolean;
169
+ customPayload?: any;
170
+ executionProfile?: string | ExecutionProfile;
171
+ fetchSize?: number;
172
+ hints?: string[] | string[][];
173
+ host?: Host;
174
+ isIdempotent?: boolean;
175
+ keyspace?: string;
176
+ logged?: boolean;
177
+ pageState?: Buffer | string;
178
+ prepare?: boolean;
179
+ readTimeout?: number;
180
+ retry?: policies.retry.RetryPolicy;
181
+ routingIndexes?: number[];
182
+ routingKey?: Buffer | Buffer[];
183
+ routingNames?: string[];
184
+ serialConsistency?: number;
185
+ timestamp?: number | Long;
186
+ traceQuery?: boolean;
187
+ }
188
+ interface DseClientOptions extends ClientOptions {
189
+ id?: Uuid;
190
+ applicationName?: string;
191
+ applicationVersion?: string;
192
+ monitorReporting?: {
193
+ enabled?: boolean;
194
+ };
195
+ graphOptions?: GraphOptions;
196
+ }
197
+ interface GraphQueryOptions extends QueryOptions {
198
+ graphLanguage?: string;
199
+ graphName?: string;
200
+ graphReadConsistency?: types.consistencies;
201
+ graphSource?: string;
202
+ graphWriteConsistency?: types.consistencies;
203
+ }
204
+ type GraphOptions = {
205
+ language?: string;
206
+ name?: string;
207
+ readConsistency?: types.consistencies;
208
+ readTimeout?: number;
209
+ source?: string;
210
+ writeConsistency?: types.consistencies;
211
+ };
212
+ declare class ExecutionProfile {
213
+ consistency?: types.consistencies;
214
+ loadBalancing?: policies.loadBalancing.LoadBalancingPolicy;
215
+ name: string;
216
+ readTimeout?: number;
217
+ retry?: policies.retry.RetryPolicy;
218
+ serialConsistency?: types.consistencies;
219
+ graphOptions?: {
220
+ name?: string;
221
+ language?: string;
222
+ source?: string;
223
+ readConsistency?: types.consistencies;
224
+ writeConsistency?: types.consistencies;
225
+ };
226
+ constructor(name: string, options: {
227
+ consistency?: types.consistencies;
228
+ loadBalancing?: policies.loadBalancing.LoadBalancingPolicy;
229
+ readTimeout?: number;
230
+ retry?: policies.retry.RetryPolicy;
231
+ serialConsistency?: types.consistencies;
232
+ graphOptions?: {
233
+ name?: string;
234
+ language?: string;
235
+ source?: string;
236
+ readConsistency?: types.consistencies;
237
+ writeConsistency?: types.consistencies;
238
+ };
239
+ });
240
+ }
241
+ declare namespace errors {
242
+ class ArgumentError extends DriverError {
243
+ constructor(message: string);
244
+ }
245
+ class AuthenticationError extends DriverError {
246
+ constructor(message: string);
247
+ }
248
+ class BusyConnectionError extends DriverError {
249
+ constructor(address: string, maxRequestsPerConnection: number, connectionLength: number);
250
+ }
251
+ class VIntOutOfRangeException extends DriverError {
252
+ constructor(long: Long);
253
+ }
254
+ abstract class DriverError extends Error {
255
+ info: string;
256
+ constructor(message: string, constructor?: any);
257
+ }
258
+ class DriverInternalError extends DriverError {
259
+ constructor(message: string);
260
+ }
261
+ class NoHostAvailableError extends DriverError {
262
+ innerErrors: any;
263
+ constructor(innerErrors: any, message?: string);
264
+ }
265
+ class NotSupportedError extends DriverError {
266
+ constructor(message: string);
267
+ }
268
+ class OperationTimedOutError extends DriverError {
269
+ host?: string;
270
+ constructor(message: string, host?: string);
271
+ }
272
+ class ResponseError extends DriverError {
273
+ code: number;
274
+ constructor(code: number, message: string);
275
+ }
276
+ }
277
+ declare namespace token {
278
+ interface Token {
279
+ compare(other: Token): number;
280
+ equals(other: Token): boolean;
281
+ getType(): {
282
+ code: types.dataTypes;
283
+ info: any;
284
+ };
285
+ getValue(): any;
286
+ }
287
+ interface TokenRange {
288
+ start: Token;
289
+ end: Token;
290
+ compare(other: TokenRange): number;
291
+ contains(token: Token): boolean;
292
+ equals(other: TokenRange): boolean;
293
+ isEmpty(): boolean;
294
+ isWrappedAround(): boolean;
295
+ splitEvenly(numberOfSplits: number): TokenRange[];
296
+ unwrap(): TokenRange[];
297
+ }
298
+ }
299
+ //#endregion
300
+ export { Client, ClientOptions, EmptyCallback, ExecutionOptions, Host, HostMap, ValueCallback, errors, token };
301
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,53 @@
1
+ import { __commonJSMin } from "../_virtual/_rolldown/runtime.js";
2
+ import { require_errors } from "./lib/errors.js";
3
+ import { require_types } from "./lib/types/index.js";
4
+ import { require_policies } from "./lib/policies/index.js";
5
+ import { require_tracker } from "./lib/tracker/index.js";
6
+ import { require_metrics } from "./lib/metrics/index.js";
7
+ import { require_auth } from "./lib/auth/index.js";
8
+ import { require_client_options } from "./lib/client-options.js";
9
+ import { require_execution_profile } from "./lib/execution-profile.js";
10
+ import { require_execution_options } from "./lib/execution-options.js";
11
+ import { require_package } from "../package.js";
12
+ import { require_token } from "./lib/token.js";
13
+ import { require_geometry } from "./lib/geometry/index.js";
14
+ import { require_encoder } from "./lib/encoder.js";
15
+ import { require_metadata } from "./lib/metadata/index.js";
16
+ import { require_client } from "./lib/client.js";
17
+ import { require_mapping } from "./lib/mapping/index.js";
18
+ import { require_concurrent } from "./lib/concurrent/index.js";
19
+ //#region driver/index.js
20
+ var require_driver = /* @__PURE__ */ __commonJSMin(((exports) => {
21
+ const clientOptions = require_client_options();
22
+ exports.Client = require_client();
23
+ exports.ExecutionProfile = require_execution_profile().ExecutionProfile;
24
+ exports.ExecutionOptions = require_execution_options().ExecutionOptions;
25
+ exports.types = require_types();
26
+ exports.errors = require_errors();
27
+ exports.policies = require_policies();
28
+ exports.auth = require_auth();
29
+ exports.mapping = require_mapping();
30
+ exports.tracker = require_tracker();
31
+ exports.metrics = require_metrics();
32
+ exports.concurrent = require_concurrent();
33
+ const token = require_token();
34
+ exports.token = {
35
+ Token: token.Token,
36
+ TokenRange: token.TokenRange
37
+ };
38
+ exports.metadata = { Metadata: require_metadata() };
39
+ exports.Encoder = require_encoder();
40
+ exports.geometry = require_geometry();
41
+ /**
42
+ * Returns a new instance of the default [options]{@link ClientOptions} used by the driver.
43
+ */
44
+ exports.defaultOptions = function() {
45
+ return clientOptions.defaultOptions();
46
+ };
47
+ exports.version = require_package().version;
48
+ }));
49
+ //#endregion
50
+ export default require_driver();
51
+ export { require_driver };
52
+
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../driver/index.js"],"sourcesContent":["/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\"use strict\"\nconst clientOptions = require(\"./lib/client-options\")\nexports.Client = require(\"./lib/client\")\nexports.ExecutionProfile = require(\"./lib/execution-profile\").ExecutionProfile\nexports.ExecutionOptions = require(\"./lib/execution-options\").ExecutionOptions\nexports.types = require(\"./lib/types\")\nexports.errors = require(\"./lib/errors\")\nexports.policies = require(\"./lib/policies\")\nexports.auth = require(\"./lib/auth\")\nexports.mapping = require(\"./lib/mapping\")\nexports.tracker = require(\"./lib/tracker\")\nexports.metrics = require(\"./lib/metrics\")\nexports.concurrent = require(\"./lib/concurrent\")\n\nconst token = require(\"./lib/token\")\nexports.token = {\n\tToken: token.Token,\n\tTokenRange: token.TokenRange,\n}\nconst Metadata = require(\"./lib/metadata\")\nexports.metadata = {\n\tMetadata: Metadata,\n}\nexports.Encoder = require(\"./lib/encoder\")\nexports.geometry = require(\"./lib/geometry\")\n/**\n * Returns a new instance of the default [options]{@link ClientOptions} used by the driver.\n */\nexports.defaultOptions = function () {\n\treturn clientOptions.defaultOptions()\n}\nexports.version = require(\"../package.json\").version\n"],"mappings":";;;;;;;;;;;;;;;;;;;;CAkBA,MAAM,gBAAA,wBAAA;AACN,SAAQ,SAAA,gBAAA;AACR,SAAQ,mBAAA,2BAAA,CAAsD;AAC9D,SAAQ,mBAAA,2BAAA,CAAsD;AAC9D,SAAQ,QAAA,eAAA;AACR,SAAQ,SAAA,gBAAA;AACR,SAAQ,WAAA,kBAAA;AACR,SAAQ,OAAA,cAAA;AACR,SAAQ,UAAA,iBAAA;AACR,SAAQ,UAAA,iBAAA;AACR,SAAQ,UAAA,iBAAA;AACR,SAAQ,aAAA,oBAAA;CAER,MAAM,QAAA,eAAA;AACN,SAAQ,QAAQ;EACf,OAAO,MAAM;EACb,YAAY,MAAM;EAClB;AAED,SAAQ,WAAW,EACR,UAFL,kBAEK,EACV;AACD,SAAQ,UAAA,iBAAA;AACR,SAAQ,WAAA,kBAAA;;;;AAIR,SAAQ,iBAAiB,WAAY;AACpC,SAAO,cAAc,gBAAgB;;AAEtC,SAAQ,UAAA,iBAAA,CAAqC"}