Skip to content

Commit d45a67d

Browse files
committed
feat: semi
1 parent a938b25 commit d45a67d

File tree

20 files changed

+210
-159
lines changed

20 files changed

+210
-159
lines changed

src/database/backup-database.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ class BackupDatabase extends BaseDatabase {
3636
async updateCache(type: timer.backup.Type, newVal: unknown): Promise<void> {
3737
return this.storage.put(cacheKeyOf(type), newVal as Object)
3838
}
39-
40-
async importData(_data: any): Promise<void> {
41-
// Do nothing
42-
}
4339
}
4440

4541
const backupDatabase = new BackupDatabase()

src/database/common/base-database.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,4 @@ export default abstract class BaseDatabase {
2424
protected setByKey(key: string, val: any): Promise<void> {
2525
return this.storage.put(key, val)
2626
}
27-
28-
/**
29-
* Import data
30-
*
31-
* @since 0.2.5
32-
* @param data backup data
33-
*/
34-
abstract importData(data: any): Promise<void>
3527
}

src/database/common/migratable.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { createObjectGuard, isInt, isString } from 'typescript-guard'
2+
3+
export const isExportData = createObjectGuard<Pick<timer.backup.ExportData, '__meta__'>>({
4+
__meta__: createObjectGuard({
5+
version: isString,
6+
ts: isInt,
7+
}),
8+
})
9+
10+
export const isLegacyVersion = (data: unknown): data is timer.backup.ExportData => {
11+
if (!isExportData(data)) return false
12+
13+
const version = data.__meta__.version
14+
const match = version.match(/^(\d+)\.(\d+)\.(\d+)/)
15+
if (!match) return true
16+
17+
const major = parseInt(match[1])
18+
19+
return major < 4
20+
}

src/database/limit-database.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import { formatTimeYMD, MILL_PER_DAY } from "@util/time"
99
import BaseDatabase from "./common/base-database"
1010
import { REMAIN_WORD_PREFIX } from "./common/constant"
11+
import { BrowserMigratable } from './types'
1112

1213
const KEY = REMAIN_WORD_PREFIX + 'LIMIT'
1314

@@ -139,7 +140,9 @@ function migrate(exist: Items, toMigrate: any) {
139140
*
140141
* @since 0.2.2
141142
*/
142-
class LimitDatabase extends BaseDatabase {
143+
class LimitDatabase extends BaseDatabase implements BrowserMigratable<'__limit__'> {
144+
namespace: '__limit__' = '__limit__'
145+
143146
private async getItems(): Promise<Items> {
144147
let items = await this.storage.getOne<Items>(KEY) || {}
145148
return items
@@ -259,13 +262,18 @@ class LimitDatabase extends BaseDatabase {
259262
await this.update(items)
260263
}
261264

262-
async importData(data: any): Promise<void> {
263-
let toImport = data[KEY] as Items
264-
// Not import
265-
if (typeof toImport !== 'object') return
266-
const exists: Items = await this.getItems()
267-
migrate(exists, toImport)
268-
this.setByKey(KEY, exists)
265+
async importData(data: unknown): Promise<void> {
266+
// let toImport = data[KEY] as Items
267+
// // Not import
268+
// if (typeof toImport !== 'object') return
269+
// const exists: Items = await this.getItems()
270+
// migrate(exists, toImport)
271+
// this.setByKey(KEY, exists)
272+
throw new Error('Method not implemented.')
273+
}
274+
275+
exportData(): Promise<timer.limit.Rule[]> {
276+
throw new Error('Method not implemented.')
269277
}
270278
}
271279

src/database/merge-rule-database.ts

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import BaseDatabase from "./common/base-database"
99
import { REMAIN_WORD_PREFIX } from "./common/constant"
10+
import type { BrowserMigratable } from './types'
1011

1112
const DB_KEY = REMAIN_WORD_PREFIX + 'MERGE_RULES'
1213

@@ -17,7 +18,8 @@ type MergeRuleSet = { [key: string]: string | number }
1718
*
1819
* @since 0.1.2
1920
*/
20-
class MergeRuleDatabase extends BaseDatabase {
21+
class MergeRuleDatabase extends BaseDatabase implements BrowserMigratable<'__merge__'> {
22+
namespace: '__merge__' = '__merge__'
2123

2224
async refresh(): Promise<MergeRuleSet> {
2325
const result = await this.storage.getOne<MergeRuleSet>(DB_KEY)
@@ -50,17 +52,22 @@ class MergeRuleDatabase extends BaseDatabase {
5052
await this.update(set)
5153
}
5254

53-
async importData(data: any): Promise<void> {
54-
const toMigrate = data?.[DB_KEY]
55-
if (!toMigrate) return
56-
const exist = await this.refresh()
57-
const valueTypes = ['string', 'number']
58-
Object.entries(toMigrate as MergeRuleSet)
59-
.filter(([_key, value]) => valueTypes.includes(typeof value))
60-
// Not rewrite
61-
.filter(([key]) => !exist[key])
62-
.forEach(([key, value]) => exist[key] = value)
63-
this.update(exist)
55+
async importData(data: unknown): Promise<void> {
56+
// const toMigrate = data?.[DB_KEY]
57+
// if (!toMigrate) return
58+
// const exist = await this.refresh()
59+
// const valueTypes = ['string', 'number']
60+
// Object.entries(toMigrate as MergeRuleSet)
61+
// .filter(([_key, value]) => valueTypes.includes(typeof value))
62+
// // Not rewrite
63+
// .filter(([key]) => !exist[key])
64+
// .forEach(([key, value]) => exist[key] = value)
65+
// this.update(exist)
66+
throw new Error('Method not implemented.')
67+
}
68+
69+
exportData(): Promise<timer.merge.Rule[]> {
70+
throw new Error('Method not implemented.')
6471
}
6572
}
6673

src/database/meta-database.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,6 @@ class MetaDatabase extends BaseDatabase {
1717
return meta || {}
1818
}
1919

20-
async importData(data: any): Promise<void> {
21-
const meta: timer.ExtensionMeta = data[META_KEY] as timer.ExtensionMeta
22-
if (!meta) return
23-
24-
const existMeta = await this.getMeta()
25-
const { popupCounter = {}, appCounter = {} } = existMeta
26-
popupCounter._total = (popupCounter._total ?? 0) + (popupCounter._total ?? 0)
27-
if (meta.appCounter) {
28-
Object.entries(meta.appCounter).forEach(([routePath, count]) => {
29-
appCounter[routePath] = (appCounter[routePath] ?? 0) + count
30-
})
31-
}
32-
await this.update({ ...existMeta, popupCounter, appCounter })
33-
}
34-
3520
async update(existMeta: timer.ExtensionMeta): Promise<void> {
3621
await this.storage.put(META_KEY, existMeta)
3722
}

src/database/option-database.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,6 @@ const DB_KEY = REMAIN_WORD_PREFIX + 'OPTION'
1717
* @since 0.3.0
1818
*/
1919
class OptionDatabase extends BaseDatabase {
20-
async importData(data: any): Promise<void> {
21-
const newVal = data[DB_KEY]
22-
const exist = await this.getOption()
23-
if (exist) {
24-
Object.entries(exist).forEach(([key, value]) => (exist as any)[key] = value)
25-
}
26-
await this.setOption(newVal)
27-
}
2820

2921
async getOption(): Promise<timer.option.AllOption> {
3022
const option = await this.storage.getOne<timer.option.AllOption>(DB_KEY)

src/database/period-database.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -102,17 +102,6 @@ class PeriodDatabase extends BaseDatabase {
102102
const keys = dates.map(generateKey)
103103
await this.storage.remove(keys)
104104
}
105-
106-
async importData(data: any): Promise<void> {
107-
if (typeof data !== "object") return
108-
const items = await this.storage.get()
109-
const keyReg = new RegExp(`^${KEY_PREFIX}20\\d{2}[01]\\d[0-3]\\d$`)
110-
const toSave: Record<string, _Value> = {}
111-
Object.entries(data)
112-
.filter(([key]) => keyReg.test(key))
113-
.forEach(([key, value]) => toSave[key] = migrate(items[key], value as _Value))
114-
this.storage.set(toSave)
115-
}
116105
}
117106

118107
type _Value = { [key: string]: number }

src/database/site-cate-database.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import BaseDatabase from "./common/base-database"
99
import { REMAIN_WORD_PREFIX } from "./common/constant"
10+
import { BrowserMigratable } from './types'
1011

1112
const KEY = REMAIN_WORD_PREFIX + 'CATE'
1213

@@ -38,7 +39,9 @@ function migrate(exist: Items, toMigrate: any) {
3839
*
3940
* @since 3.0.0
4041
*/
41-
class SiteCateDatabase extends BaseDatabase {
42+
class SiteCateDatabase extends BaseDatabase implements BrowserMigratable<'__cate__'> {
43+
namespace: '__cate__' = '__cate__'
44+
4245
private async getItems(): Promise<Items> {
4346
return await this.storage.getOne<Items>(KEY) || {}
4447
}
@@ -86,14 +89,6 @@ class SiteCateDatabase extends BaseDatabase {
8689
await this.saveItems(items)
8790
}
8891

89-
async importData(data: any): Promise<void> {
90-
let toImport = data[KEY] as Items
91-
// Not import
92-
if (typeof toImport !== 'object') return
93-
const exists: Items = await this.getItems()
94-
migrate(exists, toImport)
95-
this.setByKey(KEY, exists)
96-
}
9792

9893
async delete(id: number): Promise<void> {
9994
const items = await this.getItems()
@@ -102,6 +97,20 @@ class SiteCateDatabase extends BaseDatabase {
10297
delete items[id]
10398
await this.saveItems(items)
10499
}
100+
101+
async importData(data: unknown): Promise<void> {
102+
// let toImport = data[KEY] as Items
103+
// // Not import
104+
// if (typeof toImport !== 'object') return
105+
// const exists: Items = await this.getItems()
106+
// migrate(exists, toImport)
107+
// this.setByKey(KEY, exists)
108+
throw new Error('Method not implemented.')
109+
}
110+
111+
exportData(): Promise<timer.site.Cate[]> {
112+
throw new Error('Method not implemented.')
113+
}
105114
}
106115

107116
const siteCateDatabase = new SiteCateDatabase()

src/database/site-database.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,6 @@ async function existBatch(this: SiteDatabase, siteKeys: timer.site.SiteKey[]): P
179179
return Object.entries(items).map(([key]) => cvt2SiteKey(key))
180180
}
181181

182-
async function importData(this: SiteDatabase, _data: any) {
183-
throw new Error("Method not implemented.")
184-
}
185182

186183
////////////////////////////////////////////////////////////////////////////
187184
///////////////////////// /////////////////////////
@@ -197,7 +194,6 @@ class SiteDatabase extends BaseDatabase {
197194
remove = remove
198195
exist = exist
199196
existBatch = existBatch
200-
importData = importData
201197

202198
/**
203199
* Add listener to listen changes

0 commit comments

Comments
 (0)