{"version":3,"sources":["../src/consts.ts","../src/types/FastEvents.ts","../src/utils/parseEmitArgs.ts","../src/utils/isFastEventScope.ts","../src/utils/parseScopeArgs.ts","../src/utils/renameFn.ts","../src/utils/isFunction.ts","../src/scope.ts","../src/utils/isPathMatched.ts","../src/utils/removeItem.ts","../src/utils/getNodeByPath.ts","../src/utils/forEachDescendant.ts","../src/utils/collectBroadcastTargets.ts","../src/utils/isFastEventMessage.ts","../src/utils/isString.ts","../src/utils/expandable.ts","../src/utils/isSubsctiber.ts","../src/utils/isClass.ts","../src/utils/isFastEvent.ts","../src/utils/isAsyncIterable.ts","../src/utils/getListeners.ts","../src/executors/parallel.ts","../src/utils/expandEmitResults.ts","../src/utils/tryReturnError.ts","../src/iterator.ts","../src/utils/wrapPipeListener.ts","../src/utils/getWeakRef.ts","../src/utils/getPromiseResults.ts","../src/utils/isPromise.ts","../src/utils/resolveValue.ts","../src/event.ts"],"names":["__FastEvent__","__FastEventScope__","FastEventError","message","TimeoutError","UnboundError","AbortError","CancelError","QueueOverflowError","FastEventListenerFlags","parseEmitArgs","args","emitterMeta","scopeMeta","scopeExecutor","emitArgs","directMeta","opt","meta","isFastEventScope","target","parseScopeArgs","scopeContext","prefix","scopeObj","options","renameFn","fn","name","isFunction","FastEventScope","_FastEventScope","__publicField","emitter","initial","listener","scopePrefix","scopeThis","type","msg","result","timeout","scope","isPathMatched","path","pattern","pathLen","patternLen","i","removeItem","arr","condition","removedIndices","getNodeByPath","root","parts","node","part","forEachDescendant","basePath","callback","key","childNode","childPath","collectBroadcastTargets","delimiter","exactNode","targets","isFastEventMessage","isString","str","__expandable__","expandable","value","isExpandable","isSubsctiber","val","isClass","isFastEvent","isAsyncIterable","maybeIterable","getListeners","fastEventInstanct","nodes","listeners","parallel","execute","expandEmitResults","items","item","tryReturnError","e","FastEventIterator","eventEmitter","eventName","subscriber","offFn","_args","data","abort","resolver","nextMessage","enterTime","resolve","reject","error","createAsyncEventIterator","wrapPipeListener","pipes","decorator","getWeakRef","getPromiseResults","results","isPromise","resolveValue","input","FastEvent","transformOpt","r","hookName","onlyAsyncHook","hooks","hook","hookMethod","count","prepend","index","newListener","current","isRemove","iteratorOpts","iterator","noListener","finalOptions","oldListener","off","hasWildcard","entryParts","entry","listenerNode","messages","patterns","listenerMeta","lastFollowing","entryNode","traverseNodes","parentPath","catchErrors","listenerFn","isTransformed","errObj","executor","filter","metas","toRemove","executeor","singleSegment","transformFn","normalNodes","broadcastItems","descType","descMsg","descArgs","ret","transformed","payload","retain","tid"],"mappings":"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","file":"index.mjs","sourcesContent":["export const __FastEvent__ = Symbol.for(\"__FastEvent__\");\nexport const __FastEventScope__ = Symbol.for(\"__FastEventScope__\");\nexport class FastEventError extends Error {\n    constructor(message?: string) {\n        super(message);\n    }\n}\n\nexport class TimeoutError extends FastEventError {}\n// 当Scope没有绑定到了Emitter时提示这个错误\nexport class UnboundError extends FastEventError {}\nexport class AbortError extends FastEventError {}\nexport class CancelError extends FastEventError {}\nexport class QueueOverflowError extends FastEventError {}\n","/**\n * 事件相关\n */\nimport { TypedFastEventMessage, FastEventMessage } from \"./FastEventMessages\";\nimport { FastEventSubscriber } from \"./FastEventSubscribers\";\nimport { TypedFastEventListener, FastEventListenerNode } from \"./FastEventListeners\";\nimport type { FastListenerExecutor } from \"../executors\";\nimport type { FastListenerPipe } from \"../pipes\";\nimport { DeepPartial } from \"./utils/DeepPartial\";\nimport { FastEventIteratorOptions } from \"../iterator\";\n\nexport type FastEventOptions<Meta = Record<string, any>, Context = never> = {\n    id: string;\n    title: string;\n    debug: boolean;\n    // 事件分隔符\n    delimiter: string;\n    // 监听器函数执行上下文\n    context: Context;\n    // 当执行监听器函数出错时是否忽略,默认true\n    ignoreErrors: boolean;\n    // 额外的全局元数据，当触发事件时传递给监听器\n    meta: Meta;\n    // 当创建新监听器时回调,返回false中止添加监听器\n    onAddBeforeListener?: (\n        type: string,\n        listener: TypedFastEventListener,\n        options: FastEventListenOptions<Record<string, any>, Meta>,\n    ) => boolean | FastEventSubscriber | void;\n    onAddAfterListener?: (type: string, node: FastEventListenerNode) => void;\n    // 当移除监听器时回调\n    onRemoveListener?: (\n        type: string,\n        listener: TypedFastEventListener,\n        node: FastEventListenerNode,\n    ) => void;\n    // 当清空监听器时回调\n    onClearListeners?: () => void;\n    // 当监听器函数执行出错时的回调，用于诊断时使用,可以打印错误信息\n    onListenerError?: (\n        error: Error,\n        listener: TypedFastEventListener,\n        message: TypedFastEventMessage<any, Meta>,\n        args: FastEventListenerArgs<Meta> | undefined,\n    ) => void;\n    // 当执行监听器前时回调,返回false代表取消执行,any[]返回给emit\n    onBeforeExecuteListener?: (\n        message: TypedFastEventMessage<any, Meta>,\n        args: FastEventListenerArgs<Meta>,\n    ) => boolean | void | any[];\n    // 当执行监听器后时回调\n    onAfterExecuteListener?: (\n        message: TypedFastEventMessage<any, Meta>,\n        returns: any[],\n        listeners: FastEventListenerNode[],\n    ) => void;\n    /**\n     * 全局执行器\n     */\n    executor?: FastListenerExecutor;\n    /**\n     * 是否展开emit返回值,默认为false，用于将事件转发给其他FastEvent时使用\n     */\n    expandEmitResults?: boolean;\n    /**\n     * 对接收到的消息进行转换，用于将消息转换成其他格式\n     *\n     * new FastEvent({\n     *    transform:(message)=>{\n     *        message.payload\n     *    }\n     * })\n     */\n    transform?: (message: FastEventMessage) => any;\n};\n\nexport interface FastEvents {}\n\nexport type FastEventListenOptions<\n    Events extends Record<string, any> = Record<string, any>,\n    Meta = any,\n> = {\n    // 侦听执行次数，当为1时为单次侦听，为0时为永久侦听，其他值为执行次数,每执行一次减一，减到0时移除监听器\n    count?: number;\n    // 将监听器添加到监听器列表的头部\n    prepend?: boolean;\n    // 该监听器会在其他监听器执行完毕后再触发执行\n    flags?: number;\n    filter?: (\n        message: TypedFastEventMessage<Events, Meta>,\n        args: FastEventListenerArgs<Meta>,\n    ) => boolean;\n    // 当执行监听器前，如果此函数返回true则自动注销监听\n    off?: (\n        message: TypedFastEventMessage<Events, Meta>,\n        args: FastEventListenerArgs<Meta>,\n    ) => boolean;\n    // 对监听器函数进行包装装饰，返回包装后的函数\n    pipes?: FastListenerPipe[];\n    /**\n     * 为监听器添加一个tag，在监听器注册表中记录,用于调试使用\n     * emitter.on(type,listener,{tag:\"x\"})\n     * emitter.getListeners(tag)\n     */\n    tag?: string;\n    /**\n     * 异步迭代器选项\n     *\n     * 用于配置返回异步迭代器的参数\n     * \n     * 默认值是\n        {\n            overflow: \"expand\",\n            size: 10,\n            maxExpandSize: 100,\n        }\n     */\n    iterable?: FastEventIteratorOptions;\n};\n\nexport enum FastEventListenerFlags {\n    Transformed = 1,\n}\n\nexport type FastEventListenerArgs<M = Record<string, any>> = {\n    retain?: boolean;\n    meta?: DeepPartial<M> & Record<string, any>;\n    abortSignal?: AbortSignal; // 用于传递给监听器函数\n    /**\n     *\n     * allSettled: 使用Promise.allSettled()执行所有监听器\n     * race: 使用Promise.race()执行所有监听器，只有第一个执行完成就返回,其他监听器执行结果会被忽略\n     * balance: 尽可能平均执行各个监听器\n     * sequence: 按照监听器添加顺序依次执行\n     */\n    executor?: FastListenerExecutor;\n    /**\n     * 当emit参数解析完成后的回调，用于修改emit参数\n     */\n    parseArgs?: (message: TypedFastEventMessage, args: FastEventListenerArgs) => void;\n    /**\n     * 额外的标识\n     *\n     * - 1: transformed 当消息是经过transform转换后的消息时的标识\n     *\n     */\n    flags?: FastEventListenerFlags;\n    /**\n     * 如果消息经过转换前的原主题\n     */\n    rawEventType?: string;\n    /**\n     * 发布端前缀广播(当前仅 FastLiteEvent 实现运行时支持)\n     *\n     * 开启后,本次 emit 除命中自身路径外,同时唤醒 emit 终点节点\n     * 子树(不含终点自身)内所有已订阅监听器——含通配符订阅\n     * (`*` / `**`)与具体后代路径,每个后代收到改写为自身订阅\n     * 路径的事件消息。方向仅向下。\n     *\n     * - `true`:默认改写,自动把后代监听器的 message.type 替换为\n     *   该后代完整路径,其余字段原样透传。\n     * - 函数:逐个后代调用(后代按 DFS 先序),返回\n     *   `[message, args]` 覆盖原消息与参数;返回 `null`/falsy 跳过该后代。\n     *\n     * 注:正常匹配(emit 路径直接命中)不经 broadcast 改写。\n     */\n    broadcast?: true | ((\n        type: string,\n        message: FastEventMessage,\n        args: FastEventListenerArgs\n    ) => [FastEventMessage, FastEventListenerArgs] | FastEventMessage | null);\n};\n","import { TypedFastEventMessage } from \"../types/FastEventMessages\";\nimport { FastEventListenerArgs } from \"../types/FastEvents\";\n\nexport function parseEmitArgs<\n    Events extends Record<string, any> = Record<string, any>,\n    Meta = unknown,\n>(\n    args: IArguments,\n    emitterMeta: any,\n    scopeMeta?: any,\n    scopeExecutor?: any,\n): [TypedFastEventMessage<Events, Meta>, FastEventListenerArgs<Meta>] {\n    let message: TypedFastEventMessage<Events, Meta>;\n    let emitArgs: FastEventListenerArgs<Meta>;\n    let directMeta: any;\n    // 最常见路径优先：emit(type, payload[, retain|options])\n    if (typeof args[0] === \"string\") {\n        message = { type: args[0] as any, payload: args[1] } as TypedFastEventMessage<Events, Meta>;\n        const opt = args[2];\n        emitArgs = (opt === undefined\n            ? {}\n            : typeof opt === \"boolean\"\n              ? { retain: opt }\n              : opt) as FastEventListenerArgs<Meta>;\n        directMeta = undefined;\n    } else {\n        // 对象形式：emit(message[, retain|options])\n        message = Object.assign({} as TypedFastEventMessage<Events, Meta>, args[0]);\n        const opt = args[1];\n        emitArgs = (opt === undefined\n            ? {}\n            : typeof opt === \"boolean\"\n              ? { retain: opt }\n              : opt) as FastEventListenerArgs<Meta>;\n        directMeta = args[0].meta;\n    }\n    // meta 合并优先级：emitterMeta < scopeMeta < emitArgs.meta < 直接 meta\n    const meta = Object.assign({}, emitterMeta, scopeMeta, emitArgs.meta, directMeta);\n\n    if (Object.keys(meta).length === 0) {\n        delete message.meta;\n    } else {\n        message.meta = meta;\n    }\n\n    if (emitArgs.executor === undefined) {\n        emitArgs.executor = scopeExecutor;\n    }\n\n    return [message, emitArgs];\n}\n","import type { FastEventScope } from \"../scope\"\n\nexport function isFastEventScope(target: any): target is FastEventScope {\n    if (!target) return false\n    return typeof target === 'object' && '__FastEventScope__' in target\n}","import { isFastEventScope } from \"./isFastEventScope\"\n\nexport function parseScopeArgs(args: IArguments, scopeMeta?: any, scopeContext?: any) {\n    const prefix = args[0]\n    const scopeObj = isFastEventScope(args[1]) ? args[1] : undefined\n    const options = (scopeObj ? args[2] : args[1]) || {}\n    options.meta = Object.assign({}, scopeMeta, options?.meta)\n    options.context = options.context !== undefined ? options.context : scopeContext\n    return [prefix, scopeObj, options]\n}","\n\n\n\n/**\n * 重命名函数，修改函数的 name 属性\n * @param fn 需要重命名的函数\n * @param name 新的函数名\n * @returns 返回重命名后的函数\n */\nexport function renameFn<F>(fn: F, name: string): F {\n    Object.defineProperty(fn, 'name', {\n        value: name || 'anonymous',\n        configurable: true\n    });\n    return fn;\n}\n","export function isFunction(fn: any): fn is Function {\n    return fn && typeof (fn) == \"function\"\n}","// oxlint-disable no-unused-vars\nimport { UnboundError } from \"./consts\";\nimport type { FastEvent } from \"./event\";\nimport { FastListenerExecutor } from \"./executors/types\";\nimport {\n    ScopeEvents,\n    GetClosestEvents,\n    KeyOf,\n    MutableMessage,\n    UnTransformedEvents,\n    ReplaceWildcard,\n    GetPayload,\n    Fallback,\n    GetClosestEventPayload,\n    FastEventListeners,\n    Expand,\n    TypedFastEventAnyListener,\n} from \"./types\";\nimport {\n    FastEventEmitMessage,\n    TypedFastEventMessage,\n    FastEventMeta,\n    FastEventMessage,\n} from \"./types/FastEventMessages\";\nimport { FastEventSubscriber } from \"./types/FastEventSubscribers\";\nimport { TypedFastEventListener, FastEventCommonListener } from \"./types/FastEventListeners\";\nimport {\n    FastEventListenerArgs,\n    FastEventListenOptions,\n    FastEventListenerFlags,\n} from \"./types/FastEvents\";\nimport { IsTransformedEvent } from \"./types/transformed/IsTransformedEvent\";\nimport { ExtendWildcardEvents } from \"./types/wildcards/ExtendWildcardEvents\";\nimport { PayloadValues } from \"./types/transformed/PayloadValues\";\nimport { ValueOf } from \"./types/utils/ValueOf\";\nimport { Dict } from \"./types/utils/Dict\";\nimport { DeepPartial } from \"./types/utils/DeepPartial\";\nimport { IsAllTransformed } from \"./types/transformed/IsAllTransformed\";\nimport { parseEmitArgs } from \"./utils/parseEmitArgs\";\nimport { parseScopeArgs } from \"./utils/parseScopeArgs\";\nimport { renameFn } from \"./utils/renameFn\";\nimport { PickPayload } from \"./types/transformed/PickPayload\";\nimport { isFunction } from \"./utils/isFunction\";\nimport { FastEventIterator } from \"./iterator\";\nimport { GetClosestMessage } from \"./types/closest/GetClosestMessage\";\nimport { InMatchedEvent } from \"./types/wildcards/InMatchedEvent\";\n\nexport type FastEventScopeOptions<Meta = Record<string, any>, Context = never> = {\n    meta: FastEventScopeMeta & FastEventMeta & Meta;\n    context: Context;\n    executor?: FastListenerExecutor;\n    /**\n     * 对接收到的消息进行转换，用于将消息转换成其他格式\n     *\n     * new FastEvent({\n     *    transform:(message)=>{\n     *        message.payload\n     *    }\n     * })\n     */\n    transform?: (message: FastEventMessage) => any;\n};\n\nexport interface FastEventScopeMeta {\n    scope: string;\n}\n\nexport interface IFastEventScope<\n    Events extends Record<string, any> = Record<string, any>,\n    Meta extends Record<string, any> = Record<string, any>,\n    Context = never,\n> {\n    __FastEventScope__: boolean;\n    readonly __events__: Events;\n    readonly __meta__: Meta;\n    readonly __context__: Context;\n}\n\nexport class FastEventScope<\n    Events extends Record<string, any> = Record<string, any>,\n    Meta extends Record<string, any> = Record<string, any>,\n    Context = never,\n    Types extends keyof Events = keyof Events,\n    FinalMeta extends Record<string, any> = FastEventMeta & FastEventScopeMeta & Meta,\n> {\n    __FastEventScope__: boolean = true;\n    // 添加类型标记\n    readonly __events__!: Events;\n    readonly __meta__!: Meta & FastEventScopeMeta;\n    readonly __context__!: Context;\n    private _options: DeepPartial<FastEventScopeOptions<FinalMeta, Context>> = {};\n\n    declare types: {\n        events: ExtendWildcardEvents<Events>;\n        eventNames: KeyOf<ExtendWildcardEvents<Events>>;\n        messages: MutableMessage<Events, FinalMeta>;\n        rawEvents: Events;\n        meta: FinalMeta;\n        listeners: FastEventListeners<Events, Expand<FastEventMeta & Meta & Record<string, any>>>;\n        anyListener: TypedFastEventAnyListener<\n            Events,\n            Expand<FastEventMeta & Meta & Record<string, any>>\n        >;\n        listener: FastEventCommonListener<\n            FastEventMessage,\n            Expand<FastEventMeta & Meta & Record<string, any>>\n        >;\n    };\n    prefix: string = \"\";\n    emitter!: FastEvent<any>;\n    constructor(options?: DeepPartial<FastEventScopeOptions<FinalMeta, Context>>) {\n        this._options = Object.assign(\n            {},\n            this._initOptions(options),\n        ) as unknown as FastEventScopeOptions<FinalMeta, Context>;\n    }\n    get context(): Fallback<Context, typeof this> {\n        return (this.options.context || this) as Fallback<Context, typeof this>;\n    }\n    get options() {\n        return this._options as FastEventScopeOptions<FinalMeta, Context>;\n    }\n    /**\n     * 获取监听器\n     * @returns 监听器\n     */\n    get listeners() {\n        return this.emitter.getListeners(this.prefix);\n    }\n    bind(\n        emitter: FastEvent<any>,\n        prefix: string,\n        options?: DeepPartial<FastEventScopeOptions<FinalMeta, Context>>,\n    ) {\n        this.emitter = emitter;\n        this._options = Object.assign(\n            this._options,\n            {\n                scope: prefix,\n            },\n            options,\n        ) as unknown as Required<FastEventScopeOptions<FinalMeta, Context>>;\n        if (prefix.length > 0 && !prefix.endsWith(emitter.options.delimiter!)) {\n            this.prefix = prefix + emitter.options.delimiter;\n        }\n    }\n\n    /**\n     * 初始化选项\n     *\n     * 本方法主要供子类重载\n     *\n     * @param initial - 可选的初始字典对象\n     * @returns 返回传入的初始字典对象\n     */\n    _initOptions(initial: Dict | undefined) {\n        return initial;\n    }\n    /**\n     * 获取作用域监听器\n     * 当启用作用域时,对原始监听器进行包装,添加作用域前缀处理逻辑\n     * @param listener 原始事件监听器\n     * @returns 包装后的作用域监听器\n     * @private\n     */\n    private _getScopeListener(listener: TypedFastEventListener): TypedFastEventListener {\n        const scopePrefix = this.prefix;\n        if (scopePrefix.length === 0) return listener;\n        // 如果没有指定监听器，则使用onMessage作为监听器\n        if (!listener) {\n            throw new Error();\n        }\n        // oxlint-disable-next-line typescript/no-this-alias\n        const scopeThis = this;\n        const scopeListener = renameFn(function (\n            message: TypedFastEventMessage,\n            args: FastEventListenerArgs,\n        ) {\n            const type = args.rawEventType || message.type;\n            if (type.startsWith(scopePrefix)) {\n                // 1. 判断是否经过全局Transform转换\n                // 消息是否经过转换，如果经过转换，由于结果不确定，所以不进行前缀处理，直接将消息传递给监听器\n                const isTransformed = ((args.flags || 0) & FastEventListenerFlags.Transformed) > 0;\n                let msg = isTransformed\n                    ? message\n                    : Object.assign({}, message, {\n                          type: type.substring(scopePrefix.length),\n                      });\n\n                return listener.call(scopeThis.context, msg, args);\n            }\n        }, listener.name) as TypedFastEventListener;\n        return scopeListener;\n    }\n    private _getScopeType(type: string) {\n        return type === undefined ? undefined : this.prefix + type;\n    }\n    private _fixScopeType(type: string) {\n        return type.startsWith(this.prefix) ? type.substring(this.prefix.length) : type;\n    }\n    public on<T extends string = KeyOf<Events> | \"**\">(\n        type: T,\n        options?: FastEventListenOptions<Events, FinalMeta>,\n    ): T extends IsTransformedEvent<Events, T>\n        ? FastEventIterator<\n              T extends \"**\"\n                  ? IsAllTransformed<Events> extends true\n                      ? PayloadValues<Events>\n                      : any\n                  : PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n          >\n        : FastEventIterator<\n              T extends \"**\" ? MutableMessage<Events> : GetClosestMessage<Events, T, FinalMeta>\n          >;\n\n    // 指定监听器\n    public on<T extends string = KeyOf<Events> | \"**\">(\n        type: T,\n        listener: FastEventCommonListener<\n            T extends IsTransformedEvent<Events, T>\n                ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n                : T extends \"**\"\n                  ? MutableMessage<Events>\n                  : GetClosestMessage<Events, T, FinalMeta>,\n            FinalMeta,\n            Fallback<Context, typeof this>\n        >,\n        options?: FastEventListenOptions,\n    ): FastEventSubscriber;\n    public on(): FastEventSubscriber | FastEventIterator<any> {\n        if (!this.emitter) throw new UnboundError();\n        const args = [...arguments] as [any, any, any];\n        args[0] = this._getScopeType(args[0]);\n        args[1] = this._getScopeListener(args[1]);\n        return this.emitter.on(...args);\n    }\n    /**\n     * 只订阅一次\n     * @param type\n     * @param options\n     */\n    public once<T extends string = KeyOf<Events> | \"**\">(\n        type: T,\n        listener: FastEventCommonListener<\n            T extends IsTransformedEvent<Events, T>\n                ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n                : T extends \"**\"\n                  ? MutableMessage<Events>\n                  : GetClosestMessage<Events, T, FinalMeta>,\n            Meta,\n            Fallback<Context, typeof this>\n        >,\n        options?: FastEventListenOptions,\n    ): FastEventSubscriber;\n    public once(): FastEventSubscriber {\n        return this.on(arguments[0], arguments[1], Object.assign({}, arguments[2], { count: 1 }));\n    }\n    /**\n     * 订阅全部\n     * @param options\n     */\n    public onAny(\n        options?: FastEventListenOptions<Events, FinalMeta>,\n    ): FastEventIterator<MutableMessage<Events, FinalMeta>>;\n\n    public onAny(\n        listener: FastEventCommonListener<\n            MutableMessage<Events, FinalMeta>,\n            Meta,\n            Fallback<Context, typeof this>\n        >,\n        options?: FastEventListenOptions<Events, FinalMeta>,\n    ): FastEventSubscriber;\n    onAny() {\n        return this.on(\"**\" as any, ...(arguments as any)) as any;\n    }\n\n    off(listener: TypedFastEventListener<any, any, any>): void;\n    off(type: string, listener: TypedFastEventListener<any, any, any>): void;\n    off(type: Types, listener: TypedFastEventListener<any, any, any>): void;\n    off(type: string): void;\n    off(type: Types): void;\n    off() {\n        const args = arguments as unknown as [any, any];\n        if (typeof args[0] === \"string\") {\n            args[0] = this._getScopeType(args[0]);\n        }\n        this.emitter.off(...args);\n    }\n    offAll() {\n        this.emitter.offAll(this.prefix.substring(0, this.prefix.length - 1));\n    }\n    clear() {\n        this.emitter.clear(this.prefix.substring(0, this.prefix.length - 1));\n    }\n    /**\n     * 触发事件\n     * @param type\n     * @param directive\n     */\n    public emit<R = any, T extends Types = Types>(\n        type: T,\n        payload?: UnTransformedEvents<Events>[T],\n        retain?: boolean,\n    ): R[];\n    public emit<R = any, T extends string = string>(\n        type: ReplaceWildcard<T> | Types,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<Events>, T>\n            : any,\n        retain?: boolean,\n    ): R[];\n    public emit<R = any, T extends string = string>(\n        type: ReplaceWildcard<T> | Types,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<Events>, T>\n            : any,\n        options?: FastEventListenerArgs<Partial<FinalMeta>>,\n    ): R[];\n    public emit<R = any, T extends KeyOf<Events> = KeyOf<Events>>(\n        message: FastEventEmitMessage<T, UnTransformedEvents<Events>[T], Partial<FinalMeta>>,\n        retain?: boolean,\n    ): R[];\n    public emit<R = any>(message: MutableMessage<Events, FinalMeta>, retain?: boolean): R[];\n    public emit<R = any>(\n        message: {\n            type: keyof Events;\n        },\n        retain?: boolean,\n    ): R[];\n    public emit<R = any, T extends string = string>(\n        type: T,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<Events>, T>\n            : any,\n        retain?: boolean,\n    ): R[];\n    public emit(): any {\n        let [message, args] = parseEmitArgs(\n            arguments,\n            this.emitter.options.meta,\n            this.options.meta,\n            this.options.executor,\n        );\n\n        this._transformMessage(message as any, args);\n        message.type = this._getScopeType(message.type)!;\n        return this.emitter.emit(message as any, args);\n    }\n\n    private _transformMessage(message: FastEventMessage, args: FastEventListenerArgs<FinalMeta>) {\n        if (isFunction(this._options.transform)) {\n            args.rawEventType = this._getScopeType(message.type)!;\n            args.flags = (args.flags || 0) | FastEventListenerFlags.Transformed;\n            message.payload = this._options.transform.call(this, message);\n        }\n    }\n\n    public async emitAsync<R = any, T extends Types = Types>(\n        type: T,\n        payload?: UnTransformedEvents<Events>[T],\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any, T extends string = string>(\n        type: ReplaceWildcard<T> | Types,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<Events>, T>\n            : any,\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any, T extends string = string>(\n        type: ReplaceWildcard<T> | Types,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<Events>, T>\n            : any,\n        options?: FastEventListenerArgs<Partial<FinalMeta>>,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any, T extends KeyOf<Events> = KeyOf<Events>>(\n        message: FastEventEmitMessage<T, UnTransformedEvents<Events>[T], Partial<FinalMeta>>,\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any>(\n        message: MutableMessage<Events, FinalMeta>,\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any>(\n        message: {\n            type: keyof Events;\n        },\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any, T extends string = string>(\n        type: T,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<Events>, T>\n            : any,\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n\n    public async emitAsync<R = any>(): Promise<[R | Error][]> {\n        const results = await Promise.allSettled(this.emit.apply(this, arguments as any));\n        return results.map((result) => {\n            if (result.status === \"fulfilled\") {\n                return result.value;\n            } else {\n                return result.reason;\n            }\n        });\n    }\n\n    public async waitFor<T extends string = KeyOf<Events>>(\n        type: T,\n        timeout?: number,\n    ): Promise<\n        T extends IsTransformedEvent<Events, T>\n            ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n            : FastEventMessage<T, GetClosestEventPayload<Events, T>, FinalMeta>\n    >;\n    public async waitFor<T extends string = string>(\n        type: T,\n        timeout?: number,\n    ): Promise<TypedFastEventMessage<Events, FinalMeta>>;\n\n    public async waitFor(): Promise<any> {\n        const type = arguments[0] as string;\n        const timeout = arguments[1] as number;\n        const message = await this.emitter.waitFor(this._getScopeType(type)!, timeout);\n        const scopeMessage = Object.assign({}, message, {\n            type: this._fixScopeType(message.type),\n        });\n        return scopeMessage;\n    }\n    /**\n     * 创建一个新的作用域实例\n     * @param prefix - 作用域前缀\n     * @returns 新的FastEventScope实例\n     *\n     * @description\n     * 基于当前作用域创建一个新的子作用域。新作用域会继承当前作用域的所有特性，\n     * 并在事件类型前添加额外的前缀。这允许创建层级化的事件命名空间。\n     *\n     * 作用域的特性：\n     * - 自动为所有事件类型添加前缀\n     * - 在触发事件时自动添加前缀\n     * - 在接收事件时自动移除前缀\n     * - 支持多层级的作用域嵌套\n     *\n     * @example\n     * ```ts\n     * const emitter = new FastEvent();\n     * const userScope = emitter.scope('user');\n     * const profileScope = userScope.scope('profile');\n     *\n     * // 在profileScope中监听'update'事件\n     * // 实际监听的是'user/profile/update'\n     * profileScope.on('update', (data) => {\n     *   console.log('Profile updated:', data);\n     * });\n     *\n     * // 在profileScope中触发'update'事件\n     * // 实际触发的是'user/profile/update'\n     * profileScope.emit('update', { name: 'John' });\n     * ```\n     */\n\n    scope<\n        E extends Record<string, any> = Record<string, any>,\n        P extends string = string,\n        M extends Record<string, any> = Record<string, any>,\n        C = Context,\n    >(\n        prefix: P,\n        options?: DeepPartial<FastEventScopeOptions<Partial<FinalMeta> & M, C>>,\n    ): FastEventScope<ScopeEvents<Events & E, P>, FinalMeta & M, C>;\n    scope<\n        E extends Record<string, any> = Record<string, any>,\n        P extends string = string,\n        M extends Record<string, any> = Record<string, any>,\n        C = Context,\n        ScopeInstance extends IFastEventScope<Record<string, any>, any, any> = FastEventScope<\n            Record<string, any>,\n            any,\n            any\n        >,\n    >(\n        prefix: P,\n        scopeObj: ScopeInstance,\n        options?: DeepPartial<FastEventScopeOptions<Partial<FinalMeta> & M, C>>,\n    ): FastEventScope<ScopeEvents<Events & E, P>, FinalMeta & M, C> & ScopeInstance; //FastEventScopeExtend<Events & E, P, ScopeInstance, Meta>;\n    scope<\n        E extends Record<string, any> = Record<string, any>,\n        P extends string = string,\n        M extends Record<string, any> = Record<string, any>,\n        C = Context,\n    >(): any {\n        const [prefix, scopeObj, options] = parseScopeArgs(\n            arguments,\n            this.options.meta,\n            this.options.context,\n        );\n        let scope: FastEventScope<ScopeEvents<Events, P> & E, FinalMeta & M, C>;\n        if (scopeObj) {\n            scope = scopeObj;\n        } else {\n            scope = new FastEventScope<ScopeEvents<Events, P> & E, FinalMeta & M, C>();\n        }\n        scope.bind(this.emitter as any, this.prefix + prefix, options);\n        return scope;\n    }\n}\n","/**\n *\n * 判断path是否与pattern匹配\n *\n * isPathMatched(\"a.b.c\",\"a.b.c\")  == true\n * isPathMatched(\"a.b.c\",\"a.b.*\")  == true\n * isPathMatched(\"a.b.c\",\"a.*.*\")  == true\n * isPathMatched(\"a.b.c\",\"*.*.*\")  == true\n * isPathMatched(\"a.b.c\",\".b.*\")  == true\n * isPathMatched(\"a.b.c.d\",\"a.**\")  == true\n *\n * - '**' 匹配后续的\n * - '*' 匹配任意数量的字符，包括零个字符\n *\n * @param path\n * @param pattern\n */\nexport function isPathMatched(path: string[], pattern: string[]): boolean {\n    const pathLen = path.length;\n    const patternLen = pattern.length;\n\n    // 快速失败: 长度不匹配(除非以 ** 结尾)\n    if (pathLen !== patternLen && (patternLen === 0 || pattern[patternLen - 1] !== \"**\")) {\n        return false;\n    }\n\n    // 处理 ** 通配符: 直接检查前缀匹配\n    if (patternLen > 0 && pattern[patternLen - 1] === \"**\") {\n        // 检查前 n-1 个元素是否匹配\n        for (let i = 0; i < patternLen - 1; i++) {\n            if (pattern[i] !== \"*\" && pattern[i] !== path[i]) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    // 普通匹配: 逐元素比较\n    for (let i = 0; i < pathLen; i++) {\n        if (pattern[i] !== \"*\" && pattern[i] !== path[i]) {\n            return false;\n        }\n    }\n\n    return true;\n}\n","/**\n * 从数组中移除满足条件的元素并返回被移除元素的索引\n * @param {any[]} arr - 需要操作的数组\n * @param {(item: any) => boolean} condition - 判断元素是否应该被移除的条件函数\n * @returns {number[]} 被移除元素在原数组中的索引集合\n */\nexport function removeItem(arr: any[], condition: (item: any) => boolean) {\n    const removedIndices: number[] = [];\n    // 从后往前遍历，避免删除元素时索引变化的问题\n    for (let i = arr.length - 1; i >= 0; i--) {\n        if (condition(arr[i])) {\n            removedIndices.push(i); // 记录原始索引\n            arr.splice(i, 1); // 删除元素\n        }\n    }\n\n    // 因为是从后往前遍历的，所以索引是降序的，需要反转得到升序结果\n    return removedIndices.reverse();\n}\n","import type { FastEventListenerNode } from \"../types\";\n\n/**\n * 沿精确路径段(不跟通配符)从根节点走到终点节点。\n *\n * 用于 broadcast:确定 emit 精确路径的终点节点,作为后代遍历的起点。\n * 与 _traverseToPath 不同——后者沿 parts 匹配(含通配符),本函数只走精确 key。\n *\n * @param root - 监听器树根节点\n * @param parts - 事件路径段数组\n * @returns 终点节点;任一段不存在则 undefined\n */\nexport function getNodeByPath(\n    root: FastEventListenerNode,\n    parts: string[],\n): FastEventListenerNode | undefined {\n    let node: FastEventListenerNode | undefined = root;\n    for (const part of parts) {\n        if (node && part in node) {\n            node = node[part] as FastEventListenerNode;\n        } else {\n            return undefined;\n        }\n    }\n    return node;\n}\n","import type { FastEventListenerNode } from \"../types\";\n\n/**\n * 先序遍历 node 的所有后代节点(不含 node 自身),用于 broadcast 收集后代覆盖监听器。\n *\n * 含通配符 key(* / **)的节点;__listeners 为空的中间节点也会被访问\n * (由调用方按需跳过)。先序:父先于子。\n *\n * @param node - 遍历起点(自身不回调)\n * @param basePath - 起点的完整路径段\n * @param callback - 每个后代节点的回调,接收(完整路径段, 节点)\n */\nexport function forEachDescendant(\n    node: FastEventListenerNode,\n    basePath: string[],\n    callback: (path: string[], node: FastEventListenerNode) => void,\n): void {\n    for (const [key, childNode] of Object.entries(node)) {\n        if (key.startsWith(\"__\")) continue;\n        if (!childNode) continue;\n        const childPath = [...basePath, key];\n        callback(childPath, childNode as FastEventListenerNode); // 先序:父先于子\n        forEachDescendant(childNode as FastEventListenerNode, childPath, callback);\n    }\n}\n","import type { FastEventListenerNode } from \"../types\";\nimport { getNodeByPath } from \"./getNodeByPath\";\nimport { forEachDescendant } from \"./forEachDescendant\";\n\n/** broadcast 的后代覆盖目标:节点 + 其完整事件类型(路径字符串) */\nexport type BroadcastTarget = { node: FastEventListenerNode; type: string };\n\n/**\n * 收集 broadcast 的后代覆盖目标:从 emit 精确路径终点节点出发,\n * 先序遍历其子树(不含终点自身),返回所有后代 [{node, type}]。\n *\n * @param root - 监听器树根节点\n * @param parts - emit 事件路径段数组\n * @param delimiter - 路径分隔符\n * @returns 后代目标数组(先序);精确终点不存在则空数组\n */\nexport function collectBroadcastTargets(\n    root: FastEventListenerNode,\n    parts: string[],\n    delimiter: string,\n): BroadcastTarget[] {\n    const exactNode = getNodeByPath(root, parts);\n    if (!exactNode) return [];\n    const targets: BroadcastTarget[] = [];\n    forEachDescendant(exactNode, parts, (path, node) => {\n        targets.push({ node, type: path.join(delimiter) });\n    });\n    return targets;\n}\n","import { TypedFastEventMessage } from \"../types/FastEventMessages\";\n\nexport function isFastEventMessage(msg: any): msg is TypedFastEventMessage {\n    if (!msg) return false;\n    return typeof msg === \"object\" && \"type\" in msg;\n}\n","export function isString(str: any): str is string {\n    return str && typeof (str) === \"string\"\n}","/**\n * \n * \n * 用于包括输入值为可展开的对象\n * \n * \n * 用在emit事件\n * \n * emitter1 = new FastEvent()\n * emitter2 = new FastEvent()\n * \n * emitter1.on(\"xxx\",(message)=>{\n *      return emitter2.emit(message)\n * })\n * \n * emitter2.on(\"xxx\",()=>1)\n * emitter2.on(\"xxx\",()=>2)\n * \n * const results = emitter1.emit(\"xxx\")\n * // results == [[1,2]] 而不 [1,2]，因为emitter2.emit返回的是一个[]\n * \n * expandable的作用就是对emit结果进行包括，当isExpandable时，在emit内部进行展开\n * \n * \n * \n * \n * emitter1.on(\"xxx\",(message)=>{\n *      // 告诉emitter2.emit返回的是一个expandable对象\n *      // 然后在内部就展开此对象\n *      return emitter2.emit(message)\n * })\n * \n*  const results = emitter1.emit(\"xxx\")\n * // results ==  [1,2]\n * \n * 为了实现对结果数据的展开处理，在emit内部需要对监听器的执行结果进行依次检查\n * 这多了一个迭代操作，为了不影响性能，可以关闭此特性\n * options.expandEmitResults = false\n * \n * \n */\n\nexport const __expandable__ = Symbol.for('__expandable__')\n\nexport function expandable(value: any) {\n    value[__expandable__] = true\n    return value\n}\n\nexport function isExpandable(value: any) {\n    return value && value[__expandable__]\n}","import { FastEventSubscriber } from \"../types/FastEventSubscribers\";\n\nexport function isSubsctiber(val: any): val is FastEventSubscriber {\n    return val && typeof val === \"object\" && \"off\" in val && \"listener\" in val;\n}\n","\n\nexport function isClass(target: unknown): target is new (...args: any[]) => any {\n    return typeof target === 'function' &&\n        (target.toString().startsWith('class ') ||\n            target.prototype?.constructor === target);\n}","import { FastEvent } from \"../event\"\n\n\nexport function isFastEvent(target: any): target is FastEvent {\n    if (!target) return false\n    return typeof target === 'object' && '__FastEvent__' in target\n}","/**\n * 判断是否为可异步迭代对象（AsyncIterable）\n * 即具有 Symbol.asyncIterator 方法的对象\n *\n * @param value - 要检查的值\n * @returns 如果是可异步迭代对象返回 true\n */\nexport function isAsyncIterable<T = any>(value: unknown): value is AsyncIterable<T> {\n    if (value === null || typeof value !== \"object\") {\n        return false;\n    }\n\n    const maybeIterable = value as Partial<AsyncIterable<T>>;\n    const asyncIteratorSymbol = Symbol.asyncIterator;\n\n    return (\n        typeof (maybeIterable as any)[asyncIteratorSymbol] === \"function\" ||\n        typeof (maybeIterable as any)[\"@@asyncIterator\"] === \"function\"\n    );\n}\n","import { FastEvent } from \"../event\";\nimport type { FastLiteEvent } from \"../liteEvent\";\nimport { FastEventListenerMeta, FastEventListenerNode } from \"../types\";\n\n/**\n * 获取指定类型的所有事件监听器\n */\nexport function getListeners(\n    emitter: FastEvent | FastLiteEvent,\n    type: string,\n): FastEventListenerMeta[] {\n    const fastEventInstanct = emitter as any;\n    const nodes: FastEventListenerNode[] = [];\n    const parts = type.split(fastEventInstanct._delimiter);\n    fastEventInstanct._traverseToPath(emitter.listeners, parts, (node: any) => {\n        nodes.push(node);\n    });\n    const listeners: any[] = [];\n    nodes.map((node) => {\n        listeners.push(...node.__listeners);\n    });\n    return listeners;\n}\n","import { FastListenerExecutor } from \"./types\";\n\n/**\n *\n */\nexport const parallel = (): FastListenerExecutor => {\n    return (listeners, message, args, execute) => {\n        return listeners.map((listener, i) =>\n            execute.call(listeners[i], listener, message, args, true),\n        );\n    };\n};\n","import { isExpandable } from \"./expandable\";\n/**\n * \n * 判断成员isExpandable，如果是则说明是一个数组，则原地展开\n * \n * \n */\nexport function expandEmitResults(items: any[]): any[] {\n    for (let i = 0; i < items.length; i++) {\n        const item = items[i]\n        if (Array.isArray(item) && isExpandable(item)) {\n            items.splice(i, 1, ...item)\n            i += item.length - 1\n        }\n    }\n    return items\n\n}\n\n\n// import { expandable } from \"./expandable\";\n// const items = [1, 2, expandable([3, 4]), 0, 0, expandable([5, 6]), expandable([7, 8]), 9, 10, 11]\n// // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]\n// expandEmitResults(items)\n// console.log(items)","\n\n/**\n * 包装 Promise，将 catch 的错误转换为正常返回值\n * @param fn 需要包装的 Promise\n * @returns 包装后的 Promise，如果发生错误则返回错误对象\n */\nexport function tryReturnError(fn: Promise<any>, callback?: (e: any) => any): Promise<any> {\n    return fn.catch((e) => {\n        if (callback) callback(e)\n        return Promise.resolve(e)\n    })\n}\n","/**\n * FastEventIterator - 使用异步迭代器从 FastEvent 或 FastEventScope 订阅事件\n * 重构：使用 queue.ts 中的队列参数和逻辑\n */\n\nimport { AbortError } from \"./consts\";\nimport type { FastEvent } from \"./event\";\nimport type { FastEventScope } from \"./scope\";\nimport type { FastEventMessage } from \"./types/FastEventMessages\";\nimport type { FastEventListener } from \"./types/FastEventListeners\";\nimport type { FastEventListenerArgs, FastEventListenOptions } from \"./types/FastEvents\";\n\n// 溢出策略类型\nexport type FastQueueOverflows =\n    | \"drop\" // 当缓冲区满时，丢弃新消息\n    | \"expand\" // 当缓冲区满时，扩展缓冲区，每次扩展size，直到缓冲区大小达到maxSize\n    | \"slide\" // 当缓冲区满时，将缓冲区中的消息向前移动，丢弃旧的消息\n    | \"throw\"; // 当缓冲区满时，抛出异常\n\n// FastEventIterator 配置选项\nexport interface FastEventIteratorOptions<T = FastEventMessage> {\n    /** 缓冲区默认大小（默认：100） */\n    size?: number;\n    /** 缓冲区扩展到多大时不再扩展（默认：1000） */\n    maxExpandSize?: number;\n    /** 当扩展到最大大小后的溢出策略（默认：'slide'） */\n    expandOverflow?: Omit<FastQueueOverflows, \"expand\">;\n    /** 溢出策略（默认：'slide'） */\n    overflow?: FastQueueOverflows;\n    /** 消息生命周期（毫秒），0表示不启用（默认：0） */\n    lifetime?: number;\n    /** 当新消息到达时触发此回调 */\n    onPush?: (newMessage: T, messages: [T, number][]) => void;\n    /** 当消息被弹出时触发此回调，可以在此对消息队列进行排序等操作 */\n    onPop?: (messages: [T, number][], hasNew: boolean) => [T, number] | undefined;\n    /** 当消息被丢弃时触发此回调 */\n    onDrop?: (message: T) => void;\n    /** 错误处理函数，返回true表示继续迭代，false表示停止迭代 */\n    onError?: (error: Error) => boolean | Promise<boolean>;\n    /** 信号，用于取消迭代 */\n    signal?: AbortSignal;\n}\n\n/**\n * 方法装饰器类型定义（TypeScript 5.0+ 新标准）\n *\n * 新装饰器标准使用上下文对象和值，而不是传统的 (target, propertyKey, descriptor)\n */\n\n/**\n * 可作为装饰器使用的迭代器\n *\n * 关键设计：通过交叉类型实现多态\n * - 装饰器工厂：emitter.on(\"event\", options)\n * - 方法装饰器：@emitter.on(\"event\")\n * - 异步迭代器：for await (const msg of emitter.on(\"event\"))\n */\nexport type WithListenerDecorator<T extends FastEventIterator> = T & ListenerDecorator;\n\nexport type ListenerDecorator = (\n    value: (...args: any[]) => any,\n    context: ClassMethodDecoratorContext,\n) => void;\n\nexport type IListenerDecoratorBuilder = (\n    type: string,\n    options?: FastEventListenOptions,\n) => ListenerDecorator;\n\nexport class FastEventIterator<T = any> implements AsyncIterableIterator<T> {\n    private resolvers: Array<(value: IteratorResult<any>) => void> = [];\n    private errorResolvers: Array<(error: Error) => void> = [];\n    private isStopped = false; // 已经停止迭代\n    private options: Required<\n        Omit<FastEventIteratorOptions<T>, \"onPush\" | \"onPop\" | \"onDrop\" | \"onError\" | \"signal\">\n    > & {\n        onPush?: FastEventIteratorOptions<T>[\"onPush\"];\n        onPop?: FastEventIteratorOptions<T>[\"onPop\"];\n        onDrop?: FastEventIteratorOptions<T>[\"onDrop\"];\n        onError?: FastEventIteratorOptions<T>[\"onError\"];\n        signal?: AbortSignal;\n    };\n    private currentSize: number; // 当前缓冲区大小\n    private hasNewMessage: boolean = false; // 自上次pop后是否有新消息\n    private _listener: FastEventListener;\n    private _ready: boolean = false;\n    private _listenOptions?: FastEventListenOptions;\n    private _cleanups: (() => void)[] = [];\n    error: Error | null = null;\n    buffer: [T, number][] = []; // 使用 [message, timestamp] 元组存储，支持 lifetime 机制\n    constructor(\n        private eventEmitter: FastEvent<any> | FastEventScope<any, any, any>,\n        private eventName: string,\n        options: FastEventIteratorOptions<T> = {},\n    ) {\n        const defaultSize = 20;\n        const defaultMaxExpandSize = 100;\n\n        this.options = {\n            size: options.size ?? defaultSize,\n            maxExpandSize: options.maxExpandSize ?? defaultMaxExpandSize,\n            expandOverflow: options.expandOverflow ?? \"slide\",\n            overflow: options.overflow ?? \"slide\",\n            lifetime: options.lifetime ?? 0,\n            onPush: options.onPush,\n            onPop: options.onPop,\n            onDrop: options.onDrop,\n            onError: options.onError ?? (() => true),\n            signal: options.signal,\n        };\n\n        // 确保 currentSize 被正确初始化\n        this.currentSize = this.options.size;\n        this._listener = this.onMessage.bind(this);\n    }\n    get listener() {\n        return this._listener;\n    }\n    get ready() {\n        return this._ready;\n    }\n    /**\n     * 创建异步迭代器\n     */\n    create(options?: FastEventListenOptions) {\n        if (this._ready) return;\n        this._listenOptions = options;\n        try {\n            // 监听事件 - 使用 FastEvent 的 on 方法，返回订阅者对象\n            const subscriber = (this.eventEmitter as any).on(\n                this.eventName,\n                this._listener,\n                options,\n            );\n            this._cleanups.push(() => subscriber.off());\n            // 处理中止信号\n            if (this.options.signal && !this.options.signal.aborted) {\n                const offFn = () => {\n                    this.off(true);\n                };\n                this.options.signal.addEventListener(\"abort\", offFn);\n                this._cleanups.push(() => {\n                    this.options.signal!.removeEventListener(\"abort\", offFn);\n                });\n            }\n        } finally {\n            this._ready = true;\n        }\n    }\n    /**\n     * 推送消息到缓冲区\n     */\n    private push(message: T): void {\n        if (this.options.onPush) {\n            this.options.onPush(message, this.buffer);\n        } else {\n            this.buffer.push(this.options.lifetime > 0 ? [message, Date.now()] : [message, 0]);\n        }\n    }\n\n    /**\n     * 处理缓冲区溢出\n     * @returns 返回 true 表示消息已添加，false 表示消息被丢弃\n     */\n    private handleOverflow(message: T): boolean {\n        // 如果已达到最大大小且当前策略为expand，使用expandOverflow策略\n        const strategy =\n            this.buffer.length >= this.options.maxExpandSize && this.options.overflow === \"expand\"\n                ? this.options.expandOverflow\n                : this.options.overflow;\n\n        switch (strategy) {\n            case \"drop\":\n                if (this.options.onDrop) this.options.onDrop(message);\n                return false;\n            case \"expand\":\n                this.currentSize = Math.min(\n                    this.currentSize + this.options.size,\n                    this.options.maxExpandSize,\n                );\n                this.push(message);\n                return true;\n            case \"slide\":\n                const msg = this.buffer.shift(); // 移除最旧的消息\n                if (this.options.onDrop && msg) this.options.onDrop(msg[0]);\n                this.push(message);\n                return true;\n            case \"throw\":\n                if (this.options.onDrop) this.options.onDrop(message);\n                throw new Error(\n                    `EventIterator queue overflow: buffer size (${this.currentSize}) exceeded`,\n                );\n            default:\n                return false;\n        }\n    }\n\n    private onMessage(\n        message: FastEventMessage<any, any, any>,\n        _args: FastEventListenerArgs,\n    ): void {\n        if (this.isStopped) return;\n\n        // 从 FastEvent 消息中提取 payload\n        const data = message as T;\n\n        // 如果有等待的消费者，直接resolve\n        if (this.resolvers.length > 0) {\n            const resolver = this.resolvers.shift()!;\n            resolver({ value: data, done: false });\n            return;\n        }\n\n        // 否则加入缓冲区\n        this.hasNewMessage = true;\n\n        if (this.buffer.length < this.currentSize) {\n            this.push(data);\n        } else {\n            this.handleOverflow(data);\n        }\n    }\n    /**\n     * 中止监听\n     * @param abort\n     * @returns\n     */\n    off(abort?: boolean): void {\n        if (!this._ready) return;\n        if (this.isStopped) return;\n        this.isStopped = true;\n        // 取消事件订阅\n        this._cleanups.forEach((fn) => fn());\n        this._cleanups = [];\n        this.buffer = [];\n        this._ready = false;\n        // 如果是强制中止，如调用了AbortSign\n        if (abort) {\n            // 清理等待的error resolvers\n            this.errorResolvers.forEach((resolver) => {\n                resolver(new AbortError());\n            });\n            this.errorResolvers = [];\n        } else {\n            // 清理等待的resolvers\n            this.resolvers.forEach((resolver) => {\n                resolver({ value: undefined, done: true });\n            });\n            this.resolvers = [];\n        }\n        this._ready = false;\n    }\n\n    async next(): Promise<IteratorResult<T>> {\n        if (this.error) {\n            return Promise.reject(this.error);\n        }\n\n        if (this.isStopped && this.buffer.length === 0) {\n            return { value: undefined, done: true };\n        }\n\n        // 如果缓冲区有数据，立即返回\n        if (this.buffer.length > 0) {\n            let nextMessage: T | undefined;\n            let enterTime: number;\n\n            // 从队列中弹出消息\n            if (this.options.onPop) {\n                const result = this.options.onPop(this.buffer, this.hasNewMessage);\n                if (result) {\n                    [nextMessage, enterTime] = result;\n                } else {\n                    [nextMessage, enterTime] = this.buffer.shift() || [undefined, 0];\n                }\n            } else {\n                [nextMessage, enterTime] = this.buffer.shift() || [undefined, 0];\n            }\n\n            // 重置 hasNewMessage 标志\n            this.hasNewMessage = false;\n\n            if (nextMessage !== undefined) {\n                // 如果消息在缓冲区中停留的时间超过lifetime，丢弃该消息\n                if (this.options.lifetime > 0 && Date.now() - enterTime > this.options.lifetime) {\n                    if (this.options.onDrop) this.options.onDrop(nextMessage);\n                    // 递归获取下一个消息\n                    return this.next();\n                }\n                return { value: nextMessage, done: false };\n            }\n        }\n\n        // 否则等待新事件\n        return new Promise((resolve, reject) => {\n            this.resolvers.push(resolve);\n            this.errorResolvers.push(reject);\n        });\n    }\n\n    [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n        return this as unknown as AsyncIterableIterator<T>;\n    }\n\n    async done(): Promise<IteratorResult<T>> {\n        this.off();\n        return { value: undefined, done: true };\n    }\n\n    async throw(error?: any): Promise<IteratorResult<T>> {\n        this.error = error;\n        this.off();\n        return Promise.reject(error);\n    }\n\n    /**\n     * 当 for await...of 循环被 break、return 或 throw 中断时调用\n     * 自动清理资源，防止内存泄漏\n     */\n    async return(): Promise<IteratorResult<T>> {\n        this.off();\n        return { value: undefined, done: true };\n    }\n\n    /**\n     * 同步资源释放（支持 using 语句）\n     *\n     * @description\n     * 当使用 `using` 语句时，此方法会在作用域结束时自动调用，\n     * 执行 off() 方法取消订阅。\n     *\n     * @example\n     * ```ts\n     * {\n     *     using subscriber = emitter.on('event');\n     *     // subscriber 在作用域结束时自动调用 off()\n     * }\n     * ```\n     */\n    [Symbol.dispose](): void {\n        this.off();\n    }\n\n    on() {\n        this.create(this._listenOptions);\n        this.isStopped = false;\n    }\n}\n\n/**\n * 创建一个异步迭代器，从 FastEvent 或 FastEventScope 订阅事件\n * @param eventEmitter FastEvent 或 FastEventScope 实例\n * @param eventName 事件名称\n * @param options 配置选项\n * @param listenerOptions 监听器配置选项\n * @returns 异步迭代器\n */\nexport function createAsyncEventIterator<T = any>(\n    eventEmitter: FastEvent<any> | FastEventScope<any, any, any>,\n    eventName: string,\n    options: FastEventIteratorOptions<T> = {},\n): FastEventIterator<T> {\n    return new FastEventIterator<T>(eventEmitter, eventName, options);\n}\n","import { FastListenerPipe } from \"../pipes/types\";\nimport { TypedFastEventListener } from \"../types/FastEventListeners\";\nimport { renameFn } from \"./renameFn\";\n\nexport function wrapPipeListener(\n    listener: TypedFastEventListener<any, any, any, any>,\n    pipes: FastListenerPipe[],\n): TypedFastEventListener<any, any, any, any> {\n    if (Array.isArray(pipes)) {\n        pipes.forEach((decorator) => {\n            listener = renameFn(decorator(listener), listener.name);\n        });\n        return listener;\n    }\n    return listener;\n}\n","export function getWeakRef(value: any) {\n    // WeakRef 只能接收对象，不能接收原始值\n    if (value !== null && (typeof value === \"object\" || typeof value === \"function\")) {\n        return new WeakRef(value);\n    }\n    return value;\n}\n","export function getPromiseResults(results: any[]) {\n    return results.map((result) => {\n        if (result.status === \"fulfilled\") {\n            return result.value;\n        } else {\n            return result.reason;\n        }\n    });\n}\n","/**\n * 判断一个值是否为 Promise\n *\n * 这个函数检查一个值是否具有 Promise 的核心特征：\n * 1. 不是 null 或 undefined\n * 2. 是对象或函数类型\n * 3. 具有 then 方法（且 then 是函数）\n *\n * 注意：这个函数也会返回 true 给任何 \"thenable\" 对象（具有 then 方法的对象），\n * 这些对象虽然不是原生的 Promise，但可以用在 Promise 链中。\n *\n * @param value - 要检查的值\n * @returns 类型谓词，表明值是否为 Promise\n *\n * @example\n * ```typescript\n * isPromise(Promise.resolve()); // true\n * isPromise(new Promise(() => {})); // true\n * isPromise({ then: () => {} }); // true (thenable)\n * isPromise({}); // false\n * isPromise(null); // false\n * isPromise(42); // false\n * ```\n */\nexport function isPromise<T = any>(value: unknown): value is Promise<T> {\n    // 快速检查 null 和 undefined\n    if (value == null) {\n        return false;\n    }\n\n    // Promise 必须是对象或函数类型\n    const type = typeof value;\n    if (type !== \"object\" && type !== \"function\") {\n        return false;\n    }\n\n    // 检查 then 方法是否存在且为函数\n    // 使用类型断言绕过 TypeScript 的类型检查\n    return typeof (value as Record<string, unknown>).then === \"function\";\n}\n","type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;\n\nexport async function resolveValue<T>(input: T): Promise<UnwrapPromise<T> | Error> {\n    try {\n        // 检查输入是否是Promise\n        if (input instanceof Promise) {\n            const result = await input;\n            return result as UnwrapPromise<T>;\n        }\n        // 非Promise值直接返回\n        return input as UnwrapPromise<T>;\n    } catch (error) {\n        // 如果Promise执行出错，返回Error对象\n        if (error instanceof Error) {\n            return error;\n        }\n        // 如果抛出的不是Error对象，转换为Error\n        return new Error(String(error));\n    }\n}\n","import { RemoveAnyRecord } from \"./types/utils/RemoveAnyRecord\";\nimport { FastEventScope, IFastEventScope, type FastEventScopeOptions } from \"./scope\";\nimport {\n    GetClosestEvents,\n    KeyOf,\n    MutableMessage,\n    Expand,\n    Fallback,\n    ReplaceWildcard,\n    UnTransformedEvents,\n    FastEventMessage,\n    GetClosestEventPayload,\n} from \"./types\";\nimport {\n    TypedFastEventMessage,\n    FastEventEmitMessage,\n    FastEventMeta,\n} from \"./types/FastEventMessages\";\nimport {\n    FastEventListeners,\n    FastListeners,\n    TypedFastEventAnyListener,\n} from \"./types/FastEventListeners\";\nimport { FastEventSubscriber } from \"./types/FastEventSubscribers\";\nimport {\n    TypedFastEventListener,\n    FastEventListenerNode,\n    FastEventListenerMeta,\n    FastEventCommonListener,\n} from \"./types/FastEventListeners\";\nimport {\n    FastEventOptions,\n    FastEventListenOptions,\n    FastEventListenerArgs,\n    FastEvents,\n    FastEventListenerFlags,\n} from \"./types/FastEvents\";\nimport { IsTransformedEvent } from \"./types/transformed/IsTransformedEvent\";\nimport { ExtendWildcardEvents } from \"./types/wildcards/ExtendWildcardEvents\";\nimport { PayloadValues } from \"./types/transformed/PayloadValues\";\nimport { PickPayload } from \"./types/transformed/PickPayload\";\nimport { ValueOf } from \"./types/utils/ValueOf\";\nimport { DeepPartial } from \"./types/utils/DeepPartial\";\nimport { GetPayload } from \"./types/transformed/GetPayload\";\nimport { IsAllTransformed } from \"./types/transformed/IsAllTransformed\";\nimport { parseEmitArgs } from \"./utils/parseEmitArgs\";\nimport { isPathMatched } from \"./utils/isPathMatched\";\nimport { removeItem } from \"./utils/removeItem\";\nimport { renameFn } from \"./utils/renameFn\";\nimport { isFunction } from \"./utils/isFunction\";\nimport { collectBroadcastTargets } from \"./utils/collectBroadcastTargets\";\nimport { ScopeEvents } from \"./types\";\nimport { AbortError, CancelError } from \"./consts\";\nimport { parseScopeArgs } from \"./utils/parseScopeArgs\";\nimport { FastListenerExecutor, parallel } from \"./executors\";\nimport { expandEmitResults } from \"./utils/expandEmitResults\";\nimport { isSubsctiber } from \"./utils/isSubsctiber\";\nimport { tryReturnError } from \"./utils/tryReturnError\";\nimport {\n    createAsyncEventIterator,\n    FastEventIterator,\n    FastEventIteratorOptions,\n    WithListenerDecorator,\n} from \"./iterator\";\nimport { InMatchedEvent } from \"./types/wildcards/InMatchedEvent\";\nimport { GetClosestMessage } from \"./types/closest/GetClosestMessage\";\nimport { wrapPipeListener } from \"./utils/wrapPipeListener\";\nimport { getWeakRef } from \"./utils/getWeakRef\";\nimport { getPromiseResults } from \"./utils/getPromiseResults\";\nimport { isPromise } from \"./utils/isPromise\";\nimport { resolveValue } from \"./utils/resolveValue\";\nimport { AfterExecuteListenerHook, FastEventHooks } from \"./types/FastEventHooks\";\nimport { ItemOf } from \"../../viewer/src/types\";\nimport { isAsyncIterable } from \"./utils/isAsyncIterable\";\nimport { getListeners } from \"./utils/getListeners\";\n\n/**\n * FastEvent 事件发射器类\n *\n * @template Events - 事件类型定义，继承自FastEvents接口\n * @template Meta - 事件元数据类型，默认为任意键值对对象\n * @template Types - 事件类型的键名类型，默认为Events的键名类型\n */\nexport class FastEvent<\n    Events extends Record<string, any> = Record<string, any>,\n    Meta extends Record<string, any> = Record<string, any>,\n    Context = never,\n    // 泛型快捷方式\n    AllEvents extends Record<string, any> = Expand<Events & FastEvents>,\n    Types extends keyof AllEvents = KeyOf<AllEvents>,\n    AllMeta extends Record<string, any> = FastEventMeta & Meta,\n    EventNames = KeyOf<ExtendWildcardEvents<AllEvents>>,\n> {\n    __FastEvent__: boolean = true;\n\n    /** 事件监听器树结构，存储所有注册的事件监听器 */\n    public listeners: FastListeners = { __listeners: [] } as unknown as FastListeners;\n\n    /** 事件发射器的配置选项 */\n    private _options: FastEventOptions<Meta, Context>;\n\n    /** 事件名称的分隔符，默认为'/' */\n    private _delimiter: string = \"/\";\n\n    /** 缓存的 transform 函数（构造时规范化：非函数则 undefined）。emit 热路径直接判断，省属性链 + isFunction */\n    private _transform: any;\n\n    /** 缓存的 expandEmitResults 开关（构造时读取，默认 true） */\n    private _expandResults: boolean = true;\n\n    /** 事件监听器执行时的上下文对象 */\n    private _context: Context;\n\n    private _hooks?: FastEventHooks;\n    /** 保留的事件消息映射，Key是事件名称，Value是保留的事件消息 */\n    retainedMessages: Map<string, any> = new Map<string, any>();\n\n    /** 当前注册的监听器总数 */\n    listenerCount: number = 0;\n\n    // 子类通过：declare types : { } & typeof FastEvent.types  扩展类型\n    types = null as unknown as {\n        events: ExtendWildcardEvents<AllEvents>;\n        eventNames: KeyOf<ExtendWildcardEvents<AllEvents>>;\n        meta: AllMeta;\n        context: Expand<Fallback<Context, FastEvent<AllEvents, Meta, Context>>>;\n        messages: MutableMessage<AllEvents, Meta>;\n        message: MutableMessage<AllEvents, Meta>;\n        listeners: FastEventListeners<\n            AllEvents,\n            Expand<FastEventMeta & Meta & Record<string, any>>\n        >;\n        anyListener: TypedFastEventAnyListener<\n            AllEvents,\n            Expand<FastEventMeta & Meta & Record<string, any>>\n        >;\n        listener: FastEventCommonListener<\n            FastEventMessage,\n            Expand<FastEventMeta & Meta & Record<string, any>>\n        >;\n    };\n    /**\n     * 创建FastEvent实例\n     * @param options - 事件发射器的配置选项\n     *\n     * 默认配置：\n     * - debug: false - 是否启用调试模式\n     * - id: 随机字符串 - 实例唯一标识符\n     * - delimiter: '/' - 事件名称分隔符\n     * - context: null - 监听器执行上下文\n     * - ignoreErrors: true - 是否忽略监听器执行错误\n     */\n    constructor(options?: Partial<FastEventOptions<Meta, Context>>) {\n        this._options = Object.assign(\n            {\n                debug: false,\n                id: Math.random().toString(36).substring(2),\n                delimiter: \"/\",\n                context: null,\n                ignoreErrors: true,\n                meta: undefined,\n                expandEmitResults: true,\n                executor: parallel(),\n            },\n            this._initOptions(options),\n        ) as unknown as FastEventOptions<Meta, Context>;\n        this._delimiter = this._options.delimiter!;\n        this._context = this._options.context as Context;\n        // 缓存热路径配置，避免 emit 每次读取属性链 + isFunction\n        const transformOpt = this._options.transform;\n        this._transform = typeof transformOpt === \"function\" ? transformOpt : undefined;\n        this._expandResults = this._options.expandEmitResults !== false;\n    }\n\n    /** 获取事件发射器的配置选项 */\n    get options() {\n        return this._options;\n    }\n    get context(): Fallback<Context, typeof this> {\n        return (this.options.context || this) as Fallback<Context, typeof this>;\n    }\n    get meta() {\n        return this.options.meta;\n    }\n    /** 获取事件发射器的唯一标识符 */\n    get id() {\n        return this._options.id!;\n    }\n    /** 获取事件发射器的唯一标识符 */\n    get title() {\n        return this._options.title || this.id || \"FastEvent\";\n    }\n    get hooks(): FastEventHooks {\n        if (!this._hooks) {\n            this._hooks = {\n                AddBeforeListener: [],\n                AddAfterListener: [],\n                RemoveListener: [],\n                ClearListeners: [],\n                ListenerError: [],\n                BeforeExecuteListener: [],\n                AfterExecuteListener: [],\n            };\n        }\n        return this._hooks;\n    }\n    private _execAfterExecuteListener(fn: Function, args: Parameters<AfterExecuteListenerHook>) {\n        Promise.allSettled(args[1]).then((r: any[]) => {\n            args[1] = getPromiseResults(r);\n            fn!.apply(this, args as any);\n        });\n    }\n    /**\n     * 执行Hook\n     *\n     * AfterExecuteListener为什么需要特别处理？\n     *\n     * 因为AfterExecuteListener是在监听器执行完成后调用\n     * 并且将监听器的结果传入，但是监听器有可能返回Promise\n     * 因为需要等等Promise resolve，再调用AfterExecuteListener\n     *\n     *\n     * @param hookName\n     * @param args\n     * @param onlyAsyncHook 只运行异步HOOK\n     * @returns\n     */\n    private _executeHooks<T extends keyof FastEventHooks>(\n        hookName: T,\n        args: Parameters<ItemOf<FastEventHooks[T]>>,\n        onlyAsyncHook: boolean = false,\n    ) {\n        if (this._hooks) {\n            setTimeout(() => {\n                const hooks = this.hooks[hookName];\n                if (Array.isArray(hooks) && hooks.length > 0) {\n                    Promise.allSettled(\n                        hooks.map((hook) => {\n                            if (hookName === \"AfterExecuteListener\") {\n                                this._execAfterExecuteListener(hook, args as any);\n                            } else {\n                                return (hook as any).apply(this, args);\n                            }\n                        }),\n                    );\n                }\n            });\n        }\n\n        if (!onlyAsyncHook) {\n            const hookMethod = this.options[`on${hookName}`] as Function;\n            if (isFunction(hookMethod)) {\n                if (hookName === \"AfterExecuteListener\") {\n                    this._execAfterExecuteListener(hookMethod, args as any);\n                } else {\n                    return hookMethod.apply(this, args);\n                }\n            }\n        }\n    }\n    /**\n     * 初始化选项\n     *\n     * 本方法主要供子类重载\n     *\n     * @param initial - 可选的初始字典对象\n     * @returns 返回传入的初始字典对象\n     */\n    _initOptions(initial?: Partial<FastEventOptions<Meta, Context>>) {\n        return initial;\n    }\n    /**\n     * 添加事件监听器到事件树中\n     * @param parts - 事件路径数组\n     * @param listener - 事件监听器函数\n     * @param options - 监听器配置选项\n     * @param options.count - 监听器触发次数限制\n     * @param options.prepend - 是否将监听器添加到监听器列表开头\n     * @returns [节点, 监听器索引] - 返回监听器所在节点和在节点监听器列表中的索引\n     * @private\n     */\n    private _addListener(\n        parts: string[],\n        listener: TypedFastEventListener<any, any>,\n        options: Required<FastEventListenOptions>,\n    ): [FastEventListenerNode | undefined, number] {\n        const { count, prepend } = options;\n        let index: number = 0;\n        const node = this._forEachNodes(parts, (node) => {\n            const newListener = [\n                listener,\n                count,\n                0,\n                options.tag,\n                options.flags,\n            ] as unknown as FastEventListenerMeta;\n            if (prepend) {\n                node.__listeners.splice(0, 0, newListener);\n                index = 0;\n            } else {\n                node.__listeners.push(newListener);\n                index = node.__listeners.length - 1;\n            }\n            this.listenerCount++;\n        });\n        return [node, index];\n    }\n    /**\n     *\n     * 根据parts路径遍历监听器树，并在最后的节点上执行回调函数\n     *\n     * @param parts\n     * @param callback\n     * @returns\n     */\n    private _forEachNodes(\n        parts: string[],\n        callback: (node: FastEventListenerNode, parent: FastEventListenerNode) => void,\n    ): FastEventListenerNode | undefined {\n        if (parts.length === 0) return;\n        let current = this.listeners;\n        for (let i = 0; i < parts.length; i++) {\n            const part = parts[i];\n            if (!(part in current)) {\n                current[part] = {\n                    __listeners: [],\n                } as unknown as FastListeners;\n            }\n            if (i === parts.length - 1) {\n                const node = current[part];\n                callback(node, current);\n                return node;\n            } else {\n                current = current[part];\n            }\n        }\n        return undefined;\n    }\n\n    /**\n     * 从监听器节点中移除指定的事件监听器\n     * @private\n     * @param node - 监听器节点\n     * @param listener - 需要移除的事件监听器\n     * @description 遍历节点的监听器列表,移除所有匹配的监听器。支持移除普通函数和数组形式的监听器\n     */\n    private _removeListener(\n        node: FastEventListenerNode,\n        path: string[],\n        listener: TypedFastEventListener<any, any, any>,\n    ): void {\n        if (!listener) return;\n        removeItem(node.__listeners, (item: any) => {\n            item = Array.isArray(item) ? item[0] : item;\n            const isRemove = item === listener;\n            if (isRemove) {\n                this.listenerCount--;\n                this._executeHooks(\"RemoveListener\", [path.join(this._delimiter), listener, node]);\n            }\n            return isRemove;\n        });\n    }\n    /**\n     * 创建异步迭代监听器\n     * @param type\n     * @param options\n     * @returns\n     */\n    private _createAyncIteratorListener(type: string, options: FastEventListenOptions): any {\n        const iteratorOpts = Object.assign(\n            {\n                overflow: \"expand\",\n                size: 10,\n                maxExpandSize: 100,\n            },\n            options.iterable,\n        ) as FastEventIteratorOptions;\n        const iterator = createAsyncEventIterator<any>(this as any, type, iteratorOpts);\n        iterator.create(options);\n        const r = this._executeHooks(\"AddBeforeListener\", [type, iterator.listener, options]);\n        if (r === false) {\n            throw new CancelError();\n        } else if (isAsyncIterable(r)) {\n            return r;\n        }\n        // 返回可调用的迭代器，用作装饰器工厂\n        return iterator;\n    }\n    /**\n     * 注册事件监听器\n     * @param type - 事件类型，支持以下格式：\n     *   - 普通字符串：'user/login'\n     *   - 通配符：'user/*'（匹配单层）或'user/**'（匹配多层）\n     *   - 全局监听：'**'（监听所有事件）\n     * @param listener - 事件监听器函数\n     * @param options - 监听器配置选项：\n     *   - count: 触发次数限制，0表示无限制\n     *   - prepend: 是否将监听器添加到监听器队列开头\n     * @returns 返回订阅者对象，包含off方法用于取消监听\n     *\n     * @example\n     * ```ts\n     * // 监听特定事件\n     * emitter.on('user/login', (data) => console.log(data));\n     *\n     * // 使用通配符\n     * emitter.on('user/*', (data) => console.log(data));\n     *\n     * // 限制触发次数\n     * emitter.on('event', handler, { count: 3 });\n     * ```\n     */\n    // 返回迭代器\n    public on<T extends string = KeyOf<Events> | \"**\">(\n        type: T,\n        options?: FastEventListenOptions<AllEvents, Meta>,\n    ): T extends IsTransformedEvent<AllEvents, T>\n        ? WithListenerDecorator<\n              FastEventIterator<\n                  T extends \"**\"\n                      ? IsAllTransformed<Events> extends true\n                          ? PayloadValues<AllEvents>\n                          : any\n                      : PickPayload<ValueOf<GetClosestEvents<AllEvents, T>>>\n              >\n          >\n        : WithListenerDecorator<\n              FastEventIterator<\n                  T extends \"**\" ? MutableMessage<AllEvents> : GetClosestMessage<Events, T, Meta>\n              >\n          >;\n\n    // 指定监听器\n    public on<T extends string = KeyOf<Events> | \"**\">(\n        type: T,\n        listener: FastEventCommonListener<\n            T extends IsTransformedEvent<AllEvents, T>\n                ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n                : T extends \"**\"\n                  ? MutableMessage<Events>\n                  : GetClosestMessage<Events, T, Meta>,\n            Meta,\n            Fallback<Context, typeof this>\n        >,\n        options?: FastEventListenOptions,\n    ): FastEventSubscriber;\n\n    public on(): any {\n        const type = arguments[0] as string;\n        if (type.length === 0) throw new Error(\"event cannot be empty\");\n\n        // 解析参数和选项\n        let listener: any = null;\n        let options: any;\n\n        // 当不提供监听器时返回异步迭代器\n        const noListener = !isFunction(arguments[1]);\n        if (noListener) {\n            options = arguments[1] || {};\n        } else {\n            // on(type, listener, options?)\n            listener = arguments[1];\n            options = arguments[2] || {};\n        }\n\n        const finalOptions = Object.assign(\n            {\n                count: 0,\n                flags: 0,\n                prepend: false,\n            },\n            options,\n        ) as Required<FastEventListenOptions>;\n\n        // 当未指定监听器时返回一个异步迭代器\n        if (noListener || listener === null) {\n            return this._createAyncIteratorListener(type, finalOptions);\n            const iteratorOpts = Object.assign(\n                {\n                    overflow: \"expand\",\n                    size: 10,\n                    maxExpandSize: 100,\n                },\n                finalOptions.iterable,\n            ) as FastEventIteratorOptions;\n            const iterator = createAsyncEventIterator<any>(this as any, type, iteratorOpts);\n            iterator.create(finalOptions);\n            const r = this._executeHooks(\"AddBeforeListener\", [\n                type,\n                iterator.listener,\n                finalOptions,\n            ]);\n            if (r === false) {\n                throw new CancelError();\n            } else if (isAsyncIterable(r)) {\n                return r;\n            }\n            return iterator;\n        }\n        // 执行回调\n        const r = this._executeHooks(\"AddBeforeListener\", [type, listener, finalOptions]);\n        if (r === false) {\n            throw new CancelError();\n        } else if (isSubsctiber(r)) {\n            return r;\n        }\n\n        const parts = type.split(this._delimiter);\n\n        // 处理 pipes（适用于所有订阅者，包括 iterable）\n        if (finalOptions.pipes && finalOptions.pipes.length > 0) {\n            listener = wrapPipeListener(listener, finalOptions.pipes);\n        }\n\n        // 处理 filter 和 off（仅用于普通订阅者）\n        if (isFunction(finalOptions.filter) || isFunction(finalOptions.off)) {\n            const oldListener = listener;\n            const off = () => node && this._removeListener(node, parts, listener);\n            listener = renameFn<TypedFastEventListener>(function (message, args) {\n                // 如果满足条件就退订\n                if (\n                    isFunction(finalOptions.off) &&\n                    finalOptions.off.call(this, message as any, args)\n                ) {\n                    off();\n                    return;\n                }\n                // 如果满足条件就触发监听器\n                if (isFunction(finalOptions.filter)) {\n                    if (finalOptions.filter.call(this, message as any, args!))\n                        return oldListener.call(this, message, args);\n                } else {\n                    return oldListener.call(this, message, args);\n                }\n            }, listener.name);\n        }\n\n        // 添加到监听器树\n        const [node, index] = this._addListener(parts, listener, finalOptions);\n        const off = () => node && this._removeListener(node, parts, listener);\n\n        this._executeHooks(\"AddAfterListener\", [type, node!]);\n\n        // 触发监听器保留消息\n        this._emitRetainMessage(type, node, index);\n\n        return {\n            off,\n            listener,\n            [Symbol.dispose]() {\n                off();\n            },\n        };\n    }\n\n    /**\n     * 注册一次性事件监听器\n     * @param type - 事件类型，支持与on方法相同的格式：\n     *   - 普通字符串：'user/login'\n     *   - 通配符：'user/*'（匹配单层）或'user/**'（匹配多层）\n     * @param listener - 事件监听器函数\n     * @returns 返回订阅者对象，包含off方法用于取消监听\n     *\n     * @description\n     * 监听器只会在事件首次触发时被调用一次，之后会自动解除注册。\n     * 这是on方法的特例，相当于设置options.count = 1。\n     * 如果事件有保留消息，新注册的监听器会立即收到最近一次的保留消息并解除注册。\n     *\n     * @example\n     * ```ts\n     * // 只监听一次登录事件\n     * emitter.once('user/login', (data) => {\n     *   console.log('用户登录:', data);\n     * });\n     * ```\n     */\n    public once<T extends string = KeyOf<Events> | \"**\">(\n        type: T,\n        listener: FastEventCommonListener<\n            T extends IsTransformedEvent<AllEvents, T>\n                ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n                : T extends \"**\"\n                  ? MutableMessage<Events>\n                  : GetClosestMessage<Events, T, Meta>,\n            Meta,\n            Fallback<Context, typeof this>\n        >,\n        options?: FastEventListenOptions,\n    ): FastEventSubscriber;\n    public once(): FastEventSubscriber {\n        if (isFunction(arguments[1])) {\n            return this.on(\n                arguments[0],\n                arguments[1],\n                Object.assign({}, arguments[2], { count: 1 }),\n            );\n        } else {\n            return this.on(\n                arguments[0],\n                Object.assign({}, arguments[2], { count: 1 }),\n            ) as unknown as FastEventSubscriber;\n        }\n    }\n\n    /**\n     * 注册一个监听器，用于监听所有事件\n     * @param listener 事件监听器函数，可以接收任意类型的事件数据\n     * @returns {FastEventSubscriber} 返回一个订阅者对象，包含 off 方法用于取消监听\n     * @example\n     * ```ts\n     * const subscriber = emitter.onAny((eventName, data) => {\n     *   console.log(eventName, data);\n     * });\n     *\n     * // 取消监听\n     * subscriber.off();\n     * ```\n     */\n    // 返回迭代器（不指定监听器时）\n    public onAny(\n        options?: FastEventListenOptions<AllEvents, AllMeta>,\n    ): FastEventIterator<MutableMessage<AllEvents, AllMeta>>;\n    // 指定监听器\n    public onAny(\n        listener: FastEventCommonListener<\n            MutableMessage<AllEvents, AllMeta>,\n            Meta,\n            Fallback<Context, typeof this>\n        >,\n        options?: FastEventListenOptions<AllEvents, AllMeta>,\n    ): FastEventSubscriber;\n    public onAny() {\n        return this.on(\"**\", ...arguments) as any;\n    }\n    /**\n     *\n     * 当调用on/once/onAny时如果没有指定监听器，则调用此方法\n     *\n     * 此方法供子类继承\n     *\n     */\n    off(listener: TypedFastEventListener<any, any, any>): void;\n    off(type: string, listener: TypedFastEventListener<any, any, any>): void;\n    off(type: Types, listener: TypedFastEventListener<any, any, any>): void;\n    off(type: string): void;\n    off(type: Types): void;\n    off() {\n        const args = arguments;\n        const type = isFunction(args[0]) ? undefined : args[0];\n        const listener = isFunction(args[0]) ? args[0] : args[1];\n        const parts = type ? type.split(this._delimiter) : [];\n        const hasWildcard = type ? type.includes(\"*\") : false;\n        if (type && !hasWildcard) {\n            this._traverseToPath(this.listeners, parts, (node) => {\n                if (listener) {\n                    // 只删除指定的监听器\n                    this._removeListener(node, parts, listener);\n                } else if (type) {\n                    node.__listeners = [];\n                }\n            });\n        } else {\n            // 仅删除指定的监听器\n            const entryParts: string[] = hasWildcard ? [] : parts;\n            this._traverseListeners(this.listeners, entryParts, (path, node) => {\n                if (listener !== undefined || (hasWildcard && isPathMatched(path, parts))) {\n                    if (listener) {\n                        this._removeListener(node, parts, listener);\n                    } else {\n                        node.__listeners = [];\n                    }\n                }\n            });\n        }\n    }\n\n    /**\n     * 移除所有事件监听器\n     * @param entry - 可选的事件前缀,如果提供则只移除指定前缀下的的监听器\n     * @description \n     * - 如果提供了prefix参数,则只清除该前缀下的所有监听器\n     * - 如果没有提供prefix,则清除所有监听器\n     * - 同时会清空保留的事件(_retainedEvents)\n     * - 重置监听器对象为空\n     \n    * @example\n     * \n     * ```ts\n     * emitter.offAll();    // 清除所有监听器\n     * emitter.offAll('a/b'); // 清除a/b下的所有监听器\n     * \n     */\n    offAll(entry?: string) {\n        if (entry) {\n            const parts = entry.split(this._delimiter);\n            let count = 0;\n            this._traverseListeners(this.listeners, parts, (path, node) => {\n                count += node.__listeners.length;\n                try {\n                    node.__listeners.forEach((listener) => {\n                        this._executeHooks(\"RemoveListener\", [\n                            path.join(this.options.delimiter),\n                            listener[0],\n                            node,\n                        ]);\n                    });\n                } finally {\n                    node.__listeners = [];\n                }\n            });\n            this.listenerCount -= count;\n            this._removeRetainedEvents(entry);\n        } else {\n            try {\n                let count = 0;\n                this._traverseListeners(this.listeners, [], (path, node) => {\n                    count += node.__listeners.length;\n                });\n                this.listenerCount -= count;\n                this.retainedMessages.clear();\n                this.listeners = { __listeners: [] } as unknown as FastListeners;\n            } finally {\n                this._executeHooks(\"ClearListeners\", []);\n            }\n        }\n    }\n    /**\n     * 移除保留的事件\n     * @param prefix - 事件前缀。如果不提供，将清除所有保留的事件。\n     *                如果提供前缀，将删除所有以该前缀开头的事件。\n     *                如果前缀不以分隔符结尾，会自动添加分隔符。\n     * @private\n     */\n    private _removeRetainedEvents(prefix?: string) {\n        if (!prefix) this.retainedMessages.clear();\n        if (prefix?.endsWith(this._delimiter)) {\n            prefix += this._delimiter;\n        }\n        this.retainedMessages.delete(prefix!);\n        for (let key of this.retainedMessages.keys()) {\n            if (key.startsWith(prefix!)) {\n                this.retainedMessages.delete(key);\n            }\n        }\n    }\n    clear(prefix?: string) {\n        this.offAll(prefix);\n        this._removeRetainedEvents(prefix);\n    }\n\n    /**\n     * 发送最后一次事件的消息给对应的监听器\n     *\n     * @param type - 事件类型,支持通配符(*)匹配\n     * @private\n     *\n     * 处理流程:\n     * 1. 如果事件类型包含通配符,则遍历所有保留的消息,匹配符合模式的事件\n     * 2. 如果是普通事件类型,则直接获取对应的保留消息\n     * 3. 遍历匹配到的消息,查找对应路径的监听器节点\n     * 4. 执行所有匹配到的监听器\n     */\n    private _emitRetainMessage(\n        type: string,\n        listenerNode: FastEventListenerNode | undefined,\n        index: number,\n    ) {\n        let messages = [] as TypedFastEventMessage[];\n        if (type.includes(\"*\")) {\n            // 找出所有保留的消息\n            const patterns = type.split(this._delimiter);\n            this.retainedMessages.forEach((message, type) => {\n                const parts = type.split(this._delimiter);\n                if (isPathMatched(parts, patterns)) {\n                    messages.push(message);\n                }\n            });\n        } else if (this.retainedMessages.has(type)) {\n            messages.push(this.retainedMessages.get(type));\n        }\n        if (listenerNode) {\n            messages.forEach((message) => {\n                this._executeListeners([listenerNode], message, {}, (listenerMeta) => {\n                    return listenerMeta[0] === listenerNode.__listeners[index][0];\n                });\n            });\n        }\n    }\n\n    /**\n     * 遍历监听器节点树\n     * @param node 当前遍历的监听器节点\n     * @param parts 事件名称按'.'分割的部分数组\n     * @param callback 遍历到目标节点时的回调函数\n     * @param index 当前遍历的parts数组索引,默认为0\n     * @param lastFollowing  当命中**时该值为true, 注意**只能作在路径的最后面，如a.**有效，而a.**.b无效\n     * @private\n     *\n     * 支持三种匹配模式:\n     * - 精确匹配: 'a.b.c'\n     * - 单层通配: 'a.*.c'\n     * - 多层通配: 'a.**'\n     */\n    private _traverseToPath(\n        node: FastEventListenerNode,\n        parts: string[],\n        callback: (node: FastEventListenerNode) => void,\n        index: number = 0,\n        lastFollowing?: boolean,\n    ): void {\n        if (index >= parts.length) {\n            callback(node);\n            return;\n        }\n        const part = parts[index];\n\n        if (lastFollowing === true) {\n            this._traverseToPath(node, parts, callback, index + 1, true);\n            return;\n        }\n\n        if (\"*\" in node) {\n            this._traverseToPath(node[\"*\"], parts, callback, index + 1);\n        }\n        //\n        if (\"**\" in node) {\n            this._traverseToPath(node[\"**\"], parts, callback, index + 1, true);\n        }\n\n        if (part in node) {\n            this._traverseToPath(node[part], parts, callback, index + 1);\n        }\n    }\n\n    private _traverseListeners(\n        node: FastEventListenerNode,\n        entry: string[],\n        callback: (path: string[], node: FastEventListenerNode) => void,\n    ): void {\n        let entryNode: FastEventListenerNode = node;\n        // 如果指定了entry路径，则按照路径遍历\n        if (entry && entry.length > 0) {\n            this._traverseToPath(node, entry, (node) => {\n                entryNode = node;\n            });\n        }\n        const traverseNodes = (\n            node: FastEventListenerNode,\n            callback: (path: string[], node: FastEventListenerNode) => void,\n            parentPath: string[],\n        ) => {\n            callback(parentPath, node);\n            for (let [key, childNode] of Object.entries(node)) {\n                if (key.startsWith(\"__\")) continue;\n                if (childNode) {\n                    traverseNodes(childNode as FastEventListenerNode, callback, [\n                        ...parentPath,\n                        key,\n                    ]);\n                }\n            }\n        };\n        // 如果没有指定entry或entry为空数组，则递归遍历所有节点\n        traverseNodes(entryNode, callback, []);\n    }\n\n    private _onListenerError(\n        listener: TypedFastEventListener,\n        message: TypedFastEventMessage,\n        args: FastEventListenerArgs<any> | undefined,\n        e: any,\n    ) {\n        if (e instanceof Error) {\n            // @ts-ignore\n            e._emitter = `${listener.name || \"anonymous\"}:${message.type}`;\n        }\n        this._executeHooks(\"ListenerError\", [e, listener, message, args]);\n        if (this._options.ignoreErrors) {\n            return e;\n        } else {\n            throw e;\n        }\n    }\n    /**\n     * 执行单个监听器函数\n     * @param listener - 要执行的监听器函数或包装过的监听器对象\n     * @param message - 事件消息对象，包含type、payload和meta\n     * @param args - 监听器参数\n     * @param catchErrors - 是否捕获并处理执行过程中的错误\n     * @returns 监听器的执行结果或错误对象（如果配置了ignoreErrors）\n     * @private\n     *\n     * @description\n     * 执行单个监听器函数，处理以下情况：\n     * - 如果监听器是包装过的（有__wrappedListener属性），调用包装的函数\n     * - 否则直接调用监听器函数\n     * - 使用配置的上下文（_context）作为this\n     * - 捕获并处理执行过程中的错误：\n     *   - 如果有onListenerError回调，调用它\n     *   - 如果配置了ignoreErrors，返回错误对象\n     *   - 否则抛出错误\n     */\n    private _executeListener(\n        listener: FastEventListenerMeta,\n        message: TypedFastEventMessage,\n        args: FastEventListenerArgs<any> | undefined,\n        catchErrors: boolean = false,\n    ): Promise<any> | any {\n        const listenerFn = listener[0];\n        try {\n            if (this.options.debug) {\n                listener.length = 5;\n            }\n            // 如果传入已经aborted的abortSignal，则直接返回\n            if (args && args.abortSignal && args.abortSignal.aborted) {\n                return this._onListenerError(\n                    listenerFn,\n                    message,\n                    args,\n                    new AbortError(listener[0].name),\n                );\n            }\n            const isTransformed = ((args?.flags || 0) & FastEventListenerFlags.Transformed) > 0;\n\n            let result = listenerFn.call(\n                this.context,\n                isTransformed ? message.payload : message,\n                args!,\n            );\n            // 自动处理reject Promise\n            if (catchErrors && result && result instanceof Promise) {\n                result = tryReturnError(result, (e) =>\n                    this._onListenerError(listenerFn, message, args, e),\n                );\n            }\n            // 在调试模式下，在节点保存返回结果\n            if (this.options.debug) {\n                Promise.resolve(result);\n                if (isPromise(result)) {\n                    resolveValue(result).then((r) => {\n                        listener[5] = getWeakRef(r);\n                    });\n                } else {\n                    listener[5] = getWeakRef(result);\n                }\n            }\n            return result;\n        } catch (e: any) {\n            const errObj = this._onListenerError(listenerFn, message, args, e);\n            if (errObj instanceof Error) listener[5] = getWeakRef(errObj);\n            return errObj;\n        }\n    }\n    private _getListenerExecutor(args: FastEventListenerArgs): FastListenerExecutor | undefined {\n        if (!args) return;\n        const executor = args.executor || this._options.executor;\n        if (isFunction(executor)) return executor;\n    }\n\n    /**\n     * 执行监听器节点列表中的所有监听器函数\n     * @param nodes 监听器节点列表\n     * @param message 事件消息对象\n     * @param args 监听器参数\n     * @param args 监听器参数\n     * @returns 所有监听器函数的执行结果数组\n     * @private\n     *\n     * 执行流程:\n     * 1. 将所有节点中的监听器函数展平为一维数组\n     * 2. 通过执行器执行所有监听器函数\n     * 3. 更新监听器的执行次数,并移除达到执行次数限制的监听器\n     */\n    private _executeListeners(\n        nodes: FastEventListenerNode[],\n        message: TypedFastEventMessage,\n        args: FastEventListenerArgs<Meta>,\n        filter?: (listener: FastEventListenerMeta, node: FastEventListenerNode) => boolean,\n    ): any[] {\n        if (!nodes || nodes.length === 0) return [];\n        // A3 三遍合一：原\"收集 → _decListenerExecCount(计数+splice) → 执行\"合并为\n        // \"收集含计数 → 倒序 splice → 执行\"，省一遍全量遍历与临时元组分配。\n        // 计数仍严格先于执行，保留\"避免监听器内再次触发导致重复执行\"的语义。\n        const metas: FastEventListenerMeta[] = [];\n        const toRemove: [FastEventListenerMeta[], number][] = [];\n        for (const node of nodes) {\n            // localIdx 必须等于 listener 在 __listeners 中的真实数组下标，\n            // 因此 i 对每个 listener 都递增（含被 filter 跳过的），不能只在命中时递增\n            const arr = node.__listeners as unknown as FastEventListenerMeta[];\n            let i = 0;\n            for (const meta of arr) {\n                if (!filter || filter(meta, node)) {\n                    meta[2]++; // 实际执行次数\n                    metas.push(meta);\n                    // =0不限执行次数，>0时代表执行次数限制\n                    if (meta[1] > 0 && meta[1] <= meta[2]) {\n                        toRemove.push([arr, i]);\n                        this.listenerCount--; // 同步递减，与 off/offAll 路径一致\n                    }\n                }\n                i++;\n            }\n        }\n        // 倒序 splice：toRemove 收集顺序为升序，倒序遍历使同节点内 idx 降序，避免删元素错位\n        for (let i = toRemove.length - 1; i >= 0; i--) {\n            toRemove[i][0].splice(toRemove[i][1], 1);\n        }\n\n        const executeor = this._getListenerExecutor(args);\n        if (executeor) {\n            const r = executeor(metas, message, args, this._executeListener.bind(this)) as any[];\n            return Array.isArray(r) ? r : [r];\n        }\n        const results: any[] = [];\n        for (let i = 0; i < metas.length; i++) {\n            results.push(this._executeListener(metas[i], message, args, true));\n        }\n        return results;\n    }\n\n    /**\n     * 获取指定类型的所有事件监听器\n     * @param type - 事件类型，必须是 AllEvents 的键\n     * @returns 包含指定类型的所有监听器元数据的数组\n     */\n    getListeners(type: keyof AllEvents): FastEventListenerMeta[];\n    getListeners(type: string): FastEventListenerMeta[] {\n        return getListeners(this as any, type);\n    }\n    /**\n     * 清除所有事件或指定事件的保留消息\n     * @param type\n     */\n    clearRetainMessages(type?: EventNames | string) {\n        if (type) {\n            this.retainedMessages.delete(type as string);\n        } else {\n            this.retainedMessages.clear();\n        }\n    }\n    /**\n     * 触发事件并执行对应的监听器\n     *\n     * @param type - 事件类型字符串或包含事件信息的对象\n     * @param payload - 事件携带的数据负载\n     * @param retain - 是否保留该事件(用于新订阅者)\n     * @param meta - 事件元数据\n     * @returns 所有监听器的执行结果数组\n     *\n     * @example\n     * // 方式1: 参数形式\n     * emit('user.login', { id: 1 }, true)\n     *\n     * // 方式2: 对象形式\n     * emit({ type: 'user.login', payload: { id: 1 } ,meta:{...}}}, true)\n     */\n    /**\n     * 同步触发事件\n     * @param type - 事件类型，可以是字符串或预定义的事件类型\n     * @param payload - 事件数据负载\n     * @param retain - 是否保留该事件，用于后续新的订阅者\n     * @param meta - 事件元数据\n     * @returns 所有监听器的执行结果数组\n     *\n     * @description\n     * 同步触发指定类型的事件，支持两种调用方式：\n     * 1. 参数形式：emit(type, payload, retain, meta)\n     * 2. 对象形式：emit({ type, payload, meta }, retain)\n     *\n     * 特性：\n     * - 支持通配符匹配，一个事件可能触发多个监听器\n     * - 如果设置了retain为true，会保存最后一次的事件数据\n     * - 按照注册顺序同步调用所有匹配的监听器\n     * - 如果配置了ignoreErrors，监听器抛出的错误会被捕获并返回\n     *\n     * @example\n     * ```ts\n     * // 简单事件触发\n     * emitter.emit('user/login', { userId: 123 });\n     *\n     * // 带保留的事件触发\n     * emitter.emit('status/change', { online: true }, true);\n     *\n     * // 带元数据的事件触发\n     * emitter.emit('data/update', newData, false, { timestamp: Date.now() });\n     *\n     * // 使用对象形式触发\n     * emitter.emit({\n     *   type: 'user/login',\n     *   payload: { userId: 123 },\n     *   meta: { time: Date.now() }\n     * }, true);\n     *\n     * // 清除保留事件\n     * emitter.emit(\"user/login\")\n     *\n     * ```\n     *\n     * 为什么事件要使用UnTransformedEvents？\n     *\n     * 因为如果事件使用NotPayload，则会进行转换\n     *\n     */\n    public emit<R = any, T extends Types = Types>(\n        type: T,\n        payload?: UnTransformedEvents<AllEvents>[T],\n        retain?: boolean,\n    ): R[];\n    public emit<R = any, T extends string = string>(\n        type: ReplaceWildcard<T> | Types,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<AllEvents>, T>\n            : any,\n        retain?: boolean,\n    ): R[];\n    public emit<R = any, T extends string = string>(\n        type: ReplaceWildcard<T> | Types,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<AllEvents>, T>\n            : any,\n        options?: FastEventListenerArgs<Partial<Meta>>,\n    ): R[];\n    public emit<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n        message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], Partial<Meta>>,\n        retain?: boolean,\n    ): R[];\n    public emit<R = any>(message: MutableMessage<AllEvents, Meta>, retain?: boolean): R[];\n    public emit<R = any>(\n        message: {\n            type: keyof AllEvents;\n        },\n        retain?: boolean,\n    ): R[];\n    public emit<R = any>(message: FastEventMessage, retain?: boolean): R[];\n    public emit<R = any, T extends string = string>(\n        type: T,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<AllEvents>, T>\n            : any,\n        retain?: boolean,\n    ): R[];\n    public emit(): any {\n        const [message, args] = parseEmitArgs<AllEvents, Meta>(arguments, this.options.meta);\n\n        if (isFunction(args.parseArgs)) {\n            args.parseArgs(message, args);\n        }\n        const type = message.type;\n        const delimiter = this._delimiter;\n        const root = this.listeners;\n        // A1 单段快路径：type 不含分隔符时跳过 split + _traverseToPath 递归\n        const singleSegment = type.indexOf(delimiter) === -1;\n        const parts = singleSegment ? null : type.split(delimiter);\n        if (args.retain) {\n            this.retainedMessages.set(type, message);\n        }\n\n        // A2 transform 缓存（构造时规范化：非函数则 undefined）\n        const transformFn = this._transform;\n\n        // 1. 正常匹配节点(emit 路径直接命中,含通配符命中)\n        const normalNodes: FastEventListenerNode[] = [];\n        if (singleSegment) {\n            // 顺序与 _traverseToPath 一致：先通配后精确\n            if (\"*\" in root) normalNodes.push(root[\"*\"]);\n            if (\"**\" in root) normalNodes.push(root[\"**\"]);\n            if (type in root) normalNodes.push(root[type]);\n        } else {\n            this._traverseToPath(root, parts!, (node) => {\n                normalNodes.push(node);\n            });\n        }\n\n        // hooks 只对原始 emit 触发一次(broadcast 后代不单独触发 hook)\n        const r = this._executeHooks(\"BeforeExecuteListener\", [message, args]);\n        if (Array.isArray(r)) {\n            return r;\n        } else if (r === false) {\n            throw new AbortError(message.type);\n        }\n\n        // 2. broadcast 后代目标收集 + 改写(在 transform 前,回调收到原始 message/args)。\n        //    后代基于原始 message 改写 type,后续各自 transform(先 broadcast 后 transform)。\n        const broadcastItems: { node: FastEventListenerNode; descMsg: any; descArgs: any }[] = [];\n        if (args.broadcast) {\n            const targets = collectBroadcastTargets(\n                root,\n                singleSegment ? [type] : parts!,\n                delimiter,\n            );\n            for (const { node, type: descType } of targets) {\n                if (!node.__listeners || node.__listeners.length === 0) continue;\n                let descMsg: any;\n                let descArgs: any;\n                if (args.broadcast === true) {\n                    descMsg = { ...message, type: descType };\n                    descArgs = { ...args };\n                } else {\n                    const ret = (args.broadcast as Function).call(this, descType, message, args);\n                    if (!ret) continue;\n                    if (Array.isArray(ret)) {\n                        [descMsg, descArgs] = ret;\n                    } else {\n                        descMsg = ret;\n                        descArgs = { ...args };\n                    }\n                }\n                broadcastItems.push({ node, descMsg, descArgs });\n            }\n        }\n\n        const results: any[] = [];\n\n        // 3. 正常匹配:transform 保持突变(向后兼容,AfterExecuteListener 接收突变后 message)\n        if (transformFn) {\n            const transformed = transformFn.call(this, message as any);\n            if (transformed !== message) {\n                message.payload = transformed;\n                args.rawEventType = message.type;\n                args.flags = (args.flags || 0) | FastEventListenerFlags.Transformed;\n            }\n        }\n        results.push(...this._executeListeners(normalNodes, message, args));\n\n        // 4. 后代覆盖:各自 transform(基于原始 message 副本,不受正常突变影响),经 executor 执行\n        for (const { node, descMsg, descArgs } of broadcastItems) {\n            if (transformFn) {\n                const transformed = transformFn.call(this, descMsg);\n                if (transformed !== descMsg) {\n                    descMsg.payload = transformed;\n                    descArgs.rawEventType = descMsg.type;\n                    descArgs.flags = (descArgs.flags || 0) | FastEventListenerFlags.Transformed;\n                }\n            }\n            results.push(...this._executeListeners([node], descMsg, descArgs));\n        }\n\n        // 将 results 内部所有 expandable 的项展开，见 utils\\expandable.ts 说明\n        if (this._expandResults) {\n            expandEmitResults(results);\n        }\n        this._executeHooks(\"AfterExecuteListener\", [message, results, normalNodes] as any);\n        return results;\n    }\n\n    /**\n     * 发布端前缀广播快捷方法（等价于 emit(type, payload, { broadcast, retain })）。\n     *\n     * callback 省略时默认走 broadcast:true（后代监听器的 message.type 改写为\n     * 后代完整路径）；传入 callback 则逐个后代改写，返回 null/falsy 跳过该后代。\n     */\n    public broadcast<R = any, T extends string = string>(\n        type: ReplaceWildcard<T> | Types,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<AllEvents>, T>\n            : any,\n        callback?: (\n            type: string,\n            message: FastEventMessage,\n            args: FastEventListenerArgs<any>,\n        ) => [FastEventMessage, FastEventListenerArgs<any>] | FastEventMessage | null,\n        retain?: boolean,\n    ): R[] {\n        const options = (\n            retain ? { broadcast: callback ?? true, retain: true } : { broadcast: callback ?? true }\n        ) as FastEventListenerArgs<any>;\n        return this.emit(type as any, payload as any, options as any) as R[];\n    }\n\n    /**\n     * 异步触发事件\n     * @param type - 事件类型，可以是字符串或预定义的事件类型\n     * @param payload - 事件数据负载\n     * @param retain - 是否保留该事件，用于后续新的订阅者\n     * @param meta - 事件元数据\n     * @returns Promise，解析为所有监听器的执行结果数组\n     *\n     * @description\n     * 异步触发指定类型的事件，与emit方法类似，但有以下区别：\n     * - 返回Promise，等待所有异步监听器执行完成\n     * - 使用Promise.allSettled处理监听器的执行结果\n     * - 即使某些监听器失败，也会等待所有监听器执行完成\n     * - 返回结果包含成功值或错误信息\n     *\n     * @example\n     * ```ts\n     * // 异步事件处理\n     * const results = await emitter.emitAsync('data/process', rawData);\n     *\n     * // 处理结果包含成功和失败的情况\n     * results.forEach(result => {\n     *   if (result instanceof Error) {\n     *     console.error('处理失败:', result);\n     *   } else {\n     *     console.log('处理成功:', result);\n     *   }\n     * });\n     *\n     * // 带元数据的异步事件\n     * await emitter.emitAsync('batch/process', items, false, {\n     *   batchId: 'batch-001',\n     *   timestamp: Date.now()\n     * });\n     * ```\n     */\n    public async emitAsync<R = any, T extends Types = Types>(\n        type: T,\n        payload?: UnTransformedEvents<AllEvents>[T],\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any, T extends string = string>(\n        type: ReplaceWildcard<T> | Types,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<AllEvents>, T>\n            : any,\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any, T extends string = string>(\n        type: ReplaceWildcard<T> | Types,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<AllEvents>, T>\n            : any,\n        options?: FastEventListenerArgs<Partial<Meta>>,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any, T extends KeyOf<AllEvents> = KeyOf<AllEvents>>(\n        message: FastEventEmitMessage<T, UnTransformedEvents<AllEvents>[T], Partial<Meta>>,\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any>(\n        message: MutableMessage<AllEvents, Meta>,\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any>(\n        message: {\n            type: keyof AllEvents;\n        },\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n    public async emitAsync<R = any, T extends string = string>(\n        type: T,\n        payload?: InMatchedEvent<Events, T> extends true\n            ? GetPayload<UnTransformedEvents<AllEvents>, T>\n            : any,\n        retain?: boolean,\n    ): Promise<(R | Error)[]>;\n\n    public async emitAsync<R = any>(): Promise<(R | Error)[]> {\n        const results = await Promise.allSettled(this.emit.apply(this, arguments as any));\n        return getPromiseResults(results);\n    }\n\n    /**\n     * 等待指定事件发生，返回一个Promise\n     * @param type - 要等待的事件类型\n     * @param timeout - 超时时间（毫秒），默认为0表示永不超时\n     * @returns Promise，解析为事件消息对象，包含type、payload和meta\n     *\n     * @description\n     * 创建一个Promise，在指定事件发生时解析。\n     * - 当事件触发时，Promise会解析为事件消息对象\n     * - 如果设置了timeout且超时，Promise会被拒绝\n     * - 一旦事件发生或超时，会自动取消事件监听\n     *\n     * @example\n     * ```ts\n     * try {\n     *   // 等待登录事件，最多等待5秒\n     *   const event = await emitter.waitFor('user/login', 5000);\n     *   console.log('用户登录成功:', event.payload);\n     * } catch (error) {\n     *   console.error('等待登录超时');\n     * }\n     *\n     * // 无限等待事件\n     * const event = await emitter.waitFor('server/ready');\n     * console.log('服务器就绪');\n     *\n     * // 等待指定的事件发生，并且如果该事件有其他订阅者，则同时等待该事件的所有订阅执行完成\n     * waitFor\n     *\n     *\n     *\n     * ```\n     */\n    public waitFor<T extends string = KeyOf<AllEvents>>(\n        type: T,\n        timeout?: number,\n    ): Promise<\n        T extends IsTransformedEvent<AllEvents, T>\n            ? PickPayload<ValueOf<GetClosestEvents<Events, T>>>\n            : FastEventMessage<T, GetClosestEventPayload<AllEvents, T>, Meta>\n    >;\n    public waitFor<T extends string = string>(\n        type: T,\n        timeout?: number,\n    ): Promise<TypedFastEventMessage<AllEvents, Meta>>;\n\n    public waitFor(): Promise<any> {\n        const type = arguments[0] as any;\n        const timeout = arguments[1] as number;\n        return new Promise<any>((resolve, reject) => {\n            let tid: any;\n            let subscriber: FastEventSubscriber;\n            const listener = (message: any) => {\n                clearTimeout(tid);\n                subscriber?.off();\n                resolve(message);\n            };\n            if (timeout && timeout > 0) {\n                tid = setTimeout(() => {\n                    subscriber?.off();\n                    reject(new Error(\"wait for event<\" + type + \"> is timeout\"));\n                }, timeout);\n            }\n            // 订阅事件\n            subscriber = this.on(type, listener as any) as unknown as FastEventSubscriber;\n        });\n    }\n\n    /**\n     * 创建一个新的事件作用域\n     * @param prefix - 作用域前缀，将自动添加到该作用域下所有事件名称前\n     * @returns 新的FastEventScope实例\n     *\n     * @description\n     * 创建一个新的事件作用域，用于在特定命名空间下管理事件。\n     *\n     * 重要特性：\n     * - 作用域与父事件发射器共享同一个监听器表\n     * - 作用域中的事件会自动添加前缀\n     * - 作用域的所有操作都会映射到父事件发射器上\n     * - 作用域不是完全隔离的，只是提供了事件名称的命名空间\n     *\n     * @example\n     * ```ts\n     * const emitter = new FastEvent();\n     *\n     * // 创建用户相关事件的作用域\n     * const userEvents = emitter.scope('user');\n     *\n     * // 在作用域中监听事件\n     * userEvents.on('login', (data) => {\n     *   // 实际监听的是 'user/login'\n     *   console.log('用户登录:', data);\n     * });\n     *\n     * // 在作用域中触发事件\n     * userEvents.emit('login', { userId: 123 });\n     * // 等同于 emitter.emit('user/login', { userId: 123 })\n     *\n     * // 创建嵌套作用域\n     * const profileEvents = userEvents.scope('profile');\n     * profileEvents.emit('update', { name: 'John' });\n     * // 等同于 emitter.emit('user/profile/update', { name: 'John' })\n     *\n     * // 清理作用域\n     * userEvents.offAll();  // 清理 'user' 前缀下的所有事件\n     * ```\n     */\n    scope<P extends string = string, ScopeInstance extends IFastEventScope = IFastEventScope>(\n        prefix: P,\n        scopeObj: ScopeInstance,\n        options?: DeepPartial<FastEventScopeOptions<Meta>>,\n    ): FastEventScope<\n        RemoveAnyRecord<ScopeEvents<AllEvents, P> & ScopeInstance[\"__events__\"]>,\n        RemoveAnyRecord<Meta & ScopeInstance[\"__meta__\"]>,\n        RemoveAnyRecord<Context & ScopeInstance[\"__context__\"]>\n    > &\n        ScopeInstance;\n    scope<\n        E = unknown, //用于扩展事件\n        P extends string = string,\n        M extends Record<string, any> = Record<string, any>,\n        C = Context,\n    >(\n        prefix: P,\n        options?: DeepPartial<FastEventScopeOptions<Meta & M, C>>,\n    ): FastEventScope<ScopeEvents<Events, P> & E, Meta & M, C>;\n    scope() {\n        const [prefix, scopeObj, options] = parseScopeArgs(\n            arguments,\n            this.options.meta,\n            this.options.context,\n        );\n        let scope;\n        if (scopeObj) {\n            scope = scopeObj;\n        } else {\n            scope = new FastEventScope();\n        }\n        scope.bind(this as any, prefix, options);\n        return scope;\n    }\n}\n"]}