refactor: clean up

This commit is contained in:
2026-04-04 13:21:44 +08:00
parent 2b59adf000
commit 2984d8b20d
16 changed files with 152 additions and 788 deletions
@@ -0,0 +1,46 @@
export interface IDisposable {
dispose(): void;
}
export type DisposableItem = IDisposable | (() => void);
export class DisposableBag implements IDisposable {
private _disposables = new Set<DisposableItem>();
private _isDisposed = false;
get isDisposed(): boolean {
return this._isDisposed;
}
add(item: DisposableItem): void {
if (this._isDisposed) {
this._execute(item);
return;
}
this._disposables.add(item);
}
dispose(): void {
if (this._isDisposed) return;
this._isDisposed = true;
for (const item of this._disposables) {
try {
this._execute(item);
} catch (error) {
console.error('Error during resource disposal:', error);
}
}
this._disposables.clear();
}
private _execute(item: DisposableItem): void {
if (typeof item === 'function') {
item();
} else {
item.dispose();
}
}
}
+2
View File
@@ -0,0 +1,2 @@
export { DisposableBag } from './disposable';
export type { IDisposable, DisposableItem } from './disposable';