@typed/fp
Version:
Data Structures and Resources for fp-ts
63 lines • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.undisposable = exports.settable = void 0;
const tslib_1 = require("tslib");
/**
* Disposable is an interface for representing resources which can be synchronously
* disposed of.
* @since 0.9.2
*/
(0, tslib_1.__exportStar)(require("@most/disposable"), exports);
/**
* Disposable is a synchronous interface, borrowed from most.js, to cancel requests or
* otherwise clean up resources.
*/
const disposable_1 = require("@most/disposable");
const NONE = (0, disposable_1.disposeNone)();
/**
* Construct a SettableDisposable
* @since 0.9.2
* @category Constructor
*/
function settable() {
let disposed = false;
const disposables = [];
function addDisposable(disposable) {
if (NONE === disposable || disposed) {
disposable.dispose();
return NONE;
}
disposables.push(disposable);
const dispose = () => {
const index = disposables.indexOf(disposable);
if (index > -1) {
disposables.splice(index, 1).forEach((d) => d.dispose());
}
};
return { dispose };
}
function isDisposed() {
return disposed;
}
function dispose() {
disposed = true;
(0, disposable_1.disposeAll)(disposables).dispose();
}
return {
addDisposable,
isDisposed,
dispose,
};
}
exports.settable = settable;
/**
* Wrap a non-Disposable function into a Disposable-returning function
* @since 0.9.2
* @category Combinator
*/
const undisposable = (fn) => (...args) => {
fn(...args);
return (0, disposable_1.disposeNone)();
};
exports.undisposable = undisposable;
//# sourceMappingURL=Disposable.js.map