/** * 统一存储管理器 * * 提供统一的接口来使用 localStorage (AsyncStorage) 或 sessionStorage * * 使用场景: * - localStorage: 持久化数据,应用重启后仍然存在 * - sessionStorage: 临时数据,应用重启后丢失 * * 示例: * ```typescript * // 使用 localStorage(默认) * await StorageManager.set('user', userData); * * // 使用 sessionStorage * await StorageManager.set('temp', tempData, { type: 'session' }); * * // 获取数据(自动从正确的存储中读取) * const user = await StorageManager.get('user'); * const temp = await StorageManager.get('temp', { type: 'session' }); * ``` */ import Storage from './storage'; import SessionStorage from './sessionStorage'; /** * 存储类型 */ export type StorageType = 'local' | 'session'; /** * 存储选项 */ export interface StorageOptions { /** * 存储类型 * - 'local': 持久化存储(AsyncStorage) * - 'session': 会话存储(内存) */ type?: StorageType; } /** * 统一存储管理器 */ class StorageManager { /** * 存储字符串 */ static async setString( key: string, value: string, options: StorageOptions = {} ): Promise { const { type = 'local' } = options; if (type === 'session') { SessionStorage.setString(key, value); } else { await Storage.setString(key, value); } } /** * 获取字符串 */ static async getString( key: string, options: StorageOptions = {} ): Promise { const { type = 'local' } = options; if (type === 'session') { return SessionStorage.getString(key); } else { return await Storage.getString(key); } } /** * 存储对象 */ static async setObject( key: string, value: T, options: StorageOptions = {} ): Promise { const { type = 'local' } = options; if (type === 'session') { SessionStorage.setObject(key, value); } else { await Storage.setObject(key, value); } } /** * 获取对象 */ static async getObject( key: string, options: StorageOptions = {} ): Promise { const { type = 'local' } = options; if (type === 'session') { return SessionStorage.getObject(key); } else { return await Storage.getObject(key); } } /** * 删除指定键 */ static async remove(key: string, options: StorageOptions = {}): Promise { const { type = 'local' } = options; if (type === 'session') { SessionStorage.remove(key); } else { await Storage.remove(key); } } /** * 清空指定类型的所有存储 */ static async clear(options: StorageOptions = {}): Promise { const { type = 'local' } = options; if (type === 'session') { SessionStorage.clear(); } else { await Storage.clear(); } } /** * 获取所有键名 */ static async getAllKeys(options: StorageOptions = {}): Promise { const { type = 'local' } = options; if (type === 'session') { return SessionStorage.getAllKeys(); } else { return await Storage.getAllKeys(); } } /** * 检查键是否存在 */ static async has(key: string, options: StorageOptions = {}): Promise { const { type = 'local' } = options; if (type === 'session') { return SessionStorage.has(key); } else { const value = await Storage.getString(key); return value !== null; } } /** * 批量获取 */ static async multiGet( keys: string[], options: StorageOptions = {} ): Promise<[string, string | null][]> { const { type = 'local' } = options; if (type === 'session') { return SessionStorage.multiGet(keys); } else { return await Storage.multiGet(keys); } } /** * 批量设置 */ static async multiSet( keyValuePairs: [string, string][], options: StorageOptions = {} ): Promise { const { type = 'local' } = options; if (type === 'session') { SessionStorage.multiSet(keyValuePairs); } else { await Storage.multiSet(keyValuePairs); } } /** * 批量删除 */ static async multiRemove( keys: string[], options: StorageOptions = {} ): Promise { const { type = 'local' } = options; if (type === 'session') { SessionStorage.multiRemove(keys); } else { await Storage.multiRemove(keys); } } /** * 获取存储大小(仅 session storage) */ static getSize(options: StorageOptions = {}): number { const { type = 'local' } = options; if (type === 'session') { return SessionStorage.length; } else { // AsyncStorage 不支持直接获取大小 return -1; } } /** * 清空所有存储(local + session) */ static async clearAll(): Promise { await Storage.clear(); SessionStorage.clear(); if (__DEV__) { console.log('🗑️ All storage cleared (local + session)'); } } } export default StorageManager;