@sern/handler
Version:
A complete, customizable, typesafe, & reactive framework for discord bots.
70 lines • 2.69 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.callPlugins = exports.executeModule = exports.callInitPlugins = void 0;
const enums_1 = require("../core/structures/enums");
const result_1 = require("../core/structures/result");
const node_util_1 = require("node:util");
const functions_1 = require("../core/functions");
const deepmerge_1 = __importDefault(require("deepmerge"));
function isObject(item) {
return (item && typeof item === 'object' && !Array.isArray(item));
}
//_module is frozen, preventing from mutations
async function callInitPlugins(_module, deps, emit) {
let module = _module;
const emitter = deps['@sern/emitter'];
for (const plugin of module.plugins ?? []) {
const result = await plugin.execute({ module, absPath: module.meta.absPath, deps });
if (!result)
throw Error("Plugin did not return anything. " + (0, node_util_1.inspect)(plugin, false, Infinity, true));
if (!result.ok) {
if (emit) {
emitter?.emit('module.register', (0, functions_1.resultPayload)('failure', module, result.error ?? enums_1.SernError.PluginFailure));
}
throw Error((result.error ?? enums_1.SernError.PluginFailure) +
'on module ' + module.name + " " + module.meta.absPath);
}
}
return module;
}
exports.callInitPlugins = callInitPlugins;
function executeModule(emitter, logger, { module, args }) {
const moduleCalled = (0, result_1.wrapAsync)(async () => {
return module.execute(...args);
});
moduleCalled
.then((res) => {
if (res.ok) {
emitter.emit('module.activate', (0, functions_1.resultPayload)('success', module));
}
else {
if (!emitter.emit('error', (0, functions_1.resultPayload)('failure', module, res.error))) {
// node crashes here.
logger?.error({ 'message': res.error });
}
}
})
.catch(err => {
throw err;
});
}
exports.executeModule = executeModule;
;
async function callPlugins({ args, module }) {
let state = {};
for (const plugin of module.onEvent ?? []) {
const result = await plugin.execute(...args);
if (!result.ok) {
return result;
}
if (isObject(result.value)) {
state = (0, deepmerge_1.default)(state, result.value);
}
}
return (0, result_1.Ok)(state);
}
exports.callPlugins = callPlugins;
//# sourceMappingURL=event-utils.js.map