claude-mpm 4.2.43__py3-none-any.whl → 4.2.51__py3-none-any.whl
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.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_PM.md +117 -12
- claude_mpm/agents/INSTRUCTIONS.md +154 -10
- claude_mpm/agents/WORKFLOW.md +46 -1
- claude_mpm/agents/frontmatter_validator.py +20 -12
- claude_mpm/agents/templates/nextjs_engineer.json +277 -0
- claude_mpm/agents/templates/python_engineer.json +289 -0
- claude_mpm/agents/templates/react_engineer.json +11 -3
- claude_mpm/agents/templates/security.json +50 -9
- claude_mpm/cli/commands/agents.py +2 -2
- claude_mpm/cli/commands/uninstall.py +1 -2
- claude_mpm/cli/interactive/agent_wizard.py +3 -3
- claude_mpm/cli/parsers/agent_manager_parser.py +3 -3
- claude_mpm/cli/parsers/agents_parser.py +1 -1
- claude_mpm/constants.py +1 -1
- claude_mpm/core/api_validator.py +330 -0
- claude_mpm/core/error_handler.py +2 -4
- claude_mpm/core/file_utils.py +4 -12
- claude_mpm/core/framework_loader.py +22 -0
- claude_mpm/core/log_manager.py +8 -5
- claude_mpm/core/logger.py +1 -1
- claude_mpm/core/logging_utils.py +6 -6
- claude_mpm/core/unified_agent_registry.py +18 -4
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +188 -0
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +156 -0
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +38 -0
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +92 -0
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +248 -0
- claude_mpm/dashboard/static/archive/activity_dashboard_test.html +61 -0
- claude_mpm/dashboard/static/archive/test_activity_connection.html +179 -0
- claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +68 -0
- claude_mpm/dashboard/static/archive/test_dashboard.html +409 -0
- claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +519 -0
- claude_mpm/dashboard/static/archive/test_dashboard_verification.html +181 -0
- claude_mpm/dashboard/static/archive/test_file_data.html +315 -0
- claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +243 -0
- claude_mpm/dashboard/static/archive/test_file_tree_fix.html +234 -0
- claude_mpm/dashboard/static/archive/test_file_tree_rename.html +117 -0
- claude_mpm/dashboard/static/archive/test_file_tree_tab.html +115 -0
- claude_mpm/dashboard/static/archive/test_file_viewer.html +224 -0
- claude_mpm/dashboard/static/archive/test_final_activity.html +220 -0
- claude_mpm/dashboard/static/archive/test_tab_fix.html +139 -0
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/built/components/activity-tree.js +1 -1
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +777 -0
- claude_mpm/dashboard/static/built/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/built/components/build-tracker.js +333 -0
- claude_mpm/dashboard/static/built/components/code-simple.js +857 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +353 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +235 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +409 -0
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +435 -0
- claude_mpm/dashboard/static/built/components/code-viewer.js +2 -1076
- claude_mpm/dashboard/static/built/components/connection-debug.js +654 -0
- claude_mpm/dashboard/static/built/components/diff-viewer.js +891 -0
- claude_mpm/dashboard/static/built/components/event-processor.js +1 -1
- claude_mpm/dashboard/static/built/components/event-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/export-manager.js +1 -1
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +443 -0
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +690 -0
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +1 -1
- claude_mpm/dashboard/static/built/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/built/components/nav-bar.js +145 -0
- claude_mpm/dashboard/static/built/components/page-structure.js +429 -0
- claude_mpm/dashboard/static/built/components/session-manager.js +1 -1
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +2 -465
- claude_mpm/dashboard/static/built/components/working-directory.js +1 -1
- claude_mpm/dashboard/static/built/connection-manager.js +536 -0
- claude_mpm/dashboard/static/built/dashboard.js +1 -1
- claude_mpm/dashboard/static/built/extension-error-handler.js +164 -0
- claude_mpm/dashboard/static/built/react/events.js +30 -0
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +396 -0
- claude_mpm/dashboard/static/built/shared/event-bus.js +330 -0
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +540 -0
- claude_mpm/dashboard/static/built/shared/logger.js +385 -0
- claude_mpm/dashboard/static/built/shared/page-structure.js +251 -0
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +253 -0
- claude_mpm/dashboard/static/built/socket-client.js +1 -1
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/css/dashboard.css +28 -5
- claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +1 -0
- claude_mpm/dashboard/static/dist/components/activity-tree.js +1 -1
- claude_mpm/dashboard/static/dist/components/agent-inference.js +1 -1
- claude_mpm/dashboard/static/dist/components/code-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/event-processor.js +1 -1
- claude_mpm/dashboard/static/dist/components/event-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/export-manager.js +1 -1
- claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +1 -1
- claude_mpm/dashboard/static/dist/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/session-manager.js +1 -1
- claude_mpm/dashboard/static/dist/components/working-directory.js +1 -1
- claude_mpm/dashboard/static/dist/dashboard.js +1 -1
- claude_mpm/dashboard/static/dist/react/events.js +30 -0
- claude_mpm/dashboard/static/dist/socket-client.js +1 -1
- claude_mpm/dashboard/static/events.html +607 -0
- claude_mpm/dashboard/static/index.html +713 -0
- claude_mpm/dashboard/static/js/components/activity-tree.js +3 -17
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +4 -1
- claude_mpm/dashboard/static/js/components/agent-inference.js +3 -0
- claude_mpm/dashboard/static/js/components/build-tracker.js +8 -0
- claude_mpm/dashboard/static/js/components/code-viewer.js +387 -72
- claude_mpm/dashboard/static/js/components/event-processor.js +3 -0
- claude_mpm/dashboard/static/js/components/event-viewer.js +39 -2
- claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +30 -10
- claude_mpm/dashboard/static/js/components/socket-manager.js +4 -0
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +286 -108
- claude_mpm/dashboard/static/js/components/working-directory.js +3 -0
- claude_mpm/dashboard/static/js/dashboard.js +61 -49
- claude_mpm/dashboard/static/js/socket-client.js +12 -8
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +562 -0
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
- claude_mpm/dashboard/static/legacy/activity.html +736 -0
- claude_mpm/dashboard/static/legacy/agents.html +786 -0
- claude_mpm/dashboard/static/legacy/files.html +747 -0
- claude_mpm/dashboard/static/legacy/tools.html +831 -0
- claude_mpm/dashboard/static/monitors-index.html +218 -0
- claude_mpm/dashboard/static/monitors.html +431 -0
- claude_mpm/dashboard/static/production/events.html +659 -0
- claude_mpm/dashboard/static/production/main.html +715 -0
- claude_mpm/dashboard/static/production/monitors.html +483 -0
- claude_mpm/dashboard/static/socket.io.min.js +7 -0
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
- claude_mpm/dashboard/static/test-archive/dashboard.html +635 -0
- claude_mpm/dashboard/static/test-archive/debug-events.html +147 -0
- claude_mpm/dashboard/static/test-archive/test-navigation.html +256 -0
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +180 -0
- claude_mpm/dashboard/templates/index.html +82 -38
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +1 -1
- claude_mpm/services/agents/deployment/agent_discovery_service.py +3 -0
- claude_mpm/services/agents/deployment/agent_template_builder.py +25 -8
- claude_mpm/services/agents/deployment/agent_validator.py +3 -0
- claude_mpm/services/agents/deployment/validation/template_validator.py +13 -4
- claude_mpm/services/agents/local_template_manager.py +2 -6
- claude_mpm/services/monitor/daemon.py +1 -2
- claude_mpm/services/monitor/daemon_manager.py +2 -5
- claude_mpm/services/monitor/event_emitter.py +2 -2
- claude_mpm/services/monitor/handlers/code_analysis.py +4 -6
- claude_mpm/services/monitor/handlers/hooks.py +2 -4
- claude_mpm/services/monitor/server.py +23 -226
- claude_mpm/tools/code_tree_analyzer.py +2 -2
- {claude_mpm-4.2.43.dist-info → claude_mpm-4.2.51.dist-info}/METADATA +1 -1
- {claude_mpm-4.2.43.dist-info → claude_mpm-4.2.51.dist-info}/RECORD +148 -87
- claude_mpm/commands/mpm-browser-monitor.md +0 -370
- claude_mpm/commands/mpm-monitor.md +0 -177
- claude_mpm/dashboard/static/js/browser-console-monitor.js +0 -495
- claude_mpm/dashboard/static/js/components/browser-log-viewer.js +0 -763
- claude_mpm/dashboard/static/test-browser-monitor.html +0 -470
- claude_mpm/dashboard/static/test-simple.html +0 -97
- claude_mpm/services/monitor/handlers/browser.py +0 -451
- /claude_mpm/dashboard/static/{test_debug.html → test-archive/test_debug.html} +0 -0
- {claude_mpm-4.2.43.dist-info → claude_mpm-4.2.51.dist-info}/WHEEL +0 -0
- {claude_mpm-4.2.43.dist-info → claude_mpm-4.2.51.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.2.43.dist-info → claude_mpm-4.2.51.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.2.43.dist-info → claude_mpm-4.2.51.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,330 @@
|
|
1
|
+
/**
|
2
|
+
* Event Bus Service
|
3
|
+
*
|
4
|
+
* Central event management for decoupled component communication.
|
5
|
+
* Implements a simple pub/sub pattern for dashboard components.
|
6
|
+
*
|
7
|
+
* @module event-bus
|
8
|
+
*/
|
9
|
+
|
10
|
+
class EventBus {
|
11
|
+
constructor() {
|
12
|
+
this.events = new Map();
|
13
|
+
this.onceEvents = new Map();
|
14
|
+
this.eventHistory = [];
|
15
|
+
this.maxHistorySize = 100;
|
16
|
+
this.debugMode = false;
|
17
|
+
}
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Subscribe to an event
|
21
|
+
* @param {string} event - Event name
|
22
|
+
* @param {Function} handler - Event handler function
|
23
|
+
* @param {Object} options - Subscription options
|
24
|
+
* @returns {Function} Unsubscribe function
|
25
|
+
*/
|
26
|
+
on(event, handler, options = {}) {
|
27
|
+
if (typeof handler !== 'function') {
|
28
|
+
throw new Error('Handler must be a function');
|
29
|
+
}
|
30
|
+
|
31
|
+
// Initialize event handlers array if needed
|
32
|
+
if (!this.events.has(event)) {
|
33
|
+
this.events.set(event, []);
|
34
|
+
}
|
35
|
+
|
36
|
+
// Create handler wrapper with context and priority
|
37
|
+
const wrapper = {
|
38
|
+
handler,
|
39
|
+
context: options.context || null,
|
40
|
+
priority: options.priority || 0,
|
41
|
+
id: this.generateId()
|
42
|
+
};
|
43
|
+
|
44
|
+
// Add to handlers array (sorted by priority)
|
45
|
+
const handlers = this.events.get(event);
|
46
|
+
handlers.push(wrapper);
|
47
|
+
handlers.sort((a, b) => b.priority - a.priority);
|
48
|
+
|
49
|
+
// Log subscription if debugging
|
50
|
+
if (this.debugMode) {
|
51
|
+
console.log(`[EventBus] Subscribed to "${event}" with handler ${wrapper.id}`);
|
52
|
+
}
|
53
|
+
|
54
|
+
// Return unsubscribe function
|
55
|
+
return () => this.off(event, wrapper.id);
|
56
|
+
}
|
57
|
+
|
58
|
+
/**
|
59
|
+
* Subscribe to an event only once
|
60
|
+
* @param {string} event - Event name
|
61
|
+
* @param {Function} handler - Event handler function
|
62
|
+
* @param {Object} options - Subscription options
|
63
|
+
* @returns {Function} Unsubscribe function
|
64
|
+
*/
|
65
|
+
once(event, handler, options = {}) {
|
66
|
+
const wrappedHandler = (...args) => {
|
67
|
+
handler(...args);
|
68
|
+
this.off(event, wrappedHandler);
|
69
|
+
};
|
70
|
+
wrappedHandler._originalHandler = handler;
|
71
|
+
return this.on(event, wrappedHandler, options);
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
* Unsubscribe from an event
|
76
|
+
* @param {string} event - Event name
|
77
|
+
* @param {string|Function} handlerOrId - Handler function or ID
|
78
|
+
*/
|
79
|
+
off(event, handlerOrId) {
|
80
|
+
if (!this.events.has(event)) {
|
81
|
+
return;
|
82
|
+
}
|
83
|
+
|
84
|
+
const handlers = this.events.get(event);
|
85
|
+
const index = handlers.findIndex(wrapper =>
|
86
|
+
wrapper.id === handlerOrId ||
|
87
|
+
wrapper.handler === handlerOrId ||
|
88
|
+
wrapper.handler._originalHandler === handlerOrId
|
89
|
+
);
|
90
|
+
|
91
|
+
if (index !== -1) {
|
92
|
+
const removed = handlers.splice(index, 1)[0];
|
93
|
+
if (this.debugMode) {
|
94
|
+
console.log(`[EventBus] Unsubscribed from "${event}" handler ${removed.id}`);
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
// Clean up empty event arrays
|
99
|
+
if (handlers.length === 0) {
|
100
|
+
this.events.delete(event);
|
101
|
+
}
|
102
|
+
}
|
103
|
+
|
104
|
+
/**
|
105
|
+
* Emit an event
|
106
|
+
* @param {string} event - Event name
|
107
|
+
* @param {...any} args - Arguments to pass to handlers
|
108
|
+
* @returns {Array} Results from all handlers
|
109
|
+
*/
|
110
|
+
emit(event, ...args) {
|
111
|
+
const results = [];
|
112
|
+
|
113
|
+
// Record in history
|
114
|
+
this.recordEvent(event, args);
|
115
|
+
|
116
|
+
// Log emission if debugging
|
117
|
+
if (this.debugMode) {
|
118
|
+
console.log(`[EventBus] Emitting "${event}" with args:`, args);
|
119
|
+
}
|
120
|
+
|
121
|
+
// Call handlers for this specific event
|
122
|
+
if (this.events.has(event)) {
|
123
|
+
const handlers = this.events.get(event).slice(); // Clone to prevent modification during iteration
|
124
|
+
for (const wrapper of handlers) {
|
125
|
+
try {
|
126
|
+
const result = wrapper.context
|
127
|
+
? wrapper.handler.call(wrapper.context, ...args)
|
128
|
+
: wrapper.handler(...args);
|
129
|
+
results.push(result);
|
130
|
+
} catch (error) {
|
131
|
+
console.error(`[EventBus] Error in handler for "${event}":`, error);
|
132
|
+
if (this.debugMode) {
|
133
|
+
console.error('Handler details:', wrapper);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
// Call wildcard handlers
|
140
|
+
if (this.events.has('*')) {
|
141
|
+
const wildcardHandlers = this.events.get('*').slice();
|
142
|
+
for (const wrapper of wildcardHandlers) {
|
143
|
+
try {
|
144
|
+
const result = wrapper.context
|
145
|
+
? wrapper.handler.call(wrapper.context, event, ...args)
|
146
|
+
: wrapper.handler(event, ...args);
|
147
|
+
results.push(result);
|
148
|
+
} catch (error) {
|
149
|
+
console.error(`[EventBus] Error in wildcard handler for "${event}":`, error);
|
150
|
+
}
|
151
|
+
}
|
152
|
+
}
|
153
|
+
|
154
|
+
return results;
|
155
|
+
}
|
156
|
+
|
157
|
+
/**
|
158
|
+
* Emit an event asynchronously
|
159
|
+
* @param {string} event - Event name
|
160
|
+
* @param {...any} args - Arguments to pass to handlers
|
161
|
+
* @returns {Promise<Array>} Promise resolving to results from all handlers
|
162
|
+
*/
|
163
|
+
async emitAsync(event, ...args) {
|
164
|
+
return new Promise(resolve => {
|
165
|
+
setTimeout(() => {
|
166
|
+
resolve(this.emit(event, ...args));
|
167
|
+
}, 0);
|
168
|
+
});
|
169
|
+
}
|
170
|
+
|
171
|
+
/**
|
172
|
+
* Wait for an event to occur
|
173
|
+
* @param {string} event - Event name to wait for
|
174
|
+
* @param {number} timeout - Timeout in milliseconds (optional)
|
175
|
+
* @returns {Promise} Promise resolving when event occurs
|
176
|
+
*/
|
177
|
+
waitFor(event, timeout) {
|
178
|
+
return new Promise((resolve, reject) => {
|
179
|
+
let timeoutId;
|
180
|
+
|
181
|
+
const handler = (...args) => {
|
182
|
+
if (timeoutId) {
|
183
|
+
clearTimeout(timeoutId);
|
184
|
+
}
|
185
|
+
resolve(args);
|
186
|
+
};
|
187
|
+
|
188
|
+
this.once(event, handler);
|
189
|
+
|
190
|
+
if (timeout) {
|
191
|
+
timeoutId = setTimeout(() => {
|
192
|
+
this.off(event, handler);
|
193
|
+
reject(new Error(`Timeout waiting for event "${event}"`));
|
194
|
+
}, timeout);
|
195
|
+
}
|
196
|
+
});
|
197
|
+
}
|
198
|
+
|
199
|
+
/**
|
200
|
+
* Clear all handlers for an event
|
201
|
+
* @param {string} event - Event name (optional, clears all if not provided)
|
202
|
+
*/
|
203
|
+
clear(event) {
|
204
|
+
if (event) {
|
205
|
+
this.events.delete(event);
|
206
|
+
if (this.debugMode) {
|
207
|
+
console.log(`[EventBus] Cleared all handlers for "${event}"`);
|
208
|
+
}
|
209
|
+
} else {
|
210
|
+
this.events.clear();
|
211
|
+
if (this.debugMode) {
|
212
|
+
console.log('[EventBus] Cleared all event handlers');
|
213
|
+
}
|
214
|
+
}
|
215
|
+
}
|
216
|
+
|
217
|
+
/**
|
218
|
+
* Get all registered events
|
219
|
+
* @returns {Array} Array of event names
|
220
|
+
*/
|
221
|
+
getEvents() {
|
222
|
+
return Array.from(this.events.keys());
|
223
|
+
}
|
224
|
+
|
225
|
+
/**
|
226
|
+
* Get handler count for an event
|
227
|
+
* @param {string} event - Event name
|
228
|
+
* @returns {number} Number of handlers
|
229
|
+
*/
|
230
|
+
getHandlerCount(event) {
|
231
|
+
return this.events.has(event) ? this.events.get(event).length : 0;
|
232
|
+
}
|
233
|
+
|
234
|
+
/**
|
235
|
+
* Check if event has handlers
|
236
|
+
* @param {string} event - Event name
|
237
|
+
* @returns {boolean} Whether event has handlers
|
238
|
+
*/
|
239
|
+
hasHandlers(event) {
|
240
|
+
return this.getHandlerCount(event) > 0;
|
241
|
+
}
|
242
|
+
|
243
|
+
/**
|
244
|
+
* Enable or disable debug mode
|
245
|
+
* @param {boolean} enabled - Debug mode state
|
246
|
+
*/
|
247
|
+
setDebugMode(enabled) {
|
248
|
+
this.debugMode = enabled;
|
249
|
+
if (enabled) {
|
250
|
+
console.log('[EventBus] Debug mode enabled');
|
251
|
+
}
|
252
|
+
}
|
253
|
+
|
254
|
+
/**
|
255
|
+
* Get event history
|
256
|
+
* @param {string} event - Optional event name filter
|
257
|
+
* @returns {Array} Event history
|
258
|
+
*/
|
259
|
+
getHistory(event) {
|
260
|
+
if (event) {
|
261
|
+
return this.eventHistory.filter(entry => entry.event === event);
|
262
|
+
}
|
263
|
+
return this.eventHistory.slice();
|
264
|
+
}
|
265
|
+
|
266
|
+
/**
|
267
|
+
* Clear event history
|
268
|
+
*/
|
269
|
+
clearHistory() {
|
270
|
+
this.eventHistory = [];
|
271
|
+
}
|
272
|
+
|
273
|
+
/**
|
274
|
+
* Record event in history
|
275
|
+
* @private
|
276
|
+
* @param {string} event - Event name
|
277
|
+
* @param {Array} args - Event arguments
|
278
|
+
*/
|
279
|
+
recordEvent(event, args) {
|
280
|
+
this.eventHistory.push({
|
281
|
+
event,
|
282
|
+
args: args.slice(),
|
283
|
+
timestamp: Date.now()
|
284
|
+
});
|
285
|
+
|
286
|
+
// Limit history size
|
287
|
+
if (this.eventHistory.length > this.maxHistorySize) {
|
288
|
+
this.eventHistory.shift();
|
289
|
+
}
|
290
|
+
}
|
291
|
+
|
292
|
+
/**
|
293
|
+
* Generate unique ID
|
294
|
+
* @private
|
295
|
+
* @returns {string} Unique ID
|
296
|
+
*/
|
297
|
+
generateId() {
|
298
|
+
return `handler_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
299
|
+
}
|
300
|
+
|
301
|
+
/**
|
302
|
+
* Create a scoped event bus
|
303
|
+
* @param {string} scope - Scope prefix
|
304
|
+
* @returns {Object} Scoped event bus interface
|
305
|
+
*/
|
306
|
+
createScope(scope) {
|
307
|
+
const prefix = scope + ':';
|
308
|
+
return {
|
309
|
+
on: (event, handler, options) => this.on(prefix + event, handler, options),
|
310
|
+
once: (event, handler, options) => this.once(prefix + event, handler, options),
|
311
|
+
off: (event, handler) => this.off(prefix + event, handler),
|
312
|
+
emit: (event, ...args) => this.emit(prefix + event, ...args),
|
313
|
+
emitAsync: (event, ...args) => this.emitAsync(prefix + event, ...args),
|
314
|
+
clear: (event) => this.clear(event ? prefix + event : undefined),
|
315
|
+
hasHandlers: (event) => this.hasHandlers(prefix + event)
|
316
|
+
};
|
317
|
+
}
|
318
|
+
}
|
319
|
+
|
320
|
+
// Create singleton instance
|
321
|
+
const eventBus = new EventBus();
|
322
|
+
|
323
|
+
// Support both module and global usage
|
324
|
+
if (typeof module !== 'undefined' && module.exports) {
|
325
|
+
module.exports = eventBus;
|
326
|
+
} else if (typeof define === 'function' && define.amd) {
|
327
|
+
define([], () => eventBus);
|
328
|
+
} else {
|
329
|
+
window.eventBus = eventBus;
|
330
|
+
}
|