mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-31 14:22:27 +00:00
26 lines
588 B
TypeScript
26 lines
588 B
TypeScript
import { AsyncLocalStorage } from "async_hooks"
|
|
|
|
export namespace Context {
|
|
export class NotFound extends Error {
|
|
constructor(public override readonly name: string) {
|
|
super(`No context found for ${name}`)
|
|
}
|
|
}
|
|
|
|
export function create<T>(name: string) {
|
|
const storage = new AsyncLocalStorage<T>()
|
|
return {
|
|
use() {
|
|
const result = storage.getStore()
|
|
if (!result) {
|
|
throw new NotFound(name)
|
|
}
|
|
return result
|
|
},
|
|
provide<R>(value: T, fn: () => R) {
|
|
return storage.run(value, fn)
|
|
},
|
|
}
|
|
}
|
|
}
|