You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

48 lines
1.1 KiB

import type { CacheDriver } from '../types'
interface MemoryEntry {
value: unknown
expiresAt: number | null
}
export class MemoryDriver implements CacheDriver {
name = 'memory'
private store = new Map<string, MemoryEntry>()
async get<T>(key: string): Promise<T | null> {
const entry = this.store.get(key)
if (!entry) return null
if (entry.expiresAt !== null && entry.expiresAt < Date.now()) {
this.store.delete(key)
return null
}
return entry.value as T
}
async set<T>(key: string, value: T, ttl = 0): Promise<void> {
const expiresAt = ttl > 0 ? Date.now() + ttl * 1000 : null
this.store.set(key, { value, expiresAt })
}
async del(key: string): Promise<void> {
this.store.delete(key)
}
async exists(key: string): Promise<boolean> {
const entry = this.store.get(key)
if (!entry) return false
if (entry.expiresAt !== null && entry.expiresAt < Date.now()) {
this.store.delete(key)
return false
}
return true
}
async clear(): Promise<void> {
this.store.clear()
}
}