UNPKG

@sern/handler

Version:

A complete, customizable, typesafe, & reactive framework for discord bots.

70 lines 2.69 kB
"use strict"; 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