@hazae41/box
Version:
Rust-like Box and similar objects for TypeScript
26 lines (23 loc) • 992 B
TypeScript
import { Deferred, AsyncDeferred } from '../deferred/index.js';
declare class Disposer<T> implements Disposable {
readonly value: T;
readonly clean: Deferred;
constructor(value: T, clean: Deferred);
static wrap<T>(value: T, clean?: (value: T) => void): Disposer<T>;
static from<T>(value: T & Disposable): Disposer<T & Disposable>;
[Symbol.dispose](): void;
[Symbol.asyncDispose](): Promise<void>;
get(): T;
await<T>(this: Disposer<Promise<T>>): Promise<T>;
}
declare class AsyncDisposer<T> implements AsyncDisposable {
readonly value: T;
readonly clean: AsyncDeferred;
constructor(value: T, clean: AsyncDeferred);
static wrap<T>(value: T, clean?: (value: T) => PromiseLike<void>): AsyncDisposer<T>;
static from<T>(value: T & AsyncDisposable): AsyncDisposer<T & AsyncDisposable>;
[Symbol.asyncDispose](): Promise<void>;
get(): T;
await<T>(this: AsyncDisposer<Promise<T>>): Promise<T>;
}
export { AsyncDisposer, Disposer };