@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,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dispatcher implementation for Zudojs.
|
|
3
|
+
*
|
|
4
|
+
* @module dispatcher/dispatcherCore
|
|
5
|
+
*/
|
|
6
|
+
import { createMessageContext } from "../messageContext/messageContextType.type.js";
|
|
7
|
+
import { HandlerRegistryStore } from "../handlerRegistry/handlerRegistryStore.js";
|
|
8
|
+
import { runMessagePipeline } from "../messageMiddleware/messageMiddlewarePipeline.js";
|
|
9
|
+
import { MessageDispatchAbortedError, MessageHandlerError, MessageDispatchError, } from "@zudojs/errors";
|
|
10
|
+
/**
|
|
11
|
+
* Default dispatcher implementation.
|
|
12
|
+
*/
|
|
13
|
+
export class DefaultDispatcher {
|
|
14
|
+
registry;
|
|
15
|
+
globalMiddleware = [];
|
|
16
|
+
disposed = false;
|
|
17
|
+
constructor(registry) {
|
|
18
|
+
this.registry = registry ?? new HandlerRegistryStore();
|
|
19
|
+
}
|
|
20
|
+
async dispatch(message, options = {}) {
|
|
21
|
+
const dispatchStart = performance.now();
|
|
22
|
+
this.validateNotDisposed(message);
|
|
23
|
+
const signal = this.resolveSignal(options.signal);
|
|
24
|
+
const context = createMessageContext(message, {
|
|
25
|
+
...options.context,
|
|
26
|
+
signal,
|
|
27
|
+
});
|
|
28
|
+
const allMiddleware = [
|
|
29
|
+
...this.globalMiddleware,
|
|
30
|
+
...(options.middleware ?? []),
|
|
31
|
+
];
|
|
32
|
+
const handlers = this.registry.resolve(message.type);
|
|
33
|
+
const handlerResults = [];
|
|
34
|
+
try {
|
|
35
|
+
const pipelineResult = await runMessagePipeline(allMiddleware, async (msg, mwCtx) => this.executeHandlers(msg, handlers, handlerResults, mwCtx.signal), message, {
|
|
36
|
+
signal: context.signal,
|
|
37
|
+
metadata: options.context?.headers,
|
|
38
|
+
state: options.context?.state,
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
success: true,
|
|
42
|
+
value: pipelineResult.result,
|
|
43
|
+
message,
|
|
44
|
+
context,
|
|
45
|
+
handlerResults,
|
|
46
|
+
middlewareResult: pipelineResult,
|
|
47
|
+
duration: performance.now() - dispatchStart,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
return {
|
|
52
|
+
success: false,
|
|
53
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
54
|
+
message,
|
|
55
|
+
context,
|
|
56
|
+
handlerResults,
|
|
57
|
+
duration: performance.now() - dispatchStart,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
validateNotDisposed(message) {
|
|
62
|
+
if (this.disposed)
|
|
63
|
+
throw new MessageDispatchError(message.type, "Dispatcher has been disposed.");
|
|
64
|
+
}
|
|
65
|
+
resolveSignal(signal) {
|
|
66
|
+
const resolved = signal ?? new AbortController().signal;
|
|
67
|
+
if (resolved.aborted)
|
|
68
|
+
throw new MessageDispatchAbortedError();
|
|
69
|
+
return resolved;
|
|
70
|
+
}
|
|
71
|
+
async executeHandlers(message, handlers, handlerResults, signal) {
|
|
72
|
+
const results = [];
|
|
73
|
+
for (const handler of handlers) {
|
|
74
|
+
const result = await this.executeHandler(handler, message, signal);
|
|
75
|
+
results.push(result);
|
|
76
|
+
handlerResults.push({
|
|
77
|
+
handlerId: handler.id,
|
|
78
|
+
success: true,
|
|
79
|
+
value: result,
|
|
80
|
+
duration: 0,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return results.length === 1 ? results[0] : results;
|
|
84
|
+
}
|
|
85
|
+
async executeHandler(handler, message, signal) {
|
|
86
|
+
try {
|
|
87
|
+
if (signal.aborted)
|
|
88
|
+
throw new MessageDispatchAbortedError();
|
|
89
|
+
const context = createMessageContext(message, { signal });
|
|
90
|
+
return await handler.handler(message, context);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
throw new MessageHandlerError(`Handler "${handler.id}" failed: ${error instanceof Error ? error.message : String(error)}`, {
|
|
94
|
+
handlerId: handler.id,
|
|
95
|
+
messageType: message.type,
|
|
96
|
+
messageId: message.id,
|
|
97
|
+
cause: error,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
use(middleware) {
|
|
102
|
+
this.globalMiddleware.push(middleware);
|
|
103
|
+
}
|
|
104
|
+
removeMiddleware(_middlewareId) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
getRegistry() {
|
|
108
|
+
return this.registry;
|
|
109
|
+
}
|
|
110
|
+
dispose() {
|
|
111
|
+
this.disposed = true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export function createDispatcher(registry) {
|
|
115
|
+
return new DefaultDispatcher(registry);
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=dispatcherCore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcherCore.js","sourceRoot":"","sources":["../../src/dispatcher/dispatcherCore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dispatcher type definitions for Zudojs.
|
|
3
|
+
*
|
|
4
|
+
* The dispatcher is the core coordination point that validates
|
|
5
|
+
* messages, creates context, runs middleware, and invokes handlers.
|
|
6
|
+
*
|
|
7
|
+
* @module dispatcher/dispatcherType
|
|
8
|
+
*/
|
|
9
|
+
import type { Message } from "../message/messageType.type.js";
|
|
10
|
+
import type { MessageContext, MessageContextOptions } from "../messageContext/messageContextType.type.js";
|
|
11
|
+
import type { MessageMiddlewareLike, MessageMiddlewarePipelineResult } from "../messageMiddleware/messageMiddlewareType.type.js";
|
|
12
|
+
/**
|
|
13
|
+
* Result of dispatching a message.
|
|
14
|
+
*/
|
|
15
|
+
export interface DispatchResult<TResult = unknown> {
|
|
16
|
+
/** Whether the dispatch was successful. */
|
|
17
|
+
readonly success: boolean;
|
|
18
|
+
/** The result value (if successful). */
|
|
19
|
+
readonly value?: TResult;
|
|
20
|
+
/** The error (if failed). */
|
|
21
|
+
readonly error?: Error;
|
|
22
|
+
/** The message that was dispatched. */
|
|
23
|
+
readonly message: Message;
|
|
24
|
+
/** The context used for dispatch. */
|
|
25
|
+
readonly context: MessageContext;
|
|
26
|
+
/** Handler execution results. */
|
|
27
|
+
readonly handlerResults: readonly HandlerExecutionResult[];
|
|
28
|
+
/** Middleware execution metadata. */
|
|
29
|
+
readonly middlewareResult?: MessageMiddlewarePipelineResult;
|
|
30
|
+
/** Total dispatch duration in ms. */
|
|
31
|
+
readonly duration: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Result of a single handler execution.
|
|
35
|
+
*/
|
|
36
|
+
export interface HandlerExecutionResult<TResult = unknown> {
|
|
37
|
+
/** The handler ID. */
|
|
38
|
+
readonly handlerId: string;
|
|
39
|
+
/** Whether the handler succeeded. */
|
|
40
|
+
readonly success: boolean;
|
|
41
|
+
/** The result value (if successful). */
|
|
42
|
+
readonly value?: TResult;
|
|
43
|
+
/** The error (if failed). */
|
|
44
|
+
readonly error?: Error;
|
|
45
|
+
/** Handler execution duration in ms. */
|
|
46
|
+
readonly duration: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Options for dispatching a message.
|
|
50
|
+
*/
|
|
51
|
+
export interface DispatchOptions<TResult = unknown> {
|
|
52
|
+
/** Context options. */
|
|
53
|
+
readonly context?: MessageContextOptions;
|
|
54
|
+
/** Middleware to apply for this dispatch. */
|
|
55
|
+
readonly middleware?: readonly MessageMiddlewareLike[];
|
|
56
|
+
/** Timeout in ms. 0 = no timeout. Default: 0. */
|
|
57
|
+
readonly timeout?: number;
|
|
58
|
+
/** AbortSignal for cancellation. */
|
|
59
|
+
readonly signal?: AbortSignal;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Dispatcher interface.
|
|
63
|
+
*
|
|
64
|
+
* Validates, contextualizes, and dispatches messages through
|
|
65
|
+
* the middleware pipeline to handlers.
|
|
66
|
+
*/
|
|
67
|
+
export interface Dispatcher {
|
|
68
|
+
/**
|
|
69
|
+
* Dispatches a message through the pipeline to handlers.
|
|
70
|
+
*/
|
|
71
|
+
dispatch<TPayload, TResult>(message: Message<TPayload>, options?: DispatchOptions<TResult>): Promise<DispatchResult<TResult>>;
|
|
72
|
+
/**
|
|
73
|
+
* Registers middleware for all dispatches.
|
|
74
|
+
*/
|
|
75
|
+
use<TMessage extends Message = Message, TResult = unknown>(middleware: MessageMiddlewareLike<TMessage, TResult>, options?: {
|
|
76
|
+
priority?: number;
|
|
77
|
+
}): void;
|
|
78
|
+
/**
|
|
79
|
+
* Removes middleware by ID.
|
|
80
|
+
*/
|
|
81
|
+
removeMiddleware(middlewareId: string): boolean;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=dispatcherType.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcherType.type.d.ts","sourceRoot":"","sources":["../../src/dispatcher/dispatcherType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,gCAAgC,CAAC;AAE9E,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACtB,MAAM,8CAA8C,CAAC;AAItD,OAAO,KAAK,EACV,qBAAqB,EACrB,+BAA+B,EAChC,MAAM,oDAAoD,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,OAAO;IAC/C,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEzB,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAEvB,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IAEjC,iCAAiC;IACjC,QAAQ,CAAC,cAAc,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAE3D,qCAAqC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,+BAA+B,CAAC;IAE5D,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB,CAAC,OAAO,GAAG,OAAO;IACvD,sBAAsB;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEzB,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAEvB,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,OAAO,GAAG,OAAO;IAChD,uBAAuB;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAEzC,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAEvD,iDAAiD;IACjD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,oCAAoC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;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,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,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;CACjD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dispatcher type definitions for Zudojs.
|
|
3
|
+
*
|
|
4
|
+
* The dispatcher is the core coordination point that validates
|
|
5
|
+
* messages, creates context, runs middleware, and invokes handlers.
|
|
6
|
+
*
|
|
7
|
+
* @module dispatcher/dispatcherType
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=dispatcherType.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcherType.type.js","sourceRoot":"","sources":["../../src/dispatcher/dispatcherType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/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
|
+
* @zudojs/messaging/errors
|
|
3
|
+
*
|
|
4
|
+
* Re-exports message-related error types from @zudojs/errors.
|
|
5
|
+
*/
|
|
6
|
+
export { MessageError, MessageDispatchError, InvalidMessageError, MessageTypeNotFoundError, MessageHandlerError, MessageHandlerNotFoundError, DuplicateMessageHandlerError, MessageDispatchAbortedError, MessageBusDisposedError, MessageTimeoutError, MessageMiddlewareError, MessageValidationError, createMessageError, isMessageError, toMessageError, createMessageHandlerError, } from "@zudojs/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,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/messaging/errors
|
|
3
|
+
*
|
|
4
|
+
* Re-exports message-related error types from @zudojs/errors.
|
|
5
|
+
*/
|
|
6
|
+
export { MessageError, MessageDispatchError, InvalidMessageError, MessageTypeNotFoundError, MessageHandlerError, MessageHandlerNotFoundError, DuplicateMessageHandlerError, MessageDispatchAbortedError, MessageBusDisposedError, MessageTimeoutError, MessageMiddlewareError, MessageValidationError, createMessageError, isMessageError, toMessageError, createMessageHandlerError, } from "@zudojs/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,gBAAgB,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,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAExF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAI9D;;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;IAS5B,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;IAc5B,GAAG,CAAC,OAAO,EACT,SAAS,EAAE,MAAM,GAChB,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,CAGnD;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,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory handler registry implementation.
|
|
3
|
+
*
|
|
4
|
+
* @module handlerRegistry/handlerRegistryStore
|
|
5
|
+
*/
|
|
6
|
+
import { DuplicateMessageHandlerError } from "@zudojs/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 &&
|
|
33
|
+
this.handlers.has(handlerId)) {
|
|
34
|
+
throw new DuplicateMessageHandlerError(handlerId);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
indexHandlerTypes(handler) {
|
|
38
|
+
for (const messageType of handler.messageTypes) {
|
|
39
|
+
let typeSet = this.handlersByType.get(messageType);
|
|
40
|
+
if (typeSet === undefined) {
|
|
41
|
+
typeSet = new Set();
|
|
42
|
+
this.handlersByType.set(messageType, typeSet);
|
|
43
|
+
}
|
|
44
|
+
typeSet.add(handler.id);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
unregister(handlerId) {
|
|
48
|
+
const entry = this.handlers.get(handlerId);
|
|
49
|
+
if (entry === undefined)
|
|
50
|
+
return false;
|
|
51
|
+
this.removeHandlerFromTypeIndex(entry);
|
|
52
|
+
this.handlers.delete(handlerId);
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
removeHandlerFromTypeIndex(entry) {
|
|
56
|
+
for (const messageType of entry.handler.messageTypes) {
|
|
57
|
+
const typeSet = this.handlersByType.get(messageType);
|
|
58
|
+
if (typeSet !== undefined) {
|
|
59
|
+
typeSet.delete(entry.handler.id);
|
|
60
|
+
if (typeSet.size === 0)
|
|
61
|
+
this.handlersByType.delete(messageType);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
resolve(messageType, options = {}) {
|
|
66
|
+
const handlerIds = this.handlersByType.get(messageType);
|
|
67
|
+
if (handlerIds === undefined || handlerIds.size === 0)
|
|
68
|
+
return [];
|
|
69
|
+
return this.buildHandlerList(handlerIds, options);
|
|
70
|
+
}
|
|
71
|
+
buildHandlerList(handlerIds, options) {
|
|
72
|
+
const result = [];
|
|
73
|
+
for (const handlerId of handlerIds) {
|
|
74
|
+
const entry = this.handlers.get(handlerId);
|
|
75
|
+
if (entry === undefined)
|
|
76
|
+
continue;
|
|
77
|
+
if (this.shouldExcludeHandler(entry.handler, options))
|
|
78
|
+
continue;
|
|
79
|
+
result.push(entry.handler);
|
|
80
|
+
}
|
|
81
|
+
return result.sort((a, b) => (a.priority ?? 100) - (b.priority ?? 100));
|
|
82
|
+
}
|
|
83
|
+
shouldExcludeHandler(handler, options) {
|
|
84
|
+
if (options.includeDisabled !== true && handler.enabled === false)
|
|
85
|
+
return true;
|
|
86
|
+
if (options.maxPriority !== undefined &&
|
|
87
|
+
(handler.priority ?? 100) > options.maxPriority)
|
|
88
|
+
return true;
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
get(handlerId) {
|
|
92
|
+
return this.handlers.get(handlerId)?.handler;
|
|
93
|
+
}
|
|
94
|
+
has(handlerId) {
|
|
95
|
+
return this.handlers.has(handlerId);
|
|
96
|
+
}
|
|
97
|
+
getHandlerIds() {
|
|
98
|
+
return Array.from(this.handlers.keys());
|
|
99
|
+
}
|
|
100
|
+
getRegisteredTypes() {
|
|
101
|
+
return Array.from(this.handlersByType.keys());
|
|
102
|
+
}
|
|
103
|
+
get size() {
|
|
104
|
+
return this.handlers.size;
|
|
105
|
+
}
|
|
106
|
+
clear() {
|
|
107
|
+
this.handlers.clear();
|
|
108
|
+
this.handlersByType.clear();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=handlerRegistryStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlerRegistryStore.js","sourceRoot":"","sources":["../../src/handlerRegistry/handlerRegistryStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HandlerRegistry type definitions for Zudojs.
|
|
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,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D;;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 Zudojs.
|
|
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
|
+
* @zudojs/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
|
+
* @zudojs/messaging
|
|
3
|
+
*
|
|
4
|
+
* In-process message bus infrastructure for the Zudojs framework.
|
|
5
|
+
*
|
|
6
|
+
* Provides the foundational messaging primitives that CQRS and Events
|
|
7
|
+
* specialize into commands/queries and domain events respectively.
|
|
8
|
+
*
|
|
9
|
+
* @module @zudojs/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
|
+
* @zudojs/messaging
|
|
3
|
+
*
|
|
4
|
+
* In-process message bus infrastructure for the Zudojs framework.
|
|
5
|
+
*
|
|
6
|
+
* Provides the foundational messaging primitives that CQRS and Events
|
|
7
|
+
* specialize into commands/queries and domain events respectively.
|
|
8
|
+
*
|
|
9
|
+
* @module @zudojs/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
|
+
* @zudojs/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
|
+
* @zudojs/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 @zudojs/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
|