@actdim/msgmesh 0.9.1 → 0.9.3
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/msgBusFactory.es.js +69 -72
- package/dist/msgBusFactory.es.js.map +1 -1
- package/package.json +40 -19
package/dist/msgBusFactory.es.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { $
|
|
2
|
-
import { v4 as
|
|
3
|
-
import { Subject as
|
|
4
|
-
import { filter as
|
|
5
|
-
const
|
|
1
|
+
import { $CG_IN as g, $CG_ERROR as S, $C_ERROR as O, $CG_OUT as v } from "./msgBusCore.es.js";
|
|
2
|
+
import { v4 as w } from "uuid";
|
|
3
|
+
import { Subject as q } from "rxjs";
|
|
4
|
+
import { filter as A, take as L } from "rxjs/operators";
|
|
5
|
+
const M = (r) => {
|
|
6
6
|
if (r == null)
|
|
7
7
|
return (i) => i == r;
|
|
8
8
|
if (r.startsWith("/") && r.endsWith("/")) {
|
|
9
9
|
r = r.substring(1, r.length - 1);
|
|
10
10
|
const i = new RegExp(r);
|
|
11
|
-
return (
|
|
11
|
+
return (d) => i.test(d);
|
|
12
12
|
} else
|
|
13
13
|
return (i) => r === i;
|
|
14
|
-
},
|
|
15
|
-
function
|
|
14
|
+
}, _ = ":";
|
|
15
|
+
function K(r) {
|
|
16
16
|
const i = "msgbus";
|
|
17
|
-
function
|
|
17
|
+
function d() {
|
|
18
18
|
return Date.now();
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function C(e) {
|
|
21
21
|
return {
|
|
22
22
|
address: e.address,
|
|
23
23
|
requestId: e.requestId,
|
|
@@ -28,57 +28,56 @@ function W(r) {
|
|
|
28
28
|
persistent: e.persistent
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
-
function
|
|
31
|
+
function f(e, n) {
|
|
32
32
|
const t = {
|
|
33
33
|
error: n,
|
|
34
|
-
source:
|
|
34
|
+
source: C(e)
|
|
35
35
|
};
|
|
36
36
|
let o;
|
|
37
37
|
o = {
|
|
38
38
|
address: {
|
|
39
39
|
channel: e.address.channel,
|
|
40
|
-
group:
|
|
40
|
+
group: S,
|
|
41
41
|
topic: i
|
|
42
42
|
},
|
|
43
43
|
payload: t
|
|
44
|
-
},
|
|
44
|
+
}, l(o), o = {
|
|
45
45
|
address: {
|
|
46
|
-
channel:
|
|
46
|
+
channel: O,
|
|
47
47
|
group: g,
|
|
48
48
|
topic: i
|
|
49
49
|
},
|
|
50
50
|
payload: t
|
|
51
|
-
},
|
|
51
|
+
}, l(o);
|
|
52
52
|
}
|
|
53
|
-
const
|
|
54
|
-
function
|
|
55
|
-
return `${e}${
|
|
53
|
+
const h = /* @__PURE__ */ new Map();
|
|
54
|
+
function $(e, n) {
|
|
55
|
+
return `${e}${_}${n}`;
|
|
56
56
|
}
|
|
57
57
|
function b(e, n) {
|
|
58
|
-
const t =
|
|
59
|
-
return
|
|
58
|
+
const t = $(e, n);
|
|
59
|
+
return h.has(t) || h.set(t, new q()), h.get(t);
|
|
60
60
|
}
|
|
61
|
-
function
|
|
62
|
-
|
|
63
|
-
const n = String(e.channel), t = e.group == null ? g : String(e.group), o = b(n, t), c = j(e.topic), d = M(
|
|
61
|
+
function u(e) {
|
|
62
|
+
const n = String(e.channel), t = e.group == null ? g : String(e.group), o = b(n, t), c = M(e.topic), a = A(
|
|
64
63
|
(s) => (
|
|
65
64
|
// msg.address.channel === channel &&
|
|
66
65
|
// msg.address.group === group &&
|
|
67
66
|
c(s.address.topic) && (!e.filter || e.filter(s))
|
|
68
67
|
)
|
|
69
68
|
);
|
|
70
|
-
let
|
|
71
|
-
|
|
72
|
-
const
|
|
69
|
+
let p;
|
|
70
|
+
e.config?.fetchCount ? p = o.pipe(a, L(e.config.fetchCount)) : p = o.pipe(a);
|
|
71
|
+
const I = p.subscribe({
|
|
73
72
|
next: (s) => {
|
|
74
73
|
try {
|
|
75
74
|
return e.callback(s);
|
|
76
|
-
} catch (
|
|
77
|
-
|
|
75
|
+
} catch (x) {
|
|
76
|
+
f(s, x);
|
|
78
77
|
}
|
|
79
78
|
},
|
|
80
79
|
error: (s) => {
|
|
81
|
-
|
|
80
|
+
f(
|
|
82
81
|
{
|
|
83
82
|
address: {
|
|
84
83
|
channel: n,
|
|
@@ -87,7 +86,7 @@ function W(r) {
|
|
|
87
86
|
},
|
|
88
87
|
id: void 0,
|
|
89
88
|
// not a real message
|
|
90
|
-
timestamp:
|
|
89
|
+
timestamp: d()
|
|
91
90
|
},
|
|
92
91
|
s
|
|
93
92
|
);
|
|
@@ -95,51 +94,50 @@ function W(r) {
|
|
|
95
94
|
complete: () => {
|
|
96
95
|
}
|
|
97
96
|
});
|
|
98
|
-
|
|
97
|
+
e.signal?.addEventListener("abort", () => {
|
|
99
98
|
console.log(
|
|
100
99
|
`Listening aborted for channel: ${n}, group: ${t}, topic: ${e.topic}. Reason: ${e.signal.reason}`
|
|
101
|
-
),
|
|
100
|
+
), I.unsubscribe();
|
|
102
101
|
});
|
|
103
102
|
}
|
|
104
|
-
function
|
|
103
|
+
function l(e) {
|
|
105
104
|
const n = {
|
|
106
105
|
...e,
|
|
107
|
-
id:
|
|
108
|
-
timestamp:
|
|
106
|
+
id: w(),
|
|
107
|
+
timestamp: d()
|
|
109
108
|
};
|
|
110
|
-
n.traceId == null && (n.traceId =
|
|
109
|
+
n.traceId == null && (n.traceId = w());
|
|
111
110
|
const t = String(n.address.channel);
|
|
112
111
|
n.address.group == null && (n.address.group = g);
|
|
113
112
|
const o = String(n.address.group);
|
|
114
113
|
return b(t, o).next(n), n;
|
|
115
114
|
}
|
|
116
|
-
function
|
|
117
|
-
|
|
115
|
+
function E(e) {
|
|
116
|
+
u(e);
|
|
118
117
|
}
|
|
119
|
-
function
|
|
118
|
+
function k(e) {
|
|
120
119
|
return new Promise((n, t) => {
|
|
121
|
-
var o;
|
|
122
120
|
try {
|
|
123
|
-
|
|
121
|
+
e.signal?.addEventListener("abort", () => {
|
|
124
122
|
t(new Error("Cancelled", { cause: e.signal.reason }));
|
|
125
123
|
});
|
|
126
|
-
const
|
|
124
|
+
const o = {
|
|
127
125
|
...e,
|
|
128
126
|
config: {
|
|
129
127
|
...e.config,
|
|
130
128
|
fetchCount: 1
|
|
131
129
|
},
|
|
132
|
-
callback: (
|
|
133
|
-
n(
|
|
130
|
+
callback: (c) => {
|
|
131
|
+
n(c);
|
|
134
132
|
}
|
|
135
133
|
};
|
|
136
|
-
|
|
137
|
-
} catch (
|
|
138
|
-
t(
|
|
134
|
+
u(o);
|
|
135
|
+
} catch (o) {
|
|
136
|
+
t(o);
|
|
139
137
|
}
|
|
140
138
|
});
|
|
141
139
|
}
|
|
142
|
-
function
|
|
140
|
+
function P(e) {
|
|
143
141
|
const n = {
|
|
144
142
|
...e,
|
|
145
143
|
callback: async (t) => {
|
|
@@ -147,7 +145,7 @@ function W(r) {
|
|
|
147
145
|
const o = {
|
|
148
146
|
address: {
|
|
149
147
|
channel: t.address.channel,
|
|
150
|
-
group:
|
|
148
|
+
group: v,
|
|
151
149
|
topic: t.address.topic
|
|
152
150
|
},
|
|
153
151
|
traceId: t.traceId,
|
|
@@ -155,20 +153,20 @@ function W(r) {
|
|
|
155
153
|
persistent: t.persistent,
|
|
156
154
|
priority: t.priority
|
|
157
155
|
}, c = await Promise.resolve(e.callback(t));
|
|
158
|
-
o.payload = c,
|
|
156
|
+
o.payload = c, l(o);
|
|
159
157
|
} catch (o) {
|
|
160
|
-
|
|
158
|
+
f(t, o);
|
|
161
159
|
}
|
|
162
160
|
}
|
|
163
161
|
};
|
|
164
|
-
|
|
162
|
+
u(n);
|
|
165
163
|
}
|
|
166
164
|
function y(e) {
|
|
167
165
|
let n;
|
|
168
166
|
if (e.callback) {
|
|
169
167
|
const o = {
|
|
170
168
|
channel: e.channel,
|
|
171
|
-
group:
|
|
169
|
+
group: v,
|
|
172
170
|
topic: e.topic,
|
|
173
171
|
config: {
|
|
174
172
|
...e.config,
|
|
@@ -180,12 +178,12 @@ function W(r) {
|
|
|
180
178
|
filter: (c) => c.requestId === n.id && (!e.filter || e.filter(c))
|
|
181
179
|
// TODO: match topic?
|
|
182
180
|
};
|
|
183
|
-
|
|
181
|
+
u(o);
|
|
184
182
|
}
|
|
185
183
|
let t;
|
|
186
184
|
e.payloadFn ? e.payloadFn((o) => {
|
|
187
185
|
t = o;
|
|
188
|
-
}) : t = e.payload, n =
|
|
186
|
+
}) : t = e.payload, n = l({
|
|
189
187
|
address: {
|
|
190
188
|
channel: e.channel,
|
|
191
189
|
group: e.group,
|
|
@@ -197,42 +195,41 @@ function W(r) {
|
|
|
197
195
|
priority: e.priority
|
|
198
196
|
});
|
|
199
197
|
}
|
|
200
|
-
async function
|
|
198
|
+
async function R(e) {
|
|
201
199
|
return new Promise((n, t) => {
|
|
202
|
-
var o;
|
|
203
200
|
try {
|
|
204
|
-
|
|
201
|
+
e.signal?.addEventListener("abort", () => {
|
|
205
202
|
t(new Error("Cancelled", { cause: e.signal.reason }));
|
|
206
203
|
});
|
|
207
|
-
const
|
|
204
|
+
const o = {
|
|
208
205
|
...e,
|
|
209
|
-
callback: (
|
|
206
|
+
callback: (c) => {
|
|
210
207
|
try {
|
|
211
|
-
n(
|
|
212
|
-
} catch (
|
|
213
|
-
t(
|
|
208
|
+
n(c);
|
|
209
|
+
} catch (a) {
|
|
210
|
+
t(a);
|
|
214
211
|
}
|
|
215
212
|
}
|
|
216
213
|
};
|
|
217
|
-
y(
|
|
218
|
-
} catch (
|
|
219
|
-
t(
|
|
214
|
+
y(o);
|
|
215
|
+
} catch (o) {
|
|
216
|
+
t(o);
|
|
220
217
|
}
|
|
221
218
|
});
|
|
222
219
|
}
|
|
223
220
|
return {
|
|
224
221
|
config: r,
|
|
225
|
-
on: (e) =>
|
|
226
|
-
onceAsync: (e) =>
|
|
222
|
+
on: (e) => E(e),
|
|
223
|
+
onceAsync: (e) => k(e),
|
|
227
224
|
stream: (e) => {
|
|
228
225
|
throw new Error("Not implemented");
|
|
229
226
|
},
|
|
230
|
-
provide: (e) =>
|
|
227
|
+
provide: (e) => P(e),
|
|
231
228
|
dispatch: (e) => y(e),
|
|
232
|
-
dispatchAsync: (e) =>
|
|
229
|
+
dispatchAsync: (e) => R(e)
|
|
233
230
|
};
|
|
234
231
|
}
|
|
235
232
|
export {
|
|
236
|
-
|
|
233
|
+
K as createMsgBus
|
|
237
234
|
};
|
|
238
235
|
//# 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 MsgBusStructBase,\r\n $C_ERROR\r\n} from \"./msgBusCore\";\r\nimport { v4 as uuid } from \"uuid\";\r\nimport { MonoTypeOperatorFunction, Observable, Subject, Subscription } from \"rxjs\";\r\nimport { 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 & MsgBusStructBase>(config?: MsgBusConfig<MsgBusStructNormalized<TStruct>>) {\r\n type TStructN = MsgBusStructNormalized<TStruct>;\r\n type MsgSrcData = Skip<Msg<TStructN>, \"id\" | \"timestamp\">;\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 } 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 MsgSrcData[\"payload\"];\r\n let errMsg: MsgSrcData;\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, ReplaySubject, AsyncSubject\r\n if (!subjects.has(routingKey)) {\r\n subjects.set(routingKey, new Subject<Msg<TStructN>>());\r\n }\r\n return subjects.get(routingKey) as Subject<Msg<TStructN>>;\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 params.signal?.addEventListener(\"abort\", () => {\r\n // TODO: publish debug (internal) message\r\n console.log(\r\n `Listening aborted for channel: ${channel}, group: ${group}, topic: ${params.topic}. Reason: ${params.signal.reason}`\r\n );\r\n sub.unsubscribe();\r\n });\r\n }\r\n\r\n function publish(msgData: MsgSrcData) {\r\n const msg: Msg<TStructN, any, any> = {\r\n ...msgData,\r\n id: uuid(),\r\n timestamp: now()\r\n };\r\n // !msg.traceId\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 params.signal?.addEventListener(\"abort\", () => {\r\n rej(new Error(\"Cancelled\", { cause: params.signal.reason }));\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: MsgSrcData = {\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 };\r\n const payload = (await Promise.resolve(params.callback(msgIn))) as MsgSrcData[\"payload\"];\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 let msgIn: Msg<TStructN>;\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) => msgOut.requestId === msgIn.id && (!params.filter || params.filter(msgOut)) // TODO: match topic?\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 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 });\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 params.signal?.addEventListener(\"abort\", () => {\r\n rej(new Error(\"Cancelled\", { cause: params.signal.reason }));\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> = {\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 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","subscribe","params","subject","match","fOp","filterOp","observable","_a","takeOp","sub","_b","msgData","uuid","on","onceAsync","res","rej","subParams","e","provide","msgIn","msgOut","$CG_OUT","payload","dispatch","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 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 MsgBusStructBase,\r\n $C_ERROR\r\n} from \"./msgBusCore\";\r\nimport { v4 as uuid } from \"uuid\";\r\nimport { MonoTypeOperatorFunction, Observable, Subject, Subscription } from \"rxjs\";\r\nimport { 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 & MsgBusStructBase>(config?: MsgBusConfig<MsgBusStructNormalized<TStruct>>) {\r\n type TStructN = MsgBusStructNormalized<TStruct>;\r\n type MsgSrcData = Skip<Msg<TStructN>, \"id\" | \"timestamp\">;\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 } 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 MsgSrcData[\"payload\"];\r\n let errMsg: MsgSrcData;\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, ReplaySubject, AsyncSubject\r\n if (!subjects.has(routingKey)) {\r\n subjects.set(routingKey, new Subject<Msg<TStructN>>());\r\n }\r\n return subjects.get(routingKey) as Subject<Msg<TStructN>>;\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 params.signal?.addEventListener(\"abort\", () => {\r\n // TODO: publish debug (internal) message\r\n console.log(\r\n `Listening aborted for channel: ${channel}, group: ${group}, topic: ${params.topic}. Reason: ${params.signal.reason}`\r\n );\r\n sub.unsubscribe();\r\n });\r\n }\r\n\r\n function publish(msgData: MsgSrcData) {\r\n const msg: Msg<TStructN, any, any> = {\r\n ...msgData,\r\n id: uuid(),\r\n timestamp: now()\r\n };\r\n // !msg.traceId\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 params.signal?.addEventListener(\"abort\", () => {\r\n rej(new Error(\"Cancelled\", { cause: params.signal.reason }));\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: MsgSrcData = {\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 };\r\n const payload = (await Promise.resolve(params.callback(msgIn))) as MsgSrcData[\"payload\"];\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 let msgIn: Msg<TStructN>;\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) => msgOut.requestId === msgIn.id && (!params.filter || params.filter(msgOut)) // TODO: match topic?\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 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 });\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 params.signal?.addEventListener(\"abort\", () => {\r\n rej(new Error(\"Cancelled\", { cause: params.signal.reason }));\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> = {\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 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","subscribe","params","subject","match","fOp","filterOp","observable","takeOp","sub","msgData","uuid","on","onceAsync","res","rej","subParams","e","provide","msgIn","msgOut","$CG_OUT","payload","dispatch","args","dispatchAsync","dispatchParams"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actdim/msgmesh",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"description": "A type-safe, modular message mesh for scalable async communication in TypeScript",
|
|
5
5
|
"author": "Pavel Borodaev",
|
|
6
6
|
"license": "Proprietary",
|
|
@@ -50,31 +50,52 @@
|
|
|
50
50
|
"sideEffects": false,
|
|
51
51
|
"sideEffects?": [],
|
|
52
52
|
"scripts": {
|
|
53
|
-
"build": "tsc && vite build",
|
|
54
53
|
"test": "npx vitest",
|
|
55
54
|
"wtest": "npx vitest --watch",
|
|
56
55
|
"dtest": "node --inspect-brk node_modules/vitest/vitest.mjs run --poolOptions.threads.singleThread",
|
|
57
|
-
"lint": "eslint . --ext ts
|
|
56
|
+
"lint": "eslint . -f visualstudio --ext .ts,.tsx --report-unused-disable-directives --max-warnings 0",
|
|
57
|
+
"online": "vite --host",
|
|
58
|
+
"build": "tsc -b && vite build",
|
|
59
|
+
"npm:u": "npm update",
|
|
60
|
+
"npm:ou": "npm outdated",
|
|
61
|
+
"ncu": "ncu",
|
|
62
|
+
"ncu:u": "ncu -u",
|
|
63
|
+
"ncu:ud": "ncu -u --dev",
|
|
64
|
+
"nvm:la": "nvm list available",
|
|
65
|
+
"nvm:il": "nvm install lts"
|
|
58
66
|
},
|
|
59
67
|
"peerDependencies": {
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
68
|
+
"@actdim/utico": "^0.9.3",
|
|
69
|
+
"rxjs": "^7.8.2",
|
|
70
|
+
"uuid": "^13.0.0"
|
|
63
71
|
},
|
|
64
72
|
"devDependencies": {
|
|
65
|
-
"@
|
|
66
|
-
"@types/
|
|
67
|
-
"@
|
|
68
|
-
"@
|
|
69
|
-
"@
|
|
70
|
-
"eslint": "^8.
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
73
|
+
"@swc/core": "^1.13.5",
|
|
74
|
+
"@types/lodash": "^4.17.20",
|
|
75
|
+
"@types/node": "^24.7.0",
|
|
76
|
+
"@types/uuid": "^11.0.0",
|
|
77
|
+
"@typescript-eslint/eslint-plugin": "^8.45.0",
|
|
78
|
+
"@typescript-eslint/parser": "^8.45.0",
|
|
79
|
+
"@vitejs/plugin-react-swc": "^4.1.0",
|
|
80
|
+
"eslint": "^9.37.0",
|
|
81
|
+
"eslint-config-prettier": "^10.1.8",
|
|
82
|
+
"eslint-formatter-visualstudio": "^8.40.0",
|
|
83
|
+
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
84
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
85
|
+
"eslint-plugin-react": "^7.37.5",
|
|
86
|
+
"eslint-plugin-react-hooks": "^6.1.1",
|
|
87
|
+
"eslint-plugin-react-refresh": "^0.4.23",
|
|
88
|
+
"globals": "^16.4.0",
|
|
89
|
+
"npm-check-updates": "^19.0.0",
|
|
90
|
+
"prettier": "^3.6.2",
|
|
91
|
+
"prettier-plugin-classnames": "^0.8.4",
|
|
92
|
+
"shx": "^0.4.0",
|
|
93
|
+
"ts-node": "^10.9.2",
|
|
94
|
+
"typescript": "^5.9.3",
|
|
95
|
+
"typescript-eslint": "^8.45.0",
|
|
96
|
+
"vite": "^7.1.9",
|
|
97
|
+
"vite-plugin-dts": "^4.5.4",
|
|
77
98
|
"vite-tsconfig-paths": "^5.1.4",
|
|
78
|
-
"vitest": "^3.
|
|
99
|
+
"vitest": "^3.2.4"
|
|
79
100
|
}
|
|
80
101
|
}
|