@typed/fp
Version:
Data Structures and Resources for fp-ts
57 lines • 1.48 kB
JavaScript
/**
* Disposable is an interface for representing resources which can be synchronously
* disposed of.
* @since 0.9.2
*/
export * from '@most/disposable';
/**
* Disposable is a synchronous interface, borrowed from most.js, to cancel requests or
* otherwise clean up resources.
*/
import { disposeAll, disposeNone } from '@most/disposable';
const NONE = disposeNone();
/**
* Construct a SettableDisposable
* @since 0.9.2
* @category Constructor
*/
export 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;
disposeAll(disposables).dispose();
}
return {
addDisposable,
isDisposed,
dispose,
};
}
/**
* Wrap a non-Disposable function into a Disposable-returning function
* @since 0.9.2
* @category Combinator
*/
export const undisposable = (fn) => (...args) => {
fn(...args);
return disposeNone();
};
//# sourceMappingURL=Disposable.js.map