aura-storage
Version:
306 lines (292 loc) • 8.63 kB
TypeScript
interface IStorage {
/**
* 获取存储项
* @param key 键名
* @returns 存储的值
*/
getItem(key: string): any;
/**
* 设置存储项
* @param key 键名
* @param value 值
* @param expire 过期时间(分钟)
*/
setItem(key: string, value: any, expire?: number): any;
/**
* 移除存储项
* @param key 键名
*/
removeItem(key: string): any;
/**
* 清空所有存储项
*/
clear(): any;
/**
* 获取所有键名
*/
keys(): any;
/**
* 获取存储大小
*/
size(): any;
}
interface StorageData {
value: any;
expire: number | null;
isEncrypted: boolean;
}
interface IEncryptionService {
encryptData(data: string): string;
decryptData(encryptedData: string): string;
}
declare class EncryptionService implements IEncryptionService {
private readonly encryption;
constructor({ key, iv, hasEncrypt }: {
hasEncrypt: boolean;
key: string;
iv: string;
});
encryptData(data: string): string;
decryptData(encryptedData: string): string;
handleEncryption(key: string, iv: string): boolean;
}
declare abstract class BaseStorage implements IStorage {
private static cleanupInterval;
protected static encryptionService: EncryptionService;
protected readonly cache: any;
protected readonly prefix: string;
protected readonly hasEncrypt: boolean;
protected readonly storageType?: string;
constructor({ prefix, hasEncrypt, key, iv }: {
hasEncrypt: boolean;
prefix?: string;
key: string;
iv: string;
});
protected setCache(key: string, value: any, expire?: number | null): void;
protected getCache(key: string): any | undefined;
protected deleteCache(key: string): void;
protected clearCache(): void;
/**
* 生成带有前缀(如果有)并转换为大写的键。
*
*
* @param {string} key - 需要格式化的原始键。
* @returns {string} - 带有前缀并转换为大写的键。
*/
protected getPrefixedKey(key: string, prefixKey?: string): string;
protected setCacheKey(key: string): string;
/**
* 检查数据是否未过期。
*
* @param {StorageData} data - 数据对象。
* @returns {boolean} - 是否未过期。
*/
protected isNotExpired(data: StorageData): boolean;
/**
* 准备要存储的数据。
*
* @param {*} value - 要存储的数据。
* @param {number} [expire=0] - 过期时间(单位`分`,默认`0`分钟,永久缓存)。
* @returns {string} - 准备好的 JSON 字符串。
*/
protected prepareStorageData(key: string, value: any, expire?: number | null): string;
/**
* 解析存储的数据
*/
protected parseStorageData(data: string): StorageData | null;
/**
* 创建缓存项对象
*/
private createCacheItem;
/**
* 抽象方法:具体存储实现需要实现这些方法
*/
abstract getItem(key: string): any;
abstract setItem(key: string, value: any, expire?: number): void;
abstract removeItem(key: string): void;
abstract clear(): void;
abstract keys(): string[];
abstract size(): number;
/**
* 检查键是否存在
*/
hasItem(key: string): Promise<boolean>;
/**
* 获取多个键的值
*/
getItems(keys: string[]): Promise<Record<string, any>>;
/**
* 设置多个键值对
*/
setItems(items: Record<string, any>, expire?: number): Promise<void>;
/**
* 移除多个键
*/
removeItems(keys: string[]): Promise<void>;
/**
* 设置自动清理机制
*/
private setupAutoCleanup;
/**
* 清理过期的缓存项并重新获取存储数据
*/
protected cleanCache(): Promise<void>;
destroy(): void;
}
export type StorageOptions = Partial<CreateStorageParams>;
export interface CreateStorageParams {
prefix?: string;
storage?: Storage;
hasEncrypt: boolean;
cacheName?: string;
key: string;
iv: string;
storageAdapter: Storage;
storageType?: CacheType;
}
declare enum CacheType {
LOCALSTORAGE = "LOCALSTORAGE",
SESSIONSTORAGE = "SESSIONSTORAGE",
INDEXEDDB = "INDEXEDDB",
UNIAPP = "UNIAPP",
COOKIE = "COOKIE"
}
type WebStorageOptions = CreateStorageParams & {
storageAdapter: Storage$1;
storageType?: CacheType;
};
declare class Storage$1 extends BaseStorage {
private readonly storageAdapter;
protected readonly storageType?: CacheType;
constructor(options: WebStorageOptions);
getItem(key: string): unknown;
setItem(key: string, value: unknown, expire?: number): void;
removeItem(key: string): void;
clear(): void;
keys(): string[];
size(): number;
}
interface StorageAdapter {
getItem(key: string): string | null;
setItem(key: string, value: string): void;
removeItem(key: string): void;
clear(): void;
keys(): string[];
size(): number;
}
declare class CookieStorageAdapter implements StorageAdapter {
private storageType;
constructor();
getItem(key: string): any;
setItem(key: string, value: string): void;
removeItem(key: string): void;
clear(): void;
keys(): string[];
size(): number;
}
declare class UniAppStorageAdapter implements StorageAdapter {
private storageType;
constructor();
getItem(key: string): string | null;
setItem(key: string, value: string): void;
removeItem(key: string): void;
clear(): void;
keys(): string[];
size(): number;
}
/**
* Web Storage 适配器
* 用于处理 localStorage 和 sessionStorage 的存储操作
*/
declare class WebStorageAdapter implements StorageAdapter {
private storage;
private storageType;
constructor(storage: Storage);
/**
* 获取存储项
* @param key 键名
* @returns 存储的值,如果不存在则返回 null
*/
getItem(key: string): string | null;
/**
* 设置存储项
* @param key 键名
* @param value 要存储的值
*/
setItem(key: string, value: string): void;
/**
* 移除存储项
* @param key 键名
*/
removeItem(key: string): void;
/**
* 清空所有存储项
*/
clear(): void;
/**
* 获取所有存储项的键名
* @returns 键名数组
*/
keys(): string[];
/**
* 获取存储项的数量
* @returns 存储项数量
*/
size(): number;
}
declare class IndexedDBStorage implements StorageAdapter {
private storage;
private storageType;
constructor({ cacheName }: {
cacheName: string;
});
/**
* 获取存储项
* @param key 键名
* @returns 存储的值,如果不存在则返回 null
*/
getItem(key: string): Promise<string | null>;
/**
* 异步设置缓存项,并可以选择设置过期时间。
*
* @param {string} key - 要存储数据的键。
* @param {*} value - 要存储的数据。
* @param {number} [expire] - 过期时间(单位`分`,默认`0`分钟,永久缓存)。
* @returns {Promise<void>} - 一个 Promise 对象,表示设置操作的结果。
*/
setItem(key: string, value: any): Promise<void>;
/**
* 异步从离线仓库中删除对应键名的值。
*
* @param {string} key - 键名。
* @returns {Promise<boolean>} - 操作是否成功。
*/
removeItem(key: string): Promise<void>;
/**
* 异步从离线仓库中删除所有的键名,重置数据库。
*
* @returns {Promise<boolean>} - 操作是否成功。
*/
clear(): void;
/**
* 异步获取数据仓库中所有的key。
*
* @returns {Promise<string[]>} - 一个 Promise 对象,表示获取所有键的结果。
*/
Keys(): void;
}
export declare function cookieAdapter(): CookieStorageAdapter;
export declare function webLocalAdapter(localStorageType: any): WebStorageAdapter;
export declare function webSessionAdapter(localStorageType: any): WebStorageAdapter;
export declare function uniAppAdapter(): UniAppStorageAdapter;
export declare function indexedDBAdapter({ cacheName }: {
cacheName?: string | undefined;
}): IndexedDBStorage;
/**
* 创建 Aura 存储实例
* @param options - 存储配置选项
* @returns 存储实例
* @throws {StorageError} 当存储类型不支持或创建失败时抛出错误
*/
export declare function createAuraStorage(options: any): Storage$1;