@idlebox/common 1.5.19 → 1.5.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/{autoindex.d.ts → autoindex.generated.d.ts} +9 -4
- package/lib/autoindex.generated.d.ts.map +1 -0
- package/lib/{autoindex.js → autoindex.generated.js} +25 -10
- package/lib/autoindex.generated.js.map +1 -0
- package/lib/debugging/inspect.d.ts.map +1 -1
- package/lib/debugging/inspect.js +26 -3
- package/lib/debugging/inspect.js.map +1 -1
- package/lib/error/cause.d.ts +3 -0
- package/lib/error/cause.d.ts.map +1 -0
- package/lib/error/cause.js +22 -0
- package/lib/error/cause.js.map +1 -0
- package/lib/error/convert-unknown.d.ts.map +1 -1
- package/lib/error/convert-unknown.js +4 -0
- package/lib/error/convert-unknown.js.map +1 -1
- package/lib/error/get-frame.d.ts +1 -1
- package/lib/error/get-frame.d.ts.map +1 -1
- package/lib/error/get-frame.js +11 -4
- package/lib/error/get-frame.js.map +1 -1
- package/lib/function/callback-list.js +2 -2
- package/lib/function/callback-list.js.map +1 -1
- package/lib/lifecycle/dispose/async-disposable.d.ts +11 -2
- package/lib/lifecycle/dispose/async-disposable.d.ts.map +1 -1
- package/lib/lifecycle/dispose/async-disposable.js +26 -6
- package/lib/lifecycle/dispose/async-disposable.js.map +1 -1
- package/lib/lifecycle/dispose/bridges/native.d.ts +2 -2
- package/lib/lifecycle/dispose/bridges/native.d.ts.map +1 -1
- package/lib/lifecycle/dispose/bridges/native.js +5 -5
- package/lib/lifecycle/dispose/bridges/native.js.map +1 -1
- package/lib/lifecycle/dispose/bridges/streams.d.ts +12 -0
- package/lib/lifecycle/dispose/bridges/streams.d.ts.map +1 -1
- package/lib/lifecycle/dispose/bridges/streams.js +30 -30
- package/lib/lifecycle/dispose/bridges/streams.js.map +1 -1
- package/lib/lifecycle/dispose/disposable.d.ts +15 -14
- package/lib/lifecycle/dispose/disposable.d.ts.map +1 -1
- package/lib/lifecycle/dispose/disposable.js +53 -40
- package/lib/lifecycle/dispose/disposable.js.map +1 -1
- package/lib/lifecycle/dispose/disposedError.d.ts +6 -6
- package/lib/lifecycle/dispose/disposedError.d.ts.map +1 -1
- package/lib/lifecycle/dispose/disposedError.js +32 -25
- package/lib/lifecycle/dispose/disposedError.js.map +1 -1
- package/lib/lifecycle/dispose/sync-disposable.d.ts +6 -1
- package/lib/lifecycle/dispose/sync-disposable.d.ts.map +1 -1
- package/lib/lifecycle/dispose/sync-disposable.js +24 -7
- package/lib/lifecycle/dispose/sync-disposable.js.map +1 -1
- package/lib/lifecycle/event/event.d.ts +1 -1
- package/lib/lifecycle/event/event.d.ts.map +1 -1
- package/lib/lifecycle/event/event.js +3 -3
- package/lib/lifecycle/event/event.js.map +1 -1
- package/lib/lifecycle/event/type.d.ts +2 -2
- package/lib/lifecycle/event/type.d.ts.map +1 -1
- package/lib/log/logger.js +1 -1
- package/lib/log/logger.js.map +1 -1
- package/lib/platform/os.d.ts +1 -0
- package/lib/platform/os.d.ts.map +1 -1
- package/lib/platform/os.js +1 -0
- package/lib/platform/os.js.map +1 -1
- package/lib/promise/is-promise.d.ts +2 -0
- package/lib/promise/is-promise.d.ts.map +1 -0
- package/lib/promise/is-promise.js +4 -0
- package/lib/promise/is-promise.js.map +1 -0
- package/lib/reflection/methods/bind.d.ts +1 -1
- package/lib/reflection/methods/bind.d.ts.map +1 -1
- package/lib/schedule/interval.d.ts +1 -1
- package/lib/schedule/interval.d.ts.map +1 -1
- package/lib/schedule/timeout.d.ts +2 -2
- package/lib/schedule/timeout.d.ts.map +1 -1
- package/lib/state/simple-state-machine.d.ts +1 -1
- package/lib/state/simple-state-machine.d.ts.map +1 -1
- package/lib/typing-helper/deep.writable.d.ts.map +1 -1
- package/package.json +13 -9
- package/src/{autoindex.ts → autoindex.generated.ts} +25 -9
- package/src/debugging/inspect.ts +25 -3
- package/src/error/cause.ts +21 -0
- package/src/error/convert-unknown.ts +4 -0
- package/src/error/get-frame.ts +10 -4
- package/src/function/callback-list.ts +2 -2
- package/src/lifecycle/dispose/async-disposable.ts +25 -6
- package/src/lifecycle/dispose/bridges/native.ts +5 -7
- package/src/lifecycle/dispose/bridges/streams.ts +46 -36
- package/src/lifecycle/dispose/disposable.ts +71 -52
- package/src/lifecycle/dispose/disposedError.ts +33 -26
- package/src/lifecycle/dispose/sync-disposable.ts +24 -7
- package/src/lifecycle/event/event.ts +3 -3
- package/src/lifecycle/event/type.ts +2 -2
- package/src/log/logger.ts +1 -1
- package/src/platform/os.ts +2 -0
- package/src/promise/is-promise.ts +3 -0
- package/src/schedule/timeout.ts +2 -2
- package/src/typing-helper/deep.writable.ts +1 -2
- package/lib/autoindex.d.ts.map +0 -1
- package/lib/autoindex.js.map +0 -1
- package/lib/error/known.d.ts +0 -14
- package/lib/error/known.d.ts.map +0 -1
- package/lib/error/known.js +0 -34
- package/lib/error/known.js.map +0 -1
- package/src/error/known.ts +0 -40
|
@@ -2,30 +2,30 @@ import { defineInspectMethod } from '../../../debugging/inspect.js';
|
|
|
2
2
|
import { objectName } from '../../../debugging/object-with-name.js';
|
|
3
3
|
/**
|
|
4
4
|
* Convert "close()"-able object to disposable
|
|
5
|
+
*
|
|
6
|
+
* FIXME: 关闭事件不同步
|
|
7
|
+
*
|
|
5
8
|
* @public
|
|
6
9
|
*/
|
|
7
10
|
export function closableToDisposable(closable) {
|
|
8
|
-
const promised = closable.close.length === 0;
|
|
9
11
|
return defineInspectMethod({
|
|
10
12
|
get displayName() {
|
|
11
13
|
return `closable(${objectName(closable) || 'unknown'})`;
|
|
12
14
|
},
|
|
13
15
|
dispose() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
resolve();
|
|
25
|
-
}
|
|
26
|
-
});
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
const mayPromise = closable.close((error) => {
|
|
18
|
+
if (error) {
|
|
19
|
+
reject(error);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
resolve();
|
|
23
|
+
}
|
|
27
24
|
});
|
|
28
|
-
|
|
25
|
+
if (typeof mayPromise?.then === 'function') {
|
|
26
|
+
mayPromise.then(resolve, reject);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
29
|
},
|
|
30
30
|
}, (_depth, options) => {
|
|
31
31
|
return options.stylize(`[ClosableDisposable ${objectName(closable) || 'unknown'}]`, 'special');
|
|
@@ -33,30 +33,30 @@ export function closableToDisposable(closable) {
|
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* Convert "end()"-able object to disposable
|
|
36
|
+
*
|
|
37
|
+
* FIXME: 关闭事件不同步
|
|
38
|
+
*
|
|
36
39
|
* @public
|
|
37
40
|
*/
|
|
38
41
|
export function endableToDisposable(endable) {
|
|
39
|
-
const promised = endable.end.length === 0;
|
|
40
42
|
return defineInspectMethod({
|
|
41
43
|
get displayName() {
|
|
42
44
|
return `endable(${objectName(endable) || 'unknown'})`;
|
|
43
45
|
},
|
|
44
46
|
dispose() {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
resolve();
|
|
56
|
-
}
|
|
57
|
-
});
|
|
47
|
+
return new Promise((resolve, reject) => {
|
|
48
|
+
const mayPromise = endable.end((error) => {
|
|
49
|
+
if (error) {
|
|
50
|
+
reject(error);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
resolve();
|
|
54
|
+
}
|
|
58
55
|
});
|
|
59
|
-
|
|
56
|
+
if (typeof mayPromise?.then === 'function') {
|
|
57
|
+
mayPromise.then(resolve, reject);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
60
|
},
|
|
61
61
|
}, (_depth, options) => {
|
|
62
62
|
return options.stylize(`[EndableDisposable ${objectName(endable) || 'unknown'}]`, 'special');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streams.js","sourceRoot":"","sources":["../../../../src/lifecycle/dispose/bridges/streams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"streams.js","sourceRoot":"","sources":["../../../../src/lifecycle/dispose/bridges/streams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAapE;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAA0B,QAAW;IACxE,OAAO,mBAAmB,CACzB;QACC,IAAI,WAAW;YACd,OAAO,YAAY,UAAU,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC;QACzD,CAAC;QACD,OAAO;YACN,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC3C,IAAI,KAAK,EAAE,CAAC;wBACX,MAAM,CAAC,KAAK,CAAC,CAAC;oBACf,CAAC;yBAAM,CAAC;wBACP,OAAO,EAAE,CAAC;oBACX,CAAC;gBACF,CAAC,CAAC,CAAC;gBACH,IAAI,OAAO,UAAU,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC5C,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAClC,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;KACD,EACD,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACnB,OAAO,OAAO,CAAC,OAAO,CAAC,uBAAuB,UAAU,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,EAAE,SAAS,CAAC,CAAC;IAChG,CAAC,CACD,CAAC;AACH,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAyB,OAAU;IACrE,OAAO,mBAAmB,CACzB;QACC,IAAI,WAAW;YACd,OAAO,WAAW,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,GAAG,CAAC;QACvD,CAAC;QACD,OAAO;YACN,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACxC,IAAI,KAAK,EAAE,CAAC;wBACX,MAAM,CAAC,KAAK,CAAC,CAAC;oBACf,CAAC;yBAAM,CAAC;wBACP,OAAO,EAAE,CAAC;oBACX,CAAC;gBACF,CAAC,CAAC,CAAC;gBACH,IAAI,OAAO,UAAU,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC5C,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAClC,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;KACD,EACD,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;QACnB,OAAO,OAAO,CAAC,OAAO,CAAC,sBAAsB,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,GAAG,EAAE,SAAS,CAAC,CAAC;IAC9F,CAAC,CACD,CAAC;AACH,CAAC"}
|
|
@@ -7,10 +7,13 @@ export declare enum DuplicateDisposeAction {
|
|
|
7
7
|
Allow = 2
|
|
8
8
|
}
|
|
9
9
|
/** @public */
|
|
10
|
-
export interface IDisposableEvents {
|
|
11
|
-
onDisposeError: EventRegister<Error>;
|
|
12
|
-
|
|
13
|
-
readonly
|
|
10
|
+
export interface IDisposableEvents extends IBackReferenceDisposableEvent {
|
|
11
|
+
readonly onDisposeError: EventRegister<Error>;
|
|
12
|
+
readonly onPostDispose: EventRegister<void>;
|
|
13
|
+
readonly disposed: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface IBackReferenceDisposableEvent {
|
|
16
|
+
readonly onBeforeDispose: EventRegister<void>;
|
|
14
17
|
}
|
|
15
18
|
/** @public */
|
|
16
19
|
export interface IDisposable extends MaybeNamed {
|
|
@@ -32,6 +35,12 @@ export declare abstract class AbstractEnhancedDisposable<Async extends boolean>
|
|
|
32
35
|
readonly onBeforeDispose: EventRegister<void>;
|
|
33
36
|
protected readonly _onPostDispose: Emitter<void>;
|
|
34
37
|
readonly onPostDispose: EventRegister<void>;
|
|
38
|
+
/** settings */
|
|
39
|
+
protected readonly duplicateDispose: DuplicateDisposeAction;
|
|
40
|
+
/**
|
|
41
|
+
* the "DisposableStack"
|
|
42
|
+
*/
|
|
43
|
+
protected readonly _disposables: _Type<Async>[];
|
|
35
44
|
/** for debug */
|
|
36
45
|
readonly displayName?: string;
|
|
37
46
|
protected readonly _logger: import("debug").Debugger;
|
|
@@ -40,23 +49,15 @@ export declare abstract class AbstractEnhancedDisposable<Async extends boolean>
|
|
|
40
49
|
* @throws if already disposed
|
|
41
50
|
*/
|
|
42
51
|
assertNotDisposed(): void;
|
|
43
|
-
/**
|
|
44
|
-
* the "DisposableStack"
|
|
45
|
-
*/
|
|
46
|
-
protected readonly _disposables: _Type<Async>[];
|
|
47
52
|
/**
|
|
48
53
|
* register a disposable object
|
|
49
54
|
*/
|
|
50
55
|
_register<T extends _Type<Async>>(d: T): T;
|
|
51
|
-
_register<T extends _Type<Async> &
|
|
56
|
+
_register<T extends _Type<Async> & IBackReferenceDisposableEvent>(d: T, autoDereference?: boolean): T;
|
|
52
57
|
_unregister(d: _Type<Async>): boolean;
|
|
53
|
-
protected readonly duplicateDispose: DuplicateDisposeAction;
|
|
54
58
|
private _disposed?;
|
|
55
59
|
get disposed(): boolean;
|
|
56
|
-
|
|
57
|
-
* @deprecated use disposed
|
|
58
|
-
*/
|
|
59
|
-
get hasDisposed(): boolean;
|
|
60
|
+
get disposing(): boolean;
|
|
60
61
|
/**
|
|
61
62
|
* 释放相关资源
|
|
62
63
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disposable.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/dispose/disposable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"disposable.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/dispose/disposable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAItE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKtD,oBAAY,sBAAsB;IACjC,OAAO,IAAI;IACX,OAAO,IAAI;IACX,KAAK,IAAI;CACT;AAED,cAAc;AACd,MAAM,WAAW,iBAAkB,SAAQ,6BAA6B;IACvE,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,6BAA6B;IAC7C,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,cAAc;AACd,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC9C,OAAO,IAAI,IAAI,CAAC;CAChB;AAED,cAAc;AACd,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IACnD,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,KAAK,KAAK,CAAC,KAAK,SAAS,OAAO,IAAI,KAAK,SAAS,IAAI,GAAG,gBAAgB,GAAG,WAAW,CAAC;AACxF,KAAK,MAAM,CAAC,KAAK,SAAS,OAAO,IAAI,KAAK,SAAS,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE/E;;GAEG;AACH,8BAAsB,0BAA0B,CAAC,KAAK,SAAS,OAAO,CAAE,YAAW,iBAAiB;IACnG,SAAS,CAAC,QAAQ,CAAC,eAAe,iBAAC;IACnC,SAAgB,cAAc,uBAAC;IAC/B,SAAS,CAAC,QAAQ,CAAC,gBAAgB,gBAAC;IACpC,SAAgB,eAAe,sBAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,cAAc,gBAAC;IAClC,SAAgB,aAAa,sBAAC;IAE9B,eAAe;IACf,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAkC;IAE7F;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAM;IAErD,gBAAgB;IAChB,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,OAAO,2BAAC;gBAEf,WAAW,CAAC,EAAE,MAAM;IAoBhC;;OAEG;IACI,iBAAiB;IAMxB;;OAEG;IACI,SAAS,CAAC,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;IAC1C,SAAS,CAAC,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG,6BAA6B,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,CAAC;IAiBrG,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;IAUlC,OAAO,CAAC,SAAS,CAAC,CAGhB;IACF,IAAW,QAAQ,YAElB;IAED,IAAW,SAAS,YAEnB;IAED;;OAEG;IACI,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;IA8C/B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IAED,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;CAChF"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { defineInspectMethod } from '../../debugging/inspect.js';
|
|
2
2
|
import { createStackTraceHolder } from '../../error/stack-trace.js';
|
|
3
|
+
import { definePublicConstant } from '../../object/definePublicConstant.js';
|
|
4
|
+
import { isPromiseLike } from '../../promise/is-promise.js';
|
|
3
5
|
import { Emitter } from '../event/event.js';
|
|
4
6
|
import { fromNativeDisposable } from './bridges/native.js';
|
|
5
7
|
import { _debug_dispose, dispose_name, forgetParent, rememberParent } from './debug.js';
|
|
6
|
-
import {
|
|
8
|
+
import { DuplicateDisposedError } from './disposedError.js';
|
|
7
9
|
export var DuplicateDisposeAction;
|
|
8
10
|
(function (DuplicateDisposeAction) {
|
|
9
11
|
DuplicateDisposeAction[DuplicateDisposeAction["Disable"] = 0] = "Disable";
|
|
@@ -14,12 +16,18 @@ export var DuplicateDisposeAction;
|
|
|
14
16
|
* 增强型Disposable
|
|
15
17
|
*/
|
|
16
18
|
export class AbstractEnhancedDisposable {
|
|
17
|
-
_onDisposeError
|
|
18
|
-
onDisposeError
|
|
19
|
-
_onBeforeDispose
|
|
20
|
-
onBeforeDispose
|
|
21
|
-
_onPostDispose
|
|
22
|
-
onPostDispose
|
|
19
|
+
_onDisposeError;
|
|
20
|
+
onDisposeError;
|
|
21
|
+
_onBeforeDispose;
|
|
22
|
+
onBeforeDispose;
|
|
23
|
+
_onPostDispose;
|
|
24
|
+
onPostDispose;
|
|
25
|
+
/** settings */
|
|
26
|
+
duplicateDispose = DuplicateDisposeAction.Warning;
|
|
27
|
+
/**
|
|
28
|
+
* the "DisposableStack"
|
|
29
|
+
*/
|
|
30
|
+
_disposables = [];
|
|
23
31
|
/** for debug */
|
|
24
32
|
displayName;
|
|
25
33
|
_logger;
|
|
@@ -34,31 +42,21 @@ export class AbstractEnhancedDisposable {
|
|
|
34
42
|
this._logger = defineInspectMethod(_debug_dispose.extend(this.displayName || 'disposable'), () => {
|
|
35
43
|
return `[Function debug]`;
|
|
36
44
|
});
|
|
37
|
-
this.
|
|
38
|
-
|
|
39
|
-
});
|
|
40
|
-
this.
|
|
41
|
-
this.
|
|
42
|
-
|
|
43
|
-
this.constructor.name === 'UnorderedAsyncDisposable' ||
|
|
44
|
-
this.constructor.name === 'EnhancedDisposable') {
|
|
45
|
-
defineInspectMethod(this, (_depth, options) => {
|
|
46
|
-
return options.stylize(`[${this.displayName}]`, 'special');
|
|
47
|
-
});
|
|
48
|
-
}
|
|
45
|
+
this._onDisposeError = new Emitter(`${this.displayName}:errorEvent`);
|
|
46
|
+
this.onDisposeError = this._onDisposeError.register;
|
|
47
|
+
this._onBeforeDispose = new Emitter(`${this.displayName}:beforeEvent`);
|
|
48
|
+
this.onBeforeDispose = this._onBeforeDispose.register;
|
|
49
|
+
this._onPostDispose = new Emitter(`${this.displayName}:postEvent`);
|
|
50
|
+
this.onPostDispose = this._onPostDispose.register;
|
|
49
51
|
}
|
|
50
52
|
/**
|
|
51
53
|
* @throws if already disposed
|
|
52
54
|
*/
|
|
53
55
|
assertNotDisposed() {
|
|
54
56
|
if (this._disposed) {
|
|
55
|
-
throw new
|
|
57
|
+
throw new DuplicateDisposedError(this, this._disposed.trace);
|
|
56
58
|
}
|
|
57
59
|
}
|
|
58
|
-
/**
|
|
59
|
-
* the "DisposableStack"
|
|
60
|
-
*/
|
|
61
|
-
_disposables = [];
|
|
62
60
|
_register(d, autoDereference) {
|
|
63
61
|
if (this._logger.enabled)
|
|
64
62
|
this._logger(`register ${dispose_name(d)}`);
|
|
@@ -83,16 +81,12 @@ export class AbstractEnhancedDisposable {
|
|
|
83
81
|
forgetParent(d, this);
|
|
84
82
|
return rmOk;
|
|
85
83
|
}
|
|
86
|
-
duplicateDispose = DuplicateDisposeAction.Warning;
|
|
87
84
|
_disposed;
|
|
88
85
|
get disposed() {
|
|
89
86
|
return !!this._disposed;
|
|
90
87
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
*/
|
|
94
|
-
get hasDisposed() {
|
|
95
|
-
return !!this._disposed;
|
|
88
|
+
get disposing() {
|
|
89
|
+
return this._onBeforeDispose.disposed && !this._disposed;
|
|
96
90
|
}
|
|
97
91
|
/**
|
|
98
92
|
* 释放相关资源
|
|
@@ -101,35 +95,54 @@ export class AbstractEnhancedDisposable {
|
|
|
101
95
|
if (this._disposed) {
|
|
102
96
|
if (this.duplicateDispose === DuplicateDisposeAction.Allow)
|
|
103
97
|
return this._disposed.result;
|
|
104
|
-
const dupErr = new
|
|
98
|
+
const dupErr = new DuplicateDisposedError(this, this._disposed.trace);
|
|
99
|
+
dupErr.consoleWarning();
|
|
105
100
|
if (this.duplicateDispose === DuplicateDisposeAction.Disable) {
|
|
106
101
|
throw dupErr;
|
|
107
102
|
}
|
|
108
103
|
else {
|
|
109
|
-
console.warn(dupErr);
|
|
110
104
|
return this._disposed.result;
|
|
111
105
|
}
|
|
112
106
|
}
|
|
113
107
|
this._onBeforeDispose.fireNoError();
|
|
114
|
-
|
|
108
|
+
this._onBeforeDispose.dispose();
|
|
109
|
+
const trace = createStackTraceHolder('disposed', this.dispose);
|
|
115
110
|
const cleanup = () => {
|
|
116
|
-
this
|
|
117
|
-
|
|
111
|
+
definePublicConstant(this, '_disposed', {
|
|
112
|
+
// 记录 disposed 状态,顺便也记录调用栈
|
|
113
|
+
trace: trace,
|
|
114
|
+
result: r,
|
|
115
|
+
});
|
|
116
|
+
Object.assign(this, { _disposables: null });
|
|
117
|
+
this._onPostDispose.fireNoError();
|
|
118
|
+
this._onPostDispose.dispose();
|
|
119
|
+
this._onDisposeError.dispose();
|
|
118
120
|
};
|
|
119
|
-
|
|
121
|
+
let r;
|
|
122
|
+
try {
|
|
123
|
+
r = this._dispose(this._disposables);
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
cleanup();
|
|
127
|
+
throw e;
|
|
128
|
+
}
|
|
129
|
+
if (isPromiseLike(r)) {
|
|
120
130
|
r.finally(cleanup);
|
|
121
131
|
}
|
|
122
132
|
else {
|
|
123
133
|
cleanup();
|
|
124
134
|
}
|
|
125
|
-
this._disposed = {
|
|
126
|
-
trace: createStackTraceHolder('disposed', this.dispose),
|
|
127
|
-
result: r,
|
|
128
|
-
};
|
|
129
135
|
return r;
|
|
130
136
|
}
|
|
131
137
|
get [Symbol.toStringTag]() {
|
|
132
138
|
return this.displayName || 'unknown disposable';
|
|
133
139
|
}
|
|
134
140
|
}
|
|
141
|
+
defineInspectMethod(AbstractEnhancedDisposable.prototype, function (_depth, options) {
|
|
142
|
+
if (this.constructor.name === 'EnhancedAsyncDisposable' ||
|
|
143
|
+
this.constructor.name === 'UnorderedAsyncDisposable' ||
|
|
144
|
+
this.constructor.name === 'EnhancedDisposable') {
|
|
145
|
+
return options.stylize(`[${this.constructor.name} ${this.displayName}]`, 'special');
|
|
146
|
+
}
|
|
147
|
+
});
|
|
135
148
|
//# sourceMappingURL=disposable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disposable.js","sourceRoot":"","sources":["../../../src/lifecycle/dispose/disposable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAE,sBAAsB,EAAyB,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"disposable.js","sourceRoot":"","sources":["../../../src/lifecycle/dispose/disposable.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
+
import { ErrorWithCode } from '@idlebox/errors';
|
|
1
2
|
import type { StackTraceHolder } from '../../error/stack-trace.js';
|
|
2
|
-
export declare class DisposedError extends
|
|
3
|
+
export declare class DisposedError extends ErrorWithCode {
|
|
3
4
|
readonly previous: StackTraceHolder;
|
|
4
|
-
constructor(message: string | undefined, previous: StackTraceHolder);
|
|
5
|
+
constructor(message: string | undefined, previous: StackTraceHolder, boundary?: CallableFunction);
|
|
5
6
|
}
|
|
6
7
|
/**
|
|
7
8
|
* Error when call dispose() twice
|
|
8
9
|
*/
|
|
9
|
-
export declare class
|
|
10
|
+
export declare class DuplicateDisposedError extends DisposedError {
|
|
10
11
|
readonly object: any;
|
|
11
|
-
readonly inspectString: string;
|
|
12
12
|
constructor(object: any, previous: StackTraceHolder);
|
|
13
|
-
|
|
14
|
-
is(other: unknown): other is
|
|
13
|
+
consoleWarning(): void;
|
|
14
|
+
is(other: unknown): other is DuplicateDisposedError;
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=disposedError.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disposedError.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/dispose/disposedError.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"disposedError.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/dispose/disposedError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAY,MAAM,iBAAiB,CAAC;AAG1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAInE,qBAAa,aAAc,SAAQ,aAAa;aAG9B,QAAQ,EAAE,gBAAgB;gBAD1C,OAAO,oBAA6B,EACpB,QAAQ,EAAE,gBAAgB,EAC1C,QAAQ,CAAC,EAAE,gBAAgB;CAQ5B;AAID;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,aAAa;aAEvC,MAAM,EAAE,GAAG;gBAAX,MAAM,EAAE,GAAG,EAC3B,QAAQ,EAAE,gBAAgB;IAYpB,cAAc;IAwBrB,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,sBAAsB;CAGnD"}
|
|
@@ -1,49 +1,56 @@
|
|
|
1
|
+
import { ErrorWithCode, ExitCode } from '@idlebox/errors';
|
|
1
2
|
import { tryInspect } from '../../debugging/inspect.js';
|
|
2
|
-
import { getErrorFrame } from '../../error/get-frame.js';
|
|
3
3
|
import { prettyFormatError } from '../../error/pretty.nodejs.js';
|
|
4
|
-
import {
|
|
4
|
+
import { isV8 } from '../../platform/os.js';
|
|
5
5
|
import { dispose_name } from './debug.js';
|
|
6
|
-
export class DisposedError extends
|
|
6
|
+
export class DisposedError extends ErrorWithCode {
|
|
7
7
|
previous;
|
|
8
|
-
constructor(message = 'Object has been disposed', previous) {
|
|
9
|
-
super(message, { cause: previous });
|
|
8
|
+
constructor(message = 'Object has been disposed', previous, boundary) {
|
|
9
|
+
super(message, ExitCode.DUPLICATE, { cause: previous, boundary });
|
|
10
10
|
this.previous = previous;
|
|
11
|
-
this.name = 'DisposedError';
|
|
12
11
|
}
|
|
13
12
|
}
|
|
13
|
+
const lineStart = /^/gm;
|
|
14
14
|
/**
|
|
15
15
|
* Error when call dispose() twice
|
|
16
16
|
*/
|
|
17
|
-
export class
|
|
17
|
+
export class DuplicateDisposedError extends DisposedError {
|
|
18
18
|
object;
|
|
19
|
-
inspectString;
|
|
20
19
|
constructor(object, previous) {
|
|
21
20
|
const old = Error.stackTraceLimit;
|
|
22
21
|
Error.stackTraceLimit = Number.MAX_SAFE_INTEGER;
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
const name = dispose_name(object, inspectString);
|
|
26
|
-
super(`Object [${name}] has already disposed ${stacks}.`, previous);
|
|
22
|
+
const name = dispose_name(object, 'UnknownDisposable');
|
|
23
|
+
super(`Object [${name}] has already disposed`, previous);
|
|
27
24
|
this.object = object;
|
|
28
|
-
this.name = 'DuplicateDisposedError';
|
|
29
|
-
this.inspectString = inspectString;
|
|
30
25
|
Error.stackTraceLimit = old;
|
|
31
|
-
this.tryCreateConsoleWarning().catch(() => { });
|
|
32
26
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
27
|
+
consoleWarning() {
|
|
28
|
+
try {
|
|
29
|
+
if (isV8) {
|
|
30
|
+
console.error('\x1B[48;5;1m DisposedWarning \x1B[0m DUPLICATE DISPOSE');
|
|
31
|
+
const colorBlock = `\x1B[48;5;238m \x1B[0m `;
|
|
32
|
+
console.error('\x1B[48;5;14m ● \x1B[0;38;5;4m first dispose\x1B[0m');
|
|
33
|
+
console.error(prettyFormatError(this.previous, false).replace(lineStart, colorBlock));
|
|
34
|
+
console.error('\x1B[48;5;14m ● \x1B[0;38;5;4m current dispose\x1B[0m');
|
|
35
|
+
console.error(prettyFormatError(this, false).replace(lineStart, colorBlock));
|
|
36
|
+
console.error('\x1B[48;5;14m ● \x1B[0;38;5;4m the object\x1B[0m');
|
|
37
|
+
console.error(tryInspect(this.object, { colors: true }).replace(lineStart, colorBlock));
|
|
38
|
+
console.error('');
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.error('[DisposedWarning] DUPLICATE DISPOSE');
|
|
42
|
+
console.error(' * first dispose:%O', this.previous);
|
|
43
|
+
console.error(' * current dispose:%O', this);
|
|
44
|
+
console.error(' * the object: %O', this.object);
|
|
45
|
+
}
|
|
38
46
|
}
|
|
39
|
-
|
|
40
|
-
console.error('
|
|
41
|
-
console.error('
|
|
47
|
+
catch (e) {
|
|
48
|
+
console.error('Failed to create console warning for duplicate dispose', e);
|
|
49
|
+
console.error('');
|
|
42
50
|
}
|
|
43
|
-
console.error(' * Object: %s', this.inspectString);
|
|
44
51
|
}
|
|
45
52
|
is(other) {
|
|
46
|
-
return other instanceof
|
|
53
|
+
return other instanceof DuplicateDisposedError;
|
|
47
54
|
}
|
|
48
55
|
}
|
|
49
56
|
//# sourceMappingURL=disposedError.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disposedError.js","sourceRoot":"","sources":["../../../src/lifecycle/dispose/disposedError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"disposedError.js","sourceRoot":"","sources":["../../../src/lifecycle/dispose/disposedError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,OAAO,aAAc,SAAQ,aAAa;IAG9B;IAFjB,YACC,OAAO,GAAG,0BAA0B,EACpB,QAA0B,EAC1C,QAA2B;QAE3B,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAHlD,aAAQ,GAAR,QAAQ,CAAkB;IAI3C,CAAC;CAKD;AAED,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IAEvC;IADjB,YACiB,MAAW,EAC3B,QAA0B;QAE1B,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC;QAClC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAEhD,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAEvD,KAAK,CAAC,WAAW,IAAI,wBAAwB,EAAE,QAAQ,CAAC,CAAC;QARzC,WAAM,GAAN,MAAM,CAAK;QAU3B,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC;IAC7B,CAAC;IAEM,cAAc;QACpB,IAAI,CAAC;YACJ,IAAI,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;gBAC1E,MAAM,UAAU,GAAG,yBAAyB,CAAC;gBAC7C,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;gBACtF,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;gBAC7E,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBAClE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;gBACxF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACrD,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtD,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;gBAC7C,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,CAAC;QACF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;IACF,CAAC;IAED,EAAE,CAAC,KAAc;QAChB,OAAO,KAAK,YAAY,sBAAsB,CAAC;IAChD,CAAC;CACD"}
|
|
@@ -4,7 +4,7 @@ import { AbstractEnhancedDisposable, type IDisposable } from './disposable.js';
|
|
|
4
4
|
*/
|
|
5
5
|
export declare abstract class DisposableOnce implements IDisposable {
|
|
6
6
|
private _disposed?;
|
|
7
|
-
get
|
|
7
|
+
get disposed(): boolean;
|
|
8
8
|
dispose(): void;
|
|
9
9
|
[Symbol.dispose](): void;
|
|
10
10
|
protected abstract _dispose(): void;
|
|
@@ -13,6 +13,11 @@ export declare abstract class DisposableOnce implements IDisposable {
|
|
|
13
13
|
* 完整版disposable类
|
|
14
14
|
* 可以继承
|
|
15
15
|
* 也可以直接用(相当于一个DisposableStack)
|
|
16
|
+
*
|
|
17
|
+
* 抛出异常的行为会延迟到所有资源都尝试释放完毕之后,因此显然只会抛出其中一个异常给dispose()的调用者
|
|
18
|
+
* 每一个资源释放失败,都会分别触发onDisposeError事件,如果此事件存在监听器,则最后不会抛出异常(处非监听器本身重新抛出)
|
|
19
|
+
* 不支持在dispose过程中添加onError事件监听器
|
|
20
|
+
*
|
|
16
21
|
*/
|
|
17
22
|
export declare class EnhancedDisposable extends AbstractEnhancedDisposable<false> implements IDisposable {
|
|
18
23
|
protected _dispose(disposables: readonly IDisposable[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-disposable.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/dispose/sync-disposable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG/E;;GAEG;AACH,8BAAsB,cAAe,YAAW,WAAW;IAC1D,OAAO,CAAC,SAAS,CAAC,CAAmB;IAErC,IAAW,
|
|
1
|
+
{"version":3,"file":"sync-disposable.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/dispose/sync-disposable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG/E;;GAEG;AACH,8BAAsB,cAAe,YAAW,WAAW;IAC1D,OAAO,CAAC,SAAS,CAAC,CAAmB;IAErC,IAAW,QAAQ,YAElB;IACM,OAAO,IAAI,IAAI;IAStB,CAAC,MAAM,CAAC,OAAO,CAAC;IAGhB,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI;CACnC;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAmB,SAAQ,0BAA0B,CAAC,KAAK,CAAE,YAAW,WAAW;cAC5E,QAAQ,CAAC,WAAW,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IA2B/D,CAAC,MAAM,CAAC,OAAO,CAAC,aAAgB;CACvC"}
|
|
@@ -2,18 +2,19 @@ import { convertCaughtError } from '../../error/convert-unknown.js';
|
|
|
2
2
|
import { createStackTraceHolder } from '../../error/stack-trace.js';
|
|
3
3
|
import { dispose_name } from './debug.js';
|
|
4
4
|
import { AbstractEnhancedDisposable } from './disposable.js';
|
|
5
|
-
import {
|
|
5
|
+
import { DuplicateDisposedError } from './disposedError.js';
|
|
6
6
|
/**
|
|
7
7
|
* 简单版手动disposable
|
|
8
8
|
*/
|
|
9
9
|
export class DisposableOnce {
|
|
10
10
|
_disposed;
|
|
11
|
-
get
|
|
11
|
+
get disposed() {
|
|
12
12
|
return !!this._disposed;
|
|
13
13
|
}
|
|
14
14
|
dispose() {
|
|
15
15
|
if (this._disposed) {
|
|
16
|
-
|
|
16
|
+
const w = new DuplicateDisposedError(this, this._disposed);
|
|
17
|
+
w.consoleWarning();
|
|
17
18
|
return;
|
|
18
19
|
}
|
|
19
20
|
this._disposed = createStackTraceHolder('disposed', this.dispose);
|
|
@@ -27,9 +28,16 @@ export class DisposableOnce {
|
|
|
27
28
|
* 完整版disposable类
|
|
28
29
|
* 可以继承
|
|
29
30
|
* 也可以直接用(相当于一个DisposableStack)
|
|
31
|
+
*
|
|
32
|
+
* 抛出异常的行为会延迟到所有资源都尝试释放完毕之后,因此显然只会抛出其中一个异常给dispose()的调用者
|
|
33
|
+
* 每一个资源释放失败,都会分别触发onDisposeError事件,如果此事件存在监听器,则最后不会抛出异常(处非监听器本身重新抛出)
|
|
34
|
+
* 不支持在dispose过程中添加onError事件监听器
|
|
35
|
+
*
|
|
30
36
|
*/
|
|
31
37
|
export class EnhancedDisposable extends AbstractEnhancedDisposable {
|
|
32
38
|
_dispose(disposables) {
|
|
39
|
+
const hasListener = this._onDisposeError.listenerCount() > 0;
|
|
40
|
+
let lastError = null;
|
|
33
41
|
for (const item of disposables.values()) {
|
|
34
42
|
try {
|
|
35
43
|
if (this._logger.enabled)
|
|
@@ -37,13 +45,22 @@ export class EnhancedDisposable extends AbstractEnhancedDisposable {
|
|
|
37
45
|
item.dispose();
|
|
38
46
|
}
|
|
39
47
|
catch (e) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
if (hasListener) {
|
|
49
|
+
try {
|
|
50
|
+
this._onDisposeError.fire(convertCaughtError(e));
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
lastError = e;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
lastError = e;
|
|
44
58
|
}
|
|
45
59
|
}
|
|
46
60
|
}
|
|
61
|
+
if (lastError) {
|
|
62
|
+
throw lastError;
|
|
63
|
+
}
|
|
47
64
|
}
|
|
48
65
|
/// compitable with stack
|
|
49
66
|
[Symbol.dispose] = this.dispose;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-disposable.js","sourceRoot":"","sources":["../../../src/lifecycle/dispose/sync-disposable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAyB,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAoB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sync-disposable.js","sourceRoot":"","sources":["../../../src/lifecycle/dispose/sync-disposable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAyB,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAoB,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAgB,cAAc;IAC3B,SAAS,CAAoB;IAErC,IAAW,QAAQ;QAClB,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IACzB,CAAC;IACM,OAAO;QACb,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,IAAI,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3D,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACjB,CAAC;IACD,CAAC,MAAM,CAAC,OAAO,CAAC;QACf,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;CAED;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,kBAAmB,SAAQ,0BAAiC;IACrD,QAAQ,CAAC,WAAmC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAE7D,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC;gBACJ,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO;oBAAE,IAAI,CAAC,OAAO,CAAC,WAAW,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxE,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,WAAW,EAAE,CAAC;oBACjB,IAAI,CAAC;wBACJ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClD,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACZ,SAAS,GAAG,CAAC,CAAC;oBACf,CAAC;gBACF,CAAC;qBAAM,CAAC;oBACP,SAAS,GAAG,CAAC,CAAC;gBACf,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,SAAS,CAAC;QACjB,CAAC;IACF,CAAC;IAED,yBAAyB;IAClB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;CACvC"}
|
|
@@ -31,7 +31,7 @@ export declare class Emitter<T = unknown> implements IEventEmitter<T> {
|
|
|
31
31
|
wait(): Promise<T>;
|
|
32
32
|
private checkDeleted;
|
|
33
33
|
private _disposed;
|
|
34
|
-
get
|
|
34
|
+
get disposed(): boolean;
|
|
35
35
|
/**
|
|
36
36
|
* 运行过程中可以dispose,本次运行仍然会继续到最后
|
|
37
37
|
* 但立即不能再次调用类似handle的方法
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/event/event.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAIhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI5E;;GAEG;AACH,qBAAa,OAAO,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;aAKhC,WAAW,EAAE,MAAM;IAJ/C,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;IACvD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,6BAA6B,CAAS;gBAElB,WAAW,GAAE,MAAsB;IAiBxD,aAAa;IAIb,IAAI,CAAC,IAAI,EAAE,CAAC;IAiBZ,WAAW,CAAC,IAAI,EAAE,CAAC;IAqB1B,IAAI,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,CAE/B;IAED,IAAI,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,CAE5B;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW;IAsB9C;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW;IAS5C;;OAEG;IACH,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAUlB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,SAAS,CAAS;IAC1B,IAAW,
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/event/event.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAIhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI5E;;GAEG;AACH,qBAAa,OAAO,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;aAKhC,WAAW,EAAE,MAAM;IAJ/C,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;IACvD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,6BAA6B,CAAS;gBAElB,WAAW,GAAE,MAAsB;IAiBxD,aAAa;IAIb,IAAI,CAAC,IAAI,EAAE,CAAC;IAiBZ,WAAW,CAAC,IAAI,EAAE,CAAC;IAqB1B,IAAI,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,CAE/B;IAED,IAAI,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,CAE5B;IAED;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW;IAsB9C;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW;IAS5C;;OAEG;IACH,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAUlB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,SAAS,CAAS;IAC1B,IAAW,QAAQ,YAElB;IAED;;;OAGG;IACH,OAAO;IA8BP,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,aAAgB;IAEzC,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG;IAW5C,OAAO,CAAC,mBAAmB;CAK3B"}
|