@ceramicnetwork/core
Version:
Typescript implementation of the Ceramic protocol
34 lines • 885 B
JavaScript
import { Subject } from 'rxjs';
export class ShutdownSignal {
constructor() {
this.subject = new Subject();
this.shuttingDown = false;
}
get observers() {
return this.subject.observers;
}
abort() {
this.subject.complete();
this.shuttingDown = true;
}
isShuttingDown() {
return this.shuttingDown;
}
abortable(fn) {
const controller = new AbortController();
const onAbort = () => {
controller.abort();
};
const subscription = this.subject.subscribe({
complete: () => {
onAbort();
},
});
if (this.subject.isStopped)
controller.abort();
return fn(controller.signal).finally(() => {
subscription.unsubscribe();
});
}
}
//# sourceMappingURL=shutdown-signal.js.map