@idlebox/common 1.4.19 → 1.4.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/array/{arrayDiff.d.ts → diff.d.ts} +1 -1
- package/lib/array/diff.d.ts.map +1 -0
- package/lib/array/{arrayDiff.js → diff.js} +1 -1
- package/lib/array/diff.js.map +1 -0
- package/lib/array/{arraySame.d.ts → is-same.d.ts} +1 -1
- package/lib/array/is-same.d.ts.map +1 -0
- package/lib/array/{arraySame.js → is-same.js} +1 -1
- package/lib/array/is-same.js.map +1 -0
- package/lib/array/{normalizeArray.d.ts → normalize.d.ts} +1 -1
- package/lib/array/normalize.d.ts.map +1 -0
- package/lib/array/{normalizeArray.js → normalize.js} +1 -1
- package/lib/array/normalize.js.map +1 -0
- package/lib/array/{sortAlpha.d.ts → sort-alpha.d.ts} +1 -1
- package/lib/array/sort-alpha.d.ts.map +1 -0
- package/lib/array/{sortAlpha.js → sort-alpha.js} +1 -1
- package/lib/array/sort-alpha.js.map +1 -0
- package/lib/array/{arrayUnique.d.ts → unique.d.ts} +1 -1
- package/lib/array/unique.d.ts.map +1 -0
- package/lib/array/{arrayUnique.js → unique.js} +1 -1
- package/lib/array/unique.js.map +1 -0
- package/lib/autoindex.d.ts +148 -135
- package/lib/autoindex.d.ts.map +1 -1
- package/lib/autoindex.js +177 -153
- package/lib/autoindex.js.map +1 -1
- package/lib/date/{isInvalid.d.ts → is-invalid.d.ts} +1 -1
- package/lib/date/is-invalid.d.ts.map +1 -0
- package/lib/date/{isInvalid.js → is-invalid.js} +1 -1
- package/lib/date/is-invalid.js.map +1 -0
- package/lib/date/{timeString.d.ts → to-string.d.ts} +5 -5
- package/lib/date/to-string.d.ts.map +1 -0
- package/lib/date/{timeString.js → to-string.js} +24 -25
- package/lib/date/to-string.js.map +1 -0
- package/lib/debugging/{tryInspect.d.ts → inspect.d.ts} +2 -2
- package/lib/debugging/inspect.d.ts.map +1 -0
- package/lib/debugging/{tryInspect.js → inspect.js} +1 -1
- package/lib/debugging/inspect.js.map +1 -0
- package/lib/debugging/object-with-name.d.ts +38 -0
- package/lib/debugging/object-with-name.d.ts.map +1 -0
- package/lib/debugging/object-with-name.js +41 -0
- package/lib/debugging/object-with-name.js.map +1 -0
- package/lib/debugging/serializable.js +1 -1
- package/lib/debugging/serializable.js.map +1 -1
- package/lib/error/convert-unknown.d.ts +2 -0
- package/lib/error/convert-unknown.d.ts.map +1 -0
- package/lib/error/convert-unknown.js +9 -0
- package/lib/error/convert-unknown.js.map +1 -0
- package/lib/error/{getFrame.d.ts → get-frame.d.ts} +2 -2
- package/lib/error/get-frame.d.ts.map +1 -0
- package/lib/error/{getFrame.js → get-frame.js} +1 -1
- package/lib/error/get-frame.js.map +1 -0
- package/lib/error/{pretty.d.ts → pretty.nodejs.d.ts} +2 -1
- package/lib/error/pretty.nodejs.d.ts.map +1 -0
- package/lib/error/{pretty.js → pretty.nodejs.js} +3 -3
- package/lib/error/pretty.nodejs.js.map +1 -0
- package/lib/error/{stackTrace.d.ts → stack-trace.d.ts} +1 -1
- package/lib/error/stack-trace.d.ts.map +1 -0
- package/lib/error/{stackTrace.js → stack-trace.js} +1 -1
- package/lib/error/stack-trace.js.map +1 -0
- package/lib/function/{asyncCallbackList.d.ts → callback-list.async.d.ts} +3 -3
- package/lib/function/callback-list.async.d.ts.map +1 -0
- package/lib/function/{asyncCallbackList.js → callback-list.async.js} +3 -7
- package/lib/function/callback-list.async.js.map +1 -0
- package/lib/function/{callbackList.d.ts → callback-list.d.ts} +1 -1
- package/lib/function/callback-list.d.ts.map +1 -0
- package/lib/function/callback-list.delay.d.ts +15 -0
- package/lib/function/callback-list.delay.d.ts.map +1 -0
- package/lib/function/callback-list.delay.js +22 -0
- package/lib/function/callback-list.delay.js.map +1 -0
- package/lib/function/{callbackList.js → callback-list.js} +2 -2
- package/lib/function/callback-list.js.map +1 -0
- package/lib/function/noop.d.ts +2 -0
- package/lib/function/noop.d.ts.map +1 -0
- package/lib/function/noop.js +2 -0
- package/lib/function/noop.js.map +1 -0
- package/lib/legacy/rename.d.ts +13 -0
- package/lib/legacy/rename.d.ts.map +1 -0
- package/lib/legacy/rename.js +13 -0
- package/lib/legacy/rename.js.map +1 -0
- package/lib/lifecycle/cancellation/driver.browser.d.ts.map +1 -0
- package/lib/lifecycle/cancellation/driver.browser.js.map +1 -0
- package/lib/lifecycle/cancellation/driver.common.d.ts.map +1 -0
- package/lib/lifecycle/{promise/cancellationToken → cancellation}/driver.common.js +1 -1
- package/lib/lifecycle/cancellation/driver.common.js.map +1 -0
- package/lib/lifecycle/{promise/cancellationToken → cancellation}/source.d.ts +3 -3
- package/lib/lifecycle/cancellation/source.d.ts.map +1 -0
- package/lib/lifecycle/{promise/cancellationToken → cancellation}/source.js +2 -2
- package/lib/lifecycle/cancellation/source.js.map +1 -0
- package/lib/lifecycle/dispose/async-disposable.d.ts +17 -0
- package/lib/lifecycle/dispose/async-disposable.d.ts.map +1 -0
- package/lib/lifecycle/dispose/async-disposable.js +42 -0
- package/lib/lifecycle/dispose/async-disposable.js.map +1 -0
- package/lib/lifecycle/dispose/bridges/function.d.ts +17 -0
- package/lib/lifecycle/dispose/bridges/function.d.ts.map +1 -0
- package/lib/lifecycle/dispose/bridges/function.js +29 -0
- package/lib/lifecycle/dispose/bridges/function.js.map +1 -0
- package/lib/lifecycle/dispose/bridges/native.d.ts +10 -0
- package/lib/lifecycle/dispose/bridges/native.d.ts.map +1 -0
- package/lib/lifecycle/dispose/bridges/native.js +13 -0
- package/lib/lifecycle/dispose/bridges/native.js.map +1 -0
- package/lib/lifecycle/dispose/bridges/streams.d.ts +21 -0
- package/lib/lifecycle/dispose/bridges/streams.d.ts.map +1 -0
- package/lib/lifecycle/dispose/bridges/streams.js +60 -0
- package/lib/lifecycle/dispose/bridges/streams.js.map +1 -0
- package/lib/lifecycle/dispose/debug.js +17 -3
- package/lib/lifecycle/dispose/debug.js.map +1 -1
- package/lib/lifecycle/dispose/disposable.d.ts +22 -0
- package/lib/lifecycle/dispose/disposable.d.ts.map +1 -0
- package/lib/lifecycle/dispose/disposable.js +120 -0
- package/lib/lifecycle/dispose/disposable.js.map +1 -0
- package/lib/lifecycle/dispose/disposableEvent.d.ts +9 -14
- package/lib/lifecycle/dispose/disposableEvent.d.ts.map +1 -1
- package/lib/lifecycle/dispose/disposableEvent.js +14 -64
- package/lib/lifecycle/dispose/disposableEvent.js.map +1 -1
- package/lib/lifecycle/dispose/disposedError.d.ts +9 -4
- package/lib/lifecycle/dispose/disposedError.d.ts.map +1 -1
- package/lib/lifecycle/dispose/disposedError.js +28 -13
- package/lib/lifecycle/dispose/disposedError.js.map +1 -1
- package/lib/lifecycle/dispose/sync-disposable.d.ts +21 -0
- package/lib/lifecycle/dispose/sync-disposable.d.ts.map +1 -0
- package/lib/lifecycle/dispose/sync-disposable.js +52 -0
- package/lib/lifecycle/dispose/sync-disposable.js.map +1 -0
- package/lib/lifecycle/event/event.d.ts +18 -33
- package/lib/lifecycle/event/event.d.ts.map +1 -1
- package/lib/lifecycle/event/event.js +75 -64
- package/lib/lifecycle/event/event.js.map +1 -1
- package/lib/lifecycle/event/memorized.d.ts +4 -3
- package/lib/lifecycle/event/memorized.d.ts.map +1 -1
- package/lib/lifecycle/event/memorized.js +9 -10
- package/lib/lifecycle/event/memorized.js.map +1 -1
- package/lib/lifecycle/event/type.d.ts +47 -0
- package/lib/lifecycle/event/type.d.ts.map +1 -0
- package/lib/lifecycle/event/type.js +2 -0
- package/lib/lifecycle/event/type.js.map +1 -0
- package/lib/lifecycle/{dispose/lifecycle.global.d.ts → global/global-lifecycle.d.ts} +3 -15
- package/lib/lifecycle/global/global-lifecycle.d.ts.map +1 -0
- package/lib/lifecycle/{dispose/lifecycle.global.js → global/global-lifecycle.js} +8 -21
- package/lib/lifecycle/global/global-lifecycle.js.map +1 -0
- package/lib/log/logger.js +1 -1
- package/lib/log/logger.js.map +1 -1
- package/lib/{mapSet/customSet.d.ts → map-and-set/custom-set.d.ts} +4 -8
- package/lib/map-and-set/custom-set.d.ts.map +1 -0
- package/lib/{mapSet/customSet.js → map-and-set/custom-set.js} +6 -20
- package/lib/map-and-set/custom-set.js.map +1 -0
- package/lib/map-and-set/required-map.d.ts +28 -0
- package/lib/map-and-set/required-map.d.ts.map +1 -0
- package/lib/map-and-set/required-map.js +42 -0
- package/lib/map-and-set/required-map.js.map +1 -0
- package/lib/object/objectSame.js +1 -1
- package/lib/object/objectSame.js.map +1 -1
- package/lib/path/pathArray.js +1 -1
- package/lib/path/pathArray.js.map +1 -1
- package/lib/path/pathCalc.d.ts +10 -0
- package/lib/path/pathCalc.d.ts.map +1 -0
- package/lib/path/pathCalc.js +17 -0
- package/lib/path/pathCalc.js.map +1 -0
- package/lib/platform/compile.d.ts +7 -0
- package/lib/platform/compile.d.ts.map +1 -0
- package/lib/platform/compile.js +2 -0
- package/lib/platform/compile.js.map +1 -0
- package/lib/platform/globalSingleton.js +1 -1
- package/lib/platform/globalSingleton.js.map +1 -1
- package/lib/platform/os.d.ts.map +1 -1
- package/lib/platform/os.js +1 -1
- package/lib/platform/os.js.map +1 -1
- package/lib/promise/{awaitIterator.d.ts → await-iterator.d.ts} +1 -1
- package/lib/promise/await-iterator.d.ts.map +1 -0
- package/lib/promise/{awaitIterator.js → await-iterator.js} +1 -1
- package/lib/promise/await-iterator.js.map +1 -0
- package/lib/{lifecycle/promise/deferredPromise.d.ts → promise/deferred-promise.d.ts} +14 -6
- package/lib/promise/deferred-promise.d.ts.map +1 -0
- package/lib/{lifecycle/promise/deferredPromise.js → promise/deferred-promise.js} +57 -16
- package/lib/promise/deferred-promise.js.map +1 -0
- package/lib/promise/{promiseBool.d.ts → promise-bool.d.ts} +1 -1
- package/lib/promise/promise-bool.d.ts.map +1 -0
- package/lib/promise/{promiseBool.js → promise-bool.js} +1 -1
- package/lib/promise/promise-bool.js.map +1 -0
- package/lib/promise/{promiseCollection.d.ts → promise-list.d.ts} +3 -3
- package/lib/promise/promise-list.d.ts.map +1 -0
- package/lib/promise/{promiseCollection.js → promise-list.js} +3 -3
- package/lib/promise/promise-list.js.map +1 -0
- package/lib/re-export.d.ts +2 -0
- package/lib/re-export.d.ts.map +1 -0
- package/lib/re-export.js +2 -0
- package/lib/re-export.js.map +1 -0
- package/lib/reflection/classes/pointer.d.ts +5 -0
- package/lib/reflection/classes/pointer.d.ts.map +1 -0
- package/lib/reflection/classes/pointer.js +49 -0
- package/lib/reflection/classes/pointer.js.map +1 -0
- package/lib/reflection/classes/singleton.d.ts +10 -2
- package/lib/reflection/classes/singleton.d.ts.map +1 -1
- package/lib/reflection/classes/singleton.js +29 -21
- package/lib/reflection/classes/singleton.js.map +1 -1
- package/lib/reflection/methods/bind.d.ts +1 -4
- package/lib/reflection/methods/bind.d.ts.map +1 -1
- package/lib/reflection/methods/bind.js +17 -23
- package/lib/reflection/methods/bind.js.map +1 -1
- package/lib/reflection/methods/memorize.d.ts +7 -4
- package/lib/reflection/methods/memorize.d.ts.map +1 -1
- package/lib/reflection/methods/memorize.js +27 -23
- package/lib/reflection/methods/memorize.js.map +1 -1
- package/lib/schedule/extendable-timer.d.ts +16 -0
- package/lib/schedule/extendable-timer.d.ts.map +1 -0
- package/lib/schedule/extendable-timer.js +45 -0
- package/lib/schedule/extendable-timer.js.map +1 -0
- package/lib/{lifecycle/timeout → schedule}/interval.d.ts +3 -3
- package/lib/schedule/interval.d.ts.map +1 -0
- package/lib/{lifecycle/timeout → schedule}/interval.js +3 -3
- package/lib/schedule/interval.js.map +1 -0
- package/lib/schedule/local-type.d.ts +3 -0
- package/lib/schedule/local-type.d.ts.map +1 -0
- package/lib/schedule/local-type.js +2 -0
- package/lib/schedule/local-type.js.map +1 -0
- package/lib/schedule/scheduler.d.ts +4 -0
- package/lib/schedule/scheduler.d.ts.map +1 -0
- package/lib/schedule/scheduler.js +3 -0
- package/lib/schedule/scheduler.js.map +1 -0
- package/lib/{lifecycle/timeout → schedule}/timeout.d.ts +2 -3
- package/lib/schedule/timeout.d.ts.map +1 -0
- package/lib/{lifecycle/timeout → schedule}/timeout.js +5 -11
- package/lib/schedule/timeout.js.map +1 -0
- package/lib/state/{StateMachine.d.ts → simple-state-machine.d.ts} +1 -1
- package/lib/state/simple-state-machine.d.ts.map +1 -0
- package/lib/state/{StateMachine.js → simple-state-machine.js} +1 -1
- package/lib/state/simple-state-machine.js.map +1 -0
- package/lib/string/{castCase.d.ts → case-cast.d.ts} +1 -1
- package/lib/string/case-cast.d.ts.map +1 -0
- package/lib/string/{castCase.js → case-cast.js} +1 -1
- package/lib/string/case-cast.js.map +1 -0
- package/lib/string/{escapeRegexp.d.ts → escape-regexp.d.ts} +1 -1
- package/lib/string/escape-regexp.d.ts.map +1 -0
- package/lib/string/{escapeRegexp.js → escape-regexp.js} +1 -1
- package/lib/string/escape-regexp.js.map +1 -0
- package/lib/string/{sizeString.d.ts → human-bytes.d.ts} +1 -1
- package/lib/string/human-bytes.d.ts.map +1 -0
- package/lib/string/{sizeString.js → human-bytes.js} +1 -1
- package/lib/string/human-bytes.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/typing-helper/callback.d.ts +5 -0
- package/lib/typing-helper/callback.d.ts.map +1 -0
- package/lib/typing-helper/callback.js +2 -0
- package/lib/typing-helper/callback.js.map +1 -0
- package/lib/typing-helper/deep.partial.d.ts.map +1 -0
- package/lib/typing-helper/deep.partial.js.map +1 -0
- package/lib/typing-helper/deep.readonly.d.ts.map +1 -0
- package/lib/typing-helper/deep.readonly.js.map +1 -0
- package/lib/typing-helper/deep.required.d.ts.map +1 -0
- package/lib/typing-helper/deep.required.js.map +1 -0
- package/lib/typing-helper/deep.writable.d.ts.map +1 -0
- package/lib/typing-helper/deep.writable.js.map +1 -0
- package/lib/typing-helper/literal.d.ts.map +1 -0
- package/lib/{typingHelper → typing-helper}/literal.js.map +1 -1
- package/package.json +8 -7
- package/src/autoindex.ts +239 -213
- package/src/date/{timeString.ts → to-string.ts} +28 -29
- package/src/debugging/{tryInspect.ts → inspect.ts} +1 -1
- package/src/debugging/object-with-name.ts +64 -0
- package/src/debugging/serializable.ts +1 -1
- package/src/error/convert-unknown.ts +9 -0
- package/src/error/{getFrame.ts → get-frame.ts} +1 -1
- package/src/error/{pretty.ts → pretty.nodejs.ts} +3 -2
- package/src/function/{asyncCallbackList.ts → callback-list.async.ts} +2 -7
- package/src/function/callback-list.delay.ts +29 -0
- package/src/function/{callbackList.ts → callback-list.ts} +1 -1
- package/src/function/noop.ts +1 -0
- package/src/global.d.ts +10 -0
- package/src/legacy/rename.ts +15 -0
- package/src/lifecycle/{promise/cancellationToken → cancellation}/driver.browser.ts +3 -4
- package/src/lifecycle/{promise/cancellationToken → cancellation}/driver.common.ts +3 -2
- package/src/lifecycle/{promise/cancellationToken → cancellation}/source.ts +4 -4
- package/src/lifecycle/dispose/async-disposable.ts +41 -0
- package/src/lifecycle/dispose/bridges/function.ts +31 -0
- package/src/lifecycle/dispose/bridges/native.ts +23 -0
- package/src/lifecycle/dispose/bridges/streams.ts +70 -0
- package/src/lifecycle/dispose/debug.ts +22 -4
- package/src/lifecycle/dispose/disposable.ts +162 -0
- package/src/lifecycle/dispose/disposableEvent.ts +20 -86
- package/src/lifecycle/dispose/disposedError.ts +36 -19
- package/src/lifecycle/dispose/sync-disposable.ts +53 -0
- package/src/lifecycle/event/event.ts +83 -76
- package/src/lifecycle/event/memorized.ts +13 -12
- package/src/lifecycle/event/type.ts +55 -0
- package/src/lifecycle/global/global-lifecycle.ts +49 -0
- package/src/log/logger.ts +1 -1
- package/src/{mapSet/customSet.ts → map-and-set/custom-set.ts} +7 -26
- package/src/{mapSet/extendMap.ts → map-and-set/required-map.ts} +21 -6
- package/src/object/objectSame.ts +1 -1
- package/src/path/pathArray.ts +1 -1
- package/src/path/pathCalc.ts +18 -0
- package/src/platform/compile.ts +6 -0
- package/src/platform/globalSingleton.ts +1 -1
- package/src/platform/os.ts +1 -1
- package/src/{lifecycle/promise/deferredPromise.ts → promise/deferred-promise.ts} +68 -27
- package/src/promise/{promiseCollection.ts → promise-list.ts} +2 -2
- package/src/re-export.ts +1 -0
- package/src/reflection/classes/pointer.ts +54 -0
- package/src/reflection/classes/singleton.ts +30 -21
- package/src/reflection/methods/bind.ts +15 -23
- package/src/reflection/methods/memorize.ts +30 -23
- package/src/schedule/extendable-timer.ts +49 -0
- package/src/{lifecycle/timeout → schedule}/interval.ts +4 -4
- package/src/schedule/local-type.ts +2 -0
- package/src/schedule/scheduler.ts +8 -0
- package/src/{lifecycle/timeout → schedule}/timeout.ts +7 -13
- package/src/state/{StateMachine.ts → simple-state-machine.ts} +3 -4
- package/src/tsconfig.json +3 -1
- package/src/typing-helper/callback.ts +4 -0
- package/lib/array/arrayDiff.d.ts.map +0 -1
- package/lib/array/arrayDiff.js.map +0 -1
- package/lib/array/arraySame.d.ts.map +0 -1
- package/lib/array/arraySame.js.map +0 -1
- package/lib/array/arrayUnique.d.ts.map +0 -1
- package/lib/array/arrayUnique.js.map +0 -1
- package/lib/array/normalizeArray.d.ts.map +0 -1
- package/lib/array/normalizeArray.js.map +0 -1
- package/lib/array/sortAlpha.d.ts.map +0 -1
- package/lib/array/sortAlpha.js.map +0 -1
- package/lib/date/isInvalid.d.ts.map +0 -1
- package/lib/date/isInvalid.js.map +0 -1
- package/lib/date/timeString.d.ts.map +0 -1
- package/lib/date/timeString.js.map +0 -1
- package/lib/debugging/tryInspect.d.ts.map +0 -1
- package/lib/debugging/tryInspect.js.map +0 -1
- package/lib/error/convertUnknown.d.ts +0 -2
- package/lib/error/convertUnknown.d.ts.map +0 -1
- package/lib/error/convertUnknown.js +0 -9
- package/lib/error/convertUnknown.js.map +0 -1
- package/lib/error/getFrame.d.ts.map +0 -1
- package/lib/error/getFrame.js.map +0 -1
- package/lib/error/pretty.d.ts.map +0 -1
- package/lib/error/pretty.js.map +0 -1
- package/lib/error/stackTrace.d.ts.map +0 -1
- package/lib/error/stackTrace.js.map +0 -1
- package/lib/error-wellknown/exit.error.d.ts +0 -13
- package/lib/error-wellknown/exit.error.d.ts.map +0 -1
- package/lib/error-wellknown/exit.error.js +0 -20
- package/lib/error-wellknown/exit.error.js.map +0 -1
- package/lib/function/asyncCallbackList.d.ts.map +0 -1
- package/lib/function/asyncCallbackList.js.map +0 -1
- package/lib/function/callbackList.d.ts.map +0 -1
- package/lib/function/callbackList.js.map +0 -1
- package/lib/function/delayCallbackList.d.ts +0 -17
- package/lib/function/delayCallbackList.d.ts.map +0 -1
- package/lib/function/delayCallbackList.js +0 -36
- package/lib/function/delayCallbackList.js.map +0 -1
- package/lib/function/functionName.d.ts +0 -26
- package/lib/function/functionName.d.ts.map +0 -1
- package/lib/function/functionName.js +0 -27
- package/lib/function/functionName.js.map +0 -1
- package/lib/lifecycle/dispose/bridges/rxjs.d.ts +0 -8
- package/lib/lifecycle/dispose/bridges/rxjs.d.ts.map +0 -1
- package/lib/lifecycle/dispose/bridges/rxjs.js +0 -4
- package/lib/lifecycle/dispose/bridges/rxjs.js.map +0 -1
- package/lib/lifecycle/dispose/lifecycle.async.d.ts +0 -37
- package/lib/lifecycle/dispose/lifecycle.async.d.ts.map +0 -1
- package/lib/lifecycle/dispose/lifecycle.async.js +0 -111
- package/lib/lifecycle/dispose/lifecycle.async.js.map +0 -1
- package/lib/lifecycle/dispose/lifecycle.d.ts +0 -32
- package/lib/lifecycle/dispose/lifecycle.d.ts.map +0 -1
- package/lib/lifecycle/dispose/lifecycle.global.d.ts.map +0 -1
- package/lib/lifecycle/dispose/lifecycle.global.js.map +0 -1
- package/lib/lifecycle/dispose/lifecycle.js +0 -67
- package/lib/lifecycle/dispose/lifecycle.js.map +0 -1
- package/lib/lifecycle/dispose/lifecycle.sync.d.ts +0 -45
- package/lib/lifecycle/dispose/lifecycle.sync.d.ts.map +0 -1
- package/lib/lifecycle/dispose/lifecycle.sync.js +0 -115
- package/lib/lifecycle/dispose/lifecycle.sync.js.map +0 -1
- package/lib/lifecycle/promise/cancel.d.ts +0 -10
- package/lib/lifecycle/promise/cancel.d.ts.map +0 -1
- package/lib/lifecycle/promise/cancel.js +0 -15
- package/lib/lifecycle/promise/cancel.js.map +0 -1
- package/lib/lifecycle/promise/cancellationToken/driver.browser.d.ts.map +0 -1
- package/lib/lifecycle/promise/cancellationToken/driver.browser.js.map +0 -1
- package/lib/lifecycle/promise/cancellationToken/driver.common.d.ts.map +0 -1
- package/lib/lifecycle/promise/cancellationToken/driver.common.js.map +0 -1
- package/lib/lifecycle/promise/cancellationToken/source.d.ts.map +0 -1
- package/lib/lifecycle/promise/cancellationToken/source.js.map +0 -1
- package/lib/lifecycle/promise/deferredPromise.d.ts.map +0 -1
- package/lib/lifecycle/promise/deferredPromise.js.map +0 -1
- package/lib/lifecycle/timeout/interval.d.ts.map +0 -1
- package/lib/lifecycle/timeout/interval.js.map +0 -1
- package/lib/lifecycle/timeout/timeout.d.ts.map +0 -1
- package/lib/lifecycle/timeout/timeout.js.map +0 -1
- package/lib/lifecycle/timeout/timeoutError.d.ts +0 -11
- package/lib/lifecycle/timeout/timeoutError.d.ts.map +0 -1
- package/lib/lifecycle/timeout/timeoutError.js +0 -16
- package/lib/lifecycle/timeout/timeoutError.js.map +0 -1
- package/lib/mapSet/customSet.d.ts.map +0 -1
- package/lib/mapSet/customSet.js.map +0 -1
- package/lib/mapSet/extendMap.d.ts +0 -21
- package/lib/mapSet/extendMap.d.ts.map +0 -1
- package/lib/mapSet/extendMap.js +0 -26
- package/lib/mapSet/extendMap.js.map +0 -1
- package/lib/promise/awaitIterator.d.ts.map +0 -1
- package/lib/promise/awaitIterator.js.map +0 -1
- package/lib/promise/finishAllPromise.d.ts +0 -13
- package/lib/promise/finishAllPromise.d.ts.map +0 -1
- package/lib/promise/finishAllPromise.js +0 -37
- package/lib/promise/finishAllPromise.js.map +0 -1
- package/lib/promise/promiseBool.d.ts.map +0 -1
- package/lib/promise/promiseBool.js.map +0 -1
- package/lib/promise/promiseCollection.d.ts.map +0 -1
- package/lib/promise/promiseCollection.js.map +0 -1
- package/lib/promise/timeoutPromiseCollection.d.ts +0 -7
- package/lib/promise/timeoutPromiseCollection.d.ts.map +0 -1
- package/lib/promise/timeoutPromiseCollection.js +0 -20
- package/lib/promise/timeoutPromiseCollection.js.map +0 -1
- package/lib/reflection/classes/hookClass.d.ts +0 -11
- package/lib/reflection/classes/hookClass.d.ts.map +0 -1
- package/lib/reflection/classes/hookClass.js +0 -34
- package/lib/reflection/classes/hookClass.js.map +0 -1
- package/lib/reflection/methods/initOnRead.d.ts +0 -7
- package/lib/reflection/methods/initOnRead.d.ts.map +0 -1
- package/lib/reflection/methods/initOnRead.js +0 -11
- package/lib/reflection/methods/initOnRead.js.map +0 -1
- package/lib/state/StateMachine.d.ts.map +0 -1
- package/lib/state/StateMachine.js.map +0 -1
- package/lib/string/castCase.d.ts.map +0 -1
- package/lib/string/castCase.js.map +0 -1
- package/lib/string/escapeRegexp.d.ts.map +0 -1
- package/lib/string/escapeRegexp.js.map +0 -1
- package/lib/string/sizeString.d.ts.map +0 -1
- package/lib/string/sizeString.js.map +0 -1
- package/lib/typingHelper/deep.partial.d.ts.map +0 -1
- package/lib/typingHelper/deep.partial.js.map +0 -1
- package/lib/typingHelper/deep.readonly.d.ts.map +0 -1
- package/lib/typingHelper/deep.readonly.js.map +0 -1
- package/lib/typingHelper/deep.required.d.ts.map +0 -1
- package/lib/typingHelper/deep.required.js.map +0 -1
- package/lib/typingHelper/deep.writable.d.ts.map +0 -1
- package/lib/typingHelper/deep.writable.js.map +0 -1
- package/lib/typingHelper/literal.d.ts.map +0 -1
- package/src/error/convertUnknown.ts +0 -9
- package/src/error-wellknown/exit.error.ts +0 -21
- package/src/function/delayCallbackList.ts +0 -45
- package/src/function/functionName.ts +0 -44
- package/src/lifecycle/dispose/bridges/rxjs.ts +0 -6
- package/src/lifecycle/dispose/lifecycle.async.ts +0 -134
- package/src/lifecycle/dispose/lifecycle.global.ts +0 -66
- package/src/lifecycle/dispose/lifecycle.sync.ts +0 -133
- package/src/lifecycle/dispose/lifecycle.ts +0 -94
- package/src/lifecycle/promise/cancel.ts +0 -16
- package/src/lifecycle/timeout/timeoutError.ts +0 -18
- package/src/promise/finishAllPromise.ts +0 -50
- package/src/promise/timeoutPromiseCollection.ts +0 -22
- package/src/reflection/classes/hookClass.ts +0 -47
- package/src/reflection/methods/initOnRead.ts +0 -11
- /package/lib/lifecycle/{promise/cancellationToken → cancellation}/driver.browser.d.ts +0 -0
- /package/lib/lifecycle/{promise/cancellationToken → cancellation}/driver.browser.js +0 -0
- /package/lib/lifecycle/{promise/cancellationToken → cancellation}/driver.common.d.ts +0 -0
- /package/lib/{typingHelper → typing-helper}/deep.partial.d.ts +0 -0
- /package/lib/{typingHelper → typing-helper}/deep.partial.js +0 -0
- /package/lib/{typingHelper → typing-helper}/deep.readonly.d.ts +0 -0
- /package/lib/{typingHelper → typing-helper}/deep.readonly.js +0 -0
- /package/lib/{typingHelper → typing-helper}/deep.required.d.ts +0 -0
- /package/lib/{typingHelper → typing-helper}/deep.required.js +0 -0
- /package/lib/{typingHelper → typing-helper}/deep.writable.d.ts +0 -0
- /package/lib/{typingHelper → typing-helper}/deep.writable.js +0 -0
- /package/lib/{typingHelper → typing-helper}/literal.d.ts +0 -0
- /package/lib/{typingHelper → typing-helper}/literal.js +0 -0
- /package/src/array/{arrayDiff.ts → diff.ts} +0 -0
- /package/src/array/{arraySame.ts → is-same.ts} +0 -0
- /package/src/array/{normalizeArray.ts → normalize.ts} +0 -0
- /package/src/array/{sortAlpha.ts → sort-alpha.ts} +0 -0
- /package/src/array/{arrayUnique.ts → unique.ts} +0 -0
- /package/src/date/{isInvalid.ts → is-invalid.ts} +0 -0
- /package/src/error/{stackTrace.ts → stack-trace.ts} +0 -0
- /package/src/promise/{awaitIterator.ts → await-iterator.ts} +0 -0
- /package/src/promise/{promiseBool.ts → promise-bool.ts} +0 -0
- /package/src/string/{castCase.ts → case-cast.ts} +0 -0
- /package/src/string/{escapeRegexp.ts → escape-regexp.ts} +0 -0
- /package/src/string/{sizeString.ts → human-bytes.ts} +0 -0
- /package/src/{typingHelper → typing-helper}/deep.partial.ts +0 -0
- /package/src/{typingHelper → typing-helper}/deep.readonly.ts +0 -0
- /package/src/{typingHelper → typing-helper}/deep.required.ts +0 -0
- /package/src/{typingHelper → typing-helper}/deep.writable.ts +0 -0
- /package/src/{typingHelper → typing-helper}/literal.ts +0 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import type { MaybeNamed } from '../../debugging/object-with-name.js';
|
|
2
|
+
import { createStackTraceHolder, type StackTraceHolder } from '../../error/stack-trace.js';
|
|
3
|
+
import { Emitter } from '../event/event.js';
|
|
4
|
+
import type { EventRegister } from '../event/type.js';
|
|
5
|
+
import { fromNativeDisposable } from './bridges/native.js';
|
|
6
|
+
import { _debug_dispose, dispose_name } from './debug.js';
|
|
7
|
+
import { DuplicateDisposed } from './disposedError.js';
|
|
8
|
+
|
|
9
|
+
export enum DuplicateDisposeAction {
|
|
10
|
+
Disable = 0,
|
|
11
|
+
Warning = 1,
|
|
12
|
+
Allow = 2,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** @public */
|
|
16
|
+
export interface IDisposableEvents {
|
|
17
|
+
onDisposeError: EventRegister<Error>;
|
|
18
|
+
onBeforeDispose: EventRegister<void>;
|
|
19
|
+
readonly hasDisposed: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** @public */
|
|
23
|
+
export interface IDisposable extends MaybeNamed {
|
|
24
|
+
dispose(): void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** @public */
|
|
28
|
+
export interface IAsyncDisposable extends MaybeNamed {
|
|
29
|
+
dispose(): void | Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
type _Type<Async extends boolean> = Async extends true ? IAsyncDisposable : IDisposable;
|
|
33
|
+
type _RType<Async extends boolean> = Async extends true ? Promise<void> : void;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 增强型Disposable
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
export abstract class AbstractEnhancedDisposable<Async extends boolean> implements IDisposableEvents {
|
|
40
|
+
protected readonly _onDisposeError = new Emitter<Error>();
|
|
41
|
+
public readonly onDisposeError: EventRegister<Error> = this._onDisposeError.register;
|
|
42
|
+
|
|
43
|
+
protected readonly _onBeforeDispose = new Emitter<void>();
|
|
44
|
+
public readonly onBeforeDispose: EventRegister<void> = this._onBeforeDispose.register;
|
|
45
|
+
|
|
46
|
+
protected readonly _onPostDispose = new Emitter<void>();
|
|
47
|
+
public readonly onPostDispose: EventRegister<void> = this._onPostDispose.register;
|
|
48
|
+
|
|
49
|
+
/** for debug */
|
|
50
|
+
public readonly displayName?: string;
|
|
51
|
+
protected readonly _logger;
|
|
52
|
+
|
|
53
|
+
constructor(displayName?: string) {
|
|
54
|
+
if (displayName !== undefined) {
|
|
55
|
+
this.displayName = displayName;
|
|
56
|
+
} else if (!this.displayName) {
|
|
57
|
+
displayName = dispose_name(this, 'AsyncDisposable');
|
|
58
|
+
this.displayName = displayName;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
this._logger = _debug_dispose.extend(this.displayName || 'disposable');
|
|
62
|
+
|
|
63
|
+
this._onPostDispose.handle(() => {
|
|
64
|
+
this._onPostDispose.dispose();
|
|
65
|
+
});
|
|
66
|
+
this._disposables.push(this._onBeforeDispose);
|
|
67
|
+
this._disposables.push(this._onDisposeError);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @throws if already disposed
|
|
72
|
+
*/
|
|
73
|
+
public assertNotDisposed() {
|
|
74
|
+
if (this._disposed) {
|
|
75
|
+
throw new DuplicateDisposed(this, this._disposed.trace);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* the "DisposableStack"
|
|
81
|
+
*/
|
|
82
|
+
protected readonly _disposables: _Type<Async>[] = [];
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* register a disposable object
|
|
86
|
+
*/
|
|
87
|
+
public _register<T extends _Type<Async>>(d: T): T;
|
|
88
|
+
public _register<T extends _Type<Async> & IDisposableEvents>(d: T, autoDereference?: boolean): T;
|
|
89
|
+
public _register(d: any, autoDereference?: boolean): any {
|
|
90
|
+
if (this._logger.enabled) this._logger(`register ${dispose_name(d)}`);
|
|
91
|
+
this.assertNotDisposed();
|
|
92
|
+
this._disposables.unshift(fromNativeDisposable(d));
|
|
93
|
+
if (autoDereference) {
|
|
94
|
+
(d as IDisposableEvents).onBeforeDispose(() => {
|
|
95
|
+
this._unregister(d);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return d;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
public _unregister(d: _Type<Async>) {
|
|
102
|
+
if (this._logger.enabled) this._logger(`unregister ${dispose_name(d)}`);
|
|
103
|
+
this.assertNotDisposed();
|
|
104
|
+
return this._disposables.splice(this._disposables.indexOf(d), 1).length > 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
protected readonly duplicateDispose: DuplicateDisposeAction = DuplicateDisposeAction.Warning;
|
|
108
|
+
private _disposed?: {
|
|
109
|
+
trace: StackTraceHolder;
|
|
110
|
+
result: _RType<Async>;
|
|
111
|
+
};
|
|
112
|
+
public get disposed() {
|
|
113
|
+
return !!this._disposed;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* @deprecated use disposed
|
|
117
|
+
*/
|
|
118
|
+
public get hasDisposed() {
|
|
119
|
+
return !!this._disposed;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 释放相关资源
|
|
123
|
+
*/
|
|
124
|
+
public dispose(): _RType<Async> {
|
|
125
|
+
if (this._disposed) {
|
|
126
|
+
if (this.duplicateDispose === DuplicateDisposeAction.Allow) return this._disposed.result;
|
|
127
|
+
|
|
128
|
+
const dupErr = new DuplicateDisposed(this, this._disposed.trace);
|
|
129
|
+
if (this.duplicateDispose === DuplicateDisposeAction.Disable) {
|
|
130
|
+
throw dupErr;
|
|
131
|
+
} else {
|
|
132
|
+
console.warn(dupErr);
|
|
133
|
+
return this._disposed.result;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
this._onBeforeDispose.fireNoError();
|
|
137
|
+
|
|
138
|
+
let r: any;
|
|
139
|
+
try {
|
|
140
|
+
r = this._dispose(this._disposables);
|
|
141
|
+
} finally {
|
|
142
|
+
this._disposables.length = 0;
|
|
143
|
+
Object.freeze(this._disposables);
|
|
144
|
+
|
|
145
|
+
this._disposed = {
|
|
146
|
+
trace: createStackTraceHolder('disposed', this.dispose),
|
|
147
|
+
result: r,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (r && 'then' in r) {
|
|
152
|
+
r.then(() => {});
|
|
153
|
+
}
|
|
154
|
+
return r;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
get [Symbol.toStringTag](): string {
|
|
158
|
+
return this.displayName || 'unknown disposable';
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
protected abstract _dispose(disposables: readonly _Type<Async>[]): _RType<Async>;
|
|
162
|
+
}
|
|
@@ -1,102 +1,36 @@
|
|
|
1
|
-
import type { IDisposable } from './
|
|
1
|
+
import type { IDisposable } from './disposable.js';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
export function addAnyKindOfListener(host: IEventEmitterObject | IShorthandEmitterObject, name: string, handler: Function) {
|
|
4
|
+
if ('on' in host) {
|
|
5
|
+
host.on(name, handler);
|
|
6
|
+
} else if ('addListener' in host) {
|
|
7
|
+
host.addListener(name, handler);
|
|
8
|
+
}
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
export interface
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
export interface IShorthandEmitterObject {
|
|
12
|
+
on(type: string, handler: Function): void;
|
|
13
|
+
off(type: string, handler: Function): void;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export interface IEventEmitterObject
|
|
17
|
-
addListener(type: string, handler:
|
|
18
|
-
removeListener(type: string, handler:
|
|
16
|
+
export interface IEventEmitterObject {
|
|
17
|
+
addListener(type: string, handler: Function): void;
|
|
18
|
+
removeListener(type: string, handler: Function): void;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
export function addDisposableEventListener
|
|
22
|
-
|
|
23
|
-
export function addDisposableEventListener<T extends Function>(target: IEventHostObject<T> | IEventEmitterObject<T>, type: string, handler: T): IDisposable;
|
|
24
|
-
|
|
25
|
-
export function addDisposableEventListener<T extends Function>(target: IEventHostObject<T> | IEventEmitterObject<T>, type: string, _options: IEventListenerOptions | T | undefined, _handler?: T): IDisposable {
|
|
26
|
-
if (!_handler) {
|
|
27
|
-
if (typeof _options === 'function') {
|
|
28
|
-
_handler = _options;
|
|
29
|
-
_options = undefined;
|
|
30
|
-
} else {
|
|
31
|
-
throw new Error('missing handler');
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const handler = _handler as T;
|
|
36
|
-
const options = _options as IEventListenerOptions;
|
|
37
|
-
|
|
21
|
+
export function addDisposableEventListener(target: IEventEmitterObject | IShorthandEmitterObject, type: string, handler: Function): IDisposable {
|
|
38
22
|
let remove: IDisposable['dispose'];
|
|
39
23
|
|
|
40
|
-
if ('
|
|
41
|
-
if (passiveSupported === undefined || abortSupported === undefined) {
|
|
42
|
-
checkAllSupport(target);
|
|
43
|
-
}
|
|
44
|
-
const [abort, xOptions] = check(options);
|
|
45
|
-
target.addEventListener(type, handler, xOptions);
|
|
46
|
-
if (abort) {
|
|
47
|
-
remove = () => {
|
|
48
|
-
abort;
|
|
49
|
-
};
|
|
50
|
-
} else {
|
|
51
|
-
remove = () => {
|
|
52
|
-
target.removeEventListener(type, handler, xOptions);
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
} else {
|
|
24
|
+
if ('addListener' in target) {
|
|
56
25
|
target.addListener(type, handler);
|
|
57
26
|
remove = () => {
|
|
58
27
|
target.removeListener(type, handler);
|
|
59
28
|
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
let passiveSupported: boolean;
|
|
65
|
-
let abortSupported: boolean;
|
|
66
|
-
function check(options: IEventListenerOptions = {}): [{ abort(): void } | undefined, IEventListenerOptions] {
|
|
67
|
-
if (!passiveSupported) {
|
|
68
|
-
return [undefined, (options.capture || false) as any];
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (abortSupported) {
|
|
72
|
-
const controller = new AbortController();
|
|
73
|
-
(options as any).signal = controller.signal;
|
|
74
|
-
return [controller, options];
|
|
75
|
-
}
|
|
76
|
-
return [undefined, options];
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function checkAllSupport(ele: IEventHostObject<any>) {
|
|
80
|
-
passiveSupported = checkSupport('passive', ele);
|
|
81
|
-
abortSupported = typeof AbortController !== 'undefined' && checkSupport('signal', ele);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function checkSupport(field: string, ele: IEventHostObject<any>) {
|
|
85
|
-
let supported = false;
|
|
86
|
-
try {
|
|
87
|
-
const options = {
|
|
88
|
-
get [field]() {
|
|
89
|
-
// This function will be called when the browser
|
|
90
|
-
// attempts to access the passive property.
|
|
91
|
-
supported = true;
|
|
92
|
-
return undefined;
|
|
93
|
-
},
|
|
29
|
+
} else {
|
|
30
|
+
target.on(type, handler);
|
|
31
|
+
remove = () => {
|
|
32
|
+
target.off(type, handler);
|
|
94
33
|
};
|
|
95
|
-
|
|
96
|
-
ele.addEventListener('_test_', null, options);
|
|
97
|
-
ele.removeEventListener('_test_', null, options);
|
|
98
|
-
} catch (_err) {
|
|
99
|
-
supported = false;
|
|
100
34
|
}
|
|
101
|
-
return
|
|
35
|
+
return { dispose: remove };
|
|
102
36
|
}
|
|
@@ -1,40 +1,57 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
1
|
+
import { isNodeJs } from '../../autoindex.js';
|
|
2
|
+
import { tryInspect } from '../../debugging/inspect.js';
|
|
3
|
+
import { getErrorFrame } from '../../error/get-frame.js';
|
|
4
|
+
import { prettyFormatError } from '../../error/pretty.nodejs.js';
|
|
5
|
+
import type { StackTraceHolder } from '../../error/stack-trace.js';
|
|
6
|
+
import { dispose_name } from './debug.js';
|
|
7
|
+
|
|
8
|
+
export class Disposed extends Error {
|
|
9
|
+
constructor(
|
|
10
|
+
message = 'Object has been disposed',
|
|
11
|
+
private readonly previous: StackTraceHolder,
|
|
12
|
+
) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = 'DisposedError';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
override get stack() {
|
|
18
|
+
return `${super.stack}\nDisposed at:\n${this.previous.stack}`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
5
21
|
|
|
6
22
|
/**
|
|
7
23
|
* Error when call dispose() twice
|
|
8
24
|
*/
|
|
9
|
-
export class
|
|
25
|
+
export class DuplicateDisposed extends Error {
|
|
10
26
|
public readonly inspectString: string;
|
|
11
27
|
constructor(
|
|
12
28
|
object: any,
|
|
13
|
-
|
|
29
|
+
private readonly previous: StackTraceHolder,
|
|
14
30
|
) {
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
(Error as any).stackTraceLimit = Number.MAX_SAFE_INTEGER;
|
|
31
|
+
const old = Error.stackTraceLimit;
|
|
32
|
+
Error.stackTraceLimit = Number.MAX_SAFE_INTEGER;
|
|
33
|
+
const stacks = getErrorFrame(previous, 2);
|
|
19
34
|
|
|
20
|
-
|
|
35
|
+
const inspectString = tryInspect(object);
|
|
36
|
+
const name = dispose_name(object, inspectString);
|
|
21
37
|
|
|
22
|
-
(
|
|
38
|
+
super(`Object [${name}] has already disposed ${stacks}.`);
|
|
39
|
+
this.name = 'DuplicateDisposedError';
|
|
40
|
+
this.inspectString = inspectString;
|
|
23
41
|
|
|
24
|
-
|
|
25
|
-
this.name = 'Warning';
|
|
42
|
+
Error.stackTraceLimit = old;
|
|
26
43
|
|
|
27
44
|
this.tryCreateConsoleWarning().catch(() => {});
|
|
28
45
|
}
|
|
29
46
|
|
|
30
47
|
public async tryCreateConsoleWarning() {
|
|
31
48
|
console.error('DisposedWarning: duplicate dispose.');
|
|
32
|
-
console.error(' * first dispose:\n
|
|
33
|
-
console.error(' * current dispose:\n
|
|
49
|
+
console.error(' * first dispose:\n ', isNodeJs ? prettyFormatError(this.previous, false) : this.previous);
|
|
50
|
+
console.error(' * current dispose:\n ', isNodeJs ? prettyFormatError(this, false) : this);
|
|
34
51
|
console.error(' * Object: %s', this.inspectString);
|
|
35
52
|
}
|
|
36
|
-
}
|
|
37
53
|
|
|
38
|
-
|
|
39
|
-
|
|
54
|
+
is(other: unknown): other is DuplicateDisposed {
|
|
55
|
+
return other instanceof DuplicateDisposed;
|
|
56
|
+
}
|
|
40
57
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createStackTraceHolder, type StackTraceHolder } from '../../error/stack-trace.js';
|
|
2
|
+
import { dispose_name } from './debug.js';
|
|
3
|
+
import { AbstractEnhancedDisposable, type IDisposable } from './disposable.js';
|
|
4
|
+
import { DuplicateDisposed } from './disposedError.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 简单版手动disposable
|
|
8
|
+
*/
|
|
9
|
+
export abstract class DisposableOnce implements IDisposable {
|
|
10
|
+
private _disposed?: StackTraceHolder;
|
|
11
|
+
|
|
12
|
+
public get hasDisposed() {
|
|
13
|
+
return !!this._disposed;
|
|
14
|
+
}
|
|
15
|
+
public dispose(): void {
|
|
16
|
+
if (this._disposed) {
|
|
17
|
+
console.warn(new DuplicateDisposed(this, this._disposed).message);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
this._disposed = createStackTraceHolder('disposed', this.dispose);
|
|
21
|
+
this._dispose();
|
|
22
|
+
}
|
|
23
|
+
[Symbol.dispose]() {
|
|
24
|
+
this.dispose();
|
|
25
|
+
}
|
|
26
|
+
protected abstract _dispose(): void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* 完整版disposable类
|
|
31
|
+
* 可以继承
|
|
32
|
+
* 也可以直接用(相当于一个DisposableStack)
|
|
33
|
+
*/
|
|
34
|
+
export class EnhancedDisposable extends AbstractEnhancedDisposable<false> implements IDisposable {
|
|
35
|
+
protected override _dispose(disposables: readonly IDisposable[]): void {
|
|
36
|
+
for (const item of disposables.values()) {
|
|
37
|
+
try {
|
|
38
|
+
if (this._logger.enabled) this._logger(`dispose ${dispose_name(item)}`);
|
|
39
|
+
item.dispose();
|
|
40
|
+
} catch (e) {
|
|
41
|
+
if (e instanceof Error) {
|
|
42
|
+
this._onDisposeError.fire(e);
|
|
43
|
+
} else {
|
|
44
|
+
console.error('error during dispose, throw:', e);
|
|
45
|
+
this._onDisposeError.fire(new Error(`${e}`));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/// compitable with stack
|
|
52
|
+
public [Symbol.dispose] = this.dispose;
|
|
53
|
+
}
|
|
@@ -1,116 +1,100 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
(callback: EventHandler<T>): IDisposable;
|
|
9
|
-
once(callback: EventHandler<T>): IDisposable;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
type DeferFn = () => void;
|
|
1
|
+
import { Exit } from '@idlebox/errors';
|
|
2
|
+
import { nameObject, objectName } from '../../debugging/object-with-name.js';
|
|
3
|
+
import { createStackTraceHolder } from '../../error/stack-trace.js';
|
|
4
|
+
import { functionToDisposable } from '../dispose/bridges/function.js';
|
|
5
|
+
import { DuplicateDisposed } from '../dispose/disposedError.js';
|
|
6
|
+
import type { IDisposable } from '../dispose/disposable.js';
|
|
7
|
+
import type { EventHandler, EventRegister, IEventEmitter } from './type.js';
|
|
13
8
|
|
|
14
9
|
/**
|
|
15
|
-
* 事件注册对象
|
|
16
10
|
* @public
|
|
17
11
|
*/
|
|
18
|
-
export class Emitter<T> implements
|
|
19
|
-
protected
|
|
12
|
+
export class Emitter<T = unknown> implements IEventEmitter<T> {
|
|
13
|
+
protected _callbacks?: (EventHandler<T> | undefined)[];
|
|
20
14
|
private executing = false;
|
|
15
|
+
private _something_change_during_call = false;
|
|
21
16
|
|
|
22
17
|
constructor(public readonly displayName?: string) {}
|
|
23
18
|
|
|
24
|
-
/**
|
|
25
|
-
* @returns 当前注册回调数量
|
|
26
|
-
*/
|
|
27
19
|
public listenerCount() {
|
|
28
|
-
return this._callbacks
|
|
20
|
+
return this._callbacks?.length ?? 0;
|
|
29
21
|
}
|
|
30
22
|
|
|
31
|
-
/**
|
|
32
|
-
* 触发本事件
|
|
33
|
-
* @param data 回调数据
|
|
34
|
-
*/
|
|
35
23
|
public fire(data: T) {
|
|
36
24
|
this.requireNotExecuting();
|
|
25
|
+
if (!this._callbacks) return;
|
|
26
|
+
|
|
37
27
|
this.executing = true;
|
|
38
28
|
try {
|
|
39
29
|
for (const callback of this._callbacks) {
|
|
40
|
-
callback(data);
|
|
30
|
+
callback?.(data);
|
|
41
31
|
}
|
|
42
32
|
} finally {
|
|
43
|
-
this.doDefer();
|
|
44
33
|
this.executing = false;
|
|
34
|
+
if (this._something_change_during_call) {
|
|
35
|
+
this.checkDeleted();
|
|
36
|
+
}
|
|
45
37
|
}
|
|
46
38
|
}
|
|
47
39
|
|
|
48
|
-
/**
|
|
49
|
-
* 与 `fire()`相同,但是忽略任何错误,并且即便出错也继续执行全部callback
|
|
50
|
-
*/
|
|
51
40
|
public fireNoError(data: T) {
|
|
52
41
|
this.requireNotExecuting();
|
|
42
|
+
if (!this._callbacks) return;
|
|
43
|
+
|
|
53
44
|
this.executing = true;
|
|
54
45
|
for (const callback of this._callbacks) {
|
|
55
46
|
try {
|
|
56
|
-
callback(data);
|
|
47
|
+
callback?.(data);
|
|
57
48
|
} catch (e) {
|
|
58
|
-
if (e instanceof
|
|
59
|
-
|
|
49
|
+
if (e instanceof Exit) {
|
|
50
|
+
break;
|
|
60
51
|
}
|
|
61
52
|
console.error('Emitter.fireNoError: error ignored: %s', e instanceof Error ? e.stack : e);
|
|
62
53
|
}
|
|
63
54
|
}
|
|
64
|
-
this.doDefer();
|
|
65
55
|
this.executing = false;
|
|
56
|
+
if (this._something_change_during_call) {
|
|
57
|
+
this.checkDeleted();
|
|
58
|
+
}
|
|
66
59
|
}
|
|
67
60
|
|
|
68
61
|
get register(): EventRegister<T> {
|
|
69
62
|
return Object.assign(this.handle.bind(this), {
|
|
70
63
|
once: this.once.bind(this),
|
|
64
|
+
wait: this.wait.bind(this),
|
|
71
65
|
});
|
|
72
66
|
}
|
|
73
67
|
|
|
74
|
-
/**
|
|
75
|
-
* AI喜欢用event()
|
|
76
|
-
* @alias register
|
|
77
|
-
*/
|
|
78
68
|
get event(): EventRegister<T> {
|
|
79
69
|
return this.register;
|
|
80
70
|
}
|
|
81
71
|
|
|
82
72
|
/**
|
|
83
|
-
*
|
|
84
|
-
* @param callback 回调函数
|
|
73
|
+
* 添加监听器
|
|
85
74
|
*/
|
|
86
75
|
handle(callback: EventHandler<T>): IDisposable {
|
|
87
76
|
this.requireNotExecuting();
|
|
88
|
-
let disposed = false;
|
|
89
|
-
this._callbacks.unshift((e) => {
|
|
90
|
-
if (!disposed) callback(e);
|
|
91
|
-
});
|
|
92
|
-
const realDispose = () => {
|
|
93
|
-
const index = this._callbacks.indexOf(callback);
|
|
94
|
-
if (index !== -1) {
|
|
95
|
-
this._callbacks.splice(index, 1);
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const dispose = () => {
|
|
100
|
-
disposed = true;
|
|
101
|
-
if (this.executing) {
|
|
102
|
-
this.defer(realDispose);
|
|
103
|
-
} else {
|
|
104
|
-
realDispose();
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
77
|
|
|
108
|
-
|
|
78
|
+
if (!this._callbacks) this._callbacks = [];
|
|
79
|
+
|
|
80
|
+
const callbacks = this._callbacks;
|
|
81
|
+
callbacks.unshift(callback);
|
|
82
|
+
|
|
83
|
+
return functionToDisposable(
|
|
84
|
+
nameObject(`removeListener(${objectName(callback)})`, () => {
|
|
85
|
+
const index = callbacks.indexOf(callback);
|
|
86
|
+
if (index === -1) return;
|
|
87
|
+
if (this.executing) {
|
|
88
|
+
callbacks[index] = undefined;
|
|
89
|
+
} else {
|
|
90
|
+
callbacks.splice(index, 1);
|
|
91
|
+
}
|
|
92
|
+
}),
|
|
93
|
+
);
|
|
109
94
|
}
|
|
110
95
|
|
|
111
96
|
/**
|
|
112
|
-
*
|
|
113
|
-
* @param callback 回调函数
|
|
97
|
+
* 添加一次性监听器
|
|
114
98
|
*/
|
|
115
99
|
once(callback: EventHandler<T>): IDisposable {
|
|
116
100
|
this.requireNotExecuting();
|
|
@@ -121,19 +105,28 @@ export class Emitter<T> implements IDisposable {
|
|
|
121
105
|
return disposable;
|
|
122
106
|
}
|
|
123
107
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
108
|
+
/**
|
|
109
|
+
* 创建一个等待下次触发的promise
|
|
110
|
+
*/
|
|
111
|
+
private _waittings?: Set<Function>;
|
|
112
|
+
wait(): Promise<T> {
|
|
113
|
+
return new Promise((resolve, reject) => {
|
|
114
|
+
if (!this._waittings) this._waittings = new Set<Function>();
|
|
115
|
+
this._waittings.add(reject);
|
|
116
|
+
this.once((data) => {
|
|
117
|
+
resolve(data);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
133
120
|
}
|
|
134
121
|
|
|
135
|
-
|
|
136
|
-
this.
|
|
122
|
+
private checkDeleted() {
|
|
123
|
+
if (!this._callbacks) return;
|
|
124
|
+
|
|
125
|
+
for (let i = this._callbacks.length - 1; i >= 0; i--) {
|
|
126
|
+
if (this._callbacks[i] === undefined) {
|
|
127
|
+
this._callbacks.splice(i, 1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
137
130
|
}
|
|
138
131
|
|
|
139
132
|
private _disposed = false;
|
|
@@ -141,22 +134,36 @@ export class Emitter<T> implements IDisposable {
|
|
|
141
134
|
return this._disposed;
|
|
142
135
|
}
|
|
143
136
|
|
|
137
|
+
/**
|
|
138
|
+
* 运行过程中可以dispose,本次运行仍然会继续到最后
|
|
139
|
+
* 但立即不能再次调用类似handle的方法
|
|
140
|
+
*/
|
|
144
141
|
dispose() {
|
|
145
142
|
if (this._disposed) return;
|
|
146
143
|
this._disposed = true;
|
|
147
|
-
this.requireNotExecuting();
|
|
148
|
-
this._callbacks.length = 0;
|
|
149
144
|
|
|
150
|
-
|
|
145
|
+
this._callbacks = undefined;
|
|
146
|
+
|
|
147
|
+
if (this._waittings) {
|
|
148
|
+
for (const rej of this._waittings) {
|
|
149
|
+
rej(new Error('disposed'));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
this._waittings = undefined;
|
|
151
154
|
|
|
152
|
-
|
|
155
|
+
const trace = createStackTraceHolder('disposed');
|
|
156
|
+
this.requireNotExecuting =
|
|
157
|
+
this.fireNoError =
|
|
153
158
|
this.fire =
|
|
154
159
|
this.handle =
|
|
155
160
|
() => {
|
|
156
|
-
throw new
|
|
161
|
+
throw new DuplicateDisposed(this, trace);
|
|
157
162
|
};
|
|
158
163
|
}
|
|
159
164
|
|
|
165
|
+
readonly [Symbol.dispose] = this.dispose;
|
|
166
|
+
|
|
160
167
|
private requireNotExecuting() {
|
|
161
168
|
if (this.executing) {
|
|
162
169
|
throw new Error('conflict state, emitter is firing');
|