@zk-tech/bedrock 0.0.2 → 0.1.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/_internal/logger.ts","../../src/dispose/logger.ts","../../src/dispose/dispose-base.ts","../../src/dispose/tracker.ts","../../src/dispose/disposable-store.ts","../../src/dispose/disposable-t.ts","../../src/dispose/disposable-utils.ts","../../src/structure/linked-list.ts","../../src/event/disposable-linked-list.ts","../../src/event/error-handler.ts","../../src/event/emitter.ts","../../src/async/cancellation.ts","../../src/async/wait.ts","../../src/async/barrier.ts","../../src/error/error-t.ts","../../src/async/queue/task.ts","../../src/async/queue/queue.ts","../../src/async/utils.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/* eslint-disable no-console */\n\nexport const Logger = {\n error(...data: any[]): void {\n if (typeof console.error === 'function') {\n console.error(...data);\n }\n },\n info(...data: any[]): void {\n if (typeof console.info === 'function') {\n console.info(...data);\n }\n },\n log(...data: any[]): void {\n if (typeof console.log === 'function') {\n console.log(...data);\n }\n },\n time(label?: string): void {\n if (typeof console.time === 'function') {\n console.time(label);\n }\n },\n timeEnd(label?: string): void {\n if (typeof console.timeEnd === 'function') {\n console.timeEnd(label);\n }\n },\n timeLog(label?: string, ...data: any[]): void {\n if (typeof console.timeLog === 'function') {\n console.timeLog(label, ...data);\n }\n },\n timeStamp(label?: string): void {\n if (typeof console.timeStamp === 'function') {\n console.timeStamp(label);\n }\n },\n trace(...data: any[]): void {\n if (typeof console.trace === 'function') {\n console.trace(...data);\n }\n },\n warn(...data: any[]): void {\n if (typeof console.warn === 'function') {\n console.warn(...data);\n }\n },\n profile(label?: string): void {\n if (typeof console.profile === 'function') {\n console.profile(label);\n }\n },\n profileEnd(label?: string): void {\n if (typeof console.profileEnd === 'function') {\n console.profileEnd(label);\n }\n },\n};\n","import { Logger } from '@/_internal/logger';\nimport type { IDisposable } from './dispose-base';\n\nlet disposableLogger: IDisposableLogger | null = null;\n\nexport interface IDisposableLogger {\n branch: (from: string, to: string) => void;\n end: () => void;\n}\n\nfunction setDisposableLogger(logger: IDisposableLogger | null): void {\n disposableLogger = logger;\n}\n\nfunction makeDefaultLogger() {\n return new (class implements IDisposableLogger {\n private readonly _dep: [string, string][] = [];\n\n branch(from: string, to: string): void {\n this._dep.push([from, to]);\n }\n\n end(): void {\n Logger.log(this._dep);\n }\n })();\n}\n\n// 辅助能力 dispose触发时记录\nexport function BRANCH_DISPOSE(from: string, to: string) {\n disposableLogger?.branch(from, to);\n}\n\nexport function disposeWithLog<T extends IDisposable>(x: T, logger: IDisposableLogger = makeDefaultLogger()) {\n setDisposableLogger(logger);\n x.dispose();\n logger.end();\n setDisposableLogger(null);\n}\n","//\n// Disposable特征约束\n//\nexport interface IDisposable {\n dispose: () => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const EmptyDispose = Object.freeze<IDisposable>({ dispose() {} });\n","import { Logger } from '@/_internal/logger';\nimport type { IDisposable } from './dispose-base';\nimport { EmptyDispose } from './dispose-base';\n\nexport interface IDisposableTracker {\n trackDisposable: (disposable: IDisposable) => void;\n\n setParent: (child: IDisposable, parent: IDisposable | null) => void;\n\n markAsDisposed: (disposable: IDisposable) => void;\n\n markAsLeaked: (disposable: IDisposable) => void;\n}\n\nlet disposableTracker: IDisposableTracker | null = null;\n\nfunction makeDefaultTracker() {\n // reactHooks useEffect中出现disposable,我们默认为不会泄漏\n // 默认使用者一定会在useEffect的返回值中进行dispose\n const ignorePattern = /commitHookEffectList/i;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const __is_disposable_tracked__ = '__is_disposable_tracked__';\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const __is_leak_marked__ = '__is_leak_marked__';\n return new (class implements IDisposableTracker {\n trackDisposable(x: IDisposable): void {\n const stack = new Error('Potentially leaked disposable').stack!;\n setTimeout(() => {\n if (stack.match(ignorePattern)) {\n return;\n }\n if ((x as any)[__is_leak_marked__]) {\n return;\n }\n if (!(x as any)[__is_disposable_tracked__]) {\n Logger.log(stack);\n }\n }, 3000);\n }\n\n setParent(child: IDisposable, parent: IDisposable | null): void {\n if (child && child !== EmptyDispose) {\n try {\n (child as any)[__is_disposable_tracked__] = true;\n } catch {\n // noop\n }\n }\n }\n\n markAsDisposed(disposable: IDisposable): void {\n if (disposable && disposable !== EmptyDispose) {\n try {\n (disposable as any)[__is_disposable_tracked__] = true;\n } catch {\n // noop\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n markAsLeaked(disposable: IDisposable): void {\n if (disposable && disposable !== EmptyDispose) {\n try {\n (disposable as any)[__is_leak_marked__] = true;\n } catch {\n // noop\n }\n }\n }\n })();\n}\n\nfunction setDisposableTracker(tracker: IDisposableTracker | null): void {\n disposableTracker = tracker;\n}\n\nexport function enableTrack(tracker: IDisposableTracker = makeDefaultTracker()) {\n setDisposableTracker(tracker);\n}\n\nexport function disableTrack() {\n setDisposableTracker(null);\n}\n\n// 辅助能力 跟踪disposable\nexport function TRACK_DISPOSABLE<T extends IDisposable>(x: T): T {\n disposableTracker?.trackDisposable(x);\n return x;\n}\n\n// 辅助能力 标记disposable成功\nexport function MARK_AS_DISPOSED<T extends IDisposable>(x: T): void {\n disposableTracker?.markAsDisposed(x);\n}\n\n// 辅助能力 标记disposable关系\nexport function SET_PARENT_OF_DISPOSABLE(child: IDisposable, parent: IDisposable | null): void {\n disposableTracker?.setParent(child, parent);\n}\n\n// 辅助能力 主动标记泄漏\nexport function MARK_AS_LEAKED<T extends IDisposable>(x: T) {\n disposableTracker?.markAsLeaked(x);\n}\n","import { Logger } from '@/_internal/logger';\nimport type { IDisposable } from './dispose-base';\nimport { BRANCH_DISPOSE } from './logger';\nimport { MARK_AS_DISPOSED, SET_PARENT_OF_DISPOSABLE, TRACK_DISPOSABLE } from './tracker';\n\nexport class DisposableStore implements IDisposable {\n static DISABLE_DISPOSED_WARNING = false;\n\n private readonly _toDispose = new Set<IDisposable>();\n private _isDisposed = false;\n\n constructor() {\n TRACK_DISPOSABLE(this);\n }\n\n get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n dispose(): void {\n if (this._isDisposed) {\n // 不应该出现重复dispose\n Logger.warn(new Error('DisposableStore has disposed.').stack);\n return;\n }\n\n MARK_AS_DISPOSED(this);\n this._isDisposed = true;\n this.clear();\n }\n\n clear(): void {\n if (this._toDispose.size === 0) {\n return;\n }\n\n for (const disposable of this._toDispose) {\n BRANCH_DISPOSE(this.constructor.name, disposable.constructor.name);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const errors: any[] = [];\n for (const disposable of this._toDispose) {\n try {\n disposable.dispose();\n } catch (e) {\n errors.push(e);\n }\n }\n\n this._toDispose.clear();\n if (errors.length > 0) {\n throw new AggregateError(errors, 'find error when dispose store.');\n }\n }\n\n add<T extends IDisposable>(o: T): T {\n if (!o) {\n return o;\n }\n if ((o as unknown as DisposableStore) === this) {\n throw new Error('Cannot register a disposable on itself.');\n }\n\n SET_PARENT_OF_DISPOSABLE(o, this);\n if (this._isDisposed) {\n if (!DisposableStore.DISABLE_DISPOSED_WARNING) {\n Logger.warn(\n new Error(\n 'Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!',\n ).stack,\n );\n }\n } else {\n this._toDispose.add(o);\n }\n\n return o;\n }\n}\n","import { Logger } from '@/_internal/logger';\nimport { lvAssertNotNil } from '@/assert';\nimport { DisposableStore } from './disposable-store';\nimport type { IDisposable } from './dispose-base';\nimport { BRANCH_DISPOSE } from './logger';\nimport { MARK_AS_DISPOSED, SET_PARENT_OF_DISPOSABLE, TRACK_DISPOSABLE } from './tracker';\n\n//\n// Disposable基类\n//\n// 自动添加DisposableStore,提供默认的dispose和register方法\n//\nexport abstract class Disposable implements IDisposable {\n protected readonly _store = new DisposableStore();\n\n constructor() {\n TRACK_DISPOSABLE(this);\n SET_PARENT_OF_DISPOSABLE(this._store, this);\n }\n\n // 销毁该节点和所有的子节点\n dispose(): void {\n MARK_AS_DISPOSED(this);\n BRANCH_DISPOSE(this.constructor.name, this._store.constructor.name);\n\n this._store.dispose();\n }\n\n // 挂载子节点\n protected _register<T extends IDisposable>(o: T): T {\n if ((o as unknown as Disposable) === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n return this._store.add(o);\n }\n}\n\n/**\n * 容器类\n * 提供一个容器,容器内部的IDisposable对象可以切换更新,每次更新的时候,旧的IDisposable对象会自动进行dispose\n *\n * 使用方式:\n * class Foo {\n * private readonly _barRef: MutableDisposable;\n *\n * toggle() {\n * this._barRef.setValue(new Bar());\n * }\n *\n * doSomething() {\n * this._barRef.value.xxx();\n * }\n * }\n */\nexport class MutableDisposable<T extends IDisposable> implements IDisposable {\n private _value?: T;\n private _isDisposed = false;\n\n constructor(value?: T) {\n TRACK_DISPOSABLE(this);\n this.value = value;\n }\n\n get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n\n this._value?.dispose();\n if (value) {\n SET_PARENT_OF_DISPOSABLE(value, this);\n }\n this._value = value;\n }\n\n clear(): void {\n this.value = undefined;\n }\n\n dispose(): void {\n this._isDisposed = true;\n MARK_AS_DISPOSED(this);\n this._value?.dispose();\n this._value = undefined;\n }\n\n release(): T | undefined {\n const oldValue = this._value;\n this._value = undefined;\n if (oldValue) {\n SET_PARENT_OF_DISPOSABLE(oldValue, null);\n }\n return oldValue;\n }\n}\n\n/**\n * 容器类\n * 通过该容器进行dispose试,可以保证内部的IDisposable一会进行一次dispose\n * 本质是一种防御性质的处理,如果需要使用时,最好有明确的理由\n */\nexport class SafeDisposable<T extends IDisposable> implements IDisposable {\n private _value?: T;\n\n constructor(value: T) {\n this._value = value;\n TRACK_DISPOSABLE(this);\n }\n\n get value(): T | undefined {\n return this._value;\n }\n\n isEmpty() {\n return this._value === undefined;\n }\n\n dispose() {\n if (!this._value) {\n return;\n }\n this._value.dispose();\n this._value = undefined;\n MARK_AS_DISPOSED(this);\n }\n}\n\n/**\n * 容器类\n * 引用计数容器,当引用为0时自动执行dispose\n * 注意:初始计数为1,默认构造的地方自动获得引用,如果在栈上构造,记得最后调用release\n *\n * 使用实例:\n * class Foo {\n * private _bar: RefCountedDisposable = new RefCountedDisposable(new Bar());\n *\n * getBar() {\n * this._bar.acquire();\n * return this._bar;\n * }\n * }\n *\n * // 如果在栈上构造\n * const bar = new RefCountedDisposable(new Bar());\n * makeFoo(bar);\n * makeFoo(bar);\n * bar.release();\n */\nexport class RefCountedDisposable<T extends IDisposable> implements IDisposable {\n private _counter: number = 1;\n private _value?: T;\n\n constructor(value: T) {\n this._value = value;\n TRACK_DISPOSABLE(this);\n }\n\n get value(): T | undefined {\n return this._value;\n }\n\n acquire() {\n if (!this._value) {\n return this;\n }\n this._counter++;\n return this;\n }\n\n release() {\n if (--this._counter === 0) {\n this._value!.dispose();\n this._value = undefined;\n MARK_AS_DISPOSED(this);\n }\n return this;\n }\n\n dispose() {\n this.release();\n }\n}\n\n/**\n * 容器类,表示了一个T生命周期的转移\n *\n * 由于js引用传递的特性,正常情况下,我们默认为传递过来的对象不具备dispose权利\n * class Foo extends Disposable {\n * private readonly _bar = new Bar();\n *\n * constructor(\n * thirdparty: Thirdparty,\n * ) {\n * this._register(this._bar); // class内部构造的,具备dispose权利\n * this._register(thirdparty); // ❌,很少会直接这么写,除非能很确定存在生命周期转移\n * }\n *\n * constructor(\n * thirdparty: TransferDisposable<Thirdparty>, // ✅,明确表示了我依赖了Thirdparty,但是该对象生命周期要归我所有\n * ) {\n * this._register(this._bar);\n * this._register(thirdparty.release()); // ✅,可以直接register\n * }\n * }\n *\n * 注意:\n * 不同于C++中的unique_ptr,该class只作用于转移场景。\n * 所以class理论上只在栈上出现,不应该在堆上存在。\n * 如果出现了需要在堆上存储的场景,可以联系架构侧\n */\nexport class TransferDisposable<T extends IDisposable> extends Disposable {\n private _val?: T;\n\n constructor(val: T) {\n super();\n\n this._val = val;\n }\n\n release() {\n // 只能release一次\n lvAssertNotNil(this._val);\n const v = this._val;\n this._val = undefined;\n return v;\n }\n\n dispose(): void {\n // 虽然它有dispose,但是不应该被执行,应该直接被gc才对\n Logger.warn(new Error('TransferDisposable call dispose.'));\n this._val?.dispose();\n super.dispose();\n }\n}\n","import { SafeDisposable, TransferDisposable } from './disposable-t';\nimport { EmptyDispose, type IDisposable } from './dispose-base';\nimport { MARK_AS_LEAKED } from './tracker';\n\nexport function makeSafeDisposable(fn: (...args: any) => any) {\n const disposable = new SafeDisposable({\n dispose: fn,\n });\n return disposable;\n}\n\nexport function makeEmptyDisposable() {\n return EmptyDispose;\n}\n\n// 忽略dispose\nexport function ignoreDispose(x: IDisposable) {\n MARK_AS_LEAKED(x);\n}\n\n// 判断一个thing是否是disposable\nexport function isDisposable<E = any>(thing: E): thing is E & IDisposable {\n return typeof (thing as IDisposable).dispose === 'function' && (thing as IDisposable).dispose.length === 0;\n}\n\nexport function makeTransferDisposable<T extends IDisposable>(val: T) {\n return new TransferDisposable(val);\n}\n","class ListNode<T> {\n constructor(\n public value: T,\n public next: ListNode<T> | null = null,\n public prev: ListNode<T> | null = null,\n ) {}\n}\n\nexport class LinkedList<T> {\n protected _head: ListNode<T> | null = null;\n protected _tail: ListNode<T> | null = null;\n protected _count = 0;\n\n public get size(): number {\n return this._count;\n }\n\n public get firstNode(): ListNode<T> | null {\n return this._head;\n }\n\n public isEmpty(): boolean {\n return this._head === null;\n }\n\n public clear(): void {\n let current = this._head;\n while (current !== null) {\n const next = current.next;\n current.prev = null;\n current.next = null;\n current = next;\n }\n\n this._head = null;\n this._tail = null;\n this._count = 0;\n }\n\n public unshift(value: T): LinkedList<T> {\n const node = new ListNode(value);\n\n if (this.isEmpty()) {\n this._head = node;\n this._tail = node;\n } else {\n const oldHead = this._head;\n this._head = node;\n node.next = oldHead;\n oldHead!.prev = node;\n }\n\n this._count++;\n return this;\n }\n\n public push(value: T): LinkedList<T> {\n const node = new ListNode(value);\n\n if (this.isEmpty()) {\n this._head = node;\n this._tail = node;\n } else {\n const oldTail = this._tail;\n this._tail = node;\n node.prev = oldTail;\n oldTail!.next = node;\n }\n\n this._count++;\n return this;\n }\n\n public shift(): T | null {\n if (this.isEmpty()) {\n return null;\n }\n\n const node = this._head!;\n const value = node.value;\n this._remove(node);\n return value;\n }\n\n public pop(): T | null {\n if (this.isEmpty()) {\n return null;\n }\n\n const node = this._tail!;\n const value = node.value;\n this._remove(node);\n return value;\n }\n\n public toArray(): T[] {\n const result: T[] = [];\n for (const value of this) {\n result.push(value);\n }\n return result;\n }\n\n public *[Symbol.iterator](): Iterator<T> {\n let current = this._head;\n while (current !== null) {\n yield current.value;\n current = current.next;\n }\n }\n\n protected _remove(node: ListNode<T>): void {\n // 如果节点已经被移除(prev 和 next 都为 null),直接返回\n if (node.prev === null && node.next === null && node !== this._head && node !== this._tail) {\n return;\n }\n\n // 更新链表头尾指针\n if (node === this._head) {\n this._head = node.next;\n if (this._head) {\n this._head.prev = null;\n }\n }\n if (node === this._tail) {\n this._tail = node.prev;\n if (this._tail) {\n this._tail.next = null;\n }\n }\n\n // 更新相邻节点的引用\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n\n // 清理被移除节点的引用\n node.prev = null;\n node.next = null;\n this._count--;\n }\n}\n","import { LinkedList } from '@/structure/linked-list';\n\nexport class DisposableLinkedList<T> extends LinkedList<T> {\n unshiftAndGetDisposableNode(value: T): () => void {\n this.unshift(value);\n\n const node = this._head!;\n let hasRemoved = false;\n return (): void => {\n if (!hasRemoved) {\n hasRemoved = true;\n super._remove(node);\n }\n };\n }\n\n pushAndGetDisposableNode(value: T): () => void {\n this.push(value);\n\n const node = this._tail!;\n let hasRemoved = false;\n return (): void => {\n if (!hasRemoved) {\n hasRemoved = true;\n super._remove(node);\n }\n };\n }\n}\n","/**\n * 针对未捕获的错误,异步抛出,不阻塞事件响应主流程\n * 默认模式\n */\nexport function asyncUnexpectedError(e: any): void {\n setTimeout(() => {\n throw e;\n }, 0);\n}\n\n/**\n * 针对未捕获的错误,同步抛出,阻塞事件响应主流程\n */\nexport function syncUnexpectedError(e: any): void {\n throw e;\n}\n\n/**\n * 针对未捕获的错误,静默掉,不进行处理\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function ignoreUnexpectedError(e: any): void {}\n","import { makeSafeDisposable } from '@/dispose';\nimport type { IDisposable } from '@/dispose';\nimport { DisposableLinkedList } from './disposable-linked-list';\nimport { asyncUnexpectedError } from './error-handler';\n\nexport interface EmitterOptions {\n onAddListener?: (...args: any) => any;\n onRemoveListener?: (...args: any) => any;\n onListenerError?: (e: any) => void;\n}\n\n//\n// 事件监听中的回调实体\n//\nclass Listener<TArgs extends any[]> {\n private readonly _callback: (...args: TArgs) => void;\n private readonly _callbackThis: any | undefined;\n\n constructor(callback: (...args: TArgs) => void, callbackThis: any | undefined) {\n this._callback = callback;\n this._callbackThis = callbackThis;\n }\n\n invoke(...args: TArgs): void {\n this._callback.call(this._callbackThis, ...args);\n }\n}\n\n//\n// 存放在EventDeliveryQueue中的元素\n//\nclass EventDeliveryQueueElement<TArgs extends any[]> {\n readonly emitter: Emitter<TArgs>;\n readonly listener: Listener<TArgs>;\n readonly event: TArgs;\n constructor(emitter: Emitter<TArgs>, listener: Listener<TArgs>, event: TArgs) {\n this.emitter = emitter;\n this.listener = listener;\n this.event = event;\n }\n}\n\nexport class EventDeliveryQueue {\n protected _queue = new DisposableLinkedList<EventDeliveryQueueElement<any>>();\n\n constructor(private readonly _onListenerError: (e: unknown) => void = asyncUnexpectedError) {}\n\n get size(): number {\n return this._queue.size;\n }\n\n push<TArgs extends any[]>(emitter: Emitter<TArgs>, listener: Listener<TArgs>, event: TArgs): void {\n this._queue.push(new EventDeliveryQueueElement(emitter, listener, event));\n }\n\n clear<TArgs extends any[]>(emitter: Emitter<TArgs>): void {\n const newQueue = new DisposableLinkedList<EventDeliveryQueueElement<TArgs>>();\n for (const element of this._queue) {\n if (element.emitter !== emitter) {\n newQueue.push(element);\n }\n }\n this._queue = newQueue;\n }\n\n deliver(): void {\n while (this._queue.size > 0) {\n const element = this._queue.shift()!;\n try {\n element.listener.invoke(...element.event);\n } catch (e) {\n this._onListenerError(e);\n }\n }\n }\n}\n\nexport interface Event<T extends any[]> {\n (listener: (...args: T) => any, thisArgs?: any): IDisposable;\n}\n\nexport class Emitter<TArgs extends any[]> {\n protected _listeners?: DisposableLinkedList<Listener<TArgs>>;\n private readonly _options?: EmitterOptions;\n private _disposed = false;\n private _event?: Event<TArgs>;\n private _deliveryQueue?: EventDeliveryQueue;\n\n constructor(options?: EmitterOptions) {\n this._options = options;\n }\n\n get event(): Event<TArgs> {\n if (this._event) {\n return this._event;\n }\n\n this._event = (callback: (...args: TArgs) => any, thisArgs?: any): IDisposable => {\n const listener = new Listener(callback, thisArgs);\n\n if (!this._listeners) {\n this._listeners = new DisposableLinkedList();\n }\n\n const removeListener = this._listeners.pushAndGetDisposableNode(listener);\n\n if (this._options?.onAddListener) {\n this._options.onAddListener(this, callback, thisArgs);\n }\n\n // 生成可销毁函数返回\n const result = () => {\n if (!this._disposed) {\n removeListener();\n if (this._options?.onRemoveListener) {\n this._options.onRemoveListener(this, callback, thisArgs);\n }\n }\n };\n\n return makeSafeDisposable(result);\n };\n\n return this._event;\n }\n\n dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners?.clear();\n this._deliveryQueue?.clear(this);\n }\n\n fire(...event: TArgs): void {\n if (!this._listeners || this._listeners.size === 0) {\n return;\n }\n // 绝大部分场景事件只会有一个监听器,针对性进行性能优化,没必要构造DeliveryQueue结构\n if (this._listeners.size === 1) {\n const listener = this._listeners.firstNode!;\n try {\n listener.value.invoke(...event);\n } catch (e) {\n if (this._options?.onListenerError) {\n this._options.onListenerError(e);\n } else {\n asyncUnexpectedError(e);\n }\n }\n return;\n }\n\n this._deliveryQueue ??= new EventDeliveryQueue(this._options?.onListenerError);\n\n for (const listener of this._listeners) {\n this._deliveryQueue.push(this, listener, event);\n }\n this._deliveryQueue.deliver();\n }\n}\n","import { EmptyDispose, type IDisposable } from '@/dispose';\nimport type { Event } from '@/event';\nimport { Emitter } from '@/event';\n\n//\n// 任何可取消的异步调用 的令牌接口\n// 因为异步调用无法真正意义上取消,但是可以在异步任务的回调中增加该令牌作为参数\n// 以便在操作被取消时停止执行\n//\nexport interface ICancellationToken {\n // 标记是否进行过了cancel\n readonly isCancellationRequested: boolean;\n\n // 取消的原因\n readonly reason?: string;\n\n // 令牌调用cancel后触发的回调\n // 有如下特点\n // 1. 只会触发一次\n // 2. 当监听的时候token已经cancelled,仍然会触发一次\n readonly onCancellationRequested: (\n listener: () => any,\n thisArgs?: any,\n disposables?: IDisposable[],\n ) => IDisposable;\n}\n\n//\n// 编译时常量,一个快捷的事件响应\n// 用于当外界监听令牌取消时,直接触发回调\n//\nconst shortcutEvent: Event<[]> = Object.freeze(function (callback, context?): IDisposable {\n const handle = setTimeout(callback.bind(context), 0);\n\n return {\n dispose() {\n clearTimeout(handle);\n },\n };\n});\n\n//\n// 可取消异步调用的令牌实现\n// 默认是未取消状态,可以调用cancel进行取消\n//\nclass MutableToken implements ICancellationToken, IDisposable {\n // 是否已经取消该异步调用\n private _isCancelled = false;\n private _emitter: Emitter<[]> | null = null;\n private _reason?: string;\n\n public get reason(): undefined | string {\n return this._reason;\n }\n\n // 获取当前是否已经取消该异步调用\n public get isCancellationRequested(): boolean {\n return this._isCancelled;\n }\n\n // 外界可以监听异步取消发起\n public get onCancellationRequested(): Event<[]> {\n if (this._isCancelled) {\n return shortcutEvent;\n }\n if (!this._emitter) {\n this._emitter = new Emitter<[]>();\n }\n return this._emitter.event;\n }\n\n public cancel(reason?: string) {\n if (!this._isCancelled) {\n this._reason = reason;\n this._isCancelled = true;\n if (this._emitter) {\n this._emitter.fire();\n this.dispose();\n }\n }\n }\n\n public dispose(): void {\n if (this._emitter) {\n this._emitter.dispose();\n this._emitter = null;\n }\n }\n}\n\n//\n// 编译期提供的一些常量Token\n// 不可修改\n//\n// eslint-disable-next-line unicorn/no-static-only-class, @typescript-eslint/no-extraneous-class\nexport class CancellationToken {\n static None = Object.freeze<ICancellationToken>({\n isCancellationRequested: false,\n onCancellationRequested: () => EmptyDispose,\n });\n\n static Cancelled = Object.freeze<ICancellationToken>({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent,\n });\n\n static Make = (reason: string) => {\n return Object.freeze<ICancellationToken>({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent,\n reason,\n });\n };\n}\n\n//\n// 任何可取消的异步调用 的控制类\n// 参考ICancellationToken,我们通过在异步调用的回调中添加token参数来判断异步调用的状态\n// token来源于CancellationTokenSource\n// CancellationTokenSource也会暴露cancel的接口\n//\n// 使用方式\n// const tokenSource = new CancellationTokenSource();\n//\n// asyncCall(() => {\n// if (token.isCancellationRequested) { return; } // 如果cancelled\n// doSomething();\n// });\n//\n// tokenSource.cancel(); // 因为某些情况,可能会cancel\n// tokenSource.dispose(); // dispose时一定会cancel\n//\nexport class CancellationTokenSource implements IDisposable {\n // 真正的token\n private _token?: ICancellationToken = undefined;\n // 可能存在父级CancellationTokenSource\n private readonly _parentListener?: IDisposable = undefined;\n // 为了支持signal场景,所以在需要时会初始化浏览器提供的abortController原生结构\n private _abortController?: AbortController = undefined;\n\n constructor(parent?: ICancellationToken) {\n // 如果存在父级,当父对象cancel时,子对象也必须cancel\n this._parentListener = parent?.onCancellationRequested(this.cancel, this);\n }\n\n /**\n * 传统的cancellation用法\n */\n public get token(): ICancellationToken {\n if (!this._token) {\n this._token = new MutableToken();\n }\n return this._token;\n }\n\n /**\n * 对齐浏览器提供的abortSignal,支持给fetch、axios等传参使用\n */\n public get signal(): AbortSignal {\n if (this._abortController) {\n return this._abortController.signal;\n }\n this._abortController = new AbortController();\n if (this._token?.isCancellationRequested) {\n this._abortController.abort();\n }\n return this._abortController.signal;\n }\n\n public cancel(reason?: string): void {\n if (!this._token) {\n // 如果没有使用过token就直接cancel,那么就返回一个常量即可\n this._token = reason === undefined ? CancellationToken.Cancelled : CancellationToken.Make(reason);\n } else if (this._token instanceof MutableToken) {\n this._token.cancel(reason);\n }\n if (this._abortController) {\n this._abortController.abort(reason);\n }\n }\n\n public dispose(cancel = false): void {\n if (cancel) {\n this.cancel();\n }\n this._parentListener?.dispose();\n if (!this._token) {\n this._token = CancellationToken.None;\n } else if (this._token instanceof MutableToken) {\n this._token.dispose();\n }\n }\n}\n","/**\n * 等待一段时间\n * @param ms 单位毫秒\n */\nexport function wait(ms: number): Promise<undefined> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport const sleep: (ms: number) => Promise<undefined> = wait;\n","export interface IBarrier {\n isOpen: () => boolean;\n open: () => void;\n wait: () => Promise<boolean>;\n}\n\n/**\n * A barrier that is initially closed and then becomes opened permanently after a certain period of\n * time or when open is called explicitly\n */\nexport class Barrier {\n private _isOpen: boolean;\n private readonly _promise: Promise<boolean>;\n private _completePromise!: (v: boolean) => void;\n private _rejectPromise!: (e: unknown) => void;\n\n constructor() {\n this._isOpen = false;\n this._promise = new Promise<boolean>((c, e) => {\n this._completePromise = c;\n this._rejectPromise = e;\n });\n }\n\n isOpen(): boolean {\n return this._isOpen;\n }\n\n open(): void {\n this._isOpen = true;\n this._completePromise(true);\n }\n\n reject(e: unknown): void {\n this._rejectPromise(e);\n }\n\n wait(): Promise<boolean> {\n return this._promise;\n }\n}\n\nexport function makeBarrierByPromise(promise: Promise<any>, openWhenReject: boolean = false) {\n const barrier = new Barrier();\n\n promise\n .then(() => barrier.open())\n .catch((err) => {\n if (openWhenReject) {\n barrier.open();\n throw err;\n } else {\n barrier.reject(err);\n }\n });\n\n return barrier;\n}\n","import type { ILvErrorRef, ILvErrorOr, ILvRealErrorRef } from './error-base';\n\n//\n// Error类\n//\n// 用户给函数签名明确错误\n// function foo(): ILvErrorRef\n// return makeOk(); // 如果没有错误\n// return makeError(code, msg); // 指定错误码和携带消息\n//\n// const SomeError = LvErrorConst(code, msg); // 更推荐用LvErrorConst生成\n// return SomeError();\n//\n\nconst lvErrorRefSymbol = Symbol('lvErrorRef');\n\nfunction findJsError(error: ILvErrorRef | Error) {\n let obj: ILvErrorRef | Error | undefined = error;\n while (obj) {\n if (obj instanceof Error) {\n return obj;\n }\n obj = (obj as ILvErrorRef).cause;\n }\n // 如果没有Error,那就序列化lvError\n return new Error((error as ILvErrorRef).toString());\n}\n\nexport function makeOk<K>(): ILvErrorOr<never, K> {\n return {\n ok: true,\n value: null!,\n pair() {\n return [null, null!];\n },\n code: 0,\n msg: '',\n ...{ [lvErrorRefSymbol]: true }, // 跳过类型检测\n };\n}\n\nexport function makeOkWith<T, K = unknown>(value: T): ILvErrorOr<T, K> {\n return {\n ok: true,\n value,\n pair() {\n return [null, value];\n },\n code: 0,\n msg: '',\n ...{ [lvErrorRefSymbol]: true }, // 跳过类型检测\n };\n}\n\nfunction printCause(cause: ILvErrorRef | Error | undefined): string {\n if (cause === undefined) {\n return '';\n } else if (cause instanceof Error) {\n return `\\ncaused by [jsError]${cause.name}-${cause.message}`;\n } else {\n return `\\ncaused by [${cause.code}]${cause.msg}${cause.ok ? '' : printCause(cause.cause)}`;\n }\n}\n\nfunction internalMakeError<T>(code: number, msg: string, cause?: ILvErrorRef | Error, errorInfo?: T) {\n const errorRef: ILvRealErrorRef<T> = {\n ok: false,\n code,\n msg,\n cause,\n errorInfo,\n toString() {\n return `[${code}]${msg}.${cause ? printCause(cause) : ''}`;\n },\n pair() {\n return [errorRef, null];\n },\n stack: cause instanceof Error ? cause.stack : undefined,\n findJsError: () => findJsError(errorRef),\n ...{ [lvErrorRefSymbol]: true }, // 跳过类型检测\n };\n return errorRef;\n}\n\nexport function makeError<T = unknown>(code: number, msg: string, errorInfo?: T): ILvRealErrorRef<T> {\n return internalMakeError(code, msg, undefined, errorInfo);\n}\n\nexport function makeErrorBy<T = unknown>(\n code: number,\n msg: string,\n cause: ILvErrorRef | Error,\n errorInfo?: T,\n): ILvRealErrorRef<T> {\n return internalMakeError(code, msg, cause, errorInfo);\n}\n\nexport function isLvErrorRef(val: unknown): val is ILvErrorRef {\n return typeof val === 'object' && val !== null && lvErrorRefSymbol in val;\n}\n","import { Disposable, type IDisposable } from '@/dispose';\nimport { type Event, Emitter } from '@/event';\nimport { makeErrorBy, type ILvErrorRef } from '@/error';\nimport { CancellationToken, type ICancellationToken } from '../cancellation';\n\nexport interface IAsyncTask extends IDisposable {\n onSuccess: Event<[]>;\n onFailure: Event<[ILvErrorRef]>;\n onCancel: Event<[]>;\n\n /** 取消当前任务 */\n cancel: () => void;\n}\n\nexport class AsyncTask extends Disposable implements IAsyncTask {\n private readonly _onSuccess = this._store.add(new Emitter<[]>());\n public readonly onSuccess = this._onSuccess.event;\n\n private readonly _onFailure = this._store.add(new Emitter<[ILvErrorRef]>());\n public readonly onFailure = this._onFailure.event;\n\n private readonly _onCancel = this._store.add(new Emitter<[]>());\n public readonly onCancel = this._onCancel.event;\n\n private _isExec: boolean = false;\n private _isCancel: boolean = false;\n\n constructor(\n private _callback: ((cancellation: ICancellationToken) => Promise<void>) | null,\n private readonly _cancellationToken?: ICancellationToken,\n ) {\n super();\n\n this._cancellationToken?.onCancellationRequested(() => {\n this.cancel();\n });\n }\n\n /** 这个方法不对外暴露,只提供给 queue 使用. */\n async safeExec(): Promise<void> {\n if (this._isCancel || this._isExec) {\n return;\n }\n\n try {\n this._isExec = true;\n await this._callback!(this._cancellationToken ?? CancellationToken.None);\n this._onSuccess.fire();\n } catch (err) {\n /** handler error */\n this._onFailure.fire(makeErrorBy(-1, 'exec error', err as Error));\n }\n }\n\n cancel(): void {\n if (this._isCancel) {\n return;\n }\n if (this._isExec) {\n return;\n }\n\n this._isCancel = true;\n this._callback = null;\n this._onCancel.fire();\n }\n}\n","/**\n * 异步任务队列\n */\nimport { Disposable } from '@/dispose';\nimport { AsyncTask, type IAsyncTask } from './task';\nimport type { ICancellationToken } from '../cancellation';\n\ntype IAsyncQueue = {\n /** 队列的任务并发数 */\n concurrent: number;\n};\n\nexport class AsyncQueue extends Disposable {\n private readonly _queue: AsyncTask[] = [];\n private readonly _maxConcurrent: number = 1;\n private _execCounter: number = 0;\n\n constructor(options: IAsyncQueue) {\n super();\n // 初始化最大并发数\n this._maxConcurrent = options.concurrent;\n }\n\n /** 添加一个异步任务到队列 */\n addTask(\n callback: (cancellation: ICancellationToken) => Promise<void>,\n cancellationToken?: ICancellationToken,\n ): IAsyncTask {\n if (cancellationToken?.isCancellationRequested) {\n return new AsyncTask(null);\n }\n const task = new AsyncTask(callback);\n // 将任务函数加入队列\n this._queue.push(this._store.add(task));\n // 尝试执行下一个任务\n this._next();\n\n return task;\n }\n\n // 执行下一个任务,如果当前并发数小于最大并发数,并且队列不为空,则从队列中取出一个任务并执行,否则什么都不做\n private _next() {\n if (this._queue.length && this._execCounter < this._maxConcurrent && this._queue.length > 0) {\n // 取出队列中的第一个任务函数,并从队列中移除它\n const task = this._queue.shift()!;\n // 增加当前并发数\n this._execCounter++;\n // 执行任务函数,并处理其返回的promise对象\n task.safeExec().finally(() => {\n // 不管成功还是失败,都要减少当前并发数,并执行下一个任务(递归调用)\n this._execCounter--;\n this._next();\n });\n }\n }\n}\n","import { makeSafeDisposable } from '@/dispose';\n\nexport function invokeNextLoop(fn: (...args: any[]) => void) {\n const handle = setTimeout(() => {\n fn();\n }, 0);\n return makeSafeDisposable(() => clearTimeout(handle));\n}\n"]}
1
+ {"version":3,"sources":["../../src/_internal/logger.ts","../../src/dispose/logger.ts","../../src/dispose/dispose-base.ts","../../src/dispose/tracker.ts","../../src/dispose/disposable-store.ts","../../src/dispose/disposable-t.ts","../../src/dispose/disposable-utils.ts","../../src/structure/linked-list.ts","../../src/event/disposable-linked-list.ts","../../src/event/error-handler.ts","../../src/event/emitter.ts","../../src/async/cancellation.ts","../../src/async/wait.ts","../../src/async/barrier.ts","../../src/error/error-t.ts","../../src/async/queue/task.ts","../../src/async/queue/queue.ts","../../src/async/utils.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/* eslint-disable no-console */\n\nexport const Logger = {\n error(...data: any[]): void {\n if (typeof console.error === 'function') {\n console.error(...data);\n }\n },\n info(...data: any[]): void {\n if (typeof console.info === 'function') {\n console.info(...data);\n }\n },\n log(...data: any[]): void {\n if (typeof console.log === 'function') {\n console.log(...data);\n }\n },\n time(label?: string): void {\n if (typeof console.time === 'function') {\n console.time(label);\n }\n },\n timeEnd(label?: string): void {\n if (typeof console.timeEnd === 'function') {\n console.timeEnd(label);\n }\n },\n timeLog(label?: string, ...data: any[]): void {\n if (typeof console.timeLog === 'function') {\n console.timeLog(label, ...data);\n }\n },\n timeStamp(label?: string): void {\n if (typeof console.timeStamp === 'function') {\n console.timeStamp(label);\n }\n },\n trace(...data: any[]): void {\n if (typeof console.trace === 'function') {\n console.trace(...data);\n }\n },\n warn(...data: any[]): void {\n if (typeof console.warn === 'function') {\n console.warn(...data);\n }\n },\n profile(label?: string): void {\n if (typeof console.profile === 'function') {\n console.profile(label);\n }\n },\n profileEnd(label?: string): void {\n if (typeof console.profileEnd === 'function') {\n console.profileEnd(label);\n }\n },\n};\n","import { Logger } from '@/_internal/logger';\nimport type { IDisposable } from './dispose-base';\n\nlet disposableLogger: IDisposableLogger | null = null;\n\nexport interface IDisposableLogger {\n branch: (from: string, to: string) => void;\n end: () => void;\n}\n\nfunction setDisposableLogger(logger: IDisposableLogger | null): void {\n disposableLogger = logger;\n}\n\nfunction makeDefaultLogger() {\n return new (class implements IDisposableLogger {\n private readonly _dep: [string, string][] = [];\n\n branch(from: string, to: string): void {\n this._dep.push([from, to]);\n }\n\n end(): void {\n Logger.log(this._dep);\n }\n })();\n}\n\n// 辅助能力 dispose触发时记录\nexport function BRANCH_DISPOSE(from: string, to: string) {\n disposableLogger?.branch(from, to);\n}\n\nexport function disposeWithLog<T extends IDisposable>(x: T, logger: IDisposableLogger = makeDefaultLogger()) {\n setDisposableLogger(logger);\n x.dispose();\n logger.end();\n setDisposableLogger(null);\n}\n","//\n// Disposable特征约束\n//\nexport interface IDisposable {\n dispose: () => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const EmptyDispose = Object.freeze<IDisposable>({ dispose() {} });\n","import { Logger } from '@/_internal/logger';\nimport type { IDisposable } from './dispose-base';\nimport { EmptyDispose } from './dispose-base';\n\nexport interface IDisposableTracker {\n trackDisposable: (disposable: IDisposable) => void;\n\n setParent: (child: IDisposable, parent: IDisposable | null) => void;\n\n markAsDisposed: (disposable: IDisposable) => void;\n\n markAsLeaked: (disposable: IDisposable) => void;\n}\n\nlet disposableTracker: IDisposableTracker | null = null;\n\nfunction makeDefaultTracker() {\n // reactHooks useEffect中出现disposable,我们默认为不会泄漏\n // 默认使用者一定会在useEffect的返回值中进行dispose\n const ignorePattern = /commitHookEffectList/i;\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const __is_disposable_tracked__ = '__is_disposable_tracked__';\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const __is_leak_marked__ = '__is_leak_marked__';\n return new (class implements IDisposableTracker {\n trackDisposable(x: IDisposable): void {\n const stack = new Error('Potentially leaked disposable').stack!;\n setTimeout(() => {\n if (stack.match(ignorePattern)) {\n return;\n }\n if ((x as any)[__is_leak_marked__]) {\n return;\n }\n if (!(x as any)[__is_disposable_tracked__]) {\n Logger.log(stack);\n }\n }, 3000);\n }\n\n setParent(child: IDisposable, parent: IDisposable | null): void {\n if (child && child !== EmptyDispose) {\n try {\n (child as any)[__is_disposable_tracked__] = true;\n } catch {\n // noop\n }\n }\n }\n\n markAsDisposed(disposable: IDisposable): void {\n if (disposable && disposable !== EmptyDispose) {\n try {\n (disposable as any)[__is_disposable_tracked__] = true;\n } catch {\n // noop\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n markAsLeaked(disposable: IDisposable): void {\n if (disposable && disposable !== EmptyDispose) {\n try {\n (disposable as any)[__is_leak_marked__] = true;\n } catch {\n // noop\n }\n }\n }\n })();\n}\n\nfunction setDisposableTracker(tracker: IDisposableTracker | null): void {\n disposableTracker = tracker;\n}\n\nexport function enableTrack(tracker: IDisposableTracker = makeDefaultTracker()) {\n setDisposableTracker(tracker);\n}\n\nexport function disableTrack() {\n setDisposableTracker(null);\n}\n\n// 辅助能力 跟踪disposable\nexport function TRACK_DISPOSABLE<T extends IDisposable>(x: T): T {\n disposableTracker?.trackDisposable(x);\n return x;\n}\n\n// 辅助能力 标记disposable成功\nexport function MARK_AS_DISPOSED<T extends IDisposable>(x: T): void {\n disposableTracker?.markAsDisposed(x);\n}\n\n// 辅助能力 标记disposable关系\nexport function SET_PARENT_OF_DISPOSABLE(child: IDisposable, parent: IDisposable | null): void {\n disposableTracker?.setParent(child, parent);\n}\n\n// 辅助能力 主动标记泄漏\nexport function MARK_AS_LEAKED<T extends IDisposable>(x: T) {\n disposableTracker?.markAsLeaked(x);\n}\n","import { Logger } from '@/_internal/logger';\nimport type { IDisposable } from './dispose-base';\nimport { BRANCH_DISPOSE } from './logger';\nimport { MARK_AS_DISPOSED, SET_PARENT_OF_DISPOSABLE, TRACK_DISPOSABLE } from './tracker';\n\nexport class DisposableStore implements IDisposable {\n static DISABLE_DISPOSED_WARNING = false;\n\n private readonly _toDispose = new Set<IDisposable>();\n private _isDisposed = false;\n\n constructor() {\n TRACK_DISPOSABLE(this);\n }\n\n get isDisposed(): boolean {\n return this._isDisposed;\n }\n\n dispose(): void {\n if (this._isDisposed) {\n // 不应该出现重复dispose\n Logger.warn(new Error('DisposableStore has disposed.').stack);\n return;\n }\n\n MARK_AS_DISPOSED(this);\n this._isDisposed = true;\n this.clear();\n }\n\n clear(): void {\n if (this._toDispose.size === 0) {\n return;\n }\n\n for (const disposable of this._toDispose) {\n BRANCH_DISPOSE(this.constructor.name, disposable.constructor.name);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const errors: any[] = [];\n for (const disposable of this._toDispose) {\n try {\n disposable.dispose();\n } catch (e) {\n errors.push(e);\n }\n }\n\n this._toDispose.clear();\n if (errors.length > 0) {\n throw new AggregateError(errors, 'find error when dispose store.');\n }\n }\n\n add<T extends IDisposable>(o: T): T {\n if (!o) {\n return o;\n }\n if ((o as unknown as DisposableStore) === this) {\n throw new Error('Cannot register a disposable on itself.');\n }\n\n SET_PARENT_OF_DISPOSABLE(o, this);\n if (this._isDisposed) {\n if (!DisposableStore.DISABLE_DISPOSED_WARNING) {\n Logger.warn(\n new Error(\n 'Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!',\n ).stack,\n );\n }\n } else {\n this._toDispose.add(o);\n }\n\n return o;\n }\n}\n","import { Logger } from '@/_internal/logger';\nimport { lvAssertNotNil } from '@/assert';\nimport { DisposableStore } from './disposable-store';\nimport type { IDisposable } from './dispose-base';\nimport { BRANCH_DISPOSE } from './logger';\nimport { MARK_AS_DISPOSED, SET_PARENT_OF_DISPOSABLE, TRACK_DISPOSABLE } from './tracker';\n\n//\n// Disposable基类\n//\n// 自动添加DisposableStore,提供默认的dispose和register方法\n//\nexport abstract class Disposable implements IDisposable {\n protected readonly _store = new DisposableStore();\n\n constructor() {\n TRACK_DISPOSABLE(this);\n SET_PARENT_OF_DISPOSABLE(this._store, this);\n }\n\n // 销毁该节点和所有的子节点\n dispose(): void {\n MARK_AS_DISPOSED(this);\n BRANCH_DISPOSE(this.constructor.name, this._store.constructor.name);\n\n this._store.dispose();\n }\n\n // 挂载子节点\n protected _register<T extends IDisposable>(o: T): T {\n if ((o as unknown as Disposable) === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n return this._store.add(o);\n }\n}\n\n/**\n * 容器类\n * 提供一个容器,容器内部的IDisposable对象可以切换更新,每次更新的时候,旧的IDisposable对象会自动进行dispose\n *\n * 使用方式:\n * class Foo {\n * private readonly _barRef: MutableDisposable;\n *\n * toggle() {\n * this._barRef.setValue(new Bar());\n * }\n *\n * doSomething() {\n * this._barRef.value.xxx();\n * }\n * }\n */\nexport class MutableDisposable<T extends IDisposable> implements IDisposable {\n private _value?: T;\n private _isDisposed = false;\n\n constructor(value?: T) {\n TRACK_DISPOSABLE(this);\n this.value = value;\n }\n\n get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n\n this._value?.dispose();\n if (value) {\n SET_PARENT_OF_DISPOSABLE(value, this);\n }\n this._value = value;\n }\n\n clear(): void {\n this.value = undefined;\n }\n\n dispose(): void {\n this._isDisposed = true;\n MARK_AS_DISPOSED(this);\n this._value?.dispose();\n this._value = undefined;\n }\n\n release(): T | undefined {\n const oldValue = this._value;\n this._value = undefined;\n if (oldValue) {\n SET_PARENT_OF_DISPOSABLE(oldValue, null);\n }\n return oldValue;\n }\n}\n\n/**\n * 容器类\n * 通过该容器进行dispose试,可以保证内部的IDisposable一会进行一次dispose\n * 本质是一种防御性质的处理,如果需要使用时,最好有明确的理由\n */\nexport class SafeDisposable<T extends IDisposable> implements IDisposable {\n private _value?: T;\n\n constructor(value: T) {\n this._value = value;\n TRACK_DISPOSABLE(this);\n }\n\n get value(): T | undefined {\n return this._value;\n }\n\n isEmpty() {\n return this._value === undefined;\n }\n\n dispose() {\n if (!this._value) {\n return;\n }\n this._value.dispose();\n this._value = undefined;\n MARK_AS_DISPOSED(this);\n }\n}\n\n/**\n * 容器类\n * 引用计数容器,当引用为0时自动执行dispose\n * 注意:初始计数为1,默认构造的地方自动获得引用,如果在栈上构造,记得最后调用release\n *\n * 使用实例:\n * class Foo {\n * private _bar: RefCountedDisposable = new RefCountedDisposable(new Bar());\n *\n * getBar() {\n * this._bar.acquire();\n * return this._bar;\n * }\n * }\n *\n * // 如果在栈上构造\n * const bar = new RefCountedDisposable(new Bar());\n * makeFoo(bar);\n * makeFoo(bar);\n * bar.release();\n */\nexport class RefCountedDisposable<T extends IDisposable> implements IDisposable {\n private _counter: number = 1;\n private _value?: T;\n\n constructor(value: T) {\n this._value = value;\n TRACK_DISPOSABLE(this);\n }\n\n get value(): T | undefined {\n return this._value;\n }\n\n acquire() {\n if (!this._value) {\n return this;\n }\n this._counter++;\n return this;\n }\n\n release() {\n if (--this._counter === 0) {\n this._value!.dispose();\n this._value = undefined;\n MARK_AS_DISPOSED(this);\n }\n return this;\n }\n\n dispose() {\n this.release();\n }\n}\n\n/**\n * 容器类,表示了一个T生命周期的转移\n *\n * 由于js引用传递的特性,正常情况下,我们默认为传递过来的对象不具备dispose权利\n * class Foo extends Disposable {\n * private readonly _bar = new Bar();\n *\n * constructor(\n * thirdparty: Thirdparty,\n * ) {\n * this._register(this._bar); // class内部构造的,具备dispose权利\n * this._register(thirdparty); // ❌,很少会直接这么写,除非能很确定存在生命周期转移\n * }\n *\n * constructor(\n * thirdparty: TransferDisposable<Thirdparty>, // ✅,明确表示了我依赖了Thirdparty,但是该对象生命周期要归我所有\n * ) {\n * this._register(this._bar);\n * this._register(thirdparty.release()); // ✅,可以直接register\n * }\n * }\n *\n * 注意:\n * 不同于C++中的unique_ptr,该class只作用于转移场景。\n * 所以class理论上只在栈上出现,不应该在堆上存在。\n * 如果出现了需要在堆上存储的场景,可以联系架构侧\n */\nexport class TransferDisposable<T extends IDisposable> extends Disposable {\n private _val?: T;\n\n constructor(val: T) {\n super();\n\n this._val = val;\n }\n\n release() {\n // 只能release一次\n lvAssertNotNil(this._val);\n const v = this._val;\n this._val = undefined;\n return v;\n }\n\n dispose(): void {\n // 虽然它有dispose,但是不应该被执行,应该直接被gc才对\n Logger.warn(new Error('TransferDisposable call dispose.'));\n this._val?.dispose();\n super.dispose();\n }\n}\n","import { SafeDisposable, TransferDisposable } from './disposable-t';\nimport { EmptyDispose, type IDisposable } from './dispose-base';\nimport { MARK_AS_LEAKED } from './tracker';\n\nexport function makeSafeDisposable(fn: (...args: any) => any) {\n const disposable = new SafeDisposable({\n dispose: fn,\n });\n return disposable;\n}\n\nexport function makeEmptyDisposable() {\n return EmptyDispose;\n}\n\n// 忽略dispose\nexport function ignoreDispose(x: IDisposable) {\n MARK_AS_LEAKED(x);\n}\n\n// 判断一个thing是否是disposable\nexport function isDisposable<E = any>(thing: E): thing is E & IDisposable {\n return typeof (thing as IDisposable).dispose === 'function' && (thing as IDisposable).dispose.length === 0;\n}\n\nexport function makeTransferDisposable<T extends IDisposable>(val: T) {\n return new TransferDisposable(val);\n}\n","class ListNode<T> {\n constructor(\n public value: T,\n public next: ListNode<T> | null = null,\n public prev: ListNode<T> | null = null,\n ) {}\n}\n\nexport class LinkedList<T> {\n protected _head: ListNode<T> | null = null;\n protected _tail: ListNode<T> | null = null;\n protected _count = 0;\n\n public get size(): number {\n return this._count;\n }\n\n public get firstNode(): ListNode<T> | null {\n return this._head;\n }\n\n public isEmpty(): boolean {\n return this._head === null;\n }\n\n public clear(): void {\n let current = this._head;\n while (current !== null) {\n const next = current.next;\n current.prev = null;\n current.next = null;\n current = next;\n }\n\n this._head = null;\n this._tail = null;\n this._count = 0;\n }\n\n public unshift(value: T): LinkedList<T> {\n const node = new ListNode(value);\n\n if (this.isEmpty()) {\n this._head = node;\n this._tail = node;\n } else {\n const oldHead = this._head;\n this._head = node;\n node.next = oldHead;\n oldHead!.prev = node;\n }\n\n this._count++;\n return this;\n }\n\n public push(value: T): LinkedList<T> {\n const node = new ListNode(value);\n\n if (this.isEmpty()) {\n this._head = node;\n this._tail = node;\n } else {\n const oldTail = this._tail;\n this._tail = node;\n node.prev = oldTail;\n oldTail!.next = node;\n }\n\n this._count++;\n return this;\n }\n\n public shift(): T | null {\n if (this.isEmpty()) {\n return null;\n }\n\n const node = this._head!;\n const value = node.value;\n this._remove(node);\n return value;\n }\n\n public pop(): T | null {\n if (this.isEmpty()) {\n return null;\n }\n\n const node = this._tail!;\n const value = node.value;\n this._remove(node);\n return value;\n }\n\n public toArray(): T[] {\n const result: T[] = [];\n for (const value of this) {\n result.push(value);\n }\n return result;\n }\n\n public *[Symbol.iterator](): Iterator<T> {\n let current = this._head;\n while (current !== null) {\n yield current.value;\n current = current.next;\n }\n }\n\n protected _remove(node: ListNode<T>): void {\n // 如果节点已经被移除(prev 和 next 都为 null),直接返回\n if (node.prev === null && node.next === null && node !== this._head && node !== this._tail) {\n return;\n }\n\n // 更新链表头尾指针\n if (node === this._head) {\n this._head = node.next;\n if (this._head) {\n this._head.prev = null;\n }\n }\n if (node === this._tail) {\n this._tail = node.prev;\n if (this._tail) {\n this._tail.next = null;\n }\n }\n\n // 更新相邻节点的引用\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n\n // 清理被移除节点的引用\n node.prev = null;\n node.next = null;\n this._count--;\n }\n}\n","import { LinkedList } from '@/structure/linked-list';\n\nexport class DisposableLinkedList<T> extends LinkedList<T> {\n unshiftAndGetDisposableNode(value: T): () => void {\n this.unshift(value);\n\n const node = this._head!;\n let hasRemoved = false;\n return (): void => {\n if (!hasRemoved) {\n hasRemoved = true;\n super._remove(node);\n }\n };\n }\n\n pushAndGetDisposableNode(value: T): () => void {\n this.push(value);\n\n const node = this._tail!;\n let hasRemoved = false;\n return (): void => {\n if (!hasRemoved) {\n hasRemoved = true;\n super._remove(node);\n }\n };\n }\n}\n","/**\n * 针对未捕获的错误,异步抛出,不阻塞事件响应主流程\n * 默认模式\n */\nexport function asyncUnexpectedError(e: any): void {\n setTimeout(() => {\n throw e;\n }, 0);\n}\n\n/**\n * 针对未捕获的错误,同步抛出,阻塞事件响应主流程\n */\nexport function syncUnexpectedError(e: any): void {\n throw e;\n}\n\n/**\n * 针对未捕获的错误,静默掉,不进行处理\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function ignoreUnexpectedError(e: any): void {}\n","import { makeSafeDisposable } from '@/dispose';\nimport type { IDisposable } from '@/dispose';\nimport { DisposableLinkedList } from './disposable-linked-list';\nimport { asyncUnexpectedError } from './error-handler';\n\nexport interface EmitterOptions {\n onAddListener?: (...args: any) => any;\n onRemoveListener?: (...args: any) => any;\n onListenerError?: (e: any) => void;\n}\n\n//\n// 事件监听中的回调实体\n//\nclass Listener<TArgs extends any[]> {\n private readonly _callback: (...args: TArgs) => void;\n private readonly _callbackThis: any | undefined;\n\n constructor(callback: (...args: TArgs) => void, callbackThis: any | undefined) {\n this._callback = callback;\n this._callbackThis = callbackThis;\n }\n\n invoke(...args: TArgs): void {\n this._callback.call(this._callbackThis, ...args);\n }\n}\n\n//\n// 存放在EventDeliveryQueue中的元素\n//\nclass EventDeliveryQueueElement<TArgs extends any[]> {\n readonly emitter: Emitter<TArgs>;\n readonly listener: Listener<TArgs>;\n readonly event: TArgs;\n constructor(emitter: Emitter<TArgs>, listener: Listener<TArgs>, event: TArgs) {\n this.emitter = emitter;\n this.listener = listener;\n this.event = event;\n }\n}\n\nexport class EventDeliveryQueue {\n protected _queue = new DisposableLinkedList<EventDeliveryQueueElement<any>>();\n\n constructor(private readonly _onListenerError: (e: unknown) => void = asyncUnexpectedError) {}\n\n get size(): number {\n return this._queue.size;\n }\n\n push<TArgs extends any[]>(emitter: Emitter<TArgs>, listener: Listener<TArgs>, event: TArgs): void {\n this._queue.push(new EventDeliveryQueueElement(emitter, listener, event));\n }\n\n clear<TArgs extends any[]>(emitter: Emitter<TArgs>): void {\n const newQueue = new DisposableLinkedList<EventDeliveryQueueElement<TArgs>>();\n for (const element of this._queue) {\n if (element.emitter !== emitter) {\n newQueue.push(element);\n }\n }\n this._queue = newQueue;\n }\n\n deliver(): void {\n while (this._queue.size > 0) {\n const element = this._queue.shift()!;\n try {\n element.listener.invoke(...element.event);\n } catch (e) {\n this._onListenerError(e);\n }\n }\n }\n}\n\nexport interface Event<T extends any[]> {\n (listener: (...args: T) => any, thisArgs?: any): IDisposable;\n}\n\nexport class Emitter<TArgs extends any[]> {\n protected _listeners?: DisposableLinkedList<Listener<TArgs>>;\n private readonly _options?: EmitterOptions;\n private _disposed = false;\n private _event?: Event<TArgs>;\n private _deliveryQueue?: EventDeliveryQueue;\n\n constructor(options?: EmitterOptions) {\n this._options = options;\n }\n\n get event(): Event<TArgs> {\n if (this._event) {\n return this._event;\n }\n\n this._event = (callback: (...args: TArgs) => any, thisArgs?: any): IDisposable => {\n const listener = new Listener(callback, thisArgs);\n\n if (!this._listeners) {\n this._listeners = new DisposableLinkedList();\n }\n\n const removeListener = this._listeners.pushAndGetDisposableNode(listener);\n\n if (this._options?.onAddListener) {\n this._options.onAddListener(this, callback, thisArgs);\n }\n\n // 生成可销毁函数返回\n const result = () => {\n if (!this._disposed) {\n removeListener();\n if (this._options?.onRemoveListener) {\n this._options.onRemoveListener(this, callback, thisArgs);\n }\n }\n };\n\n return makeSafeDisposable(result);\n };\n\n return this._event;\n }\n\n dispose(): void {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n this._listeners?.clear();\n this._deliveryQueue?.clear(this);\n }\n\n fire(...event: TArgs): void {\n if (!this._listeners || this._listeners.size === 0) {\n return;\n }\n // 绝大部分场景事件只会有一个监听器,针对性进行性能优化,没必要构造DeliveryQueue结构\n if (this._listeners.size === 1) {\n const listener = this._listeners.firstNode!;\n try {\n listener.value.invoke(...event);\n } catch (e) {\n if (this._options?.onListenerError) {\n this._options.onListenerError(e);\n } else {\n asyncUnexpectedError(e);\n }\n }\n return;\n }\n\n this._deliveryQueue ??= new EventDeliveryQueue(this._options?.onListenerError);\n\n for (const listener of this._listeners) {\n this._deliveryQueue.push(this, listener, event);\n }\n this._deliveryQueue.deliver();\n }\n}\n","import { EmptyDispose, type IDisposable } from '@/dispose';\nimport type { Event } from '@/event';\nimport { Emitter } from '@/event';\n\n//\n// 任何可取消的异步调用 的令牌接口\n// 因为异步调用无法真正意义上取消,但是可以在异步任务的回调中增加该令牌作为参数\n// 以便在操作被取消时停止执行\n//\nexport interface ICancellationToken {\n // 标记是否进行过了cancel\n readonly isCancellationRequested: boolean;\n\n // 取消的原因\n readonly reason?: string;\n\n // 令牌调用cancel后触发的回调\n // 有如下特点\n // 1. 只会触发一次\n // 2. 当监听的时候token已经cancelled,仍然会触发一次\n readonly onCancellationRequested: (\n listener: () => any,\n thisArgs?: any,\n disposables?: IDisposable[],\n ) => IDisposable;\n}\n\n//\n// 编译时常量,一个快捷的事件响应\n// 用于当外界监听令牌取消时,直接触发回调\n//\nconst shortcutEvent: Event<[]> = Object.freeze(function (callback, context?): IDisposable {\n const handle = setTimeout(callback.bind(context), 0);\n\n return {\n dispose() {\n clearTimeout(handle);\n },\n };\n});\n\n//\n// 可取消异步调用的令牌实现\n// 默认是未取消状态,可以调用cancel进行取消\n//\nclass MutableToken implements ICancellationToken, IDisposable {\n // 是否已经取消该异步调用\n private _isCancelled = false;\n private _emitter: Emitter<[]> | null = null;\n private _reason?: string;\n\n public get reason(): undefined | string {\n return this._reason;\n }\n\n // 获取当前是否已经取消该异步调用\n public get isCancellationRequested(): boolean {\n return this._isCancelled;\n }\n\n // 外界可以监听异步取消发起\n public get onCancellationRequested(): Event<[]> {\n if (this._isCancelled) {\n return shortcutEvent;\n }\n if (!this._emitter) {\n this._emitter = new Emitter<[]>();\n }\n return this._emitter.event;\n }\n\n public cancel(reason?: string) {\n if (!this._isCancelled) {\n this._reason = reason;\n this._isCancelled = true;\n if (this._emitter) {\n this._emitter.fire();\n this.dispose();\n }\n }\n }\n\n public dispose(): void {\n if (this._emitter) {\n this._emitter.dispose();\n this._emitter = null;\n }\n }\n}\n\n//\n// 编译期提供的一些常量Token\n// 不可修改\n//\n// eslint-disable-next-line unicorn/no-static-only-class, @typescript-eslint/no-extraneous-class\nexport class CancellationToken {\n static None = Object.freeze<ICancellationToken>({\n isCancellationRequested: false,\n onCancellationRequested: () => EmptyDispose,\n });\n\n static Cancelled = Object.freeze<ICancellationToken>({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent,\n });\n\n static Make = (reason: string) => {\n return Object.freeze<ICancellationToken>({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent,\n reason,\n });\n };\n}\n\n//\n// 任何可取消的异步调用 的控制类\n// 参考ICancellationToken,我们通过在异步调用的回调中添加token参数来判断异步调用的状态\n// token来源于CancellationTokenSource\n// CancellationTokenSource也会暴露cancel的接口\n//\n// 使用方式\n// const tokenSource = new CancellationTokenSource();\n//\n// asyncCall(() => {\n// if (token.isCancellationRequested) { return; } // 如果cancelled\n// doSomething();\n// });\n//\n// tokenSource.cancel(); // 因为某些情况,可能会cancel\n// tokenSource.dispose(); // dispose时一定会cancel\n//\nexport class CancellationTokenSource implements IDisposable {\n // 真正的token\n private _token?: ICancellationToken = undefined;\n // 可能存在父级CancellationTokenSource\n private readonly _parentListener?: IDisposable = undefined;\n // 为了支持signal场景,所以在需要时会初始化浏览器提供的abortController原生结构\n private _abortController?: AbortController = undefined;\n\n constructor(parent?: ICancellationToken) {\n // 如果存在父级,当父对象cancel时,子对象也必须cancel\n this._parentListener = parent?.onCancellationRequested(this.cancel, this);\n }\n\n /**\n * 传统的cancellation用法\n */\n public get token(): ICancellationToken {\n if (!this._token) {\n this._token = new MutableToken();\n }\n return this._token;\n }\n\n /**\n * 对齐浏览器提供的abortSignal,支持给fetch、axios等传参使用\n */\n public get signal(): AbortSignal {\n if (this._abortController) {\n return this._abortController.signal;\n }\n this._abortController = new AbortController();\n if (this._token?.isCancellationRequested) {\n this._abortController.abort();\n }\n return this._abortController.signal;\n }\n\n public cancel(reason?: string): void {\n if (!this._token) {\n // 如果没有使用过token就直接cancel,那么就返回一个常量即可\n this._token = reason === undefined ? CancellationToken.Cancelled : CancellationToken.Make(reason);\n } else if (this._token instanceof MutableToken) {\n this._token.cancel(reason);\n }\n if (this._abortController) {\n this._abortController.abort(reason);\n }\n }\n\n public dispose(cancel = false): void {\n if (cancel) {\n this.cancel();\n }\n this._parentListener?.dispose();\n if (!this._token) {\n this._token = CancellationToken.None;\n } else if (this._token instanceof MutableToken) {\n this._token.dispose();\n }\n }\n}\n","/**\n * 等待一段时间\n * @param ms 单位毫秒\n */\nexport function wait(ms: number): Promise<undefined> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport const sleep: (ms: number) => Promise<undefined> = wait;\n","export interface IBarrier {\n isOpen: () => boolean;\n open: () => void;\n wait: () => Promise<boolean>;\n}\n\n/**\n * A barrier that is initially closed and then becomes opened permanently after a certain period of\n * time or when open is called explicitly\n */\nexport class Barrier {\n private _isOpen: boolean;\n private readonly _promise: Promise<boolean>;\n private _completePromise!: (v: boolean) => void;\n private _rejectPromise!: (e: unknown) => void;\n\n constructor() {\n this._isOpen = false;\n this._promise = new Promise<boolean>((c, e) => {\n this._completePromise = c;\n this._rejectPromise = e;\n });\n }\n\n isOpen(): boolean {\n return this._isOpen;\n }\n\n open(): void {\n this._isOpen = true;\n this._completePromise(true);\n }\n\n reject(e: unknown): void {\n this._rejectPromise(e);\n }\n\n wait(): Promise<boolean> {\n return this._promise;\n }\n}\n\nexport function makeBarrierByPromise(promise: Promise<any>, openWhenReject: boolean = false) {\n const barrier = new Barrier();\n\n promise\n .then(() => barrier.open())\n .catch((err) => {\n if (openWhenReject) {\n barrier.open();\n throw err;\n } else {\n barrier.reject(err);\n }\n });\n\n return barrier;\n}\n","import type { LvErrorRef, LvErrorOr, LvRealErrorRef } from './error-base';\n\n//\n// Error类\n//\n// 用户给函数签名明确错误\n// function foo(): LvErrorRef\n// return makeOk(); // 如果没有错误\n// return makeError(code, msg); // 指定错误码和携带消息\n//\n// const SomeError = LvErrorConst(code, msg); // 更推荐用LvErrorConst生成\n// return SomeError();\n//\n\nconst lvErrorRefSymbol = Symbol('lvErrorRef');\n\nfunction findJsError(error: LvErrorRef | Error) {\n let obj: LvErrorRef | Error | undefined = error;\n while (obj) {\n if (obj instanceof Error) {\n return obj;\n }\n obj = (obj as LvErrorRef).cause;\n }\n // 如果没有Error,那就序列化lvError\n return new Error((error as LvErrorRef).toString());\n}\n\nexport function makeOk<K>(): LvErrorOr<never, K> {\n return {\n ok: true,\n value: null!,\n pair() {\n return [null, null!];\n },\n code: 0,\n msg: '',\n ...{ [lvErrorRefSymbol]: true }, // 跳过类型检测\n };\n}\n\nexport function makeOkWith<T, K = unknown>(value: T): LvErrorOr<T, K> {\n return {\n ok: true,\n value,\n pair() {\n return [null, value];\n },\n code: 0,\n msg: '',\n ...{ [lvErrorRefSymbol]: true }, // 跳过类型检测\n };\n}\n\nfunction printCause(cause: LvErrorRef | Error | undefined): string {\n if (cause === undefined) {\n return '';\n } else if (cause instanceof Error) {\n return `\\ncaused by [jsError]${cause.name}-${cause.message}`;\n } else {\n return `\\ncaused by [${cause.code}]${cause.msg}${cause.ok ? '' : printCause(cause.cause)}`;\n }\n}\n\nfunction internalMakeError<T>(code: number, msg: string, cause?: LvErrorRef | Error, errorInfo?: T) {\n const errorRef: LvRealErrorRef<T> = {\n ok: false,\n code,\n msg,\n cause,\n errorInfo,\n toString() {\n return `[${code}]${msg}.${cause ? printCause(cause) : ''}`;\n },\n pair() {\n return [errorRef, null];\n },\n stack: cause instanceof Error ? cause.stack : undefined,\n findJsError: () => findJsError(errorRef),\n ...{ [lvErrorRefSymbol]: true }, // 跳过类型检测\n };\n return errorRef;\n}\n\nexport function makeError<T = unknown>(code: number, msg: string, errorInfo?: T): LvRealErrorRef<T> {\n return internalMakeError(code, msg, undefined, errorInfo);\n}\n\nexport function makeErrorBy<T = unknown>(\n code: number,\n msg: string,\n cause: LvErrorRef | Error,\n errorInfo?: T,\n): LvRealErrorRef<T> {\n return internalMakeError(code, msg, cause, errorInfo);\n}\n\nexport function isLvErrorRef(val: unknown): val is LvErrorRef {\n return typeof val === 'object' && val !== null && lvErrorRefSymbol in val;\n}\n","import { Disposable, type IDisposable } from '@/dispose';\nimport { type Event, Emitter } from '@/event';\nimport { makeErrorBy, type LvErrorRef } from '@/error';\nimport { CancellationToken, type ICancellationToken } from '../cancellation';\n\nexport interface IAsyncTask extends IDisposable {\n onSuccess: Event<[]>;\n onFailure: Event<[LvErrorRef]>;\n onCancel: Event<[]>;\n\n /** 取消当前任务 */\n cancel: () => void;\n}\n\nexport class AsyncTask extends Disposable implements IAsyncTask {\n private readonly _onSuccess = this._store.add(new Emitter<[]>());\n public readonly onSuccess = this._onSuccess.event;\n\n private readonly _onFailure = this._store.add(new Emitter<[LvErrorRef]>());\n public readonly onFailure = this._onFailure.event;\n\n private readonly _onCancel = this._store.add(new Emitter<[]>());\n public readonly onCancel = this._onCancel.event;\n\n private _isExec: boolean = false;\n private _isCancel: boolean = false;\n\n constructor(\n private _callback: ((cancellation: ICancellationToken) => Promise<void>) | null,\n private readonly _cancellationToken?: ICancellationToken,\n ) {\n super();\n\n this._cancellationToken?.onCancellationRequested(() => {\n this.cancel();\n });\n }\n\n /** 这个方法不对外暴露,只提供给 queue 使用. */\n async safeExec(): Promise<void> {\n if (this._isCancel || this._isExec) {\n return;\n }\n\n try {\n this._isExec = true;\n await this._callback!(this._cancellationToken ?? CancellationToken.None);\n this._onSuccess.fire();\n } catch (err) {\n /** handler error */\n this._onFailure.fire(makeErrorBy(-1, 'exec error', err as Error));\n }\n }\n\n cancel(): void {\n if (this._isCancel) {\n return;\n }\n if (this._isExec) {\n return;\n }\n\n this._isCancel = true;\n this._callback = null;\n this._onCancel.fire();\n }\n}\n","/**\n * 异步任务队列\n */\nimport { Disposable } from '@/dispose';\nimport { AsyncTask, type IAsyncTask } from './task';\nimport type { ICancellationToken } from '../cancellation';\n\ntype IAsyncQueue = {\n /** 队列的任务并发数 */\n concurrent: number;\n};\n\nexport class AsyncQueue extends Disposable {\n private readonly _queue: AsyncTask[] = [];\n private readonly _maxConcurrent: number = 1;\n private _execCounter: number = 0;\n\n constructor(options: IAsyncQueue) {\n super();\n // 初始化最大并发数\n this._maxConcurrent = options.concurrent;\n }\n\n /** 添加一个异步任务到队列 */\n addTask(\n callback: (cancellation: ICancellationToken) => Promise<void>,\n cancellationToken?: ICancellationToken,\n ): IAsyncTask {\n if (cancellationToken?.isCancellationRequested) {\n return new AsyncTask(null);\n }\n const task = new AsyncTask(callback);\n // 将任务函数加入队列\n this._queue.push(this._store.add(task));\n // 尝试执行下一个任务\n this._next();\n\n return task;\n }\n\n // 执行下一个任务,如果当前并发数小于最大并发数,并且队列不为空,则从队列中取出一个任务并执行,否则什么都不做\n private _next() {\n if (this._queue.length && this._execCounter < this._maxConcurrent && this._queue.length > 0) {\n // 取出队列中的第一个任务函数,并从队列中移除它\n const task = this._queue.shift()!;\n // 增加当前并发数\n this._execCounter++;\n // 执行任务函数,并处理其返回的promise对象\n task.safeExec().finally(() => {\n // 不管成功还是失败,都要减少当前并发数,并执行下一个任务(递归调用)\n this._execCounter--;\n this._next();\n });\n }\n }\n}\n","import { makeSafeDisposable } from '@/dispose';\n\nexport function invokeNextLoop(fn: (...args: any[]) => void) {\n const handle = setTimeout(() => {\n fn();\n }, 0);\n return makeSafeDisposable(() => clearTimeout(handle));\n}\n"]}
@@ -4,7 +4,7 @@ export { B as Barrier, m as makeBarrierByPromise } from '../barrier-316Xonfd.cjs
4
4
  import { a as Disposable, S as SafeDisposable } from '../disposable-t-CVsiyHPL.cjs';
5
5
  import { I as IDisposable } from '../dispose-base-CAeXDpjg.cjs';
6
6
  import { E as Event } from '../emitter-CAfCtSTg.cjs';
7
- import { a as ILvErrorRef } from '../error-base-B4zaiJ5m.cjs';
7
+ import { a as LvErrorRef } from '../error-base-DOFtBFla.cjs';
8
8
  import '../linked-list-CUkue5DZ.cjs';
9
9
 
10
10
  /**
@@ -16,7 +16,7 @@ declare const sleep: (ms: number) => Promise<undefined>;
16
16
 
17
17
  interface IAsyncTask extends IDisposable {
18
18
  onSuccess: Event<[]>;
19
- onFailure: Event<[ILvErrorRef]>;
19
+ onFailure: Event<[LvErrorRef]>;
20
20
  onCancel: Event<[]>;
21
21
  /** 取消当前任务 */
22
22
  cancel: () => void;
@@ -4,7 +4,7 @@ export { B as Barrier, m as makeBarrierByPromise } from '../barrier-316Xonfd.js'
4
4
  import { a as Disposable, S as SafeDisposable } from '../disposable-t-B15Nu57y.js';
5
5
  import { I as IDisposable } from '../dispose-base-CAeXDpjg.js';
6
6
  import { E as Event } from '../emitter-DeM5mlEm.js';
7
- import { a as ILvErrorRef } from '../error-base-B4zaiJ5m.js';
7
+ import { a as LvErrorRef } from '../error-base-DOFtBFla.js';
8
8
  import '../linked-list-CUkue5DZ.js';
9
9
 
10
10
  /**
@@ -16,7 +16,7 @@ declare const sleep: (ms: number) => Promise<undefined>;
16
16
 
17
17
  interface IAsyncTask extends IDisposable {
18
18
  onSuccess: Event<[]>;
19
- onFailure: Event<[ILvErrorRef]>;
19
+ onFailure: Event<[LvErrorRef]>;
20
20
  onCancel: Event<[]>;
21
21
  /** 取消当前任务 */
22
22
  cancel: () => void;