@ragestudio/scylla-odm 0.13.0 → 0.14.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.
package/client.js CHANGED
@@ -12,7 +12,7 @@ var Client = class {
12
12
  if (globalThis.__scylla_client) throw new Error("An instance of Scylla Client is already initialized");
13
13
  this.config = {
14
14
  modelsPath: path.resolve(process.cwd(), "db"),
15
- contactPoints: config.contactPoints ?? SCYLLA_CONTACT_POINTS ? SCYLLA_CONTACT_POINTS.split(",") : ["127.0.0.1"],
15
+ contactPoints: config.contactPoints ?? SCYLLA_CONTACT_POINTS?.split(",") ?? ["127.0.0.1"],
16
16
  localDataCenter: config.localDataCenter ?? SCYLLA_LOCAL_DATA_CENTER ?? "datacenter1",
17
17
  keyspace: config.keyspace ?? SCYLLA_KEYSPACE ?? "default",
18
18
  port: 9042,
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\"\nimport { InferDocument } from \"./types\"\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:\n\t\t\t\t(config.contactPoints ?? SCYLLA_CONTACT_POINTS)\n\t\t\t\t\t? SCYLLA_CONTACT_POINTS.split(\",\")\n\t\t\t\t\t: [\"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(`Failed to load models: ${error.message}`)\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(\n\t\t\t\tmodel.name,\n\t\t\t\tmodel as Model<InferDocument<typeof model.schema>>,\n\t\t\t)\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\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Connection attempt ${attempt} failed: ${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\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.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 \"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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"}
@@ -0,0 +1,17 @@
1
+ import { Model } from "../model/index.js";
2
+ import { Doc } from "../types.js";
3
+ import * as _$cassandra_driver0 from "cassandra-driver";
4
+
5
+ //#region src/document/index.d.ts
6
+ declare class Document<TDoc = any> {
7
+ constructor(data: TDoc, model: Model<any, TDoc>);
8
+ _model: Model<any, TDoc>;
9
+ save(): Promise<Doc<TDoc>>;
10
+ delete(): Promise<_$cassandra_driver0.mapping.Result<any>>;
11
+ toRaw(): TDoc;
12
+ isValid(): boolean;
13
+ getChangedFields(original: Partial<TDoc>): (keyof TDoc)[];
14
+ }
15
+ //#endregion
16
+ export { Document, Document as default };
17
+ //# sourceMappingURL=index.d.ts.map
@@ -1,8 +1,8 @@
1
- //#region src/result/index.ts
2
- var Result = class {
1
+ //#region src/document/index.ts
2
+ var Document = class {
3
3
  constructor(data, model) {
4
- if (data == null) throw new Error("Cannot create Result with null or undefined data");
5
- if (typeof data !== "object" || Array.isArray(data)) throw new Error("Result data must be an object");
4
+ if (data == null) throw new Error("Cannot create Document with null or undefined data");
5
+ if (typeof data !== "object" || Array.isArray(data)) throw new Error("Document data must be an object");
6
6
  Object.assign(this, data);
7
7
  Object.defineProperty(this, "_model", {
8
8
  value: model,
@@ -17,14 +17,14 @@ var Result = class {
17
17
  const data = this.toRaw();
18
18
  return await this._model.update(data);
19
19
  } catch (error) {
20
- throw new Error(`Failed to save result: ${error.message}`);
20
+ throw new Error(`Failed to save document: ${error.message}`);
21
21
  }
22
22
  }
23
23
  async delete() {
24
24
  try {
25
25
  return await this._model.delete(this.toRaw());
26
26
  } catch (error) {
27
- throw new Error(`Failed to delete result: ${error.message}`);
27
+ throw new Error(`Failed to delete document: ${error.message}`);
28
28
  }
29
29
  }
30
30
  toRaw() {
@@ -58,6 +58,6 @@ var Result = class {
58
58
  }
59
59
  };
60
60
  //#endregion
61
- export { Result, Result as default };
61
+ export { Document, Document as default };
62
62
 
63
63
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/document/index.ts"],"sourcesContent":["import type { Model } from \"../model\"\n//import typeChecker from \"../utils/typeChecker\"\n\nexport class Document<TDoc = any> {\n\tconstructor(data: TDoc, model: Model<any, TDoc>) {\n\t\tif (data == null) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot create Document with null or undefined data\",\n\t\t\t)\n\t\t}\n\n\t\tif (typeof data !== \"object\" || Array.isArray(data)) {\n\t\t\tthrow new Error(\"Document data must be an object\")\n\t\t}\n\n\t\tObject.assign(this, data)\n\n\t\tObject.defineProperty(this, \"_model\", {\n\t\t\tvalue: model,\n\t\t\tenumerable: false,\n\t\t\twritable: false,\n\t\t\tconfigurable: false,\n\t\t})\n\t}\n\n\t_model!: Model<any, TDoc>\n\n\tasync save() {\n\t\ttry {\n\t\t\tconst data = this.toRaw()\n\n\t\t\t//typeChecker(this._model, data)\n\n\t\t\treturn await this._model.update(data as any)\n\t\t} catch (error: any) {\n\t\t\tthrow new Error(`Failed to save document: ${error.message}`)\n\t\t}\n\t}\n\n\tasync delete() {\n\t\ttry {\n\t\t\treturn await this._model.delete(this.toRaw() as any)\n\t\t} catch (error: any) {\n\t\t\tthrow new Error(`Failed to delete document: ${error.message}`)\n\t\t}\n\t}\n\n\ttoRaw(): TDoc {\n\t\tconst raw: any = {}\n\n\t\tfor (const key in this) {\n\t\t\tif (key === \"_model\") continue\n\n\t\t\tif (this.propertyIsEnumerable(key)) {\n\t\t\t\tconst value = (this as any)[key]\n\n\t\t\t\ttry {\n\t\t\t\t\tJSON.stringify(value)\n\t\t\t\t\traw[key] = value\n\t\t\t\t} catch (error) {\n\t\t\t\t\traw[key] = String(value)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn raw as TDoc\n\t}\n\n\tisValid(): boolean {\n\t\ttry {\n\t\t\t//typeChecker(this._model, this.toRaw())\n\t\t\treturn true\n\t\t} catch {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tgetChangedFields(original: Partial<TDoc>): (keyof TDoc)[] {\n\t\tconst current = this.toRaw() as Record<string, any>\n\t\tconst changed: (keyof TDoc)[] = []\n\n\t\tfor (const key in current) {\n\t\t\tif (!(key in original) || current[key] !== (original as any)[key]) {\n\t\t\t\tchanged.push(key as keyof TDoc)\n\t\t\t}\n\t\t}\n\n\t\treturn changed\n\t}\n}\n\nexport default Document\n"],"mappings":";AAGA,IAAa,WAAb,MAAkC;CACjC,YAAY,MAAY,OAAyB;AAChD,MAAI,QAAQ,KACX,OAAM,IAAI,MACT,qDACA;AAGF,MAAI,OAAO,SAAS,YAAY,MAAM,QAAQ,KAAK,CAClD,OAAM,IAAI,MAAM,kCAAkC;AAGnD,SAAO,OAAO,MAAM,KAAK;AAEzB,SAAO,eAAe,MAAM,UAAU;GACrC,OAAO;GACP,YAAY;GACZ,UAAU;GACV,cAAc;GACd,CAAC;;CAGH;CAEA,MAAM,OAAO;AACZ,MAAI;GACH,MAAM,OAAO,KAAK,OAAO;AAIzB,UAAO,MAAM,KAAK,OAAO,OAAO,KAAY;WACpC,OAAY;AACpB,SAAM,IAAI,MAAM,4BAA4B,MAAM,UAAU;;;CAI9D,MAAM,SAAS;AACd,MAAI;AACH,UAAO,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO,CAAQ;WAC5C,OAAY;AACpB,SAAM,IAAI,MAAM,8BAA8B,MAAM,UAAU;;;CAIhE,QAAc;EACb,MAAM,MAAW,EAAE;AAEnB,OAAK,MAAM,OAAO,MAAM;AACvB,OAAI,QAAQ,SAAU;AAEtB,OAAI,KAAK,qBAAqB,IAAI,EAAE;IACnC,MAAM,QAAS,KAAa;AAE5B,QAAI;AACH,UAAK,UAAU,MAAM;AACrB,SAAI,OAAO;aACH,OAAO;AACf,SAAI,OAAO,OAAO,MAAM;;;;AAK3B,SAAO;;CAGR,UAAmB;AAClB,MAAI;AAEH,UAAO;UACA;AACP,UAAO;;;CAIT,iBAAiB,UAAyC;EACzD,MAAM,UAAU,KAAK,OAAO;EAC5B,MAAM,UAA0B,EAAE;AAElC,OAAK,MAAM,OAAO,QACjB,KAAI,EAAE,OAAO,aAAa,QAAQ,SAAU,SAAiB,KAC5D,SAAQ,KAAK,IAAkB;AAIjC,SAAO"}
package/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Schema } from "./schema/index.js";
2
2
  import { Model } from "./model/index.js";
3
- import { Result } from "./result/index.js";
3
+ import { Document } from "./document/index.js";
4
4
  import { ColumnTypes } from "./types.js";
5
5
  import { Client } from "./client.js";
6
- export { Client, Client as default, ColumnTypes, Model, Result, Schema };
6
+ export { Client, Client as default, ColumnTypes, Model, Document as Result, Schema };
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Result } from "./result/index.js";
1
+ import { Document } from "./document/index.js";
2
2
  import { Model } from "./model/index.js";
3
3
  import { Client } from "./client.js";
4
4
  import { Schema } from "./schema/index.js";
@@ -6,6 +6,6 @@ import { ColumnTypes } from "./types.js";
6
6
  //#region src/index.ts
7
7
  var src_default = Client;
8
8
  //#endregion
9
- export { Client, ColumnTypes, Model, Result, Schema, src_default as default };
9
+ export { Client, ColumnTypes, Model, Document as Result, Schema, src_default as default };
10
10
 
11
11
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import Client from \"./client\"\nimport Model from \"./model\"\nimport Schema from \"./schema\"\nimport Result from \"./result\"\nimport { ColumnTypes } from \"./types\"\n\nexport default Client\nexport { Client, Model, Schema, Result, ColumnTypes }\n"],"mappings":";;;;;;AAMA,IAAA,cAAe"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import Client from \"./client\"\nimport Model from \"./model\"\nimport Schema from \"./schema\"\nimport Document from \"./document\"\nimport { ColumnTypes } from \"./types\"\n\nexport default Client\nexport { Client, Model, Schema, Document as Result, ColumnTypes }\n"],"mappings":";;;;;;AAMA,IAAA,cAAe"}
package/model/index.d.ts CHANGED
@@ -1,37 +1,37 @@
1
1
  import { Schema } from "../schema/index.js";
2
2
  import export_default from "../operations/tableExists.js";
3
3
  import syncOP from "../operations/sync.js";
4
- import { DocumentResult, Query, QueryOptions } from "../types.js";
4
+ import { Doc, InferDoc, Query, QueryOptions } from "../types.js";
5
5
  import { Client } from "../client.js";
6
6
  import { mapping } from "cassandra-driver/lib/mapping/index.js";
7
7
 
8
8
  //#region src/model/index.d.ts
9
- declare class Model<TDoc = any> {
9
+ declare class Model<TSchema extends Schema<any> = Schema<any>, TDoc = InferDoc<TSchema>> {
10
10
  name: string;
11
- schema: Schema<any>;
11
+ schema: TSchema;
12
12
  get client(): Client;
13
13
  get mapper(): mapping.ModelMapper;
14
- constructor(name: string, schema: Schema<any>);
15
- create: (data: Partial<TDoc>) => DocumentResult<TDoc>;
16
- obj: (data: Partial<TDoc>) => DocumentResult<TDoc>;
14
+ constructor(name: string, schema: TSchema);
15
+ create: (data: Partial<TDoc>) => Doc<TDoc>;
16
+ obj: (data: Partial<TDoc>) => Doc<TDoc>;
17
17
  find: {
18
18
  (query: Query<TDoc>, options: QueryOptions & {
19
19
  raw: true;
20
20
  }): Promise<TDoc[]>;
21
- (query?: Query<TDoc>, options?: QueryOptions): Promise<DocumentResult<TDoc>[]>;
21
+ (query?: Query<TDoc>, options?: QueryOptions): Promise<Doc<TDoc>[]>;
22
22
  };
23
23
  findOne: {
24
24
  (query: Query<TDoc>, options: QueryOptions & {
25
25
  raw: true;
26
- }): Promise<TDoc>;
27
- (query?: Query<TDoc>, options?: QueryOptions): Promise<DocumentResult<TDoc>>;
26
+ }): Promise<TDoc | null>;
27
+ (query?: Query<TDoc>, options?: QueryOptions): Promise<Doc<TDoc> | null>;
28
28
  };
29
- update: (query: Query<TDoc>) => Promise<DocumentResult<TDoc>>;
29
+ update: (query: Query<TDoc>) => Promise<Doc<TDoc>>;
30
30
  delete: (query: Query<TDoc>) => Promise<mapping.Result>;
31
31
  countAll: () => Promise<number>;
32
32
  _sync: typeof syncOP;
33
33
  _tableExists: typeof export_default;
34
- _wrap(row: any): DocumentResult<TDoc> | null;
34
+ _wrap(row: any): Doc<TDoc>;
35
35
  }
36
36
  //#endregion
37
37
  export { Model, Model as default };
package/model/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { Result } from "../result/index.js";
1
+ import { Document } from "../document/index.js";
2
2
  import fillDefaults from "../utils/fillDefaults.js";
3
- import findOne_default from "../operations/findOne.js";
3
+ import findOneOP from "../operations/findOne.js";
4
4
  import findOP from "../operations/find.js";
5
- import update_default from "../operations/update.js";
5
+ import updateOP from "../operations/update.js";
6
6
  import delete_default from "../operations/delete.js";
7
7
  import countAll_default from "../operations/countAll.js";
8
8
  import tableExists_default from "../operations/tableExists.js";
@@ -28,16 +28,14 @@ var Model = class {
28
28
  create = (data) => this._wrap(data);
29
29
  obj = (data) => this._wrap(data);
30
30
  find = findOP.bind(this);
31
- findOne = findOne_default.bind(this);
32
- update = update_default.bind(this);
31
+ findOne = findOneOP.bind(this);
32
+ update = updateOP.bind(this);
33
33
  delete = delete_default.bind(this);
34
34
  countAll = countAll_default.bind(this);
35
35
  _sync = syncOP.bind(this);
36
36
  _tableExists = tableExists_default.bind(this);
37
37
  _wrap(row) {
38
- if (!row) return null;
39
- row = fillDefaults(this.schema, row);
40
- return new Result(row, this);
38
+ return new Document(fillDefaults(this.schema, row), this);
41
39
  }
42
40
  };
43
41
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["findOneOP","updateOP","deleteOP","countAllOP","tableExistsOP"],"sources":["../../src/model/index.ts"],"sourcesContent":["import Client from \"..\"\nimport { Result } from \"../result\"\n\nimport fillDefaults from \"../utils/fillDefaults\"\n\nimport { mapping } from \"cassandra-driver/lib/mapping\"\nimport type { DocumentResult, Query, QueryOptions } from \"../types\"\nimport type { Schema } from \"../schema\"\n\nimport findOneOP from \"../operations/findOne\"\nimport findOP from \"../operations/find\"\nimport updateOP from \"../operations/update\"\nimport deleteOP from \"../operations/delete\"\nimport countAllOP from \"../operations/countAll\"\n\nimport tableExistsOP from \"../operations/tableExists\"\nimport syncOP from \"../operations/sync\"\n\nexport class Model<TDoc = any> {\n\tname: string\n\tschema: Schema<any>\n\n\tget client(): Client {\n\t\treturn globalThis.__scylla_client\n\t}\n\n\tget mapper(): mapping.ModelMapper {\n\t\tif (!globalThis.__scylla_client?.mapper) {\n\t\t\tthrow new Error(\"No mapper available\")\n\t\t}\n\n\t\treturn globalThis.__scylla_client.mapper.forModel(this.name)\n\t}\n\n\tconstructor(name: string, schema: Schema<any>) {\n\t\tthis.name = name\n\t\tthis.schema = schema\n\n\t\tif (!Array.isArray(this.schema.keys)) {\n\t\t\tthrow new Error(`[${this.name}] model has missing \"keys\" array`)\n\t\t}\n\t\tif (!this.schema.table_name) {\n\t\t\tthrow new Error(`[${this.name}] model has missing \"table_name\"`)\n\t\t}\n\t\tif (!this.schema.fields || typeof this.schema.fields !== \"object\") {\n\t\t\tthrow new Error(\n\t\t\t\t`[${this.name}] model has missing or invalid \"fields\"`,\n\t\t\t)\n\t\t}\n\t}\n\n\tcreate = (data: Partial<TDoc>) => this._wrap(data)\n\tobj = (data: Partial<TDoc>) => this._wrap(data)\n\n\tfind: {\n\t\t(\n\t\t\tquery: Query<TDoc>,\n\t\t\toptions: QueryOptions & { raw: true },\n\t\t): Promise<TDoc[]>\n\t\t(\n\t\t\tquery?: Query<TDoc>,\n\t\t\toptions?: QueryOptions,\n\t\t): Promise<DocumentResult<TDoc>[]>\n\t} = findOP.bind(this)\n\n\tfindOne: {\n\t\t(\n\t\t\tquery: Query<TDoc>,\n\t\t\toptions: QueryOptions & { raw: true },\n\t\t): Promise<TDoc>\n\t\t(\n\t\t\tquery?: Query<TDoc>,\n\t\t\toptions?: QueryOptions,\n\t\t): Promise<DocumentResult<TDoc>>\n\t} = findOneOP.bind(this)\n\n\tupdate: (query: Query<TDoc>) => Promise<DocumentResult<TDoc>> =\n\t\tupdateOP.bind(this)\n\n\tdelete: (query: Query<TDoc>) => Promise<mapping.Result> =\n\t\tdeleteOP.bind(this)\n\n\tcountAll: () => Promise<number> = countAllOP.bind(this)\n\n\t_sync: typeof syncOP = syncOP.bind(this)\n\t_tableExists: typeof tableExistsOP = tableExistsOP.bind(this)\n\n\t_wrap(row: any): DocumentResult<TDoc> | null {\n\t\tif (!row) {\n\t\t\treturn null\n\t\t}\n\n\t\trow = fillDefaults(this.schema, row)\n\n\t\treturn new Result<TDoc>(row, this) as DocumentResult<TDoc>\n\t}\n}\n\nexport default Model\n"],"mappings":";;;;;;;;;;AAkBA,IAAa,QAAb,MAA+B;CAC9B;CACA;CAEA,IAAI,SAAiB;AACpB,SAAO,WAAW;;CAGnB,IAAI,SAA8B;AACjC,MAAI,CAAC,WAAW,iBAAiB,OAChC,OAAM,IAAI,MAAM,sBAAsB;AAGvC,SAAO,WAAW,gBAAgB,OAAO,SAAS,KAAK,KAAK;;CAG7D,YAAY,MAAc,QAAqB;AAC9C,OAAK,OAAO;AACZ,OAAK,SAAS;AAEd,MAAI,CAAC,MAAM,QAAQ,KAAK,OAAO,KAAK,CACnC,OAAM,IAAI,MAAM,IAAI,KAAK,KAAK,kCAAkC;AAEjE,MAAI,CAAC,KAAK,OAAO,WAChB,OAAM,IAAI,MAAM,IAAI,KAAK,KAAK,kCAAkC;AAEjE,MAAI,CAAC,KAAK,OAAO,UAAU,OAAO,KAAK,OAAO,WAAW,SACxD,OAAM,IAAI,MACT,IAAI,KAAK,KAAK,yCACd;;CAIH,UAAU,SAAwB,KAAK,MAAM,KAAK;CAClD,OAAO,SAAwB,KAAK,MAAM,KAAK;CAE/C,OASI,OAAO,KAAK,KAAK;CAErB,UASIA,gBAAU,KAAK,KAAK;CAExB,SACCC,eAAS,KAAK,KAAK;CAEpB,SACCC,eAAS,KAAK,KAAK;CAEpB,WAAkCC,iBAAW,KAAK,KAAK;CAEvD,QAAuB,OAAO,KAAK,KAAK;CACxC,eAAqCC,oBAAc,KAAK,KAAK;CAE7D,MAAM,KAAuC;AAC5C,MAAI,CAAC,IACJ,QAAO;AAGR,QAAM,aAAa,KAAK,QAAQ,IAAI;AAEpC,SAAO,IAAI,OAAa,KAAK,KAAK"}
1
+ {"version":3,"file":"index.js","names":["deleteOP","countAllOP","tableExistsOP"],"sources":["../../src/model/index.ts"],"sourcesContent":["import Client from \"..\"\nimport { Document } from \"../document\"\n\nimport fillDefaults from \"../utils/fillDefaults\"\n\nimport { mapping } from \"cassandra-driver/lib/mapping\"\nimport type { Query, QueryOptions, InferDoc, Doc } from \"../types\"\nimport type { Schema } from \"../schema\"\n\nimport findOneOP from \"../operations/findOne\"\nimport findOP from \"../operations/find\"\nimport updateOP from \"../operations/update\"\nimport deleteOP from \"../operations/delete\"\nimport countAllOP from \"../operations/countAll\"\n\nimport tableExistsOP from \"../operations/tableExists\"\nimport syncOP from \"../operations/sync\"\n\nexport class Model<\n\tTSchema extends Schema<any> = Schema<any>,\n\tTDoc = InferDoc<TSchema>,\n> {\n\tname: string\n\tschema: TSchema\n\n\tget client(): Client {\n\t\treturn globalThis.__scylla_client\n\t}\n\n\tget mapper(): mapping.ModelMapper {\n\t\tif (!globalThis.__scylla_client?.mapper) {\n\t\t\tthrow new Error(\"No mapper available\")\n\t\t}\n\n\t\treturn globalThis.__scylla_client.mapper.forModel(this.name)\n\t}\n\n\tconstructor(name: string, schema: TSchema) {\n\t\tthis.name = name\n\t\tthis.schema = schema\n\n\t\tif (!Array.isArray(this.schema.keys)) {\n\t\t\tthrow new Error(`[${this.name}] model has missing \"keys\" array`)\n\t\t}\n\t\tif (!this.schema.table_name) {\n\t\t\tthrow new Error(`[${this.name}] model has missing \"table_name\"`)\n\t\t}\n\t\tif (!this.schema.fields || typeof this.schema.fields !== \"object\") {\n\t\t\tthrow new Error(\n\t\t\t\t`[${this.name}] model has missing or invalid \"fields\"`,\n\t\t\t)\n\t\t}\n\t}\n\n\tcreate = (data: Partial<TDoc>) => this._wrap(data)\n\tobj = (data: Partial<TDoc>) => this._wrap(data)\n\n\tfind: {\n\t\t(\n\t\t\tquery: Query<TDoc>,\n\t\t\toptions: QueryOptions & { raw: true },\n\t\t): Promise<TDoc[]>\n\t\t(query?: Query<TDoc>, options?: QueryOptions): Promise<Doc<TDoc>[]>\n\t} = (findOP as Function).bind(this) as any\n\n\tfindOne: {\n\t\t(\n\t\t\tquery: Query<TDoc>,\n\t\t\toptions: QueryOptions & { raw: true },\n\t\t): Promise<TDoc | null>\n\t\t(query?: Query<TDoc>, options?: QueryOptions): Promise<Doc<TDoc> | null>\n\t} = (findOneOP as Function).bind(this) as any\n\n\tupdate: (query: Query<TDoc>) => Promise<Doc<TDoc>> = (\n\t\tupdateOP as Function\n\t).bind(this) as any\n\n\tdelete: (query: Query<TDoc>) => Promise<mapping.Result> = (\n\t\tdeleteOP as Function\n\t).bind(this) as any\n\n\tcountAll: () => Promise<number> = (countAllOP as Function).bind(this) as any\n\n\t_sync: typeof syncOP = (syncOP as Function).bind(this) as any\n\t_tableExists: typeof tableExistsOP = (tableExistsOP as Function).bind(\n\t\tthis,\n\t) as any\n\n\t_wrap(row: any): Doc<TDoc> {\n\t\treturn new Document<TDoc>(\n\t\t\tfillDefaults(this.schema, row),\n\t\t\tthis,\n\t\t) as Doc<TDoc>\n\t}\n}\n\nexport default Model\n"],"mappings":";;;;;;;;;;AAkBA,IAAa,QAAb,MAGE;CACD;CACA;CAEA,IAAI,SAAiB;AACpB,SAAO,WAAW;;CAGnB,IAAI,SAA8B;AACjC,MAAI,CAAC,WAAW,iBAAiB,OAChC,OAAM,IAAI,MAAM,sBAAsB;AAGvC,SAAO,WAAW,gBAAgB,OAAO,SAAS,KAAK,KAAK;;CAG7D,YAAY,MAAc,QAAiB;AAC1C,OAAK,OAAO;AACZ,OAAK,SAAS;AAEd,MAAI,CAAC,MAAM,QAAQ,KAAK,OAAO,KAAK,CACnC,OAAM,IAAI,MAAM,IAAI,KAAK,KAAK,kCAAkC;AAEjE,MAAI,CAAC,KAAK,OAAO,WAChB,OAAM,IAAI,MAAM,IAAI,KAAK,KAAK,kCAAkC;AAEjE,MAAI,CAAC,KAAK,OAAO,UAAU,OAAO,KAAK,OAAO,WAAW,SACxD,OAAM,IAAI,MACT,IAAI,KAAK,KAAK,yCACd;;CAIH,UAAU,SAAwB,KAAK,MAAM,KAAK;CAClD,OAAO,SAAwB,KAAK,MAAM,KAAK;CAE/C,OAMK,OAAoB,KAAK,KAAK;CAEnC,UAMK,UAAuB,KAAK,KAAK;CAEtC,SACC,SACC,KAAK,KAAK;CAEZ,SACCA,eACC,KAAK,KAAK;CAEZ,WAAmCC,iBAAwB,KAAK,KAAK;CAErE,QAAwB,OAAoB,KAAK,KAAK;CACtD,eAAsCC,oBAA2B,KAChE,KACA;CAED,MAAM,KAAqB;AAC1B,SAAO,IAAI,SACV,aAAa,KAAK,QAAQ,IAAI,EAC9B,KACA"}
@@ -1,7 +1,7 @@
1
1
  import { Model } from "../model/index.js";
2
2
 
3
3
  //#region src/operations/countAll.d.ts
4
- declare function export_default(this: Model, timeoutMs?: number): Promise<any>;
4
+ declare function export_default(this: Model<any, any>, timeoutMs?: number): Promise<any>;
5
5
  //#endregion
6
6
  export { export_default as default };
7
7
  //# sourceMappingURL=countAll.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"countAll.js","names":[],"sources":["../../src/operations/countAll.ts"],"sourcesContent":["import type Model from \"../model\"\n\nexport default async function (this: Model, timeoutMs: number = 60000) {\n\tconst cql = `SELECT COUNT(1) FROM ${this.client.config.keyspace}.${this.schema.table_name}`\n\n\tconst queryOptions = {\n\t\tprepare: true,\n\t\treadTimeout: timeoutMs,\n\t}\n\n\tconst operation = async () => {\n\t\tconst result = await this.client.driver.execute(cql, [], queryOptions)\n\n\t\treturn result.rows[0].count.toNumber()\n\t}\n\n\treturn this.client.executeWithRetry(operation, `countAll on ${this.name}`)\n}\n"],"mappings":";AAEA,eAAA,iBAA4C,YAAoB,KAAO;CACtE,MAAM,MAAM,wBAAwB,KAAK,OAAO,OAAO,SAAS,GAAG,KAAK,OAAO;CAE/E,MAAM,eAAe;EACpB,SAAS;EACT,aAAa;EACb;CAED,MAAM,YAAY,YAAY;AAG7B,UAAO,MAFc,KAAK,OAAO,OAAO,QAAQ,KAAK,EAAE,EAAE,aAAa,EAExD,KAAK,GAAG,MAAM,UAAU;;AAGvC,QAAO,KAAK,OAAO,iBAAiB,WAAW,eAAe,KAAK,OAAO"}
1
+ {"version":3,"file":"countAll.js","names":[],"sources":["../../src/operations/countAll.ts"],"sourcesContent":["import type Model from \"../model\"\n\nexport default async function (\n\tthis: Model<any, any>,\n\ttimeoutMs: number = 60000,\n) {\n\tconst cql = `SELECT COUNT(1) FROM ${this.client.config.keyspace}.${this.schema.table_name}`\n\n\tconst queryOptions = {\n\t\tprepare: true,\n\t\treadTimeout: timeoutMs,\n\t}\n\n\tconst operation = async () => {\n\t\tconst result = await this.client.driver.execute(cql, [], queryOptions)\n\n\t\treturn result.rows[0].count.toNumber()\n\t}\n\n\treturn this.client.executeWithRetry(operation, `countAll on ${this.name}`)\n}\n"],"mappings":";AAEA,eAAA,iBAEC,YAAoB,KACnB;CACD,MAAM,MAAM,wBAAwB,KAAK,OAAO,OAAO,SAAS,GAAG,KAAK,OAAO;CAE/E,MAAM,eAAe;EACpB,SAAS;EACT,aAAa;EACb;CAED,MAAM,YAAY,YAAY;AAG7B,UAAO,MAFc,KAAK,OAAO,OAAO,QAAQ,KAAK,EAAE,EAAE,aAAa,EAExD,KAAK,GAAG,MAAM,UAAU;;AAGvC,QAAO,KAAK,OAAO,iBAAiB,WAAW,eAAe,KAAK,OAAO"}
@@ -2,7 +2,7 @@ import { Model } from "../model/index.js";
2
2
  import * as _$cassandra_driver0 from "cassandra-driver";
3
3
 
4
4
  //#region src/operations/delete.d.ts
5
- declare function export_default(this: Model, query: any): Promise<_$cassandra_driver0.mapping.Result<any>>;
5
+ declare function export_default(this: Model<any, any>, query: any): Promise<_$cassandra_driver0.mapping.Result<any>>;
6
6
  //#endregion
7
7
  export { export_default as default };
8
8
  //# sourceMappingURL=delete.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete.js","names":[],"sources":["../../src/operations/delete.ts"],"sourcesContent":["import type Model from \"../model\"\n\nexport default async function (this: Model, query: any) {\n\tconst operation = async () => {\n\t\treturn await this.mapper.remove(query)\n\t}\n\n\treturn this.client.executeWithRetry(operation, `delete on ${this.name}`)\n}\n"],"mappings":";AAEA,eAAA,eAA4C,OAAY;CACvD,MAAM,YAAY,YAAY;AAC7B,SAAO,MAAM,KAAK,OAAO,OAAO,MAAM;;AAGvC,QAAO,KAAK,OAAO,iBAAiB,WAAW,aAAa,KAAK,OAAO"}
1
+ {"version":3,"file":"delete.js","names":[],"sources":["../../src/operations/delete.ts"],"sourcesContent":["import type Model from \"../model\"\n\nexport default async function (this: Model<any, any>, query: any) {\n\tconst operation = async () => {\n\t\treturn await this.mapper.remove(query)\n\t}\n\n\treturn this.client.executeWithRetry(operation, `delete on ${this.name}`)\n}\n"],"mappings":";AAEA,eAAA,eAAsD,OAAY;CACjE,MAAM,YAAY,YAAY;AAC7B,SAAO,MAAM,KAAK,OAAO,OAAO,MAAM;;AAGvC,QAAO,KAAK,OAAO,iBAAiB,WAAW,aAAa,KAAK,OAAO"}
@@ -2,7 +2,7 @@ import { Model } from "../model/index.js";
2
2
  import { Query, QueryOptions } from "../types.js";
3
3
 
4
4
  //#region src/operations/find.d.ts
5
- declare function findOP<TDoc>(this: Model<TDoc>, query?: Query<TDoc>, options?: QueryOptions): Promise<any[]>;
5
+ declare function findOP<TDoc>(this: Model<any, TDoc>, query?: Query<TDoc>, options?: QueryOptions): Promise<any[]>;
6
6
  //#endregion
7
7
  export { findOP as default };
8
8
  //# sourceMappingURL=find.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","names":[],"sources":["../../src/operations/find.ts"],"sourcesContent":["import type Model from \"../model\"\nimport type { mapping } from \"cassandra-driver/lib/mapping\"\nimport type { Query, QueryOptions } from \"../types\"\nimport queryParser from \"../utils/queryParser\"\n\nexport default async function findOP<TDoc>(\n\tthis: Model<TDoc>,\n\tquery: Query<TDoc> = {},\n\toptions?: QueryOptions,\n) {\n\tconst { $limit, $orderby, ...rest } = query\n\n\tlet parsedQuery = queryParser(this, rest)\n\n\tconst docInfo: mapping.FindDocInfo = {}\n\n\tif ($limit !== undefined) {\n\t\tif (typeof $limit !== \"number\" || $limit <= 0) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`{$limit} operator must be a number greater than 0`,\n\t\t\t)\n\t\t}\n\t\tdocInfo.limit = $limit\n\t}\n\n\tif ($orderby !== undefined) {\n\t\tdocInfo.orderBy = $orderby as Record<string, \"asc\" | \"desc\">\n\t}\n\n\tconst operation = async () => {\n\t\tconst result = await this.mapper.find(parsedQuery, docInfo)\n\t\tconst rows = result.toArray()\n\n\t\tif (options?.raw === true) {\n\t\t\treturn rows\n\t\t}\n\n\t\treturn rows.map((row) => this._wrap(row))\n\t}\n\n\treturn this.client.executeWithRetry(operation, `find on ${this.name}`)\n}\n"],"mappings":";;AAKA,eAA8B,OAE7B,QAAqB,EAAE,EACvB,SACC;CACD,MAAM,EAAE,QAAQ,UAAU,GAAG,SAAS;CAEtC,IAAI,cAAc,YAAY,MAAM,KAAK;CAEzC,MAAM,UAA+B,EAAE;AAEvC,KAAI,WAAW,KAAA,GAAW;AACzB,MAAI,OAAO,WAAW,YAAY,UAAU,EAC3C,OAAM,IAAI,UACT,oDACA;AAEF,UAAQ,QAAQ;;AAGjB,KAAI,aAAa,KAAA,EAChB,SAAQ,UAAU;CAGnB,MAAM,YAAY,YAAY;EAE7B,MAAM,QAAO,MADQ,KAAK,OAAO,KAAK,aAAa,QAAQ,EACvC,SAAS;AAE7B,MAAI,SAAS,QAAQ,KACpB,QAAO;AAGR,SAAO,KAAK,KAAK,QAAQ,KAAK,MAAM,IAAI,CAAC;;AAG1C,QAAO,KAAK,OAAO,iBAAiB,WAAW,WAAW,KAAK,OAAO"}
1
+ {"version":3,"file":"find.js","names":[],"sources":["../../src/operations/find.ts"],"sourcesContent":["import type Model from \"../model\"\nimport type { mapping } from \"cassandra-driver/lib/mapping\"\nimport type { Query, QueryOptions } from \"../types\"\nimport queryParser from \"../utils/queryParser\"\n\nexport default async function findOP<TDoc>(\n\tthis: Model<any, TDoc>,\n\tquery: Query<TDoc> = {},\n\toptions?: QueryOptions,\n) {\n\tconst { $limit, $orderby, ...rest } = query\n\n\tlet parsedQuery = queryParser(this, rest)\n\n\tconst docInfo: mapping.FindDocInfo = {}\n\n\tif ($limit !== undefined) {\n\t\tif (typeof $limit !== \"number\" || $limit <= 0) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`{$limit} operator must be a number greater than 0`,\n\t\t\t)\n\t\t}\n\t\tdocInfo.limit = $limit\n\t}\n\n\tif ($orderby !== undefined) {\n\t\tdocInfo.orderBy = $orderby as Record<string, \"asc\" | \"desc\">\n\t}\n\n\tconst operation = async () => {\n\t\tconst result = await this.mapper.find(parsedQuery, docInfo)\n\t\tconst rows = result.toArray()\n\n\t\tif (options?.raw === true) {\n\t\t\treturn rows\n\t\t}\n\n\t\treturn rows.map((row) => this._wrap(row))\n\t}\n\n\treturn this.client.executeWithRetry(operation, `find on ${this.name}`)\n}\n"],"mappings":";;AAKA,eAA8B,OAE7B,QAAqB,EAAE,EACvB,SACC;CACD,MAAM,EAAE,QAAQ,UAAU,GAAG,SAAS;CAEtC,IAAI,cAAc,YAAY,MAAM,KAAK;CAEzC,MAAM,UAA+B,EAAE;AAEvC,KAAI,WAAW,KAAA,GAAW;AACzB,MAAI,OAAO,WAAW,YAAY,UAAU,EAC3C,OAAM,IAAI,UACT,oDACA;AAEF,UAAQ,QAAQ;;AAGjB,KAAI,aAAa,KAAA,EAChB,SAAQ,UAAU;CAGnB,MAAM,YAAY,YAAY;EAE7B,MAAM,QAAO,MADQ,KAAK,OAAO,KAAK,aAAa,QAAQ,EACvC,SAAS;AAE7B,MAAI,SAAS,QAAQ,KACpB,QAAO;AAGR,SAAO,KAAK,KAAK,QAAQ,KAAK,MAAM,IAAI,CAAC;;AAG1C,QAAO,KAAK,OAAO,iBAAiB,WAAW,WAAW,KAAK,OAAO"}
@@ -2,7 +2,7 @@ import { Model } from "../model/index.js";
2
2
  import { QueryOptions } from "../types.js";
3
3
 
4
4
  //#region src/operations/findOne.d.ts
5
- declare function export_default(this: Model, query: any, options?: QueryOptions): Promise<any>;
5
+ declare function findOneOP<TDoc>(this: Model<any, TDoc>, query: any, options?: QueryOptions): Promise<any>;
6
6
  //#endregion
7
- export { export_default as default };
7
+ export { findOneOP as default };
8
8
  //# sourceMappingURL=findOne.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import queryParser from "../utils/queryParser.js";
2
2
  //#region src/operations/findOne.ts
3
- function findOne_default(query, options) {
3
+ async function findOneOP(query, options) {
4
4
  query = queryParser(this, query);
5
5
  const operation = async () => {
6
6
  let result = await this.mapper.get(query);
@@ -12,6 +12,6 @@ function findOne_default(query, options) {
12
12
  return this.client.executeWithRetry(operation, `findOne on ${this.name}`);
13
13
  }
14
14
  //#endregion
15
- export { findOne_default as default };
15
+ export { findOneOP as default };
16
16
 
17
17
  //# sourceMappingURL=findOne.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"findOne.js","names":[],"sources":["../../src/operations/findOne.ts"],"sourcesContent":["import type { QueryOptions } from \"../types\"\nimport type Model from \"../model\"\nimport queryParser from \"../utils/queryParser\"\n\nexport default function (this: Model, query: any, options?: QueryOptions) {\n\tquery = queryParser(this, query)\n\n\tconst operation = async () => {\n\t\tlet result = await this.mapper.get(query)\n\n\t\tif (!result) {\n\t\t\treturn null\n\t\t}\n\n\t\tresult = this._wrap(result)\n\n\t\tif (options?.raw === true) {\n\t\t\treturn result.toRaw()\n\t\t}\n\n\t\treturn result\n\t}\n\n\treturn this.client.executeWithRetry(operation, `findOne on ${this.name}`)\n}\n"],"mappings":";;AAIA,SAAA,gBAAsC,OAAY,SAAwB;AACzE,SAAQ,YAAY,MAAM,MAAM;CAEhC,MAAM,YAAY,YAAY;EAC7B,IAAI,SAAS,MAAM,KAAK,OAAO,IAAI,MAAM;AAEzC,MAAI,CAAC,OACJ,QAAO;AAGR,WAAS,KAAK,MAAM,OAAO;AAE3B,MAAI,SAAS,QAAQ,KACpB,QAAO,OAAO,OAAO;AAGtB,SAAO;;AAGR,QAAO,KAAK,OAAO,iBAAiB,WAAW,cAAc,KAAK,OAAO"}
1
+ {"version":3,"file":"findOne.js","names":[],"sources":["../../src/operations/findOne.ts"],"sourcesContent":["import type { QueryOptions } from \"../types\"\nimport type Model from \"../model\"\nimport queryParser from \"../utils/queryParser\"\n\nexport default async function findOneOP<TDoc>(\n\tthis: Model<any, TDoc>,\n\tquery: any,\n\toptions?: QueryOptions,\n) {\n\tquery = queryParser(this, query)\n\n\tconst operation = async () => {\n\t\tlet result = await this.mapper.get(query)\n\n\t\tif (!result) {\n\t\t\treturn null\n\t\t}\n\n\t\tresult = this._wrap(result)\n\n\t\tif (options?.raw === true) {\n\t\t\treturn result.toRaw()\n\t\t}\n\n\t\treturn result\n\t}\n\n\treturn this.client.executeWithRetry(operation, `findOne on ${this.name}`)\n}\n"],"mappings":";;AAIA,eAA8B,UAE7B,OACA,SACC;AACD,SAAQ,YAAY,MAAM,MAAM;CAEhC,MAAM,YAAY,YAAY;EAC7B,IAAI,SAAS,MAAM,KAAK,OAAO,IAAI,MAAM;AAEzC,MAAI,CAAC,OACJ,QAAO;AAGR,WAAS,KAAK,MAAM,OAAO;AAE3B,MAAI,SAAS,QAAQ,KACpB,QAAO,OAAO,OAAO;AAGtB,SAAO;;AAGR,QAAO,KAAK,OAAO,iBAAiB,WAAW,cAAc,KAAK,OAAO"}
@@ -1,7 +1,7 @@
1
1
  import { Model } from "../model/index.js";
2
2
 
3
3
  //#region src/operations/sync.d.ts
4
- declare function syncOP(this: Model): Promise<void>;
4
+ declare function syncOP(this: Model<any, any>): Promise<void>;
5
5
  //#endregion
6
6
  export { syncOP as default };
7
7
  //# sourceMappingURL=sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","names":["generateCreateTableCQL"],"sources":["../../src/operations/sync.ts"],"sourcesContent":["import type Model from \"../model\"\nimport generateCreateTableCQL from \"../cql_gen/create_table\"\n\nexport default async function syncOP(this: Model) {\n\tconst tableExists = await this._tableExists()\n\n\tif (tableExists) {\n\t\treturn\n\t}\n\n\ttry {\n\t\tawait this.client.driver.execute(generateCreateTableCQL(this))\n\n\t\tconsole.log(`Table \"${this.schema.table_name}\" created successfully`)\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`Failed to create table \"${this.schema.table_name}\":`,\n\t\t\terror,\n\t\t)\n\t\tthrow error\n\t}\n}\n"],"mappings":";;AAGA,eAA8B,SAAoB;AAGjD,KAAI,MAFsB,KAAK,cAAc,CAG5C;AAGD,KAAI;AACH,QAAM,KAAK,OAAO,OAAO,QAAQA,qBAAuB,KAAK,CAAC;AAE9D,UAAQ,IAAI,UAAU,KAAK,OAAO,WAAW,wBAAwB;UAC7D,OAAO;AACf,UAAQ,MACP,2BAA2B,KAAK,OAAO,WAAW,KAClD,MACA;AACD,QAAM"}
1
+ {"version":3,"file":"sync.js","names":["generateCreateTableCQL"],"sources":["../../src/operations/sync.ts"],"sourcesContent":["import type Model from \"../model\"\nimport generateCreateTableCQL from \"../cql_gen/create_table\"\n\nexport default async function syncOP(this: Model<any, any>) {\n\tconst tableExists = await this._tableExists()\n\n\tif (tableExists) {\n\t\treturn\n\t}\n\n\ttry {\n\t\tawait this.client.driver.execute(generateCreateTableCQL(this))\n\n\t\tconsole.log(`Table \"${this.schema.table_name}\" created successfully`)\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`Failed to create table \"${this.schema.table_name}\":`,\n\t\t\terror,\n\t\t)\n\t\tthrow error\n\t}\n}\n"],"mappings":";;AAGA,eAA8B,SAA8B;AAG3D,KAAI,MAFsB,KAAK,cAAc,CAG5C;AAGD,KAAI;AACH,QAAM,KAAK,OAAO,OAAO,QAAQA,qBAAuB,KAAK,CAAC;AAE9D,UAAQ,IAAI,UAAU,KAAK,OAAO,WAAW,wBAAwB;UAC7D,OAAO;AACf,UAAQ,MACP,2BAA2B,KAAK,OAAO,WAAW,KAClD,MACA;AACD,QAAM"}
@@ -1,7 +1,7 @@
1
1
  import { Model } from "../model/index.js";
2
2
 
3
3
  //#region src/operations/tableExists.d.ts
4
- declare function export_default(this: Model): Promise<boolean>;
4
+ declare function export_default(this: Model<any, any>): Promise<boolean>;
5
5
  //#endregion
6
6
  export { export_default as default };
7
7
  //# sourceMappingURL=tableExists.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tableExists.js","names":[],"sources":["../../src/operations/tableExists.ts"],"sourcesContent":["import type Model from \"../model\"\n\nexport default async function (this: Model) {\n\tconst cql = `\n\t\t\tSELECT table_name\n\t\t\tFROM system_schema.tables\n\t\t\tWHERE keyspace_name = ?\n\t\t\tAND table_name = ?\n\t\t`\n\n\ttry {\n\t\tconst result = await this.client.driver.execute(\n\t\t\tcql,\n\t\t\t[this.client.config.keyspace, this.schema.table_name],\n\t\t\t{\n\t\t\t\tprepare: true,\n\t\t\t},\n\t\t)\n\n\t\treturn result.rows.length > 0\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`Failed to check if table \"${this.schema.table_name}\" exists:`,\n\t\t\terror,\n\t\t)\n\n\t\treturn false\n\t}\n}\n"],"mappings":";AAEA,eAAA,sBAA4C;CAC3C,MAAM,MAAM;;;;;;AAOZ,KAAI;AASH,UAAO,MARc,KAAK,OAAO,OAAO,QACvC,KACA,CAAC,KAAK,OAAO,OAAO,UAAU,KAAK,OAAO,WAAW,EACrD,EACC,SAAS,MACT,CACD,EAEa,KAAK,SAAS;UACpB,OAAO;AACf,UAAQ,MACP,6BAA6B,KAAK,OAAO,WAAW,YACpD,MACA;AAED,SAAO"}
1
+ {"version":3,"file":"tableExists.js","names":[],"sources":["../../src/operations/tableExists.ts"],"sourcesContent":["import type Model from \"../model\"\n\nexport default async function (this: Model<any, any>) {\n\tconst cql = `\n\t\t\tSELECT table_name\n\t\t\tFROM system_schema.tables\n\t\t\tWHERE keyspace_name = ?\n\t\t\tAND table_name = ?\n\t\t`\n\n\ttry {\n\t\tconst result = await this.client.driver.execute(\n\t\t\tcql,\n\t\t\t[this.client.config.keyspace, this.schema.table_name],\n\t\t\t{\n\t\t\t\tprepare: true,\n\t\t\t},\n\t\t)\n\n\t\treturn result.rows.length > 0\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`Failed to check if table \"${this.schema.table_name}\" exists:`,\n\t\t\terror,\n\t\t)\n\n\t\treturn false\n\t}\n}\n"],"mappings":";AAEA,eAAA,sBAAsD;CACrD,MAAM,MAAM;;;;;;AAOZ,KAAI;AASH,UAAO,MARc,KAAK,OAAO,OAAO,QACvC,KACA,CAAC,KAAK,OAAO,OAAO,UAAU,KAAK,OAAO,WAAW,EACrD,EACC,SAAS,MACT,CACD,EAEa,KAAK,SAAS;UACpB,OAAO;AACf,UAAQ,MACP,6BAA6B,KAAK,OAAO,WAAW,YACpD,MACA;AAED,SAAO"}
@@ -1,7 +1,8 @@
1
1
  import { Model } from "../model/index.js";
2
+ import { Doc } from "../types.js";
2
3
 
3
4
  //#region src/operations/update.d.ts
4
- declare function export_default(this: Model, query: any): Promise<any>;
5
+ declare function updateOP<TDoc>(this: Model<any, TDoc>, query: any): Promise<Doc<TDoc>>;
5
6
  //#endregion
6
- export { export_default as default };
7
+ export { updateOP as default };
7
8
  //# sourceMappingURL=update.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import fillDefaults from "../utils/fillDefaults.js";
2
2
  //#region src/operations/update.ts
3
- async function update_default(query) {
3
+ async function updateOP(query) {
4
4
  query = fillDefaults(this.schema, query);
5
5
  if (typeof query.__v !== "undefined") if (Number.isNaN(query.__v)) query.__v = 0;
6
6
  else query.__v = query.__v + 1;
@@ -11,6 +11,6 @@ async function update_default(query) {
11
11
  return this.client.executeWithRetry(operation, `update on ${this.name}`);
12
12
  }
13
13
  //#endregion
14
- export { update_default as default };
14
+ export { updateOP as default };
15
15
 
16
16
  //# sourceMappingURL=update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","names":[],"sources":["../../src/operations/update.ts"],"sourcesContent":["import type Model from \"../model\"\nimport fillDefaults from \"../utils/fillDefaults\"\n//import typeChecker from \"../utils/typeChecker\"\n\nexport default async function (this: Model, query: any) {\n\tquery = fillDefaults(this.schema, query)\n\n\t//typeChecker(this, query)\n\n\tif (typeof query.__v !== \"undefined\") {\n\t\tif (Number.isNaN(query.__v)) {\n\t\t\tquery.__v = 0\n\t\t} else {\n\t\t\tquery.__v = query.__v + 1\n\t\t}\n\t}\n\n\tconst operation = async () => {\n\t\tawait this.mapper.update(query)\n\t\treturn this._wrap(query)\n\t}\n\n\treturn this.client.executeWithRetry(operation, `update on ${this.name}`)\n}\n"],"mappings":";;AAIA,eAAA,eAA4C,OAAY;AACvD,SAAQ,aAAa,KAAK,QAAQ,MAAM;AAIxC,KAAI,OAAO,MAAM,QAAQ,YACxB,KAAI,OAAO,MAAM,MAAM,IAAI,CAC1B,OAAM,MAAM;KAEZ,OAAM,MAAM,MAAM,MAAM;CAI1B,MAAM,YAAY,YAAY;AAC7B,QAAM,KAAK,OAAO,OAAO,MAAM;AAC/B,SAAO,KAAK,MAAM,MAAM;;AAGzB,QAAO,KAAK,OAAO,iBAAiB,WAAW,aAAa,KAAK,OAAO"}
1
+ {"version":3,"file":"update.js","names":[],"sources":["../../src/operations/update.ts"],"sourcesContent":["import type Model from \"../model\"\nimport fillDefaults from \"../utils/fillDefaults\"\n//import typeChecker from \"../utils/typeChecker\"\n\nexport default async function updateOP<TDoc>(\n\tthis: Model<any, TDoc>,\n\tquery: any,\n) {\n\tquery = fillDefaults(this.schema, query)\n\n\t//typeChecker(this, query)\n\n\tif (typeof query.__v !== \"undefined\") {\n\t\tif (Number.isNaN(query.__v)) {\n\t\t\tquery.__v = 0\n\t\t} else {\n\t\t\tquery.__v = query.__v + 1\n\t\t}\n\t}\n\n\tconst operation = async () => {\n\t\tawait this.mapper.update(query)\n\t\treturn this._wrap(query)\n\t}\n\n\treturn this.client.executeWithRetry(operation, `update on ${this.name}`)\n}\n"],"mappings":";;AAIA,eAA8B,SAE7B,OACC;AACD,SAAQ,aAAa,KAAK,QAAQ,MAAM;AAIxC,KAAI,OAAO,MAAM,QAAQ,YACxB,KAAI,OAAO,MAAM,MAAM,IAAI,CAC1B,OAAM,MAAM;KAEZ,OAAM,MAAM,MAAM,MAAM;CAI1B,MAAM,YAAY,YAAY;AAC7B,QAAM,KAAK,OAAO,OAAO,MAAM;AAC/B,SAAO,KAAK,MAAM,MAAM;;AAGzB,QAAO,KAAK,OAAO,iBAAiB,WAAW,aAAa,KAAK,OAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ragestudio/scylla-odm",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "An ODM for ScyllaDB",
5
5
  "license": "MIT",
6
6
  "author": "RageStudio",
package/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Schema } from "./schema/index.js";
2
- import { Result } from "./result/index.js";
2
+ import { Document } from "./document/index.js";
3
3
 
4
4
  //#region src/types.d.ts
5
5
  type ClientConfig = {
@@ -57,18 +57,16 @@ interface Column<T> {
57
57
  type?: ColumnTypes | string;
58
58
  required?: boolean;
59
59
  }
60
- type InferRawData<T> = { [K in keyof T as K extends `$${string}` ? never : K]: T[K] extends Column<infer U> ? U : T[K] };
61
- type InferDocument<S> = S extends Schema<infer T> ? InferRawData<T> : never;
62
- type DocumentResult<TDoc> = Result<TDoc> & TDoc;
63
- type QueryOptions = {
64
- raw?: boolean;
65
- };
66
- type OrderBy<TDoc> = { [K in keyof TDoc]?: "asc" | "desc" };
67
60
  type Query<TDoc> = { [K in keyof TDoc]?: TDoc[K] | QueryOperators<TDoc[K]> } & {
68
61
  $and?: Query<TDoc>[];
69
62
  $limit?: number;
70
- $orderby?: OrderBy<TDoc>;
63
+ $orderby?: { [K in keyof TDoc]?: "asc" | "desc" };
64
+ };
65
+ type QueryOptions = {
66
+ raw?: boolean;
71
67
  };
68
+ type Doc<TDoc = any> = Document<TDoc> & TDoc;
69
+ type InferDoc<S> = S extends Schema<infer T> ? { [K in keyof T as K extends `$${string}` ? never : K]: T[K] extends Column<infer U> ? U : T[K] } : any;
72
70
  //#endregion
73
- export { ClientConfig, Column, ColumnTypes, DocumentResult, InferDocument, InferRawData, OrderBy, Query, QueryOperators, QueryOptions, TableKeys };
71
+ export { ClientConfig, Column, ColumnTypes, Doc, InferDoc, Query, QueryOperators, QueryOptions, TableKeys };
74
72
  //# sourceMappingURL=types.d.ts.map
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["import Result from \"./result\"\nimport { Schema } from \"./schema\"\n\nexport type ClientConfig = {\n\tmodelsPath?: string\n\tcontactPoints?: string[]\n\tlocalDataCenter?: string\n\tkeyspace?: string\n\tport?: number\n\tmaxRetries?: number\n\tretryDelay?: number\n\tpooling?: {\n\t\tcoreConnectionsPerHost?: Record<string, number>\n\t\tmaxRequestsPerConnection?: number\n\t}\n}\n\nexport enum ColumnTypes {\n\tAscii = \"ascii\",\n\tBigint = \"bigint\",\n\tBlob = \"blob\",\n\tBoolean = \"boolean\",\n\tCounter = \"counter\",\n\tDate = \"date\",\n\tDecimal = \"decimal\",\n\tDouble = \"double\",\n\tDuration = \"duration\",\n\tFloat = \"float\",\n\tFrozen = \"frozen\",\n\tInet = \"inet\",\n\tInt = \"int\",\n\tList = \"list\",\n\tMap = \"map\",\n\tSet = \"set\",\n\tSmallint = \"smallint\",\n\tText = \"text\",\n\tTime = \"time\",\n\tTimestamp = \"timestamp\",\n\tTimeuuid = \"timeuuid\",\n\tTinyint = \"tinyint\",\n\tTuple = \"tuple\",\n\tUuid = \"uuid\",\n\tVarchar = \"varchar\",\n\tVarint = \"varint\",\n}\n\nexport type QueryOperators<TValue> = {\n\t$eq?: TValue\n\t$ne?: TValue\n\t$in?: TValue[]\n\t$gt?: TValue\n\t$gte?: TValue\n\t$lt?: TValue\n\t$lte?: TValue\n}\n\nexport type TableKeys = (string | TableKeys)[]\n\nexport interface Column<T> {\n\ttype?: ColumnTypes | string\n\trequired?: boolean\n}\n\nexport type InferRawData<T> = {\n\t[K in keyof T as K extends `$${string}` ? never : K]: T[K] extends Column<\n\t\tinfer U\n\t>\n\t\t? U\n\t\t: T[K]\n}\n\nexport type InferDocument<S> =\n\tS extends Schema<infer T> ? InferRawData<T> : never\n\n// export type DocOf<M extends Model<any>> =\n// \tM extends Model<infer S> ? InferDocument<S> : never\n\nexport type DocumentResult<TDoc> = Result<TDoc> & TDoc\n\nexport type QueryOptions = {\n\traw?: boolean\n}\n\nexport type OrderBy<TDoc> = { [K in keyof TDoc]?: \"asc\" | \"desc\" }\n\nexport type Query<TDoc> = {\n\t[K in keyof TDoc]?: TDoc[K] | QueryOperators<TDoc[K]>\n} & {\n\t$and?: Query<TDoc>[]\n\t$limit?: number\n\t$orderby?: OrderBy<TDoc>\n}\n"],"mappings":";AAiBA,IAAY,cAAL,yBAAA,aAAA;AACN,aAAA,WAAA;AACA,aAAA,YAAA;AACA,aAAA,UAAA;AACA,aAAA,aAAA;AACA,aAAA,aAAA;AACA,aAAA,UAAA;AACA,aAAA,aAAA;AACA,aAAA,YAAA;AACA,aAAA,cAAA;AACA,aAAA,WAAA;AACA,aAAA,YAAA;AACA,aAAA,UAAA;AACA,aAAA,SAAA;AACA,aAAA,UAAA;AACA,aAAA,SAAA;AACA,aAAA,SAAA;AACA,aAAA,cAAA;AACA,aAAA,UAAA;AACA,aAAA,UAAA;AACA,aAAA,eAAA;AACA,aAAA,cAAA;AACA,aAAA,aAAA;AACA,aAAA,WAAA;AACA,aAAA,UAAA;AACA,aAAA,aAAA;AACA,aAAA,YAAA;;KACA"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../src/types.ts"],"sourcesContent":["import Document from \"./document\"\nimport { Schema } from \"./schema\"\n\nexport type ClientConfig = {\n\tmodelsPath?: string\n\tcontactPoints?: string[]\n\tlocalDataCenter?: string\n\tkeyspace?: string\n\tport?: number\n\tmaxRetries?: number\n\tretryDelay?: number\n\tpooling?: {\n\t\tcoreConnectionsPerHost?: Record<string, number>\n\t\tmaxRequestsPerConnection?: number\n\t}\n}\n\nexport enum ColumnTypes {\n\tAscii = \"ascii\",\n\tBigint = \"bigint\",\n\tBlob = \"blob\",\n\tBoolean = \"boolean\",\n\tCounter = \"counter\",\n\tDate = \"date\",\n\tDecimal = \"decimal\",\n\tDouble = \"double\",\n\tDuration = \"duration\",\n\tFloat = \"float\",\n\tFrozen = \"frozen\",\n\tInet = \"inet\",\n\tInt = \"int\",\n\tList = \"list\",\n\tMap = \"map\",\n\tSet = \"set\",\n\tSmallint = \"smallint\",\n\tText = \"text\",\n\tTime = \"time\",\n\tTimestamp = \"timestamp\",\n\tTimeuuid = \"timeuuid\",\n\tTinyint = \"tinyint\",\n\tTuple = \"tuple\",\n\tUuid = \"uuid\",\n\tVarchar = \"varchar\",\n\tVarint = \"varint\",\n}\n\nexport type QueryOperators<TValue> = {\n\t$eq?: TValue\n\t$ne?: TValue\n\t$in?: TValue[]\n\t$gt?: TValue\n\t$gte?: TValue\n\t$lt?: TValue\n\t$lte?: TValue\n}\n\nexport type TableKeys = (string | TableKeys)[]\n\nexport interface Column<T> {\n\ttype?: ColumnTypes | string\n\trequired?: boolean\n}\n\nexport type Query<TDoc> = {\n\t[K in keyof TDoc]?: TDoc[K] | QueryOperators<TDoc[K]>\n} & {\n\t$and?: Query<TDoc>[]\n\t$limit?: number\n\t$orderby?: { [K in keyof TDoc]?: \"asc\" | \"desc\" }\n}\n\nexport type QueryOptions = {\n\traw?: boolean\n}\n\nexport type Doc<TDoc = any> = Document<TDoc> & TDoc\n\nexport type InferDoc<S> =\n\tS extends Schema<infer T>\n\t\t? {\n\t\t\t\t[K in keyof T as K extends `$${string}`\n\t\t\t\t\t? never\n\t\t\t\t\t: K]: T[K] extends Column<infer U> ? U : T[K]\n\t\t\t}\n\t\t: any\n"],"mappings":";AAiBA,IAAY,cAAL,yBAAA,aAAA;AACN,aAAA,WAAA;AACA,aAAA,YAAA;AACA,aAAA,UAAA;AACA,aAAA,aAAA;AACA,aAAA,aAAA;AACA,aAAA,UAAA;AACA,aAAA,aAAA;AACA,aAAA,YAAA;AACA,aAAA,cAAA;AACA,aAAA,WAAA;AACA,aAAA,YAAA;AACA,aAAA,UAAA;AACA,aAAA,SAAA;AACA,aAAA,UAAA;AACA,aAAA,SAAA;AACA,aAAA,SAAA;AACA,aAAA,cAAA;AACA,aAAA,UAAA;AACA,aAAA,UAAA;AACA,aAAA,eAAA;AACA,aAAA,cAAA;AACA,aAAA,aAAA;AACA,aAAA,WAAA;AACA,aAAA,UAAA;AACA,aAAA,aAAA;AACA,aAAA,YAAA;;KACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"loadModels.js","names":[],"sources":["../../src/utils/loadModels.ts"],"sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\n\nexport default async (fromPath: string): Promise<any[]> => {\n\tif (typeof fromPath !== \"string\") {\n\t\treturn []\n\t}\n\n\tif (!fs.existsSync(fromPath)) {\n\t\tconsole.warn(\n\t\t\t`Cannot load models from [${fromPath}] case this path does not exist`,\n\t\t)\n\t\treturn []\n\t}\n\n\tlet mods = []\n\n\tlet files = await fs.promises.readdir(fromPath)\n\n\tfiles = files.filter((file) => file.endsWith(\".js\") || file.endsWith(\".ts\"))\n\n\tfor await (const file of files) {\n\t\tconst name = file.replace(\".js\", \"\")\n\t\tconst file_path = path.join(fromPath, file)\n\n\t\ttry {\n\t\t\tlet mod = await import(file_path)\n\n\t\t\tmod = mod.default\n\n\t\t\tmods.push(mod)\n\t\t} catch (error) {\n\t\t\tconsole.error(`Failed to load model [${name}]:`, error)\n\t\t\tcontinue\n\t\t}\n\t}\n\n\treturn mods\n}\n"],"mappings":";;;AAGA,IAAA,qBAAe,OAAO,aAAqC;AAC1D,KAAI,OAAO,aAAa,SACvB,QAAO,EAAE;AAGV,KAAI,CAAC,GAAG,WAAW,SAAS,EAAE;AAC7B,UAAQ,KACP,4BAA4B,SAAS,iCACrC;AACD,SAAO,EAAE;;CAGV,IAAI,OAAO,EAAE;CAEb,IAAI,QAAQ,MAAM,GAAG,SAAS,QAAQ,SAAS;AAE/C,SAAQ,MAAM,QAAQ,SAAS,KAAK,SAAS,MAAM,IAAI,KAAK,SAAS,MAAM,CAAC;AAE5E,YAAW,MAAM,QAAQ,OAAO;EAC/B,MAAM,OAAO,KAAK,QAAQ,OAAO,GAAG;EACpC,MAAM,YAAY,KAAK,KAAK,UAAU,KAAK;AAE3C,MAAI;GACH,IAAI,MAAM,MAAM,OAAO;AAEvB,SAAM,IAAI;AAEV,QAAK,KAAK,IAAI;WACN,OAAO;AACf,WAAQ,MAAM,yBAAyB,KAAK,KAAK,MAAM;AACvD;;;AAIF,QAAO"}
1
+ {"version":3,"file":"loadModels.js","names":[],"sources":["../../src/utils/loadModels.ts"],"sourcesContent":["import fs from \"node:fs\"\nimport path from \"node:path\"\n\nexport default async (fromPath: string): Promise<any[]> => {\n\tif (typeof fromPath !== \"string\") {\n\t\treturn []\n\t}\n\n\tif (!fs.existsSync(fromPath)) {\n\t\tconsole.warn(\n\t\t\t`Cannot load models from [${fromPath}] case this path does not exist`,\n\t\t)\n\t\treturn []\n\t}\n\n\tlet mods: any[] = []\n\n\tlet files = await fs.promises.readdir(fromPath)\n\n\tfiles = files.filter((file) => file.endsWith(\".js\") || file.endsWith(\".ts\"))\n\n\tfor await (const file of files) {\n\t\tconst name = file.replace(\".js\", \"\")\n\t\tconst file_path = path.join(fromPath, file)\n\n\t\ttry {\n\t\t\tlet mod = await import(file_path)\n\n\t\t\tmod = mod.default\n\n\t\t\tmods.push(mod)\n\t\t} catch (error) {\n\t\t\tconsole.error(`Failed to load model [${name}]:`, error)\n\t\t\tcontinue\n\t\t}\n\t}\n\n\treturn mods\n}\n"],"mappings":";;;AAGA,IAAA,qBAAe,OAAO,aAAqC;AAC1D,KAAI,OAAO,aAAa,SACvB,QAAO,EAAE;AAGV,KAAI,CAAC,GAAG,WAAW,SAAS,EAAE;AAC7B,UAAQ,KACP,4BAA4B,SAAS,iCACrC;AACD,SAAO,EAAE;;CAGV,IAAI,OAAc,EAAE;CAEpB,IAAI,QAAQ,MAAM,GAAG,SAAS,QAAQ,SAAS;AAE/C,SAAQ,MAAM,QAAQ,SAAS,KAAK,SAAS,MAAM,IAAI,KAAK,SAAS,MAAM,CAAC;AAE5E,YAAW,MAAM,QAAQ,OAAO;EAC/B,MAAM,OAAO,KAAK,QAAQ,OAAO,GAAG;EACpC,MAAM,YAAY,KAAK,KAAK,UAAU,KAAK;AAE3C,MAAI;GACH,IAAI,MAAM,MAAM,OAAO;AAEvB,SAAM,IAAI;AAEV,QAAK,KAAK,IAAI;WACN,OAAO;AACf,WAAQ,MAAM,yBAAyB,KAAK,KAAK,MAAM;AACvD;;;AAIF,QAAO"}
package/result/index.d.ts DELETED
@@ -1,17 +0,0 @@
1
- import { Model } from "../model/index.js";
2
- import { DocumentResult } from "../types.js";
3
- import * as _$cassandra_driver0 from "cassandra-driver";
4
-
5
- //#region src/result/index.d.ts
6
- declare class Result<TDoc = any> {
7
- constructor(data: TDoc, model: Model<TDoc>);
8
- _model: Model<TDoc>;
9
- save(): Promise<DocumentResult<TDoc>>;
10
- delete(): Promise<_$cassandra_driver0.mapping.Result<any>>;
11
- toRaw(): TDoc;
12
- isValid(): boolean;
13
- getChangedFields(original: Partial<TDoc>): (keyof TDoc)[];
14
- }
15
- //#endregion
16
- export { Result, Result as default };
17
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/result/index.ts"],"sourcesContent":["import type { Model } from \"../model\"\n//import typeChecker from \"../utils/typeChecker\"\n\nexport class Result<TDoc = any> {\n\tconstructor(data: TDoc, model: Model<TDoc>) {\n\t\tif (data == null) {\n\t\t\tthrow new Error(\"Cannot create Result with null or undefined data\")\n\t\t}\n\n\t\tif (typeof data !== \"object\" || Array.isArray(data)) {\n\t\t\tthrow new Error(\"Result data must be an object\")\n\t\t}\n\n\t\tObject.assign(this, data)\n\n\t\tObject.defineProperty(this, \"_model\", {\n\t\t\tvalue: model,\n\t\t\tenumerable: false,\n\t\t\twritable: false,\n\t\t\tconfigurable: false,\n\t\t})\n\t}\n\n\t_model: Model<TDoc>\n\n\tasync save() {\n\t\ttry {\n\t\t\tconst data = this.toRaw()\n\n\t\t\t//typeChecker(this._model, data)\n\n\t\t\treturn await this._model.update(data as any)\n\t\t} catch (error: any) {\n\t\t\tthrow new Error(`Failed to save result: ${error.message}`)\n\t\t}\n\t}\n\n\tasync delete() {\n\t\ttry {\n\t\t\treturn await this._model.delete(this.toRaw() as any)\n\t\t} catch (error: any) {\n\t\t\tthrow new Error(`Failed to delete result: ${error.message}`)\n\t\t}\n\t}\n\n\ttoRaw(): TDoc {\n\t\tconst raw: any = {}\n\n\t\tfor (const key in this) {\n\t\t\tif (key === \"_model\") continue\n\n\t\t\tif (this.propertyIsEnumerable(key)) {\n\t\t\t\tconst value = (this as any)[key]\n\n\t\t\t\ttry {\n\t\t\t\t\tJSON.stringify(value)\n\t\t\t\t\traw[key] = value\n\t\t\t\t} catch (error) {\n\t\t\t\t\traw[key] = String(value)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn raw as TDoc\n\t}\n\n\tisValid(): boolean {\n\t\ttry {\n\t\t\t//typeChecker(this._model, this.toRaw())\n\t\t\treturn true\n\t\t} catch {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tgetChangedFields(original: Partial<TDoc>): (keyof TDoc)[] {\n\t\tconst current = this.toRaw() as Record<string, any>\n\t\tconst changed: (keyof TDoc)[] = []\n\n\t\tfor (const key in current) {\n\t\t\tif (!(key in original) || current[key] !== (original as any)[key]) {\n\t\t\t\tchanged.push(key as keyof TDoc)\n\t\t\t}\n\t\t}\n\n\t\treturn changed\n\t}\n}\n\nexport default Result\n"],"mappings":";AAGA,IAAa,SAAb,MAAgC;CAC/B,YAAY,MAAY,OAAoB;AAC3C,MAAI,QAAQ,KACX,OAAM,IAAI,MAAM,mDAAmD;AAGpE,MAAI,OAAO,SAAS,YAAY,MAAM,QAAQ,KAAK,CAClD,OAAM,IAAI,MAAM,gCAAgC;AAGjD,SAAO,OAAO,MAAM,KAAK;AAEzB,SAAO,eAAe,MAAM,UAAU;GACrC,OAAO;GACP,YAAY;GACZ,UAAU;GACV,cAAc;GACd,CAAC;;CAGH;CAEA,MAAM,OAAO;AACZ,MAAI;GACH,MAAM,OAAO,KAAK,OAAO;AAIzB,UAAO,MAAM,KAAK,OAAO,OAAO,KAAY;WACpC,OAAY;AACpB,SAAM,IAAI,MAAM,0BAA0B,MAAM,UAAU;;;CAI5D,MAAM,SAAS;AACd,MAAI;AACH,UAAO,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO,CAAQ;WAC5C,OAAY;AACpB,SAAM,IAAI,MAAM,4BAA4B,MAAM,UAAU;;;CAI9D,QAAc;EACb,MAAM,MAAW,EAAE;AAEnB,OAAK,MAAM,OAAO,MAAM;AACvB,OAAI,QAAQ,SAAU;AAEtB,OAAI,KAAK,qBAAqB,IAAI,EAAE;IACnC,MAAM,QAAS,KAAa;AAE5B,QAAI;AACH,UAAK,UAAU,MAAM;AACrB,SAAI,OAAO;aACH,OAAO;AACf,SAAI,OAAO,OAAO,MAAM;;;;AAK3B,SAAO;;CAGR,UAAmB;AAClB,MAAI;AAEH,UAAO;UACA;AACP,UAAO;;;CAIT,iBAAiB,UAAyC;EACzD,MAAM,UAAU,KAAK,OAAO;EAC5B,MAAM,UAA0B,EAAE;AAElC,OAAK,MAAM,OAAO,QACjB,KAAI,EAAE,OAAO,aAAa,QAAQ,SAAU,SAAiB,KAC5D,SAAQ,KAAK,IAAkB;AAIjC,SAAO"}