@tsdotnet/disposable
Advanced tools
Comparing version 1.1.16 to 1.1.17
@@ -7,16 +7,23 @@ /*! | ||
export default class DisposableBase { | ||
constructor(_disposableObjectName, __finalizer) { | ||
this._disposableObjectName = _disposableObjectName; | ||
this.__finalizer = __finalizer; | ||
this.__wasDisposed = false; | ||
constructor(disposableObjectName, finalizer) { | ||
this._disposableObjectName = disposableObjectName; | ||
this.__state = { | ||
disposed: false, | ||
finalizer: finalizer || undefined | ||
}; | ||
} | ||
get wasDisposed() { | ||
return this.__wasDisposed; | ||
return this.__state.disposed; | ||
} | ||
// NOTE: Do not override this method. Override _onDispose instead. | ||
dispose() { | ||
if (!this.__wasDisposed) { | ||
const state = this.__state; | ||
if (!state.disposed) { | ||
// Preemptively set wasDisposed in order to prevent repeated disposing. | ||
// NOTE: in true multi-threaded scenarios, this would need to be synchronized. | ||
this.__wasDisposed = true; | ||
state.disposed = true; | ||
const finalizer = state.finalizer; | ||
state.finalizer = undefined; | ||
delete state.finalizer; | ||
Object.freeze(state); | ||
try { | ||
@@ -26,8 +33,4 @@ this._onDispose(); // Protected override. | ||
finally { | ||
if (this.__finalizer) { | ||
// Private finalizer... | ||
this.__finalizer(); | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
this.__finalizer = undefined; | ||
} | ||
if (finalizer) | ||
finalizer(); | ||
} | ||
@@ -42,3 +45,3 @@ } | ||
throwIfDisposed(message, objectName = this._disposableObjectName) { | ||
if (this.__wasDisposed) | ||
if (this.__state.disposed) | ||
throw new ObjectDisposedException(objectName); | ||
@@ -45,0 +48,0 @@ return true; |
@@ -8,5 +8,4 @@ /*! | ||
protected _disposableObjectName: string; | ||
private readonly __finalizer?; | ||
private __wasDisposed; | ||
protected constructor(_disposableObjectName: string, __finalizer?: (() => void | null) | undefined); | ||
private readonly __state; | ||
protected constructor(disposableObjectName: string, finalizer?: () => void | null); | ||
get wasDisposed(): boolean; | ||
@@ -13,0 +12,0 @@ dispose(): void; |
@@ -10,16 +10,23 @@ "use strict"; | ||
class DisposableBase { | ||
constructor(_disposableObjectName, __finalizer) { | ||
this._disposableObjectName = _disposableObjectName; | ||
this.__finalizer = __finalizer; | ||
this.__wasDisposed = false; | ||
constructor(disposableObjectName, finalizer) { | ||
this._disposableObjectName = disposableObjectName; | ||
this.__state = { | ||
disposed: false, | ||
finalizer: finalizer || undefined | ||
}; | ||
} | ||
get wasDisposed() { | ||
return this.__wasDisposed; | ||
return this.__state.disposed; | ||
} | ||
// NOTE: Do not override this method. Override _onDispose instead. | ||
dispose() { | ||
if (!this.__wasDisposed) { | ||
const state = this.__state; | ||
if (!state.disposed) { | ||
// Preemptively set wasDisposed in order to prevent repeated disposing. | ||
// NOTE: in true multi-threaded scenarios, this would need to be synchronized. | ||
this.__wasDisposed = true; | ||
state.disposed = true; | ||
const finalizer = state.finalizer; | ||
state.finalizer = undefined; | ||
delete state.finalizer; | ||
Object.freeze(state); | ||
try { | ||
@@ -29,8 +36,4 @@ this._onDispose(); // Protected override. | ||
finally { | ||
if (this.__finalizer) { | ||
// Private finalizer... | ||
this.__finalizer(); | ||
// eslint-disable-next-line @typescript-eslint/no-explicit-any | ||
this.__finalizer = undefined; | ||
} | ||
if (finalizer) | ||
finalizer(); | ||
} | ||
@@ -45,3 +48,3 @@ } | ||
throwIfDisposed(message, objectName = this._disposableObjectName) { | ||
if (this.__wasDisposed) | ||
if (this.__state.disposed) | ||
throw new ObjectDisposedException_1.default(objectName); | ||
@@ -48,0 +51,0 @@ return true; |
{ | ||
"name": "@tsdotnet/disposable", | ||
"version": "1.1.16", | ||
"version": "1.1.17", | ||
"description": "A disposable base class and minimal set of interfaces to properly implement an object disposal pattern.", | ||
@@ -21,11 +21,11 @@ "author": "electricessence", | ||
"build:dist-esm": "rimraf dist-esm/* && tsc -p tsconfig.esm.json", | ||
"build": "npm i && run-p build:*", | ||
"build": "pnpm i && run-p build:*", | ||
"bump": "npm run precommit && npm version patch", | ||
"docs": "rimraf docs/* && rimraf docs/.nojekyll && typedoc --options typedoc.json --readme none && node ./.build/create-nojekyll.js", | ||
"docs": "rimraf docs/* && rimraf docs/.nojekyll && typedoc --options typedoc.json --readme none", | ||
"lint": "eslint src/**/*.ts", | ||
"precommit": "npm i && run-p lint test && run-p build:* && npm run validate", | ||
"precommit": "pnpm i && run-p lint test && run-p build:* && npm run validate", | ||
"prepublishOnly": "npm run build && run-p validate test", | ||
"preversion": "run-p lint test", | ||
"postversion": "git push && git push --tags && npm run docs && git commit -m \"Updated docs.\" docs && git push", | ||
"test": "ts-node -P ./tsconfig.json ./node_modules/jasmine/bin/jasmine --config=spec/jasmine.json", | ||
"test": "mocha -r ts-node/register tests/**/*.ts", | ||
"validate": "node ./.build/validate-package.js" | ||
@@ -42,7 +42,9 @@ }, | ||
"devDependencies": { | ||
"@types/jasmine": "^3.5.10", | ||
"@typescript-eslint/eslint-plugin": "^2.33.0", | ||
"@typescript-eslint/parser": "^2.33.0", | ||
"@types/chai": "^4.2.11", | ||
"@types/mocha": "^7.0.2", | ||
"@typescript-eslint/eslint-plugin": "^3.0.0", | ||
"@typescript-eslint/parser": "^3.0.0", | ||
"chai": "^4.2.0", | ||
"copyfiles": "^2.2.0", | ||
"eslint": "^7.0.0", | ||
"eslint": "^7.1.0", | ||
"eslint-config-typescript": "^3.0.0", | ||
@@ -52,8 +54,11 @@ "eslint-plugin-import": "^2.20.2", | ||
"eslint-plugin-promise": "^4.2.1", | ||
"jasmine": "^3.5.0", | ||
"mocha": "^7.2.0", | ||
"npm-run-all": "^4.1.5", | ||
"nyc": "^15.0.1", | ||
"rimraf": "^3.0.2", | ||
"ts-node": "^8.10.1", | ||
"typedoc": "^0.17.6", | ||
"typescript": "^3.9.2" | ||
"typedoc": "^0.17.7", | ||
"typedoc-plugin-external-module-name": "^3.1.0", | ||
"typedoc-plugin-nojekyll": "^1.0.1", | ||
"typescript": "^3.9.3" | ||
}, | ||
@@ -60,0 +65,0 @@ "dependencies": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
39023
622
20