@oyinlola141/lattice-messaging 0.1.0
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 +19 -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 +89 -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 +109 -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 +106 -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 +94 -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 +24 -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 +95 -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 +39 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @oyinlola141/lattice-messaging/dispatcher
|
|
3
|
+
*
|
|
4
|
+
* Dispatcher type definitions and default implementation.
|
|
5
|
+
*/
|
|
6
|
+
export type { DispatchResult, HandlerExecutionResult, DispatchOptions, Dispatcher, } from "./dispatcherType.type.js";
|
|
7
|
+
export { DefaultDispatcher, createDispatcher } from "./dispatcherCore.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dispatcher/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,UAAU,GACX,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dispatcher/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @oyinlola141/lattice-messaging/errors
|
|
3
|
+
*
|
|
4
|
+
* Re-exports message-related error types from @oyinlola141/lattice-errors.
|
|
5
|
+
*/
|
|
6
|
+
export { MessageError, MessageDispatchError, InvalidMessageError, MessageTypeNotFoundError, MessageHandlerError, MessageHandlerNotFoundError, DuplicateMessageHandlerError, MessageDispatchAbortedError, MessageBusDisposedError, MessageTimeoutError, MessageMiddlewareError, MessageValidationError, createMessageError, isMessageError, toMessageError, createMessageHandlerError, } from "@oyinlola141/lattice-errors";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @latticejs/messaging/errors
|
|
3
|
+
*
|
|
4
|
+
* Re-exports message-related error types from @latticejs/errors.
|
|
5
|
+
*/
|
|
6
|
+
export { MessageError, MessageDispatchError, InvalidMessageError, MessageTypeNotFoundError, MessageHandlerError, MessageHandlerNotFoundError, DuplicateMessageHandlerError, MessageDispatchAbortedError, MessageBusDisposedError, MessageTimeoutError, MessageMiddlewareError, MessageValidationError, createMessageError, isMessageError, toMessageError, createMessageHandlerError, } from "@latticejs/errors";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory handler registry implementation.
|
|
3
|
+
*
|
|
4
|
+
* @module handlerRegistry/handlerRegistryStore
|
|
5
|
+
*/
|
|
6
|
+
import type { HandlerRegistryOptions, HandlerQueryOptions } from "./handlerRegistryType.type.js";
|
|
7
|
+
import type { NamedMessageHandler } from "../messageHandler/messageHandlerType.type.js";
|
|
8
|
+
import type { Message } from "../message/messageType.type.js";
|
|
9
|
+
/**
|
|
10
|
+
* In-memory store for registered message handlers.
|
|
11
|
+
*/
|
|
12
|
+
export declare class HandlerRegistryStore {
|
|
13
|
+
private readonly handlers;
|
|
14
|
+
private readonly handlersByType;
|
|
15
|
+
private readonly options;
|
|
16
|
+
constructor(options?: HandlerRegistryOptions);
|
|
17
|
+
register<TMessage extends Message, TResult>(handler: NamedMessageHandler<TMessage, TResult>): void;
|
|
18
|
+
private validateNotDuplicate;
|
|
19
|
+
private indexHandlerTypes;
|
|
20
|
+
unregister(handlerId: string): boolean;
|
|
21
|
+
private removeHandlerFromTypeIndex;
|
|
22
|
+
resolve<TResult>(messageType: string, options?: HandlerQueryOptions): NamedMessageHandler<Message, TResult>[];
|
|
23
|
+
private buildHandlerList;
|
|
24
|
+
private shouldExcludeHandler;
|
|
25
|
+
get<TResult>(handlerId: string): NamedMessageHandler<Message, TResult> | undefined;
|
|
26
|
+
has(handlerId: string): boolean;
|
|
27
|
+
getHandlerIds(): string[];
|
|
28
|
+
getRegisteredTypes(): string[];
|
|
29
|
+
get size(): number;
|
|
30
|
+
clear(): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=handlerRegistryStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlerRegistryStore.d.ts","sourceRoot":"","sources":["../../src/handlerRegistry/handlerRegistryStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,sBAAsB,EAEtB,mBAAmB,EACpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EACV,mBAAmB,EACpB,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EACV,OAAO,EACR,MAAM,gCAAgC,CAAC;AAMxC;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkC;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IAEjD,YAAY,OAAO,GAAE,sBAA2B,EAO/C;IAED,QAAQ,CAAC,QAAQ,SAAS,OAAO,EAAE,OAAO,EACxC,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAC9C,IAAI,CAQN;IAED,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,iBAAiB;IAazB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAMrC;IAED,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,OAAO,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,mBAAwB,GAChC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAIzC;IAED,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,oBAAoB;IAM5B,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,CAEjF;IAED,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE9B;IAED,aAAa,IAAI,MAAM,EAAE,CAExB;IAED,kBAAkB,IAAI,MAAM,EAAE,CAE7B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,IAAI,CAGZ;CACF"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory handler registry implementation.
|
|
3
|
+
*
|
|
4
|
+
* @module handlerRegistry/handlerRegistryStore
|
|
5
|
+
*/
|
|
6
|
+
import { DuplicateMessageHandlerError, } from "@latticejs/errors";
|
|
7
|
+
/**
|
|
8
|
+
* In-memory store for registered message handlers.
|
|
9
|
+
*/
|
|
10
|
+
export class HandlerRegistryStore {
|
|
11
|
+
handlers = new Map();
|
|
12
|
+
handlersByType = new Map();
|
|
13
|
+
options;
|
|
14
|
+
constructor(options = {}) {
|
|
15
|
+
this.options = {
|
|
16
|
+
allowDuplicateHandlerIds: false,
|
|
17
|
+
allowMultipleHandlers: true,
|
|
18
|
+
requireTypeRegistration: false,
|
|
19
|
+
...options,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
register(handler) {
|
|
23
|
+
this.validateNotDuplicate(handler.id);
|
|
24
|
+
const entry = {
|
|
25
|
+
handler,
|
|
26
|
+
registeredAt: new Date(),
|
|
27
|
+
};
|
|
28
|
+
this.handlers.set(handler.id, entry);
|
|
29
|
+
this.indexHandlerTypes(handler);
|
|
30
|
+
}
|
|
31
|
+
validateNotDuplicate(handlerId) {
|
|
32
|
+
if (!this.options.allowDuplicateHandlerIds && this.handlers.has(handlerId)) {
|
|
33
|
+
throw new DuplicateMessageHandlerError(handlerId);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
indexHandlerTypes(handler) {
|
|
37
|
+
for (const messageType of handler.messageTypes) {
|
|
38
|
+
let typeSet = this.handlersByType.get(messageType);
|
|
39
|
+
if (typeSet === undefined) {
|
|
40
|
+
typeSet = new Set();
|
|
41
|
+
this.handlersByType.set(messageType, typeSet);
|
|
42
|
+
}
|
|
43
|
+
typeSet.add(handler.id);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
unregister(handlerId) {
|
|
47
|
+
const entry = this.handlers.get(handlerId);
|
|
48
|
+
if (entry === undefined)
|
|
49
|
+
return false;
|
|
50
|
+
this.removeHandlerFromTypeIndex(entry);
|
|
51
|
+
this.handlers.delete(handlerId);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
removeHandlerFromTypeIndex(entry) {
|
|
55
|
+
for (const messageType of entry.handler.messageTypes) {
|
|
56
|
+
const typeSet = this.handlersByType.get(messageType);
|
|
57
|
+
if (typeSet !== undefined) {
|
|
58
|
+
typeSet.delete(entry.handler.id);
|
|
59
|
+
if (typeSet.size === 0)
|
|
60
|
+
this.handlersByType.delete(messageType);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
resolve(messageType, options = {}) {
|
|
65
|
+
const handlerIds = this.handlersByType.get(messageType);
|
|
66
|
+
if (handlerIds === undefined || handlerIds.size === 0)
|
|
67
|
+
return [];
|
|
68
|
+
return this.buildHandlerList(handlerIds, options);
|
|
69
|
+
}
|
|
70
|
+
buildHandlerList(handlerIds, options) {
|
|
71
|
+
const result = [];
|
|
72
|
+
for (const handlerId of handlerIds) {
|
|
73
|
+
const entry = this.handlers.get(handlerId);
|
|
74
|
+
if (entry === undefined)
|
|
75
|
+
continue;
|
|
76
|
+
if (this.shouldExcludeHandler(entry.handler, options))
|
|
77
|
+
continue;
|
|
78
|
+
result.push(entry.handler);
|
|
79
|
+
}
|
|
80
|
+
return result.sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));
|
|
81
|
+
}
|
|
82
|
+
shouldExcludeHandler(handler, options) {
|
|
83
|
+
if (options.includeDisabled !== true && handler.enabled === false)
|
|
84
|
+
return true;
|
|
85
|
+
if (options.maxPriority !== undefined && (handler.priority ?? 100) > options.maxPriority)
|
|
86
|
+
return true;
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
get(handlerId) {
|
|
90
|
+
return this.handlers.get(handlerId)?.handler;
|
|
91
|
+
}
|
|
92
|
+
has(handlerId) {
|
|
93
|
+
return this.handlers.has(handlerId);
|
|
94
|
+
}
|
|
95
|
+
getHandlerIds() {
|
|
96
|
+
return Array.from(this.handlers.keys());
|
|
97
|
+
}
|
|
98
|
+
getRegisteredTypes() {
|
|
99
|
+
return Array.from(this.handlersByType.keys());
|
|
100
|
+
}
|
|
101
|
+
get size() {
|
|
102
|
+
return this.handlers.size;
|
|
103
|
+
}
|
|
104
|
+
clear() {
|
|
105
|
+
this.handlers.clear();
|
|
106
|
+
this.handlersByType.clear();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=handlerRegistryStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlerRegistryStore.js","sourceRoot":"","sources":["../../src/handlerRegistry/handlerRegistryStore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,OAAO,EACL,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,MAAM,OAAO,oBAAoB;IACd,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAChD,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAC;IAChD,OAAO,CAAyB;IAEjD,YAAY,OAAO,GAA2B,EAAE;QAC9C,IAAI,CAAC,OAAO,GAAG;YACb,wBAAwB,EAAE,KAAK;YAC/B,qBAAqB,EAAE,IAAI;YAC3B,uBAAuB,EAAE,KAAK;YAC9B,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAED,QAAQ,CACN,OAA+C;QAE/C,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,KAAK,GAAyC;YAClD,OAAO;YACP,YAAY,EAAE,IAAI,IAAI,EAAE;SACzB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,KAA0B,CAAC,CAAC;QAC1D,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAEO,oBAAoB,CAAC,SAAiB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,4BAA4B,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,OAA+C;QAE/C,KAAK,MAAM,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAC/C,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACnD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,0BAA0B,CAAC,KAAwB;QACzD,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACjC,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;oBAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CACL,WAAmB,EACnB,OAAO,GAAwB,EAAE;QAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACjE,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEO,gBAAgB,CACtB,UAAuB,EACvB,OAA4B;QAE5B,MAAM,MAAM,GAA4C,EAAE,CAAC;QAC3D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;gBAAE,SAAS;YAChE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAgD,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC;IAC1E,CAAC;IAEO,oBAAoB,CAAC,OAA4B,EAAE,OAA4B;QACrF,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAC/E,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QACtG,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAU,SAAiB;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAA4D,CAAC;IACpG,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB;QAChB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HandlerRegistry type definitions for Lattice.
|
|
3
|
+
*
|
|
4
|
+
* The registry manages message handler registration and resolution.
|
|
5
|
+
* It supports both single-handler (commands/queries) and multi-handler
|
|
6
|
+
* (events) dispatch models.
|
|
7
|
+
*
|
|
8
|
+
* @module handlerRegistry/handlerRegistryType
|
|
9
|
+
*/
|
|
10
|
+
import type { NamedMessageHandler } from "../messageHandler/messageHandlerType.type.js";
|
|
11
|
+
import type { Message } from "../message/messageType.type.js";
|
|
12
|
+
/**
|
|
13
|
+
* Options for the handler registry.
|
|
14
|
+
*/
|
|
15
|
+
export interface HandlerRegistryOptions {
|
|
16
|
+
/** Allow duplicate handler IDs. Default: false. */
|
|
17
|
+
readonly allowDuplicateHandlerIds?: boolean;
|
|
18
|
+
/** Allow multiple handlers per message type. Default: true. */
|
|
19
|
+
readonly allowMultipleHandlers?: boolean;
|
|
20
|
+
/** Require message type registration before handler. Default: false. */
|
|
21
|
+
readonly requireTypeRegistration?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Registered handler entry.
|
|
25
|
+
*/
|
|
26
|
+
export interface RegisteredHandler<TMessage extends Message = Message, TResult = unknown> {
|
|
27
|
+
/** The named handler. */
|
|
28
|
+
readonly handler: NamedMessageHandler<TMessage, TResult>;
|
|
29
|
+
/** When the handler was registered. */
|
|
30
|
+
readonly registeredAt: Date;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Query options for looking up handlers.
|
|
34
|
+
*/
|
|
35
|
+
export interface HandlerQueryOptions {
|
|
36
|
+
/** Include disabled handlers. Default: false. */
|
|
37
|
+
readonly includeDisabled?: boolean;
|
|
38
|
+
/** Filter by priority (max). Default: no limit. */
|
|
39
|
+
readonly maxPriority?: number;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=handlerRegistryType.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlerRegistryType.type.d.ts","sourceRoot":"","sources":["../../src/handlerRegistry/handlerRegistryType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,8CAA8C,CAAC;AAEtD,OAAO,KAAK,EACV,OAAO,EACR,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAE5C,+DAA+D;IAC/D,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEzC,wEAAwE;IACxE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAChC,QAAQ,SAAS,OAAO,GAAG,OAAO,EAClC,OAAO,GAAG,OAAO;IAEjB,yBAAyB;IACzB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEzD,uCAAuC;IACvC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAEnC,mDAAmD;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HandlerRegistry type definitions for Lattice.
|
|
3
|
+
*
|
|
4
|
+
* The registry manages message handler registration and resolution.
|
|
5
|
+
* It supports both single-handler (commands/queries) and multi-handler
|
|
6
|
+
* (events) dispatch models.
|
|
7
|
+
*
|
|
8
|
+
* @module handlerRegistry/handlerRegistryType
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=handlerRegistryType.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlerRegistryType.type.js","sourceRoot":"","sources":["../../src/handlerRegistry/handlerRegistryType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @oyinlola141/lattice-messaging/handlerRegistry
|
|
3
|
+
*
|
|
4
|
+
* HandlerRegistry type definitions and in-memory store.
|
|
5
|
+
*/
|
|
6
|
+
export type { HandlerRegistryOptions, RegisteredHandler, HandlerQueryOptions, } from "./handlerRegistryType.type.js";
|
|
7
|
+
export { HandlerRegistryStore } from "./handlerRegistryStore.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlerRegistry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlerRegistry/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @oyinlola141/lattice-messaging
|
|
3
|
+
*
|
|
4
|
+
* In-process message bus infrastructure for the Lattice framework.
|
|
5
|
+
*
|
|
6
|
+
* Provides the foundational messaging primitives that CQRS and Events
|
|
7
|
+
* specialize into commands/queries and domain events respectively.
|
|
8
|
+
*
|
|
9
|
+
* @module @oyinlola141/lattice-messaging
|
|
10
|
+
*/
|
|
11
|
+
export * from "./message/index.js";
|
|
12
|
+
export * from "./messageContext/index.js";
|
|
13
|
+
export * from "./messageHandler/index.js";
|
|
14
|
+
export * from "./handlerRegistry/index.js";
|
|
15
|
+
export * from "./messageMiddleware/index.js";
|
|
16
|
+
export * from "./dispatcher/index.js";
|
|
17
|
+
export * from "./messageBus/index.js";
|
|
18
|
+
export * from "./errors/index.js";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,oBAAoB,CAAC;AAGnC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,2BAA2B,CAAC;AAG1C,cAAc,4BAA4B,CAAC;AAG3C,cAAc,8BAA8B,CAAC;AAG7C,cAAc,uBAAuB,CAAC;AAGtC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @latticejs/messaging
|
|
3
|
+
*
|
|
4
|
+
* In-process message bus infrastructure for the Lattice framework.
|
|
5
|
+
*
|
|
6
|
+
* Provides the foundational messaging primitives that CQRS and Events
|
|
7
|
+
* specialize into commands/queries and domain events respectively.
|
|
8
|
+
*
|
|
9
|
+
* @module @latticejs/messaging
|
|
10
|
+
*/
|
|
11
|
+
// Core message types and factory
|
|
12
|
+
export * from "./message/index.js";
|
|
13
|
+
// Message context (correlation, causation, headers)
|
|
14
|
+
export * from "./messageContext/index.js";
|
|
15
|
+
// Message handler types
|
|
16
|
+
export * from "./messageHandler/index.js";
|
|
17
|
+
// Handler registry
|
|
18
|
+
export * from "./handlerRegistry/index.js";
|
|
19
|
+
// Message middleware
|
|
20
|
+
export * from "./messageMiddleware/index.js";
|
|
21
|
+
// Dispatcher
|
|
22
|
+
export * from "./dispatcher/index.js";
|
|
23
|
+
// Message bus
|
|
24
|
+
export * from "./messageBus/index.js";
|
|
25
|
+
// Error re-exports
|
|
26
|
+
export * from "./errors/index.js";
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,iCAAiC;AACjC,cAAc,oBAAoB,CAAC;AAEnC,oDAAoD;AACpD,cAAc,2BAA2B,CAAC;AAE1C,wBAAwB;AACxB,cAAc,2BAA2B,CAAC;AAE1C,mBAAmB;AACnB,cAAc,4BAA4B,CAAC;AAE3C,qBAAqB;AACrB,cAAc,8BAA8B,CAAC;AAE7C,aAAa;AACb,cAAc,uBAAuB,CAAC;AAEtC,cAAc;AACd,cAAc,uBAAuB,CAAC;AAEtC,mBAAmB;AACnB,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @oyinlola141/lattice-messaging/message
|
|
3
|
+
*
|
|
4
|
+
* Core message types, factory functions, and identity primitives.
|
|
5
|
+
*/
|
|
6
|
+
export type { MessageId, MessageType, MessageTimestamp, MessageSource, MessageCorrelationId, MessageCausationId, MessagePayload, Message, MessageInput, } from "./messageType.type.js";
|
|
7
|
+
export { createMessageId, createMessage, createDerivedMessage, isMessage, getMessageType, getMessagePayload, describeMessage, } from "./messageFactory.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/message/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,YAAY,GACb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @latticejs/messaging/message
|
|
3
|
+
*
|
|
4
|
+
* Core message types, factory functions, and identity primitives.
|
|
5
|
+
*/
|
|
6
|
+
export { createMessageId, createMessage, createDerivedMessage, isMessage, getMessageType, getMessagePayload, describeMessage, } from "./messageFactory.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/message/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EACL,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message factory functions for creating and manipulating messages.
|
|
3
|
+
*
|
|
4
|
+
* @module message/messageFactory
|
|
5
|
+
*/
|
|
6
|
+
import type { Message, MessageId, MessageType, MessagePayload, MessageInput } from "./messageType.type.js";
|
|
7
|
+
/**
|
|
8
|
+
* Creates a unique message identifier.
|
|
9
|
+
* Returns a branded MessageId type from @oyinlola141/lattice-constants.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createMessageId(): MessageId;
|
|
12
|
+
/**
|
|
13
|
+
* Creates an immutable message.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createMessage<TPayload = MessagePayload>(input: MessageInput<TPayload>): Message<TPayload>;
|
|
16
|
+
/**
|
|
17
|
+
* Creates a derived message while preserving correlation.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createDerivedMessage<TPayload>(sourceMessage: Message, input: MessageInput<TPayload>): Message<TPayload>;
|
|
20
|
+
/**
|
|
21
|
+
* Determines whether an unknown value satisfies the Message contract.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isMessage(value: unknown): value is Message;
|
|
24
|
+
/**
|
|
25
|
+
* Returns the message type.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getMessageType<TPayload>(message: Message<TPayload>): MessageType;
|
|
28
|
+
/**
|
|
29
|
+
* Returns the message payload.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getMessagePayload<TPayload>(message: Message<TPayload>): TPayload;
|
|
32
|
+
/**
|
|
33
|
+
* Returns a human-readable message description.
|
|
34
|
+
*/
|
|
35
|
+
export declare function describeMessage(message: Message): string;
|
|
36
|
+
//# sourceMappingURL=messageFactory.d.ts.map
|
|
@@ -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;AAuCD;;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,CAMnB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAS1D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,WAAW,CAEhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAEhF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAExD"}
|
|
@@ -0,0 +1,106 @@
|
|
|
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 @latticejs/constants.
|
|
9
|
+
*/
|
|
10
|
+
export function createMessageId() {
|
|
11
|
+
return `msg:${createUuid()}`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generates a UUID when available.
|
|
15
|
+
*/
|
|
16
|
+
function createUuid() {
|
|
17
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
18
|
+
return crypto.randomUUID();
|
|
19
|
+
}
|
|
20
|
+
return [
|
|
21
|
+
Date.now().toString(36),
|
|
22
|
+
Math.random().toString(36).slice(2),
|
|
23
|
+
Math.random().toString(36).slice(2),
|
|
24
|
+
].join("-");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Normalizes a message timestamp.
|
|
28
|
+
*/
|
|
29
|
+
function normalizeTimestamp(timestamp) {
|
|
30
|
+
if (timestamp instanceof Date)
|
|
31
|
+
return new Date(timestamp.getTime());
|
|
32
|
+
if (typeof timestamp === "number") {
|
|
33
|
+
const date = new Date(timestamp);
|
|
34
|
+
if (Number.isNaN(date.getTime()))
|
|
35
|
+
throw new TypeError("Invalid message timestamp.");
|
|
36
|
+
return date;
|
|
37
|
+
}
|
|
38
|
+
return new Date();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Freezes message metadata.
|
|
42
|
+
*/
|
|
43
|
+
function normalizeMetadata(metadata) {
|
|
44
|
+
if (metadata === undefined)
|
|
45
|
+
return undefined;
|
|
46
|
+
return Object.freeze({ ...metadata });
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Creates an immutable message.
|
|
50
|
+
*/
|
|
51
|
+
export function createMessage(input) {
|
|
52
|
+
if (typeof input.type !== "string" || input.type.trim().length === 0) {
|
|
53
|
+
throw new TypeError("Message type must be a non-empty string.");
|
|
54
|
+
}
|
|
55
|
+
return Object.freeze({
|
|
56
|
+
id: input.id ?? createMessageId(),
|
|
57
|
+
type: input.type,
|
|
58
|
+
payload: input.payload,
|
|
59
|
+
timestamp: normalizeTimestamp(input.timestamp),
|
|
60
|
+
source: input.source,
|
|
61
|
+
correlationId: input.correlationId,
|
|
62
|
+
causationId: input.causationId,
|
|
63
|
+
metadata: normalizeMetadata(input.metadata),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Creates a derived message while preserving correlation.
|
|
68
|
+
*/
|
|
69
|
+
export function createDerivedMessage(sourceMessage, input) {
|
|
70
|
+
return createMessage({
|
|
71
|
+
...input,
|
|
72
|
+
correlationId: input.correlationId ?? sourceMessage.correlationId ?? sourceMessage.id,
|
|
73
|
+
causationId: input.causationId ?? sourceMessage.id,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Determines whether an unknown value satisfies the Message contract.
|
|
78
|
+
*/
|
|
79
|
+
export function isMessage(value) {
|
|
80
|
+
if (typeof value !== "object" || value === null)
|
|
81
|
+
return false;
|
|
82
|
+
const candidate = value;
|
|
83
|
+
return (typeof candidate.id === "string" &&
|
|
84
|
+
typeof candidate.type === "string" &&
|
|
85
|
+
candidate.timestamp instanceof Date &&
|
|
86
|
+
"payload" in candidate);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Returns the message type.
|
|
90
|
+
*/
|
|
91
|
+
export function getMessageType(message) {
|
|
92
|
+
return message.type;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Returns the message payload.
|
|
96
|
+
*/
|
|
97
|
+
export function getMessagePayload(message) {
|
|
98
|
+
return message.payload;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Returns a human-readable message description.
|
|
102
|
+
*/
|
|
103
|
+
export function describeMessage(message) {
|
|
104
|
+
return `${message.type} (${message.id})`;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=messageFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageFactory.js","sourceRoot":"","sources":["../../src/message/messageFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,UAAU,EAAE,EAAe,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,SAAS,UAAU;IACjB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC7E,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO;QACL,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KACpC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,SAAoC;IAC9D,IAAI,SAAS,YAAY,IAAI;QAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,QAAkC;IAElC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC7C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,KAA6B;IAE7B,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,SAAS,CAAC,0CAA0C,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,eAAe,EAAE;QACjC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC9C,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,aAAsB,EACtB,KAA6B;IAE7B,OAAO,aAAa,CAAC;QACnB,GAAG,KAAK;QACR,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa,IAAK,aAAa,CAAC,EAAsC;QAC1H,WAAW,EAAE,KAAK,CAAC,WAAW,IAAK,aAAa,CAAC,EAAoC;KACtF,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,OAAO,CACL,OAAO,SAAS,CAAC,EAAE,KAAK,QAAQ;QAChC,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;QAClC,SAAS,CAAC,SAAS,YAAY,IAAI;QACnC,SAAS,IAAI,SAAS,CACvB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAW,OAA0B;IACjE,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAW,OAA0B;IACpE,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,GAAG,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core message type definitions for Lattice.
|
|
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 "@oyinlola141/lattice-constants";
|
|
11
|
+
/**
|
|
12
|
+
* Unique identifier for a message instance.
|
|
13
|
+
* Re-exported from @oyinlola141/lattice-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 @oyinlola141/lattice-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 @oyinlola141/lattice-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 Lattice 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,sBAAsB,CAAC;AAE9B;;;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 Lattice.
|
|
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
|