blackcat.js-database 1.0.0-test → 1.0.1
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 +414 -2
- package/dist/index.d.mts +1101 -458
- package/dist/index.d.ts +1101 -458
- package/dist/index.js +742 -456
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +728 -455
- package/dist/index.mjs.map +1 -1
- package/package.json +20 -2
package/README.md
CHANGED
|
@@ -1,3 +1,415 @@
|
|
|
1
|
-
|
|
1
|
+
Một **database nhẹ, typed và hỗ trợ autocomplete path cho TypeScript**.
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`blackcat.js-database` cho phép bạn lưu trữ và truy vấn dữ liệu bằng **dot notation** với **type inference mạnh mẽ trong IDE**.
|
|
4
|
+
|
|
5
|
+
[Xem tài liệu ở đây](blackcat-js-database.vercel.app)
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Tính năng
|
|
9
|
+
|
|
10
|
+
* Autocomplete path trong IDE (`user.profile.name`)
|
|
11
|
+
* Type-safe với TypeScript
|
|
12
|
+
* Hỗ trợ nested object
|
|
13
|
+
* API tương tự `Array`
|
|
14
|
+
* Driver system (memory, file, custom storage)
|
|
15
|
+
* Query helpers (`find`, `filter`, `map`, ...)
|
|
16
|
+
* Hỗ trợ thao tác với number và array
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Cài đặt
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install blackcat.js-database
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Khởi tạo Database
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
import { Database, JSONDriver } from "blackcat.js-database";
|
|
32
|
+
|
|
33
|
+
const db = new Database({
|
|
34
|
+
driver: db = new JSONDriver({
|
|
35
|
+
filePath: "./database.json"
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
# Sử dụng với TypeScript Schema
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
type Schema = {
|
|
46
|
+
users: {
|
|
47
|
+
id: number;
|
|
48
|
+
name: string;
|
|
49
|
+
coins: number;
|
|
50
|
+
}[];
|
|
51
|
+
settings: {
|
|
52
|
+
prefix: string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const db = new Database<Schema>({
|
|
57
|
+
driver: db = new JSONDriver({
|
|
58
|
+
filePath: "./database.json"
|
|
59
|
+
})
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Autocomplete trong IDE:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
"users"
|
|
67
|
+
"users.0.id"
|
|
68
|
+
"settings.prefix"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
# Lấy dữ liệu
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
await db.get("users");
|
|
77
|
+
await db.get("settings.prefix");
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Lấy toàn bộ database
|
|
81
|
+
|
|
82
|
+
```ts
|
|
83
|
+
await db.get();
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
# Kiểm tra key tồn tại
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
await db.has("users");
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
# Gán giá trị
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
await db.set("settings.prefix", "!");
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
# Cập nhật giá trị
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
await db.update("settings.prefix", "?");
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
# Xóa dữ liệu
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
await db.delete("settings.prefix");
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Xóa toàn bộ database
|
|
119
|
+
|
|
120
|
+
```ts
|
|
121
|
+
await db.deleteAll();
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
# Number Operations
|
|
127
|
+
|
|
128
|
+
## Cộng giá trị
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
await db.add("users.0.coins", 10);
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Trừ giá trị
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
await db.subtract("users.0.coins", 5);
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
# Array Operations
|
|
143
|
+
|
|
144
|
+
## Thêm phần tử
|
|
145
|
+
|
|
146
|
+
```ts
|
|
147
|
+
await db.push("users", {
|
|
148
|
+
id: 1,
|
|
149
|
+
name: "Alice",
|
|
150
|
+
coins: 0
|
|
151
|
+
});
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Hoặc
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
await db.push("numbers", 1, 2, 3);
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Thay thế phần tử trong mảng
|
|
163
|
+
|
|
164
|
+
```ts
|
|
165
|
+
await db.pull("users", 0, {
|
|
166
|
+
id: 2,
|
|
167
|
+
name: "Bob",
|
|
168
|
+
coins: 10
|
|
169
|
+
});
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Xóa phần tử
|
|
175
|
+
|
|
176
|
+
```ts
|
|
177
|
+
await db.pop("users", 0);
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Hoặc
|
|
181
|
+
|
|
182
|
+
```ts
|
|
183
|
+
await db.pop("users", [0, 2]);
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Lấy phần tử ngẫu nhiên
|
|
189
|
+
|
|
190
|
+
```ts
|
|
191
|
+
await db.random("users");
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
# Query API
|
|
197
|
+
|
|
198
|
+
Database hỗ trợ các method tương tự `Array`.
|
|
199
|
+
|
|
200
|
+
## find
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
const user = await db.find((u) => u.id === 1);
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## filter
|
|
209
|
+
|
|
210
|
+
```ts
|
|
211
|
+
const admins = await db.filter((u) => u.role === "admin");
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## map
|
|
217
|
+
|
|
218
|
+
```ts
|
|
219
|
+
const names = await db.map((u) => u.name);
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## findIndex
|
|
225
|
+
|
|
226
|
+
```ts
|
|
227
|
+
const index = await db.findIndex((u) => u.id === 1);
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## some
|
|
233
|
+
|
|
234
|
+
```ts
|
|
235
|
+
await db.some((u) => u.active === true);
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## every
|
|
241
|
+
|
|
242
|
+
```ts
|
|
243
|
+
await db.every((u) => u.active === true);
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
# Utilities
|
|
249
|
+
|
|
250
|
+
## keys
|
|
251
|
+
|
|
252
|
+
```ts
|
|
253
|
+
await db.keys();
|
|
254
|
+
await db.keys("users");
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## values
|
|
260
|
+
|
|
261
|
+
```ts
|
|
262
|
+
await db.values();
|
|
263
|
+
await db.values("users");
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## size
|
|
269
|
+
|
|
270
|
+
```ts
|
|
271
|
+
await db.size();
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Kiểm tra kiểu dữ liệu
|
|
277
|
+
|
|
278
|
+
```ts
|
|
279
|
+
await db.isTargetArray("users");
|
|
280
|
+
await db.isTargetNumber("users.0.coins");
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
# Driver System
|
|
286
|
+
|
|
287
|
+
Database sử dụng **driver system** để lưu trữ dữ liệu.
|
|
288
|
+
|
|
289
|
+
Driver chịu trách nhiệm:
|
|
290
|
+
|
|
291
|
+
* đọc dữ liệu
|
|
292
|
+
* ghi dữ liệu
|
|
293
|
+
* xóa dữ liệu
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
# Memory Driver (ví dụ)
|
|
298
|
+
|
|
299
|
+
Driver lưu dữ liệu trong RAM.
|
|
300
|
+
|
|
301
|
+
```ts
|
|
302
|
+
import { Database, MemoryDriver } from "blackcat.js-database";
|
|
303
|
+
|
|
304
|
+
const db = new Database({
|
|
305
|
+
driver: new MemoryDriver()
|
|
306
|
+
});
|
|
307
|
+
```
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
# JSON Driver (ví dụ)
|
|
311
|
+
|
|
312
|
+
```ts
|
|
313
|
+
import { Database, JSONDriver } from "blackcat.js-database";
|
|
314
|
+
|
|
315
|
+
const database = new Database({
|
|
316
|
+
driver: db = new JSONDriver({
|
|
317
|
+
filePath: "./database.json"
|
|
318
|
+
})
|
|
319
|
+
});
|
|
320
|
+
```
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
# Mongo Driver (ví dụ)
|
|
324
|
+
|
|
325
|
+
```ts
|
|
326
|
+
import { Database, MongoDriver } from "blackcat.js-database";
|
|
327
|
+
|
|
328
|
+
const database = new Database({
|
|
329
|
+
driver: new MongoDriver({
|
|
330
|
+
mongourl: "mongodb://localhost:27017",
|
|
331
|
+
databaseName: "mydb",
|
|
332
|
+
collectionName: "store"
|
|
333
|
+
})
|
|
334
|
+
});
|
|
335
|
+
```
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
# SQLite Driver (ví dụ)
|
|
339
|
+
|
|
340
|
+
```ts
|
|
341
|
+
import { Database, SQLiteDriver } from "blackcat.js-database";
|
|
342
|
+
|
|
343
|
+
const database = new Database({
|
|
344
|
+
driver: new SQLiteDriver({
|
|
345
|
+
filePath: "database.sqlite",
|
|
346
|
+
table: "json_store"
|
|
347
|
+
})
|
|
348
|
+
});
|
|
349
|
+
```
|
|
350
|
+
---
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
# Tạo Custom Driver
|
|
355
|
+
|
|
356
|
+
Bạn có thể tạo driver riêng bằng cách implement `DatabaseDriver`.
|
|
357
|
+
|
|
358
|
+
```ts
|
|
359
|
+
import { DatabaseDriver } from "blackcat.js-database";
|
|
360
|
+
|
|
361
|
+
class MyDriver implements DatabaseDriver {
|
|
362
|
+
async all() {
|
|
363
|
+
return {};
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
async set(data) {
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
async delete() {
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
Sử dụng:
|
|
376
|
+
|
|
377
|
+
```ts
|
|
378
|
+
const db = new Database({
|
|
379
|
+
driver: new MyDriver()
|
|
380
|
+
});
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
# Ví dụ hoàn chỉnh
|
|
386
|
+
|
|
387
|
+
```ts
|
|
388
|
+
import { Database, JSONDriver } from "blackcat.js-database";
|
|
389
|
+
|
|
390
|
+
const db = new Database({
|
|
391
|
+
driver: db = new JSONDriver({
|
|
392
|
+
filePath: "./database.json"
|
|
393
|
+
})
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
await db.set("users", []);
|
|
397
|
+
|
|
398
|
+
await db.push("users", {
|
|
399
|
+
id: 1,
|
|
400
|
+
name: "Alice",
|
|
401
|
+
coins: 100
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
await db.add("users.0.coins", 50);
|
|
405
|
+
|
|
406
|
+
const user = await db.get("users.0");
|
|
407
|
+
|
|
408
|
+
console.log(user);
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
# License
|
|
414
|
+
|
|
415
|
+
MIT
|