summaryrefslogtreecommitdiffhomepage
path: root/cloud/core/src/util
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-09-02 03:14:56 -0400
committerDax Raad <[email protected]>2025-09-02 03:18:30 -0400
commit810c9cff1db91f10158cc002dc70b89871762e1e (patch)
tree108ea81a51856003bad4d376a6a0fa79e5964216 /cloud/core/src/util
parent47d4c87bdd358f69be5a5612868b5127de1922a3 (diff)
downloadopencode-810c9cff1db91f10158cc002dc70b89871762e1e.tar.gz
opencode-810c9cff1db91f10158cc002dc70b89871762e1e.zip
wip: cloud
Diffstat (limited to 'cloud/core/src/util')
-rw-r--r--cloud/core/src/util/memo.ts11
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
}