mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-03-13 02:20:14 +01:00
eventSource: Add autofire on emit for APP_READY
This commit is contained in:
parent
ab4d296b22
commit
aadae85a2a
@ -24,10 +24,22 @@ if (typeof Array.prototype.indexOf === 'function') {
|
|||||||
|
|
||||||
|
|
||||||
/* Polyfill EventEmitter. */
|
/* Polyfill EventEmitter. */
|
||||||
var EventEmitter = function () {
|
/**
|
||||||
|
* Creates an event emitter.
|
||||||
|
* @param {string[]} autoFireAfterEmit Auto-fire event names
|
||||||
|
*/
|
||||||
|
var EventEmitter = function (autoFireAfterEmit = []) {
|
||||||
this.events = {};
|
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) {
|
EventEmitter.prototype.on = function (event, listener) {
|
||||||
// Unknown event used by external libraries?
|
// Unknown event used by external libraries?
|
||||||
if (event === undefined) {
|
if (event === undefined) {
|
||||||
@ -40,6 +52,10 @@ EventEmitter.prototype.on = function (event, listener) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.events[event].push(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);
|
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);
|
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) {
|
EventEmitter.prototype.removeListener = function (event, listener) {
|
||||||
var idx;
|
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) {
|
EventEmitter.prototype.emit = async function (event) {
|
||||||
let args = [].slice.call(arguments, 1);
|
let args = [].slice.call(arguments, 1);
|
||||||
if (localStorage.getItem('eventTracing') === 'true') {
|
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) {
|
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) {
|
EventEmitter.prototype.once = function (event, listener) {
|
||||||
this.on(event, function g () {
|
this.on(event, function g() {
|
||||||
this.removeListener(event, g);
|
this.removeListener(event, g);
|
||||||
listener.apply(this, arguments);
|
listener.apply(this, arguments);
|
||||||
});
|
});
|
||||||
|
@ -512,7 +512,7 @@ export const event_types = {
|
|||||||
TOOL_CALLS_RENDERED: 'tool_calls_rendered',
|
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);
|
eventSource.on(event_types.CHAT_CHANGED, processChatSlashCommands);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user