ts-lib-extended
Version:
Additional types and tools for typescript
52 lines (51 loc) • 1.28 kB
JavaScript
import { EventHandler } from '../event/handler.js';
import { DisposableBase } from './base.js';
/**
* Core for disposable instances
*
* @export
* @class Disposable
* @extends {DisposableBase}
* @since 1.0.0
*/
export class Disposable extends DisposableBase {
constructor() {
super();
this._disposers = [];
this._disposingHandler = new EventHandler();
this._disposedHandler = new EventHandler();
}
/**
* Event that is invoked before the instance is disposed
*
* @readonly
* @type {Event<this>}
* @memberof Disposable
* @since 1.0.0
*/
get disposing() {
return this._disposingHandler.event;
}
/**
* Event that is invoked after the instance is disposed
*
* @readonly
* @type {Event<this>}
* @memberof Disposable
* @since 1.0.0
*/
get disposed() {
return this._disposedHandler.event;
}
disposingInstance() {
this._disposingHandler.invoke(this);
this._disposingHandler.dispose();
for (let i = 0; i < this._disposers.length; i++) {
this._disposers[i]();
}
}
disposedInstance() {
this._disposedHandler.invoke(this);
this._disposedHandler.dispose();
}
}