UNPKG

@hazae41/box

Version:

Rust-like Box and similar objects for TypeScript

83 lines (79 loc) 2.26 kB
'use strict'; var tslib_es6 = require('../../../node_modules/tslib/tslib.es6.cjs'); var index = require('../deferred/index.cjs'); class Disposer { value; clean; constructor(value, clean) { this.value = value; this.clean = clean; } static wrap(value, clean = () => { }) { return new Disposer(value, new index.Deferred(() => clean(value))); } static from(value) { return new Disposer(value, new index.Deferred(() => value[Symbol.dispose]())); } [Symbol.dispose]() { this.clean[Symbol.dispose](); } async [Symbol.asyncDispose]() { this[Symbol.dispose](); } get() { return this.value; } async await() { const env_1 = { stack: [], error: void 0, hasError: false }; try { const _ = tslib_es6.__addDisposableResource(env_1, this.clean, false); return await this.get(); } catch (e_1) { env_1.error = e_1; env_1.hasError = true; } finally { tslib_es6.__disposeResources(env_1); } } } class AsyncDisposer { value; clean; constructor(value, clean) { this.value = value; this.clean = clean; } static wrap(value, clean = async () => { }) { return new AsyncDisposer(value, new index.AsyncDeferred(() => clean(value))); } static from(value) { return new AsyncDisposer(value, new index.AsyncDeferred(() => value[Symbol.asyncDispose]())); } async [Symbol.asyncDispose]() { await this.clean[Symbol.asyncDispose](); } get() { return this.value; } async await() { const env_2 = { stack: [], error: void 0, hasError: false }; try { const _ = tslib_es6.__addDisposableResource(env_2, this.clean, true); return await this.get(); } catch (e_2) { env_2.error = e_2; env_2.hasError = true; } finally { const result_1 = tslib_es6.__disposeResources(env_2); if (result_1) await result_1; } } } exports.AsyncDisposer = AsyncDisposer; exports.Disposer = Disposer; //# sourceMappingURL=index.cjs.map