@auto-engineer/cli 0.9.11 → 0.9.13
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/CHANGELOG.md +18 -0
- package/dist/src/dsl/index.d.ts +34 -3
- package/dist/src/dsl/index.d.ts.map +1 -1
- package/dist/src/dsl/index.js +304 -14
- package/dist/src/dsl/index.js.map +1 -1
- package/dist/src/dsl-exports.d.ts +3 -1
- package/dist/src/dsl-exports.d.ts.map +1 -1
- package/dist/src/dsl-exports.js +2 -1
- package/dist/src/dsl-exports.js.map +1 -1
- package/dist/src/server/command-metadata-service.d.ts +17 -0
- package/dist/src/server/command-metadata-service.d.ts.map +1 -0
- package/dist/src/server/command-metadata-service.js +35 -0
- package/dist/src/server/command-metadata-service.js.map +1 -0
- package/dist/src/server/command-registry.d.ts +5 -16
- package/dist/src/server/command-registry.d.ts.map +1 -1
- package/dist/src/server/command-registry.js +8 -18
- package/dist/src/server/command-registry.js.map +1 -1
- package/dist/src/server/config-loader.d.ts +2 -1
- package/dist/src/server/config-loader.d.ts.map +1 -1
- package/dist/src/server/config-loader.js +9 -1
- package/dist/src/server/config-loader.js.map +1 -1
- package/dist/src/server/event-processor.d.ts +5 -3
- package/dist/src/server/event-processor.d.ts.map +1 -1
- package/dist/src/server/event-processor.js +10 -1
- package/dist/src/server/event-processor.js.map +1 -1
- package/dist/src/server/http-routes.d.ts +3 -0
- package/dist/src/server/http-routes.d.ts.map +1 -1
- package/dist/src/server/http-routes.js +29 -8
- package/dist/src/server/http-routes.js.map +1 -1
- package/dist/src/server/sandbox-landing-page.html +336 -315
- package/dist/src/server/server.d.ts +11 -1
- package/dist/src/server/server.d.ts.map +1 -1
- package/dist/src/server/server.js +19 -1
- package/dist/src/server/server.js.map +1 -1
- package/dist/src/server/settled-tracker.d.ts +19 -0
- package/dist/src/server/settled-tracker.d.ts.map +1 -0
- package/dist/src/server/settled-tracker.js +162 -0
- package/dist/src/server/settled-tracker.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type MessageBus } from '@auto-engineer/message-bus';
|
|
2
2
|
import { type ILocalMessageStore } from '@auto-engineer/message-store';
|
|
3
3
|
import { StateManager } from './state-manager';
|
|
4
|
-
import type { EventRegistration, FoldRegistration } from '../dsl/types';
|
|
4
|
+
import type { EventRegistration, FoldRegistration, SettledRegistration } from '../dsl/types';
|
|
5
|
+
import { CommandMetadataService } from './command-metadata-service';
|
|
5
6
|
export interface MessageBusServerConfig {
|
|
6
7
|
port?: number;
|
|
7
8
|
wsPort?: number;
|
|
@@ -22,6 +23,7 @@ export declare class MessageBusServer {
|
|
|
22
23
|
private config;
|
|
23
24
|
private eventProcessor;
|
|
24
25
|
private commandRegistry;
|
|
26
|
+
private settledTracker;
|
|
25
27
|
private currentSessionId?;
|
|
26
28
|
constructor(config?: MessageBusServerConfig);
|
|
27
29
|
/**
|
|
@@ -40,6 +42,10 @@ export declare class MessageBusServer {
|
|
|
40
42
|
* Register fold function from DSL
|
|
41
43
|
*/
|
|
42
44
|
registerFold(registration: FoldRegistration): void;
|
|
45
|
+
/**
|
|
46
|
+
* Register settled handler from DSL
|
|
47
|
+
*/
|
|
48
|
+
registerSettledHandler(registration: SettledRegistration): void;
|
|
43
49
|
/**
|
|
44
50
|
* Set command metadata for dashboard display
|
|
45
51
|
*/
|
|
@@ -54,6 +60,10 @@ export declare class MessageBusServer {
|
|
|
54
60
|
* Register command handlers directly with the message bus
|
|
55
61
|
*/
|
|
56
62
|
registerCommandHandlers(handlers: unknown[]): void;
|
|
63
|
+
/**
|
|
64
|
+
* Get the command metadata service
|
|
65
|
+
*/
|
|
66
|
+
getCommandMetadataService(): CommandMetadataService;
|
|
57
67
|
/**
|
|
58
68
|
* Initialize state
|
|
59
69
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,UAAU,EAA4B,MAAM,4BAA4B,CAAC;AACzG,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAE3F,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAoB,KAAK,UAAU,EAA4B,MAAM,4BAA4B,CAAC;AACzG,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAE3F,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAK7F,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAKpE,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,MAAM,GAAE,sBAA2B;IAsD/C;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBnB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAI9B;;OAEG;IACH,oBAAoB,CAAC,YAAY,EAAE,iBAAiB,GAAG,IAAI;IAI3D;;OAEG;IACH,YAAY,CAAC,YAAY,EAAE,gBAAgB,GAAG,IAAI;IAIlD;;OAEG;IACH,sBAAsB,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI;IAI/D;;OAEG;IACH,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GACrG,IAAI;IAIP;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAIlD;;OAEG;IACH,yBAAyB,IAAI,sBAAsB;IAInD;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IASrC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3B;;OAEG;IACH,aAAa,IAAI,UAAU;IAI3B;;OAEG;IACH,eAAe,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIxD;;OAEG;IACH,eAAe,IAAI,kBAAkB;CAGtC"}
|
|
@@ -11,6 +11,7 @@ import { setupHttpRoutes } from './http-routes.js';
|
|
|
11
11
|
import { setupWebSocketHandlers } from './websocket-handler.js';
|
|
12
12
|
import { EventProcessor } from './event-processor.js';
|
|
13
13
|
import { CommandRegistry } from './command-registry.js';
|
|
14
|
+
import { SettledTracker } from './settled-tracker.js';
|
|
14
15
|
const debug = createDebug('auto-engineer:server');
|
|
15
16
|
export class MessageBusServer {
|
|
16
17
|
constructor(config = {}) {
|
|
@@ -37,7 +38,11 @@ export class MessageBusServer {
|
|
|
37
38
|
this.messageStore = config.messageStore ?? new MemoryMessageStore();
|
|
38
39
|
this.stateManager = new StateManager();
|
|
39
40
|
// Initialize modules
|
|
40
|
-
this.
|
|
41
|
+
this.settledTracker = new SettledTracker((action) => {
|
|
42
|
+
// Handle dispatch actions from settled handlers
|
|
43
|
+
void this.eventProcessor.processDispatchAction(action);
|
|
44
|
+
});
|
|
45
|
+
this.eventProcessor = new EventProcessor(this.messageBus, this.messageStore, this.stateManager, (event) => this.io.emit('event', event), this.settledTracker);
|
|
41
46
|
this.commandRegistry = new CommandRegistry(this.messageBus, this.stateManager);
|
|
42
47
|
// Set up global event listener for state management
|
|
43
48
|
this.eventProcessor.setupGlobalEventListener();
|
|
@@ -54,6 +59,7 @@ export class MessageBusServer {
|
|
|
54
59
|
setupHttpRoutes(this.app, this.messageBus, this.stateManager, {
|
|
55
60
|
commandHandlerNames: this.commandRegistry.getCommandHandlerNames(),
|
|
56
61
|
commandMetadata: this.commandRegistry.getCommandMetadata(),
|
|
62
|
+
commandMetadataService: this.commandRegistry.getMetadataService(),
|
|
57
63
|
eventHandlers: this.eventProcessor.getEventHandlers(),
|
|
58
64
|
foldRegistry: this.commandRegistry.getFoldRegistry(),
|
|
59
65
|
messageStore: this.messageStore,
|
|
@@ -83,6 +89,12 @@ export class MessageBusServer {
|
|
|
83
89
|
registerFold(registration) {
|
|
84
90
|
this.commandRegistry.registerFold(registration);
|
|
85
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Register settled handler from DSL
|
|
94
|
+
*/
|
|
95
|
+
registerSettledHandler(registration) {
|
|
96
|
+
this.settledTracker.registerSettledHandler(registration);
|
|
97
|
+
}
|
|
86
98
|
/**
|
|
87
99
|
* Set command metadata for dashboard display
|
|
88
100
|
*/
|
|
@@ -95,6 +107,12 @@ export class MessageBusServer {
|
|
|
95
107
|
registerCommandHandlers(handlers) {
|
|
96
108
|
this.commandRegistry.registerCommandHandlers(handlers);
|
|
97
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Get the command metadata service
|
|
112
|
+
*/
|
|
113
|
+
getCommandMetadataService() {
|
|
114
|
+
return this.commandRegistry.getMetadataService();
|
|
115
|
+
}
|
|
98
116
|
/**
|
|
99
117
|
* Initialize state
|
|
100
118
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAA6C,MAAM,4BAA4B,CAAC;AACzG,OAAO,EAAE,kBAAkB,EAA2B,MAAM,8BAA8B,CAAC;AAC3F,OAAO,WAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,KAAK,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAAC;AAYlD,MAAM,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Event, Command } from '@auto-engineer/message-bus';
|
|
2
|
+
import type { SettledRegistration, DispatchAction } from '../dsl/types';
|
|
3
|
+
export declare class SettledTracker {
|
|
4
|
+
private settledHandlers;
|
|
5
|
+
private commandToHandlerIds;
|
|
6
|
+
private runningCommands;
|
|
7
|
+
private onDispatchAction?;
|
|
8
|
+
constructor(onDispatchAction?: (action: DispatchAction) => void);
|
|
9
|
+
registerSettledHandler(registration: SettledRegistration): void;
|
|
10
|
+
onCommandStarted(command: Command): void;
|
|
11
|
+
onEventReceived(event: Event): void;
|
|
12
|
+
private isEventFromCommand;
|
|
13
|
+
private isCompletionEvent;
|
|
14
|
+
private checkAndTriggerHandler;
|
|
15
|
+
private cleanupHandler;
|
|
16
|
+
private generateHandlerId;
|
|
17
|
+
getActiveHandlers(): string[];
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=settled-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settled-tracker.d.ts","sourceRoot":"","sources":["../../../src/server/settled-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAiBxE,qBAAa,cAAc;IACzB,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,eAAe,CAA0E;IACjG,OAAO,CAAC,gBAAgB,CAAC,CAAmC;gBAEhD,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI;IAI/D,sBAAsB,CAAC,YAAY,EAAE,mBAAmB,GAAG,IAAI;IA0B/D,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAoBxC,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA8BnC,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,sBAAsB;IAwC9B,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,iBAAiB;IAMzB,iBAAiB,IAAI,MAAM,EAAE;CAG9B"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { getPendingDispatches } from '../dsl/index.js';
|
|
2
|
+
import createDebug from 'debug';
|
|
3
|
+
const debug = createDebug('auto-engineer:server:settled-tracker');
|
|
4
|
+
export class SettledTracker {
|
|
5
|
+
constructor(onDispatchAction) {
|
|
6
|
+
this.settledHandlers = new Map();
|
|
7
|
+
this.commandToHandlerIds = new Map();
|
|
8
|
+
this.runningCommands = new Map();
|
|
9
|
+
this.onDispatchAction = onDispatchAction;
|
|
10
|
+
}
|
|
11
|
+
registerSettledHandler(registration) {
|
|
12
|
+
const handlerId = this.generateHandlerId(registration);
|
|
13
|
+
debug('Registering settled handler:', handlerId, 'for commands:', registration.commandTypes);
|
|
14
|
+
const commandTrackers = new Map();
|
|
15
|
+
for (const commandType of registration.commandTypes) {
|
|
16
|
+
commandTrackers.set(commandType, {
|
|
17
|
+
commandType,
|
|
18
|
+
hasCompleted: false,
|
|
19
|
+
events: [],
|
|
20
|
+
});
|
|
21
|
+
// Track which handlers are interested in this command type
|
|
22
|
+
if (!this.commandToHandlerIds.has(commandType)) {
|
|
23
|
+
this.commandToHandlerIds.set(commandType, new Set());
|
|
24
|
+
}
|
|
25
|
+
this.commandToHandlerIds.get(commandType).add(handlerId);
|
|
26
|
+
}
|
|
27
|
+
this.settledHandlers.set(handlerId, {
|
|
28
|
+
registration,
|
|
29
|
+
commandTrackers,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
onCommandStarted(command) {
|
|
33
|
+
const { type: commandType, correlationId, requestId } = command;
|
|
34
|
+
if (correlationId === undefined ||
|
|
35
|
+
correlationId === null ||
|
|
36
|
+
correlationId === '' ||
|
|
37
|
+
requestId === undefined ||
|
|
38
|
+
requestId === null ||
|
|
39
|
+
requestId === '') {
|
|
40
|
+
debug('Command missing correlation/request ID, cannot track:', commandType);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// Track this command execution
|
|
44
|
+
this.runningCommands.set(requestId, { commandType, correlationId });
|
|
45
|
+
debug('Started tracking command:', commandType, 'with requestId:', requestId);
|
|
46
|
+
}
|
|
47
|
+
onEventReceived(event) {
|
|
48
|
+
debug('Received event:', event.type);
|
|
49
|
+
// For each settled handler, check if this event indicates completion of any tracked commands
|
|
50
|
+
for (const [handlerId, handler] of this.settledHandlers) {
|
|
51
|
+
for (const [commandType, tracker] of handler.commandTrackers) {
|
|
52
|
+
if (tracker.hasCompleted)
|
|
53
|
+
continue;
|
|
54
|
+
// Check if this event is related to this command type
|
|
55
|
+
if (this.isEventFromCommand(event.type, commandType)) {
|
|
56
|
+
debug('Event', event.type, 'is related to command', commandType);
|
|
57
|
+
// Always add related events to the tracker
|
|
58
|
+
tracker.events.push(event);
|
|
59
|
+
// Only mark as completed if this is a completion event
|
|
60
|
+
if (this.isCompletionEvent(event.type)) {
|
|
61
|
+
tracker.hasCompleted = true;
|
|
62
|
+
debug('Marked command', commandType, 'as completed for handler', handlerId);
|
|
63
|
+
// Check if all commands for this handler have completed
|
|
64
|
+
this.checkAndTriggerHandler(handlerId, handler);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
debug('Event', event.type, 'is progress for command', commandType, '- not marking as completed yet');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
isEventFromCommand(eventType, commandType) {
|
|
74
|
+
// Simple heuristic mapping based on common patterns
|
|
75
|
+
const eventToCommandMap = {
|
|
76
|
+
TestsCheckPassed: ['CheckTests'],
|
|
77
|
+
TestsCheckFailed: ['CheckTests'],
|
|
78
|
+
TestsStarted: ['CheckTests'],
|
|
79
|
+
TestProgress: ['CheckTests'],
|
|
80
|
+
TypeCheckPassed: ['CheckTypes'],
|
|
81
|
+
TypeCheckFailed: ['CheckTypes'],
|
|
82
|
+
LintCheckPassed: ['CheckLint'],
|
|
83
|
+
LintCheckFailed: ['CheckLint'],
|
|
84
|
+
ClientImplemented: ['ImplementClient'],
|
|
85
|
+
};
|
|
86
|
+
const commandsForEvent = eventToCommandMap[eventType];
|
|
87
|
+
return commandsForEvent?.includes(commandType) ?? false;
|
|
88
|
+
}
|
|
89
|
+
isCompletionEvent(eventType) {
|
|
90
|
+
// Only these events indicate command completion
|
|
91
|
+
const completionEvents = [
|
|
92
|
+
'TestsCheckPassed',
|
|
93
|
+
'TestsCheckFailed',
|
|
94
|
+
'TypeCheckPassed',
|
|
95
|
+
'TypeCheckFailed',
|
|
96
|
+
'LintCheckPassed',
|
|
97
|
+
'LintCheckFailed',
|
|
98
|
+
'ClientImplemented',
|
|
99
|
+
];
|
|
100
|
+
return completionEvents.includes(eventType);
|
|
101
|
+
}
|
|
102
|
+
checkAndTriggerHandler(handlerId, handler) {
|
|
103
|
+
const allCompleted = Array.from(handler.commandTrackers.values()).every((tracker) => tracker.hasCompleted);
|
|
104
|
+
if (!allCompleted) {
|
|
105
|
+
debug('Handler', handlerId, 'not ready yet - waiting for more commands to complete');
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
debug('All commands completed for handler', handlerId, '- triggering settled handler');
|
|
109
|
+
// Collect all events grouped by command type
|
|
110
|
+
const eventsByCommandType = {};
|
|
111
|
+
for (const [commandType, tracker] of handler.commandTrackers) {
|
|
112
|
+
eventsByCommandType[commandType] = [...tracker.events];
|
|
113
|
+
}
|
|
114
|
+
try {
|
|
115
|
+
// Execute the handler (DSL already handles enhanced API wrapping)
|
|
116
|
+
debug('Executing settled handler with events:', Object.keys(eventsByCommandType));
|
|
117
|
+
handler.registration.handler(eventsByCommandType);
|
|
118
|
+
// Check for any pending dispatches created by the handler
|
|
119
|
+
const pendingDispatches = getPendingDispatches();
|
|
120
|
+
debug('Found %d pending dispatches after handler execution', pendingDispatches.length);
|
|
121
|
+
if (pendingDispatches.length > 0 && this.onDispatchAction) {
|
|
122
|
+
for (const action of pendingDispatches) {
|
|
123
|
+
debug('Processing pending dispatch action:', action.type);
|
|
124
|
+
this.onDispatchAction(action);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
debug('Settled handler', handlerId, 'executed successfully');
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
debug('Error executing settled handler', handlerId, ':', error);
|
|
131
|
+
}
|
|
132
|
+
// Clean up this handler since it has been triggered
|
|
133
|
+
this.cleanupHandler(handlerId);
|
|
134
|
+
}
|
|
135
|
+
cleanupHandler(handlerId) {
|
|
136
|
+
const handler = this.settledHandlers.get(handlerId);
|
|
137
|
+
if (!handler)
|
|
138
|
+
return;
|
|
139
|
+
// Remove handler from command type mappings
|
|
140
|
+
for (const commandType of handler.registration.commandTypes) {
|
|
141
|
+
const handlerIds = this.commandToHandlerIds.get(commandType);
|
|
142
|
+
if (handlerIds) {
|
|
143
|
+
handlerIds.delete(handlerId);
|
|
144
|
+
if (handlerIds.size === 0) {
|
|
145
|
+
this.commandToHandlerIds.delete(commandType);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Remove the handler itself
|
|
150
|
+
this.settledHandlers.delete(handlerId);
|
|
151
|
+
debug('Cleaned up settled handler:', handlerId);
|
|
152
|
+
}
|
|
153
|
+
generateHandlerId(registration) {
|
|
154
|
+
const commandTypes = registration.commandTypes.join(',');
|
|
155
|
+
const timestamp = Date.now();
|
|
156
|
+
return `settled-${commandTypes}-${timestamp}`;
|
|
157
|
+
}
|
|
158
|
+
getActiveHandlers() {
|
|
159
|
+
return Array.from(this.settledHandlers.keys());
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=settled-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settled-tracker.js","sourceRoot":"","sources":["../../../src/server/settled-tracker.ts"],"names":[],"mappings":"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"}
|