@web-atoms/core
Version:
34 lines (28 loc) • 867 B
text/typescript
import { IDisposable } from "./types";
export class AtomDisposableList implements IDisposable {
// tslint:disable-next-line:ban-types
private disposables: IDisposable[] = [];
// tslint:disable-next-line:ban-types
public add(d: (() => void) | IDisposable): IDisposable {
if (typeof d === "function") {
const fx = d;
d = {
dispose: fx
};
}
this.disposables.push(d);
const dx = d;
return {
dispose: () => {
this.disposables = this.disposables.filter((x) => x !== dx);
dx.dispose();
}
};
}
public dispose(): void {
for (const iterator of this.disposables) {
iterator.dispose();
}
this.disposables.length = 0;
}
}