@mastra/core
Version:
The core foundation of the Mastra framework, providing essential components and interfaces for building AI-powered applications.
88 lines (84 loc) • 2.47 kB
JavaScript
// src/hooks/mitt.ts
function mitt(all) {
all = all || /* @__PURE__ */ new Map();
return {
/**
* A Map of event names to registered handler functions.
*/
all,
/**
* Register an event handler for the given type.
* @param {string|symbol} type Type of event to listen for, or `'*'` for all events
* @param {Function} handler Function to call in response to given event
* @memberOf mitt
*/
on(type, handler) {
const handlers = all.get(type);
if (handlers) {
handlers.push(handler);
} else {
all.set(type, [handler]);
}
},
/**
* Remove an event handler for the given type.
* If `handler` is omitted, all handlers of the given type are removed.
* @param {string|symbol} type Type of event to unregister `handler` from (`'*'` to remove a wildcard handler)
* @param {Function} [handler] Handler function to remove
* @memberOf mitt
*/
off(type, handler) {
const handlers = all.get(type);
if (handlers) {
if (handler) {
handlers.splice(handlers.indexOf(handler) >>> 0, 1);
} else {
all.set(type, []);
}
}
},
/**
* Invoke all handlers for the given type.
* If present, `'*'` handlers are invoked after type-matched handlers.
*
* Note: Manually firing '*' handlers is not supported.
*
* @param {string|symbol} type The event type to invoke
* @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler
* @memberOf mitt
*/
emit(type, evt) {
let handlers = all.get(type);
if (handlers) {
handlers.slice().map((handler) => {
handler(evt);
});
}
handlers = all.get("*");
if (handlers) {
handlers.slice().map((handler) => {
handler(type, evt);
});
}
}
};
}
// src/hooks/index.ts
var AvailableHooks = /* @__PURE__ */ ((AvailableHooks2) => {
AvailableHooks2["ON_EVALUATION"] = "onEvaluation";
AvailableHooks2["ON_GENERATION"] = "onGeneration";
return AvailableHooks2;
})(AvailableHooks || {});
var hooks = mitt();
function registerHook(hook, action) {
hooks.on(hook, action);
}
function executeHook(hook, data) {
setImmediate(() => {
hooks.emit(hook, data);
});
}
exports.AvailableHooks = AvailableHooks;
exports.executeHook = executeHook;
exports.registerHook = registerHook;
;