defer-close
Version:
A lightweight utility for adding JavaScript's Disposable and AsyncDisposable interfaces to any object
23 lines (22 loc) • 548 B
text/typescript
export default function deferClose<T extends object>(
obj: T,
fn: (obj: T) => Promise<any>
): T & AsyncDisposable;
export default function deferClose<T extends object>(
obj: T,
fn: (obj: T) => any
): T & Disposable;
export default function deferClose<T extends object>(
obj: T,
fn: (obj: T) => any
): T & Disposable & AsyncDisposable {
const r = Object.assign(obj, {
[Symbol.dispose]() {
fn(obj);
},
async [Symbol.asyncDispose]() {
await fn(obj);
},
});
return r as T & Disposable & AsyncDisposable;
}