/* * Copyright 2025 coze-dev Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ type Timer = ReturnType; type CachedKey = string | number; export interface CachedData { data: TData; time: number; } export interface RecordData extends CachedData { timer: Timer | undefined; } const cache = new Map(); const setCache = ( key: CachedKey, cacheTime: number, cachedData: CachedData, ) => { const currentCache = cache.get(key); if (currentCache?.timer) { clearTimeout(currentCache.timer); } let timer: Timer | undefined = undefined; if (cacheTime > -1) { // if cache out, clear it timer = setTimeout(() => { cache.delete(key); }, cacheTime); } cache.set(key, { ...cachedData, timer, }); }; const getCache = (key: CachedKey) => cache.get(key); const clearCache = (key?: string | string[]) => { if (key) { const cacheKeys = Array.isArray(key) ? key : [key]; cacheKeys.forEach(cacheKey => cache.delete(cacheKey)); } else { cache.clear(); } }; export { getCache, setCache, clearCache };