@ragestudio/scylla-odm 0.4.0 → 0.5.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/dist/client.d.mts +23 -0
- package/dist/client.mjs +112 -0
- package/dist/client.mjs.map +1 -0
- package/dist/cql_gen/create_table.d.mts +7 -0
- package/dist/cql_gen/create_table.mjs +38 -0
- package/dist/cql_gen/create_table.mjs.map +1 -0
- package/dist/index.d.mts +4 -113
- package/dist/index.mjs +5 -515
- package/dist/index.mjs.map +1 -1
- package/dist/model/index.d.mts +38 -0
- package/dist/model/index.mjs +44 -0
- package/dist/model/index.mjs.map +1 -0
- package/dist/operations/countAll.d.mts +7 -0
- package/dist/operations/countAll.mjs +16 -0
- package/dist/operations/countAll.mjs.map +1 -0
- package/dist/operations/delete.d.mts +8 -0
- package/dist/operations/delete.mjs +11 -0
- package/dist/operations/delete.mjs.map +1 -0
- package/dist/operations/find.d.mts +8 -0
- package/dist/operations/find.mjs +22 -0
- package/dist/operations/find.mjs.map +1 -0
- package/dist/operations/findOne.d.mts +8 -0
- package/dist/operations/findOne.mjs +17 -0
- package/dist/operations/findOne.mjs.map +1 -0
- package/dist/operations/sync.d.mts +7 -0
- package/dist/operations/sync.mjs +16 -0
- package/dist/operations/sync.mjs.map +1 -0
- package/dist/operations/tableExists.d.mts +7 -0
- package/dist/operations/tableExists.mjs +19 -0
- package/dist/operations/tableExists.mjs.map +1 -0
- package/dist/operations/update.d.mts +7 -0
- package/dist/operations/update.mjs +18 -0
- package/dist/operations/update.mjs.map +1 -0
- package/dist/result/index.d.mts +17 -0
- package/dist/result/index.mjs +66 -0
- package/dist/result/index.mjs.map +1 -0
- package/dist/schema/index.d.mts +13 -0
- package/dist/schema/index.mjs +16 -0
- package/dist/schema/index.mjs.map +1 -0
- package/dist/types.d.mts +74 -0
- package/dist/types.mjs +34 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils/buildMapper.d.mts +5 -0
- package/dist/utils/buildMapper.mjs +13 -0
- package/dist/utils/buildMapper.mjs.map +1 -0
- package/dist/utils/fillDefaults.d.mts +5 -0
- package/dist/utils/fillDefaults.mjs +18 -0
- package/dist/utils/fillDefaults.mjs.map +1 -0
- package/dist/utils/loadModels.d.mts +5 -0
- package/dist/utils/loadModels.mjs +30 -0
- package/dist/utils/loadModels.mjs.map +1 -0
- package/dist/utils/queryParser.d.mts +9 -0
- package/dist/utils/queryParser.mjs +94 -0
- package/dist/utils/queryParser.mjs.map +1 -0
- package/dist/utils/typeChecker.d.mts +7 -0
- package/dist/utils/typeChecker.mjs +55 -0
- package/dist/utils/typeChecker.mjs.map +1 -0
- package/package.json +40 -4
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Result } from "../result/index.mjs";
|
|
2
|
+
import fillDefaults from "../utils/fillDefaults.mjs";
|
|
3
|
+
import findOne_default from "../operations/findOne.mjs";
|
|
4
|
+
import findOP from "../operations/find.mjs";
|
|
5
|
+
import update_default from "../operations/update.mjs";
|
|
6
|
+
import delete_default from "../operations/delete.mjs";
|
|
7
|
+
import countAll_default from "../operations/countAll.mjs";
|
|
8
|
+
import tableExists_default from "../operations/tableExists.mjs";
|
|
9
|
+
import syncOP from "../operations/sync.mjs";
|
|
10
|
+
//#region src/model/index.ts
|
|
11
|
+
var Model = class {
|
|
12
|
+
name;
|
|
13
|
+
schema;
|
|
14
|
+
driver;
|
|
15
|
+
mapper;
|
|
16
|
+
constructor(name, schema) {
|
|
17
|
+
this.name = name;
|
|
18
|
+
this.schema = schema;
|
|
19
|
+
if (!Array.isArray(this.schema.keys)) throw new Error(`[${this.name}] model has missing "keys" array`);
|
|
20
|
+
if (!this.schema.table_name) throw new Error(`[${this.name}] model has missing "table_name"`);
|
|
21
|
+
if (!this.schema.fields || typeof this.schema.fields !== "object") throw new Error(`[${this.name}] model has missing or invalid "fields"`);
|
|
22
|
+
}
|
|
23
|
+
create = (data) => this._wrap(data);
|
|
24
|
+
find = findOP.bind(this);
|
|
25
|
+
findOne = findOne_default.bind(this);
|
|
26
|
+
update = update_default.bind(this);
|
|
27
|
+
delete = delete_default.bind(this);
|
|
28
|
+
countAll = countAll_default.bind(this);
|
|
29
|
+
_sync = syncOP.bind(this);
|
|
30
|
+
_tableExists = tableExists_default.bind(this);
|
|
31
|
+
_wrap(row) {
|
|
32
|
+
if (!row) return null;
|
|
33
|
+
row = fillDefaults(this.schema, row);
|
|
34
|
+
return new Result(row, this);
|
|
35
|
+
}
|
|
36
|
+
_connect(driver) {
|
|
37
|
+
this.driver = driver;
|
|
38
|
+
this.mapper = driver.mapper.forModel(this.name);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
//#endregion
|
|
42
|
+
export { Model, Model as default };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["findOneOP","updateOP","deleteOP","countAllOP","tableExistsOP"],"sources":["../../src/model/index.ts"],"sourcesContent":["import ScyllaClient 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\tdriver: ScyllaClient\n\tmapper: mapping.ModelMapper\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\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\t_connect(driver: ScyllaClient) {\n\t\tthis.driver = driver\n\t\tthis.mapper = driver.mapper.forModel(this.name)\n\t}\n}\n\nexport default Model\n"],"mappings":";;;;;;;;;;AAkBA,IAAa,QAAb,MAA+B;CAC9B;CACA;CACA;CACA;CAEA,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;CAElD,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;;CAGnC,SAAS,QAAsB;AAC9B,OAAK,SAAS;AACd,OAAK,SAAS,OAAO,OAAO,SAAS,KAAK,KAAK"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/operations/countAll.ts
|
|
2
|
+
async function countAll_default(timeoutMs = 6e4) {
|
|
3
|
+
const cql = `SELECT COUNT(1) FROM ${this.driver.config.keyspace}.${this.schema.table_name}`;
|
|
4
|
+
const queryOptions = {
|
|
5
|
+
prepare: true,
|
|
6
|
+
readTimeout: timeoutMs
|
|
7
|
+
};
|
|
8
|
+
const operation = async () => {
|
|
9
|
+
return (await this.driver.client.execute(cql, [], queryOptions)).rows[0].count.toNumber();
|
|
10
|
+
};
|
|
11
|
+
return this.driver.executeWithRetry(operation, `countAll on ${this.name}`);
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { countAll_default as default };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=countAll.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"countAll.mjs","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.driver.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.driver.client.execute(cql, [], queryOptions)\n\n\t\treturn result.rows[0].count.toNumber()\n\t}\n\n\treturn this.driver.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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Model } from "../model/index.mjs";
|
|
2
|
+
import * as _$cassandra_driver0 from "cassandra-driver";
|
|
3
|
+
|
|
4
|
+
//#region src/operations/delete.d.ts
|
|
5
|
+
declare function export_default(this: Model, query: any): Promise<_$cassandra_driver0.mapping.Result<any>>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { export_default as default };
|
|
8
|
+
//# sourceMappingURL=delete.d.mts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/operations/delete.ts
|
|
2
|
+
async function delete_default(query) {
|
|
3
|
+
const operation = async () => {
|
|
4
|
+
return await this.mapper.remove(query);
|
|
5
|
+
};
|
|
6
|
+
return this.driver.executeWithRetry(operation, `delete on ${this.name}`);
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { delete_default as default };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=delete.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.mjs","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.driver.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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Model } from "../model/index.mjs";
|
|
2
|
+
import { Query, QueryOptions } from "../types.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/operations/find.d.ts
|
|
5
|
+
declare function findOP<TDoc>(this: Model<TDoc>, query?: Query<TDoc>, options?: QueryOptions): Promise<any[]>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { findOP as default };
|
|
8
|
+
//# sourceMappingURL=find.d.mts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import queryParser from "../utils/queryParser.mjs";
|
|
2
|
+
//#region src/operations/find.ts
|
|
3
|
+
async function findOP(query = {}, options) {
|
|
4
|
+
const { $limit, $orderby, ...rest } = query;
|
|
5
|
+
let parsedQuery = queryParser(this, rest);
|
|
6
|
+
const docInfo = {};
|
|
7
|
+
if ($limit !== void 0) {
|
|
8
|
+
if (typeof $limit !== "number" || $limit <= 0) throw new TypeError(`{$limit} operator must be a number greater than 0`);
|
|
9
|
+
docInfo.limit = $limit;
|
|
10
|
+
}
|
|
11
|
+
if ($orderby !== void 0) docInfo.orderBy = $orderby;
|
|
12
|
+
const operation = async () => {
|
|
13
|
+
const rows = (await this.mapper.find(parsedQuery, docInfo)).toArray();
|
|
14
|
+
if (options?.raw === true) return rows;
|
|
15
|
+
return rows.map((row) => this._wrap(row));
|
|
16
|
+
};
|
|
17
|
+
return this.driver.executeWithRetry(operation, `find on ${this.name}`);
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { findOP as default };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=find.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.mjs","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.driver.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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Model } from "../model/index.mjs";
|
|
2
|
+
import { QueryOptions } from "../types.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/operations/findOne.d.ts
|
|
5
|
+
declare function export_default(this: Model, query: any, options?: QueryOptions): Promise<any>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { export_default as default };
|
|
8
|
+
//# sourceMappingURL=findOne.d.mts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import queryParser from "../utils/queryParser.mjs";
|
|
2
|
+
//#region src/operations/findOne.ts
|
|
3
|
+
function findOne_default(query, options) {
|
|
4
|
+
query = queryParser(this, query);
|
|
5
|
+
const operation = async () => {
|
|
6
|
+
let result = await this.mapper.get(query);
|
|
7
|
+
if (!result) return null;
|
|
8
|
+
result = this._wrap(result);
|
|
9
|
+
if (options?.raw === true) return result.toRaw();
|
|
10
|
+
return result;
|
|
11
|
+
};
|
|
12
|
+
return this.driver.executeWithRetry(operation, `findOne on ${this.name}`);
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { findOne_default as default };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=findOne.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findOne.mjs","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.driver.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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import create_table_default from "../cql_gen/create_table.mjs";
|
|
2
|
+
//#region src/operations/sync.ts
|
|
3
|
+
async function syncOP() {
|
|
4
|
+
if (await this._tableExists()) return;
|
|
5
|
+
try {
|
|
6
|
+
await this.driver.client.execute(create_table_default(this));
|
|
7
|
+
console.log(`Table "${this.schema.table_name}" created successfully`);
|
|
8
|
+
} catch (error) {
|
|
9
|
+
console.error(`Failed to create table "${this.schema.table_name}":`, error);
|
|
10
|
+
throw error;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { syncOP as default };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=sync.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.mjs","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.driver.client.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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/operations/tableExists.ts
|
|
2
|
+
async function tableExists_default() {
|
|
3
|
+
const cql = `
|
|
4
|
+
SELECT table_name
|
|
5
|
+
FROM system_schema.tables
|
|
6
|
+
WHERE keyspace_name = ?
|
|
7
|
+
AND table_name = ?
|
|
8
|
+
`;
|
|
9
|
+
try {
|
|
10
|
+
return (await this.driver.client.execute(cql, [this.driver.config.keyspace, this.schema.table_name], { prepare: true })).rows.length > 0;
|
|
11
|
+
} catch (error) {
|
|
12
|
+
console.error(`Failed to check if table "${this.schema.table_name}" exists:`, error);
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { tableExists_default as default };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=tableExists.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tableExists.mjs","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.driver.client.execute(\n\t\t\tcql,\n\t\t\t[this.driver.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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import typeChecker from "../utils/typeChecker.mjs";
|
|
2
|
+
import fillDefaults from "../utils/fillDefaults.mjs";
|
|
3
|
+
//#region src/operations/update.ts
|
|
4
|
+
async function update_default(query) {
|
|
5
|
+
query = fillDefaults(this.schema, query);
|
|
6
|
+
typeChecker(this, query);
|
|
7
|
+
if (typeof query.__v !== "undefined") if (Number.isNaN(query.__v)) query.__v = 0;
|
|
8
|
+
else query.__v = query.__v + 1;
|
|
9
|
+
const operation = async () => {
|
|
10
|
+
await this.mapper.update(query);
|
|
11
|
+
return this._wrap(query);
|
|
12
|
+
};
|
|
13
|
+
return this.driver.executeWithRetry(operation, `update on ${this.name}`);
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { update_default as default };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=update.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.mjs","names":[],"sources":["../../src/operations/update.ts"],"sourcesContent":["import type Model from \"../model\"\nimport fillDefaults from \"../utils/fillDefaults\"\nimport typeChecker from \"../utils/typeChecker\"\n\nexport default async function (this: Model, query: any) {\n\tquery = fillDefaults(this.schema, query)\n\n\ttypeChecker(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.driver.executeWithRetry(operation, `update on ${this.name}`)\n}\n"],"mappings":";;;AAIA,eAAA,eAA4C,OAAY;AACvD,SAAQ,aAAa,KAAK,QAAQ,MAAM;AAExC,aAAY,MAAM,MAAM;AAExB,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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Model } from "../model/index.mjs";
|
|
2
|
+
import { DocumentResult } from "../types.mjs";
|
|
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.mts.map
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import typeChecker from "../utils/typeChecker.mjs";
|
|
2
|
+
//#region src/result/index.ts
|
|
3
|
+
var Result = class {
|
|
4
|
+
constructor(data, model) {
|
|
5
|
+
if (data == null) throw new Error("Cannot create Result with null or undefined data");
|
|
6
|
+
if (typeof data !== "object" || Array.isArray(data)) throw new Error("Result data must be an object");
|
|
7
|
+
Object.assign(this, data);
|
|
8
|
+
Object.defineProperty(this, "_model", {
|
|
9
|
+
value: model,
|
|
10
|
+
enumerable: false,
|
|
11
|
+
writable: false,
|
|
12
|
+
configurable: false
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
_model;
|
|
16
|
+
async save() {
|
|
17
|
+
try {
|
|
18
|
+
const data = this.toRaw();
|
|
19
|
+
typeChecker(this._model, data);
|
|
20
|
+
return await this._model.update(data);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
throw new Error(`Failed to save result: ${error.message}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async delete() {
|
|
26
|
+
try {
|
|
27
|
+
return await this._model.delete(this.toRaw());
|
|
28
|
+
} catch (error) {
|
|
29
|
+
throw new Error(`Failed to delete result: ${error.message}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
toRaw() {
|
|
33
|
+
const raw = {};
|
|
34
|
+
for (const key in this) {
|
|
35
|
+
if (key === "_model") continue;
|
|
36
|
+
if (this.propertyIsEnumerable(key)) {
|
|
37
|
+
const value = this[key];
|
|
38
|
+
try {
|
|
39
|
+
JSON.stringify(value);
|
|
40
|
+
raw[key] = value;
|
|
41
|
+
} catch (error) {
|
|
42
|
+
raw[key] = String(value);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return raw;
|
|
47
|
+
}
|
|
48
|
+
isValid() {
|
|
49
|
+
try {
|
|
50
|
+
typeChecker(this._model, this.toRaw());
|
|
51
|
+
return true;
|
|
52
|
+
} catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
getChangedFields(original) {
|
|
57
|
+
const current = this.toRaw();
|
|
58
|
+
const changed = [];
|
|
59
|
+
for (const key in current) if (!(key in original) || current[key] !== original[key]) changed.push(key);
|
|
60
|
+
return changed;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
//#endregion
|
|
64
|
+
export { Result, Result as default };
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/result/index.ts"],"sourcesContent":["import type { Model } from \"../model\"\nimport 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\ttypeChecker(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\ttypeChecker(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;AAEzB,eAAY,KAAK,QAAQ,KAAK;AAE9B,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;AACH,eAAY,KAAK,QAAQ,KAAK,OAAO,CAAC;AACtC,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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TableKeys } from "../types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/schema/index.d.ts
|
|
4
|
+
declare class Schema<T> {
|
|
5
|
+
readonly table_name: string;
|
|
6
|
+
readonly clustering_order: any;
|
|
7
|
+
readonly keys: TableKeys;
|
|
8
|
+
readonly fields: T;
|
|
9
|
+
constructor(params: any, fields: T);
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { Schema, Schema as default };
|
|
13
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/schema/index.ts
|
|
2
|
+
var Schema = class {
|
|
3
|
+
table_name;
|
|
4
|
+
clustering_order;
|
|
5
|
+
keys;
|
|
6
|
+
fields;
|
|
7
|
+
constructor(params, fields) {
|
|
8
|
+
this.table_name = params.table_name;
|
|
9
|
+
this.keys = params.keys;
|
|
10
|
+
this.fields = fields;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { Schema, Schema as default };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/schema/index.ts"],"sourcesContent":["import { TableKeys } from \"../types\"\n\nexport class Schema<T> {\n\tpublic readonly table_name: string\n\tpublic readonly clustering_order: any\n\tpublic readonly keys: TableKeys\n\tpublic readonly fields: T\n\n\tconstructor(params: any, fields: T) {\n\t\tthis.table_name = params.table_name\n\t\tthis.keys = params.keys\n\t\tthis.fields = fields\n\t}\n}\n\nexport default Schema\n"],"mappings":";AAEA,IAAa,SAAb,MAAuB;CACtB;CACA;CACA;CACA;CAEA,YAAY,QAAa,QAAW;AACnC,OAAK,aAAa,OAAO;AACzB,OAAK,OAAO,OAAO;AACnB,OAAK,SAAS"}
|
package/dist/types.d.mts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Schema } from "./schema/index.mjs";
|
|
2
|
+
import { Result } from "./result/index.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/types.d.ts
|
|
5
|
+
type ClientConfig = {
|
|
6
|
+
modelsPath?: string;
|
|
7
|
+
contactPoints?: string[];
|
|
8
|
+
localDataCenter?: string;
|
|
9
|
+
keyspace?: string;
|
|
10
|
+
port?: number;
|
|
11
|
+
maxRetries?: number;
|
|
12
|
+
retryDelay?: number;
|
|
13
|
+
pooling?: {
|
|
14
|
+
coreConnectionsPerHost?: Record<string, number>;
|
|
15
|
+
maxRequestsPerConnection?: number;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
declare enum ColumnTypes {
|
|
19
|
+
Ascii = "ascii",
|
|
20
|
+
Bigint = "bigint",
|
|
21
|
+
Blob = "blob",
|
|
22
|
+
Boolean = "boolean",
|
|
23
|
+
Counter = "counter",
|
|
24
|
+
Date = "date",
|
|
25
|
+
Decimal = "decimal",
|
|
26
|
+
Double = "double",
|
|
27
|
+
Duration = "duration",
|
|
28
|
+
Float = "float",
|
|
29
|
+
Frozen = "frozen",
|
|
30
|
+
Inet = "inet",
|
|
31
|
+
Int = "int",
|
|
32
|
+
List = "list",
|
|
33
|
+
Map = "map",
|
|
34
|
+
Set = "set",
|
|
35
|
+
Smallint = "smallint",
|
|
36
|
+
Text = "text",
|
|
37
|
+
Time = "time",
|
|
38
|
+
Timestamp = "timestamp",
|
|
39
|
+
Timeuuid = "timeuuid",
|
|
40
|
+
Tinyint = "tinyint",
|
|
41
|
+
Tuple = "tuple",
|
|
42
|
+
Uuid = "uuid",
|
|
43
|
+
Varchar = "varchar",
|
|
44
|
+
Varint = "varint"
|
|
45
|
+
}
|
|
46
|
+
type QueryOperators<TValue> = {
|
|
47
|
+
$eq?: TValue;
|
|
48
|
+
$ne?: TValue;
|
|
49
|
+
$in?: TValue[];
|
|
50
|
+
$gt?: TValue;
|
|
51
|
+
$gte?: TValue;
|
|
52
|
+
$lt?: TValue;
|
|
53
|
+
$lte?: TValue;
|
|
54
|
+
};
|
|
55
|
+
type TableKeys = (string | TableKeys)[];
|
|
56
|
+
interface Column<T> {
|
|
57
|
+
type?: ColumnTypes | string;
|
|
58
|
+
required?: boolean;
|
|
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
|
+
type Query<TDoc> = { [K in keyof TDoc]?: TDoc[K] | QueryOperators<TDoc[K]> } & {
|
|
68
|
+
$and?: Query<TDoc>[];
|
|
69
|
+
$limit?: number;
|
|
70
|
+
$orderby?: OrderBy<TDoc>;
|
|
71
|
+
};
|
|
72
|
+
//#endregion
|
|
73
|
+
export { ClientConfig, Column, ColumnTypes, DocumentResult, InferDocument, InferRawData, OrderBy, Query, QueryOperators, QueryOptions, TableKeys };
|
|
74
|
+
//# sourceMappingURL=types.d.mts.map
|
package/dist/types.mjs
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
//#region src/types.ts
|
|
2
|
+
let ColumnTypes = /* @__PURE__ */ function(ColumnTypes) {
|
|
3
|
+
ColumnTypes["Ascii"] = "ascii";
|
|
4
|
+
ColumnTypes["Bigint"] = "bigint";
|
|
5
|
+
ColumnTypes["Blob"] = "blob";
|
|
6
|
+
ColumnTypes["Boolean"] = "boolean";
|
|
7
|
+
ColumnTypes["Counter"] = "counter";
|
|
8
|
+
ColumnTypes["Date"] = "date";
|
|
9
|
+
ColumnTypes["Decimal"] = "decimal";
|
|
10
|
+
ColumnTypes["Double"] = "double";
|
|
11
|
+
ColumnTypes["Duration"] = "duration";
|
|
12
|
+
ColumnTypes["Float"] = "float";
|
|
13
|
+
ColumnTypes["Frozen"] = "frozen";
|
|
14
|
+
ColumnTypes["Inet"] = "inet";
|
|
15
|
+
ColumnTypes["Int"] = "int";
|
|
16
|
+
ColumnTypes["List"] = "list";
|
|
17
|
+
ColumnTypes["Map"] = "map";
|
|
18
|
+
ColumnTypes["Set"] = "set";
|
|
19
|
+
ColumnTypes["Smallint"] = "smallint";
|
|
20
|
+
ColumnTypes["Text"] = "text";
|
|
21
|
+
ColumnTypes["Time"] = "time";
|
|
22
|
+
ColumnTypes["Timestamp"] = "timestamp";
|
|
23
|
+
ColumnTypes["Timeuuid"] = "timeuuid";
|
|
24
|
+
ColumnTypes["Tinyint"] = "tinyint";
|
|
25
|
+
ColumnTypes["Tuple"] = "tuple";
|
|
26
|
+
ColumnTypes["Uuid"] = "uuid";
|
|
27
|
+
ColumnTypes["Varchar"] = "varchar";
|
|
28
|
+
ColumnTypes["Varint"] = "varint";
|
|
29
|
+
return ColumnTypes;
|
|
30
|
+
}({});
|
|
31
|
+
//#endregion
|
|
32
|
+
export { ColumnTypes };
|
|
33
|
+
|
|
34
|
+
//# sourceMappingURL=types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","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\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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/utils/buildMapper.ts
|
|
2
|
+
var buildMapper_default = (map) => {
|
|
3
|
+
return map.reduce((obj, { name, schema }) => {
|
|
4
|
+
return {
|
|
5
|
+
...obj,
|
|
6
|
+
[name]: { tables: [schema.table_name] }
|
|
7
|
+
};
|
|
8
|
+
}, {});
|
|
9
|
+
};
|
|
10
|
+
//#endregion
|
|
11
|
+
export { buildMapper_default as default };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=buildMapper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildMapper.mjs","names":[],"sources":["../../src/utils/buildMapper.ts"],"sourcesContent":["export default (map) => {\n\treturn map.reduce((obj, { name, schema }) => {\n\t\treturn {\n\t\t\t...obj,\n\t\t\t[name]: {\n\t\t\t\ttables: [schema.table_name],\n\t\t\t},\n\t\t}\n\t}, {})\n}\n"],"mappings":";AAAA,IAAA,uBAAgB,QAAQ;AACvB,QAAO,IAAI,QAAQ,KAAK,EAAE,MAAM,aAAa;AAC5C,SAAO;GACN,GAAG;IACF,OAAO,EACP,QAAQ,CAAC,OAAO,WAAW,EAC3B;GACD;IACC,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/utils/fillDefaults.ts
|
|
2
|
+
function fillDefaults(schema, data) {
|
|
3
|
+
const defaults = schema.options?.defaults;
|
|
4
|
+
if (!defaults || Object.keys(defaults).length === 0) return data;
|
|
5
|
+
let needsDefaults = false;
|
|
6
|
+
for (const key in defaults) if (data[key] == null) {
|
|
7
|
+
needsDefaults = true;
|
|
8
|
+
break;
|
|
9
|
+
}
|
|
10
|
+
if (!needsDefaults) return data;
|
|
11
|
+
const result = Object.assign({}, data);
|
|
12
|
+
for (const key in defaults) if (result[key] == null) result[key] = defaults[key];
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { fillDefaults as default };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=fillDefaults.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fillDefaults.mjs","names":[],"sources":["../../src/utils/fillDefaults.ts"],"sourcesContent":["export default function fillDefaults(schema: any, data: any) {\n\tconst defaults = schema.options?.defaults\n\n\tif (!defaults || Object.keys(defaults).length === 0) {\n\t\treturn data\n\t}\n\n\tlet needsDefaults = false\n\n\tfor (const key in defaults) {\n\t\tif (data[key] == null) {\n\t\t\tneedsDefaults = true\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif (!needsDefaults) {\n\t\treturn data\n\t}\n\n\tconst result = Object.assign({}, data)\n\n\tfor (const key in defaults) {\n\t\tif (result[key] == null) {\n\t\t\tresult[key] = defaults[key]\n\t\t}\n\t}\n\n\treturn result\n}\n"],"mappings":";AAAA,SAAwB,aAAa,QAAa,MAAW;CAC5D,MAAM,WAAW,OAAO,SAAS;AAEjC,KAAI,CAAC,YAAY,OAAO,KAAK,SAAS,CAAC,WAAW,EACjD,QAAO;CAGR,IAAI,gBAAgB;AAEpB,MAAK,MAAM,OAAO,SACjB,KAAI,KAAK,QAAQ,MAAM;AACtB,kBAAgB;AAChB;;AAIF,KAAI,CAAC,cACJ,QAAO;CAGR,MAAM,SAAS,OAAO,OAAO,EAAE,EAAE,KAAK;AAEtC,MAAK,MAAM,OAAO,SACjB,KAAI,OAAO,QAAQ,KAClB,QAAO,OAAO,SAAS;AAIzB,QAAO"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
//#region src/utils/loadModels.ts
|
|
4
|
+
var loadModels_default = async (fromPath) => {
|
|
5
|
+
if (typeof fromPath !== "string") return [];
|
|
6
|
+
if (!fs.existsSync(fromPath)) {
|
|
7
|
+
console.warn(`Cannot load models from [${fromPath}] case this path does not exist`);
|
|
8
|
+
return [];
|
|
9
|
+
}
|
|
10
|
+
let mods = [];
|
|
11
|
+
let files = await fs.promises.readdir(fromPath);
|
|
12
|
+
files = files.filter((file) => file.endsWith(".js") || file.endsWith(".ts"));
|
|
13
|
+
for await (const file of files) {
|
|
14
|
+
const name = file.replace(".js", "");
|
|
15
|
+
const file_path = path.join(fromPath, file);
|
|
16
|
+
try {
|
|
17
|
+
let mod = await import(file_path);
|
|
18
|
+
mod = mod.default;
|
|
19
|
+
mods.push(mod);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
console.error(`Failed to load model [${name}]:`, error);
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return mods;
|
|
26
|
+
};
|
|
27
|
+
//#endregion
|
|
28
|
+
export { loadModels_default as default };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=loadModels.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadModels.mjs","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"}
|