import { type Ref } from 'vue'; import { type MaybeRefOrGetter } from '../../utils/utils'; export type CacheStrategy = 'memory' | 'localStorage' | 'sessionStorage' | 'indexedDB'; export type CacheKeyGenerator

= string | ((params: P) => string); export interface UseRequestCacheOptions { /** 请求函数 */ requestFn: (params: P) => Promise; /** 缓存唯一标记,用于区分不同请求。可以是字符串或生成函数 */ cacheKey: CacheKeyGenerator

; /** 缓存时间(毫秒),默认 5 分钟 (300000ms) */ cacheTime?: number; /** Storage 策略,默认为 'memory' */ storage?: MaybeRefOrGetter; /** 请求参数(响应式或普通对象),用于生成动态 key */ params?: MaybeRefOrGetter

; /** 结果转换函数,在返回数据前进行转换 */ transformResult?: (data: R) => T; /** 是否立即执行,默认 true */ immediate?: boolean; /** 手动指定的 storage key 前缀,默认 'req_cache_' */ storageKeyPrefix?: string; /** 首次请求是否强制更新(跳过缓存),默认为 false */ forceRefreshOnFirst?: MaybeRefOrGetter; /** IndexedDB 数据库名称,仅在 storage 为 'indexedDB' 时有效,默认 'RequestCacheDB' */ dbName?: string; /** IndexedDB 存储对象名称,仅在 storage 为 'indexedDB' 时有效,默认 'request_cache' */ storeName?: string; /** 请求成功的回调 */ onSuccess?: (data: T) => void; /** 请求失败的回调 */ onError?: (error: any) => void; } export interface UseRequestCacheReturn { data: Ref; loading: Ref; error: Ref; /** 执行请求 (优先使用缓存) */ run: () => Promise; /** 刷新(忽略缓存,强制请求) */ refresh: () => Promise; /** 清除指定 key 的缓存,如果不传则清除当前自动生成的 key */ clearCache: (key?: string) => Promise; } /** 缓存快照条目,由 getRequestCache 返回 */ export interface CacheSnapshot { /** 缓存的原始 key(不含 storageKeyPrefix) */ key: string; /** 缓存的原始数据(未经 transformResult 处理) */ data: unknown; /** 写入时间戳(毫秒) */ timestamp: number; /** 所在 storage 策略 */ storage: CacheStrategy; /** 是否已过期(但尚未被清除) */ isExpired: boolean; } /** clearRequestCache / getRequestCache 的过滤条件 */ export interface RequestCacheFilter { /** 指定要操作的 key 列表,不传则匹配所有 */ keys?: string[]; /** 按 storage 策略过滤,不传则匹配所有 */ storage?: CacheStrategy | CacheStrategy[]; /** 按 storageKeyPrefix 过滤,不传则匹配所有 */ storageKeyPrefix?: string; } /** * 支持缓存的请求 Hook * * 特性: * 1. 支持内存、localStorage、sessionStorage 缓存 * 2. 支持请求去重(并发请求共享同一个 Promise) * 3. 支持结果转换 (transformResult) * 4. 支持缓存过期时间 * * @param options 配置选项 */ export declare function useRequestCache(options: UseRequestCacheOptions): UseRequestCacheReturn; /** * 清除缓存注册表中匹配的缓存条目。 * 不传 filter 时清除全部;孤儿缓存(已卸载实例写入的持久化缓存)不在清除范围内,会等待自然过期。 */ export declare function clearRequestCache(filter?: RequestCacheFilter): Promise; /** * 获取缓存注册表中匹配的缓存快照列表。 * 不传 filter 时返回全部;返回的 data 为原始数据,未经 transformResult 处理。 */ export declare function getRequestCache(filter?: RequestCacheFilter): Promise; /** setRequestCache 单条注入配置 */ export interface SetRequestCacheEntry { /** 缓存 key,需与对应 useRequestCache 实例的 cacheKey 保持一致 */ key: string; /** 要注入的原始数据(与 requestFn 返回类型一致) */ data: unknown; /** 缓存时间(毫秒),默认 Infinity(永久不过期) */ cacheTime?: number; /** Storage 策略,默认 'memory' */ storage?: CacheStrategy; /** storage key 前缀,默认 'req_cache_' */ storageKeyPrefix?: string; /** IndexedDB 数据库名,默认 'RequestCacheDB' */ dbName?: string; /** IndexedDB store 名,默认 'request_cache' */ storeName?: string; } /** * 在项目初始化阶段(如 main.ts)批量注入静态缓存数据。 * 注入后,useRequestCache 实例首次 run() 将直接命中缓存,不发起网络请求。 * * @example * // main.ts * await setRequestCache([ * { key: 'user-profile', data: window.__APP_CONFIG__.user }, * { key: 'permissions', data: window.__APP_CONFIG__.permissions }, * ]) * app.mount('#app') */ export declare function setRequestCache(entries: SetRequestCacheEntry | SetRequestCacheEntry[]): Promise; //# sourceMappingURL=index.d.ts.map