@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
59 lines (57 loc) • 2.2 kB
JavaScript
;
const require_lib_types_Enums = require('../types/Enums.cjs');
const require_lib_plugins_symbols = require('./symbols.cjs');
//#region src/lib/plugins/PluginManager.ts
var PluginManager = class {
constructor() {
this.registry = /* @__PURE__ */ new Set();
}
registerHook(hook, type, name) {
if (typeof hook !== "function") throw new TypeError(`The provided hook ${name ? `(${name}) ` : ""}is not a function`);
this.registry.add({
hook,
type,
name
});
return this;
}
registerPreGenericsInitializationHook(hook, name) {
return this.registerHook(hook, require_lib_types_Enums.PluginHook.PreGenericsInitialization, name);
}
registerPreInitializationHook(hook, name) {
return this.registerHook(hook, require_lib_types_Enums.PluginHook.PreInitialization, name);
}
registerPostInitializationHook(hook, name) {
return this.registerHook(hook, require_lib_types_Enums.PluginHook.PostInitialization, name);
}
registerPreLoginHook(hook, name) {
return this.registerHook(hook, require_lib_types_Enums.PluginHook.PreLogin, name);
}
registerPostLoginHook(hook, name) {
return this.registerHook(hook, require_lib_types_Enums.PluginHook.PostLogin, name);
}
use(plugin) {
const possibleSymbolHooks = [
[require_lib_plugins_symbols.preGenericsInitialization, require_lib_types_Enums.PluginHook.PreGenericsInitialization],
[require_lib_plugins_symbols.preInitialization, require_lib_types_Enums.PluginHook.PreInitialization],
[require_lib_plugins_symbols.postInitialization, require_lib_types_Enums.PluginHook.PostInitialization],
[require_lib_plugins_symbols.preLogin, require_lib_types_Enums.PluginHook.PreLogin],
[require_lib_plugins_symbols.postLogin, require_lib_types_Enums.PluginHook.PostLogin]
];
for (const [hookSymbol, hookType] of possibleSymbolHooks) {
const hook = Reflect.get(plugin, hookSymbol);
if (typeof hook !== "function") continue;
this.registerHook(hook, hookType);
}
return this;
}
*values(hook) {
for (const plugin of this.registry) {
if (hook && plugin.type !== hook) continue;
yield plugin;
}
}
};
//#endregion
exports.PluginManager = PluginManager;
//# sourceMappingURL=PluginManager.cjs.map