mirror of
https://github.com/nestriness/nestri.git
synced 2026-09-19 09:15:19 +03:00
19 lines
383 B
TypeScript
19 lines
383 B
TypeScript
export function memo<T>(fn: () => T, cleanup?: (input: T) => Promise<void>) {
|
|
let value: T | undefined;
|
|
let loaded = false;
|
|
|
|
const result = (): T => {
|
|
if (loaded) return value as T;
|
|
loaded = true;
|
|
value = fn();
|
|
return value as T;
|
|
};
|
|
result.reset = async () => {
|
|
if (cleanup && value) await cleanup(value);
|
|
loaded = false;
|
|
value = undefined;
|
|
};
|
|
|
|
return result;
|
|
}
|