@actdim/msgmesh 1.2.4 → 1.2.6
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/README.md +815 -1
- package/dist/contracts.d.ts +1 -1
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.es.js +13 -12
- package/dist/contracts.es.js.map +1 -1
- package/dist/core.d.ts.map +1 -1
- package/dist/core.es.js +34 -34
- package/dist/core.es.js.map +1 -1
- package/dist/util.es.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1 +1,815 @@
|
|
|
1
|
-
# @actdim/msgmesh
|
|
1
|
+
# @actdim/msgmesh - A type-safe, modular message mesh for scalable async communication in TypeScript
|
|
2
|
+
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
Try @actdim/msgmesh instantly in your browser without any installation:
|
|
6
|
+
|
|
7
|
+
[](https://stackblitz.com/~/github.com/actdim/msgmesh)
|
|
8
|
+
|
|
9
|
+
Once the project loads, run the tests to see the message bus in action:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm run test
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
### The Challenge
|
|
18
|
+
|
|
19
|
+
Modern client-side TypeScript applications require robust event handling mechanisms. Events may be needed within a single component or for communication between components, serving as a decoupling layer independent of component hierarchy. As applications grow in complexity and scale, the convenience, performance, and flexibility of the event system become critical factors. A well-designed messaging system enables extensibility, maintainability, and scalability without losing control over component interactions or system observability. Such a system becomes one of the pillars of high-quality application architecture.
|
|
20
|
+
|
|
21
|
+
In our case, this message bus serves as the foundation of the @actdim/dynstruct architectural framework.
|
|
22
|
+
|
|
23
|
+
### Analysis of Existing Solutions
|
|
24
|
+
|
|
25
|
+
When examining popular messaging systems in the frontend ecosystem, particularly for React-based applications, several categories emerge:
|
|
26
|
+
|
|
27
|
+
#### Event Emitters
|
|
28
|
+
|
|
29
|
+
- **Pros**: Simple to understand, typically local in scope
|
|
30
|
+
- **Cons**:
|
|
31
|
+
- Limited capabilities and scalability
|
|
32
|
+
- Weak support for interaction structures and declarative approaches
|
|
33
|
+
- Poor type safety (fictitious typing, manual implementation required)
|
|
34
|
+
- Incomplete Promise integration
|
|
35
|
+
- Lack of abstraction levels
|
|
36
|
+
|
|
37
|
+
#### Message Buses
|
|
38
|
+
|
|
39
|
+
- **Pros**: Reduce component coupling, beneficial for development and testing
|
|
40
|
+
- **Cons**:
|
|
41
|
+
- Underdeveloped type system despite TypeScript's power
|
|
42
|
+
- Often feel like academic experiments porting backend message buses to frontend
|
|
43
|
+
- Poor integration with common development patterns (limited adapters for rate limiting, throttling, debouncing, retry logic)
|
|
44
|
+
- More complex to maintain
|
|
45
|
+
|
|
46
|
+
#### Reactive Event Streams & Observer Pattern
|
|
47
|
+
|
|
48
|
+
- **Pros**: Powerful for compositions and complex data flows
|
|
49
|
+
- **Cons**:
|
|
50
|
+
- Complex to understand, maintain, and debug
|
|
51
|
+
- Strong architectural influence requiring paradigm shift (similar to procedural-to-functional programming transition)
|
|
52
|
+
- Often tightly embedded throughout the system as an integral part
|
|
53
|
+
- Creates hard dependencies across types, code style, tests, DI, error handling, and even team thinking
|
|
54
|
+
- Essentially becomes the "language" of the application
|
|
55
|
+
|
|
56
|
+
#### React State Management Systems
|
|
57
|
+
|
|
58
|
+
- **Pros**: Purpose-built for React ecosystem
|
|
59
|
+
- **Cons**:
|
|
60
|
+
- Tight coupling with React (hooks, lifecycle), making usage outside components difficult
|
|
61
|
+
- Significant boilerplate code slowing development and complicating maintenance
|
|
62
|
+
- Often enforce immutability paradigm, which looks elegant on paper but creates more problems and wrapper code than value in practice
|
|
63
|
+
- Rarely provide configuration for event/stream connections (possibly due to weak or inconvenient payload typing)
|
|
64
|
+
|
|
65
|
+
### The Solution: @actdim/msgmesh
|
|
66
|
+
|
|
67
|
+
@actdim/msgmesh addresses these shortcomings by providing a message bus that is:
|
|
68
|
+
|
|
69
|
+
- **Flexible and extensible**: Adapts to various use cases without imposing rigid patterns
|
|
70
|
+
- **Scalable**: Grows with your application without losing manageability
|
|
71
|
+
- **Minimally opinionated**: Doesn't force a specific paradigm
|
|
72
|
+
- **Simple to understand**: Clear mental model and API
|
|
73
|
+
- **Local in impact**: Doesn't permeate every aspect of your codebase
|
|
74
|
+
|
|
75
|
+
### Key Design Goals
|
|
76
|
+
|
|
77
|
+
#### Observability
|
|
78
|
+
|
|
79
|
+
- Comprehensive logging and tracing capabilities
|
|
80
|
+
- Ability to subscribe to any event at any time
|
|
81
|
+
- Minimal system complexity and coupling
|
|
82
|
+
- Maintained control and visibility
|
|
83
|
+
|
|
84
|
+
#### Lifecycle Management
|
|
85
|
+
|
|
86
|
+
- Convenient subscription and unsubscription with various configuration options
|
|
87
|
+
- Automatic cleanup
|
|
88
|
+
- Integration with React lifecycle (when needed)
|
|
89
|
+
- Support for AbortSignal and AbortController patterns
|
|
90
|
+
|
|
91
|
+
## Architecture
|
|
92
|
+
|
|
93
|
+
### Message Structure
|
|
94
|
+
|
|
95
|
+
The message bus is defined by a type structure consisting of three levels:
|
|
96
|
+
|
|
97
|
+
#### 1. Channels
|
|
98
|
+
|
|
99
|
+
Channels organize messages by task class, domain, event type, or any other logical grouping. Channels use string identifiers with dot notation recommended for namespacing.
|
|
100
|
+
|
|
101
|
+
**Reserved System Channel**: `MSGBUS.ERROR` - for system-level errors
|
|
102
|
+
|
|
103
|
+
#### 2. Groups
|
|
104
|
+
|
|
105
|
+
Groups connect related messages within a single channel. Standard groups include:
|
|
106
|
+
|
|
107
|
+
- **`in`**: For requests or arbitrary messages/events (default for most operations)
|
|
108
|
+
- **`out`**: For responses to requests
|
|
109
|
+
- **`error`**: Reserved system group for channel-specific errors
|
|
110
|
+
|
|
111
|
+
You can define custom groups for message multiplexing and input type overloading.
|
|
112
|
+
|
|
113
|
+
#### 3. Message Types
|
|
114
|
+
|
|
115
|
+
Each group defines a message structure (payload type). For standard buses, types can be any valid TypeScript type. For persistent message buses (work in progress), types must be serializable.
|
|
116
|
+
|
|
117
|
+
**Note**: You don't need to wrap `out` types in `Promise` - async handling is automatically supported at the API level.
|
|
118
|
+
|
|
119
|
+
### Type Definition Example
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
import { RequireExtends, MsgStruct } from '@actdim/msgmesh';
|
|
123
|
+
|
|
124
|
+
export type MyBusStruct = RequireExtends<
|
|
125
|
+
{
|
|
126
|
+
'Test.ComputeSum': {
|
|
127
|
+
in: { a: number; b: number };
|
|
128
|
+
out: number;
|
|
129
|
+
};
|
|
130
|
+
'Test.DoSomeWork': {
|
|
131
|
+
in: string;
|
|
132
|
+
out: void;
|
|
133
|
+
};
|
|
134
|
+
'Test.TestTaskWithRepeat': {
|
|
135
|
+
in: string;
|
|
136
|
+
out: void;
|
|
137
|
+
};
|
|
138
|
+
'Test.Multiplexer': {
|
|
139
|
+
in1: string;
|
|
140
|
+
in2: number;
|
|
141
|
+
out: number;
|
|
142
|
+
};
|
|
143
|
+
},
|
|
144
|
+
MsgStruct
|
|
145
|
+
>;
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Usage Patterns
|
|
149
|
+
|
|
150
|
+
### Global vs Local Usage
|
|
151
|
+
|
|
152
|
+
@actdim/msgmesh can be used in two primary ways:
|
|
153
|
+
|
|
154
|
+
#### Global Application-Level Bus
|
|
155
|
+
|
|
156
|
+
Maintain a system-wide type structure for messages/events, organizing them by:
|
|
157
|
+
|
|
158
|
+
- Tasks (component ownership)
|
|
159
|
+
- Groups (in/out, input type overloading)
|
|
160
|
+
- Topics (additional filtering)
|
|
161
|
+
|
|
162
|
+
#### Local Component/Module-Level Bus
|
|
163
|
+
|
|
164
|
+
Use within any logical grouping of components or modules.
|
|
165
|
+
|
|
166
|
+
**Important**: You only need **one bus instance** for the entire application. The bus routes messages based on keys, so as long as key uniqueness is maintained, a single instance can handle messages from any locally-defined schema.
|
|
167
|
+
|
|
168
|
+
### Creating a Message Bus
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
import { createMsgBus, MsgBus } from '@actdim/msgmesh';
|
|
172
|
+
import { KeysOf } from '@actdim/utico/typeCore';
|
|
173
|
+
|
|
174
|
+
// Basic bus creation
|
|
175
|
+
const msgBus = createMsgBus<MyBusStruct>();
|
|
176
|
+
|
|
177
|
+
// With custom headers (if needed)
|
|
178
|
+
type CustomHeaders = MsgHeaders & {
|
|
179
|
+
userId?: string;
|
|
180
|
+
sessionId?: string;
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
const msgBusWithHeaders = createMsgBus<MyBusStruct, CustomHeaders>();
|
|
184
|
+
|
|
185
|
+
// Note: The instance can process messages from other structures too
|
|
186
|
+
// We only type the API for development convenience
|
|
187
|
+
// You can compose structures as needed, just ensure they don't overlap (unless intentional)
|
|
188
|
+
|
|
189
|
+
type AppBusStruct = ComponentBusStruct & ApiBusStruct;
|
|
190
|
+
const appMsgBus = createMsgBus<AppBusStruct>();
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Type Utilities
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
// Export bus type for dependency injection or props
|
|
197
|
+
export type MyMsgBus = MsgBus<MyBusStruct, CustomHeaders>;
|
|
198
|
+
|
|
199
|
+
// Generic string literal type for channels - useful for component constraints
|
|
200
|
+
type MyMsgChannels<TChannel extends keyof MyBusStruct | Array<keyof MyBusStruct>> = KeysOf<
|
|
201
|
+
MyBusStruct,
|
|
202
|
+
TChannel
|
|
203
|
+
>;
|
|
204
|
+
|
|
205
|
+
// Example: Restricting a component to specific channels
|
|
206
|
+
// Helper types are necessary for IntelliSense with dynamic types
|
|
207
|
+
// All API checks are enforced at compile time - you cannot violate defined contracts
|
|
208
|
+
type Behavior = {
|
|
209
|
+
messages: MyMsgChannels<'Test.ComputeSum' | 'Test.DoSomeWork'>;
|
|
210
|
+
};
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## API Reference
|
|
214
|
+
|
|
215
|
+
### Configuration
|
|
216
|
+
|
|
217
|
+
You can configure channels with various options:
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
import { MsgBusConfig } from '@actdim/msgmesh';
|
|
221
|
+
|
|
222
|
+
const config: MsgBusConfig<MyBusStruct> = {
|
|
223
|
+
'Test.ComputeSum': {
|
|
224
|
+
replayBufferSize: 10, // Number of messages to buffer for replay
|
|
225
|
+
replayWindowTime: 5000, // Time window for replay (ms)
|
|
226
|
+
delay: 100, // Delay before processing (ms)
|
|
227
|
+
throttle: {
|
|
228
|
+
// Throttle configuration
|
|
229
|
+
duration: 1000,
|
|
230
|
+
leading: true,
|
|
231
|
+
trailing: true,
|
|
232
|
+
},
|
|
233
|
+
debounce: 500, // Debounce delay (ms)
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
const msgBus = createMsgBus<MyBusStruct>(config);
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Subscribing to Messages: `on()`
|
|
241
|
+
|
|
242
|
+
Subscribe to messages on a specific channel and group with optional topic filtering.
|
|
243
|
+
|
|
244
|
+
```typescript
|
|
245
|
+
// Basic subscription
|
|
246
|
+
msgBus.on({
|
|
247
|
+
channel: 'Test.ComputeSum',
|
|
248
|
+
callback: (msg) => {
|
|
249
|
+
// msg.payload is typed as { a: number; b: number }
|
|
250
|
+
console.log('Received:', msg.payload);
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
// Subscribe to specific group
|
|
255
|
+
msgBus.on({
|
|
256
|
+
channel: 'Test.ComputeSum',
|
|
257
|
+
group: 'out', // Listen for responses
|
|
258
|
+
callback: (msg) => {
|
|
259
|
+
// msg.payload is typed as number
|
|
260
|
+
console.log('Result:', msg.payload);
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
// With topic filtering (regex pattern)
|
|
265
|
+
msgBus.on({
|
|
266
|
+
channel: 'Test.DoSomeWork',
|
|
267
|
+
topic: '/^task-.*/', // Match topics starting with "task-"
|
|
268
|
+
callback: (msg) => {
|
|
269
|
+
console.log('Task message:', msg.payload);
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
// With options
|
|
274
|
+
msgBus.on({
|
|
275
|
+
channel: 'Test.ComputeSum',
|
|
276
|
+
callback: (msg) => {
|
|
277
|
+
console.log('Message:', msg.payload);
|
|
278
|
+
},
|
|
279
|
+
options: {
|
|
280
|
+
fetchCount: 5, // Auto-unsubscribe after 5 messages
|
|
281
|
+
throttle: {
|
|
282
|
+
// Throttle the callback
|
|
283
|
+
duration: 1000,
|
|
284
|
+
leading: true,
|
|
285
|
+
trailing: false,
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
});
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
#### Automatic Unsubscription
|
|
292
|
+
|
|
293
|
+
**Limit message count**: Use `fetchCount` to automatically unsubscribe after receiving a specific number of messages.
|
|
294
|
+
|
|
295
|
+
```typescript
|
|
296
|
+
msgBus.on({
|
|
297
|
+
channel: 'Test.ComputeSum',
|
|
298
|
+
callback: (msg) => {
|
|
299
|
+
console.log(msg.payload);
|
|
300
|
+
},
|
|
301
|
+
options: {
|
|
302
|
+
fetchCount: 10, // Unsubscribe after 10 messages
|
|
303
|
+
},
|
|
304
|
+
});
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
#### Manual Unsubscription with AbortSignal
|
|
308
|
+
|
|
309
|
+
Use `AbortSignal` for controlled unsubscription. This allows combining abort signals from multiple `AbortController` instances.
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
const abortController = new AbortController();
|
|
313
|
+
|
|
314
|
+
msgBus.on({
|
|
315
|
+
channel: "Test.ComputeSum",
|
|
316
|
+
callback: (msg) => {
|
|
317
|
+
console.log(msg.payload);
|
|
318
|
+
},
|
|
319
|
+
options: {
|
|
320
|
+
abortSignal: abortController.signal
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
// Later: unsubscribe
|
|
325
|
+
abortController.abort();
|
|
326
|
+
|
|
327
|
+
// Combining multiple abort signals
|
|
328
|
+
const controller1 = new AbortController();
|
|
329
|
+
const controller2 = new AbortController();
|
|
330
|
+
|
|
331
|
+
const combinedSignal = AbortSignal.any([
|
|
332
|
+
controller1.signal,
|
|
333
|
+
controller2.signal
|
|
334
|
+
]);
|
|
335
|
+
|
|
336
|
+
msgBus.on({
|
|
337
|
+
channel: "Test.ComputeSum",
|
|
338
|
+
options: {
|
|
339
|
+
abortSignal: combinedSignal
|
|
340
|
+
},
|
|
341
|
+
callback: (msg) => {
|
|
342
|
+
console.log(msg.payload);
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
|
|
346
|
+
// React integration example - cleanup on unmount
|
|
347
|
+
import { useEffect } from 'react';
|
|
348
|
+
|
|
349
|
+
function MyComponent() {
|
|
350
|
+
useEffect(() => {
|
|
351
|
+
const controller = new AbortController();
|
|
352
|
+
|
|
353
|
+
msgBus.on({
|
|
354
|
+
channel: "Test.Events",
|
|
355
|
+
callback: handleEvent,
|
|
356
|
+
options: {
|
|
357
|
+
abortSignal: controller.signal
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
// Clean up when component unmounts
|
|
362
|
+
return () => {
|
|
363
|
+
controller.abort();
|
|
364
|
+
};
|
|
365
|
+
}, []);
|
|
366
|
+
|
|
367
|
+
return <div>Component content</div>;
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Awaiting a Single Message: `once()`
|
|
372
|
+
|
|
373
|
+
Subscribe and await the first (next) message on a specific channel and group, similar to `on()` but returns a Promise.
|
|
374
|
+
|
|
375
|
+
```typescript
|
|
376
|
+
// Wait for one message
|
|
377
|
+
const msg = await msgBus.once({
|
|
378
|
+
channel: 'Test.ComputeSum',
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
console.log('Received:', msg.payload); // Typed as { a: number; b: number }
|
|
382
|
+
|
|
383
|
+
// With group specification
|
|
384
|
+
const response = await msgBus.once({
|
|
385
|
+
channel: 'Test.ComputeSum',
|
|
386
|
+
group: 'out',
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
console.log('Result:', response.payload); // Typed as number
|
|
390
|
+
|
|
391
|
+
// With topic filtering
|
|
392
|
+
const taskMsg = await msgBus.once({
|
|
393
|
+
channel: 'Test.DoSomeWork',
|
|
394
|
+
topic: '/^priority-.*/', // Match topics starting with "priority-"
|
|
395
|
+
});
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
#### Timeout Configuration
|
|
399
|
+
|
|
400
|
+
Configure timeout duration via the `timeout` option. The `abortSignal` option also works with `once()`.
|
|
401
|
+
|
|
402
|
+
```typescript
|
|
403
|
+
try {
|
|
404
|
+
const msg = await msgBus.once({
|
|
405
|
+
channel: 'Test.ComputeSum',
|
|
406
|
+
options: {
|
|
407
|
+
timeout: 5000, // 5 second timeout
|
|
408
|
+
},
|
|
409
|
+
});
|
|
410
|
+
console.log('Received:', msg.payload);
|
|
411
|
+
} catch (error) {
|
|
412
|
+
if (error instanceof TimeoutError) {
|
|
413
|
+
console.error('Timeout waiting for message');
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// With abort signal
|
|
418
|
+
const abortController = new AbortController();
|
|
419
|
+
|
|
420
|
+
const messagePromise = msgBus.once({
|
|
421
|
+
channel: 'Test.ComputeSum',
|
|
422
|
+
options: {
|
|
423
|
+
timeout: 10000,
|
|
424
|
+
abortSignal: abortController.signal,
|
|
425
|
+
},
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
// Can cancel from elsewhere
|
|
429
|
+
setTimeout(() => abortController.abort('User cancelled'), 2000);
|
|
430
|
+
|
|
431
|
+
try {
|
|
432
|
+
const msg = await messagePromise;
|
|
433
|
+
} catch (error) {
|
|
434
|
+
if (error instanceof AbortError) {
|
|
435
|
+
console.error('Aborted:', error.cause);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Providing Response Handlers: `provide()`
|
|
441
|
+
|
|
442
|
+
Register a handler for messages on a selected channel and group (typically `in`), which generates a response message for the `out` group of the same channel. This is essentially a subscription with automatic response handling.
|
|
443
|
+
|
|
444
|
+
The callback can be asynchronous and its result is automatically used to form the response.
|
|
445
|
+
|
|
446
|
+
```typescript
|
|
447
|
+
// Simple provider
|
|
448
|
+
msgBus.provide({
|
|
449
|
+
channel: 'Test.ComputeSum',
|
|
450
|
+
callback: (msg) => {
|
|
451
|
+
// msg.payload is typed as { a: number; b: number }
|
|
452
|
+
// Return type is inferred as number (from 'out' type)
|
|
453
|
+
return msg.payload.a + msg.payload.b;
|
|
454
|
+
},
|
|
455
|
+
});
|
|
456
|
+
|
|
457
|
+
// Async provider
|
|
458
|
+
msgBus.provide({
|
|
459
|
+
channel: 'Test.DoSomeWork',
|
|
460
|
+
callback: async (msg) => {
|
|
461
|
+
// msg.payload is typed as string
|
|
462
|
+
await performWork(msg.payload);
|
|
463
|
+
// Return type is void (from 'out' type)
|
|
464
|
+
},
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
// With topic filtering
|
|
468
|
+
msgBus.provide({
|
|
469
|
+
channel: 'Test.ComputeSum',
|
|
470
|
+
topic: '/^calc-.*/',
|
|
471
|
+
callback: (msg) => {
|
|
472
|
+
return msg.payload.a + msg.payload.b;
|
|
473
|
+
},
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
// With options
|
|
477
|
+
msgBus.provide({
|
|
478
|
+
channel: 'Test.ComputeSum',
|
|
479
|
+
callback: (msg) => {
|
|
480
|
+
return msg.payload.a + msg.payload.b;
|
|
481
|
+
},
|
|
482
|
+
options: {
|
|
483
|
+
fetchCount: 100, // Handle 100 requests then unsubscribe
|
|
484
|
+
abortSignal: someController.signal,
|
|
485
|
+
},
|
|
486
|
+
});
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
### Sending Messages: `send()`
|
|
490
|
+
|
|
491
|
+
Send a message to the bus for a specific channel and group (default is `in`). The payload type is enforced according to the bus structure.
|
|
492
|
+
|
|
493
|
+
```typescript
|
|
494
|
+
// Basic send
|
|
495
|
+
await msgBus.send({
|
|
496
|
+
channel: 'Test.ComputeSum',
|
|
497
|
+
payload: { a: 10, b: 20 }, // Typed and validated
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
// With group specification
|
|
501
|
+
await msgBus.send({
|
|
502
|
+
channel: 'Test.Multiplexer',
|
|
503
|
+
group: 'in1',
|
|
504
|
+
payload: 'hello', // Typed as string for 'in1' group
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
await msgBus.send({
|
|
508
|
+
channel: 'Test.Multiplexer',
|
|
509
|
+
group: 'in2',
|
|
510
|
+
payload: 42, // Typed as number for 'in2' group
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
// With topic
|
|
514
|
+
await msgBus.send({
|
|
515
|
+
channel: 'Test.DoSomeWork',
|
|
516
|
+
topic: 'priority-high',
|
|
517
|
+
payload: 'urgent task',
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
// With custom headers
|
|
521
|
+
await msgBus.send({
|
|
522
|
+
channel: 'Test.ComputeSum',
|
|
523
|
+
payload: { a: 5, b: 15 },
|
|
524
|
+
headers: {
|
|
525
|
+
correlationId: 'task-123',
|
|
526
|
+
priority: 1,
|
|
527
|
+
},
|
|
528
|
+
});
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
#### Important Notes
|
|
532
|
+
|
|
533
|
+
1. **Response Handling**: Any message sent to a non-`out` group can receive a response through the bus, which will be routed to the `out` group of the same channel.
|
|
534
|
+
|
|
535
|
+
2. **Topic Specification**: You can specify a topic when sending to enable fine-grained filtering by subscribers.
|
|
536
|
+
|
|
537
|
+
### Request-Response Pattern: `request()`
|
|
538
|
+
|
|
539
|
+
Send a message and automatically await a response from a handler (registered via `provide()`) on the same channel's `out` group. Returns a Promise that resolves with the response message.
|
|
540
|
+
|
|
541
|
+
```typescript
|
|
542
|
+
// Basic request
|
|
543
|
+
const response = await msgBus.request({
|
|
544
|
+
channel: 'Test.ComputeSum',
|
|
545
|
+
payload: { a: 10, b: 20 },
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
console.log('Result:', response.payload); // Typed as number
|
|
549
|
+
|
|
550
|
+
// With group overloading (using different input groups)
|
|
551
|
+
const response1 = await msgBus.request({
|
|
552
|
+
channel: 'Test.Multiplexer',
|
|
553
|
+
group: 'in1',
|
|
554
|
+
payload: 'hello',
|
|
555
|
+
});
|
|
556
|
+
|
|
557
|
+
const response2 = await msgBus.request({
|
|
558
|
+
channel: 'Test.Multiplexer',
|
|
559
|
+
group: 'in2',
|
|
560
|
+
payload: 42,
|
|
561
|
+
});
|
|
562
|
+
|
|
563
|
+
// Both responses have payload with type - number ('out' group)
|
|
564
|
+
|
|
565
|
+
// With timeout
|
|
566
|
+
try {
|
|
567
|
+
const response = await msgBus.request({
|
|
568
|
+
channel: 'Test.ComputeSum',
|
|
569
|
+
payload: { a: 5, b: 15 },
|
|
570
|
+
options: {
|
|
571
|
+
timeout: 5000, // Overall timeout
|
|
572
|
+
},
|
|
573
|
+
});
|
|
574
|
+
} catch (error) {
|
|
575
|
+
if (error instanceof TimeoutError) {
|
|
576
|
+
console.error('Request timed out');
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
// With separate send and response timeouts
|
|
581
|
+
const response = await msgBus.request({
|
|
582
|
+
channel: 'Test.ComputeSum',
|
|
583
|
+
payload: { a: 5, b: 15 },
|
|
584
|
+
options: {
|
|
585
|
+
sendTimeout: 1000, // Timeout for sending the message
|
|
586
|
+
responseTimeout: 5000, // Timeout for receiving the response
|
|
587
|
+
},
|
|
588
|
+
});
|
|
589
|
+
|
|
590
|
+
// With headers for correlation
|
|
591
|
+
const response = await msgBus.request({
|
|
592
|
+
channel: 'Test.ComputeSum',
|
|
593
|
+
payload: { a: 5, b: 15 },
|
|
594
|
+
headers: {
|
|
595
|
+
sourceId: 'component-123',
|
|
596
|
+
correlationId: 'request-456',
|
|
597
|
+
},
|
|
598
|
+
});
|
|
599
|
+
|
|
600
|
+
// The response will include matching headers
|
|
601
|
+
console.log(response.headers.requestId); // Original message ID
|
|
602
|
+
console.log(response.headers.correlationId); // Preserved correlation ID
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
#### Key Features
|
|
606
|
+
|
|
607
|
+
1. **Input Type Overloading**: Use different input groups within the same channel to support multiple request signatures while maintaining a single response type.
|
|
608
|
+
|
|
609
|
+
2. **Timeout Control**: Configure response timeout via the `responseTimeout` option to prevent indefinite waiting.
|
|
610
|
+
|
|
611
|
+
3. **Header Propagation**: Headers like `correlationId` are automatically propagated from request to response for tracing.
|
|
612
|
+
|
|
613
|
+
### Streaming Messages: `stream()`
|
|
614
|
+
|
|
615
|
+
Create an async iterable iterator for consuming messages as a stream.
|
|
616
|
+
|
|
617
|
+
```typescript
|
|
618
|
+
// Basic streaming
|
|
619
|
+
const messageStream = msgBus.stream({
|
|
620
|
+
channel: 'Test.ComputeSum',
|
|
621
|
+
});
|
|
622
|
+
|
|
623
|
+
for await (const msg of messageStream) {
|
|
624
|
+
console.log('Received:', msg.payload);
|
|
625
|
+
// Process messages as they arrive
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
// With topic filtering
|
|
629
|
+
const taskStream = msgBus.stream({
|
|
630
|
+
channel: 'Test.DoSomeWork',
|
|
631
|
+
topic: '/^task-.*/',
|
|
632
|
+
options: {
|
|
633
|
+
timeout: 30000, // Stop streaming after 30s of inactivity
|
|
634
|
+
},
|
|
635
|
+
});
|
|
636
|
+
|
|
637
|
+
for await (const msg of taskStream) {
|
|
638
|
+
await processTask(msg.payload);
|
|
639
|
+
}
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
## Advanced Features
|
|
643
|
+
|
|
644
|
+
### Message Replay
|
|
645
|
+
|
|
646
|
+
Configure channels to buffer and replay messages for late subscribers.
|
|
647
|
+
|
|
648
|
+
```typescript
|
|
649
|
+
const msgBus = createMsgBus<MyBusStruct>({
|
|
650
|
+
'Test.Events': {
|
|
651
|
+
replayBufferSize: 50, // Keep last 50 messages
|
|
652
|
+
replayWindowTime: 60000, // Keep messages for 60 seconds
|
|
653
|
+
},
|
|
654
|
+
});
|
|
655
|
+
|
|
656
|
+
// Send messages
|
|
657
|
+
for (let i = 0; i < 100; i++) {
|
|
658
|
+
await msgBus.send({
|
|
659
|
+
channel: 'Test.Events',
|
|
660
|
+
payload: `Message ${i}`,
|
|
661
|
+
});
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
// Late subscriber receives last 50 messages
|
|
665
|
+
msgBus.on({
|
|
666
|
+
channel: 'Test.Events',
|
|
667
|
+
callback: (msg) => {
|
|
668
|
+
console.log('Replayed:', msg.payload);
|
|
669
|
+
},
|
|
670
|
+
});
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
### Throttling and Debouncing
|
|
674
|
+
|
|
675
|
+
Control message processing rate at both channel and subscription levels.
|
|
676
|
+
|
|
677
|
+
```typescript
|
|
678
|
+
// Channel-level throttling
|
|
679
|
+
const msgBus = createMsgBus<MyBusStruct>({
|
|
680
|
+
'Test.Updates': {
|
|
681
|
+
throttle: {
|
|
682
|
+
duration: 1000,
|
|
683
|
+
leading: true,
|
|
684
|
+
trailing: true,
|
|
685
|
+
},
|
|
686
|
+
},
|
|
687
|
+
});
|
|
688
|
+
|
|
689
|
+
// Subscription-level debouncing
|
|
690
|
+
msgBus.on({
|
|
691
|
+
channel: 'Test.Updates',
|
|
692
|
+
callback: (msg) => {
|
|
693
|
+
updateUI(msg.payload);
|
|
694
|
+
},
|
|
695
|
+
options: {
|
|
696
|
+
debounce: 500, // Wait 500ms of inactivity before processing
|
|
697
|
+
},
|
|
698
|
+
});
|
|
699
|
+
```
|
|
700
|
+
|
|
701
|
+
### Error Handling
|
|
702
|
+
|
|
703
|
+
The bus includes built-in error handling and a reserved error channel.
|
|
704
|
+
|
|
705
|
+
```typescript
|
|
706
|
+
// Subscribe to errors for a specific channel
|
|
707
|
+
msgBus.on({
|
|
708
|
+
channel: 'Test.ComputeSum',
|
|
709
|
+
group: 'error',
|
|
710
|
+
callback: (msg) => {
|
|
711
|
+
console.error('Error in ComputeSum:', msg.payload.error);
|
|
712
|
+
},
|
|
713
|
+
});
|
|
714
|
+
|
|
715
|
+
// Subscribe to all system errors
|
|
716
|
+
msgBus.on({
|
|
717
|
+
channel: 'MSGBUS.ERROR',
|
|
718
|
+
callback: (msg) => {
|
|
719
|
+
console.error('System error:', msg.payload);
|
|
720
|
+
},
|
|
721
|
+
});
|
|
722
|
+
|
|
723
|
+
// Errors in providers are automatically caught and routed
|
|
724
|
+
msgBus.provide({
|
|
725
|
+
channel: 'Test.ComputeSum',
|
|
726
|
+
callback: (msg) => {
|
|
727
|
+
if (msg.payload.a < 0) {
|
|
728
|
+
throw new Error('Negative numbers not allowed');
|
|
729
|
+
}
|
|
730
|
+
return msg.payload.a + msg.payload.b;
|
|
731
|
+
},
|
|
732
|
+
});
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
### Headers and Metadata
|
|
736
|
+
|
|
737
|
+
Messages support rich metadata through headers.
|
|
738
|
+
|
|
739
|
+
```typescript
|
|
740
|
+
import { MsgHeaders } from '@actdim/msgmesh';
|
|
741
|
+
|
|
742
|
+
// Standard headers
|
|
743
|
+
type StandardHeaders = {
|
|
744
|
+
sourceId?: string; // Sender identifier
|
|
745
|
+
targetId?: string; // Recipient identifier
|
|
746
|
+
correlationId?: string; // Activity/trace identifier
|
|
747
|
+
traceId?: string; // Distributed trace identifier
|
|
748
|
+
requestId?: string; // Original request identifier
|
|
749
|
+
inResponseToId?: string; // Reply reference
|
|
750
|
+
publishedAt?: number; // Timestamp (Unix epoch, ms)
|
|
751
|
+
priority?: number; // Message priority
|
|
752
|
+
ttl?: number; // Time to live (ms)
|
|
753
|
+
tags?: string | string[]; // Message tags
|
|
754
|
+
};
|
|
755
|
+
|
|
756
|
+
// Custom headers
|
|
757
|
+
type MyHeaders = MsgHeaders & {
|
|
758
|
+
userId: string;
|
|
759
|
+
tenantId: string;
|
|
760
|
+
version: string;
|
|
761
|
+
};
|
|
762
|
+
|
|
763
|
+
const msgBus = createMsgBus<MyBusStruct, MyHeaders>();
|
|
764
|
+
|
|
765
|
+
await msgBus.send({
|
|
766
|
+
channel: 'Test.ComputeSum',
|
|
767
|
+
payload: { a: 10, b: 20 },
|
|
768
|
+
headers: {
|
|
769
|
+
userId: 'user-123',
|
|
770
|
+
tenantId: 'tenant-456',
|
|
771
|
+
version: '1.0',
|
|
772
|
+
correlationId: 'trace-789',
|
|
773
|
+
priority: 1,
|
|
774
|
+
},
|
|
775
|
+
});
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
## Comparison with Other Solutions
|
|
779
|
+
|
|
780
|
+
| Feature | @actdim/msgmesh | Event Emitters | RxJS |
|
|
781
|
+
| ---------------- | --------------- | -------------- | ----------- |
|
|
782
|
+
| Type Safety | ✅ Full | ⚠️ Limited | ✅ Full |
|
|
783
|
+
| Learning Curve | Low | Low | High |
|
|
784
|
+
| Async Support | ✅ Native | ⚠️ Limited | ✅ Full |
|
|
785
|
+
| Request-Response | ✅ Built-in | ❌ Manual | ⚠️ Complex |
|
|
786
|
+
| Boilerplate | Minimal | Minimal | Medium |
|
|
787
|
+
| Paradigm Shift | None | None | Significant |
|
|
788
|
+
| Scalability | ✅ Excellent | ⚠️ Limited | ✅ Good |
|
|
789
|
+
|
|
790
|
+
## Conclusion
|
|
791
|
+
|
|
792
|
+
@actdim/msgmesh provides a powerful, type-safe, and flexible message bus solution for TypeScript applications. It combines the simplicity of event emitters with the power of message-oriented middleware, while maintaining excellent type safety and developer experience.
|
|
793
|
+
|
|
794
|
+
Key benefits:
|
|
795
|
+
|
|
796
|
+
- **Type Safety**: Full TypeScript support with compile-time checks
|
|
797
|
+
- **Flexibility**: Works at any scale - from single components to entire applications
|
|
798
|
+
- **Observability**: Built-in support for logging, tracing, and debugging
|
|
799
|
+
- **Developer Experience**: Minimal boilerplate, clear API, excellent IntelliSense support
|
|
800
|
+
- **Performance**: Single-instance architecture with efficient message routing
|
|
801
|
+
- **Integration**: Works seamlessly with React, async operations, and existing patterns
|
|
802
|
+
|
|
803
|
+
The message bus serves as a solid foundation for the @actdim/dynstruct architectural framework, enabling the development of scalable, maintainable, and testable applications.
|
|
804
|
+
|
|
805
|
+
## TODO
|
|
806
|
+
|
|
807
|
+
- rate limiting (for single channel, using signal after auto-'ack') and backpressure (for "in" and "out" channel pair), real send promise
|
|
808
|
+
- async stream
|
|
809
|
+
|
|
810
|
+
## Further Reading
|
|
811
|
+
|
|
812
|
+
- [GitHub Repository](https://github.com/actdim/msgmesh)
|
|
813
|
+
- [@actdim/dynstruct Documentation](https://github.com/actdim/dynstruct)
|
|
814
|
+
- [Type Safety Best Practices](https://www.typescriptlang.org/docs/handbook/2/types-from-types.html)
|
|
815
|
+
- [Message-Oriented Middleware Patterns](https://www.enterpriseintegrationpatterns.com/)
|
package/dist/contracts.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare const $CG_IN: "in";
|
|
|
4
4
|
export declare const $CG_OUT: "out";
|
|
5
5
|
export declare const $CG_ERROR: "error";
|
|
6
6
|
export declare const $C_ERROR: "MSGBUS.ERROR";
|
|
7
|
+
export declare const $SYSTEM_TOPIC: "msgbus";
|
|
7
8
|
export type InParam = {
|
|
8
9
|
[$CG_IN]: any;
|
|
9
10
|
};
|
|
@@ -50,7 +51,6 @@ export type MsgStructFactory<TStruct extends TStructBase, TStructBase extends Ms
|
|
|
50
51
|
export type InStruct<TStruct extends MsgStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends InParam ? TStruct[TChannel]["in"] : undefined;
|
|
51
52
|
export type OutStruct<TStruct extends MsgStruct, TChannel extends keyof TStruct> = TStruct[TChannel] extends OutParam ? TStruct[TChannel][keyof OutParam] : undefined;
|
|
52
53
|
export type MsgChannelConfig<TChannel> = {
|
|
53
|
-
replayCount?: number;
|
|
54
54
|
initialValues?: {
|
|
55
55
|
[TGroup in keyof TChannel]: TChannel[TGroup];
|
|
56
56
|
};
|
package/dist/contracts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
package/dist/contracts.es.js
CHANGED
|
@@ -1,32 +1,33 @@
|
|
|
1
|
-
const s = "in", c = "out", n = "error", a = "MSGBUS.ERROR";
|
|
1
|
+
const s = "in", c = "out", n = "error", a = "MSGBUS.ERROR", u = "msgbus";
|
|
2
2
|
class o extends Error {
|
|
3
3
|
name = "BaseError";
|
|
4
|
-
constructor(r,
|
|
5
|
-
super(r,
|
|
4
|
+
constructor(r, t) {
|
|
5
|
+
super(r, t), Object.setPrototypeOf(this, new.target.prototype);
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
-
class
|
|
8
|
+
class E extends o {
|
|
9
9
|
name = "TimeoutError";
|
|
10
|
-
constructor(r,
|
|
11
|
-
super(r || "Timeout exceeded", { cause:
|
|
10
|
+
constructor(r, t) {
|
|
11
|
+
super(r || "Timeout exceeded", { cause: t });
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
class p extends o {
|
|
15
15
|
name = "AbortError";
|
|
16
|
-
constructor(r,
|
|
17
|
-
super(r || "Operation aborted", { cause:
|
|
16
|
+
constructor(r, t) {
|
|
17
|
+
super(r || "Operation aborted", { cause: t });
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
const
|
|
20
|
+
const T = Symbol("__<TStruct>"), m = Symbol("__<THeaders>");
|
|
21
21
|
export {
|
|
22
22
|
n as $CG_ERROR,
|
|
23
23
|
s as $CG_IN,
|
|
24
24
|
c as $CG_OUT,
|
|
25
25
|
a as $C_ERROR,
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
u as $SYSTEM_TOPIC,
|
|
27
|
+
m as $TypeArgHeaders,
|
|
28
|
+
T as $TypeArgStruct,
|
|
28
29
|
p as AbortError,
|
|
29
30
|
o as BaseError,
|
|
30
|
-
|
|
31
|
+
E as TimeoutError
|
|
31
32
|
};
|
|
32
33
|
//# sourceMappingURL=contracts.es.js.map
|
package/dist/contracts.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.es.js","sources":["../src/contracts.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\" as const;\r\n\r\nexport const $CG_OUT = \"out\" as const;\r\n\r\nexport const $CG_ERROR = \"error\" as const;\r\n\r\nexport const $C_ERROR = \"MSGBUS.ERROR\" as const;\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 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\r\n // requireAck: boolean;\r\n // noAck?: boolean; // noAutoAck\r\n // manualAck?: boolean;\r\n // prefetchCount?: number; // for manual acknowledgment (max messages in flight without ack) \r\n // maxSubscribers?: number;\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 MsgSubOptions = {\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 priority?: number;\r\n};\r\n\r\nexport type PromiseOptions = {\r\n abortSignal?: AbortSignal;\r\n timeout?: number;\r\n};\r\n\r\nexport type MsgBusConfig<TStruct extends MsgStruct> = {\r\n [TChannel in keyof TStruct]?: MsgChannelConfig<TStruct[TChannel]>;\r\n};\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 // discard policy (for dead-letter)?\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 MsgSubBaseParams<\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\r\n> = MsgAddress<TStruct, TChannel, TGroup> & {\r\n channelSelector?: string | ((channel: string) => boolean);\r\n // topicSelector?: string | ((channel: string) => boolean); \r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => boolean;\r\n};\r\n\r\nexport type MsgSubParams<\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\r\n> = MsgSubBaseParams<TStruct, TChannel, TGroup, THeaders> & {\r\n callback?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => void;\r\n options?: MsgSubOptions;\r\n};\r\n\r\nexport type MsgSub<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: MsgSubParams<TStruct, TChannel, TGroup, THeaders>\r\n) => void;\r\n\r\nexport type AwaitableMsgSubOptions = MsgSubOptions & PromiseOptions;\r\n\r\n// AwaitableMsgStreamOptions\r\nexport type MsgStreamOptions = AwaitableMsgSubOptions;\r\n\r\nexport type MsgStreamParams<\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\r\n> = MsgSubBaseParams<TStruct, TChannel, TGroup, THeaders> & {\r\n options?: MsgStreamOptions;\r\n};\r\n\r\nexport type MsgStream<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: MsgStreamParams<TStruct, TChannel, TGroup>\r\n) => AsyncIterableIterator<Msg<TStruct, TChannel, TGroup, THeaders>>; // TGroup extends undefined ? typeof $CG_IN : TGroup\r\n\r\nexport type AwaitableMsgSubParams<\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\r\n> = MsgSubBaseParams<TStruct, TChannel, TGroup, THeaders> & {\r\n options?: AwaitableMsgSubOptions;\r\n};\r\n\r\nexport type AwaitableMsgSub<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: AwaitableMsgSubParams<TStruct, TChannel, TGroup>\r\n) => Promise<Msg<TStruct, TChannel, TGroup, THeaders>>; // TGroup extends undefined ? typeof $CG_IN : TGroup\r\n\r\nexport type MsgProviderOptions = MsgSubOptions;\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> = MsgSubBaseParams<TStruct, TChannel, TGroup, THeaders> & {\r\n // resolve\r\n callback?: (msgIn: Msg<TStruct, TChannel, TGroup, THeaders>, headers?: THeaders) => MaybePromise<OutStruct<TStruct, TChannel>>;\r\n options?: MsgProviderOptions;\r\n headers?: THeaders;\r\n};\r\n\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\nexport type MsgSenderOptions = PromiseOptions;\r\n\r\nexport type MsgSenderParams<\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 options?: MsgSenderOptions;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => boolean;\r\n headers?: THeaders;\r\n};\r\n\r\nexport type MsgSender<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: MsgSenderParams<TStruct, TChannel, TGroup, THeaders>\r\n) => Promise<void>;\r\n\r\nexport type MsgRequestOptions = PromiseOptions & {\r\n sendTimeout?: number;\r\n responseTimeout?: number;\r\n};\r\n\r\nexport type MsgRequestDispatcherParams<\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 options?: MsgRequestOptions;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => boolean;\r\n headers?: THeaders;\r\n};\r\n\r\nexport type MsgRequestDispatcher<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: MsgRequestDispatcherParams<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\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: MsgSub<MsgStructNormalized<TStruct>, THeaders>;\r\n // listen once\r\n readonly once: AwaitableMsgSub<MsgStructNormalized<TStruct>, THeaders>;\r\n // listenStream, consume, receive\r\n readonly stream: MsgStream<MsgStructNormalized<TStruct>, THeaders>;\r\n // handle\r\n readonly provide: MsgProvider<MsgStructNormalized<TStruct>, THeaders>;\r\n // publish + delivery guarantee\r\n readonly send: MsgSender<MsgStructNormalized<TStruct>, THeaders>;\r\n // publish + subscribe\r\n readonly request: MsgRequestDispatcher<MsgStructNormalized<TStruct>, THeaders>;\r\n\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};"],"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;AAmVO,MAAME,IAAiB,OAAO,aAAa,GACrCC,IAAkB,OAAO,cAAc;"}
|
|
1
|
+
{"version":3,"file":"contracts.es.js","sources":["../src/contracts.ts"],"sourcesContent":null,"names":["$CG_IN","$CG_OUT","$CG_ERROR","$C_ERROR","$SYSTEM_TOPIC","BaseError","message","options","TimeoutError","cause","AbortError","$TypeArgStruct","$TypeArgHeaders"],"mappings":"AAOO,MAAMA,IAAS,MAETC,IAAU,OAEVC,IAAY,SAEZC,IAAW,gBAEXC,IAAgB;AAuBtB,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;AAkVO,MAAME,IAAiB,OAAO,aAAa,GACrCC,IAAkB,OAAO,cAAc;"}
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,SAAS,EAIT,YAAY,EAIZ,mBAAmB,EAGnB,UAAU,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EACN,SAAS,EAIT,YAAY,EAIZ,mBAAmB,EAGnB,UAAU,EAQb,MAAM,aAAa,CAAC;AASrB,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,6BAqbpJ"}
|
package/dist/core.es.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { TimeoutError as T, $CG_IN as v, $CG_ERROR as j, $C_ERROR as q, $CG_OUT as
|
|
2
|
-
import { v4 as
|
|
3
|
-
import { asyncScheduler as F, ReplaySubject as
|
|
4
|
-
import { filter as
|
|
1
|
+
import { TimeoutError as T, $CG_IN as v, $SYSTEM_TOPIC as W, $CG_ERROR as j, $C_ERROR as q, $CG_OUT as $ } from "./contracts.es.js";
|
|
2
|
+
import { v4 as R } from "uuid";
|
|
3
|
+
import { asyncScheduler as F, ReplaySubject as z, Subject as D } from "rxjs";
|
|
4
|
+
import { filter as G, delay as U, observeOn as K, take as N, debounceTime as Y } from "rxjs/operators";
|
|
5
5
|
import { pipeFromArray as H, throttleOp as J } from "./util.es.js";
|
|
6
|
-
import { delayError as
|
|
6
|
+
import { delayError as O } from "@actdim/utico/utils";
|
|
7
7
|
const Q = (s) => {
|
|
8
8
|
if (s == null)
|
|
9
9
|
return (a) => a == s;
|
|
@@ -13,13 +13,13 @@ const Q = (s) => {
|
|
|
13
13
|
return (d) => a.test(d);
|
|
14
14
|
} else
|
|
15
15
|
return (a) => s === a;
|
|
16
|
-
},
|
|
16
|
+
}, k = 1e3 * 60 * 2;
|
|
17
17
|
function V() {
|
|
18
18
|
return Date.now();
|
|
19
19
|
}
|
|
20
20
|
const X = ":";
|
|
21
|
-
function
|
|
22
|
-
const a =
|
|
21
|
+
function ie(s) {
|
|
22
|
+
const a = W, d = F;
|
|
23
23
|
function L(e) {
|
|
24
24
|
return {
|
|
25
25
|
id: e.id,
|
|
@@ -50,32 +50,32 @@ function re(s) {
|
|
|
50
50
|
}, b(n);
|
|
51
51
|
}
|
|
52
52
|
const g = /* @__PURE__ */ new Map();
|
|
53
|
-
function
|
|
53
|
+
function M(e, o) {
|
|
54
54
|
return `${e}${X}${o}`;
|
|
55
55
|
}
|
|
56
|
-
function
|
|
57
|
-
const t =
|
|
56
|
+
function S(e, o) {
|
|
57
|
+
const t = M(e, o);
|
|
58
58
|
if (!g.has(t)) {
|
|
59
59
|
let n = null;
|
|
60
60
|
const r = s?.[e];
|
|
61
|
-
r && (r.replayBufferSize != null || r.replayWindowTime != null) && (n = new
|
|
61
|
+
r && (r.replayBufferSize != null || r.replayWindowTime != null) && (n = new z(r.replayBufferSize == null ? 1 / 0 : r.replayBufferSize, r.replayWindowTime == null ? 1 / 0 : r.replayWindowTime)), n || (n = new D()), g.set(
|
|
62
62
|
t,
|
|
63
63
|
n
|
|
64
64
|
);
|
|
65
65
|
}
|
|
66
66
|
return g.get(t);
|
|
67
67
|
}
|
|
68
|
-
function
|
|
68
|
+
function w(e, o, t) {
|
|
69
69
|
if (o != null) {
|
|
70
70
|
let n, r = { leading: !0, trailing: !0 };
|
|
71
71
|
typeof o == "number" ? n = o : (n = o.duration, r.leading = o.leading, r.trailing = o.trailing), e.push(J(n, r, t));
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
function E(e, o, t) {
|
|
75
|
-
o != null && e.push(
|
|
75
|
+
o != null && e.push(Y(o, t));
|
|
76
76
|
}
|
|
77
77
|
function p(e) {
|
|
78
|
-
const o = String(e.channel), t = e.group == null ? v : String(e.group), n =
|
|
78
|
+
const o = String(e.channel), t = e.group == null ? v : String(e.group), n = S(o, t), r = Q(e.topic), i = G(
|
|
79
79
|
(f) => (
|
|
80
80
|
// msg.address.channel === channel &&
|
|
81
81
|
// msg.address.group === group &&
|
|
@@ -86,13 +86,13 @@ function re(s) {
|
|
|
86
86
|
const u = [];
|
|
87
87
|
u.push(i);
|
|
88
88
|
const c = s?.[o];
|
|
89
|
-
|
|
89
|
+
w(u, c?.throttle, d), w(u, e.options?.throttle, d), E(u, c?.debounce, d), E(u, e.options?.debounce, d), c?.delay && u.push(U(c.delay, d)), d && u.push(K(d)), e.options?.fetchCount && u.push(N(e.options.fetchCount)), l = H(u)(n);
|
|
90
90
|
const h = l.subscribe({
|
|
91
91
|
next: (f) => {
|
|
92
92
|
try {
|
|
93
93
|
return e.callback(f);
|
|
94
|
-
} catch (
|
|
95
|
-
y(f,
|
|
94
|
+
} catch (I) {
|
|
95
|
+
y(f, I);
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
error: (f) => {
|
|
@@ -118,21 +118,21 @@ function re(s) {
|
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
120
|
function b(e) {
|
|
121
|
-
e.id == null && (e.id =
|
|
121
|
+
e.id == null && (e.id = R()), e.headers == null && (e.headers = {});
|
|
122
122
|
const o = e.headers;
|
|
123
123
|
o.publishedAt = V();
|
|
124
124
|
const t = String(e.address.channel);
|
|
125
125
|
e.address.group == null && (e.address.group = v);
|
|
126
126
|
const n = String(e.address.group);
|
|
127
|
-
return
|
|
127
|
+
return S(t, n).next(e), Promise.resolve(e);
|
|
128
128
|
}
|
|
129
|
-
function
|
|
129
|
+
function _(e) {
|
|
130
130
|
p(e);
|
|
131
131
|
}
|
|
132
|
-
function
|
|
133
|
-
const o = e.options?.timeout == null ?
|
|
132
|
+
function x(e) {
|
|
133
|
+
const o = e.options?.timeout == null ? k : e.options?.timeout;
|
|
134
134
|
let t = !1;
|
|
135
|
-
return Promise.race([
|
|
135
|
+
return Promise.race([O(o, () => new T()), new Promise((n, r) => {
|
|
136
136
|
try {
|
|
137
137
|
const i = e.options?.abortSignal;
|
|
138
138
|
let l = null;
|
|
@@ -168,7 +168,7 @@ function re(s) {
|
|
|
168
168
|
}
|
|
169
169
|
})]);
|
|
170
170
|
}
|
|
171
|
-
function
|
|
171
|
+
function B(e) {
|
|
172
172
|
const o = {
|
|
173
173
|
...e,
|
|
174
174
|
callback: async (t) => {
|
|
@@ -180,7 +180,7 @@ function re(s) {
|
|
|
180
180
|
}, r = await Promise.resolve(e.callback(t, n)), i = {
|
|
181
181
|
address: {
|
|
182
182
|
channel: t.address.channel,
|
|
183
|
-
group:
|
|
183
|
+
group: $,
|
|
184
184
|
topic: t.address.topic
|
|
185
185
|
},
|
|
186
186
|
headers: n,
|
|
@@ -195,11 +195,11 @@ function re(s) {
|
|
|
195
195
|
p(o);
|
|
196
196
|
}
|
|
197
197
|
async function C(e) {
|
|
198
|
-
const o =
|
|
198
|
+
const o = R();
|
|
199
199
|
if (e.callback) {
|
|
200
200
|
const n = {
|
|
201
201
|
channel: e.channel,
|
|
202
|
-
group:
|
|
202
|
+
group: $,
|
|
203
203
|
topic: e.topic,
|
|
204
204
|
options: {
|
|
205
205
|
...e.options,
|
|
@@ -229,9 +229,9 @@ function re(s) {
|
|
|
229
229
|
});
|
|
230
230
|
}
|
|
231
231
|
async function A(e) {
|
|
232
|
-
const o = e.options?.timeout == null ?
|
|
232
|
+
const o = e.options?.timeout == null ? k : e.options?.timeout;
|
|
233
233
|
let t = !1;
|
|
234
|
-
return Promise.race([
|
|
234
|
+
return Promise.race([O(o, () => new T()), new Promise((n, r) => {
|
|
235
235
|
try {
|
|
236
236
|
const i = e.options?.abortSignal;
|
|
237
237
|
let l = null;
|
|
@@ -266,18 +266,18 @@ function re(s) {
|
|
|
266
266
|
}
|
|
267
267
|
return {
|
|
268
268
|
config: s,
|
|
269
|
-
on: (e) =>
|
|
270
|
-
once: (e) =>
|
|
269
|
+
on: (e) => _(e),
|
|
270
|
+
once: (e) => x(e),
|
|
271
271
|
stream: (e) => {
|
|
272
272
|
throw new Error("Not implemented");
|
|
273
273
|
},
|
|
274
|
-
provide: (e) =>
|
|
274
|
+
provide: (e) => B(e),
|
|
275
275
|
send: (e) => C(e),
|
|
276
276
|
request: (e) => A(e)
|
|
277
277
|
};
|
|
278
278
|
}
|
|
279
279
|
export {
|
|
280
|
-
|
|
280
|
+
ie as createMsgBus,
|
|
281
281
|
Q as getMatchTest
|
|
282
282
|
};
|
|
283
283
|
//# sourceMappingURL=core.es.js.map
|
package/dist/core.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.es.js","sources":["../src/core.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 MsgSubParams,\r\n AwaitableMsgSubParams,\r\n MsgProviderParams,\r\n MsgStructNormalized,\r\n $CG_ERROR,\r\n $C_ERROR,\r\n MsgHeaders,\r\n TimeoutError,\r\n MsgAddress,\r\n InStruct,\r\n MsgSenderOptions,\r\n MsgRequestDispatcherParams\r\n} from \"./contracts\";\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 { IsTuple, Skip } from \"@actdim/utico/typeCore\";\r\nimport { pipeFromArray, throttleOp, ThrottleOptions } from \"./util\";\r\nimport { delayError } 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 type MsgRecord = {\r\n msg: Msg<TStructN>;\r\n acked: boolean;\r\n // ackTimestamp\r\n ackedAt?: number;\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: MsgSubParams<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.options?.throttle, scheduler);\r\n\r\n applyDebounce(ops, channelConfig?.debounce, scheduler);\r\n\r\n applyDebounce(ops, params.options?.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.options?.fetchCount) {\r\n ops.push(takeOp(params.options.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.options?.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 // TODO: implement backpressure via signal after 'ack' or msg from out signal\r\n return Promise.resolve(msg);\r\n }\r\n\r\n function on(params: MsgSubParams<TStructN>) {\r\n subscribe(params);\r\n }\r\n\r\n function once(params: AwaitableMsgSubParams<TStructN>) {\r\n const timeout = params.options?.timeout == undefined ? DEFAULT_PROMISE_TIMEOUT : params.options?.timeout;\r\n let settled = false;\r\n return Promise.race([delayError(timeout, () => new TimeoutError()), new Promise<any>((res, rej) => {\r\n try {\r\n const abortSignal = params.options?.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: MsgSubParams<TStructN> = {\r\n ...params,\r\n ...{\r\n options: {\r\n ...params.options,\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: MsgSubParams<TStructN> = {\r\n ...params,\r\n ...{\r\n callback: async (msgIn) => {\r\n try {\r\n const headers = {\r\n ...msgIn.headers,\r\n ...params.headers,\r\n requestId: msgIn.id,\r\n }\r\n const payload = (await Promise.resolve(params.callback(msgIn, headers)));\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: headers,\r\n payload: payload\r\n };\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 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 options?: MsgSenderOptions;\r\n filter?: (msg: Msg<TStruct, TChannel, TGroup, THeaders>) => boolean;\r\n headers?: THeaders;\r\n callback?: (msg: Msg<TStruct, TChannel, typeof $CG_OUT, THeaders>) => void;\r\n };\r\n\r\n async function dispatch(params: MsgDispatcherParams<TStructN>) {\r\n const msgId = uuid();\r\n if (params.callback) {\r\n const subParams: MsgSubParams<TStructN, keyof TStructN, typeof $CG_OUT> = {\r\n channel: params.channel,\r\n group: $CG_OUT,\r\n topic: params.topic,\r\n options: {\r\n ...params.options,\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 await 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 request(params: MsgRequestDispatcherParams<TStructN>): Promise<any> {\r\n const timeout = params.options?.timeout == undefined ? DEFAULT_PROMISE_TIMEOUT : params.options?.timeout;\r\n let settled = false;\r\n return Promise.race([delayError(timeout, () => new TimeoutError()), new Promise((res, rej) => {\r\n try {\r\n const abortSignal = params.options?.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 MsgSubParams<TStructN>),\r\n once: (params) => once(params as AwaitableMsgSubParams<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 send: (params) => dispatch(params as MsgDispatcherParams<TStructN>),\r\n request: (params) => request(params as MsgRequestDispatcherParams<TStructN>),\r\n };\r\n\r\n // msgBus[\"#subjects\"] = subjects;\r\n\r\n return msgBus;\r\n}\r\n\r\n// TODO: support stream\r\n// TODO: support persistence\r\n// TODO: support unsubscribe (abort) alias (like in hooks)\r\n// TODO: support msg ack via custom RepeatSubject and MsgRecord: (no acked messages in queue, auto ack on publish to \"out\" channel)\r\n// TODO: support rate limiting (single channel) and backpressure (for \"in\" and \"out\" channel pair), real send promise\r\n// TODO: support TTL, maxBufferLength\r\n/*\r\nclass RepeatSubject<T> {\r\n private buffer: Msg<T>[] = [];\r\n private subject = new Subject<Msg<T>>();\r\n\r\n next(msg: Msg<T>) {\r\n this.buffer.push(msg);\r\n this.subject.next(msg);\r\n }\r\n\r\n subscribe(\r\n observer: (msg: Msg<T>) => void,\r\n filterFn?: (msg: Msg<T>) => boolean\r\n ) { \r\n this.buffer.filter(filterFn ?? (() => true)).forEach(observer);\r\n \r\n return this.subject.subscribe(observer);\r\n }\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","once","timeout","settled","delayError","TimeoutError","res","rej","cleanup","onAbort","subParams","provide","msgIn","payload","msgOut","$CG_OUT","dispatch","msgId","args","request","dispatchParams"],"mappings":";;;;;;AA4BO,MAAMA,IAAe,CAACC,MAAoB;AAC7C,MAAIA,KAAW;AAEX,WAAO,CAACC,MAAkBA,KAASD;AAEvC,MAAIA,EAAQ,WAAW,GAAG,KAAKA,EAAQ,SAAS,GAAG,GAAG;AAClD,IAAAA,IAAUA,EAAQ,UAAU,GAAGA,EAAQ,SAAS,CAAC;AACjD,UAAME,IAAS,IAAI,OAAOF,CAAO;AACjC,WAAO,CAACC,MAAkBC,EAAO,KAAKD,CAAK;AAAA,EAC/C;AACI,WAAO,CAACA,MAAkBD,MAAYC;AAE9C,GAEME,IAA0B,MAAO,KAAK;AAK5C,SAASC,IAAM;AACX,SAAO,KAAK,IAAA;AAChB;AAGA,MAAMC,IAAc;AACb,SAASC,GAAkFC,GAAqD;AAInJ,QAAMC,IAAW,UACXC,IAA2BC;AAEjC,WAASC,EAAWC,GAAoB;AACpC,WAAO;AAAA,MACH,IAAIA,EAAI;AAAA,MACR,SAASA,EAAI;AAAA,MACb,SAASA,EAAI;AAAA,IAAA;AAAA,EAErB;AAEA,WAASC,EAAYC,GAAuBC,GAAU;AAClD,UAAMC,IAAa;AAAA,MACf,OAAOD;AAAA,MACP,QAAQJ,EAAWG,CAAM;AAAA,IAAA;AAE7B,QAAIG;AACJ,IAAAA,IAAS;AAAA,MACL,SAAS;AAAA,QACL,SAASH,EAAO,QAAQ;AAAA,QACxB,OAAOI;AAAA,QACP,OAAOV;AAAA,MAAA;AAAA,MAEX,SAASQ;AAAA,IAAA,GAEbG,EAAQF,CAAM,GACdA,IAAS;AAAA,MACL,SAAS;AAAA,QACL,SAASG;AAAA,QACT,OAAOC;AAAA,QACP,OAAOb;AAAA,MAAA;AAAA,MAEX,SAASQ;AAAA,IAAA,GAEbG,EAAQF,CAAM;AAAA,EAElB;AAEA,QAAMK,wBAAoD,IAAA;AAE1D,WAASC,EAAiBC,GAAiBC,GAAe;AACtD,WAAO,GAAGD,CAAO,GAAGnB,CAAW,GAAGoB,CAAK;AAAA,EAC3C;AASA,WAASC,EAAmBF,GAAiBC,GAAuC;AAChF,UAAME,IAAaJ,EAAiBC,GAASC,CAAK;AAElD,QAAI,CAACH,EAAS,IAAIK,CAAU,GAAG;AAC3B,UAAIC,IAAkC;AACtC,YAAMC,IAAgBtB,IAASiB,CAAO;AACtC,MAAIK,MACIA,EAAc,oBAAoB,QAAaA,EAAc,oBAAoB,UACjFD,IAAU,IAAIE,EAA6BD,EAAc,oBAAoB,OAAY,QAAWA,EAAc,kBAAkBA,EAAc,oBAAoB,OAAY,QAAWA,EAAc,gBAAgB,IAG9ND,MACDA,IAAU,IAAIG,EAAA,IAElBT,EAAS;AAAA,QAAIK;AAAA,QACTC;AAAA,MAAA;AAAA,IAER;AACA,WAAON,EAAS,IAAIK,CAAU;AAAA,EAClC;AAEA,WAASK,EAAcC,GAAmCC,GAA+DzB,GAA2B;AAChJ,QAAIyB,KAAY,MAAW;AACvB,UAAIC,GACAC,IAA2B,EAAE,SAAS,IAAM,UAAU,GAAA;AAC1D,MAAI,OAAOF,KAAa,WACpBC,IAAWD,KAEXC,IAAWD,EAAS,UACpBE,EAAQ,UAAUF,EAAS,SAC3BE,EAAQ,WAAWF,EAAS,WAEhCD,EAAI,KAAKI,EAAWF,GAAUC,GAAS3B,CAAS,CAAC;AAAA,IACrD;AAAA,EACJ;AAEA,WAAS6B,EAAcL,GAAmCE,GAAmB1B,GAA2B;AACpG,IAAI0B,KAAY,QACZF,EAAI,KAAKM,EAAWJ,GAAU1B,CAAS,CAAC;AAAA,EAEhD;AAEA,WAAS+B,EAAUC,GAAgC;AAG/C,UAAMjB,IAAU,OAAOiB,EAAO,OAAO,GAE/BhB,IAAQgB,EAAO,SAAS,OAAYpB,IAAS,OAAOoB,EAAO,KAAK,GAEhEb,IAAUF,EAAmBF,GAASC,CAAK,GAE3CiB,IAAQ3C,EAAa0C,EAAO,KAAK,GAEjCE,IAA+CC;AAAAA,MACjD,CAAChC;AAAA;AAAA;AAAA,QAGG8B,EAAM9B,EAAI,QAAQ,KAAK,MAAM,CAAC6B,EAAO,UAAUA,EAAO,OAAO7B,CAAG;AAAA;AAAA,IAAA;AAGxE,QAAIiC;AAEJ,UAAMZ,IAAoC,CAAA;AAE1C,IAAAA,EAAI,KAAKU,CAAG;AAEZ,UAAMd,IAAgBtB,IAASiB,CAAO;AAEtC,IAAAQ,EAAcC,GAAKJ,GAAe,UAAUpB,CAAS,GAErDuB,EAAcC,GAAKQ,EAAO,SAAS,UAAUhC,CAAS,GAEtD6B,EAAcL,GAAKJ,GAAe,UAAUpB,CAAS,GAErD6B,EAAcL,GAAKQ,EAAO,SAAS,UAAUhC,CAAS,GAElDoB,GAAe,SACfI,EAAI,KAAKa,EAAQjB,EAAc,OAAOpB,CAAS,CAAC,GAGhDA,KACAwB,EAAI,KAAKc,EAAUtC,CAAS,CAAC,GAG7BgC,EAAO,SAAS,cAChBR,EAAI,KAAKe,EAAOP,EAAO,QAAQ,UAAU,CAAC,GAG9CI,IAAaI,EAAchB,CAAG,EAAEL,CAAO;AAIvC,UAAMsB,IAAML,EAAW,UAAU;AAAA,MAC7B,MAAM,CAACjC,MAAuB;AAC1B,YAAI;AACA,iBAAO6B,EAAO,SAAS7B,CAAG;AAAA,QAC9B,SAASG,GAAK;AACV,UAAAF,EAAYD,GAAKG,CAAG;AAAA,QAExB;AAAA,MACJ;AAAA,MACA,OAAO,CAACA,MAAQ;AACZ,QAAAF;AAAA,UACI;AAAA,YACI,SAAS;AAAA,cACL,SAAAW;AAAA,cACA,OAAAC;AAAA,cACA,OAAOgB,EAAO;AAAA,YAAA;AAAA,UAClB;AAAA,UAEJ1B;AAAA,QAAA;AAAA,MAER;AAAA,MACA,UAAU,MAAM;AAAA,MAEhB;AAAA,IAAA,CACH,GAEKoC,IAAcV,EAAO,SAAS;AACpC,IAAAU,GAAa,iBAAiB,SAAS,CAACC,MAAM;AAE1C,cAAQ;AAAA,QACJ,kCAAkC5B,CAAO,YAAYC,CAAK,YAAYgB,EAAO,KAAK,aAAaU,EAAY,MAAM;AAAA;AAAA,MAAA,GAErHD,EAAI,YAAA;AAAA,IACR,CAAC;AAAA,EACL;AAEA,WAAS/B,EAAQP,GAAoB;AACjC,IAAIA,EAAI,MAAM,SACVA,EAAI,KAAKyC,EAAA,IAETzC,EAAI,WAAW,SACfA,EAAI,UAAU,CAAA;AAElB,UAAM0C,IAAU1C,EAAI;AACpB,IAAA0C,EAAQ,cAAclD,EAAA;AACtB,UAAMoB,IAAU,OAAOZ,EAAI,QAAQ,OAAO;AAC1C,IAAIA,EAAI,QAAQ,SAAS,SACrBA,EAAI,QAAQ,QAAQS;AAExB,UAAMI,IAAQ,OAAOb,EAAI,QAAQ,KAAK;AAEtC,WADgBc,EAAmBF,GAASC,CAAK,EACzC,KAAKb,CAAG,GAET,QAAQ,QAAQA,CAAG;AAAA,EAC9B;AAEA,WAAS2C,EAAGd,GAAgC;AACxC,IAAAD,EAAUC,CAAM;AAAA,EACpB;AAEA,WAASe,EAAKf,GAAyC;AACnD,UAAMgB,IAAUhB,EAAO,SAAS,WAAW,OAAYtC,IAA0BsC,EAAO,SAAS;AACjG,QAAIiB,IAAU;AACd,WAAO,QAAQ,KAAK,CAACC,EAAWF,GAAS,MAAM,IAAIG,EAAA,CAAc,GAAG,IAAI,QAAa,CAACC,GAAKC,MAAQ;AAC/F,UAAI;AACA,cAAMX,IAAcV,EAAO,SAAS;AACpC,YAAIsB,IAAsB;AAE1B,YAAIZ,GAAa;AACb,cAAIa,IAAsB;AAC1B,UAAAD,IAAU,MAAM;AACZ,YAAAZ,EAAY,oBAAoB,SAASa,CAAO;AAAA,UACpD,GACAA,IAAU,MAAM;AACZ,YAAIN,MAGJA,IAAU,IACVK,EAAA,GACAD,EAAI,IAAI,MAAM,aAAa,EAAE,OAAOX,EAAY,OAAA,CAAQ,CAAC;AAAA,UAC7D,GACAA,EAAY,iBAAiB,SAASa,CAAO;AAAA,QACjD;AAEA,cAAMC,IAAoC;AAAA,UACtC,GAAGxB;AAAA,UAEC,SAAS;AAAA,YACL,GAAGA,EAAO;AAAA,YAEN,YAAY;AAAA,UAChB;AAAA,UAEJ,UAAU,CAAC7B,MAAQ;AACf,gBAAI;AACA,kBAAI8C;AACA;AAEJ,cAAAA,IAAU,IACVK,IAAA,GAEAF,EAAIjD,CAAG;AAAA,YACX,SAASG,GAAK;AACV,kBAAI2C;AACA;AAEJ,cAAAA,IAAU,IACVK,IAAA,GACAD,EAAI/C,CAAG;AAAA,YACX;AAAA,UACJ;AAAA,QACJ;AAEJ,QAAAyB,EAAUyB,CAAS;AAAA,MACvB,SAASb,GAAG;AACR,QAAAU,EAAIV,CAAC;AAAA,MACT;AAAA,IACJ,CAAC,CAAC,CAAC;AAAA,EACP;AAEA,WAASc,EAAQzB,GAAqC;AAClD,UAAMwB,IAAoC;AAAA,MACtC,GAAGxB;AAAA,MAEC,UAAU,OAAO0B,MAAU;AACvB,YAAI;AACA,gBAAMb,IAAU;AAAA,YACZ,GAAGa,EAAM;AAAA,YACT,GAAG1B,EAAO;AAAA,YACV,WAAW0B,EAAM;AAAA,UAAA,GAEfC,IAAW,MAAM,QAAQ,QAAQ3B,EAAO,SAAS0B,GAAOb,CAAO,CAAC,GAChEe,IAAwD;AAAA,YAC1D,SAAS;AAAA,cACL,SAASF,EAAM,QAAQ;AAAA,cACvB,OAAOG;AAAA,cACP,OAAOH,EAAM,QAAQ;AAAA,YAAA;AAAA,YAEzB,SAAAb;AAAA,YACA,SAAAc;AAAA,UAAA;AAEJ,UAAAjD,EAAQkD,CAAM;AAAA,QAClB,SAAStD,GAAK;AACV,UAAAF,EAAYsD,GAAOpD,CAAG;AAAA,QAE1B;AAAA,MACJ;AAAA,IACJ;AAEJ,IAAAyB,EAAUyB,CAAS;AAAA,EACvB;AAoBA,iBAAeM,EAAS9B,GAAuC;AAC3D,UAAM+B,IAAQnB,EAAA;AACd,QAAIZ,EAAO,UAAU;AACjB,YAAMwB,IAAoE;AAAA,QACtE,SAASxB,EAAO;AAAA,QAChB,OAAO6B;AAAA,QACP,OAAO7B,EAAO;AAAA,QACd,SAAS;AAAA,UACL,GAAGA,EAAO;AAAA,UAEN,YAAY;AAAA,QAChB;AAAA,QAEJ,UAAU,CAAC4B,MAAW;AAElB,UAAA5B,EAAO,SAAS4B,CAAM;AAAA,QAC1B;AAAA,QACA,QAAQ,CAACA,MACEA,EAAO,SAAS,cAAcG,MAAU,CAAC/B,EAAO,UAAUA,EAAO,OAAO4B,CAAM;AAAA,MACzF;AAEJ,MAAA7B,EAAUyB,CAAS;AAAA,IACvB;AACA,QAAIG;AACJ,IAAI3B,EAAO,YACPA,EAAO,UAAU,IAAIgC,MAAS;AAC1B,MAAAL,IAAUK;AAAA,IACd,CAAC,IAEDL,IAAU3B,EAAO,SAErB,MAAMtB,EAAQ;AAAA,MACV,IAAIqD;AAAA,MACJ,SAAS;AAAA,QACL,SAAS/B,EAAO;AAAA,QAChB,OAAOA,EAAO;AAAA,QACd,OAAOA,EAAO;AAAA,MAAA;AAAA,MAElB,SAAS;AAAA,QACL,GAAGA,EAAO;AAAA,MAAA;AAAA,MAEd,SAAA2B;AAAA,IAAA,CACH;AAAA,EACL;AAEA,iBAAeM,EAAQjC,GAA4D;AAC/E,UAAMgB,IAAUhB,EAAO,SAAS,WAAW,OAAYtC,IAA0BsC,EAAO,SAAS;AACjG,QAAIiB,IAAU;AACd,WAAO,QAAQ,KAAK,CAACC,EAAWF,GAAS,MAAM,IAAIG,EAAA,CAAc,GAAG,IAAI,QAAQ,CAACC,GAAKC,MAAQ;AAC1F,UAAI;AACA,cAAMX,IAAcV,EAAO,SAAS;AACpC,YAAIsB,IAAsB;AAE1B,YAAIZ,GAAa;AACb,cAAIa,IAAsB;AAC1B,gBAAMD,IAAU,MAAM;AAClB,YAAAZ,EAAY,oBAAoB,SAASa,CAAO;AAAA,UACpD;AACA,UAAAA,IAAU,MAAM;AACZ,YAAIN,MAGJA,IAAU,IACVK,EAAAA,GACAD,EAAI,IAAI,MAAM,aAAa,EAAE,OAAOX,EAAY,OAAA,CAAQ,CAAC;AAAA,UAC7D,GACAA,EAAY,iBAAiB,SAASa,CAAO;AAAA,QACjD;AAEA,cAAMW,IAAgD;AAAA,UAClD,GAAGlC;AAAA,UACH,UAAU,CAAC7B,MAAQ;AACf,gBAAI;AACA,kBAAI8C;AACA;AAEJ,cAAAA,IAAU,IACVK,IAAA,GACAF,EAAIjD,CAAG;AAAA,YACX,SAASG,GAAK;AACV,kBAAI2C;AACA;AAEJ,cAAAA,IAAU,IACVK,IAAA,GACAD,EAAI/C,CAAG;AAAA,YACX;AAAA,UACJ;AAAA,QAAA;AAEJ,QAAAwD,EAASI,CAAc;AAAA,MAC3B,SAAS5D,GAAK;AACV,QAAA+C,EAAI/C,CAAG;AAAA,MACX;AAAA,IACJ,CAAC,CAAC,CAAC;AAAA,EACP;AAgBA,SAd0C;AAAA,IACtC,QAAAR;AAAA,IACA,IAAI,CAACkC,MAAWc,EAAGd,CAAgC;AAAA,IACnD,MAAM,CAACA,MAAWe,EAAKf,CAAyC;AAAA,IAChE,QAAQ,CAACA,MAAW;AAChB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACrC;AAAA,IACA,SAAS,CAACA,MAAWyB,EAAQzB,CAAqC;AAAA,IAClE,MAAM,CAACA,MAAW8B,EAAS9B,CAAuC;AAAA,IAClE,SAAS,CAACA,MAAWiC,EAAQjC,CAA8C;AAAA,EAAA;AAMnF;"}
|
|
1
|
+
{"version":3,"file":"core.es.js","sources":["../src/core.ts"],"sourcesContent":null,"names":["getMatchTest","pattern","value","regexp","DEFAULT_PROMISE_TIMEOUT","now","groupPrefix","createMsgBus","config","errTopic","$SYSTEM_TOPIC","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","once","timeout","settled","delayError","TimeoutError","res","rej","cleanup","onAbort","subParams","provide","msgIn","payload","msgOut","$CG_OUT","dispatch","msgId","args","request","dispatchParams"],"mappings":"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"}
|
package/dist/util.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.es.js","sources":["../src/util.ts"],"sourcesContent":
|
|
1
|
+
{"version":3,"file":"util.es.js","sources":["../src/util.ts"],"sourcesContent":null,"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;"}
|