1 | import Datastore from 'nedb';
|
2 |
|
3 | export default class DBInstance {
|
4 | private db: Datastore;
|
5 |
|
6 | constructor(dbFile: string) {
|
7 | this.db = new Datastore({ filename: dbFile });
|
8 | this.db.loadDatabase();
|
9 | }
|
10 |
|
11 | setAutoCompact(interval: number): void {
|
12 | this.db.persistence.setAutocompactionInterval(interval);
|
13 | }
|
14 |
|
15 | create(key: string, value: any): Promise<undefined> {
|
16 | return new Promise((resolve, reject) => {
|
17 | this.db.insert(
|
18 | {
|
19 | key,
|
20 | value
|
21 | },
|
22 | err => {
|
23 | if (err) {
|
24 | return reject(err);
|
25 | } else {
|
26 | resolve(undefined);
|
27 | }
|
28 | }
|
29 | );
|
30 | });
|
31 | }
|
32 |
|
33 | read(key: string): Promise<undefined> {
|
34 | return new Promise((resolve, reject) => {
|
35 | this.db.findOne(
|
36 | {
|
37 | key
|
38 | },
|
39 | (err, docs) => {
|
40 | if (err) {
|
41 | return reject(err);
|
42 | } else {
|
43 | if (docs) {
|
44 | resolve(docs);
|
45 | } else {
|
46 | resolve(undefined);
|
47 | }
|
48 | }
|
49 | }
|
50 | );
|
51 | });
|
52 | }
|
53 |
|
54 | update(key: string, value: any): Promise<undefined> {
|
55 | return new Promise((resolve, reject) => {
|
56 | this.db.update(
|
57 | {
|
58 | key
|
59 | },
|
60 | {
|
61 | $set: {
|
62 | value
|
63 | }
|
64 | },
|
65 | {
|
66 | upsert: true
|
67 | },
|
68 | err => {
|
69 | if (err) {
|
70 | reject(err);
|
71 | } else {
|
72 | resolve(undefined);
|
73 | }
|
74 | }
|
75 | );
|
76 | });
|
77 | }
|
78 |
|
79 | insertOnce(scope: string, key: string, value: any): Promise<undefined> {
|
80 | return new Promise((resolve, reject) => {
|
81 | this.db.findOne(
|
82 | {
|
83 | key: scope
|
84 | },
|
85 | (err, docs) => {
|
86 | if (err) {
|
87 | return reject(err);
|
88 | } else {
|
89 | const data = docs?.['value'] || {};
|
90 | if (!Object.prototype.hasOwnProperty.call(data, key)) {
|
91 | data[key] = value;
|
92 | this.db.update(
|
93 | {
|
94 | key: scope
|
95 | },
|
96 | {
|
97 | $set: {
|
98 | value: data
|
99 | }
|
100 | },
|
101 | {
|
102 | upsert: true
|
103 | },
|
104 | err => {
|
105 | if (err) {
|
106 | reject(err);
|
107 | } else {
|
108 | resolve(undefined);
|
109 | }
|
110 | }
|
111 | );
|
112 | } else {
|
113 | resolve(undefined);
|
114 | }
|
115 | }
|
116 | }
|
117 | );
|
118 | });
|
119 | }
|
120 | }
|