-
Notifications
You must be signed in to change notification settings - Fork 57
Expand file tree
/
Copy pathmerge-rule-database.ts
More file actions
67 lines (56 loc) · 1.86 KB
/
merge-rule-database.ts
File metadata and controls
67 lines (56 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**
* Copyright (c) 2021 Hengyang Zhang
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
import BaseDatabase from "./common/base-database"
import { REMAIN_WORD_PREFIX } from "./common/constant"
const DB_KEY = REMAIN_WORD_PREFIX + 'MERGE_RULES'
type MergeRuleSet = { [key: string]: string | number }
/**
* Rules to merge host
*
* @since 0.1.2
*/
class MergeRuleDatabase extends BaseDatabase {
async refresh(): Promise<MergeRuleSet> {
const result = await this.storage.getOne<MergeRuleSet>(DB_KEY)
return result || {}
}
private update(data: MergeRuleSet): Promise<void> {
return this.setByKey(DB_KEY, data)
}
async selectAll(): Promise<timer.merge.Rule[]> {
const set = await this.refresh()
return Object.entries(set)
.map(([origin, merged]) => ({ origin, merged } satisfies timer.merge.Rule))
}
async remove(origin: string): Promise<void> {
const set = await this.refresh()
delete set[origin]
await this.update(set)
}
/**
* Add to the db
*/
async add(...toAdd: timer.merge.Rule[]): Promise<void> {
const set = await this.refresh()
// Not rewrite
toAdd.forEach(({ origin, merged }) => set[origin] = set[origin] ?? merged)
await this.update(set)
}
async importData(data: any): Promise<void> {
const toMigrate = data?.[DB_KEY]
if (!toMigrate) return
const exist = await this.refresh()
const valueTypes = ['string', 'number']
Object.entries(toMigrate as MergeRuleSet)
.filter(([_key, value]) => valueTypes.includes(typeof value))
// Not rewrite
.filter(([key]) => !exist[key])
.forEach(([key, value]) => exist[key] = value)
this.update(exist)
}
}
export default MergeRuleDatabase