@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
1 lines • 4.69 kB
Source Map (JSON)
{"version":3,"file":"PluginManager.mjs","names":["possibleSymbolHooks: [symbol, PluginHook][]"],"sources":["../../../../src/lib/plugins/PluginManager.ts"],"sourcesContent":["import type { Awaitable } from '@sapphire/utilities';\nimport type { ClientOptions } from 'discord.js';\nimport type { SapphireClient } from '../SapphireClient';\nimport { PluginHook } from '../types/Enums';\nimport type { Plugin } from './Plugin';\nimport { postInitialization, postLogin, preGenericsInitialization, preInitialization, preLogin } from './symbols';\n\nexport type AsyncPluginHooks = PluginHook.PreLogin | PluginHook.PostLogin;\nexport interface SapphirePluginAsyncHook {\n\t(this: SapphireClient, options: ClientOptions): Awaitable<unknown>;\n}\n\nexport type SyncPluginHooks = Exclude<PluginHook, AsyncPluginHooks>;\nexport interface SapphirePluginHook {\n\t(this: SapphireClient, options: ClientOptions): unknown;\n}\n\nexport interface SapphirePluginHookEntry<T = SapphirePluginHook | SapphirePluginAsyncHook> {\n\thook: T;\n\ttype: PluginHook;\n\tname?: string;\n}\n\nexport class PluginManager {\n\tpublic readonly registry = new Set<SapphirePluginHookEntry>();\n\n\tpublic registerHook(hook: SapphirePluginHook, type: SyncPluginHooks, name?: string): this;\n\tpublic registerHook(hook: SapphirePluginAsyncHook, type: AsyncPluginHooks, name?: string): this;\n\tpublic registerHook(hook: SapphirePluginHook | SapphirePluginAsyncHook, type: PluginHook, name?: string): this {\n\t\tif (typeof hook !== 'function') throw new TypeError(`The provided hook ${name ? `(${name}) ` : ''}is not a function`);\n\t\tthis.registry.add({ hook, type, name });\n\t\treturn this;\n\t}\n\n\tpublic registerPreGenericsInitializationHook(hook: SapphirePluginHook, name?: string) {\n\t\treturn this.registerHook(hook, PluginHook.PreGenericsInitialization, name);\n\t}\n\n\tpublic registerPreInitializationHook(hook: SapphirePluginHook, name?: string) {\n\t\treturn this.registerHook(hook, PluginHook.PreInitialization, name);\n\t}\n\n\tpublic registerPostInitializationHook(hook: SapphirePluginHook, name?: string) {\n\t\treturn this.registerHook(hook, PluginHook.PostInitialization, name);\n\t}\n\n\tpublic registerPreLoginHook(hook: SapphirePluginAsyncHook, name?: string) {\n\t\treturn this.registerHook(hook, PluginHook.PreLogin, name);\n\t}\n\n\tpublic registerPostLoginHook(hook: SapphirePluginAsyncHook, name?: string) {\n\t\treturn this.registerHook(hook, PluginHook.PostLogin, name);\n\t}\n\n\tpublic use(plugin: typeof Plugin) {\n\t\tconst possibleSymbolHooks: [symbol, PluginHook][] = [\n\t\t\t[preGenericsInitialization, PluginHook.PreGenericsInitialization],\n\t\t\t[preInitialization, PluginHook.PreInitialization],\n\t\t\t[postInitialization, PluginHook.PostInitialization],\n\t\t\t[preLogin, PluginHook.PreLogin],\n\t\t\t[postLogin, PluginHook.PostLogin]\n\t\t];\n\t\tfor (const [hookSymbol, hookType] of possibleSymbolHooks) {\n\t\t\tconst hook = Reflect.get(plugin, hookSymbol) as SapphirePluginHook | SapphirePluginAsyncHook;\n\t\t\tif (typeof hook !== 'function') continue;\n\t\t\tthis.registerHook(hook, hookType as any);\n\t\t}\n\t\treturn this;\n\t}\n\n\tpublic values(): Generator<SapphirePluginHookEntry, void, unknown>;\n\tpublic values(hook: SyncPluginHooks): Generator<SapphirePluginHookEntry<SapphirePluginHook>, void, unknown>;\n\tpublic values(hook: AsyncPluginHooks): Generator<SapphirePluginHookEntry<SapphirePluginAsyncHook>, void, unknown>;\n\tpublic *values(hook?: PluginHook): Generator<SapphirePluginHookEntry, void, unknown> {\n\t\tfor (const plugin of this.registry) {\n\t\t\tif (hook && plugin.type !== hook) continue;\n\t\t\tyield plugin;\n\t\t}\n\t}\n}\n"],"mappings":";;;;AAuBA,IAAa,gBAAb,MAA2B;;OACV,2BAAW,IAAI,KAA8B;;CAI7D,AAAO,aAAa,MAAoD,MAAkB,MAAqB;AAC9G,MAAI,OAAO,SAAS,WAAY,OAAM,IAAI,UAAU,qBAAqB,OAAO,IAAI,KAAK,MAAM,GAAG,mBAAmB;AACrH,OAAK,SAAS,IAAI;GAAE;GAAM;GAAM;GAAM,CAAC;AACvC,SAAO;;CAGR,AAAO,sCAAsC,MAA0B,MAAe;AACrF,SAAO,KAAK,aAAa,MAAM,WAAW,2BAA2B,KAAK;;CAG3E,AAAO,8BAA8B,MAA0B,MAAe;AAC7E,SAAO,KAAK,aAAa,MAAM,WAAW,mBAAmB,KAAK;;CAGnE,AAAO,+BAA+B,MAA0B,MAAe;AAC9E,SAAO,KAAK,aAAa,MAAM,WAAW,oBAAoB,KAAK;;CAGpE,AAAO,qBAAqB,MAA+B,MAAe;AACzE,SAAO,KAAK,aAAa,MAAM,WAAW,UAAU,KAAK;;CAG1D,AAAO,sBAAsB,MAA+B,MAAe;AAC1E,SAAO,KAAK,aAAa,MAAM,WAAW,WAAW,KAAK;;CAG3D,AAAO,IAAI,QAAuB;EACjC,MAAMA,sBAA8C;GACnD,CAAC,2BAA2B,WAAW,0BAA0B;GACjE,CAAC,mBAAmB,WAAW,kBAAkB;GACjD,CAAC,oBAAoB,WAAW,mBAAmB;GACnD,CAAC,UAAU,WAAW,SAAS;GAC/B,CAAC,WAAW,WAAW,UAAU;GACjC;AACD,OAAK,MAAM,CAAC,YAAY,aAAa,qBAAqB;GACzD,MAAM,OAAO,QAAQ,IAAI,QAAQ,WAAW;AAC5C,OAAI,OAAO,SAAS,WAAY;AAChC,QAAK,aAAa,MAAM,SAAgB;;AAEzC,SAAO;;CAMR,CAAQ,OAAO,MAAsE;AACpF,OAAK,MAAM,UAAU,KAAK,UAAU;AACnC,OAAI,QAAQ,OAAO,SAAS,KAAM;AAClC,SAAM"}