@actdim/msgmesh 1.0.9 → 1.1.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.
@@ -1,4 +1,5 @@
1
1
  import { IsTuple, MaybePromise, Overwrite, Skip } from '@actdim/utico/typeCore';
2
+ import { ThrottleOptions } from './util';
2
3
  export declare const $CG_IN = "in";
3
4
  export declare const $CG_OUT = "out";
4
5
  export declare const $CG_ERROR = "error";
@@ -17,108 +18,153 @@ export type ErrorPayload = {
17
18
  export type ErrorParam<T extends ErrorPayload = ErrorPayload> = {
18
19
  [$CG_ERROR]: T;
19
20
  };
21
+ export declare class BaseError extends Error {
22
+ readonly name: string;
23
+ constructor(message: string, options?: {
24
+ cause?: unknown;
25
+ });
26
+ }
27
+ export declare class TimeoutError extends BaseError {
28
+ readonly name: string;
29
+ constructor(message?: string, cause?: unknown);
30
+ }
31
+ export declare class AbortError extends BaseError {
32
+ readonly name: string;
33
+ constructor(message?: string, cause?: unknown);
34
+ }
20
35
  export type SystemChannelGroup = `${keyof InParam | keyof OutParam | keyof OutParam}`;
21
36
  export type MsgChannelStruct = Partial<{
22
37
  [group: string]: any;
23
38
  } & InParam & OutParam & ErrorParam>;
24
- export type MsgBusStructBase = {
39
+ export type MsgStructBase = {
25
40
  [$C_ERROR]?: {
26
41
  [$CG_IN]: ErrorPayload;
27
42
  };
28
43
  };
29
- export type MsgBusStruct = {
44
+ export type MsgStruct = {
30
45
  [channel: string]: MsgChannelStruct;
31
- } & MsgBusStructBase;
32
- export type MsgBusStructFactory<TStruct extends TStructBase, TStructBase extends MsgBusStruct = MsgBusStruct> = {
46
+ } & MsgStructBase;
47
+ export type MsgStructFactory<TStruct extends TStructBase, TStructBase extends MsgStruct = MsgStruct> = {
33
48
  [C in keyof TStruct]: TStruct[C] & ErrorParam;
34
49
  };
35
- export type InStruct<TStruct extends MsgBusStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends InParam ? TStruct[TChannel]["in"] : undefined;
36
- export type OutStruct<TStruct extends MsgBusStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends OutParam ? TStruct[TChannel][keyof OutParam] : undefined;
50
+ export type InStruct<TStruct extends MsgStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends InParam ? TStruct[TChannel]["in"] : undefined;
51
+ export type OutStruct<TStruct extends MsgStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends OutParam ? TStruct[TChannel][keyof OutParam] : undefined;
52
+ export type AckMode = 'atLeastOne' | 'all';
37
53
  export type MsgChannelConfig<TChannel> = {
38
54
  replayCount?: number;
39
55
  initialValues?: {
40
56
  [TGroup in keyof TChannel]: TChannel[TGroup];
41
57
  };
42
- persistent?: boolean;
43
- secure?: boolean;
44
- federated?: boolean;
45
- autoDeleteTimeout?: number;
46
- noAck?: boolean;
47
- maxConcurrentConsumers?: number;
48
58
  replayBufferSize?: number;
49
59
  replayWindowTime?: number;
60
+ delay?: number;
61
+ throttle?: number | (ThrottleOptions & {
62
+ duration: number;
63
+ });
64
+ debounce?: number;
50
65
  };
51
- export type MsgDispatchConfig = {
52
- priority?: number;
66
+ export type MsgSubscriberConfig = {
53
67
  fetchCount?: number;
54
68
  abortSignal?: AbortSignal;
69
+ throttle?: number | (ThrottleOptions & {
70
+ duration: number;
71
+ });
72
+ debounce?: number;
73
+ };
74
+ export type MsgDispatcherConfig = MsgSubscriberConfig & {
75
+ priority?: number;
55
76
  };
56
- export type MsgBusConfig<TStruct extends MsgBusStruct> = {
77
+ export type MsgAsyncSubscriberConfig = {
78
+ abortSignal?: AbortSignal;
79
+ timeout?: number;
80
+ };
81
+ export type MsgAsyncDispatcherConfig = MsgAsyncSubscriberConfig & {
82
+ priority?: number;
83
+ };
84
+ export type MsgBusConfig<TStruct extends MsgStruct> = {
57
85
  [TChannel in keyof TStruct]?: MsgChannelConfig<TStruct[TChannel]>;
58
86
  };
59
- export type MsgAddress<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]> = {
87
+ export type MsgAddress<TStruct extends MsgStruct = MsgStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel]> = {
60
88
  channel: TChannel;
61
89
  group?: TGroup;
62
90
  topic?: string;
63
91
  version?: string;
64
92
  };
65
- export type Msg<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders = any> = {
66
- address: MsgAddress<TStruct, TChannel, TGroup>;
67
- payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];
93
+ export type MsgHeaders = {
94
+ inResponseToId?: string;
95
+ version?: string;
68
96
  requestId?: string;
97
+ sourceId?: string;
98
+ targetId?: string;
99
+ originId?: string;
100
+ correlationId?: string;
69
101
  traceId?: string;
70
- id?: string;
71
- timestamp?: number;
102
+ publishedAt?: number;
72
103
  priority?: number;
73
104
  persistent?: boolean;
74
- version?: string;
75
- tags?: string[];
105
+ tags?: string | string[];
106
+ auth?: {
107
+ userId?: string;
108
+ token?: string;
109
+ };
110
+ absoluteExpiration?: number;
111
+ ttl?: number;
112
+ slidingExpiration?: number;
113
+ };
114
+ export type Msg<TStruct extends MsgStruct = MsgStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders extends MsgHeaders = MsgHeaders> = {
115
+ id?: string;
116
+ address: MsgAddress<TStruct, TChannel, TGroup>;
117
+ payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];
76
118
  headers?: THeaders;
77
119
  };
78
- export type MsgBusSubscriberParams<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders = any> = MsgAddress<TStruct, TChannel, TGroup> & {
120
+ export type MsgSubscriberParams<TStruct extends MsgStruct = MsgStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders extends MsgHeaders = MsgHeaders> = MsgAddress<TStruct, TChannel, TGroup> & {
79
121
  channelSelector?: string | ((channel: string) => boolean);
80
122
  callback?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => void;
81
- config?: MsgDispatchConfig;
123
+ config?: MsgSubscriberConfig;
82
124
  filter?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => boolean;
83
125
  };
84
- export type MsgBusSubscriber<TStruct extends MsgBusStruct, THeaders = any> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusSubscriberParams<TStruct, TChannel, TGroup, THeaders>) => void;
85
- export type MsgBusStreamer<TStruct extends MsgBusStruct, THeaders = any> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusSubscriberParams<TStruct, TChannel, TGroup>) => AsyncIterableIterator<Msg<TStruct, TChannel, TGroup, THeaders>>;
86
- export type MsgBusAsyncSubscriberParams<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders = any> = Skip<MsgBusSubscriberParams<TStruct, TChannel, TGroup, THeaders>, "callback" | "filter">;
87
- export type MsgBusAsyncSubscriber<TStruct extends MsgBusStruct, THeaders = any> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusAsyncSubscriberParams<TStruct, TChannel, TGroup>) => Promise<Msg<TStruct, TChannel, TGroup, THeaders>>;
88
- export type MsgBusProviderParams<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders = any> = Overwrite<MsgBusSubscriberParams<TStruct, TChannel, TGroup, THeaders>, {
126
+ export type MsgSubscriber<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgSubscriberParams<TStruct, TChannel, TGroup, THeaders>) => void;
127
+ export type MsgStreamer<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgSubscriberParams<TStruct, TChannel, TGroup>) => AsyncIterableIterator<Msg<TStruct, TChannel, TGroup, THeaders>>;
128
+ export type MsgAsyncSubscriberParams<TStruct extends MsgStruct = MsgStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders extends MsgHeaders = MsgHeaders> = Overwrite<Skip<MsgSubscriberParams<TStruct, TChannel, TGroup, THeaders>, "callback">, {
129
+ config?: MsgAsyncSubscriberConfig;
130
+ }>;
131
+ export type MsgAsyncSubscriber<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgAsyncSubscriberParams<TStruct, TChannel, TGroup>) => Promise<Msg<TStruct, TChannel, TGroup, THeaders>>;
132
+ export type MsgProviderParams<TStruct extends MsgStruct = MsgStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders extends MsgHeaders = MsgHeaders> = Overwrite<MsgSubscriberParams<TStruct, TChannel, TGroup, THeaders>, {
89
133
  callback?: (msgIn: Msg<TStruct, TChannel, TGroup, THeaders>, msgOut: Msg<TStruct, TChannel, typeof $CG_OUT, THeaders>) => MaybePromise<OutStruct<TStruct, TChannel>>;
90
134
  }>;
91
- export type MsgBusProvider<TStruct extends MsgBusStruct, THeaders = any> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusProviderParams<TStruct, TChannel, TGroup, THeaders>) => void;
92
- export type MsgBusBinder<TStruct extends MsgBusStruct> = <TSourceChannel extends keyof TStruct, TTargetChannel extends keyof TStruct, TSourceGroup extends keyof TStruct[TSourceChannel] = typeof $CG_IN, TTargetGroup extends keyof TStruct[TTargetChannel] = typeof $CG_IN>(source: MsgBusSubscriberParams<TStruct, TSourceChannel, TSourceGroup>, target: MsgAddress<TStruct, TTargetChannel, TTargetGroup>) => void;
93
- export type MsgBusDispatcherParams<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders = any> = Overwrite<MsgBusSubscriberParams<TStruct, TChannel, TGroup>, {
135
+ export type MsgProvider<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgProviderParams<TStruct, TChannel, TGroup, THeaders>) => void;
136
+ export type MsgBinder<TStruct extends MsgStruct> = <TSourceChannel extends keyof TStruct, TTargetChannel extends keyof TStruct, TSourceGroup extends keyof TStruct[TSourceChannel] = typeof $CG_IN, TTargetGroup extends keyof TStruct[TTargetChannel] = typeof $CG_IN>(source: MsgSubscriberParams<TStruct, TSourceChannel, TSourceGroup>, target: MsgAddress<TStruct, TTargetChannel, TTargetGroup>) => void;
137
+ export type MsgDispatcherParams<TStruct extends MsgStruct = MsgStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders extends MsgHeaders = MsgHeaders> = MsgAddress<TStruct, TChannel, TGroup> & {
138
+ channelSelector?: string | ((channel: string) => boolean);
94
139
  payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];
95
140
  payloadFn?: IsTuple<TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]> extends true ? (fn: (...args: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]) => void) => void : never;
96
- traceId?: string;
97
- priority?: number;
98
- persistent?: boolean;
99
141
  callback?: (msg: Msg<TStruct, TChannel, typeof $CG_OUT, THeaders>) => void;
142
+ config?: MsgDispatcherConfig;
143
+ filter?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => boolean;
100
144
  headers?: THeaders;
145
+ };
146
+ export type MsgAsyncDispatcherParams<TStruct extends MsgStruct = MsgStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders extends MsgHeaders = MsgHeaders> = Overwrite<Skip<MsgDispatcherParams<TStruct, TChannel, TGroup, THeaders>, "callback">, {
147
+ config?: MsgAsyncDispatcherConfig;
101
148
  }>;
102
- export type MsgBusAsyncDispatcherParams<TStruct extends MsgBusStruct = MsgBusStruct, TChannel extends keyof TStruct = keyof TStruct, TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], THeaders = any> = Skip<MsgBusDispatcherParams<TStruct, TChannel, TGroup, THeaders>, "callback">;
103
- export type MsgBusDispatcher<TStruct extends MsgBusStruct, THeaders = any> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusDispatcherParams<TStruct, TChannel, TGroup, THeaders>) => void;
104
- export type MsgBusAsyncDispatcher<TStruct extends MsgBusStruct, THeaders = any> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgBusAsyncDispatcherParams<TStruct, TChannel, TGroup, THeaders>) => Promise<Msg<TStruct, TChannel, typeof $CG_OUT>>;
149
+ export type MsgDispatcher<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgDispatcherParams<TStruct, TChannel, TGroup, THeaders>) => void;
150
+ export type MsgAsyncDispatcher<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <TChannel extends keyof TStruct, TGroup extends keyof TStruct[TChannel] = typeof $CG_IN>(params: MsgAsyncDispatcherParams<TStruct, TChannel, TGroup, THeaders>) => Promise<Msg<TStruct, TChannel, typeof $CG_OUT>>;
105
151
  export type MsgChannelStructNormalized<TStruct extends MsgChannelStruct> = {
106
152
  [G in keyof TStruct]: Awaited<TStruct[G]>;
107
153
  };
108
- export type MsgBusStructNormalized<TStruct extends MsgBusStruct> = {
154
+ export type MsgStructNormalized<TStruct extends MsgStruct> = {
109
155
  [C in keyof TStruct]: MsgChannelStructNormalized<TStruct[C]>;
110
156
  };
111
157
  export declare const $TypeArgStruct: unique symbol;
112
158
  export declare const $TypeArgHeaders: unique symbol;
113
- export type MsgBus<TStruct extends MsgBusStruct, THeaders = any> = {
114
- readonly config: MsgBusConfig<MsgBusStructNormalized<TStruct>>;
115
- readonly on: MsgBusSubscriber<MsgBusStructNormalized<TStruct>, THeaders>;
116
- readonly onceAsync: MsgBusAsyncSubscriber<MsgBusStructNormalized<TStruct>, THeaders>;
117
- readonly stream: MsgBusStreamer<MsgBusStructNormalized<TStruct>, THeaders>;
118
- readonly provide: MsgBusProvider<MsgBusStructNormalized<TStruct>, THeaders>;
119
- readonly dispatch: MsgBusDispatcher<MsgBusStructNormalized<TStruct>, THeaders>;
120
- readonly dispatchAsync: MsgBusAsyncDispatcher<MsgBusStructNormalized<TStruct>, THeaders>;
159
+ export type MsgBus<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = {
160
+ readonly config: MsgBusConfig<MsgStructNormalized<TStruct>>;
161
+ readonly on: MsgSubscriber<MsgStructNormalized<TStruct>, THeaders>;
162
+ readonly onceAsync: MsgAsyncSubscriber<MsgStructNormalized<TStruct>, THeaders>;
163
+ readonly stream: MsgStreamer<MsgStructNormalized<TStruct>, THeaders>;
164
+ readonly provide: MsgProvider<MsgStructNormalized<TStruct>, THeaders>;
165
+ readonly dispatch: MsgDispatcher<MsgStructNormalized<TStruct>, THeaders>;
166
+ readonly dispatchAsync: MsgAsyncDispatcher<MsgStructNormalized<TStruct>, THeaders>;
121
167
  readonly [$TypeArgStruct]?: TStruct;
122
- readonly [$TypeArgHeaders]?: TStruct;
168
+ readonly [$TypeArgHeaders]?: THeaders;
123
169
  };
124
170
  //# sourceMappingURL=msgBusCore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"msgBusCore.d.ts","sourceRoot":"","sources":["../src/msgBusCore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"msgBusCore.d.ts","sourceRoot":"","sources":["../src/msgBusCore.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,32 @@
1
- const r = "in", o = "out", t = "error", e = "error", c = Symbol("__<TStruct>"), s = Symbol("__<THeaders>");
1
+ const s = "in", c = "out", n = "error", a = "error";
2
+ class o extends Error {
3
+ name = "BaseError";
4
+ constructor(r, e) {
5
+ super(r, e), Object.setPrototypeOf(this, new.target.prototype);
6
+ }
7
+ }
8
+ class u extends o {
9
+ name = "TimeoutError";
10
+ constructor(r, e) {
11
+ super(r || "Timeout exceeded", { cause: e });
12
+ }
13
+ }
14
+ class p extends o {
15
+ name = "AbortError";
16
+ constructor(r, e) {
17
+ super(r || "Operation aborted", { cause: e });
18
+ }
19
+ }
20
+ const E = Symbol("__<TStruct>"), d = Symbol("__<THeaders>");
2
21
  export {
3
- t as $CG_ERROR,
4
- r as $CG_IN,
5
- o as $CG_OUT,
6
- e as $C_ERROR,
7
- s as $TypeArgHeaders,
8
- c as $TypeArgStruct
22
+ n as $CG_ERROR,
23
+ s as $CG_IN,
24
+ c as $CG_OUT,
25
+ a as $C_ERROR,
26
+ d as $TypeArgHeaders,
27
+ E as $TypeArgStruct,
28
+ p as AbortError,
29
+ o as BaseError,
30
+ u as TimeoutError
9
31
  };
10
32
  //# sourceMappingURL=msgBusCore.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"msgBusCore.es.js","sources":["../src/msgBusCore.ts"],"sourcesContent":["//##############################################################################\r\n//# Copyright (c) Pavel Borodaev 2022 #\r\n//##############################################################################\r\n// SafeBus\r\nimport { IsTuple, MaybePromise, Overwrite, Skip } from \"@actdim/utico/typeCore\";\r\n\r\nexport const $CG_IN = \"in\";\r\n\r\nexport const $CG_OUT = \"out\";\r\n\r\nexport const $CG_ERROR = \"error\";\r\n\r\nexport const $C_ERROR = \"error\";\r\n\r\nexport type InParam = {\r\n // [key in typeof $CG_IN]: any;\r\n [$CG_IN]: any;\r\n};\r\n\r\nexport type OutParam = {\r\n // [key in typeof $CG_OUT]: any;\r\n [$CG_OUT]: any;\r\n};\r\n\r\nexport type ErrorPayload = {\r\n error: any; // reason\r\n source?: any;\r\n handled?: boolean;\r\n};\r\n\r\nexport type ErrorParam<T extends ErrorPayload = ErrorPayload> = {\r\n // [key in typeof $CG_ERROR]: any;\r\n [$CG_ERROR]: T;\r\n};\r\n\r\n// ReservedChannelGroup\r\nexport type SystemChannelGroup = `${keyof InParam | keyof OutParam | keyof OutParam}`;\r\n\r\n// TODO:\r\n// Point-to-Point (P2P): direct messaging with targeted, address delivery (exactly one recipient)\r\n// Broadcast\r\n// Queue group: Load Balancing, Round-Robin, Fan-out, Fan-in\r\n// QoS\r\n// Message Filtering\r\n// Cross-tab message delivery:\r\n// https://www.sitepen.com/blog/cross-tab-synchronization-with-the-web-locks-api\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API\r\n// LocalStorage\r\n// https://github.com/GoogleChromeLabs/comlink\r\n\r\n// MsgBusChannelStruct\r\nexport type MsgChannelStruct = Partial<{ [group: string]: any } & InParam & OutParam & ErrorParam>;\r\n\r\n// type MsgChannelStruct = { [group: string]: any } & (\r\n// | InParam\r\n// | OutParam\r\n// | (InParam & OutParam)\r\n// );\r\n\r\n// SystemMsgBusStruct\r\nexport type MsgBusStructBase = {\r\n [$C_ERROR]?: {\r\n [$CG_IN]: ErrorPayload;\r\n };\r\n // \"*\": {\r\n // [$CG_IN]: any;\r\n // };\r\n};\r\n\r\nexport type MsgBusStruct = {\r\n [channel: string]: MsgChannelStruct;\r\n} & MsgBusStructBase;\r\n\r\n// MsgBusStructBuilder\r\nexport type MsgBusStructFactory<\r\n TStruct extends TStructBase,\r\n TStructBase extends MsgBusStruct = MsgBusStruct\r\n> = {\r\n [C in keyof TStruct]: TStruct[C] & ErrorParam;\r\n };\r\n\r\n// export type MsgBusStruct = Record<string, MsgChannelStruct>;\r\n\r\nexport type InStruct<TStruct extends MsgBusStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends InParam\r\n ? TStruct[TChannel][\"in\"] // keyof InParam or typeof $CG_IN\r\n : undefined; // never\r\n\r\n// export type InStruct<\r\n// TStruct extends MsgBusStruct,\r\n// TChannel extends keyof TStruct\r\n// > = TStruct[TChannel] extends InParam ? TStruct[TChannel][\"in\"] : never;\r\n\r\nexport type OutStruct<TStruct extends MsgBusStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends OutParam\r\n ? TStruct[TChannel][keyof OutParam]\r\n : undefined;\r\n\r\n// export type OutStruct<\r\n// TStruct extends MsgBusStruct,\r\n// TChannel extends keyof TStruct\r\n// > = TStruct[TChannel] extends OutParam ? TStruct[TChannel][\"out\"] : never;\r\n\r\n// Options/Settings\r\nexport type MsgChannelConfig<TChannel> = {\r\n // (channel) message queue distribution and processing strategy\r\n replayCount?: number;\r\n initialValues?: { [TGroup in keyof TChannel]: TChannel[TGroup] };\r\n persistent?: boolean; // durable? (for durable queue)\r\n secure?: boolean; // encrypted\r\n federated?: boolean; // broadcasting\r\n autoDeleteTimeout?: number;\r\n noAck?: boolean; // noAutoAck\r\n // manualAck?: boolean;\r\n // prefetchCount?: number; // for manual acknowledgment\r\n // this can be used for some consumer or for all consumers of the channel\r\n maxConcurrentConsumers?: number; // Parallel? Processes? Handlers?\r\n replayBufferSize?: number;\r\n replayWindowTime?: number;\r\n};\r\n\r\nexport type MsgDispatchConfig = {\r\n // MsgConfig\r\n priority?: number;\r\n fetchCount?: number;\r\n abortSignal?: AbortSignal;\r\n};\r\n\r\nexport type MsgBusConfig<TStruct extends MsgBusStruct> = {\r\n [TChannel in keyof TStruct]?: MsgChannelConfig<TStruct[TChannel]>;\r\n}; // Record<string, MsgChannelConfig>\r\n\r\nexport type MsgAddress<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = {\r\n channel: TChannel;\r\n group?: TGroup; // typeGroup\r\n // supports wildcard matching (https://docs.nats.io/nats-concepts/subjects#wildcards)\r\n topic?: string;\r\n version?: string;\r\n};\r\n\r\n// MsgEnvelope\r\nexport type Msg<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel],\r\n THeaders = any // Record<string, string>\r\n> = {\r\n address: MsgAddress<TStruct, TChannel, TGroup>;\r\n payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];\r\n // status: MsgStatus;\r\n // inResponseToId\r\n requestId?: string;\r\n // correlationId\r\n traceId?: string;\r\n id?: string;\r\n timestamp?: number; // Date\r\n priority?: number;\r\n persistent?: boolean; // durable? (for durable queue)\r\n version?: string; // schemaVersion\r\n tags?: string[];\r\n headers?: THeaders;\r\n};\r\n\r\n// TODO: support un(subscribing) via Deferred<bool>\r\n\r\nexport type MsgBusSubscriberParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], // typeof $CG_IN\r\n THeaders = any\r\n> = MsgAddress<TStruct, TChannel, TGroup> & {\r\n channelSelector?: string | ((channel: string) => boolean);\r\n // topicSelector?: string | ((channel: string) => boolean);\r\n callback?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => void;\r\n config?: MsgDispatchConfig;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => boolean;\r\n};\r\n\r\n// MsgBusSubscriberFn\r\nexport type MsgBusSubscriber<TStruct extends MsgBusStruct, THeaders = any> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusSubscriberParams<TStruct, TChannel, TGroup, THeaders>\r\n) => void;\r\n\r\n// MsgBusAsyncSubIterator(Fn)\r\nexport type MsgBusStreamer<TStruct extends MsgBusStruct, THeaders = any> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusSubscriberParams<TStruct, TChannel, TGroup>\r\n) => AsyncIterableIterator<Msg<TStruct, TChannel, TGroup, THeaders>>; // TGroup extends undefined ? typeof $CG_IN : TGroup\r\n\r\nexport type MsgBusAsyncSubscriberParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], // typeof $CG_IN\r\n THeaders = any\r\n> = Skip<MsgBusSubscriberParams<TStruct, TChannel, TGroup, THeaders>, \"callback\" | \"filter\">;\r\n\r\n// MsgBusAsyncSubscriberFn\r\nexport type MsgBusAsyncSubscriber<TStruct extends MsgBusStruct, THeaders = any> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusAsyncSubscriberParams<TStruct, TChannel, TGroup>\r\n) => Promise<Msg<TStruct, TChannel, TGroup, THeaders>>; // TGroup extends undefined ? typeof $CG_IN : TGroup\r\n\r\nexport type MsgBusProviderParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], // typeof $CG_IN\r\n THeaders = any\r\n> = Overwrite<\r\n MsgBusSubscriberParams<TStruct, TChannel, TGroup, THeaders>,\r\n {\r\n // resolve\r\n callback?: (msgIn: Msg<TStruct, TChannel, TGroup, THeaders>, msgOut: Msg<TStruct, TChannel, typeof $CG_OUT, THeaders>) => MaybePromise<OutStruct<TStruct, TChannel>>;\r\n }\r\n>;\r\n\r\n// MsgBusProviderFn\r\nexport type MsgBusProvider<TStruct extends MsgBusStruct, THeaders = any> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusProviderParams<TStruct, TChannel, TGroup, THeaders>\r\n) => void;\r\n\r\n// MsgBusBinderFn\r\nexport type MsgBusBinder<TStruct extends MsgBusStruct> = <\r\n TSourceChannel extends keyof TStruct,\r\n TTargetChannel extends keyof TStruct,\r\n TSourceGroup extends keyof TStruct[TSourceChannel] = typeof $CG_IN,\r\n TTargetGroup extends keyof TStruct[TTargetChannel] = typeof $CG_IN\r\n>(\r\n source: MsgBusSubscriberParams<TStruct, TSourceChannel, TSourceGroup>,\r\n target: MsgAddress<TStruct, TTargetChannel, TTargetGroup>\r\n) => void;\r\n\r\nexport type MsgBusDispatcherParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], // typeof $CG_IN\r\n THeaders = any\r\n> = Overwrite<\r\n MsgBusSubscriberParams<TStruct, TChannel, TGroup>,\r\n {\r\n payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];\r\n payloadFn?: IsTuple<TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]> extends true\r\n ? (fn: (...args: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]) => void) => void\r\n : never;\r\n traceId?: string;\r\n priority?: number;\r\n persistent?: boolean;\r\n callback?: (msg: Msg<TStruct, TChannel, typeof $CG_OUT, THeaders>) => void;\r\n headers?: THeaders;\r\n }\r\n>;\r\n\r\nexport type MsgBusAsyncDispatcherParams<\r\n TStruct extends MsgBusStruct = MsgBusStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], // typeof $CG_IN\r\n THeaders = any\r\n> = Skip<MsgBusDispatcherParams<TStruct, TChannel, TGroup, THeaders>, \"callback\">;\r\n\r\n// MsgBusDispatcherFn\r\nexport type MsgBusDispatcher<TStruct extends MsgBusStruct, THeaders = any> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusDispatcherParams<TStruct, TChannel, TGroup, THeaders>\r\n) => void;\r\n\r\n// MsgBusAsyncDispatcherFn\r\nexport type MsgBusAsyncDispatcher<TStruct extends MsgBusStruct, THeaders = any> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgBusAsyncDispatcherParams<TStruct, TChannel, TGroup, THeaders>\r\n) => Promise<Msg<TStruct, TChannel, typeof $CG_OUT>>;\r\n\r\nexport type MsgChannelStructNormalized<TStruct extends MsgChannelStruct> = {\r\n [G in keyof TStruct]: Awaited<TStruct[G]>;\r\n};\r\n\r\nexport type MsgBusStructNormalized<TStruct extends MsgBusStruct> = {\r\n [C in keyof TStruct]: MsgChannelStructNormalized<TStruct[C]>;\r\n};\r\n\r\nexport const $TypeArgStruct = Symbol(\"__<TStruct>\");\r\nexport const $TypeArgHeaders = Symbol(\"__<THeaders>\");\r\n\r\n// export interface\r\nexport type MsgBus<TStruct extends MsgBusStruct, THeaders = any> = {\r\n readonly config: MsgBusConfig<MsgBusStructNormalized<TStruct>>;\r\n // subscribe, listen\r\n readonly on: MsgBusSubscriber<MsgBusStructNormalized<TStruct>, THeaders>;\r\n readonly onceAsync: MsgBusAsyncSubscriber<MsgBusStructNormalized<TStruct>, THeaders>;\r\n // listenStream, consume, receive\r\n readonly stream: MsgBusStreamer<MsgBusStructNormalized<TStruct>, THeaders>;\r\n // handle, resolve\r\n readonly provide: MsgBusProvider<MsgBusStructNormalized<TStruct>, THeaders>;\r\n // link, connect\r\n // dispatch (emit/publish + subscribe)\r\n readonly dispatch: MsgBusDispatcher<MsgBusStructNormalized<TStruct>, THeaders>;\r\n readonly dispatchAsync: MsgBusAsyncDispatcher<MsgBusStructNormalized<TStruct>, THeaders>;\r\n /**\r\n * @internal\r\n * Type-level only. Do not access at runtime.\r\n */\r\n readonly [$TypeArgStruct]?: TStruct;\r\n /**\r\n * @internal\r\n * Type-level only. Do not access at runtime.\r\n */\r\n readonly [$TypeArgHeaders]?: TStruct;\r\n};\r\n"],"names":["$CG_IN","$CG_OUT","$CG_ERROR","$C_ERROR","$TypeArgStruct","$TypeArgHeaders"],"mappings":"AAMO,MAAMA,IAAS,MAETC,IAAU,OAEVC,IAAY,SAEZC,IAAW,SA0RXC,IAAiB,OAAO,aAAa,GACrCC,IAAkB,OAAO,cAAc;"}
1
+ {"version":3,"file":"msgBusCore.es.js","sources":["../src/msgBusCore.ts"],"sourcesContent":["//##############################################################################\r\n//# Copyright (c) Pavel Borodaev 2022 #\r\n//##############################################################################\r\n// SafeBus\r\nimport { IsTuple, MaybePromise, Overwrite, Skip } from \"@actdim/utico/typeCore\";\r\nimport { ThrottleOptions } from \"./util\";\r\n\r\nexport const $CG_IN = \"in\";\r\n\r\nexport const $CG_OUT = \"out\";\r\n\r\nexport const $CG_ERROR = \"error\";\r\n\r\nexport const $C_ERROR = \"error\";\r\n\r\nexport type InParam = {\r\n // [key in typeof $CG_IN]: any;\r\n [$CG_IN]: any;\r\n};\r\n\r\nexport type OutParam = {\r\n // [key in typeof $CG_OUT]: any;\r\n [$CG_OUT]: any;\r\n};\r\n\r\nexport type ErrorPayload = {\r\n error: any; // reason\r\n source?: any;\r\n handled?: boolean;\r\n};\r\n\r\nexport type ErrorParam<T extends ErrorPayload = ErrorPayload> = {\r\n // [key in typeof $CG_ERROR]: any;\r\n [$CG_ERROR]: T;\r\n};\r\n\r\nexport class BaseError extends Error {\r\n readonly name: string = 'BaseError';\r\n\r\n constructor(\r\n message: string,\r\n options?: {\r\n cause?: unknown;\r\n }\r\n ) {\r\n super(message, options);\r\n Object.setPrototypeOf(this, new.target.prototype);\r\n }\r\n}\r\nexport class TimeoutError extends BaseError {\r\n readonly name: string = 'TimeoutError';\r\n\r\n constructor(message?: string, cause?: unknown) {\r\n // Operation\r\n super(message || \"Timeout exceeded\", { cause });\r\n }\r\n}\r\n\r\nexport class AbortError extends BaseError {\r\n readonly name: string = 'AbortError';\r\n\r\n constructor(message?: string, cause?: unknown) {\r\n super(message || \"Operation aborted\", { cause });\r\n }\r\n}\r\n\r\n// ReservedChannelGroup\r\nexport type SystemChannelGroup = `${keyof InParam | keyof OutParam | keyof OutParam}`;\r\n\r\n// TODO:\r\n// Point-to-Point (P2P): direct messaging with targeted, address delivery (exactly one recipient)\r\n// Broadcast\r\n// Queue group: Load Balancing, Round-Robin, Fan-out, Fan-in\r\n// QoS\r\n// Message Filtering\r\n// Cross-tab message delivery:\r\n// https://www.sitepen.com/blog/cross-tab-synchronization-with-the-web-locks-api\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API\r\n// LocalStorage\r\n// https://github.com/GoogleChromeLabs/comlink\r\n\r\nexport type MsgChannelStruct = Partial<{ [group: string]: any } & InParam & OutParam & ErrorParam>;\r\n\r\n// type MsgChannelStruct = { [group: string]: any } & (\r\n// | InParam\r\n// | OutParam\r\n// | (InParam & OutParam)\r\n// );\r\n\r\n// SystemMsgtruct\r\nexport type MsgStructBase = {\r\n [$C_ERROR]?: {\r\n [$CG_IN]: ErrorPayload;\r\n };\r\n // \"*\": {\r\n // [$CG_IN]: any;\r\n // };\r\n};\r\n\r\nexport type MsgStruct = {\r\n [channel: string]: MsgChannelStruct;\r\n} & MsgStructBase;\r\n\r\n// MsgStructBuilder\r\nexport type MsgStructFactory<\r\n TStruct extends TStructBase,\r\n TStructBase extends MsgStruct = MsgStruct\r\n> = {\r\n [C in keyof TStruct]: TStruct[C] & ErrorParam;\r\n };\r\n\r\n// export type MsgStruct = Record<string, MsgChannelStruct>;\r\n\r\nexport type InStruct<TStruct extends MsgStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends InParam\r\n ? TStruct[TChannel][\"in\"] // keyof InParam or typeof $CG_IN\r\n : undefined; // never\r\n\r\n// export type InStruct<\r\n// TStruct extends MsgStruct,\r\n// TChannel extends keyof TStruct\r\n// > = TStruct[TChannel] extends InParam ? TStruct[TChannel][\"in\"] : never;\r\n\r\nexport type OutStruct<TStruct extends MsgStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends OutParam\r\n ? TStruct[TChannel][keyof OutParam]\r\n : undefined;\r\n\r\n// export type OutStruct<\r\n// TStruct extends MsgStruct,\r\n// TChannel extends keyof TStruct\r\n// > = TStruct[TChannel] extends OutParam ? TStruct[TChannel][\"out\"] : never;\r\n\r\nexport type AckMode = 'atLeastOne' | 'all';\r\n\r\n// Options/Settings\r\nexport type MsgChannelConfig<TChannel> = {\r\n // (channel) message queue distribution and processing strategy\r\n replayCount?: number;\r\n initialValues?: { [TGroup in keyof TChannel]: TChannel[TGroup] };\r\n // persistent?: boolean; // durable? (for durable queue)\r\n // secure?: boolean; // encrypted\r\n // federated?: boolean; // broadcasting\r\n // autoDeleteTimeout?: number;\r\n // ackMode: AckMode;\r\n // requireAck: boolean;\r\n // noAck?: boolean; // noAutoAck\r\n // manualAck?: boolean;\r\n // prefetchCount?: number; // for manual acknowledgment\r\n // this can be used for some consumer or for all consumers of the channel\r\n // maxConcurrentConsumers?: number; // Parallel? Processes? Handlers?\r\n replayBufferSize?: number;\r\n replayWindowTime?: number;\r\n\r\n delay?: number;\r\n throttle?: number | (ThrottleOptions & { duration: number; });\r\n debounce?: number;\r\n};\r\n\r\nexport type MsgSubscriberConfig = {\r\n fetchCount?: number;\r\n abortSignal?: AbortSignal;\r\n\r\n throttle?: number | (ThrottleOptions & { duration: number; });\r\n debounce?: number;\r\n};\r\n\r\nexport type MsgDispatcherConfig = MsgSubscriberConfig & {\r\n priority?: number;\r\n};\r\n\r\nexport type MsgAsyncSubscriberConfig = {\r\n abortSignal?: AbortSignal;\r\n timeout?: number;\r\n};\r\n\r\nexport type MsgAsyncDispatcherConfig = MsgAsyncSubscriberConfig & {\r\n priority?: number;\r\n};\r\n\r\nexport type MsgBusConfig<TStruct extends MsgStruct> = {\r\n [TChannel in keyof TStruct]?: MsgChannelConfig<TStruct[TChannel]>;\r\n}; // Record<string, MsgChannelConfig>\r\n\r\nexport type MsgAddress<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel] // typeof $CG_IN\r\n> = {\r\n channel: TChannel;\r\n group?: TGroup; // typeGroup\r\n // supports wildcard matching (https://docs.nats.io/nats-concepts/subjects#wildcards)\r\n topic?: string;\r\n version?: string;\r\n};\r\n\r\nexport type MsgHeaders = {\r\n\r\n // similar to inReplyToId\r\n inResponseToId?: string;\r\n version?: string; // schemaVersion\r\n\r\n requestId?: string;\r\n\r\n // routing hints\r\n sourceId?: string; // senderId/producerId\r\n targetId?: string; // receiverId/recipientId\r\n\r\n originId?: string;\r\n\r\n correlationId?: string; // activityId\r\n traceId?: string;\r\n\r\n // timestamps (unix epoch, ms):\r\n publishedAt?: number;\r\n\r\n priority?: number;\r\n persistent?: boolean; // durable? (for durable queue)\r\n\r\n tags?: string | string[];\r\n\r\n auth?: {\r\n userId?: string;\r\n token?: string;\r\n }\r\n\r\n absoluteExpiration?: number;\r\n ttl?: number;\r\n slidingExpiration?: number;\r\n\r\n // ack/nack policy\r\n // requireAck: boolean;\r\n // ackMode: AckMode;\r\n\r\n // retryCount?: number;\r\n // deliveryAttempt?: number;\r\n\r\n // audience\r\n // intent \r\n // subject\r\n // group\r\n // schema\r\n // scope \r\n};\r\n\r\n// TODO: support MsgStatus\r\n// export type MsgStatus = \"pending\" | \"sent\" | \"delivered\" | \"processed\" | \"failed\" | \"expired\";\r\n\r\n// TODO: support ack/nack\r\n// TODO: integrate with https://github.com/connor4312/cockatiel \r\n// MsgEnvelope\r\nexport type Msg<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel],\r\n THeaders extends MsgHeaders = MsgHeaders // Record<string, string>\r\n> = {\r\n // transportId\r\n id?: string;\r\n address: MsgAddress<TStruct, TChannel, TGroup>;\r\n payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];\r\n headers?: THeaders;\r\n};\r\n\r\nexport type MsgSubscriberParams<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], // typeof $CG_IN\r\n THeaders extends MsgHeaders = MsgHeaders\r\n> = MsgAddress<TStruct, TChannel, TGroup> & {\r\n channelSelector?: string | ((channel: string) => boolean);\r\n // topicSelector?: string | ((channel: string) => boolean);\r\n callback?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => void;\r\n config?: MsgSubscriberConfig;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => boolean;\r\n};\r\n\r\n// MsgSubscriberFn\r\nexport type MsgSubscriber<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgSubscriberParams<TStruct, TChannel, TGroup, THeaders>\r\n) => void;\r\n\r\n// MsgAsyncSubIterator(Fn)\r\nexport type MsgStreamer<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgSubscriberParams<TStruct, TChannel, TGroup>\r\n) => AsyncIterableIterator<Msg<TStruct, TChannel, TGroup, THeaders>>; // TGroup extends undefined ? typeof $CG_IN : TGroup\r\n\r\nexport type MsgAsyncSubscriberParams<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], // typeof $CG_IN\r\n THeaders extends MsgHeaders = MsgHeaders\r\n> = Overwrite<Skip<MsgSubscriberParams<TStruct, TChannel, TGroup, THeaders>, \"callback\">, {\r\n config?: MsgAsyncSubscriberConfig\r\n}>;\r\n\r\n// MsgAsyncSubscriberFn\r\nexport type MsgAsyncSubscriber<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgAsyncSubscriberParams<TStruct, TChannel, TGroup>\r\n) => Promise<Msg<TStruct, TChannel, TGroup, THeaders>>; // TGroup extends undefined ? typeof $CG_IN : TGroup\r\n\r\nexport type MsgProviderParams<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], // typeof $CG_IN\r\n THeaders extends MsgHeaders = MsgHeaders\r\n> = Overwrite<\r\n MsgSubscriberParams<TStruct, TChannel, TGroup, THeaders>,\r\n {\r\n // resolve\r\n callback?: (msgIn: Msg<TStruct, TChannel, TGroup, THeaders>, msgOut: Msg<TStruct, TChannel, typeof $CG_OUT, THeaders>) => MaybePromise<OutStruct<TStruct, TChannel>>;\r\n }\r\n>;\r\n\r\n// MsgProviderFn\r\nexport type MsgProvider<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgProviderParams<TStruct, TChannel, TGroup, THeaders>\r\n) => void;\r\n\r\n// MsgBinderFn\r\nexport type MsgBinder<TStruct extends MsgStruct> = <\r\n TSourceChannel extends keyof TStruct,\r\n TTargetChannel extends keyof TStruct,\r\n TSourceGroup extends keyof TStruct[TSourceChannel] = typeof $CG_IN,\r\n TTargetGroup extends keyof TStruct[TTargetChannel] = typeof $CG_IN\r\n>(\r\n source: MsgSubscriberParams<TStruct, TSourceChannel, TSourceGroup>,\r\n target: MsgAddress<TStruct, TTargetChannel, TTargetGroup>\r\n) => void;\r\n\r\nexport type MsgDispatcherParams<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], // typeof $CG_IN\r\n THeaders extends MsgHeaders = MsgHeaders\r\n> = MsgAddress<TStruct, TChannel, TGroup> & {\r\n channelSelector?: string | ((channel: string) => boolean);\r\n // topicSelector?: string | ((channel: string) => boolean);\r\n payload?: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup];\r\n payloadFn?: IsTuple<TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]> extends true\r\n ? (fn: (...args: TGroup extends undefined ? InStruct<TStruct, TChannel> : TStruct[TChannel][TGroup]) => void) => void\r\n : never;\r\n callback?: (msg: Msg<TStruct, TChannel, typeof $CG_OUT, THeaders>) => void;\r\n config?: MsgDispatcherConfig;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => boolean;\r\n headers?: THeaders;\r\n};\r\n\r\nexport type MsgAsyncDispatcherParams<\r\n TStruct extends MsgStruct = MsgStruct,\r\n TChannel extends keyof TStruct = keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = keyof TStruct[TChannel], // typeof $CG_IN\r\n THeaders extends MsgHeaders = MsgHeaders\r\n> = Overwrite<Skip<MsgDispatcherParams<TStruct, TChannel, TGroup, THeaders>, \"callback\">,\r\n {\r\n config?: MsgAsyncDispatcherConfig\r\n }>;\r\n\r\n// MsgDispatcherFn\r\nexport type MsgDispatcher<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgDispatcherParams<TStruct, TChannel, TGroup, THeaders>\r\n) => void;\r\n\r\n// MsgAsyncDispatcherFn\r\nexport type MsgAsyncDispatcher<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = <\r\n TChannel extends keyof TStruct,\r\n TGroup extends keyof TStruct[TChannel] = typeof $CG_IN\r\n>(\r\n params: MsgAsyncDispatcherParams<TStruct, TChannel, TGroup, THeaders>\r\n) => Promise<Msg<TStruct, TChannel, typeof $CG_OUT>>;\r\n\r\nexport type MsgChannelStructNormalized<TStruct extends MsgChannelStruct> = {\r\n [G in keyof TStruct]: Awaited<TStruct[G]>;\r\n};\r\n\r\nexport type MsgStructNormalized<TStruct extends MsgStruct> = {\r\n [C in keyof TStruct]: MsgChannelStructNormalized<TStruct[C]>;\r\n};\r\n\r\nexport const $TypeArgStruct = Symbol(\"__<TStruct>\");\r\nexport const $TypeArgHeaders = Symbol(\"__<THeaders>\");\r\n\r\n// export interface\r\nexport type MsgBus<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders> = {\r\n readonly config: MsgBusConfig<MsgStructNormalized<TStruct>>;\r\n // subscribe, listen\r\n readonly on: MsgSubscriber<MsgStructNormalized<TStruct>, THeaders>;\r\n readonly onceAsync: MsgAsyncSubscriber<MsgStructNormalized<TStruct>, THeaders>;\r\n // listenStream, consume, receive\r\n readonly stream: MsgStreamer<MsgStructNormalized<TStruct>, THeaders>;\r\n // handle, resolve\r\n readonly provide: MsgProvider<MsgStructNormalized<TStruct>, THeaders>;\r\n // link, connect\r\n // dispatch (emit/publish + subscribe)\r\n readonly dispatch: MsgDispatcher<MsgStructNormalized<TStruct>, THeaders>;\r\n readonly dispatchAsync: MsgAsyncDispatcher<MsgStructNormalized<TStruct>, THeaders>;\r\n // TODO: support suspend/resume methods\r\n /**\r\n * @internal\r\n * Type-level only. Do not access at runtime.\r\n */\r\n readonly [$TypeArgStruct]?: TStruct;\r\n /**\r\n * @internal\r\n * Type-level only. Do not access at runtime.\r\n */\r\n readonly [$TypeArgHeaders]?: THeaders;\r\n};\r\n"],"names":["$CG_IN","$CG_OUT","$CG_ERROR","$C_ERROR","BaseError","message","options","TimeoutError","cause","AbortError","$TypeArgStruct","$TypeArgHeaders"],"mappings":"AAOO,MAAMA,IAAS,MAETC,IAAU,OAEVC,IAAY,SAEZC,IAAW;AAuBjB,MAAMC,UAAkB,MAAM;AAAA,EACxB,OAAe;AAAA,EAExB,YACIC,GACAC,GAGF;AACE,UAAMD,GAASC,CAAO,GACtB,OAAO,eAAe,MAAM,WAAW,SAAS;AAAA,EACpD;AACJ;AACO,MAAMC,UAAqBH,EAAU;AAAA,EAC/B,OAAe;AAAA,EAExB,YAAYC,GAAkBG,GAAiB;AAE3C,UAAMH,KAAW,oBAAoB,EAAE,OAAAG,EAAA,CAAO;AAAA,EAClD;AACJ;AAEO,MAAMC,UAAmBL,EAAU;AAAA,EAC7B,OAAe;AAAA,EAExB,YAAYC,GAAkBG,GAAiB;AAC3C,UAAMH,KAAW,qBAAqB,EAAE,OAAAG,EAAA,CAAO;AAAA,EACnD;AACJ;AAwUO,MAAME,IAAiB,OAAO,aAAa,GACrCC,IAAkB,OAAO,cAAc;"}
@@ -1,3 +1,4 @@
1
- import { MsgBus, MsgBusStruct, MsgBusConfig, MsgBusStructNormalized } from './msgBusCore';
2
- export declare function createMsgBus<TStruct extends MsgBusStruct, THeaders = any>(config?: MsgBusConfig<MsgBusStructNormalized<TStruct>>): MsgBus<TStruct, THeaders>;
1
+ import { MsgBus, MsgStruct, MsgBusConfig, MsgStructNormalized, MsgHeaders } from './msgBusCore';
2
+ export declare const getMatchTest: (pattern: string) => (value: string) => boolean;
3
+ export declare function createMsgBus<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders>(config?: MsgBusConfig<MsgStructNormalized<TStruct>>): MsgBus<TStruct, THeaders>;
3
4
  //# sourceMappingURL=msgBusFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"msgBusFactory.d.ts","sourceRoot":"","sources":["../src/msgBusFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,YAAY,EAIZ,YAAY,EAMZ,sBAAsB,EAGzB,MAAM,cAAc,CAAC;AAyBtB,wBAAgB,YAAY,CAAC,OAAO,SAAS,YAAY,EAAE,QAAQ,GAAG,GAAG,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,6BAsThI"}
1
+ {"version":3,"file":"msgBusFactory.d.ts","sourceRoot":"","sources":["../src/msgBusFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,SAAS,EAIT,YAAY,EAMZ,mBAAmB,EAGnB,UAAU,EAEb,MAAM,cAAc,CAAC;AAStB,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,aAGrB,MAAM,YAS5B,CAAC;AAaF,wBAAgB,YAAY,CAAC,OAAO,SAAS,SAAS,EAAE,QAAQ,SAAS,UAAU,GAAG,UAAU,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,6BAgZpJ"}
@@ -1,179 +1,203 @@
1
- import { $CG_IN as b, $CG_ERROR as B, $C_ERROR as T, $CG_OUT as S } from "./msgBusCore.es.js";
2
- import { v4 as y } from "uuid";
3
- import { ReplaySubject as j, Subject as O } from "rxjs";
4
- import { filter as W, take as q } from "rxjs/operators";
5
- const A = (i) => {
6
- if (i == null)
7
- return (c) => c == i;
8
- if (i.startsWith("/") && i.endsWith("/")) {
9
- i = i.substring(1, i.length - 1);
10
- const c = new RegExp(i);
11
- return (l) => c.test(l);
1
+ import { TimeoutError as T, $CG_IN as v, $CG_ERROR as j, $C_ERROR as F, $CG_OUT as R } from "./msgBusCore.es.js";
2
+ import { v4 as $ } from "uuid";
3
+ import { asyncScheduler as I, ReplaySubject as z, Subject as D } from "rxjs";
4
+ import { filter as G, delay as U, observeOn as q, take as K, debounceTime as N } from "rxjs/operators";
5
+ import { pipeFromArray as H, throttleOp as J } from "./util.es.js";
6
+ import { delayErrorAsync as A } from "@actdim/utico/utils";
7
+ const Q = (u) => {
8
+ if (u == null)
9
+ return (a) => a == u;
10
+ if (u.startsWith("/") && u.endsWith("/")) {
11
+ u = u.substring(1, u.length - 1);
12
+ const a = new RegExp(u);
13
+ return (d) => a.test(d);
12
14
  } else
13
- return (c) => i === c;
14
- }, L = ":";
15
- function K(i) {
16
- const c = "msgbus";
17
- function l() {
18
- return Date.now();
19
- }
20
- function C(e) {
15
+ return (a) => u === a;
16
+ }, k = 1e3 * 60 * 2;
17
+ function V() {
18
+ return Date.now();
19
+ }
20
+ const X = ":";
21
+ function re(u) {
22
+ const a = "msgbus", d = I;
23
+ function O(e) {
21
24
  return {
22
- address: e.address,
23
- requestId: e.requestId,
24
- traceId: e.traceId,
25
25
  id: e.id,
26
- timestamp: e.timestamp,
27
- priority: e.priority,
28
- persistent: e.persistent,
26
+ address: e.address,
29
27
  headers: e.headers
30
28
  };
31
29
  }
32
- function p(e, n) {
33
- const t = {
34
- error: n,
35
- source: C(e)
30
+ function p(e, t) {
31
+ const n = {
32
+ error: t,
33
+ source: O(e)
36
34
  };
37
35
  let o;
38
36
  o = {
39
37
  address: {
40
38
  channel: e.address.channel,
41
- group: B,
42
- topic: c
39
+ group: j,
40
+ topic: a
43
41
  },
44
- payload: t
45
- }, f(o), o = {
42
+ payload: n
43
+ }, g(o), o = {
46
44
  address: {
47
- channel: T,
48
- group: b,
49
- topic: c
45
+ channel: F,
46
+ group: v,
47
+ topic: a
50
48
  },
51
- payload: t
52
- }, f(o);
49
+ payload: n
50
+ }, g(o);
53
51
  }
54
- const h = /* @__PURE__ */ new Map();
55
- function $(e, n) {
56
- return `${e}${L}${n}`;
52
+ const y = /* @__PURE__ */ new Map();
53
+ function L(e, t) {
54
+ return `${e}${X}${t}`;
57
55
  }
58
- function g(e, n) {
59
- const t = $(e, n);
60
- if (!h.has(t)) {
56
+ function w(e, t) {
57
+ const n = L(e, t);
58
+ if (!y.has(n)) {
61
59
  let o = null;
62
- const r = i[e];
63
- r && (r.replayBufferSize != null || r.replayWindowTime != null) && (o = new j(r.replayBufferSize == null ? 1 / 0 : r.replayBufferSize, r.replayWindowTime == null ? 1 / 0 : r.replayWindowTime)), o || (o = new O()), h.set(
64
- t,
60
+ const r = u[e];
61
+ r && (r.replayBufferSize != null || r.replayWindowTime != null) && (o = new z(r.replayBufferSize == null ? 1 / 0 : r.replayBufferSize, r.replayWindowTime == null ? 1 / 0 : r.replayWindowTime)), o || (o = new D()), y.set(
62
+ n,
65
63
  o
66
64
  );
67
65
  }
68
- return h.get(t);
66
+ return y.get(n);
67
+ }
68
+ function S(e, t, n) {
69
+ if (t != null) {
70
+ let o, r = { leading: !0, trailing: !0 };
71
+ typeof t == "number" ? o = t : (o = t.duration, r.leading = t.leading, r.trailing = t.trailing), e.push(J(o, r, n));
72
+ }
69
73
  }
70
- function u(e) {
71
- const n = String(e.channel), t = e.group == null ? b : String(e.group), o = g(n, t), r = A(e.topic), d = W(
72
- (s) => (
74
+ function E(e, t, n) {
75
+ t != null && e.push(N(t, n));
76
+ }
77
+ function b(e) {
78
+ const t = String(e.channel), n = e.group == null ? v : String(e.group), o = w(t, n), r = Q(e.topic), c = G(
79
+ (f) => (
73
80
  // msg.address.channel === channel &&
74
81
  // msg.address.group === group &&
75
- r(s.address.topic) && (!e.filter || e.filter(s))
82
+ r(f.address.topic) && (!e.filter || e.filter(f))
76
83
  )
77
84
  );
78
- let a;
79
- e.config?.fetchCount ? a = o.pipe(d, q(e.config.fetchCount)) : a = o.pipe(d);
80
- const P = a.subscribe({
81
- next: (s) => {
85
+ let l;
86
+ const s = [];
87
+ s.push(c);
88
+ const i = u[t];
89
+ S(s, i.throttle, d), S(s, e.config?.throttle, d), E(s, i.debounce, d), E(s, e.config?.debounce, d), i.delay && s.push(U(i.delay, d)), d && s.push(q(d)), e.config?.fetchCount && s.push(K(e.config.fetchCount)), l = H(s)(o);
90
+ const h = l.subscribe({
91
+ next: (f) => {
82
92
  try {
83
- return e.callback(s);
84
- } catch (x) {
85
- p(s, x);
93
+ return e.callback(f);
94
+ } catch (W) {
95
+ p(f, W);
86
96
  }
87
97
  },
88
- error: (s) => {
98
+ error: (f) => {
89
99
  p(
90
100
  {
91
101
  address: {
92
- channel: n,
93
- group: t,
102
+ channel: t,
103
+ group: n,
94
104
  topic: e.topic
95
- },
96
- id: void 0,
97
- // not a real message
98
- timestamp: l()
105
+ }
99
106
  },
100
- s
107
+ f
101
108
  );
102
109
  },
103
110
  complete: () => {
104
111
  }
105
- }), w = e.config?.abortSignal;
106
- w?.addEventListener("abort", (s) => {
107
- console.log(
108
- `Listening aborted for channel: ${n}, group: ${t}, topic: ${e.topic}. Reason: ${w.reason}`
112
+ }), P = e.config?.abortSignal;
113
+ P?.addEventListener("abort", (f) => {
114
+ console.debug(
115
+ `Listening aborted for channel: ${t}, group: ${n}, topic: ${e.topic}. Reason: ${P.reason}`
109
116
  // e.target
110
- ), P.unsubscribe();
117
+ ), h.unsubscribe();
111
118
  });
112
119
  }
113
- function f(e) {
114
- e.timestamp == null && (e.timestamp = l()), e.id == null && (e.id = y()), e.traceId == null && (e.traceId = y());
120
+ function g(e) {
121
+ e.id == null && (e.id = $()), e.headers == null && (e.headers = {});
122
+ const t = e.headers;
123
+ t.publishedAt = V();
115
124
  const n = String(e.address.channel);
116
- e.address.group == null && (e.address.group = b);
117
- const t = String(e.address.group);
118
- return g(n, t).next(e), e;
125
+ e.address.group == null && (e.address.group = v);
126
+ const o = String(e.address.group);
127
+ return w(n, o).next(e), e;
119
128
  }
120
- function E(e) {
121
- u(e);
129
+ function x(e) {
130
+ b(e);
122
131
  }
123
- function R(e) {
124
- return new Promise((n, t) => {
132
+ function B(e) {
133
+ const t = e.config?.timeout == null ? k : e.config?.timeout;
134
+ let n = !1;
135
+ return Promise.race([A(t, () => new T()), new Promise((o, r) => {
125
136
  try {
126
- const o = e.config?.abortSignal;
127
- o?.addEventListener("abort", (d) => {
128
- t(new Error("Cancelled", { cause: o.reason }));
129
- });
130
- const r = {
137
+ const c = e.config?.abortSignal;
138
+ let l = null;
139
+ if (c) {
140
+ let i = null;
141
+ l = () => {
142
+ c.removeEventListener("abort", i);
143
+ }, i = () => {
144
+ n || (n = !0, l(), r(new Error("Cancelled", { cause: c.reason })));
145
+ }, c.addEventListener("abort", i);
146
+ }
147
+ const s = {
131
148
  ...e,
132
149
  config: {
133
150
  ...e.config,
134
151
  fetchCount: 1
135
152
  },
136
- callback: (d) => {
137
- n(d);
153
+ callback: (i) => {
154
+ try {
155
+ if (n)
156
+ return;
157
+ n = !0, l?.(), o(i);
158
+ } catch (h) {
159
+ if (n)
160
+ return;
161
+ n = !0, l?.(), r(h);
162
+ }
138
163
  }
139
164
  };
140
- u(r);
141
- } catch (o) {
142
- t(o);
165
+ b(s);
166
+ } catch (c) {
167
+ r(c);
143
168
  }
144
- });
169
+ })]);
145
170
  }
146
- function k(e) {
147
- const n = {
171
+ function M(e) {
172
+ const t = {
148
173
  ...e,
149
- callback: async (t) => {
174
+ callback: async (n) => {
150
175
  try {
151
176
  const o = {
152
177
  address: {
153
- channel: t.address.channel,
154
- group: S,
155
- topic: t.address.topic
178
+ channel: n.address.channel,
179
+ group: R,
180
+ topic: n.address.topic
156
181
  },
157
- traceId: t.traceId,
158
- requestId: t.id,
159
- persistent: t.persistent,
160
- priority: t.priority,
161
- headers: t.headers
162
- }, r = await Promise.resolve(e.callback(t, o));
163
- o.payload = r, f(o);
182
+ headers: {
183
+ ...n.headers,
184
+ requestId: n.id
185
+ }
186
+ }, r = await Promise.resolve(e.callback(n, o));
187
+ o.payload = r, g(o);
164
188
  } catch (o) {
165
- p(t, o);
189
+ p(n, o);
166
190
  }
167
191
  }
168
192
  };
169
- u(n);
193
+ b(t);
170
194
  }
171
- function v(e) {
172
- const n = y();
195
+ function C(e) {
196
+ const t = $();
173
197
  if (e.callback) {
174
198
  const o = {
175
199
  channel: e.channel,
176
- group: S,
200
+ group: R,
177
201
  topic: e.topic,
178
202
  config: {
179
203
  ...e.config,
@@ -182,63 +206,76 @@ function K(i) {
182
206
  callback: (r) => {
183
207
  e.callback(r);
184
208
  },
185
- filter: (r) => r.requestId === n && (!e.filter || e.filter(r))
209
+ filter: (r) => r.headers?.requestId === t && (!e.filter || e.filter(r))
186
210
  };
187
- u(o);
211
+ b(o);
188
212
  }
189
- let t;
213
+ let n;
190
214
  e.payloadFn ? e.payloadFn((o) => {
191
- t = o;
192
- }) : t = e.payload, f({
215
+ n = o;
216
+ }) : n = e.payload, g({
217
+ id: t,
193
218
  address: {
194
219
  channel: e.channel,
195
220
  group: e.group,
196
221
  topic: e.topic
197
222
  },
198
- payload: t,
199
- traceId: e.traceId,
200
- persistent: e.persistent,
201
- priority: e.priority,
202
- id: n,
203
- headers: e.headers
223
+ headers: {
224
+ ...e.headers
225
+ },
226
+ payload: n
204
227
  });
205
228
  }
206
- async function I(e) {
207
- return new Promise((n, t) => {
229
+ async function _(e) {
230
+ const t = e.config?.timeout == null ? k : e.config?.timeout;
231
+ let n = !1;
232
+ return Promise.race([A(t, () => new T()), new Promise((o, r) => {
208
233
  try {
209
- const o = e.config?.abortSignal;
210
- o?.addEventListener("abort", (d) => {
211
- t(new Error("Cancelled", { cause: o.reason }));
212
- });
213
- const r = {
234
+ const c = e.config?.abortSignal;
235
+ let l = null;
236
+ if (c) {
237
+ let i = null;
238
+ const h = () => {
239
+ c.removeEventListener("abort", i);
240
+ };
241
+ i = () => {
242
+ n || (n = !0, h(), r(new Error("Cancelled", { cause: c.reason })));
243
+ }, c.addEventListener("abort", i);
244
+ }
245
+ const s = {
214
246
  ...e,
215
- callback: (d) => {
247
+ callback: (i) => {
216
248
  try {
217
- n(d);
218
- } catch (a) {
219
- t(a);
249
+ if (n)
250
+ return;
251
+ n = !0, l?.(), o(i);
252
+ } catch (h) {
253
+ if (n)
254
+ return;
255
+ n = !0, l?.(), r(h);
220
256
  }
221
257
  }
222
258
  };
223
- v(r);
224
- } catch (o) {
225
- t(o);
259
+ C(s);
260
+ } catch (c) {
261
+ r(c);
226
262
  }
227
- });
263
+ })]);
228
264
  }
229
265
  return {
230
- config: i,
231
- on: (e) => E(e),
232
- onceAsync: (e) => R(e),
266
+ config: u,
267
+ on: (e) => x(e),
268
+ onceAsync: (e) => B(e),
233
269
  stream: (e) => {
234
270
  throw new Error("Not implemented");
235
271
  },
236
- provide: (e) => k(e),
237
- dispatch: (e) => v(e),
238
- dispatchAsync: (e) => I(e)
272
+ provide: (e) => M(e),
273
+ dispatch: (e) => C(e),
274
+ dispatchAsync: (e) => _(e)
239
275
  };
240
276
  }
241
277
  export {
242
- K as createMsgBus
278
+ re as createMsgBus,
279
+ Q as getMatchTest
243
280
  };
244
281
  //# sourceMappingURL=msgBusFactory.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"msgBusFactory.es.js","sources":["../src/msgBusFactory.ts"],"sourcesContent":["import {\r\n MsgBus,\r\n MsgBusStruct,\r\n Msg,\r\n $CG_IN,\r\n $CG_OUT,\r\n MsgBusConfig,\r\n MsgBusSubscriberParams,\r\n MsgBusAsyncSubscriberParams,\r\n MsgBusProviderParams,\r\n MsgBusDispatcherParams,\r\n MsgBusAsyncDispatcherParams,\r\n MsgBusStructNormalized,\r\n $CG_ERROR,\r\n $C_ERROR\r\n} from \"./msgBusCore\";\r\nimport { v4 as uuid } from \"uuid\";\r\nimport { MonoTypeOperatorFunction, Observable, Subject, ReplaySubject } from \"rxjs\";\r\nimport { filter, filter as filterOp, take as takeOp } from \"rxjs/operators\";\r\nimport { Skip } from \"@actdim/utico/typeCore\";\r\n\r\nconst getMatchTest = (pattern: string) => {\r\n if (pattern == undefined) {\r\n // return (value: string) => true;\r\n return (value: string) => value == pattern;\r\n }\r\n if (pattern.startsWith(\"/\") && pattern.endsWith(\"/\")) {\r\n pattern = pattern.substring(1, pattern.length - 1);\r\n const regexp = new RegExp(pattern);\r\n return (value: string) => regexp.test(value);\r\n } else {\r\n return (value: string) => pattern === value;\r\n }\r\n};\r\n\r\n// see also https://www.npmjs.com/package/p-queue\r\n// https://github.com/postaljs/postal.js\r\n\r\n// createServiceBus\r\nconst groupPrefix = \":\"; // \"/\", \":\", \"::\"\r\nexport function createMsgBus<TStruct extends MsgBusStruct, THeaders = any>(config?: MsgBusConfig<MsgBusStructNormalized<TStruct>>) {\r\n type TStructN = MsgBusStructNormalized<TStruct>;\r\n type MsgInfo = Skip<Msg<TStructN>, \"payload\">;\r\n const errTopic = \"msgbus\";\r\n\r\n function now() {\r\n return Date.now(); // new Date().getTime() or +new Date()\r\n }\r\n\r\n function getMsgInfo(msg: Msg<TStructN>) {\r\n return {\r\n address: msg.address,\r\n requestId: msg.requestId,\r\n traceId: msg.traceId,\r\n id: msg.id,\r\n timestamp: msg.timestamp,\r\n priority: msg.priority,\r\n persistent: msg.persistent,\r\n headers: msg.headers\r\n } as MsgInfo;\r\n }\r\n\r\n function handleError(srcMsg: Msg<TStructN>, err: any) {\r\n const errPayload = {\r\n error: err,\r\n source: getMsgInfo(srcMsg)\r\n } as Msg<TStructN>[\"payload\"];\r\n let errMsg: Msg<TStructN>;\r\n errMsg = {\r\n address: {\r\n channel: srcMsg.address.channel,\r\n group: $CG_ERROR,\r\n topic: errTopic\r\n },\r\n payload: errPayload\r\n };\r\n publish(errMsg);\r\n errMsg = {\r\n address: {\r\n channel: $C_ERROR,\r\n group: $CG_IN,\r\n topic: errTopic\r\n },\r\n payload: errPayload\r\n };\r\n publish(errMsg);\r\n }\r\n // observables\r\n const subjects: Map<string, Subject<Msg<TStructN>>> = new Map();\r\n\r\n function createRoutingKey(channel: string, group: string) {\r\n return `${channel}${groupPrefix}${group}`;\r\n }\r\n\r\n function getOrCreateSubject(channel: string, group: string): Subject<Msg<TStructN>> {\r\n const routingKey = createRoutingKey(channel, group);\r\n // TODO: support BehaviorSubject\r\n if (!subjects.has(routingKey)) {\r\n let subject: Subject<Msg<TStructN>> = null;\r\n const channelConfig = config[channel];\r\n if (channelConfig) {\r\n if (channelConfig.replayBufferSize != undefined || channelConfig.replayWindowTime != undefined) {\r\n subject = new ReplaySubject<Msg<TStructN>>(channelConfig.replayBufferSize == undefined ? Infinity : channelConfig.replayBufferSize, channelConfig.replayWindowTime == undefined ? Infinity : channelConfig.replayWindowTime);\r\n }\r\n }\r\n if (!subject) {\r\n subject = new Subject<Msg<TStructN>>();\r\n }\r\n subjects.set(routingKey,\r\n subject\r\n );\r\n }\r\n return subjects.get(routingKey);\r\n }\r\n\r\n function subscribe(params: MsgBusSubscriberParams<TStructN>) {\r\n // TODO: use [channel, group] as key?\r\n\r\n const channel = String(params.channel);\r\n\r\n const group = params.group == undefined ? $CG_IN : String(params.group);\r\n\r\n const subject = getOrCreateSubject(channel, group);\r\n\r\n const match = getMatchTest(params.topic);\r\n\r\n const fOp: MonoTypeOperatorFunction<Msg<TStructN>> = filterOp(\r\n (msg) =>\r\n // msg.address.channel === channel &&\r\n // msg.address.group === group &&\r\n match(msg.address.topic) && (!params.filter || params.filter(msg))\r\n );\r\n\r\n let observable: Observable<Msg<TStructN>>;\r\n // groupBy?\r\n // mergeMap?\r\n // timeout, takeUntil, time?\r\n if (params.config?.fetchCount) {\r\n observable = subject.pipe(fOp, takeOp(params.config.fetchCount));\r\n } else {\r\n observable = subject.pipe(fOp);\r\n }\r\n\r\n const sub = observable.subscribe({\r\n next: (msg: Msg<TStructN>) => {\r\n try {\r\n return params.callback(msg);\r\n } catch (err) {\r\n handleError(msg, err);\r\n // throw err;\r\n }\r\n },\r\n error: (err) => {\r\n handleError(\r\n {\r\n address: {\r\n channel: channel,\r\n group: group,\r\n topic: params.topic\r\n },\r\n id: undefined, // not a real message\r\n timestamp: now()\r\n },\r\n err\r\n );\r\n },\r\n complete: () => {\r\n // cleanup\r\n }\r\n });\r\n\r\n const abortSignal = params.config?.abortSignal;\r\n abortSignal?.addEventListener(\"abort\", (e) => {\r\n // TODO: publish debug (internal) message\r\n console.log(\r\n `Listening aborted for channel: ${channel}, group: ${group}, topic: ${params.topic}. Reason: ${abortSignal.reason}` // e.target\r\n );\r\n sub.unsubscribe();\r\n });\r\n }\r\n\r\n function publish(msg: Msg<TStructN>) {\r\n if (msg.timestamp == undefined) {\r\n msg.timestamp = now()\r\n }\r\n if (msg.id == undefined) {\r\n msg.id = uuid();\r\n }\r\n if (msg.traceId == undefined) {\r\n msg.traceId = uuid();\r\n }\r\n const channel = String(msg.address.channel);\r\n if (msg.address.group == undefined) {\r\n msg.address.group = $CG_IN;\r\n }\r\n const group = String(msg.address.group);\r\n const subject = getOrCreateSubject(channel, group);\r\n subject.next(msg);\r\n return msg;\r\n }\r\n\r\n function on(params: MsgBusSubscriberParams<TStructN>) {\r\n subscribe(params);\r\n }\r\n\r\n function onceAsync(params: MsgBusAsyncSubscriberParams<TStructN>) {\r\n return new Promise<any>((res, rej) => {\r\n try {\r\n const abortSignal = params.config?.abortSignal;\r\n abortSignal?.addEventListener(\"abort\", (e) => {\r\n rej(new Error(\"Cancelled\", { cause: abortSignal.reason })); // e.target\r\n });\r\n const subParams: MsgBusSubscriberParams<TStructN> = {\r\n ...params,\r\n ...{\r\n config: {\r\n ...params.config,\r\n ...{\r\n fetchCount: 1\r\n }\r\n },\r\n callback: (msg) => {\r\n // sub.unsubscribe();\r\n res(msg);\r\n }\r\n }\r\n };\r\n subscribe(subParams);\r\n } catch (e) {\r\n rej(e);\r\n }\r\n });\r\n }\r\n\r\n function provide(params: MsgBusProviderParams<TStructN>) {\r\n const subParams: MsgBusSubscriberParams<TStructN> = {\r\n ...params,\r\n ...{\r\n callback: async (msgIn) => {\r\n try {\r\n const msgOut: Msg<TStructN, keyof TStructN, typeof $CG_OUT> = {\r\n address: {\r\n channel: msgIn.address.channel,\r\n group: $CG_OUT,\r\n topic: msgIn.address.topic\r\n },\r\n traceId: msgIn.traceId,\r\n requestId: msgIn.id,\r\n persistent: msgIn.persistent,\r\n priority: msgIn.priority,\r\n headers: msgIn.headers\r\n };\r\n const payload = (await Promise.resolve(params.callback(msgIn, msgOut)));\r\n msgOut.payload = payload;\r\n publish(msgOut);\r\n } catch (err) {\r\n handleError(msgIn, err);\r\n // throw err;\r\n }\r\n }\r\n }\r\n };\r\n subscribe(subParams);\r\n }\r\n\r\n function dispatch(params: MsgBusDispatcherParams<TStructN>) {\r\n const msgId = uuid();\r\n if (params.callback) {\r\n const subParams: MsgBusSubscriberParams<TStructN, keyof TStructN, typeof $CG_OUT> = {\r\n channel: params.channel,\r\n group: $CG_OUT,\r\n topic: params.topic,\r\n config: {\r\n ...params.config,\r\n ...{\r\n fetchCount: 1\r\n }\r\n },\r\n callback: (msgOut) => {\r\n // sub.unsubscribe();\r\n params.callback(msgOut);\r\n },\r\n filter: (msgOut) => {\r\n return msgOut.requestId === msgId && (!params.filter || params.filter(msgOut)) // TODO: match topic?\r\n }\r\n };\r\n subscribe(subParams);\r\n }\r\n let payload: any;\r\n if (params.payloadFn) {\r\n params.payloadFn((args) => {\r\n payload = args;\r\n });\r\n } else {\r\n payload = params.payload;\r\n }\r\n const msgIn = publish({\r\n address: {\r\n channel: params.channel,\r\n group: params.group,\r\n topic: params.topic\r\n },\r\n payload: payload,\r\n traceId: params.traceId,\r\n persistent: params.persistent,\r\n priority: params.priority,\r\n id: msgId,\r\n headers: params.headers\r\n });\r\n }\r\n\r\n async function dispatchAsync(params: MsgBusAsyncDispatcherParams<TStructN>): Promise<any> {\r\n return new Promise((res, rej) => {\r\n try {\r\n const abortSignal = params.config?.abortSignal;\r\n abortSignal?.addEventListener(\"abort\", (e) => {\r\n rej(new Error(\"Cancelled\", { cause: abortSignal.reason })); // e.target\r\n });\r\n const dispatchParams: MsgBusDispatcherParams<TStructN> = {\r\n ...params,\r\n callback: (msg) => {\r\n try {\r\n res(msg);\r\n } catch (err) {\r\n rej(err);\r\n }\r\n }\r\n };\r\n dispatch(dispatchParams);\r\n } catch (err) {\r\n rej(err);\r\n }\r\n });\r\n }\r\n\r\n const msgBus: MsgBus<TStruct, THeaders> = {\r\n config: config,\r\n on: (params) => on(params as MsgBusSubscriberParams<TStructN>),\r\n onceAsync: (params) => onceAsync(params as MsgBusAsyncSubscriberParams<TStructN>),\r\n stream: (params) => {\r\n throw new Error(\"Not implemented\");\r\n },\r\n provide: (params) => provide(params as MsgBusProviderParams<TStructN>),\r\n dispatch: (params) => dispatch(params as MsgBusDispatcherParams<TStructN>),\r\n dispatchAsync: (params) => dispatchAsync(params as MsgBusAsyncDispatcherParams<TStructN>),\r\n };\r\n\r\n // msgBus[\"#subjects\"] = subjects;\r\n\r\n return msgBus;\r\n}\r\n\r\n// class MessageBus<TStruct extends MsgBusStruct>\r\n// implements IMsgBus<TStruct>\r\n// {\r\n// constructor() {}\r\n// // ...\r\n// }\r\n"],"names":["getMatchTest","pattern","value","regexp","groupPrefix","createMsgBus","config","errTopic","now","getMsgInfo","msg","handleError","srcMsg","err","errPayload","errMsg","$CG_ERROR","publish","$C_ERROR","$CG_IN","subjects","createRoutingKey","channel","group","getOrCreateSubject","routingKey","subject","channelConfig","ReplaySubject","Subject","subscribe","params","match","fOp","filterOp","observable","takeOp","sub","abortSignal","e","uuid","on","onceAsync","res","rej","subParams","provide","msgIn","msgOut","$CG_OUT","payload","dispatch","msgId","args","dispatchAsync","dispatchParams"],"mappings":"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"}
1
+ {"version":3,"file":"msgBusFactory.es.js","sources":["../src/msgBusFactory.ts"],"sourcesContent":["import {\r\n MsgBus,\r\n MsgStruct,\r\n Msg,\r\n $CG_IN,\r\n $CG_OUT,\r\n MsgBusConfig,\r\n MsgSubscriberParams,\r\n MsgAsyncSubscriberParams,\r\n MsgProviderParams,\r\n MsgDispatcherParams,\r\n MsgAsyncDispatcherParams,\r\n MsgStructNormalized,\r\n $CG_ERROR,\r\n $C_ERROR,\r\n MsgHeaders,\r\n TimeoutError\r\n} from \"./msgBusCore\";\r\nimport { v4 as uuid } from \"uuid\";\r\nimport { MonoTypeOperatorFunction, Observable, Subject, ReplaySubject, asyncScheduler, OperatorFunction, SchedulerLike } from \"rxjs\";\r\nimport { filter as filterOp, take as takeOp, observeOn, delay as delayOp, debounceTime as debounceOp } from \"rxjs/operators\";\r\n\r\nimport { Skip } from \"@actdim/utico/typeCore\";\r\nimport { pipeFromArray, throttleOp, ThrottleOptions } from \"./util\";\r\nimport { delayErrorAsync } from \"@actdim/utico/utils\";\r\n\r\nexport const getMatchTest = (pattern: string) => {\r\n if (pattern == undefined) {\r\n // return (value: string) => true;\r\n return (value: string) => value == pattern;\r\n }\r\n if (pattern.startsWith(\"/\") && pattern.endsWith(\"/\")) {\r\n pattern = pattern.substring(1, pattern.length - 1);\r\n const regexp = new RegExp(pattern);\r\n return (value: string) => regexp.test(value);\r\n } else {\r\n return (value: string) => pattern === value;\r\n }\r\n};\r\n\r\nconst DEFAULT_PROMISE_TIMEOUT = 1000 * 60 * 2; // 2 minutes\r\n\r\n// see also https://www.npmjs.com/package/p-queue\r\n// https://github.com/postaljs/postal.js\r\n\r\nfunction now() {\r\n return Date.now(); // new Date().getTime() or +new Date()\r\n}\r\n\r\n// createServiceBus\r\nconst groupPrefix = \":\"; // \"/\", \":\", \"::\"\r\nexport function createMsgBus<TStruct extends MsgStruct, THeaders extends MsgHeaders = MsgHeaders>(config?: MsgBusConfig<MsgStructNormalized<TStruct>>) {\r\n type TStructN = MsgStructNormalized<TStruct>;\r\n type MsgInfo = Skip<Msg<TStructN>, \"payload\">;\r\n\r\n const errTopic = \"msgbus\";\r\n const scheduler: SchedulerLike = asyncScheduler;\r\n\r\n function getMsgInfo(msg: Msg<TStructN>) {\r\n return {\r\n id: msg.id,\r\n address: msg.address,\r\n headers: msg.headers\r\n } as MsgInfo;\r\n }\r\n\r\n function handleError(srcMsg: Msg<TStructN>, err: any) {\r\n const errPayload = {\r\n error: err,\r\n source: getMsgInfo(srcMsg)\r\n } as Msg<TStructN>[\"payload\"];\r\n let errMsg: Msg<TStructN>;\r\n errMsg = {\r\n address: {\r\n channel: srcMsg.address.channel,\r\n group: $CG_ERROR,\r\n topic: errTopic\r\n },\r\n payload: errPayload\r\n };\r\n publish(errMsg);\r\n errMsg = {\r\n address: {\r\n channel: $C_ERROR,\r\n group: $CG_IN,\r\n topic: errTopic\r\n },\r\n payload: errPayload\r\n };\r\n publish(errMsg);\r\n // + nack?\r\n }\r\n // observables\r\n const subjects: Map<string, Subject<Msg<TStructN>>> = new Map();\r\n\r\n function createRoutingKey(channel: string, group: string) {\r\n return `${channel}${groupPrefix}${group}`;\r\n }\r\n\r\n function getOrCreateSubject(channel: string, group: string): Subject<Msg<TStructN>> {\r\n const routingKey = createRoutingKey(channel, group);\r\n // TODO: support BehaviorSubject\r\n if (!subjects.has(routingKey)) {\r\n let subject: Subject<Msg<TStructN>> = null;\r\n const channelConfig = config[channel];\r\n if (channelConfig) {\r\n if (channelConfig.replayBufferSize != undefined || channelConfig.replayWindowTime != undefined) {\r\n subject = new ReplaySubject<Msg<TStructN>>(channelConfig.replayBufferSize == undefined ? Infinity : channelConfig.replayBufferSize, channelConfig.replayWindowTime == undefined ? Infinity : channelConfig.replayWindowTime);\r\n }\r\n }\r\n if (!subject) {\r\n subject = new Subject<Msg<TStructN>>();\r\n }\r\n subjects.set(routingKey,\r\n subject\r\n );\r\n }\r\n return subjects.get(routingKey);\r\n }\r\n\r\n function applyThrottle(ops: OperatorFunction<any, any>[], throttle?: number | (ThrottleOptions & { duration: number; }), scheduler?: SchedulerLike) {\r\n if (throttle != undefined) {\r\n let duration: number;\r\n let options: ThrottleOptions = { leading: true, trailing: true };\r\n if (typeof throttle === \"number\") {\r\n duration = throttle;\r\n } else {\r\n duration = throttle.duration;\r\n options.leading = throttle.leading;\r\n options.trailing = throttle.trailing;\r\n }\r\n ops.push(throttleOp(duration, options, scheduler));\r\n }\r\n }\r\n\r\n function applyDebounce(ops: OperatorFunction<any, any>[], duration?: number, scheduler?: SchedulerLike) {\r\n if (duration != undefined) {\r\n ops.push(debounceOp(duration, scheduler));\r\n }\r\n }\r\n\r\n function subscribe(params: MsgSubscriberParams<TStructN>) {\r\n // TODO: use [channel, group] as key?\r\n\r\n const channel = String(params.channel);\r\n\r\n const group = params.group == undefined ? $CG_IN : String(params.group);\r\n\r\n const subject = getOrCreateSubject(channel, group);\r\n\r\n const match = getMatchTest(params.topic);\r\n\r\n const fOp: MonoTypeOperatorFunction<Msg<TStructN>> = filterOp(\r\n (msg) =>\r\n // msg.address.channel === channel &&\r\n // msg.address.group === group &&\r\n match(msg.address.topic) && (!params.filter || params.filter(msg))\r\n );\r\n\r\n let observable: Observable<Msg<TStructN>>;\r\n\r\n const ops: OperatorFunction<any, any>[] = [];\r\n\r\n ops.push(fOp);\r\n\r\n const channelConfig = config[channel];\r\n\r\n applyThrottle(ops, channelConfig.throttle, scheduler);\r\n\r\n applyThrottle(ops, params.config?.throttle, scheduler);\r\n\r\n applyDebounce(ops, channelConfig.debounce, scheduler);\r\n\r\n applyDebounce(ops, params.config?.debounce, scheduler);\r\n\r\n if (channelConfig.delay) {\r\n ops.push(delayOp(channelConfig.delay, scheduler));\r\n }\r\n\r\n if (scheduler) {\r\n ops.push(observeOn(scheduler));\r\n }\r\n\r\n if (params.config?.fetchCount) {\r\n ops.push(takeOp(params.config.fetchCount));\r\n }\r\n\r\n observable = pipeFromArray(ops)(subject);\r\n\r\n // TODO: support retryOp\r\n // TODO: support timeout\r\n const sub = observable.subscribe({\r\n next: (msg: Msg<TStructN>) => {\r\n try {\r\n return params.callback(msg);\r\n } catch (err) {\r\n handleError(msg, err);\r\n // throw err;\r\n }\r\n },\r\n error: (err) => {\r\n handleError(\r\n {\r\n address: {\r\n channel: channel,\r\n group: group,\r\n topic: params.topic\r\n }\r\n },\r\n err\r\n );\r\n },\r\n complete: () => {\r\n // cleanup\r\n }\r\n });\r\n\r\n const abortSignal = params.config?.abortSignal;\r\n abortSignal?.addEventListener(\"abort\", (e) => {\r\n // TODO: publish debug (internal) message\r\n console.debug(\r\n `Listening aborted for channel: ${channel}, group: ${group}, topic: ${params.topic}. Reason: ${abortSignal.reason}` // e.target\r\n );\r\n sub.unsubscribe();\r\n });\r\n }\r\n\r\n function publish(msg: Msg<TStructN>) {\r\n if (msg.id == undefined) {\r\n msg.id = uuid();\r\n }\r\n if (msg.headers == undefined) {\r\n msg.headers = {};\r\n }\r\n const headers = msg.headers;\r\n headers.publishedAt = now()\r\n const channel = String(msg.address.channel);\r\n if (msg.address.group == undefined) {\r\n msg.address.group = $CG_IN;\r\n }\r\n const group = String(msg.address.group);\r\n const subject = getOrCreateSubject(channel, group);\r\n subject.next(msg);\r\n return msg;\r\n }\r\n\r\n function on(params: MsgSubscriberParams<TStructN>) {\r\n subscribe(params);\r\n }\r\n\r\n function onceAsync(params: MsgAsyncSubscriberParams<TStructN>) {\r\n const timeout = params.config?.timeout == undefined ? DEFAULT_PROMISE_TIMEOUT : params.config?.timeout;\r\n let settled = false;\r\n return Promise.race([delayErrorAsync(timeout, () => new TimeoutError()), new Promise<any>((res, rej) => {\r\n try {\r\n const abortSignal = params.config?.abortSignal;\r\n let cleanup: () => void = null;\r\n\r\n if (abortSignal) {\r\n let onAbort: () => void = null;\r\n cleanup = () => {\r\n abortSignal.removeEventListener(\"abort\", onAbort);\r\n };\r\n onAbort = () => {\r\n if (settled) {\r\n return\r\n };\r\n settled = true;\r\n cleanup();\r\n rej(new Error(\"Cancelled\", { cause: abortSignal.reason })); // e.target\r\n };\r\n abortSignal.addEventListener(\"abort\", onAbort);\r\n }\r\n\r\n const subParams: MsgSubscriberParams<TStructN> = {\r\n ...params,\r\n ...{\r\n config: {\r\n ...params.config,\r\n ...{\r\n fetchCount: 1\r\n }\r\n },\r\n callback: (msg) => {\r\n try {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n cleanup?.();\r\n // sub.unsubscribe();\r\n res(msg);\r\n } catch (err) {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n cleanup?.();\r\n rej(err);\r\n }\r\n }\r\n }\r\n };\r\n subscribe(subParams);\r\n } catch (e) {\r\n rej(e);\r\n }\r\n })]);\r\n }\r\n\r\n function provide(params: MsgProviderParams<TStructN>) {\r\n const subParams: MsgSubscriberParams<TStructN> = {\r\n ...params,\r\n ...{\r\n callback: async (msgIn) => {\r\n try {\r\n const msgOut: Msg<TStructN, keyof TStructN, typeof $CG_OUT> = {\r\n address: {\r\n channel: msgIn.address.channel,\r\n group: $CG_OUT,\r\n topic: msgIn.address.topic\r\n },\r\n headers: {\r\n ...msgIn.headers,\r\n requestId: msgIn.id,\r\n }\r\n };\r\n const payload = (await Promise.resolve(params.callback(msgIn, msgOut)));\r\n msgOut.payload = payload;\r\n publish(msgOut);\r\n } catch (err) {\r\n handleError(msgIn, err);\r\n // throw err;\r\n }\r\n }\r\n }\r\n };\r\n subscribe(subParams);\r\n }\r\n\r\n function dispatch(params: MsgDispatcherParams<TStructN>) {\r\n const msgId = uuid();\r\n if (params.callback) {\r\n const subParams: MsgSubscriberParams<TStructN, keyof TStructN, typeof $CG_OUT> = {\r\n channel: params.channel,\r\n group: $CG_OUT,\r\n topic: params.topic,\r\n config: {\r\n ...params.config,\r\n ...{\r\n fetchCount: 1\r\n }\r\n },\r\n callback: (msgOut) => {\r\n // sub.unsubscribe();\r\n params.callback(msgOut);\r\n },\r\n filter: (msgOut) => {\r\n return msgOut.headers?.requestId === msgId && (!params.filter || params.filter(msgOut)) // TODO: match topic?\r\n }\r\n };\r\n subscribe(subParams);\r\n }\r\n let payload: any;\r\n if (params.payloadFn) {\r\n params.payloadFn((args) => {\r\n payload = args;\r\n });\r\n } else {\r\n payload = params.payload;\r\n }\r\n const msgIn = publish({\r\n id: msgId,\r\n address: {\r\n channel: params.channel,\r\n group: params.group,\r\n topic: params.topic\r\n },\r\n headers: {\r\n ...params.headers\r\n },\r\n payload: payload\r\n });\r\n }\r\n\r\n async function dispatchAsync(params: MsgAsyncDispatcherParams<TStructN>): Promise<any> {\r\n const timeout = params.config?.timeout == undefined ? DEFAULT_PROMISE_TIMEOUT : params.config?.timeout;\r\n let settled = false;\r\n return Promise.race([delayErrorAsync(timeout, () => new TimeoutError()), new Promise((res, rej) => {\r\n try {\r\n const abortSignal = params.config?.abortSignal;\r\n let cleanup: () => void = null;\r\n\r\n if (abortSignal) {\r\n let onAbort: () => void = null;\r\n const cleanup = () => {\r\n abortSignal.removeEventListener(\"abort\", onAbort);\r\n };\r\n onAbort = () => {\r\n if (settled) {\r\n return\r\n };\r\n settled = true;\r\n cleanup();\r\n rej(new Error(\"Cancelled\", { cause: abortSignal.reason })); // e.target\r\n };\r\n abortSignal.addEventListener(\"abort\", onAbort);\r\n }\r\n\r\n const dispatchParams: MsgDispatcherParams<TStructN> = {\r\n ...params,\r\n callback: (msg) => {\r\n try {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n cleanup?.();\r\n res(msg);\r\n } catch (err) {\r\n if (settled) {\r\n return;\r\n }\r\n settled = true;\r\n cleanup?.();\r\n rej(err);\r\n }\r\n }\r\n };\r\n dispatch(dispatchParams);\r\n } catch (err) {\r\n rej(err);\r\n }\r\n })]);\r\n }\r\n\r\n const msgBus: MsgBus<TStruct, THeaders> = {\r\n config: config,\r\n on: (params) => on(params as MsgSubscriberParams<TStructN>),\r\n onceAsync: (params) => onceAsync(params as MsgAsyncSubscriberParams<TStructN>),\r\n stream: (params) => {\r\n throw new Error(\"Not implemented\");\r\n },\r\n provide: (params) => provide(params as MsgProviderParams<TStructN>),\r\n dispatch: (params) => dispatch(params as MsgDispatcherParams<TStructN>),\r\n dispatchAsync: (params) => dispatchAsync(params as MsgAsyncDispatcherParams<TStructN>),\r\n };\r\n\r\n // msgBus[\"#subjects\"] = subjects;\r\n\r\n return msgBus;\r\n}\r\n\r\n// class MessageBus<TStruct extends MsgBusStruct>\r\n// implements IMsgBus<TStruct>\r\n// {\r\n// constructor() {}\r\n// // ...\r\n// }\r\n"],"names":["getMatchTest","pattern","value","regexp","DEFAULT_PROMISE_TIMEOUT","now","groupPrefix","createMsgBus","config","errTopic","scheduler","asyncScheduler","getMsgInfo","msg","handleError","srcMsg","err","errPayload","errMsg","$CG_ERROR","publish","$C_ERROR","$CG_IN","subjects","createRoutingKey","channel","group","getOrCreateSubject","routingKey","subject","channelConfig","ReplaySubject","Subject","applyThrottle","ops","throttle","duration","options","throttleOp","applyDebounce","debounceOp","subscribe","params","match","fOp","filterOp","observable","delayOp","observeOn","takeOp","pipeFromArray","sub","abortSignal","e","uuid","headers","on","onceAsync","timeout","settled","delayErrorAsync","TimeoutError","res","rej","cleanup","onAbort","subParams","provide","msgIn","msgOut","$CG_OUT","payload","dispatch","msgId","args","dispatchAsync","dispatchParams"],"mappings":"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"}
package/dist/util.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { Observable, SchedulerLike, UnaryFunction } from 'rxjs';
2
+ export declare function identity<T>(x: T): T;
3
+ export declare function pipeFromArray<T, R>(fns: Array<UnaryFunction<T, R>>): UnaryFunction<T, R>;
4
+ export type ThrottleOptions = {
5
+ leading?: boolean;
6
+ trailing?: boolean;
7
+ };
8
+ export declare function throttleOp<T>(duration: number, options?: ThrottleOptions, scheduler?: SchedulerLike): (source: Observable<T>) => Observable<T>;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,UAAU,EAAE,aAAa,EAAqB,aAAa,EAAE,MAAM,MAAM,CAAC;AAEnG,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAEnC;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAYxF;AAED,MAAM,MAAM,eAAe,GAAG;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB,CAAA;AAED,wBAAgB,UAAU,CAAC,CAAC,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAmD,EAC5D,SAAS,GAAE,aAA8B,IAIjC,QAAQ,UAAU,CAAC,CAAC,CAAC,mBAiDhC"}
@@ -0,0 +1,39 @@
1
+ import { asyncScheduler as p, Observable as g, timer as m } from "rxjs";
2
+ function b(e) {
3
+ return e;
4
+ }
5
+ function x(e) {
6
+ return e.length === 0 ? b : e.length === 1 ? e[0] : function(u) {
7
+ return e.reduce((o, r) => r(o), u);
8
+ };
9
+ }
10
+ function y(e, f = { leading: !0, trailing: !0 }, u = p) {
11
+ const { leading: o = !0, trailing: r = !1 } = f;
12
+ return (d) => new g((n) => {
13
+ let l = !1, t, c;
14
+ const s = () => {
15
+ r && t !== void 0 && n.next(t), t = void 0, l = !1;
16
+ }, a = d.subscribe({
17
+ next(i) {
18
+ l ? r && (t = i) : (l = !0, o ? n.next(i) : r && (t = i), c = m(e, u).subscribe(() => {
19
+ s(), c?.unsubscribe();
20
+ }));
21
+ },
22
+ error(i) {
23
+ n.error(i);
24
+ },
25
+ complete() {
26
+ r && t !== void 0 && n.next(t), n.complete();
27
+ }
28
+ });
29
+ return () => {
30
+ a.unsubscribe(), c?.unsubscribe();
31
+ };
32
+ });
33
+ }
34
+ export {
35
+ b as identity,
36
+ x as pipeFromArray,
37
+ y as throttleOp
38
+ };
39
+ //# sourceMappingURL=util.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.es.js","sources":["../src/util.ts"],"sourcesContent":["import { asyncScheduler, Observable, SchedulerLike, Subscriber, timer, UnaryFunction } from \"rxjs\";\r\n\r\nexport function identity<T>(x: T): T {\r\n return x;\r\n}\r\n\r\nexport function pipeFromArray<T, R>(fns: Array<UnaryFunction<T, R>>): UnaryFunction<T, R> {\r\n if (fns.length === 0) {\r\n return identity as UnaryFunction<any, any>;\r\n }\r\n\r\n if (fns.length === 1) {\r\n return fns[0];\r\n }\r\n\r\n return function piped(input: T): R {\r\n return fns.reduce((prev: any, fn: UnaryFunction<T, R>) => fn(prev), input as any);\r\n };\r\n}\r\n\r\nexport type ThrottleOptions = {\r\n leading?: boolean;\r\n trailing?: boolean;\r\n}\r\n\r\nexport function throttleOp<T>(\r\n duration: number,\r\n options: ThrottleOptions = { leading: true, trailing: true },\r\n scheduler: SchedulerLike = asyncScheduler\r\n) {\r\n const { leading = true, trailing = false } = options;\r\n\r\n return (source: Observable<T>) =>\r\n new Observable<T>((subscriber: Subscriber<T>) => {\r\n let throttling = false;\r\n let lastValue: T | undefined;\r\n let timerSub: any;\r\n\r\n const endWindow = () => {\r\n if (trailing && lastValue !== undefined) {\r\n subscriber.next(lastValue);\r\n }\r\n lastValue = undefined;\r\n throttling = false;\r\n };\r\n\r\n const sourceSub = source.subscribe({\r\n next(value) {\r\n if (!throttling) {\r\n throttling = true;\r\n\r\n if (leading) {\r\n subscriber.next(value);\r\n } else if (trailing) {\r\n lastValue = value;\r\n }\r\n\r\n timerSub = timer(duration, scheduler).subscribe(() => {\r\n endWindow();\r\n timerSub?.unsubscribe();\r\n });\r\n } else if (trailing) {\r\n lastValue = value;\r\n }\r\n },\r\n error(err) {\r\n subscriber.error(err);\r\n },\r\n complete() {\r\n if (trailing && lastValue !== undefined) {\r\n subscriber.next(lastValue);\r\n }\r\n subscriber.complete();\r\n }\r\n });\r\n\r\n return () => {\r\n sourceSub.unsubscribe();\r\n timerSub?.unsubscribe();\r\n };\r\n });\r\n}"],"names":["identity","x","pipeFromArray","fns","input","prev","fn","throttleOp","duration","options","scheduler","asyncScheduler","leading","trailing","source","Observable","subscriber","throttling","lastValue","timerSub","endWindow","sourceSub","value","timer","err"],"mappings":";AAEO,SAASA,EAAYC,GAAS;AACjC,SAAOA;AACX;AAEO,SAASC,EAAoBC,GAAsD;AACtF,SAAIA,EAAI,WAAW,IACRH,IAGPG,EAAI,WAAW,IACRA,EAAI,CAAC,IAGT,SAAeC,GAAa;AAC/B,WAAOD,EAAI,OAAO,CAACE,GAAWC,MAA4BA,EAAGD,CAAI,GAAGD,CAAY;AAAA,EACpF;AACJ;AAOO,SAASG,EACZC,GACAC,IAA2B,EAAE,SAAS,IAAM,UAAU,GAAA,GACtDC,IAA2BC,GAC7B;AACE,QAAM,EAAE,SAAAC,IAAU,IAAM,UAAAC,IAAW,OAAUJ;AAE7C,SAAO,CAACK,MACJ,IAAIC,EAAc,CAACC,MAA8B;AAC7C,QAAIC,IAAa,IACbC,GACAC;AAEJ,UAAMC,IAAY,MAAM;AACpB,MAAIP,KAAYK,MAAc,UAC1BF,EAAW,KAAKE,CAAS,GAE7BA,IAAY,QACZD,IAAa;AAAA,IACjB,GAEMI,IAAYP,EAAO,UAAU;AAAA,MAC/B,KAAKQ,GAAO;AACR,QAAKL,IAaMJ,MACPK,IAAYI,MAbZL,IAAa,IAETL,IACAI,EAAW,KAAKM,CAAK,IACdT,MACPK,IAAYI,IAGhBH,IAAWI,EAAMf,GAAUE,CAAS,EAAE,UAAU,MAAM;AAClD,UAAAU,EAAA,GACAD,GAAU,YAAA;AAAA,QACd,CAAC;AAAA,MAIT;AAAA,MACA,MAAMK,GAAK;AACP,QAAAR,EAAW,MAAMQ,CAAG;AAAA,MACxB;AAAA,MACA,WAAW;AACP,QAAIX,KAAYK,MAAc,UAC1BF,EAAW,KAAKE,CAAS,GAE7BF,EAAW,SAAA;AAAA,MACf;AAAA,IAAA,CACH;AAED,WAAO,MAAM;AACT,MAAAK,EAAU,YAAA,GACVF,GAAU,YAAA;AAAA,IACd;AAAA,EACJ,CAAC;AACT;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actdim/msgmesh",
3
- "version": "1.0.9",
3
+ "version": "1.1.1",
4
4
  "description": "A type-safe, modular message mesh for scalable async communication in TypeScript",
5
5
  "author": "Pavel Borodaev",
6
6
  "license": "Proprietary",
@@ -67,7 +67,7 @@
67
67
  "format:check": "prettier --check ."
68
68
  },
69
69
  "peerDependencies": {
70
- "@actdim/utico": "^1.0.2",
70
+ "@actdim/utico": "^1.0.4",
71
71
  "rxjs": "^7.8.2",
72
72
  "uuid": "^13.0.0"
73
73
  },