UNPKG

@hazae41/box

Version:

Rust-like Box and similar objects for TypeScript

61 lines (58 loc) 1.27 kB
import { Deferred } from '../deferred/index.mjs'; /** * A simple reference */ class Ref { value; clean; constructor(value, clean) { this.value = value; this.clean = clean; } static wrap(value) { return new Ref(value, value); } static from(value) { return new Ref(value.get(), value); } static with(value, clean) { return new Ref(value, new Deferred(() => clean(value))); } [Symbol.dispose]() { this.clean[Symbol.dispose](); } async [Symbol.asyncDispose]() { this[Symbol.dispose](); } get() { return this.value; } } /** * A simple reference */ class AsyncRef { value; clean; constructor(value, clean) { this.value = value; this.clean = clean; } static wrap(value) { return new AsyncRef(value, value); } static from(value) { return new AsyncRef(value.get(), value); } static with(value, clean) { return new AsyncRef(value, new Deferred(() => clean(value))); } async [Symbol.asyncDispose]() { await this.clean[Symbol.asyncDispose](); } get() { return this.value; } } export { AsyncRef, Ref }; //# sourceMappingURL=index.mjs.map