persistent.ts
2.76 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import { toRaw } from 'vue'
import { Memory } from './memory'
import { createLocalStorage, createSessionStorage } from '@/utils/cache'
import { DEFAULT_CACHE_TIME } from '@/settings/encryptionSetting'
import { APP_LOCAL_CACHE_KEY, APP_SESSION_CACHE_KEY } from '@/enums/cacheEnum'
import type { EDGE_JWT_TOKEN_KEY, EDGE_REFRESH_TOKEN_KEY, JWT_TOKEN_KEY, LOCK_INFO_KEY, REFRESH_TOKEN_KEY, ROLES_KEY, SHARE_JWT_TOKEN_KEY, SHARE_REFRESH_TOKEN_KEY, USER_INFO_KEY } from '@/enums/cacheEnum'
import type { UserInfo } from '#/store'
export interface BasicStore {
[USER_INFO_KEY]: NullableOrUndefineable<UserInfo>
[ROLES_KEY]: string[]
[LOCK_INFO_KEY]: LockInfo
[JWT_TOKEN_KEY]?: string
[REFRESH_TOKEN_KEY]?: string
[SHARE_JWT_TOKEN_KEY]?: string
[SHARE_REFRESH_TOKEN_KEY]?: string
[EDGE_JWT_TOKEN_KEY]?: string
[EDGE_REFRESH_TOKEN_KEY]?: string
}
type LocalStore = BasicStore
type SessionStore = BasicStore
export type BasicKeys = keyof BasicStore
type LocalKeys = keyof LocalStore
type SessionKeys = keyof SessionStore
const ls = createLocalStorage()
const ss = createSessionStorage()
const localMemory = new Memory(DEFAULT_CACHE_TIME)
const sessionMemory = new Memory(DEFAULT_CACHE_TIME)
export class Persistent {
static getLocal<T>(key: LocalKeys) {
return localMemory.get(key)?.value as Nullable<T>
}
static setLocal(key: LocalKeys, value: LocalStore[LocalKeys], immediate = false): void {
localMemory.set(key, toRaw(value))
immediate && ls.set(APP_LOCAL_CACHE_KEY, localMemory.getCache)
}
static removeLocal(key: LocalKeys, immediate = false): void {
localMemory.remove(key)
immediate && ls.set(APP_LOCAL_CACHE_KEY, localMemory.getCache)
}
static clearLocal(immediate = false): void {
localMemory.clear()
immediate && ls.clear()
}
static getSession<T>(key: SessionKeys) {
return sessionMemory.get(key)?.value as Nullable<T>
}
static setSession(key: SessionKeys, value: SessionStore[SessionKeys], immediate = false): void {
sessionMemory.set(key, toRaw(value))
immediate && ss.set(APP_SESSION_CACHE_KEY, sessionMemory.getCache)
}
static removeSession(key: SessionKeys, immediate = false): void {
sessionMemory.remove(key)
immediate && ss.set(APP_SESSION_CACHE_KEY, sessionMemory.getCache)
}
static clearSession(immediate = false): void {
sessionMemory.clear()
immediate && ss.clear()
}
static clearAll(immediate = false) {
sessionMemory.clear()
localMemory.clear()
if (immediate) {
ls.clear()
ss.clear()
}
}
}
function initPersistentMemory() {
const localCache = ls.get(APP_LOCAL_CACHE_KEY)
const sessionCache = ss.get(APP_SESSION_CACHE_KEY)
localCache && localMemory.resetCache(localCache)
sessionCache && sessionMemory.resetCache(sessionCache)
}
initPersistentMemory()