summaryrefslogtreecommitdiff
path: root/src/misc/cache.ts
blob: 5b7017a3b904415fab3582c623302471eda4b654 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
export class Cache<T> {
	private cache: Map<string | null, { date: number; value: T; }>;
	private lifetime: number;

	constructor(lifetime: Cache<never>['lifetime']) {
		this.cache = new Map();
		this.lifetime = lifetime;
	}

	public set(key: string | null, value: T): void {
		this.cache.set(key, {
			date: Date.now(),
			value
		});
	}

	public get(key: string | null): T | null {
		const cached = this.cache.get(key);
		if (cached == null) return null;
		if ((Date.now() - cached.date) > this.lifetime) {
			this.cache.delete(key);
			return null;
		}
		return cached.value;
	}
}