@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.
Files changed (96) hide show
  1. package/lib/{autoindex.d.ts → autoindex.generated.d.ts} +9 -4
  2. package/lib/autoindex.generated.d.ts.map +1 -0
  3. package/lib/{autoindex.js → autoindex.generated.js} +25 -10
  4. package/lib/autoindex.generated.js.map +1 -0
  5. package/lib/debugging/inspect.d.ts.map +1 -1
  6. package/lib/debugging/inspect.js +26 -3
  7. package/lib/debugging/inspect.js.map +1 -1
  8. package/lib/error/cause.d.ts +3 -0
  9. package/lib/error/cause.d.ts.map +1 -0
  10. package/lib/error/cause.js +22 -0
  11. package/lib/error/cause.js.map +1 -0
  12. package/lib/error/convert-unknown.d.ts.map +1 -1
  13. package/lib/error/convert-unknown.js +4 -0
  14. package/lib/error/convert-unknown.js.map +1 -1
  15. package/lib/error/get-frame.d.ts +1 -1
  16. package/lib/error/get-frame.d.ts.map +1 -1
  17. package/lib/error/get-frame.js +11 -4
  18. package/lib/error/get-frame.js.map +1 -1
  19. package/lib/function/callback-list.js +2 -2
  20. package/lib/function/callback-list.js.map +1 -1
  21. package/lib/lifecycle/dispose/async-disposable.d.ts +11 -2
  22. package/lib/lifecycle/dispose/async-disposable.d.ts.map +1 -1
  23. package/lib/lifecycle/dispose/async-disposable.js +26 -6
  24. package/lib/lifecycle/dispose/async-disposable.js.map +1 -1
  25. package/lib/lifecycle/dispose/bridges/native.d.ts +2 -2
  26. package/lib/lifecycle/dispose/bridges/native.d.ts.map +1 -1
  27. package/lib/lifecycle/dispose/bridges/native.js +5 -5
  28. package/lib/lifecycle/dispose/bridges/native.js.map +1 -1
  29. package/lib/lifecycle/dispose/bridges/streams.d.ts +12 -0
  30. package/lib/lifecycle/dispose/bridges/streams.d.ts.map +1 -1
  31. package/lib/lifecycle/dispose/bridges/streams.js +30 -30
  32. package/lib/lifecycle/dispose/bridges/streams.js.map +1 -1
  33. package/lib/lifecycle/dispose/disposable.d.ts +15 -14
  34. package/lib/lifecycle/dispose/disposable.d.ts.map +1 -1
  35. package/lib/lifecycle/dispose/disposable.js +53 -40
  36. package/lib/lifecycle/dispose/disposable.js.map +1 -1
  37. package/lib/lifecycle/dispose/disposedError.d.ts +6 -6
  38. package/lib/lifecycle/dispose/disposedError.d.ts.map +1 -1
  39. package/lib/lifecycle/dispose/disposedError.js +32 -25
  40. package/lib/lifecycle/dispose/disposedError.js.map +1 -1
  41. package/lib/lifecycle/dispose/sync-disposable.d.ts +6 -1
  42. package/lib/lifecycle/dispose/sync-disposable.d.ts.map +1 -1
  43. package/lib/lifecycle/dispose/sync-disposable.js +24 -7
  44. package/lib/lifecycle/dispose/sync-disposable.js.map +1 -1
  45. package/lib/lifecycle/event/event.d.ts +1 -1
  46. package/lib/lifecycle/event/event.d.ts.map +1 -1
  47. package/lib/lifecycle/event/event.js +3 -3
  48. package/lib/lifecycle/event/event.js.map +1 -1
  49. package/lib/lifecycle/event/type.d.ts +2 -2
  50. package/lib/lifecycle/event/type.d.ts.map +1 -1
  51. package/lib/log/logger.js +1 -1
  52. package/lib/log/logger.js.map +1 -1
  53. package/lib/platform/os.d.ts +1 -0
  54. package/lib/platform/os.d.ts.map +1 -1
  55. package/lib/platform/os.js +1 -0
  56. package/lib/platform/os.js.map +1 -1
  57. package/lib/promise/is-promise.d.ts +2 -0
  58. package/lib/promise/is-promise.d.ts.map +1 -0
  59. package/lib/promise/is-promise.js +4 -0
  60. package/lib/promise/is-promise.js.map +1 -0
  61. package/lib/reflection/methods/bind.d.ts +1 -1
  62. package/lib/reflection/methods/bind.d.ts.map +1 -1
  63. package/lib/schedule/interval.d.ts +1 -1
  64. package/lib/schedule/interval.d.ts.map +1 -1
  65. package/lib/schedule/timeout.d.ts +2 -2
  66. package/lib/schedule/timeout.d.ts.map +1 -1
  67. package/lib/state/simple-state-machine.d.ts +1 -1
  68. package/lib/state/simple-state-machine.d.ts.map +1 -1
  69. package/lib/typing-helper/deep.writable.d.ts.map +1 -1
  70. package/package.json +13 -9
  71. package/src/{autoindex.ts → autoindex.generated.ts} +25 -9
  72. package/src/debugging/inspect.ts +25 -3
  73. package/src/error/cause.ts +21 -0
  74. package/src/error/convert-unknown.ts +4 -0
  75. package/src/error/get-frame.ts +10 -4
  76. package/src/function/callback-list.ts +2 -2
  77. package/src/lifecycle/dispose/async-disposable.ts +25 -6
  78. package/src/lifecycle/dispose/bridges/native.ts +5 -7
  79. package/src/lifecycle/dispose/bridges/streams.ts +46 -36
  80. package/src/lifecycle/dispose/disposable.ts +71 -52
  81. package/src/lifecycle/dispose/disposedError.ts +33 -26
  82. package/src/lifecycle/dispose/sync-disposable.ts +24 -7
  83. package/src/lifecycle/event/event.ts +3 -3
  84. package/src/lifecycle/event/type.ts +2 -2
  85. package/src/log/logger.ts +1 -1
  86. package/src/platform/os.ts +2 -0
  87. package/src/promise/is-promise.ts +3 -0
  88. package/src/schedule/timeout.ts +2 -2
  89. package/src/typing-helper/deep.writable.ts +1 -2
  90. package/lib/autoindex.d.ts.map +0 -1
  91. package/lib/autoindex.js.map +0 -1
  92. package/lib/error/known.d.ts +0 -14
  93. package/lib/error/known.d.ts.map +0 -1
  94. package/lib/error/known.js +0 -34
  95. package/lib/error/known.js.map +0 -1
  96. 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
- if (promised) {
15
- return Promise.resolve(closable.close()).then(() => undefined);
16
- }
17
- else {
18
- return new Promise((resolve, reject) => {
19
- closable.close((error) => {
20
- if (error) {
21
- reject(error);
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
- if (promised) {
46
- return Promise.resolve(endable.end()).then(() => undefined);
47
- }
48
- else {
49
- return new Promise((resolve, reject) => {
50
- return endable.end((error) => {
51
- if (error) {
52
- reject(error);
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;AAQpE;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAA0B,QAAW;IACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAE7C,OAAO,mBAAmB,CACzB;QACC,IAAI,WAAW;YACd,OAAO,YAAY,UAAU,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC;QACzD,CAAC;QACD,OAAO;YACN,IAAI,QAAQ,EAAE,CAAC;gBACd,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACP,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC5C,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;wBACxB,IAAI,KAAK,EAAE,CAAC;4BACX,MAAM,CAAC,KAAK,CAAC,CAAC;wBACf,CAAC;6BAAM,CAAC;4BACP,OAAO,EAAE,CAAC;wBACX,CAAC;oBACF,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;YACJ,CAAC;QACF,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;AAOD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAyB,OAAU;IACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC;IAE1C,OAAO,mBAAmB,CACzB;QACC,IAAI,WAAW;YACd,OAAO,WAAW,UAAU,CAAC,OAAO,CAAC,IAAI,SAAS,GAAG,CAAC;QACvD,CAAC;QACD,OAAO;YACN,IAAI,QAAQ,EAAE,CAAC;gBACd,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACP,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;wBAC5B,IAAI,KAAK,EAAE,CAAC;4BACX,MAAM,CAAC,KAAK,CAAC,CAAC;wBACf,CAAC;6BAAM,CAAC;4BACP,OAAO,EAAE,CAAC;wBACX,CAAC;oBACF,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;YACJ,CAAC;QACF,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"}
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
- onBeforeDispose: EventRegister<void>;
13
- readonly hasDisposed: boolean;
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> & IDisposableEvents>(d: T, autoDereference?: boolean): T;
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;AAEtE,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,iBAAiB;IACjC,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,eAAe,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC9B;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,iBAAwB;IAC1D,SAAgB,cAAc,EAAE,aAAa,CAAC,KAAK,CAAC,CAAiC;IAErF,SAAS,CAAC,QAAQ,CAAC,gBAAgB,gBAAuB;IAC1D,SAAgB,eAAe,EAAE,aAAa,CAAC,IAAI,CAAC,CAAkC;IAEtF,SAAS,CAAC,QAAQ,CAAC,cAAc,gBAAuB;IACxD,SAAgB,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,CAAgC;IAElF,gBAAgB;IAChB,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,OAAO,2BAAC;gBAEf,WAAW,CAAC,EAAE,MAAM;IA6BhC;;OAEG;IACI,iBAAiB;IAMxB;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAM;IAErD;;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,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,CAAC;IAiBzF,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;IAUlC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAkC;IAC7F,OAAO,CAAC,SAAS,CAAC,CAGhB;IACF,IAAW,QAAQ,YAElB;IACD;;OAEG;IACH,IAAW,WAAW,YAErB;IACD;;OAEG;IACI,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;IAiC/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
+ {"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 { DuplicateDisposed } from './disposedError.js';
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 = new Emitter();
18
- onDisposeError = this._onDisposeError.register;
19
- _onBeforeDispose = new Emitter();
20
- onBeforeDispose = this._onBeforeDispose.register;
21
- _onPostDispose = new Emitter();
22
- onPostDispose = this._onPostDispose.register;
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._onPostDispose.handle(() => {
38
- this._onPostDispose.dispose();
39
- });
40
- this._disposables.push(this._onBeforeDispose);
41
- this._disposables.push(this._onDisposeError);
42
- if (this.constructor.name === 'EnhancedAsyncDisposable' ||
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 DuplicateDisposed(this, this._disposed.trace);
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
- * @deprecated use disposed
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 DuplicateDisposed(this, this._disposed.trace);
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
- const r = this._dispose(this._disposables);
108
+ this._onBeforeDispose.dispose();
109
+ const trace = createStackTraceHolder('disposed', this.dispose);
115
110
  const cleanup = () => {
116
- this._disposables.length = 0;
117
- Object.freeze(this._disposables);
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
- if (r && 'then' in r) {
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":"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"}
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 Error {
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 DuplicateDisposed extends DisposedError {
10
+ export declare class DuplicateDisposedError extends DisposedError {
10
11
  readonly object: any;
11
- readonly inspectString: string;
12
12
  constructor(object: any, previous: StackTraceHolder);
13
- tryCreateConsoleWarning(): Promise<void>;
14
- is(other: unknown): other is DuplicateDisposed;
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":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAInE,qBAAa,aAAc,SAAQ,KAAK;aAGtB,QAAQ,EAAE,gBAAgB;gBAD1C,OAAO,oBAA6B,EACpB,QAAQ,EAAE,gBAAgB;CAS3C;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,aAAa;aAGlC,MAAM,EAAE,GAAG;IAF5B,SAAgB,aAAa,EAAE,MAAM,CAAC;gBAErB,MAAM,EAAE,GAAG,EAC3B,QAAQ,EAAE,gBAAgB;IAkBd,uBAAuB;IAYpC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB;CAG9C"}
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 { isNodeJs } from '../../platform/os.js';
4
+ import { isV8 } from '../../platform/os.js';
5
5
  import { dispose_name } from './debug.js';
6
- export class DisposedError extends Error {
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 DuplicateDisposed extends DisposedError {
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 stacks = getErrorFrame(previous, 2);
24
- const inspectString = tryInspect(object);
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
- async tryCreateConsoleWarning() {
34
- console.error('DisposedWarning: duplicate dispose.');
35
- if (isNodeJs) {
36
- console.error(' * first dispose:\n%s', prettyFormatError(this.previous));
37
- console.error(' * current dispose:\n%s', prettyFormatError(this));
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
- else {
40
- console.error(' * first dispose:%O', this.previous);
41
- console.error(' * current dispose:%O', this);
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 DuplicateDisposed;
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,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,OAAO,aAAc,SAAQ,KAAK;IAGtB;IAFjB,YACC,OAAO,GAAG,0BAA0B,EACpB,QAA0B;QAE1C,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAFpB,aAAQ,GAAR,QAAQ,CAAkB;QAG1C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC7B,CAAC;CAKD;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAGlC;IAFD,aAAa,CAAS;IACtC,YACiB,MAAW,EAC3B,QAA0B;QAE1B,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC;QAClC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAChD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAE1C,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEjD,KAAK,CAAC,WAAW,IAAI,0BAA0B,MAAM,GAAG,EAAE,QAAQ,CAAC,CAAC;QAVpD,WAAM,GAAN,MAAM,CAAK;QAW3B,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC;QAE5B,IAAI,CAAC,uBAAuB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,uBAAuB;QACnC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,IAAI,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,EAAE,CAAC,KAAc;QAChB,OAAO,KAAK,YAAY,iBAAiB,CAAC;IAC3C,CAAC;CACD"}
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 hasDisposed(): boolean;
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,WAAW,YAErB;IACM,OAAO,IAAI,IAAI;IAQtB,CAAC,MAAM,CAAC,OAAO,CAAC;IAGhB,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI;CACnC;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,0BAA0B,CAAC,KAAK,CAAE,YAAW,WAAW;cAC5E,QAAQ,CAAC,WAAW,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAgB/D,CAAC,MAAM,CAAC,OAAO,CAAC,aAAgB;CACvC"}
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 { DuplicateDisposed } from './disposedError.js';
5
+ import { DuplicateDisposedError } from './disposedError.js';
6
6
  /**
7
7
  * 简单版手动disposable
8
8
  */
9
9
  export class DisposableOnce {
10
10
  _disposed;
11
- get hasDisposed() {
11
+ get disposed() {
12
12
  return !!this._disposed;
13
13
  }
14
14
  dispose() {
15
15
  if (this._disposed) {
16
- console.warn(new DuplicateDisposed(this, this._disposed).message);
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
- const ee = convertCaughtError(e);
41
- this._onDisposeError.fire(ee);
42
- if (!this._onDisposeError.listenerCount()) {
43
- console.error('Unhandled error during dispose: %s', ee.stack);
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,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;GAEG;AACH,MAAM,OAAgB,cAAc;IAC3B,SAAS,CAAoB;IAErC,IAAW,WAAW;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IACzB,CAAC;IACM,OAAO;QACb,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;YAClE,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;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,0BAAiC;IACrD,QAAQ,CAAC,WAAmC;QAC9D,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,MAAM,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,CAAC;oBAC3C,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC/D,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,yBAAyB;IAClB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;CACvC"}
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 hasDisposed(): boolean;
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,WAAW,YAErB;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"}
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"}