@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.
- package/dist/msgBusCore.d.ts +95 -49
- package/dist/msgBusCore.d.ts.map +1 -1
- package/dist/msgBusCore.es.js +29 -7
- package/dist/msgBusCore.es.js.map +1 -1
- package/dist/msgBusFactory.d.ts +3 -2
- package/dist/msgBusFactory.d.ts.map +1 -1
- package/dist/msgBusFactory.es.js +180 -143
- package/dist/msgBusFactory.es.js.map +1 -1
- package/dist/util.d.ts +9 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.es.js +39 -0
- package/dist/util.es.js.map +1 -0
- package/package.json +2 -2
package/dist/msgBusCore.d.ts
CHANGED
|
@@ -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
|
|
39
|
+
export type MsgStructBase = {
|
|
25
40
|
[$C_ERROR]?: {
|
|
26
41
|
[$CG_IN]: ErrorPayload;
|
|
27
42
|
};
|
|
28
43
|
};
|
|
29
|
-
export type
|
|
44
|
+
export type MsgStruct = {
|
|
30
45
|
[channel: string]: MsgChannelStruct;
|
|
31
|
-
} &
|
|
32
|
-
export type
|
|
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
|
|
36
|
-
export type OutStruct<TStruct extends
|
|
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
|
|
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
|
|
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
|
|
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
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
71
|
-
timestamp?: number;
|
|
102
|
+
publishedAt?: number;
|
|
72
103
|
priority?: number;
|
|
73
104
|
persistent?: boolean;
|
|
74
|
-
|
|
75
|
-
|
|
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
|
|
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?:
|
|
123
|
+
config?: MsgSubscriberConfig;
|
|
82
124
|
filter?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => boolean;
|
|
83
125
|
};
|
|
84
|
-
export type
|
|
85
|
-
export type
|
|
86
|
-
export type
|
|
87
|
-
|
|
88
|
-
|
|
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
|
|
92
|
-
export type
|
|
93
|
-
export type
|
|
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
|
|
103
|
-
export type
|
|
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
|
|
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
|
|
114
|
-
readonly config: MsgBusConfig<
|
|
115
|
-
readonly on:
|
|
116
|
-
readonly onceAsync:
|
|
117
|
-
readonly stream:
|
|
118
|
-
readonly provide:
|
|
119
|
-
readonly dispatch:
|
|
120
|
-
readonly dispatchAsync:
|
|
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]?:
|
|
168
|
+
readonly [$TypeArgHeaders]?: THeaders;
|
|
123
169
|
};
|
|
124
170
|
//# sourceMappingURL=msgBusCore.d.ts.map
|
package/dist/msgBusCore.d.ts.map
CHANGED
|
@@ -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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"}
|
package/dist/msgBusCore.es.js
CHANGED
|
@@ -1,10 +1,32 @@
|
|
|
1
|
-
const
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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;"}
|
package/dist/msgBusFactory.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { MsgBus,
|
|
2
|
-
export declare
|
|
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,
|
|
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"}
|
package/dist/msgBusFactory.es.js
CHANGED
|
@@ -1,179 +1,203 @@
|
|
|
1
|
-
import { $CG_IN as
|
|
2
|
-
import { v4 as
|
|
3
|
-
import { ReplaySubject as
|
|
4
|
-
import { filter as
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
if (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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 (
|
|
14
|
-
},
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
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,
|
|
33
|
-
const
|
|
34
|
-
error:
|
|
35
|
-
source:
|
|
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:
|
|
42
|
-
topic:
|
|
39
|
+
group: j,
|
|
40
|
+
topic: a
|
|
43
41
|
},
|
|
44
|
-
payload:
|
|
45
|
-
},
|
|
42
|
+
payload: n
|
|
43
|
+
}, g(o), o = {
|
|
46
44
|
address: {
|
|
47
|
-
channel:
|
|
48
|
-
group:
|
|
49
|
-
topic:
|
|
45
|
+
channel: F,
|
|
46
|
+
group: v,
|
|
47
|
+
topic: a
|
|
50
48
|
},
|
|
51
|
-
payload:
|
|
52
|
-
},
|
|
49
|
+
payload: n
|
|
50
|
+
}, g(o);
|
|
53
51
|
}
|
|
54
|
-
const
|
|
55
|
-
function
|
|
56
|
-
return `${e}${
|
|
52
|
+
const y = /* @__PURE__ */ new Map();
|
|
53
|
+
function L(e, t) {
|
|
54
|
+
return `${e}${X}${t}`;
|
|
57
55
|
}
|
|
58
|
-
function
|
|
59
|
-
const
|
|
60
|
-
if (!
|
|
56
|
+
function w(e, t) {
|
|
57
|
+
const n = L(e, t);
|
|
58
|
+
if (!y.has(n)) {
|
|
61
59
|
let o = null;
|
|
62
|
-
const r =
|
|
63
|
-
r && (r.replayBufferSize != null || r.replayWindowTime != null) && (o = new
|
|
64
|
-
|
|
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
|
|
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
|
|
71
|
-
|
|
72
|
-
|
|
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(
|
|
82
|
+
r(f.address.topic) && (!e.filter || e.filter(f))
|
|
76
83
|
)
|
|
77
84
|
);
|
|
78
|
-
let
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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(
|
|
84
|
-
} catch (
|
|
85
|
-
p(
|
|
93
|
+
return e.callback(f);
|
|
94
|
+
} catch (W) {
|
|
95
|
+
p(f, W);
|
|
86
96
|
}
|
|
87
97
|
},
|
|
88
|
-
error: (
|
|
98
|
+
error: (f) => {
|
|
89
99
|
p(
|
|
90
100
|
{
|
|
91
101
|
address: {
|
|
92
|
-
channel:
|
|
93
|
-
group:
|
|
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
|
-
|
|
107
|
+
f
|
|
101
108
|
);
|
|
102
109
|
},
|
|
103
110
|
complete: () => {
|
|
104
111
|
}
|
|
105
|
-
}),
|
|
106
|
-
|
|
107
|
-
console.
|
|
108
|
-
`Listening aborted for channel: ${
|
|
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
|
-
),
|
|
117
|
+
), h.unsubscribe();
|
|
111
118
|
});
|
|
112
119
|
}
|
|
113
|
-
function
|
|
114
|
-
e.
|
|
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 =
|
|
117
|
-
const
|
|
118
|
-
return
|
|
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
|
|
121
|
-
|
|
129
|
+
function x(e) {
|
|
130
|
+
b(e);
|
|
122
131
|
}
|
|
123
|
-
function
|
|
124
|
-
|
|
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
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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: (
|
|
137
|
-
|
|
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
|
-
|
|
141
|
-
} catch (
|
|
142
|
-
|
|
165
|
+
b(s);
|
|
166
|
+
} catch (c) {
|
|
167
|
+
r(c);
|
|
143
168
|
}
|
|
144
|
-
});
|
|
169
|
+
})]);
|
|
145
170
|
}
|
|
146
|
-
function
|
|
147
|
-
const
|
|
171
|
+
function M(e) {
|
|
172
|
+
const t = {
|
|
148
173
|
...e,
|
|
149
|
-
callback: async (
|
|
174
|
+
callback: async (n) => {
|
|
150
175
|
try {
|
|
151
176
|
const o = {
|
|
152
177
|
address: {
|
|
153
|
-
channel:
|
|
154
|
-
group:
|
|
155
|
-
topic:
|
|
178
|
+
channel: n.address.channel,
|
|
179
|
+
group: R,
|
|
180
|
+
topic: n.address.topic
|
|
156
181
|
},
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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(
|
|
189
|
+
p(n, o);
|
|
166
190
|
}
|
|
167
191
|
}
|
|
168
192
|
};
|
|
169
|
-
|
|
193
|
+
b(t);
|
|
170
194
|
}
|
|
171
|
-
function
|
|
172
|
-
const
|
|
195
|
+
function C(e) {
|
|
196
|
+
const t = $();
|
|
173
197
|
if (e.callback) {
|
|
174
198
|
const o = {
|
|
175
199
|
channel: e.channel,
|
|
176
|
-
group:
|
|
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 ===
|
|
209
|
+
filter: (r) => r.headers?.requestId === t && (!e.filter || e.filter(r))
|
|
186
210
|
};
|
|
187
|
-
|
|
211
|
+
b(o);
|
|
188
212
|
}
|
|
189
|
-
let
|
|
213
|
+
let n;
|
|
190
214
|
e.payloadFn ? e.payloadFn((o) => {
|
|
191
|
-
|
|
192
|
-
}) :
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
id: n,
|
|
203
|
-
headers: e.headers
|
|
223
|
+
headers: {
|
|
224
|
+
...e.headers
|
|
225
|
+
},
|
|
226
|
+
payload: n
|
|
204
227
|
});
|
|
205
228
|
}
|
|
206
|
-
async function
|
|
207
|
-
|
|
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
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
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: (
|
|
247
|
+
callback: (i) => {
|
|
216
248
|
try {
|
|
217
|
-
n
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
|
|
224
|
-
} catch (
|
|
225
|
-
|
|
259
|
+
C(s);
|
|
260
|
+
} catch (c) {
|
|
261
|
+
r(c);
|
|
226
262
|
}
|
|
227
|
-
});
|
|
263
|
+
})]);
|
|
228
264
|
}
|
|
229
265
|
return {
|
|
230
|
-
config:
|
|
231
|
-
on: (e) =>
|
|
232
|
-
onceAsync: (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) =>
|
|
237
|
-
dispatch: (e) =>
|
|
238
|
-
dispatchAsync: (e) =>
|
|
272
|
+
provide: (e) => M(e),
|
|
273
|
+
dispatch: (e) => C(e),
|
|
274
|
+
dispatchAsync: (e) => _(e)
|
|
239
275
|
};
|
|
240
276
|
}
|
|
241
277
|
export {
|
|
242
|
-
|
|
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"}
|
package/dist/util.es.js
ADDED
|
@@ -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.
|
|
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.
|
|
70
|
+
"@actdim/utico": "^1.0.4",
|
|
71
71
|
"rxjs": "^7.8.2",
|
|
72
72
|
"uuid": "^13.0.0"
|
|
73
73
|
},
|