@kronos-ts/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/dist/command-bus.d.ts +30 -0
- package/dist/command-bus.d.ts.map +1 -0
- package/dist/command-bus.js +2 -0
- package/dist/command-bus.js.map +1 -0
- package/dist/command-handler.d.ts +58 -0
- package/dist/command-handler.d.ts.map +1 -0
- package/dist/command-handler.js +12 -0
- package/dist/command-handler.js.map +1 -0
- package/dist/command-handling-module.d.ts +53 -0
- package/dist/command-handling-module.d.ts.map +1 -0
- package/dist/command-handling-module.js +130 -0
- package/dist/command-handling-module.js.map +1 -0
- package/dist/correlation-data.d.ts +79 -0
- package/dist/correlation-data.d.ts.map +1 -0
- package/dist/correlation-data.js +133 -0
- package/dist/correlation-data.js.map +1 -0
- package/dist/dead-letter-queue.d.ts +134 -0
- package/dist/dead-letter-queue.d.ts.map +1 -0
- package/dist/dead-letter-queue.js +176 -0
- package/dist/dead-letter-queue.js.map +1 -0
- package/dist/dead-lettering-handler.d.ts +42 -0
- package/dist/dead-lettering-handler.d.ts.map +1 -0
- package/dist/dead-lettering-handler.js +67 -0
- package/dist/dead-lettering-handler.js.map +1 -0
- package/dist/descriptor.d.ts +135 -0
- package/dist/descriptor.d.ts.map +1 -0
- package/dist/descriptor.js +36 -0
- package/dist/descriptor.js.map +1 -0
- package/dist/emit-update.d.ts +22 -0
- package/dist/emit-update.d.ts.map +1 -0
- package/dist/emit-update.js +23 -0
- package/dist/emit-update.js.map +1 -0
- package/dist/event-bus.d.ts +29 -0
- package/dist/event-bus.d.ts.map +1 -0
- package/dist/event-bus.js +22 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/event-criteria.d.ts +87 -0
- package/dist/event-criteria.d.ts.map +1 -0
- package/dist/event-criteria.js +90 -0
- package/dist/event-criteria.js.map +1 -0
- package/dist/event-gateway.d.ts +19 -0
- package/dist/event-gateway.d.ts.map +1 -0
- package/dist/event-gateway.js +22 -0
- package/dist/event-gateway.js.map +1 -0
- package/dist/event-handler.d.ts +30 -0
- package/dist/event-handler.d.ts.map +1 -0
- package/dist/event-handler.js +18 -0
- package/dist/event-handler.js.map +1 -0
- package/dist/event-processor-builder.d.ts +148 -0
- package/dist/event-processor-builder.d.ts.map +1 -0
- package/dist/event-processor-builder.js +175 -0
- package/dist/event-processor-builder.js.map +1 -0
- package/dist/event-processor.d.ts +10 -0
- package/dist/event-processor.d.ts.map +1 -0
- package/dist/event-processor.js +2 -0
- package/dist/event-processor.js.map +1 -0
- package/dist/event-sink.d.ts +23 -0
- package/dist/event-sink.d.ts.map +1 -0
- package/dist/event-sink.js +2 -0
- package/dist/event-sink.js.map +1 -0
- package/dist/event-source.d.ts +98 -0
- package/dist/event-source.d.ts.map +1 -0
- package/dist/event-source.js +191 -0
- package/dist/event-source.js.map +1 -0
- package/dist/gateway.d.ts +68 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +62 -0
- package/dist/gateway.js.map +1 -0
- package/dist/handler-enhancer.d.ts +53 -0
- package/dist/handler-enhancer.d.ts.map +1 -0
- package/dist/handler-enhancer.js +17 -0
- package/dist/handler-enhancer.js.map +1 -0
- package/dist/handler.d.ts +51 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +26 -0
- package/dist/handler.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +103 -0
- package/dist/index.js.map +1 -0
- package/dist/intercepting-command-bus.d.ts +17 -0
- package/dist/intercepting-command-bus.d.ts.map +1 -0
- package/dist/intercepting-command-bus.js +54 -0
- package/dist/intercepting-command-bus.js.map +1 -0
- package/dist/intercepting-event-bus.d.ts +8 -0
- package/dist/intercepting-event-bus.d.ts.map +1 -0
- package/dist/intercepting-event-bus.js +22 -0
- package/dist/intercepting-event-bus.js.map +1 -0
- package/dist/intercepting-query-bus.d.ts +17 -0
- package/dist/intercepting-query-bus.d.ts.map +1 -0
- package/dist/intercepting-query-bus.js +68 -0
- package/dist/intercepting-query-bus.js.map +1 -0
- package/dist/interceptor.d.ts +46 -0
- package/dist/interceptor.d.ts.map +1 -0
- package/dist/interceptor.js +2 -0
- package/dist/interceptor.js.map +1 -0
- package/dist/message-monitor-registry.d.ts +28 -0
- package/dist/message-monitor-registry.d.ts.map +1 -0
- package/dist/message-monitor-registry.js +37 -0
- package/dist/message-monitor-registry.js.map +1 -0
- package/dist/message-monitor.d.ts +36 -0
- package/dist/message-monitor.d.ts.map +1 -0
- package/dist/message-monitor.js +39 -0
- package/dist/message-monitor.js.map +1 -0
- package/dist/message.d.ts +42 -0
- package/dist/message.d.ts.map +1 -0
- package/dist/message.js +2 -0
- package/dist/message.js.map +1 -0
- package/dist/processing-state.d.ts +115 -0
- package/dist/processing-state.d.ts.map +1 -0
- package/dist/processing-state.js +205 -0
- package/dist/processing-state.js.map +1 -0
- package/dist/processor-configuration.d.ts +51 -0
- package/dist/processor-configuration.d.ts.map +1 -0
- package/dist/processor-configuration.js +2 -0
- package/dist/processor-configuration.js.map +1 -0
- package/dist/query-bus.d.ts +51 -0
- package/dist/query-bus.d.ts.map +1 -0
- package/dist/query-bus.js +2 -0
- package/dist/query-bus.js.map +1 -0
- package/dist/query-handler.d.ts +35 -0
- package/dist/query-handler.d.ts.map +1 -0
- package/dist/query-handler.js +19 -0
- package/dist/query-handler.js.map +1 -0
- package/dist/query-handling-module.d.ts +24 -0
- package/dist/query-handling-module.d.ts.map +1 -0
- package/dist/query-handling-module.js +32 -0
- package/dist/query-handling-module.js.map +1 -0
- package/dist/replay-token.d.ts +31 -0
- package/dist/replay-token.d.ts.map +1 -0
- package/dist/replay-token.js +37 -0
- package/dist/replay-token.js.map +1 -0
- package/dist/retrying-command-bus.d.ts +32 -0
- package/dist/retrying-command-bus.d.ts.map +1 -0
- package/dist/retrying-command-bus.js +58 -0
- package/dist/retrying-command-bus.js.map +1 -0
- package/dist/routing-strategy.d.ts +30 -0
- package/dist/routing-strategy.d.ts.map +1 -0
- package/dist/routing-strategy.js +37 -0
- package/dist/routing-strategy.js.map +1 -0
- package/dist/segment.d.ts +72 -0
- package/dist/segment.d.ts.map +1 -0
- package/dist/segment.js +103 -0
- package/dist/segment.js.map +1 -0
- package/dist/send.d.ts +28 -0
- package/dist/send.d.ts.map +1 -0
- package/dist/send.js +36 -0
- package/dist/send.js.map +1 -0
- package/dist/serializer.d.ts +40 -0
- package/dist/serializer.d.ts.map +1 -0
- package/dist/serializer.js +90 -0
- package/dist/serializer.js.map +1 -0
- package/dist/simple-command-bus.d.ts +23 -0
- package/dist/simple-command-bus.d.ts.map +1 -0
- package/dist/simple-command-bus.js +49 -0
- package/dist/simple-command-bus.js.map +1 -0
- package/dist/simple-query-bus.d.ts +16 -0
- package/dist/simple-query-bus.d.ts.map +1 -0
- package/dist/simple-query-bus.js +122 -0
- package/dist/simple-query-bus.js.map +1 -0
- package/dist/span-factory.d.ts +58 -0
- package/dist/span-factory.d.ts.map +1 -0
- package/dist/span-factory.js +19 -0
- package/dist/span-factory.js.map +1 -0
- package/dist/streaming-event-processor.d.ts +65 -0
- package/dist/streaming-event-processor.d.ts.map +1 -0
- package/dist/streaming-event-processor.js +239 -0
- package/dist/streaming-event-processor.js.map +1 -0
- package/dist/subscribing-event-processor.d.ts +57 -0
- package/dist/subscribing-event-processor.d.ts.map +1 -0
- package/dist/subscribing-event-processor.js +100 -0
- package/dist/subscribing-event-processor.js.map +1 -0
- package/dist/subscription-query.d.ts +63 -0
- package/dist/subscription-query.d.ts.map +1 -0
- package/dist/subscription-query.js +119 -0
- package/dist/subscription-query.js.map +1 -0
- package/dist/token-store.d.ts +83 -0
- package/dist/token-store.d.ts.map +1 -0
- package/dist/token-store.js +112 -0
- package/dist/token-store.js.map +1 -0
- package/dist/tracing-command-bus.d.ts +16 -0
- package/dist/tracing-command-bus.d.ts.map +1 -0
- package/dist/tracing-command-bus.js +44 -0
- package/dist/tracing-command-bus.js.map +1 -0
- package/dist/tracing-handler-enhancer.d.ts +11 -0
- package/dist/tracing-handler-enhancer.d.ts.map +1 -0
- package/dist/tracing-handler-enhancer.js +27 -0
- package/dist/tracing-handler-enhancer.js.map +1 -0
- package/dist/tracking-event-processor.d.ts +72 -0
- package/dist/tracking-event-processor.d.ts.map +1 -0
- package/dist/tracking-event-processor.js +223 -0
- package/dist/tracking-event-processor.js.map +1 -0
- package/dist/tracking-token.d.ts +120 -0
- package/dist/tracking-token.d.ts.map +1 -0
- package/dist/tracking-token.js +132 -0
- package/dist/tracking-token.js.map +1 -0
- package/dist/transaction.d.ts +60 -0
- package/dist/transaction.d.ts.map +1 -0
- package/dist/transaction.js +74 -0
- package/dist/transaction.js.map +1 -0
- package/dist/unit-of-work.d.ts +41 -0
- package/dist/unit-of-work.d.ts.map +1 -0
- package/dist/unit-of-work.js +96 -0
- package/dist/unit-of-work.js.map +1 -0
- package/dist/upcaster.d.ts +91 -0
- package/dist/upcaster.d.ts.map +1 -0
- package/dist/upcaster.js +114 -0
- package/dist/upcaster.js.map +1 -0
- package/dist/with-namespace.d.ts +59 -0
- package/dist/with-namespace.d.ts.map +1 -0
- package/dist/with-namespace.js +42 -0
- package/dist/with-namespace.js.map +1 -0
- package/package.json +65 -0
- package/src/command-bus.ts +34 -0
- package/src/command-handler.ts +116 -0
- package/src/command-handling-module.ts +183 -0
- package/src/correlation-data.ts +169 -0
- package/src/dead-letter-queue.ts +330 -0
- package/src/dead-lettering-handler.ts +109 -0
- package/src/descriptor.ts +176 -0
- package/src/emit-update.ts +35 -0
- package/src/event-bus.ts +45 -0
- package/src/event-criteria.ts +141 -0
- package/src/event-gateway.ts +42 -0
- package/src/event-handler.ts +44 -0
- package/src/event-processor-builder.ts +246 -0
- package/src/event-processor.ts +9 -0
- package/src/event-sink.ts +23 -0
- package/src/event-source.ts +301 -0
- package/src/gateway.ts +144 -0
- package/src/handler-enhancer.ts +70 -0
- package/src/handler.ts +133 -0
- package/src/index.ts +356 -0
- package/src/intercepting-command-bus.ts +73 -0
- package/src/intercepting-event-bus.ts +29 -0
- package/src/intercepting-query-bus.ts +104 -0
- package/src/interceptor.ts +48 -0
- package/src/message-monitor-registry.ts +64 -0
- package/src/message-monitor.ts +68 -0
- package/src/message.ts +41 -0
- package/src/processing-state.ts +258 -0
- package/src/processor-configuration.ts +59 -0
- package/src/query-bus.ts +69 -0
- package/src/query-handler.ts +49 -0
- package/src/query-handling-module.ts +44 -0
- package/src/replay-token.ts +53 -0
- package/src/retrying-command-bus.ts +80 -0
- package/src/routing-strategy.ts +59 -0
- package/src/segment.ts +136 -0
- package/src/send.ts +44 -0
- package/src/serializer.ts +122 -0
- package/src/simple-command-bus.ts +59 -0
- package/src/simple-query-bus.ts +158 -0
- package/src/span-factory.ts +81 -0
- package/src/streaming-event-processor.ts +351 -0
- package/src/subscribing-event-processor.ts +169 -0
- package/src/subscription-query.ts +173 -0
- package/src/token-store.ts +211 -0
- package/src/tracing-command-bus.ts +52 -0
- package/src/tracing-handler-enhancer.ts +34 -0
- package/src/tracking-event-processor.ts +336 -0
- package/src/tracking-token.ts +231 -0
- package/src/transaction.ts +98 -0
- package/src/unit-of-work.ts +138 -0
- package/src/upcaster.ts +174 -0
- package/src/with-namespace.ts +75 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A query bus decorator that adds dispatch and handler interceptor chains
|
|
3
|
+
* to any {@link QueryBus} implementation.
|
|
4
|
+
*
|
|
5
|
+
* {@link createSimpleQueryBus} handles dispatch + subscribe only;
|
|
6
|
+
* this decorator layers interceptor support on top.
|
|
7
|
+
*/
|
|
8
|
+
export function createInterceptingQueryBus(delegate) {
|
|
9
|
+
const dispatchInterceptors = [];
|
|
10
|
+
const handlerInterceptors = [];
|
|
11
|
+
return {
|
|
12
|
+
async query(message) {
|
|
13
|
+
let interceptedMessage = message;
|
|
14
|
+
for (const interceptor of dispatchInterceptors) {
|
|
15
|
+
interceptedMessage = await interceptor(interceptedMessage);
|
|
16
|
+
}
|
|
17
|
+
return delegate.query(interceptedMessage);
|
|
18
|
+
},
|
|
19
|
+
subscribe(queryName, handler) {
|
|
20
|
+
// Wrap the handler with handler interceptors
|
|
21
|
+
const wrappedHandler = (message) => {
|
|
22
|
+
if (handlerInterceptors.length === 0) {
|
|
23
|
+
return handler(message);
|
|
24
|
+
}
|
|
25
|
+
let chain = () => handler(message);
|
|
26
|
+
for (let i = handlerInterceptors.length - 1; i >= 0; i--) {
|
|
27
|
+
const interceptor = handlerInterceptors[i];
|
|
28
|
+
const next = chain;
|
|
29
|
+
chain = () => interceptor(message, next);
|
|
30
|
+
}
|
|
31
|
+
return chain();
|
|
32
|
+
};
|
|
33
|
+
delegate.subscribe(queryName, wrappedHandler);
|
|
34
|
+
},
|
|
35
|
+
subscriptionQuery(message, bufferSize) {
|
|
36
|
+
return delegate.subscriptionQuery(message, bufferSize);
|
|
37
|
+
},
|
|
38
|
+
subscribeToUpdates(message, bufferSize) {
|
|
39
|
+
return delegate.subscribeToUpdates(message, bufferSize);
|
|
40
|
+
},
|
|
41
|
+
emitUpdate(queryName, filter, update) {
|
|
42
|
+
return delegate.emitUpdate(queryName, filter, update);
|
|
43
|
+
},
|
|
44
|
+
completeSubscription(queryName, filter) {
|
|
45
|
+
return delegate.completeSubscription(queryName, filter);
|
|
46
|
+
},
|
|
47
|
+
completeSubscriptionExceptionally(queryName, error, filter) {
|
|
48
|
+
return delegate.completeSubscriptionExceptionally(queryName, error, filter);
|
|
49
|
+
},
|
|
50
|
+
registerDispatchInterceptor(interceptor) {
|
|
51
|
+
dispatchInterceptors.push(interceptor);
|
|
52
|
+
return () => {
|
|
53
|
+
const idx = dispatchInterceptors.indexOf(interceptor);
|
|
54
|
+
if (idx >= 0)
|
|
55
|
+
dispatchInterceptors.splice(idx, 1);
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
registerHandlerInterceptor(interceptor) {
|
|
59
|
+
handlerInterceptors.push(interceptor);
|
|
60
|
+
return () => {
|
|
61
|
+
const idx = handlerInterceptors.indexOf(interceptor);
|
|
62
|
+
if (idx >= 0)
|
|
63
|
+
handlerInterceptors.splice(idx, 1);
|
|
64
|
+
};
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=intercepting-query-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intercepting-query-bus.js","sourceRoot":"","sources":["../src/intercepting-query-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Message } from "./message.js";
|
|
2
|
+
/**
|
|
3
|
+
* Intercepts a message before it reaches any handler.
|
|
4
|
+
* Can transform, enrich, or reject messages.
|
|
5
|
+
*
|
|
6
|
+
* Dispatch interceptors run in order — each receives the (possibly transformed)
|
|
7
|
+
* message from the previous interceptor.
|
|
8
|
+
*
|
|
9
|
+
* To reject a message, throw an error.
|
|
10
|
+
* To transform, return a new message.
|
|
11
|
+
* To pass through, return the message unchanged.
|
|
12
|
+
*
|
|
13
|
+
* UoW-scoped state (correlation data, tracing context, etc.) is read directly
|
|
14
|
+
* from ALS via module-level accessors (`getResource` / `setResource`) — no
|
|
15
|
+
* `ProcessingContext` parameter is threaded.
|
|
16
|
+
*
|
|
17
|
+
* **Known limitation:** Dispatch interceptors use a simple transform-or-throw
|
|
18
|
+
* approach. They do not receive a `proceed()` function that can be skipped to
|
|
19
|
+
* return an alternative result.
|
|
20
|
+
* A dispatch interceptor cannot halt the chain and return an alternative result
|
|
21
|
+
* — it can only transform the message or throw to reject it. This covers ~95%
|
|
22
|
+
* of use cases. Full chain semantics (with `proceed()`) would require the
|
|
23
|
+
* dispatch interceptor to also control the result type, which is a much larger
|
|
24
|
+
* refactor. If you need to conditionally prevent dispatch, throw a typed error
|
|
25
|
+
* and handle it at the call site.
|
|
26
|
+
*/
|
|
27
|
+
export interface DispatchInterceptor<M extends Message = Message> {
|
|
28
|
+
(message: M): M | Promise<M>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Intercepts a handler invocation. Wraps the actual handler call,
|
|
32
|
+
* enabling before/after logic (transactions, tracing, metrics, etc.)
|
|
33
|
+
*
|
|
34
|
+
* UoW-scoped state is read/written via module-level ALS
|
|
35
|
+
* accessors (`getResource` / `setResource`) — no `ProcessingContext`
|
|
36
|
+
* parameter is threaded.
|
|
37
|
+
*
|
|
38
|
+
* The `next` function calls the next interceptor in the chain, or the
|
|
39
|
+
* actual handler if this is the last interceptor.
|
|
40
|
+
*
|
|
41
|
+
* To skip handling entirely, don't call `next()` and return a result directly.
|
|
42
|
+
*/
|
|
43
|
+
export interface HandlerInterceptor<R = unknown> {
|
|
44
|
+
(message: Message, next: () => Promise<R>): Promise<R>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=interceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IAC9D,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO;IAC7C,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Message, CommandMessage, EventMessage, QueryMessage } from "./message.js";
|
|
2
|
+
import type { MessageMonitor } from "./message-monitor.js";
|
|
3
|
+
/**
|
|
4
|
+
* Registry for message monitors. Collects monitors per message type
|
|
5
|
+
* and provides combined monitors for each type.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
export interface MessageMonitorRegistry {
|
|
9
|
+
/** Register a monitor for all message types. */
|
|
10
|
+
registerMonitor(monitor: MessageMonitor<Message>): void;
|
|
11
|
+
/** Register a monitor for command messages. */
|
|
12
|
+
registerCommandMonitor(monitor: MessageMonitor<CommandMessage>): void;
|
|
13
|
+
/** Register a monitor for event messages. */
|
|
14
|
+
registerEventMonitor(monitor: MessageMonitor<EventMessage>): void;
|
|
15
|
+
/** Register a monitor for query messages. */
|
|
16
|
+
registerQueryMonitor(monitor: MessageMonitor<QueryMessage>): void;
|
|
17
|
+
/** Get the combined monitor for command messages. */
|
|
18
|
+
commandMonitor(): MessageMonitor<CommandMessage>;
|
|
19
|
+
/** Get the combined monitor for event messages. */
|
|
20
|
+
eventMonitor(): MessageMonitor<EventMessage>;
|
|
21
|
+
/** Get the combined monitor for query messages. */
|
|
22
|
+
queryMonitor(): MessageMonitor<QueryMessage>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates a default message monitor registry.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createMessageMonitorRegistry(): MessageMonitorRegistry;
|
|
28
|
+
//# sourceMappingURL=message-monitor-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-monitor-registry.d.ts","sourceRoot":"","sources":["../src/message-monitor-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG1D;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,gDAAgD;IAChD,eAAe,CAAC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;IACvD,+CAA+C;IAC/C,sBAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,IAAI,CAAA;IACrE,6CAA6C;IAC7C,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;IACjE,6CAA6C;IAC7C,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,YAAY,CAAC,GAAG,IAAI,CAAA;IAEjE,qDAAqD;IACrD,cAAc,IAAI,cAAc,CAAC,cAAc,CAAC,CAAA;IAChD,mDAAmD;IACnD,YAAY,IAAI,cAAc,CAAC,YAAY,CAAC,CAAA;IAC5C,mDAAmD;IACnD,YAAY,IAAI,cAAc,CAAC,YAAY,CAAC,CAAA;CAC7C;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,sBAAsB,CAiCrE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { multiMessageMonitor, noOpMessageMonitor } from "./message-monitor.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a default message monitor registry.
|
|
4
|
+
*/
|
|
5
|
+
export function createMessageMonitorRegistry() {
|
|
6
|
+
const genericMonitors = [];
|
|
7
|
+
const commandMonitors = [];
|
|
8
|
+
const eventMonitors = [];
|
|
9
|
+
const queryMonitors = [];
|
|
10
|
+
return {
|
|
11
|
+
registerMonitor(monitor) {
|
|
12
|
+
genericMonitors.push(monitor);
|
|
13
|
+
},
|
|
14
|
+
registerCommandMonitor(monitor) {
|
|
15
|
+
commandMonitors.push(monitor);
|
|
16
|
+
},
|
|
17
|
+
registerEventMonitor(monitor) {
|
|
18
|
+
eventMonitors.push(monitor);
|
|
19
|
+
},
|
|
20
|
+
registerQueryMonitor(monitor) {
|
|
21
|
+
queryMonitors.push(monitor);
|
|
22
|
+
},
|
|
23
|
+
commandMonitor() {
|
|
24
|
+
const all = [...genericMonitors, ...commandMonitors];
|
|
25
|
+
return all.length > 0 ? multiMessageMonitor(all) : noOpMessageMonitor();
|
|
26
|
+
},
|
|
27
|
+
eventMonitor() {
|
|
28
|
+
const all = [...genericMonitors, ...eventMonitors];
|
|
29
|
+
return all.length > 0 ? multiMessageMonitor(all) : noOpMessageMonitor();
|
|
30
|
+
},
|
|
31
|
+
queryMonitor() {
|
|
32
|
+
const all = [...genericMonitors, ...queryMonitors];
|
|
33
|
+
return all.length > 0 ? multiMessageMonitor(all) : noOpMessageMonitor();
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=message-monitor-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-monitor-registry.js","sourceRoot":"","sources":["../src/message-monitor-registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAyB9E;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAC1C,MAAM,eAAe,GAA8B,EAAE,CAAA;IACrD,MAAM,eAAe,GAAqC,EAAE,CAAA;IAC5D,MAAM,aAAa,GAAmC,EAAE,CAAA;IACxD,MAAM,aAAa,GAAmC,EAAE,CAAA;IAExD,OAAO;QACL,eAAe,CAAC,OAAO;YACrB,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC;QACD,sBAAsB,CAAC,OAAO;YAC5B,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC;QACD,oBAAoB,CAAC,OAAO;YAC1B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC7B,CAAC;QACD,oBAAoB,CAAC,OAAO;YAC1B,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC7B,CAAC;QAED,cAAc;YACZ,MAAM,GAAG,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,eAAe,CAAqC,CAAA;YACxF,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAA;QACzE,CAAC;QACD,YAAY;YACV,MAAM,GAAG,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,aAAa,CAAmC,CAAA;YACpF,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAA;QACzE,CAAC;QACD,YAAY;YACV,MAAM,GAAG,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,aAAa,CAAmC,CAAA;YACpF,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAA;QACzE,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Message } from "./message.js";
|
|
2
|
+
/**
|
|
3
|
+
* Callback returned by a MessageMonitor when a message is ingested.
|
|
4
|
+
* Call `reportSuccess()` or `reportFailure()` when processing completes.
|
|
5
|
+
*/
|
|
6
|
+
export interface MonitorCallback {
|
|
7
|
+
/** Report that the message was processed successfully. */
|
|
8
|
+
reportSuccess(): void;
|
|
9
|
+
/** Report that processing failed. */
|
|
10
|
+
reportFailure(error?: Error): void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Monitors message processing — observes ingestion, success, and failure
|
|
14
|
+
* of messages flowing through the framework.
|
|
15
|
+
*
|
|
16
|
+
* Used by tracing, metrics, and custom observability extensions.
|
|
17
|
+
* Monitors are registered via the kronos() App messageMonitorRegistry slot
|
|
18
|
+
* (Phase 8 reshape — was previously the MessagingConfigurer surface).
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
export interface MessageMonitor<M extends Message = Message> {
|
|
22
|
+
/**
|
|
23
|
+
* Called when a message enters processing.
|
|
24
|
+
* Returns a callback to report the outcome.
|
|
25
|
+
*/
|
|
26
|
+
onMessageIngested(message: M): MonitorCallback;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A no-op monitor that does nothing. Default when no monitors are registered.
|
|
30
|
+
*/
|
|
31
|
+
export declare function noOpMessageMonitor<M extends Message = Message>(): MessageMonitor<M>;
|
|
32
|
+
/**
|
|
33
|
+
* Combines multiple monitors into one. Each monitor is called for every message.
|
|
34
|
+
*/
|
|
35
|
+
export declare function multiMessageMonitor<M extends Message = Message>(monitors: ReadonlyArray<MessageMonitor<M>>): MessageMonitor<M>;
|
|
36
|
+
//# sourceMappingURL=message-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-monitor.d.ts","sourceRoot":"","sources":["../src/message-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,aAAa,IAAI,IAAI,CAAA;IACrB,qCAAqC;IACrC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAA;CACnC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IACzD;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,CAAC,GAAG,eAAe,CAAA;CAC/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,CAUnF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAC7D,QAAQ,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GACzC,cAAc,CAAC,CAAC,CAAC,CAiBnB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A no-op monitor that does nothing. Default when no monitors are registered.
|
|
3
|
+
*/
|
|
4
|
+
export function noOpMessageMonitor() {
|
|
5
|
+
const noOpCallback = {
|
|
6
|
+
reportSuccess() { },
|
|
7
|
+
reportFailure() { },
|
|
8
|
+
};
|
|
9
|
+
return {
|
|
10
|
+
onMessageIngested() {
|
|
11
|
+
return noOpCallback;
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Combines multiple monitors into one. Each monitor is called for every message.
|
|
17
|
+
*/
|
|
18
|
+
export function multiMessageMonitor(monitors) {
|
|
19
|
+
if (monitors.length === 0)
|
|
20
|
+
return noOpMessageMonitor();
|
|
21
|
+
if (monitors.length === 1)
|
|
22
|
+
return monitors[0];
|
|
23
|
+
return {
|
|
24
|
+
onMessageIngested(message) {
|
|
25
|
+
const callbacks = monitors.map(m => m.onMessageIngested(message));
|
|
26
|
+
return {
|
|
27
|
+
reportSuccess() {
|
|
28
|
+
for (const cb of callbacks)
|
|
29
|
+
cb.reportSuccess();
|
|
30
|
+
},
|
|
31
|
+
reportFailure(error) {
|
|
32
|
+
for (const cb of callbacks)
|
|
33
|
+
cb.reportFailure(error);
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=message-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-monitor.js","sourceRoot":"","sources":["../src/message-monitor.ts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,YAAY,GAAoB;QACpC,aAAa,KAAI,CAAC;QAClB,aAAa,KAAI,CAAC;KACnB,CAAA;IACD,OAAO;QACL,iBAAiB;YACf,OAAO,YAAY,CAAA;QACrB,CAAC;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAA0C;IAE1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,kBAAkB,EAAE,CAAA;IACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAE,CAAA;IAE9C,OAAO;QACL,iBAAiB,CAAC,OAAU;YAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAA;YACjE,OAAO;gBACL,aAAa;oBACX,KAAK,MAAM,EAAE,IAAI,SAAS;wBAAE,EAAE,CAAC,aAAa,EAAE,CAAA;gBAChD,CAAC;gBACD,aAAa,CAAC,KAAa;oBACzB,KAAK,MAAM,EAAE,IAAI,SAAS;wBAAE,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;gBACrD,CAAC;aACF,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { QualifiedName, Metadata } from "@kronos-ts/common";
|
|
2
|
+
/**
|
|
3
|
+
* A message carrying a payload and metadata, identified by a unique ID
|
|
4
|
+
* and routed by its qualified name.
|
|
5
|
+
*/
|
|
6
|
+
export interface Message<P = unknown> {
|
|
7
|
+
readonly identifier: string;
|
|
8
|
+
readonly name: QualifiedName;
|
|
9
|
+
readonly payload: P;
|
|
10
|
+
readonly metadata: Metadata;
|
|
11
|
+
readonly timestamp: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A command message — dispatched to exactly one handler, may return a result.
|
|
15
|
+
*/
|
|
16
|
+
export interface CommandMessage<P = unknown> extends Message<P> {
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A command result message — the response from handling a command.
|
|
20
|
+
*/
|
|
21
|
+
export interface CommandResultMessage<R = unknown> {
|
|
22
|
+
readonly identifier: string;
|
|
23
|
+
readonly payload: R | undefined;
|
|
24
|
+
readonly metadata: Metadata;
|
|
25
|
+
readonly error?: Error;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* An event message — published to all interested handlers.
|
|
29
|
+
*/
|
|
30
|
+
export interface EventMessage<P = unknown> extends Message<P> {
|
|
31
|
+
readonly version: string;
|
|
32
|
+
readonly tags: ReadonlyArray<{
|
|
33
|
+
readonly key: string;
|
|
34
|
+
readonly value: string;
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A query message — dispatched to handler(s) that can answer it.
|
|
39
|
+
*/
|
|
40
|
+
export interface QueryMessage<P = unknown> extends Message<P> {
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=message.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEhE;;;GAGG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,GAAG,OAAO;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACnB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;CAAG;AAElE;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAG,OAAO;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,CAAA;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC/E;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;CAAG"}
|
package/dist/message.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import type { Metadata, ResourceKey } from "@kronos-ts/common";
|
|
3
|
+
/**
|
|
4
|
+
* Lifecycle phases for message processing, ordered by execution priority.
|
|
5
|
+
*
|
|
6
|
+
* Phases execute in ascending order. Actions within the same phase
|
|
7
|
+
* execute in registration order. Actions registered during execution
|
|
8
|
+
* (e.g., onPrepareCommit from a handler) are picked up when their
|
|
9
|
+
* phase comes.
|
|
10
|
+
*
|
|
11
|
+
* Plan 03-04 (CTX-04 / D-34): Phase enum relocated here from the
|
|
12
|
+
* deleted processing-context.ts. The numeric values are stable —
|
|
13
|
+
* external code (handler enhancers, processors) compares phase numbers.
|
|
14
|
+
*/
|
|
15
|
+
export declare const Phase: {
|
|
16
|
+
/** Setup before handler invocation (e.g., transaction start). */
|
|
17
|
+
readonly PRE_INVOCATION: -10000;
|
|
18
|
+
/** Actual handler execution. */
|
|
19
|
+
readonly INVOCATION: 0;
|
|
20
|
+
/** Cleanup after handler, before commit. */
|
|
21
|
+
readonly POST_INVOCATION: 10000;
|
|
22
|
+
/** Prepare for commit (e.g., event store flush, token store). */
|
|
23
|
+
readonly PREPARE_COMMIT: 20000;
|
|
24
|
+
/** Actual commit (e.g., database transaction commit). */
|
|
25
|
+
readonly COMMIT: 30000;
|
|
26
|
+
/** Post-commit notifications (e.g., subscription query updates). */
|
|
27
|
+
readonly AFTER_COMMIT: 40000;
|
|
28
|
+
};
|
|
29
|
+
export type PhaseValue = (typeof Phase)[keyof typeof Phase];
|
|
30
|
+
type PhaseAction = () => Promise<void> | void;
|
|
31
|
+
type ErrorHandler = (error: unknown, phase?: PhaseValue) => Promise<void> | void;
|
|
32
|
+
type CompleteHandler = () => void;
|
|
33
|
+
type Status = "not_started" | "started" | "completed" | "error";
|
|
34
|
+
type InternalProcessingState = {
|
|
35
|
+
resources: Map<symbol, unknown>;
|
|
36
|
+
phaseActions: Map<PhaseValue, PhaseAction[]>;
|
|
37
|
+
errorHandlers: ErrorHandler[];
|
|
38
|
+
completeHandlers: CompleteHandler[];
|
|
39
|
+
currentPhase: PhaseValue | null;
|
|
40
|
+
status: Status;
|
|
41
|
+
metadata: Metadata;
|
|
42
|
+
};
|
|
43
|
+
export declare const processingStateStorage: AsyncLocalStorage<InternalProcessingState>;
|
|
44
|
+
export declare class NoActiveUnitOfWork extends Error {
|
|
45
|
+
constructor(message?: string);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Plan 04-01 (HDL-02 / D-43): thrown by mutating helpers (append, send, emitUpdate)
|
|
49
|
+
* when called outside the INVOCATION phase. Distinct class (not a NoActiveUnitOfWork
|
|
50
|
+
* subclass) — a UoW IS active, but it's in the wrong phase. Catches the real bug
|
|
51
|
+
* pattern of mutations from lifecycle hooks (onCommit, onPrepareCommit, etc.).
|
|
52
|
+
*/
|
|
53
|
+
export declare class WrongUoWPhase extends Error {
|
|
54
|
+
readonly currentPhase: PhaseValue | null;
|
|
55
|
+
constructor(currentPhase: PhaseValue | null);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Plan 04-01 (HDL-02 / D-43): mutator guard. Throws NoActiveUnitOfWork outside a UoW;
|
|
59
|
+
* throws WrongUoWPhase when active phase != INVOCATION; otherwise returns the state.
|
|
60
|
+
* Used by append (eventsourcing), send + emitUpdate (messaging).
|
|
61
|
+
* Internal — NOT exported from index.ts barrel. Consumed via deep-path import.
|
|
62
|
+
*/
|
|
63
|
+
export declare function requireInvocationPhase(): InternalProcessingState;
|
|
64
|
+
export declare function getResource<T>(key: ResourceKey<T>): T | undefined;
|
|
65
|
+
export declare function setResource<T>(key: ResourceKey<T>, value: T): T | undefined;
|
|
66
|
+
export declare function computeIfAbsent<T>(key: ResourceKey<T>, supplier: () => T): T;
|
|
67
|
+
export declare function removeResource<T>(key: ResourceKey<T>): T | undefined;
|
|
68
|
+
export declare function hasResource<T>(key: ResourceKey<T>): boolean;
|
|
69
|
+
export declare function updateResource<T>(key: ResourceKey<T>, updater: (current: T | undefined) => T): T;
|
|
70
|
+
export declare function registerPhaseAction(phase: PhaseValue, action: PhaseAction): void;
|
|
71
|
+
export declare function registerErrorHandler(handler: ErrorHandler): void;
|
|
72
|
+
export declare function registerCompleteHandler(handler: CompleteHandler): void;
|
|
73
|
+
export declare function on(phase: PhaseValue, action: PhaseAction): void;
|
|
74
|
+
export declare function onPrepareCommit(action: PhaseAction): void;
|
|
75
|
+
export declare function onCommit(action: PhaseAction): void;
|
|
76
|
+
export declare function onAfterCommit(action: PhaseAction): void;
|
|
77
|
+
export declare function onError(handler: ErrorHandler): void;
|
|
78
|
+
export declare function whenComplete(handler: CompleteHandler): void;
|
|
79
|
+
/**
|
|
80
|
+
* Run `fn` in a nested processingStateStorage context where `key` resolves to `value`.
|
|
81
|
+
*
|
|
82
|
+
* Only the `resources` Map is forked (D-08). All other fields — phaseActions,
|
|
83
|
+
* errorHandlers, completeHandlers, status, currentPhase, metadata — are SHARED
|
|
84
|
+
* references to the parent state. Registering a phase action or error handler
|
|
85
|
+
* inside `fn` targets the parent's lifecycle.
|
|
86
|
+
*
|
|
87
|
+
* After `fn` resolves, the parent's resources are unchanged (D-09) — nested
|
|
88
|
+
* `storage.run()` naturally pops the forked state.
|
|
89
|
+
*
|
|
90
|
+
* Throws NoActiveUnitOfWork if called outside an existing processingStateStorage.run().
|
|
91
|
+
*/
|
|
92
|
+
export declare function withOverride<T, R>(key: ResourceKey<T>, value: T, fn: () => Promise<R>): Promise<R>;
|
|
93
|
+
/**
|
|
94
|
+
* INTERNAL — used by UnitOfWork to construct the initial state passed to
|
|
95
|
+
* processingStateStorage.run(). The InternalProcessingState type is intentionally
|
|
96
|
+
* non-exported (D-13); this factory is the sanctioned construction point.
|
|
97
|
+
* Deep-path import only; NOT re-exported from the package barrel (D-05).
|
|
98
|
+
*
|
|
99
|
+
* Return type is intentionally INFERRED (no `: InternalProcessingState` annotation).
|
|
100
|
+
* Annotating the return type with a non-exported name produces TS4023 under
|
|
101
|
+
* `declaration: true` / `isolatedDeclarations`, breaking the package build.
|
|
102
|
+
* Inference preserves D-13 (the type remains non-exported) while allowing `.d.ts`
|
|
103
|
+
* emission.
|
|
104
|
+
*/
|
|
105
|
+
export declare function createInitialProcessingState(metadata: Metadata): {
|
|
106
|
+
resources: Map<symbol, unknown>;
|
|
107
|
+
phaseActions: Map<PhaseValue, PhaseAction[]>;
|
|
108
|
+
errorHandlers: ErrorHandler[];
|
|
109
|
+
completeHandlers: CompleteHandler[];
|
|
110
|
+
currentPhase: PhaseValue | null;
|
|
111
|
+
status: Status;
|
|
112
|
+
metadata: Readonly<Record<string, unknown>>;
|
|
113
|
+
};
|
|
114
|
+
export {};
|
|
115
|
+
//# sourceMappingURL=processing-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"processing-state.d.ts","sourceRoot":"","sources":["../src/processing-state.ts"],"names":[],"mappings":"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"}
|