198b240755
* get ip and hostnames * use heroicons * add host field * get private info * unstyled prototype * styled select * add to setup * fix types
30 lines
494 B
TypeScript
30 lines
494 B
TypeScript
type Opts = {
|
|
/**
|
|
* Expiry time in milliseconds
|
|
*/
|
|
expiry: number;
|
|
};
|
|
|
|
/**
|
|
* Cache function for 1 hour
|
|
*/
|
|
export function cacheFunction<T>(fn: () => T, { expiry }: Opts): () => T {
|
|
let cache: { value: T; expiry: number } | null = null;
|
|
|
|
return (): T => {
|
|
const now = Date.now();
|
|
|
|
if (cache && cache.expiry > now) {
|
|
return cache.value;
|
|
}
|
|
|
|
const result = fn();
|
|
cache = {
|
|
value: result,
|
|
expiry: now + expiry,
|
|
};
|
|
|
|
return result;
|
|
};
|
|
}
|