mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-25 03:34:22 +01:00
19 lines
392 B
TypeScript
19 lines
392 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
|
|
}
|