UNPKG

@sapphire/framework

Version:

Discord bot framework built for advanced and amazing bots.

1 lines 5.41 kB
{"version":3,"sources":["../../../../src/lib/plugins/PluginManager.ts"],"names":[],"mappings":";;;;AAuBO,IAAM,cAAA,GAAN,MAAM,cAAc,CAAA;AAAA,EAApB,WAAA,GAAA;AACN,IAAgB,IAAA,CAAA,QAAA,uBAAe,GAA6B,EAAA;AAAA;AAAA,EAIrD,YAAA,CAAa,IAAoD,EAAA,IAAA,EAAkB,IAAqB,EAAA;AAC9G,IAAA,IAAI,OAAO,IAAA,KAAS,UAAY,EAAA,MAAM,IAAI,SAAA,CAAU,CAAqB,kBAAA,EAAA,IAAA,GAAO,CAAI,CAAA,EAAA,IAAI,CAAO,EAAA,CAAA,GAAA,EAAE,CAAmB,iBAAA,CAAA,CAAA;AACpH,IAAA,IAAA,CAAK,SAAS,GAAI,CAAA,EAAE,IAAM,EAAA,IAAA,EAAM,MAAM,CAAA;AACtC,IAAO,OAAA,IAAA;AAAA;AACR,EAEO,qCAAA,CAAsC,MAA0B,IAAe,EAAA;AACrF,IAAA,OAAO,IAAK,CAAA,YAAA,CAAa,IAAM,EAAA,UAAA,CAAW,2BAA2B,IAAI,CAAA;AAAA;AAC1E,EAEO,6BAAA,CAA8B,MAA0B,IAAe,EAAA;AAC7E,IAAA,OAAO,IAAK,CAAA,YAAA,CAAa,IAAM,EAAA,UAAA,CAAW,mBAAmB,IAAI,CAAA;AAAA;AAClE,EAEO,8BAAA,CAA+B,MAA0B,IAAe,EAAA;AAC9E,IAAA,OAAO,IAAK,CAAA,YAAA,CAAa,IAAM,EAAA,UAAA,CAAW,oBAAoB,IAAI,CAAA;AAAA;AACnE,EAEO,oBAAA,CAAqB,MAA+B,IAAe,EAAA;AACzE,IAAA,OAAO,IAAK,CAAA,YAAA,CAAa,IAAM,EAAA,UAAA,CAAW,UAAU,IAAI,CAAA;AAAA;AACzD,EAEO,qBAAA,CAAsB,MAA+B,IAAe,EAAA;AAC1E,IAAA,OAAO,IAAK,CAAA,YAAA,CAAa,IAAM,EAAA,UAAA,CAAW,WAAW,IAAI,CAAA;AAAA;AAC1D,EAEO,IAAI,MAAuB,EAAA;AACjC,IAAA,MAAM,mBAA8C,GAAA;AAAA,MACnD,CAAC,yBAA2B,EAAA,UAAA,CAAW,yBAAyB,CAAA;AAAA,MAChE,CAAC,iBAAmB,EAAA,UAAA,CAAW,iBAAiB,CAAA;AAAA,MAChD,CAAC,kBAAoB,EAAA,UAAA,CAAW,kBAAkB,CAAA;AAAA,MAClD,CAAC,QAAU,EAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,MAC9B,CAAC,SAAW,EAAA,UAAA,CAAW,SAAS;AAAA,KACjC;AACA,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,QAAQ,CAAA,IAAK,mBAAqB,EAAA;AACzD,MAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,GAAI,CAAA,MAAA,EAAQ,UAAU,CAAA;AAC3C,MAAI,IAAA,OAAO,SAAS,UAAY,EAAA;AAChC,MAAK,IAAA,CAAA,YAAA,CAAa,MAAM,QAAe,CAAA;AAAA;AAExC,IAAO,OAAA,IAAA;AAAA;AACR,EAKA,CAAQ,OAAO,IAAsE,EAAA;AACpF,IAAW,KAAA,MAAA,MAAA,IAAU,KAAK,QAAU,EAAA;AACnC,MAAI,IAAA,IAAA,IAAQ,MAAO,CAAA,IAAA,KAAS,IAAM,EAAA;AAClC,MAAM,MAAA,MAAA;AAAA;AACP;AAEF,CAAA;AAxD2B,MAAA,CAAA,cAAA,EAAA,eAAA,CAAA;AAApB,IAAM,aAAN,GAAA","file":"PluginManager.mjs","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"]}