eventSource: Add autofire on emit for APP_READY

This commit is contained in:
Cohee 2025-02-21 02:52:45 +02:00
parent ab4d296b22
commit aadae85a2a
2 changed files with 44 additions and 3 deletions

View File

@ -24,10 +24,22 @@ if (typeof Array.prototype.indexOf === 'function') {
/* Polyfill EventEmitter. */
var EventEmitter = function () {
/**
* Creates an event emitter.
* @param {string[]} autoFireAfterEmit Auto-fire event names
*/
var EventEmitter = function (autoFireAfterEmit = []) {
this.events = {};
this.autoFireLastArgs = new Map();
this.autoFireAfterEmit = new Set(autoFireAfterEmit);
};
/**
* Adds a listener to an event.
* @param {string} event Event name
* @param {function} listener Event listener
* @returns
*/
EventEmitter.prototype.on = function (event, listener) {
// Unknown event used by external libraries?
if (event === undefined) {
@ -40,6 +52,10 @@ EventEmitter.prototype.on = function (event, listener) {
}
this.events[event].push(listener);
if (this.autoFireAfterEmit.has(event) && this.autoFireLastArgs.has(event)) {
listener.apply(this, this.autoFireLastArgs.get(event));
}
};
/**
@ -60,6 +76,10 @@ EventEmitter.prototype.makeLast = function (event, listener) {
}
events.push(listener);
if (this.autoFireAfterEmit.has(event) && this.autoFireLastArgs.has(event)) {
listener.apply(this, this.autoFireLastArgs.get(event));
}
}
/**
@ -80,8 +100,17 @@ EventEmitter.prototype.makeFirst = function (event, listener) {
}
events.unshift(listener);
if (this.autoFireAfterEmit.has(event) && this.autoFireLastArgs.has(event)) {
listener.apply(this, this.autoFireLastArgs.get(event));
}
}
/**
* Removes a listener from an event.
* @param {string} event Event name
* @param {function} listener Event listener
*/
EventEmitter.prototype.removeListener = function (event, listener) {
var idx;
@ -94,6 +123,10 @@ EventEmitter.prototype.removeListener = function (event, listener) {
}
};
/**
* Emits an event with optional arguments.
* @param {string} event Event name
*/
EventEmitter.prototype.emit = async function (event) {
let args = [].slice.call(arguments, 1);
if (localStorage.getItem('eventTracing') === 'true') {
@ -118,6 +151,10 @@ EventEmitter.prototype.emit = async function (event) {
}
}
}
if (this.autoFireAfterEmit.has(event)) {
this.autoFireLastArgs.set(event, args);
}
};
EventEmitter.prototype.emitAndWait = function (event) {
@ -144,10 +181,14 @@ EventEmitter.prototype.emitAndWait = function (event) {
}
}
}
if (this.autoFireAfterEmit.has(event)) {
this.autoFireLastArgs.set(event, args);
}
};
EventEmitter.prototype.once = function (event, listener) {
this.on(event, function g () {
this.on(event, function g() {
this.removeListener(event, g);
listener.apply(this, arguments);
});

View File

@ -512,7 +512,7 @@ export const event_types = {
TOOL_CALLS_RENDERED: 'tool_calls_rendered',
};
export const eventSource = new EventEmitter();
export const eventSource = new EventEmitter([event_types.APP_READY]);
eventSource.on(event_types.CHAT_CHANGED, processChatSlashCommands);