fastevent 2.5.0 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/executors/index.js +1 -1
- package/dist/executors/index.js.map +1 -1
- package/dist/executors/index.mjs +1 -1
- package/dist/executors/index.mjs.map +1 -1
- package/dist/index.d.mts +81 -54
- package/dist/index.d.ts +81 -54
- package/dist/index.global.js +1 -1
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/pipes/index.d.mts +4 -4
- package/dist/pipes/index.d.ts +4 -4
- package/dist/pipes/index.js +1 -1
- package/dist/pipes/index.js.map +1 -1
- package/dist/pipes/index.mjs +1 -1
- package/dist/pipes/index.mjs.map +1 -1
- package/dist/viewer/index.js +104 -104
- package/dist/viewer/index.js.map +1 -1
- package/dist/viewer/index.mjs +393 -1089
- package/dist/viewer/index.mjs.map +1 -1
- package/package.json +1 -1
- package/readme.md +66 -65
package/dist/index.d.ts
CHANGED
|
@@ -806,6 +806,24 @@ type MutableMessage<Events extends Record<string, any>, Meta extends Record<stri
|
|
|
806
806
|
} & FastEventMessageExtends;
|
|
807
807
|
}[KeyOf<Events>];
|
|
808
808
|
|
|
809
|
+
/**
|
|
810
|
+
* 返回最匹配的事件元组
|
|
811
|
+
*
|
|
812
|
+
* [事件名称,事件负载]
|
|
813
|
+
*
|
|
814
|
+
* type Events = {
|
|
815
|
+
* "users/* /login": string;
|
|
816
|
+
"users/* /logout": number;
|
|
817
|
+
"users/* /*": { name: string };
|
|
818
|
+
};
|
|
819
|
+
|
|
820
|
+
type Result =GetClosestEventTuple<Events,"users/fisher/login">
|
|
821
|
+
type Result = ["users/* /login", string]
|
|
822
|
+
|
|
823
|
+
*
|
|
824
|
+
*/
|
|
825
|
+
type GetClosestMessage<Events extends Record<string, any>, T extends string, Meta extends Record<string, any> = never> = FastEventMessage<ContainsWildcard<T> extends true ? ReplaceWildcard<Exclude<ExpandRecord<GetClosestEvents<Events, T>>[0], number | symbol>> : T, ExpandRecord<GetClosestEvents<Events, T>>[1], Meta>;
|
|
826
|
+
|
|
809
827
|
/**
|
|
810
828
|
* 事件消息相关
|
|
811
829
|
*/
|
|
@@ -1030,14 +1048,28 @@ interface FastEventIteratorOptions<T = FastEventMessage> {
|
|
|
1030
1048
|
/** 信号,用于取消迭代 */
|
|
1031
1049
|
signal?: AbortSignal;
|
|
1032
1050
|
}
|
|
1051
|
+
/**
|
|
1052
|
+
* 方法装饰器类型定义(TypeScript 5.0+ 新标准)
|
|
1053
|
+
*
|
|
1054
|
+
* 新装饰器标准使用上下文对象和值,而不是传统的 (target, propertyKey, descriptor)
|
|
1055
|
+
*/
|
|
1056
|
+
/**
|
|
1057
|
+
* 可作为装饰器使用的迭代器
|
|
1058
|
+
*
|
|
1059
|
+
* 关键设计:通过交叉类型实现多态
|
|
1060
|
+
* - 装饰器工厂:emitter.on("event", options)
|
|
1061
|
+
* - 方法装饰器:@emitter.on("event")
|
|
1062
|
+
* - 异步迭代器:for await (const msg of emitter.on("event"))
|
|
1063
|
+
*/
|
|
1064
|
+
type WithListenerDecorator<T extends FastEventIterator> = T & ListenerDecorator;
|
|
1065
|
+
type ListenerDecorator = (value: (...args: any[]) => any, context: ClassMethodDecoratorContext) => void;
|
|
1066
|
+
type IListenerDecoratorBuilder = (type: string, options?: FastEventListenOptions) => ListenerDecorator;
|
|
1033
1067
|
declare class FastEventIterator<T = any> implements AsyncIterableIterator<T> {
|
|
1034
1068
|
private eventEmitter;
|
|
1035
1069
|
private eventName;
|
|
1036
|
-
private buffer;
|
|
1037
1070
|
private resolvers;
|
|
1038
1071
|
private errorResolvers;
|
|
1039
1072
|
private isStopped;
|
|
1040
|
-
private error;
|
|
1041
1073
|
private options;
|
|
1042
1074
|
private currentSize;
|
|
1043
1075
|
private hasNewMessage;
|
|
@@ -1045,6 +1077,8 @@ declare class FastEventIterator<T = any> implements AsyncIterableIterator<T> {
|
|
|
1045
1077
|
private _ready;
|
|
1046
1078
|
private _listenOptions?;
|
|
1047
1079
|
private _cleanups;
|
|
1080
|
+
error: Error | null;
|
|
1081
|
+
buffer: [T, number][];
|
|
1048
1082
|
constructor(eventEmitter: FastEvent<any> | FastEventScope<any, any, any>, eventName: string, options?: FastEventIteratorOptions<T>);
|
|
1049
1083
|
get listener(): FastEventListener;
|
|
1050
1084
|
get ready(): boolean;
|
|
@@ -1204,38 +1238,6 @@ type FastEventListenerArgs<M = Record<string, any>> = {
|
|
|
1204
1238
|
rawEventType?: string;
|
|
1205
1239
|
};
|
|
1206
1240
|
|
|
1207
|
-
type TypedFastEventListener<T extends string = string, P = any, M = any, C = any> = (this: C, message: TypedFastEventMessage<Record<T, P>, M>, args: FastEventListenerArgs<M>) => any | Promise<any>;
|
|
1208
|
-
type TypedFastEventAnyListener<Events extends Record<string, any> = Record<string, any>, Meta = never, Context = any> = (this: Context, message: TypedFastEventMessage<Events, Meta>, args: FastEventListenerArgs<Meta>) => any | Promise<any>;
|
|
1209
|
-
type FastEventListeners<Events extends Record<string, any> = Record<string, any>, M = any, C = any> = {
|
|
1210
|
-
[K in keyof Events]: TypedFastEventListener<Exclude<K, number | symbol>, Events[K], M, C>;
|
|
1211
|
-
};
|
|
1212
|
-
type FastEventListener<T extends string = string, P = any, M extends Record<string, any> = Record<string, any>> = (message: FastEventMessage<T, P, M>, args: FastEventListenerArgs<M>) => any | Promise<any>;
|
|
1213
|
-
type FastEventCommonListener<Message = FastEventMessage, Meta extends Record<string, any> = Record<string, any>, Context = any> = (this: Context, message: Message, args: FastEventListenerArgs<Meta>) => any | Promise<any>;
|
|
1214
|
-
/**
|
|
1215
|
-
* [
|
|
1216
|
-
* 0: 监听器函数引用,
|
|
1217
|
-
* 1: 需要执行多少次, =0代表不限
|
|
1218
|
-
* 2: 实际执行的次数(用于负载均衡时记录)
|
|
1219
|
-
* 3: 标签 用于调试一般可以标识监听器类型或任意信息
|
|
1220
|
-
* 4: 标识,
|
|
1221
|
-
* 5: 监听器最后一次执行结果,仅仅在debug时启用,如果结果是对象则是一个WeakRef
|
|
1222
|
-
* ]
|
|
1223
|
-
*/
|
|
1224
|
-
type FastEventListenerMeta = [
|
|
1225
|
-
TypedFastEventListener<any, any>,
|
|
1226
|
-
number,
|
|
1227
|
-
number,
|
|
1228
|
-
string,
|
|
1229
|
-
number,
|
|
1230
|
-
any?
|
|
1231
|
-
];
|
|
1232
|
-
type FastEventListenerNode = {
|
|
1233
|
-
__listeners: FastEventListenerMeta[];
|
|
1234
|
-
} & {
|
|
1235
|
-
[key: string]: FastEventListenerNode;
|
|
1236
|
-
};
|
|
1237
|
-
type FastListeners = FastEventListenerNode;
|
|
1238
|
-
|
|
1239
1241
|
/**
|
|
1240
1242
|
* 获取指定事件名称的负载类型
|
|
1241
1243
|
*/
|
|
@@ -1290,6 +1292,38 @@ type UnTransformedEvents<Events extends Record<string, any>> = {
|
|
|
1290
1292
|
[K in keyof Events]: Events[K] extends FastMessagePayload<infer P> ? P : Events[K];
|
|
1291
1293
|
};
|
|
1292
1294
|
|
|
1295
|
+
type TypedFastEventListener<T extends string = string, P = any, M = any, C = any> = (this: C, message: TypedFastEventMessage<Record<T, P>, M>, args: FastEventListenerArgs<M>) => any | Promise<any>;
|
|
1296
|
+
type TypedFastEventAnyListener<Events extends Record<string, any> = Record<string, any>, Meta extends Record<string, any> = Record<string, any>, Context = any> = (this: Context, message: MutableMessage<Events, Meta>, args: FastEventListenerArgs<Meta>) => any | Promise<any>;
|
|
1297
|
+
type FastEventListeners<Events extends Record<string, any> = Record<string, any>, Meta extends Record<string, any> = Record<string, any>, Context = any> = {
|
|
1298
|
+
[K in KeyOf<Events>]: FastEventCommonListener<K extends IsTransformedEvent<Events, K> ? PickPayload<ValueOf<GetClosestEvents<Events, K>>> : K extends "**" ? MutableMessage<Events> : GetClosestMessage<Events, K, Meta>, Meta, Context>;
|
|
1299
|
+
};
|
|
1300
|
+
type FastEventListener<T extends string = string, P = any, M extends Record<string, any> = Record<string, any>> = (message: FastEventMessage<T, P, M>, args: FastEventListenerArgs<M>) => any | Promise<any>;
|
|
1301
|
+
type FastEventCommonListener<Message = FastEventMessage, Meta extends Record<string, any> = Record<string, any>, Context = any> = (this: Context, message: Message, args: FastEventListenerArgs<Meta>) => any | Promise<any>;
|
|
1302
|
+
/**
|
|
1303
|
+
* [
|
|
1304
|
+
* 0: 监听器函数引用,
|
|
1305
|
+
* 1: 需要执行多少次, =0代表不限
|
|
1306
|
+
* 2: 实际执行的次数(用于负载均衡时记录)
|
|
1307
|
+
* 3: 标签 用于调试一般可以标识监听器类型或任意信息
|
|
1308
|
+
* 4: 标识,
|
|
1309
|
+
* 5: 监听器最后一次执行结果,仅仅在debug时启用,如果结果是对象则是一个WeakRef
|
|
1310
|
+
* ]
|
|
1311
|
+
*/
|
|
1312
|
+
type FastEventListenerMeta = [
|
|
1313
|
+
TypedFastEventListener<any, any>,
|
|
1314
|
+
number,
|
|
1315
|
+
number,
|
|
1316
|
+
string,
|
|
1317
|
+
number,
|
|
1318
|
+
any?
|
|
1319
|
+
];
|
|
1320
|
+
type FastEventListenerNode = {
|
|
1321
|
+
__listeners: FastEventListenerMeta[];
|
|
1322
|
+
} & {
|
|
1323
|
+
[key: string]: FastEventListenerNode;
|
|
1324
|
+
};
|
|
1325
|
+
type FastListeners = FastEventListenerNode;
|
|
1326
|
+
|
|
1293
1327
|
type AddBeforeListenerHook = (type: string, listener: TypedFastEventListener, options: FastEventListenOptions<Record<string, any>, any>) => boolean | FastEventSubscriber | void;
|
|
1294
1328
|
type AddAfterListenerHook = (type: string, node: FastEventListenerNode) => void;
|
|
1295
1329
|
type RemoveListenerHook = (type: string, listener: TypedFastEventListener, node: FastEventListenerNode) => void;
|
|
@@ -1307,24 +1341,6 @@ type FastEventHooks = {
|
|
|
1307
1341
|
AfterExecuteListener: AfterExecuteListenerHook[];
|
|
1308
1342
|
};
|
|
1309
1343
|
|
|
1310
|
-
/**
|
|
1311
|
-
* 返回最匹配的事件元组
|
|
1312
|
-
*
|
|
1313
|
-
* [事件名称,事件负载]
|
|
1314
|
-
*
|
|
1315
|
-
* type Events = {
|
|
1316
|
-
* "users/* /login": string;
|
|
1317
|
-
"users/* /logout": number;
|
|
1318
|
-
"users/* /*": { name: string };
|
|
1319
|
-
};
|
|
1320
|
-
|
|
1321
|
-
type Result =GetClosestEventTuple<Events,"users/fisher/login">
|
|
1322
|
-
type Result = ["users/* /login", string]
|
|
1323
|
-
|
|
1324
|
-
*
|
|
1325
|
-
*/
|
|
1326
|
-
type GetClosestMessage<Events extends Record<string, any>, T extends string, Meta extends Record<string, any> = never> = FastEventMessage<ContainsWildcard<T> extends true ? ReplaceWildcard<Exclude<ExpandRecord<GetClosestEvents<Events, T>>[0], number | symbol>> : T, ExpandRecord<GetClosestEvents<Events, T>>[1], Meta>;
|
|
1327
|
-
|
|
1328
1344
|
type InMatchedEvent<Events extends Record<string, any>, T> = T extends KeyOf<Events> | ReplaceWildcard<KeyOf<Events>> ? true : false;
|
|
1329
1345
|
|
|
1330
1346
|
type FastEventScopeOptions<Meta = Record<string, any>, Context = never> = {
|
|
@@ -1363,6 +1379,9 @@ declare class FastEventScope<Events extends Record<string, any> = Record<string,
|
|
|
1363
1379
|
messages: MutableMessage<Events, FinalMeta>;
|
|
1364
1380
|
rawEvents: Events;
|
|
1365
1381
|
meta: FinalMeta;
|
|
1382
|
+
listeners: FastEventListeners<Events, Expand<FastEventMeta & Meta & Record<string, any>>>;
|
|
1383
|
+
anyListener: TypedFastEventAnyListener<Events, Expand<FastEventMeta & Meta & Record<string, any>>>;
|
|
1384
|
+
listener: FastEventCommonListener<FastEventMessage, Expand<FastEventMeta & Meta & Record<string, any>>>;
|
|
1366
1385
|
};
|
|
1367
1386
|
prefix: string;
|
|
1368
1387
|
emitter: FastEvent<any>;
|
|
@@ -1508,6 +1527,7 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
|
|
|
1508
1527
|
message: MutableMessage<AllEvents, Meta>;
|
|
1509
1528
|
listeners: FastEventListeners<AllEvents, Expand<FastEventMeta & Meta & Record<string, any>>>;
|
|
1510
1529
|
anyListener: TypedFastEventAnyListener<AllEvents, Expand<FastEventMeta & Meta & Record<string, any>>>;
|
|
1530
|
+
listener: FastEventCommonListener<FastEventMessage, Expand<FastEventMeta & Meta & Record<string, any>>>;
|
|
1511
1531
|
};
|
|
1512
1532
|
/**
|
|
1513
1533
|
* 创建FastEvent实例
|
|
@@ -1584,6 +1604,13 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
|
|
|
1584
1604
|
* @description 遍历节点的监听器列表,移除所有匹配的监听器。支持移除普通函数和数组形式的监听器
|
|
1585
1605
|
*/
|
|
1586
1606
|
private _removeListener;
|
|
1607
|
+
/**
|
|
1608
|
+
* 创建异步迭代监听器
|
|
1609
|
+
* @param type
|
|
1610
|
+
* @param options
|
|
1611
|
+
* @returns
|
|
1612
|
+
*/
|
|
1613
|
+
private _createAyncIteratorListener;
|
|
1587
1614
|
/**
|
|
1588
1615
|
* 注册事件监听器
|
|
1589
1616
|
* @param type - 事件类型,支持以下格式:
|
|
@@ -1608,7 +1635,7 @@ declare class FastEvent<Events extends Record<string, any> = Record<string, any>
|
|
|
1608
1635
|
* emitter.on('event', handler, { count: 3 });
|
|
1609
1636
|
* ```
|
|
1610
1637
|
*/
|
|
1611
|
-
on<T extends string = KeyOf<Events> | "**">(type: T, options?: FastEventListenOptions<AllEvents, Meta>): T extends IsTransformedEvent<AllEvents, T> ? FastEventIterator<T extends "**" ? IsAllTransformed<Events> extends true ? PayloadValues<AllEvents> : any : PickPayload<ValueOf<GetClosestEvents<AllEvents, T
|
|
1638
|
+
on<T extends string = KeyOf<Events> | "**">(type: T, options?: FastEventListenOptions<AllEvents, Meta>): T extends IsTransformedEvent<AllEvents, T> ? WithListenerDecorator<FastEventIterator<T extends "**" ? IsAllTransformed<Events> extends true ? PayloadValues<AllEvents> : any : PickPayload<ValueOf<GetClosestEvents<AllEvents, T>>>>> : WithListenerDecorator<FastEventIterator<T extends "**" ? MutableMessage<AllEvents> : GetClosestMessage<Events, T, Meta>>>;
|
|
1612
1639
|
on<T extends string = KeyOf<Events> | "**">(type: T, listener: FastEventCommonListener<T extends IsTransformedEvent<AllEvents, T> ? PickPayload<ValueOf<GetClosestEvents<Events, T>>> : T extends "**" ? MutableMessage<Events> : GetClosestMessage<Events, T, Meta>, Meta, Fallback<Context, typeof this>>, options?: FastEventListenOptions): FastEventSubscriber;
|
|
1613
1640
|
/**
|
|
1614
1641
|
* 注册一次性事件监听器
|
|
@@ -2069,4 +2096,4 @@ declare function isFastEvent(target: any): target is FastEvent;
|
|
|
2069
2096
|
*/
|
|
2070
2097
|
declare function isAsyncIterable<T = any>(value: unknown): value is AsyncIterable<T>;
|
|
2071
2098
|
|
|
2072
|
-
export { AbortError, type Add, type AddAfterListenerHook, type AddBeforeListenerHook, type AfterExecuteListenerHook, type AllowCall, type ApplyWildcardEvents, type AssertFastMessage, type AssertRecord, type AssertString, type AtPayloads, type BeforeExecuteListenerHook, CancelError, type ChangeFieldType, type Class, type ClearListenersHook, type ClosestMatch, type ContainsWildcard, type Decrement, type DeepPartial, type Dict, type Equal, type Expand, type ExpandRecord, type ExpandWildcard, type ExtendWildcardEvents, type Fallback, FastEvent, type FastEventCommonListener, type FastEventCommonMessage, type FastEventEmitMessage, FastEventError, type FastEventHooks, FastEventIterator, type FastEventIteratorOptions, type FastEventListenOptions, type FastEventListener, type FastEventListenerArgs, FastEventListenerFlags, type FastEventListenerMeta, type FastEventListenerNode, type FastEventListeners, type FastEventMessage, type FastEventMessageExtends, type FastEventMeta, type FastEventOptions, FastEventScope, type FastEventScopeMeta, type FastEventScopeOptions, type FastEventSubscriber, type FastEvents, type FastListeners, type FastMessagePayload, type FastQueueOverflows, type FirstObjectItem, type FirstOfUnion, type GetClosestEventName, type GetClosestEventNameTuple, type GetClosestEventPayload, type GetClosestEventTuple, type GetClosestEvents, type GetFixedPartCount, type GetMatchedEventNames, type GetPartCount, type GetPartCountAcc, type GetPayload, type GetWildcardCount, type GetWildcardEventList, type IFastEventScope, type IfNever, type IndexOfMax, type IndexOfMin, type IsAllTransformed, type IsAny, type IsAnyRecord, type IsFullWildcard, type IsMatchEventName, type IsMultiWildcard, type IsNever, type IsSemiWildcard, type IsTransformedEvent, type IsWildcardPart, type Join, type KeyOf, type Keys, type ListenerErrorHook, type Max, type Merge, type MergeStrings, type MergeUnion, type Min, type MutableMessage, type MutableRecord, type NormalEvents, type NotEqual, type NotPayload, type ObjectKeys, type OmitTransformedEvents, type OptionalKeys, type Overloads, type OverrideOptions, type PayloadValues, type PickEqualRecord, type PickInlcudeDelimiterRecord, type PickNotEqualRecord, type PickNotInlcudeDelimiterRecord, type PickPayload, type PickTransformedEvents, type PrefixNumber, type ProcessSegments, QueueOverflowError, type RemoveEmptyObject, type RemoveListenerHook, type ReplaceWildcard, type RequiredItems, type RequiredKeys, type ScopeEvents, type Slice, type Split, type SplitPath, type StrictEqual, TimeoutError, type ToFixedCounts, type ToKeyPrioritys, type ToWildcardMessage, type TransformedEvents, type Tuple, type TypedFastEventAnyListener, type TypedFastEventListener, type TypedFastEventMessage, type TypedFastEventMessageOptional, type UnTransformedEvents, UnboundError, type Union, type UnionToIntersection, type Unique, type ValueOf, type WildcardEvents, type WildcardKeyToObject, type WildcardKeys, type WildcardStyle, __FastEventScope__, __FastEvent__, __expandable__, createAsyncEventIterator, expandable, isAsyncIterable, isClass, type isEmpty, isExpandable, isFastEvent, isFastEventMessage, isFastEventScope, isFunction, isPathMatched, isString, isSubsctiber };
|
|
2099
|
+
export { AbortError, type Add, type AddAfterListenerHook, type AddBeforeListenerHook, type AfterExecuteListenerHook, type AllowCall, type ApplyWildcardEvents, type AssertFastMessage, type AssertRecord, type AssertString, type AtPayloads, type BeforeExecuteListenerHook, CancelError, type ChangeFieldType, type Class, type ClearListenersHook, type ClosestMatch, type ContainsWildcard, type Decrement, type DeepPartial, type Dict, type Equal, type Expand, type ExpandRecord, type ExpandWildcard, type ExtendWildcardEvents, type Fallback, FastEvent, type FastEventCommonListener, type FastEventCommonMessage, type FastEventEmitMessage, FastEventError, type FastEventHooks, FastEventIterator, type FastEventIteratorOptions, type FastEventListenOptions, type FastEventListener, type FastEventListenerArgs, FastEventListenerFlags, type FastEventListenerMeta, type FastEventListenerNode, type FastEventListeners, type FastEventMessage, type FastEventMessageExtends, type FastEventMeta, type FastEventOptions, FastEventScope, type FastEventScopeMeta, type FastEventScopeOptions, type FastEventSubscriber, type FastEvents, type FastListeners, type FastMessagePayload, type FastQueueOverflows, type FirstObjectItem, type FirstOfUnion, type GetClosestEventName, type GetClosestEventNameTuple, type GetClosestEventPayload, type GetClosestEventTuple, type GetClosestEvents, type GetFixedPartCount, type GetMatchedEventNames, type GetPartCount, type GetPartCountAcc, type GetPayload, type GetWildcardCount, type GetWildcardEventList, type IFastEventScope, type IListenerDecoratorBuilder, type IfNever, type IndexOfMax, type IndexOfMin, type IsAllTransformed, type IsAny, type IsAnyRecord, type IsFullWildcard, type IsMatchEventName, type IsMultiWildcard, type IsNever, type IsSemiWildcard, type IsTransformedEvent, type IsWildcardPart, type Join, type KeyOf, type Keys, type ListenerDecorator, type ListenerErrorHook, type Max, type Merge, type MergeStrings, type MergeUnion, type Min, type MutableMessage, type MutableRecord, type NormalEvents, type NotEqual, type NotPayload, type ObjectKeys, type OmitTransformedEvents, type OptionalKeys, type Overloads, type OverrideOptions, type PayloadValues, type PickEqualRecord, type PickInlcudeDelimiterRecord, type PickNotEqualRecord, type PickNotInlcudeDelimiterRecord, type PickPayload, type PickTransformedEvents, type PrefixNumber, type ProcessSegments, QueueOverflowError, type RemoveEmptyObject, type RemoveListenerHook, type ReplaceWildcard, type RequiredItems, type RequiredKeys, type ScopeEvents, type Slice, type Split, type SplitPath, type StrictEqual, TimeoutError, type ToFixedCounts, type ToKeyPrioritys, type ToWildcardMessage, type TransformedEvents, type Tuple, type TypedFastEventAnyListener, type TypedFastEventListener, type TypedFastEventMessage, type TypedFastEventMessageOptional, type UnTransformedEvents, UnboundError, type Union, type UnionToIntersection, type Unique, type ValueOf, type WildcardEvents, type WildcardKeyToObject, type WildcardKeys, type WildcardStyle, type WithListenerDecorator, __FastEventScope__, __FastEvent__, __expandable__, createAsyncEventIterator, expandable, isAsyncIterable, isClass, type isEmpty, isExpandable, isFastEvent, isFastEventMessage, isFastEventScope, isFunction, isPathMatched, isString, isSubsctiber };
|
package/dist/index.global.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var FastEventSpaces=(function(exports){'use strict';var C=Object.defineProperty;var re=(r,e,t)=>e in r?C(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var o=(r,e)=>C(r,"name",{value:e,configurable:true});var h=(r,e,t)=>re(r,typeof e!="symbol"?e+"":e,t);var ne=Symbol.for("__FastEvent__"),oe=Symbol.for("__FastEventScope__"),j=class j extends Error{constructor(e){super(e);}};o(j,"FastEventError");var m=j,O=class O extends m{};o(O,"TimeoutError");var N=O,T=class T extends m{};o(T,"UnboundError");var L=T,R=class R extends m{};o(R,"AbortError");var _=R,F=class F extends m{};o(F,"CancelError");var b=F,z=class z extends m{};o(z,"QueueOverflowError");var B=z;var d=(function(r){return r[r.Transformed=1]="Transformed",r})({});function w(r,e,t,s){let i,n={},f={};return typeof r[0]=="object"?(Object.assign(f,r[0]),n=typeof r[1]=="boolean"?{retain:r[1]}:r[1]||{},i=r[0].meta):(f.type=r[0],f.payload=r[1],n=typeof r[2]=="boolean"?{retain:r[2]}:r[2]||{}),i=Object.assign({},e,t,n.meta,i),Object.keys(i).length===0?(i=void 0,delete f.meta):f.meta=i,n.executor===void 0&&(n.executor=s),[f,n]}o(w,"parseEmitArgs");function $(r){return r?typeof r=="object"&&"__FastEventScope__"in r:false}o($,"isFastEventScope");function S(r,e,t){let s=r[0],i=$(r[1])?r[1]:void 0,n=(i?r[2]:r[1])||{};return n.meta=Object.assign({},e,n?.meta),n.context=n.context!==void 0?n.context:t,[s,i,n]}o(S,"parseScopeArgs");function x(r,e){return Object.defineProperty(r,"name",{value:e||"anonymous",configurable:true}),r}o(x,"renameFn");function l(r){return r&&typeof r=="function"}o(l,"isFunction");var P=class P{constructor(e){h(this,"__FastEventScope__",true);h(this,"__events__");h(this,"__meta__");h(this,"__context__");h(this,"_options",{});h(this,"prefix","");h(this,"emitter");this._options=Object.assign({},this._initOptions(e));}get context(){return this.options.context||this}get options(){return this._options}get listeners(){return this.emitter.getListeners(this.prefix)}bind(e,t,s){this.emitter=e,this._options=Object.assign(this._options,{scope:t},s),t.length>0&&!t.endsWith(e.options.delimiter)&&(this.prefix=t+e.options.delimiter);}_initOptions(e){return e}_getScopeListener(e){let t=this.prefix;if(t.length===0)return e;if(!e)throw new Error;let s=this;return x(function(n,f){let a=f.rawEventType||n.type;if(a.startsWith(t)){let c=((f.flags||0)&d.Transformed)>0?n:Object.assign({},n,{type:a.substring(t.length)});return e.call(s.context,c,f)}},e.name)}_getScopeType(e){return e===void 0?void 0:this.prefix+e}_fixScopeType(e){return e.startsWith(this.prefix)?e.substring(this.prefix.length):e}on(){if(!this.emitter)throw new L;let e=[...arguments];return e[0]=this._getScopeType(e[0]),e[1]=this._getScopeListener(e[1]),this.emitter.on(...e)}once(){return this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",...arguments)}off(){let e=arguments;typeof e[0]=="string"&&(e[0]=this._getScopeType(e[0])),this.emitter.off(...e);}offAll(){this.emitter.offAll(this.prefix.substring(0,this.prefix.length-1));}clear(){this.emitter.clear(this.prefix.substring(0,this.prefix.length-1));}emit(){let[e,t]=w(arguments,this.emitter.options.meta,this.options.meta,this.options.executor);return this._transformMessage(e,t),e.type=this._getScopeType(e.type),this.emitter.emit(e,t)}_transformMessage(e,t){l(this._options.transform)&&(t.rawEventType=this._getScopeType(e.type),t.flags=(t.flags||0)|d.Transformed,e.payload=this._options.transform.call(this,e));}async emitAsync(){return (await Promise.allSettled(this.emit.apply(this,arguments))).map(t=>t.status==="fulfilled"?t.value:t.reason)}async waitFor(){let e=arguments[0],t=arguments[1],s=await this.emitter.waitFor(this._getScopeType(e),t);return Object.assign({},s,{type:this._fixScopeType(s.type)})}scope(){let[e,t,s]=S(arguments,this.options.meta,this.options.context),i;return t?i=t:i=new P,i.bind(this.emitter,this.prefix+e,s),i}};o(P,"FastEventScope");var A=P;function k(r,e){let t=r.length,s=e.length;if(t!==s&&(s===0||e[s-1]!=="**"))return false;if(s>0&&e[s-1]==="**"){for(let i=0;i<s-1;i++)if(e[i]!=="*"&&e[i]!==r[i])return false;return true}for(let i=0;i<t;i++)if(e[i]!=="*"&&e[i]!==r[i])return false;return true}o(k,"isPathMatched");function V(r,e){let t=[];for(let s=r.length-1;s>=0;s--)e(r[s])&&(t.push(s),r.splice(s,1));return t.reverse()}o(V,"removeItem");function Fe(r){return r?typeof r=="object"&&"type"in r:false}o(Fe,"isFastEventMessage");function Ie(r){return r&&typeof r=="string"}o(Ie,"isString");var q=Symbol.for("__expandable__");function He(r){return r[q]=true,r}o(He,"expandable");function G(r){return r&&r[q]}o(G,"isExpandable");function J(r){return r&&typeof r=="object"&&"off"in r&&"listener"in r}o(J,"isSubsctiber");function Ve(r){return typeof r=="function"&&(r.toString().startsWith("class ")||r.prototype?.constructor===r)}o(Ve,"isClass");function Je(r){return r?typeof r=="object"&&"__FastEvent__"in r:false}o(Je,"isFastEvent");function K(r){if(r===null||typeof r!="object")return false;let e=r;return typeof e[Symbol.asyncIterator]=="function"||typeof e["@@asyncIterator"]=="function"}o(K,"isAsyncIterable");var X=o(()=>(r,e,t,s)=>r.map((i,n)=>s.call(r[n],i,e,t,true)),"parallel");function Y(r){for(let e=0;e<r.length;e++){let t=r[e];Array.isArray(t)&&G(t)&&(r.splice(e,1,...t),e+=t.length-1);}return r}o(Y,"expandEmitResults");function Z(r,e){return r.catch(t=>(e&&e(t),Promise.resolve(t)))}o(Z,"tryReturnError");var D=class D{constructor(e,t,s={}){h(this,"eventEmitter");h(this,"eventName");h(this,"buffer",[]);h(this,"resolvers",[]);h(this,"errorResolvers",[]);h(this,"isStopped",false);h(this,"error",null);h(this,"options");h(this,"currentSize");h(this,"hasNewMessage",false);h(this,"_listener");h(this,"_ready",false);h(this,"_listenOptions");h(this,"_cleanups",[]);this.eventEmitter=e,this.eventName=t;let i=20,n=100;this.options={size:s.size??i,maxExpandSize:s.maxExpandSize??n,expandOverflow:s.expandOverflow??"slide",overflow:s.overflow??"slide",lifetime:s.lifetime??0,onPush:s.onPush,onPop:s.onPop,onDrop:s.onDrop,onError:s.onError??(()=>true),signal:s.signal},this.currentSize=this.options.size,this._listener=this.onMessage.bind(this);}get listener(){return this._listener}get ready(){return this._ready}create(e){if(!this._ready){this._listenOptions=e;try{let t=this.eventEmitter.on(this.eventName,this._listener,e);if(this._cleanups.push(()=>t.off()),this.options.signal&&!this.options.signal.aborted){let s=o(()=>{this.off(!0);},"offFn");this.options.signal.addEventListener("abort",s),this._cleanups.push(()=>{this.options.signal.removeEventListener("abort",s);});}}finally{this._ready=true;}}}push(e){this.options.onPush?this.options.onPush(e,this.buffer):this.buffer.push(this.options.lifetime>0?[e,Date.now()]:[e,0]);}handleOverflow(e){switch(this.buffer.length>=this.options.maxExpandSize&&this.options.overflow==="expand"?this.options.expandOverflow:this.options.overflow){case "drop":return this.options.onDrop&&this.options.onDrop(e),false;case "expand":return this.currentSize=Math.min(this.currentSize+this.options.size,this.options.maxExpandSize),this.push(e),true;case "slide":let s=this.buffer.shift();return this.options.onDrop&&s&&this.options.onDrop(s[0]),this.push(e),true;case "throw":throw this.options.onDrop&&this.options.onDrop(e),new Error(`EventIterator queue overflow: buffer size (${this.currentSize}) exceeded`);default:return false}}onMessage(e,t){if(this.isStopped)return;let s=e;if(this.resolvers.length>0){this.resolvers.shift()({value:s,done:false});return}this.hasNewMessage=true,this.buffer.length<this.currentSize?this.push(s):this.handleOverflow(s);}off(e){this._ready&&(this.isStopped||(this.isStopped=true,this._cleanups.forEach(t=>t()),this._cleanups=[],this.buffer=[],this._ready=false,e?(this.errorResolvers.forEach(t=>{t(new _);}),this.errorResolvers=[]):(this.resolvers.forEach(t=>{t({value:void 0,done:true});}),this.resolvers=[]),this._ready=false));}async next(){if(this.error)return Promise.reject(this.error);if(this.isStopped&&this.buffer.length===0)return {value:void 0,done:true};if(this.buffer.length>0){let e,t;if(this.options.onPop){let s=this.options.onPop(this.buffer,this.hasNewMessage);s?[e,t]=s:[e,t]=this.buffer.shift()||[void 0,0];}else [e,t]=this.buffer.shift()||[void 0,0];if(this.hasNewMessage=false,e!==void 0)return this.options.lifetime>0&&Date.now()-t>this.options.lifetime?(this.options.onDrop&&this.options.onDrop(e),this.next()):{value:e,done:false}}return new Promise((e,t)=>{this.resolvers.push(e),this.errorResolvers.push(t);})}[Symbol.asyncIterator](){return this}async done(){return this.off(),{value:void 0,done:true}}async throw(e){return this.error=e,this.off(),Promise.reject(e)}async return(){return this.off(),{value:void 0,done:true}}[Symbol.dispose](){this.off();}on(){this.create(this._listenOptions),this.isStopped=false;}};o(D,"FastEventIterator");var I=D;function U(r,e,t={}){return new I(r,e,t)}o(U,"createAsyncEventIterator");function Q(r,e){return Array.isArray(e)&&e.forEach(t=>{r=x(t(r),r.name);}),r}o(Q,"wrapPipeListener");function M(r){return r!==null&&(typeof r=="object"||typeof r=="function")?new WeakRef(r):r}o(M,"getWeakRef");function W(r){return r.map(e=>e.status==="fulfilled"?e.value:e.reason)}o(W,"getPromiseResults");function ee(r){if(r==null)return false;let e=typeof r;return e!=="object"&&e!=="function"?false:typeof r.then=="function"}o(ee,"isPromise");async function te(r){try{return r instanceof Promise?await r:r}catch(e){return e instanceof Error?e:new Error(String(e))}}o(te,"resolveValue");var H=class H{constructor(e){h(this,"__FastEvent__",true);h(this,"listeners",{__listeners:[]});h(this,"_options");h(this,"_delimiter","/");h(this,"_context");h(this,"_hooks");h(this,"retainedMessages",new Map);h(this,"listenerCount",0);h(this,"types",null);this._options=Object.assign({debug:false,id:Math.random().toString(36).substring(2),delimiter:"/",context:null,ignoreErrors:true,meta:void 0,expandEmitResults:true,executor:X()},this._initOptions(e)),this._delimiter=this._options.delimiter,this._context=this._options.context;}get options(){return this._options}get context(){return this.options.context||this}get meta(){return this.options.meta}get id(){return this._options.id}get title(){return this._options.title||this.id||"FastEvent"}get hooks(){return this._hooks||(this._hooks={AddBeforeListener:[],AddAfterListener:[],RemoveListener:[],ClearListeners:[],ListenerError:[],BeforeExecuteListener:[],AfterExecuteListener:[]}),this._hooks}_execAfterExecuteListener(e,t){Promise.allSettled(t[1]).then(s=>{t[1]=W(s),e.apply(this,t);});}_executeHooks(e,t,s=false){if(setTimeout(()=>{if(!this._hooks)return;let i=this.hooks[e];Array.isArray(i)&&i.length>0&&Promise.allSettled(i.map(n=>{if(e==="AfterExecuteListener")this._execAfterExecuteListener(n,t);else return n.apply(this,t)}));}),!s){let i=this.options[`on${e}`];if(l(i))if(e==="AfterExecuteListener")this._execAfterExecuteListener(i,t);else return i.apply(this,t)}}_initOptions(e){return e}_addListener(e,t,s){let{count:i,prepend:n}=s,f=0;return [this._forEachNodes(e,u=>{let c=[t,i,0,s.tag,s.flags];n?(u.__listeners.splice(0,0,c),f=0):(u.__listeners.push(c),f=u.__listeners.length-1),this.listenerCount++;}),f]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let i=0;i<e.length;i++){let n=e[i];if(n in s||(s[n]={__listeners:[]}),i===e.length-1){let f=s[n];return t(f,s),f}else s=s[n];}}_removeListener(e,t,s){s&&V(e.__listeners,i=>{i=Array.isArray(i)?i[0]:i;let n=i===s;return n&&(this.listenerCount--,this._executeHooks("RemoveListener",[t.join(this._delimiter),s,e])),n});}on(){let e=arguments[0],t=null,s,i=!l(arguments[1]);i?s=arguments[1]||{}:(t=arguments[1],s=arguments[2]||{});let n=Object.assign({count:0,flags:0,prepend:false},s);if(e.length===0)throw new Error("event type cannot be empty");if(i||t===null){let v=Object.assign({overflow:"expand",size:10,maxExpandSize:100},n.iterable),y=U(this,e,v);y.create(n);let p=this._executeHooks("AddBeforeListener",[e,y.listener,n]);if(p===false)throw new b;return K(p)?p:y}let f=this._executeHooks("AddBeforeListener",[e,t,n]);if(f===false)throw new b;if(J(f))return f;let a=e.split(this._delimiter);if(n.pipes&&n.pipes.length>0&&(t=Q(t,n.pipes)),l(n.filter)||l(n.off)){let v=t,y=o(()=>u&&this._removeListener(u,a,t),"off");t=x(function(p,E){if(l(n.off)&&n.off.call(this,p,E)){y();return}if(l(n.filter)){if(n.filter.call(this,p,E))return v.call(this,p,E)}else return v.call(this,p,E)},t.name);}let[u,c]=this._addListener(a,t,n),g=o(()=>u&&this._removeListener(u,a,t),"off");return this._executeHooks("AddAfterListener",[e,u]),this._emitRetainMessage(e,u,c),{off:g,listener:t,[Symbol.dispose](){g();}}}once(){return l(arguments[1])?this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1})):this.on(arguments[0],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",...arguments)}off(){let e=arguments,t=l(e[0])?void 0:e[0],s=l(e[0])?e[0]:e[1],i=t?t.split(this._delimiter):[],n=t?t.includes("*"):false;if(t&&!n)this._traverseToPath(this.listeners,i,f=>{s?this._removeListener(f,i,s):t&&(f.__listeners=[]);});else {let f=n?[]:i;this._traverseListeners(this.listeners,f,(a,u)=>{(s!==void 0||n&&k(a,i))&&(s?this._removeListener(u,i,s):u.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(i,n)=>{s+=n.__listeners.length;try{n.__listeners.forEach(f=>{this._executeHooks("RemoveListener",[i.join(this.options.delimiter),f[0],n]);});}finally{n.__listeners=[];}}),this.listenerCount-=s,this._removeRetainedEvents(e);}else try{let t=0;this._traverseListeners(this.listeners,[],(s,i)=>{t+=i.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}finally{this._executeHooks("ClearListeners",[]);}}_removeRetainedEvents(e){e||this.retainedMessages.clear(),e?.endsWith(this._delimiter)&&(e+=this._delimiter),this.retainedMessages.delete(e);for(let t of this.retainedMessages.keys())t.startsWith(e)&&this.retainedMessages.delete(t);}clear(e){this.offAll(e),this._removeRetainedEvents(e);}_emitRetainMessage(e,t,s){let i=[];if(e.includes("*")){let n=e.split(this._delimiter);this.retainedMessages.forEach((f,a)=>{let u=a.split(this._delimiter);k(u,n)&&i.push(f);});}else this.retainedMessages.has(e)&&i.push(this.retainedMessages.get(e));t&&i.forEach(n=>{this._executeListeners([t],n,{},f=>f[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,i=0,n){if(i>=t.length){s(e);return}let f=t[i];if(n===true){this._traverseToPath(e,t,s,i+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,s,i+1),"**"in e&&this._traverseToPath(e["**"],t,s,i+1,true),f in e&&this._traverseToPath(e[f],t,s,i+1);}_traverseListeners(e,t,s){let i=e;t&&t.length>0&&this._traverseToPath(e,t,f=>{i=f;});let n=o((f,a,u)=>{a(u,f);for(let[c,g]of Object.entries(f))c.startsWith("__")||g&&n(g,a,[...u,c]);},"traverseNodes");n(i,s,[]);}_onListenerError(e,t,s,i){if(i instanceof Error&&(i._emitter=`${e.name||"anonymous"}:${t.type}`),this._executeHooks("ListenerError",[i,e,t,s]),this._options.ignoreErrors)return i;throw i}_executeListener(e,t,s,i=false){let n=e[0];try{if(this.options.debug&&(e.length=5),s&&s.abortSignal&&s.abortSignal.aborted)return this._onListenerError(n,t,s,new _(e[0].name));let f=((s?.flags||0)&d.Transformed)>0,a=n.call(this.context,f?t.payload:t,s);return i&&a&&a instanceof Promise&&(a=Z(a,u=>this._onListenerError(n,t,s,u))),this.options.debug&&(Promise.resolve(a),ee(a)?te(a).then(u=>{e[5]=M(u);}):e[5]=M(a)),a}catch(f){let a=this._onListenerError(n,t,s,f);return a instanceof Error&&(e[5]=M(a)),a}}_getListenerExecutor(e){if(!e)return;let t=e.executor||this._options.executor;if(l(t))return t}_executeListeners(e,t,s,i){if(!e||e.length===0)return [];let n=[];for(let a of e){let u=0;for(let c of a.__listeners)(!i||i(c,a))&&n.push([c,u++,a.__listeners]);}this._decListenerExecCount(n);let f=this._getListenerExecutor(s);if(f){let a=f(n.map(u=>u[0]),t,s,this._executeListener.bind(this));return Array.isArray(a)?a:[a]}else return n.map(a=>this._executeListener(a[0],t,s,true))}_decListenerExecCount(e){for(let t=e.length-1;t>=0;t--){let s=e[t][0];s[2]++,s[1]>0&&s[1]<=s[2]&&e[t][2].splice(t,1);}}getListeners(e){let t=[],s=e.split(this._delimiter);this._traverseToPath(this.listeners,s,n=>{t.push(n);});let i=[];return t.map(n=>{i.push(...n.__listeners);}),i}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=w(arguments,this.options.meta);l(t.parseArgs)&&t.parseArgs(e,t);let s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let i=[],n=[];this._traverseToPath(this.listeners,s,a=>{n.push(a);});let f=this._executeHooks("BeforeExecuteListener",[e,t]);if(Array.isArray(f))return f;if(f===false)throw new _(e.type);if(l(this._options.transform)){let a=this._options.transform.call(this,e);a!==e&&(e.payload=a,t.rawEventType=e.type,t.flags=(t.flags||0)|d.Transformed);}return i.push(...this._executeListeners(n,e,t)),this._options.expandEmitResults&&Y(i),this._executeHooks("AfterExecuteListener",[e,i,n]),i}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return W(e)}waitFor(){let e=arguments[0],t=arguments[1];return new Promise((s,i)=>{let n,f,a=o(u=>{clearTimeout(n),f?.off(),s(u);},"listener");t&&t>0&&(n=setTimeout(()=>{f?.off(),i(new Error("wait for event<"+e+"> is timeout"));},t)),f=this.on(e,a);})}scope(){let[e,t,s]=S(arguments,this.options.meta,this.options.context),i;return t?i=t:i=new A,i.bind(this,e,s),i}};o(H,"FastEvent");var se=H;exports.AbortError=_;exports.CancelError=b;exports.FastEvent=se;exports.FastEventError=m;exports.FastEventIterator=I;exports.FastEventListenerFlags=d;exports.FastEventScope=A;exports.QueueOverflowError=B;exports.TimeoutError=N;exports.UnboundError=L;exports.__FastEventScope__=oe;exports.__FastEvent__=ne;exports.__expandable__=q;exports.createAsyncEventIterator=U;exports.expandable=He;exports.isAsyncIterable=K;exports.isClass=Ve;exports.isExpandable=G;exports.isFastEvent=Je;exports.isFastEventMessage=Fe;exports.isFastEventScope=$;exports.isFunction=l;exports.isPathMatched=k;exports.isString=Ie;exports.isSubsctiber=J;return exports;})({});//# sourceMappingURL=index.global.js.map
|
|
1
|
+
var FastEventSpaces=(function(exports){'use strict';var V=Object.defineProperty;var B=(n,e,t)=>e in n?V(n,e,{enumerable:true,configurable:true,writable:true,value:t}):n[e]=t;var l=(n,e,t)=>B(n,typeof e!="symbol"?e+"":e,t);var Q=Symbol.for("__FastEvent__"),J=Symbol.for("__FastEventScope__"),E=class extends Error{constructor(e){super(e);}},O=class extends E{},x=class extends E{},y=class extends E{},d=class extends E{},w=class extends E{};var q=(e=>(e[e.Transformed=1]="Transformed",e))(q||{});function T(n,e,t,s){let r,a={},i={};return typeof n[0]=="object"?(Object.assign(i,n[0]),a=typeof n[1]=="boolean"?{retain:n[1]}:n[1]||{},r=n[0].meta):(i.type=n[0],i.payload=n[1],a=typeof n[2]=="boolean"?{retain:n[2]}:n[2]||{}),r=Object.assign({},e,t,a.meta,r),Object.keys(r).length===0?(r=void 0,delete i.meta):i.meta=r,a.executor===void 0&&(a.executor=s),[i,a]}function I(n){return n?typeof n=="object"&&"__FastEventScope__"in n:false}function b(n,e,t){let s=n[0],r=I(n[1])?n[1]:void 0,a=(r?n[2]:n[1])||{};return a.meta=Object.assign({},e,a?.meta),a.context=a.context!==void 0?a.context:t,[s,r,a]}function u(n,e){return Object.defineProperty(n,"name",{value:e||"anonymous",configurable:true}),n}function c(n){return n&&typeof n=="function"}var M=class n{constructor(e){l(this,"__FastEventScope__",true);l(this,"__events__");l(this,"__meta__");l(this,"__context__");l(this,"_options",{});l(this,"prefix","");l(this,"emitter");this._options=Object.assign({},this._initOptions(e));}get context(){return this.options.context||this}get options(){return this._options}get listeners(){return this.emitter.getListeners(this.prefix)}bind(e,t,s){this.emitter=e,this._options=Object.assign(this._options,{scope:t},s),t.length>0&&!t.endsWith(e.options.delimiter)&&(this.prefix=t+e.options.delimiter);}_initOptions(e){return e}_getScopeListener(e){let t=this.prefix;if(t.length===0)return e;if(!e)throw new Error;let s=this;return u(function(a,i){let o=i.rawEventType||a.type;if(o.startsWith(t)){let v=((i.flags||0)&1)>0?a:Object.assign({},a,{type:o.substring(t.length)});return e.call(s.context,v,i)}},e.name)}_getScopeType(e){return e===void 0?void 0:this.prefix+e}_fixScopeType(e){return e.startsWith(this.prefix)?e.substring(this.prefix.length):e}on(){if(!this.emitter)throw new x;let e=[...arguments];return e[0]=this._getScopeType(e[0]),e[1]=this._getScopeListener(e[1]),this.emitter.on(...e)}once(){return this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",...arguments)}off(){let e=arguments;typeof e[0]=="string"&&(e[0]=this._getScopeType(e[0])),this.emitter.off(...e);}offAll(){this.emitter.offAll(this.prefix.substring(0,this.prefix.length-1));}clear(){this.emitter.clear(this.prefix.substring(0,this.prefix.length-1));}emit(){let[e,t]=T(arguments,this.emitter.options.meta,this.options.meta,this.options.executor);return this._transformMessage(e,t),e.type=this._getScopeType(e.type),this.emitter.emit(e,t)}_transformMessage(e,t){c(this._options.transform)&&(t.rawEventType=this._getScopeType(e.type),t.flags=(t.flags||0)|1,e.payload=this._options.transform.call(this,e));}async emitAsync(){return (await Promise.allSettled(this.emit.apply(this,arguments))).map(t=>t.status==="fulfilled"?t.value:t.reason)}async waitFor(){let e=arguments[0],t=arguments[1],s=await this.emitter.waitFor(this._getScopeType(e),t);return Object.assign({},s,{type:this._fixScopeType(s.type)})}scope(){let[e,t,s]=b(arguments,this.options.meta,this.options.context),r;return t?r=t:r=new n,r.bind(this.emitter,this.prefix+e,s),r}};function L(n,e){let t=n.length,s=e.length;if(t!==s&&(s===0||e[s-1]!=="**"))return false;if(s>0&&e[s-1]==="**"){for(let r=0;r<s-1;r++)if(e[r]!=="*"&&e[r]!==n[r])return false;return true}for(let r=0;r<t;r++)if(e[r]!=="*"&&e[r]!==n[r])return false;return true}function C(n,e){let t=[];for(let s=n.length-1;s>=0;s--)e(n[s])&&(t.push(s),n.splice(s,1));return t.reverse()}function ye(n){return n?typeof n=="object"&&"type"in n:false}function ue(n){return n&&typeof n=="string"}var k=Symbol.for("__expandable__");function he(n){return n[k]=true,n}function D(n){return n&&n[k]}function G(n){return n&&typeof n=="object"&&"off"in n&&"listener"in n}function xe(n){return typeof n=="function"&&(n.toString().startsWith("class ")||n.prototype?.constructor===n)}function be(n){return n?typeof n=="object"&&"__FastEvent__"in n:false}function A(n){if(n===null||typeof n!="object")return false;let e=n;return typeof e[Symbol.asyncIterator]=="function"||typeof e["@@asyncIterator"]=="function"}var j=()=>(n,e,t,s)=>n.map((r,a)=>s.call(n[a],r,e,t,true));function N(n){for(let e=0;e<n.length;e++){let t=n[e];Array.isArray(t)&&D(t)&&(n.splice(e,1,...t),e+=t.length-1);}return n}function W(n,e){return n.catch(t=>(e&&e(t),Promise.resolve(t)))}var P=class{constructor(e,t,s={}){this.eventEmitter=e;this.eventName=t;l(this,"resolvers",[]);l(this,"errorResolvers",[]);l(this,"isStopped",false);l(this,"options");l(this,"currentSize");l(this,"hasNewMessage",false);l(this,"_listener");l(this,"_ready",false);l(this,"_listenOptions");l(this,"_cleanups",[]);l(this,"error",null);l(this,"buffer",[]);this.options={size:s.size??20,maxExpandSize:s.maxExpandSize??100,expandOverflow:s.expandOverflow??"slide",overflow:s.overflow??"slide",lifetime:s.lifetime??0,onPush:s.onPush,onPop:s.onPop,onDrop:s.onDrop,onError:s.onError??(()=>true),signal:s.signal},this.currentSize=this.options.size,this._listener=this.onMessage.bind(this);}get listener(){return this._listener}get ready(){return this._ready}create(e){if(!this._ready){this._listenOptions=e;try{let t=this.eventEmitter.on(this.eventName,this._listener,e);if(this._cleanups.push(()=>t.off()),this.options.signal&&!this.options.signal.aborted){let s=()=>{this.off(!0);};this.options.signal.addEventListener("abort",s),this._cleanups.push(()=>{this.options.signal.removeEventListener("abort",s);});}}finally{this._ready=true;}}}push(e){this.options.onPush?this.options.onPush(e,this.buffer):this.buffer.push(this.options.lifetime>0?[e,Date.now()]:[e,0]);}handleOverflow(e){switch(this.buffer.length>=this.options.maxExpandSize&&this.options.overflow==="expand"?this.options.expandOverflow:this.options.overflow){case "drop":return this.options.onDrop&&this.options.onDrop(e),false;case "expand":return this.currentSize=Math.min(this.currentSize+this.options.size,this.options.maxExpandSize),this.push(e),true;case "slide":let s=this.buffer.shift();return this.options.onDrop&&s&&this.options.onDrop(s[0]),this.push(e),true;case "throw":throw this.options.onDrop&&this.options.onDrop(e),new Error(`EventIterator queue overflow: buffer size (${this.currentSize}) exceeded`);default:return false}}onMessage(e,t){if(this.isStopped)return;let s=e;if(this.resolvers.length>0){this.resolvers.shift()({value:s,done:false});return}this.hasNewMessage=true,this.buffer.length<this.currentSize?this.push(s):this.handleOverflow(s);}off(e){this._ready&&(this.isStopped||(this.isStopped=true,this._cleanups.forEach(t=>t()),this._cleanups=[],this.buffer=[],this._ready=false,e?(this.errorResolvers.forEach(t=>{t(new y);}),this.errorResolvers=[]):(this.resolvers.forEach(t=>{t({value:void 0,done:true});}),this.resolvers=[]),this._ready=false));}async next(){if(this.error)return Promise.reject(this.error);if(this.isStopped&&this.buffer.length===0)return {value:void 0,done:true};if(this.buffer.length>0){let e,t;if(this.options.onPop){let s=this.options.onPop(this.buffer,this.hasNewMessage);s?[e,t]=s:[e,t]=this.buffer.shift()||[void 0,0];}else [e,t]=this.buffer.shift()||[void 0,0];if(this.hasNewMessage=false,e!==void 0)return this.options.lifetime>0&&Date.now()-t>this.options.lifetime?(this.options.onDrop&&this.options.onDrop(e),this.next()):{value:e,done:false}}return new Promise((e,t)=>{this.resolvers.push(e),this.errorResolvers.push(t);})}[Symbol.asyncIterator](){return this}async done(){return this.off(),{value:void 0,done:true}}async throw(e){return this.error=e,this.off(),Promise.reject(e)}async return(){return this.off(),{value:void 0,done:true}}[Symbol.dispose](){this.off();}on(){this.create(this._listenOptions),this.isStopped=false;}};function R(n,e,t={}){return new P(n,e,t)}function U(n,e){return Array.isArray(e)&&e.forEach(t=>{n=u(t(n),n.name);}),n}function _(n){return n!==null&&(typeof n=="object"||typeof n=="function")?new WeakRef(n):n}function S(n){return n.map(e=>e.status==="fulfilled"?e.value:e.reason)}function z(n){if(n==null)return false;let e=typeof n;return e!=="object"&&e!=="function"?false:typeof n.then=="function"}async function K(n){try{return n instanceof Promise?await n:n}catch(e){return e instanceof Error?e:new Error(String(e))}}var H=class{constructor(e){l(this,"__FastEvent__",true);l(this,"listeners",{__listeners:[]});l(this,"_options");l(this,"_delimiter","/");l(this,"_context");l(this,"_hooks");l(this,"retainedMessages",new Map);l(this,"listenerCount",0);l(this,"types",null);this._options=Object.assign({debug:false,id:Math.random().toString(36).substring(2),delimiter:"/",context:null,ignoreErrors:true,meta:void 0,expandEmitResults:true,executor:j()},this._initOptions(e)),this._delimiter=this._options.delimiter,this._context=this._options.context;}get options(){return this._options}get context(){return this.options.context||this}get meta(){return this.options.meta}get id(){return this._options.id}get title(){return this._options.title||this.id||"FastEvent"}get hooks(){return this._hooks||(this._hooks={AddBeforeListener:[],AddAfterListener:[],RemoveListener:[],ClearListeners:[],ListenerError:[],BeforeExecuteListener:[],AfterExecuteListener:[]}),this._hooks}_execAfterExecuteListener(e,t){Promise.allSettled(t[1]).then(s=>{t[1]=S(s),e.apply(this,t);});}_executeHooks(e,t,s=false){if(setTimeout(()=>{if(!this._hooks)return;let r=this.hooks[e];Array.isArray(r)&&r.length>0&&Promise.allSettled(r.map(a=>{if(e==="AfterExecuteListener")this._execAfterExecuteListener(a,t);else return a.apply(this,t)}));}),!s){let r=this.options[`on${e}`];if(c(r))if(e==="AfterExecuteListener")this._execAfterExecuteListener(r,t);else return r.apply(this,t)}}_initOptions(e){return e}_addListener(e,t,s){let{count:r,prepend:a}=s,i=0;return [this._forEachNodes(e,p=>{let v=[t,r,0,s.tag,s.flags];a?(p.__listeners.splice(0,0,v),i=0):(p.__listeners.push(v),i=p.__listeners.length-1),this.listenerCount++;}),i]}_forEachNodes(e,t){if(e.length===0)return;let s=this.listeners;for(let r=0;r<e.length;r++){let a=e[r];if(a in s||(s[a]={__listeners:[]}),r===e.length-1){let i=s[a];return t(i,s),i}else s=s[a];}}_removeListener(e,t,s){s&&C(e.__listeners,r=>{r=Array.isArray(r)?r[0]:r;let a=r===s;return a&&(this.listenerCount--,this._executeHooks("RemoveListener",[t.join(this._delimiter),s,e])),a});}_createAyncIteratorListener(e,t){let s=Object.assign({overflow:"expand",size:10,maxExpandSize:100},t.iterable),r=R(this,e,s);r.create(t);let a=this._executeHooks("AddBeforeListener",[e,r.listener,t]);if(a===false)throw new d;return A(a)?a:r}on(){let e=arguments[0];if(e.length===0)throw new Error("event cannot be empty");let t=null,s,r=!c(arguments[1]);r?s=arguments[1]||{}:(t=arguments[1],s=arguments[2]||{});let a=Object.assign({count:0,flags:0,prepend:false},s);if(r||t===null)return this._createAyncIteratorListener(e,a);let i=this._executeHooks("AddBeforeListener",[e,t,a]);if(i===false)throw new d;if(G(i))return i;let o=e.split(this._delimiter);if(a.pipes&&a.pipes.length>0&&(t=U(t,a.pipes)),c(a.filter)||c(a.off)){let g=t,h=()=>p&&this._removeListener(p,o,t);t=u(function(f,F){if(c(a.off)&&a.off.call(this,f,F)){h();return}if(c(a.filter)){if(a.filter.call(this,f,F))return g.call(this,f,F)}else return g.call(this,f,F)},t.name);}let[p,v]=this._addListener(o,t,a),m=()=>p&&this._removeListener(p,o,t);return this._executeHooks("AddAfterListener",[e,p]),this._emitRetainMessage(e,p,v),{off:m,listener:t,[Symbol.dispose](){m();}}}once(){return c(arguments[1])?this.on(arguments[0],arguments[1],Object.assign({},arguments[2],{count:1})):this.on(arguments[0],Object.assign({},arguments[2],{count:1}))}onAny(){return this.on("**",...arguments)}off(){let e=arguments,t=c(e[0])?void 0:e[0],s=c(e[0])?e[0]:e[1],r=t?t.split(this._delimiter):[],a=t?t.includes("*"):false;if(t&&!a)this._traverseToPath(this.listeners,r,i=>{s?this._removeListener(i,r,s):t&&(i.__listeners=[]);});else {let i=a?[]:r;this._traverseListeners(this.listeners,i,(o,p)=>{(s!==void 0||a&&L(o,r))&&(s?this._removeListener(p,r,s):p.__listeners=[]);});}}offAll(e){if(e){let t=e.split(this._delimiter),s=0;this._traverseListeners(this.listeners,t,(r,a)=>{s+=a.__listeners.length;try{a.__listeners.forEach(i=>{this._executeHooks("RemoveListener",[r.join(this.options.delimiter),i[0],a]);});}finally{a.__listeners=[];}}),this.listenerCount-=s,this._removeRetainedEvents(e);}else try{let t=0;this._traverseListeners(this.listeners,[],(s,r)=>{t+=r.__listeners.length;}),this.listenerCount-=t,this.retainedMessages.clear(),this.listeners={__listeners:[]};}finally{this._executeHooks("ClearListeners",[]);}}_removeRetainedEvents(e){e||this.retainedMessages.clear(),e?.endsWith(this._delimiter)&&(e+=this._delimiter),this.retainedMessages.delete(e);for(let t of this.retainedMessages.keys())t.startsWith(e)&&this.retainedMessages.delete(t);}clear(e){this.offAll(e),this._removeRetainedEvents(e);}_emitRetainMessage(e,t,s){let r=[];if(e.includes("*")){let a=e.split(this._delimiter);this.retainedMessages.forEach((i,o)=>{let p=o.split(this._delimiter);L(p,a)&&r.push(i);});}else this.retainedMessages.has(e)&&r.push(this.retainedMessages.get(e));t&&r.forEach(a=>{this._executeListeners([t],a,{},i=>i[0]===t.__listeners[s][0]);});}_traverseToPath(e,t,s,r=0,a){if(r>=t.length){s(e);return}let i=t[r];if(a===true){this._traverseToPath(e,t,s,r+1,true);return}"*"in e&&this._traverseToPath(e["*"],t,s,r+1),"**"in e&&this._traverseToPath(e["**"],t,s,r+1,true),i in e&&this._traverseToPath(e[i],t,s,r+1);}_traverseListeners(e,t,s){let r=e;t&&t.length>0&&this._traverseToPath(e,t,i=>{r=i;});let a=(i,o,p)=>{o(p,i);for(let[v,m]of Object.entries(i))v.startsWith("__")||m&&a(m,o,[...p,v]);};a(r,s,[]);}_onListenerError(e,t,s,r){if(r instanceof Error&&(r._emitter=`${e.name||"anonymous"}:${t.type}`),this._executeHooks("ListenerError",[r,e,t,s]),this._options.ignoreErrors)return r;throw r}_executeListener(e,t,s,r=false){let a=e[0];try{if(this.options.debug&&(e.length=5),s&&s.abortSignal&&s.abortSignal.aborted)return this._onListenerError(a,t,s,new y(e[0].name));let i=((s?.flags||0)&1)>0,o=a.call(this.context,i?t.payload:t,s);return r&&o&&o instanceof Promise&&(o=W(o,p=>this._onListenerError(a,t,s,p))),this.options.debug&&(Promise.resolve(o),z(o)?K(o).then(p=>{e[5]=_(p);}):e[5]=_(o)),o}catch(i){let o=this._onListenerError(a,t,s,i);return o instanceof Error&&(e[5]=_(o)),o}}_getListenerExecutor(e){if(!e)return;let t=e.executor||this._options.executor;if(c(t))return t}_executeListeners(e,t,s,r){if(!e||e.length===0)return [];let a=[];for(let o of e){let p=0;for(let v of o.__listeners)(!r||r(v,o))&&a.push([v,p++,o.__listeners]);}this._decListenerExecCount(a);let i=this._getListenerExecutor(s);if(i){let o=i(a.map(p=>p[0]),t,s,this._executeListener.bind(this));return Array.isArray(o)?o:[o]}else return a.map(o=>this._executeListener(o[0],t,s,true))}_decListenerExecCount(e){for(let t=e.length-1;t>=0;t--){let s=e[t][0];s[2]++,s[1]>0&&s[1]<=s[2]&&e[t][2].splice(t,1);}}getListeners(e){let t=[],s=e.split(this._delimiter);this._traverseToPath(this.listeners,s,a=>{t.push(a);});let r=[];return t.map(a=>{r.push(...a.__listeners);}),r}clearRetainMessages(e){e?this.retainedMessages.delete(e):this.retainedMessages.clear();}emit(){let[e,t]=T(arguments,this.options.meta);c(t.parseArgs)&&t.parseArgs(e,t);let s=e.type.split(this._delimiter);t.retain&&this.retainedMessages.set(e.type,e);let r=[],a=[];this._traverseToPath(this.listeners,s,o=>{a.push(o);});let i=this._executeHooks("BeforeExecuteListener",[e,t]);if(Array.isArray(i))return i;if(i===false)throw new y(e.type);if(c(this._options.transform)){let o=this._options.transform.call(this,e);o!==e&&(e.payload=o,t.rawEventType=e.type,t.flags=(t.flags||0)|1);}return r.push(...this._executeListeners(a,e,t)),this._options.expandEmitResults&&N(r),this._executeHooks("AfterExecuteListener",[e,r,a]),r}async emitAsync(){let e=await Promise.allSettled(this.emit.apply(this,arguments));return S(e)}waitFor(){let e=arguments[0],t=arguments[1];return new Promise((s,r)=>{let a,i,o=p=>{clearTimeout(a),i?.off(),s(p);};t&&t>0&&(a=setTimeout(()=>{i?.off(),r(new Error("wait for event<"+e+"> is timeout"));},t)),i=this.on(e,o);})}scope(){let[e,t,s]=b(arguments,this.options.meta,this.options.context),r;return t?r=t:r=new M,r.bind(this,e,s),r}};exports.AbortError=y;exports.CancelError=d;exports.FastEvent=H;exports.FastEventError=E;exports.FastEventIterator=P;exports.FastEventListenerFlags=q;exports.FastEventScope=M;exports.QueueOverflowError=w;exports.TimeoutError=O;exports.UnboundError=x;exports.__FastEventScope__=J;exports.__FastEvent__=Q;exports.__expandable__=k;exports.createAsyncEventIterator=R;exports.expandable=he;exports.isAsyncIterable=A;exports.isClass=xe;exports.isExpandable=D;exports.isFastEvent=be;exports.isFastEventMessage=ye;exports.isFastEventScope=I;exports.isFunction=c;exports.isPathMatched=L;exports.isString=ue;exports.isSubsctiber=G;return exports;})({});//# sourceMappingURL=index.global.js.map
|
|
2
2
|
//# sourceMappingURL=index.global.js.map
|