@ragestudio/scylla-odm 0.21.0 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/batch/index.d.ts +19 -21
  2. package/batch/index.d.ts.map +1 -0
  3. package/batch/index.js +41 -1
  4. package/batch/index.js.map +1 -0
  5. package/client.d.ts +24 -26
  6. package/client.d.ts.map +1 -0
  7. package/client.js +197 -1
  8. package/client.js.map +1 -0
  9. package/cql_gen/create_keyspace.d.ts +8 -9
  10. package/cql_gen/create_keyspace.d.ts.map +1 -0
  11. package/cql_gen/create_keyspace.js +17 -1
  12. package/cql_gen/create_keyspace.js.map +1 -0
  13. package/cql_gen/create_table.d.ts +3 -6
  14. package/cql_gen/create_table.d.ts.map +1 -0
  15. package/cql_gen/create_table.js +54 -1
  16. package/cql_gen/create_table.js.map +1 -0
  17. package/document/index.d.ts +11 -14
  18. package/document/index.d.ts.map +1 -0
  19. package/document/index.js +80 -1
  20. package/document/index.js.map +1 -0
  21. package/global.d.ts +6 -0
  22. package/global.d.ts.map +1 -0
  23. package/global.js +3 -0
  24. package/global.js.map +1 -0
  25. package/index.d.ts +9 -7
  26. package/index.d.ts.map +1 -0
  27. package/index.js +20 -1
  28. package/index.js.map +1 -0
  29. package/logger/index.d.ts +7 -8
  30. package/logger/index.d.ts.map +1 -0
  31. package/logger/index.js +18 -1
  32. package/logger/index.js.map +1 -0
  33. package/migrate/index.d.ts +14 -0
  34. package/migrate/index.d.ts.map +1 -0
  35. package/migrate/index.js +300 -0
  36. package/migrate/index.js.map +1 -0
  37. package/model/index.d.ts +64 -67
  38. package/model/index.d.ts.map +1 -0
  39. package/model/index.js +78 -1
  40. package/model/index.js.map +1 -0
  41. package/operations/countAll.d.ts +3 -6
  42. package/operations/countAll.d.ts.map +1 -0
  43. package/operations/countAll.js +16 -1
  44. package/operations/countAll.js.map +1 -0
  45. package/operations/delete.d.ts +5 -8
  46. package/operations/delete.d.ts.map +1 -0
  47. package/operations/delete.js +29 -1
  48. package/operations/delete.js.map +1 -0
  49. package/operations/find.d.ts +4 -7
  50. package/operations/find.d.ts.map +1 -0
  51. package/operations/find.js +25 -1
  52. package/operations/find.js.map +1 -0
  53. package/operations/findOne.d.ts +4 -7
  54. package/operations/findOne.d.ts.map +1 -0
  55. package/operations/findOne.js +27 -1
  56. package/operations/findOne.js.map +1 -0
  57. package/operations/insert.d.ts +5 -8
  58. package/operations/insert.d.ts.map +1 -0
  59. package/operations/insert.js +30 -1
  60. package/operations/insert.js.map +1 -0
  61. package/operations/sync.d.ts +3 -6
  62. package/operations/sync.d.ts.map +1 -0
  63. package/operations/sync.js +22 -1
  64. package/operations/sync.js.map +1 -0
  65. package/operations/tableExists.d.ts +3 -6
  66. package/operations/tableExists.d.ts.map +1 -0
  67. package/operations/tableExists.js +18 -2
  68. package/operations/tableExists.js.map +1 -0
  69. package/operations/update.d.ts +5 -8
  70. package/operations/update.d.ts.map +1 -0
  71. package/operations/update.js +41 -1
  72. package/operations/update.js.map +1 -0
  73. package/package.json +13 -3
  74. package/schema/index.d.ts +13 -15
  75. package/schema/index.d.ts.map +1 -0
  76. package/schema/index.js +27 -1
  77. package/schema/index.js.map +1 -0
  78. package/types.d.ts +99 -80
  79. package/types.d.ts.map +1 -0
  80. package/types.js +37 -1
  81. package/types.js.map +1 -0
  82. package/utils/buildMapper.d.ts +12 -4
  83. package/utils/buildMapper.d.ts.map +1 -0
  84. package/utils/buildMapper.js +13 -1
  85. package/utils/buildMapper.js.map +1 -0
  86. package/utils/delay.d.ts +3 -4
  87. package/utils/delay.d.ts.map +1 -0
  88. package/utils/delay.js +8 -1
  89. package/utils/delay.js.map +1 -0
  90. package/utils/fillDefaults.d.ts +2 -4
  91. package/utils/fillDefaults.d.ts.map +1 -0
  92. package/utils/fillDefaults.js +27 -1
  93. package/utils/fillDefaults.js.map +1 -0
  94. package/utils/isPlainObject.d.ts +3 -4
  95. package/utils/isPlainObject.d.ts.map +1 -0
  96. package/utils/isPlainObject.js +13 -1
  97. package/utils/isPlainObject.js.map +1 -0
  98. package/utils/loadModels.d.ts +3 -4
  99. package/utils/loadModels.d.ts.map +1 -0
  100. package/utils/loadModels.js +67 -1
  101. package/utils/loadModels.js.map +1 -0
  102. package/utils/queryParser.d.ts +5 -8
  103. package/utils/queryParser.d.ts.map +1 -0
  104. package/utils/queryParser.js +110 -1
  105. package/utils/queryParser.js.map +1 -0
  106. package/utils/typeChecker.d.ts +3 -6
  107. package/utils/typeChecker.d.ts.map +1 -0
  108. package/utils/typeChecker.js +96 -1
  109. package/utils/typeChecker.js.map +1 -0
  110. package/driver/auth/index.d.ts +0 -34
  111. package/driver/auth/index.js +0 -1
  112. package/driver/auth/no-auth-provider.js +0 -1
  113. package/driver/auth/plain-text-auth-provider.js +0 -1
  114. package/driver/auth/provider.js +0 -1
  115. package/driver/client-options.js +0 -1
  116. package/driver/client.js +0 -1
  117. package/driver/concurrent/index.d.ts +0 -1
  118. package/driver/concurrent/index.js +0 -1
  119. package/driver/connection.js +0 -1
  120. package/driver/control-connection.js +0 -1
  121. package/driver/encoder.js +0 -1
  122. package/driver/errors.js +0 -1
  123. package/driver/execution-options.js +0 -1
  124. package/driver/execution-profile.js +0 -1
  125. package/driver/host-connection-pool.js +0 -1
  126. package/driver/host.js +0 -1
  127. package/driver/index.d.ts +0 -212
  128. package/driver/index.js +0 -1
  129. package/driver/mapping/cache.js +0 -1
  130. package/driver/mapping/doc-info-adapter.js +0 -1
  131. package/driver/mapping/index.d.ts +0 -142
  132. package/driver/mapping/index.js +0 -1
  133. package/driver/mapping/mapper.js +0 -1
  134. package/driver/mapping/mapping-handler.js +0 -1
  135. package/driver/mapping/model-batch-item.js +0 -1
  136. package/driver/mapping/model-batch-mapper.js +0 -1
  137. package/driver/mapping/model-mapper.js +0 -1
  138. package/driver/mapping/model-mapping-info.js +0 -1
  139. package/driver/mapping/object-selector.js +0 -1
  140. package/driver/mapping/q.js +0 -1
  141. package/driver/mapping/query-generator.js +0 -9
  142. package/driver/mapping/result-mapper.js +0 -4
  143. package/driver/mapping/result.js +0 -1
  144. package/driver/mapping/table-mappings.js +0 -1
  145. package/driver/mapping/tree.js +0 -1
  146. package/driver/metadata/aggregate.js +0 -1
  147. package/driver/metadata/client-state.js +0 -1
  148. package/driver/metadata/data-collection.js +0 -1
  149. package/driver/metadata/event-debouncer.js +0 -1
  150. package/driver/metadata/index.d.ts +0 -184
  151. package/driver/metadata/index.js +0 -1
  152. package/driver/metadata/materialized-view.js +0 -1
  153. package/driver/metadata/schema-function.js +0 -1
  154. package/driver/metadata/schema-index.js +0 -1
  155. package/driver/metadata/schema-parser.js +0 -1
  156. package/driver/metadata/table-metadata.js +0 -1
  157. package/driver/operation-state.js +0 -1
  158. package/driver/policies/address-resolution.js +0 -1
  159. package/driver/policies/index.d.ts +0 -135
  160. package/driver/policies/index.js +0 -1
  161. package/driver/policies/load-balancing.js +0 -1
  162. package/driver/policies/reconnection.js +0 -1
  163. package/driver/policies/retry.js +0 -1
  164. package/driver/policies/speculative-execution.js +0 -1
  165. package/driver/policies/timestamp-generation.js +0 -1
  166. package/driver/prepare-handler.js +0 -1
  167. package/driver/promise-utils.js +0 -1
  168. package/driver/readers.js +0 -1
  169. package/driver/request-execution.js +0 -1
  170. package/driver/request-handler.js +0 -1
  171. package/driver/requests.js +0 -1
  172. package/driver/stream-id-stack.js +0 -1
  173. package/driver/streams.js +0 -1
  174. package/driver/token.js +0 -1
  175. package/driver/tokenizer.js +0 -1
  176. package/driver/types/big-decimal.js +0 -1
  177. package/driver/types/duration.js +0 -1
  178. package/driver/types/index.d.ts +0 -320
  179. package/driver/types/index.js +0 -1
  180. package/driver/types/inet-address.js +0 -1
  181. package/driver/types/integer.js +0 -1
  182. package/driver/types/local-date.js +0 -1
  183. package/driver/types/local-time.js +0 -1
  184. package/driver/types/mutable-long.js +0 -1
  185. package/driver/types/protocol-version.js +0 -1
  186. package/driver/types/result-set.js +0 -1
  187. package/driver/types/result-stream.js +0 -1
  188. package/driver/types/row.js +0 -1
  189. package/driver/types/time-uuid.js +0 -1
  190. package/driver/types/tuple.js +0 -1
  191. package/driver/types/uuid.js +0 -1
  192. package/driver/types/vector.js +0 -1
  193. package/driver/types/version-number.js +0 -1
  194. package/driver/utils.js +0 -4
  195. package/driver/writers.js +0 -1
  196. package/package.js +0 -1
package/batch/index.d.ts CHANGED
@@ -1,24 +1,22 @@
1
- import { types } from "../driver/types/index.js";
2
- import { mapping } from "../driver/mapping/index.js";
3
- import { Client } from "../client.js";
4
-
5
- //#region src/batch/index.d.ts
1
+ import type Client from "../client";
2
+ import type { mapping } from "../driver/mapping";
3
+ import type { types } from "../driver/types";
6
4
  type Long = types.Long;
7
- type BatchExecutionOptions = {
8
- logged?: boolean;
9
- timestamp?: number | Long;
10
- executionProfile?: string;
5
+ export type BatchExecutionOptions = {
6
+ logged?: boolean;
7
+ timestamp?: number | Long;
8
+ executionProfile?: string;
11
9
  };
12
- declare class Batch {
13
- private _items;
14
- private _client;
15
- private _logged;
16
- constructor(client: Client, logged?: boolean);
17
- add(item: mapping.ModelBatchItem): this;
18
- execute(options?: BatchExecutionOptions): Promise<mapping.Result>;
19
- get size(): number;
20
- clear(): void;
21
- logged(value: boolean): this;
10
+ export declare class Batch {
11
+ private _items;
12
+ private _client;
13
+ private _logged;
14
+ constructor(client: Client, logged?: boolean);
15
+ add(item: mapping.ModelBatchItem): this;
16
+ execute(options?: BatchExecutionOptions): Promise<mapping.Result>;
17
+ get size(): number;
18
+ clear(): void;
19
+ logged(value: boolean): this;
22
20
  }
23
- //#endregion
24
- export { Batch, Batch as default, BatchExecutionOptions };
21
+ export default Batch;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/batch/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE5C,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,CAAA;AAEtB,MAAM,MAAM,qBAAqB,GAAG;IACnC,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,qBAAa,KAAK;IACjB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAS;IAExB,YAAY,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,OAAc,EAGjD;IAED,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,GAAG,IAAI,CAGtC;IAEK,OAAO,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAkBtE;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,IAAI,CAEZ;IAED,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAG3B;CACD;eAEc,KAAK"}
package/batch/index.js CHANGED
@@ -1 +1,41 @@
1
- var Batch=class{_items=[];_client;_logged;constructor(e,t=!0){this._client=e,this._logged=t}add(e){return this._items.push(e),this}async execute(e){if(this._items.length===0)throw Error(`Cannot execute an empty batch`);let t=this._items;this._items=[];let n={logged:this._logged,...e};return this._client.executeWithRetry(async()=>await this._client.mapper.batch(t,n),`batch`)}get size(){return this._items.length}clear(){this._items=[]}logged(e){return this._logged=e,this}};export{Batch,Batch as default};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Batch = void 0;
4
+ class Batch {
5
+ _items = [];
6
+ _client;
7
+ _logged;
8
+ constructor(client, logged = true) {
9
+ this._client = client;
10
+ this._logged = logged;
11
+ }
12
+ add(item) {
13
+ this._items.push(item);
14
+ return this;
15
+ }
16
+ async execute(options) {
17
+ if (this._items.length === 0) {
18
+ throw new Error("Cannot execute an empty batch");
19
+ }
20
+ const items = this._items;
21
+ this._items = [];
22
+ const executionOptions = {
23
+ logged: this._logged,
24
+ ...options,
25
+ };
26
+ return this._client.executeWithRetry(async () => await this._client.mapper.batch(items, executionOptions), "batch");
27
+ }
28
+ get size() {
29
+ return this._items.length;
30
+ }
31
+ clear() {
32
+ this._items = [];
33
+ }
34
+ logged(value) {
35
+ this._logged = value;
36
+ return this;
37
+ }
38
+ }
39
+ exports.Batch = Batch;
40
+ exports.default = Batch;
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/batch/index.ts"],"names":[],"mappings":";;;AAYA;IACS,MAAM,GAA6B,EAAE,CAAA;IACrC,OAAO,CAAQ;IACf,OAAO,CAAS;IAExB,YAAY,MAAc,EAAE,MAAM,GAAY,IAAI;QACjD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,GAAG,CAAC,IAA4B;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA+B;QAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAEhB,MAAM,gBAAgB,GAAG;YACxB,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,GAAG,OAAO;SACV,CAAA;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CACnC,KAAK,IAAI,EAAE,CACV,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,EACzD,OAAO,CACP,CAAA;IACF,CAAC;IAED,IAAI,IAAI;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;IAC1B,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,KAAc;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,OAAO,IAAI,CAAA;IACZ,CAAC;CACD;;kBAEc,KAAK"}
package/client.d.ts CHANGED
@@ -1,27 +1,25 @@
1
- import { mapping } from "./driver/mapping/index.js";
2
- import { Client as Client$1 } from "./driver/index.js";
3
- import { Model } from "./model/index.js";
4
- import { ClientConfig } from "./types.js";
5
- import { Logger } from "./logger/index.js";
6
- import { Batch } from "./batch/index.js";
7
-
8
- //#region src/client.d.ts
9
- declare class Client {
10
- constructor(config?: ClientConfig);
11
- config: ClientConfig;
12
- driver: Client$1;
13
- mapper: mapping.Mapper;
14
- models: Map<string, Model<any>>;
15
- model(name: string): Model<any> | undefined;
16
- logger: Logger;
17
- initialize(options?: {
18
- sync?: boolean;
19
- }): Promise<void>;
20
- batch(logged?: boolean): Batch;
21
- shutdown(): Promise<void>;
22
- private connectWithRetry;
23
- executeWithRetry<T>(operation: () => Promise<T>, operationName?: string): Promise<T>;
24
- private isRetryableError;
1
+ import type { Client as T_CassandraClient, mapping as T_CassandraMapping } from "./driver";
2
+ import type { ClientConfig } from "./types";
3
+ import Model from "./model";
4
+ import Logger from "./logger";
5
+ import { Batch } from "./batch";
6
+ export declare class Client {
7
+ constructor(config?: ClientConfig);
8
+ config: ClientConfig;
9
+ driver: T_CassandraClient;
10
+ mapper: T_CassandraMapping.Mapper;
11
+ models: Map<string, Model<any>>;
12
+ model(name: string): Model<any> | undefined;
13
+ logger: Logger;
14
+ initialize(options?: {
15
+ sync?: boolean;
16
+ }): Promise<void>;
17
+ batch(logged?: boolean): Batch;
18
+ migrate(modelName?: string): Promise<void>;
19
+ shutdown(): Promise<void>;
20
+ private connectWithRetry;
21
+ executeWithRetry<T>(operation: () => Promise<T>, operationName?: string): Promise<T>;
22
+ private isRetryableError;
25
23
  }
26
- //#endregion
27
- export { Client, Client as default };
24
+ export default Client;
25
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,MAAM,IAAI,iBAAiB,EAE3B,OAAO,IAAI,kBAAkB,EAC7B,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAM3C,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,MAAM,MAAM,UAAU,CAAA;AAK7B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAc/B,qBAAa,MAAM;IAClB,YAAY,MAAM,GAAE,YAAiB,EAoCpC;IAED,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,iBAAiB,CAAA;IACzB,MAAM,EAAG,kBAAkB,CAAC,MAAM,CAAA;IAClC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAY;IAE3C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAE1C;IAED,MAAM,EAAE,MAAM,CAAe;IAEvB,UAAU,CAAC,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAO,iBA8BhD;IAED,KAAK,CAAC,MAAM,GAAE,OAAc,GAAG,KAAK,CAEnC;IAEK,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD/C;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAW9B;YAEa,gBAAgB;IA2BxB,gBAAgB,CAAC,CAAC,EACvB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,aAAa,GAAE,MAAoB,GACjC,OAAO,CAAC,CAAC,CAAC,CAiCZ;IAED,OAAO,CAAC,gBAAgB;CAexB;eAEc,MAAM"}
package/client.js CHANGED
@@ -1 +1,197 @@
1
- import e from"./driver/index.js";import{Model as t}from"./model/index.js";import{Logger as n}from"./logger/index.js";import r from"./utils/loadModels.js";import i from"./utils/buildMapper.js";import a from"./utils/delay.js";import{Batch as o}from"./batch/index.js";import s from"node:path";const{SCYLLA_CONTACT_POINTS:c,SCYLLA_LOCAL_DATA_CENTER:l,SCYLLA_KEYSPACE:u}=process.env;var Client=class{constructor(t={}){if(globalThis.__scylla_client)throw Error(`An instance of Scylla Client is already initialized`);this.config={modelsPath:s.resolve(process.cwd(),`db`),contactPoints:t.contactPoints??c?.split(`,`)??[`127.0.0.1`],localDataCenter:t.localDataCenter??l??`datacenter1`,keyspace:t.keyspace??u??`default_keyspace`,port:9042,maxRetries:3,retryDelay:1e3,...t};let n={contactPoints:this.config.contactPoints,localDataCenter:this.config.localDataCenter,keyspace:this.config.keyspace,protocolOptions:{port:this.config.port}};this.config.pooling&&(n.pooling=this.config.pooling),this.driver=new e.Client(n)}config;driver;mapper;models=new Map;model(e){return this.models.get(e)}logger=new n;async initialize(n={}){let a;try{a=await r(this.config.modelsPath)}catch(e){throw Error(`Failed to load models: ${e.message}`)}a=a.filter(e=>e instanceof t),this.mapper=new e.mapping.Mapper(this.driver,{models:i(a)}),globalThis.__scylla_client=this,this.logger.log(`Connecting...`),await this.connectWithRetry(),this.logger.log(`Connected`);for(let e of a)this.models.set(e.name,e),n?.sync===!0&&await e._sync()}batch(e=!0){return new o(this,e)}async shutdown(){try{await this.driver.shutdown(),this.logger.log(`connection closed`),delete globalThis.__scylla_client}catch(e){throw this.logger.error(`error shutting down connection:`,e),e}}async connectWithRetry(){let e=null;for(let t=1;t<=this.config.maxRetries;t++)try{await this.driver.connect();return}catch(n){e=n,this.logger.warn(`Connection attempt ${t} failed: ${n.message}`),t<this.config.maxRetries&&(this.logger.log(`Retrying in ${this.config.retryDelay}ms...`),await a(this.config.retryDelay))}throw Error(`Failed to connect to ScyllaDB after ${this.config.maxRetries} attempts: ${e?.message}`)}async executeWithRetry(e,t=`operation`){let n=null;for(let r=1;r<=this.config.maxRetries;r++)try{return await e()}catch(e){if(n=e,this.isRetryableError(e)&&r<this.config.maxRetries){this.logger.warn(`Operation ${t} attempt ${r} failed: ${e.message}`),this.logger.log(`Retrying in ${this.config.retryDelay}ms...`),await a(this.config.retryDelay);continue}throw e}throw Error(`Operation ${t} failed after ${this.config.maxRetries} attempts: ${n?.message}`)}isRetryableError(e){let t=[`timeout`,`connection`,`network`,`unavailable`,`overloaded`,`no hosts available`],n=e.message?.toLowerCase()||``;return t.some(e=>n.includes(e))}};export{Client,Client as default};
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Client = void 0;
7
+ //@ts-ignore
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ //@ts-ignore
10
+ const driver_1 = __importDefault(require("./driver"));
11
+ const model_1 = __importDefault(require("./model"));
12
+ const logger_1 = __importDefault(require("./logger"));
13
+ const loadModels_1 = __importDefault(require("./utils/loadModels"));
14
+ const buildMapper_1 = __importDefault(require("./utils/buildMapper"));
15
+ const delay_1 = __importDefault(require("./utils/delay"));
16
+ const batch_1 = require("./batch");
17
+ const migrate_1 = require("./migrate");
18
+ const DEFAULT_MAX_RETRIES = 3;
19
+ const DEFAULT_RETRY_DELAY = 1000;
20
+ const { SCYLLA_CONTACT_POINTS, SCYLLA_LOCAL_DATA_CENTER, SCYLLA_KEYSPACE } = process.env;
21
+ class Client {
22
+ constructor(config = {}) {
23
+ if (globalThis.__scylla_client) {
24
+ throw new Error("An instance of Scylla Client is already initialized");
25
+ }
26
+ this.config = {
27
+ modelsPath: node_path_1.default.resolve(process.cwd(), "db"),
28
+ contactPoints: config.contactPoints ??
29
+ SCYLLA_CONTACT_POINTS?.split(",") ?? ["127.0.0.1"],
30
+ localDataCenter: config.localDataCenter ??
31
+ SCYLLA_LOCAL_DATA_CENTER ??
32
+ "datacenter1",
33
+ keyspace: config.keyspace ?? SCYLLA_KEYSPACE ?? "default_keyspace",
34
+ port: 9042,
35
+ maxRetries: DEFAULT_MAX_RETRIES,
36
+ retryDelay: DEFAULT_RETRY_DELAY,
37
+ ...config,
38
+ };
39
+ const clientOptions = {
40
+ contactPoints: this.config.contactPoints,
41
+ localDataCenter: this.config.localDataCenter,
42
+ keyspace: this.config.keyspace,
43
+ protocolOptions: {
44
+ port: this.config.port,
45
+ },
46
+ };
47
+ if (this.config.pooling) {
48
+ clientOptions.pooling = this.config.pooling;
49
+ }
50
+ this.driver = new driver_1.default.Client(clientOptions);
51
+ }
52
+ config;
53
+ driver;
54
+ mapper;
55
+ models = new Map();
56
+ model(name) {
57
+ return this.models.get(name);
58
+ }
59
+ logger = new logger_1.default();
60
+ async initialize(options = {}) {
61
+ let models;
62
+ try {
63
+ models = await (0, loadModels_1.default)(this.config.modelsPath);
64
+ }
65
+ catch (error) {
66
+ throw new Error(`Failed to load models: ${error.message}`);
67
+ }
68
+ models = models.filter((schema) => schema instanceof model_1.default);
69
+ this.mapper = new driver_1.default.mapping.Mapper(this.driver, {
70
+ models: (0, buildMapper_1.default)(models),
71
+ });
72
+ globalThis.__scylla_client = this;
73
+ this.logger.log("Connecting...");
74
+ await this.connectWithRetry();
75
+ this.logger.log("Connected");
76
+ for (let model of models) {
77
+ this.models.set(model.name, model);
78
+ if (options?.sync === true) {
79
+ await model._sync();
80
+ }
81
+ }
82
+ }
83
+ batch(logged = true) {
84
+ return new batch_1.Batch(this, logged);
85
+ }
86
+ async migrate(modelName) {
87
+ if (!this.models.size) {
88
+ throw new Error("no models loaded, call initialize() first");
89
+ }
90
+ let models;
91
+ if (modelName) {
92
+ const model = this.models.get(modelName);
93
+ if (!model) {
94
+ throw new Error(`model "${modelName}" not found, ` +
95
+ `available: [${[...this.models.keys()].join(", ")}]`);
96
+ }
97
+ models = [model];
98
+ }
99
+ else {
100
+ models = [...this.models.values()];
101
+ }
102
+ for (const model of models) {
103
+ const result = await (0, migrate_1.migrateModel)(model);
104
+ if (result.type === "none") {
105
+ this.logger.log(`[${model.name}] schema is up to date, nothing to migrate`);
106
+ continue;
107
+ }
108
+ if (result.errors.length) {
109
+ const shouldReset = await (0, migrate_1.promptResetMigration)(model.name, result);
110
+ if (shouldReset) {
111
+ await (0, migrate_1.executeResetMigration)(model, result);
112
+ this.logger.log(`[${model.name}] table reset successfully`);
113
+ }
114
+ else {
115
+ this.logger.log(`[${model.name}] migration skipped`);
116
+ }
117
+ continue;
118
+ }
119
+ const shouldApply = await (0, migrate_1.promptMigration)(model.name, result);
120
+ if (shouldApply) {
121
+ await (0, migrate_1.executeMigration)(model, result);
122
+ this.logger.log(`[${model.name}] migration applied successfully`);
123
+ }
124
+ else {
125
+ this.logger.log(`[${model.name}] migration skipped`);
126
+ }
127
+ }
128
+ }
129
+ async shutdown() {
130
+ try {
131
+ await this.driver.shutdown();
132
+ this.logger.log("connection closed");
133
+ // @ts-ignore
134
+ delete globalThis.__scylla_client;
135
+ }
136
+ catch (error) {
137
+ this.logger.error("error shutting down connection:", error);
138
+ throw error;
139
+ }
140
+ }
141
+ async connectWithRetry() {
142
+ let lastError = null;
143
+ for (let attempt = 1; attempt <= this.config.maxRetries; attempt++) {
144
+ try {
145
+ await this.driver.connect();
146
+ return;
147
+ }
148
+ catch (error) {
149
+ lastError = error;
150
+ this.logger.warn(`Connection attempt ${attempt} failed: ${error.message}`);
151
+ if (attempt < this.config.maxRetries) {
152
+ this.logger.log(`Retrying in ${this.config.retryDelay}ms...`);
153
+ await (0, delay_1.default)(this.config.retryDelay);
154
+ }
155
+ }
156
+ }
157
+ throw new Error(`Failed to connect to ScyllaDB after ${this.config.maxRetries} attempts: ${lastError?.message}`);
158
+ }
159
+ async executeWithRetry(operation, operationName = "operation") {
160
+ let lastError = null;
161
+ for (let attempt = 1; attempt <= this.config.maxRetries; attempt++) {
162
+ try {
163
+ return await operation();
164
+ }
165
+ catch (error) {
166
+ lastError = error;
167
+ // check if error is retryable
168
+ if (this.isRetryableError(error) &&
169
+ attempt < this.config.maxRetries) {
170
+ this.logger.warn(`Operation ${operationName} attempt ${attempt} failed: ${error.message}`);
171
+ this.logger.log(`Retrying in ${this.config.retryDelay}ms...`);
172
+ await (0, delay_1.default)(this.config.retryDelay);
173
+ continue;
174
+ }
175
+ // if not retryable or last attempt, throw
176
+ throw error;
177
+ }
178
+ }
179
+ throw new Error(`Operation ${operationName} failed after ${this.config.maxRetries} attempts: ${lastError?.message}`);
180
+ }
181
+ isRetryableError(error) {
182
+ // retry on network errors, timeouts, and certain ScyllaDB errors
183
+ const retryableMessages = [
184
+ "timeout",
185
+ "connection",
186
+ "network",
187
+ "unavailable",
188
+ "overloaded",
189
+ "no hosts available",
190
+ ];
191
+ const errorMessage = error.message?.toLowerCase() || "";
192
+ return retryableMessages.some((msg) => errorMessage.includes(msg));
193
+ }
194
+ }
195
+ exports.Client = Client;
196
+ exports.default = Client;
197
+ //# sourceMappingURL=client.js.map
package/client.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
- //#region src/cql_gen/create_keyspace.d.ts
2
1
  type KeyspaceCreateOptions = {
3
- keyspace: string;
4
- replication?: {
5
- strategy: string;
6
- options: Record<string, string>;
7
- };
2
+ keyspace: string;
3
+ replication?: {
4
+ strategy: string;
5
+ options: Record<string, string>;
6
+ };
8
7
  };
9
- declare function createKeyspace(options: KeyspaceCreateOptions): string;
10
- //#endregion
11
- export { createKeyspace as default };
8
+ export default function createKeyspace(options: KeyspaceCreateOptions): string;
9
+ export {};
10
+ //# sourceMappingURL=create_keyspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_keyspace.d.ts","sourceRoot":"","sources":["../../src/cql_gen/create_keyspace.ts"],"names":[],"mappings":"AAAA,KAAK,qBAAqB,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAC/B,CAAA;CACD,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAa7E"}
@@ -1 +1,17 @@
1
- function createKeyspace(e){let t={};return t=e.replication?e.replication:{strategy:`SimpleStrategy`,options:{replication_factor:`1`}},`CREATE KEYSPACE IF NOT EXISTS ${e.keyspace} WITH REPLICATION = ${JSON.stringify(t)};`}export{createKeyspace as default};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = createKeyspace;
4
+ function createKeyspace(options) {
5
+ let clause = {};
6
+ if (options.replication) {
7
+ clause = options.replication;
8
+ }
9
+ else {
10
+ clause = {
11
+ strategy: "SimpleStrategy",
12
+ options: { replication_factor: "1" },
13
+ };
14
+ }
15
+ return `CREATE KEYSPACE IF NOT EXISTS ${options.keyspace} WITH REPLICATION = ${JSON.stringify(clause)};`;
16
+ }
17
+ //# sourceMappingURL=create_keyspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_keyspace.js","sourceRoot":"","sources":["../../src/cql_gen/create_keyspace.ts"],"names":[],"mappings":";;;AAQA,wBAAuC,OAA8B;IACpE,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,GAAG,OAAO,CAAC,WAAW,CAAA;IAC7B,CAAC;SAAM,CAAC;QACP,MAAM,GAAG;YACR,QAAQ,EAAE,gBAAgB;YAC1B,OAAO,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE;SACpC,CAAA;IACF,CAAC;IAED,OAAO,iCAAiC,OAAO,CAAC,QAAQ,uBAAuB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAA;AACzG,CAAC"}
@@ -1,6 +1,3 @@
1
- import { Model } from "../model/index.js";
2
-
3
- //#region src/cql_gen/create_table.d.ts
4
- declare function export_default(model: Model): string;
5
- //#endregion
6
- export { export_default as default };
1
+ import type Model from "../model";
2
+ export default function (model: Model): string;
3
+ //# sourceMappingURL=create_table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_table.d.ts","sourceRoot":"","sources":["../../src/cql_gen/create_table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,UAAU,CAAA;AAEjC,MAAM,CAAC,OAAO,WAAW,KAAK,EAAE,KAAK,GAAG,MAAM,CA+D7C"}
@@ -1 +1,54 @@
1
- function create_table_default(e){let t=e.schema,n=t.table_name,r=e.client.config.keyspace,i=t.fields,a=t.keys,o=t.clustering_order,s=``;for(let e in i){let t=i[e],r=typeof t==`string`?t:t?.type;if(!r)throw Error(`Invalid field type for "${e}" in model "${n}"`);s+=`"${e}" ${r.toUpperCase()}, `}let c=``;if(typeof a==`string`)c=`"${a}"`;else if(Array.isArray(a)&&a.length>0){let e=a[0];c=Array.isArray(e)?`(${e.map(e=>`"${e}"`).join(`, `)})`:`"${e}"`;for(let e=1;e<a.length;e++)c+=`, "${a[e]}"`}else throw Error(`Missing or invalid primary key in model "${n}"`);let l=``;if(o){let e=``;for(let t in o)e!==``&&(e+=`, `),e+=`"${t}" ${o[t].toUpperCase()}`;e!==``&&(l=` WITH CLUSTERING ORDER BY (${e})`)}return`CREATE TABLE IF NOT EXISTS ${r}.${n} (${s}PRIMARY KEY (${c}))${l}`}export{create_table_default as default};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = default_1;
4
+ function default_1(model) {
5
+ const desc = model.schema;
6
+ const tableName = desc.table_name;
7
+ const keyspace = model.client.config.keyspace;
8
+ const fields = desc.fields;
9
+ const key = desc.keys;
10
+ const clusteringOrder = desc.clustering_order;
11
+ let columnsDef = "";
12
+ for (const fieldName in fields) {
13
+ const field = fields[fieldName];
14
+ const typeStr = typeof field === "string" ? field : field?.type;
15
+ if (!typeStr) {
16
+ throw new Error(`Invalid field type for "${fieldName}" in model "${tableName}"`);
17
+ }
18
+ columnsDef += `"${fieldName}" ${typeStr.toUpperCase()}, `;
19
+ }
20
+ let pkDef = "";
21
+ if (typeof key === "string") {
22
+ pkDef = `"${key}"`;
23
+ }
24
+ else if (Array.isArray(key) && key.length > 0) {
25
+ const first = key[0];
26
+ if (Array.isArray(first)) {
27
+ pkDef = `(${first.map((k) => `"${String(k)}"`).join(", ")})`;
28
+ }
29
+ else {
30
+ pkDef = `"${String(first)}"`;
31
+ }
32
+ for (let i = 1; i < key.length; i++) {
33
+ pkDef += `, "${String(key[i])}"`;
34
+ }
35
+ }
36
+ else {
37
+ throw new Error(`Missing or invalid primary key in model "${tableName}"`);
38
+ }
39
+ let clusterClause = "";
40
+ if (clusteringOrder) {
41
+ let orderDef = "";
42
+ for (const col in clusteringOrder) {
43
+ if (orderDef !== "") {
44
+ orderDef += ", ";
45
+ }
46
+ orderDef += `"${col}" ${clusteringOrder[col].toUpperCase()}`;
47
+ }
48
+ if (orderDef !== "") {
49
+ clusterClause = ` WITH CLUSTERING ORDER BY (${orderDef})`;
50
+ }
51
+ }
52
+ return `CREATE TABLE IF NOT EXISTS ${keyspace}.${tableName} (${columnsDef}PRIMARY KEY (${pkDef}))${clusterClause}`;
53
+ }
54
+ //# sourceMappingURL=create_table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_table.js","sourceRoot":"","sources":["../../src/cql_gen/create_table.ts"],"names":[],"mappings":";;;AAEA,mBAAyB,KAAY;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAA;IACzB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAA;IACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAA;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAA;IACrB,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAA;IAE7C,IAAI,UAAU,GAAG,EAAE,CAAA;IAEnB,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;QAC/B,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,KAAa,EAAE,IAAI,CAAA;QAExE,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACd,2BAA2B,SAAS,eAAe,SAAS,GAAG,CAC/D,CAAA;QACF,CAAC;QAED,UAAU,IAAI,IAAI,SAAS,KAAK,OAAO,CAAC,WAAW,EAAE,IAAI,CAAA;IAC1D,CAAC;IAED,IAAI,KAAK,GAAG,EAAE,CAAA;IAEd,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC7B,KAAK,GAAG,IAAI,GAAG,GAAG,CAAA;IACnB,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QAEpB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;QAC7D,CAAC;aAAM,CAAC;YACP,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAA;QAC7B,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,KAAK,IAAI,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QACjC,CAAC;IACF,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACd,4CAA4C,SAAS,GAAG,CACxD,CAAA;IACF,CAAC;IAED,IAAI,aAAa,GAAG,EAAE,CAAA;IAEtB,IAAI,eAAe,EAAE,CAAC;QACrB,IAAI,QAAQ,GAAG,EAAE,CAAA;QAEjB,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACnC,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;gBACrB,QAAQ,IAAI,IAAI,CAAA;YACjB,CAAC;YAED,QAAQ,IAAI,IAAI,GAAG,KAAM,eAAe,CAAC,GAAG,CAAY,CAAC,WAAW,EAAE,EAAE,CAAA;QACzE,CAAC;QACD,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACrB,aAAa,GAAG,8BAA8B,QAAQ,GAAG,CAAA;QAC1D,CAAC;IACF,CAAC;IAED,OAAO,8BAA8B,QAAQ,IAAI,SAAS,KAAK,UAAU,gBAAgB,KAAK,KAAK,aAAa,EAAE,CAAA;AACnH,CAAC"}
@@ -1,15 +1,12 @@
1
- import { Model } from "../model/index.js";
2
- import { Doc } from "../types.js";
3
-
4
- //#region src/document/index.d.ts
5
- declare class Document<TDoc = any> {
6
- constructor(data: TDoc, model: Model<any, TDoc>);
7
- _model: Model<any, TDoc>;
8
- save(): Promise<Doc<TDoc>[]>;
9
- delete(): Promise<Doc<TDoc>[]>;
10
- toRaw(): TDoc;
11
- isValid(): boolean;
12
- getChangedFields(original: Partial<TDoc>): (keyof TDoc)[];
1
+ import type { Model } from "../model";
2
+ export declare class Document<TDoc = any> {
3
+ constructor(data: TDoc, model: Model<any, TDoc>);
4
+ _model: Model<any, TDoc>;
5
+ save(): Promise<import("../types").Doc<TDoc>[]>;
6
+ delete(): Promise<import("../types").Doc<TDoc>[]>;
7
+ toRaw(): TDoc;
8
+ isValid(): boolean;
9
+ getChangedFields(original: Partial<TDoc>): (keyof TDoc)[];
13
10
  }
14
- //#endregion
15
- export { Document, Document as default };
11
+ export default Document;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/document/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAGrC,qBAAa,QAAQ,CAAC,IAAI,GAAG,GAAG;IAC/B,YAAY,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,EAmB9C;IAED,MAAM,EAAG,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAEnB,IAAI,4CAUT;IAEK,MAAM,4CAMX;IAED,KAAK,IAAI,IAAI,CAmBZ;IAED,OAAO,IAAI,OAAO,CAOjB;IAED,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAWxD;CACD;eAEc,QAAQ"}
package/document/index.js CHANGED
@@ -1 +1,80 @@
1
- var Document=class{constructor(e,t){if(e==null)throw Error(`Cannot create Document with null or undefined data`);if(typeof e!=`object`||Array.isArray(e))throw Error(`Document data must be an object`);Object.assign(this,e),Object.defineProperty(this,`_model`,{value:t,enumerable:!1,writable:!1,configurable:!1})}_model;async save(){try{let e=this.toRaw();return await this._model.update(e)}catch(e){throw Error(`Failed to save document: ${e.message}`)}}async delete(){try{return await this._model.delete(this.toRaw())}catch(e){throw Error(`Failed to delete document: ${e.message}`)}}toRaw(){let e={};for(let t in this)if(t!==`_model`&&this.propertyIsEnumerable(t)){let n=this[t];try{JSON.stringify(n),e[t]=n}catch{e[t]=String(n)}}return e}isValid(){try{return!0}catch{return!1}}getChangedFields(e){let t=this.toRaw(),n=[];for(let r in t)(!(r in e)||t[r]!==e[r])&&n.push(r);return n}};export{Document,Document as default};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Document = void 0;
4
+ //import typeChecker from "../utils/typeChecker"
5
+ class Document {
6
+ constructor(data, model) {
7
+ if (data == null) {
8
+ throw new Error("Cannot create Document with null or undefined data");
9
+ }
10
+ if (typeof data !== "object" || Array.isArray(data)) {
11
+ throw new Error("Document data must be an object");
12
+ }
13
+ Object.assign(this, data);
14
+ Object.defineProperty(this, "_model", {
15
+ value: model,
16
+ enumerable: false,
17
+ writable: false,
18
+ configurable: false,
19
+ });
20
+ }
21
+ _model;
22
+ async save() {
23
+ try {
24
+ const data = this.toRaw();
25
+ //typeChecker(this._model, data)
26
+ return await this._model.update(data);
27
+ }
28
+ catch (error) {
29
+ throw new Error(`Failed to save document: ${error.message}`);
30
+ }
31
+ }
32
+ async delete() {
33
+ try {
34
+ return await this._model.delete(this.toRaw());
35
+ }
36
+ catch (error) {
37
+ throw new Error(`Failed to delete document: ${error.message}`);
38
+ }
39
+ }
40
+ toRaw() {
41
+ const raw = {};
42
+ for (const key in this) {
43
+ if (key === "_model")
44
+ continue;
45
+ if (this.propertyIsEnumerable(key)) {
46
+ const value = this[key];
47
+ try {
48
+ JSON.stringify(value);
49
+ raw[key] = value;
50
+ }
51
+ catch (error) {
52
+ raw[key] = String(value);
53
+ }
54
+ }
55
+ }
56
+ return raw;
57
+ }
58
+ isValid() {
59
+ try {
60
+ //typeChecker(this._model, this.toRaw())
61
+ return true;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ getChangedFields(original) {
68
+ const current = this.toRaw();
69
+ const changed = [];
70
+ for (const key in current) {
71
+ if (!(key in original) || current[key] !== original[key]) {
72
+ changed.push(key);
73
+ }
74
+ }
75
+ return changed;
76
+ }
77
+ }
78
+ exports.Document = Document;
79
+ exports.default = Document;
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/document/index.ts"],"names":[],"mappings":";;;AACA,gDAAgD;AAEhD;IACC,YAAY,IAAU,EAAE,KAAuB;QAC9C,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACd,oDAAoD,CACpD,CAAA;QACF,CAAC;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAEzB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;YACrC,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACnB,CAAC,CAAA;IACH,CAAC;IAED,MAAM,CAAmB;IAEzB,KAAK,CAAC,IAAI;QACT,IAAI,CAAC;YACJ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YAEzB,gCAAgC;YAEhC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAW,CAAC,CAAA;QAC7C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7D,CAAC;IACF,CAAC;IAED,KAAK,CAAC,MAAM;QACX,IAAI,CAAC;YACJ,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAS,CAAC,CAAA;QACrD,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAC/D,CAAC;IACF,CAAC;IAED,KAAK;QACJ,MAAM,GAAG,GAAQ,EAAE,CAAA;QAEnB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,GAAG,KAAK,QAAQ;gBAAE,SAAQ;YAE9B,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAI,IAAY,CAAC,GAAG,CAAC,CAAA;gBAEhC,IAAI,CAAC;oBACJ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;oBACrB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;gBACzB,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,GAAW,CAAA;IACnB,CAAC;IAED,OAAO;QACN,IAAI,CAAC;YACJ,wCAAwC;YACxC,OAAO,IAAI,CAAA;QACZ,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAED,gBAAgB,CAAC,QAAuB;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAyB,CAAA;QACnD,MAAM,OAAO,GAAmB,EAAE,CAAA;QAElC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAM,QAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,GAAiB,CAAC,CAAA;YAChC,CAAC;QACF,CAAC;QAED,OAAO,OAAO,CAAA;IACf,CAAC;CACD;;kBAEc,QAAQ"}
package/global.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import type { Client } from "./client";
2
+ declare global {
3
+ var __scylla_client: Client;
4
+ }
5
+ export {};
6
+ //# sourceMappingURL=global.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEtC,OAAO,CAAC,MAAM,CAAC;IACd,IAAI,eAAe,EAAE,MAAM,CAAA;CAC3B;AAED,OAAO,EAAE,CAAA"}
package/global.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=global.js.map
package/global.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.js","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":""}