@actdim/msgmesh 0.9.0 → 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.
@@ -1,23 +1,23 @@
1
- import { $CG_OUT as C, $CG_ERROR as q, $CG_IN as g, $C_ERROR as A } from "./msgBusCore.es.js";
2
- import { v4 as $ } from "uuid";
3
- import { Subject as L } from "rxjs";
4
- import { filter as M, take as _ } from "rxjs/operators";
5
- const j = (r) => {
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 (l) => i.test(l);
11
+ return (d) => i.test(d);
12
12
  } else
13
13
  return (i) => r === i;
14
- }, B = ":";
15
- function W(r) {
14
+ }, _ = ":";
15
+ function K(r) {
16
16
  const i = "msgbus";
17
- function l() {
17
+ function d() {
18
18
  return Date.now();
19
19
  }
20
- function E(e) {
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 h(e, n) {
31
+ function f(e, n) {
32
32
  const t = {
33
33
  error: n,
34
- source: E(e)
34
+ source: C(e)
35
35
  };
36
36
  let o;
37
37
  o = {
38
38
  address: {
39
39
  channel: e.address.channel,
40
- group: q,
40
+ group: S,
41
41
  topic: i
42
42
  },
43
43
  payload: t
44
- }, f(o), o = {
44
+ }, l(o), o = {
45
45
  address: {
46
- channel: A,
46
+ channel: O,
47
47
  group: g,
48
48
  topic: i
49
49
  },
50
50
  payload: t
51
- }, f(o);
51
+ }, l(o);
52
52
  }
53
- const p = /* @__PURE__ */ new Map();
54
- function k(e, n) {
55
- return `${e}${B}${n}`;
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 = k(e, n);
59
- return p.has(t) || p.set(t, new L()), p.get(t);
58
+ const t = $(e, n);
59
+ return h.has(t) || h.set(t, new q()), h.get(t);
60
60
  }
61
- function a(e) {
62
- var v, w;
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 u;
71
- (v = e.config) != null && v.fetchCount ? u = o.pipe(d, _(e.config.fetchCount)) : u = o.pipe(d);
72
- const S = u.subscribe({
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 (O) {
77
- h(s, O);
75
+ } catch (x) {
76
+ f(s, x);
78
77
  }
79
78
  },
80
79
  error: (s) => {
81
- h(
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: l()
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
- (w = e.signal) == null || w.addEventListener("abort", () => {
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
- ), S.unsubscribe();
100
+ ), I.unsubscribe();
102
101
  });
103
102
  }
104
- function f(e) {
103
+ function l(e) {
105
104
  const n = {
106
105
  ...e,
107
- id: $(),
108
- timestamp: l()
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 P(e) {
117
- a(e);
115
+ function E(e) {
116
+ u(e);
118
117
  }
119
- function R(e) {
118
+ function k(e) {
120
119
  return new Promise((n, t) => {
121
- var o;
122
120
  try {
123
- (o = e.signal) == null || o.addEventListener("abort", () => {
121
+ e.signal?.addEventListener("abort", () => {
124
122
  t(new Error("Cancelled", { cause: e.signal.reason }));
125
123
  });
126
- const c = {
124
+ const o = {
127
125
  ...e,
128
126
  config: {
129
127
  ...e.config,
130
128
  fetchCount: 1
131
129
  },
132
- callback: (d) => {
133
- n(d);
130
+ callback: (c) => {
131
+ n(c);
134
132
  }
135
133
  };
136
- a(c);
137
- } catch (c) {
138
- t(c);
134
+ u(o);
135
+ } catch (o) {
136
+ t(o);
139
137
  }
140
138
  });
141
139
  }
142
- function I(e) {
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: C,
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, f(o);
156
+ o.payload = c, l(o);
159
157
  } catch (o) {
160
- h(t, o);
158
+ f(t, o);
161
159
  }
162
160
  }
163
161
  };
164
- a(n);
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: C,
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
- a(o);
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 = f({
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 x(e) {
198
+ async function R(e) {
201
199
  return new Promise((n, t) => {
202
- var o;
203
200
  try {
204
- (o = e.signal) == null || o.addEventListener("abort", () => {
201
+ e.signal?.addEventListener("abort", () => {
205
202
  t(new Error("Cancelled", { cause: e.signal.reason }));
206
203
  });
207
- const c = {
204
+ const o = {
208
205
  ...e,
209
- callback: (d) => {
206
+ callback: (c) => {
210
207
  try {
211
- n(d);
212
- } catch (u) {
213
- t(u);
208
+ n(c);
209
+ } catch (a) {
210
+ t(a);
214
211
  }
215
212
  }
216
213
  };
217
- y(c);
218
- } catch (c) {
219
- t(c);
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) => P(e),
226
- onceAsync: (e) => R(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) => I(e),
227
+ provide: (e) => P(e),
231
228
  dispatch: (e) => y(e),
232
- dispatchAsync: (e) => x(e)
229
+ dispatchAsync: (e) => R(e)
233
230
  };
234
231
  }
235
232
  export {
236
- W as createMsgBus
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,7 +1,7 @@
1
1
  {
2
2
  "name": "@actdim/msgmesh",
3
- "version": "0.9.0",
4
- "description": "@actdim/msgmesh",
3
+ "version": "0.9.3",
4
+ "description": "A type-safe, modular message mesh for scalable async communication in TypeScript",
5
5
  "author": "Pavel Borodaev",
6
6
  "license": "Proprietary",
7
7
  "type": "module",
@@ -20,8 +20,7 @@
20
20
  "messaging",
21
21
  "utility",
22
22
  "utils",
23
- "IOC",
24
- "DI"
23
+ "communication"
25
24
  ],
26
25
  "files": [
27
26
  "dist",
@@ -51,33 +50,52 @@
51
50
  "sideEffects": false,
52
51
  "sideEffects?": [],
53
52
  "scripts": {
54
- "build": "tsc && vite build",
55
53
  "test": "npx vitest",
56
54
  "wtest": "npx vitest --watch",
57
55
  "dtest": "node --inspect-brk node_modules/vitest/vitest.mjs run --poolOptions.threads.singleThread",
58
- "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0"
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"
59
66
  },
60
67
  "peerDependencies": {
61
- "rxjs": "^7.8.1",
62
- "uuid": "^9.0.1"
68
+ "@actdim/utico": "^0.9.3",
69
+ "rxjs": "^7.8.2",
70
+ "uuid": "^13.0.0"
63
71
  },
64
72
  "devDependencies": {
65
- "@types/node": "^20.11.30",
66
- "@types/uuid": "^9.0.7",
67
- "@typescript-eslint/eslint-plugin": "^6.10.0",
68
- "@typescript-eslint/parser": "^6.10.0",
69
- "@vitejs/plugin-react-swc": "^3.5.0",
70
- "eslint": "^8.53.0",
71
- "eslint-import-resolver-typescript": "^4.3.4",
72
- "path": "^0.12.7",
73
- "tslib": "^2.8.1",
74
- "typescript": "^5.8.3",
75
- "vite": "^5.4.18",
76
- "vite-plugin-dts": "^4.5.3",
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.1.2"
79
- },
80
- "dependencies": {
81
- "@actdim/utico": "^0.9.0"
99
+ "vitest": "^3.2.4"
82
100
  }
83
101
  }