chore: cleanup

This commit is contained in:
adamelmore
2026-01-28 06:21:39 -06:00
parent 65e1186efe
commit c9bbea4266
3 changed files with 51 additions and 28 deletions

View File

@@ -17,6 +17,10 @@ const cache = new Map<string, Promise<Context>>()
const DISPOSE_TIMEOUT_MS = 10_000
const disposal = {
all: undefined as Promise<void> | undefined,
}
export const Instance = {
async provide<R>(input: { directory: string; init?: () => Promise<any>; fn: () => R }): Promise<R> {
let existing = cache.get(input.directory)
@@ -80,20 +84,34 @@ export const Instance = {
})
},
async disposeAll() {
Log.Default.info("disposing all instances")
for (const [key, value] of cache) {
const ctx = await withTimeout(value, DISPOSE_TIMEOUT_MS).catch((error) => {
Log.Default.warn("instance dispose timed out", { key, error })
return undefined
})
if (!ctx) {
cache.delete(key)
continue
if (disposal.all) return disposal.all
disposal.all = iife(async () => {
Log.Default.info("disposing all instances")
const entries = [...cache.entries()]
for (const [key, value] of entries) {
if (cache.get(key) !== value) continue
const ctx = await withTimeout(value, DISPOSE_TIMEOUT_MS).catch((error) => {
Log.Default.warn("instance dispose timed out", { key, error })
return undefined
})
if (!ctx) {
if (cache.get(key) === value) cache.delete(key)
continue
}
if (cache.get(key) !== value) continue
await context.provide(ctx, async () => {
await Instance.dispose()
})
}
await context.provide(ctx, async () => {
await Instance.dispose()
})
}
cache.clear()
}).finally(() => {
disposal.all = undefined
})
return disposal.all
},
}

View File

@@ -66,9 +66,11 @@ export namespace State {
tasks.push(task)
}
await Promise.all(tasks)
entries.clear()
recordsByKey.delete(key)
await Promise.all(tasks)
disposalFinished = true
log.info("state disposal completed", { key })
}