style(@vben-core/shared): formatting
parent
e555ee065e
commit
51e8b27d4c
|
|
@ -308,7 +308,7 @@ await userCache.setItem('profile', {name: '张三'});
|
||||||
await configCache.setItem('profile', {theme: 'dark'});
|
await configCache.setItem('profile', {theme: 'dark'});
|
||||||
|
|
||||||
// 各自独立
|
// 各自独立
|
||||||
await userCache.getItem('profile'); // => { name: '张三' }
|
await userCache.getItem('profile'); // => { name: '张三' }
|
||||||
await configCache.getItem('profile'); // => { theme: 'dark' }
|
await configCache.getItem('profile'); // => { theme: 'dark' }
|
||||||
|
|
||||||
// 只清除 user 前缀的数据
|
// 只清除 user 前缀的数据
|
||||||
|
|
@ -325,9 +325,12 @@ const cache = new StorageManager({ prefix: 'app' });
|
||||||
await cache.clearExpiredItems();
|
await cache.clearExpiredItems();
|
||||||
|
|
||||||
// 或者定时清理(每 10 分钟)
|
// 或者定时清理(每 10 分钟)
|
||||||
setInterval(async () => {
|
setInterval(
|
||||||
await cache.clearExpiredItems();
|
async () => {
|
||||||
}, 10 * 60 * 1000);
|
await cache.clearExpiredItems();
|
||||||
|
},
|
||||||
|
10 * 60 * 1000,
|
||||||
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -338,8 +341,8 @@ setInterval(async () => {
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
interface StorageItem<T> {
|
interface StorageItem<T> {
|
||||||
expiry?: number; // 过期时间戳(毫秒),undefined 表示永不过期
|
expiry?: number; // 过期时间戳(毫秒),undefined 表示永不过期
|
||||||
value: T; // 实际业务数据
|
value: T; // 实际业务数据
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,11 +44,7 @@ describe('storageManager', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should clear expired items', async () => {
|
it('should clear expired items', async () => {
|
||||||
await storageManager.setItem(
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 1000); // 1秒过期
|
||||||
'user',
|
|
||||||
{age: 30, name: 'John Doe'},
|
|
||||||
1000,
|
|
||||||
); // 1秒过期
|
|
||||||
vi.advanceTimersByTime(1001); // 快进时间
|
vi.advanceTimersByTime(1001); // 快进时间
|
||||||
await storageManager.clearExpiredItems();
|
await storageManager.clearExpiredItems();
|
||||||
const user = await storageManager.getItem('user');
|
const user = await storageManager.getItem('user');
|
||||||
|
|
@ -56,11 +52,7 @@ describe('storageManager', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not clear non-expired items', async () => {
|
it('should not clear non-expired items', async () => {
|
||||||
await storageManager.setItem(
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 10_000); // 10秒过期
|
||||||
'user',
|
|
||||||
{age: 30, name: 'John Doe'},
|
|
||||||
10_000,
|
|
||||||
); // 10秒过期
|
|
||||||
vi.advanceTimersByTime(5000); // 快进时间
|
vi.advanceTimersByTime(5000); // 快进时间
|
||||||
await storageManager.clearExpiredItems();
|
await storageManager.clearExpiredItems();
|
||||||
const user = await storageManager.getItem('user');
|
const user = await storageManager.getItem('user');
|
||||||
|
|
@ -87,38 +79,22 @@ describe('storageManager', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should remove expired items when accessed', async () => {
|
it('should remove expired items when accessed', async () => {
|
||||||
await storageManager.setItem(
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 1000); // 1秒过期
|
||||||
'user',
|
|
||||||
{age: 30, name: 'John Doe'},
|
|
||||||
1000,
|
|
||||||
); // 1秒过期
|
|
||||||
vi.advanceTimersByTime(1001); // 快进时间
|
vi.advanceTimersByTime(1001); // 快进时间
|
||||||
const user = await storageManager.getItem('user');
|
const user = await storageManager.getItem('user');
|
||||||
expect(user).toBeNull();
|
expect(user).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not remove non-expired items when accessed', async () => {
|
it('should not remove non-expired items when accessed', async () => {
|
||||||
await storageManager.setItem(
|
await storageManager.setItem('user', {age: 30, name: 'John Doe'}, 10_000); // 10秒过期
|
||||||
'user',
|
|
||||||
{age: 30, name: 'John Doe'},
|
|
||||||
10_000,
|
|
||||||
); // 10秒过期
|
|
||||||
vi.advanceTimersByTime(5000); // 快进时间
|
vi.advanceTimersByTime(5000); // 快进时间
|
||||||
const user = await storageManager.getItem('user');
|
const user = await storageManager.getItem('user');
|
||||||
expect(user).toEqual({ age: 30, name: 'John Doe' });
|
expect(user).toEqual({ age: 30, name: 'John Doe' });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle multiple items with different expiry times', async () => {
|
it('should handle multiple items with different expiry times', async () => {
|
||||||
await storageManager.setItem(
|
await storageManager.setItem('user1', {age: 30, name: 'John Doe'}, 1000); // 1秒过期
|
||||||
'user1',
|
await storageManager.setItem('user2', {age: 25, name: 'Jane Doe'}, 2000); // 2秒过期
|
||||||
{age: 30, name: 'John Doe'},
|
|
||||||
1000,
|
|
||||||
); // 1秒过期
|
|
||||||
await storageManager.setItem(
|
|
||||||
'user2',
|
|
||||||
{age: 25, name: 'Jane Doe'},
|
|
||||||
2000,
|
|
||||||
); // 2秒过期
|
|
||||||
vi.advanceTimersByTime(1500); // 快进时间
|
vi.advanceTimersByTime(1500); // 快进时间
|
||||||
await storageManager.clearExpiredItems();
|
await storageManager.clearExpiredItems();
|
||||||
const user1 = await storageManager.getItem('user1');
|
const user1 = await storageManager.getItem('user1');
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,9 @@ interface LocalStorageDriverOptions {
|
||||||
class LocalStorageDriver implements IStorageDriver {
|
class LocalStorageDriver implements IStorageDriver {
|
||||||
private storage: Storage;
|
private storage: Storage;
|
||||||
|
|
||||||
constructor({storageType = 'localStorage'}: LocalStorageDriverOptions = {}) {
|
constructor({
|
||||||
|
storageType = 'localStorage',
|
||||||
|
}: LocalStorageDriverOptions = {}) {
|
||||||
this.storage =
|
this.storage =
|
||||||
storageType === 'localStorage'
|
storageType === 'localStorage'
|
||||||
? window.localStorage
|
? window.localStorage
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
import type {IStorageDriver, StorageItem, StorageManagerOptions} from './types';
|
import type {
|
||||||
|
IStorageDriver,
|
||||||
|
StorageItem,
|
||||||
|
StorageManagerOptions,
|
||||||
|
} from './types';
|
||||||
|
|
||||||
import {LocalStorageDriver} from './local-storage-driver';
|
import {LocalStorageDriver} from './local-storage-driver';
|
||||||
|
|
||||||
|
|
@ -47,7 +51,10 @@ class StorageManager {
|
||||||
* @param defaultValue 当项不存在或已过期时返回的默认值
|
* @param defaultValue 当项不存在或已过期时返回的默认值
|
||||||
* @returns 值,如果项已过期则返回默认值
|
* @returns 值,如果项已过期则返回默认值
|
||||||
*/
|
*/
|
||||||
async getItem<T>(key: string, defaultValue: null | T = null): Promise<null | T> {
|
async getItem<T>(
|
||||||
|
key: string,
|
||||||
|
defaultValue: null | T = null,
|
||||||
|
): Promise<null | T> {
|
||||||
const fullKey = this.getFullKey(key);
|
const fullKey = this.getFullKey(key);
|
||||||
const raw = await this.driver.getItem<StorageItem<T>>(fullKey);
|
const raw = await this.driver.getItem<StorageItem<T>>(fullKey);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue