diff options
| author | Dax Raad <[email protected]> | 2025-09-02 03:14:56 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-09-02 03:18:30 -0400 |
| commit | 810c9cff1db91f10158cc002dc70b89871762e1e (patch) | |
| tree | 108ea81a51856003bad4d376a6a0fa79e5964216 /cloud/core/src/util | |
| parent | 47d4c87bdd358f69be5a5612868b5127de1922a3 (diff) | |
| download | opencode-810c9cff1db91f10158cc002dc70b89871762e1e.tar.gz opencode-810c9cff1db91f10158cc002dc70b89871762e1e.zip | |
wip: cloud
Diffstat (limited to 'cloud/core/src/util')
| -rw-r--r-- | cloud/core/src/util/memo.ts | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/cloud/core/src/util/memo.ts b/cloud/core/src/util/memo.ts index 3c84cf1fb..49043010f 100644 --- a/cloud/core/src/util/memo.ts +++ b/cloud/core/src/util/memo.ts @@ -1,11 +1,18 @@ -export function memo<T>(fn: () => T) { +export function memo<T>(fn: () => T, cleanup?: (input: T) => Promise<void>) { let value: T | undefined let loaded = false - return (): T => { + 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 } |
