@zudojs/messaging 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/dispatcher/dispatcherCore.d.ts +29 -0
- package/dist/dispatcher/dispatcherCore.d.ts.map +1 -0
- package/dist/dispatcher/dispatcherCore.js +117 -0
- package/dist/dispatcher/dispatcherCore.js.map +1 -0
- package/dist/dispatcher/dispatcherType.type.d.ts +83 -0
- package/dist/dispatcher/dispatcherType.type.d.ts.map +1 -0
- package/dist/dispatcher/dispatcherType.type.js +10 -0
- package/dist/dispatcher/dispatcherType.type.js.map +1 -0
- package/dist/dispatcher/index.d.ts +8 -0
- package/dist/dispatcher/index.d.ts.map +1 -0
- package/dist/dispatcher/index.js +7 -0
- package/dist/dispatcher/index.js.map +1 -0
- package/dist/errors/index.d.ts +7 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +7 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/handlerRegistry/handlerRegistryStore.d.ts +32 -0
- package/dist/handlerRegistry/handlerRegistryStore.d.ts.map +1 -0
- package/dist/handlerRegistry/handlerRegistryStore.js +111 -0
- package/dist/handlerRegistry/handlerRegistryStore.js.map +1 -0
- package/dist/handlerRegistry/handlerRegistryType.type.d.ts +41 -0
- package/dist/handlerRegistry/handlerRegistryType.type.d.ts.map +1 -0
- package/dist/handlerRegistry/handlerRegistryType.type.js +11 -0
- package/dist/handlerRegistry/handlerRegistryType.type.js.map +1 -0
- package/dist/handlerRegistry/index.d.ts +8 -0
- package/dist/handlerRegistry/index.d.ts.map +1 -0
- package/dist/handlerRegistry/index.js +7 -0
- package/dist/handlerRegistry/index.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/message/index.d.ts +8 -0
- package/dist/message/index.d.ts.map +1 -0
- package/dist/message/index.js +7 -0
- package/dist/message/index.js.map +1 -0
- package/dist/message/messageFactory.d.ts +36 -0
- package/dist/message/messageFactory.d.ts.map +1 -0
- package/dist/message/messageFactory.js +95 -0
- package/dist/message/messageFactory.js.map +1 -0
- package/dist/message/messageType.type.d.ts +99 -0
- package/dist/message/messageType.type.d.ts.map +1 -0
- package/dist/message/messageType.type.js +11 -0
- package/dist/message/messageType.type.js.map +1 -0
- package/dist/messageBus/index.d.ts +8 -0
- package/dist/messageBus/index.d.ts.map +1 -0
- package/dist/messageBus/index.js +7 -0
- package/dist/messageBus/index.js.map +1 -0
- package/dist/messageBus/messageBusCore.d.ts +36 -0
- package/dist/messageBus/messageBusCore.d.ts.map +1 -0
- package/dist/messageBus/messageBusCore.js +101 -0
- package/dist/messageBus/messageBusCore.js.map +1 -0
- package/dist/messageBus/messageBusType.type.d.ts +83 -0
- package/dist/messageBus/messageBusType.type.d.ts.map +1 -0
- package/dist/messageBus/messageBusType.type.js +10 -0
- package/dist/messageBus/messageBusType.type.js.map +1 -0
- package/dist/messageContext/index.d.ts +8 -0
- package/dist/messageContext/index.d.ts.map +1 -0
- package/dist/messageContext/index.js +7 -0
- package/dist/messageContext/index.js.map +1 -0
- package/dist/messageContext/messageContextType.type.d.ts +52 -0
- package/dist/messageContext/messageContextType.type.d.ts.map +1 -0
- package/dist/messageContext/messageContextType.type.js +28 -0
- package/dist/messageContext/messageContextType.type.js.map +1 -0
- package/dist/messageHandler/index.d.ts +8 -0
- package/dist/messageHandler/index.d.ts.map +1 -0
- package/dist/messageHandler/index.js +7 -0
- package/dist/messageHandler/index.js.map +1 -0
- package/dist/messageHandler/messageHandlerType.type.d.ts +62 -0
- package/dist/messageHandler/messageHandlerType.type.d.ts.map +1 -0
- package/dist/messageHandler/messageHandlerType.type.js +18 -0
- package/dist/messageHandler/messageHandlerType.type.js.map +1 -0
- package/dist/messageMiddleware/index.d.ts +8 -0
- package/dist/messageMiddleware/index.d.ts.map +1 -0
- package/dist/messageMiddleware/index.js +7 -0
- package/dist/messageMiddleware/index.js.map +1 -0
- package/dist/messageMiddleware/messageMiddlewarePipeline.d.ts +13 -0
- package/dist/messageMiddleware/messageMiddlewarePipeline.d.ts.map +1 -0
- package/dist/messageMiddleware/messageMiddlewarePipeline.js +96 -0
- package/dist/messageMiddleware/messageMiddlewarePipeline.js.map +1 -0
- package/dist/messageMiddleware/messageMiddlewareType.type.d.ts +96 -0
- package/dist/messageMiddleware/messageMiddlewareType.type.d.ts.map +1 -0
- package/dist/messageMiddleware/messageMiddlewareType.type.js +10 -0
- package/dist/messageMiddleware/messageMiddlewareType.type.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageFactory.d.ts","sourceRoot":"","sources":["../../src/message/messageFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EAGT,WAAW,EACX,cAAc,EACd,YAAY,EACb,MAAM,uBAAuB,CAAC;AAE/B;;;GAGG;AACH,wBAAgB,eAAe,IAAI,SAAS,CAE3C;AA0BD;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,GAAG,cAAc,EACrD,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAenB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAC3C,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAUnB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAS1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EACrC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GACzB,WAAW,CAEb;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EACxC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GACzB,QAAQ,CAEV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAExD"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message factory functions for creating and manipulating messages.
|
|
3
|
+
*
|
|
4
|
+
* @module message/messageFactory
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Creates a unique message identifier.
|
|
8
|
+
* Returns a branded MessageId type from @zudojs/constants.
|
|
9
|
+
*/
|
|
10
|
+
export function createMessageId() {
|
|
11
|
+
return `msg:${crypto.randomUUID()}`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Normalizes a message timestamp.
|
|
15
|
+
*/
|
|
16
|
+
function normalizeTimestamp(timestamp) {
|
|
17
|
+
if (timestamp instanceof Date)
|
|
18
|
+
return new Date(timestamp.getTime());
|
|
19
|
+
if (typeof timestamp === "number") {
|
|
20
|
+
const date = new Date(timestamp);
|
|
21
|
+
if (Number.isNaN(date.getTime()))
|
|
22
|
+
throw new TypeError("Invalid message timestamp.");
|
|
23
|
+
return date;
|
|
24
|
+
}
|
|
25
|
+
return new Date();
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Freezes message metadata.
|
|
29
|
+
*/
|
|
30
|
+
function normalizeMetadata(metadata) {
|
|
31
|
+
if (metadata === undefined)
|
|
32
|
+
return undefined;
|
|
33
|
+
return Object.freeze({ ...metadata });
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Creates an immutable message.
|
|
37
|
+
*/
|
|
38
|
+
export function createMessage(input) {
|
|
39
|
+
if (typeof input.type !== "string" || input.type.trim().length === 0) {
|
|
40
|
+
throw new TypeError("Message type must be a non-empty string.");
|
|
41
|
+
}
|
|
42
|
+
return Object.freeze({
|
|
43
|
+
id: input.id ?? createMessageId(),
|
|
44
|
+
type: input.type,
|
|
45
|
+
payload: input.payload,
|
|
46
|
+
timestamp: normalizeTimestamp(input.timestamp),
|
|
47
|
+
source: input.source,
|
|
48
|
+
correlationId: input.correlationId,
|
|
49
|
+
causationId: input.causationId,
|
|
50
|
+
metadata: normalizeMetadata(input.metadata),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Creates a derived message while preserving correlation.
|
|
55
|
+
*/
|
|
56
|
+
export function createDerivedMessage(sourceMessage, input) {
|
|
57
|
+
return createMessage({
|
|
58
|
+
...input,
|
|
59
|
+
correlationId: input.correlationId ??
|
|
60
|
+
sourceMessage.correlationId ??
|
|
61
|
+
sourceMessage.id,
|
|
62
|
+
causationId: input.causationId ?? sourceMessage.id,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Determines whether an unknown value satisfies the Message contract.
|
|
67
|
+
*/
|
|
68
|
+
export function isMessage(value) {
|
|
69
|
+
if (typeof value !== "object" || value === null)
|
|
70
|
+
return false;
|
|
71
|
+
const candidate = value;
|
|
72
|
+
return (typeof candidate.id === "string" &&
|
|
73
|
+
typeof candidate.type === "string" &&
|
|
74
|
+
candidate.timestamp instanceof Date &&
|
|
75
|
+
"payload" in candidate);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Returns the message type.
|
|
79
|
+
*/
|
|
80
|
+
export function getMessageType(message) {
|
|
81
|
+
return message.type;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Returns the message payload.
|
|
85
|
+
*/
|
|
86
|
+
export function getMessagePayload(message) {
|
|
87
|
+
return message.payload;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Returns a human-readable message description.
|
|
91
|
+
*/
|
|
92
|
+
export function describeMessage(message) {
|
|
93
|
+
return `${message.type} (${message.id})`;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=messageFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageFactory.js","sourceRoot":"","sources":["../../src/message/messageFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core message type definitions for Zudojs.
|
|
3
|
+
*
|
|
4
|
+
* Messages are the fundamental unit of communication in the
|
|
5
|
+
* messaging infrastructure. They carry type information, a
|
|
6
|
+
* unique identity, and an arbitrary payload.
|
|
7
|
+
*
|
|
8
|
+
* @module message/messageType
|
|
9
|
+
*/
|
|
10
|
+
import type { MessageId as BaseEntityMessageId, CorrelationId as BaseCorrelationId, MessageCausationId as BaseEntityCausationId } from "@zudojs/constants";
|
|
11
|
+
/**
|
|
12
|
+
* Unique identifier for a message instance.
|
|
13
|
+
* Re-exported from @zudojs/constants for type safety.
|
|
14
|
+
*/
|
|
15
|
+
export type MessageId = BaseEntityMessageId;
|
|
16
|
+
/**
|
|
17
|
+
* Message type identifier.
|
|
18
|
+
*
|
|
19
|
+
* Examples:
|
|
20
|
+
* - "order.created"
|
|
21
|
+
* - "user.registered"
|
|
22
|
+
* - "getInventory"
|
|
23
|
+
*/
|
|
24
|
+
export type MessageType = string;
|
|
25
|
+
/**
|
|
26
|
+
* Message timestamp.
|
|
27
|
+
*/
|
|
28
|
+
export type MessageTimestamp = Date;
|
|
29
|
+
/**
|
|
30
|
+
* Message source identifier.
|
|
31
|
+
*
|
|
32
|
+
* Identifies the subsystem that produced the message.
|
|
33
|
+
*/
|
|
34
|
+
export type MessageSource = string;
|
|
35
|
+
/**
|
|
36
|
+
* Correlation identifier.
|
|
37
|
+
*
|
|
38
|
+
* Useful for connecting multiple messages belonging to the
|
|
39
|
+
* same operation/request/workflow.
|
|
40
|
+
* Re-exported from @zudojs/constants for type safety.
|
|
41
|
+
*/
|
|
42
|
+
export type MessageCorrelationId = BaseCorrelationId;
|
|
43
|
+
/**
|
|
44
|
+
* Causation identifier.
|
|
45
|
+
*
|
|
46
|
+
* Identifies the message or operation that caused this message.
|
|
47
|
+
* Re-exported from @zudojs/constants for type safety.
|
|
48
|
+
*/
|
|
49
|
+
export type MessageCausationId = BaseEntityCausationId;
|
|
50
|
+
/**
|
|
51
|
+
* Generic message payload.
|
|
52
|
+
*/
|
|
53
|
+
export type MessagePayload = unknown;
|
|
54
|
+
/**
|
|
55
|
+
* Base message contract.
|
|
56
|
+
*
|
|
57
|
+
* Every Zudojs message must contain a type, unique identifier,
|
|
58
|
+
* timestamp, and payload.
|
|
59
|
+
*/
|
|
60
|
+
export interface Message<TPayload = MessagePayload> {
|
|
61
|
+
/** Unique message identifier. */
|
|
62
|
+
readonly id: MessageId;
|
|
63
|
+
/** Message type. */
|
|
64
|
+
readonly type: MessageType;
|
|
65
|
+
/** Message payload. */
|
|
66
|
+
readonly payload: TPayload;
|
|
67
|
+
/** Time at which the message was created. */
|
|
68
|
+
readonly timestamp: MessageTimestamp;
|
|
69
|
+
/** Optional source subsystem. */
|
|
70
|
+
readonly source?: MessageSource;
|
|
71
|
+
/** Optional correlation identifier. */
|
|
72
|
+
readonly correlationId?: MessageCorrelationId;
|
|
73
|
+
/** Optional causation identifier. */
|
|
74
|
+
readonly causationId?: MessageCausationId;
|
|
75
|
+
/** Optional message metadata. */
|
|
76
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Input used to create a message.
|
|
80
|
+
*/
|
|
81
|
+
export interface MessageInput<TPayload = MessagePayload> {
|
|
82
|
+
/** Optional message identifier. */
|
|
83
|
+
readonly id?: MessageId;
|
|
84
|
+
/** Message type. */
|
|
85
|
+
readonly type: MessageType;
|
|
86
|
+
/** Message payload. */
|
|
87
|
+
readonly payload: TPayload;
|
|
88
|
+
/** Optional timestamp. */
|
|
89
|
+
readonly timestamp?: MessageTimestamp | number;
|
|
90
|
+
/** Optional source subsystem. */
|
|
91
|
+
readonly source?: MessageSource;
|
|
92
|
+
/** Optional correlation identifier. */
|
|
93
|
+
readonly correlationId?: MessageCorrelationId;
|
|
94
|
+
/** Optional causation identifier. */
|
|
95
|
+
readonly causationId?: MessageCausationId;
|
|
96
|
+
/** Optional message metadata. */
|
|
97
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=messageType.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageType.type.d.ts","sourceRoot":"","sources":["../../src/message/messageType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,SAAS,IAAI,mBAAmB,EAChC,aAAa,IAAI,iBAAiB,EAClC,kBAAkB,IAAI,qBAAqB,EAC5C,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,mBAAmB,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAEpC;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;AAErC;;;;;GAKG;AACH,MAAM,WAAW,OAAO,CAAC,QAAQ,GAAG,cAAc;IAChD,iCAAiC;IACjC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IAEvB,oBAAoB;IACpB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B,uBAAuB;IACvB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAE3B,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IAErC,iCAAiC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAEhC,uCAAuC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAE9C,qCAAqC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAE1C,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,QAAQ,GAAG,cAAc;IACrD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;IAExB,oBAAoB;IACpB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B,uBAAuB;IACvB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAE3B,0BAA0B;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAE/C,iCAAiC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAEhC,uCAAuC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAE9C,qCAAqC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAE1C,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core message type definitions for Zudojs.
|
|
3
|
+
*
|
|
4
|
+
* Messages are the fundamental unit of communication in the
|
|
5
|
+
* messaging infrastructure. They carry type information, a
|
|
6
|
+
* unique identity, and an arbitrary payload.
|
|
7
|
+
*
|
|
8
|
+
* @module message/messageType
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=messageType.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageType.type.js","sourceRoot":"","sources":["../../src/message/messageType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/messaging/messageBus
|
|
3
|
+
*
|
|
4
|
+
* MessageBus interface and in-memory implementation.
|
|
5
|
+
*/
|
|
6
|
+
export type { MessageBusOptions, MessageBus } from "./messageBusType.type.js";
|
|
7
|
+
export { InMemoryMessageBus, createMessageBus } from "./messageBusCore.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messageBus/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messageBus/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory message bus implementation.
|
|
3
|
+
*
|
|
4
|
+
* @module messageBus/messageBusCore
|
|
5
|
+
*/
|
|
6
|
+
import type { Message, MessageInput } from "../message/messageType.type.js";
|
|
7
|
+
import type { MessageHandler, NamedMessageHandler } from "../messageHandler/messageHandlerType.type.js";
|
|
8
|
+
import type { MessageMiddlewareLike } from "../messageMiddleware/messageMiddlewareType.type.js";
|
|
9
|
+
import type { MessageBus, MessageBusOptions } from "./messageBusType.type.js";
|
|
10
|
+
import type { DispatchResult, DispatchOptions } from "../dispatcher/dispatcherType.type.js";
|
|
11
|
+
/** Default in-memory message bus. */
|
|
12
|
+
export declare class InMemoryMessageBus implements MessageBus {
|
|
13
|
+
private readonly dispatcher;
|
|
14
|
+
private readonly registry;
|
|
15
|
+
private readonly defaultTimeout;
|
|
16
|
+
private _disposed;
|
|
17
|
+
constructor(options?: MessageBusOptions);
|
|
18
|
+
private registerGlobalMiddleware;
|
|
19
|
+
dispatch<TPayload, TResult>(message: Message<TPayload>, options?: DispatchOptions<TResult>): Promise<DispatchResult<TResult>>;
|
|
20
|
+
private validateNotDisposed;
|
|
21
|
+
private dispatchWithTimeout;
|
|
22
|
+
send<TPayload, TResult>(input: MessageInput<TPayload>, options?: DispatchOptions<TResult>): Promise<DispatchResult<TResult>>;
|
|
23
|
+
on<TPayload, TResult>(messageType: string, handler: MessageHandler<Message<TPayload>, TResult>, options?: {
|
|
24
|
+
id?: string;
|
|
25
|
+
priority?: number;
|
|
26
|
+
}): void;
|
|
27
|
+
addHandler<TMessage extends Message, TResult>(handler: NamedMessageHandler<TMessage, TResult>): void;
|
|
28
|
+
off(handlerId: string): boolean;
|
|
29
|
+
use<TMessage extends Message = Message, TResult = unknown>(middleware: MessageMiddlewareLike<TMessage, TResult>): void;
|
|
30
|
+
hasHandlers(messageType: string): boolean;
|
|
31
|
+
get handlerCount(): number;
|
|
32
|
+
dispose(): void;
|
|
33
|
+
get disposed(): boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare function createMessageBus(options?: MessageBusOptions): MessageBus;
|
|
36
|
+
//# sourceMappingURL=messageBusCore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageBusCore.d.ts","sourceRoot":"","sources":["../../src/messageBus/messageBusCore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACpB,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAEhG,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAChB,MAAM,sCAAsC,CAAC;AAO9C,qCAAqC;AACrC,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,SAAS,CAAS;IAE1B,YAAY,OAAO,GAAE,iBAAsB,EAQ1C;IAED,OAAO,CAAC,wBAAwB;IAQ1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAC9B,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,OAAO,GAAE,eAAe,CAAC,OAAO,CAAM,GACrC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAYlC;IAED,OAAO,CAAC,mBAAmB;YASb,mBAAmB;IAoB3B,IAAI,CAAC,QAAQ,EAAE,OAAO,EAC1B,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC7B,OAAO,GAAE,eAAe,CAAC,OAAO,CAAM,GACrC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAElC;IAED,EAAE,CAAC,QAAQ,EAAE,OAAO,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EACnD,OAAO,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/C,IAAI,CAWN;IAED,UAAU,CAAC,QAAQ,SAAS,OAAO,EAAE,OAAO,EAC1C,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAC9C,IAAI,CAEN;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE9B;IAED,GAAG,CAAC,QAAQ,SAAS,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACvD,UAAU,EAAE,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,GACnD,IAAI,CAEN;IAED,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAExC;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,OAAO,IAAI,IAAI,CAId;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;CACF;AACD,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAExE"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory message bus implementation.
|
|
3
|
+
*
|
|
4
|
+
* @module messageBus/messageBusCore
|
|
5
|
+
*/
|
|
6
|
+
import { createMessage } from "../message/messageFactory.js";
|
|
7
|
+
import { HandlerRegistryStore } from "../handlerRegistry/handlerRegistryStore.js";
|
|
8
|
+
import { DefaultDispatcher } from "../dispatcher/dispatcherCore.js";
|
|
9
|
+
import { MessageDispatchError } from "@zudojs/errors";
|
|
10
|
+
/** Default in-memory message bus. */
|
|
11
|
+
export class InMemoryMessageBus {
|
|
12
|
+
dispatcher;
|
|
13
|
+
registry;
|
|
14
|
+
defaultTimeout;
|
|
15
|
+
_disposed = false;
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
this.registry = new HandlerRegistryStore({
|
|
18
|
+
allowDuplicateHandlerIds: options.allowDuplicateHandlers ?? false,
|
|
19
|
+
allowMultipleHandlers: options.allowMultipleHandlers ?? true,
|
|
20
|
+
});
|
|
21
|
+
this.dispatcher = new DefaultDispatcher(this.registry);
|
|
22
|
+
this.defaultTimeout = options.defaultTimeout ?? 0;
|
|
23
|
+
this.registerGlobalMiddleware(options.middleware);
|
|
24
|
+
}
|
|
25
|
+
registerGlobalMiddleware(middleware) {
|
|
26
|
+
if (middleware !== undefined) {
|
|
27
|
+
for (const mw of middleware)
|
|
28
|
+
this.dispatcher.use(mw);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async dispatch(message, options = {}) {
|
|
32
|
+
this.validateNotDisposed(message);
|
|
33
|
+
const timeout = options.timeout ?? this.defaultTimeout;
|
|
34
|
+
const dispatchOptions = { ...options, timeout };
|
|
35
|
+
if (timeout > 0) {
|
|
36
|
+
return this.dispatchWithTimeout(message, dispatchOptions);
|
|
37
|
+
}
|
|
38
|
+
return this.dispatcher.dispatch(message, dispatchOptions);
|
|
39
|
+
}
|
|
40
|
+
validateNotDisposed(message) {
|
|
41
|
+
if (this._disposed) {
|
|
42
|
+
throw new MessageDispatchError(message.type, "Message bus has been disposed.");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async dispatchWithTimeout(message, options) {
|
|
46
|
+
const controller = new AbortController();
|
|
47
|
+
const timeoutId = setTimeout(() => controller.abort(), options.timeout ?? 0);
|
|
48
|
+
try {
|
|
49
|
+
const result = await this.dispatcher.dispatch(message, {
|
|
50
|
+
...options,
|
|
51
|
+
signal: controller.signal,
|
|
52
|
+
});
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
clearTimeout(timeoutId);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async send(input, options = {}) {
|
|
60
|
+
return this.dispatch(createMessage(input), options);
|
|
61
|
+
}
|
|
62
|
+
on(messageType, handler, options = {}) {
|
|
63
|
+
const id = options.id ?? `handler:${messageType}:${Date.now()}`;
|
|
64
|
+
const namedHandler = {
|
|
65
|
+
id,
|
|
66
|
+
name: id,
|
|
67
|
+
handler,
|
|
68
|
+
messageTypes: [messageType],
|
|
69
|
+
priority: options.priority ?? 100,
|
|
70
|
+
enabled: true,
|
|
71
|
+
};
|
|
72
|
+
this.registry.register(namedHandler);
|
|
73
|
+
}
|
|
74
|
+
addHandler(handler) {
|
|
75
|
+
this.registry.register(handler);
|
|
76
|
+
}
|
|
77
|
+
off(handlerId) {
|
|
78
|
+
return this.registry.unregister(handlerId);
|
|
79
|
+
}
|
|
80
|
+
use(middleware) {
|
|
81
|
+
this.dispatcher.use(middleware);
|
|
82
|
+
}
|
|
83
|
+
hasHandlers(messageType) {
|
|
84
|
+
return this.registry.resolve(messageType).length > 0;
|
|
85
|
+
}
|
|
86
|
+
get handlerCount() {
|
|
87
|
+
return this.registry.size;
|
|
88
|
+
}
|
|
89
|
+
dispose() {
|
|
90
|
+
this._disposed = true;
|
|
91
|
+
this.registry.clear();
|
|
92
|
+
this.dispatcher.dispose();
|
|
93
|
+
}
|
|
94
|
+
get disposed() {
|
|
95
|
+
return this._disposed;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export function createMessageBus(options) {
|
|
99
|
+
return new InMemoryMessageBus(options);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=messageBusCore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageBusCore.js","sourceRoot":"","sources":["../../src/messageBus/messageBusCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MessageBus type definitions for Zudojs.
|
|
3
|
+
*
|
|
4
|
+
* The bus is the primary API surface for sending messages.
|
|
5
|
+
* It wraps the dispatcher with publish semantics.
|
|
6
|
+
*
|
|
7
|
+
* @module messageBus/messageBusType
|
|
8
|
+
*/
|
|
9
|
+
import type { Message, MessageInput } from "../message/messageType.type.js";
|
|
10
|
+
import type { MessageHandler, NamedMessageHandler } from "../messageHandler/messageHandlerType.type.js";
|
|
11
|
+
import type { MessageMiddlewareLike } from "../messageMiddleware/messageMiddlewareType.type.js";
|
|
12
|
+
import type { DispatchResult, DispatchOptions } from "../dispatcher/dispatcherType.type.js";
|
|
13
|
+
/**
|
|
14
|
+
* Options for creating a message bus.
|
|
15
|
+
*/
|
|
16
|
+
export interface MessageBusOptions {
|
|
17
|
+
/** Allow duplicate handler IDs. Default: false. */
|
|
18
|
+
readonly allowDuplicateHandlers?: boolean;
|
|
19
|
+
/** Allow multiple handlers per message type. Default: true. */
|
|
20
|
+
readonly allowMultipleHandlers?: boolean;
|
|
21
|
+
/** Global middleware. */
|
|
22
|
+
readonly middleware?: readonly MessageMiddlewareLike[];
|
|
23
|
+
/** Default timeout in ms. Default: 0 (no timeout). */
|
|
24
|
+
readonly defaultTimeout?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Message bus interface.
|
|
28
|
+
*
|
|
29
|
+
* Provides a high-level API for dispatching messages and
|
|
30
|
+
* registering handlers.
|
|
31
|
+
*/
|
|
32
|
+
export interface MessageBus {
|
|
33
|
+
/**
|
|
34
|
+
* Dispatches a message to registered handlers.
|
|
35
|
+
*
|
|
36
|
+
* This is the primary method for sending messages.
|
|
37
|
+
* The message is validated, contextualized, and run through
|
|
38
|
+
* the middleware pipeline before being delivered to handlers.
|
|
39
|
+
*/
|
|
40
|
+
dispatch<TPayload, TResult>(message: Message<TPayload>, options?: DispatchOptions<TResult>): Promise<DispatchResult<TResult>>;
|
|
41
|
+
/**
|
|
42
|
+
* Convenience method: creates and dispatches a message from input.
|
|
43
|
+
*/
|
|
44
|
+
send<TPayload, TResult>(input: MessageInput<TPayload>, options?: DispatchOptions<TResult>): Promise<DispatchResult<TResult>>;
|
|
45
|
+
/**
|
|
46
|
+
* Registers a handler for a message type.
|
|
47
|
+
*/
|
|
48
|
+
on<TPayload, TResult>(messageType: string, handler: MessageHandler<Message<TPayload>, TResult>, options?: {
|
|
49
|
+
id?: string;
|
|
50
|
+
priority?: number;
|
|
51
|
+
}): void;
|
|
52
|
+
/**
|
|
53
|
+
* Registers a named handler.
|
|
54
|
+
*/
|
|
55
|
+
addHandler<TMessage extends Message, TResult>(handler: NamedMessageHandler<TMessage, TResult>): void;
|
|
56
|
+
/**
|
|
57
|
+
* Removes a handler by ID.
|
|
58
|
+
*/
|
|
59
|
+
off(handlerId: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Adds middleware to the bus.
|
|
62
|
+
*/
|
|
63
|
+
use<TMessage extends Message = Message, TResult = unknown>(middleware: MessageMiddlewareLike<TMessage, TResult>, options?: {
|
|
64
|
+
priority?: number;
|
|
65
|
+
}): void;
|
|
66
|
+
/**
|
|
67
|
+
* Checks if handlers are registered for a message type.
|
|
68
|
+
*/
|
|
69
|
+
hasHandlers(messageType: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Returns the number of registered handlers.
|
|
72
|
+
*/
|
|
73
|
+
readonly handlerCount: number;
|
|
74
|
+
/**
|
|
75
|
+
* Disposes the bus and releases resources.
|
|
76
|
+
*/
|
|
77
|
+
dispose(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Whether the bus has been disposed.
|
|
80
|
+
*/
|
|
81
|
+
readonly disposed: boolean;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=messageBusType.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageBusType.type.d.ts","sourceRoot":"","sources":["../../src/messageBus/messageBusType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,YAAY,EAEb,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACpB,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAEhG,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAChB,MAAM,sCAAsC,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mDAAmD;IACnD,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAE1C,+DAA+D;IAC/D,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEzC,yBAAyB;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAEvD,sDAAsD;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,EACxB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GACjC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpC;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,OAAO,EACpB,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC7B,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GACjC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpC;;OAEG;IACH,EAAE,CAAC,QAAQ,EAAE,OAAO,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EACnD,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3C,IAAI,CAAC;IAER;;OAEG;IACH,UAAU,CAAC,QAAQ,SAAS,OAAO,EAAE,OAAO,EAC1C,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAC9C,IAAI,CAAC;IAER;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhC;;OAEG;IACH,GAAG,CAAC,QAAQ,SAAS,OAAO,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACvD,UAAU,EAAE,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,EACpD,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9B,IAAI,CAAC;IAER;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAE1C;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MessageBus type definitions for Zudojs.
|
|
3
|
+
*
|
|
4
|
+
* The bus is the primary API surface for sending messages.
|
|
5
|
+
* It wraps the dispatcher with publish semantics.
|
|
6
|
+
*
|
|
7
|
+
* @module messageBus/messageBusType
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=messageBusType.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageBusType.type.js","sourceRoot":"","sources":["../../src/messageBus/messageBusType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/messaging/messageContext
|
|
3
|
+
*
|
|
4
|
+
* MessageContext type definitions and factory.
|
|
5
|
+
*/
|
|
6
|
+
export type { MessageContext, MessageContextOptions, } from "./messageContextType.type.js";
|
|
7
|
+
export { createMessageContext } from "./messageContextType.type.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messageContext/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,cAAc,EACd,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messageContext/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MessageContext type definitions for Zudojs.
|
|
3
|
+
*
|
|
4
|
+
* The context carries correlation and causation identifiers
|
|
5
|
+
* through the dispatch chain, enabling distributed tracing
|
|
6
|
+
* and message lineage.
|
|
7
|
+
*
|
|
8
|
+
* @module messageContext/messageContextType
|
|
9
|
+
*/
|
|
10
|
+
import type { Message, MessageCorrelationId, MessageCausationId } from "../message/messageType.type.js";
|
|
11
|
+
/**
|
|
12
|
+
* Execution context attached to a message during dispatch.
|
|
13
|
+
*
|
|
14
|
+
* Carries correlation, causation, and arbitrary headers
|
|
15
|
+
* through the dispatch chain.
|
|
16
|
+
*/
|
|
17
|
+
export interface MessageContext {
|
|
18
|
+
/** The original message being dispatched. */
|
|
19
|
+
readonly message: Message;
|
|
20
|
+
/** Correlation identifier for the dispatch chain. */
|
|
21
|
+
readonly correlationId: MessageCorrelationId;
|
|
22
|
+
/** Causation identifier linking to the parent message. */
|
|
23
|
+
readonly causationId: MessageCausationId;
|
|
24
|
+
/** Optional headers carried through the pipeline. */
|
|
25
|
+
readonly headers: Readonly<Record<string, unknown>>;
|
|
26
|
+
/** AbortSignal for cancellation. */
|
|
27
|
+
readonly signal: AbortSignal;
|
|
28
|
+
/** Mutable state for middleware. */
|
|
29
|
+
readonly state: Map<string, unknown>;
|
|
30
|
+
/** When the dispatch started. */
|
|
31
|
+
readonly startedAt: Date;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Options for creating a message context.
|
|
35
|
+
*/
|
|
36
|
+
export interface MessageContextOptions {
|
|
37
|
+
/** Correlation identifier. Falls back to message ID. */
|
|
38
|
+
readonly correlationId?: MessageCorrelationId;
|
|
39
|
+
/** Causation identifier. Falls back to message ID. */
|
|
40
|
+
readonly causationId?: MessageCausationId;
|
|
41
|
+
/** Optional headers. */
|
|
42
|
+
readonly headers?: Readonly<Record<string, unknown>>;
|
|
43
|
+
/** Optional AbortSignal. */
|
|
44
|
+
readonly signal?: AbortSignal;
|
|
45
|
+
/** Optional mutable state. */
|
|
46
|
+
readonly state?: Map<string, unknown>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Creates a message context from a message and options.
|
|
50
|
+
*/
|
|
51
|
+
export declare function createMessageContext(message: Message, options?: MessageContextOptions): MessageContext;
|
|
52
|
+
//# sourceMappingURL=messageContextType.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageContextType.type.d.ts","sourceRoot":"","sources":["../../src/messageContext/messageContextType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,gCAAgC,CAAC;AAExC;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,qDAAqD;IACrD,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAE7C,0DAA0D;IAC1D,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAEzC,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpD,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErC,iCAAiC;IACjC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAE9C,sDAAsD;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAE1C,wBAAwB;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAErD,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAE9B,8BAA8B;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,qBAA0B,GAClC,cAAc,CAgBhB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MessageContext type definitions for Zudojs.
|
|
3
|
+
*
|
|
4
|
+
* The context carries correlation and causation identifiers
|
|
5
|
+
* through the dispatch chain, enabling distributed tracing
|
|
6
|
+
* and message lineage.
|
|
7
|
+
*
|
|
8
|
+
* @module messageContext/messageContextType
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Creates a message context from a message and options.
|
|
12
|
+
*/
|
|
13
|
+
export function createMessageContext(message, options = {}) {
|
|
14
|
+
return Object.freeze({
|
|
15
|
+
message,
|
|
16
|
+
correlationId: options.correlationId ??
|
|
17
|
+
message.correlationId ??
|
|
18
|
+
message.id,
|
|
19
|
+
causationId: options.causationId ??
|
|
20
|
+
message.causationId ??
|
|
21
|
+
message.id,
|
|
22
|
+
headers: Object.freeze({ ...options.headers }),
|
|
23
|
+
signal: options.signal ?? new AbortController().signal,
|
|
24
|
+
state: options.state ?? new Map(),
|
|
25
|
+
startedAt: new Date(),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=messageContextType.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageContextType.type.js","sourceRoot":"","sources":["../../src/messageContext/messageContextType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyDH;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,OAAO,GAA0B,EAAE;IAEnC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO;QACP,aAAa,EACX,OAAO,CAAC,aAAa;YACrB,OAAO,CAAC,aAAa;YACpB,OAAO,CAAC,EAAsC;QACjD,WAAW,EACT,OAAO,CAAC,WAAW;YACnB,OAAO,CAAC,WAAW;YAClB,OAAO,CAAC,EAAoC;QAC/C,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC,MAAM;QACtD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,GAAG,EAAmB;QAClD,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/messaging/messageHandler
|
|
3
|
+
*
|
|
4
|
+
* MessageHandler type definitions and utilities.
|
|
5
|
+
*/
|
|
6
|
+
export type { HandlerResult, MessageHandler, NamedMessageHandler, MessageHandlerLike, MessageHandlerFactory, } from "./messageHandlerType.type.js";
|
|
7
|
+
export { resolveMessageHandler } from "./messageHandlerType.type.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messageHandler/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messageHandler/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC"}
|