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