Add disposable management classes and interface

- Introduced IDisposable interface for defining disposable behavior
- Implemented Disposable class for single disposable resources
- Created DisposableList class to manage multiple disposables
- Updated index file to export the new classes and interface
This commit is contained in:
2025-10-30 03:13:35 -04:00
parent 63dc90a8c8
commit e18e3523e5
4 changed files with 49 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
import type IDisposable from './IDisposable';
export default class Disposable implements IDisposable {
private _isDisposed = false;
private _disposable: () => void;
constructor(disposable: () => void) {
this._disposable = disposable;
}
get isDisposed(): boolean {
return this._isDisposed;
}
public dispose(): void {
if (this._isDisposed) {
return;
}
this._disposable();
this._isDisposed = true;
}
}

View File

@@ -0,0 +1,17 @@
import type IDisposable from './IDisposable';
export default class DisposableList implements IDisposable {
private readonly _disposables: IDisposable[] = [];
public add(disposable: IDisposable): void {
this._disposables.push(disposable);
}
public dispose(): void {
while (this._disposables.length) {
const disposable = this._disposables.shift() as IDisposable;
disposable.dispose();
}
}
}

View File

@@ -0,0 +1,3 @@
export default interface IDisposable {
dispose(): void;
}

View File

@@ -0,0 +1,6 @@
import type IDisposable from './IDisposable';
import Disposable from './Disposable';
import DisposableList from './DisposableList';
export type {IDisposable};
export {Disposable, DisposableList};