mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-08 01:17:23 +08:00
feat: 二次封装localforage
支持设置过期时间,提供完整的类型提示
This commit is contained in:
parent
320ee2b206
commit
e10c9166ca
@ -69,6 +69,7 @@
|
|||||||
"intro.js": "^7.2.0",
|
"intro.js": "^7.2.0",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
"jsbarcode": "^3.11.5",
|
"jsbarcode": "^3.11.5",
|
||||||
|
"localforage": "^1.10.0",
|
||||||
"md-editor-v3": "2.7.2",
|
"md-editor-v3": "2.7.2",
|
||||||
"mint-filter": "^4.0.3",
|
"mint-filter": "^4.0.3",
|
||||||
"mitt": "^3.0.1",
|
"mitt": "^3.0.1",
|
||||||
|
18
pnpm-lock.yaml
generated
18
pnpm-lock.yaml
generated
@ -53,6 +53,7 @@ specifiers:
|
|||||||
js-cookie: ^3.0.5
|
js-cookie: ^3.0.5
|
||||||
jsbarcode: ^3.11.5
|
jsbarcode: ^3.11.5
|
||||||
lint-staged: ^14.0.1
|
lint-staged: ^14.0.1
|
||||||
|
localforage: ^1.10.0
|
||||||
md-editor-v3: 2.7.2
|
md-editor-v3: 2.7.2
|
||||||
mint-filter: ^4.0.3
|
mint-filter: ^4.0.3
|
||||||
mitt: ^3.0.1
|
mitt: ^3.0.1
|
||||||
@ -142,6 +143,7 @@ dependencies:
|
|||||||
intro.js: 7.2.0
|
intro.js: 7.2.0
|
||||||
js-cookie: 3.0.5
|
js-cookie: 3.0.5
|
||||||
jsbarcode: 3.11.5
|
jsbarcode: 3.11.5
|
||||||
|
localforage: 1.10.0
|
||||||
md-editor-v3: 2.7.2
|
md-editor-v3: 2.7.2
|
||||||
mint-filter: 4.0.3
|
mint-filter: 4.0.3
|
||||||
mitt: 3.0.1
|
mitt: 3.0.1
|
||||||
@ -4790,6 +4792,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
|
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
|
||||||
engines: {node: '>= 4'}
|
engines: {node: '>= 4'}
|
||||||
|
|
||||||
|
/immediate/3.0.6:
|
||||||
|
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/immer/9.0.21:
|
/immer/9.0.21:
|
||||||
resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
|
resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
|
||||||
dev: false
|
dev: false
|
||||||
@ -5696,6 +5702,12 @@ packages:
|
|||||||
type-check: 0.4.0
|
type-check: 0.4.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/lie/3.1.1:
|
||||||
|
resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==}
|
||||||
|
dependencies:
|
||||||
|
immediate: 3.0.6
|
||||||
|
dev: false
|
||||||
|
|
||||||
/lilconfig/2.1.0:
|
/lilconfig/2.1.0:
|
||||||
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
|
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@ -5747,6 +5759,12 @@ packages:
|
|||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
/localforage/1.10.0:
|
||||||
|
resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==}
|
||||||
|
dependencies:
|
||||||
|
lie: 3.1.1
|
||||||
|
dev: false
|
||||||
|
|
||||||
/locate-path/5.0.0:
|
/locate-path/5.0.0:
|
||||||
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
|
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
94
src/utils/localforage/index.ts
Normal file
94
src/utils/localforage/index.ts
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
import forage from "localforage";
|
||||||
|
import { LocalForage, ProxyStorage, ExpiresData } from "./types.d";
|
||||||
|
|
||||||
|
class StorageProxy implements ProxyStorage {
|
||||||
|
protected storage: LocalForage;
|
||||||
|
constructor(storageModel) {
|
||||||
|
this.storage = storageModel;
|
||||||
|
this.storage.config({
|
||||||
|
// driver: [forage.LOCALSTORAGE],
|
||||||
|
name: "pure-admin"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 将对应键名的数据保存到离线仓库
|
||||||
|
* @param k 键名
|
||||||
|
* @param v 键值
|
||||||
|
* @param m 缓存时间(单位`分`,默认`0`分钟,永久缓存)
|
||||||
|
*/
|
||||||
|
public async setItem<T>(k: string, v: T, m = 0): Promise<T> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.storage
|
||||||
|
.setItem(k, {
|
||||||
|
data: v,
|
||||||
|
expires: new Date().getTime() + m * 60 * 1000
|
||||||
|
})
|
||||||
|
.then(value => {
|
||||||
|
resolve(value.data);
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 从离线仓库中获取对应键名的值
|
||||||
|
* @param k 键名
|
||||||
|
*/
|
||||||
|
public async getItem<T>(k: string): Promise<T> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.storage
|
||||||
|
.getItem(k)
|
||||||
|
.then((value: ExpiresData<T>) => {
|
||||||
|
const data =
|
||||||
|
value.expires > new Date().getTime() || value.expires === 0
|
||||||
|
? value.data
|
||||||
|
: null;
|
||||||
|
resolve(data);
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 从离线仓库中删除对应键名的值
|
||||||
|
* @param k 键名
|
||||||
|
*/
|
||||||
|
public async removeItem(k: string) {
|
||||||
|
return new Promise<void>((resolve, reject) => {
|
||||||
|
this.storage
|
||||||
|
.removeItem(k)
|
||||||
|
.then(() => {
|
||||||
|
resolve();
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 从离线仓库中删除所有的键名,重置数据库
|
||||||
|
*/
|
||||||
|
public async clear() {
|
||||||
|
return new Promise<void>((resolve, reject) => {
|
||||||
|
this.storage
|
||||||
|
.clear()
|
||||||
|
.then(() => {
|
||||||
|
resolve();
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 二次封装 [localforage](https://localforage.docschina.org/) 支持设置过期时间,提供完整的类型提示
|
||||||
|
*/
|
||||||
|
export const localForage = () => new StorageProxy(forage);
|
166
src/utils/localforage/types.d.ts
vendored
Normal file
166
src/utils/localforage/types.d.ts
vendored
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
// https://github.com/localForage/localForage/blob/master/typings/localforage.d.ts
|
||||||
|
|
||||||
|
interface LocalForageDbInstanceOptions {
|
||||||
|
name?: string;
|
||||||
|
|
||||||
|
storeName?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LocalForageOptions extends LocalForageDbInstanceOptions {
|
||||||
|
driver?: string | string[];
|
||||||
|
|
||||||
|
size?: number;
|
||||||
|
|
||||||
|
version?: number;
|
||||||
|
|
||||||
|
description?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LocalForageDbMethodsCore {
|
||||||
|
getItem<T>(
|
||||||
|
key: string,
|
||||||
|
callback?: (err: any, value: T | null) => void
|
||||||
|
): Promise<T | null>;
|
||||||
|
|
||||||
|
setItem<T>(
|
||||||
|
key: string,
|
||||||
|
value: T,
|
||||||
|
callback?: (err: any, value: T) => void
|
||||||
|
): Promise<T>;
|
||||||
|
|
||||||
|
removeItem(key: string, callback?: (err: any) => void): Promise<void>;
|
||||||
|
|
||||||
|
clear(callback?: (err: any) => void): Promise<void>;
|
||||||
|
|
||||||
|
length(callback?: (err: any, numberOfKeys: number) => void): Promise<number>;
|
||||||
|
|
||||||
|
key(
|
||||||
|
keyIndex: number,
|
||||||
|
callback?: (err: any, key: string) => void
|
||||||
|
): Promise<string>;
|
||||||
|
|
||||||
|
keys(callback?: (err: any, keys: string[]) => void): Promise<string[]>;
|
||||||
|
|
||||||
|
iterate<T, U>(
|
||||||
|
iteratee: (value: T, key: string, iterationNumber: number) => U,
|
||||||
|
callback?: (err: any, result: U) => void
|
||||||
|
): Promise<U>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LocalForageDropInstanceFn {
|
||||||
|
(
|
||||||
|
dbInstanceOptions?: LocalForageDbInstanceOptions,
|
||||||
|
callback?: (err: any) => void
|
||||||
|
): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LocalForageDriverMethodsOptional {
|
||||||
|
dropInstance?: LocalForageDropInstanceFn;
|
||||||
|
}
|
||||||
|
|
||||||
|
// duplicating LocalForageDriverMethodsOptional to preserve TS v2.0 support,
|
||||||
|
// since Partial<> isn't supported there
|
||||||
|
interface LocalForageDbMethodsOptional {
|
||||||
|
dropInstance: LocalForageDropInstanceFn;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LocalForageDriverDbMethods
|
||||||
|
extends LocalForageDbMethodsCore,
|
||||||
|
LocalForageDriverMethodsOptional {}
|
||||||
|
|
||||||
|
interface LocalForageDriverSupportFunc {
|
||||||
|
(): Promise<boolean>;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LocalForageDriver extends LocalForageDriverDbMethods {
|
||||||
|
_driver: string;
|
||||||
|
|
||||||
|
_initStorage(options: LocalForageOptions): void;
|
||||||
|
|
||||||
|
_support?: boolean | LocalForageDriverSupportFunc;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LocalForageSerializer {
|
||||||
|
serialize<T>(
|
||||||
|
value: T | ArrayBuffer | Blob,
|
||||||
|
callback: (value: string, error: any) => void
|
||||||
|
): void;
|
||||||
|
|
||||||
|
deserialize<T>(value: string): T | ArrayBuffer | Blob;
|
||||||
|
|
||||||
|
stringToBuffer(serializedString: string): ArrayBuffer;
|
||||||
|
|
||||||
|
bufferToString(buffer: ArrayBuffer): string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LocalForageDbMethods
|
||||||
|
extends LocalForageDbMethodsCore,
|
||||||
|
LocalForageDbMethodsOptional {}
|
||||||
|
|
||||||
|
export interface LocalForage extends LocalForageDbMethods {
|
||||||
|
LOCALSTORAGE: string;
|
||||||
|
WEBSQL: string;
|
||||||
|
INDEXEDDB: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set and persist localForage options. This must be called before any other calls to localForage are made, but can be called after localForage is loaded.
|
||||||
|
* If you set any config values with this method they will persist after driver changes, so you can call config() then setDriver()
|
||||||
|
* @param {LocalForageOptions} options?
|
||||||
|
*/
|
||||||
|
config(options: LocalForageOptions): boolean;
|
||||||
|
config(options: string): any;
|
||||||
|
config(): LocalForageOptions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new instance of localForage to point to a different store.
|
||||||
|
* All the configuration options used by config are supported.
|
||||||
|
* @param {LocalForageOptions} options
|
||||||
|
*/
|
||||||
|
createInstance(options: LocalForageOptions): LocalForage;
|
||||||
|
|
||||||
|
driver(): string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Force usage of a particular driver or drivers, if available.
|
||||||
|
* @param {string} driver
|
||||||
|
*/
|
||||||
|
setDriver(
|
||||||
|
driver: string | string[],
|
||||||
|
callback?: () => void,
|
||||||
|
errorCallback?: (error: any) => void
|
||||||
|
): Promise<void>;
|
||||||
|
|
||||||
|
defineDriver(
|
||||||
|
driver: LocalForageDriver,
|
||||||
|
callback?: () => void,
|
||||||
|
errorCallback?: (error: any) => void
|
||||||
|
): Promise<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a particular driver
|
||||||
|
* @param {string} driver
|
||||||
|
*/
|
||||||
|
getDriver(driver: string): Promise<LocalForageDriver>;
|
||||||
|
|
||||||
|
getSerializer(
|
||||||
|
callback?: (serializer: LocalForageSerializer) => void
|
||||||
|
): Promise<LocalForageSerializer>;
|
||||||
|
|
||||||
|
supports(driverName: string): boolean;
|
||||||
|
|
||||||
|
ready(callback?: (error: any) => void): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Customize
|
||||||
|
|
||||||
|
export interface ProxyStorage {
|
||||||
|
setItem<T>(k: string, v: T, m: number): Promise<T>;
|
||||||
|
getItem<T>(k: string): Promise<T>;
|
||||||
|
removeItem(k: string): Promise<void>;
|
||||||
|
clear(): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ExpiresData<T> {
|
||||||
|
data: T;
|
||||||
|
expires: number;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user