summaryrefslogtreecommitdiffhomepage
path: root/cloud/core/src/util
diff options
context:
space:
mode:
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
}