blackcat.js-database 1.0.5 → 1.0.6
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/README.md +6 -1
- package/dist/{index.js → index.cjs} +103 -96
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.mts +33 -28
- package/dist/index.d.ts +33 -28
- package/dist/index.mjs +102 -95
- package/dist/index.mjs.map +1 -1
- package/package.json +13 -13
- package/dist/index.js.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -113,7 +113,32 @@ interface DatabaseConfiguration {
|
|
|
113
113
|
*/
|
|
114
114
|
type Maybe<T> = Exclude<T | null, undefined>;
|
|
115
115
|
/**
|
|
116
|
+
* Utility type dùng để trích xuất kiểu phần tử bên trong một mảng.
|
|
117
|
+
* @hidden
|
|
118
|
+
*
|
|
119
|
+
* Nếu `T` là một mảng (`U[]`) thì kiểu trả về sẽ là `U` (kiểu phần tử).
|
|
120
|
+
* Nếu `T` không phải là mảng thì kiểu trả về chính là `T`.
|
|
121
|
+
*
|
|
122
|
+
* Thường được sử dụng trong các generic type để làm việc
|
|
123
|
+
* với kiểu dữ liệu của phần tử trong mảng một cách an toàn.
|
|
124
|
+
*
|
|
125
|
+
* @typeParam T - Kiểu dữ liệu đầu vào, có thể là mảng hoặc bất kỳ kiểu nào.
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* type A = ArrayElement<string[]>;
|
|
129
|
+
* // Kết quả: string
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* type B = ArrayElement<number[]>;
|
|
133
|
+
* // Kết quả: number
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* type C = ArrayElement<string>;
|
|
137
|
+
* // Kết quả: string
|
|
116
138
|
*
|
|
139
|
+
* @example
|
|
140
|
+
* type D = ArrayElement<(number | string)[]>;
|
|
141
|
+
* // Kết quả: number | string
|
|
117
142
|
*/
|
|
118
143
|
type ArrayElement<T> = T extends (infer U)[] ? U : T;
|
|
119
144
|
/**
|
|
@@ -310,26 +335,6 @@ type IsAny<T> = 0 extends (1 & T) ? true : false;
|
|
|
310
335
|
* const c: Status = "custom"; // vẫn hợp lệ
|
|
311
336
|
*/
|
|
312
337
|
type AutocompletableString<S extends string> = S | (string & {});
|
|
313
|
-
/**
|
|
314
|
-
* Trích xuất **key đầu tiên** từ một object path dạng chuỗi.
|
|
315
|
-
* @hidden
|
|
316
|
-
*
|
|
317
|
-
* Ví dụ với path `"member.user.id"` thì key đầu tiên sẽ là `"member"`.
|
|
318
|
-
*
|
|
319
|
-
* Type này thường được dùng để xác định **object cấp cao nhất**
|
|
320
|
-
* khi làm việc với các path dạng `dot notation`.
|
|
321
|
-
*
|
|
322
|
-
* @typeParam TKey - Object path cần trích xuất key đầu tiên.
|
|
323
|
-
*
|
|
324
|
-
* @example
|
|
325
|
-
* type A = FirstObjectKey<"user.profile.name">;
|
|
326
|
-
* // Kết quả: "user"
|
|
327
|
-
*
|
|
328
|
-
* @example
|
|
329
|
-
* type B = FirstObjectKey<"settings">;
|
|
330
|
-
* // Kết quả: "settings"
|
|
331
|
-
*/
|
|
332
|
-
type FirstObjectKey<TKey extends ObjectPath<string, any>> = TKey extends `${infer Key}.${infer _Rest}` ? Key : TKey extends string ? TKey : never;
|
|
333
338
|
/**
|
|
334
339
|
* Đại diện cho **đường dẫn (path)** tới một thuộc tính trong object,
|
|
335
340
|
* hỗ trợ truy cập các property lồng nhau bằng `dot notation`.
|
|
@@ -401,7 +406,7 @@ type ObjectPath<T, TKey extends keyof T = keyof T> = IsAny<T> extends true ? str
|
|
|
401
406
|
* type C = ObjectValue<User, "profile">;
|
|
402
407
|
* // Kết quả: { name: string; age: number }
|
|
403
408
|
*/
|
|
404
|
-
type ObjectValue<T, P extends ObjectPath<T> | AutocompletableString<ObjectPath<T>>> = T extends
|
|
409
|
+
type ObjectValue<T, P extends ObjectPath<T> | AutocompletableString<ObjectPath<T>>> = T extends string | number | boolean | bigint | symbol | null | undefined | Date | Function ? T : T extends (infer U)[] ? ObjectValue<U, P>[] : P extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? ObjectValue<T[Key], Rest> : never : P extends keyof T ? T[P] : never;
|
|
405
410
|
|
|
406
411
|
/**
|
|
407
412
|
* Class Database cung cấp API thao tác dữ liệu dạng key-path
|
|
@@ -481,7 +486,7 @@ declare class Database<V = any> {
|
|
|
481
486
|
* console.log(data.users);
|
|
482
487
|
* ```
|
|
483
488
|
*/
|
|
484
|
-
all
|
|
489
|
+
all(): Promise<V>;
|
|
485
490
|
/**
|
|
486
491
|
* Lấy giá trị từ database theo key-path.
|
|
487
492
|
*
|
|
@@ -510,7 +515,7 @@ declare class Database<V = any> {
|
|
|
510
515
|
* const all = await db.get();
|
|
511
516
|
* ```
|
|
512
517
|
*/
|
|
513
|
-
get<P extends AutocompletableString<ObjectPath<V>>>(key?: AutocompletableString<P>): Promise<Maybe<ObjectValue<V, P
|
|
518
|
+
get<P extends AutocompletableString<ObjectPath<V>>>(key?: AutocompletableString<P>): Promise<Maybe<ObjectValue<V, P>>>;
|
|
514
519
|
/**
|
|
515
520
|
* Tìm và trả về một bản ghi đầu tiên khớp với điều kiện trong database.
|
|
516
521
|
*
|
|
@@ -547,7 +552,7 @@ declare class Database<V = any> {
|
|
|
547
552
|
* });
|
|
548
553
|
* ```
|
|
549
554
|
*/
|
|
550
|
-
findOne<P extends AutocompletableString<ObjectPath<V>>>(key?: AutocompletableString<P>, query?: Partial<ArrayElement<ObjectValue<V, P>>>): Promise<Maybe<ObjectValue<V, P
|
|
555
|
+
findOne<P extends AutocompletableString<ObjectPath<V>>>(key?: AutocompletableString<P>, query?: Partial<ArrayElement<ObjectValue<V, P>>>): Promise<Maybe<ObjectValue<V, P>>>;
|
|
551
556
|
/**
|
|
552
557
|
* Kiểm tra một key-path có tồn tại trong database hay không.
|
|
553
558
|
*
|
|
@@ -576,7 +581,7 @@ declare class Database<V = any> {
|
|
|
576
581
|
* @param {AutocompletableString<P>} key Đường dẫn dữ liệu cần gán giá trị.
|
|
577
582
|
* @param {ObjectValue<V, P>} value Giá trị mới.
|
|
578
583
|
*
|
|
579
|
-
* @returns {
|
|
584
|
+
* @returns {void} Giá trị vừa được set hoặc object root nếu value là object.
|
|
580
585
|
*
|
|
581
586
|
* @example
|
|
582
587
|
* ```ts
|
|
@@ -588,7 +593,7 @@ declare class Database<V = any> {
|
|
|
588
593
|
* await db.set("config.prefix", "!");
|
|
589
594
|
* ```
|
|
590
595
|
*/
|
|
591
|
-
set<P extends AutocompletableString<ObjectPath<V>>>(key: AutocompletableString<P>, value: ObjectValue<V, P>): Promise<
|
|
596
|
+
set<P extends AutocompletableString<ObjectPath<V>>>(key: AutocompletableString<P>, value: ObjectValue<V, P>): Promise<void>;
|
|
592
597
|
/**
|
|
593
598
|
* Xóa một key khỏi database.
|
|
594
599
|
*
|
|
@@ -717,7 +722,7 @@ declare class Database<V = any> {
|
|
|
717
722
|
* - `REQUIRED_PARAMETER_MISSING` nếu key không được cung cấp
|
|
718
723
|
* - `INVALID_TYPE` nếu key không phải string
|
|
719
724
|
*/
|
|
720
|
-
update<P extends AutocompletableString<ObjectPath<V>>>(key: AutocompletableString<P>, value: ObjectValue<V, P>): Promise<If<IsObject<V>, ObjectValue<V,
|
|
725
|
+
update<P extends AutocompletableString<ObjectPath<V>>>(key: AutocompletableString<P>, value: ObjectValue<V, P>): Promise<If<IsObject<V>, ObjectValue<V, P>>>;
|
|
721
726
|
/**
|
|
722
727
|
* Cộng thêm giá trị vào một key dạng number.
|
|
723
728
|
*
|
|
@@ -1519,4 +1524,4 @@ declare class MongoDriver implements DatabaseDriver {
|
|
|
1519
1524
|
delete(): Promise<boolean>;
|
|
1520
1525
|
}
|
|
1521
1526
|
|
|
1522
|
-
export { Database, JSONDriver, MemoryDriver, MongoDriver, SQLiteDriver };
|
|
1527
|
+
export { Database, type DatabaseDriver, JSONDriver, MemoryDriver, MongoDriver, SQLiteDriver };
|
package/dist/index.d.ts
CHANGED
|
@@ -113,7 +113,32 @@ interface DatabaseConfiguration {
|
|
|
113
113
|
*/
|
|
114
114
|
type Maybe<T> = Exclude<T | null, undefined>;
|
|
115
115
|
/**
|
|
116
|
+
* Utility type dùng để trích xuất kiểu phần tử bên trong một mảng.
|
|
117
|
+
* @hidden
|
|
118
|
+
*
|
|
119
|
+
* Nếu `T` là một mảng (`U[]`) thì kiểu trả về sẽ là `U` (kiểu phần tử).
|
|
120
|
+
* Nếu `T` không phải là mảng thì kiểu trả về chính là `T`.
|
|
121
|
+
*
|
|
122
|
+
* Thường được sử dụng trong các generic type để làm việc
|
|
123
|
+
* với kiểu dữ liệu của phần tử trong mảng một cách an toàn.
|
|
124
|
+
*
|
|
125
|
+
* @typeParam T - Kiểu dữ liệu đầu vào, có thể là mảng hoặc bất kỳ kiểu nào.
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* type A = ArrayElement<string[]>;
|
|
129
|
+
* // Kết quả: string
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* type B = ArrayElement<number[]>;
|
|
133
|
+
* // Kết quả: number
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* type C = ArrayElement<string>;
|
|
137
|
+
* // Kết quả: string
|
|
116
138
|
*
|
|
139
|
+
* @example
|
|
140
|
+
* type D = ArrayElement<(number | string)[]>;
|
|
141
|
+
* // Kết quả: number | string
|
|
117
142
|
*/
|
|
118
143
|
type ArrayElement<T> = T extends (infer U)[] ? U : T;
|
|
119
144
|
/**
|
|
@@ -310,26 +335,6 @@ type IsAny<T> = 0 extends (1 & T) ? true : false;
|
|
|
310
335
|
* const c: Status = "custom"; // vẫn hợp lệ
|
|
311
336
|
*/
|
|
312
337
|
type AutocompletableString<S extends string> = S | (string & {});
|
|
313
|
-
/**
|
|
314
|
-
* Trích xuất **key đầu tiên** từ một object path dạng chuỗi.
|
|
315
|
-
* @hidden
|
|
316
|
-
*
|
|
317
|
-
* Ví dụ với path `"member.user.id"` thì key đầu tiên sẽ là `"member"`.
|
|
318
|
-
*
|
|
319
|
-
* Type này thường được dùng để xác định **object cấp cao nhất**
|
|
320
|
-
* khi làm việc với các path dạng `dot notation`.
|
|
321
|
-
*
|
|
322
|
-
* @typeParam TKey - Object path cần trích xuất key đầu tiên.
|
|
323
|
-
*
|
|
324
|
-
* @example
|
|
325
|
-
* type A = FirstObjectKey<"user.profile.name">;
|
|
326
|
-
* // Kết quả: "user"
|
|
327
|
-
*
|
|
328
|
-
* @example
|
|
329
|
-
* type B = FirstObjectKey<"settings">;
|
|
330
|
-
* // Kết quả: "settings"
|
|
331
|
-
*/
|
|
332
|
-
type FirstObjectKey<TKey extends ObjectPath<string, any>> = TKey extends `${infer Key}.${infer _Rest}` ? Key : TKey extends string ? TKey : never;
|
|
333
338
|
/**
|
|
334
339
|
* Đại diện cho **đường dẫn (path)** tới một thuộc tính trong object,
|
|
335
340
|
* hỗ trợ truy cập các property lồng nhau bằng `dot notation`.
|
|
@@ -401,7 +406,7 @@ type ObjectPath<T, TKey extends keyof T = keyof T> = IsAny<T> extends true ? str
|
|
|
401
406
|
* type C = ObjectValue<User, "profile">;
|
|
402
407
|
* // Kết quả: { name: string; age: number }
|
|
403
408
|
*/
|
|
404
|
-
type ObjectValue<T, P extends ObjectPath<T> | AutocompletableString<ObjectPath<T>>> = T extends
|
|
409
|
+
type ObjectValue<T, P extends ObjectPath<T> | AutocompletableString<ObjectPath<T>>> = T extends string | number | boolean | bigint | symbol | null | undefined | Date | Function ? T : T extends (infer U)[] ? ObjectValue<U, P>[] : P extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? ObjectValue<T[Key], Rest> : never : P extends keyof T ? T[P] : never;
|
|
405
410
|
|
|
406
411
|
/**
|
|
407
412
|
* Class Database cung cấp API thao tác dữ liệu dạng key-path
|
|
@@ -481,7 +486,7 @@ declare class Database<V = any> {
|
|
|
481
486
|
* console.log(data.users);
|
|
482
487
|
* ```
|
|
483
488
|
*/
|
|
484
|
-
all
|
|
489
|
+
all(): Promise<V>;
|
|
485
490
|
/**
|
|
486
491
|
* Lấy giá trị từ database theo key-path.
|
|
487
492
|
*
|
|
@@ -510,7 +515,7 @@ declare class Database<V = any> {
|
|
|
510
515
|
* const all = await db.get();
|
|
511
516
|
* ```
|
|
512
517
|
*/
|
|
513
|
-
get<P extends AutocompletableString<ObjectPath<V>>>(key?: AutocompletableString<P>): Promise<Maybe<ObjectValue<V, P
|
|
518
|
+
get<P extends AutocompletableString<ObjectPath<V>>>(key?: AutocompletableString<P>): Promise<Maybe<ObjectValue<V, P>>>;
|
|
514
519
|
/**
|
|
515
520
|
* Tìm và trả về một bản ghi đầu tiên khớp với điều kiện trong database.
|
|
516
521
|
*
|
|
@@ -547,7 +552,7 @@ declare class Database<V = any> {
|
|
|
547
552
|
* });
|
|
548
553
|
* ```
|
|
549
554
|
*/
|
|
550
|
-
findOne<P extends AutocompletableString<ObjectPath<V>>>(key?: AutocompletableString<P>, query?: Partial<ArrayElement<ObjectValue<V, P>>>): Promise<Maybe<ObjectValue<V, P
|
|
555
|
+
findOne<P extends AutocompletableString<ObjectPath<V>>>(key?: AutocompletableString<P>, query?: Partial<ArrayElement<ObjectValue<V, P>>>): Promise<Maybe<ObjectValue<V, P>>>;
|
|
551
556
|
/**
|
|
552
557
|
* Kiểm tra một key-path có tồn tại trong database hay không.
|
|
553
558
|
*
|
|
@@ -576,7 +581,7 @@ declare class Database<V = any> {
|
|
|
576
581
|
* @param {AutocompletableString<P>} key Đường dẫn dữ liệu cần gán giá trị.
|
|
577
582
|
* @param {ObjectValue<V, P>} value Giá trị mới.
|
|
578
583
|
*
|
|
579
|
-
* @returns {
|
|
584
|
+
* @returns {void} Giá trị vừa được set hoặc object root nếu value là object.
|
|
580
585
|
*
|
|
581
586
|
* @example
|
|
582
587
|
* ```ts
|
|
@@ -588,7 +593,7 @@ declare class Database<V = any> {
|
|
|
588
593
|
* await db.set("config.prefix", "!");
|
|
589
594
|
* ```
|
|
590
595
|
*/
|
|
591
|
-
set<P extends AutocompletableString<ObjectPath<V>>>(key: AutocompletableString<P>, value: ObjectValue<V, P>): Promise<
|
|
596
|
+
set<P extends AutocompletableString<ObjectPath<V>>>(key: AutocompletableString<P>, value: ObjectValue<V, P>): Promise<void>;
|
|
592
597
|
/**
|
|
593
598
|
* Xóa một key khỏi database.
|
|
594
599
|
*
|
|
@@ -717,7 +722,7 @@ declare class Database<V = any> {
|
|
|
717
722
|
* - `REQUIRED_PARAMETER_MISSING` nếu key không được cung cấp
|
|
718
723
|
* - `INVALID_TYPE` nếu key không phải string
|
|
719
724
|
*/
|
|
720
|
-
update<P extends AutocompletableString<ObjectPath<V>>>(key: AutocompletableString<P>, value: ObjectValue<V, P>): Promise<If<IsObject<V>, ObjectValue<V,
|
|
725
|
+
update<P extends AutocompletableString<ObjectPath<V>>>(key: AutocompletableString<P>, value: ObjectValue<V, P>): Promise<If<IsObject<V>, ObjectValue<V, P>>>;
|
|
721
726
|
/**
|
|
722
727
|
* Cộng thêm giá trị vào một key dạng number.
|
|
723
728
|
*
|
|
@@ -1519,4 +1524,4 @@ declare class MongoDriver implements DatabaseDriver {
|
|
|
1519
1524
|
delete(): Promise<boolean>;
|
|
1520
1525
|
}
|
|
1521
1526
|
|
|
1522
|
-
export { Database, JSONDriver, MemoryDriver, MongoDriver, SQLiteDriver };
|
|
1527
|
+
export { Database, type DatabaseDriver, JSONDriver, MemoryDriver, MongoDriver, SQLiteDriver };
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
3
|
|
|
6
4
|
// src/utils/isObject.function.ts
|
|
7
5
|
var isObject = /* @__PURE__ */ __name((item) => !Array.isArray(item) && item !== null && typeof item === "object", "isObject");
|
|
@@ -30,7 +28,10 @@ var errors = {
|
|
|
30
28
|
INVALID_KEY: "{1}"
|
|
31
29
|
};
|
|
32
30
|
var createTypesArray = /* @__PURE__ */ __name((...elements) => `[${elements.map((element) => typeOf(element))}]`, "createTypesArray");
|
|
33
|
-
var
|
|
31
|
+
var BlackCatError = class extends Error {
|
|
32
|
+
static {
|
|
33
|
+
__name(this, "BlackCatError");
|
|
34
|
+
}
|
|
34
35
|
/**
|
|
35
36
|
* Creates a BlackCatError instance.
|
|
36
37
|
* @param {string} errorCode Quick Mongo error code.
|
|
@@ -47,11 +48,12 @@ var _BlackCatError = class _BlackCatError extends Error {
|
|
|
47
48
|
this.name = `BlackCatError [${code}]`;
|
|
48
49
|
}
|
|
49
50
|
};
|
|
50
|
-
__name(_BlackCatError, "BlackCatError");
|
|
51
|
-
var BlackCatError = _BlackCatError;
|
|
52
51
|
|
|
53
52
|
// src/utils/TypedObject.ts
|
|
54
|
-
var
|
|
53
|
+
var TypedObject = class {
|
|
54
|
+
static {
|
|
55
|
+
__name(this, "TypedObject");
|
|
56
|
+
}
|
|
55
57
|
/**
|
|
56
58
|
* Lấy danh sách key của object với type chính xác.
|
|
57
59
|
*
|
|
@@ -159,11 +161,25 @@ var _TypedObject = class _TypedObject {
|
|
|
159
161
|
return Object.entries(obj || {});
|
|
160
162
|
}
|
|
161
163
|
};
|
|
162
|
-
__name(_TypedObject, "TypedObject");
|
|
163
|
-
var TypedObject = _TypedObject;
|
|
164
164
|
|
|
165
165
|
// src/Database.ts
|
|
166
|
-
var
|
|
166
|
+
var Database = class {
|
|
167
|
+
static {
|
|
168
|
+
__name(this, "Database");
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Storage driver được sử dụng để đọc và ghi dữ liệu database.
|
|
172
|
+
*
|
|
173
|
+
* Driver phải implement interface `DatabaseDriver`.
|
|
174
|
+
*
|
|
175
|
+
* Ví dụ:
|
|
176
|
+
* ```ts
|
|
177
|
+
* const db = new Database({
|
|
178
|
+
* driver: new JSONDriver({ filePath: "./database.json" }),
|
|
179
|
+
* })
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
driver;
|
|
167
183
|
/**
|
|
168
184
|
* Khởi tạo Database instance.
|
|
169
185
|
*
|
|
@@ -189,19 +205,6 @@ var _Database = class _Database {
|
|
|
189
205
|
* ```
|
|
190
206
|
*/
|
|
191
207
|
constructor(options) {
|
|
192
|
-
/**
|
|
193
|
-
* Storage driver được sử dụng để đọc và ghi dữ liệu database.
|
|
194
|
-
*
|
|
195
|
-
* Driver phải implement interface `DatabaseDriver`.
|
|
196
|
-
*
|
|
197
|
-
* Ví dụ:
|
|
198
|
-
* ```ts
|
|
199
|
-
* const db = new Database({
|
|
200
|
-
* driver: new JSONDriver({ filePath: "./database.json" }),
|
|
201
|
-
* })
|
|
202
|
-
* ```
|
|
203
|
-
*/
|
|
204
|
-
__publicField(this, "driver");
|
|
205
208
|
this.driver = options.driver;
|
|
206
209
|
}
|
|
207
210
|
/**
|
|
@@ -250,7 +253,6 @@ var _Database = class _Database {
|
|
|
250
253
|
*/
|
|
251
254
|
async get(key) {
|
|
252
255
|
const data = await this.all();
|
|
253
|
-
if (key === void 0) return data;
|
|
254
256
|
if (typeof key !== "string") {
|
|
255
257
|
throw new BlackCatError("INVALID_TYPE", "key", "string", typeOf(key));
|
|
256
258
|
}
|
|
@@ -339,7 +341,7 @@ var _Database = class _Database {
|
|
|
339
341
|
* @param {AutocompletableString<P>} key Đường dẫn dữ liệu cần gán giá trị.
|
|
340
342
|
* @param {ObjectValue<V, P>} value Giá trị mới.
|
|
341
343
|
*
|
|
342
|
-
* @returns {
|
|
344
|
+
* @returns {void} Giá trị vừa được set hoặc object root nếu value là object.
|
|
343
345
|
*
|
|
344
346
|
* @example
|
|
345
347
|
* ```ts
|
|
@@ -374,7 +376,6 @@ var _Database = class _Database {
|
|
|
374
376
|
}
|
|
375
377
|
;
|
|
376
378
|
await this.driver.set(allDatabase);
|
|
377
|
-
return typeof value == "object" && value !== null ? await this.get(keys[0]) : value;
|
|
378
379
|
}
|
|
379
380
|
/**
|
|
380
381
|
* Xóa một key khỏi database.
|
|
@@ -591,7 +592,8 @@ var _Database = class _Database {
|
|
|
591
592
|
if (!isNumber(numberToAdd)) {
|
|
592
593
|
throw new BlackCatError("INVALID_TYPE", "numberToAdd", "number", typeOf(numberToAdd));
|
|
593
594
|
}
|
|
594
|
-
|
|
595
|
+
await this.set(key, targetNumber + numberToAdd);
|
|
596
|
+
return targetNumber + numberToAdd;
|
|
595
597
|
}
|
|
596
598
|
/**
|
|
597
599
|
* Trừ giá trị khỏi một key dạng number.
|
|
@@ -621,7 +623,8 @@ var _Database = class _Database {
|
|
|
621
623
|
if (!isNumber(numberToSubtract)) {
|
|
622
624
|
throw new BlackCatError("INVALID_TYPE", "numberToSubtract", "number", typeOf(numberToSubtract));
|
|
623
625
|
}
|
|
624
|
-
|
|
626
|
+
await this.set(key, targetNumber - numberToSubtract);
|
|
627
|
+
return targetNumber - numberToSubtract;
|
|
625
628
|
}
|
|
626
629
|
/**
|
|
627
630
|
* Thêm một hoặc nhiều phần tử vào cuối array tại key-path.
|
|
@@ -839,7 +842,8 @@ var _Database = class _Database {
|
|
|
839
842
|
* const userKeys = await db.keys("user");
|
|
840
843
|
*/
|
|
841
844
|
async keys(key) {
|
|
842
|
-
|
|
845
|
+
const all = await this.all();
|
|
846
|
+
if (!key) return TypedObject.keys(all);
|
|
843
847
|
const data = await this.get(key);
|
|
844
848
|
return TypedObject.keys(data).filter((key2) => data[key2] !== void 0 && data[key2] !== null);
|
|
845
849
|
}
|
|
@@ -873,7 +877,8 @@ var _Database = class _Database {
|
|
|
873
877
|
* const userValues = await db.values("users");
|
|
874
878
|
*/
|
|
875
879
|
async values(key) {
|
|
876
|
-
|
|
880
|
+
const all = await this.all();
|
|
881
|
+
if (!key) return TypedObject.values(all);
|
|
877
882
|
const data = await this.get(key);
|
|
878
883
|
return TypedObject.values(data);
|
|
879
884
|
}
|
|
@@ -998,12 +1003,21 @@ var _Database = class _Database {
|
|
|
998
1003
|
return values.every(queryFunction);
|
|
999
1004
|
}
|
|
1000
1005
|
};
|
|
1001
|
-
__name(_Database, "Database");
|
|
1002
|
-
var Database = _Database;
|
|
1003
1006
|
|
|
1004
1007
|
// src/drivers/JSONDriver.ts
|
|
1005
1008
|
import { promises as fs } from "fs";
|
|
1006
|
-
var
|
|
1009
|
+
var JSONDriver = class {
|
|
1010
|
+
static {
|
|
1011
|
+
__name(this, "JSONDriver");
|
|
1012
|
+
}
|
|
1013
|
+
/**
|
|
1014
|
+
* Đường dẫn tới file database JSON.
|
|
1015
|
+
*/
|
|
1016
|
+
filePath;
|
|
1017
|
+
/**
|
|
1018
|
+
* Cho biết có minify JSON khi ghi file hay không.
|
|
1019
|
+
*/
|
|
1020
|
+
minifyJSON;
|
|
1007
1021
|
/**
|
|
1008
1022
|
* Khởi tạo một instance mới của {@link JSONDriver}.
|
|
1009
1023
|
*
|
|
@@ -1025,14 +1039,6 @@ var _JSONDriver = class _JSONDriver {
|
|
|
1025
1039
|
* ```
|
|
1026
1040
|
*/
|
|
1027
1041
|
constructor(options) {
|
|
1028
|
-
/**
|
|
1029
|
-
* Đường dẫn tới file database JSON.
|
|
1030
|
-
*/
|
|
1031
|
-
__publicField(this, "filePath");
|
|
1032
|
-
/**
|
|
1033
|
-
* Cho biết có minify JSON khi ghi file hay không.
|
|
1034
|
-
*/
|
|
1035
|
-
__publicField(this, "minifyJSON");
|
|
1036
1042
|
this.filePath = options.filePath || "database.json";
|
|
1037
1043
|
this.minifyJSON = options.minifyJSON || false;
|
|
1038
1044
|
}
|
|
@@ -1093,11 +1099,16 @@ var _JSONDriver = class _JSONDriver {
|
|
|
1093
1099
|
return true;
|
|
1094
1100
|
}
|
|
1095
1101
|
};
|
|
1096
|
-
__name(_JSONDriver, "JSONDriver");
|
|
1097
|
-
var JSONDriver = _JSONDriver;
|
|
1098
1102
|
|
|
1099
1103
|
// src/drivers/MemoryDriver.ts
|
|
1100
|
-
var
|
|
1104
|
+
var MemoryDriver = class {
|
|
1105
|
+
static {
|
|
1106
|
+
__name(this, "MemoryDriver");
|
|
1107
|
+
}
|
|
1108
|
+
/**
|
|
1109
|
+
* Object chứa toàn bộ dữ liệu database trong RAM.
|
|
1110
|
+
*/
|
|
1111
|
+
store;
|
|
1101
1112
|
/**
|
|
1102
1113
|
* Khởi tạo MemoryDriver.
|
|
1103
1114
|
*
|
|
@@ -1124,10 +1135,6 @@ var _MemoryDriver = class _MemoryDriver {
|
|
|
1124
1135
|
* ```
|
|
1125
1136
|
*/
|
|
1126
1137
|
constructor(initialData = {}) {
|
|
1127
|
-
/**
|
|
1128
|
-
* Object chứa toàn bộ dữ liệu database trong RAM.
|
|
1129
|
-
*/
|
|
1130
|
-
__publicField(this, "store");
|
|
1131
1138
|
this.store = initialData;
|
|
1132
1139
|
}
|
|
1133
1140
|
/**
|
|
@@ -1158,12 +1165,21 @@ var _MemoryDriver = class _MemoryDriver {
|
|
|
1158
1165
|
return true;
|
|
1159
1166
|
}
|
|
1160
1167
|
};
|
|
1161
|
-
__name(_MemoryDriver, "MemoryDriver");
|
|
1162
|
-
var MemoryDriver = _MemoryDriver;
|
|
1163
1168
|
|
|
1164
1169
|
// src/drivers/SQLiteDriver.ts
|
|
1165
1170
|
import SQLite from "better-sqlite3";
|
|
1166
|
-
var
|
|
1171
|
+
var SQLiteDriver = class {
|
|
1172
|
+
static {
|
|
1173
|
+
__name(this, "SQLiteDriver");
|
|
1174
|
+
}
|
|
1175
|
+
/**
|
|
1176
|
+
* SQLite database instance.
|
|
1177
|
+
*/
|
|
1178
|
+
db;
|
|
1179
|
+
/**
|
|
1180
|
+
* Tên table lưu trữ dữ liệu JSON.
|
|
1181
|
+
*/
|
|
1182
|
+
table;
|
|
1167
1183
|
/**
|
|
1168
1184
|
* Khởi tạo SQLiteDriver.
|
|
1169
1185
|
*
|
|
@@ -1180,14 +1196,6 @@ var _SQLiteDriver = class _SQLiteDriver {
|
|
|
1180
1196
|
* ```
|
|
1181
1197
|
*/
|
|
1182
1198
|
constructor(options = {}) {
|
|
1183
|
-
/**
|
|
1184
|
-
* SQLite database instance.
|
|
1185
|
-
*/
|
|
1186
|
-
__publicField(this, "db");
|
|
1187
|
-
/**
|
|
1188
|
-
* Tên table lưu trữ dữ liệu JSON.
|
|
1189
|
-
*/
|
|
1190
|
-
__publicField(this, "table");
|
|
1191
1199
|
this.db = new SQLite(options.filePath ?? "database.sqlite");
|
|
1192
1200
|
this.table = options.table ?? "json_store";
|
|
1193
1201
|
this.db.prepare(`CREATE TABLE IF NOT EXISTS ${this.table} (id INTEGER PRIMARY KEY, data TEXT)`).run();
|
|
@@ -1225,12 +1233,45 @@ var _SQLiteDriver = class _SQLiteDriver {
|
|
|
1225
1233
|
return true;
|
|
1226
1234
|
}
|
|
1227
1235
|
};
|
|
1228
|
-
__name(_SQLiteDriver, "SQLiteDriver");
|
|
1229
|
-
var SQLiteDriver = _SQLiteDriver;
|
|
1230
1236
|
|
|
1231
1237
|
// src/drivers/MongoDriver.ts
|
|
1232
1238
|
import { MongoClient } from "mongodb";
|
|
1233
|
-
var
|
|
1239
|
+
var MongoDriver = class {
|
|
1240
|
+
static {
|
|
1241
|
+
__name(this, "MongoDriver");
|
|
1242
|
+
}
|
|
1243
|
+
/**
|
|
1244
|
+
* MongoDB client instance.
|
|
1245
|
+
*/
|
|
1246
|
+
client;
|
|
1247
|
+
/**
|
|
1248
|
+
* MongoDB database instance.
|
|
1249
|
+
*/
|
|
1250
|
+
db;
|
|
1251
|
+
/**
|
|
1252
|
+
* Collection lưu dữ liệu JSON.
|
|
1253
|
+
*/
|
|
1254
|
+
collection;
|
|
1255
|
+
/**
|
|
1256
|
+
* Tên database MongoDB.
|
|
1257
|
+
*/
|
|
1258
|
+
databaseName;
|
|
1259
|
+
/**
|
|
1260
|
+
* Tên collection MongoDB.
|
|
1261
|
+
*/
|
|
1262
|
+
collectionName;
|
|
1263
|
+
/**
|
|
1264
|
+
* Callback khi kết nối thành công.
|
|
1265
|
+
*/
|
|
1266
|
+
onLoad;
|
|
1267
|
+
/**
|
|
1268
|
+
* Callback khi xảy ra lỗi.
|
|
1269
|
+
*/
|
|
1270
|
+
onError;
|
|
1271
|
+
/**
|
|
1272
|
+
* Trạng thái đã gọi onLoad chưa (tránh spam)
|
|
1273
|
+
*/
|
|
1274
|
+
isLoaded = false;
|
|
1234
1275
|
/**
|
|
1235
1276
|
* Khởi tạo MongoDriver.
|
|
1236
1277
|
*
|
|
@@ -1257,38 +1298,6 @@ var _MongoDriver = class _MongoDriver {
|
|
|
1257
1298
|
* });
|
|
1258
1299
|
*/
|
|
1259
1300
|
constructor(options = {}) {
|
|
1260
|
-
/**
|
|
1261
|
-
* MongoDB client instance.
|
|
1262
|
-
*/
|
|
1263
|
-
__publicField(this, "client");
|
|
1264
|
-
/**
|
|
1265
|
-
* MongoDB database instance.
|
|
1266
|
-
*/
|
|
1267
|
-
__publicField(this, "db");
|
|
1268
|
-
/**
|
|
1269
|
-
* Collection lưu dữ liệu JSON.
|
|
1270
|
-
*/
|
|
1271
|
-
__publicField(this, "collection");
|
|
1272
|
-
/**
|
|
1273
|
-
* Tên database MongoDB.
|
|
1274
|
-
*/
|
|
1275
|
-
__publicField(this, "databaseName");
|
|
1276
|
-
/**
|
|
1277
|
-
* Tên collection MongoDB.
|
|
1278
|
-
*/
|
|
1279
|
-
__publicField(this, "collectionName");
|
|
1280
|
-
/**
|
|
1281
|
-
* Callback khi kết nối thành công.
|
|
1282
|
-
*/
|
|
1283
|
-
__publicField(this, "onLoad");
|
|
1284
|
-
/**
|
|
1285
|
-
* Callback khi xảy ra lỗi.
|
|
1286
|
-
*/
|
|
1287
|
-
__publicField(this, "onError");
|
|
1288
|
-
/**
|
|
1289
|
-
* Trạng thái đã gọi onLoad chưa (tránh spam)
|
|
1290
|
-
*/
|
|
1291
|
-
__publicField(this, "isLoaded", false);
|
|
1292
1301
|
const {
|
|
1293
1302
|
mongourl = "mongodb://localhost:27017",
|
|
1294
1303
|
databaseName = "database",
|
|
@@ -1372,8 +1381,6 @@ var _MongoDriver = class _MongoDriver {
|
|
|
1372
1381
|
return true;
|
|
1373
1382
|
}
|
|
1374
1383
|
};
|
|
1375
|
-
__name(_MongoDriver, "MongoDriver");
|
|
1376
|
-
var MongoDriver = _MongoDriver;
|
|
1377
1384
|
export {
|
|
1378
1385
|
Database,
|
|
1379
1386
|
JSONDriver,
|