commandkit 0.1.11-dev.20250328085113 → 0.1.11-dev.20250330063035
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +14 -257
- package/dist/index.js +268 -319
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.4.0_jiti@1.21.7_postcss@8.5.3_tsx@4.19.2_typescript@5.7.3_yaml@2.7.0/node_modules/tsup/assets/cjs_shims.js","../src/utils/colors.ts","../src/cache/CacheProvider.ts","../src/cache/MemoryCache.ts","../src/components/action-row/ActionRow.ts","../src/utils/error-codes.ts","../src/context/async-context.ts","../src/components/button/ButtonKit.ts","../src/components/button/Button.ts","../src/components/modal/ModalKit.ts","../src/components/modal/Modal.ts","../src/utils/warn-unstable.ts","../src/components/common/element.ts","../src/components/common/types.ts","../src/components/common/EventInterceptor.ts","../src/components/index.ts","../src/plugins/PluginCommon.ts","../src/plugins/CompilerPlugin.ts","../src/plugins/RuntimePlugin.ts","../src/plugins/types.ts","../src/logger/DefaultLogger.ts","../src/logger/Logger.ts","../src/plugins/runtime/runtime-events/index.ts","../src/plugins/runtime/CommandKitPluginRuntime.ts","../src/plugins/runtime/CompilerPluginRuntime.ts","../src/plugins/runtime/types.ts","../src/plugins/runtime/runtime.ts","../src/plugins/index.ts","../src/plugins/runtime/builtin/cache/UseCacheTransformer.ts","../src/plugins/runtime/builtin/cache/CachePlugin.ts","../src/plugins/runtime/builtin/MacroPlugin.ts","../src/config/default.ts","../src/config/config.ts","../src/utils/constants.ts","../src/app/i18n/DefaultLocalizationStrategy.ts","../src/utils/utilities.ts","../src/utils/resolve-file-url.ts","../src/app/commands/MessageCommandParser.ts","../src/app/register/CommandRegistrar.ts","../src/context/environment.ts","../src/app/i18n/Localization.ts","../src/app/middleware/signals.ts","../src/cache/cache.ts","../src/cache/index.ts","../src/app/commands/Context.ts","../src/app/commands/AppCommandRunner.ts","../src/utils/types-package.ts","../src/app/handlers/AppCommandHandler.ts","../src/app/router/CommandsRouter.ts","../src/app/router/EventsRouter.ts","../src/app/router/index.ts","../src/app/handlers/AppEventsHandler.ts","../src/cli/common.ts","../src/config/loader.ts","../src/utils/dev-hooks.ts","../src/events/CommandKitEventsChannel.ts","../src/CommandKit.ts","../src/version.ts","../src/cli/env.ts","../src/cli/app-process.ts","../src/cli/build.ts","../src/cli/development.ts","../src/cli/utils.ts","../src/cli/production.ts","../src/cli/generators.ts","../src/index.ts","../src/app/index.ts","../src/app/i18n/LocalizationStrategy.ts","../src/app/i18n/Translation.ts","../src/logger/ILogger.ts","../src/cli/init.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\ntypeof document === 'undefined' ?\nnew URL(`file:${__filename}`).href :\ndocument.currentScript && document.currentScript.src ||\nnew URL('main.js', document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */getImportMetaUrl();","import { createColors } from 'picocolors';\n\nexport default createColors(true);","export interface CacheEntry<T = unknown> {\n value: T;\n ttl?: number;\n}\n\nexport abstract class CacheProvider {\n abstract get<T>(key: string): Promise<CacheEntry<T> | undefined>;\n abstract set<T>(key: string, value: T, ttl?: number): Promise<void>;\n abstract exists(key: string): Promise<boolean>;\n abstract delete(key: string): Promise<void>;\n abstract clear(): Promise<void>;\n abstract expire(key: string, ttl: number): Promise<void>;\n}","import { CacheEntry, CacheProvider } from './CacheProvider';\n\nexport class MemoryCache extends CacheProvider {\n #cache = new Map<string, CacheEntry>();\n\n public async get<T>(key: string): Promise<CacheEntry<T> | undefined> {\n const entry = this.#cache.get(key);\n\n if (!entry) {\n return undefined;\n }\n\n if (entry.ttl && Date.now() > entry.ttl) {\n this.#cache.delete(key);\n return undefined;\n }\n\n return entry as CacheEntry<T>;\n }\n\n public async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n const entry: CacheEntry<T> = {\n value,\n ttl: ttl != null ? Date.now() + ttl : undefined\n };\n\n this.#cache.set(key, entry);\n }\n\n public async exists(key: string): Promise<boolean> {\n return this.#cache.has(key);\n }\n\n public async delete(key: string): Promise<void> {\n this.#cache.delete(key);\n }\n\n public async clear(): Promise<void> {\n this.#cache.clear();\n }\n\n public async expire(key: string, ttl: number): Promise<void> {\n const entry = this.#cache.get(key);\n\n if (!entry) return;\n\n const _ttl = Date.now() + ttl;\n\n // delete if _ttl is in the past\n if (_ttl < Date.now()) {\n this.#cache.delete(key);\n return;\n }\n\n entry.ttl = _ttl;\n }\n}","import { ActionRowBuilder } from 'discord.js';\nimport { AnyCommandKitElement, CommandKitElement } from '../common/element';\n\nexport interface ActionRowProps {\n children?: AnyCommandKitElement[] | AnyCommandKitElement;\n}\n\n/**\n * The action row component.\n * @param props The action row properties.\n * @returns The commandkit element.\n * @example <ActionRow><Button label=\"Click me\" style={ButtonStyle.Primary} customId=\"click_me\" /></ActionRow>\n */\nexport function ActionRow(\nprops: ActionRowProps)\n: CommandKitElement<'action-row'> {\n const row = new ActionRowBuilder();\n\n if (Array.isArray(props.children)) {\n // @ts-ignore\n row.setComponents(...props.children);\n } else if (props.children) {\n // @ts-ignore\n row.setComponents(props.children);\n }\n\n return row;\n}","export const CommandKitErrorCodes = {\n GuildOnlyException: Symbol('kGuildOnlyException'),\n DMOnlyException: Symbol('kDMOnlyException'),\n ExitMiddleware: Symbol('kExitMiddleware'),\n ForwardedCommand: Symbol('kForwardedCommand'),\n InvalidCommandPrefix: Symbol('kInvalidCommandPrefix'),\n PluginCaptureHandle: Symbol('kPluginCaptureHandle')\n} as const;\n\nexport type CommandKitError = Error & {code: symbol;};\n\nexport function createCommandKitError(code: symbol): CommandKitError {\n const error = new Error() as CommandKitError;\n\n Reflect.set(error, 'code', code);\n\n return error;\n}\n\nexport function isCommandKitError(error: unknown): error is CommandKitError {\n if (!(error instanceof Error)) return false;\n const code = Reflect.get(error, 'code');\n\n for (const key in CommandKitErrorCodes) {\n if (CommandKitErrorCodes[key as keyof typeof CommandKitErrorCodes] === code)\n return true;\n }\n\n return false;\n}\n\nexport function isErrorType(error: unknown, code: symbol | symbol[]): boolean {\n if (!isCommandKitError(error)) return false;\n const errorCode = Reflect.get(error, 'code');\n\n if (!errorCode) return false;\n\n if (Array.isArray(code)) return code.includes(errorCode);\n\n return errorCode === code;\n}","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { CommandKitEnvironment } from './environment';\nimport { CommandKitErrorCodes, isCommandKitError } from '../utils/error-codes';\nimport { Interaction, MessageFlags } from 'discord.js';\nimport { CommandKit } from '../CommandKit';\n\nconst context = new AsyncLocalStorage<CommandKitEnvironment>();\n\nexport type GenericFunction<A extends any[] = any[]> = (...args: A) => any;\n\nexport function exitContext<T>(fn: () => T): T {\n return context.exit(fn);\n}\n\n/**\n * Returns a context-aware version of the given function.\n * @param env - The commandkit environment data.\n * @param fn - The target function.\n * @param finalizer - An optional finalizer function to run after the target function. This function will be context-aware.\n * @internal\n */\nexport function makeContextAwareFunction<\n R extends GenericFunction,\n F extends GenericFunction>(\nenv: CommandKitEnvironment, fn: R, finalizer?: F): R {\n const _fn = (...args: any[]) => {\n return context.run(env, async () => {\n try {\n // execute the target function\n const result = await fn(...args);\n\n return result;\n } catch (e) {\n // set the error in the environment data\n if (isCommandKitError(e)) {\n const code = Reflect.get(e, 'code');\n const interaction = env.variables.get('interaction') as Interaction;\n if (!interaction) return;\n\n switch (code) {\n case CommandKitErrorCodes.GuildOnlyException:{\n if (interaction.isRepliable()) {\n await interaction.reply({\n content: 'This command is only available in guilds.',\n flags: MessageFlags.Ephemeral\n });\n }\n return;\n }\n case CommandKitErrorCodes.DMOnlyException:{\n if (interaction.isRepliable()) {\n await interaction.reply({\n content: 'This command is only available in DMs.',\n flags: MessageFlags.Ephemeral\n });\n }\n return;\n }\n }\n\n return;\n }\n\n env.setExecutionError(e as Error);\n } finally {\n if (typeof finalizer === 'function') {\n // execute the finalizer function\n try {\n await finalizer(...args);\n } catch {\n\n // no-op\n }}\n }\n });\n };\n\n return _fn as R;\n}\n\n/**\n * Retrieves commandkit\n * @private\n * @internal\n */\nexport function getCommandKit(): CommandKit | undefined;\nexport function getCommandKit(strict: true): CommandKit;\nexport function getCommandKit(strict: false): CommandKit | undefined;\nexport function getCommandKit(strict = false): CommandKit | undefined {\n const kit = context.getStore()?.commandkit ?? CommandKit.instance;\n\n if (!kit && strict) {\n throw new Error('CommandKit instance not found.');\n }\n\n return kit;\n}\n\n/**\n * Get the current commandkit context.\n * @internal\n */\nexport function getContext(): CommandKitEnvironment | undefined {\n const ctx = context.getStore();\n return ctx;\n}\n\n/**\n * Use current commandkit context. Throws an error if no context is found.\n */\nexport function useEnvironment(): CommandKitEnvironment {\n const ctx = context.getStore();\n if (!ctx) {\n throw new Error(\n 'No commandkit environment found. Please make sure you are inside commandkit handler.'\n );\n }\n\n return ctx;\n}\n\n/**\n * Ensures the command is only available in guilds.\n */\nexport function guildOnly() {\n const env = useEnvironment();\n const interaction: Interaction = env.variables.get('interaction');\n\n if (!interaction) {\n throw new Error('No interaction found in environment.');\n }\n\n if (!interaction.guild) {\n const error = new Error('This command is only available in guilds.');\n Reflect.set(error, 'code', CommandKitErrorCodes.GuildOnlyException);\n\n throw error;\n }\n}\n\n/**\n * Ensures the command is only available in DMs.\n */\nexport function dmOnly() {\n const env = useEnvironment();\n const interaction: Interaction = env.variables.get('interaction');\n\n if (!interaction) {\n throw new Error('No interaction found in environment.');\n }\n\n if (interaction.guild) {\n const error = new Error('This command is only available in DMs.');\n Reflect.set(error, 'code', CommandKitErrorCodes.DMOnlyException);\n\n throw error;\n }\n}","import {\n type Awaitable,\n type ButtonInteraction,\n ButtonStyle,\n ButtonBuilder,\n Events } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../context/async-context';\nimport {\n EventInterceptorContextData,\n EventInterceptorErrorHandler } from\n'../common/EventInterceptor';\n\nexport type ButtonKitPredicate = (\ninteraction: ButtonInteraction)\n=> Awaitable<boolean>;\n\n/**\n * The handler to run when a button is clicked. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type OnButtonKitClick =\nCommandKitButtonBuilderInteractionCollectorDispatch;\n\n/**\n * The handler to run when the interaction collector ends. This handler is called with the reason as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type OnButtonKitEnd = CommandKitButtonBuilderOnEnd;\n\n/**\n * The handler to run when a button is clicked. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type CommandKitButtonBuilderInteractionCollectorDispatch = (\ninteraction: ButtonInteraction,\ncontext: ButtonKit)\n=> Awaitable<void>;\n\nexport type CommandKitButtonBuilderOnEnd = (reason: string) => Awaitable<void>;\n\nexport type CommandKitButtonBuilderInteractionCollectorDispatchContextData =\nEventInterceptorContextData<Events.InteractionCreate>;\n\nexport class ButtonKit extends ButtonBuilder {\n #onClickHandler: CommandKitButtonBuilderInteractionCollectorDispatch | null =\n null;\n #contextData: CommandKitButtonBuilderInteractionCollectorDispatchContextData | null =\n {\n autoReset: true,\n time: 5 * 60 * 1000,\n once: false\n };\n #unsub: (() => void) | null = null;\n\n #getEventInterceptor() {\n const ctx = getContext();\n if (!ctx) return getCommandKit(true).eventInterceptor;\n\n return exitContext(() => ctx.commandkit.eventInterceptor);\n }\n\n /**\n * Sets up an inline interaction collector for this button. This collector by default allows as many interactions as possible if it is actively used.\n * If unused, this expires after 24 hours or custom time if specified.\n * @param handler The handler to run when the button is clicked\n * @param data The context data to use for the interaction collector\n * @returns This button\n * @example\n * ```ts\n * const button = new ButtonKit()\n * .setLabel('Click me')\n * .setStyle(ButtonStyle.Primary)\n * .setCustomId('click_me')\n * .filter((interaction) => interaction.user.id === '1234567890')\n * .onClick(async (interaction) => {\n * await interaction.reply('You clicked me!');\n * });\n *\n * const row = new ActionRowBuilder().addComponents(button);\n *\n * const message = await channel.send({ content: 'Click the button', components: [row] });\n *\n * // Remove onClick handler and destroy the interaction collector\n * button.onClick(null);\n * ```\n */\n public onClick(\n handler: CommandKitButtonBuilderInteractionCollectorDispatch,\n data?: CommandKitButtonBuilderInteractionCollectorDispatchContextData)\n : this {\n if (this.data.style === ButtonStyle.Link) {\n throw new TypeError('Cannot setup \"onClick\" handler on link buttons.');\n }\n\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onClickHandler) {\n this.#destroyCollector();\n }\n\n this.#onClickHandler = handler;\n if (data) {\n this.#contextData = {\n autoReset: data.autoReset ?? this.#contextData?.autoReset ?? true,\n time: data.time ?? this.#contextData?.time ?? 5 * 60 * 1000,\n filter: data.filter ?? this.#contextData?.filter,\n onEnd: data.onEnd ?? this.#contextData?.onEnd\n };\n }\n\n this.#setupInteractionCollector();\n\n return this;\n }\n\n public onEnd(handler: CommandKitButtonBuilderOnEnd): this {\n if (this.data.style === ButtonStyle.Link) {\n throw new TypeError('Cannot setup \"onEnd\" handler on link buttons.');\n }\n\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onEnd\" without a handler function parameter.'\n );\n }\n\n this.#contextData ??= {};\n this.#contextData.onEnd = handler;\n\n return this;\n }\n\n /**\n * Sets the handler to run when the interaction collector ends.\n * @param handler - The handler to run when the interaction collector ends.\n * @returns This instance of the modal builder.\n */\n public onError(handler: EventInterceptorErrorHandler): this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onError\" without a handler function parameter.'\n );\n }\n\n this.#contextData ??= {};\n this.#contextData.onError = handler;\n\n return this;\n }\n\n /**\n * Sets a filter for the interaction collector.\n * @param predicate The filter to use for the interaction collector\n */\n public filter(predicate: ButtonKitPredicate): this {\n this.#contextData ??= {\n autoReset: true,\n time: 5 * 60 * 1000\n };\n // @ts-ignore\n this.#contextData.filter = predicate;\n\n return this;\n }\n\n private get customId() {\n // @ts-ignore\n return this.data.custom_id ?? this.data.customId;\n }\n\n #setupInteractionCollector() {\n if (\n this.data.style === ButtonStyle.Link ||\n !this.#contextData ||\n !this.#onClickHandler)\n\n return;\n\n const myCustomId = this.customId ?? null;\n\n if (myCustomId === null) {\n throw new TypeError(\n 'Cannot setup \"onClick\" handler on a button without a custom id.'\n );\n }\n\n const interceptor = this.#getEventInterceptor();\n\n this.#unsub = interceptor.subscribe(\n Events.InteractionCreate,\n async (interaction) => {\n if (!interaction.isButton()) return;\n\n const myCustomId = this.customId ?? null;\n const interactionCustomId = interaction.customId;\n\n if (myCustomId && interactionCustomId !== myCustomId) return;\n\n const filter = this.#contextData?.filter;\n\n if (filter && !(await filter(interaction))) return;\n\n const handler = this.#onClickHandler;\n\n if (!handler) return this.#unsub?.();\n\n return handler(interaction, this);\n },\n this.#contextData\n );\n }\n\n public dispose() {\n this.#destroyCollector();\n return this;\n }\n\n #destroyCollector() {\n this.#unsub?.();\n this.#unsub = null;\n this.#contextData = null;\n this.#onClickHandler = null;\n }\n}","import { ButtonStyle, ComponentEmojiResolvable } from 'discord.js';\nimport {\n ButtonKit,\n CommandKitButtonBuilderOnEnd,\n type CommandKitButtonBuilderInteractionCollectorDispatch,\n type CommandKitButtonBuilderInteractionCollectorDispatchContextData } from\n'./ButtonKit';\nimport { CommandKitElement } from '../common/element';\nimport { MaybeArray } from '../common/types';\nimport { EventInterceptorErrorHandler } from '../common/EventInterceptor';\n\nexport type ButtonChildrenLike = string | number | boolean;\n\nexport interface ButtonProps {\n label?: string;\n style?: ButtonStyle;\n emoji?: ComponentEmojiResolvable;\n disabled?: boolean;\n customId?: string;\n url?: string;\n skuId?: string;\n onClick?: CommandKitButtonBuilderInteractionCollectorDispatch;\n onError?: EventInterceptorErrorHandler;\n options?: CommandKitButtonBuilderInteractionCollectorDispatchContextData;\n onEnd?: CommandKitButtonBuilderOnEnd;\n children?: MaybeArray<ButtonChildrenLike>;\n}\n\n/**\n * The button component.\n * @param props The button properties.\n * @returns The commandkit element.\n * @example <Button style={ButtonStyle.Primary} customId=\"click_me\">Click Me</Button>\n */\nexport function Button(props: ButtonProps): CommandKitElement<'button-kit'> {\n const button = new ButtonKit();\n\n props.style ??= ButtonStyle.Primary;\n\n // auto-generate customId if not provided (only if onClick is set)\n if (props.onClick) {\n props.customId ??= `buttonkit::${crypto.randomUUID()}`;\n }\n\n if (props.customId) {\n button.setCustomId(props.customId);\n }\n\n if (props.onClick) {\n button.onClick(props.onClick, props.options);\n }\n\n if (props.disabled) {\n button.setDisabled(props.disabled);\n }\n\n if (props.emoji) {\n button.setEmoji(props.emoji);\n }\n\n if (props.skuId) {\n button.setSKUId(props.skuId);\n }\n\n if (props.url) {\n button.setURL(props.url);\n }\n\n if (props.style) {\n button.setStyle(props.style);\n }\n\n const label = props.label || props.children;\n\n if (label) {\n button.setLabel(\n Array.isArray(label) ?\n label.join(' ') :\n typeof label === 'string' ?\n label :\n String(label)\n );\n }\n\n if (props.onEnd) {\n button.onEnd(props.onEnd);\n }\n\n if (props.onError) {\n button.onError(props.onError);\n }\n\n return button;\n}","import {\n Awaitable,\n Events,\n ModalBuilder,\n ModalSubmitInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../context/async-context';\nimport {\n EventInterceptorContextData,\n EventInterceptorErrorHandler } from\n'../common/EventInterceptor';\n\nexport type ModalKitPredicate = (\ninteraction: ModalSubmitInteraction)\n=> Awaitable<boolean>;\n\n/**\n * The handler to run when a modal is submitted. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type OnModalKitSubmit =\nCommandKitModalBuilderInteractionCollectorDispatch;\n\n/**\n * The handler to run when the interaction collector ends. This handler is called with the reason as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type OnModalKitEnd = CommandKitModalBuilderOnEnd;\n\n/**\n * The handler to run when a modal is submitted. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type CommandKitModalBuilderInteractionCollectorDispatch = (\ninteraction: ModalSubmitInteraction,\ncontext: ModalKit)\n=> Awaitable<void>;\n\nexport type CommandKitModalBuilderOnEnd = (reason: string) => Awaitable<void>;\n\nexport type CommandKitModalBuilderInteractionCollectorDispatchContextData =\nEventInterceptorContextData<Events.InteractionCreate>;\n\nexport class ModalKit extends ModalBuilder {\n #onSubmitHandler: CommandKitModalBuilderInteractionCollectorDispatch | null =\n null;\n #contextData: CommandKitModalBuilderInteractionCollectorDispatchContextData | null =\n {\n autoReset: false,\n time: 5 * 60 * 1000,\n once: true\n };\n #unsub: (() => void) | null = null;\n\n #getEventInterceptor() {\n const ctx = getContext();\n if (!ctx) return getCommandKit(true).eventInterceptor;\n\n return exitContext(() => ctx.commandkit.eventInterceptor);\n }\n\n /**\n * Sets the handler to run when the modal is submitted.\n * @param handler - The handler to run when the modal is submitted.\n * @param data - The context data for the interaction collector.\n * @returns This instance of the modal builder.\n * @example\n * ```ts\n * const modal = new ModalKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.user.id === '1234567890')\n * .onSubmit(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSubmit(\n handler: CommandKitModalBuilderInteractionCollectorDispatch,\n data?: CommandKitModalBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSubmitHandler) {\n this.#destroyCollector();\n }\n\n this.#onSubmitHandler = handler;\n\n if (data) {\n this.#contextData = {\n autoReset: data.autoReset ?? this.#contextData?.autoReset ?? true,\n time: data.time ?? this.#contextData?.time ?? 5 * 60 * 1000,\n filter: data.filter ?? this.#contextData?.filter,\n onEnd: data.onEnd ?? this.#contextData?.onEnd\n };\n }\n\n this.#setupCollector();\n\n return this;\n }\n\n /**\n * Sets the handler to run when the interaction collector ends.\n * @param handler - The handler to run when the interaction collector ends.\n * @returns This instance of the modal builder.\n */\n public onEnd(handler: CommandKitModalBuilderOnEnd): this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onEnd\" without a handler function parameter.'\n );\n }\n\n this.#contextData ??= {};\n this.#contextData.onEnd = handler;\n\n return this;\n }\n\n /**\n * Sets the handler to run when the interaction collector ends.\n * @param handler - The handler to run when the interaction collector ends.\n * @returns This instance of the modal builder.\n */\n public onError(handler: EventInterceptorErrorHandler): this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onError\" without a handler function parameter.'\n );\n }\n\n this.#contextData ??= {};\n this.#contextData.onError = handler;\n\n return this;\n }\n\n /**\n * Sets a filter for the interaction collector.\n * @param predicate - The filter to use for the interaction collector.\n * @returns This instance of the modal builder.\n */\n public filter(predicate: ModalKitPredicate): this {\n this.#contextData ??= {\n autoReset: true,\n time: 5 * 60 * 1000\n };\n // @ts-ignore\n this.#contextData.filter = predicate;\n\n return this;\n }\n\n private get customId() {\n // @ts-ignore\n return this.data.custom_id ?? this.data.customId;\n }\n\n #setupCollector() {\n if (!this.#contextData) return;\n\n if (!this.customId) {\n throw new TypeError(\n 'Cannot setup an modal collector without a custom ID.'\n );\n }\n\n const interceptor = this.#getEventInterceptor();\n if (!interceptor) return;\n\n this.#unsub = interceptor.subscribe(\n Events.InteractionCreate,\n async (interaction) => {\n if (!interaction.isModalSubmit()) return;\n\n const myCustomId = this.customId ?? null;\n const interactionCustomId = interaction.customId;\n\n if (myCustomId && interactionCustomId !== myCustomId) return;\n\n const filter = this.#contextData?.filter;\n\n if (filter && !(await filter(interaction))) return;\n\n const handler = this.#onSubmitHandler;\n\n if (!handler) return this.#unsub?.();\n\n return handler(interaction, this);\n },\n this.#contextData\n );\n }\n\n public dispose() {\n this.#destroyCollector();\n return this;\n }\n\n #destroyCollector() {\n this.#unsub?.();\n this.#unsub = null;\n this.#onSubmitHandler = null;\n this.#contextData = null;\n }\n}","import { ActionRowBuilder, TextInputBuilder, TextInputStyle } from 'discord.js';\nimport { MaybeArray } from '../common/types';\nimport { CommandKitElement } from '../common/element';\nimport {\n CommandKitModalBuilderInteractionCollectorDispatchContextData,\n ModalKit,\n OnModalKitEnd,\n OnModalKitSubmit } from\n'./ModalKit';\nimport { EventInterceptorErrorHandler } from '../common/EventInterceptor';\n\nexport interface ModalProps {\n customId?: string;\n title: string;\n children?: MaybeArray<TextInputBuilder | ActionRowBuilder>;\n onSubmit?: OnModalKitSubmit;\n onEnd?: OnModalKitEnd;\n onError?: EventInterceptorErrorHandler;\n options?: CommandKitModalBuilderInteractionCollectorDispatchContextData;\n}\n\n/**\n * The modal component.\n * @param props The modal properties.\n * @returns The commandkit element.\n * @example <Modal title=\"My Modal\" onSubmit={onSubmit}>...</Modal>\n */\nexport function Modal(props: ModalProps): CommandKitElement<'modal'> {\n const modal = new ModalKit();\n\n if (props.title) {\n modal.setTitle(props.title);\n }\n\n if (props.onSubmit) {\n props.customId ??= `modalkit::${crypto.randomUUID()}`;\n }\n\n if (props.customId) {\n modal.setCustomId(props.customId);\n }\n\n if (props.onSubmit) {\n modal.onSubmit(props.onSubmit, props.options);\n }\n\n if (props.children) {\n const childs = (\n Array.isArray(props.children) ? props.children : [props.children]).\n\n map((c) => {\n if (c instanceof ActionRowBuilder) return c;\n if (c instanceof TextInputBuilder)\n return new ActionRowBuilder().addComponents(c);\n }).\n filter((c): c is ActionRowBuilder<TextInputBuilder> => c != null);\n\n modal.addComponents(childs);\n }\n\n if (props.onEnd) {\n modal.onEnd(props.onEnd);\n }\n\n if (props.onError) {\n modal.onError(props.onError);\n }\n\n return modal;\n}\n\nexport interface TextInputProps {\n customId: string;\n label: string;\n placeholder?: string;\n maxLength?: number;\n minLength?: number;\n value?: string;\n required?: boolean;\n}\n\n/**\n * The text input component.\n * @param props The text input properties.\n * @returns The commandkit element.\n * @example <TextInput customId=\"input\" label=\"Input\" style={TextInputStyle.Short} />\n */\nexport function TextInput(\nprops: TextInputProps & {style: TextInputStyle;})\n: CommandKitElement<'text-input'> {\n const input = new TextInputBuilder().setStyle(props.style);\n\n if (props.customId) {\n input.setCustomId(props.customId);\n }\n\n if (props.label) {\n input.setLabel(props.label);\n }\n\n if (props.placeholder) {\n input.setPlaceholder(props.placeholder);\n }\n\n if (props.maxLength) {\n input.setMaxLength(props.maxLength);\n }\n\n if (props.minLength) {\n input.setMinLength(props.minLength);\n }\n\n if (props.value) {\n input.setValue(props.value);\n }\n\n if (props.required) {\n input.setRequired(props.required);\n }\n\n return input;\n}\n\n/**\n * The short text input component.\n * @param props The text input properties.\n * @returns The commandkit element.\n * @example <ShortInput customId=\"input\" label=\"Input\" />\n */\nexport function ShortInput(\nprops: TextInputProps)\n: CommandKitElement<'text-input'> {\n return TextInput({ ...props, style: TextInputStyle.Short });\n}\n\n/**\n * The paragraph text input component.\n * @param props The text input properties.\n * @returns The commandkit element.\n * @example <ParagraphInput customId=\"input\" label=\"Input\" />\n */\nexport function ParagraphInput(\nprops: TextInputProps)\n: CommandKitElement<'text-input'> {\n return TextInput({ ...props, style: TextInputStyle.Paragraph });\n}","const WARNED_KEYS = new Set<string>();\n\nexport function emitWarning(message: string, code = 'CommandKitWarning') {\n process.emitWarning(message, { code });\n}\n\nexport function warnUnstable(name: string) {\n if (WARNED_KEYS.has(name)) return;\n\n WARNED_KEYS.add(name);\n\n emitWarning(\n `${name} is unstable and may change in future versions.`,\n 'CommandKitUnstableWarning'\n );\n}","import { ActionRowBuilder, TextInputBuilder } from 'discord.js';\nimport type { ButtonKit } from '../button/ButtonKit';\nimport { warnUnstable } from '../../utils/warn-unstable';\nimport { ModalKit } from '../modal/ModalKit';\n\nexport const ElementType = {\n ActionRow: 'action-row',\n Button: 'button-kit',\n Modal: 'modal',\n TextInput: 'text-input'\n} as const;\n\nexport type ElementType = (typeof ElementType)[keyof typeof ElementType];\n\nexport interface CommandKitElementData {\n [ElementType.ActionRow]: ActionRowBuilder;\n [ElementType.Button]: ButtonKit;\n [ElementType.Modal]: ModalKit;\n [ElementType.TextInput]: TextInputBuilder;\n}\n\nexport type CommandKitElement<Type extends ElementType> =\nCommandKitElementData[Type];\n\nexport type AnyCommandKitElement = CommandKitElement<ElementType>;\n\nexport function isCommandKitElement(\nelement: unknown)\n: element is CommandKitElement<ElementType> {\n if (typeof element !== 'object' || element === null) return false;\n if (!Reflect.has(element, 'type')) return false;\n if (!Reflect.has(element, 'data')) return false;\n\n return true;\n}\n\nexport function getElement<\n T extends ElementType,\n E extends CommandKitElement<T>>(\nelement: E): CommandKitElementData[T] {\n return element.data as CommandKitElementData[T];\n}\n\nexport interface FragmentElementProps {\n children: [];\n}\n\nexport function Fragment(\nprops: FragmentElementProps)\n: CommandKitElementData[ElementType][] {\n warnUnstable('CommandKit JSX');\n return Array.isArray(props.children) ? props.children.flat() : props.children;\n}\n\nexport function createElement(\ntype: Function,\nprops: Record<string, unknown>,\n...children: any[])\n: CommandKitElement<ElementType> {\n warnUnstable('CommandKit JSX');\n return type({ ...props, children });\n}","export type MaybeArray<T> = T | T[];","import { Awaitable, Client, ClientEvents, Events } from 'discord.js';\n\nexport interface EventInterceptorContextData<E extends keyof ClientEvents> {\n /**\n * The filter to use for the collector.\n */\n filter?: (...args: ClientEvents[E]) => Awaitable<boolean>;\n /**\n * The duration (in ms) that the collector should run for.\n */\n time?: number;\n /**\n * If the collector should automatically reset the timer when a button is clicked.\n */\n autoReset?: boolean;\n /**\n * Whether the collector should run only once.\n */\n once?: boolean;\n /**\n * The handler to run when the collector ends.\n */\n onEnd?: (reason: string) => Awaitable<void>;\n /**\n * The handler to run upon an error.\n */\n onError?: EventInterceptorErrorHandler;\n}\n\nexport type EventInterceptorErrorHandler = (error: Error) => Awaitable<void>;\n\nexport class EventInterceptor {\n private subscribers = new Map<\n keyof ClientEvents,\n Set<(...args: any[]) => void>>(\n );\n private globalHandlers = new Map<\n keyof ClientEvents,\n (...args: any[]) => void>(\n );\n private cleanupTimer: NodeJS.Timeout | null = null;\n\n /**\n * Creates the event interceptor.\n */\n public constructor(public readonly client: Client) {\n this.#cleanupLoop();\n }\n\n #cleanupLoop() {\n if (this.cleanupTimer) clearInterval(this.cleanupTimer);\n\n this.cleanupTimer = setInterval(() => {\n for (const [event, handlers] of this.subscribers) {\n for (const handler of handlers) {\n const options = Reflect.get(\n handler,\n 'options'\n ) as EventInterceptorContextData<keyof ClientEvents> & {\n registeredAt: number;\n };\n\n const isExpired =\n options.time && Date.now() - options.registeredAt > options.time;\n\n if (isExpired) {\n this.unsubscribe(event, handler, 'time');\n }\n }\n }\n }, 60_000).unref();\n }\n\n /**\n * Destroys the event interceptor.\n */\n public destroy(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n\n for (const [event, handlers] of this.subscribers) {\n for (const handler of handlers) {\n this.unsubscribe(event, handler, 'destroy');\n }\n }\n\n this.subscribers.clear();\n this.globalHandlers.clear();\n }\n\n /**\n * Whether the event has subscribers.\n * @param event The event to check.\n */\n public hasSubscribers(event: keyof ClientEvents): boolean {\n return this.subscribers.has(event);\n }\n\n /**\n * Returns the number of subscribers for the event.\n * @param event The event to check.\n */\n public getSubscriberCount(event: keyof ClientEvents): number {\n const handlers = this.subscribers.get(event);\n return handlers?.size ?? 0;\n }\n\n /**\n * Whether the event has global handlers.\n */\n public hasGlobalHandlers(): boolean {\n return this.globalHandlers.size > 0;\n }\n\n /**\n * Returns the number of global handlers.\n */\n public getGlobalHandlersCount(): number {\n return this.subscribers.size;\n }\n\n /**\n * Subscribes to an event.\n * @param event The event to subscribe to.\n * @param listener The listener to call when the event is emitted.\n * @returns A function to unsubscribe from the event.\n */\n public subscribe<Event extends keyof ClientEvents>(\n event: Event,\n listener: (...args: ClientEvents[Event]) => void,\n options?: EventInterceptorContextData<Event>)\n : () => void {\n if (!this.subscribers.has(event)) {\n this.subscribers.set(event, new Set());\n this.client.on(event, this.createGlobalHandler(event));\n this.client.setMaxListeners(this.client.getMaxListeners() + 1);\n }\n\n options ??= {};\n\n // @ts-ignore\n options.registeredAt = Date.now();\n\n Reflect.set(listener, 'options', options);\n\n this.subscribers.get(event)!.add(listener);\n\n return () => {\n this.unsubscribe(event, listener);\n };\n }\n\n /**\n * Unsubscribes from an event.\n * @param event The event to unsubscribe from.\n */\n public unsubscribe<Event extends keyof ClientEvents>(\n event: Event,\n listener: (...args: ClientEvents[Event]) => void,\n reason?: string)\n : void {\n const handlers = this.subscribers.get(event);\n if (!handlers) return;\n\n handlers.delete(listener);\n\n if (handlers.size < 1) {\n this.subscribers.delete(event);\n this.client.removeListener(event, this.globalHandlers.get(event)!);\n this.globalHandlers.delete(event);\n this.client.setMaxListeners(\n Math.max(this.client.getMaxListeners() - 1, 0)\n );\n }\n\n Reflect.get(listener, 'options').onEnd?.(reason ?? 'unsubscribe');\n }\n\n /**\n * Creates a global handler for the event.\n * @param event The event to create a global handler for.\n * @returns The global handler.\n */\n private createGlobalHandler<Event extends keyof ClientEvents>(\n event: Event)\n : (...args: ClientEvents[Event]) => void {\n if (this.globalHandlers.has(event)) {\n return this.globalHandlers.get(event)!;\n }\n\n const handler = async (...args: ClientEvents[Event]) => {\n const subscribers = this.subscribers.get(event);\n if (subscribers && subscribers.size > 0) {\n for (const subscriber of subscribers) {\n const options = Reflect.get(\n subscriber,\n 'options'\n ) as EventInterceptorContextData<Event> & {registeredAt: number;};\n\n const isExpired =\n options.time && Date.now() - options.registeredAt > options.time;\n\n if (isExpired) {\n this.unsubscribe(event, subscriber, 'time');\n continue;\n }\n\n if (options.autoReset) {\n options.registeredAt = Date.now();\n }\n\n if (options.filter && !(await options.filter(...args))) {\n continue;\n }\n\n try {\n await subscriber(...args);\n } catch (e) {\n if (options.onError) {\n await options.onError(<Error> e);\n } else {\n throw e;\n }\n } finally {\n if (options.once) {\n this.unsubscribe(event, subscriber, 'once');\n }\n }\n }\n }\n };\n\n this.globalHandlers.set(event, handler);\n\n return handler;\n }\n}","// action row\nexport * from './action-row/ActionRow';\n\n// buttons\nexport * from './button/ButtonKit';\nexport * from './button/Button';\n\n// modals\nexport * from './modal/ModalKit';\nexport * from './modal/Modal';\n\n// common\nexport * from './common/element';\nexport * from './common/types';\nexport * from './common/EventInterceptor';","import { CommonPluginRuntime } from './runtime/runtime';\n\nexport type PluginOptions = Record<string, any>;\n\nexport abstract class PluginCommon<\n T extends PluginOptions = PluginOptions,\n C extends CommonPluginRuntime = CommonPluginRuntime>\n{\n public abstract readonly name: string;\n public constructor(protected readonly options: T) {}\n\n /**\n * Called when this plugin is activated\n */\n public async activate(ctx: C): Promise<void> {}\n\n /**\n * Called when this plugin is deactivated\n */\n public async deactivate(ctx: C): Promise<void> {}\n}\n\nexport function isPlugin(\nplugin: unknown)\n: plugin is PluginCommon<PluginOptions> {\n return plugin instanceof PluginCommon;\n}","import {\n Loader,\n OnLoadArgs,\n OnResolveArgs,\n OnResolveResult } from\n'./runtime/types';\nimport { PluginCommon, PluginOptions } from './PluginCommon';\nimport { MaybeFalsey } from './types';\nimport { CompilerPluginRuntime } from './runtime/CompilerPluginRuntime';\n\nexport interface PluginTransformParameters {\n args: OnLoadArgs;\n path: string;\n contents: string | Uint8Array;\n loader?: Loader;\n}\n\nexport interface TransformedResult {\n contents?: string | Uint8Array;\n loader?: Loader;\n}\n\nexport interface ResolveResult {\n path?: string;\n external?: boolean;\n}\n\nexport abstract class CompilerPlugin<\n T extends PluginOptions = PluginOptions> extends\nPluginCommon<T, CompilerPluginRuntime> {\n /**\n * Called when transformation is requested to this plugin\n * @param params The parameters for the transformation\n * @returns The transformed result\n */\n public async transform(\n params: PluginTransformParameters)\n : Promise<MaybeFalsey<TransformedResult>> {\n return null;\n }\n\n /**\n * Called when a resolve is requested to this plugin\n * @param args The arguments for the resolve\n * @returns The resolved result\n */\n public async resolve(\n args: OnResolveArgs)\n : Promise<MaybeFalsey<ResolveResult>> {\n return null;\n }\n\n /**\n * Called when a build is started\n */\n public async onBuildStart(): Promise<void> {}\n\n /**\n * Called when a build is ended\n */\n public async onBuildEnd(): Promise<void> {}\n}\n\nexport function isCompilerPlugin(plugin: unknown): plugin is CompilerPlugin {\n return plugin instanceof CompilerPlugin;\n}","import { Interaction, Message, PartialMessage } from 'discord.js';\nimport { PluginCommon, PluginOptions } from './PluginCommon';\nimport type { CommandKitPluginRuntime } from './runtime/CommandKitPluginRuntime';\nimport { PreparedAppCommandExecution } from '../app';\n\nexport abstract class RuntimePlugin<\n T extends PluginOptions = PluginOptions> extends\nPluginCommon<T, CommandKitPluginRuntime> {\n /**\n * Called before commands are loaded\n */\n public async onBeforeCommandsLoad(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called after commands are loaded\n */\n public async onAfterCommandsLoad(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called before events are loaded\n */\n public async onBeforeEventsLoad(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called after events are loaded\n */\n public async onAfterEventsLoad(ctx: CommandKitPluginRuntime): Promise<void> {}\n\n /**\n * Called before the client logs in\n */\n public async onBeforeClientLogin(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called after the client logs in\n */\n public async onAfterClientLogin(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called before interaction is handled\n * @param interaction The interaction\n */\n public async onBeforeInteraction(\n ctx: CommandKitPluginRuntime,\n interaction: Interaction)\n : Promise<void> {}\n\n /**\n * Called after interaction is handled\n * @param interaction The interaction that was handled\n */\n public async onAfterInteraction(\n ctx: CommandKitPluginRuntime,\n interaction: Interaction)\n : Promise<void> {}\n\n /**\n * Called before message command is processed\n * @param message The message\n */\n public async onBeforeMessageCommand(\n ctx: CommandKitPluginRuntime,\n message: Message)\n : Promise<void> {}\n\n /**\n * Called before message update command is processed\n * @param message The message\n */\n public async onBeforeMessageUpdateCommand(\n ctx: CommandKitPluginRuntime,\n oldMessage: Message | PartialMessage,\n newMessage: Message | PartialMessage)\n : Promise<void> {}\n\n /**\n * Called before command is executed. This method can execute the command itself.\n * @param source The source that triggered the command\n * @param command The command\n * @param execute The function that executes the command\n */\n public async executeCommand(\n ctx: CommandKitPluginRuntime,\n source: Interaction | Message,\n command: PreparedAppCommandExecution,\n execute: () => Promise<any>)\n : Promise<boolean> {\n return false;\n }\n}\n\nexport function isRuntimePlugin(plugin: unknown): plugin is RuntimePlugin {\n return plugin instanceof RuntimePlugin;\n}","import type { CompilerPlugin } from './CompilerPlugin';\nimport type { RuntimePlugin } from './RuntimePlugin';\n\nexport type CommandKitPlugin = RuntimePlugin | CompilerPlugin;\nexport type MaybeFalsey<T> = T | false | null | undefined;","import { getContext } from '../context/async-context';\nimport colors from '../utils/colors';\nimport { ILogger } from './ILogger';\n\nenum LogLevel {\n DEBUG,\n INFO,\n WARN,\n ERROR,\n DEFAULT,\n}\n\nconst execHandlerKind = {\n autocomplete: 'Autocomplete',\n messageContextMenu: 'MessageContextMenu',\n userContextMenu: 'UserContextMenu',\n chatInput: 'SlashCommand',\n message: 'Message'\n};\n\nconst TextColorMap = {\n [LogLevel.DEBUG]: colors.blue,\n [LogLevel.INFO]: colors.green,\n [LogLevel.WARN]: colors.yellow,\n [LogLevel.ERROR]: colors.red,\n [LogLevel.DEFAULT]: colors.white\n};\n\nconst TextBgColorMap = {\n [LogLevel.DEBUG]: colors.bgBlue,\n [LogLevel.INFO]: colors.bgGreen,\n [LogLevel.WARN]: colors.bgYellow,\n [LogLevel.ERROR]: colors.bgRed,\n [LogLevel.DEFAULT]: colors.bgWhite\n};\n\nconst BoxChars = {\n vertical: '│',\n horizontalDown: '┬',\n horizontalUp: '┴',\n verticalRight: '├',\n corner: '└'\n};\n\nexport class DefaultLogger implements ILogger {\n private logger: Console;\n\n public constructor(\n public stdout = process.stdout,\n public stderr = process.stderr)\n {\n this.logger = new console.Console(this.stdout, this.stderr);\n }\n\n private _formatTime(date: Date): string {\n const hours = date.getHours().toString().padStart(2, '0');\n const minutes = date.getMinutes().toString().padStart(2, '0');\n const seconds = date.getSeconds().toString().padStart(2, '0');\n const millis = date.getMilliseconds().toString().padStart(3, '0');\n return `${hours}:${minutes}:${seconds}.${millis}`;\n }\n\n private _getContext(): string {\n const ctx = getContext();\n if (!ctx) return '';\n\n const kind = ctx.variables.get('execHandlerKind');\n const commandHandler = ctx.variables.get('commandHandlerType');\n const command = ctx.variables.get('currentCommandName');\n if (!kind && !commandHandler) return '';\n\n const h = execHandlerKind[kind as keyof typeof execHandlerKind];\n\n if (!h && !commandHandler) return '';\n\n const t = commandHandler === 'app' ? '(app ✨) ' : '';\n const cmdText = command ? colors.magenta(`/${command}`) + ' ' : '';\n\n return (\n colors.dim(`${BoxChars.vertical} `) +\n colors.cyanBright(\n `${t}${cmdText}${h ? colors.gray(`[${h}]`) : ''}`.trim()\n ));\n\n }\n\n private _getLevelLabel(level: LogLevel): string {\n let label: string;\n switch (level) {\n case LogLevel.DEBUG:\n label = '[DEBUG]';\n break;\n case LogLevel.INFO:\n label = '[INFO]';\n break;\n case LogLevel.WARN:\n label = '[WARN]';\n break;\n case LogLevel.ERROR:\n label = '[ERROR]';\n break;\n default:\n label = '[LOG]';\n }\n\n const coloredLabel = TextBgColorMap[level](\n colors.whiteBright(` ${label} `)\n );\n return `${coloredLabel} `;\n }\n\n private _getPrefix(level: LogLevel): string {\n const timestamp = this._formatTime(new Date());\n const label = this._getLevelLabel(level);\n return `${label}${colors.dim(BoxChars.vertical)} ${colors.dim(timestamp)}`;\n }\n\n private _log(level: LogLevel, ...args: any[]): void {\n const prefix = this._getPrefix(level);\n const context = this._getContext();\n const colorFn = TextColorMap[level];\n\n if (context) {\n this.logger.log(\n `${prefix}\\n${context} ${colors.dim(BoxChars.corner)}`,\n ...args.map((arg) => colorFn(arg))\n );\n } else {\n this.logger.log(\n `${prefix} ${colors.dim(BoxChars.corner)}`,\n ...args.map((arg) => colorFn(arg))\n );\n }\n }\n\n public debug(...args: any[]): void {\n this._log(LogLevel.DEBUG, ...args);\n }\n\n public error(...args: any[]): void {\n this._log(LogLevel.ERROR, ...args);\n }\n\n public log(...args: any[]): void {\n this._log(LogLevel.DEFAULT, ...args);\n }\n\n public info(...args: any[]): void {\n this._log(LogLevel.INFO, ...args);\n }\n\n public warn(...args: any[]): void {\n this._log(LogLevel.WARN, ...args);\n }\n}","import { DefaultLogger } from './DefaultLogger';\nimport { ILogger } from './ILogger';\n\nexport interface CommandKitLoggerOptions {\n /**\n * The logger provider to use.\n */\n provider: ILogger;\n}\n\nexport interface LoggerImpl extends ILogger {\n configure(options: CommandKitLoggerOptions): void;\n}\n\nexport function createLogger(options: CommandKitLoggerOptions): LoggerImpl {\n let opt = options;\n\n if (!opt?.provider) {\n throw new Error('A logger provider must be provided.');\n }\n\n const methods = ['log', 'error', 'warn', 'info', 'debug'] as const;\n\n const impl = {\n configure(options) {\n opt = options;\n }\n } as LoggerImpl;\n\n for (const method of methods) {\n impl[method] = (...args: any[]) => {\n opt.provider[method](...args);\n };\n }\n\n return impl;\n}\n\nexport const Logger = createLogger({\n provider: new DefaultLogger()\n});","import { CommandKitPluginRuntime } from '../..';\n\nconst CommandKitPluginEvents = {\n 'client-login': {\n name: 'ClientLogin',\n cancelable: false\n }\n} as const;\n\ntype EventName =\n(typeof CommandKitPluginEvents)[keyof typeof CommandKitPluginEvents]['name'];\n\nexport const PluginEvents = Object.fromEntries(\n Object.entries(CommandKitPluginEvents).map(([key, value]) => [\n value.name,\n class extends Event {\n public target!: CommandKitPluginRuntime;\n\n public constructor() {\n super(key, { cancelable: value.cancelable });\n }\n }]\n )\n) as unknown as Record<EventName, new () => Event>;","import { Collection, Events } from 'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { RuntimePlugin } from '../RuntimePlugin';\nimport { AsyncFunction } from '../../cache';\nimport {\n CommandKitErrorCodes,\n createCommandKitError,\n isErrorType } from\n'../../utils/error-codes';\nimport { Logger } from '../../logger/Logger';\nimport { PluginEvents } from './runtime-events';\n\nexport class CommandKitPluginRuntime extends EventTarget {\n private plugins = new Collection<string, RuntimePlugin>();\n private onClientLogin = () => {\n this.dispatchEvent(new PluginEvents.ClientLogin());\n };\n\n public constructor(public readonly commandkit: CommandKit) {\n super();\n // this.commandkit.client.on(Events.ClientReady, this.onClientLogin);\n }\n\n public getPlugin(pluginName: string): RuntimePlugin | null {\n return this.plugins.get(pluginName) ?? null;\n }\n\n public async softRegisterPlugin(plugin: RuntimePlugin) {\n const pluginName = plugin.name;\n\n if (this.plugins.has(pluginName)) return;\n\n try {\n await plugin.activate(this);\n this.plugins.set(pluginName, plugin);\n } catch (e: any) {\n throw new Error(\n `Failed to activate plugin \"${pluginName}\": ${e?.stack || e}`\n );\n }\n }\n\n public async registerPlugin(plugin: RuntimePlugin) {\n const pluginName = plugin.name;\n\n if (this.plugins.has(pluginName)) {\n throw new Error(`Plugin with name \"${pluginName}\" already exists.`);\n }\n\n try {\n await plugin.activate(this);\n this.plugins.set(pluginName, plugin);\n } catch (e: any) {\n throw new Error(\n `Failed to activate plugin \"${pluginName}\": ${e?.stack || e}`\n );\n }\n }\n\n public async unregisterPlugin(plugin: RuntimePlugin) {\n const pluginName = plugin.name;\n\n if (!this.plugins.has(pluginName)) {\n throw new Error(`Plugin with name \"${pluginName}\" does not exist.`);\n }\n\n this.plugins.delete(pluginName);\n\n try {\n await plugin.deactivate(this);\n } catch (e: any) {\n throw new Error(\n `Failed to deactivate plugin \"${pluginName}\": ${e?.stack || e}`\n );\n }\n }\n\n public async unregisterAllPlugins() {\n for (const plugin of this.plugins.values()) {\n await this.unregisterPlugin(plugin);\n }\n }\n\n public capture() {\n throw createCommandKitError(CommandKitErrorCodes.PluginCaptureHandle);\n }\n\n public async execute<R = any>(\n f: AsyncFunction<[CommandKitPluginRuntime, RuntimePlugin], R | undefined>)\n {\n let result: R | undefined;\n for (const plugin of this.plugins.values()) {\n try {\n result = await f(this, plugin);\n } catch (e: any) {\n if (isErrorType(e, CommandKitErrorCodes.PluginCaptureHandle)) {\n return true;\n }\n\n Logger.error(`Plugin \"${plugin.name}\" failed`, e?.stack || e);\n }\n }\n\n return result;\n }\n}","import { readFile } from 'node:fs/promises';\nimport { CompilerPlugin, MaybeFalsey, TransformedResult } from '..';\nimport {\n OnLoadArgs,\n OnLoadResult,\n OnResolveArgs,\n OnResolveResult,\n Setup } from\n'./types';\n\nconst pattern = /\\.(c|m)?(t|j)sx?$/;\n\nexport class CompilerPluginRuntime {\n public readonly name = 'CompilerPluginRuntime';\n\n public constructor(private readonly plugins: CompilerPlugin[]) {}\n\n public isEmpty() {\n return !this.plugins.length;\n }\n\n private async onLoad(args: OnLoadArgs): Promise<OnLoadResult> {\n const source = await readFile(args.path, 'utf8');\n\n let contents: string | Uint8Array = source,\n loader = args.path?.split('.').pop();\n\n for (const plugin of this.plugins) {\n try {\n const res: MaybeFalsey<TransformedResult> = await plugin.transform?.({\n contents,\n path: args.path,\n loader,\n args\n });\n\n if (!res) continue;\n\n if (res.contents) {\n contents = res.contents;\n }\n\n if (res.loader) {\n loader = res.loader;\n }\n } catch (e: any) {\n const err = e instanceof Error ? e : new Error(e);\n\n return {\n pluginName: plugin.name,\n errors: [\n {\n text: err.message,\n detail: err?.stack ?? err,\n location: null\n }]\n\n };\n }\n }\n\n return {\n contents,\n loader\n };\n }\n\n private async onResolve(args: OnResolveArgs): Promise<OnResolveResult> {\n let result: OnResolveResult = {};\n\n for (const plugin of this.plugins) {\n try {\n const resolved = await plugin.resolve?.(args);\n if (!resolved) continue;\n\n result = { ...result, ...resolved };\n } catch (e: any) {\n const err = e instanceof Error ? e : new Error(e);\n\n return {\n errors: [\n {\n text: err.message,\n detail: err?.stack ?? err,\n location: null\n }]\n\n };\n }\n }\n\n return result;\n }\n\n private async onStart() {\n for (const plugin of this.plugins) {\n try {\n await plugin.onBuildStart?.();\n } catch (e: any) {\n console.error(\n `Plugin ${plugin.name} failed to run onBuildStart with ${e?.stack || e}`\n );\n }\n }\n }\n\n private async onEnd() {\n for (const plugin of this.plugins) {\n try {\n await plugin.onBuildEnd?.();\n } catch (e: any) {\n console.error(\n `Plugin ${plugin.name} failed to run onBuildEnd with ${e?.stack || e}`\n );\n }\n }\n }\n\n private async onDispose() {\n for (const plugin of this.plugins) {\n try {\n await plugin.deactivate?.(this);\n } catch (e: any) {\n console.error(\n `Plugin ${plugin.name} failed to deactivate with ${e?.stack || e}`\n );\n }\n }\n }\n\n private async onInit() {\n for (const plugin of this.plugins) {\n try {\n await plugin.activate?.(this);\n } catch (e: any) {\n console.error(\n `Plugin ${plugin.name} failed to activate with ${e?.stack || e}`\n );\n }\n }\n }\n\n public async cleanup() {\n await this.onEnd();\n await this.onDispose();\n }\n\n public async setup(build: Setup) {\n if (!this.plugins.length) return;\n\n await this.onInit();\n\n await build.onResolve(\n {\n filter: pattern\n },\n this.onResolve.bind(this)\n );\n\n await build.onLoad(\n {\n filter: pattern\n },\n this.onLoad.bind(this)\n );\n\n await build.onStart(this.onStart.bind(this));\n\n build.onEnd(async () => {\n await this.onEnd();\n });\n\n build.onDispose(async () => {\n await this.onDispose();\n });\n }\n\n public toEsbuildPlugin() {\n return {\n name: this.name,\n setup: this.setup.bind(this)\n };\n }\n}\n\nexport function fromEsbuildPlugin(plugin: any): typeof CompilerPlugin {\n class EsbuildPluginCompat extends CompilerPlugin {\n public readonly name = plugin.name;\n\n public onBuildEnd(): Promise<void> {\n return plugin.onBuildEnd?.();\n }\n\n public onBuildStart(): Promise<void> {\n return plugin.onBuildStart?.();\n }\n\n public async transform(params: any) {\n return plugin.transform?.(params);\n }\n\n public async resolve(params: any) {\n return plugin.resolve?.(params);\n }\n }\n\n // @ts-ignore\n return EsbuildPluginCompat;\n}","// this is roughly the types that esbuild plugins use\n\nexport interface OnLoadArgs {\n path: string;\n namespace: string;\n suffix: string;\n pluginData: any;\n with: Record<string, string>;\n}\n\nexport interface OnLoadOptions {\n filter: RegExp;\n namespace?: string;\n}\n\nexport type Loader = `${'j' | 't'}s` | (string & {});\n\nexport interface OnLoadResult {\n contents?: string | Uint8Array;\n errors?: Message[];\n loader?: Loader;\n pluginData?: any;\n pluginName?: string;\n resolveDir?: string;\n warnings?: Message[];\n watchDirs?: string[];\n watchFiles?: string[];\n}\n\nexport interface Message {\n text: string;\n location: Location | null;\n detail: any; // The original error from a JavaScript plugin, if applicable\n}\n\nexport interface Location {\n file: string;\n namespace: string;\n line: number; // 1-based\n column: number; // 0-based, in bytes\n length: number; // in bytes\n lineText: string;\n}\n\nexport interface OnResolveOptions {\n filter: RegExp;\n namespace?: string;\n}\n\nexport interface OnResolveArgs {\n path: string;\n importer: string;\n namespace: string;\n resolveDir: string;\n kind: ResolveKind;\n pluginData: any;\n with: Record<string, string>;\n}\n\nexport type ResolveKind =\n'entry-point' |\n'import-statement' |\n'require-call' |\n'dynamic-import' |\n'require-resolve' |\n'import-rule' |\n'composes-from' |\n'url-token';\n\nexport interface OnResolveResult {\n errors?: Message[];\n external?: boolean;\n namespace?: string;\n path?: string;\n pluginData?: any;\n pluginName?: string;\n sideEffects?: boolean;\n suffix?: string;\n warnings?: Message[];\n watchDirs?: string[];\n watchFiles?: string[];\n}\n\nexport interface Setup {\n onStart(fn: () => Promise<void>): void;\n onEnd(fn: () => Promise<void>): void;\n onDispose(fn: () => Promise<void>): void;\n onLoad(\n options: OnLoadOptions,\n cb: (args: OnLoadArgs) => Promise<OnLoadResult>)\n : Promise<any>;\n onResolve(\n options: OnResolveOptions,\n cb: (args: OnResolveArgs) => Promise<OnResolveResult>)\n : Promise<any>;\n}","import type { CommandKitPluginRuntime } from './CommandKitPluginRuntime';\nimport type { CompilerPluginRuntime } from './CompilerPluginRuntime';\n\nexport type CommonPluginRuntime =\nCommandKitPluginRuntime |\nCompilerPluginRuntime;","export * from './CompilerPlugin';\nexport * from './RuntimePlugin';\nexport * from './types';\nexport * from './runtime/CommandKitPluginRuntime';\nexport * from './runtime/CompilerPluginRuntime';\nexport * from './runtime/types';\nexport * from './runtime/runtime';","import * as parser from '@babel/parser';\nimport _traverse from '@babel/traverse';\nimport _generate from '@babel/generator';\nimport * as t from '@babel/types';\n\n// @ts-ignore\nconst traverse = _traverse.default || _traverse;\n// @ts-ignore\nconst generate = _generate.default || _generate;\n\nconst IMPORT_PATH = 'commandkit';\nconst DIRECTIVE = 'use cache';\nconst CACHE_IDENTIFIER =\n'super_duper_secret_internal_for_use_cache_directive_of_commandkit_cli_do_not_use_it_directly_or_you_will_be_fired_from_your_job_kthxbai';\n\nconst generateRandomString = (length = 6) => {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n return Array.from(\n { length },\n () => chars[Math.floor(Math.random() * chars.length)]\n ).join('');\n};\n\nexport const cacheDirectivePlugin = async (source: string, args: any) => {\n const ast = parser.parse(source, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx']\n });\n\n let state = {\n needsImport: false,\n hasExistingImport: false,\n cacheIdentifierName: CACHE_IDENTIFIER,\n modifications: []\n };\n\n // First pass: check for naming collisions and collect modifications\n traverse(ast, {\n Program: {\n enter(path: any) {\n const binding = path.scope.getBinding(CACHE_IDENTIFIER);\n if (binding) {\n state.cacheIdentifierName = `${CACHE_IDENTIFIER}_${generateRandomString()}`;\n }\n }\n },\n\n ImportDeclaration(path: any) {\n if (\n path.node.source.value === IMPORT_PATH &&\n path.node.specifiers.some(\n (spec: any) =>\n t.isImportSpecifier(spec) &&\n // @ts-ignore\n spec.imported.name === CACHE_IDENTIFIER\n ))\n {\n state.hasExistingImport = true;\n if (state.cacheIdentifierName !== CACHE_IDENTIFIER) {\n // @ts-ignore\n state.modifications.push(() => {\n path.node.specifiers.forEach((spec: any) => {\n if (\n t.isImportSpecifier(spec) &&\n // @ts-ignore\n spec.imported.name === CACHE_IDENTIFIER)\n {\n spec.local.name = state.cacheIdentifierName;\n }\n });\n });\n }\n }\n },\n\n 'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression|ObjectMethod'(\n path: any)\n {\n const body = t.isBlockStatement(path.node.body) ? path.node.body : null;\n const hasUseCache = body?.directives?.some(\n (d: any) => d.value.value === DIRECTIVE\n );\n\n if (!hasUseCache && !t.isBlockStatement(path.node.body)) {\n const parentFunction = path.findParent(\n (p: any) =>\n (p.isFunction() || p.isProgram()) && 'directives' in p.node\n );\n if (\n !parentFunction?.node.directives?.some(\n (d: any) => d.value.value === DIRECTIVE\n ))\n {\n return;\n }\n }\n\n if (hasUseCache || !t.isBlockStatement(path.node.body)) {\n // Check if the function is async\n if (!path.node.async) {\n throw new Error(\n `\"${DIRECTIVE}\" directive may only be used in async functions at ${args.path}\\n\\n${path.toString()}\\n^^^^${'-'.repeat(6)} This function must be async`\n );\n }\n\n state.needsImport = true;\n const isDeclaration = t.isFunctionDeclaration(path.node);\n const name = isDeclaration ? path.node.id?.name : undefined;\n\n // Create a new body without the 'use cache' directive\n const newBody = t.isBlockStatement(path.node.body) ?\n t.blockStatement(\n path.node.body.body,\n path.node.body.directives.filter(\n (d: any) => d.value.value !== DIRECTIVE\n )\n ) :\n path.node.body;\n\n const wrapped = t.callExpression(\n t.identifier(state.cacheIdentifierName),\n [t.arrowFunctionExpression(path.node.params, newBody, true)]\n );\n\n // @ts-ignore\n state.modifications.push(() => {\n if (t.isObjectMethod(path.node)) {\n path.replaceWith(\n t.objectProperty(t.identifier(path.node.key.name), wrapped)\n );\n } else if (name) {\n path.replaceWith(\n t.variableDeclaration('const', [\n t.variableDeclarator(t.identifier(name), wrapped)]\n )\n );\n } else if (!t.isVariableDeclarator(path.parent)) {\n path.replaceWith(wrapped);\n } else {\n path.parent.init = wrapped;\n }\n });\n }\n }\n });\n\n // Apply all collected modifications\n if (state.modifications.length > 0) {\n // Add import if needed\n if (state.needsImport && !state.hasExistingImport) {\n ast.program.body.unshift(\n t.importDeclaration(\n [\n t.importSpecifier(\n t.identifier(state.cacheIdentifierName),\n t.identifier(CACHE_IDENTIFIER)\n )],\n\n t.stringLiteral(IMPORT_PATH)\n )\n );\n }\n\n // Apply collected modifications\n // @ts-ignore\n state.modifications.forEach((modify) => modify());\n }\n\n const { code } = generate(ast);\n\n return {\n contents: code,\n loader: args.path?.split('.').pop()\n };\n};","import {\n CompilerPlugin,\n MaybeFalsey,\n PluginTransformParameters,\n TransformedResult } from\n'../../..';\nimport { cacheDirectivePlugin } from './UseCacheTransformer';\n\nexport class CachePlugin extends CompilerPlugin {\n public readonly name = 'CachePlugin';\n\n public async transform(\n params: PluginTransformParameters)\n : Promise<MaybeFalsey<TransformedResult>> {\n if (!this.options.enabled) return null;\n\n const result = await cacheDirectivePlugin(\n params.contents.toString(),\n params.path\n );\n\n return {\n contents: result.contents,\n loader: result.loader\n };\n }\n}","import {\n CompilerPlugin,\n MaybeFalsey,\n PluginTransformParameters,\n TransformedResult } from\n'../..';\n\nexport class MacroPlugin extends CompilerPlugin {\n public readonly name = 'MacroPlugin';\n\n private macroTransformer!: import('use-macro').MacroTransformer;\n\n public async activate(): Promise<void> {\n const transform = await import('use-macro');\n this.macroTransformer = new transform.MacroTransformer();\n }\n\n public async deactivate(): Promise<void> {\n this.macroTransformer = null!;\n }\n\n public async transform(\n params: PluginTransformParameters)\n : Promise<MaybeFalsey<TransformedResult>> {\n if (!this.options.enabled) return null;\n\n const { contents, loader } = await this.macroTransformer.transform(\n params.contents.toString(),\n params.path\n );\n\n return {\n contents,\n loader\n };\n }\n}","import { CachePlugin } from '../plugins/runtime/builtin/cache/CachePlugin';\nimport { MacroPlugin } from '../plugins/runtime/builtin/MacroPlugin';\nimport { ResolvedCommandKitConfig } from './utils';\n\nexport const defaultConfig: ResolvedCommandKitConfig = {\n plugins: [\n new CachePlugin({ enabled: true }),\n new MacroPlugin({ enabled: true })],\n\n esbuildPlugins: [],\n compilerOptions: {\n macro: {\n development: false\n },\n cache: {\n development: true\n }\n },\n static: true,\n typescript: {\n ignoreDuringBuilds: false\n },\n distDir: 'dist',\n env: {},\n sourceMap: {\n development: true,\n production: true\n },\n typedCommands: true,\n typedLocales: true\n};","import { defaultConfig } from './default';\nimport { CommandKitConfig } from './types';\nimport { ResolvedCommandKitConfig } from './utils';\n\nlet defined: ResolvedCommandKitConfig = defaultConfig;\n\n/**\n * Get the defined configuration for CommandKit.\n */\nexport function getConfig(): ResolvedCommandKitConfig {\n return defined;\n}\n\n/**\n * Define the configuration for CommandKit.\n * @param config The configuration to use.\n */\nexport function defineConfig(\nconfig: Partial<CommandKitConfig> = {})\n: ResolvedCommandKitConfig {\n // defined = mergeDeep(\n // config as ResolvedCommandKitConfig,\n // mergeDeep({} as ResolvedCommandKitConfig, defaultConfig),\n // );\n\n defined = {\n compilerOptions: {\n cache: {\n ...defaultConfig.compilerOptions.cache,\n ...config.compilerOptions?.cache\n },\n macro: {\n ...defaultConfig.compilerOptions.macro,\n ...config.compilerOptions?.macro\n }\n },\n distDir: config.distDir ?? defaultConfig.distDir,\n env: {\n ...defaultConfig.env,\n ...config.env\n },\n esbuildPlugins: [\n ...(config.esbuildPlugins ?? []),\n ...(defaultConfig.esbuildPlugins ?? [])],\n\n plugins: [...(config.plugins ?? []), ...(defaultConfig.plugins ?? [])],\n sourceMap: {\n ...defaultConfig.sourceMap,\n ...config.sourceMap\n },\n static: config.static ?? defaultConfig.static,\n typedCommands: config.typedCommands ?? defaultConfig.typedCommands,\n typedLocales: config.typedLocales ?? defaultConfig.typedLocales,\n typescript: {\n ...defaultConfig.typescript,\n ...config.typescript\n }\n };\n\n return defined;\n}","export const COMMANDKIT_CACHE_TAG = Symbol('kCommandKitCacheTag');\n\nexport const COMMANDKIT_IS_DEV = !!process.env.COMMANDKIT_IS_DEV;\n\nexport const COMMANDKIT_IS_TEST = process.env.COMMANDKIT_IS_TEST === 'true';","import { Locale } from 'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport {\n LocalizationStrategy,\n LocalizationTranslationRequest,\n TranslationResult } from\n'./LocalizationStrategy';\nimport { Translation } from './Translation';\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { getConfig } from '../../config/config';\nimport { existsSync } from 'node:fs';\nimport { COMMANDKIT_IS_DEV } from '../../utils/constants';\n\nexport class DefaultLocalizationStrategy implements LocalizationStrategy {\n private translations: Map<string, Translation> = new Map();\n\n public constructor(private readonly commandkit: CommandKit) {}\n\n public async locateTranslation(scope: string, locale: Locale) {\n const localesPath = this.commandkit.getPath('locales');\n\n if (!localesPath) return null;\n\n const paths = ['.js', '.json', '.mjs', '.cjs'].map(\n (e) => join(localesPath, locale, scope) + e\n );\n\n for (const path of paths) {\n if (!existsSync(path)) {\n continue;\n }\n\n try {\n let localeData: Translation;\n\n try {\n if (path.endsWith('.json')) {\n const data = await readFile(path, 'utf-8');\n localeData = JSON.parse(data) as Translation;\n } else {\n const { default: data } = await import(`file://${path}`);\n localeData = data as Translation;\n }\n } catch {\n continue;\n }\n\n if (!localeData) continue;\n\n await this.generateLocaleTypes(localeData).catch(() => {});\n\n return localeData;\n } catch {\n return null;\n }\n }\n\n return null;\n }\n\n private async generateLocaleTypes(localeData: Translation) {\n if (!COMMANDKIT_IS_DEV) return;\n const { typedLocales } = getConfig();\n\n if (!typedLocales) return;\n\n const file = join(\n process.cwd(),\n 'node_modules',\n 'commandkit-types',\n 'locale_types.d.ts'\n );\n\n const header = `// auto generated file do not edit\\nexport {};\\ndeclare module 'commandkit' {\\n export interface CommandLocalizationTypeData {\\n`;\n const footer = ` type TranslatableCommandName = keyof CommandLocalizationTypeData\\n}\\n}`;\n\n const generateType = (locale: Translation) => {\n // Create type definition for this command's translations\n const commandName = locale.command.name;\n const translationTypes = Object.entries(locale.translations).\n map(([key, value]) => {\n // Extract arguments from translation string (e.g. {xyz})\n const args = value.match(/{([^}]+)}/g);\n\n if (!args) {\n return ` \"${key}\": null`;\n }\n\n // Create a union type of all arguments\n const argUnion = args.\n map((arg) => `\"${arg.slice(1, -1)}\"`).\n join(' | ');\n\n return ` \"${key}\": ${argUnion}`;\n }).\n join(',\\n');\n\n return ` \"${commandName}\": {\\n${translationTypes}\\n }`;\n };\n\n try {\n let commandDefinitions = new Map<string, string>();\n\n // If file exists, parse its content\n if (existsSync(file)) {\n try {\n const data = await readFile(file, 'utf-8');\n const content = data.toString();\n\n // Extract existing command definitions using regex\n const regex = /\"([^\"]+)\":\\s*\\{([^}]*)\\}/gs;\n let match;\n\n while ((match = regex.exec(content)) !== null) {\n const [fullMatch, commandName] = match;\n if (commandName !== localeData.command.name) {\n commandDefinitions.set(commandName, fullMatch);\n }\n }\n } catch (err) {\n // If we can't parse the file, we'll just create a new one\n console.warn('Could not parse existing type file, creating new one');\n }\n }\n\n // Add current command definition\n const newCommandType = generateType(localeData);\n commandDefinitions.set(localeData.command.name!, newCommandType);\n\n // Create the final type file content\n let fileContent = header;\n const entries = Array.from(commandDefinitions.values());\n\n fileContent += entries.join(',\\n');\n fileContent += '\\n' + footer;\n\n // Ensure directory exists\n const dir = join(process.cwd(), 'node_modules', 'commandkit-types');\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n\n // Write the file\n await writeFile(file, fileContent);\n } catch (error) {\n console.error('Failed to generate locale types:', error);\n // Continue execution even if type generation fails\n }\n }\n\n public async getTranslationStrict(scope: string, locale: Locale) {\n const key = `${scope}:${locale}`;\n if (!this.translations.has(key)) {\n const translation = await this.locateTranslation(scope, locale);\n\n if (!translation) {\n throw new Error(`Translation not found for ${key}`);\n }\n\n this.translations.set(key, translation);\n\n return translation;\n }\n\n return this.translations.get(key)!;\n }\n\n public async getTranslation(\n scope: string,\n locale: Locale)\n : Promise<Translation | null> {\n try {\n return this.getTranslationStrict(scope, locale);\n } catch (e) {\n return null;\n }\n }\n\n public async translate(\n request: LocalizationTranslationRequest)\n : Promise<TranslationResult> {\n const { scope, key, args, locale } = request;\n\n const translation = await this.getTranslation(scope, locale);\n\n if (!translation) return `${scope}.${key}`;\n\n const value = translation.translations[key];\n\n const translated = this.applyTranslation(value, args);\n\n return translated || `${scope}.${key}`;\n }\n\n private applyTranslation(\n translation: string,\n args?: Record<string, any>)\n : string {\n if (!translation || !args) return translation;\n\n return translation.replace(/{([^}]+)}/g, (_, key) => {\n return String(args[key] ?? `{${key}}`);\n });\n }\n}","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { COMMANDKIT_IS_DEV } from './constants';\nimport { getConfig } from '../config/config';\n\nlet appDir: string | null = null;\n\n/**\n * Returns the path to the app directory.\n * @returns The path to the app directory or `null` if not found.\n */\nexport function findAppDirectory(): string | null {\n if (appDir) return appDir;\n\n let root = join(\n process.cwd(),\n COMMANDKIT_IS_DEV ? '.commandkit' : getConfig().distDir\n );\n\n if (!existsSync(root)) root = process.cwd();\n\n const dirs = ['app'].map((dir) => join(root, dir));\n\n for (const dir of dirs) {\n if (existsSync(dir)) {\n appDir = dir;\n return dir;\n }\n }\n\n return null;\n}\n\n/**\n * Debounces a function.\n * @param fn The function to debounce.\n * @param ms The debounce time in milliseconds.\n * @returns The debounced function.\n */\nexport function debounce<R, F extends (...args: any[]) => R>(\nfn: F,\nms: number)\n: F {\n let timer: NodeJS.Timeout | null = null;\n let resolve: ((value: R | PromiseLike<R>) => void) | null = null;\n\n return ((...args: any[]) => {\n if (timer) {\n clearTimeout(timer);\n if (resolve) {\n resolve(null as unknown as R); // Resolve with null if debounced\n }\n }\n\n return new Promise<R>((res) => {\n resolve = res;\n timer = setTimeout(() => {\n const result = fn(...args);\n res(result);\n timer = null;\n resolve = null;\n }, ms);\n });\n }) as F;\n}","import path from 'path';\n\n/**\n * Convert a local file path to a file URL.\n * @param filePath - The local file's path.\n * @param withTs - Whether to append a timestamp to the URL.\n * @returns - The converted file URL.\n */\nexport function toFileURL(filePath: string, withTs = false) {\n const resolvedPath = path.resolve(filePath);\n return `${'file://' + resolvedPath.replace(/\\\\\\\\|\\\\/g, '/')}${withTs ? `?ts=${Date.now()}` : ''}`;\n}","import { Channel } from 'diagnostics_channel';\nimport {\n Message,\n ApplicationCommandOptionType,\n GuildMember,\n Attachment,\n User,\n Role,\n CommandInteractionOption } from\n'discord.js';\nimport {\n CommandKitErrorCodes,\n createCommandKitError } from\n'../../utils/error-codes';\n\nexport interface ParsedMessageCommand {\n command: string;\n options: {name: string;value: unknown;}[];\n subcommand?: string;\n subcommandGroup?: string;\n}\n\nexport type MessageCommandOptionsSchema = Record<\n string,\n ApplicationCommandOptionType>;\n\n\nexport class MessageCommandParser {\n #parsed: ParsedMessageCommand | null = null;\n #options: MessageCommandOptions | null = null;\n #args: string[] = [];\n\n public constructor(\n public message: Message,\n private prefix: string[],\n private schema: (command: string) => MessageCommandOptionsSchema)\n {}\n\n public getArgs() {\n void this.parse();\n return this.#args;\n }\n\n public get options() {\n if (!this.#options) {\n this.#options = new MessageCommandOptions(this);\n }\n\n return this.#options;\n }\n\n public getOption<T>(name: string): T | undefined {\n return this.parse().options.find((o) => o.name === name)?.value as T;\n }\n\n public getCommand(): string {\n return this.parse().command;\n }\n\n public getSubcommand(): string | undefined {\n return this.parse().subcommand;\n }\n\n public getSubcommandGroup(): string | undefined {\n return this.parse().subcommandGroup;\n }\n\n public getPrefix() {\n for (const p of this.prefix) {\n if (this.message.content.startsWith(p)) {\n return p;\n }\n }\n }\n\n public getFullCommand() {\n return [this.getCommand(), this.getSubcommandGroup(), this.getSubcommand()].\n filter((v) => v).\n join(' ');\n }\n\n public parse(): ParsedMessageCommand {\n if (this.#parsed) {\n return this.#parsed;\n }\n\n const content = this.message.content;\n\n const prefix = this.getPrefix();\n\n if (!prefix) {\n throw createCommandKitError(CommandKitErrorCodes.InvalidCommandPrefix);\n }\n\n const parts = content.slice(prefix.length).trim().split(' ');\n const command = parts.shift();\n\n this.#args = parts;\n\n let subcommandGroup: string | undefined;\n let subcommand: string | undefined;\n\n if (command?.includes(':')) {\n const [, group, cmd] = command.split(':');\n\n if (!cmd && group) {\n subcommand = group;\n } else if (cmd && group) {\n subcommandGroup = group;\n subcommand = cmd;\n }\n }\n\n const schema = this.schema(\n [command, subcommandGroup, subcommand].filter(Boolean).join(' ').trim()\n );\n\n const options = parts.\n map((part) => {\n try {\n const [name, value] = part.split(':');\n\n if (!(name in schema)) return null;\n\n switch (schema[name]) {\n case ApplicationCommandOptionType.Boolean:\n return { name, value: value === 'true' };\n case ApplicationCommandOptionType.Integer:\n return { name, value: parseInt(value, 10) };\n case ApplicationCommandOptionType.Number:\n return { name, value: parseFloat(value) };\n case ApplicationCommandOptionType.String:\n return { name, value };\n case ApplicationCommandOptionType.User:\n return {\n name,\n value: this.message.mentions.users.find((u) => {\n return u.id === value.replace(/[<@!>]/g, '');\n })\n };\n case ApplicationCommandOptionType.Channel:\n return {\n name,\n value: this.message.mentions.channels.find((c) => {\n return c.id === value.replace(/[<#>]/g, '');\n })\n };\n case ApplicationCommandOptionType.Role:\n return {\n name,\n value: this.message.mentions.roles.find((r) => {\n return r.id === value.replace(/[<@&>]/g, '');\n })\n };\n case ApplicationCommandOptionType.Attachment:\n return {\n name,\n value: this.message.attachments.find((a) => {\n return a.name === value;\n })\n };\n default:\n return null;\n }\n } catch {\n // Invalid option\n return null;\n }\n }).\n filter((v) => v !== null);\n\n this.#parsed = {\n command: command!,\n options,\n subcommand,\n subcommandGroup\n };\n\n return this.#parsed;\n }\n}\n\nexport class MessageCommandOptions {\n public constructor(private parser: MessageCommandParser) {}\n\n private assertOption<T>(name: string, required = false) {\n const option = this.parser.getOption<T>(name);\n\n if (required && option === undefined) {\n throw new Error(`Option \"${name}\" is required.`);\n }\n\n return option ?? null;\n }\n\n getMember(name: string): GuildMember | null;\n getMember(name: string, required: true): GuildMember;\n getMember(name: string, required = false) {\n const user = this.assertOption<User>(name, required);\n const member = this.parser.message.guild?.members.cache.get(user?.id!);\n\n if (required && !member) {\n throw new Error(`Member \"${name}\" is required.`);\n }\n\n return member ?? null;\n }\n\n getAttachment(name: string): Attachment | null;\n getAttachment(name: string, required: true): Attachment;\n getAttachment(name: string, required = false) {\n return this.assertOption<Attachment>(name, required);\n }\n\n getBoolean(name: string): boolean | null;\n getBoolean(name: string, required: true): boolean;\n getBoolean(name: string, required = false) {\n return this.assertOption<boolean>(name, required);\n }\n\n getNumber(name: string): number | null;\n getNumber(name: string, required: true): number;\n getNumber(name: string, required = false) {\n return this.assertOption<number>(name, required);\n }\n\n getString(name: string): string | null;\n getString(name: string, required: true): string;\n getString(name: string, required = false) {\n return this.assertOption<string>(name, required);\n }\n\n getInteger(name: string): number | null;\n getInteger(name: string, required: true): number;\n getInteger(name: string, required = false) {\n return this.assertOption<number>(name, required);\n }\n\n getUser(name: string): User | null;\n getUser(name: string, required: true): User;\n getUser(name: string, required = false) {\n return this.assertOption<User>(name, required);\n }\n\n getChannel(name: string): Channel | null;\n getChannel(name: string, required: true): Channel;\n getChannel(name: string, required = false) {\n return this.assertOption<Channel>(name, required);\n }\n\n getRole(name: string): Role | null;\n getRole(name: string, required: true): Role;\n getRole(name: string, required = false) {\n return this.assertOption<Role>(name, required);\n }\n\n getMentionable(\n name: string)\n : NonNullable<CommandInteractionOption['member' | 'role' | 'user']> | null;\n getMentionable(\n name: string,\n required: true)\n : NonNullable<CommandInteractionOption['member' | 'role' | 'user']>;\n getMentionable(\n name: string,\n required = false)\n : NonNullable<CommandInteractionOption['member' | 'role' | 'user']> | null {\n const target = this.assertOption(name, required);\n\n if (\n target instanceof GuildMember ||\n target instanceof User ||\n target instanceof Role)\n {\n return target;\n }\n\n if (required) {\n throw new Error(`Mentionable \"${name}\" is required.`);\n }\n\n return null;\n }\n\n getSubcommand(): string | null;\n getSubcommand(required: true): string;\n getSubcommand(required = false) {\n const sub = this.parser.getSubcommand();\n\n if (required && sub === undefined) {\n throw new Error('Subcommand is required.');\n }\n\n return sub ?? null;\n }\n\n getSubcommandGroup(): string | null;\n getSubcommandGroup(required: true): string;\n getSubcommandGroup(required = false) {\n const sub = this.parser.getSubcommandGroup();\n\n if (required && sub === undefined) {\n throw new Error('Subcommand group is required.');\n }\n\n return sub ?? null;\n }\n}","import {\n ApplicationCommandType,\n REST,\n Routes,\n ApplicationCommandOptionType,\n APIApplicationCommandSubcommandGroupOption,\n APIApplicationCommandSubcommandOption } from\n'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { CommandData } from '../../types';\nimport { Logger } from '../../logger/Logger';\nimport { Command } from '../router/CommandsRouter';\n\nexport class CommandRegistrar {\n private api = new REST();\n\n /**\n * Creates an instance of CommandRegistrar.\n * @param commandkit The commandkit instance.\n */\n public constructor(public readonly commandkit: CommandKit) {\n this.api.setToken(\n this.commandkit.client.token ??\n process.env.DISCORD_TOKEN ??\n process.env.TOKEN ??\n ''\n );\n }\n\n /**\n * Gets the commands data.\n */\n public getCommandsData(): CommandData[] {\n const handler = this.commandkit.commandHandler;\n // Use the public method instead of accessing private property\n const commands = handler.getCommandsArray();\n\n return commands.flatMap((cmd) => {\n const json: CommandData =\n 'toJSON' in cmd.data.command ?\n cmd.data.command.toJSON() :\n cmd.data.command;\n\n const collections: CommandData[] = [json];\n\n // Handle context menu commands\n if (\n cmd.data.userContextMenu &&\n json.type !== ApplicationCommandType.User)\n {\n collections.push({\n ...json,\n type: ApplicationCommandType.User,\n options: undefined,\n description_localizations: undefined,\n // @ts-ignore\n description: undefined\n });\n }\n\n if (\n cmd.data.messageContextMenu &&\n json.type !== ApplicationCommandType.Message)\n {\n collections.push({\n ...json,\n type: ApplicationCommandType.Message,\n description_localizations: undefined,\n // @ts-ignore\n description: undefined,\n options: undefined\n });\n }\n\n return collections;\n });\n }\n\n /**\n * Registers loaded commands.\n */\n public async register() {\n if (!this.commandkit.client.isReady()) {\n throw new Error('Cannot register commands before the client is ready');\n }\n\n const commands = this.getCommandsData();\n const guildCommands = commands.\n filter((command) => command.guilds?.filter(Boolean).length).\n map((c) => ({\n ...c,\n guilds: Array.from(new Set(c.guilds?.filter(Boolean)))\n }));\n const globalCommands = commands.filter(\n (command) => !command.guilds?.filter(Boolean).length\n );\n\n await this.updateGlobalCommands(globalCommands);\n await this.updateGuildCommands(guildCommands);\n }\n\n /**\n * Updates the global commands.\n */\n public async updateGlobalCommands(commands: CommandData[]) {\n if (!commands.length) return;\n\n try {\n const data = (await this.api.put(\n Routes.applicationCommands(this.commandkit.client.user!.id),\n {\n body: commands.map((c) => ({\n ...c,\n guilds: undefined\n }))\n }\n )) as CommandData[];\n\n Logger.info(\n `✨ Refreshed ${data.length} global application (/) commands`\n );\n } catch (e) {\n Logger.error('Failed to update global application (/) commands', e);\n }\n }\n\n /**\n * Updates the guild commands.\n */\n public async updateGuildCommands(commands: CommandData[]) {\n try {\n const guildCommandsMap = new Map<string, CommandData[]>();\n\n commands.forEach((command) => {\n if (!command.guilds?.length) return;\n\n command.guilds.forEach((guild) => {\n if (!guildCommandsMap.has(guild)) {\n guildCommandsMap.set(guild, []);\n }\n\n guildCommandsMap.get(guild)!.push(command);\n });\n });\n\n if (!guildCommandsMap.size) return;\n\n let count = 0;\n\n for (const [guild, guildCommands] of guildCommandsMap) {\n const data = (await this.api.put(\n Routes.applicationGuildCommands(\n this.commandkit.client.user!.id,\n guild\n ),\n {\n body: guildCommands.map((b) => ({\n ...b,\n guilds: undefined\n }))\n }\n )) as CommandData[];\n\n count += data.length;\n }\n\n Logger.info(`✨ Refreshed ${count} guild application (/) commands`);\n } catch (e) {\n Logger.error('Failed to update guild application (/) commands', e);\n }\n }\n}","import { randomUUID } from 'node:crypto';\nimport { CommandKit } from '../CommandKit';\nimport { GenericFunction, getContext } from './async-context';\n\nexport interface CommandKitEnvironmentInternalData {\n executionError: Error | null;\n type: CommandKitEnvironmentType | null;\n variables: Map<string, any>;\n deferredFunctions: Map<string, GenericFunction<[CommandKitEnvironment]>>;\n marker: string;\n markStart: number;\n markEnd: number;\n}\n\nexport class CommandKitEnvironment {\n #data: CommandKitEnvironmentInternalData = {\n executionError: null,\n type: null,\n variables: new Map(),\n deferredFunctions: new Map(),\n marker: '',\n markStart: 0,\n markEnd: 0\n };\n\n /**\n * Creates the commandkit execution environment.\n * @param commandkit - The commandkit instance.\n */\n public constructor(public readonly commandkit: CommandKit) {}\n\n /**\n * Get the execution error.\n * @internal\n */\n public getExecutionError(): Error | null {\n return this.#data.executionError;\n }\n\n /**\n * Set the execution error.\n * @param error - The error to set.\n * @internal\n */\n public setExecutionError(error: Error): void {\n if (this.#data.executionError) {\n throw new Error('Execution error already set.');\n }\n\n this.#data.executionError = error;\n }\n\n /**\n * Get the environment type.\n */\n public getType(): CommandKitEnvironmentType {\n const type = this.#data.type;\n\n if (!type) {\n throw new Error('Environment type not set.');\n }\n\n return type;\n }\n\n /**\n * Set the environment type.\n * @param type - The environment type to set.\n * @internal\n */\n public setType(type: CommandKitEnvironmentType): void {\n this.#data.type = type;\n }\n\n /**\n * The variables store for this environment.\n */\n public get variables(): Map<string, any> {\n return this.#data.variables;\n }\n\n /**\n * Register a deferred function.\n * @param fn - The deferred function to register.\n * @returns The deferred function id.\n * @internal\n */\n public registerDeferredFunction(\n fn: GenericFunction<[CommandKitEnvironment]>)\n : string {\n const id = randomUUID();\n this.#data.deferredFunctions.set(id, fn);\n return id;\n }\n\n /**\n * Clear a deferred function by id.\n * @param id - The deferred function id to clear.\n * @internal\n */\n public clearDeferredFunction(id: string): void {\n this.#data.deferredFunctions.delete(id);\n }\n\n /**\n * Run all deferred functions sequentially.\n * @internal\n */\n public async runDeferredFunctions(): Promise<void> {\n for (const [id, fn] of this.#data.deferredFunctions) {\n try {\n await fn(this);\n } catch (e) {\n this.commandkit.emit('unhandledDeferredFunctionRejection', e);\n } finally {\n this.clearDeferredFunction(id);\n }\n }\n }\n\n /**\n * Clear all deferred functions.\n * @internal\n */\n public clearAllDeferredFunctions(): void {\n this.#data.deferredFunctions.clear();\n }\n\n /**\n * Mark the start of a command execution.\n * @param marker - The marker to set.\n * @internal\n */\n public markStart(marker: string): void {\n this.#data.marker = marker;\n this.#data.markStart = performance.now();\n }\n\n /**\n * Mark the end of a command execution.\n * @internal\n */\n public markEnd(): void {\n if (!this.#data.markEnd) this.#data.markEnd = performance.now();\n }\n\n /**\n * Get the marker.\n * @internal\n */\n public getMarker(): string {\n return this.#data.marker;\n }\n\n /**\n * Get the execution time in milliseconds.\n * @internal\n */\n public getExecutionTime(): number {\n return Math.abs(this.#data.markEnd - this.#data.markStart);\n }\n}\n\nexport enum CommandKitEnvironmentType {\n CommandHandler = 'COMMAND_HANDLER',\n}\n\n/**\n * Runs the given function after the current command has finished executing.\n * @param fn The function to run after the current command.\n * @returns The deferred function id. This can be used to cancel the deferred function.\n */\nexport function afterCommand(\nfn: GenericFunction<[CommandKitEnvironment]>)\n: string {\n const env = getContext();\n\n if (!env) {\n throw new Error('after must be called inside commandkit handler.');\n }\n\n return env.registerDeferredFunction(fn);\n}\n\n/**\n * Cancels a deferred function registered with `afterCommand`.\n * @param id The deferred function id to cancel.\n */\nexport function cancelAfterCommand(id: string): void {\n const env = getContext();\n\n if (!env) {\n throw new Error('cancelAfter must be called inside commandkit handler.');\n }\n\n env.clearDeferredFunction(id);\n}","import { Locale } from 'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { TranslationResult } from './LocalizationStrategy';\nimport {\n CommandLocalizationTypeData,\n TranslatableArguments,\n TranslatableCommandName } from\n'./Translation';\n\nexport interface LocalizationConfig {\n /**\n * The locale to use for localization.\n */\n locale: Locale;\n /**\n * The internalization data target.\n */\n target: string;\n}\n\n// Improved Translator type for better autocomplete\nexport type Translator<T extends TranslatableCommandName> = <\n K extends keyof CommandLocalizationTypeData[T] & string>(\n\nkey: K,\n// If args corresponding to this key is null, don't allow second argument\nargs?: CommandLocalizationTypeData[T][K] extends null ?\nnever :\nCommandLocalizationTypeData[T][K] extends string ?\nRecord<CommandLocalizationTypeData[T][K], string> :\nRecord<string, string>)\n=> Promise<TranslationResult>;\n\nexport class Localization<T extends TranslatableCommandName = string> {\n /**\n * Translates the given translatable object.\n * @param translatable The translatable object to translate.\n */\n public readonly t: Translator<T>;\n\n /**\n * Creates a new localization instance.\n * @param commandkit The command kit instance.\n * @param config The localization configuration.\n */\n public constructor(\n private readonly commandkit: CommandKit,\n private readonly config: LocalizationConfig)\n {\n const strategy = this.commandkit.config.localizationStrategy;\n const { locale, target } = this.config;\n\n // we are doing this so that it can be destructured\n // eg: const { t } = ctx.locale()\n this.t = (translatable, args) => {\n return strategy.translate({\n args,\n key: translatable,\n locale,\n scope: target\n });\n };\n }\n\n /**\n * Get the localization strategy.\n */\n public getStrategy() {\n return this.commandkit.config.localizationStrategy;\n }\n\n /**\n * Get the default locale\n */\n public getDefaultLocale() {\n return this.commandkit.config.defaultLocale;\n }\n\n /**\n * Get the current locale\n */\n public getLocale() {\n return this.config.locale;\n }\n\n /**\n * Get the localization target\n */\n public getTarget() {\n return this.config.target;\n }\n}","import {\n CommandKitErrorCodes,\n createCommandKitError,\n isCommandKitError } from\n'../../utils/error-codes';\n\n/**\n * Cancel upcoming middleware execution.\n * If this is called inside pre-stage middleware, the next run will be the actual command, skipping all other pre-stage middlewares.\n * If this is called inside a command itself, it will skip all post-stage middlewares.\n * If this is called inside post-stage middleware, it will skip all other post-stage middlewares.\n */\nexport function exitMiddleware(): never {\n throw createCommandKitError(CommandKitErrorCodes.ExitMiddleware);\n}\n\n/**\n * Rethrow the error if it is a CommandKit error.\n * @param error The error to rethrow.\n */\nexport function rethrow(error: unknown): void {\n if (isCommandKitError(error)) throw error;\n}\n\n/**\n * Stops current command assuming it has been redirected to another command.\n */\nexport function redirect(): never {\n throw createCommandKitError(CommandKitErrorCodes.ForwardedCommand);\n}","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { GenericFunction, getCommandKit } from '../context/async-context';\nimport { createHash, randomUUID } from 'node:crypto';\nimport ms from 'ms';\n\nconst cacheContext = new AsyncLocalStorage<CacheContext>();\nconst fnStore = new Map<\n string,\n {\n key: string;\n hash: string;\n ttl: number;\n original: GenericFunction;\n memo: GenericFunction;\n }>(\n);\nconst DEFAULT_TTL = ms('15m');\nconst CACHE_FN_ID = `__cache_fn_id_${Date.now()}__${Math.random()}__`;\nconst CACHED_FN_SYMBOL = Symbol('commandkit.cache.sentinel');\n\n/**\n * Context for managing cache operations within an async scope\n */\nexport interface CacheContext {\n params: {\n /** Custom name for the cache entry */\n name?: string;\n /** Time-to-live in milliseconds */\n ttl?: number;\n };\n}\n\n/**\n * Represents an async function that can be cached\n * @template R - Array of argument types\n * @template T - Return type\n */\nexport type AsyncFunction<R extends any[] = any[], T = any> = (\n...args: R)\n=> Promise<T>;\n\n/**\n * Configuration options for cache behavior\n */\nexport interface CacheMetadata {\n /** Time-to-live duration in milliseconds or as a string (e.g., '1h', '5m') */\n ttl?: number | string;\n /** Custom name for the cache entry */\n name?: string;\n}\n\n/**\n * Generates an MD5 hash of the input string\n * @internal\n */\nfunction md5(data: string): string {\n return createHash('md5').update(data).digest('hex');\n}\n\n/**\n * Retrieves the configured cache provider from CommandKit context\n * @internal\n * @throws {Error} When no cache provider is configured\n */\nfunction getCacheProvider() {\n const commandkit = getCommandKit(true);\n const provider = commandkit.getCacheProvider();\n\n if (!provider) {\n throw new Error(\n `Cache provider was not found, please provide a cache provider to commandkit.`\n );\n }\n\n return provider;\n}\n\n/**\n * Internal cache implementation\n * @internal\n * @private\n * This is used directly by the compiler if the function is annotated with `\"use cache\"` directive.\n * @example\n * ```ts\n * async function myCachedFunction() {\n * \"use cache\";\n * // can use cacheTag() and cacheLife() here to customize cache behavior\n * return await db.query('SELECT * FROM users');\n * }\n * ```\n */\nfunction useCache<R extends any[], F extends AsyncFunction<R>>(\nfn: F,\nid?: string,\nparams?: CacheMetadata)\n: F {\n const isLocal = id === CACHE_FN_ID;\n\n if (id && !isLocal) {\n throw new Error('Illegal use of cache function.');\n }\n\n const fnId = randomUUID();\n\n const memo = ((...args) => {\n const forcedName = isLocal ? params?.name : null;\n const keyHash =\n forcedName ?? md5(!args.length ? fnId : `${fnId}:${args.join(':')}`);\n const resolvedTTL =\n isLocal && params?.ttl != null ?\n typeof params.ttl === 'string' ?\n ms(params.ttl) :\n params.ttl :\n null;\n\n return cacheContext.run(\n {\n params: {\n name: keyHash,\n ttl: resolvedTTL ?? DEFAULT_TTL\n }\n },\n async () => {\n const provider = getCacheProvider();\n const context = cacheContext.getStore();\n\n if (!context) {\n throw new Error('Cache context was not found.');\n }\n\n // Get the effective cache key, preferring any existing association\n const storedFn = fnStore.get(keyHash);\n const effectiveKey = storedFn?.key ?? context.params.name!;\n\n // Try to get cached value using effective key\n const cached = await provider.get(effectiveKey);\n if (cached && cached.value != null) return cached.value;\n\n // If we reach here, we need to cache the value\n const result = await fn(...args);\n\n // Only cache if result is not null/undefined\n if (result != null) {\n // Get the final key name (might have been modified by cacheTag)\n const finalKey = context.params.name!;\n const ttl = context.params.ttl ?? DEFAULT_TTL;\n\n // Store the result\n await provider.set(finalKey, result, ttl);\n\n // Update function store\n fnStore.set(keyHash, {\n key: finalKey,\n hash: keyHash,\n ttl,\n original: fn,\n memo\n });\n }\n\n return result;\n }\n );\n }) as F;\n\n if (!Object.prototype.hasOwnProperty.call(fn, CACHED_FN_SYMBOL)) {\n Object.defineProperty(memo, CACHED_FN_SYMBOL, {\n get() {\n return true;\n },\n configurable: false,\n enumerable: false\n });\n }\n\n return memo;\n}\n\n/**\n * Wraps an async function with caching capability\n * @template R - Array of argument types\n * @template F - Type of the async function\n * @param fn - The async function to cache\n * @param params - Optional cache configuration\n * @returns The wrapped function with caching behavior\n * @example\n * ```ts\n * const cachedFetch = cache(async (id: string) => {\n * return await db.findOne(id);\n * }, { ttl: '1h' });\n * ```\n */\nexport function cache<R extends any[], F extends AsyncFunction<R>>(\nfn: F,\nparams?: CacheMetadata)\n: F {\n return useCache(fn, CACHE_FN_ID, params);\n}\n\n/**\n * Sets a custom identifier for the current cache operation\n * @param tag - The custom cache tag\n * @throws {Error} When called outside a cached function or without a tag\n * @example\n * ```ts\n * const fetchUser = cache(async (id: string) => {\n * cacheTag(`user:${id}`);\n * return await db.users.findOne(id);\n * });\n * ```\n */\nexport function cacheTag(tag: string): void {\n const context = cacheContext.getStore();\n\n if (!context) {\n throw new Error('cacheTag() must be called inside a cached function.');\n }\n\n if (!tag) {\n throw new Error('cacheTag() must be called with a tag name.');\n }\n\n context.params.name = tag;\n}\n\n/**\n * Sets the TTL for the current cache operation\n * @param ttl - Time-to-live in milliseconds or as a string (e.g., '1h', '5m')\n * @throws {Error} When called outside a cached function or with invalid TTL\n * @example\n * ```ts\n * const fetchData = cache(async () => {\n * cacheLife('30m');\n * return await expensiveOperation();\n * });\n * ```\n */\nexport function cacheLife(ttl: number | string): void {\n const context = cacheContext.getStore();\n\n if (!context) {\n throw new Error('cacheLife() must be called inside a cached function.');\n }\n\n if (ttl == null || !['string', 'number'].includes(typeof ttl)) {\n throw new Error('cacheLife() must be called with a ttl.');\n }\n\n context.params.ttl = typeof ttl === 'string' ? ms(ttl) : ttl;\n}\n\n/**\n * Removes a cached value by its tag\n * @param tag - The cache tag to invalidate\n * @throws {Error} When the cache key is not found\n * @example\n * ```ts\n * await invalidate('user:123');\n * ```\n */\nexport async function invalidate(tag: string): Promise<void> {\n const provider = getCacheProvider();\n const entry = Array.from(fnStore.values()).find(\n (v) => v.key === tag || v.hash === tag\n );\n\n if (!entry) return;\n\n await provider.delete(entry.key);\n}\n\n/**\n * Forces a refresh of cached data by its tag (on-demand revalidation)\n * @template T - Type of the cached value\n * @param tag - The cache tag to revalidate\n * @param args - Arguments to pass to the cached function\n * @returns Fresh data from the cached function\n * @throws {Error} When the cache key or function is not found\n * @example\n * ```ts\n * const freshData = await revalidate('user:123');\n * ```\n */\nexport async function revalidate<T = unknown>(\ntag: string,\n...args: any[])\n: Promise<T> {\n const provider = getCacheProvider();\n const entry = Array.from(fnStore.values()).find(\n (v) => v.key === tag || v.hash === tag\n );\n\n if (!entry) return undefined as T;\n\n await provider.delete(entry.key);\n\n return entry.memo(...args);\n}\n\n/**\n * Checks if a function is wrapped with cache functionality\n * @param fn - Function to check\n * @returns True if the function is cached\n * @example\n * ```ts\n * if (isCachedFunction(myFunction)) {\n * console.log('Function is cached');\n * }\n * ```\n */\nexport function isCachedFunction(fn: GenericFunction): boolean {\n return Object.prototype.hasOwnProperty.call(fn, CACHED_FN_SYMBOL);\n}\n\nexport { useCache as super_duper_secret_internal_for_use_cache_directive_of_commandkit_cli_do_not_use_it_directly_or_you_will_be_fired_from_your_job_kthxbai };","export * from './CacheProvider';\nexport * from './MemoryCache';\nexport * from './cache';","import {\n AutocompleteInteraction,\n ChatInputCommandInteraction,\n MessageContextMenuCommandInteraction,\n Message,\n Locale,\n Interaction,\n UserContextMenuCommandInteraction,\n Client,\n Awaitable } from\n'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { Localization } from '../i18n/Localization';\nimport {\n MessageCommandOptions,\n MessageCommandParser } from\n'./MessageCommandParser';\nimport {\n afterCommand,\n cancelAfterCommand,\n CommandKitEnvironment } from\n'../../context/environment';\nimport { GenericFunction, getContext } from '../../context/async-context';\nimport { exitMiddleware, redirect } from '../middleware/signals';\nimport { isCachedFunction } from '../../cache';\nimport { ResolvableCommand, RunCommand } from '../handlers/AppCommandHandler';\nimport { TranslatableCommandName } from '../i18n/Translation';\n\nexport const CommandExecutionMode = {\n SlashCommand: 'chatInput',\n MessageContextMenu: 'messageContextMenu',\n UserContextMenu: 'userContextMenu',\n Autocomplete: 'autocomplete',\n Message: 'message'\n} as const;\n\nexport type CommandExecutionMode =\n(typeof CommandExecutionMode)[keyof typeof CommandExecutionMode];\n\nexport interface ContextParameters<\n T extends CommandExecutionMode,\n Args = Record<string, any>>\n{\n environment?: CommandKitEnvironment;\n executionMode: T;\n interaction: T extends 'chatInput' ?\n ChatInputCommandInteraction :\n T extends 'messageContextMenu' ?\n MessageContextMenuCommandInteraction :\n T extends 'userContextMenu' ?\n UserContextMenuCommandInteraction :\n T extends 'autocomplete' ?\n AutocompleteInteraction :\n never;\n message: T extends 'message' ? Message : never;\n forwarded?: boolean;\n messageCommandParser?: T extends 'message' ? MessageCommandParser : never;\n store?: Map<string, any>;\n customArgs?: Args;\n}\n\nexport type MessageCommandContext = Context<'message'>;\nexport type InteractionCommandContext = Context<\n 'autocomplete' | 'chatInput' | 'messageContextMenu' | 'userContextMenu'>;\n\nexport type MessageCommandMiddlewareContext = MiddlewareContext<'message'>;\nexport type InteractionCommandMiddlewareContext = MiddlewareContext<\n 'autocomplete' | 'chatInput' | 'messageContextMenu' | 'userContextMenu'>;\n\nexport type SlashCommandContext = Context<'chatInput'>;\nexport type SlashCommandMiddlewareContext = MiddlewareContext<'chatInput'>;\nexport type AutocompleteCommandContext = Context<'autocomplete'>;\nexport type AutocompleteCommandMiddlewareContext =\nMiddlewareContext<'autocomplete'>;\nexport type MessageContextMenuCommandContext = Context<'messageContextMenu'>;\nexport type MessageContextMenuCommandMiddlewareContext =\nMiddlewareContext<'messageContextMenu'>;\nexport type UserContextMenuCommandContext = Context<'userContextMenu'>;\nexport type UserContextMenuCommandMiddlewareContext =\nMiddlewareContext<'userContextMenu'>;\n\nexport type CommandContextOptions<T extends CommandExecutionMode> =\nT extends 'message' ?\nMessageCommandOptions :\nT extends 'chatInput' ?\nChatInputCommandInteraction['options'] :\nT extends 'autocomplete' ?\nAutocompleteInteraction['options'] :\nT extends 'messageContextMenu' ?\nMessageContextMenuCommandInteraction['options'] :\nT extends 'userContextMenu' ?\nUserContextMenuCommandInteraction['options'] :\nnever;\n\nexport type AnyCommandExecute<ContextType extends Context = Context> = (\nctx: ContextType)\n=> Awaitable<unknown>;\n\nexport type SlashCommand = AnyCommandExecute<SlashCommandContext>;\nexport type AutocompleteCommand = AnyCommandExecute<AutocompleteCommandContext>;\nexport type MessageContextMenuCommand =\nAnyCommandExecute<MessageContextMenuCommandContext>;\nexport type UserContextMenuCommand =\nAnyCommandExecute<UserContextMenuCommandContext>;\nexport type MessageCommand = AnyCommandExecute<MessageCommandContext>;\n\nexport interface MiddlewareContextArgs {\n setCommandRunner?: GenericFunction<[RunCommand]>;\n}\n\nexport class Context<\n ExecutionMode extends CommandExecutionMode = CommandExecutionMode,\n Args extends Record<string, any> = Record<string, any>>\n{\n /**\n * The interaction that triggered the command.\n */\n public readonly interaction: ContextParameters<ExecutionMode>['interaction'];\n\n /**\n * The message that triggered the command.\n */\n public readonly message: ContextParameters<ExecutionMode>['message'];\n\n /**\n * The client instance.\n */\n public readonly client: Client;\n\n #store: Map<string, any>;\n\n private _locale: Locale | null = null;\n\n /**\n * Creates a new command context.\n * @param commandkit The command kit instance.\n * @param config The context parameters.\n */\n public constructor(\n public readonly commandkit: CommandKit,\n protected readonly config: ContextParameters<ExecutionMode, Args>)\n {\n // these are assigned to readonly properties to make them accessible via object destructuring\n this.interaction = config.interaction;\n this.message = config.message;\n this.client = commandkit.client;\n this.#store = config.store ?? new Map();\n }\n\n /**\n * The shared key-value store for this context. This can be used to store data that needs to be shared between middlewares or commands.\n * This store is shared across all contexts in the same command execution, including the cloned contexts and middleware contexts.\n */\n public get store() {\n return this.#store;\n }\n\n public get commandName(): string {\n if (this.isInteraction()) {\n return this.interaction.commandName;\n } else {\n return this.config.messageCommandParser!.getCommand();\n }\n }\n\n public get options(): CommandContextOptions<ExecutionMode> {\n if (this.isMessage()) {\n const parser = this.config.messageCommandParser!;\n // @ts-expect-error\n return parser.options;\n } else {\n const interaction = (<InteractionCommandContext> this).interaction;\n // @ts-expect-error\n return interaction.options;\n }\n }\n\n /**\n * Whether this context was forwarded from another context. This happens when a command forwards its context to another command.\n */\n public get forwarded(): boolean {\n return this.config.forwarded ?? false;\n }\n\n /**\n * Forwards the context to another command. The target handler will be the same as current handler.\n * @param command The command to forward to.\n */\n public async forwardCommand<C extends ResolvableCommand>(\n command: C)\n : Promise<never> {\n const target = await this.commandkit.commandHandler.prepareCommandRun(\n (this.isInteraction() ? this.interaction : this.message) as Interaction\n );\n\n if (!target) {\n throw new Error(\n `Command ${command} not found! If you are trying to forward to a legacy command, ctx.forwardCommand is not compatible with legacy commands.`\n );\n }\n\n const env = this.config.environment ?? getContext();\n\n if (!env) {\n throw new Error('No commandkit environment found.');\n }\n\n const handlers = {\n chatInput: target.command.data.chatInput,\n autocomplete: target.command.data.autocomplete,\n message: target.command.data.message,\n messageContextMenu: target.command.data.messageContextMenu,\n userContextMenu: target.command.data.userContextMenu\n };\n\n const handlerKind = env.variables.get(\n 'execHandlerKind'\n ) as keyof typeof handlers;\n\n if (!handlerKind) {\n throw new Error('No execution handler kind found.');\n }\n\n const handler = handlers[handlerKind];\n\n if (!handler) {\n throw new Error(`No handler found for ${handlerKind}`);\n }\n\n await handler(this.clone({ forwarded: true }));\n\n redirect();\n }\n\n /**\n * The execution mode of the command.\n */\n public get executionMode(): ExecutionMode {\n return this.config.executionMode;\n }\n\n /**\n * Whether the command was triggered by an interaction.\n */\n public isInteraction(): this is InteractionCommandContext {\n return (\n this.executionMode === CommandExecutionMode.SlashCommand ||\n this.executionMode === CommandExecutionMode.Autocomplete ||\n this.executionMode === CommandExecutionMode.MessageContextMenu ||\n this.executionMode === CommandExecutionMode.UserContextMenu);\n\n }\n\n /**\n * Whether the command was triggered by a slash command interaction.\n */\n public isSlashCommand(): this is SlashCommandContext {\n return this.executionMode === CommandExecutionMode.SlashCommand;\n }\n\n /**\n * Whether the command was triggered by an autocomplete interaction.\n */\n public isAutocomplete(): this is AutocompleteCommandContext {\n return this.executionMode === CommandExecutionMode.Autocomplete;\n }\n\n /**\n * Whether the command was triggered by a message context menu interaction.\n */\n public isMessageContextMenu(): this is MessageContextMenuCommandContext {\n return this.executionMode === CommandExecutionMode.MessageContextMenu;\n }\n\n /**\n * Whether the command was triggered by a user context menu interaction.\n */\n public isUserContextMenu(): this is UserContextMenuCommandContext {\n return this.executionMode === CommandExecutionMode.UserContextMenu;\n }\n\n /**\n * Whether the command was triggered by a message.\n */\n public isMessage(): this is Context<'message'> {\n return this.executionMode === CommandExecutionMode.Message;\n }\n\n /**\n * Returns the command identifier.\n */\n public getCommandIdentifier(): string {\n if (this.isInteraction()) {\n return this.interaction.commandName;\n } else {\n return this.message.content.split(' ')[0].slice(1);\n }\n }\n\n /**\n * Returns the locale of the guild where this command was triggered.\n */\n public getGuildLocale(): Locale | null {\n if (this.isInteraction()) {\n return this.interaction.guildLocale;\n } else {\n return this.message.guild?.preferredLocale ?? null;\n }\n }\n\n /**\n * Returns the locale of the user who triggered this command.\n */\n public getUserLocale(): Locale | null {\n if (this.isInteraction()) {\n return this.interaction.locale;\n } else {\n return null;\n }\n }\n\n /**\n * Returns the locale for this command.\n * @param preferUser Whether to prefer the user's locale over the guild's locale.\n * @returns The locale for this command. If no locale is found, the default locale is returned.\n */\n public getLocale(preferUser = false): Locale {\n if (this._locale) return this._locale;\n\n const locale = preferUser ? this.getUserLocale() : this.getGuildLocale();\n\n if (!locale) {\n return this.commandkit.config.defaultLocale;\n }\n\n return locale;\n }\n\n /**\n * Sets the locale for this command.\n * @param locale The locale to set.\n */\n public setLocale(locale: Locale | null): void {\n this._locale = locale;\n }\n\n /**\n * Returns the i18n api for this command.\n * @param locale The locale to use for the i18n api.\n * @template T The command name for type-safe translations. Will provide autocomplete from available translations.\n */\n public locale<T extends TranslatableCommandName | (string & {}) = string>(\n locale?: Locale)\n : Localization<T extends TranslatableCommandName ? T : string> {\n const selectedLocale = locale ?? this.getLocale();\n\n return new Localization<T extends TranslatableCommandName ? T : string>(\n this.commandkit,\n {\n locale: selectedLocale,\n target: this.getCommandIdentifier()\n }\n );\n }\n\n /**\n * Creates a clone of this context\n */\n public clone(\n config?: Partial<ContextParameters<ExecutionMode>>)\n : Context<ExecutionMode> {\n if (!config) return new Context(this.commandkit, this.config);\n\n const ctx = new Context(this.commandkit, {\n ...this.config,\n ...config,\n store: this.#store\n });\n\n return ctx;\n }\n\n public isMiddleware(): this is MiddlewareContext<ExecutionMode> {\n return this instanceof MiddlewareContext;\n }\n\n public args(): string[] {\n if (this.isMessage()) {\n return this.config.messageCommandParser!.getArgs();\n }\n\n return [];\n }\n\n /**\n * Stops upcoming middleware or current command execution.\n * If this is called inside pre-stage middleware, the next run will be the actual command, skipping all other pre-stage middlewares.\n * If this is called inside a command itself, it will skip all post-stage middlewares.\n * If this is called inside post-stage middleware, it will skip all other post-stage middlewares.\n */\n public exit() {\n exitMiddleware();\n }\n\n /**\n * Defers the given function to be executed after this command's execution.\n * @param fn The function to defer.\n * @returns A unique identifier for the deferred function.\n */\n public defer(fn: GenericFunction<[CommandKitEnvironment]>): string {\n return afterCommand(fn);\n }\n\n /**\n * Cancels the deferred function with the given identifier.\n * @param id The identifier of the deferred function.\n */\n public cancelDeferred(id: string): void {\n cancelAfterCommand(id);\n }\n\n /**\n * Validates if the given function is a cached function.\n * @param fn The function to validate.\n */\n public isCached(fn: GenericFunction): boolean {\n return isCachedFunction(fn);\n }\n}\n\nexport class MiddlewareContext<\n T extends CommandExecutionMode = CommandExecutionMode> extends\nContext<T, MiddlewareContextArgs> {\n #cancel = false;\n\n /**\n * Whether the command execution was cancelled.\n */\n public get cancelled(): boolean {\n return this.#cancel;\n }\n\n /**\n * Cancels the command execution.\n */\n public cancel(): void {\n this.#cancel = true;\n }\n\n /**\n * Sets command runner function to wrap the command execution.\n * @param fn The function to set.\n * @example ctx.setCommandRunner(async (execute) => {\n * // do something before command execution\n * await execute();\n * // do something after command execution\n * })\n */\n public setCommandRunner(fn: RunCommand): void {\n this.config.customArgs?.setCommandRunner?.(fn);\n }\n}","import { ChatInputCommandInteraction, Interaction, Message } from 'discord.js';\nimport {\n afterCommand,\n CommandKitEnvironment,\n CommandKitEnvironmentType } from\n'../../context/environment';\nimport { Logger } from '../../logger/Logger';\nimport {\n AppCommandHandler,\n PreparedAppCommandExecution,\n RunCommand } from\n'../handlers/AppCommandHandler';\nimport { CommandExecutionMode, MiddlewareContext } from './Context';\nimport {\n makeContextAwareFunction,\n useEnvironment } from\n'../../context/async-context';\n\nexport class AppCommandRunner {\n public constructor(private handler: AppCommandHandler) {}\n\n public async runCommand(\n prepared: PreparedAppCommandExecution,\n source: Interaction | Message)\n {\n if (\n source instanceof Message && (\n source.editedTimestamp || source.partial))\n {\n // TODO: handle message edit\n return;\n }\n\n const { commandkit } = this.handler;\n\n const executionMode = this.getExecutionMode(source);\n\n let runCommand: RunCommand | null = null;\n\n const env = new CommandKitEnvironment(commandkit);\n env.setType(CommandKitEnvironmentType.CommandHandler);\n env.variables.set('commandHandlerType', 'app');\n env.variables.set('currentCommandName', prepared.command.command.name);\n env.variables.set('execHandlerKind', executionMode);\n\n const ctx = new MiddlewareContext(commandkit, {\n environment: env,\n executionMode,\n interaction: !(source instanceof Message) ?\n source as ChatInputCommandInteraction :\n null as never,\n message: source instanceof Message ? source : null as never,\n forwarded: false,\n customArgs: {\n setCommandRunner: (fn: RunCommand) => {\n runCommand = fn;\n }\n },\n messageCommandParser: prepared.messageCommandParser\n });\n\n // Run middleware before command execution\n for (const middleware of prepared.middlewares) {\n await middleware.data.beforeExecute(ctx);\n }\n\n // Determine which function to run based on whether we're executing a command or subcommand\n const targetData = prepared.command.data;\n const fn = targetData[executionMode];\n\n if (!fn) {\n Logger.warn(\n `Command ${prepared.command.command.name} has no handler for ${executionMode}`\n );\n }\n\n if (fn) {\n try {\n const _executeCommand = makeContextAwareFunction(\n env,\n async () => {\n afterCommand((env) => {\n const error = env.getExecutionError();\n const marker = env.getMarker();\n const time = `${env.getExecutionTime().toFixed(2)}ms`;\n\n if (error) {\n Logger.error(\n `[${marker} - ${time}] Error executing command: ${error.stack || error}`\n );\n\n return;\n }\n\n Logger.info(\n `[${marker} - ${time}] Command executed successfully`\n );\n });\n\n return fn(ctx.clone());\n },\n this.#finalizer.bind(this)\n );\n\n const executeCommand =\n runCommand != null ?\n (runCommand as RunCommand)(_executeCommand) :\n _executeCommand;\n\n env.markStart(prepared.command.command.name);\n\n const res = await commandkit.plugins.execute(async (ctx, plugin) => {\n return plugin.executeCommand(ctx, source, prepared, executeCommand);\n });\n\n if (!res) {\n await executeCommand();\n }\n } catch (e) {\n Logger.error(e);\n }\n }\n\n try {\n // Run middleware after command execution\n for (const middleware of prepared.middlewares) {\n await middleware.data.afterExecute(ctx);\n }\n } finally {\n env.markEnd();\n }\n }\n\n async #finalizer() {\n const env = useEnvironment();\n\n await env.runDeferredFunctions();\n\n env.clearAllDeferredFunctions();\n }\n\n public getExecutionMode(source: Interaction | Message): CommandExecutionMode {\n if (source instanceof Message) return CommandExecutionMode.Message;\n if (source.isChatInputCommand()) return CommandExecutionMode.SlashCommand;\n if (source.isAutocomplete()) {\n return CommandExecutionMode.Autocomplete;\n }\n if (source.isMessageContextMenuCommand()) {\n return CommandExecutionMode.MessageContextMenu;\n }\n if (source.isUserContextMenuCommand()) {\n return CommandExecutionMode.UserContextMenu;\n }\n\n return null as never;\n }\n}","import { mkdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { COMMANDKIT_IS_DEV } from './constants';\nimport { existsSync } from 'node:fs';\n\nexport async function generateTypesPackage() {\n const location = join(process.cwd(), 'node_modules', 'commandkit-types');\n if (!COMMANDKIT_IS_DEV) return location;\n const packageJSON = join(location, 'package.json');\n const index = join(location, 'index.js');\n const types = join(location, 'index.d.ts');\n const locale = join(location, 'locale_types.d.ts');\n const command = join(location, 'command.d.ts');\n\n const packageJSONContent = {\n name: 'commandkit-types',\n version: '1.0.0',\n description: 'CommandKit types package',\n type: 'commonjs',\n main: 'index.js',\n types: 'index.d.ts'\n };\n\n const indexContent = `module.exports = {};`;\n\n // Restructuring the type declarations to properly extend rather than replace types\n const typesContent = `// Main types index file - imports all type declarations\nimport './locale_types';\nimport './command';\nexport {};\n`;\n\n // Properly set up locale_types to extend the CommandLocalizationTypeData interface\n const localeTypesContent = `// Auto-generated localization types\n export {};\ndeclare module 'commandkit' {\n interface CommandLocalizationTypeData {\n // This interface will be populated with localizations\n }\n\n type TranslatableCommandName = keyof CommandLocalizationTypeData\n}`;\n\n // Properly set up command types to extend the CommandTypeData interface\n const commandTypesContent = `// Auto-generated command types\n export {};\ndeclare module 'commandkit' {\n type CommandTypeData = string\n}`;\n\n await mkdir(location, { recursive: true }).catch(() => {});\n await writeFile(packageJSON, JSON.stringify(packageJSONContent, null, 2));\n await writeFile(index, indexContent);\n await writeFile(types, typesContent);\n await writeFile(locale, localeTypesContent);\n await writeFile(command, commandTypesContent);\n\n return location;\n}\n\nexport async function rewriteLocalesDeclaration(data: string) {\n const localeTypesContent = `// Auto-generated localization types\n declare module 'commandkit' {\n ${data}\n }\n export {};`;\n\n const location = join(process.cwd(), 'node_modules', 'commandkit-types');\n\n if (!existsSync(location)) return;\n\n const locale = join(location, 'locale_types.d.ts');\n\n await writeFile(locale, localeTypesContent, { encoding: 'utf-8' });\n}\n\nexport async function rewriteCommandDeclaration(data: string) {\n const commandTypesContent = `// Auto-generated command types\n declare module 'commandkit' {\n ${data}\n}\n export {};\n`;\n\n const location = join(process.cwd(), 'node_modules', 'commandkit-types');\n\n if (!existsSync(location)) return;\n\n const type = join(location, 'command.d.ts');\n\n await writeFile(type, commandTypesContent, { encoding: 'utf-8' });\n}","import type { CommandKit } from '../../CommandKit';\nimport {\n Awaitable,\n Collection,\n CommandInteraction,\n ContextMenuCommandBuilder,\n Events,\n Interaction,\n Locale,\n Message,\n PartialMessage,\n SlashCommandBuilder } from\n'discord.js';\nimport { Context } from '../commands/Context';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport {\n ApiTranslatableCommandOptions,\n TranslatableCommandOptions } from\n'../i18n/Translation';\nimport { MessageCommandParser } from '../commands/MessageCommandParser';\nimport { CommandKitErrorCodes, isErrorType } from '../../utils/error-codes';\nimport { CommandRegistrar } from '../register/CommandRegistrar';\nimport { GenericFunction } from '../../context/async-context';\nimport { Logger } from '../../logger/Logger';\nimport { AsyncFunction } from '../../cache';\nimport { Command, Middleware } from '../router';\nimport { AppCommandRunner } from '../commands/AppCommandRunner';\nimport { COMMANDKIT_IS_DEV } from '../../utils/constants';\nimport { rewriteCommandDeclaration } from '../../utils/types-package';\n\nexport type RunCommand = <T extends AsyncFunction>(fn: T) => T;\n\ninterface AppCommand {\n command: SlashCommandBuilder | Record<string, any>;\n chatInput?: (ctx: Context) => Awaitable<unknown>;\n autocomplete?: (ctx: Context) => Awaitable<unknown>;\n message?: (ctx: Context) => Awaitable<unknown>;\n messageContextMenu?: (ctx: Context) => Awaitable<unknown>;\n userContextMenu?: (ctx: Context) => Awaitable<unknown>;\n}\n\ninterface AppCommandMiddleware {\n beforeExecute: (ctx: Context) => Awaitable<unknown>;\n afterExecute: (ctx: Context) => Awaitable<unknown>;\n}\n\nexport interface LoadedCommand {\n command: Command;\n data: AppCommand;\n guilds?: string[];\n}\n\nexport type CommandTypeData = string;\n\nexport type ResolvableCommand = CommandTypeData | (string & {});\n\ninterface LoadedMiddleware {\n middleware: Middleware;\n data: AppCommandMiddleware;\n}\n\nexport interface PreparedAppCommandExecution {\n command: LoadedCommand;\n middlewares: LoadedMiddleware[];\n messageCommandParser?: MessageCommandParser;\n}\n\ntype CommandBuilderLike =\nSlashCommandBuilder |\nContextMenuCommandBuilder |\nRecord<string, any>;\n\nconst commandDataSchema = {\n command: (c: unknown) =>\n c instanceof SlashCommandBuilder ||\n c instanceof ContextMenuCommandBuilder ||\n c && typeof c === 'object',\n chatInput: (c: unknown) => typeof c === 'function',\n autocomplete: (c: unknown) => typeof c === 'function',\n message: (c: unknown) => typeof c === 'function',\n messageContextMenu: (c: unknown) => typeof c === 'function',\n userContextMenu: (c: unknown) => typeof c === 'function'\n};\n\nconst middlewareDataSchema = {\n beforeExecute: (c: unknown) => typeof c === 'function',\n afterExecute: (c: unknown) => typeof c === 'function'\n};\n\nexport class AppCommandHandler {\n private loadedCommands = new Collection<string, LoadedCommand>();\n private loadedMiddlewares = new Collection<string, LoadedMiddleware>();\n\n // Name-to-ID mapping for easier lookup\n private commandNameToId = new Map<string, string>();\n private subcommandPathToId = new Map<string, string>();\n\n public readonly registrar: CommandRegistrar;\n private onInteraction: GenericFunction<[Interaction]> | null = null;\n private onMessageCreate: GenericFunction<[Message]> | null = null;\n private onMessageUpdate: GenericFunction<\n [Message | PartialMessage, Message | PartialMessage]> |\n null = null;\n public readonly commandRunner = new AppCommandRunner(this);\n\n public constructor(public readonly commandkit: CommandKit) {\n this.registrar = new CommandRegistrar(this.commandkit);\n }\n\n public getCommandsArray() {\n return Array.from(this.loadedCommands.values());\n }\n\n public registerCommandHandler() {\n this.onInteraction ??= async (interaction: Interaction) => {\n const success = await this.commandkit.plugins.execute(\n async (ctx, plugin) => {\n return plugin.onBeforeInteraction(ctx, interaction);\n }\n );\n\n // plugin will handle the interaction\n if (success) return;\n\n const isCommandLike =\n interaction.isCommand() ||\n interaction.isAutocomplete() ||\n interaction.isUserContextMenuCommand() ||\n interaction.isMessageContextMenuCommand();\n\n if (!isCommandLike) return;\n\n const prepared = await this.prepareCommandRun(interaction);\n\n if (!prepared) return;\n\n return this.commandRunner.runCommand(prepared, interaction);\n };\n\n this.onMessageCreate ??= async (message: Message) => {\n const success = await this.commandkit.plugins.execute(\n async (ctx, plugin) => {\n return plugin.onBeforeMessageCommand(ctx, message);\n }\n );\n\n // plugin will handle the message\n if (success) return;\n if (message.author.bot) return;\n\n const prepared = await this.prepareCommandRun(message);\n\n if (!prepared) return;\n\n return this.commandRunner.runCommand(prepared, message);\n };\n\n this.onMessageUpdate ??= async (\n oldMessage: Message | PartialMessage,\n newMessage: Message | PartialMessage) =>\n {\n const success = await this.commandkit.plugins.execute(\n async (ctx, plugin) => {\n return plugin.onBeforeMessageUpdateCommand(\n ctx,\n oldMessage,\n newMessage\n );\n }\n );\n\n // plugin will handle the message\n if (success) return;\n if (oldMessage.partial || newMessage.partial) return;\n if (oldMessage.author.bot) return;\n\n const prepared = await this.prepareCommandRun(newMessage);\n\n if (!prepared) return;\n\n return this.commandRunner.runCommand(prepared, newMessage);\n };\n\n this.commandkit.client.on(Events.InteractionCreate, this.onInteraction);\n this.commandkit.client.on(Events.MessageCreate, this.onMessageCreate);\n this.commandkit.client.on(Events.MessageUpdate, this.onMessageUpdate);\n }\n\n public async prepareCommandRun(\n source: Interaction | Message)\n : Promise<PreparedAppCommandExecution | null> {\n let cmdName: string;\n let parser: MessageCommandParser | undefined;\n\n // Extract command name (and possibly subcommand) from the source\n if (source instanceof Message) {\n if (source.author.bot) return null;\n\n const prefix =\n await this.commandkit.config.getMessageCommandPrefix(source);\n\n parser = new MessageCommandParser(\n source,\n Array.isArray(prefix) ? prefix : [prefix],\n (command: string) => {\n // Find the command by name\n const commandId = this.commandNameToId.get(command);\n if (!commandId) return null;\n\n const loadedCommand = this.loadedCommands.get(commandId);\n if (!loadedCommand) return null;\n\n if (\n source.guildId &&\n loadedCommand.guilds?.length &&\n !loadedCommand.guilds.includes(source.guildId!))\n {\n return null;\n }\n\n const json =\n 'toJSON' in loadedCommand.data.command ?\n loadedCommand.data.command.toJSON() :\n loadedCommand.data.command;\n\n return (\n json.options?.reduce(\n (acc: Record<string, unknown>, opt: Record<string, any>) => {\n acc[opt.name] = opt.type;\n return acc;\n },\n {} as Record<string, unknown>\n ) ?? {});\n\n }\n );\n\n try {\n const fullCommand = parser.getFullCommand();\n const parts = fullCommand.split(' ');\n cmdName = parts[0];\n } catch (e) {\n if (isErrorType(e, CommandKitErrorCodes.InvalidCommandPrefix)) {\n return null;\n }\n Logger.error(e);\n return null;\n }\n } else {\n if (!source.isCommand()) return null;\n\n cmdName = source.commandName;\n }\n\n // Find the command by name\n const commandId = this.commandNameToId.get(cmdName);\n if (!commandId) return null;\n\n const loadedCommand = this.loadedCommands.get(commandId);\n if (!loadedCommand) return null;\n\n // If this is a guild specific command, check if we're in the right guild\n if (\n source instanceof CommandInteraction &&\n source.guildId &&\n loadedCommand.guilds?.length &&\n !loadedCommand.guilds.includes(source.guildId))\n {\n return null;\n }\n\n // Collect all applicable middleware\n const middlewares: LoadedMiddleware[] = [];\n\n // Add command-level middleware\n for (const middlewareId of loadedCommand.command.middlewares) {\n const middleware = this.loadedMiddlewares.get(middlewareId);\n if (middleware) {\n middlewares.push(middleware);\n }\n }\n\n // No middleware for subcommands since they inherit from parent command\n return {\n command: loadedCommand,\n middlewares,\n messageCommandParser: parser\n };\n }\n\n public async reloadCommands() {\n this.loadedCommands.clear();\n this.loadedMiddlewares.clear();\n this.commandNameToId.clear();\n this.subcommandPathToId.clear();\n\n await this.loadCommands();\n }\n\n public async loadCommands() {\n const commandsRouter = this.commandkit.commandsRouter;\n\n if (!commandsRouter) {\n throw new Error('Commands router has not yet initialized');\n }\n\n const { commands, middlewares } = commandsRouter.getData();\n\n // Load middlewares first\n for (const [id, middleware] of middlewares) {\n await this.loadMiddleware(id, middleware);\n }\n\n // Load commands\n for (const [id, command] of commands) {\n await this.loadCommand(id, command);\n }\n\n // generate types\n if (COMMANDKIT_IS_DEV) {\n await rewriteCommandDeclaration(\n `type CommandTypeData = ${Array.from(\n this.loadedCommands.\n mapValues((v) => JSON.stringify(v.command.name)).\n values()\n ).join(' | ')}`\n );\n }\n }\n\n private async loadMiddleware(id: string, middleware: Middleware) {\n try {\n const data = await import(\n `${toFileURL(middleware.path)}?t=${Date.now()}`\n );\n\n let handlerCount = 0;\n for (const [key, validator] of Object.entries(middlewareDataSchema)) {\n if (data[key] && !(await validator(data[key]))) {\n throw new Error(\n `Invalid export for middleware ${id}: ${key} does not match expected value`\n );\n }\n\n if (data[key]) handlerCount++;\n }\n\n if (handlerCount === 0) {\n throw new Error(\n `Invalid export for middleware ${id}: at least one handler function must be provided`\n );\n }\n\n this.loadedMiddlewares.set(id, { middleware, data });\n } catch (error) {\n Logger.error(`Failed to load middleware ${id}`, error);\n }\n }\n\n private async loadCommand(id: string, command: Command) {\n try {\n // Skip if path is null (directory-only command group)\n if (command.path === null) {\n this.loadedCommands.set(id, {\n command,\n data: {\n command: {\n name: command.name,\n description: `${command.name} commands`,\n type: 1\n }\n }\n });\n return;\n }\n\n const data = await import(`${toFileURL(command.path)}?t=${Date.now()}`);\n\n if (!data.command) {\n throw new Error(\n `Invalid export for command ${command.name}: no command definition found`\n );\n }\n\n let handlerCount = 0;\n for (const [key, validator] of Object.entries(commandDataSchema)) {\n if (key !== 'command' && data[key]) handlerCount++;\n if (data[key] && !(await validator(data[key]))) {\n throw new Error(\n `Invalid export for command ${command.name}: ${key} does not match expected value`\n );\n }\n }\n\n if (handlerCount === 0) {\n throw new Error(\n `Invalid export for command ${command.name}: at least one handler function must be provided`\n );\n }\n\n const localizedCommand = await this.applyLocalizations({\n ...data.command\n });\n\n this.loadedCommands.set(id, {\n command,\n guilds: data.guilds,\n data: {\n ...data,\n command: localizedCommand\n }\n });\n\n // Map command name to ID for easier lookup\n this.commandNameToId.set(command.name, id);\n } catch (error) {\n Logger.error(`Failed to load command ${command.name} (${id})`, error);\n }\n }\n\n public async applyLocalizations(command: CommandBuilderLike) {\n const localization = this.commandkit.config.localizationStrategy;\n const validLocales = Object.values(Locale).filter(\n (v) => typeof v === 'string'\n );\n\n const localizationKey = command.name;\n\n for (const locale of validLocales) {\n const translation = await localization.locateTranslation(\n localizationKey,\n locale\n );\n if (!translation?.command) continue;\n\n if (command instanceof SlashCommandBuilder) {\n // Apply command-level localizations\n if (translation.command.name) {\n command.setNameLocalization(locale, translation.command.name);\n }\n\n if (translation.command.description) {\n command.setDescriptionLocalization(\n locale,\n translation.command.description\n );\n }\n\n const raw = command.toJSON();\n\n if (raw.options?.length && translation.command.options?.length) {\n const opt = translation.command.options.slice();\n let o: TranslatableCommandOptions;\n\n while (o = opt.shift()!) {\n raw.options?.forEach((option) => {\n if (option.name === o.ref) {\n if (option.name) {\n option.name_localizations ??= {};\n option.name_localizations[locale] = o.name;\n }\n\n if (option.description) {\n option.description_localizations ??= {};\n option.description_localizations[locale] = o.description;\n }\n\n const opts = (\n option as typeof option & {\n options: ApiTranslatableCommandOptions[] | undefined;\n }).\n options;\n\n // Handle nested options (subcommand parameters)\n if (opts?.length && o.options?.length) {\n o.options.forEach((subOpt) => {\n const targetOption = opts?.find(\n (opt) => opt.name === subOpt.name\n );\n if (targetOption) {\n targetOption.name_localizations ??= {};\n targetOption.name_localizations[locale] = subOpt.name;\n\n if ('description' in targetOption) {\n targetOption.description_localizations ??= {};\n targetOption.description_localizations[locale] =\n subOpt.description;\n }\n }\n });\n }\n }\n });\n }\n }\n } else if (command instanceof ContextMenuCommandBuilder) {\n if (translation.command.name) {\n command.setNameLocalization(locale, translation.command.name);\n }\n } else {\n // Raw command object\n command.name_localizations ??= {};\n command.name_localizations[locale] = translation.command.name;\n\n if (command.description) {\n command.description_localizations ??= {};\n command.description_localizations[locale] =\n translation.command.description;\n }\n\n if (command.options?.length && translation.command.options?.length) {\n const opt = translation.command.options.slice();\n let o: TranslatableCommandOptions;\n\n while (o = opt.shift()!) {\n command.options.forEach((option: any) => {\n if (option.name === o.ref) {\n option.name_localizations ??= {};\n option.name_localizations[locale] = o.name;\n\n if ('description' in option) {\n option.description_localizations ??= {};\n option.description_localizations[locale] = o.description;\n }\n\n const opts = option.options as ApiTranslatableCommandOptions[];\n\n if (opts?.length && o.options?.length) {\n o.options.forEach((subOpt) => {\n const targetOption = opts?.find(\n (opt) => opt.name === subOpt.name\n );\n if (targetOption) {\n targetOption.name_localizations ??= {};\n targetOption.name_localizations[locale] = subOpt.name;\n\n if ('description' in targetOption) {\n targetOption.description_localizations ??= {};\n targetOption.description_localizations[locale] =\n subOpt.description;\n }\n }\n });\n }\n }\n });\n }\n }\n }\n }\n\n return command;\n }\n}","import { Dirent, existsSync } from 'node:fs';\nimport { readdir } from 'node:fs/promises';\nimport { basename, extname, join, normalize, sep } from 'node:path';\n\nexport interface Command {\n id: string;\n name: string;\n path: string;\n relativePath: string;\n parentPath: string;\n middlewares: Array<string>;\n category: string | null;\n}\n\nexport interface Middleware {\n id: string;\n name: string;\n path: string;\n relativePath: string;\n parentPath: string;\n}\n\nexport interface ParsedCommandData {\n commands: Record<string, Command>;\n middlewares: Record<string, Middleware>;\n}\n\nexport interface CommandsRouterOptions {\n entrypoint: string;\n}\n\nconst MIDDLEWARE_PATTERN = /^\\+middleware\\.(m|c)?(j|t)sx?$/;\nconst COMMAND_PATTERN = /^(\\w+)\\.(m|c)?(j|t)sx?$/;\nconst CATEGORY_PATTERN = /^\\(\\w+\\)$/;\n\nexport class CommandsRouter {\n private commands = new Map<string, Command>();\n private middlewares = new Map<string, Middleware>();\n\n public constructor(private readonly options: CommandsRouterOptions) {}\n\n public populate(data: ParsedCommandData) {\n for (const [id, command] of Object.entries(data.commands)) {\n this.commands.set(id, command);\n }\n\n for (const [id, middleware] of Object.entries(data.middlewares)) {\n this.middlewares.set(id, middleware);\n }\n }\n\n public isValidPath(): boolean {\n return existsSync(this.options.entrypoint);\n }\n\n private isCommand(name: string): boolean {\n return COMMAND_PATTERN.test(name);\n }\n\n private isMiddleware(name: string): boolean {\n return MIDDLEWARE_PATTERN.test(name);\n }\n\n private isCategory(name: string): boolean {\n return CATEGORY_PATTERN.test(name);\n }\n\n public clear() {\n this.commands.clear();\n this.middlewares.clear();\n }\n\n public async scan() {\n const entries = await readdir(this.options.entrypoint, {\n withFileTypes: true\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n const fullPath = join(this.options.entrypoint, entry.name);\n\n if (entry.isDirectory()) {\n const category = this.isCategory(entry.name) ?\n entry.name.slice(1, -1) :\n null;\n\n await this.traverse(fullPath, category);\n } else {\n await this.handle(entry);\n }\n }\n\n await this.applyMiddlewares();\n\n return this.toJSON();\n }\n\n public getData() {\n return {\n commands: this.commands,\n middlewares: this.middlewares\n };\n }\n\n public toJSON() {\n return {\n commands: Object.fromEntries(this.commands.entries()),\n middlewares: Object.fromEntries(this.middlewares.entries())\n };\n }\n\n private async traverse(path: string, category: string | null) {\n const entries = await readdir(path, {\n withFileTypes: true\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n if (entry.isFile()) {\n if (this.isCommand(entry.name) || this.isMiddleware(entry.name)) {\n await this.handle(entry, category);\n }\n }\n\n // TODO: handle subcommands\n }\n }\n\n private async handle(entry: Dirent, category: string | null = null) {\n const name = entry.name;\n const path = join(entry.parentPath, entry.name);\n\n if (this.isCommand(name)) {\n const command: Command = {\n id: crypto.randomUUID(),\n name: basename(path, extname(path)),\n path,\n category,\n parentPath: entry.parentPath,\n relativePath: this.replaceEntrypoint(path),\n middlewares: []\n };\n\n this.commands.set(command.id, command);\n } else if (this.isMiddleware(name)) {\n const middleware: Middleware = {\n id: crypto.randomUUID(),\n name: basename(path, extname(path)),\n path,\n relativePath: this.replaceEntrypoint(path),\n parentPath: entry.parentPath\n };\n\n this.middlewares.set(middleware.id, middleware);\n }\n }\n\n private applyMiddlewares() {\n this.commands.forEach((command) => {\n const commandPath = command.parentPath;\n const samePathMiddlewares = Array.from(this.middlewares.values()).\n filter((middleware) => {\n // if middleware's parent path is the same as command's parent path\n return middleware.parentPath === commandPath;\n }).\n map((middleware) => middleware.id);\n\n command.middlewares = Array.from(\n new Set([...command.middlewares, ...samePathMiddlewares])\n );\n });\n }\n\n private replaceEntrypoint(path: string) {\n const normalized = normalize(path);\n return normalized.replace(this.options.entrypoint, '');\n }\n}","import { existsSync } from 'node:fs';\nimport { readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\n\n/**\n * Configuration options for the EventsRouter\n * @interface EventsRouterOptions\n */\nexport interface EventsRouterOptions {\n /** Root directory path where event handlers are located */\n entrypoint: string;\n}\n\n/**\n * Represents a parsed event with its handlers\n * @interface ParsedEvent\n */\nexport interface ParsedEvent {\n /** Name of the event derived from directory name */\n event: string;\n /** Absolute path to the event directory */\n path: string;\n /** Array of file paths to event listener handlers */\n listeners: string[];\n /** Namespace of the event */\n namespace: string | null;\n}\n\n/** Map of event names to their parsed metadata */\nexport type EventsTree = Record<string, ParsedEvent>;\n\n/**\n * Router for discovering and managing event handler files in a directory structure.\n * Events are represented by directories, and handlers are files within those directories.\n */\nexport class EventsRouter {\n /** Internal storage of parsed events */\n private events = new Map<string, ParsedEvent>();\n\n /**\n * Creates a new EventsRouter instance\n * @param options - Configuration options for the router\n * @throws Error if entrypoint is not provided\n */\n public constructor(private options: EventsRouterOptions) {\n if (!options.entrypoint) {\n throw new Error('Entrypoint directory must be provided');\n }\n }\n\n /**\n * Find a parsed event by its name\n * @param event - Name of the event to find\n * @returns Parsed event metadata or null if not found\n */\n public match(event: string): ParsedEvent | null {\n return this.events.get(event) ?? null;\n }\n\n /**\n * Get the entrypoint directory path\n * @returns Entrypoint directory path\n */\n public get entrypoint(): string {\n return this.options.entrypoint;\n }\n\n /**\n * Checks if the entrypoint path is valid\n */\n public isValidPath() {\n return existsSync(this.entrypoint);\n }\n\n /**\n * Clear all parsed events\n */\n public clear() {\n this.events.clear();\n }\n\n /**\n * Reload and re-scan the entrypoint directory for events\n * @returns Promise resolving to the updated events tree\n */\n public async reload() {\n this.clear();\n return this.scan();\n }\n\n /**\n * Scan the entrypoint directory for events and their handlers\n * @returns Promise resolving to the events tree\n */\n public async scan(): Promise<EventsTree> {\n const dirs = await readdir(this.entrypoint, { withFileTypes: true });\n\n for (const dir of dirs) {\n if (dir.isDirectory()) {\n const path = join(this.entrypoint, dir.name);\n await this.scanEvent(dir.name, path, null, [], true);\n }\n }\n\n return Object.fromEntries(this.events);\n }\n\n /**\n * Convert the internal events map to a plain object\n * @returns Events tree as a plain object\n */\n public toJSON(): EventsTree {\n return Object.fromEntries(this.events);\n }\n\n /**\n * Recursively scan a directory for event handlers\n * @param event - Name of the event\n * @param path - Path to the event directory\n * @param listeners - Array to collect listener file paths\n * @returns Promise resolving to the parsed event metadata\n */\n private async scanEvent(\n event: string,\n path: string,\n _namespace: string | null = null,\n listeners: string[] = [],\n isRoot = false)\n : Promise<void> {\n const files = await readdir(path, { withFileTypes: true });\n const isNamespace = isRoot && /^\\(.+\\)$/.test(event);\n\n // if event = (something) pattern then namespace is something\n const namespace = isNamespace ? event.slice(1, -1) : _namespace ?? null;\n\n for (const file of files) {\n if (file.name.includes('_')) continue;\n\n if (file.isDirectory()) {\n const nextPath = join(path, file.name);\n await this.scanEvent(file.name, nextPath, namespace, listeners);\n continue;\n }\n\n if (file.isFile() && /\\.(m|c)?(j|t)sx?$/.test(file.name)) {\n listeners.push(join(file.parentPath, file.name));\n }\n }\n\n if (!isNamespace) {\n this.events.set(event, { event, path, listeners, namespace });\n }\n }\n}","export * from './CommandsRouter';\nexport * from './EventsRouter';","import { CommandKit } from '../../CommandKit';\nimport { ListenerFunction } from '../../events/CommandKitEventsChannel';\nimport { Logger } from '../../logger/Logger';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { ParsedEvent } from '../router';\n\nexport type EventListener = {\n handler: ListenerFunction;\n once: boolean;\n};\n\nexport interface LoadedEvent {\n name: string;\n namespace: string | null;\n event: ParsedEvent;\n listeners: EventListener[];\n mainListener?: EventListener;\n executedOnceListeners?: Set<ListenerFunction>; // Track executed once listeners\n}\n\nexport class AppEventsHandler {\n private loadedEvents = new Map<string, LoadedEvent>();\n public constructor(public readonly commandkit: CommandKit) {}\n\n public async reloadEvents() {\n this.unregisterAll();\n await this.loadEvents();\n }\n\n public async loadEvents() {\n const router = this.commandkit.eventsRouter;\n\n const events = await router.scan();\n\n for (const event of Object.values(events)) {\n const listeners: EventListener[] = [];\n\n for (const listener of event.listeners) {\n const handler = await import(toFileURL(listener, true));\n\n if (!handler.default || typeof handler.default !== 'function') {\n Logger.error(\n `Event handler for ${event.event}${event.namespace ? ` of namespace ${event.namespace}` : ''} does not have a default export or is not a function`\n );\n }\n\n listeners.push({\n handler: handler.default,\n once: !!handler.once\n });\n }\n\n const len = listeners.length;\n\n if (!len) {\n Logger.warn(\n `Event ${event.event}${event.namespace ? ` of namespace ${event.namespace}` : ''} does not have any listeners`\n );\n }\n\n const key = `${event.namespace ? `${event.namespace}:` : ''}${event.event}`;\n\n this.loadedEvents.set(key, {\n name: event.event,\n namespace: event.namespace,\n event,\n listeners\n });\n\n Logger.info(\n `✨ Loaded event ${event.event}${event.namespace ? ` of namespace ${event.namespace}` : ''} with ${len} listener${len === 1 ? '' : 's'}`\n );\n }\n\n this.registerAllClientEvents();\n }\n\n public unregisterAll() {\n this.unregisterAllClientListeners();\n this.loadedEvents.clear();\n }\n\n public registerAllClientEvents() {\n const client = this.commandkit.client;\n\n for (const [key, data] of this.loadedEvents.entries()) {\n const { name, listeners, namespace } = data;\n\n // Separate listeners into \"once\" and \"on\" groups\n const onceListeners = listeners.filter((listener) => listener.once);\n const onListeners = listeners.filter((listener) => !listener.once);\n\n // Initialize set to track executed once listeners\n const executedOnceListeners = new Set<ListenerFunction>();\n\n // Create main handler for regular \"on\" listeners\n const mainHandler: ListenerFunction = async (...args) => {\n for (const listener of onListeners) {\n try {\n await listener.handler(...args);\n } catch (e) {\n Logger.error(\n `Error handling event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`,\n\n e\n );\n }\n }\n };\n\n // Create handler for \"once\" listeners with cleanup logic\n const onceHandler: ListenerFunction = async (...args) => {\n for (const listener of onceListeners) {\n try {\n // Skip if already executed (shouldn't happen with proper .once registration, but just in case)\n if (executedOnceListeners.has(listener.handler)) continue;\n\n await listener.handler(...args);\n executedOnceListeners.add(listener.handler);\n } catch (e) {\n Logger.error(\n `Error handling event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`,\n\n e\n );\n }\n }\n\n // Cleanup: Remove once listeners that have been executed\n if (\n executedOnceListeners.size === onceListeners.length &&\n onListeners.length === 0)\n {\n // If all once listeners executed and no regular listeners, remove event entirely\n this.loadedEvents.delete(key);\n Logger.info(\n `🧹 Cleaned up completed once-only event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`\n\n );\n }\n };\n\n // Store main handlers in loadedEvents for later unregistration\n this.loadedEvents.set(key, {\n ...data,\n mainListener:\n onListeners.length > 0 ?\n { handler: mainHandler, once: false } :\n undefined,\n executedOnceListeners\n });\n\n // Register handlers with appropriate methods\n if (namespace) {\n if (onListeners.length > 0) {\n this.commandkit.events.on(namespace, name, mainHandler);\n }\n if (onceListeners.length > 0) {\n this.commandkit.events.once(namespace, name, onceHandler);\n }\n } else {\n if (onListeners.length > 0) {\n client.on(name, mainHandler);\n }\n if (onceListeners.length > 0) {\n client.once(name, onceHandler);\n }\n }\n\n Logger.info(\n `🔌 Registered event ${name}${\n namespace ? ` of namespace ${namespace}` : ''} (${\n onListeners.length} regular, ${onceListeners.length} once-only)`\n );\n }\n }\n\n public unregisterAllClientListeners() {\n const client = this.commandkit.client;\n\n for (const [\n key,\n { name, mainListener, namespace }] of\n this.loadedEvents.entries()) {\n if (mainListener) {\n if (namespace) {\n this.commandkit.events.off(namespace, name, mainListener.handler);\n } else {\n client.off(name, mainListener.handler);\n }\n } else {\n if (namespace) {\n this.commandkit.events.removeAllListeners(namespace, name);\n } else {\n client.removeAllListeners(name);\n }\n }\n\n this.loadedEvents.delete(key);\n\n Logger.info(\n `🗑️ Unregistered event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`\n\n );\n }\n }\n}","import { rimrafSync } from 'rimraf';\nimport { join } from 'node:path';\nimport fs from 'node:fs';\nimport colors from '../utils/colors';\nimport { ResolvedCommandKitConfig } from '../config/utils';\nimport { generateTypesPackage } from '../utils/types-package';\n\nlet ts: typeof import('typescript') | undefined;\n\nexport function write(message: any) {\n process.stdout.write(message);\n process.stdout.write('\\n');\n}\n\n/**\n * @returns {never}\n */\nexport function panic(message: any): never {\n write(colors.red(`Error: ${message}`));\n process.exit(1);\n}\n\nexport function findPackageJSON() {\n const cwd = process.cwd();\n const target = join(cwd, 'package.json');\n\n if (!fs.existsSync(target)) {\n panic('Could not find package.json in current directory.');\n }\n\n return JSON.parse(fs.readFileSync(target, 'utf8'));\n}\n\nasync function ensureTypeScript(target: string) {\n const isTypeScript = /\\.(c|m)?tsx?$/.test(target);\n\n if (!isTypeScript) return false;\n if (process.features.typescript) return true;\n\n if (!ts) {\n try {\n ts = await import('typescript');\n } catch {\n panic('TypeScript must be installed to use TypeScript config files.');\n }\n }\n\n return true;\n}\n\nexport async function loadConfigFileFromPath(\ntarget: string)\n: Promise<ResolvedCommandKitConfig> {\n await ensureExists(target);\n\n const isTs = await ensureTypeScript(target);\n\n if (isTs && ts) {\n const { transpileModule } = ts;\n const src = fs.readFileSync(target, 'utf8');\n const { outputText } = transpileModule(src, {\n compilerOptions: {\n module: ts.ModuleKind.ESNext,\n target: ts.ScriptTarget.ESNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext\n },\n fileName: target\n });\n\n const nodeModulesPath = await generateTypesPackage();\n\n const tmpFile = join(nodeModulesPath, 'compiled-commandkit.config.mjs');\n\n fs.writeFileSync(tmpFile, outputText);\n\n target = tmpFile;\n }\n\n /**\n * @type {import('..').CommandKitConfig}\n */\n const config = await import(`file://${target}`).then(\n (conf) => conf.default || conf\n );\n\n return config;\n}\n\nasync function ensureExists(loc: string) {\n const exists = fs.existsSync(loc);\n\n if (!exists) {\n throw new Error(`File not found: ${loc}`);\n }\n}\n\nexport function erase(dir: string) {\n rimrafSync(dir);\n}\n\nexport async function copyLocaleFiles(_from: string, _to: string) {\n const resolvedFrom = join(process.cwd(), _from);\n const resolvedTo = join(process.cwd(), _to);\n\n const localePaths = ['app/locales'];\n const srcLocalePaths = localePaths.map((path) => join(resolvedFrom, path));\n const destLocalePaths = localePaths.map((path) => join(resolvedTo, path));\n\n for (const localePath of srcLocalePaths) {\n if (!fs.existsSync(localePath)) {\n continue;\n }\n\n // copy localePath to destLocalePath\n const destLocalePath = destLocalePaths[srcLocalePaths.indexOf(localePath)];\n\n if (!fs.existsSync(destLocalePath)) {\n fs.promises.mkdir(destLocalePath, { recursive: true });\n }\n\n await fs.promises.cp(localePath, destLocalePath, {\n recursive: true,\n force: true\n });\n }\n}","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { loadConfigFileFromPath } from '../cli/common';\nimport { getConfig } from './config';\n\nconst CONFIG_FILE_NAMES = [\n'commandkit.config.js',\n'commandkit.config.mjs',\n'commandkit.config.cjs',\n'commandkit.config.ts'];\n\n\nfunction findConfigFile(cwd: string) {\n const locations = CONFIG_FILE_NAMES.map((name) => join(cwd, name));\n\n for (const location of locations) {\n if (existsSync(location)) {\n return {\n path: location,\n isTypeScript: /\\.ts$/.test(location)\n };\n }\n }\n\n return null;\n}\n\nlet loadedConfig: ReturnType<typeof getConfig> | null = null;\n\n/**\n * Load the configuration file from the given entrypoint.\n * @param entrypoint The entrypoint to load the configuration file from. Defaults to the current working directory.\n */\nexport async function loadConfigFile(entrypoint = process.cwd()) {\n if (loadedConfig) return loadedConfig;\n const filePath = findConfigFile(entrypoint);\n if (!filePath) return getConfig();\n\n const config = await loadConfigFileFromPath(filePath.path);\n\n loadedConfig = config;\n\n return config;\n}","import type { CommandKit } from '../CommandKit';\nimport { Logger } from '../logger/Logger';\nimport { COMMANDKIT_IS_DEV } from './constants';\n\ninterface IpcMessageCommand {\n event: string;\n path?: string;\n}\n\nexport function registerDevHooks(commandkit: CommandKit) {\n if (!COMMANDKIT_IS_DEV) return;\n\n process.on('message', (message) => {\n if (typeof message !== 'object' || message === null) return;\n\n const { event, path } = message as IpcMessageCommand;\n if (!event) return;\n\n if (process.env.COMMANDKIT_DEBUG_HMR === 'true') {\n Logger.info(`Received HMR event: ${event}${path ? ` for ${path}` : ''}`);\n }\n\n switch (event) {\n case 'reload-commands':\n commandkit.commandHandler.reloadCommands();\n break;\n case 'reload-events':\n commandkit.eventHandler.reloadEvents();\n break;\n case 'reload-locales':\n commandkit.commandHandler.reloadCommands();\n break;\n }\n });\n}","import EventEmitter from 'node:events';\nimport type { AsyncFunction } from '../cache';\nimport type { CommandKit } from '../CommandKit';\nimport type { GenericFunction } from '../context/async-context';\n\nexport type ListenerFunction = GenericFunction | AsyncFunction;\n\nexport class CommandKitEventsChannel {\n private emitter = new EventEmitter();\n\n public constructor(public readonly commandkit: CommandKit) {}\n\n public to(namespace: string) {\n return {\n on: this.on.bind(this, namespace),\n off: this.off.bind(this, namespace),\n once: this.once.bind(this, namespace),\n emit: this.emit.bind(this, namespace),\n removeAllListeners: this.removeAllListeners.bind(this, namespace)\n };\n }\n\n public on(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.on(`${namespace}:${event}`, listener);\n }\n\n public off(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.off(`${namespace}:${event}`, listener);\n }\n\n public once(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.once(`${namespace}:${event}`, listener);\n }\n\n public emit(namespace: string, event: string, ...args: any[]) {\n return this.emitter.emit(`${namespace}:${event}`, ...args);\n }\n\n public removeAllListeners(namespace: string): void;\n public removeAllListeners(namespace: string, event: string): void;\n public removeAllListeners(namespace: string, event?: string): void {\n if (event) {\n this.emitter.removeAllListeners(`${namespace}:${event}`);\n } else {\n this.emitter.removeAllListeners(namespace);\n }\n }\n}","import EventEmitter from 'node:events';\nimport type { CommandKitOptions } from './types';\nimport colors from './utils/colors';\nimport { CacheProvider } from './cache/CacheProvider';\nimport { MemoryCache } from './cache/MemoryCache';\nimport { createElement, Fragment } from './components';\nimport { EventInterceptor } from './components/common/EventInterceptor';\nimport { Awaitable, Events, Locale, Message } from 'discord.js';\nimport { DefaultLocalizationStrategy } from './app/i18n/DefaultLocalizationStrategy';\nimport { findAppDirectory } from './utils/utilities';\nimport { join } from 'node:path';\nimport { AppCommandHandler } from './app/handlers/AppCommandHandler';\nimport { LocalizationStrategy } from './app/i18n/LocalizationStrategy';\nimport { CommandsRouter, EventsRouter } from './app/router';\nimport { AppEventsHandler } from './app/handlers/AppEventsHandler';\nimport { CommandKitPluginRuntime } from './plugins/runtime/CommandKitPluginRuntime';\nimport { loadConfigFile } from './config/loader';\nimport { COMMANDKIT_IS_DEV } from './utils/constants';\nimport { registerDevHooks } from './utils/dev-hooks';\nimport { writeFileSync } from 'node:fs';\nimport { CommandKitEventsChannel } from './events/CommandKitEventsChannel';\nimport { isRuntimePlugin } from './plugins';\nimport { generateTypesPackage } from './utils/types-package';\nimport { Logger } from './logger/Logger';\n\nexport interface CommandKitConfiguration {\n defaultLocale: Locale;\n localizationStrategy: LocalizationStrategy;\n getMessageCommandPrefix: (message: Message) => Awaitable<string | string[]>;\n}\n\n// @ts-ignore\nexport let commandkit: CommandKit;\n\nexport class CommandKit extends EventEmitter {\n #started = false;\n public readonly eventInterceptor: EventInterceptor;\n\n public static readonly createElement = createElement;\n public static readonly Fragment = Fragment;\n\n public readonly config: CommandKitConfiguration = {\n defaultLocale: Locale.EnglishUS,\n localizationStrategy: new DefaultLocalizationStrategy(this),\n getMessageCommandPrefix: () => '!'\n };\n\n public commandsRouter!: CommandsRouter;\n public eventsRouter!: EventsRouter;\n public readonly commandHandler = new AppCommandHandler(this);\n public readonly eventHandler = new AppEventsHandler(this);\n public readonly plugins: CommandKitPluginRuntime;\n public readonly events = new CommandKitEventsChannel(this);\n\n static instance: CommandKit | undefined = undefined;\n\n /**\n * Create a new command and event handler with CommandKit.\n *\n * @param options - The default CommandKit configuration.\n * @see {@link https://commandkit.js.org/docs/guide/commandkit-setup}\n */\n constructor(private options: CommandKitOptions) {\n if (CommandKit.instance) {\n process.emitWarning(\n 'CommandKit instance already exists. Having multiple instance in same project is discouraged and it may lead to unexpected behavior.',\n {\n code: 'MultiInstanceWarning'\n }\n );\n }\n\n if (!options.client) {\n throw new Error(\n colors.red('\"client\" is required when instantiating CommandKit.')\n );\n }\n\n if (options.validationsPath && !options.commandsPath) {\n throw new Error(\n colors.red('\"commandsPath\" is required when \"validationsPath\" is set.')\n );\n }\n\n super();\n\n options.debugCommands ??= process.env.NODE_ENV !== 'production';\n\n if (\n options.cacheProvider !== null && (\n !options.cacheProvider ||\n !(options.cacheProvider instanceof CacheProvider)))\n {\n options.cacheProvider = new MemoryCache();\n }\n\n this.eventInterceptor = new EventInterceptor(options.client);\n this.plugins = new CommandKitPluginRuntime(this);\n\n if (!CommandKit.instance) {\n CommandKit.instance = this;\n }\n\n // @ts-ignore\n commandkit = CommandKit.instance;\n }\n\n /**\n * Starts the commandkit application.\n * @param token The application token to connect to the discord gateway. If not provided, it will use the `TOKEN` or `DISCORD_TOKEN` environment variable. If set to `false`, it will not login.\n */\n async start(token?: string | false) {\n if (this.#started) return;\n\n if (COMMANDKIT_IS_DEV) {\n try {\n registerDevHooks(this);\n\n await generateTypesPackage();\n } catch (e) {\n // ignore\n if (process.env.COMMANDKIT_DEBUG_TYPEGEN) {\n Logger.error(e);\n }\n }\n }\n\n await this.loadPlugins();\n\n await this.#init();\n\n this.commandHandler.registerCommandHandler();\n this.incrementClientListenersCount();\n\n if (token !== false && !this.options.client.isReady()) {\n this.client.once(Events.ClientReady, async () => {\n await this.commandHandler.registrar.register();\n });\n\n await this.options.client.login(\n token ?? process.env.TOKEN ?? process.env.DISCORD_TOKEN\n );\n } else if (this.options.client.isReady()) {\n await this.commandHandler.registrar.register();\n }\n\n this.#started = true;\n }\n\n /**\n * Loads all the plugins.\n */\n async loadPlugins() {\n const config = await loadConfigFile();\n const plugins = config.plugins.filter((p) => isRuntimePlugin(p));\n\n if (!plugins.length) return;\n\n for (const plugin of plugins) {\n await this.plugins.softRegisterPlugin(plugin);\n }\n }\n\n /**\n * Whether or not the commandkit application has started.\n */\n get started() {\n return this.#started;\n }\n\n /**\n * Sets the prefix resolver for the command handler.\n * @param resolver The resolver function.\n */\n setPrefixResolver(\n resolver: (message: Message) => Awaitable<string | string[]>)\n {\n this.config.getMessageCommandPrefix = resolver;\n return this;\n }\n\n /**\n * Sets the default locale for the command handler.\n * @param locale The default locale.\n */\n setDefaultLocale(locale: Locale) {\n this.config.defaultLocale = locale;\n return this;\n }\n\n /**\n * Sets the localization strategy for the command handler.\n * @param strategy The localization strategy.\n */\n setLocalizationStrategy(strategy: LocalizationStrategy) {\n this.config.localizationStrategy = strategy;\n return this;\n }\n\n /**\n * Resolves the current cache provider.\n */\n getCacheProvider(): CacheProvider | null {\n const provider = this.options.cacheProvider;\n return provider ?? null;\n }\n\n /**\n * Whether or not to debug the command handler.\n */\n isDebuggingCommands() {\n return this.options.debugCommands || false;\n }\n\n /**\n * Get the client attached to this CommandKit instance.\n */\n get client() {\n return this.options.client;\n }\n\n async #init() {\n const appDir = this.getAppDirectory();\n if (!appDir) return;\n\n const commandsPath = this.getPath('commands')!;\n const events = this.getPath('events')!;\n\n this.commandsRouter = new CommandsRouter({\n entrypoint: commandsPath\n });\n\n this.eventsRouter = new EventsRouter({\n entrypoint: events\n });\n\n await this.#initEvents();\n await this.#initCommands();\n }\n\n async #initCommands() {\n if (this.commandsRouter.isValidPath()) {\n const result = await this.commandsRouter.scan();\n\n if (COMMANDKIT_IS_DEV) {\n writeFileSync(\n './.commandkit/commands.json',\n JSON.stringify(result, null, 2)\n );\n }\n }\n\n await this.commandHandler.loadCommands();\n }\n\n async #initEvents() {\n if (this.eventsRouter.isValidPath()) {\n await this.eventsRouter.scan();\n }\n\n await this.eventHandler.loadEvents();\n }\n\n /**\n * Updates application commands with the latest from \"commandsPath\".\n */\n async reloadCommands() {\n await this.commandHandler.reloadCommands();\n }\n\n /**\n * Updates application events with the latest from \"eventsPath\".\n */\n async reloadEvents() {\n await this.eventHandler.reloadEvents();\n }\n\n /**\n * @returns The path to the commands folder which was set when instantiating CommandKit.\n */\n get commandsPath(): string | undefined {\n return this.options.commandsPath;\n }\n\n /**\n * @returns The path to the events folder which was set when instantiating CommandKit.\n */\n get eventsPath(): string | undefined {\n return this.options.eventsPath;\n }\n\n /**\n * @returns The path to the validations folder which was set when instantiating CommandKit.\n */\n get validationsPath(): string | undefined {\n return this.options.validationsPath;\n }\n\n /**\n * @returns An array of all the developer user IDs which was set when instantiating CommandKit.\n */\n get devUserIds(): string[] {\n return this.options.devUserIds || [];\n }\n\n /**\n * @returns An array of all the developer guild IDs which was set when instantiating CommandKit.\n */\n get devGuildIds(): string[] {\n return this.options.devGuildIds || [];\n }\n\n /**\n * @returns An array of all the developer role IDs which was set when instantiating CommandKit.\n */\n get devRoleIds(): string[] {\n return this.options.devRoleIds || [];\n }\n\n /**\n * Increment the client listeners count.\n */\n incrementClientListenersCount() {\n this.options.client.setMaxListeners(\n this.options.client.getMaxListeners() + 1\n );\n }\n\n /**\n * Decrement the client listeners count.\n */\n decrementClientListenersCount() {\n this.options.client.setMaxListeners(\n this.options.client.getMaxListeners() - 1\n );\n }\n\n /**\n * Path to the app directory. Returns `null` if not found.\n * The lookup order is:\n * - `./app`\n * - `./src/app`\n */\n getAppDirectory() {\n return findAppDirectory();\n }\n\n getPath(to: 'locales' | 'commands' | 'events') {\n const appDir = this.getAppDirectory();\n if (!appDir) return null;\n\n switch (to) {\n case 'locales':\n return join(appDir, 'locales');\n case 'commands':\n return join(appDir, 'commands');\n case 'events':\n return join(appDir, 'events');\n default:\n return to satisfies never;\n }\n }\n}","\n\n\n\n\n/**\n * The current version of CommandKit.\n */\nexport const version: string = /* @__MACRO__ $version */\"0.1.11-dev.20250328085113\";","import { join } from 'node:path';\n\nexport function DevEnv() {\n return Object.assign({}, process.env, {\n NODE_ENV: 'development',\n COMMANDKIT_IS_DEV: 'true'\n });\n}\n\nexport function ProdEnv() {\n return Object.assign({}, process.env, {\n NODE_ENV: 'production',\n COMMANDKIT_IS_DEV: 'false'\n });\n}\n\nexport const CommonEnvFiles = ['.env'];\nexport const DevEnvFiles = [\n'.env.development',\n'.env.development.local',\n'.env.local'];\n\nexport const ProdEnvFiles = [\n'.env.production',\n'.env.production.local',\n'.env.local'];\n\n\nexport const devEnvFileArgs = [...CommonEnvFiles, ...DevEnvFiles];\n\nexport const prodEnvFileArgs = [...CommonEnvFiles, ...ProdEnvFiles];","import { IOType, spawn } from 'node:child_process';\nimport { DevEnv } from './env';\nimport { join } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { panic } from './common';\n\nfunction getStdio(supportsCommands: boolean) {\n if (supportsCommands) {\n return ['pipe', 'pipe', 'pipe', 'ipc'];\n }\n\n return ['pipe', 'pipe', 'pipe'];\n}\n\nexport function createAppProcess(\nfileName: string,\ncwd: string,\nisDev: boolean)\n{\n if (!existsSync(join(cwd, fileName))) {\n panic(`Could not locate the entrypoint file: ${fileName}`);\n }\n\n const stdio = getStdio(isDev) as IOType[];\n\n const ps = spawn(\n 'node',\n [\n `--title=\"CommandKit ${isDev ? 'Development' : 'Production'}\"`,\n '--enable-source-maps',\n fileName],\n\n {\n cwd,\n windowsHide: true,\n env: DevEnv(),\n stdio\n }\n );\n\n ps.stdout?.pipe(process.stdout);\n ps.stderr?.pipe(process.stderr);\n\n return ps;\n}","import { build } from 'tsup';\nimport {\n CompilerPlugin,\n CompilerPluginRuntime,\n fromEsbuildPlugin } from\n'../plugins';\nimport { loadConfigFile } from '../config/loader';\nimport { writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { devEnvFileArgs, prodEnvFileArgs } from './env';\nimport { rimraf } from 'rimraf';\n\nexport interface ApplicationBuildOptions {\n plugins?: CompilerPlugin[];\n esbuildPlugins?: any[];\n isDev?: boolean;\n configPath?: string;\n}\n\nexport async function buildApplication({\n plugins,\n esbuildPlugins,\n isDev,\n configPath\n}: ApplicationBuildOptions) {\n const config = await loadConfigFile(configPath);\n const pluginRuntime = new CompilerPluginRuntime(plugins || []);\n const esbuildPluginList: any[] = pluginRuntime.isEmpty() ?\n [] :\n [pluginRuntime.toEsbuildPlugin()];\n\n if (esbuildPlugins?.length) {\n esbuildPluginList.push(...esbuildPlugins.map(fromEsbuildPlugin));\n }\n\n try {\n const dest = isDev ? '.commandkit' : config.distDir;\n\n // Clean the destination directory\n await rimraf(dest);\n\n await build({\n esbuildPlugins: esbuildPluginList,\n watch: false,\n banner: {\n js: !isDev ?\n '/* Optimized production build generated by commandkit */' :\n ''\n },\n cjsInterop: true,\n dts: false,\n clean: true,\n format: ['esm'],\n shims: true,\n keepNames: true,\n minify: false,\n jsxFactory: 'CommandKit.createElement',\n jsxFragment: 'CommandKit.Fragment',\n minifyIdentifiers: false,\n minifySyntax: false,\n silent: !!isDev,\n splitting: true,\n skipNodeModulesBundle: true,\n name: 'CommandKit',\n sourcemap: true,\n target: 'node16',\n outDir: dest,\n entry: [\n 'src',\n `!${config.distDir}`,\n '!.commandkit',\n '!**/*.test.*',\n '!**/*.spec.*']\n\n });\n\n await injectEntryFile(configPath || process.cwd(), !!isDev, config.distDir);\n } catch (error) {\n console.error('Build failed:', error);\n if (error instanceof Error) {\n console.error('Error details:', error.stack);\n }\n process.exit(1); // Force exit on error\n } finally {\n // Ensure plugins are cleaned up\n await pluginRuntime.cleanup();\n }\n}\n\nconst envScript = (dev: boolean) => `// --- Environment Variables Loader ---\nconst $env = [${(dev ? devEnvFileArgs : prodEnvFileArgs).map((p) => `\"${p}\"`).join(', ')}];\nfor (const file of $env) {\n try {\n process.loadEnvFile(file);\n console.log('\\\\x1b[36m✔ Loaded \\\\x1b[0m\\\\x1b[33m%s\\\\x1b[0m', file);\n } catch {}\n}\n`;\n\nconst requireScript = [\n'// --- CommandKit require() polyfill ---',\n' if (typeof require === \"undefined\") {',\n' const { createRequire } = await import(\"node:module\");',\n' const __require = createRequire(import.meta.url);',\n' Object.defineProperty(globalThis, \"require\", {',\n' value: (id) => {',\n' return __require(id);',\n' },',\n' configurable: true,',\n' enumerable: false,',\n' writable: true,',\n' });',\n' }',\n'// --- CommandKit require() polyfill ---'].\njoin('\\n');\n\nconst antiCrashScript = [\n'// --- CommandKit Anti-Crash Monitor ---',\n\" // 'uncaughtException' event is supposed to be used to perform synchronous cleanup before shutting down the process\",\n' // instead of using it as a means to resume operation.',\n' // But it exists here due to compatibility reasons with discord bot ecosystem.',\n\" const p = (t) => `\\\\x1b[31m${t}\\\\x1b[0m`, b = '[CommandKit Anti-Crash Monitor]', l = console.log, e1 = 'uncaughtException', e2 = 'unhandledRejection';\",\n' if (!process.eventNames().includes(e1)) // skip if it is already handled',\n' process.on(e1, (e) => {',\n' l(p(`${b} Uncaught Exception`)); l(p(b), p(e.stack || e));',\n' })',\n' if (!process.eventNames().includes(e2)) // skip if it is already handled',\n' process.on(e2, (r) => {',\n' l(p(`${b} Unhandled promise rejection`)); l(p(`${b} ${r.stack || r}`));',\n' });',\n'// --- CommandKit Anti-Crash Monitor ---'].\njoin('\\n');\n\nconst wrapInAsyncIIFE = (code: string[]) =>\n`;await (async () => {\\n${code.join('\\n\\n')}\\n})();`;\n\nasync function injectEntryFile(\nconfigPath: string,\nisDev: boolean,\ndistDir?: string)\n{\n const code = `/* Entrypoint File Generated By CommandKit */\n${isDev ? `\\n\\n// Injected for development\\n${wrapInAsyncIIFE([envScript(isDev), antiCrashScript, requireScript])}\\n\\n` : wrapInAsyncIIFE([envScript(isDev), requireScript])}\n\nimport { CommandKit } from 'commandkit';\nimport app from './app.js';\n\nasync function main() {\n const commandkit = new CommandKit({\n client: app,\n });\n\n await commandkit.start();\n}\n\nawait main();\n`;\n\n const dist = isDev ? '.commandkit' : distDir || 'dist';\n\n await writeFile(join(configPath, dist, 'index.js'), code);\n}","import { join } from 'path';\nimport { loadConfigFile } from '../config/loader';\nimport { isCompilerPlugin } from '../plugins';\nimport { createAppProcess } from './app-process';\nimport { buildApplication } from './build';\nimport { watch } from 'chokidar';\nimport { readdirSync } from 'node:fs';\nimport { debounce } from '../utils/utilities';\nimport colors from '../utils/colors';\nimport { ChildProcess } from 'node:child_process';\n\nasync function buildAndStart(configPath: string, skipStart = false) {\n const config = await loadConfigFile(configPath);\n const mainFile = join('.commandkit', 'index.js');\n\n await buildApplication({\n configPath,\n isDev: true,\n plugins: config.plugins.filter((p) => isCompilerPlugin(p)),\n esbuildPlugins: config.esbuildPlugins\n });\n\n if (skipStart) return null as never;\n\n const ps = createAppProcess(mainFile, configPath, true);\n\n ps.on('message', (message) => {\n console.log(`Received message from child process: ${message}`);\n });\n\n return ps;\n}\n\nconst isCommandSource = (p: string) =>\np.replaceAll('\\\\', '/').includes('src/app/commands');\n\nconst isEventSource = (p: string) =>\np.replaceAll('\\\\', '/').includes('src/app/events');\n\nconst isLocaleSource = (p: string) =>\np.replaceAll('\\\\', '/').includes('src/app/locales');\n\nexport async function bootstrapDevelopmentServer(configPath?: string) {\n const start = performance.now();\n const cwd = configPath || process.cwd();\n\n const watcher = watch([join(cwd, 'src')], {\n ignoreInitial: true\n });\n\n let ps: ChildProcess | null = null;\n\n const performHMR = debounce(async (path?: string): Promise<boolean> => {\n if (!path || !ps) return false;\n if (!ps.send) return false;\n\n if (isCommandSource(path)) {\n console.log(\n `${colors.cyanBright('Reloading command(s) at ')} ${colors.yellowBright(path)}`\n );\n await buildAndStart(cwd, true);\n ps.send({ event: 'reload-commands', path });\n return true;\n }\n\n if (isEventSource(path)) {\n console.log(\n `${colors.cyanBright('Reloading event(s) at ')} ${colors.yellowBright(path)}`\n );\n await buildAndStart(cwd, true);\n ps.send({ event: 'reload-events', path });\n return true;\n }\n\n if (isLocaleSource(path)) {\n console.log(\n `${colors.cyanBright('Reloading locale(s) at ')} ${colors.yellowBright(path)}`\n );\n await buildAndStart(cwd, true);\n ps.send({ event: 'reload-locales', path });\n return true;\n }\n\n return false;\n }, 300);\n\n const hmrHandler = async (path: string) => {\n const hmr = await performHMR(path);\n if (hmr) return;\n\n console.log(\n `${colors.yellowBright('⚡️ Performing full restart due to the changes in')} ${colors.cyanBright(path)}`\n );\n\n ps?.kill();\n\n ps = await buildAndStart(cwd);\n };\n\n process.stdin.on('data', async (d) => {\n const command = d.toString().trim();\n\n switch (command) {\n case 'r':\n console.log(`Received restart command, restarting...`);\n ps?.kill();\n ps = null;\n await buildAndStart(cwd);\n break;\n case 'rc':\n console.log(`Received reload commands command, reloading...`);\n ps?.send({ event: 'reload-commands' });\n break;\n case 're':\n console.log(`Received reload events command, reloading...`);\n ps?.send({ event: 'reload-events' });\n break;\n case 'rl':\n console.log(`Received reload locales command, reloading...`);\n ps?.send({ event: 'reload-locales' });\n break;\n }\n });\n\n watcher.on('change', hmrHandler);\n watcher.on('add', hmrHandler);\n watcher.on('unlink', hmrHandler);\n watcher.on('unlinkDir', hmrHandler);\n watcher.on('error', (e) => {\n console.error(e);\n });\n\n ps = await buildAndStart(cwd);\n\n const end = performance.now();\n\n console.log(\n `${colors.greenBright('Development server started in')} ${colors.yellowBright(`${(end - start).toFixed(2)}ms`)}\n${colors.greenBright('Watching for changes in')} ${colors.yellowBright('src')} ${colors.greenBright('directory')}\n\n${colors.greenBright('Commands:')}\n${colors.yellowBright('r')} - Restart the server\n${colors.yellowBright('rc')} - Reload all commands\n${colors.yellowBright('re')} - Reload all events\n${colors.yellowBright('rl')} - Reload all locales`\n );\n}","import type { Ora } from 'ora';\n\nlet ora: typeof import('ora') | undefined;\n\nexport async function createSpinner(text: string): Promise<Ora> {\n if (!ora) {\n ora = await import('ora');\n }\n\n return (ora.default || ora)({\n text,\n color: 'cyan'\n });\n}","import { join } from 'path';\nimport { loadConfigFile } from '../config/loader';\nimport { createAppProcess } from './app-process';\nimport { existsSync } from 'fs';\nimport { panic } from './common';\nimport { buildApplication } from './build';\nimport { isCompilerPlugin } from '../plugins';\nimport { createSpinner } from './utils';\n\nexport async function bootstrapProductionServer(configPath?: string) {\n const cwd = configPath || process.cwd();\n const config = await loadConfigFile(cwd);\n const mainFile = join(config.distDir, 'index.js');\n\n if (!existsSync(mainFile)) {\n panic(\n `Could not locate the entrypoint. Did you forget to build the application? Run 'commandkit build' to build the application first.`\n );\n }\n\n return createAppProcess(mainFile, cwd, true);\n}\n\nexport async function createProductionBuild(configPath?: string) {\n const cwd = configPath || process.cwd();\n const config = await loadConfigFile(cwd);\n\n const spinner = await createSpinner('Creating an optimized production build');\n\n spinner.start();\n\n await buildApplication({\n configPath: cwd,\n isDev: false,\n plugins: config.plugins.filter((p) => isCompilerPlugin(p)),\n esbuildPlugins: config.esbuildPlugins\n });\n\n spinner.succeed('Production build completed!');\n}","import { mkdir, writeFile, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport { Locale } from 'discord.js';\nimport { panic } from './common';\nimport { existsSync } from 'fs';\nimport colors from '../utils/colors';\n\nconst BASE_PATH = process.cwd();\nconst COMMANDS_DIR = join(BASE_PATH, 'src/app/commands');\nconst EVENTS_DIR = join(BASE_PATH, 'src/app/events');\nconst LOCALES_DIR = join(BASE_PATH, 'src/app/locales');\n\nconst formatPath = (path: string) =>\npath.replace(process.cwd(), '.').replace(/\\\\/g, '/');\n\nexport async function generateCommand(name: string, customPath?: string) {\n const cmdPath = join(customPath || COMMANDS_DIR, name);\n if (!existsSync(cmdPath)) await mkdir(cmdPath, { recursive: true });\n\n if (existsSync(join(cmdPath, 'command.ts'))) {\n panic(`Command ${name} already exists.`);\n }\n\n const commandFile = `\nimport type { CommandData, SlashCommand, MessageCommand } from 'commandkit';\n\nexport const command: CommandData = {\n name: '${name}',\n description: '${name} command',\n};\n\nexport const chatInput: SlashCommand = async (ctx) => {\n await ctx.interaction.reply('Hello from ${name}!');\n};\n\nexport const message: MessageCommand = async (ctx) => {\n await ctx.message.reply('Hello from ${name}!');\n};\n`.trim();\n\n await writeFile(join(cmdPath, 'command.ts'), commandFile);\n\n console.log(\n colors.green(\n `Command ${colors.magenta(name)} created at ${colors.blue(formatPath(cmdPath))}/command.ts`\n )\n );\n}\n\nexport async function generateEvent(name: string, customPath?: string) {\n const eventPath = join(customPath || EVENTS_DIR, name);\n if (!existsSync(eventPath)) await mkdir(eventPath, { recursive: true });\n\n let filename = 'event.ts';\n if (existsSync(join(eventPath, filename))) {\n const count = (await readdir(eventPath)).length;\n filename = `${String(count).padStart(2, '0')}_${filename}`;\n }\n\n const eventFile = `\nexport default async function on${name[0].toUpperCase() + name.slice(1)}() {\n console.log('${name} event fired!');\n};\n`.trim();\n\n await writeFile(join(eventPath, filename), eventFile);\n\n console.log(\n colors.green(\n `Event ${colors.magenta(name)} created at ${colors.blue(formatPath(eventPath))}/${colors.magenta(filename)}`\n )\n );\n}\n\nexport async function generateLocale(\nlocale: keyof typeof Locale,\ncommandName: string,\ncustomPath?: string)\n{\n const localeNames = Object.fromEntries(\n Object.entries(Locale).map(([k, v]) => [v, k])\n );\n\n if (!localeNames[locale]) {\n panic(`Invalid locale: ${locale}`);\n }\n\n if (!commandName) {\n panic('Command name is required.');\n }\n\n const localePath = join(customPath || LOCALES_DIR, locale);\n\n if (!existsSync(localePath)) await mkdir(localePath, { recursive: true });\n\n if (existsSync(join(localePath, `${commandName}.json`))) {\n panic(`Locale file for ${commandName} already exists.`);\n }\n\n const localeFile = {\n command: {\n name: `${commandName}`,\n description: `${commandName} command`\n },\n translations: {}\n };\n\n await writeFile(\n join(localePath, `${commandName}.json`),\n JSON.stringify(localeFile, null, 2)\n );\n\n console.log(\n colors.green(\n `Locale file for ${colors.magenta(commandName)} created at ${colors.blue(\n formatPath(localePath)\n )}/${colors.magenta(`${commandName}.json`)}`\n )\n );\n}","import { CommandKit } from './CommandKit';\n\nexport default CommandKit;\n\nexport * from './CommandKit';\nexport * from './components';\nexport * from './config/config';\nexport * from './context/async-context';\nexport * from './context/environment';\nexport * from './cache/index';\nexport * from './app/index';\nexport * from './logger/DefaultLogger';\nexport * from './logger/ILogger';\nexport * from './logger/Logger';\nexport * from './app/router/index';\nexport type * from './types';\nexport * from './version';\nexport * from './plugins/index';\n\n// cli\nexport { bootstrapCommandkitCLI } from './cli/init';","export * from './handlers/AppCommandHandler';\nexport * from './commands/Context';\nexport * from './commands/MessageCommandParser';\nexport * from './i18n/DefaultLocalizationStrategy';\nexport * from './i18n/Localization';\nexport * from './i18n/LocalizationStrategy';\nexport * from './i18n/Translation';\nexport * from './middleware/signals';","import type { Locale } from 'discord.js';\nimport type { Translation } from './Translation';\n\nexport interface LocalizationTranslationRequest {\n locale: Locale;\n scope: string;\n key: string;\n args?: Record<string, any> | undefined;\n}\n\nexport type TranslationResult = string;\n\nexport interface LocalizationStrategy {\n locateTranslation(scope: string, locale: Locale): Promise<Translation | null>;\n getTranslation(scope: string, locale: Locale): Promise<Translation | null>;\n getTranslationStrict(scope: string, locale: Locale): Promise<Translation>;\n translate(\n request: LocalizationTranslationRequest)\n : Promise<TranslationResult>;\n}","import type { LocalizationMap } from 'discord.js';\n\nexport interface TranslatableCommand {\n name?: string;\n description?: string;\n options?: TranslatableCommandOptions[];\n}\n\nexport interface TranslatableCommandOptions {\n ref: string;\n name?: string;\n description?: string;\n options?: TranslatableCommandOptions[];\n}\n\nexport interface ApiTranslatableCommandOptions extends\n TranslatableCommandOptions {\n name_localizations?: LocalizationMap;\n description_localizations?: LocalizationMap;\n}\n\n// Define command-specific type structure\nexport interface CommandLocalizationTypeData {\n [key: string]: Record<string, string | null>;\n}\n\nexport type TranslatableCommandName = string & {};\n\nexport interface Translation {\n command: TranslatableCommand;\n translations: Record<string, string>;\n}\n\n// Improved type definition for TranslatableArguments\nexport type TranslatableArguments<T extends TranslatableCommandName> =\nT extends TranslatableCommandName ?\nCommandLocalizationTypeData[T] extends Record<string, infer ArgType> ?\nArgType extends null ?\nnever :\nRecord<string, string> :\nRecord<string, string> :\nRecord<string, string>;","export interface ILogger {\n log(...args: any[]): void;\n error(...args: any[]): void;\n warn(...args: any[]): void;\n info(...args: any[]): void;\n debug(...args: any[]): void;\n}","import { existsSync } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\n\n/**\n * Creates a command line interface for CommandKit.\n * @param argv The arguments passed to the CLI.\n * @param options The options passed to the CLI.\n */\nexport async function bootstrapCommandkitCLI(\nargv: string[],\noptions?: import('commander').ParseOptions | undefined)\n{\n process.title = 'CommandKit CLI';\n\n // imports are lazily loaded when the cli is used, instead of loading it with the lib itself\n const { Command } = await import('commander');\n const { bootstrapDevelopmentServer } = await import('./development');\n const { bootstrapProductionServer, createProductionBuild } = await import(\n './production'\n );\n const { generateCommand, generateEvent, generateLocale } = await import(\n './generators'\n );\n const { version } = await import('../version');\n\n const program = new Command('commandkit');\n\n program.\n command('dev').\n version(version).\n description('Start your bot in development mode.').\n option(\n '-c, --config [path]',\n 'Path to your commandkit config file.',\n './commandkit.js'\n ).\n action(() => {\n const options = program.opts();\n bootstrapDevelopmentServer(options.config);\n });\n\n program.\n command('start').\n description(\n 'Start your bot in production mode after running the build command.'\n ).\n option('-c, --config [path]', 'Path to your commandkit.json file.').\n action(() => {\n const options = program.opts();\n bootstrapProductionServer(options.config);\n });\n\n program.\n command('build').\n description('Build your project for production usage.').\n option('-c, --config [path]', 'Path to your commandkit.json file.').\n action(() => {\n const options = program.opts();\n return createProductionBuild(options.config);\n });\n\n program.\n command('create').\n description('Create new commands, events, or locale files').\n option('-c, --command', 'Create a new command').\n option('-e, --event', 'Create a new event').\n option(\n '-l, --locale <locale>',\n 'Specify the locale code (e.g. nl, es, fr)'\n ).\n argument('<name>', 'The name of the command or event').\n action(async (name, options) => {\n if (options.command) {\n await generateCommand(name);\n } else if (options.event) {\n await generateEvent(name);\n } else if (options.locale) {\n if (!name) {\n console.error('Please specify a command name for the locale file');\n return;\n }\n await generateLocale(options.locale, name);\n } else {\n console.error(\n 'Please specify what to create: --command, --event, or --locale'\n );\n }\n });\n\n await program.parseAsync(argv, options);\n\n const types = join(process.cwd(), 'node_modules', 'commandkit-types');\n\n if (!existsSync(types)) {\n await mkdir(types, { recursive: true }).catch(() => {});\n }\n}"],"mappings":"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","names":["import_discord","import_discord","myCustomId","import_discord","import_discord","_contextData","_unsub","getEventInterceptor_fn","destroyCollector_fn","import_discord","init_types","t","context","options","import_discord","commandkit","build","init_types","init_types","_traverse","_generate","path","_a","import_promises","commandkit","path","ms","import_node_fs","import_node_path","path","import_discord","parser","import_discord","commandkit","commandkit","CommandKitEnvironmentType","commandkit","commandkit","ms","context","import_node_async_hooks","import_node_crypto","init_cache","init_cache","commandkit","parser","import_discord","commandkit","fn","env","ctx","import_promises","import_node_path","import_node_fs","import_discord","commandkit","parser","_a","commandId","loadedCommand","opt","import_node_fs","import_promises","import_node_path","path","import_node_fs","import_promises","import_node_path","path","commandkit","fs","import_node_path","import_node_fs","import_node_fs","import_node_path","commandkit","path","commandkit","EventEmitter","import_node_events","import_discord","import_node_path","import_node_fs","EventEmitter","appDir","import_node_path","import_node_fs","import_promises","import_node_path","import_rimraf","path","import_path","import_path","import_promises","import_path","import_discord","import_fs","path","init_cache","import_node_fs","import_promises","import_node_path","bootstrapDevelopmentServer","bootstrapProductionServer","createProductionBuild","generateCommand","generateEvent","generateLocale","version","options"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.4.0_jiti@1.21.7_postcss@8.5.3_tsx@4.19.2_typescript@5.7.3_yaml@2.7.0/node_modules/tsup/assets/cjs_shims.js","../src/utils/colors.ts","../src/cache/CacheProvider.ts","../src/cache/MemoryCache.ts","../src/components/action-row/ActionRow.ts","../src/utils/error-codes.ts","../src/context/async-context.ts","../src/components/button/ButtonKit.ts","../src/components/button/Button.ts","../src/components/modal/ModalKit.ts","../src/components/modal/Modal.ts","../src/utils/warn-unstable.ts","../src/components/common/element.ts","../src/components/common/types.ts","../src/components/common/EventInterceptor.ts","../src/components/index.ts","../src/plugins/PluginCommon.ts","../src/plugins/CompilerPlugin.ts","../src/plugins/RuntimePlugin.ts","../src/plugins/types.ts","../src/logger/DefaultLogger.ts","../src/logger/Logger.ts","../src/plugins/runtime/CommandKitPluginRuntime.ts","../src/plugins/runtime/CompilerPluginRuntime.ts","../src/plugins/runtime/types.ts","../src/plugins/runtime/runtime.ts","../src/plugins/index.ts","../src/plugins/runtime/builtin/cache/UseCacheTransformer.ts","../src/plugins/runtime/builtin/cache/CachePlugin.ts","../src/plugins/runtime/builtin/MacroPlugin.ts","../src/config/default.ts","../src/config/config.ts","../src/utils/constants.ts","../src/app/i18n/DefaultLocalizationStrategy.ts","../src/utils/utilities.ts","../src/utils/resolve-file-url.ts","../src/app/commands/MessageCommandParser.ts","../src/app/register/CommandRegistrar.ts","../src/context/environment.ts","../src/app/i18n/Localization.ts","../src/app/middleware/signals.ts","../src/cache/cache.ts","../src/cache/index.ts","../src/app/commands/Context.ts","../src/app/commands/AppCommandRunner.ts","../src/utils/types-package.ts","../src/app/handlers/AppCommandHandler.ts","../src/app/router/CommandsRouter.ts","../src/app/router/EventsRouter.ts","../src/app/router/index.ts","../src/app/handlers/AppEventsHandler.ts","../src/cli/common.ts","../src/config/loader.ts","../src/utils/dev-hooks.ts","../src/events/CommandKitEventsChannel.ts","../src/CommandKit.ts","../src/version.ts","../src/cli/env.ts","../src/cli/app-process.ts","../src/cli/build.ts","../src/cli/development.ts","../src/cli/utils.ts","../src/cli/production.ts","../src/cli/generators.ts","../src/index.ts","../src/app/index.ts","../src/app/i18n/LocalizationStrategy.ts","../src/app/i18n/Translation.ts","../src/app/commands/helpers.ts","../src/logger/ILogger.ts","../src/cli/init.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\ntypeof document === 'undefined' ?\nnew URL(`file:${__filename}`).href :\ndocument.currentScript && document.currentScript.src ||\nnew URL('main.js', document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */getImportMetaUrl();","import { createColors } from 'picocolors';\n\nexport default createColors(true);","export interface CacheEntry<T = unknown> {\n value: T;\n ttl?: number;\n}\n\nexport abstract class CacheProvider {\n abstract get<T>(key: string): Promise<CacheEntry<T> | undefined>;\n abstract set<T>(key: string, value: T, ttl?: number): Promise<void>;\n abstract exists(key: string): Promise<boolean>;\n abstract delete(key: string): Promise<void>;\n abstract clear(): Promise<void>;\n abstract expire(key: string, ttl: number): Promise<void>;\n}","import { CacheEntry, CacheProvider } from './CacheProvider';\n\nexport class MemoryCache extends CacheProvider {\n #cache = new Map<string, CacheEntry>();\n\n public async get<T>(key: string): Promise<CacheEntry<T> | undefined> {\n const entry = this.#cache.get(key);\n\n if (!entry) {\n return undefined;\n }\n\n if (entry.ttl && Date.now() > entry.ttl) {\n this.#cache.delete(key);\n return undefined;\n }\n\n return entry as CacheEntry<T>;\n }\n\n public async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n const entry: CacheEntry<T> = {\n value,\n ttl: ttl != null ? Date.now() + ttl : undefined\n };\n\n this.#cache.set(key, entry);\n }\n\n public async exists(key: string): Promise<boolean> {\n return this.#cache.has(key);\n }\n\n public async delete(key: string): Promise<void> {\n this.#cache.delete(key);\n }\n\n public async clear(): Promise<void> {\n this.#cache.clear();\n }\n\n public async expire(key: string, ttl: number): Promise<void> {\n const entry = this.#cache.get(key);\n\n if (!entry) return;\n\n const _ttl = Date.now() + ttl;\n\n // delete if _ttl is in the past\n if (_ttl < Date.now()) {\n this.#cache.delete(key);\n return;\n }\n\n entry.ttl = _ttl;\n }\n}","import { ActionRowBuilder } from 'discord.js';\nimport { AnyCommandKitElement, CommandKitElement } from '../common/element';\n\nexport interface ActionRowProps {\n children?: AnyCommandKitElement[] | AnyCommandKitElement;\n}\n\n/**\n * The action row component.\n * @param props The action row properties.\n * @returns The commandkit element.\n * @example <ActionRow><Button label=\"Click me\" style={ButtonStyle.Primary} customId=\"click_me\" /></ActionRow>\n */\nexport function ActionRow(\nprops: ActionRowProps)\n: CommandKitElement<'action-row'> {\n const row = new ActionRowBuilder();\n\n if (Array.isArray(props.children)) {\n // @ts-ignore\n row.setComponents(...props.children);\n } else if (props.children) {\n // @ts-ignore\n row.setComponents(props.children);\n }\n\n return row;\n}","export const CommandKitErrorCodes = {\n ExitMiddleware: Symbol('kExitMiddleware'),\n ForwardedCommand: Symbol('kForwardedCommand'),\n InvalidCommandPrefix: Symbol('kInvalidCommandPrefix'),\n PluginCaptureHandle: Symbol('kPluginCaptureHandle')\n} as const;\n\nexport type CommandKitError = Error & {code: symbol;};\n\nexport function createCommandKitError(code: symbol): CommandKitError {\n const error = new Error() as CommandKitError;\n\n Reflect.set(error, 'code', code);\n\n return error;\n}\n\nexport function isCommandKitError(error: unknown): error is CommandKitError {\n if (!(error instanceof Error)) return false;\n const code = Reflect.get(error, 'code');\n\n for (const key in CommandKitErrorCodes) {\n if (CommandKitErrorCodes[key as keyof typeof CommandKitErrorCodes] === code)\n return true;\n }\n\n return false;\n}\n\nexport function isErrorType(error: unknown, code: symbol | symbol[]): boolean {\n if (!isCommandKitError(error)) return false;\n const errorCode = Reflect.get(error, 'code');\n\n if (!errorCode) return false;\n\n if (Array.isArray(code)) return code.includes(errorCode);\n\n return errorCode === code;\n}","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { CommandKitEnvironment } from './environment';\nimport { CommandKit } from '../CommandKit';\nimport { isCommandKitError } from '../utils/error-codes';\n\nconst context = new AsyncLocalStorage<CommandKitEnvironment>();\n\nexport type GenericFunction<A extends any[] = any[]> = (...args: A) => any;\n\nexport function exitContext<T>(fn: () => T): T {\n return context.exit(fn);\n}\n\nexport function provideContext<R>(\nvalue: CommandKitEnvironment,\nreceiver: () => R)\n: R {\n return context.run(value, receiver);\n}\n\n/**\n * Returns a context-aware version of the given function.\n * @param env - The commandkit environment data.\n * @param fn - The target function.\n * @param finalizer - An optional finalizer function to run after the target function. This function will be context-aware.\n * @internal\n */\nexport function makeContextAwareFunction<\n R extends GenericFunction,\n F extends GenericFunction>(\nenv: CommandKitEnvironment, fn: R, finalizer?: F): R {\n const _fn = (...args: any[]) => {\n return provideContext(env, async () => {\n try {\n // execute the target function\n const result = await fn(...args);\n\n return result;\n } catch (e) {\n if (!isCommandKitError(e)) {\n env.setExecutionError(e as Error);\n }\n } finally {\n if (typeof finalizer === 'function') {\n // execute the finalizer function\n try {\n await finalizer(...args);\n } catch {\n\n // no-op\n }}\n }\n });\n };\n\n return _fn as R;\n}\n\n/**\n * Retrieves commandkit\n * @private\n * @internal\n */\nexport function getCommandKit(): CommandKit | undefined;\nexport function getCommandKit(strict: true): CommandKit;\nexport function getCommandKit(strict: false): CommandKit | undefined;\nexport function getCommandKit(strict = false): CommandKit | undefined {\n const kit = context.getStore()?.commandkit ?? CommandKit.instance;\n\n if (!kit && strict) {\n throw new Error('CommandKit instance not found.');\n }\n\n return kit;\n}\n\n/**\n * Get the current commandkit context.\n * @internal\n */\nexport function getContext(): CommandKitEnvironment | undefined {\n const ctx = context.getStore();\n return ctx;\n}\n\n/**\n * Use current commandkit context. Throws an error if no context is found.\n */\nexport function useEnvironment(): CommandKitEnvironment {\n const ctx = context.getStore();\n if (!ctx) {\n throw new Error(\n 'No commandkit environment found. Please make sure you are inside commandkit handler.'\n );\n }\n\n return ctx;\n}","import {\n type Awaitable,\n type ButtonInteraction,\n ButtonStyle,\n ButtonBuilder,\n Events } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../context/async-context';\nimport {\n EventInterceptorContextData,\n EventInterceptorErrorHandler } from\n'../common/EventInterceptor';\n\nexport type ButtonKitPredicate = (\ninteraction: ButtonInteraction)\n=> Awaitable<boolean>;\n\n/**\n * The handler to run when a button is clicked. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type OnButtonKitClick =\nCommandKitButtonBuilderInteractionCollectorDispatch;\n\n/**\n * The handler to run when the interaction collector ends. This handler is called with the reason as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type OnButtonKitEnd = CommandKitButtonBuilderOnEnd;\n\n/**\n * The handler to run when a button is clicked. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type CommandKitButtonBuilderInteractionCollectorDispatch = (\ninteraction: ButtonInteraction,\ncontext: ButtonKit)\n=> Awaitable<void>;\n\nexport type CommandKitButtonBuilderOnEnd = (reason: string) => Awaitable<void>;\n\nexport type CommandKitButtonBuilderInteractionCollectorDispatchContextData =\nEventInterceptorContextData<Events.InteractionCreate>;\n\nexport class ButtonKit extends ButtonBuilder {\n #onClickHandler: CommandKitButtonBuilderInteractionCollectorDispatch | null =\n null;\n #contextData: CommandKitButtonBuilderInteractionCollectorDispatchContextData | null =\n {\n autoReset: true,\n time: 5 * 60 * 1000,\n once: false\n };\n #unsub: (() => void) | null = null;\n\n #getEventInterceptor() {\n const ctx = getContext();\n if (!ctx) return getCommandKit(true).eventInterceptor;\n\n return exitContext(() => ctx.commandkit.eventInterceptor);\n }\n\n /**\n * Sets up an inline interaction collector for this button. This collector by default allows as many interactions as possible if it is actively used.\n * If unused, this expires after 24 hours or custom time if specified.\n * @param handler The handler to run when the button is clicked\n * @param data The context data to use for the interaction collector\n * @returns This button\n * @example\n * ```ts\n * const button = new ButtonKit()\n * .setLabel('Click me')\n * .setStyle(ButtonStyle.Primary)\n * .setCustomId('click_me')\n * .filter((interaction) => interaction.user.id === '1234567890')\n * .onClick(async (interaction) => {\n * await interaction.reply('You clicked me!');\n * });\n *\n * const row = new ActionRowBuilder().addComponents(button);\n *\n * const message = await channel.send({ content: 'Click the button', components: [row] });\n *\n * // Remove onClick handler and destroy the interaction collector\n * button.onClick(null);\n * ```\n */\n public onClick(\n handler: CommandKitButtonBuilderInteractionCollectorDispatch,\n data?: CommandKitButtonBuilderInteractionCollectorDispatchContextData)\n : this {\n if (this.data.style === ButtonStyle.Link) {\n throw new TypeError('Cannot setup \"onClick\" handler on link buttons.');\n }\n\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onClickHandler) {\n this.#destroyCollector();\n }\n\n this.#onClickHandler = handler;\n if (data) {\n this.#contextData = {\n autoReset: data.autoReset ?? this.#contextData?.autoReset ?? true,\n time: data.time ?? this.#contextData?.time ?? 5 * 60 * 1000,\n filter: data.filter ?? this.#contextData?.filter,\n onEnd: data.onEnd ?? this.#contextData?.onEnd\n };\n }\n\n this.#setupInteractionCollector();\n\n return this;\n }\n\n public onEnd(handler: CommandKitButtonBuilderOnEnd): this {\n if (this.data.style === ButtonStyle.Link) {\n throw new TypeError('Cannot setup \"onEnd\" handler on link buttons.');\n }\n\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onEnd\" without a handler function parameter.'\n );\n }\n\n this.#contextData ??= {};\n this.#contextData.onEnd = handler;\n\n return this;\n }\n\n /**\n * Sets the handler to run when the interaction collector ends.\n * @param handler - The handler to run when the interaction collector ends.\n * @returns This instance of the modal builder.\n */\n public onError(handler: EventInterceptorErrorHandler): this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onError\" without a handler function parameter.'\n );\n }\n\n this.#contextData ??= {};\n this.#contextData.onError = handler;\n\n return this;\n }\n\n /**\n * Sets a filter for the interaction collector.\n * @param predicate The filter to use for the interaction collector\n */\n public filter(predicate: ButtonKitPredicate): this {\n this.#contextData ??= {\n autoReset: true,\n time: 5 * 60 * 1000\n };\n // @ts-ignore\n this.#contextData.filter = predicate;\n\n return this;\n }\n\n private get customId() {\n // @ts-ignore\n return this.data.custom_id ?? this.data.customId;\n }\n\n #setupInteractionCollector() {\n if (\n this.data.style === ButtonStyle.Link ||\n !this.#contextData ||\n !this.#onClickHandler)\n\n return;\n\n const myCustomId = this.customId ?? null;\n\n if (myCustomId === null) {\n throw new TypeError(\n 'Cannot setup \"onClick\" handler on a button without a custom id.'\n );\n }\n\n const interceptor = this.#getEventInterceptor();\n\n this.#unsub = interceptor.subscribe(\n Events.InteractionCreate,\n async (interaction) => {\n if (!interaction.isButton()) return;\n\n const myCustomId = this.customId ?? null;\n const interactionCustomId = interaction.customId;\n\n if (myCustomId && interactionCustomId !== myCustomId) return;\n\n const filter = this.#contextData?.filter;\n\n if (filter && !(await filter(interaction))) return;\n\n const handler = this.#onClickHandler;\n\n if (!handler) return this.#unsub?.();\n\n return handler(interaction, this);\n },\n this.#contextData\n );\n }\n\n public dispose() {\n this.#destroyCollector();\n return this;\n }\n\n #destroyCollector() {\n this.#unsub?.();\n this.#unsub = null;\n this.#contextData = null;\n this.#onClickHandler = null;\n }\n}","import { ButtonStyle, ComponentEmojiResolvable } from 'discord.js';\nimport {\n ButtonKit,\n CommandKitButtonBuilderOnEnd,\n type CommandKitButtonBuilderInteractionCollectorDispatch,\n type CommandKitButtonBuilderInteractionCollectorDispatchContextData } from\n'./ButtonKit';\nimport { CommandKitElement } from '../common/element';\nimport { MaybeArray } from '../common/types';\nimport { EventInterceptorErrorHandler } from '../common/EventInterceptor';\n\nexport type ButtonChildrenLike = string | number | boolean;\n\nexport interface ButtonProps {\n label?: string;\n style?: ButtonStyle;\n emoji?: ComponentEmojiResolvable;\n disabled?: boolean;\n customId?: string;\n url?: string;\n skuId?: string;\n onClick?: CommandKitButtonBuilderInteractionCollectorDispatch;\n onError?: EventInterceptorErrorHandler;\n options?: CommandKitButtonBuilderInteractionCollectorDispatchContextData;\n onEnd?: CommandKitButtonBuilderOnEnd;\n children?: MaybeArray<ButtonChildrenLike>;\n}\n\n/**\n * The button component.\n * @param props The button properties.\n * @returns The commandkit element.\n * @example <Button style={ButtonStyle.Primary} customId=\"click_me\">Click Me</Button>\n */\nexport function Button(props: ButtonProps): CommandKitElement<'button-kit'> {\n const button = new ButtonKit();\n\n props.style ??= ButtonStyle.Primary;\n\n // auto-generate customId if not provided (only if onClick is set)\n if (props.onClick) {\n props.customId ??= `buttonkit::${crypto.randomUUID()}`;\n }\n\n if (props.customId) {\n button.setCustomId(props.customId);\n }\n\n if (props.onClick) {\n button.onClick(props.onClick, props.options);\n }\n\n if (props.disabled) {\n button.setDisabled(props.disabled);\n }\n\n if (props.emoji) {\n button.setEmoji(props.emoji);\n }\n\n if (props.skuId) {\n button.setSKUId(props.skuId);\n }\n\n if (props.url) {\n button.setURL(props.url);\n }\n\n if (props.style) {\n button.setStyle(props.style);\n }\n\n const label = props.label || props.children;\n\n if (label) {\n button.setLabel(\n Array.isArray(label) ?\n label.join(' ') :\n typeof label === 'string' ?\n label :\n String(label)\n );\n }\n\n if (props.onEnd) {\n button.onEnd(props.onEnd);\n }\n\n if (props.onError) {\n button.onError(props.onError);\n }\n\n return button;\n}","import {\n Awaitable,\n Events,\n ModalBuilder,\n ModalSubmitInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../context/async-context';\nimport {\n EventInterceptorContextData,\n EventInterceptorErrorHandler } from\n'../common/EventInterceptor';\n\nexport type ModalKitPredicate = (\ninteraction: ModalSubmitInteraction)\n=> Awaitable<boolean>;\n\n/**\n * The handler to run when a modal is submitted. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type OnModalKitSubmit =\nCommandKitModalBuilderInteractionCollectorDispatch;\n\n/**\n * The handler to run when the interaction collector ends. This handler is called with the reason as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type OnModalKitEnd = CommandKitModalBuilderOnEnd;\n\n/**\n * The handler to run when a modal is submitted. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type CommandKitModalBuilderInteractionCollectorDispatch = (\ninteraction: ModalSubmitInteraction,\ncontext: ModalKit)\n=> Awaitable<void>;\n\nexport type CommandKitModalBuilderOnEnd = (reason: string) => Awaitable<void>;\n\nexport type CommandKitModalBuilderInteractionCollectorDispatchContextData =\nEventInterceptorContextData<Events.InteractionCreate>;\n\nexport class ModalKit extends ModalBuilder {\n #onSubmitHandler: CommandKitModalBuilderInteractionCollectorDispatch | null =\n null;\n #contextData: CommandKitModalBuilderInteractionCollectorDispatchContextData | null =\n {\n autoReset: false,\n time: 5 * 60 * 1000,\n once: true\n };\n #unsub: (() => void) | null = null;\n\n #getEventInterceptor() {\n const ctx = getContext();\n if (!ctx) return getCommandKit(true).eventInterceptor;\n\n return exitContext(() => ctx.commandkit.eventInterceptor);\n }\n\n /**\n * Sets the handler to run when the modal is submitted.\n * @param handler - The handler to run when the modal is submitted.\n * @param data - The context data for the interaction collector.\n * @returns This instance of the modal builder.\n * @example\n * ```ts\n * const modal = new ModalKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.user.id === '1234567890')\n * .onSubmit(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSubmit(\n handler: CommandKitModalBuilderInteractionCollectorDispatch,\n data?: CommandKitModalBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSubmitHandler) {\n this.#destroyCollector();\n }\n\n this.#onSubmitHandler = handler;\n\n if (data) {\n this.#contextData = {\n autoReset: data.autoReset ?? this.#contextData?.autoReset ?? true,\n time: data.time ?? this.#contextData?.time ?? 5 * 60 * 1000,\n filter: data.filter ?? this.#contextData?.filter,\n onEnd: data.onEnd ?? this.#contextData?.onEnd\n };\n }\n\n this.#setupCollector();\n\n return this;\n }\n\n /**\n * Sets the handler to run when the interaction collector ends.\n * @param handler - The handler to run when the interaction collector ends.\n * @returns This instance of the modal builder.\n */\n public onEnd(handler: CommandKitModalBuilderOnEnd): this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onEnd\" without a handler function parameter.'\n );\n }\n\n this.#contextData ??= {};\n this.#contextData.onEnd = handler;\n\n return this;\n }\n\n /**\n * Sets the handler to run when the interaction collector ends.\n * @param handler - The handler to run when the interaction collector ends.\n * @returns This instance of the modal builder.\n */\n public onError(handler: EventInterceptorErrorHandler): this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onError\" without a handler function parameter.'\n );\n }\n\n this.#contextData ??= {};\n this.#contextData.onError = handler;\n\n return this;\n }\n\n /**\n * Sets a filter for the interaction collector.\n * @param predicate - The filter to use for the interaction collector.\n * @returns This instance of the modal builder.\n */\n public filter(predicate: ModalKitPredicate): this {\n this.#contextData ??= {\n autoReset: true,\n time: 5 * 60 * 1000\n };\n // @ts-ignore\n this.#contextData.filter = predicate;\n\n return this;\n }\n\n private get customId() {\n // @ts-ignore\n return this.data.custom_id ?? this.data.customId;\n }\n\n #setupCollector() {\n if (!this.#contextData) return;\n\n if (!this.customId) {\n throw new TypeError(\n 'Cannot setup an modal collector without a custom ID.'\n );\n }\n\n const interceptor = this.#getEventInterceptor();\n if (!interceptor) return;\n\n this.#unsub = interceptor.subscribe(\n Events.InteractionCreate,\n async (interaction) => {\n if (!interaction.isModalSubmit()) return;\n\n const myCustomId = this.customId ?? null;\n const interactionCustomId = interaction.customId;\n\n if (myCustomId && interactionCustomId !== myCustomId) return;\n\n const filter = this.#contextData?.filter;\n\n if (filter && !(await filter(interaction))) return;\n\n const handler = this.#onSubmitHandler;\n\n if (!handler) return this.#unsub?.();\n\n return handler(interaction, this);\n },\n this.#contextData\n );\n }\n\n public dispose() {\n this.#destroyCollector();\n return this;\n }\n\n #destroyCollector() {\n this.#unsub?.();\n this.#unsub = null;\n this.#onSubmitHandler = null;\n this.#contextData = null;\n }\n}","import { ActionRowBuilder, TextInputBuilder, TextInputStyle } from 'discord.js';\nimport { MaybeArray } from '../common/types';\nimport { CommandKitElement } from '../common/element';\nimport {\n CommandKitModalBuilderInteractionCollectorDispatchContextData,\n ModalKit,\n OnModalKitEnd,\n OnModalKitSubmit } from\n'./ModalKit';\nimport { EventInterceptorErrorHandler } from '../common/EventInterceptor';\n\nexport interface ModalProps {\n customId?: string;\n title: string;\n children?: MaybeArray<TextInputBuilder | ActionRowBuilder>;\n onSubmit?: OnModalKitSubmit;\n onEnd?: OnModalKitEnd;\n onError?: EventInterceptorErrorHandler;\n options?: CommandKitModalBuilderInteractionCollectorDispatchContextData;\n}\n\n/**\n * The modal component.\n * @param props The modal properties.\n * @returns The commandkit element.\n * @example <Modal title=\"My Modal\" onSubmit={onSubmit}>...</Modal>\n */\nexport function Modal(props: ModalProps): CommandKitElement<'modal'> {\n const modal = new ModalKit();\n\n if (props.title) {\n modal.setTitle(props.title);\n }\n\n if (props.onSubmit) {\n props.customId ??= `modalkit::${crypto.randomUUID()}`;\n }\n\n if (props.customId) {\n modal.setCustomId(props.customId);\n }\n\n if (props.onSubmit) {\n modal.onSubmit(props.onSubmit, props.options);\n }\n\n if (props.children) {\n const childs = (\n Array.isArray(props.children) ? props.children : [props.children]).\n\n map((c) => {\n if (c instanceof ActionRowBuilder) return c;\n if (c instanceof TextInputBuilder)\n return new ActionRowBuilder().addComponents(c);\n }).\n filter((c): c is ActionRowBuilder<TextInputBuilder> => c != null);\n\n modal.addComponents(childs);\n }\n\n if (props.onEnd) {\n modal.onEnd(props.onEnd);\n }\n\n if (props.onError) {\n modal.onError(props.onError);\n }\n\n return modal;\n}\n\nexport interface TextInputProps {\n customId: string;\n label: string;\n placeholder?: string;\n maxLength?: number;\n minLength?: number;\n value?: string;\n required?: boolean;\n}\n\n/**\n * The text input component.\n * @param props The text input properties.\n * @returns The commandkit element.\n * @example <TextInput customId=\"input\" label=\"Input\" style={TextInputStyle.Short} />\n */\nexport function TextInput(\nprops: TextInputProps & {style: TextInputStyle;})\n: CommandKitElement<'text-input'> {\n const input = new TextInputBuilder().setStyle(props.style);\n\n if (props.customId) {\n input.setCustomId(props.customId);\n }\n\n if (props.label) {\n input.setLabel(props.label);\n }\n\n if (props.placeholder) {\n input.setPlaceholder(props.placeholder);\n }\n\n if (props.maxLength) {\n input.setMaxLength(props.maxLength);\n }\n\n if (props.minLength) {\n input.setMinLength(props.minLength);\n }\n\n if (props.value) {\n input.setValue(props.value);\n }\n\n if (props.required) {\n input.setRequired(props.required);\n }\n\n return input;\n}\n\n/**\n * The short text input component.\n * @param props The text input properties.\n * @returns The commandkit element.\n * @example <ShortInput customId=\"input\" label=\"Input\" />\n */\nexport function ShortInput(\nprops: TextInputProps)\n: CommandKitElement<'text-input'> {\n return TextInput({ ...props, style: TextInputStyle.Short });\n}\n\n/**\n * The paragraph text input component.\n * @param props The text input properties.\n * @returns The commandkit element.\n * @example <ParagraphInput customId=\"input\" label=\"Input\" />\n */\nexport function ParagraphInput(\nprops: TextInputProps)\n: CommandKitElement<'text-input'> {\n return TextInput({ ...props, style: TextInputStyle.Paragraph });\n}","const WARNED_KEYS = new Set<string>();\n\nexport function emitWarning(message: string, code = 'CommandKitWarning') {\n process.emitWarning(message, { code });\n}\n\nexport function warnUnstable(name: string) {\n if (WARNED_KEYS.has(name)) return;\n\n WARNED_KEYS.add(name);\n\n emitWarning(\n `${name} is unstable and may change in future versions.`,\n 'CommandKitUnstableWarning'\n );\n}","import { ActionRowBuilder, TextInputBuilder } from 'discord.js';\nimport type { ButtonKit } from '../button/ButtonKit';\nimport { warnUnstable } from '../../utils/warn-unstable';\nimport { ModalKit } from '../modal/ModalKit';\n\nexport const ElementType = {\n ActionRow: 'action-row',\n Button: 'button-kit',\n Modal: 'modal',\n TextInput: 'text-input'\n} as const;\n\nexport type ElementType = (typeof ElementType)[keyof typeof ElementType];\n\nexport interface CommandKitElementData {\n [ElementType.ActionRow]: ActionRowBuilder;\n [ElementType.Button]: ButtonKit;\n [ElementType.Modal]: ModalKit;\n [ElementType.TextInput]: TextInputBuilder;\n}\n\nexport type CommandKitElement<Type extends ElementType> =\nCommandKitElementData[Type];\n\nexport type AnyCommandKitElement = CommandKitElement<ElementType>;\n\nexport function isCommandKitElement(\nelement: unknown)\n: element is CommandKitElement<ElementType> {\n if (typeof element !== 'object' || element === null) return false;\n if (!Reflect.has(element, 'type')) return false;\n if (!Reflect.has(element, 'data')) return false;\n\n return true;\n}\n\nexport function getElement<\n T extends ElementType,\n E extends CommandKitElement<T>>(\nelement: E): CommandKitElementData[T] {\n return element.data as CommandKitElementData[T];\n}\n\nexport interface FragmentElementProps {\n children: [];\n}\n\nexport function Fragment(\nprops: FragmentElementProps)\n: CommandKitElementData[ElementType][] {\n warnUnstable('CommandKit JSX');\n return Array.isArray(props.children) ? props.children.flat() : props.children;\n}\n\nexport function createElement(\ntype: Function,\nprops: Record<string, unknown>,\n...children: any[])\n: CommandKitElement<ElementType> {\n warnUnstable('CommandKit JSX');\n return type({ ...props, children });\n}","export type MaybeArray<T> = T | T[];","import { Awaitable, Client, ClientEvents, Events } from 'discord.js';\n\nexport interface EventInterceptorContextData<E extends keyof ClientEvents> {\n /**\n * The filter to use for the collector.\n */\n filter?: (...args: ClientEvents[E]) => Awaitable<boolean>;\n /**\n * The duration (in ms) that the collector should run for.\n */\n time?: number;\n /**\n * If the collector should automatically reset the timer when a button is clicked.\n */\n autoReset?: boolean;\n /**\n * Whether the collector should run only once.\n */\n once?: boolean;\n /**\n * The handler to run when the collector ends.\n */\n onEnd?: (reason: string) => Awaitable<void>;\n /**\n * The handler to run upon an error.\n */\n onError?: EventInterceptorErrorHandler;\n}\n\nexport type EventInterceptorErrorHandler = (error: Error) => Awaitable<void>;\n\nexport class EventInterceptor {\n private subscribers = new Map<\n keyof ClientEvents,\n Set<(...args: any[]) => void>>(\n );\n private globalHandlers = new Map<\n keyof ClientEvents,\n (...args: any[]) => void>(\n );\n private cleanupTimer: NodeJS.Timeout | null = null;\n\n /**\n * Creates the event interceptor.\n */\n public constructor(public readonly client: Client) {\n this.#cleanupLoop();\n }\n\n #cleanupLoop() {\n if (this.cleanupTimer) clearInterval(this.cleanupTimer);\n\n this.cleanupTimer = setInterval(() => {\n for (const [event, handlers] of this.subscribers) {\n for (const handler of handlers) {\n const options = Reflect.get(\n handler,\n 'options'\n ) as EventInterceptorContextData<keyof ClientEvents> & {\n registeredAt: number;\n };\n\n const isExpired =\n options.time && Date.now() - options.registeredAt > options.time;\n\n if (isExpired) {\n this.unsubscribe(event, handler, 'time');\n }\n }\n }\n }, 60_000).unref();\n }\n\n /**\n * Destroys the event interceptor.\n */\n public destroy(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n\n for (const [event, handlers] of this.subscribers) {\n for (const handler of handlers) {\n this.unsubscribe(event, handler, 'destroy');\n }\n }\n\n this.subscribers.clear();\n this.globalHandlers.clear();\n }\n\n /**\n * Whether the event has subscribers.\n * @param event The event to check.\n */\n public hasSubscribers(event: keyof ClientEvents): boolean {\n return this.subscribers.has(event);\n }\n\n /**\n * Returns the number of subscribers for the event.\n * @param event The event to check.\n */\n public getSubscriberCount(event: keyof ClientEvents): number {\n const handlers = this.subscribers.get(event);\n return handlers?.size ?? 0;\n }\n\n /**\n * Whether the event has global handlers.\n */\n public hasGlobalHandlers(): boolean {\n return this.globalHandlers.size > 0;\n }\n\n /**\n * Returns the number of global handlers.\n */\n public getGlobalHandlersCount(): number {\n return this.subscribers.size;\n }\n\n /**\n * Subscribes to an event.\n * @param event The event to subscribe to.\n * @param listener The listener to call when the event is emitted.\n * @returns A function to unsubscribe from the event.\n */\n public subscribe<Event extends keyof ClientEvents>(\n event: Event,\n listener: (...args: ClientEvents[Event]) => void,\n options?: EventInterceptorContextData<Event>)\n : () => void {\n if (!this.subscribers.has(event)) {\n this.subscribers.set(event, new Set());\n this.client.on(event, this.createGlobalHandler(event));\n this.client.setMaxListeners(this.client.getMaxListeners() + 1);\n }\n\n options ??= {};\n\n // @ts-ignore\n options.registeredAt = Date.now();\n\n Reflect.set(listener, 'options', options);\n\n this.subscribers.get(event)!.add(listener);\n\n return () => {\n this.unsubscribe(event, listener);\n };\n }\n\n /**\n * Unsubscribes from an event.\n * @param event The event to unsubscribe from.\n */\n public unsubscribe<Event extends keyof ClientEvents>(\n event: Event,\n listener: (...args: ClientEvents[Event]) => void,\n reason?: string)\n : void {\n const handlers = this.subscribers.get(event);\n if (!handlers) return;\n\n handlers.delete(listener);\n\n if (handlers.size < 1) {\n this.subscribers.delete(event);\n this.client.removeListener(event, this.globalHandlers.get(event)!);\n this.globalHandlers.delete(event);\n this.client.setMaxListeners(\n Math.max(this.client.getMaxListeners() - 1, 0)\n );\n }\n\n Reflect.get(listener, 'options').onEnd?.(reason ?? 'unsubscribe');\n }\n\n /**\n * Creates a global handler for the event.\n * @param event The event to create a global handler for.\n * @returns The global handler.\n */\n private createGlobalHandler<Event extends keyof ClientEvents>(\n event: Event)\n : (...args: ClientEvents[Event]) => void {\n if (this.globalHandlers.has(event)) {\n return this.globalHandlers.get(event)!;\n }\n\n const handler = async (...args: ClientEvents[Event]) => {\n const subscribers = this.subscribers.get(event);\n if (subscribers && subscribers.size > 0) {\n for (const subscriber of subscribers) {\n const options = Reflect.get(\n subscriber,\n 'options'\n ) as EventInterceptorContextData<Event> & {registeredAt: number;};\n\n const isExpired =\n options.time && Date.now() - options.registeredAt > options.time;\n\n if (isExpired) {\n this.unsubscribe(event, subscriber, 'time');\n continue;\n }\n\n if (options.autoReset) {\n options.registeredAt = Date.now();\n }\n\n if (options.filter && !(await options.filter(...args))) {\n continue;\n }\n\n try {\n await subscriber(...args);\n } catch (e) {\n if (options.onError) {\n await options.onError(<Error> e);\n } else {\n throw e;\n }\n } finally {\n if (options.once) {\n this.unsubscribe(event, subscriber, 'once');\n }\n }\n }\n }\n };\n\n this.globalHandlers.set(event, handler);\n\n return handler;\n }\n}","// action row\nexport * from './action-row/ActionRow';\n\n// buttons\nexport * from './button/ButtonKit';\nexport * from './button/Button';\n\n// modals\nexport * from './modal/ModalKit';\nexport * from './modal/Modal';\n\n// common\nexport * from './common/element';\nexport * from './common/types';\nexport * from './common/EventInterceptor';","import { CommonPluginRuntime } from './runtime/runtime';\n\nexport type PluginOptions = Record<string, any>;\n\nexport abstract class PluginCommon<\n T extends PluginOptions = PluginOptions,\n C extends CommonPluginRuntime = CommonPluginRuntime>\n{\n public abstract readonly name: string;\n public constructor(protected readonly options: T) {}\n\n /**\n * Called when this plugin is activated\n */\n public async activate(ctx: C): Promise<void> {}\n\n /**\n * Called when this plugin is deactivated\n */\n public async deactivate(ctx: C): Promise<void> {}\n}\n\nexport function isPlugin(\nplugin: unknown)\n: plugin is PluginCommon<PluginOptions> {\n return plugin instanceof PluginCommon;\n}","import {\n Loader,\n OnLoadArgs,\n OnResolveArgs,\n OnResolveResult } from\n'./runtime/types';\nimport { PluginCommon, PluginOptions } from './PluginCommon';\nimport { MaybeFalsey } from './types';\nimport { CompilerPluginRuntime } from './runtime/CompilerPluginRuntime';\n\nexport interface PluginTransformParameters {\n args: OnLoadArgs;\n path: string;\n contents: string | Uint8Array;\n loader?: Loader;\n}\n\nexport interface TransformedResult {\n contents?: string | Uint8Array;\n loader?: Loader;\n}\n\nexport interface ResolveResult {\n path?: string;\n external?: boolean;\n}\n\nexport abstract class CompilerPlugin<\n T extends PluginOptions = PluginOptions> extends\nPluginCommon<T, CompilerPluginRuntime> {\n /**\n * Called when transformation is requested to this plugin\n * @param params The parameters for the transformation\n * @returns The transformed result\n */\n public async transform(\n params: PluginTransformParameters)\n : Promise<MaybeFalsey<TransformedResult>> {\n return null;\n }\n\n /**\n * Called when a resolve is requested to this plugin\n * @param args The arguments for the resolve\n * @returns The resolved result\n */\n public async resolve(\n args: OnResolveArgs)\n : Promise<MaybeFalsey<ResolveResult>> {\n return null;\n }\n\n /**\n * Called when a build is started\n */\n public async onBuildStart(): Promise<void> {}\n\n /**\n * Called when a build is ended\n */\n public async onBuildEnd(): Promise<void> {}\n}\n\nexport function isCompilerPlugin(plugin: unknown): plugin is CompilerPlugin {\n return plugin instanceof CompilerPlugin;\n}","import { Interaction, Message, PartialMessage } from 'discord.js';\nimport { PluginCommon, PluginOptions } from './PluginCommon';\nimport type { CommandKitPluginRuntime } from './runtime/CommandKitPluginRuntime';\nimport { PreparedAppCommandExecution } from '../app';\nimport { CommandKitEnvironment } from '../context/environment';\n\nexport abstract class RuntimePlugin<\n T extends PluginOptions = PluginOptions> extends\nPluginCommon<T, CommandKitPluginRuntime> {\n /**\n * Called before commands are loaded\n */\n public async onBeforeCommandsLoad(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called after commands are loaded\n */\n public async onAfterCommandsLoad(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called before events are loaded\n */\n public async onBeforeEventsLoad(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called after events are loaded\n */\n public async onAfterEventsLoad(ctx: CommandKitPluginRuntime): Promise<void> {}\n\n /**\n * Called before the client logs in\n */\n public async onBeforeClientLogin(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called after the client logs in\n */\n public async onAfterClientLogin(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called before interaction is handled\n * @param interaction The interaction\n */\n public async onBeforeInteraction(\n ctx: CommandKitPluginRuntime,\n interaction: Interaction)\n : Promise<void> {}\n\n /**\n * Called before message command is processed\n * @param message The message\n */\n public async onBeforeMessageCommand(\n ctx: CommandKitPluginRuntime,\n message: Message)\n : Promise<void> {}\n\n /**\n * Called before message update command is processed\n * @param message The message\n */\n public async onBeforeMessageUpdateCommand(\n ctx: CommandKitPluginRuntime,\n oldMessage: Message | PartialMessage,\n newMessage: Message | PartialMessage)\n : Promise<void> {}\n\n /**\n * Called before command is executed. This method can execute the command itself.\n * @param source The source that triggered the command\n * @param command The command\n * @param execute The function that executes the command\n */\n public async executeCommand(\n ctx: CommandKitPluginRuntime,\n env: CommandKitEnvironment,\n source: Interaction | Message,\n command: PreparedAppCommandExecution,\n execute: () => Promise<any>)\n : Promise<boolean> {\n return false;\n }\n}\n\nexport function isRuntimePlugin(plugin: unknown): plugin is RuntimePlugin {\n return plugin instanceof RuntimePlugin;\n}","import type { CompilerPlugin } from './CompilerPlugin';\nimport type { RuntimePlugin } from './RuntimePlugin';\n\nexport type CommandKitPlugin = RuntimePlugin | CompilerPlugin;\nexport type MaybeFalsey<T> = T | false | null | undefined;","import { getContext } from '../context/async-context';\nimport colors from '../utils/colors';\nimport { ILogger } from './ILogger';\n\nenum LogLevel {\n DEBUG,\n INFO,\n WARN,\n ERROR,\n DEFAULT,\n}\n\nconst execHandlerKind = {\n autocomplete: 'Autocomplete',\n messageContextMenu: 'MessageContextMenu',\n userContextMenu: 'UserContextMenu',\n chatInput: 'SlashCommand',\n message: 'Message'\n};\n\nconst TextColorMap = {\n [LogLevel.DEBUG]: colors.blue,\n [LogLevel.INFO]: colors.green,\n [LogLevel.WARN]: colors.yellow,\n [LogLevel.ERROR]: colors.red,\n [LogLevel.DEFAULT]: colors.white\n};\n\nconst TextBgColorMap = {\n [LogLevel.DEBUG]: colors.bgBlue,\n [LogLevel.INFO]: colors.bgGreen,\n [LogLevel.WARN]: colors.bgYellow,\n [LogLevel.ERROR]: colors.bgRed,\n [LogLevel.DEFAULT]: colors.bgWhite\n};\n\nconst BoxChars = {\n vertical: '│',\n horizontalDown: '┬',\n horizontalUp: '┴',\n verticalRight: '├',\n corner: '└'\n};\n\nexport class DefaultLogger implements ILogger {\n private logger: Console;\n\n public constructor(\n public stdout = process.stdout,\n public stderr = process.stderr)\n {\n this.logger = new console.Console(this.stdout, this.stderr);\n }\n\n private _formatTime(date: Date): string {\n const hours = date.getHours().toString().padStart(2, '0');\n const minutes = date.getMinutes().toString().padStart(2, '0');\n const seconds = date.getSeconds().toString().padStart(2, '0');\n const millis = date.getMilliseconds().toString().padStart(3, '0');\n return `${hours}:${minutes}:${seconds}.${millis}`;\n }\n\n private _getContext(): string {\n const ctx = getContext();\n if (!ctx) return '';\n\n const kind = ctx.variables.get('execHandlerKind');\n const commandHandler = ctx.variables.get('commandHandlerType');\n const command = ctx.variables.get('currentCommandName');\n if (!kind && !commandHandler) return '';\n\n const h = execHandlerKind[kind as keyof typeof execHandlerKind];\n\n if (!h && !commandHandler) return '';\n\n const forwardedBy = ctx.variables.get('forwardedBy');\n const forwardedTo = ctx.variables.get('forwardedTo');\n\n const cmdText = command ? colors.magenta(`/${command}`) + ' ' : '';\n const forward = forwardedTo ?\n `${colors.yellowBright(`(${forwardedBy || command} → ${forwardedTo})`)} ` :\n '';\n\n return (\n colors.dim(`${BoxChars.vertical} `) +\n colors.cyanBright(\n `${cmdText}${forward}${h ? colors.gray(`[${h}]`) : ''}`.trim()\n ));\n\n }\n\n private _getLevelLabel(level: LogLevel): string {\n let label: string;\n switch (level) {\n case LogLevel.DEBUG:\n label = '[DEBUG]';\n break;\n case LogLevel.INFO:\n label = '[INFO]';\n break;\n case LogLevel.WARN:\n label = '[WARN]';\n break;\n case LogLevel.ERROR:\n label = '[ERROR]';\n break;\n default:\n label = '[LOG]';\n }\n\n const coloredLabel = TextBgColorMap[level](\n colors.whiteBright(` ${label} `)\n );\n return `${coloredLabel} `;\n }\n\n private _getPrefix(level: LogLevel): string {\n const timestamp = this._formatTime(new Date());\n const label = this._getLevelLabel(level);\n return `${label}${colors.dim(BoxChars.vertical)} ${colors.dim(timestamp)}`;\n }\n\n private _log(level: LogLevel, ...args: any[]): void {\n const prefix = this._getPrefix(level);\n const context = this._getContext();\n const colorFn = TextColorMap[level];\n\n if (context) {\n this.logger.log(\n `${prefix}\\n${context} ${colors.dim(BoxChars.corner)}`,\n ...args.map((arg) => colorFn(arg))\n );\n } else {\n this.logger.log(\n `${prefix} ${colors.dim(BoxChars.corner)}`,\n ...args.map((arg) => colorFn(arg))\n );\n }\n }\n\n public debug(...args: any[]): void {\n this._log(LogLevel.DEBUG, ...args);\n }\n\n public error(...args: any[]): void {\n this._log(LogLevel.ERROR, ...args);\n }\n\n public log(...args: any[]): void {\n this._log(LogLevel.DEFAULT, ...args);\n }\n\n public info(...args: any[]): void {\n this._log(LogLevel.INFO, ...args);\n }\n\n public warn(...args: any[]): void {\n this._log(LogLevel.WARN, ...args);\n }\n}","import { DefaultLogger } from './DefaultLogger';\nimport { ILogger } from './ILogger';\n\nexport interface CommandKitLoggerOptions {\n /**\n * The logger provider to use.\n */\n provider: ILogger;\n}\n\nexport interface LoggerImpl extends ILogger {\n configure(options: CommandKitLoggerOptions): void;\n}\n\nexport function createLogger(options: CommandKitLoggerOptions): LoggerImpl {\n let opt = options;\n\n if (!opt?.provider) {\n throw new Error('A logger provider must be provided.');\n }\n\n const methods = ['log', 'error', 'warn', 'info', 'debug'] as const;\n\n const impl = {\n configure(options) {\n opt = options;\n }\n } as LoggerImpl;\n\n for (const method of methods) {\n impl[method] = (...args: any[]) => {\n opt.provider[method](...args);\n };\n }\n\n return impl;\n}\n\nexport const Logger = createLogger({\n provider: new DefaultLogger()\n});","import { Collection } from 'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { RuntimePlugin } from '../RuntimePlugin';\nimport { AsyncFunction } from '../../cache';\nimport {\n CommandKitErrorCodes,\n createCommandKitError,\n isErrorType } from\n'../../utils/error-codes';\nimport { Logger } from '../../logger/Logger';\n\nexport class CommandKitPluginRuntime {\n private plugins = new Collection<string, RuntimePlugin>();\n\n public constructor(public readonly commandkit: CommandKit) {}\n\n public getPlugin(pluginName: string): RuntimePlugin | null {\n return this.plugins.get(pluginName) ?? null;\n }\n\n public async softRegisterPlugin(plugin: RuntimePlugin) {\n const pluginName = plugin.name;\n\n if (this.plugins.has(pluginName)) return;\n\n try {\n await plugin.activate(this);\n this.plugins.set(pluginName, plugin);\n } catch (e: any) {\n throw new Error(\n `Failed to activate plugin \"${pluginName}\": ${e?.stack || e}`\n );\n }\n }\n\n public async registerPlugin(plugin: RuntimePlugin) {\n const pluginName = plugin.name;\n\n if (this.plugins.has(pluginName)) {\n throw new Error(`Plugin with name \"${pluginName}\" already exists.`);\n }\n\n try {\n await plugin.activate(this);\n this.plugins.set(pluginName, plugin);\n } catch (e: any) {\n throw new Error(\n `Failed to activate plugin \"${pluginName}\": ${e?.stack || e}`\n );\n }\n }\n\n public async unregisterPlugin(plugin: RuntimePlugin) {\n const pluginName = plugin.name;\n\n if (!this.plugins.has(pluginName)) {\n throw new Error(`Plugin with name \"${pluginName}\" does not exist.`);\n }\n\n this.plugins.delete(pluginName);\n\n try {\n await plugin.deactivate(this);\n } catch (e: any) {\n throw new Error(\n `Failed to deactivate plugin \"${pluginName}\": ${e?.stack || e}`\n );\n }\n }\n\n public async unregisterAllPlugins() {\n for (const plugin of this.plugins.values()) {\n await this.unregisterPlugin(plugin);\n }\n }\n\n public capture() {\n throw createCommandKitError(CommandKitErrorCodes.PluginCaptureHandle);\n }\n\n public async execute<R = any>(\n f: AsyncFunction<[CommandKitPluginRuntime, RuntimePlugin], R | undefined>)\n {\n let result: R | undefined;\n for (const plugin of this.plugins.values()) {\n try {\n result = await f(this, plugin);\n } catch (e: any) {\n if (isErrorType(e, CommandKitErrorCodes.PluginCaptureHandle)) {\n return true;\n }\n\n Logger.error(`Plugin \"${plugin.name}\" failed`, e?.stack || e);\n }\n }\n\n return result;\n }\n}","import { readFile } from 'node:fs/promises';\nimport { CompilerPlugin, MaybeFalsey, TransformedResult } from '..';\nimport {\n OnLoadArgs,\n OnLoadResult,\n OnResolveArgs,\n OnResolveResult,\n Setup } from\n'./types';\n\nconst pattern = /\\.(c|m)?(t|j)sx?$/;\n\nexport class CompilerPluginRuntime {\n public readonly name = 'CompilerPluginRuntime';\n\n public constructor(private readonly plugins: CompilerPlugin[]) {}\n\n public isEmpty() {\n return !this.plugins.length;\n }\n\n private async onLoad(args: OnLoadArgs): Promise<OnLoadResult> {\n const source = await readFile(args.path, 'utf8');\n\n let contents: string | Uint8Array = source,\n loader = args.path?.split('.').pop();\n\n for (const plugin of this.plugins) {\n try {\n const res: MaybeFalsey<TransformedResult> = await plugin.transform?.({\n contents,\n path: args.path,\n loader,\n args\n });\n\n if (!res) continue;\n\n if (res.contents) {\n contents = res.contents;\n }\n\n if (res.loader) {\n loader = res.loader;\n }\n } catch (e: any) {\n const err = e instanceof Error ? e : new Error(e);\n\n return {\n pluginName: plugin.name,\n errors: [\n {\n text: err.message,\n detail: err?.stack ?? err,\n location: null\n }]\n\n };\n }\n }\n\n return {\n contents,\n loader\n };\n }\n\n private async onResolve(args: OnResolveArgs): Promise<OnResolveResult> {\n let result: OnResolveResult = {};\n\n for (const plugin of this.plugins) {\n try {\n const resolved = await plugin.resolve?.(args);\n if (!resolved) continue;\n\n result = { ...result, ...resolved };\n } catch (e: any) {\n const err = e instanceof Error ? e : new Error(e);\n\n return {\n errors: [\n {\n text: err.message,\n detail: err?.stack ?? err,\n location: null\n }]\n\n };\n }\n }\n\n return result;\n }\n\n private async onStart() {\n for (const plugin of this.plugins) {\n try {\n await plugin.onBuildStart?.();\n } catch (e: any) {\n console.error(\n `Plugin ${plugin.name} failed to run onBuildStart with ${e?.stack || e}`\n );\n }\n }\n }\n\n private async onEnd() {\n for (const plugin of this.plugins) {\n try {\n await plugin.onBuildEnd?.();\n } catch (e: any) {\n console.error(\n `Plugin ${plugin.name} failed to run onBuildEnd with ${e?.stack || e}`\n );\n }\n }\n }\n\n private async onDispose() {\n for (const plugin of this.plugins) {\n try {\n await plugin.deactivate?.(this);\n } catch (e: any) {\n console.error(\n `Plugin ${plugin.name} failed to deactivate with ${e?.stack || e}`\n );\n }\n }\n }\n\n private async onInit() {\n for (const plugin of this.plugins) {\n try {\n await plugin.activate?.(this);\n } catch (e: any) {\n console.error(\n `Plugin ${plugin.name} failed to activate with ${e?.stack || e}`\n );\n }\n }\n }\n\n public async cleanup() {\n await this.onEnd();\n await this.onDispose();\n }\n\n public async setup(build: Setup) {\n if (!this.plugins.length) return;\n\n await this.onInit();\n\n await build.onResolve(\n {\n filter: pattern\n },\n this.onResolve.bind(this)\n );\n\n await build.onLoad(\n {\n filter: pattern\n },\n this.onLoad.bind(this)\n );\n\n await build.onStart(this.onStart.bind(this));\n\n build.onEnd(async () => {\n await this.onEnd();\n });\n\n build.onDispose(async () => {\n await this.onDispose();\n });\n }\n\n public toEsbuildPlugin() {\n return {\n name: this.name,\n setup: this.setup.bind(this)\n };\n }\n}\n\nexport function fromEsbuildPlugin(plugin: any): typeof CompilerPlugin {\n class EsbuildPluginCompat extends CompilerPlugin {\n public readonly name = plugin.name;\n\n public onBuildEnd(): Promise<void> {\n return plugin.onBuildEnd?.();\n }\n\n public onBuildStart(): Promise<void> {\n return plugin.onBuildStart?.();\n }\n\n public async transform(params: any) {\n return plugin.transform?.(params);\n }\n\n public async resolve(params: any) {\n return plugin.resolve?.(params);\n }\n }\n\n // @ts-ignore\n return EsbuildPluginCompat;\n}","// this is roughly the types that esbuild plugins use\n\nexport interface OnLoadArgs {\n path: string;\n namespace: string;\n suffix: string;\n pluginData: any;\n with: Record<string, string>;\n}\n\nexport interface OnLoadOptions {\n filter: RegExp;\n namespace?: string;\n}\n\nexport type Loader = `${'j' | 't'}s` | (string & {});\n\nexport interface OnLoadResult {\n contents?: string | Uint8Array;\n errors?: Message[];\n loader?: Loader;\n pluginData?: any;\n pluginName?: string;\n resolveDir?: string;\n warnings?: Message[];\n watchDirs?: string[];\n watchFiles?: string[];\n}\n\nexport interface Message {\n text: string;\n location: Location | null;\n detail: any; // The original error from a JavaScript plugin, if applicable\n}\n\nexport interface Location {\n file: string;\n namespace: string;\n line: number; // 1-based\n column: number; // 0-based, in bytes\n length: number; // in bytes\n lineText: string;\n}\n\nexport interface OnResolveOptions {\n filter: RegExp;\n namespace?: string;\n}\n\nexport interface OnResolveArgs {\n path: string;\n importer: string;\n namespace: string;\n resolveDir: string;\n kind: ResolveKind;\n pluginData: any;\n with: Record<string, string>;\n}\n\nexport type ResolveKind =\n'entry-point' |\n'import-statement' |\n'require-call' |\n'dynamic-import' |\n'require-resolve' |\n'import-rule' |\n'composes-from' |\n'url-token';\n\nexport interface OnResolveResult {\n errors?: Message[];\n external?: boolean;\n namespace?: string;\n path?: string;\n pluginData?: any;\n pluginName?: string;\n sideEffects?: boolean;\n suffix?: string;\n warnings?: Message[];\n watchDirs?: string[];\n watchFiles?: string[];\n}\n\nexport interface Setup {\n onStart(fn: () => Promise<void>): void;\n onEnd(fn: () => Promise<void>): void;\n onDispose(fn: () => Promise<void>): void;\n onLoad(\n options: OnLoadOptions,\n cb: (args: OnLoadArgs) => Promise<OnLoadResult>)\n : Promise<any>;\n onResolve(\n options: OnResolveOptions,\n cb: (args: OnResolveArgs) => Promise<OnResolveResult>)\n : Promise<any>;\n}","import type { CommandKitPluginRuntime } from './CommandKitPluginRuntime';\nimport type { CompilerPluginRuntime } from './CompilerPluginRuntime';\n\nexport type CommonPluginRuntime =\nCommandKitPluginRuntime |\nCompilerPluginRuntime;","export * from './CompilerPlugin';\nexport * from './RuntimePlugin';\nexport * from './types';\nexport * from './runtime/CommandKitPluginRuntime';\nexport * from './runtime/CompilerPluginRuntime';\nexport * from './runtime/types';\nexport * from './runtime/runtime';","import * as parser from '@babel/parser';\nimport _traverse from '@babel/traverse';\nimport _generate from '@babel/generator';\nimport * as t from '@babel/types';\n\n// @ts-ignore\nconst traverse = _traverse.default || _traverse;\n// @ts-ignore\nconst generate = _generate.default || _generate;\n\nconst IMPORT_PATH = 'commandkit';\nconst DIRECTIVE = 'use cache';\nconst CACHE_IDENTIFIER =\n'super_duper_secret_internal_for_use_cache_directive_of_commandkit_cli_do_not_use_it_directly_or_you_will_be_fired_from_your_job_kthxbai';\n\nconst generateRandomString = (length = 6) => {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n return Array.from(\n { length },\n () => chars[Math.floor(Math.random() * chars.length)]\n ).join('');\n};\n\nexport const cacheDirectivePlugin = async (source: string, args: any) => {\n const ast = parser.parse(source, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx']\n });\n\n let state = {\n needsImport: false,\n hasExistingImport: false,\n cacheIdentifierName: CACHE_IDENTIFIER,\n modifications: []\n };\n\n // First pass: check for naming collisions and collect modifications\n traverse(ast, {\n Program: {\n enter(path: any) {\n const binding = path.scope.getBinding(CACHE_IDENTIFIER);\n if (binding) {\n state.cacheIdentifierName = `${CACHE_IDENTIFIER}_${generateRandomString()}`;\n }\n }\n },\n\n ImportDeclaration(path: any) {\n if (\n path.node.source.value === IMPORT_PATH &&\n path.node.specifiers.some(\n (spec: any) =>\n t.isImportSpecifier(spec) &&\n // @ts-ignore\n spec.imported.name === CACHE_IDENTIFIER\n ))\n {\n state.hasExistingImport = true;\n if (state.cacheIdentifierName !== CACHE_IDENTIFIER) {\n // @ts-ignore\n state.modifications.push(() => {\n path.node.specifiers.forEach((spec: any) => {\n if (\n t.isImportSpecifier(spec) &&\n // @ts-ignore\n spec.imported.name === CACHE_IDENTIFIER)\n {\n spec.local.name = state.cacheIdentifierName;\n }\n });\n });\n }\n }\n },\n\n 'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression|ObjectMethod'(\n path: any)\n {\n const body = t.isBlockStatement(path.node.body) ? path.node.body : null;\n const hasUseCache = body?.directives?.some(\n (d: any) => d.value.value === DIRECTIVE\n );\n\n if (!hasUseCache && !t.isBlockStatement(path.node.body)) {\n const parentFunction = path.findParent(\n (p: any) =>\n (p.isFunction() || p.isProgram()) && 'directives' in p.node\n );\n if (\n !parentFunction?.node.directives?.some(\n (d: any) => d.value.value === DIRECTIVE\n ))\n {\n return;\n }\n }\n\n if (hasUseCache || !t.isBlockStatement(path.node.body)) {\n // Check if the function is async\n if (!path.node.async) {\n throw new Error(\n `\"${DIRECTIVE}\" directive may only be used in async functions at ${args.path}\\n\\n${path.toString()}\\n^^^^${'-'.repeat(6)} This function must be async`\n );\n }\n\n state.needsImport = true;\n const isDeclaration = t.isFunctionDeclaration(path.node);\n const name = isDeclaration ? path.node.id?.name : undefined;\n\n // Create a new body without the 'use cache' directive\n const newBody = t.isBlockStatement(path.node.body) ?\n t.blockStatement(\n path.node.body.body,\n path.node.body.directives.filter(\n (d: any) => d.value.value !== DIRECTIVE\n )\n ) :\n path.node.body;\n\n const wrapped = t.callExpression(\n t.identifier(state.cacheIdentifierName),\n [t.arrowFunctionExpression(path.node.params, newBody, true)]\n );\n\n // @ts-ignore\n state.modifications.push(() => {\n if (t.isObjectMethod(path.node)) {\n path.replaceWith(\n t.objectProperty(t.identifier(path.node.key.name), wrapped)\n );\n } else if (name) {\n path.replaceWith(\n t.variableDeclaration('const', [\n t.variableDeclarator(t.identifier(name), wrapped)]\n )\n );\n } else if (!t.isVariableDeclarator(path.parent)) {\n path.replaceWith(wrapped);\n } else {\n path.parent.init = wrapped;\n }\n });\n }\n }\n });\n\n // Apply all collected modifications\n if (state.modifications.length > 0) {\n // Add import if needed\n if (state.needsImport && !state.hasExistingImport) {\n ast.program.body.unshift(\n t.importDeclaration(\n [\n t.importSpecifier(\n t.identifier(state.cacheIdentifierName),\n t.identifier(CACHE_IDENTIFIER)\n )],\n\n t.stringLiteral(IMPORT_PATH)\n )\n );\n }\n\n // Apply collected modifications\n // @ts-ignore\n state.modifications.forEach((modify) => modify());\n }\n\n const { code } = generate(ast);\n\n return {\n contents: code,\n loader: args.path?.split('.').pop()\n };\n};","import {\n CompilerPlugin,\n MaybeFalsey,\n PluginTransformParameters,\n TransformedResult } from\n'../../..';\nimport { cacheDirectivePlugin } from './UseCacheTransformer';\n\nexport class CachePlugin extends CompilerPlugin {\n public readonly name = 'CachePlugin';\n\n public async transform(\n params: PluginTransformParameters)\n : Promise<MaybeFalsey<TransformedResult>> {\n if (!this.options.enabled) return null;\n\n const result = await cacheDirectivePlugin(\n params.contents.toString(),\n params.path\n );\n\n return {\n contents: result.contents,\n loader: result.loader\n };\n }\n}","import {\n CompilerPlugin,\n MaybeFalsey,\n PluginTransformParameters,\n TransformedResult } from\n'../..';\n\nexport class MacroPlugin extends CompilerPlugin {\n public readonly name = 'MacroPlugin';\n\n private macroTransformer!: import('use-macro').MacroTransformer;\n\n public async activate(): Promise<void> {\n const transform = await import('use-macro');\n this.macroTransformer = new transform.MacroTransformer();\n }\n\n public async deactivate(): Promise<void> {\n this.macroTransformer = null!;\n }\n\n public async transform(\n params: PluginTransformParameters)\n : Promise<MaybeFalsey<TransformedResult>> {\n if (!this.options.enabled) return null;\n\n const { contents, loader } = await this.macroTransformer.transform(\n params.contents.toString(),\n params.path\n );\n\n return {\n contents,\n loader\n };\n }\n}","import { CachePlugin } from '../plugins/runtime/builtin/cache/CachePlugin';\nimport { MacroPlugin } from '../plugins/runtime/builtin/MacroPlugin';\nimport { ResolvedCommandKitConfig } from './utils';\n\nexport const defaultConfig: ResolvedCommandKitConfig = {\n plugins: [\n new CachePlugin({ enabled: true }),\n new MacroPlugin({ enabled: true })],\n\n esbuildPlugins: [],\n compilerOptions: {\n macro: {\n development: false\n },\n cache: {\n development: true\n }\n },\n static: true,\n typescript: {\n ignoreDuringBuilds: false\n },\n distDir: 'dist',\n env: {},\n sourceMap: {\n development: true,\n production: true\n },\n typedCommands: true,\n typedLocales: true\n};","import { defaultConfig } from './default';\nimport { CommandKitConfig } from './types';\nimport { ResolvedCommandKitConfig } from './utils';\n\nlet defined: ResolvedCommandKitConfig = defaultConfig;\n\n/**\n * Get the defined configuration for CommandKit.\n */\nexport function getConfig(): ResolvedCommandKitConfig {\n return defined;\n}\n\n/**\n * Define the configuration for CommandKit.\n * @param config The configuration to use.\n */\nexport function defineConfig(\nconfig: Partial<CommandKitConfig> = {})\n: ResolvedCommandKitConfig {\n // defined = mergeDeep(\n // config as ResolvedCommandKitConfig,\n // mergeDeep({} as ResolvedCommandKitConfig, defaultConfig),\n // );\n\n defined = {\n compilerOptions: {\n cache: {\n ...defaultConfig.compilerOptions.cache,\n ...config.compilerOptions?.cache\n },\n macro: {\n ...defaultConfig.compilerOptions.macro,\n ...config.compilerOptions?.macro\n }\n },\n distDir: config.distDir ?? defaultConfig.distDir,\n env: {\n ...defaultConfig.env,\n ...config.env\n },\n esbuildPlugins: [\n ...(config.esbuildPlugins ?? []),\n ...(defaultConfig.esbuildPlugins ?? [])],\n\n plugins: [...(config.plugins ?? []), ...(defaultConfig.plugins ?? [])],\n sourceMap: {\n ...defaultConfig.sourceMap,\n ...config.sourceMap\n },\n static: config.static ?? defaultConfig.static,\n typedCommands: config.typedCommands ?? defaultConfig.typedCommands,\n typedLocales: config.typedLocales ?? defaultConfig.typedLocales,\n typescript: {\n ...defaultConfig.typescript,\n ...config.typescript\n }\n };\n\n return defined;\n}","export const COMMANDKIT_CACHE_TAG = Symbol('kCommandKitCacheTag');\n\nexport const COMMANDKIT_IS_DEV = !!process.env.COMMANDKIT_IS_DEV;\n\nexport const COMMANDKIT_IS_TEST = process.env.COMMANDKIT_IS_TEST === 'true';","import { Locale } from 'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport {\n LocalizationStrategy,\n LocalizationTranslationRequest,\n TranslationResult } from\n'./LocalizationStrategy';\nimport { Translation } from './Translation';\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { getConfig } from '../../config/config';\nimport { existsSync } from 'node:fs';\nimport { COMMANDKIT_IS_DEV } from '../../utils/constants';\n\nexport class DefaultLocalizationStrategy implements LocalizationStrategy {\n private translations: Map<string, Translation> = new Map();\n\n public constructor(private readonly commandkit: CommandKit) {}\n\n public async locateTranslation(scope: string, locale: Locale) {\n const localesPath = this.commandkit.getPath('locales');\n\n if (!localesPath) return null;\n\n const paths = ['.js', '.json', '.mjs', '.cjs'].map(\n (e) => join(localesPath, locale, scope) + e\n );\n\n for (const path of paths) {\n if (!existsSync(path)) {\n continue;\n }\n\n try {\n let localeData: Translation;\n\n try {\n if (path.endsWith('.json')) {\n const data = await readFile(path, 'utf-8');\n localeData = JSON.parse(data) as Translation;\n } else {\n const { default: data } = await import(`file://${path}`);\n localeData = data as Translation;\n }\n } catch {\n continue;\n }\n\n if (!localeData) continue;\n\n await this.generateLocaleTypes(localeData).catch(() => {});\n\n return localeData;\n } catch {\n return null;\n }\n }\n\n return null;\n }\n\n private async generateLocaleTypes(localeData: Translation) {\n if (!COMMANDKIT_IS_DEV) return;\n const { typedLocales } = getConfig();\n\n if (!typedLocales) return;\n\n const file = join(\n process.cwd(),\n 'node_modules',\n 'commandkit-types',\n 'locale_types.d.ts'\n );\n\n const header = `// auto generated file do not edit\\nexport {};\\ndeclare module 'commandkit' {\\n export interface CommandLocalizationTypeData {\\n`;\n const footer = ` type TranslatableCommandName = keyof CommandLocalizationTypeData\\n}\\n}`;\n\n const generateType = (locale: Translation) => {\n // Create type definition for this command's translations\n const commandName = locale.command.name;\n const translationTypes = Object.entries(locale.translations).\n map(([key, value]) => {\n // Extract arguments from translation string (e.g. {xyz})\n const args = value.match(/{([^}]+)}/g);\n\n if (!args) {\n return ` \"${key}\": null`;\n }\n\n // Create a union type of all arguments\n const argUnion = args.\n map((arg) => `\"${arg.slice(1, -1)}\"`).\n join(' | ');\n\n return ` \"${key}\": ${argUnion}`;\n }).\n join(',\\n');\n\n return ` \"${commandName}\": {\\n${translationTypes}\\n }`;\n };\n\n try {\n let commandDefinitions = new Map<string, string>();\n\n // If file exists, parse its content\n if (existsSync(file)) {\n try {\n const data = await readFile(file, 'utf-8');\n const content = data.toString();\n\n // Extract existing command definitions using regex\n const regex = /\"([^\"]+)\":\\s*\\{([^}]*)\\}/gs;\n let match;\n\n while ((match = regex.exec(content)) !== null) {\n const [fullMatch, commandName] = match;\n if (commandName !== localeData.command.name) {\n commandDefinitions.set(commandName, fullMatch);\n }\n }\n } catch (err) {\n // If we can't parse the file, we'll just create a new one\n console.warn('Could not parse existing type file, creating new one');\n }\n }\n\n // Add current command definition\n const newCommandType = generateType(localeData);\n commandDefinitions.set(localeData.command.name!, newCommandType);\n\n // Create the final type file content\n let fileContent = header;\n const entries = Array.from(commandDefinitions.values());\n\n fileContent += entries.join(',\\n');\n fileContent += '\\n' + footer;\n\n // Ensure directory exists\n const dir = join(process.cwd(), 'node_modules', 'commandkit-types');\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n\n // Write the file\n await writeFile(file, fileContent);\n } catch (error) {\n console.error('Failed to generate locale types:', error);\n // Continue execution even if type generation fails\n }\n }\n\n public async getTranslationStrict(scope: string, locale: Locale) {\n const key = `${scope}:${locale}`;\n if (!this.translations.has(key)) {\n const translation = await this.locateTranslation(scope, locale);\n\n if (!translation) {\n throw new Error(`Translation not found for ${key}`);\n }\n\n this.translations.set(key, translation);\n\n return translation;\n }\n\n return this.translations.get(key)!;\n }\n\n public async getTranslation(\n scope: string,\n locale: Locale)\n : Promise<Translation | null> {\n try {\n return this.getTranslationStrict(scope, locale);\n } catch (e) {\n return null;\n }\n }\n\n public async translate(\n request: LocalizationTranslationRequest)\n : Promise<TranslationResult> {\n const { scope, key, args, locale } = request;\n\n const translation = await this.getTranslation(scope, locale);\n\n if (!translation) return `${scope}.${key}`;\n\n const value = translation.translations[key];\n\n const translated = this.applyTranslation(value, args);\n\n return translated || `${scope}.${key}`;\n }\n\n private applyTranslation(\n translation: string,\n args?: Record<string, any>)\n : string {\n if (!translation || !args) return translation;\n\n return translation.replace(/{([^}]+)}/g, (_, key) => {\n return String(args[key] ?? `{${key}}`);\n });\n }\n}","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { COMMANDKIT_IS_DEV } from './constants';\nimport { getConfig } from '../config/config';\n\nlet appDir: string | null = null;\n\n/**\n * Returns the path to the app directory.\n * @returns The path to the app directory or `null` if not found.\n */\nexport function findAppDirectory(): string | null {\n if (appDir) return appDir;\n\n let root = join(\n process.cwd(),\n COMMANDKIT_IS_DEV ? '.commandkit' : getConfig().distDir\n );\n\n if (!existsSync(root)) root = process.cwd();\n\n const dirs = ['app'].map((dir) => join(root, dir));\n\n for (const dir of dirs) {\n if (existsSync(dir)) {\n appDir = dir;\n return dir;\n }\n }\n\n return null;\n}\n\n/**\n * Debounces a function.\n * @param fn The function to debounce.\n * @param ms The debounce time in milliseconds.\n * @returns The debounced function.\n */\nexport function debounce<R, F extends (...args: any[]) => R>(\nfn: F,\nms: number)\n: F {\n let timer: NodeJS.Timeout | null = null;\n let resolve: ((value: R | PromiseLike<R>) => void) | null = null;\n\n return ((...args: any[]) => {\n if (timer) {\n clearTimeout(timer);\n if (resolve) {\n resolve(null as unknown as R); // Resolve with null if debounced\n }\n }\n\n return new Promise<R>((res) => {\n resolve = res;\n timer = setTimeout(() => {\n const result = fn(...args);\n res(result);\n timer = null;\n resolve = null;\n }, ms);\n });\n }) as F;\n}","import path from 'path';\n\n/**\n * Convert a local file path to a file URL.\n * @param filePath - The local file's path.\n * @param withTs - Whether to append a timestamp to the URL.\n * @returns - The converted file URL.\n */\nexport function toFileURL(filePath: string, withTs = false) {\n const resolvedPath = path.resolve(filePath);\n return `${'file://' + resolvedPath.replace(/\\\\\\\\|\\\\/g, '/')}${withTs ? `?ts=${Date.now()}` : ''}`;\n}","import { Channel } from 'diagnostics_channel';\nimport {\n Message,\n ApplicationCommandOptionType,\n GuildMember,\n Attachment,\n User,\n Role,\n CommandInteractionOption } from\n'discord.js';\nimport {\n CommandKitErrorCodes,\n createCommandKitError } from\n'../../utils/error-codes';\n\nexport interface ParsedMessageCommand {\n command: string;\n options: {name: string;value: unknown;}[];\n subcommand?: string;\n subcommandGroup?: string;\n}\n\nexport type MessageCommandOptionsSchema = Record<\n string,\n ApplicationCommandOptionType>;\n\n\nexport class MessageCommandParser {\n #parsed: ParsedMessageCommand | null = null;\n #options: MessageCommandOptions | null = null;\n #args: string[] = [];\n\n public constructor(\n public message: Message,\n private prefix: string[],\n private schema: (command: string) => MessageCommandOptionsSchema)\n {}\n\n public getArgs() {\n void this.parse();\n return this.#args;\n }\n\n public get options() {\n if (!this.#options) {\n this.#options = new MessageCommandOptions(this);\n }\n\n return this.#options;\n }\n\n public getOption<T>(name: string): T | undefined {\n return this.parse().options.find((o) => o.name === name)?.value as T;\n }\n\n public getCommand(): string {\n return this.parse().command;\n }\n\n public getSubcommand(): string | undefined {\n return this.parse().subcommand;\n }\n\n public getSubcommandGroup(): string | undefined {\n return this.parse().subcommandGroup;\n }\n\n public getPrefix() {\n for (const p of this.prefix) {\n if (this.message.content.startsWith(p)) {\n return p;\n }\n }\n }\n\n public getFullCommand() {\n return [this.getCommand(), this.getSubcommandGroup(), this.getSubcommand()].\n filter((v) => v).\n join(' ');\n }\n\n public parse(): ParsedMessageCommand {\n if (this.#parsed) {\n return this.#parsed;\n }\n\n const content = this.message.content;\n\n const prefix = this.getPrefix();\n\n if (!prefix) {\n throw createCommandKitError(CommandKitErrorCodes.InvalidCommandPrefix);\n }\n\n const parts = content.slice(prefix.length).trim().split(' ');\n const command = parts.shift();\n\n this.#args = parts;\n\n let subcommandGroup: string | undefined;\n let subcommand: string | undefined;\n\n if (command?.includes(':')) {\n const [, group, cmd] = command.split(':');\n\n if (!cmd && group) {\n subcommand = group;\n } else if (cmd && group) {\n subcommandGroup = group;\n subcommand = cmd;\n }\n }\n\n const schema = this.schema(\n [command, subcommandGroup, subcommand].filter(Boolean).join(' ').trim()\n );\n\n const options = parts.\n map((part) => {\n try {\n const [name, value] = part.split(':');\n\n if (!(name in schema)) return null;\n\n switch (schema[name]) {\n case ApplicationCommandOptionType.Boolean:\n return { name, value: value === 'true' };\n case ApplicationCommandOptionType.Integer:\n return { name, value: parseInt(value, 10) };\n case ApplicationCommandOptionType.Number:\n return { name, value: parseFloat(value) };\n case ApplicationCommandOptionType.String:\n return { name, value };\n case ApplicationCommandOptionType.User:\n return {\n name,\n value: this.message.mentions.users.find((u) => {\n return u.id === value.replace(/[<@!>]/g, '');\n })\n };\n case ApplicationCommandOptionType.Channel:\n return {\n name,\n value: this.message.mentions.channels.find((c) => {\n return c.id === value.replace(/[<#>]/g, '');\n })\n };\n case ApplicationCommandOptionType.Role:\n return {\n name,\n value: this.message.mentions.roles.find((r) => {\n return r.id === value.replace(/[<@&>]/g, '');\n })\n };\n case ApplicationCommandOptionType.Attachment:\n return {\n name,\n value: this.message.attachments.find((a) => {\n return a.name === value;\n })\n };\n default:\n return null;\n }\n } catch {\n // Invalid option\n return null;\n }\n }).\n filter((v) => v !== null);\n\n this.#parsed = {\n command: command!,\n options,\n subcommand,\n subcommandGroup\n };\n\n return this.#parsed;\n }\n}\n\nexport class MessageCommandOptions {\n public constructor(private parser: MessageCommandParser) {}\n\n private assertOption<T>(name: string, required = false) {\n const option = this.parser.getOption<T>(name);\n\n if (required && option === undefined) {\n throw new Error(`Option \"${name}\" is required.`);\n }\n\n return option ?? null;\n }\n\n getMember(name: string): GuildMember | null;\n getMember(name: string, required: true): GuildMember;\n getMember(name: string, required = false) {\n const user = this.assertOption<User>(name, required);\n const member = this.parser.message.guild?.members.cache.get(user?.id!);\n\n if (required && !member) {\n throw new Error(`Member \"${name}\" is required.`);\n }\n\n return member ?? null;\n }\n\n getAttachment(name: string): Attachment | null;\n getAttachment(name: string, required: true): Attachment;\n getAttachment(name: string, required = false) {\n return this.assertOption<Attachment>(name, required);\n }\n\n getBoolean(name: string): boolean | null;\n getBoolean(name: string, required: true): boolean;\n getBoolean(name: string, required = false) {\n return this.assertOption<boolean>(name, required);\n }\n\n getNumber(name: string): number | null;\n getNumber(name: string, required: true): number;\n getNumber(name: string, required = false) {\n return this.assertOption<number>(name, required);\n }\n\n getString(name: string): string | null;\n getString(name: string, required: true): string;\n getString(name: string, required = false) {\n return this.assertOption<string>(name, required);\n }\n\n getInteger(name: string): number | null;\n getInteger(name: string, required: true): number;\n getInteger(name: string, required = false) {\n return this.assertOption<number>(name, required);\n }\n\n getUser(name: string): User | null;\n getUser(name: string, required: true): User;\n getUser(name: string, required = false) {\n return this.assertOption<User>(name, required);\n }\n\n getChannel(name: string): Channel | null;\n getChannel(name: string, required: true): Channel;\n getChannel(name: string, required = false) {\n return this.assertOption<Channel>(name, required);\n }\n\n getRole(name: string): Role | null;\n getRole(name: string, required: true): Role;\n getRole(name: string, required = false) {\n return this.assertOption<Role>(name, required);\n }\n\n getMentionable(\n name: string)\n : NonNullable<CommandInteractionOption['member' | 'role' | 'user']> | null;\n getMentionable(\n name: string,\n required: true)\n : NonNullable<CommandInteractionOption['member' | 'role' | 'user']>;\n getMentionable(\n name: string,\n required = false)\n : NonNullable<CommandInteractionOption['member' | 'role' | 'user']> | null {\n const target = this.assertOption(name, required);\n\n if (\n target instanceof GuildMember ||\n target instanceof User ||\n target instanceof Role)\n {\n return target;\n }\n\n if (required) {\n throw new Error(`Mentionable \"${name}\" is required.`);\n }\n\n return null;\n }\n\n getSubcommand(): string | null;\n getSubcommand(required: true): string;\n getSubcommand(required = false) {\n const sub = this.parser.getSubcommand();\n\n if (required && sub === undefined) {\n throw new Error('Subcommand is required.');\n }\n\n return sub ?? null;\n }\n\n getSubcommandGroup(): string | null;\n getSubcommandGroup(required: true): string;\n getSubcommandGroup(required = false) {\n const sub = this.parser.getSubcommandGroup();\n\n if (required && sub === undefined) {\n throw new Error('Subcommand group is required.');\n }\n\n return sub ?? null;\n }\n}","import {\n ApplicationCommandType,\n REST,\n Routes,\n ApplicationCommandOptionType,\n APIApplicationCommandSubcommandGroupOption,\n APIApplicationCommandSubcommandOption } from\n'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { CommandData } from '../../types';\nimport { Logger } from '../../logger/Logger';\nimport { Command } from '../router/CommandsRouter';\n\nexport class CommandRegistrar {\n private api = new REST();\n\n /**\n * Creates an instance of CommandRegistrar.\n * @param commandkit The commandkit instance.\n */\n public constructor(public readonly commandkit: CommandKit) {\n this.api.setToken(\n this.commandkit.client.token ??\n process.env.DISCORD_TOKEN ??\n process.env.TOKEN ??\n ''\n );\n }\n\n /**\n * Gets the commands data.\n */\n public getCommandsData(): CommandData[] {\n const handler = this.commandkit.commandHandler;\n // Use the public method instead of accessing private property\n const commands = handler.getCommandsArray();\n\n return commands.flatMap((cmd) => {\n const json: CommandData =\n 'toJSON' in cmd.data.command ?\n cmd.data.command.toJSON() :\n cmd.data.command;\n\n const collections: CommandData[] = [json];\n\n // Handle context menu commands\n if (\n cmd.data.userContextMenu &&\n json.type !== ApplicationCommandType.User)\n {\n collections.push({\n ...json,\n type: ApplicationCommandType.User,\n options: undefined,\n description_localizations: undefined,\n // @ts-ignore\n description: undefined\n });\n }\n\n if (\n cmd.data.messageContextMenu &&\n json.type !== ApplicationCommandType.Message)\n {\n collections.push({\n ...json,\n type: ApplicationCommandType.Message,\n description_localizations: undefined,\n // @ts-ignore\n description: undefined,\n options: undefined\n });\n }\n\n return collections;\n });\n }\n\n /**\n * Registers loaded commands.\n */\n public async register() {\n if (!this.commandkit.client.isReady()) {\n throw new Error('Cannot register commands before the client is ready');\n }\n\n const commands = this.getCommandsData();\n const guildCommands = commands.\n filter((command) => command.guilds?.filter(Boolean).length).\n map((c) => ({\n ...c,\n guilds: Array.from(new Set(c.guilds?.filter(Boolean)))\n }));\n const globalCommands = commands.filter(\n (command) => !command.guilds?.filter(Boolean).length\n );\n\n await this.updateGlobalCommands(globalCommands);\n await this.updateGuildCommands(guildCommands);\n }\n\n /**\n * Updates the global commands.\n */\n public async updateGlobalCommands(commands: CommandData[]) {\n if (!commands.length) return;\n\n try {\n const data = (await this.api.put(\n Routes.applicationCommands(this.commandkit.client.user!.id),\n {\n body: commands.map((c) => ({\n ...c,\n guilds: undefined\n }))\n }\n )) as CommandData[];\n\n Logger.info(\n `✨ Refreshed ${data.length} global application (/) commands`\n );\n } catch (e) {\n Logger.error('Failed to update global application (/) commands', e);\n }\n }\n\n /**\n * Updates the guild commands.\n */\n public async updateGuildCommands(commands: CommandData[]) {\n try {\n const guildCommandsMap = new Map<string, CommandData[]>();\n\n commands.forEach((command) => {\n if (!command.guilds?.length) return;\n\n command.guilds.forEach((guild) => {\n if (!guildCommandsMap.has(guild)) {\n guildCommandsMap.set(guild, []);\n }\n\n guildCommandsMap.get(guild)!.push(command);\n });\n });\n\n if (!guildCommandsMap.size) return;\n\n let count = 0;\n\n for (const [guild, guildCommands] of guildCommandsMap) {\n const data = (await this.api.put(\n Routes.applicationGuildCommands(\n this.commandkit.client.user!.id,\n guild\n ),\n {\n body: guildCommands.map((b) => ({\n ...b,\n guilds: undefined\n }))\n }\n )) as CommandData[];\n\n count += data.length;\n }\n\n Logger.info(`✨ Refreshed ${count} guild application (/) commands`);\n } catch (e) {\n Logger.error('Failed to update guild application (/) commands', e);\n }\n }\n}","import { randomUUID } from 'node:crypto';\nimport { CommandKit } from '../CommandKit';\nimport { GenericFunction, getContext } from './async-context';\n\nexport interface CommandKitEnvironmentInternalData {\n executionError: Error | null;\n type: CommandKitEnvironmentType | null;\n variables: Map<string, any>;\n deferredFunctions: Map<string, GenericFunction<[CommandKitEnvironment]>>;\n marker: string;\n markStart: number;\n markEnd: number;\n}\n\nexport class CommandKitEnvironment {\n #data: CommandKitEnvironmentInternalData = {\n executionError: null,\n type: null,\n variables: new Map(),\n deferredFunctions: new Map(),\n marker: '',\n markStart: 0,\n markEnd: 0\n };\n\n /**\n * Creates the commandkit execution environment.\n * @param commandkit - The commandkit instance.\n */\n public constructor(public readonly commandkit: CommandKit) {}\n\n /**\n * Get the execution error.\n * @internal\n */\n public getExecutionError(): Error | null {\n return this.#data.executionError;\n }\n\n /**\n * Set the execution error.\n * @param error - The error to set.\n * @internal\n */\n public setExecutionError(error: Error): void {\n if (this.#data.executionError) {\n throw new Error('Execution error already set.');\n }\n\n this.#data.executionError = error;\n }\n\n /**\n * Get the environment type.\n */\n public getType(): CommandKitEnvironmentType {\n const type = this.#data.type;\n\n if (!type) {\n throw new Error('Environment type not set.');\n }\n\n return type;\n }\n\n /**\n * Set the environment type.\n * @param type - The environment type to set.\n * @internal\n */\n public setType(type: CommandKitEnvironmentType): void {\n this.#data.type = type;\n }\n\n /**\n * The variables store for this environment.\n */\n public get variables(): Map<string, any> {\n return this.#data.variables;\n }\n\n /**\n * Register a deferred function.\n * @param fn - The deferred function to register.\n * @returns The deferred function id.\n * @internal\n */\n public registerDeferredFunction(\n fn: GenericFunction<[CommandKitEnvironment]>)\n : string {\n const id = randomUUID();\n this.#data.deferredFunctions.set(id, fn);\n return id;\n }\n\n /**\n * Clear a deferred function by id.\n * @param id - The deferred function id to clear.\n * @internal\n */\n public clearDeferredFunction(id: string): void {\n this.#data.deferredFunctions.delete(id);\n }\n\n /**\n * Run all deferred functions sequentially.\n * @internal\n */\n public async runDeferredFunctions(): Promise<void> {\n for (const [id, fn] of this.#data.deferredFunctions) {\n try {\n await fn(this);\n } catch (e) {\n this.commandkit.emit('unhandledDeferredFunctionRejection', e);\n } finally {\n this.clearDeferredFunction(id);\n }\n }\n }\n\n /**\n * Clear all deferred functions.\n * @internal\n */\n public clearAllDeferredFunctions(): void {\n this.#data.deferredFunctions.clear();\n }\n\n /**\n * Mark the start of a command execution.\n * @param marker - The marker to set.\n * @internal\n */\n public markStart(marker: string): void {\n this.#data.marker = marker;\n this.#data.markStart = performance.now();\n }\n\n /**\n * Mark the end of a command execution.\n * @internal\n */\n public markEnd(): void {\n if (!this.#data.markEnd) {\n this.#data.markEnd = performance.now();\n }\n }\n\n /**\n * Get the marker.\n * @internal\n */\n public getMarker(): string {\n return this.#data.marker;\n }\n\n /**\n * Get the execution time in milliseconds.\n * @internal\n */\n public getExecutionTime(): number {\n return Math.abs(this.#data.markEnd - this.#data.markStart);\n }\n}\n\nexport enum CommandKitEnvironmentType {\n CommandHandler = 'COMMAND_HANDLER',\n}\n\n/**\n * Runs the given function after the current command has finished executing.\n * @param fn The function to run after the current command.\n * @returns The deferred function id. This can be used to cancel the deferred function.\n */\nexport function afterCommand(\nfn: GenericFunction<[CommandKitEnvironment]>)\n: string {\n const env = getContext();\n\n if (!env) {\n throw new Error('after must be called inside commandkit handler.');\n }\n\n return env.registerDeferredFunction(fn);\n}\n\n/**\n * Cancels a deferred function registered with `afterCommand`.\n * @param id The deferred function id to cancel.\n */\nexport function cancelAfterCommand(id: string): void {\n const env = getContext();\n\n if (!env) {\n throw new Error('cancelAfter must be called inside commandkit handler.');\n }\n\n env.clearDeferredFunction(id);\n}","import { Locale } from 'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { TranslationResult } from './LocalizationStrategy';\nimport {\n CommandLocalizationTypeData,\n TranslatableArguments,\n TranslatableCommandName } from\n'./Translation';\n\nexport interface LocalizationConfig {\n /**\n * The locale to use for localization.\n */\n locale: Locale;\n /**\n * The internalization data target.\n */\n target: string;\n}\n\n// Improved Translator type for better autocomplete\nexport type Translator<T extends TranslatableCommandName> = <\n K extends keyof CommandLocalizationTypeData[T] & string>(\n\nkey: K,\n// If args corresponding to this key is null, don't allow second argument\nargs?: CommandLocalizationTypeData[T][K] extends null ?\nnever :\nCommandLocalizationTypeData[T][K] extends string ?\nRecord<CommandLocalizationTypeData[T][K], string> :\nRecord<string, string>)\n=> Promise<TranslationResult>;\n\nexport class Localization<T extends TranslatableCommandName = string> {\n /**\n * Translates the given translatable object.\n * @param translatable The translatable object to translate.\n */\n public readonly t: Translator<T>;\n\n /**\n * Creates a new localization instance.\n * @param commandkit The command kit instance.\n * @param config The localization configuration.\n */\n public constructor(\n private readonly commandkit: CommandKit,\n private readonly config: LocalizationConfig)\n {\n const strategy = this.commandkit.config.localizationStrategy;\n const { locale, target } = this.config;\n\n // we are doing this so that it can be destructured\n // eg: const { t } = ctx.locale()\n this.t = (translatable, args) => {\n return strategy.translate({\n args,\n key: translatable,\n locale,\n scope: target\n });\n };\n }\n\n /**\n * Get the localization strategy.\n */\n public getStrategy() {\n return this.commandkit.config.localizationStrategy;\n }\n\n /**\n * Get the default locale\n */\n public getDefaultLocale() {\n return this.commandkit.config.defaultLocale;\n }\n\n /**\n * Get the current locale\n */\n public getLocale() {\n return this.config.locale;\n }\n\n /**\n * Get the localization target\n */\n public getTarget() {\n return this.config.target;\n }\n}","import {\n CommandKitErrorCodes,\n createCommandKitError,\n isCommandKitError } from\n'../../utils/error-codes';\n\n/**\n * Cancel upcoming middleware execution.\n * If this is called inside pre-stage middleware, the next run will be the actual command, skipping all other pre-stage middlewares.\n * If this is called inside a command itself, it will skip all post-stage middlewares.\n * If this is called inside post-stage middleware, it will skip all other post-stage middlewares.\n */\nexport function exitMiddleware(): never {\n throw createCommandKitError(CommandKitErrorCodes.ExitMiddleware);\n}\n\n/**\n * Rethrow the error if it is a CommandKit error.\n * @param error The error to rethrow.\n */\nexport function rethrow(error: unknown): void {\n if (isCommandKitError(error)) throw error;\n}\n\n/**\n * Stops current command assuming it has been redirected to another command.\n */\nexport function redirect(): never {\n throw createCommandKitError(CommandKitErrorCodes.ForwardedCommand);\n}","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { GenericFunction, getCommandKit } from '../context/async-context';\nimport { createHash, randomUUID } from 'node:crypto';\nimport ms from 'ms';\n\nconst cacheContext = new AsyncLocalStorage<CacheContext>();\nconst fnStore = new Map<\n string,\n {\n key: string;\n hash: string;\n ttl: number;\n original: GenericFunction;\n memo: GenericFunction;\n }>(\n);\nconst DEFAULT_TTL = ms('15m');\nconst CACHE_FN_ID = `__cache_fn_id_${Date.now()}__${Math.random()}__`;\nconst CACHED_FN_SYMBOL = Symbol('commandkit.cache.sentinel');\n\n/**\n * Context for managing cache operations within an async scope\n */\nexport interface CacheContext {\n params: {\n /** Custom name for the cache entry */\n name?: string;\n /** Time-to-live in milliseconds */\n ttl?: number;\n };\n}\n\n/**\n * Represents an async function that can be cached\n * @template R - Array of argument types\n * @template T - Return type\n */\nexport type AsyncFunction<R extends any[] = any[], T = any> = (\n...args: R)\n=> Promise<T>;\n\n/**\n * Configuration options for cache behavior\n */\nexport interface CacheMetadata {\n /** Time-to-live duration in milliseconds or as a string (e.g., '1h', '5m') */\n ttl?: number | string;\n /** Custom name for the cache entry */\n name?: string;\n}\n\n/**\n * Generates an MD5 hash of the input string\n * @internal\n */\nfunction md5(data: string): string {\n return createHash('md5').update(data).digest('hex');\n}\n\n/**\n * Retrieves the configured cache provider from CommandKit context\n * @internal\n * @throws {Error} When no cache provider is configured\n */\nfunction getCacheProvider() {\n const commandkit = getCommandKit(true);\n const provider = commandkit.getCacheProvider();\n\n if (!provider) {\n throw new Error(\n `Cache provider was not found, please provide a cache provider to commandkit.`\n );\n }\n\n return provider;\n}\n\n/**\n * Internal cache implementation\n * @internal\n * @private\n * This is used directly by the compiler if the function is annotated with `\"use cache\"` directive.\n * @example\n * ```ts\n * async function myCachedFunction() {\n * \"use cache\";\n * // can use cacheTag() and cacheLife() here to customize cache behavior\n * return await db.query('SELECT * FROM users');\n * }\n * ```\n */\nfunction useCache<R extends any[], F extends AsyncFunction<R>>(\nfn: F,\nid?: string,\nparams?: CacheMetadata)\n: F {\n const isLocal = id === CACHE_FN_ID;\n\n if (id && !isLocal) {\n throw new Error('Illegal use of cache function.');\n }\n\n const fnId = randomUUID();\n\n const memo = ((...args) => {\n const forcedName = isLocal ? params?.name : null;\n const keyHash =\n forcedName ?? md5(!args.length ? fnId : `${fnId}:${args.join(':')}`);\n const resolvedTTL =\n isLocal && params?.ttl != null ?\n typeof params.ttl === 'string' ?\n ms(params.ttl) :\n params.ttl :\n null;\n\n return cacheContext.run(\n {\n params: {\n name: keyHash,\n ttl: resolvedTTL ?? DEFAULT_TTL\n }\n },\n async () => {\n const provider = getCacheProvider();\n const context = cacheContext.getStore();\n\n if (!context) {\n throw new Error('Cache context was not found.');\n }\n\n // Get the effective cache key, preferring any existing association\n const storedFn = fnStore.get(keyHash);\n const effectiveKey = storedFn?.key ?? context.params.name!;\n\n // Try to get cached value using effective key\n const cached = await provider.get(effectiveKey);\n if (cached && cached.value != null) return cached.value;\n\n // If we reach here, we need to cache the value\n const result = await fn(...args);\n\n // Only cache if result is not null/undefined\n if (result != null) {\n // Get the final key name (might have been modified by cacheTag)\n const finalKey = context.params.name!;\n const ttl = context.params.ttl ?? DEFAULT_TTL;\n\n // Store the result\n await provider.set(finalKey, result, ttl);\n\n // Update function store\n fnStore.set(keyHash, {\n key: finalKey,\n hash: keyHash,\n ttl,\n original: fn,\n memo\n });\n }\n\n return result;\n }\n );\n }) as F;\n\n if (!Object.prototype.hasOwnProperty.call(fn, CACHED_FN_SYMBOL)) {\n Object.defineProperty(memo, CACHED_FN_SYMBOL, {\n get() {\n return true;\n },\n configurable: false,\n enumerable: false\n });\n }\n\n return memo;\n}\n\n/**\n * Wraps an async function with caching capability\n * @template R - Array of argument types\n * @template F - Type of the async function\n * @param fn - The async function to cache\n * @param params - Optional cache configuration\n * @returns The wrapped function with caching behavior\n * @example\n * ```ts\n * const cachedFetch = cache(async (id: string) => {\n * return await db.findOne(id);\n * }, { ttl: '1h' });\n * ```\n */\nexport function cache<R extends any[], F extends AsyncFunction<R>>(\nfn: F,\nparams?: CacheMetadata)\n: F {\n return useCache(fn, CACHE_FN_ID, params);\n}\n\n/**\n * Sets a custom identifier for the current cache operation\n * @param tag - The custom cache tag\n * @throws {Error} When called outside a cached function or without a tag\n * @example\n * ```ts\n * const fetchUser = cache(async (id: string) => {\n * cacheTag(`user:${id}`);\n * return await db.users.findOne(id);\n * });\n * ```\n */\nexport function cacheTag(tag: string): void {\n const context = cacheContext.getStore();\n\n if (!context) {\n throw new Error('cacheTag() must be called inside a cached function.');\n }\n\n if (!tag) {\n throw new Error('cacheTag() must be called with a tag name.');\n }\n\n context.params.name = tag;\n}\n\n/**\n * Sets the TTL for the current cache operation\n * @param ttl - Time-to-live in milliseconds or as a string (e.g., '1h', '5m')\n * @throws {Error} When called outside a cached function or with invalid TTL\n * @example\n * ```ts\n * const fetchData = cache(async () => {\n * cacheLife('30m');\n * return await expensiveOperation();\n * });\n * ```\n */\nexport function cacheLife(ttl: number | string): void {\n const context = cacheContext.getStore();\n\n if (!context) {\n throw new Error('cacheLife() must be called inside a cached function.');\n }\n\n if (ttl == null || !['string', 'number'].includes(typeof ttl)) {\n throw new Error('cacheLife() must be called with a ttl.');\n }\n\n context.params.ttl = typeof ttl === 'string' ? ms(ttl) : ttl;\n}\n\n/**\n * Removes a cached value by its tag\n * @param tag - The cache tag to invalidate\n * @throws {Error} When the cache key is not found\n * @example\n * ```ts\n * await invalidate('user:123');\n * ```\n */\nexport async function invalidate(tag: string): Promise<void> {\n const provider = getCacheProvider();\n const entry = Array.from(fnStore.values()).find(\n (v) => v.key === tag || v.hash === tag\n );\n\n if (!entry) return;\n\n await provider.delete(entry.key);\n}\n\n/**\n * Forces a refresh of cached data by its tag (on-demand revalidation)\n * @template T - Type of the cached value\n * @param tag - The cache tag to revalidate\n * @param args - Arguments to pass to the cached function\n * @returns Fresh data from the cached function\n * @throws {Error} When the cache key or function is not found\n * @example\n * ```ts\n * const freshData = await revalidate('user:123');\n * ```\n */\nexport async function revalidate<T = unknown>(\ntag: string,\n...args: any[])\n: Promise<T> {\n const provider = getCacheProvider();\n const entry = Array.from(fnStore.values()).find(\n (v) => v.key === tag || v.hash === tag\n );\n\n if (!entry) return undefined as T;\n\n await provider.delete(entry.key);\n\n return entry.memo(...args);\n}\n\n/**\n * Checks if a function is wrapped with cache functionality\n * @param fn - Function to check\n * @returns True if the function is cached\n * @example\n * ```ts\n * if (isCachedFunction(myFunction)) {\n * console.log('Function is cached');\n * }\n * ```\n */\nexport function isCachedFunction(fn: GenericFunction): boolean {\n return Object.prototype.hasOwnProperty.call(fn, CACHED_FN_SYMBOL);\n}\n\nexport { useCache as super_duper_secret_internal_for_use_cache_directive_of_commandkit_cli_do_not_use_it_directly_or_you_will_be_fired_from_your_job_kthxbai };","export * from './CacheProvider';\nexport * from './MemoryCache';\nexport * from './cache';","import {\n AutocompleteInteraction,\n ChatInputCommandInteraction,\n MessageContextMenuCommandInteraction,\n Message,\n Locale,\n Interaction,\n UserContextMenuCommandInteraction,\n Client,\n Awaitable } from\n'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { Localization } from '../i18n/Localization';\nimport {\n MessageCommandOptions,\n MessageCommandParser } from\n'./MessageCommandParser';\nimport {\n afterCommand,\n cancelAfterCommand,\n CommandKitEnvironment } from\n'../../context/environment';\nimport { GenericFunction, getContext } from '../../context/async-context';\nimport { exitMiddleware, redirect } from '../middleware/signals';\nimport { isCachedFunction } from '../../cache';\nimport { ResolvableCommand, RunCommand } from '../handlers/AppCommandHandler';\nimport { TranslatableCommandName } from '../i18n/Translation';\n\nexport const CommandExecutionMode = {\n SlashCommand: 'chatInput',\n MessageContextMenu: 'messageContextMenu',\n UserContextMenu: 'userContextMenu',\n Autocomplete: 'autocomplete',\n Message: 'message'\n} as const;\n\nexport type CommandExecutionMode =\n(typeof CommandExecutionMode)[keyof typeof CommandExecutionMode];\n\nexport interface ContextParameters<\n T extends CommandExecutionMode,\n Args = Record<string, any>>\n{\n environment?: CommandKitEnvironment;\n executionMode: T;\n interaction: T extends 'chatInput' ?\n ChatInputCommandInteraction :\n T extends 'messageContextMenu' ?\n MessageContextMenuCommandInteraction :\n T extends 'userContextMenu' ?\n UserContextMenuCommandInteraction :\n T extends 'autocomplete' ?\n AutocompleteInteraction :\n never;\n message: T extends 'message' ? Message : never;\n forwarded?: boolean;\n messageCommandParser?: T extends 'message' ? MessageCommandParser : never;\n store?: Map<string, any>;\n customArgs?: Args;\n}\n\nexport type MessageCommandContext = Context<'message'>;\nexport type InteractionCommandContext = Context<\n 'autocomplete' | 'chatInput' | 'messageContextMenu' | 'userContextMenu'>;\n\nexport type MessageCommandMiddlewareContext = MiddlewareContext<'message'>;\nexport type InteractionCommandMiddlewareContext = MiddlewareContext<\n 'autocomplete' | 'chatInput' | 'messageContextMenu' | 'userContextMenu'>;\n\nexport type SlashCommandContext = Context<'chatInput'>;\nexport type SlashCommandMiddlewareContext = MiddlewareContext<'chatInput'>;\nexport type AutocompleteCommandContext = Context<'autocomplete'>;\nexport type AutocompleteCommandMiddlewareContext =\nMiddlewareContext<'autocomplete'>;\nexport type MessageContextMenuCommandContext = Context<'messageContextMenu'>;\nexport type MessageContextMenuCommandMiddlewareContext =\nMiddlewareContext<'messageContextMenu'>;\nexport type UserContextMenuCommandContext = Context<'userContextMenu'>;\nexport type UserContextMenuCommandMiddlewareContext =\nMiddlewareContext<'userContextMenu'>;\n\nexport type CommandContextOptions<T extends CommandExecutionMode> =\nT extends 'message' ?\nMessageCommandOptions :\nT extends 'chatInput' ?\nChatInputCommandInteraction['options'] :\nT extends 'autocomplete' ?\nAutocompleteInteraction['options'] :\nT extends 'messageContextMenu' ?\nMessageContextMenuCommandInteraction['options'] :\nT extends 'userContextMenu' ?\nUserContextMenuCommandInteraction['options'] :\nnever;\n\nexport type AnyCommandExecute<ContextType extends Context = Context> = (\nctx: ContextType)\n=> Awaitable<unknown>;\n\nexport type SlashCommand = AnyCommandExecute<SlashCommandContext>;\nexport type AutocompleteCommand = AnyCommandExecute<AutocompleteCommandContext>;\nexport type MessageContextMenuCommand =\nAnyCommandExecute<MessageContextMenuCommandContext>;\nexport type UserContextMenuCommand =\nAnyCommandExecute<UserContextMenuCommandContext>;\nexport type MessageCommand = AnyCommandExecute<MessageCommandContext>;\n\nexport interface MiddlewareContextArgs {\n setCommandRunner?: GenericFunction<[RunCommand]>;\n}\n\nexport class Context<\n ExecutionMode extends CommandExecutionMode = CommandExecutionMode,\n Args extends Record<string, any> = Record<string, any>>\n{\n /**\n * The interaction that triggered the command.\n */\n public readonly interaction: ContextParameters<ExecutionMode>['interaction'];\n\n /**\n * The message that triggered the command.\n */\n public readonly message: ContextParameters<ExecutionMode>['message'];\n\n /**\n * The client instance.\n */\n public readonly client: Client;\n\n #store: Map<string, any>;\n\n private _locale: Locale | null = null;\n\n /**\n * Creates a new command context.\n * @param commandkit The command kit instance.\n * @param config The context parameters.\n */\n public constructor(\n public readonly commandkit: CommandKit,\n protected readonly config: ContextParameters<ExecutionMode, Args>)\n {\n // these are assigned to readonly properties to make them accessible via object destructuring\n this.interaction = config.interaction;\n this.message = config.message;\n this.client = commandkit.client;\n this.#store = config.store ?? new Map();\n }\n\n /**\n * The shared key-value store for this context. This can be used to store data that needs to be shared between middlewares or commands.\n * This store is shared across all contexts in the same command execution, including the cloned contexts and middleware contexts.\n */\n public get store() {\n return this.#store;\n }\n\n public get commandName(): string {\n if (this.isInteraction()) {\n return this.interaction.commandName;\n } else {\n return this.config.messageCommandParser!.getCommand();\n }\n }\n\n public get options(): CommandContextOptions<ExecutionMode> {\n if (this.isMessage()) {\n const parser = this.config.messageCommandParser!;\n // @ts-expect-error\n return parser.options;\n } else {\n const interaction = (<InteractionCommandContext> this).interaction;\n // @ts-expect-error\n return interaction.options;\n }\n }\n\n /**\n * Whether this context was forwarded from another context. This happens when a command forwards its context to another command.\n */\n public get forwarded(): boolean {\n return this.config.forwarded ?? false;\n }\n\n /**\n * Forwards the context to another command. The target handler will be the same as current handler.\n * @param command The command to forward to.\n */\n public async forwardCommand<C extends ResolvableCommand>(\n command: C)\n : Promise<never> {\n const target = await this.commandkit.commandHandler.prepareCommandRun(\n (this.isInteraction() ? this.interaction : this.message) as Interaction,\n command\n );\n\n if (!target) {\n throw new Error(`Command ${command} not found`);\n }\n\n const env = this.config.environment ?? getContext();\n\n if (!env) {\n throw new Error('No commandkit environment found.');\n }\n\n const handlers = {\n chatInput: target.command.data.chatInput,\n autocomplete: target.command.data.autocomplete,\n message: target.command.data.message,\n messageContextMenu: target.command.data.messageContextMenu,\n userContextMenu: target.command.data.userContextMenu\n };\n\n const handlerKind = env.variables.get(\n 'execHandlerKind'\n ) as keyof typeof handlers;\n\n if (!handlerKind) {\n throw new Error('No execution handler kind found.');\n }\n\n const handler = handlers[handlerKind];\n\n if (!handler) {\n throw new Error(`No handler found for ${handlerKind}`);\n }\n\n env.variables.set('forwardedBy', this.commandName);\n env.variables.set('forwardedTo', command);\n\n await handler(this.clone({ forwarded: true }));\n\n redirect();\n }\n\n /**\n * The execution mode of the command.\n */\n public get executionMode(): ExecutionMode {\n return this.config.executionMode;\n }\n\n /**\n * Whether the command was triggered by an interaction.\n */\n public isInteraction(): this is InteractionCommandContext {\n return (\n this.executionMode === CommandExecutionMode.SlashCommand ||\n this.executionMode === CommandExecutionMode.Autocomplete ||\n this.executionMode === CommandExecutionMode.MessageContextMenu ||\n this.executionMode === CommandExecutionMode.UserContextMenu);\n\n }\n\n /**\n * Whether the command was triggered by a slash command interaction.\n */\n public isSlashCommand(): this is SlashCommandContext {\n return this.executionMode === CommandExecutionMode.SlashCommand;\n }\n\n /**\n * Whether the command was triggered by an autocomplete interaction.\n */\n public isAutocomplete(): this is AutocompleteCommandContext {\n return this.executionMode === CommandExecutionMode.Autocomplete;\n }\n\n /**\n * Whether the command was triggered by a message context menu interaction.\n */\n public isMessageContextMenu(): this is MessageContextMenuCommandContext {\n return this.executionMode === CommandExecutionMode.MessageContextMenu;\n }\n\n /**\n * Whether the command was triggered by a user context menu interaction.\n */\n public isUserContextMenu(): this is UserContextMenuCommandContext {\n return this.executionMode === CommandExecutionMode.UserContextMenu;\n }\n\n /**\n * Whether the command was triggered by a message.\n */\n public isMessage(): this is Context<'message'> {\n return this.executionMode === CommandExecutionMode.Message;\n }\n\n /**\n * Returns the command identifier.\n */\n public getCommandIdentifier(): string {\n if (this.isInteraction()) {\n return this.interaction.commandName;\n } else {\n return this.message.content.split(' ')[0].slice(1);\n }\n }\n\n /**\n * Returns the locale of the guild where this command was triggered.\n */\n public getGuildLocale(): Locale | null {\n if (this.isInteraction()) {\n return this.interaction.guildLocale;\n } else {\n return this.message.guild?.preferredLocale ?? null;\n }\n }\n\n /**\n * Returns the locale of the user who triggered this command.\n */\n public getUserLocale(): Locale | null {\n if (this.isInteraction()) {\n return this.interaction.locale;\n } else {\n return null;\n }\n }\n\n /**\n * Returns the locale for this command.\n * @param preferUser Whether to prefer the user's locale over the guild's locale.\n * @returns The locale for this command. If no locale is found, the default locale is returned.\n */\n public getLocale(preferUser = false): Locale {\n if (this._locale) return this._locale;\n\n const locale = preferUser ? this.getUserLocale() : this.getGuildLocale();\n\n if (!locale) {\n return this.commandkit.config.defaultLocale;\n }\n\n return locale;\n }\n\n /**\n * Sets the locale for this command.\n * @param locale The locale to set.\n */\n public setLocale(locale: Locale | null): void {\n this._locale = locale;\n }\n\n /**\n * Returns the i18n api for this command.\n * @param locale The locale to use for the i18n api.\n * @template T The command name for type-safe translations. Will provide autocomplete from available translations.\n */\n public locale<T extends TranslatableCommandName | (string & {}) = string>(\n locale?: Locale)\n : Localization<T extends TranslatableCommandName ? T : string> {\n const selectedLocale = locale ?? this.getLocale();\n\n return new Localization<T extends TranslatableCommandName ? T : string>(\n this.commandkit,\n {\n locale: selectedLocale,\n target: this.getCommandIdentifier()\n }\n );\n }\n\n /**\n * Creates a clone of this context\n */\n public clone(\n config?: Partial<ContextParameters<ExecutionMode>>)\n : Context<ExecutionMode> {\n if (!config) return new Context(this.commandkit, this.config);\n\n const ctx = new Context(this.commandkit, {\n ...this.config,\n ...config,\n store: this.#store\n });\n\n return ctx;\n }\n\n public isMiddleware(): this is MiddlewareContext<ExecutionMode> {\n return this instanceof MiddlewareContext;\n }\n\n public args(): string[] {\n if (this.isMessage()) {\n return this.config.messageCommandParser!.getArgs();\n }\n\n return [];\n }\n\n /**\n * Stops upcoming middleware or current command execution.\n * If this is called inside pre-stage middleware, the next run will be the actual command, skipping all other pre-stage middlewares.\n * If this is called inside a command itself, it will skip all post-stage middlewares.\n * If this is called inside post-stage middleware, it will skip all other post-stage middlewares.\n */\n public exit() {\n exitMiddleware();\n }\n\n /**\n * Defers the given function to be executed after this command's execution.\n * @param fn The function to defer.\n * @returns A unique identifier for the deferred function.\n */\n public defer(fn: GenericFunction<[CommandKitEnvironment]>): string {\n return afterCommand(fn);\n }\n\n /**\n * Cancels the deferred function with the given identifier.\n * @param id The identifier of the deferred function.\n */\n public cancelDeferred(id: string): void {\n cancelAfterCommand(id);\n }\n\n /**\n * Validates if the given function is a cached function.\n * @param fn The function to validate.\n */\n public isCached(fn: GenericFunction): boolean {\n return isCachedFunction(fn);\n }\n}\n\nexport class MiddlewareContext<\n T extends CommandExecutionMode = CommandExecutionMode> extends\nContext<T, MiddlewareContextArgs> {\n #cancel = false;\n\n /**\n * Whether the command execution was cancelled.\n */\n public get cancelled(): boolean {\n return this.#cancel;\n }\n\n /**\n * Cancels the command execution.\n */\n public cancel(): void {\n this.#cancel = true;\n }\n\n /**\n * Sets command runner function to wrap the command execution.\n * @param fn The function to set.\n * @example ctx.setCommandRunner(async (execute) => {\n * // do something before command execution\n * await execute();\n * // do something after command execution\n * })\n */\n public setCommandRunner(fn: RunCommand): void {\n this.config.customArgs?.setCommandRunner?.(fn);\n }\n}","import { ChatInputCommandInteraction, Interaction, Message } from 'discord.js';\nimport {\n CommandKitEnvironment,\n CommandKitEnvironmentType } from\n'../../context/environment';\nimport { Logger } from '../../logger/Logger';\nimport {\n AppCommandHandler,\n PreparedAppCommandExecution,\n RunCommand } from\n'../handlers/AppCommandHandler';\nimport { CommandExecutionMode, MiddlewareContext } from './Context';\nimport {\n makeContextAwareFunction,\n provideContext,\n useEnvironment } from\n'../../context/async-context';\nimport { CommandKitErrorCodes, isErrorType } from '../../utils/error-codes';\n\nexport class AppCommandRunner {\n public constructor(private handler: AppCommandHandler) {}\n\n public async runCommand(\n prepared: PreparedAppCommandExecution,\n source: Interaction | Message)\n {\n if (\n source instanceof Message && (\n source.editedTimestamp || source.partial))\n {\n // TODO: handle message edit\n return;\n }\n\n const { commandkit } = this.handler;\n\n const executionMode = this.getExecutionMode(source);\n\n let runCommand: RunCommand | null = null;\n\n const env = new CommandKitEnvironment(commandkit);\n env.setType(CommandKitEnvironmentType.CommandHandler);\n env.variables.set('commandHandlerType', 'app');\n env.variables.set('currentCommandName', prepared.command.command.name);\n env.variables.set('execHandlerKind', executionMode);\n\n const ctx = new MiddlewareContext(commandkit, {\n environment: env,\n executionMode,\n interaction: !(source instanceof Message) ?\n source as ChatInputCommandInteraction :\n null as never,\n message: source instanceof Message ? source : null as never,\n forwarded: false,\n customArgs: {\n setCommandRunner: (fn: RunCommand) => {\n runCommand = fn;\n }\n },\n messageCommandParser: prepared.messageCommandParser\n });\n\n let middlewaresCanceled = false;\n\n // Run middleware before command execution\n if (prepared.middlewares.length) {\n await provideContext(env, async () => {\n for (const middleware of prepared.middlewares) {\n try {\n await middleware.data.beforeExecute(ctx);\n } catch (e) {\n if (isErrorType(e, CommandKitErrorCodes.ExitMiddleware)) {\n middlewaresCanceled = true;\n return;\n }\n\n if (\n isErrorType(e, [\n CommandKitErrorCodes.ForwardedCommand,\n CommandKitErrorCodes.InvalidCommandPrefix]\n ))\n {\n continue;\n }\n\n throw e;\n }\n }\n });\n }\n\n if (!ctx.cancelled) {\n // Determine which function to run based on whether we're executing a command or subcommand\n const targetData = prepared.command.data;\n const fn = targetData[executionMode];\n\n if (!fn) {\n Logger.warn(\n `Command ${prepared.command.command.name} has no handler for ${executionMode}`\n );\n }\n\n if (fn) {\n try {\n const _executeCommand = makeContextAwareFunction(\n env,\n async () => {\n env.registerDeferredFunction((env) => {\n env.markEnd();\n const error = env.getExecutionError();\n const marker = env.getMarker();\n const time = `${env.getExecutionTime().toFixed(2)}ms`;\n\n if (error) {\n Logger.error(\n `[${marker} - ${time}] Error executing command: ${error.stack || error}`\n );\n\n return;\n }\n\n Logger.info(\n `[${marker} - ${time}] Command executed successfully`\n );\n });\n\n return fn(ctx.clone());\n },\n this.#finalizer.bind(this)\n );\n\n const executeCommand =\n runCommand != null ?\n (runCommand as RunCommand)(_executeCommand) :\n _executeCommand;\n\n env.markStart(prepared.command.data.command.name);\n\n const res = await commandkit.plugins.execute(async (ctx, plugin) => {\n return plugin.executeCommand(\n ctx,\n env,\n source,\n prepared,\n executeCommand\n );\n });\n\n if (!res) {\n await executeCommand();\n }\n } catch (e) {\n if (isErrorType(e, CommandKitErrorCodes.ExitMiddleware)) {\n middlewaresCanceled = true;\n }\n\n if (\n !isErrorType(e, [\n CommandKitErrorCodes.ForwardedCommand,\n CommandKitErrorCodes.ExitMiddleware]\n ))\n {\n Logger.error(e);\n }\n }\n }\n }\n\n // Run middleware after command execution\n if (!middlewaresCanceled && prepared.middlewares.length) {\n await provideContext(env, async () => {\n for (const middleware of prepared.middlewares) {\n await middleware.data.afterExecute(ctx);\n }\n });\n }\n }\n\n async #finalizer() {\n const env = useEnvironment();\n\n await env.runDeferredFunctions();\n\n env.clearAllDeferredFunctions();\n }\n\n public getExecutionMode(source: Interaction | Message): CommandExecutionMode {\n if (source instanceof Message) return CommandExecutionMode.Message;\n if (source.isChatInputCommand()) return CommandExecutionMode.SlashCommand;\n if (source.isAutocomplete()) {\n return CommandExecutionMode.Autocomplete;\n }\n if (source.isMessageContextMenuCommand()) {\n return CommandExecutionMode.MessageContextMenu;\n }\n if (source.isUserContextMenuCommand()) {\n return CommandExecutionMode.UserContextMenu;\n }\n\n return null as never;\n }\n}","import { mkdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { COMMANDKIT_IS_DEV } from './constants';\nimport { existsSync } from 'node:fs';\n\nexport async function generateTypesPackage() {\n const location = join(process.cwd(), 'node_modules', 'commandkit-types');\n if (!COMMANDKIT_IS_DEV) return location;\n const packageJSON = join(location, 'package.json');\n const index = join(location, 'index.js');\n const types = join(location, 'index.d.ts');\n const locale = join(location, 'locale_types.d.ts');\n const command = join(location, 'command.d.ts');\n\n const packageJSONContent = {\n name: 'commandkit-types',\n version: '1.0.0',\n description: 'CommandKit types package',\n type: 'commonjs',\n main: 'index.js',\n types: 'index.d.ts'\n };\n\n const indexContent = `module.exports = {};`;\n\n // Restructuring the type declarations to properly extend rather than replace types\n const typesContent = `// Main types index file - imports all type declarations\nimport './locale_types';\nimport './command';\nexport {};\n`;\n\n // Properly set up locale_types to extend the CommandLocalizationTypeData interface\n const localeTypesContent = `// Auto-generated localization types\n export {};\ndeclare module 'commandkit' {\n interface CommandLocalizationTypeData {\n // This interface will be populated with localizations\n }\n\n type TranslatableCommandName = keyof CommandLocalizationTypeData\n}`;\n\n // Properly set up command types to extend the CommandTypeData interface\n const commandTypesContent = `// Auto-generated command types\n export {};\ndeclare module 'commandkit' {\n type CommandTypeData = string\n}`;\n\n await mkdir(location, { recursive: true }).catch(() => {});\n await writeFile(packageJSON, JSON.stringify(packageJSONContent, null, 2));\n await writeFile(index, indexContent);\n await writeFile(types, typesContent);\n await writeFile(locale, localeTypesContent);\n await writeFile(command, commandTypesContent);\n\n return location;\n}\n\nexport async function rewriteLocalesDeclaration(data: string) {\n const localeTypesContent = `// Auto-generated localization types\n declare module 'commandkit' {\n ${data}\n }\n export {};`;\n\n const location = join(process.cwd(), 'node_modules', 'commandkit-types');\n\n if (!existsSync(location)) return;\n\n const locale = join(location, 'locale_types.d.ts');\n\n await writeFile(locale, localeTypesContent, { encoding: 'utf-8' });\n}\n\nexport async function rewriteCommandDeclaration(data: string) {\n const commandTypesContent = `// Auto-generated command types\n declare module 'commandkit' {\n ${data}\n}\n export {};\n`;\n\n const location = join(process.cwd(), 'node_modules', 'commandkit-types');\n\n if (!existsSync(location)) return;\n\n const type = join(location, 'command.d.ts');\n\n await writeFile(type, commandTypesContent, { encoding: 'utf-8' });\n}","import type { CommandKit } from '../../CommandKit';\nimport {\n Awaitable,\n Collection,\n CommandInteraction,\n ContextMenuCommandBuilder,\n Events,\n Interaction,\n Locale,\n Message,\n PartialMessage,\n SlashCommandBuilder } from\n'discord.js';\nimport { Context } from '../commands/Context';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport {\n ApiTranslatableCommandOptions,\n TranslatableCommandOptions } from\n'../i18n/Translation';\nimport { MessageCommandParser } from '../commands/MessageCommandParser';\nimport { CommandKitErrorCodes, isErrorType } from '../../utils/error-codes';\nimport { CommandRegistrar } from '../register/CommandRegistrar';\nimport { GenericFunction } from '../../context/async-context';\nimport { Logger } from '../../logger/Logger';\nimport { AsyncFunction } from '../../cache';\nimport { Command, Middleware } from '../router';\nimport { AppCommandRunner } from '../commands/AppCommandRunner';\nimport { COMMANDKIT_IS_DEV } from '../../utils/constants';\nimport { rewriteCommandDeclaration } from '../../utils/types-package';\n\nexport type RunCommand = <T extends AsyncFunction>(fn: T) => T;\n\ninterface AppCommand {\n command: SlashCommandBuilder | Record<string, any>;\n chatInput?: (ctx: Context) => Awaitable<unknown>;\n autocomplete?: (ctx: Context) => Awaitable<unknown>;\n message?: (ctx: Context) => Awaitable<unknown>;\n messageContextMenu?: (ctx: Context) => Awaitable<unknown>;\n userContextMenu?: (ctx: Context) => Awaitable<unknown>;\n}\n\ninterface AppCommandMiddleware {\n beforeExecute: (ctx: Context) => Awaitable<unknown>;\n afterExecute: (ctx: Context) => Awaitable<unknown>;\n}\n\nexport interface LoadedCommand {\n command: Command;\n data: AppCommand;\n guilds?: string[];\n}\n\nexport type CommandTypeData = string;\n\nexport type ResolvableCommand = CommandTypeData | (string & {});\n\ninterface LoadedMiddleware {\n middleware: Middleware;\n data: AppCommandMiddleware;\n}\n\nexport interface PreparedAppCommandExecution {\n command: LoadedCommand;\n middlewares: LoadedMiddleware[];\n messageCommandParser?: MessageCommandParser;\n}\n\ntype CommandBuilderLike =\nSlashCommandBuilder |\nContextMenuCommandBuilder |\nRecord<string, any>;\n\nconst commandDataSchema = {\n command: (c: unknown) =>\n c instanceof SlashCommandBuilder ||\n c instanceof ContextMenuCommandBuilder ||\n c && typeof c === 'object',\n chatInput: (c: unknown) => typeof c === 'function',\n autocomplete: (c: unknown) => typeof c === 'function',\n message: (c: unknown) => typeof c === 'function',\n messageContextMenu: (c: unknown) => typeof c === 'function',\n userContextMenu: (c: unknown) => typeof c === 'function'\n};\n\nconst middlewareDataSchema = {\n beforeExecute: (c: unknown) => typeof c === 'function',\n afterExecute: (c: unknown) => typeof c === 'function'\n};\n\nexport class AppCommandHandler {\n private loadedCommands = new Collection<string, LoadedCommand>();\n private loadedMiddlewares = new Collection<string, LoadedMiddleware>();\n\n // Name-to-ID mapping for easier lookup\n private commandNameToId = new Map<string, string>();\n private subcommandPathToId = new Map<string, string>();\n\n public readonly registrar: CommandRegistrar;\n private onInteraction: GenericFunction<[Interaction]> | null = null;\n private onMessageCreate: GenericFunction<[Message]> | null = null;\n private onMessageUpdate: GenericFunction<\n [Message | PartialMessage, Message | PartialMessage]> |\n null = null;\n public readonly commandRunner = new AppCommandRunner(this);\n\n public constructor(public readonly commandkit: CommandKit) {\n this.registrar = new CommandRegistrar(this.commandkit);\n }\n\n public getCommandsArray() {\n return Array.from(this.loadedCommands.values());\n }\n\n public registerCommandHandler() {\n this.onInteraction ??= async (interaction: Interaction) => {\n const success = await this.commandkit.plugins.execute(\n async (ctx, plugin) => {\n return plugin.onBeforeInteraction(ctx, interaction);\n }\n );\n\n // plugin will handle the interaction\n if (success) return;\n\n const isCommandLike =\n interaction.isCommand() ||\n interaction.isAutocomplete() ||\n interaction.isUserContextMenuCommand() ||\n interaction.isMessageContextMenuCommand();\n\n if (!isCommandLike) return;\n\n const prepared = await this.prepareCommandRun(interaction);\n\n if (!prepared) return;\n\n return this.commandRunner.runCommand(prepared, interaction);\n };\n\n this.onMessageCreate ??= async (message: Message) => {\n const success = await this.commandkit.plugins.execute(\n async (ctx, plugin) => {\n return plugin.onBeforeMessageCommand(ctx, message);\n }\n );\n\n // plugin will handle the message\n if (success) return;\n if (message.author.bot) return;\n\n const prepared = await this.prepareCommandRun(message);\n\n if (!prepared) return;\n\n return this.commandRunner.runCommand(prepared, message);\n };\n\n this.onMessageUpdate ??= async (\n oldMessage: Message | PartialMessage,\n newMessage: Message | PartialMessage) =>\n {\n const success = await this.commandkit.plugins.execute(\n async (ctx, plugin) => {\n return plugin.onBeforeMessageUpdateCommand(\n ctx,\n oldMessage,\n newMessage\n );\n }\n );\n\n // plugin will handle the message\n if (success) return;\n if (oldMessage.partial || newMessage.partial) return;\n if (oldMessage.author.bot) return;\n\n const prepared = await this.prepareCommandRun(newMessage);\n\n if (!prepared) return;\n\n return this.commandRunner.runCommand(prepared, newMessage);\n };\n\n this.commandkit.client.on(Events.InteractionCreate, this.onInteraction);\n this.commandkit.client.on(Events.MessageCreate, this.onMessageCreate);\n this.commandkit.client.on(Events.MessageUpdate, this.onMessageUpdate);\n }\n\n public async prepareCommandRun(\n source: Interaction | Message,\n cmdName?: string)\n : Promise<PreparedAppCommandExecution | null> {\n let parser: MessageCommandParser | undefined;\n\n // Extract command name (and possibly subcommand) from the source\n if (!cmdName) {\n if (source instanceof Message) {\n if (source.author.bot) return null;\n\n const prefix =\n await this.commandkit.config.getMessageCommandPrefix(source);\n\n parser = new MessageCommandParser(\n source,\n Array.isArray(prefix) ? prefix : [prefix],\n (command: string) => {\n // Find the command by name\n const commandId = this.commandNameToId.get(command);\n if (!commandId) return null;\n\n const loadedCommand = this.loadedCommands.get(commandId);\n if (!loadedCommand) return null;\n\n if (\n source.guildId &&\n loadedCommand.guilds?.length &&\n !loadedCommand.guilds.includes(source.guildId!))\n {\n return null;\n }\n\n const json =\n 'toJSON' in loadedCommand.data.command ?\n loadedCommand.data.command.toJSON() :\n loadedCommand.data.command;\n\n return (\n json.options?.reduce(\n (acc: Record<string, unknown>, opt: Record<string, any>) => {\n acc[opt.name] = opt.type;\n return acc;\n },\n {} as Record<string, unknown>\n ) ?? {});\n\n }\n );\n\n try {\n const fullCommand = parser.getFullCommand();\n const parts = fullCommand.split(' ');\n cmdName = parts[0];\n } catch (e) {\n if (isErrorType(e, CommandKitErrorCodes.InvalidCommandPrefix)) {\n return null;\n }\n Logger.error(e);\n return null;\n }\n } else {\n if (!source.isCommand()) return null;\n\n cmdName = source.commandName;\n }\n }\n\n // Find the command by name\n const commandId = this.commandNameToId.get(cmdName);\n if (!commandId) return null;\n\n const loadedCommand = this.loadedCommands.get(commandId);\n if (!loadedCommand) return null;\n\n // If this is a guild specific command, check if we're in the right guild\n if (\n source instanceof CommandInteraction &&\n source.guildId &&\n loadedCommand.guilds?.length &&\n !loadedCommand.guilds.includes(source.guildId))\n {\n return null;\n }\n\n // Collect all applicable middleware\n const middlewares: LoadedMiddleware[] = [];\n\n // Add command-level middleware\n for (const middlewareId of loadedCommand.command.middlewares) {\n const middleware = this.loadedMiddlewares.get(middlewareId);\n if (middleware) {\n middlewares.push(middleware);\n }\n }\n\n // No middleware for subcommands since they inherit from parent command\n return {\n command: loadedCommand,\n middlewares,\n messageCommandParser: parser\n };\n }\n\n public async reloadCommands() {\n this.loadedCommands.clear();\n this.loadedMiddlewares.clear();\n this.commandNameToId.clear();\n this.subcommandPathToId.clear();\n\n await this.loadCommands();\n }\n\n public async loadCommands() {\n const commandsRouter = this.commandkit.commandsRouter;\n\n if (!commandsRouter) {\n throw new Error('Commands router has not yet initialized');\n }\n\n const { commands, middlewares } = commandsRouter.getData();\n\n // Load middlewares first\n for (const [id, middleware] of middlewares) {\n await this.loadMiddleware(id, middleware);\n }\n\n // Load commands\n for (const [id, command] of commands) {\n await this.loadCommand(id, command);\n }\n\n // generate types\n if (COMMANDKIT_IS_DEV) {\n await rewriteCommandDeclaration(\n `type CommandTypeData = ${Array.from(\n this.loadedCommands.\n mapValues((v) => JSON.stringify(v.command.name)).\n values()\n ).join(' | ')}`\n );\n }\n }\n\n private async loadMiddleware(id: string, middleware: Middleware) {\n try {\n const data = await import(\n `${toFileURL(middleware.path)}?t=${Date.now()}`\n );\n\n let handlerCount = 0;\n for (const [key, validator] of Object.entries(middlewareDataSchema)) {\n if (data[key] && !(await validator(data[key]))) {\n throw new Error(\n `Invalid export for middleware ${id}: ${key} does not match expected value`\n );\n }\n\n if (data[key]) handlerCount++;\n }\n\n if (handlerCount === 0) {\n throw new Error(\n `Invalid export for middleware ${id}: at least one handler function must be provided`\n );\n }\n\n this.loadedMiddlewares.set(id, { middleware, data });\n } catch (error) {\n Logger.error(`Failed to load middleware ${id}`, error);\n }\n }\n\n private async loadCommand(id: string, command: Command) {\n try {\n // Skip if path is null (directory-only command group)\n if (command.path === null) {\n this.loadedCommands.set(id, {\n command,\n data: {\n command: {\n name: command.name,\n description: `${command.name} commands`,\n type: 1\n }\n }\n });\n return;\n }\n\n const data = await import(`${toFileURL(command.path)}?t=${Date.now()}`);\n\n if (!data.command) {\n throw new Error(\n `Invalid export for command ${command.name}: no command definition found`\n );\n }\n\n let handlerCount = 0;\n for (const [key, validator] of Object.entries(commandDataSchema)) {\n if (key !== 'command' && data[key]) handlerCount++;\n if (data[key] && !(await validator(data[key]))) {\n throw new Error(\n `Invalid export for command ${command.name}: ${key} does not match expected value`\n );\n }\n }\n\n if (handlerCount === 0) {\n throw new Error(\n `Invalid export for command ${command.name}: at least one handler function must be provided`\n );\n }\n\n const localizedCommand = await this.applyLocalizations({\n ...data.command\n });\n\n this.loadedCommands.set(id, {\n command,\n guilds: data.guilds,\n data: {\n ...data,\n command: localizedCommand\n }\n });\n\n // Map command name to ID for easier lookup\n this.commandNameToId.set(command.name, id);\n } catch (error) {\n Logger.error(`Failed to load command ${command.name} (${id})`, error);\n }\n }\n\n public async applyLocalizations(command: CommandBuilderLike) {\n const localization = this.commandkit.config.localizationStrategy;\n const validLocales = Object.values(Locale).filter(\n (v) => typeof v === 'string'\n );\n\n const localizationKey = command.name;\n\n for (const locale of validLocales) {\n const translation = await localization.locateTranslation(\n localizationKey,\n locale\n );\n if (!translation?.command) continue;\n\n if (command instanceof SlashCommandBuilder) {\n // Apply command-level localizations\n if (translation.command.name) {\n command.setNameLocalization(locale, translation.command.name);\n }\n\n if (translation.command.description) {\n command.setDescriptionLocalization(\n locale,\n translation.command.description\n );\n }\n\n const raw = command.toJSON();\n\n if (raw.options?.length && translation.command.options?.length) {\n const opt = translation.command.options.slice();\n let o: TranslatableCommandOptions;\n\n while (o = opt.shift()!) {\n raw.options?.forEach((option) => {\n if (option.name === o.ref) {\n if (option.name) {\n option.name_localizations ??= {};\n option.name_localizations[locale] = o.name;\n }\n\n if (option.description) {\n option.description_localizations ??= {};\n option.description_localizations[locale] = o.description;\n }\n\n const opts = (\n option as typeof option & {\n options: ApiTranslatableCommandOptions[] | undefined;\n }).\n options;\n\n // Handle nested options (subcommand parameters)\n if (opts?.length && o.options?.length) {\n o.options.forEach((subOpt) => {\n const targetOption = opts?.find(\n (opt) => opt.name === subOpt.name\n );\n if (targetOption) {\n targetOption.name_localizations ??= {};\n targetOption.name_localizations[locale] = subOpt.name;\n\n if ('description' in targetOption) {\n targetOption.description_localizations ??= {};\n targetOption.description_localizations[locale] =\n subOpt.description;\n }\n }\n });\n }\n }\n });\n }\n }\n } else if (command instanceof ContextMenuCommandBuilder) {\n if (translation.command.name) {\n command.setNameLocalization(locale, translation.command.name);\n }\n } else {\n // Raw command object\n command.name_localizations ??= {};\n command.name_localizations[locale] = translation.command.name;\n\n if (command.description) {\n command.description_localizations ??= {};\n command.description_localizations[locale] =\n translation.command.description;\n }\n\n if (command.options?.length && translation.command.options?.length) {\n const opt = translation.command.options.slice();\n let o: TranslatableCommandOptions;\n\n while (o = opt.shift()!) {\n command.options.forEach((option: any) => {\n if (option.name === o.ref) {\n option.name_localizations ??= {};\n option.name_localizations[locale] = o.name;\n\n if ('description' in option) {\n option.description_localizations ??= {};\n option.description_localizations[locale] = o.description;\n }\n\n const opts = option.options as ApiTranslatableCommandOptions[];\n\n if (opts?.length && o.options?.length) {\n o.options.forEach((subOpt) => {\n const targetOption = opts?.find(\n (opt) => opt.name === subOpt.name\n );\n if (targetOption) {\n targetOption.name_localizations ??= {};\n targetOption.name_localizations[locale] = subOpt.name;\n\n if ('description' in targetOption) {\n targetOption.description_localizations ??= {};\n targetOption.description_localizations[locale] =\n subOpt.description;\n }\n }\n });\n }\n }\n });\n }\n }\n }\n }\n\n return command;\n }\n}","import { Collection } from 'discord.js';\nimport { Dirent, existsSync } from 'node:fs';\nimport { readdir } from 'node:fs/promises';\nimport { basename, extname, join, normalize } from 'node:path';\n\nexport interface Command {\n id: string;\n name: string;\n path: string;\n relativePath: string;\n parentPath: string;\n middlewares: Array<string>;\n category: string | null;\n}\n\nexport interface Middleware {\n id: string;\n name: string;\n path: string;\n relativePath: string;\n parentPath: string;\n}\n\nexport interface ParsedCommandData {\n commands: Record<string, Command>;\n middlewares: Record<string, Middleware>;\n}\n\nexport interface CommandsRouterOptions {\n entrypoint: string;\n}\n\nconst MIDDLEWARE_PATTERN = /^\\+middleware\\.(m|c)?(j|t)sx?$/;\nconst COMMAND_PATTERN = /^(\\w+)\\.(m|c)?(j|t)sx?$/;\nconst CATEGORY_PATTERN = /^\\(\\w+\\)$/;\n\nexport class CommandsRouter {\n private commands = new Collection<string, Command>();\n private middlewares = new Collection<string, Middleware>();\n\n public constructor(private readonly options: CommandsRouterOptions) {}\n\n public populate(data: ParsedCommandData) {\n for (const [id, command] of Object.entries(data.commands)) {\n this.commands.set(id, command);\n }\n\n for (const [id, middleware] of Object.entries(data.middlewares)) {\n this.middlewares.set(id, middleware);\n }\n }\n\n public isValidPath(): boolean {\n return existsSync(this.options.entrypoint);\n }\n\n private isCommand(name: string): boolean {\n return COMMAND_PATTERN.test(name);\n }\n\n private isMiddleware(name: string): boolean {\n return MIDDLEWARE_PATTERN.test(name);\n }\n\n private isCategory(name: string): boolean {\n return CATEGORY_PATTERN.test(name);\n }\n\n public clear() {\n this.commands.clear();\n this.middlewares.clear();\n }\n\n public async scan() {\n const entries = await readdir(this.options.entrypoint, {\n withFileTypes: true\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n const fullPath = join(this.options.entrypoint, entry.name);\n\n if (entry.isDirectory()) {\n const category = this.isCategory(entry.name) ?\n entry.name.slice(1, -1) :\n null;\n\n await this.traverse(fullPath, category);\n } else {\n await this.handle(entry);\n }\n }\n\n await this.applyMiddlewares();\n\n return this.toJSON();\n }\n\n public getData() {\n return {\n commands: this.commands,\n middlewares: this.middlewares\n };\n }\n\n public toJSON() {\n return {\n commands: Object.fromEntries(this.commands.entries()),\n middlewares: Object.fromEntries(this.middlewares.entries())\n };\n }\n\n private async traverse(path: string, category: string | null) {\n const entries = await readdir(path, {\n withFileTypes: true\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n if (entry.isFile()) {\n if (this.isCommand(entry.name) || this.isMiddleware(entry.name)) {\n await this.handle(entry, category);\n }\n }\n\n // TODO: handle subcommands\n }\n }\n\n private async handle(entry: Dirent, category: string | null = null) {\n const name = entry.name;\n const path = join(entry.parentPath, entry.name);\n\n if (this.isCommand(name)) {\n const command: Command = {\n id: crypto.randomUUID(),\n name: basename(path, extname(path)),\n path,\n category,\n parentPath: entry.parentPath,\n relativePath: this.replaceEntrypoint(path),\n middlewares: []\n };\n\n this.commands.set(command.id, command);\n } else if (this.isMiddleware(name)) {\n const middleware: Middleware = {\n id: crypto.randomUUID(),\n name: basename(path, extname(path)),\n path,\n relativePath: this.replaceEntrypoint(path),\n parentPath: entry.parentPath\n };\n\n this.middlewares.set(middleware.id, middleware);\n }\n }\n\n private applyMiddlewares() {\n this.commands.forEach((command) => {\n const commandPath = command.parentPath;\n const samePathMiddlewares = Array.from(this.middlewares.values()).\n filter((middleware) => {\n // if middleware's parent path is the same as command's parent path\n return middleware.parentPath === commandPath;\n }).\n map((middleware) => middleware.id);\n\n command.middlewares = Array.from(\n new Set([...command.middlewares, ...samePathMiddlewares])\n );\n });\n }\n\n private replaceEntrypoint(path: string) {\n const normalized = normalize(path);\n return normalized.replace(this.options.entrypoint, '');\n }\n}","import { Collection } from 'discord.js';\nimport { existsSync } from 'node:fs';\nimport { readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\n\n/**\n * Configuration options for the EventsRouter\n * @interface EventsRouterOptions\n */\nexport interface EventsRouterOptions {\n /** Root directory path where event handlers are located */\n entrypoint: string;\n}\n\n/**\n * Represents a parsed event with its handlers\n * @interface ParsedEvent\n */\nexport interface ParsedEvent {\n /** Name of the event derived from directory name */\n event: string;\n /** Absolute path to the event directory */\n path: string;\n /** Array of file paths to event listener handlers */\n listeners: string[];\n /** Namespace of the event */\n namespace: string | null;\n}\n\n/** Collection of event names to their parsed metadata */\nexport type EventsTree = Record<string, ParsedEvent>;\n\n/**\n * Router for discovering and managing event handler files in a directory structure.\n * Events are represented by directories, and handlers are files within those directories.\n */\nexport class EventsRouter {\n /** Internal storage of parsed events */\n private events = new Collection<string, ParsedEvent>();\n\n /**\n * Creates a new EventsRouter instance\n * @param options - Configuration options for the router\n * @throws Error if entrypoint is not provided\n */\n public constructor(private options: EventsRouterOptions) {\n if (!options.entrypoint) {\n throw new Error('Entrypoint directory must be provided');\n }\n }\n\n /**\n * Find a parsed event by its name\n * @param event - Name of the event to find\n * @returns Parsed event metadata or null if not found\n */\n public match(event: string): ParsedEvent | null {\n return this.events.get(event) ?? null;\n }\n\n /**\n * Get the entrypoint directory path\n * @returns Entrypoint directory path\n */\n public get entrypoint(): string {\n return this.options.entrypoint;\n }\n\n /**\n * Checks if the entrypoint path is valid\n */\n public isValidPath() {\n return existsSync(this.entrypoint);\n }\n\n /**\n * Clear all parsed events\n */\n public clear() {\n this.events.clear();\n }\n\n /**\n * Reload and re-scan the entrypoint directory for events\n * @returns Promise resolving to the updated events tree\n */\n public async reload() {\n this.clear();\n return this.scan();\n }\n\n /**\n * Scan the entrypoint directory for events and their handlers\n * @returns Promise resolving to the events tree\n */\n public async scan(): Promise<EventsTree> {\n const dirs = await readdir(this.entrypoint, { withFileTypes: true });\n\n for (const dir of dirs) {\n if (dir.isDirectory()) {\n const path = join(this.entrypoint, dir.name);\n await this.scanEvent(dir.name, path, null, [], true);\n }\n }\n\n return Object.fromEntries(this.events);\n }\n\n /**\n * Convert the internal events Collection to a plain object\n * @returns Events tree as a plain object\n */\n public toJSON(): EventsTree {\n return Object.fromEntries(this.events);\n }\n\n /**\n * Recursively scan a directory for event handlers\n * @param event - Name of the event\n * @param path - Path to the event directory\n * @param listeners - Array to collect listener file paths\n * @returns Promise resolving to the parsed event metadata\n */\n private async scanEvent(\n event: string,\n path: string,\n _namespace: string | null = null,\n listeners: string[] = [],\n isRoot = false)\n : Promise<void> {\n const files = await readdir(path, { withFileTypes: true });\n const isNamespace = isRoot && /^\\(.+\\)$/.test(event);\n\n // if event = (something) pattern then namespace is something\n const namespace = isNamespace ? event.slice(1, -1) : _namespace ?? null;\n\n for (const file of files) {\n if (file.name.includes('_')) continue;\n\n if (file.isDirectory()) {\n const nextPath = join(path, file.name);\n await this.scanEvent(file.name, nextPath, namespace, listeners);\n continue;\n }\n\n if (file.isFile() && /\\.(m|c)?(j|t)sx?$/.test(file.name)) {\n listeners.push(join(file.parentPath, file.name));\n }\n }\n\n if (!isNamespace) {\n this.events.set(event, { event, path, listeners, namespace });\n }\n }\n}","export * from './CommandsRouter';\nexport * from './EventsRouter';","import { CommandKit } from '../../CommandKit';\nimport { ListenerFunction } from '../../events/CommandKitEventsChannel';\nimport { Logger } from '../../logger/Logger';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { ParsedEvent } from '../router';\n\nexport type EventListener = {\n handler: ListenerFunction;\n once: boolean;\n};\n\nexport interface LoadedEvent {\n name: string;\n namespace: string | null;\n event: ParsedEvent;\n listeners: EventListener[];\n mainListener?: EventListener;\n executedOnceListeners?: Set<ListenerFunction>; // Track executed once listeners\n}\n\nexport class AppEventsHandler {\n private loadedEvents = new Map<string, LoadedEvent>();\n public constructor(public readonly commandkit: CommandKit) {}\n\n public async reloadEvents() {\n this.unregisterAll();\n await this.loadEvents();\n }\n\n public async loadEvents() {\n const router = this.commandkit.eventsRouter;\n\n const events = await router.scan();\n\n for (const event of Object.values(events)) {\n const listeners: EventListener[] = [];\n\n for (const listener of event.listeners) {\n const handler = await import(toFileURL(listener, true));\n\n if (!handler.default || typeof handler.default !== 'function') {\n Logger.error(\n `Event handler for ${event.event}${event.namespace ? ` of namespace ${event.namespace}` : ''} does not have a default export or is not a function`\n );\n }\n\n listeners.push({\n handler: handler.default,\n once: !!handler.once\n });\n }\n\n const len = listeners.length;\n\n if (!len) {\n Logger.warn(\n `Event ${event.event}${event.namespace ? ` of namespace ${event.namespace}` : ''} does not have any listeners`\n );\n }\n\n const key = `${event.namespace ? `${event.namespace}:` : ''}${event.event}`;\n\n this.loadedEvents.set(key, {\n name: event.event,\n namespace: event.namespace,\n event,\n listeners\n });\n\n Logger.info(\n `✨ Loaded event ${event.event}${event.namespace ? ` of namespace ${event.namespace}` : ''} with ${len} listener${len === 1 ? '' : 's'}`\n );\n }\n\n this.registerAllClientEvents();\n }\n\n public unregisterAll() {\n this.unregisterAllClientListeners();\n this.loadedEvents.clear();\n }\n\n public registerAllClientEvents() {\n const client = this.commandkit.client;\n\n for (const [key, data] of this.loadedEvents.entries()) {\n const { name, listeners, namespace } = data;\n\n // Separate listeners into \"once\" and \"on\" groups\n const onceListeners = listeners.filter((listener) => listener.once);\n const onListeners = listeners.filter((listener) => !listener.once);\n\n // Initialize set to track executed once listeners\n const executedOnceListeners = new Set<ListenerFunction>();\n\n // Create main handler for regular \"on\" listeners\n const mainHandler: ListenerFunction = async (...args) => {\n for (const listener of onListeners) {\n try {\n await listener.handler(...args);\n } catch (e) {\n Logger.error(\n `Error handling event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`,\n\n e\n );\n }\n }\n };\n\n // Create handler for \"once\" listeners with cleanup logic\n const onceHandler: ListenerFunction = async (...args) => {\n for (const listener of onceListeners) {\n try {\n // Skip if already executed (shouldn't happen with proper .once registration, but just in case)\n if (executedOnceListeners.has(listener.handler)) continue;\n\n await listener.handler(...args);\n executedOnceListeners.add(listener.handler);\n } catch (e) {\n Logger.error(\n `Error handling event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`,\n\n e\n );\n }\n }\n\n // Cleanup: Remove once listeners that have been executed\n if (\n executedOnceListeners.size === onceListeners.length &&\n onListeners.length === 0)\n {\n // If all once listeners executed and no regular listeners, remove event entirely\n this.loadedEvents.delete(key);\n Logger.info(\n `🧹 Cleaned up completed once-only event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`\n\n );\n }\n };\n\n // Store main handlers in loadedEvents for later unregistration\n this.loadedEvents.set(key, {\n ...data,\n mainListener:\n onListeners.length > 0 ?\n { handler: mainHandler, once: false } :\n undefined,\n executedOnceListeners\n });\n\n // Register handlers with appropriate methods\n if (namespace) {\n if (onListeners.length > 0) {\n this.commandkit.events.on(namespace, name, mainHandler);\n }\n if (onceListeners.length > 0) {\n this.commandkit.events.once(namespace, name, onceHandler);\n }\n } else {\n if (onListeners.length > 0) {\n client.on(name, mainHandler);\n }\n if (onceListeners.length > 0) {\n client.once(name, onceHandler);\n }\n }\n\n Logger.info(\n `🔌 Registered event ${name}${\n namespace ? ` of namespace ${namespace}` : ''} (${\n onListeners.length} regular, ${onceListeners.length} once-only)`\n );\n }\n }\n\n public unregisterAllClientListeners() {\n const client = this.commandkit.client;\n\n for (const [\n key,\n { name, mainListener, namespace }] of\n this.loadedEvents.entries()) {\n if (mainListener) {\n if (namespace) {\n this.commandkit.events.off(namespace, name, mainListener.handler);\n } else {\n client.off(name, mainListener.handler);\n }\n } else {\n if (namespace) {\n this.commandkit.events.removeAllListeners(namespace, name);\n } else {\n client.removeAllListeners(name);\n }\n }\n\n this.loadedEvents.delete(key);\n\n Logger.info(\n `🗑️ Unregistered event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`\n\n );\n }\n }\n}","import { rimrafSync } from 'rimraf';\nimport { join } from 'node:path';\nimport fs from 'node:fs';\nimport colors from '../utils/colors';\nimport { ResolvedCommandKitConfig } from '../config/utils';\nimport { generateTypesPackage } from '../utils/types-package';\n\nlet ts: typeof import('typescript') | undefined;\n\nexport function write(message: any) {\n process.stdout.write(message);\n process.stdout.write('\\n');\n}\n\n/**\n * @returns {never}\n */\nexport function panic(message: any): never {\n write(colors.red(`Error: ${message}`));\n process.exit(1);\n}\n\nexport function findPackageJSON() {\n const cwd = process.cwd();\n const target = join(cwd, 'package.json');\n\n if (!fs.existsSync(target)) {\n panic('Could not find package.json in current directory.');\n }\n\n return JSON.parse(fs.readFileSync(target, 'utf8'));\n}\n\nasync function ensureTypeScript(target: string) {\n const isTypeScript = /\\.(c|m)?tsx?$/.test(target);\n\n if (!isTypeScript) return false;\n if (process.features.typescript) return true;\n\n if (!ts) {\n try {\n ts = await import('typescript');\n } catch {\n panic('TypeScript must be installed to use TypeScript config files.');\n }\n }\n\n return true;\n}\n\nexport async function loadConfigFileFromPath(\ntarget: string)\n: Promise<ResolvedCommandKitConfig> {\n await ensureExists(target);\n\n const isTs = await ensureTypeScript(target);\n\n if (isTs && ts) {\n const { transpileModule } = ts;\n const src = fs.readFileSync(target, 'utf8');\n const { outputText } = transpileModule(src, {\n compilerOptions: {\n module: ts.ModuleKind.ESNext,\n target: ts.ScriptTarget.ESNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext\n },\n fileName: target\n });\n\n const nodeModulesPath = await generateTypesPackage();\n\n const tmpFile = join(nodeModulesPath, 'compiled-commandkit.config.mjs');\n\n fs.writeFileSync(tmpFile, outputText);\n\n target = tmpFile;\n }\n\n /**\n * @type {import('..').CommandKitConfig}\n */\n const config = await import(`file://${target}`).then(\n (conf) => conf.default || conf\n );\n\n return config;\n}\n\nasync function ensureExists(loc: string) {\n const exists = fs.existsSync(loc);\n\n if (!exists) {\n throw new Error(`File not found: ${loc}`);\n }\n}\n\nexport function erase(dir: string) {\n rimrafSync(dir);\n}\n\nexport async function copyLocaleFiles(_from: string, _to: string) {\n const resolvedFrom = join(process.cwd(), _from);\n const resolvedTo = join(process.cwd(), _to);\n\n const localePaths = ['app/locales'];\n const srcLocalePaths = localePaths.map((path) => join(resolvedFrom, path));\n const destLocalePaths = localePaths.map((path) => join(resolvedTo, path));\n\n for (const localePath of srcLocalePaths) {\n if (!fs.existsSync(localePath)) {\n continue;\n }\n\n // copy localePath to destLocalePath\n const destLocalePath = destLocalePaths[srcLocalePaths.indexOf(localePath)];\n\n if (!fs.existsSync(destLocalePath)) {\n fs.promises.mkdir(destLocalePath, { recursive: true });\n }\n\n await fs.promises.cp(localePath, destLocalePath, {\n recursive: true,\n force: true\n });\n }\n}","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { loadConfigFileFromPath } from '../cli/common';\nimport { getConfig } from './config';\n\nconst CONFIG_FILE_NAMES = [\n'commandkit.config.js',\n'commandkit.config.mjs',\n'commandkit.config.cjs',\n'commandkit.config.ts'];\n\n\nfunction findConfigFile(cwd: string) {\n const locations = CONFIG_FILE_NAMES.map((name) => join(cwd, name));\n\n for (const location of locations) {\n if (existsSync(location)) {\n return {\n path: location,\n isTypeScript: /\\.ts$/.test(location)\n };\n }\n }\n\n return null;\n}\n\nlet loadedConfig: ReturnType<typeof getConfig> | null = null;\n\n/**\n * Load the configuration file from the given entrypoint.\n * @param entrypoint The entrypoint to load the configuration file from. Defaults to the current working directory.\n */\nexport async function loadConfigFile(entrypoint = process.cwd()) {\n if (loadedConfig) return loadedConfig;\n const filePath = findConfigFile(entrypoint);\n if (!filePath) return getConfig();\n\n const config = await loadConfigFileFromPath(filePath.path);\n\n loadedConfig = config;\n\n return config;\n}","import type { CommandKit } from '../CommandKit';\nimport { Logger } from '../logger/Logger';\nimport { COMMANDKIT_IS_DEV } from './constants';\n\ninterface IpcMessageCommand {\n event: string;\n path?: string;\n}\n\nexport function registerDevHooks(commandkit: CommandKit) {\n if (!COMMANDKIT_IS_DEV) return;\n\n process.on('message', (message) => {\n if (typeof message !== 'object' || message === null) return;\n\n const { event, path } = message as IpcMessageCommand;\n if (!event) return;\n\n if (process.env.COMMANDKIT_DEBUG_HMR === 'true') {\n Logger.info(`Received HMR event: ${event}${path ? ` for ${path}` : ''}`);\n }\n\n switch (event) {\n case 'reload-commands':\n commandkit.commandHandler.reloadCommands();\n break;\n case 'reload-events':\n commandkit.eventHandler.reloadEvents();\n break;\n case 'reload-locales':\n commandkit.commandHandler.reloadCommands();\n break;\n }\n });\n}","import EventEmitter from 'node:events';\nimport type { AsyncFunction } from '../cache';\nimport type { CommandKit } from '../CommandKit';\nimport type { GenericFunction } from '../context/async-context';\n\nexport type ListenerFunction = GenericFunction | AsyncFunction;\n\nexport class CommandKitEventsChannel {\n private emitter = new EventEmitter();\n\n public constructor(public readonly commandkit: CommandKit) {}\n\n public to(namespace: string) {\n return {\n on: this.on.bind(this, namespace),\n off: this.off.bind(this, namespace),\n once: this.once.bind(this, namespace),\n emit: this.emit.bind(this, namespace),\n removeAllListeners: this.removeAllListeners.bind(this, namespace)\n };\n }\n\n public on(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.on(`${namespace}:${event}`, listener);\n }\n\n public off(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.off(`${namespace}:${event}`, listener);\n }\n\n public once(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.once(`${namespace}:${event}`, listener);\n }\n\n public emit(namespace: string, event: string, ...args: any[]) {\n return this.emitter.emit(`${namespace}:${event}`, ...args);\n }\n\n public removeAllListeners(namespace: string): void;\n public removeAllListeners(namespace: string, event: string): void;\n public removeAllListeners(namespace: string, event?: string): void {\n if (event) {\n this.emitter.removeAllListeners(`${namespace}:${event}`);\n } else {\n this.emitter.removeAllListeners(namespace);\n }\n }\n}","import EventEmitter from 'node:events';\nimport type { CommandKitOptions } from './types';\nimport colors from './utils/colors';\nimport { CacheProvider } from './cache/CacheProvider';\nimport { MemoryCache } from './cache/MemoryCache';\nimport { createElement, Fragment } from './components';\nimport { EventInterceptor } from './components/common/EventInterceptor';\nimport { Awaitable, Events, Locale, Message } from 'discord.js';\nimport { DefaultLocalizationStrategy } from './app/i18n/DefaultLocalizationStrategy';\nimport { findAppDirectory } from './utils/utilities';\nimport { join } from 'node:path';\nimport { AppCommandHandler } from './app/handlers/AppCommandHandler';\nimport { LocalizationStrategy } from './app/i18n/LocalizationStrategy';\nimport { CommandsRouter, EventsRouter } from './app/router';\nimport { AppEventsHandler } from './app/handlers/AppEventsHandler';\nimport { CommandKitPluginRuntime } from './plugins/runtime/CommandKitPluginRuntime';\nimport { loadConfigFile } from './config/loader';\nimport { COMMANDKIT_IS_DEV } from './utils/constants';\nimport { registerDevHooks } from './utils/dev-hooks';\nimport { writeFileSync } from 'node:fs';\nimport { CommandKitEventsChannel } from './events/CommandKitEventsChannel';\nimport { isRuntimePlugin } from './plugins';\nimport { generateTypesPackage } from './utils/types-package';\nimport { Logger } from './logger/Logger';\n\nexport interface CommandKitConfiguration {\n defaultLocale: Locale;\n localizationStrategy: LocalizationStrategy;\n getMessageCommandPrefix: (message: Message) => Awaitable<string | string[]>;\n}\n\n// @ts-ignore\nexport let commandkit: CommandKit;\n\nexport class CommandKit extends EventEmitter {\n #started = false;\n public readonly eventInterceptor: EventInterceptor;\n\n public static readonly createElement = createElement;\n public static readonly Fragment = Fragment;\n\n public readonly config: CommandKitConfiguration = {\n defaultLocale: Locale.EnglishUS,\n localizationStrategy: new DefaultLocalizationStrategy(this),\n getMessageCommandPrefix: () => '!'\n };\n\n public commandsRouter!: CommandsRouter;\n public eventsRouter!: EventsRouter;\n public readonly commandHandler = new AppCommandHandler(this);\n public readonly eventHandler = new AppEventsHandler(this);\n public readonly plugins: CommandKitPluginRuntime;\n public readonly events = new CommandKitEventsChannel(this);\n\n static instance: CommandKit | undefined = undefined;\n\n /**\n * Create a new command and event handler with CommandKit.\n *\n * @param options - The default CommandKit configuration.\n * @see {@link https://commandkit.js.org/docs/guide/commandkit-setup}\n */\n constructor(private options: CommandKitOptions) {\n if (CommandKit.instance) {\n process.emitWarning(\n 'CommandKit instance already exists. Having multiple instance in same project is discouraged and it may lead to unexpected behavior.',\n {\n code: 'MultiInstanceWarning'\n }\n );\n }\n\n if (!options.client) {\n throw new Error(\n colors.red('\"client\" is required when instantiating CommandKit.')\n );\n }\n\n super();\n\n if (\n options.cacheProvider !== null && (\n !options.cacheProvider ||\n !(options.cacheProvider instanceof CacheProvider)))\n {\n options.cacheProvider = new MemoryCache();\n }\n\n this.eventInterceptor = new EventInterceptor(options.client);\n this.plugins = new CommandKitPluginRuntime(this);\n\n if (!CommandKit.instance) {\n CommandKit.instance = this;\n }\n\n // @ts-ignore\n commandkit = CommandKit.instance;\n }\n\n /**\n * Starts the commandkit application.\n * @param token The application token to connect to the discord gateway. If not provided, it will use the `TOKEN` or `DISCORD_TOKEN` environment variable. If set to `false`, it will not login.\n */\n async start(token?: string | false) {\n if (this.#started) return;\n\n if (COMMANDKIT_IS_DEV) {\n try {\n registerDevHooks(this);\n\n await generateTypesPackage();\n } catch (e) {\n // ignore\n if (process.env.COMMANDKIT_DEBUG_TYPEGEN) {\n Logger.error(e);\n }\n }\n }\n\n await this.loadPlugins();\n\n await this.#init();\n\n this.commandHandler.registerCommandHandler();\n this.incrementClientListenersCount();\n\n if (token !== false && !this.options.client.isReady()) {\n this.client.once(Events.ClientReady, async () => {\n await this.commandHandler.registrar.register();\n });\n\n await this.plugins.execute((ctx, plugin) => {\n return plugin.onBeforeClientLogin?.(ctx);\n });\n\n await this.options.client.login(\n token ?? process.env.TOKEN ?? process.env.DISCORD_TOKEN\n );\n\n await this.plugins.execute((ctx, plugin) => {\n return plugin.onAfterClientLogin?.(ctx);\n });\n } else if (this.options.client.isReady()) {\n await this.commandHandler.registrar.register();\n }\n\n this.#started = true;\n }\n\n /**\n * Loads all the plugins.\n */\n async loadPlugins() {\n const config = await loadConfigFile();\n const plugins = config.plugins.filter((p) => isRuntimePlugin(p));\n\n if (!plugins.length) return;\n\n for (const plugin of plugins) {\n await this.plugins.softRegisterPlugin(plugin);\n }\n }\n\n /**\n * Whether or not the commandkit application has started.\n */\n get started() {\n return this.#started;\n }\n\n /**\n * Sets the prefix resolver for the command handler.\n * @param resolver The resolver function.\n */\n setPrefixResolver(\n resolver: (message: Message) => Awaitable<string | string[]>)\n {\n this.config.getMessageCommandPrefix = resolver;\n return this;\n }\n\n /**\n * Sets the default locale for the command handler.\n * @param locale The default locale.\n */\n setDefaultLocale(locale: Locale) {\n this.config.defaultLocale = locale;\n return this;\n }\n\n /**\n * Sets the localization strategy for the command handler.\n * @param strategy The localization strategy.\n */\n setLocalizationStrategy(strategy: LocalizationStrategy) {\n this.config.localizationStrategy = strategy;\n return this;\n }\n\n /**\n * Resolves the current cache provider.\n */\n getCacheProvider(): CacheProvider | null {\n const provider = this.options.cacheProvider;\n return provider ?? null;\n }\n\n /**\n * Get the client attached to this CommandKit instance.\n */\n get client() {\n return this.options.client;\n }\n\n async #init() {\n const appDir = this.getAppDirectory();\n if (!appDir) return;\n\n const commandsPath = this.getPath('commands')!;\n const events = this.getPath('events')!;\n\n this.commandsRouter = new CommandsRouter({\n entrypoint: commandsPath\n });\n\n this.eventsRouter = new EventsRouter({\n entrypoint: events\n });\n\n await this.#initEvents();\n await this.#initCommands();\n }\n\n async #initCommands() {\n await this.plugins.execute((ctx, plugin) => {\n return plugin.onBeforeCommandsLoad(ctx);\n });\n\n if (this.commandsRouter.isValidPath()) {\n const result = await this.commandsRouter.scan();\n\n if (COMMANDKIT_IS_DEV) {\n writeFileSync(\n './.commandkit/commands.json',\n JSON.stringify(result, null, 2)\n );\n }\n }\n\n await this.commandHandler.loadCommands();\n\n await this.plugins.execute((ctx, plugin) => {\n return plugin.onAfterCommandsLoad(ctx);\n });\n }\n\n async #initEvents() {\n await this.plugins.execute((ctx, plugin) => {\n return plugin.onBeforeEventsLoad(ctx);\n });\n\n if (this.eventsRouter.isValidPath()) {\n await this.eventsRouter.scan();\n }\n\n await this.eventHandler.loadEvents();\n\n await this.plugins.execute((ctx, plugin) => {\n return plugin.onAfterEventsLoad(ctx);\n });\n }\n\n /**\n * Updates application commands with the latest from \"commandsPath\".\n */\n async reloadCommands() {\n await this.commandHandler.reloadCommands();\n }\n\n /**\n * Updates application events with the latest from \"eventsPath\".\n */\n async reloadEvents() {\n await this.eventHandler.reloadEvents();\n }\n\n /**\n * Increment the client listeners count.\n */\n incrementClientListenersCount() {\n this.options.client.setMaxListeners(\n this.options.client.getMaxListeners() + 1\n );\n }\n\n /**\n * Decrement the client listeners count.\n */\n decrementClientListenersCount() {\n this.options.client.setMaxListeners(\n this.options.client.getMaxListeners() - 1\n );\n }\n\n /**\n * Path to the app directory. Returns `null` if not found.\n * The lookup order is:\n * - `./app`\n * - `./src/app`\n */\n getAppDirectory() {\n return findAppDirectory();\n }\n\n getPath(to: 'locales' | 'commands' | 'events') {\n const appDir = this.getAppDirectory();\n if (!appDir) return null;\n\n switch (to) {\n case 'locales':\n return join(appDir, 'locales');\n case 'commands':\n return join(appDir, 'commands');\n case 'events':\n return join(appDir, 'events');\n default:\n return to satisfies never;\n }\n }\n}","\n\n\n\n\n/**\n * The current version of CommandKit.\n */\nexport const version: string = /* @__MACRO__ $version */\"0.1.11-dev.20250330063035\";","import { join } from 'node:path';\n\nexport function DevEnv() {\n return Object.assign({}, process.env, {\n NODE_ENV: 'development',\n COMMANDKIT_IS_DEV: 'true'\n });\n}\n\nexport function ProdEnv() {\n return Object.assign({}, process.env, {\n NODE_ENV: 'production',\n COMMANDKIT_IS_DEV: 'false'\n });\n}\n\nexport const CommonEnvFiles = ['.env'];\nexport const DevEnvFiles = [\n'.env.development',\n'.env.development.local',\n'.env.local'];\n\nexport const ProdEnvFiles = [\n'.env.production',\n'.env.production.local',\n'.env.local'];\n\n\nexport const devEnvFileArgs = [...CommonEnvFiles, ...DevEnvFiles];\n\nexport const prodEnvFileArgs = [...CommonEnvFiles, ...ProdEnvFiles];","import { IOType, spawn } from 'node:child_process';\nimport { DevEnv } from './env';\nimport { join } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { panic } from './common';\n\nfunction getStdio(supportsCommands: boolean) {\n if (supportsCommands) {\n return ['pipe', 'pipe', 'pipe', 'ipc'];\n }\n\n return ['pipe', 'pipe', 'pipe'];\n}\n\nexport function createAppProcess(\nfileName: string,\ncwd: string,\nisDev: boolean)\n{\n if (!existsSync(join(cwd, fileName))) {\n panic(`Could not locate the entrypoint file: ${fileName}`);\n }\n\n const stdio = getStdio(isDev) as IOType[];\n\n const ps = spawn(\n 'node',\n [\n `--title=\"CommandKit ${isDev ? 'Development' : 'Production'}\"`,\n '--enable-source-maps',\n fileName],\n\n {\n cwd,\n windowsHide: true,\n env: DevEnv(),\n stdio\n }\n );\n\n ps.stdout?.pipe(process.stdout);\n ps.stderr?.pipe(process.stderr);\n\n return ps;\n}","import { build } from 'tsup';\nimport {\n CompilerPlugin,\n CompilerPluginRuntime,\n fromEsbuildPlugin } from\n'../plugins';\nimport { loadConfigFile } from '../config/loader';\nimport { writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { devEnvFileArgs, prodEnvFileArgs } from './env';\nimport { rimraf } from 'rimraf';\n\nexport interface ApplicationBuildOptions {\n plugins?: CompilerPlugin[];\n esbuildPlugins?: any[];\n isDev?: boolean;\n configPath?: string;\n}\n\nexport async function buildApplication({\n plugins,\n esbuildPlugins,\n isDev,\n configPath\n}: ApplicationBuildOptions) {\n const config = await loadConfigFile(configPath);\n const pluginRuntime = new CompilerPluginRuntime(plugins || []);\n const esbuildPluginList: any[] = pluginRuntime.isEmpty() ?\n [] :\n [pluginRuntime.toEsbuildPlugin()];\n\n if (esbuildPlugins?.length) {\n esbuildPluginList.push(...esbuildPlugins.map(fromEsbuildPlugin));\n }\n\n try {\n const dest = isDev ? '.commandkit' : config.distDir;\n\n // Clean the destination directory\n await rimraf(dest);\n\n await build({\n esbuildPlugins: esbuildPluginList,\n watch: false,\n banner: {\n js: !isDev ?\n '/* Optimized production build generated by commandkit */' :\n ''\n },\n cjsInterop: true,\n dts: false,\n clean: true,\n format: ['esm'],\n shims: true,\n keepNames: true,\n minify: false,\n jsxFactory: 'CommandKit.createElement',\n jsxFragment: 'CommandKit.Fragment',\n minifyIdentifiers: false,\n minifySyntax: false,\n silent: !!isDev,\n splitting: true,\n skipNodeModulesBundle: true,\n name: 'CommandKit',\n sourcemap: true,\n target: 'node16',\n outDir: dest,\n entry: [\n 'src',\n `!${config.distDir}`,\n '!.commandkit',\n '!**/*.test.*',\n '!**/*.spec.*']\n\n });\n\n await injectEntryFile(configPath || process.cwd(), !!isDev, config.distDir);\n } catch (error) {\n console.error('Build failed:', error);\n if (error instanceof Error) {\n console.error('Error details:', error.stack);\n }\n process.exit(1); // Force exit on error\n } finally {\n // Ensure plugins are cleaned up\n await pluginRuntime.cleanup();\n }\n}\n\nconst envScript = (dev: boolean) => `// --- Environment Variables Loader ---\nconst $env = [${(dev ? devEnvFileArgs : prodEnvFileArgs).map((p) => `\"${p}\"`).join(', ')}];\nfor (const file of $env) {\n try {\n process.loadEnvFile(file);\n console.log('\\\\x1b[36m✔ Loaded \\\\x1b[0m\\\\x1b[33m%s\\\\x1b[0m', file);\n } catch {}\n}\n`;\n\nconst requireScript = [\n'// --- CommandKit require() polyfill ---',\n' if (typeof require === \"undefined\") {',\n' const { createRequire } = await import(\"node:module\");',\n' const __require = createRequire(import.meta.url);',\n' Object.defineProperty(globalThis, \"require\", {',\n' value: (id) => {',\n' return __require(id);',\n' },',\n' configurable: true,',\n' enumerable: false,',\n' writable: true,',\n' });',\n' }',\n'// --- CommandKit require() polyfill ---'].\njoin('\\n');\n\nconst antiCrashScript = [\n'// --- CommandKit Anti-Crash Monitor ---',\n\" // 'uncaughtException' event is supposed to be used to perform synchronous cleanup before shutting down the process\",\n' // instead of using it as a means to resume operation.',\n' // But it exists here due to compatibility reasons with discord bot ecosystem.',\n\" const p = (t) => `\\\\x1b[31m${t}\\\\x1b[0m`, b = '[CommandKit Anti-Crash Monitor]', l = console.log, e1 = 'uncaughtException', e2 = 'unhandledRejection';\",\n' if (!process.eventNames().includes(e1)) // skip if it is already handled',\n' process.on(e1, (e) => {',\n' l(p(`${b} Uncaught Exception`)); l(p(b), p(e.stack || e));',\n' })',\n' if (!process.eventNames().includes(e2)) // skip if it is already handled',\n' process.on(e2, (r) => {',\n' l(p(`${b} Unhandled promise rejection`)); l(p(`${b} ${r.stack || r}`));',\n' });',\n'// --- CommandKit Anti-Crash Monitor ---'].\njoin('\\n');\n\nconst wrapInAsyncIIFE = (code: string[]) =>\n`;await (async () => {\\n${code.join('\\n\\n')}\\n})();`;\n\nasync function injectEntryFile(\nconfigPath: string,\nisDev: boolean,\ndistDir?: string)\n{\n const code = `/* Entrypoint File Generated By CommandKit */\n${isDev ? `\\n\\n// Injected for development\\n${wrapInAsyncIIFE([envScript(isDev), antiCrashScript, requireScript])}\\n\\n` : wrapInAsyncIIFE([envScript(isDev), requireScript])}\n\nimport { CommandKit } from 'commandkit';\nimport app from './app.js';\n\nasync function main() {\n const commandkit = new CommandKit({\n client: app,\n });\n\n await commandkit.start();\n}\n\nawait main();\n`;\n\n const dist = isDev ? '.commandkit' : distDir || 'dist';\n\n await writeFile(join(configPath, dist, 'index.js'), code);\n}","import { join } from 'path';\nimport { loadConfigFile } from '../config/loader';\nimport { isCompilerPlugin } from '../plugins';\nimport { createAppProcess } from './app-process';\nimport { buildApplication } from './build';\nimport { watch } from 'chokidar';\nimport { debounce } from '../utils/utilities';\nimport colors from '../utils/colors';\nimport { ChildProcess } from 'node:child_process';\n\nasync function buildAndStart(configPath: string, skipStart = false) {\n const config = await loadConfigFile(configPath);\n const mainFile = join('.commandkit', 'index.js');\n\n await buildApplication({\n configPath,\n isDev: true,\n plugins: config.plugins.filter((p) => isCompilerPlugin(p)),\n esbuildPlugins: config.esbuildPlugins\n });\n\n if (skipStart) return null as never;\n\n const ps = createAppProcess(mainFile, configPath, true);\n\n ps.on('message', (message) => {\n console.log(`Received message from child process: ${message}`);\n });\n\n return ps;\n}\n\nconst isCommandSource = (p: string) =>\np.replaceAll('\\\\', '/').includes('src/app/commands');\n\nconst isEventSource = (p: string) =>\np.replaceAll('\\\\', '/').includes('src/app/events');\n\nconst isLocaleSource = (p: string) =>\np.replaceAll('\\\\', '/').includes('src/app/locales');\n\nexport async function bootstrapDevelopmentServer(configPath?: string) {\n const start = performance.now();\n const cwd = configPath || process.cwd();\n\n const watcher = watch([join(cwd, 'src')], {\n ignoreInitial: true\n });\n\n let ps: ChildProcess | null = null;\n\n const performHMR = debounce(async (path?: string): Promise<boolean> => {\n if (!path || !ps) return false;\n if (!ps.send) return false;\n\n if (isCommandSource(path)) {\n console.log(\n `${colors.cyanBright('Reloading command(s) at ')} ${colors.yellowBright(path)}`\n );\n await buildAndStart(cwd, true);\n ps.send({ event: 'reload-commands', path });\n return true;\n }\n\n if (isEventSource(path)) {\n console.log(\n `${colors.cyanBright('Reloading event(s) at ')} ${colors.yellowBright(path)}`\n );\n await buildAndStart(cwd, true);\n ps.send({ event: 'reload-events', path });\n return true;\n }\n\n if (isLocaleSource(path)) {\n console.log(\n `${colors.cyanBright('Reloading locale(s) at ')} ${colors.yellowBright(path)}`\n );\n await buildAndStart(cwd, true);\n ps.send({ event: 'reload-locales', path });\n return true;\n }\n\n return false;\n }, 300);\n\n const hmrHandler = async (path: string) => {\n const hmr = await performHMR(path);\n if (hmr) return;\n\n console.log(\n `${colors.yellowBright('⚡️ Performing full restart due to the changes in')} ${colors.cyanBright(path)}`\n );\n\n ps?.kill();\n\n ps = await buildAndStart(cwd);\n };\n\n process.stdin.on('data', async (d) => {\n const command = d.toString().trim();\n\n switch (command) {\n case 'r':\n console.log(`Received restart command, restarting...`);\n ps?.kill();\n ps = null;\n await buildAndStart(cwd);\n break;\n case 'rc':\n console.log(`Received reload commands command, reloading...`);\n ps?.send({ event: 'reload-commands' });\n break;\n case 're':\n console.log(`Received reload events command, reloading...`);\n ps?.send({ event: 'reload-events' });\n break;\n case 'rl':\n console.log(`Received reload locales command, reloading...`);\n ps?.send({ event: 'reload-locales' });\n break;\n }\n });\n\n watcher.on('change', hmrHandler);\n watcher.on('add', hmrHandler);\n watcher.on('unlink', hmrHandler);\n watcher.on('unlinkDir', hmrHandler);\n watcher.on('error', (e) => {\n console.error(e);\n });\n\n ps = await buildAndStart(cwd);\n\n const end = performance.now();\n\n console.log(\n `${colors.greenBright('Development server started in')} ${colors.yellowBright(`${(end - start).toFixed(2)}ms`)}\n${colors.greenBright('Watching for changes in')} ${colors.yellowBright('src')} ${colors.greenBright('directory')}\n\n${colors.greenBright('Commands:')}\n${colors.yellowBright('r')} - Restart the server\n${colors.yellowBright('rc')} - Reload all commands\n${colors.yellowBright('re')} - Reload all events\n${colors.yellowBright('rl')} - Reload all locales`\n );\n}","import type { Ora } from 'ora';\n\nlet ora: typeof import('ora') | undefined;\n\nexport async function createSpinner(text: string): Promise<Ora> {\n if (!ora) {\n ora = await import('ora');\n }\n\n return (ora.default || ora)({\n text,\n color: 'cyan'\n });\n}","import { join } from 'path';\nimport { loadConfigFile } from '../config/loader';\nimport { createAppProcess } from './app-process';\nimport { existsSync } from 'fs';\nimport { panic } from './common';\nimport { buildApplication } from './build';\nimport { isCompilerPlugin } from '../plugins';\nimport { createSpinner } from './utils';\n\nexport async function bootstrapProductionServer(configPath?: string) {\n const cwd = configPath || process.cwd();\n const config = await loadConfigFile(cwd);\n const mainFile = join(config.distDir, 'index.js');\n\n if (!existsSync(mainFile)) {\n panic(\n `Could not locate the entrypoint. Did you forget to build the application? Run 'commandkit build' to build the application first.`\n );\n }\n\n return createAppProcess(mainFile, cwd, true);\n}\n\nexport async function createProductionBuild(configPath?: string) {\n const cwd = configPath || process.cwd();\n const config = await loadConfigFile(cwd);\n\n const spinner = await createSpinner('Creating an optimized production build');\n\n spinner.start();\n\n await buildApplication({\n configPath: cwd,\n isDev: false,\n plugins: config.plugins.filter((p) => isCompilerPlugin(p)),\n esbuildPlugins: config.esbuildPlugins\n });\n\n spinner.succeed('Production build completed!');\n}","import { mkdir, writeFile, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport { Locale } from 'discord.js';\nimport { panic } from './common';\nimport { existsSync } from 'fs';\nimport colors from '../utils/colors';\n\nconst BASE_PATH = process.cwd();\nconst COMMANDS_DIR = join(BASE_PATH, 'src/app/commands');\nconst EVENTS_DIR = join(BASE_PATH, 'src/app/events');\nconst LOCALES_DIR = join(BASE_PATH, 'src/app/locales');\n\nconst formatPath = (path: string) =>\npath.replace(process.cwd(), '.').replace(/\\\\/g, '/');\n\nexport async function generateCommand(name: string, customPath?: string) {\n const cmdPath = join(customPath || COMMANDS_DIR, name);\n if (!existsSync(cmdPath)) await mkdir(cmdPath, { recursive: true });\n\n if (existsSync(join(cmdPath, 'command.ts'))) {\n panic(`Command ${name} already exists.`);\n }\n\n const commandFile = `\nimport type { CommandData, SlashCommand, MessageCommand } from 'commandkit';\n\nexport const command: CommandData = {\n name: '${name}',\n description: '${name} command',\n};\n\nexport const chatInput: SlashCommand = async (ctx) => {\n await ctx.interaction.reply('Hello from ${name}!');\n};\n\nexport const message: MessageCommand = async (ctx) => {\n await ctx.message.reply('Hello from ${name}!');\n};\n`.trim();\n\n await writeFile(join(cmdPath, 'command.ts'), commandFile);\n\n console.log(\n colors.green(\n `Command ${colors.magenta(name)} created at ${colors.blue(formatPath(cmdPath))}/command.ts`\n )\n );\n}\n\nexport async function generateEvent(name: string, customPath?: string) {\n const eventPath = join(customPath || EVENTS_DIR, name);\n if (!existsSync(eventPath)) await mkdir(eventPath, { recursive: true });\n\n let filename = 'event.ts';\n if (existsSync(join(eventPath, filename))) {\n const count = (await readdir(eventPath)).length;\n filename = `${String(count).padStart(2, '0')}_${filename}`;\n }\n\n const eventFile = `\nexport default async function on${name[0].toUpperCase() + name.slice(1)}() {\n console.log('${name} event fired!');\n};\n`.trim();\n\n await writeFile(join(eventPath, filename), eventFile);\n\n console.log(\n colors.green(\n `Event ${colors.magenta(name)} created at ${colors.blue(formatPath(eventPath))}/${colors.magenta(filename)}`\n )\n );\n}\n\nexport async function generateLocale(\nlocale: keyof typeof Locale,\ncommandName: string,\ncustomPath?: string)\n{\n const localeNames = Object.fromEntries(\n Object.entries(Locale).map(([k, v]) => [v, k])\n );\n\n if (!localeNames[locale]) {\n panic(`Invalid locale: ${locale}`);\n }\n\n if (!commandName) {\n panic('Command name is required.');\n }\n\n const localePath = join(customPath || LOCALES_DIR, locale);\n\n if (!existsSync(localePath)) await mkdir(localePath, { recursive: true });\n\n if (existsSync(join(localePath, `${commandName}.json`))) {\n panic(`Locale file for ${commandName} already exists.`);\n }\n\n const localeFile = {\n command: {\n name: `${commandName}`,\n description: `${commandName} command`\n },\n translations: {}\n };\n\n await writeFile(\n join(localePath, `${commandName}.json`),\n JSON.stringify(localeFile, null, 2)\n );\n\n console.log(\n colors.green(\n `Locale file for ${colors.magenta(commandName)} created at ${colors.blue(\n formatPath(localePath)\n )}/${colors.magenta(`${commandName}.json`)}`\n )\n );\n}","import { CommandKit } from './CommandKit';\n\nexport default CommandKit;\n\nexport * from './CommandKit';\nexport * from './components';\nexport * from './config/config';\nexport * from './context/async-context';\nexport * from './context/environment';\nexport * from './cache/index';\nexport * from './app/index';\nexport * from './logger/DefaultLogger';\nexport * from './logger/ILogger';\nexport * from './logger/Logger';\nexport * from './app/router/index';\nexport type * from './types';\nexport * from './version';\nexport * from './plugins/index';\n\n// cli\nexport { bootstrapCommandkitCLI } from './cli/init';","export * from './handlers/AppCommandHandler';\nexport * from './commands/Context';\nexport * from './commands/MessageCommandParser';\nexport * from './i18n/DefaultLocalizationStrategy';\nexport * from './i18n/Localization';\nexport * from './i18n/LocalizationStrategy';\nexport * from './i18n/Translation';\nexport * from './middleware/signals';\n\nexport {\n type CommandSource,\n isInteractionSource,\n isMessageSource } from\n'./commands/helpers';","import type { Locale } from 'discord.js';\nimport type { Translation } from './Translation';\n\nexport interface LocalizationTranslationRequest {\n locale: Locale;\n scope: string;\n key: string;\n args?: Record<string, any> | undefined;\n}\n\nexport type TranslationResult = string;\n\nexport interface LocalizationStrategy {\n locateTranslation(scope: string, locale: Locale): Promise<Translation | null>;\n getTranslation(scope: string, locale: Locale): Promise<Translation | null>;\n getTranslationStrict(scope: string, locale: Locale): Promise<Translation>;\n translate(\n request: LocalizationTranslationRequest)\n : Promise<TranslationResult>;\n}","import type { LocalizationMap } from 'discord.js';\n\nexport interface TranslatableCommand {\n name?: string;\n description?: string;\n options?: TranslatableCommandOptions[];\n}\n\nexport interface TranslatableCommandOptions {\n ref: string;\n name?: string;\n description?: string;\n options?: TranslatableCommandOptions[];\n}\n\nexport interface ApiTranslatableCommandOptions extends\n TranslatableCommandOptions {\n name_localizations?: LocalizationMap;\n description_localizations?: LocalizationMap;\n}\n\n// Define command-specific type structure\nexport interface CommandLocalizationTypeData {\n [key: string]: Record<string, string | null>;\n}\n\nexport type TranslatableCommandName = string & {};\n\nexport interface Translation {\n command: TranslatableCommand;\n translations: Record<string, string>;\n}\n\n// Improved type definition for TranslatableArguments\nexport type TranslatableArguments<T extends TranslatableCommandName> =\nT extends TranslatableCommandName ?\nCommandLocalizationTypeData[T] extends Record<string, infer ArgType> ?\nArgType extends null ?\nnever :\nRecord<string, string> :\nRecord<string, string> :\nRecord<string, string>;","import { Interaction, Message } from 'discord.js';\n\nexport type CommandSource = Interaction | Message;\n\nexport function isMessageSource(source: CommandSource): source is Message {\n return source instanceof Message;\n}\n\nexport function isInteractionSource(\nsource: CommandSource)\n: source is Interaction {\n return !isMessageSource(source);\n}","export interface ILogger {\n log(...args: any[]): void;\n error(...args: any[]): void;\n warn(...args: any[]): void;\n info(...args: any[]): void;\n debug(...args: any[]): void;\n}","import { existsSync } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\n\n/**\n * Creates a command line interface for CommandKit.\n * @param argv The arguments passed to the CLI.\n * @param options The options passed to the CLI.\n */\nexport async function bootstrapCommandkitCLI(\nargv: string[],\noptions?: import('commander').ParseOptions | undefined)\n{\n process.title = 'CommandKit CLI';\n\n // imports are lazily loaded when the cli is used, instead of loading it with the lib itself\n const { Command } = await import('commander');\n const { bootstrapDevelopmentServer } = await import('./development');\n const { bootstrapProductionServer, createProductionBuild } = await import(\n './production'\n );\n const { generateCommand, generateEvent, generateLocale } = await import(\n './generators'\n );\n const { version } = await import('../version');\n\n const program = new Command('commandkit');\n\n program.\n command('dev').\n version(version).\n description('Start your bot in development mode.').\n option(\n '-c, --config [path]',\n 'Path to your commandkit config file.',\n './commandkit.js'\n ).\n action(() => {\n const options = program.opts();\n bootstrapDevelopmentServer(options.config);\n });\n\n program.\n command('start').\n description(\n 'Start your bot in production mode after running the build command.'\n ).\n option('-c, --config [path]', 'Path to your commandkit.json file.').\n action(() => {\n const options = program.opts();\n bootstrapProductionServer(options.config);\n });\n\n program.\n command('build').\n description('Build your project for production usage.').\n option('-c, --config [path]', 'Path to your commandkit.json file.').\n action(() => {\n const options = program.opts();\n return createProductionBuild(options.config);\n });\n\n program.\n command('create').\n description('Create new commands, events, or locale files').\n option('-c, --command', 'Create a new command').\n option('-e, --event', 'Create a new event').\n option(\n '-l, --locale <locale>',\n 'Specify the locale code (e.g. nl, es, fr)'\n ).\n argument('<name>', 'The name of the command or event').\n action(async (name, options) => {\n if (options.command) {\n await generateCommand(name);\n } else if (options.event) {\n await generateEvent(name);\n } else if (options.locale) {\n if (!name) {\n console.error('Please specify a command name for the locale file');\n return;\n }\n await generateLocale(options.locale, name);\n } else {\n console.error(\n 'Please specify what to create: --command, --event, or --locale'\n );\n }\n });\n\n await program.parseAsync(argv, options);\n\n const types = join(process.cwd(), 'node_modules', 'commandkit-types');\n\n if (!existsSync(types)) {\n await mkdir(types, { recursive: true }).catch(() => {});\n }\n}"],"mappings":"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","names":["import_discord","myCustomId","import_discord","import_discord","_contextData","_unsub","getEventInterceptor_fn","destroyCollector_fn","import_discord","init_types","context","options","import_discord","commandkit","build","init_types","init_types","_traverse","_generate","path","_a","import_promises","commandkit","path","ms","import_node_fs","import_node_path","path","import_discord","parser","import_discord","commandkit","commandkit","CommandKitEnvironmentType","commandkit","commandkit","ms","context","import_node_async_hooks","import_node_crypto","init_cache","init_cache","commandkit","parser","import_discord","commandkit","env","ctx","import_promises","import_node_path","import_node_fs","import_discord","commandkit","parser","_a","commandId","loadedCommand","opt","import_discord","import_node_fs","import_promises","import_node_path","path","import_discord","import_node_fs","import_promises","import_node_path","path","commandkit","fs","import_node_path","import_node_fs","import_node_fs","import_node_path","commandkit","path","commandkit","EventEmitter","import_node_events","import_discord","import_node_path","import_node_fs","EventEmitter","appDir","import_node_path","import_node_fs","import_promises","import_node_path","import_rimraf","path","import_path","import_path","import_promises","import_path","import_discord","import_fs","path","init_cache","import_discord","import_node_fs","import_promises","import_node_path","bootstrapDevelopmentServer","bootstrapProductionServer","createProductionBuild","generateCommand","generateEvent","generateLocale","version","options"]}
|