UNPKG

2.53 kBPlain TextView Raw
1import Datastore from 'nedb';
2
3export 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}