@sfutureapps/db-sdk 0.3.20 → 0.3.22

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.20",
3
+ "version": "0.3.22",
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
  };
@@ -120,10 +120,11 @@ export class QueryBuilder {
120
120
  distinct: this._distinct,
121
121
  group: this._group,
122
122
  having: this._having,
123
+ single: this._single,
123
124
  };
124
125
 
125
- if (this._page !== null) payload.page = this._page;
126
- if (this._offset !== null) payload.offset = this._offset;
126
+ if (this._page != null) payload.page = this._page;
127
+ if (this._offset != null) payload.offset = this._offset;
127
128
 
128
129
  const res = await post({ endpoint: "/db/v1/query", data: payload });
129
130
 
@@ -131,7 +132,7 @@ export class QueryBuilder {
131
132
 
132
133
  if (this._single) {
133
134
  const first = Array.isArray(res.data) ? (res.data[ 0 ] ?? null) : null;
134
- return { data: first, error: null, count: res.count ?? null, meta: res.meta ?? null };
135
+ return { data: first, error: null, total_rows: res.total_rows ?? null, paginate: res.paginate ?? null };
135
136
  }
136
137
 
137
138
  return res;