@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.
Files changed (88) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +41 -0
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/dispatcher/dispatcherCore.d.ts +29 -0
  5. package/dist/dispatcher/dispatcherCore.d.ts.map +1 -0
  6. package/dist/dispatcher/dispatcherCore.js +117 -0
  7. package/dist/dispatcher/dispatcherCore.js.map +1 -0
  8. package/dist/dispatcher/dispatcherType.type.d.ts +83 -0
  9. package/dist/dispatcher/dispatcherType.type.d.ts.map +1 -0
  10. package/dist/dispatcher/dispatcherType.type.js +10 -0
  11. package/dist/dispatcher/dispatcherType.type.js.map +1 -0
  12. package/dist/dispatcher/index.d.ts +8 -0
  13. package/dist/dispatcher/index.d.ts.map +1 -0
  14. package/dist/dispatcher/index.js +7 -0
  15. package/dist/dispatcher/index.js.map +1 -0
  16. package/dist/errors/index.d.ts +7 -0
  17. package/dist/errors/index.d.ts.map +1 -0
  18. package/dist/errors/index.js +7 -0
  19. package/dist/errors/index.js.map +1 -0
  20. package/dist/handlerRegistry/handlerRegistryStore.d.ts +32 -0
  21. package/dist/handlerRegistry/handlerRegistryStore.d.ts.map +1 -0
  22. package/dist/handlerRegistry/handlerRegistryStore.js +111 -0
  23. package/dist/handlerRegistry/handlerRegistryStore.js.map +1 -0
  24. package/dist/handlerRegistry/handlerRegistryType.type.d.ts +41 -0
  25. package/dist/handlerRegistry/handlerRegistryType.type.d.ts.map +1 -0
  26. package/dist/handlerRegistry/handlerRegistryType.type.js +11 -0
  27. package/dist/handlerRegistry/handlerRegistryType.type.js.map +1 -0
  28. package/dist/handlerRegistry/index.d.ts +8 -0
  29. package/dist/handlerRegistry/index.d.ts.map +1 -0
  30. package/dist/handlerRegistry/index.js +7 -0
  31. package/dist/handlerRegistry/index.js.map +1 -0
  32. package/dist/index.d.ts +19 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +27 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/message/index.d.ts +8 -0
  37. package/dist/message/index.d.ts.map +1 -0
  38. package/dist/message/index.js +7 -0
  39. package/dist/message/index.js.map +1 -0
  40. package/dist/message/messageFactory.d.ts +36 -0
  41. package/dist/message/messageFactory.d.ts.map +1 -0
  42. package/dist/message/messageFactory.js +95 -0
  43. package/dist/message/messageFactory.js.map +1 -0
  44. package/dist/message/messageType.type.d.ts +99 -0
  45. package/dist/message/messageType.type.d.ts.map +1 -0
  46. package/dist/message/messageType.type.js +11 -0
  47. package/dist/message/messageType.type.js.map +1 -0
  48. package/dist/messageBus/index.d.ts +8 -0
  49. package/dist/messageBus/index.d.ts.map +1 -0
  50. package/dist/messageBus/index.js +7 -0
  51. package/dist/messageBus/index.js.map +1 -0
  52. package/dist/messageBus/messageBusCore.d.ts +36 -0
  53. package/dist/messageBus/messageBusCore.d.ts.map +1 -0
  54. package/dist/messageBus/messageBusCore.js +101 -0
  55. package/dist/messageBus/messageBusCore.js.map +1 -0
  56. package/dist/messageBus/messageBusType.type.d.ts +83 -0
  57. package/dist/messageBus/messageBusType.type.d.ts.map +1 -0
  58. package/dist/messageBus/messageBusType.type.js +10 -0
  59. package/dist/messageBus/messageBusType.type.js.map +1 -0
  60. package/dist/messageContext/index.d.ts +8 -0
  61. package/dist/messageContext/index.d.ts.map +1 -0
  62. package/dist/messageContext/index.js +7 -0
  63. package/dist/messageContext/index.js.map +1 -0
  64. package/dist/messageContext/messageContextType.type.d.ts +52 -0
  65. package/dist/messageContext/messageContextType.type.d.ts.map +1 -0
  66. package/dist/messageContext/messageContextType.type.js +28 -0
  67. package/dist/messageContext/messageContextType.type.js.map +1 -0
  68. package/dist/messageHandler/index.d.ts +8 -0
  69. package/dist/messageHandler/index.d.ts.map +1 -0
  70. package/dist/messageHandler/index.js +7 -0
  71. package/dist/messageHandler/index.js.map +1 -0
  72. package/dist/messageHandler/messageHandlerType.type.d.ts +62 -0
  73. package/dist/messageHandler/messageHandlerType.type.d.ts.map +1 -0
  74. package/dist/messageHandler/messageHandlerType.type.js +18 -0
  75. package/dist/messageHandler/messageHandlerType.type.js.map +1 -0
  76. package/dist/messageMiddleware/index.d.ts +8 -0
  77. package/dist/messageMiddleware/index.d.ts.map +1 -0
  78. package/dist/messageMiddleware/index.js +7 -0
  79. package/dist/messageMiddleware/index.js.map +1 -0
  80. package/dist/messageMiddleware/messageMiddlewarePipeline.d.ts +13 -0
  81. package/dist/messageMiddleware/messageMiddlewarePipeline.d.ts.map +1 -0
  82. package/dist/messageMiddleware/messageMiddlewarePipeline.js +96 -0
  83. package/dist/messageMiddleware/messageMiddlewarePipeline.js.map +1 -0
  84. package/dist/messageMiddleware/messageMiddlewareType.type.d.ts +96 -0
  85. package/dist/messageMiddleware/messageMiddlewareType.type.d.ts.map +1 -0
  86. package/dist/messageMiddleware/messageMiddlewareType.type.js +10 -0
  87. package/dist/messageMiddleware/messageMiddlewareType.type.js.map +1 -0
  88. package/package.json +50 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * MessageHandler type definitions for Zudojs.
3
+ *
4
+ * Handlers are the consumer side of the messaging system.
5
+ * They receive messages and produce results.
6
+ *
7
+ * @module messageHandler/messageHandlerType
8
+ */
9
+ import type { Message } from "../message/messageType.type.js";
10
+ import type { MessageContext } from "../messageContext/messageContextType.type.js";
11
+ /**
12
+ * Result of handling a message.
13
+ *
14
+ * Handlers can return either a value directly or a structured
15
+ * result with metadata.
16
+ */
17
+ export interface HandlerResult<TResult = unknown> {
18
+ /** The result value. */
19
+ readonly value: TResult;
20
+ /** Optional result metadata. */
21
+ readonly metadata?: Readonly<Record<string, unknown>>;
22
+ }
23
+ /**
24
+ * A function that handles a message and returns a result.
25
+ *
26
+ * @typeParam TMessage - The message type to handle
27
+ * @typeParam TResult - The result type returned by the handler
28
+ */
29
+ export type MessageHandler<TMessage extends Message = Message, TResult = unknown> = (message: TMessage, context: MessageContext) => Promise<TResult> | TResult;
30
+ /**
31
+ * Message handler with metadata.
32
+ */
33
+ export interface NamedMessageHandler<TMessage extends Message = Message, TResult = unknown> {
34
+ /** Unique handler identifier. */
35
+ readonly id: string;
36
+ /** Human-readable name for debugging. */
37
+ readonly name: string;
38
+ /** The handler function. */
39
+ readonly handler: MessageHandler<TMessage, TResult>;
40
+ /** Message types this handler processes. */
41
+ readonly messageTypes: readonly string[];
42
+ /** Execution priority (lower = earlier). Default: 100. */
43
+ readonly priority?: number;
44
+ /** Whether this handler is enabled. */
45
+ readonly enabled?: boolean;
46
+ }
47
+ /**
48
+ * A handler-like value: either a function or an object with a
49
+ * handle method.
50
+ */
51
+ export type MessageHandlerLike<TMessage extends Message = Message, TResult = unknown> = MessageHandler<TMessage, TResult> | {
52
+ handle: MessageHandler<TMessage, TResult>;
53
+ };
54
+ /**
55
+ * Handler factory function.
56
+ */
57
+ export type MessageHandlerFactory<TMessage extends Message = Message, TResult = unknown> = (options?: Record<string, unknown>) => NamedMessageHandler<TMessage, TResult>;
58
+ /**
59
+ * Resolves a MessageHandlerLike to a plain MessageHandler function.
60
+ */
61
+ export declare function resolveMessageHandler<TMessage extends Message = Message, TResult = unknown>(handler: MessageHandlerLike<TMessage, TResult>): MessageHandler<TMessage, TResult>;
62
+ //# sourceMappingURL=messageHandlerType.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageHandlerType.type.d.ts","sourceRoot":"","sources":["../../src/messageHandler/messageHandlerType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,gCAAgC,CAAC;AAE9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAEnF;;;;;GAKG;AACH,MAAM,WAAW,aAAa,CAAC,OAAO,GAAG,OAAO;IAC9C,wBAAwB;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAExB,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,CACxB,QAAQ,SAAS,OAAO,GAAG,OAAO,EAClC,OAAO,GAAG,OAAO,IACf,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAClC,QAAQ,SAAS,OAAO,GAAG,OAAO,EAClC,OAAO,GAAG,OAAO;IAEjB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEpD,4CAA4C;IAC5C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAEzC,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B,uCAAuC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAC5B,QAAQ,SAAS,OAAO,GAAG,OAAO,EAClC,OAAO,GAAG,OAAO,IAEf,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,GACjC;IAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,qBAAqB,CAC/B,QAAQ,SAAS,OAAO,GAAG,OAAO,EAClC,OAAO,GAAG,OAAO,IACf,CACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAE5C;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,SAAS,OAAO,GAAG,OAAO,EAClC,OAAO,GAAG,OAAO,EAEjB,OAAO,EAAE,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,GAC7C,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAKnC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * MessageHandler type definitions for Zudojs.
3
+ *
4
+ * Handlers are the consumer side of the messaging system.
5
+ * They receive messages and produce results.
6
+ *
7
+ * @module messageHandler/messageHandlerType
8
+ */
9
+ /**
10
+ * Resolves a MessageHandlerLike to a plain MessageHandler function.
11
+ */
12
+ export function resolveMessageHandler(handler) {
13
+ if (typeof handler === "function") {
14
+ return handler;
15
+ }
16
+ return handler.handle;
17
+ }
18
+ //# sourceMappingURL=messageHandlerType.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageHandlerType.type.js","sourceRoot":"","sources":["../../src/messageHandler/messageHandlerType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA8EH;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAInC,OAA8C;IAE9C,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @zudojs/messaging/messageMiddleware
3
+ *
4
+ * Message middleware type definitions and pipeline execution.
5
+ */
6
+ export type { MessageMiddlewareContext, MessageMiddlewareNext, MessageMiddleware, MessageMiddlewareObject, MessageMiddlewareLike, MessageMiddlewareOptions, RegisteredMessageMiddleware, MessageMiddlewareExecution, MessageMiddlewarePipelineResult, MessageMiddlewarePipelineOptions, } from "./messageMiddlewareType.type.js";
7
+ export { runMessagePipeline } from "./messageMiddlewarePipeline.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messageMiddleware/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,GACjC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @zudojs/messaging/messageMiddleware
3
+ *
4
+ * Message middleware type definitions and pipeline execution.
5
+ */
6
+ export { runMessagePipeline } from "./messageMiddlewarePipeline.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messageMiddleware/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Message middleware composition and pipeline execution.
3
+ *
4
+ * @module messageMiddleware/messageMiddlewarePipeline
5
+ */
6
+ import type { MessageMiddlewareLike, MessageMiddlewareContext, MessageMiddlewarePipelineResult, MessageMiddlewarePipelineOptions } from "./messageMiddlewareType.type.js";
7
+ import type { Message } from "../message/messageType.type.js";
8
+ /**
9
+ * Runs a handler through a middleware pipeline and returns the
10
+ * result with execution metadata.
11
+ */
12
+ export declare function runMessagePipeline<TResult>(middlewareList: readonly MessageMiddlewareLike<Message, TResult>[], handler: (message: Message, context: MessageMiddlewareContext<Message>) => Promise<TResult>, message: Message, options?: MessageMiddlewarePipelineOptions): Promise<MessageMiddlewarePipelineResult<TResult>>;
13
+ //# sourceMappingURL=messageMiddlewarePipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageMiddlewarePipeline.d.ts","sourceRoot":"","sources":["../../src/messageMiddleware/messageMiddlewarePipeline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAEV,qBAAqB,EAErB,wBAAwB,EACxB,+BAA+B,EAC/B,gCAAgC,EAEjC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EACV,OAAO,EAGR,MAAM,gCAAgC,CAAC;AAkDxC;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAC9C,cAAc,EAAE,SAAS,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAClE,OAAO,EAAE,CACP,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,wBAAwB,CAAC,OAAO,CAAC,KACvC,OAAO,CAAC,OAAO,CAAC,EACrB,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,CA+DnD"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Message middleware composition and pipeline execution.
3
+ *
4
+ * @module messageMiddleware/messageMiddlewarePipeline
5
+ */
6
+ /**
7
+ * Compose an array of middleware into a single function.
8
+ *
9
+ * The returned function executes middleware in order.
10
+ * If no middleware is provided, the handler is called directly.
11
+ */
12
+ function compose(middlewareList, handler) {
13
+ if (middlewareList.length === 0) {
14
+ return handler;
15
+ }
16
+ return async (context) => {
17
+ let index = -1;
18
+ async function dispatch(i) {
19
+ if (i <= index) {
20
+ throw new Error("next() called multiple times");
21
+ }
22
+ index = i;
23
+ if (i < middlewareList.length) {
24
+ const mw = middlewareList[i];
25
+ return mw(context, () => dispatch(i + 1));
26
+ }
27
+ return handler(context);
28
+ }
29
+ return dispatch(0);
30
+ };
31
+ }
32
+ /**
33
+ * Resolves a MessageMiddlewareLike to a plain MessageMiddleware function.
34
+ */
35
+ function resolveMiddlewareLike(mw) {
36
+ if (typeof mw === "function") {
37
+ return mw;
38
+ }
39
+ return mw.handle;
40
+ }
41
+ /**
42
+ * Runs a handler through a middleware pipeline and returns the
43
+ * result with execution metadata.
44
+ */
45
+ export async function runMessagePipeline(middlewareList, handler, message, options = {}) {
46
+ const executionId = `exec:${Date.now()}-${Math.random().toString(36).slice(2)}`;
47
+ const startedAt = new Date();
48
+ const signal = options.signal ?? new AbortController().signal;
49
+ const metadata = options.metadata ?? {};
50
+ const state = options.state ?? new Map();
51
+ const executions = [];
52
+ const resolvedMiddleware = middlewareList.map((mw) => {
53
+ const resolved = resolveMiddlewareLike(mw);
54
+ return async (ctx, next) => {
55
+ const mwStart = performance.now();
56
+ try {
57
+ return await resolved(ctx, next);
58
+ }
59
+ finally {
60
+ const duration = performance.now() - mwStart;
61
+ executions.push({
62
+ middlewareId: executionId,
63
+ result: undefined,
64
+ duration,
65
+ });
66
+ }
67
+ };
68
+ });
69
+ const pipelineStart = performance.now();
70
+ const composed = compose(resolvedMiddleware, async (ctx) => handler(message, ctx));
71
+ const context = {
72
+ message,
73
+ context: {
74
+ message,
75
+ correlationId: message.correlationId ??
76
+ message.id,
77
+ causationId: message.causationId ?? message.id,
78
+ headers: Object.freeze({ ...metadata }),
79
+ signal,
80
+ state,
81
+ startedAt,
82
+ },
83
+ signal,
84
+ metadata,
85
+ executionId,
86
+ startedAt,
87
+ state,
88
+ };
89
+ const result = await composed(context);
90
+ return {
91
+ result,
92
+ executions,
93
+ duration: performance.now() - pipelineStart,
94
+ };
95
+ }
96
+ //# sourceMappingURL=messageMiddlewarePipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageMiddlewarePipeline.js","sourceRoot":"","sources":["../../src/messageMiddleware/messageMiddlewarePipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Message middleware type definitions for Zudojs.
3
+ *
4
+ * Middleware wraps message dispatch with cross-cutting concerns
5
+ * like logging, validation, timeouts, and error handling.
6
+ *
7
+ * @module messageMiddleware/messageMiddlewareType
8
+ */
9
+ import type { Message } from "../message/messageType.type.js";
10
+ import type { MessageContext } from "../messageContext/messageContextType.type.js";
11
+ /**
12
+ * Context available to message middleware.
13
+ */
14
+ export interface MessageMiddlewareContext<TMessage extends Message = Message> {
15
+ /** The message being dispatched. */
16
+ readonly message: TMessage;
17
+ /** The dispatch context. */
18
+ readonly context: MessageContext;
19
+ /** AbortSignal for cancellation. */
20
+ readonly signal: AbortSignal;
21
+ /** Middleware-specific metadata. */
22
+ readonly metadata: Readonly<Record<string, unknown>>;
23
+ /** Unique dispatch execution ID. */
24
+ readonly executionId: string;
25
+ /** When dispatch started. */
26
+ readonly startedAt: Date;
27
+ /** Mutable state for middleware. */
28
+ readonly state: Map<string, unknown>;
29
+ }
30
+ /**
31
+ * Next function in the middleware chain.
32
+ */
33
+ export type MessageMiddlewareNext<TResult = unknown> = () => Promise<TResult>;
34
+ /**
35
+ * A middleware function that processes a message dispatch.
36
+ */
37
+ export type MessageMiddleware<TMessage extends Message = Message, TResult = unknown> = (context: MessageMiddlewareContext<TMessage>, next: MessageMiddlewareNext<TResult>) => Promise<TResult>;
38
+ /**
39
+ * Middleware object with a handle method.
40
+ */
41
+ export interface MessageMiddlewareObject<TMessage extends Message = Message, TResult = unknown> {
42
+ readonly handle: MessageMiddleware<TMessage, TResult>;
43
+ }
44
+ /**
45
+ * A middleware-like value: either a function or an object with
46
+ * a handle method.
47
+ */
48
+ export type MessageMiddlewareLike<TMessage extends Message = Message, TResult = unknown> = MessageMiddleware<TMessage, TResult> | MessageMiddlewareObject<TMessage, TResult>;
49
+ /**
50
+ * Options for registering middleware.
51
+ */
52
+ export interface MessageMiddlewareOptions {
53
+ /** Unique middleware identifier. */
54
+ readonly id?: string;
55
+ /** Human-readable description. */
56
+ readonly description?: string;
57
+ /** Execution priority (lower = earlier). Default: 100. */
58
+ readonly priority?: number;
59
+ /** Whether this middleware is enabled. */
60
+ readonly enabled?: boolean;
61
+ }
62
+ /**
63
+ * Registered middleware entry.
64
+ */
65
+ export interface RegisteredMessageMiddleware<TMessage extends Message = Message, TResult = unknown> {
66
+ readonly id: string;
67
+ readonly description?: string;
68
+ readonly priority: number;
69
+ readonly enabled: boolean;
70
+ readonly middleware: MessageMiddlewareLike<TMessage, TResult>;
71
+ }
72
+ /**
73
+ * Execution record for a single middleware.
74
+ */
75
+ export interface MessageMiddlewareExecution<TResult = unknown> {
76
+ readonly middlewareId: string;
77
+ readonly result: TResult;
78
+ readonly duration: number;
79
+ }
80
+ /**
81
+ * Result of running the middleware pipeline.
82
+ */
83
+ export interface MessageMiddlewarePipelineResult<TResult = unknown> {
84
+ readonly result: TResult;
85
+ readonly executions: readonly MessageMiddlewareExecution[];
86
+ readonly duration: number;
87
+ }
88
+ /**
89
+ * Options for pipeline execution.
90
+ */
91
+ export interface MessageMiddlewarePipelineOptions {
92
+ readonly signal?: AbortSignal;
93
+ readonly metadata?: Readonly<Record<string, unknown>>;
94
+ readonly state?: Map<string, unknown>;
95
+ }
96
+ //# sourceMappingURL=messageMiddlewareType.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageMiddlewareType.type.d.ts","sourceRoot":"","sources":["../../src/messageMiddleware/messageMiddlewareType.type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Message middleware type definitions for Zudojs.
3
+ *
4
+ * Middleware wraps message dispatch with cross-cutting concerns
5
+ * like logging, validation, timeouts, and error handling.
6
+ *
7
+ * @module messageMiddleware/messageMiddlewareType
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=messageMiddlewareType.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messageMiddlewareType.type.js","sourceRoot":"","sources":["../../src/messageMiddleware/messageMiddlewareType.type.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@zudojs/messaging",
3
+ "version": "0.0.1",
4
+ "description": "In-process message bus infrastructure with handlers, middleware, and publish/subscribe patterns.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "dependencies": {
19
+ "@zudojs/errors": "0.0.1",
20
+ "@zudojs/constants": "0.0.1"
21
+ },
22
+ "engines": {
23
+ "node": ">=24.0.0"
24
+ },
25
+ "devDependencies": {
26
+ "vitest": "^4.1.11"
27
+ },
28
+ "license": "MIT",
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "keywords": [
33
+ "zudojs",
34
+ "messaging",
35
+ "message-bus",
36
+ "pubsub"
37
+ ],
38
+ "homepage": "https://github.com/oyinlola-tech/zudo#readme",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "https://github.com/oyinlola-tech/zudo"
42
+ },
43
+ "scripts": {
44
+ "build": "tsc -p tsconfig.json",
45
+ "typecheck": "tsc -p tsconfig.json --noEmit",
46
+ "test": "vitest run",
47
+ "test:watch": "vitest",
48
+ "clean": "rm -rf dist"
49
+ }
50
+ }