@sfutureapps/db-sdk 0.3.19 → 0.3.21

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sfutureapps/db-sdk",
3
- "version": "0.3.19",
3
+ "version": "0.3.21",
4
4
  "description": "SfutureApps JS SDK for ThinkPHP DB Gateway (MySQL)",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/index.d.ts CHANGED
@@ -1,4 +1,100 @@
1
1
  // src/index.d.ts
2
+ export type QueryError = {
3
+ message: string;
4
+ [key: string]: any;
5
+ };
6
+
7
+ export type QueryMeta = {
8
+ page?: number;
9
+ limit?: number;
10
+ offset?: number;
11
+ total?: number;
12
+ last_page?: number;
13
+ [key: string]: any;
14
+ };
15
+
16
+ export type QueryResponse<T> = {
17
+ data: T;
18
+ error: QueryError | null;
19
+ count?: number | null;
20
+ meta?: QueryMeta | null;
21
+ [key: string]: any;
22
+ };
23
+
24
+ export type OrderOptions = {
25
+ ascending?: boolean;
26
+ };
27
+
28
+ export class QueryBuilder<T = any, TSingle extends boolean = false> {
29
+ constructor(table: string);
30
+
31
+ // ---- select ----
32
+ select(columns?: "*" | string | string[]): QueryBuilder<T, TSingle>;
33
+
34
+ // ---- filters ----
35
+ eq(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
36
+ neq(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
37
+ gt(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
38
+ gte(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
39
+ lt(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
40
+ lte(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
41
+
42
+ like(col: keyof T | string, val: string): QueryBuilder<T, TSingle>;
43
+ notLike(col: keyof T | string, val: string): QueryBuilder<T, TSingle>;
44
+
45
+ between(col: keyof T | string, range: [any, any]): QueryBuilder<T, TSingle>;
46
+ notBetween(col: keyof T | string, range: [any, any]): QueryBuilder<T, TSingle>;
47
+
48
+ in(col: keyof T | string, vals: any[]): QueryBuilder<T, TSingle>;
49
+ notIn(col: keyof T | string, vals: any[]): QueryBuilder<T, TSingle>;
50
+
51
+ isNull(col: keyof T | string): QueryBuilder<T, TSingle>;
52
+ notNull(col: keyof T | string): QueryBuilder<T, TSingle>;
53
+
54
+ regexp(col: keyof T | string, pattern: string): QueryBuilder<T, TSingle>;
55
+ notRegexp(col: keyof T | string, pattern: string): QueryBuilder<T, TSingle>;
56
+
57
+ whereTime(col: keyof T | string, op: string, time: any): QueryBuilder<T, TSingle>;
58
+ betweenTime(col: keyof T | string, range: [any, any]): QueryBuilder<T, TSingle>;
59
+
60
+ findInSet(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
61
+
62
+ // ---- order ----
63
+ order(col: keyof T | string, opts?: OrderOptions): QueryBuilder<T, TSingle>;
64
+
65
+ // ---- pagination ----
66
+ limit(n: number): QueryBuilder<T, TSingle>;
67
+ page(page: number, limit: number): QueryBuilder<T, TSingle>;
68
+ range(from: number, to: number): QueryBuilder<T, TSingle>;
69
+ withCount(): QueryBuilder<T, TSingle>;
70
+ single(): QueryBuilder<T, true>;
71
+
72
+ // ---- group/having/distinct ----
73
+ distinct(): QueryBuilder<T, TSingle>;
74
+ group(cols: string | string[]): QueryBuilder<T, TSingle>;
75
+ havingEq(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
76
+ havingGte(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
77
+ havingLte(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
78
+ havingGt(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
79
+ havingLt(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
80
+ havingNeq(col: keyof T | string, val: any): QueryBuilder<T, TSingle>;
81
+
82
+ // ---- execute ----
83
+ execute(): Promise<QueryResponse<TSingle extends true ? T | null : T[]>>;
84
+
85
+ // ---- aggregates ----
86
+ count(field?: keyof T | string): Promise<QueryResponse<number>>;
87
+ sum(field: keyof T | string): Promise<QueryResponse<number>>;
88
+ avg(field: keyof T | string): Promise<QueryResponse<number>>;
89
+ min(field: keyof T | string): Promise<QueryResponse<number>>;
90
+ max(field: keyof T | string): Promise<QueryResponse<number>>;
91
+
92
+ // ---- write ----
93
+ insert(values: Partial<T> | Array<Partial<T>> | Record<string, any>): Promise<QueryResponse<any>>;
94
+ update(values: Partial<T> | Record<string, any>): Promise<QueryResponse<any>>;
95
+ delete(): Promise<QueryResponse<any>>;
96
+ }
97
+
2
98
  export function createClient(
3
99
  baseUrl: string,
4
100
  opts?: {
@@ -7,5 +103,5 @@ export function createClient(
7
103
  headers?: Record<string, string>;
8
104
  }
9
105
  ): {
10
- from<T = any>(table: string): any;
106
+ from<T = any>(table: string): QueryBuilder<T, false>;
11
107
  };
@@ -113,7 +113,7 @@ export class QueryBuilder {
113
113
  const payload = {
114
114
  table: this.tableName,
115
115
  select: this._select,
116
- filters: this._filters,
116
+ filters: JSON.stringify(this._filters),
117
117
  order: this._order,
118
118
  limit: this._limit ?? 20,
119
119
  count: this._withCount,