commandkit 1.0.0-dev.20250514120740 → 1.0.0-dev.20250514122653
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.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.4.0_@swc+core@1.11.13_@swc+helpers@0.5.15__jiti@2.4.2_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/components/v1/action-row/ActionRow.ts","../src/utils/error-codes.ts","../src/context/async-context.ts","../src/components/v1/button/ButtonKit.ts","../src/components/v1/button/Button.ts","../src/components/v1/modal/ModalKit.ts","../src/components/v1/modal/Modal.ts","../src/components/v1/select-menu/StringSelectMenuKit.ts","../src/components/v1/select-menu/ChannelSelectMenuKit.ts","../src/components/v1/select-menu/MentionableSelectMenuKit.ts","../src/components/v1/select-menu/UserSelectMenuKit.ts","../src/components/v1/select-menu/RoleSelectMenuKit.ts","../src/components/v1/select-menu/SelectMenu.ts","../src/components/v1/select-menu/common.ts","../src/components/v2/common.ts","../src/components/v2/container.ts","../src/components/v2/file.ts","../src/components/v2/media-gallery.ts","../src/components/v2/section.ts","../src/components/v2/separator.ts","../src/components/v2/text-display.ts","../src/components/v2/index.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/utils/constants.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/plugin-runtime/CommandKitPluginRuntime.ts","../src/plugins/plugin-runtime/CompilerPluginRuntime.ts","../src/plugins/plugin-runtime/types.ts","../src/plugins/plugin-runtime/runtime.ts","../src/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.ts","../src/plugins/index.ts","../src/plugins/plugin-runtime/builtin/MacroPlugin.ts","../src/config/default.ts","../src/config/config.ts","../src/app/events/EventWorkerContext.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/middleware/signals.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/type-checker.ts","../src/cli/build.ts","../src/cli/development.ts","../src/cli/utils.ts","../src/cli/production.ts","../src/cli/generators.ts","../src/cli/information.ts","../src/index.ts","../src/app/index.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);","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\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\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 setImmediate(async () => {\n try {\n await finalizer(...args);\n } catch {\n\n // no-op\n }});\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}","import {\n Events,\n StringSelectMenuBuilder,\n StringSelectMenuInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../../context/async-context';\nimport { EventInterceptorErrorHandler } from '../../common/EventInterceptor';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd,\n OnSelectMenuKitSubmit,\n SelectMenuKitPredicate } from\n'./common';\n\nexport type OnStringSelectMenuKitSubmit = OnSelectMenuKitSubmit<\n StringSelectMenuInteraction,\n StringSelectMenuKit>;\n\n\nexport type StringSelectMenuKitPredicate =\nSelectMenuKitPredicate<StringSelectMenuInteraction>;\n\nexport class StringSelectMenuKit extends StringSelectMenuBuilder {\n #onSelectHandler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n StringSelectMenuInteraction,\n StringSelectMenuKit> |\n null = null;\n #contextData: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData | 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 StringSelectMenuKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.user.id === '1234567890')\n * .onSelect(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSelect(\n handler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n StringSelectMenuInteraction,\n StringSelectMenuKit>,\n\n data?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSelectHandler) {\n this.#destroyCollector();\n }\n\n this.#onSelectHandler = 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: CommandKitSelectMenuBuilderOnEnd): 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(\n predicate: SelectMenuKitPredicate<StringSelectMenuInteraction>)\n : 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.isStringSelectMenu()) 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.#onSelectHandler;\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.#onSelectHandler = null;\n this.#contextData = null;\n }\n}","import {\n Events,\n ChannelSelectMenuBuilder,\n ChannelSelectMenuInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../../context/async-context';\nimport { EventInterceptorErrorHandler } from '../../common/EventInterceptor';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd,\n OnSelectMenuKitSubmit,\n SelectMenuKitPredicate } from\n'./common';\n\nexport type OnChannelSelectMenuKitSubmit = OnSelectMenuKitSubmit<\n ChannelSelectMenuInteraction,\n ChannelSelectMenuKit>;\n\n\nexport type ChannelSelectMenuKitPredicate =\nSelectMenuKitPredicate<ChannelSelectMenuInteraction>;\n\nexport class ChannelSelectMenuKit extends ChannelSelectMenuBuilder {\n #onSelectHandler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n ChannelSelectMenuInteraction,\n ChannelSelectMenuKit> |\n null = null;\n #contextData: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData | 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 ChannelSelectMenuKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.Channel.id === '1234567890')\n * .onSelect(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSelect(\n handler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n ChannelSelectMenuInteraction,\n ChannelSelectMenuKit>,\n\n data?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSelectHandler) {\n this.#destroyCollector();\n }\n\n this.#onSelectHandler = 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: CommandKitSelectMenuBuilderOnEnd): 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(\n predicate: SelectMenuKitPredicate<ChannelSelectMenuInteraction>)\n : 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.isChannelSelectMenu()) 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.#onSelectHandler;\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.#onSelectHandler = null;\n this.#contextData = null;\n }\n}","import {\n Events,\n MentionableSelectMenuBuilder,\n MentionableSelectMenuInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../../context/async-context';\nimport { EventInterceptorErrorHandler } from '../../common/EventInterceptor';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd,\n OnSelectMenuKitSubmit,\n SelectMenuKitPredicate } from\n'./common';\n\nexport type OnMentionableSelectMenuKitSubmit = OnSelectMenuKitSubmit<\n MentionableSelectMenuInteraction,\n MentionableSelectMenuKit>;\n\n\nexport type MentionableSelectMenuKitPredicate =\nSelectMenuKitPredicate<MentionableSelectMenuInteraction>;\n\nexport class MentionableSelectMenuKit extends MentionableSelectMenuBuilder {\n #onSelectHandler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n MentionableSelectMenuInteraction,\n MentionableSelectMenuKit> |\n null = null;\n #contextData: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData | 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 MentionableSelectMenuKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.Mentionable.id === '1234567890')\n * .onSelect(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSelect(\n handler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n MentionableSelectMenuInteraction,\n MentionableSelectMenuKit>,\n\n data?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSelectHandler) {\n this.#destroyCollector();\n }\n\n this.#onSelectHandler = 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: CommandKitSelectMenuBuilderOnEnd): 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(\n predicate: SelectMenuKitPredicate<MentionableSelectMenuInteraction>)\n : 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.isMentionableSelectMenu()) 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.#onSelectHandler;\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.#onSelectHandler = null;\n this.#contextData = null;\n }\n}","import {\n Events,\n UserSelectMenuBuilder,\n UserSelectMenuInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../../context/async-context';\nimport { EventInterceptorErrorHandler } from '../../common/EventInterceptor';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd,\n OnSelectMenuKitSubmit,\n SelectMenuKitPredicate } from\n'./common';\n\nexport type OnUserSelectMenuKitSubmit = OnSelectMenuKitSubmit<\n UserSelectMenuInteraction,\n UserSelectMenuKit>;\n\n\nexport type UserSelectMenuKitPredicate =\nSelectMenuKitPredicate<UserSelectMenuInteraction>;\n\nexport class UserSelectMenuKit extends UserSelectMenuBuilder {\n #onSelectHandler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n UserSelectMenuInteraction,\n UserSelectMenuKit> |\n null = null;\n #contextData: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData | 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 UserSelectMenuKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.user.id === '1234567890')\n * .onSelect(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSelect(\n handler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n UserSelectMenuInteraction,\n UserSelectMenuKit>,\n\n data?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSelectHandler) {\n this.#destroyCollector();\n }\n\n this.#onSelectHandler = 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: CommandKitSelectMenuBuilderOnEnd): 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(\n predicate: SelectMenuKitPredicate<UserSelectMenuInteraction>)\n : 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.isUserSelectMenu()) 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.#onSelectHandler;\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.#onSelectHandler = null;\n this.#contextData = null;\n }\n}","import {\n Events,\n RoleSelectMenuBuilder,\n RoleSelectMenuInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../../context/async-context';\nimport { EventInterceptorErrorHandler } from '../../common/EventInterceptor';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd,\n OnSelectMenuKitSubmit,\n SelectMenuKitPredicate } from\n'./common';\n\nexport type OnRoleSelectMenuKitSubmit = OnSelectMenuKitSubmit<\n RoleSelectMenuInteraction,\n RoleSelectMenuKit>;\n\n\nexport type RoleSelectMenuKitPredicate =\nSelectMenuKitPredicate<RoleSelectMenuInteraction>;\n\nexport class RoleSelectMenuKit extends RoleSelectMenuBuilder {\n #onSelectHandler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n RoleSelectMenuInteraction,\n RoleSelectMenuKit> |\n null = null;\n #contextData: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData | 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 RoleSelectMenuKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.Role.id === '1234567890')\n * .onSelect(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSelect(\n handler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n RoleSelectMenuInteraction,\n RoleSelectMenuKit>,\n\n data?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSelectHandler) {\n this.#destroyCollector();\n }\n\n this.#onSelectHandler = 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: CommandKitSelectMenuBuilderOnEnd): 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(\n predicate: SelectMenuKitPredicate<RoleSelectMenuInteraction>)\n : 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.isRoleSelectMenu()) 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.#onSelectHandler;\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.#onSelectHandler = null;\n this.#contextData = null;\n }\n}","import {\n APISelectMenuOption,\n BaseSelectMenuComponentData,\n ChannelSelectMenuComponentData,\n ChannelSelectMenuInteraction,\n MentionableSelectMenuComponentData,\n MentionableSelectMenuInteraction,\n RoleSelectMenuComponentData,\n RoleSelectMenuInteraction,\n SelectMenuComponentOptionData,\n StringSelectMenuInteraction,\n StringSelectMenuOptionBuilder,\n UserSelectMenuComponentData,\n UserSelectMenuInteraction } from\n'discord.js';\nimport { ChannelSelectMenuKit } from './ChannelSelectMenuKit';\nimport { MentionableSelectMenuKit } from './MentionableSelectMenuKit';\nimport { RoleSelectMenuKit } from './RoleSelectMenuKit';\nimport { StringSelectMenuKit } from './StringSelectMenuKit';\nimport { UserSelectMenuKit } from './UserSelectMenuKit';\nimport { MaybeArray } from '../../common/types';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd } from\n'./common';\n\nexport interface CommonSelectMenuProps<T, C> {\n onSelect?: CommandKitSelectMenuBuilderInteractionCollectorDispatch<T, C>;\n onEnd?: CommandKitSelectMenuBuilderOnEnd;\n onError?: (error: Error) => any;\n options?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData;\n}\n\nexport interface SelectMenuProps<T, C> extends\n Partial<Omit<BaseSelectMenuComponentData, 'type'>>,\n CommonSelectMenuProps<T, C> {}\n\nexport interface StringSelectMenuProps extends\n SelectMenuProps<StringSelectMenuInteraction, StringSelectMenuKit> {\n children?: MaybeArray<StringSelectMenuOptionBuilder>;\n}\n\nexport type CommonBuilderKit =\nStringSelectMenuKit |\nUserSelectMenuKit |\nRoleSelectMenuKit |\nChannelSelectMenuKit |\nMentionableSelectMenuKit;\n\nexport type ResolveBuilderInteraction<T> = T extends StringSelectMenuKit ?\nStringSelectMenuInteraction :\nT extends UserSelectMenuKit ?\nUserSelectMenuInteraction :\nT extends RoleSelectMenuKit ?\nRoleSelectMenuInteraction :\nT extends ChannelSelectMenuKit ?\nChannelSelectMenuInteraction :\nT extends MentionableSelectMenuKit ?\nMentionableSelectMenuInteraction :\nnever;\n\nfunction applyPropsToBuilder<B extends CommonBuilderKit>(\nbuilder: B,\nprops: Partial<Omit<BaseSelectMenuComponentData, 'type'>> &\nCommonSelectMenuProps<ResolveBuilderInteraction<B>, B>)\n{\n builder.setCustomId(props.customId ?? `select-menu::${crypto.randomUUID()}`);\n\n if (props.maxValues != null) {\n builder.setMaxValues(props.maxValues);\n }\n\n if (props.minValues != null) {\n builder.setMinValues(props.minValues);\n }\n\n if (props.placeholder) {\n builder.setPlaceholder(props.placeholder);\n }\n\n if (props.disabled) {\n builder.setDisabled(props.disabled);\n }\n\n if (props.onEnd) {\n builder.onEnd(props.onEnd);\n }\n\n if (props.onError) {\n builder.onError(props.onError);\n }\n\n if (props.onSelect) {\n // @ts-ignore\n builder.onSelect(props.onSelect, props.options);\n }\n}\n\nexport function StringSelectMenu(props: StringSelectMenuProps) {\n const builder = new StringSelectMenuKit();\n\n applyPropsToBuilder(builder, props);\n\n if (props.children) {\n builder.setOptions(\n Array.isArray(props.children) ? props.children : [props.children]\n );\n }\n\n if (props.children) {\n builder.setOptions(\n Array.isArray(props.children) ? props.children : [props.children]\n );\n }\n\n return builder;\n}\n\nexport type StringSelectMenuOptionProps =\nSelectMenuComponentOptionData |\nAPISelectMenuOption;\n\nexport function StringSelectMenuOption(props: StringSelectMenuOptionProps) {\n return new StringSelectMenuOptionBuilder(props);\n}\n\nexport interface UserSelectMenuProps extends\n Partial<Omit<UserSelectMenuComponentData, 'type'>>,\n CommonSelectMenuProps<UserSelectMenuInteraction, UserSelectMenuKit> {}\n\nexport function UserSelectMenu(props: UserSelectMenuProps) {\n const builder = new UserSelectMenuKit();\n\n applyPropsToBuilder(builder, props);\n\n if (props.defaultValues) {\n builder.setDefaultUsers(\n Array.isArray(props.defaultValues) ?\n props.defaultValues :\n [props.defaultValues]\n );\n }\n\n return builder;\n}\n\nexport interface RoleSelectMenuProps extends\n Partial<Omit<RoleSelectMenuComponentData, 'type'>>,\n CommonSelectMenuProps<RoleSelectMenuInteraction, RoleSelectMenuKit> {}\n\nexport function RoleSelectMenu(props: RoleSelectMenuProps) {\n const builder = new RoleSelectMenuKit();\n\n applyPropsToBuilder(builder, props);\n\n if (props.defaultValues) {\n builder.setDefaultRoles(\n Array.isArray(props.defaultValues) ?\n props.defaultValues :\n [props.defaultValues]\n );\n }\n\n return builder;\n}\n\nexport interface MentionableSelectMenuProps extends\n Partial<Omit<MentionableSelectMenuComponentData, 'type'>>,\n CommonSelectMenuProps<\n MentionableSelectMenuInteraction,\n MentionableSelectMenuKit>\n{}\n\nexport function MentionableSelectMenu(props: MentionableSelectMenuProps) {\n const builder = new MentionableSelectMenuKit();\n\n applyPropsToBuilder(builder, props);\n\n if (props.defaultValues) {\n builder.setDefaultValues(\n Array.isArray(props.defaultValues) ?\n props.defaultValues :\n [props.defaultValues]\n );\n }\n\n return builder;\n}\n\nexport interface ChannelSelectMenuProps extends\n Partial<Omit<ChannelSelectMenuComponentData, 'type'>>,\n CommonSelectMenuProps<ChannelSelectMenuInteraction, ChannelSelectMenuKit> {}\n\nexport function ChannelSelectMenu(props: ChannelSelectMenuProps) {\n const builder = new ChannelSelectMenuKit();\n\n applyPropsToBuilder(builder, props);\n\n if (props.defaultValues) {\n builder.setDefaultChannels(\n Array.isArray(props.defaultValues) ?\n props.defaultValues :\n [props.defaultValues]\n );\n }\n\n if (props.channelTypes) {\n builder.setChannelTypes(\n Array.isArray(props.channelTypes) ?\n props.channelTypes :\n [props.channelTypes]\n );\n }\n\n return builder;\n}","import { Awaitable, Events } from 'discord.js';\nimport { EventInterceptorContextData } from '../../common/EventInterceptor';\n\nexport type SelectMenuKitPredicate<T> = (interaction: T) => 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 OnSelectMenuKitSubmit<T, C> =\nCommandKitSelectMenuBuilderInteractionCollectorDispatch<T, C>;\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 OnSelectMenuKitEnd = CommandKitSelectMenuBuilderOnEnd;\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 CommandKitSelectMenuBuilderInteractionCollectorDispatch<T, C> = (\ninteraction: T,\ncontext: C)\n=> Awaitable<void>;\n\nexport type CommandKitSelectMenuBuilderOnEnd = (\nreason: string)\n=> Awaitable<void>;\n\nexport type CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData =\nEventInterceptorContextData<Events.InteractionCreate>;","import { ComponentBuilder } from 'discord.js';\n\nexport function applyId(props: {id?: number;}, component: ComponentBuilder) {\n if (props.id != null) {\n component.setId(props.id);\n }\n}","import {\n ActionRowBuilder,\n ComponentBuilder,\n ContainerBuilder,\n ContainerComponentData,\n FileBuilder,\n MediaGalleryBuilder,\n SectionBuilder,\n SeparatorBuilder,\n TextDisplayBuilder,\n ThumbnailBuilder } from\n'discord.js';\nimport { applyId } from './common';\n\nexport interface ContainerProps extends\n Omit<ContainerComponentData, 'type' | 'components'> {\n children?: ComponentBuilder[];\n}\n\nexport function Container(props: ContainerProps): ContainerBuilder {\n const container = new ContainerBuilder();\n\n applyId(props, container);\n\n if (typeof props.accentColor != null) {\n container.setAccentColor(props.accentColor);\n }\n\n if (props.spoiler != null) {\n container.setSpoiler(props.spoiler);\n }\n\n if (props.children?.length) {\n for (const child of props.children.flat()) {\n if (child instanceof TextDisplayBuilder) {\n container.addTextDisplayComponents(child);\n }\n\n if (child instanceof FileBuilder) {\n container.addFileComponents(child);\n }\n\n if (child instanceof ActionRowBuilder) {\n container.addActionRowComponents(child);\n }\n\n if (child instanceof SeparatorBuilder) {\n container.addSeparatorComponents(child);\n }\n\n if (child instanceof SectionBuilder) {\n container.addSectionComponents(child);\n }\n\n if (child instanceof MediaGalleryBuilder) {\n container.addMediaGalleryComponents(child);\n }\n }\n }\n\n return container;\n}","import { FileBuilder, FileComponentData } from 'discord.js';\n\nexport interface FileProps extends Omit<FileComponentData, 'type' | 'file'> {\n url: string;\n}\n\nexport function File(props: FileProps) {\n const file = new FileBuilder(props);\n\n if (props.url != null) {\n file.setURL(props.url);\n }\n\n return file;\n}","import { MediaGalleryBuilder, MediaGalleryItemBuilder } from 'discord.js';\nimport { applyId } from './common';\n\nexport interface MediaGalleryProps {\n id?: number;\n children?: MediaGalleryItemBuilder[];\n}\n\nexport function MediaGallery(props: MediaGalleryProps) {\n const gallery = new MediaGalleryBuilder();\n\n applyId(props, gallery);\n\n if (props.children != null) {\n gallery.addItems(props.children.flat());\n }\n\n return gallery;\n}\n\nexport interface MediaGalleryItemProps {\n description?: string;\n spoiler?: boolean;\n url?: string;\n}\n\nexport function MediaGalleryItem(props: MediaGalleryItemProps) {\n const item = new MediaGalleryItemBuilder();\n\n if (props.description != null) {\n item.setDescription(props.description);\n }\n\n if (props.spoiler != null) {\n item.setSpoiler(props.spoiler);\n }\n\n if (props.url != null) {\n item.setURL(props.url);\n }\n\n return item;\n}","import {\n ButtonBuilder,\n SectionBuilder,\n TextDisplayBuilder,\n ThumbnailBuilder } from\n'discord.js';\nimport { applyId } from './common';\n\nexport interface SectionProps {\n children?: (ThumbnailBuilder | ButtonBuilder | TextDisplayBuilder)[];\n id?: number;\n}\n\nexport function Section(props: SectionProps): SectionBuilder {\n const section = new SectionBuilder();\n\n applyId(props, section);\n\n if (props.children != null) {\n for (const accessory of props.children.flat()) {\n if (accessory instanceof ThumbnailBuilder) {\n section.setThumbnailAccessory(accessory);\n } else if (accessory instanceof ButtonBuilder) {\n section.setButtonAccessory(accessory);\n } else if (accessory instanceof TextDisplayBuilder) {\n section.addTextDisplayComponents(accessory);\n }\n }\n }\n\n return section;\n}\n\nexport interface ThumbnailProps {\n id?: number;\n description?: string;\n spoiler?: boolean;\n url: string;\n}\n\nexport function Thumbnail(props: ThumbnailProps) {\n const thumbnail = new ThumbnailBuilder({\n description: props.description,\n spoiler: props.spoiler,\n id: props.id,\n media: { url: props.url }\n });\n\n return thumbnail;\n}","import { SeparatorBuilder, SeparatorComponentData } from 'discord.js';\n\nexport interface SeparatorProps extends Omit<SeparatorComponentData, 'type'> {}\n\nexport function Separator(props: SeparatorProps) {\n const separator = new SeparatorBuilder(props);\n return separator;\n}","import { TextDisplayBuilder, TextDisplayComponentData } from 'discord.js';\n\nexport interface TextDisplayProps extends\n Omit<TextDisplayComponentData, 'type' | 'content'> {\n children?: string | string[];\n content?: string;\n}\n\nexport function TextDisplay(props: TextDisplayProps) {\n const textDisplay = new TextDisplayBuilder(props);\n\n if (!props.content && props.children) {\n if (Array.isArray(props.children)) {\n textDisplay.setContent(props.children.join(' '));\n } else {\n textDisplay.setContent(props.children);\n }\n }\n\n return textDisplay;\n}","export * from './container';\nexport * from './file';\nexport * from './media-gallery';\nexport * from './section';\nexport * from './separator';\nexport * from './text-display';","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 '../v1/button/ButtonKit';\nimport { warnUnstable } from '../../utils/warn-unstable';\nimport { ModalKit } from '../v1/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\n return Array.isArray(props.children) ?\n props.children.flat() :\n [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: props.children ?? children });\n}\n\nexport { createElement as jsx, createElement as jsxs };","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 './v1/action-row/ActionRow';\n\n// buttons\nexport * from './v1/button/ButtonKit';\nexport * from './v1/button/Button';\n\n// modals\nexport * from './v1/modal/ModalKit';\nexport * from './v1/modal/Modal';\n\n// select menus\nexport * from './v1/select-menu/StringSelectMenuKit';\nexport * from './v1/select-menu/ChannelSelectMenuKit';\nexport * from './v1/select-menu/MentionableSelectMenuKit';\nexport * from './v1/select-menu/UserSelectMenuKit';\nexport * from './v1/select-menu/RoleSelectMenuKit';\nexport * from './v1/select-menu/SelectMenu';\nexport * from './v1/select-menu/common';\n\n// v2\nexport * from './v2/index';\n\n// common\nexport * from './common/element';\nexport * from './common/types';\nexport * from './common/EventInterceptor';","export const COMMANDKIT_CACHE_TAG = Symbol('kCommandKitCacheTag');\n\nexport const COMMANDKIT_IS_DEV = process.env.COMMANDKIT_IS_DEV === 'true';\n\nexport const COMMANDKIT_IS_TEST = process.env.COMMANDKIT_IS_TEST === 'true';\n\nexport const COMMANDKIT_BOOTSTRAP_MODE = (process.env.\nCOMMANDKIT_BOOTSTRAP_MODE || 'development') as 'development' | 'production';\n\n/**\n * Types of Hot Module Replacement events\n */\nexport const HMREventType = {\n ReloadCommands: 'reload-commands',\n ReloadEvents: 'reload-events',\n Unknown: 'unknown'\n} as const;\n\nexport type HMREventType = (typeof HMREventType)[keyof typeof HMREventType];","import { randomUUID } from 'node:crypto';\nimport { CommonPluginRuntime } from './plugin-runtime/runtime';\n\nexport type PluginOptions = Record<string, any>;\n\nexport enum PluginType {\n Compiler = 'compiler',\n Runtime = 'runtime',\n}\n\nexport abstract class PluginCommon<\n T extends PluginOptions = PluginOptions,\n C extends CommonPluginRuntime = CommonPluginRuntime>\n{\n public abstract readonly type: PluginType;\n public readonly id = randomUUID();\n public readonly loadedAt = Date.now();\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'./plugin-runtime/types';\nimport {\n isPlugin,\n PluginCommon,\n PluginOptions,\n PluginType } from\n'./PluginCommon';\nimport { MaybeFalsey } from './types';\nimport { CompilerPluginRuntime } from './plugin-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 public readonly type = PluginType.Compiler;\n\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 isPlugin(plugin) && plugin.type === PluginType.Compiler;\n}","import { Interaction, Message, PartialMessage } from 'discord.js';\nimport {\n isPlugin,\n PluginCommon,\n PluginOptions,\n PluginType } from\n'./PluginCommon';\nimport type { CommandKitPluginRuntime } from './plugin-runtime/CommandKitPluginRuntime';\nimport { CommandBuilderLike, PreparedAppCommandExecution } from '../app';\nimport { CommandKitEnvironment } from '../context/environment';\nimport { CommandKitHMREvent } from '../utils/dev-hooks';\nimport { PreRegisterCommandsEvent } from '../app/register/CommandRegistrar';\n\nexport abstract class RuntimePlugin<\n T extends PluginOptions = PluginOptions> extends\nPluginCommon<T, CommandKitPluginRuntime> {\n public readonly type = PluginType.Runtime;\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 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 /**\n * Called after events router is initialized\n * @param ctx The context\n */\n public async onEventsRouterInit(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called after commands router is initialized\n * @param ctx The context\n */\n public async onCommandsRouterInit(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called when HMR event is received\n * @param ctx The context\n * @param event The event\n */\n public async performHMR(\n ctx: CommandKitPluginRuntime,\n event: CommandKitHMREvent)\n : Promise<void> {}\n\n /**\n * Called before command is loaded for registration. This method can be used to modify the command data before it is loaded.\n * @param ctx The context\n * @param commands The command that is being loaded. This is a CommandBuilderLike object which represents Discord's command\n */\n async prepareCommand(\n ctx: CommandKitPluginRuntime,\n commands: CommandBuilderLike)\n : Promise<CommandBuilderLike | null> {\n return null;\n }\n\n /**\n * Called before command is registered to discord. This method can cancel the registration of the command and handle it manually.\n * @param ctx The context\n * @param data The command registration data\n */\n async onBeforeRegisterCommands(\n ctx: CommandKitPluginRuntime,\n event: PreRegisterCommandsEvent)\n : Promise<void> {}\n\n /**\n * Called before global commands registration. This method can cancel the registration of the command and handle it manually.\n * This method is called after `onBeforeRegisterCommands` if that stage was not handled.\n * @param ctx The context\n * @param event The command registration data\n */\n async onBeforeRegisterGlobalCommands(\n ctx: CommandKitPluginRuntime,\n event: PreRegisterCommandsEvent)\n : Promise<void> {}\n\n /**\n * Called before guild commands registration. This method can cancel the registration of the command and handle it manually.\n * This method is called before guilds of the command are resolved. It is called after `onBeforeRegisterCommands` if that stage was not handled.\n * @param ctx The context\n * @param event The command registration data\n */\n async onBeforePrepareGuildCommandsRegistration(\n ctx: CommandKitPluginRuntime,\n event: PreRegisterCommandsEvent)\n : Promise<void> {}\n\n /**\n * Called before guild commands registration. This method can cancel the registration of the command and handle it manually.\n * This method is called after guilds of the command are resolved. It is called after `onBeforePrepareGuildCommandsRegistration` if that stage was not handled.\n * @param ctx The context\n * @param event The command registration data\n */\n async onBeforeRegisterGuildCommands(\n ctx: CommandKitPluginRuntime,\n event: PreRegisterCommandsEvent)\n : Promise<void> {}\n\n /**\n * Called after command and all of its deferred functions are executed.\n * @param ctx The context\n * @param env The environment of the command. This environment contains the command execution data such as command context and more.\n */\n async onAfterCommand(\n ctx: CommandKitPluginRuntime,\n env: CommandKitEnvironment)\n {}\n}\n\nexport function isRuntimePlugin(plugin: unknown): plugin is RuntimePlugin {\n return isPlugin(plugin) && plugin.type === PluginType.Runtime;\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: 'ChatInputCommand',\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 type { 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 {\n CommandKitErrorCodes,\n createCommandKitError,\n isErrorType } from\n'../../utils/error-codes';\nimport { Logger } from '../../logger/Logger';\nimport { AsyncFunction } from '../../context/async-context';\n\nexport class CommandKitPluginRuntime {\n private plugins = new Collection<string, RuntimePlugin>();\n\n public constructor(public readonly commandkit: CommandKit) {}\n\n public getPlugins() {\n return this.plugins;\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 getPlugins() {\n return this.plugins;\n }\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;","import { DirectiveTransformerOptions } from 'directive-to-hof';\nimport {\n CompilerPlugin,\n CompilerPluginRuntime,\n MaybeFalsey,\n PluginTransformParameters,\n TransformedResult } from\n'../..';\n\nexport type CommonDirectiveTransformerOptions = DirectiveTransformerOptions & {\n enabled?: boolean;\n};\n\nexport abstract class CommonDirectiveTransformer extends CompilerPlugin<CommonDirectiveTransformerOptions> {\n private transformer: ReturnType<\n typeof import('directive-to-hof').createDirectiveTransformer> |\n null = null;\n\n public async activate(ctx: CompilerPluginRuntime): Promise<void> {\n const { createDirectiveTransformer } = await import('directive-to-hof');\n this.transformer = createDirectiveTransformer(this.options);\n }\n\n public async deactivate(ctx: CompilerPluginRuntime): Promise<void> {\n this.transformer = null;\n }\n\n public async transform(\n params: PluginTransformParameters)\n : Promise<MaybeFalsey<TransformedResult>> {\n if (!this.options.enabled) return null;\n if (!this.transformer) return null;\n\n const result = await this.transformer(\n params.contents.toString(),\n params.path\n );\n\n return {\n contents: result.contents,\n loader: result.loader\n };\n }\n}","export * from './CompilerPlugin';\nexport * from './RuntimePlugin';\nexport * from './types';\nexport * from './plugin-runtime/CommandKitPluginRuntime';\nexport * from './plugin-runtime/CompilerPluginRuntime';\nexport * from './plugin-runtime/types';\nexport * from './plugin-runtime/runtime';\nexport * from './plugin-runtime/builtin/CommonDirectiveTransformer';","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 { MacroPlugin } from '../plugins/plugin-runtime/builtin/MacroPlugin';\nimport { ResolvedCommandKitConfig } from './utils';\n\nexport const defaultConfig: ResolvedCommandKitConfig = {\n plugins: [new MacroPlugin({ enabled: true })],\n esbuildPlugins: [],\n compilerOptions: {\n macro: {\n development: false\n }\n },\n static: true,\n typescript: {\n ignoreBuildErrors: false\n },\n distDir: 'dist',\n env: {},\n sourceMap: {\n development: true,\n production: true\n },\n typedCommands: true\n};","import { MaybeArray } from '../components';\nimport { CommandKitPlugin } from '../plugins';\nimport { 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 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 ?? [])].flat(\n Infinity\n ) as MaybeArray<CommandKitPlugin[]>,\n sourceMap: {\n ...defaultConfig.sourceMap,\n ...config.sourceMap\n },\n static: config.static ?? defaultConfig.static,\n typedCommands: config.typedCommands ?? defaultConfig.typedCommands,\n typescript: {\n ...defaultConfig.typescript,\n ...config.typescript\n }\n };\n\n return defined;\n}","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { ParsedEvent } from '../router';\nimport { CommandKit } from '../../CommandKit';\n\nexport interface EventWorkerContext {\n event: string;\n namespace: string | null;\n data: ParsedEvent;\n commandkit: CommandKit;\n}\n\nexport const eventWorkerContext = new AsyncLocalStorage<EventWorkerContext>();\n\nexport function runInEventWorkerContext<T>(\ncontext: EventWorkerContext,\ncallback: () => T)\n: T {\n return eventWorkerContext.run(context, callback);\n}\n\nexport function getEventWorkerContext(): EventWorkerContext {\n const context = eventWorkerContext.getStore();\n\n if (!context) {\n throw new Error('Event worker context not found');\n }\n\n return context;\n}","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { COMMANDKIT_IS_DEV } from './constants';\nimport { getConfig } from '../config/config';\nimport { eventWorkerContext } from '../app/events/EventWorkerContext';\n\nlet appDir: string | null = null;\nlet currentDir: string | null = null;\n\nexport function getCurrentDirectory(): string {\n if (currentDir) return currentDir;\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 currentDir = root;\n\n return root;\n}\n\nexport function getSourceDirectories(): string[] {\n const dist = getConfig().distDir;\n const locations = ['src', '.commandkit', dist].map((dir) =>\n join(process.cwd(), dir)\n );\n\n return locations;\n}\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}\n\n/**\n * Creates a function from the given function that runs only in development mode.\n * @param fn The function to run in development mode.\n * @returns The function that runs only in development mode.\n * @example\n * ```ts\n * const devOnlyFn = devOnly(() => {\n * console.log('This function runs only in development mode');\n * });\n * devOnlyFn(); // This will log the message only in development mode\n * ```\n */\nexport function devOnly<T extends (...args: any[]) => any>(fn: T): T {\n const f = (...args: Parameters<T>) => {\n if (COMMANDKIT_IS_DEV) {\n return fn(...args);\n }\n };\n\n return f as T;\n}\n\n/**\n * Custom error for stopping event propagation.\n */\nexport class StopEventPropagationError extends Error {\n constructor() {\n super('Event propagation stopped');\n this.name = 'StopEventPropagationError';\n }\n}\n\n/**\n * Stops event propagation.\n * @throws {StopEventPropagationError}\n */\nexport function stopEvents(): never {\n if (!eventWorkerContext.getStore()) {\n throw new Error('stopEvents() may only be called inside an event handler');\n }\n\n throw new StopEventPropagationError();\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 { ApplicationCommandType, REST, Routes } from 'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { CommandData } from '../../types';\nimport { Logger } from '../../logger/Logger';\n\nexport interface PreRegisterCommandsEvent {\n preventDefault(): void;\n commands: CommandData[];\n}\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 const commands = this.getCommandsData();\n\n let preRegistrationPrevented = false;\n const preRegisterEvent: PreRegisterCommandsEvent = {\n preventDefault() {\n preRegistrationPrevented = true;\n },\n commands\n };\n\n await this.commandkit.plugins.execute(async (ctx, plugin) => {\n if (preRegistrationPrevented) return;\n return plugin.onBeforeRegisterCommands(ctx, preRegisterEvent);\n });\n\n if (preRegistrationPrevented) return;\n\n // we check this after the plugin event\n // because plugins may be able to register commands\n // before the client is ready\n if (!this.commandkit.client.isReady()) {\n throw new Error('Cannot register commands before the client is ready');\n }\n\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\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 let prevented = false;\n const preRegisterEvent: PreRegisterCommandsEvent = {\n preventDefault() {\n prevented = true;\n },\n commands\n };\n\n await this.commandkit.plugins.execute(async (ctx, plugin) => {\n if (prevented) return;\n return plugin.onBeforeRegisterGlobalCommands(ctx, preRegisterEvent);\n });\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 if (!commands.length) return;\n\n let prevented = false;\n const preRegisterEvent: PreRegisterCommandsEvent = {\n preventDefault() {\n prevented = true;\n },\n commands\n };\n await this.commandkit.plugins.execute(async (ctx, plugin) => {\n if (prevented) return;\n return plugin.onBeforePrepareGuildCommandsRegistration(\n ctx,\n preRegisterEvent\n );\n });\n if (prevented) return;\n\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 let prevented = false;\n const preRegisterEvent: PreRegisterCommandsEvent = {\n preventDefault() {\n prevented = true;\n },\n commands: guildCommands\n };\n\n await this.commandkit.plugins.execute(async (ctx, plugin) => {\n if (prevented) return;\n return plugin.onBeforeRegisterGuildCommands(ctx, preRegisterEvent);\n });\n\n if (prevented) continue;\n\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';\nimport type { Context } from '../app';\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 context: Context | null;\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 context: null\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 * Set the context.\n * @param context - The context to set.\n */\n public setContext(context: Context): void {\n this.#data.context = context;\n }\n\n /**\n * Get the context. `null` if not set.\n * @internal\n */\n public get context(): Context | null {\n return this.#data.context;\n }\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 after(fn: GenericFunction<[CommandKitEnvironment]>): 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 `after`.\n * @param id The deferred function id to cancel.\n */\nexport function cancelAfter(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 {\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 {\n AutocompleteInteraction,\n ChatInputCommandInteraction,\n MessageContextMenuCommandInteraction,\n Message,\n Locale,\n Interaction,\n UserContextMenuCommandInteraction,\n Client,\n Awaitable,\n Guild,\n TextBasedChannel } from\n'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport {\n MessageCommandOptions,\n MessageCommandParser } from\n'./MessageCommandParser';\nimport { CommandKitEnvironment } from '../../context/environment';\nimport { GenericFunction, getContext } from '../../context/async-context';\nimport { exitMiddleware, redirect } from '../middleware/signals';\nimport {\n LoadedCommand,\n ResolvableCommand,\n RunCommand } from\n'../handlers/AppCommandHandler';\n\nexport const CommandExecutionMode = {\n ChatInputCommand: '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 command: LoadedCommand;\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 ChatInputCommandContext = 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 ChatInputCommand = AnyCommandExecute<ChatInputCommandContext>;\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 guild where the command was triggered.\n */\n public readonly guild!: Guild | null;\n\n /**\n * The guild ID where the command was triggered.\n */\n public readonly guildId!: string | null;\n\n /**\n * The channel where the command was triggered.\n */\n public readonly channel!: TextBasedChannel | null;\n\n /**\n * The channel id where the command was triggered.\n */\n public readonly channelId!: string | null;\n\n /**\n * The client instance.\n */\n public readonly client: Client;\n\n /**\n * The command that this context belongs to.\n */\n public readonly command: LoadedCommand;\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 this.command = config.command;\n\n if (config.interaction) {\n this.guild = config.interaction.guild;\n this.guildId = config.interaction.guildId;\n this.channel = config.interaction.channel;\n this.channelId = config.interaction.channelId;\n }\n\n if (config.message) {\n this.guild = config.message.guild;\n this.guildId = config.message.guildId;\n this.channel = config.message.channel;\n this.channelId = config.message.channelId;\n }\n\n if (this.config.environment) {\n this.config.environment.setContext(this);\n }\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 // * The guild where this command was triggered.\n // */\n // public get guild() {\n // if (this.isInteraction()) {\n // return this.interaction.guild;\n // } else {\n // return (<MessageCommandContext>this).message.guild;\n // }\n // }\n\n // /**\n // * The guild ID where this command was triggered.\n // */\n // public get guildId() {\n // if (this.isInteraction()) {\n // return this.interaction.guildId;\n // } else {\n // return (<MessageCommandContext>this).message.guildId;\n // }\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.ChatInputCommand ||\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 isChatInputCommand(): this is ChatInputCommandContext {\n return this.executionMode === CommandExecutionMode.ChatInputCommand;\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 * 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(): never {\n exitMiddleware();\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 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 command: prepared.command,\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 if (!middleware.data.beforeExecute) continue;\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 if (!middleware.data.afterExecute) continue;\n try {\n await middleware.data.afterExecute(ctx);\n } catch (e) {\n if (isErrorType(e, CommandKitErrorCodes.ExitMiddleware)) {\n return;\n }\n\n throw e;\n }\n }\n });\n }\n }\n\n async #finalizer() {\n const env = useEnvironment();\n\n await env.runDeferredFunctions();\n\n env.clearAllDeferredFunctions();\n\n // plugins may have their own deferred function, useful for cleanup or post-command analytics\n await this.handler.commandkit.plugins.execute(async (ctx, plugin) => {\n await plugin.onAfterCommand(ctx, env);\n });\n }\n\n public getExecutionMode(source: Interaction | Message): CommandExecutionMode {\n if (source instanceof Message) return CommandExecutionMode.Message;\n if (source.isChatInputCommand())\n return CommandExecutionMode.ChatInputCommand;\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(force = false) {\n const location = join(process.cwd(), 'node_modules', 'commandkit-types');\n if (!COMMANDKIT_IS_DEV && !force) 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 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 './command';\nexport {};\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(command, commandTypesContent);\n\n return location;\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 AutocompleteInteraction,\n Awaitable,\n Collection,\n CommandInteraction,\n ContextMenuCommandBuilder,\n Events,\n Interaction,\n Message,\n SlashCommandBuilder } from\n'discord.js';\nimport { Context } from '../commands/Context';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { MessageCommandParser } from '../commands/MessageCommandParser';\nimport { CommandKitErrorCodes, isErrorType } from '../../utils/error-codes';\nimport { CommandRegistrar } from '../register/CommandRegistrar';\nimport { AsyncFunction, GenericFunction } from '../../context/async-context';\nimport { Logger } from '../../logger/Logger';\nimport { Command, Middleware } from '../router';\nimport { AppCommandRunner } from '../commands/AppCommandRunner';\nimport { COMMANDKIT_IS_DEV } from '../../utils/constants';\nimport { rewriteCommandDeclaration } from '../../utils/types-package';\nimport colors from '../../utils/colors';\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\nexport type 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 public readonly commandRunner = new AppCommandRunner(this);\n\n public readonly externalCommandData = new Collection<string, Command>();\n public readonly externalMiddlewareData = new Collection<string, Middleware>();\n\n public constructor(public readonly commandkit: CommandKit) {\n this.registrar = new CommandRegistrar(this.commandkit);\n }\n\n public printBanner() {\n const uncategorized = crypto.randomUUID();\n\n // Group commands by category\n const categorizedCommands = this.getCommandsArray().reduce(\n (acc, cmd) => {\n const category = cmd.command.category || uncategorized;\n acc[category] = acc[category] || [];\n acc[category].push(cmd);\n return acc;\n },\n {} as Record<string, LoadedCommand[]>\n );\n\n console.log(\n colors.green(\n `Loaded ${colors.magenta(this.loadedCommands.size.toString())} commands:`\n )\n );\n\n const categories = Object.keys(categorizedCommands).sort();\n\n // Build category tree for all nesting depths\n const categoryTree: Record<string, string[]> = {};\n\n // Find the best parent for nested categories\n categories.forEach((category) => {\n if (category === uncategorized) return;\n\n if (category.includes(':')) {\n const parts = category.split(':');\n let bestParent = null;\n\n // Try to find the deepest existing parent\n for (let i = parts.length - 1; i > 0; i--) {\n const potentialParent = parts.slice(0, i).join(':');\n if (categories.includes(potentialParent)) {\n bestParent = potentialParent;\n break;\n }\n }\n\n // If we found a parent, add this category as its child\n if (bestParent) {\n categoryTree[bestParent] = categoryTree[bestParent] || [];\n categoryTree[bestParent].push(category);\n }\n }\n });\n\n // Track categories we've processed to avoid duplicates\n const processedCategories = new Set<string>();\n\n // Recursive function to print a category and its children\n const printCategory = (\n category: string,\n indent: string = '',\n isLast: boolean = false,\n parentPrefix: string = '') =>\n {\n // Skip if already processed\n if (processedCategories.has(category)) return;\n processedCategories.add(category);\n\n const commands = categorizedCommands[category];\n const hasChildren =\n categoryTree[category] && categoryTree[category].length > 0;\n const thisPrefix = isLast ? '└─' : '├─';\n const childIndent = parentPrefix + (isLast ? ' ' : '│ ');\n\n // Print category name if not uncategorized\n if (category !== uncategorized) {\n // For nested categories, only print the last part after the colon\n const displayName = category.includes(':') ?\n category.split(':').pop() :\n category;\n\n console.log(\n colors.cyan(`${indent}${thisPrefix} ${colors.bold(displayName!)}`)\n );\n }\n\n // Print commands in this category\n commands.forEach((cmd, cmdIndex) => {\n const cmdIsLast = cmdIndex === commands.length - 1 && !hasChildren;\n const cmdPrefix = cmdIsLast ? '└─' : '├─';\n const cmdIndent = category !== uncategorized ? childIndent : indent;\n\n const name = cmd.data.command.name;\n const hasMw = cmd.command.middlewares.length > 0;\n const middlewareIcon = hasMw ? colors.magenta(' (λ)') : '';\n\n console.log(\n `${colors.green(`${cmdIndent}${cmdPrefix}`)} ${colors.yellow(name)}${middlewareIcon}`\n );\n });\n\n // Process nested categories\n if (hasChildren) {\n const children = categoryTree[category].sort();\n children.forEach((childCategory, idx) => {\n const childIsLast = idx === children.length - 1;\n printCategory(childCategory, childIndent, childIsLast, childIndent);\n });\n }\n };\n\n // Find and print top-level categories\n const topLevelCategories = categories.\n filter((category) => {\n if (category === uncategorized) return true;\n\n if (category.includes(':')) {\n const parts = category.split(':');\n // Check if any parent path exists as a category\n for (let i = 1; i < parts.length; i++) {\n const parentPath = parts.slice(0, i).join(':');\n if (categories.includes(parentPath)) {\n return false; // Not top-level, it has a parent\n }\n }\n return true; // No parent found, so it's top-level\n }\n\n return true; // Not nested, so it's top-level\n }).\n sort();\n\n // Print each top-level category\n topLevelCategories.forEach((category, index) => {\n const isLast = index === topLevelCategories.length - 1;\n printCategory(category, '', isLast);\n });\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.commandkit.client.on(Events.InteractionCreate, this.onInteraction);\n this.commandkit.client.on(Events.MessageCreate, this.onMessageCreate);\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 const isAnyCommand =\n source.isChatInputCommand() ||\n source.isAutocomplete() ||\n source.isContextMenuCommand();\n\n if (!isAnyCommand) 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 instanceof AutocompleteInteraction) &&\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 this.externalCommandData.clear();\n this.externalMiddlewareData.clear();\n\n await this.loadCommands();\n }\n\n public async addExternalMiddleware(data: Middleware[]) {\n for (const middleware of data) {\n if (!middleware.id) continue;\n\n this.externalMiddlewareData.set(middleware.id, middleware);\n }\n }\n\n public async addExternalCommands(data: Command[]) {\n for (const command of data) {\n if (!command.id) continue;\n\n this.externalCommandData.set(command.id, command);\n }\n }\n\n public async registerExternalLoadedMiddleware(data: LoadedMiddleware[]) {\n for (const middleware of data) {\n this.loadedMiddlewares.set(middleware.middleware.id, middleware);\n }\n }\n\n public async registerExternalLoadedCommands(data: LoadedCommand[]) {\n for (const command of data) {\n this.loadedCommands.set(command.command.id, command);\n this.commandNameToId.set(command.command.name, command.command.id);\n }\n }\n\n public async loadCommands() {\n await this.commandkit.plugins.execute((ctx, plugin) => {\n return plugin.onBeforeCommandsLoad(ctx);\n });\n\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 const combinedCommands = this.externalCommandData.size ?\n commands.concat(this.externalCommandData) :\n commands;\n\n const combinedMiddlewares = this.externalMiddlewareData.size ?\n middlewares.concat(this.externalMiddlewareData) :\n middlewares;\n\n // Load middlewares first\n for (const [id, middleware] of combinedMiddlewares) {\n await this.loadMiddleware(id, middleware);\n }\n\n // Load commands\n for (const [id, command] of combinedCommands) {\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 await this.commandkit.plugins.execute((ctx, plugin) => {\n return plugin.onAfterCommandsLoad(ctx);\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 let lastUpdated = data.command;\n\n await this.commandkit.plugins.execute(async (ctx, plugin) => {\n const res = await plugin.prepareCommand(ctx, lastUpdated);\n\n if (res) {\n lastUpdated = res;\n }\n });\n\n this.loadedCommands.set(id, {\n command,\n guilds: data.guilds,\n data: {\n ...data,\n command: 'toJSON' in lastUpdated ? lastUpdated.toJSON() : lastUpdated\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}","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 global: boolean;\n command: string | null;\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_MIDDLEWARE_PATTERN =\n/^\\+([^+().][^().]*)\\.middleware\\.(m|c)?(j|t)sx?$/;\nconst GLOBAL_MIDDLEWARE_PATTERN = /^\\+global-middleware\\.(m|c)?(j|t)sx?$/;\nconst COMMAND_PATTERN = /^([^+().][^().]*)\\.(m|c)?(j|t)sx?$/;\nconst CATEGORY_PATTERN = /^\\(.+\\)$/;\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 (\n MIDDLEWARE_PATTERN.test(name) ||\n GLOBAL_MIDDLEWARE_PATTERN.test(name) ||\n COMMAND_MIDDLEWARE_PATTERN.test(name));\n\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 } else if (\n entry.isDirectory() &&\n this.isCategory(entry.name) &&\n category)\n {\n // nested category\n const nestedCategory = this.isCategory(entry.name) ?\n `${category}:${entry.name.slice(1, -1)}` :\n null;\n await this.traverse(join(path, entry.name), nestedCategory);\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 global: GLOBAL_MIDDLEWARE_PATTERN.test(name),\n command: COMMAND_MIDDLEWARE_PATTERN.test(name) ?\n name.split('.')[0] || null :\n null\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.global) return true;\n if (middleware.command) return middleware.command === command.name;\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 entrypoints: 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.entrypoints) {\n options.entrypoints = Array.from(new Set(options.entrypoints));\n }\n\n if (!options.entrypoints?.length) {\n throw new Error('Entrypoint directory must be provided');\n }\n }\n\n /**\n * Adds new entrypoints to the router\n * @param entrypoints - Array of new entrypoint paths\n */\n public addEntrypoints(entrypoints: string[]) {\n this.options.entrypoints = Array.from(\n new Set([...this.options.entrypoints, ...entrypoints])\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 entrypoints(): string[] {\n return this.options.entrypoints;\n }\n\n /**\n * Checks if the entrypoint path is valid\n */\n public isValidPath() {\n return this.entrypoints.every((entrypoint) => existsSync(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 for (const entrypoint of this.entrypoints) {\n const dirs = await readdir(entrypoint, { withFileTypes: true });\n\n for (const dir of dirs) {\n if (dir.isDirectory()) {\n const path = join(entrypoint, dir.name);\n await this.scanEvent(dir.name, path, null, [], true);\n }\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.startsWith('_')) 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 { Collection } from 'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { ListenerFunction } from '../../events/CommandKitEventsChannel';\nimport { Logger } from '../../logger/Logger';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { StopEventPropagationError } from '../../utils/utilities';\nimport { runInEventWorkerContext } from '../events/EventWorkerContext';\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 interface AppEventsHandlerLoadedData {\n name: string;\n namespace: string | null;\n onceListeners: number;\n regularListeners: number;\n metadata: ParsedEvent;\n}\n\nexport class AppEventsHandler {\n private loadedEvents = new Collection<string, LoadedEvent>();\n public constructor(public readonly commandkit: CommandKit) {}\n\n public getEvents(): AppEventsHandlerLoadedData[] {\n if (this.loadedEvents.size === 0) return [];\n\n const events = this.loadedEvents.toJSON();\n\n return events.map(\n (event) =>\n ({\n name: event.name,\n namespace: event.namespace,\n onceListeners: event.listeners.filter((listener) => listener.once).\n length,\n regularListeners: event.listeners.filter((listener) => !listener.once).\n length,\n metadata: event.event\n }) satisfies AppEventsHandlerLoadedData\n );\n }\n\n public async reloadEvents() {\n this.unregisterAll();\n await this.loadEvents();\n }\n\n public async loadEvents() {\n await this.commandkit.plugins.execute((ctx, plugin) => {\n return plugin.onBeforeEventsLoad(ctx);\n });\n\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 await this.commandkit.plugins.execute((ctx, plugin) => {\n return plugin.onAfterEventsLoad(ctx);\n });\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 await runInEventWorkerContext(\n {\n event: name,\n namespace: namespace ?? null,\n data: data.event,\n commandkit: this.commandkit\n },\n async () => {\n for (const listener of onListeners) {\n try {\n await listener.handler(...args);\n } catch (e) {\n // Check if this is a stop propagation signal\n if (e instanceof StopEventPropagationError) {\n Logger.debug(\n `Event propagation stopped for ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`\n\n );\n break; // Stop executing remaining listeners\n }\n\n // Otherwise log the error as usual\n Logger.error(\n `Error handling event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`,\n\n e\n );\n }\n }\n }\n );\n };\n\n // Create handler for \"once\" listeners with cleanup logic\n const onceHandler: ListenerFunction = async (...args) => {\n let broken = false;\n\n for (const listener of onceListeners) {\n if (broken) break; // Stop executing remaining listeners if propagation was stopped\n\n await runInEventWorkerContext(\n {\n event: name,\n namespace: namespace ?? null,\n data: data.event,\n commandkit: this.commandkit\n },\n async () => {\n try {\n // Skip if already executed (shouldn't happen with proper .once registration, but just in case)\n if (executedOnceListeners.has(listener.handler)) return;\n\n await listener.handler(...args);\n executedOnceListeners.add(listener.handler);\n } catch (e) {\n // Check if this is a stop propagation signal\n if (e instanceof StopEventPropagationError) {\n Logger.debug(\n `Event propagation stopped for ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`\n\n );\n broken = true; // Stop executing remaining listeners\n }\n\n // Otherwise log the error as usual\n Logger.error(\n `Error handling event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`,\n\n e\n );\n }\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';\nimport { execSync } from 'node:child_process';\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 await loadTypeScript();\n\n return true;\n}\n\nlet packageManager: string;\n\nfunction detectPackageManager() {\n if (packageManager) return packageManager;\n\n const lockfiles = {\n 'yarn.lock': 'yarn',\n 'pnpm-lock.yaml': 'pnpm',\n 'package-lock.json': 'npm',\n 'bun.lock': 'bun',\n 'bun.lockb': 'bun'\n };\n\n for (const [lockfile, manager] of Object.entries(lockfiles)) {\n if (fs.existsSync(join(process.cwd(), lockfile))) {\n packageManager = manager;\n break;\n }\n }\n\n if (!packageManager) {\n packageManager = 'npm';\n }\n\n return packageManager;\n}\n\nexport async function loadTypeScript(e?: string) {\n if (ts) return ts;\n\n try {\n ts = await import('typescript');\n } catch (e) {\n if (e instanceof Error && 'code' in e && e.code === 'MODULE_NOT_FOUND') {\n try {\n const packageManager = detectPackageManager();\n\n execSync(`${packageManager} add typescript`, {\n stdio: 'inherit',\n cwd: process.cwd()\n });\n\n console.log(\n colors.cyan(\n `TypeScript has been installed automatically, restarting...`\n )\n );\n\n ts = await import('typescript');\n\n return ts;\n } catch {\n panic(\n 'TypeScript is not installed and could not be installed automatically. Please install it manually.'\n );\n }\n }\n panic(e || 'TypeScript must be installed to use TypeScript config files.');\n }\n\n return ts;\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\nexport function getPossibleConfigPaths(root: string) {\n return CONFIG_FILE_NAMES.map((name) => join(root, name));\n}\n\nfunction findConfigFile(cwd: string) {\n const locations = getPossibleConfigPaths(cwd);\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, HMREventType } from './constants';\n\ninterface IpcMessageCommand {\n event: HMREventType;\n path: string;\n id?: string;\n}\n\nexport interface CommandKitHMREvent {\n event: HMREventType;\n path: string;\n accept: () => void;\n preventDefault: () => void;\n}\n\nexport function registerDevHooks(commandkit: CommandKit) {\n if (!COMMANDKIT_IS_DEV) return;\n\n process.on('message', async (message) => {\n if (typeof message !== 'object' || message === null) return;\n\n const { event, path, id } = 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 let accepted = false,\n prevented = false,\n handled = false;\n\n const hmrEvent: CommandKitHMREvent = {\n accept() {\n accepted = true;\n },\n preventDefault() {\n prevented = true;\n },\n path,\n event\n };\n\n try {\n await commandkit.plugins.execute(async (ctx, plugin) => {\n // some plugin accepted the event\n if (accepted) return;\n await plugin.performHMR?.(ctx, hmrEvent);\n });\n\n // plugin took care of it\n if (prevented) return;\n\n switch (event) {\n case HMREventType.ReloadCommands:\n commandkit.commandHandler.reloadCommands();\n handled = true;\n break;\n case HMREventType.ReloadEvents:\n commandkit.eventHandler.reloadEvents();\n handled = true;\n break;\n case HMREventType.Unknown:\n // Handle unknown events if needed\n handled = false;\n break;\n default:\n // invalid hmr event\n break;\n }\n } finally {\n // Send acknowledgment back to dev server if an id was provided\n if (id && process.send) {\n process.send({\n type: 'commandkit-hmr-ack',\n id,\n handled: handled || accepted\n });\n }\n }\n });\n}","import EventEmitter from 'node:events';\nimport type { CommandKit } from '../CommandKit';\nimport type { AsyncFunction, 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 { createElement, Fragment } from './components';\nimport { EventInterceptor } from './components/common/EventInterceptor';\nimport { Awaitable, Events, Locale, Message } from 'discord.js';\nimport { findAppDirectory } from './utils/utilities';\nimport { join } from 'node:path';\nimport { AppCommandHandler } from './app/handlers/AppCommandHandler';\nimport { CommandsRouter, EventsRouter } from './app/router';\nimport { AppEventsHandler } from './app/handlers/AppEventsHandler';\nimport { CommandKitPluginRuntime } from './plugins/plugin-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';\nimport { AsyncFunction, GenericFunction } from './context/async-context';\n\nexport interface CommandKitConfiguration {\n defaultLocale: Locale;\n getMessageCommandPrefix: (message: Message) => Awaitable<string | string[]>;\n}\n\n// @ts-ignore\nexport let commandkit: CommandKit;\n\nexport type BootstrapFunction =\nGenericFunction<[CommandKit]> |\nAsyncFunction<[CommandKit]>;\n\nconst bootstrapHooks = new Set<BootstrapFunction>();\nconst onApplicationBootstrapHooks = new Set<BootstrapFunction>();\n\n/**\n * Registers a bootstrap hook that will be called when the CommandKit instance is created.\n * This is useful for plugins that need to run some code after the CommandKit instance is fully initialized.\n * Note that not all commandkit dependiencs are available at this point. It is recommended to use the `onApplicationBootstrap` hook instead,\n * if you need access to the commandkit dependencies.\n * @param fn The bootstrap function to register.\n * @example ```ts\n * import { onBootstrap } from 'commandkit';\n *\n * onBootstrap(async (commandkit) => {\n * // Do something with the commandkit instance\n * })\n * ```\n */\nexport function onBootstrap<F extends BootstrapFunction>(fn: F): void {\n bootstrapHooks.add(fn);\n}\n\n/**\n * Registers a bootstrap hook that will be called when the CommandKit instance is created.\n * This is useful for plugins that need to run some code after the CommandKit instance is fully initialized.\n * @param fn The bootstrap function to register.\n * @example ```ts\n * import { onApplicationBootstrap } from 'commandkit';\n *\n * onApplicationBootstrap(async (commandkit) => {\n * // Do something with the commandkit instance\n * })\n * ```\n */\nexport function onApplicationBootstrap<F extends BootstrapFunction>(\nfn: F)\n: void {\n onApplicationBootstrapHooks.add(fn);\n}\n\nexport class CommandKit extends EventEmitter {\n #started = false;\n public 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 getMessageCommandPrefix: () => '!'\n };\n\n public readonly store = new Map<string, any>();\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 readonly 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 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 this.#bootstrapHooks();\n }\n\n async #bootstrapHooks() {\n for (const hook of bootstrapHooks) {\n try {\n await hook(this);\n } catch (e) {\n Logger.error('Error while executing bootstrap hook: ', e);\n } finally {\n bootstrapHooks.delete(hook);\n }\n }\n\n // force clear just in case we missed something\n bootstrapHooks.clear();\n }\n\n async #applicationBootstrapHooks() {\n for (const hook of onApplicationBootstrapHooks) {\n try {\n await hook(this);\n } catch (e) {\n Logger.error('Error while executing application bootstrap hook: ', e);\n } finally {\n onApplicationBootstrapHooks.delete(hook);\n }\n }\n // force clear just in case we missed something\n onApplicationBootstrapHooks.clear();\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 (!this.options.client) {\n throw new Error(\n colors.red('\"client\" is required when starting CommandKit.')\n );\n }\n\n this.eventInterceptor = new EventInterceptor(this.client);\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 const botToken =\n token ??\n this.options.client.token ??\n process.env.TOKEN ??\n process.env.DISCORD_TOKEN;\n\n await this.options.client.login(botToken);\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 await this.#applicationBootstrapHooks();\n }\n\n /**\n * Loads all the plugins.\n */\n async loadPlugins() {\n const config = await loadConfigFile();\n const plugins = config.plugins.flat(2).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 * 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 await this.plugins.execute((ctx, plugin) => {\n return plugin.onCommandsRouterInit(ctx);\n });\n\n this.eventsRouter = new EventsRouter({\n entrypoints: [events]\n });\n\n await this.plugins.execute((ctx, plugin) => {\n return plugin.onEventsRouterInit(ctx);\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 this.commandHandler.printBanner();\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 * 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: 'commands' | 'events') {\n const appDir = this.getAppDirectory();\n if (!appDir) return null;\n\n switch (to) {\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 */\"1.0.0-dev.20250514120740\";","export function DevEnv(_static = false) {\n const common = {\n NODE_ENV: 'development',\n COMMANDKIT_IS_DEV: 'true'\n };\n\n if (_static) return Object.assign({}, common);\n\n return Object.assign({}, process.env, common);\n}\n\nexport function ProdEnv(_static = false) {\n const common = {\n NODE_ENV: 'production',\n COMMANDKIT_IS_DEV: 'false'\n };\n\n if (_static) return Object.assign({}, common);\n\n return Object.assign({}, process.env, common);\n}\n\nexport const CommonEnvFiles = ['.env', '.env.local'];\nexport const DevEnvFiles = ['.env.development', '.env.development.local'];\nexport const ProdEnvFiles = ['.env.production', '.env.production.local'];\n\nexport const devEnvFileArgs = [...CommonEnvFiles, ...DevEnvFiles];\n\nexport const prodEnvFileArgs = [...CommonEnvFiles, ...ProdEnvFiles];","import { IOType, spawn } from 'node:child_process';\nimport { DevEnv, ProdEnv } 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: isDev ? DevEnv() : ProdEnv(),\n stdio\n }\n );\n\n ps.stdout?.pipe(process.stdout);\n ps.stderr?.pipe(process.stderr);\n\n return ps;\n}","import { existsSync } from 'node:fs';\nimport { loadTypeScript } from './common';\nimport { join, relative } from 'node:path';\nimport colors from '../utils/colors';\n\nconst TS_NOT_FOUND_ERR = `TypeScript must be installed in order to use the type checker. Please install it using \\`npm install typescript\\` or \\`yarn add typescript\\``;\n\n/**\n * Formats a TypeScript diagnostic message in a pretty, readable format\n */\nfunction formatDiagnostic(\nts: typeof import('typescript'),\ndiagnostic: import('typescript').Diagnostic,\ncwd: string)\n: string {\n const messageText = ts.flattenDiagnosticMessageText(\n diagnostic.messageText,\n '\\n'\n );\n\n if (!diagnostic.file) {\n return `${colors.red('error')}: ${messageText}`;\n }\n\n const { line, character } = ts.getLineAndCharacterOfPosition(\n diagnostic.file,\n diagnostic.start!\n );\n const fileName = relative(cwd, diagnostic.file.fileName);\n const position = `${line + 1}:${character + 1}`;\n const errorCode = diagnostic.code ? `TS${diagnostic.code}` : '';\n\n // Format the error message nicely\n return [\n `${colors.bold(colors.cyan(fileName))}:${colors.bold(colors.yellow(position))} - ${colors.red('error')} ${colors.gray(errorCode)}`,\n `${messageText}`].\n join('\\n');\n}\n\n/**\n * Performs a type check on the project using TypeScript.\n * @param path The project root or cwd\n */\nexport async function performTypeCheck(path: string) {\n const tsconfigPath = join(path, 'tsconfig.json');\n\n if (!existsSync(tsconfigPath)) return;\n\n const ts = await loadTypeScript(TS_NOT_FOUND_ERR);\n\n // Format host for error reporting\n const formatHost = {\n getCanonicalFileName: (path: string) => path,\n getCurrentDirectory: ts.sys.getCurrentDirectory,\n getNewLine: () => ts.sys.newLine\n };\n\n // Read tsconfig.json\n const configFile = ts.readConfigFile(tsconfigPath, ts.sys.readFile);\n\n if (configFile.error) {\n console.error(\n colors.red(\n `Error reading tsconfig.json: ${ts.formatDiagnostic(configFile.error, formatHost)}`\n )\n );\n process.exit(1);\n }\n\n // Parse the config file\n const parsedConfig = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n path\n );\n\n // Force noEmit to true as we only want type checking\n parsedConfig.options.noEmit = true;\n\n // Create a program\n const program = ts.createProgram({\n rootNames: parsedConfig.fileNames,\n options: parsedConfig.options,\n projectReferences: parsedConfig.projectReferences\n });\n\n // Get the diagnostics\n const diagnostics = [\n ...program.getOptionsDiagnostics(),\n ...program.getGlobalDiagnostics(),\n ...program.getSyntacticDiagnostics(),\n ...program.getSemanticDiagnostics()];\n\n\n // Report any errors\n if (diagnostics.length > 0) {\n console.log('');\n console.error(\n colors.bold(\n colors.red('Type checking failed with the following errors:')\n )\n );\n console.log('');\n\n // Group diagnostics by file for better readability\n const byFile = new Map<string, import('typescript').Diagnostic[]>();\n\n for (const diagnostic of diagnostics) {\n const fileName = diagnostic.file ? diagnostic.file.fileName : 'Global';\n if (!byFile.has(fileName)) {\n byFile.set(fileName, []);\n }\n byFile.get(fileName)!.push(diagnostic);\n }\n\n // Pretty-print each diagnostic\n const totalErrors = diagnostics.length;\n let counter = 0;\n\n for (const [_, fileDiags] of byFile) {\n for (const diagnostic of fileDiags) {\n counter++;\n console.log(formatDiagnostic(ts, diagnostic, path));\n // Add separator between errors for better readability, except for the last one\n if (counter < totalErrors) {\n console.log('');\n }\n }\n }\n\n console.log('');\n console.error(\n colors.bold(\n colors.red(`Found ${totalErrors} error${totalErrors > 1 ? 's' : ''}`)\n )\n );\n console.log('');\n\n process.exit(1);\n }\n\n console.log(colors.green('✓ Type checking completed successfully.'));\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 { DevEnv, devEnvFileArgs, ProdEnv, prodEnvFileArgs } from './env';\nimport { rimraf } from 'rimraf';\nimport { performTypeCheck } from './type-checker';\nimport { copyLocaleFiles } from './common';\nimport { MaybeArray } from '../components';\n\nexport interface ApplicationBuildOptions {\n plugins?: MaybeArray<CompilerPlugin>[] | Array<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\n if (!isDev && !config?.typescript?.ignoreBuildErrors) {\n await performTypeCheck(configPath || process.cwd());\n }\n\n const pluginRuntime = new CompilerPluginRuntime(\n (plugins || []) as CompilerPlugin[]\n );\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 esbuildOptions: (options) => {\n options.jsx = 'automatic';\n options.jsxImportSource = 'commandkit';\n\n return options;\n },\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 env: (isDev ? DevEnv(true) : ProdEnv(true)) as Record<string, string>,\n entry: [\n 'src',\n `!${config.distDir}`,\n '!.commandkit',\n '!**/*.test.*',\n '!**/*.spec.*']\n\n });\n\n await copyLocaleFiles('src', dest);\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 bootstrap() {\n const commandkit = new CommandKit({\n client: app,\n });\n\n await commandkit.start();\n}\n\nawait bootstrap().catch((e) => {\n console.error('Failed to bootstrap CommandKit application:\\\\n', e.stack);\n})\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 { getPossibleConfigPaths, 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';\nimport { setTimeout as sleep } from 'node:timers/promises';\nimport { randomUUID } from 'node:crypto';\nimport { HMREventType } from '../utils/constants';\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.flat(2).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 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\nexport async function bootstrapDevelopmentServer(configPath?: string) {\n process.env.COMMANDKIT_BOOTSTRAP_MODE = 'development';\n const start = performance.now();\n const cwd = configPath || process.cwd();\n const configPaths = getPossibleConfigPaths(cwd);\n\n const watcher = watch([join(cwd, 'src'), ...configPaths], {\n ignoreInitial: true\n });\n\n let ps: ChildProcess | null = null;\n\n const waitForAcknowledgment = (messageId: string): Promise<boolean> => {\n return new Promise((resolve) => {\n if (!ps) return resolve(false);\n\n let _handled = false;\n const onMessage = (message: any) => {\n _handled = true;\n if (typeof message !== 'object' || message === null) return;\n\n const { type, id, handled } = message;\n if (type === 'commandkit-hmr-ack' && id === messageId) {\n ps?.off('message', onMessage);\n resolve(!!handled);\n }\n };\n\n ps.once('message', onMessage);\n\n if (!_handled) {\n sleep(3000).then(() => {\n ps?.off('message', onMessage);\n resolve(false);\n });\n }\n });\n };\n\n const sendHmrEvent = async (\n event: HMREventType,\n path?: string)\n : Promise<boolean> => {\n if (!ps || !ps.send) return false;\n\n const messageId = randomUUID();\n const messagePromise = waitForAcknowledgment(messageId);\n\n ps.send({ event, path, id: messageId });\n\n // Wait for acknowledgment or timeout after 3 seconds\n try {\n let triggered = false;\n const res = !!(await Promise.race([\n messagePromise,\n sleep(3000).then(() => {\n if (!triggered) {\n console.warn(\n colors.yellow(\n `HMR acknowledgment timed out for event ${event} on path ${path}`\n )\n );\n }\n return false;\n })]\n ));\n\n triggered = true;\n\n return res;\n } catch (error) {\n console.error(\n colors.red(`Error waiting for HMR acknowledgment: ${error}`)\n );\n return false;\n }\n };\n\n const performHMR = debounce(async (path?: string): Promise<boolean> => {\n if (!path || !ps) return false;\n\n let eventType: HMREventType | null = null;\n let eventDescription = '';\n\n if (isCommandSource(path)) {\n eventType = HMREventType.ReloadCommands;\n eventDescription = 'command(s)';\n } else if (isEventSource(path)) {\n eventType = HMREventType.ReloadEvents;\n eventDescription = 'event(s)';\n } else {\n eventType = HMREventType.Unknown;\n eventDescription = 'unknown source';\n }\n\n if (eventType) {\n console.log(\n `${colors.cyanBright(`Attempting to reload ${eventDescription} at`)} ${colors.yellowBright(path)}`\n );\n\n await buildAndStart(cwd, true);\n const hmrHandled = await sendHmrEvent(eventType, path);\n\n if (hmrHandled) {\n console.log(\n `${colors.greenBright(`Successfully hot reloaded ${eventDescription} at`)} ${colors.yellowBright(path)}`\n );\n return true;\n }\n }\n\n return false;\n }, 300);\n\n const isConfigUpdate = (path: string) => {\n const isConfig = configPaths.some((configPath) => path === configPath);\n\n if (!isConfig) return false;\n\n console.log(\n colors.yellowBright(\n 'It seems like commandkit config file was updated, please restart the server manually to apply changes.'\n )\n );\n\n return isConfig;\n };\n\n const hmrHandler = async (path: string) => {\n if (isConfigUpdate(path)) return;\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 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 ps = await buildAndStart(cwd);\n break;\n case 'rc':\n console.log(`Received reload commands command, reloading...`);\n await sendHmrEvent(HMREventType.ReloadCommands);\n break;\n case 're':\n console.log(`Received reload events command, reloading...`);\n await sendHmrEvent(HMREventType.ReloadEvents);\n break;\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 );\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 { CompilerPlugin, isCompilerPlugin } from '../plugins';\nimport { createSpinner } from './utils';\n\nexport async function bootstrapProductionServer(configPath?: string) {\n process.env.COMMANDKIT_BOOTSTRAP_MODE = 'production';\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, false);\n}\n\nexport async function createProductionBuild(configPath?: string) {\n process.env.COMMANDKIT_BOOTSTRAP_MODE = 'production';\n const cwd = configPath || process.cwd();\n const config = await loadConfigFile(cwd);\n\n const spinner = await createSpinner(\n 'Creating an optimized production build\\n'\n );\n\n spinner.start();\n\n await buildApplication({\n configPath: cwd,\n isDev: false,\n plugins: config.plugins.filter((p) =>\n isCompilerPlugin(p)\n ) as CompilerPlugin[],\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 { 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');\n\nconst formatPath = (path: string) =>\npath.replace(process.cwd(), '.').replace(/\\\\/g, '/');\n\nfunction determineExtension() {\n return existsSync(join(BASE_PATH, 'tsconfig.json')) ? 'ts' : 'js';\n}\n\nfunction TS_COMMAND_SOURCE(name: string) {\n return `import type { CommandData, ChatInputCommand, MessageCommand } from 'commandkit';\n\nexport const command: CommandData = {\n name: '${name}',\n description: '${name} command',\n};\n\nexport const chatInput: ChatInputCommand = 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`;\n}\n\nfunction JS_COMMAND_SOURCE(name: string) {\n return `/**\n * @type {import('commandkit').CommandData}\n */\nexport const command = {\n name: '${name}',\n description: '${name} command',\n};\n\n/**\n * @type {import('commandkit').ChatInputCommand}\n */\nexport const chatInput = async (ctx) => {\n await ctx.interaction.reply('Hello from ${name}!');\n};\n\n/**\n * @type {import('commandkit').MessageCommand}\n */\nexport const message = async (ctx) => {\n await ctx.message.reply('Hello from ${name}!');\n};\n`;\n}\n\nexport async function generateCommand(name: string, customPath?: string) {\n const cmdPath = join(customPath || COMMANDS_DIR);\n if (!existsSync(cmdPath)) await mkdir(cmdPath, { recursive: true });\n\n const ext = determineExtension();\n const isTypeScript = ext === 'ts';\n\n const fileName = `${name}.${ext}`;\n\n if (existsSync(join(cmdPath, fileName))) {\n panic(`Command ${name} already exists.`);\n }\n\n const commandFile = isTypeScript ?\n TS_COMMAND_SOURCE(name) :\n JS_COMMAND_SOURCE(name);\n\n await writeFile(join(cmdPath, fileName), commandFile);\n\n console.log(\n colors.green(\n `Command ${colors.magenta(name)} created at ${colors.blue(formatPath(`${cmdPath}/${fileName}`))}`\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 const ext = determineExtension();\n\n let filename = `event.${ext}`;\n\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}","import os from 'node:os';\nimport { execSync } from 'node:child_process';\nimport { version as commandkitVersion } from '../version';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst knownPlugins: string[] = /* @__MACRO__ $getKnownPlugins */[\"@commandkit/cache\",\"@commandkit/devtools\",\"@commandkit/i18n\",\"@commandkit/legacy\",\"@commandkit/redis\"];\n\nfunction findPackageVersion(packageName: string) {\n try {\n const packageJsonPath = require.resolve(`${packageName}/package.json`);\n const packageJson = require(packageJsonPath);\n return packageJson.version;\n } catch (e) {\n try {\n const basePaths = [\n path.join(process.cwd(), 'node_modules', packageName),\n path.join(process.cwd(), '..', '..', 'node_modules', packageName),\n path.join(process.cwd(), '..', '..', '.pnpm', packageName),\n path.join(\n process.cwd(),\n '..',\n '..',\n 'node_modules',\n '.pnpm',\n packageName\n )];\n\n\n for (const basePath of basePaths) {\n const packageJsonPath = path.join(basePath, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(\n fs.readFileSync(packageJsonPath, 'utf8')\n );\n return packageJson.version;\n }\n }\n\n const nodeModulesPath = path.join(\n process.cwd(),\n '..',\n '..',\n 'node_modules',\n '.pnpm'\n );\n if (fs.existsSync(nodeModulesPath)) {\n const folders = fs.readdirSync(nodeModulesPath);\n const packageFolder = folders.find((folder) =>\n folder.startsWith(`${packageName.replace('/', '+')}@`)\n );\n\n if (packageFolder) {\n const packageJsonPath = path.join(\n nodeModulesPath,\n packageFolder,\n 'node_modules',\n packageName,\n 'package.json'\n );\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(\n fs.readFileSync(packageJsonPath, 'utf8')\n );\n return packageJson.version;\n }\n }\n }\n\n return null;\n } catch {\n return null;\n }\n }\n}\n\nfunction getBinaryVersion(binary: string) {\n try {\n const version = execSync(`${binary} --version`).toString().trim();\n return version;\n } catch {\n return null;\n }\n}\n\nexport async function showInformation() {\n const runtimeName: string = (() => {\n // @ts-ignore\n if ('Deno' in globalThis && typeof Deno !== 'undefined') return 'Deno';\n // @ts-ignore\n if ('Bun' in globalThis && typeof Bun !== 'undefined') return 'Bun';\n\n return 'Node.js';\n })();\n\n const info = {\n 'Operating System': {\n Platform: process.platform,\n Arch: process.arch,\n Version: os.version(),\n 'Available Memory (MB)': Math.round(os.totalmem() / 1024 / 1024),\n 'Available CPU cores': os.cpus().length\n },\n Runtime: runtimeName,\n Binaries: {\n Node: process.version,\n npm: getBinaryVersion('npm') || 'N/A',\n Yarn: getBinaryVersion('yarn') || 'N/A',\n pnpm: getBinaryVersion('pnpm') || 'N/A',\n Bun: getBinaryVersion('bun') || 'N/A',\n Deno: (getBinaryVersion('deno') || 'N/A').replace(/\\n|\\r/g, ' ')\n },\n 'Relevant Packages': {\n commandkit: commandkitVersion,\n 'discord.js': findPackageVersion('discord.js') || 'N/A',\n typescript: findPackageVersion('typescript') || 'N/A',\n esbuild: findPackageVersion('esbuild') || 'N/A',\n tsup: findPackageVersion('tsup') || 'N/A',\n ...knownPlugins.reduce(\n (acc, plugin) => {\n acc[plugin] = findPackageVersion(plugin) || 'N/A';\n return acc;\n },\n {} as Record<string, string>\n )\n }\n };\n\n let output = '';\n\n for (const [section, data] of Object.entries(info)) {\n output += `${section}:\\n`;\n\n if (typeof data === 'string') {\n output += ` ${data}\\n\\n`;\n continue;\n }\n\n for (const [key, value] of Object.entries(data)) {\n output += ` ${key}: ${value}\\n`;\n }\n output += '\\n';\n }\n\n console.log(output.trim());\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 './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';\nexport {\n getCurrentDirectory,\n getSourceDirectories,\n devOnly,\n debounce,\n stopEvents,\n StopEventPropagationError } from\n'./utils/utilities';\nexport type { CommandKitHMREvent } from './utils/dev-hooks';\nexport * from './utils/constants';\nexport * from './app/events/EventWorkerContext';\n\n// cli\nexport { bootstrapCommandkitCLI } from './cli/init';","export * from './handlers/AppCommandHandler';\nexport * from './commands/Context';\nexport * from './commands/MessageCommandParser';\nexport * from './middleware/signals';\nexport * from './register/CommandRegistrar';\n\nexport {\n type CommandSource,\n isInteractionSource,\n isMessageSource } from\n'./commands/helpers';","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';\nimport { generateTypesPackage } from '../utils/types-package';\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 } = await import('./generators');\n const { version } = await import('../version');\n const { showInformation } = await import('./information');\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('info').\n description(\n 'Show information about the system which can be used to report bugs.'\n ).\n action(async () => {\n await showInformation();\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 config 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 config 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 or events files').\n option('-c, --command', 'Create a new command').\n option('-e, --event', 'Create a new event').\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 {\n console.error('Please specify what to create: --command or --event');\n }\n });\n\n const types = join(process.cwd(), 'node_modules', 'commandkit-types');\n\n if (!existsSync(types)) {\n await mkdir(types, { recursive: true }).catch(() => {});\n await generateTypesPackage(true).catch(() => {});\n }\n\n await program.parseAsync(argv, options);\n}"],"mappings":"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","names":["import_discord","myCustomId","import_discord","import_discord","_contextData","_unsub","getEventInterceptor_fn","destroyCollector_fn","import_discord","import_discord","_contextData","_unsub","getEventInterceptor_fn","setupCollector_fn","destroyCollector_fn","import_discord","_onSelectHandler","_contextData","_unsub","getEventInterceptor_fn","setupCollector_fn","destroyCollector_fn","import_discord","_onSelectHandler","_contextData","_unsub","getEventInterceptor_fn","setupCollector_fn","destroyCollector_fn","import_discord","_onSelectHandler","_contextData","_unsub","getEventInterceptor_fn","setupCollector_fn","destroyCollector_fn","import_discord","_onSelectHandler","_contextData","_unsub","getEventInterceptor_fn","setupCollector_fn","destroyCollector_fn","import_discord","init_common","import_discord","init_common","import_discord","import_discord","init_common","import_discord","init_common","import_discord","import_discord","init_types","context","options","import_discord","commandkit","build","init_types","init_types","context","import_node_async_hooks","path","import_discord","import_discord","commandkit","prevented","preRegisterEvent","import_node_crypto","commandkit","context","CommandKitEnvironmentType","commandkit","import_discord","commandkit","env","ctx","import_promises","import_node_path","import_node_fs","import_discord","commandkit","_a","commandId","loadedCommand","import_discord","import_node_fs","import_promises","import_node_path","path","import_discord","import_node_fs","import_promises","import_node_path","path","import_discord","commandkit","fs","e","packageManager","path","import_node_path","import_node_fs","init_common","import_node_fs","import_node_path","init_common","commandkit","path","commandkit","EventEmitter","import_node_events","import_discord","import_node_path","import_node_fs","EventEmitter","appDir","import_node_child_process","import_node_path","import_node_fs","init_common","ts","path","import_node_fs","import_node_path","init_common","import_promises","import_node_path","import_rimraf","init_common","sleep","path","configPath","import_path","import_promises","import_node_crypto","import_path","init_common","import_promises","import_path","import_fs","init_common","path","path","fs","version","os","import_node_child_process","import_node_fs","import_node_path","import_discord","import_node_fs","import_promises","import_node_path","bootstrapDevelopmentServer","bootstrapProductionServer","createProductionBuild","generateCommand","generateEvent","version","showInformation","options"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.4.0_@swc+core@1.11.13_@swc+helpers@0.5.15__jiti@2.4.2_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/components/v1/action-row/ActionRow.ts","../src/utils/error-codes.ts","../src/context/async-context.ts","../src/components/v1/button/ButtonKit.ts","../src/components/v1/button/Button.ts","../src/components/v1/modal/ModalKit.ts","../src/components/v1/modal/Modal.ts","../src/components/v1/select-menu/StringSelectMenuKit.ts","../src/components/v1/select-menu/ChannelSelectMenuKit.ts","../src/components/v1/select-menu/MentionableSelectMenuKit.ts","../src/components/v1/select-menu/UserSelectMenuKit.ts","../src/components/v1/select-menu/RoleSelectMenuKit.ts","../src/components/v1/select-menu/SelectMenu.ts","../src/components/v1/select-menu/common.ts","../src/components/v2/common.ts","../src/components/v2/container.ts","../src/components/v2/file.ts","../src/components/v2/media-gallery.ts","../src/components/v2/section.ts","../src/components/v2/separator.ts","../src/components/v2/text-display.ts","../src/components/v2/index.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/utils/constants.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/plugin-runtime/CommandKitPluginRuntime.ts","../src/plugins/plugin-runtime/CompilerPluginRuntime.ts","../src/plugins/plugin-runtime/types.ts","../src/plugins/plugin-runtime/runtime.ts","../src/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.ts","../src/plugins/index.ts","../src/plugins/plugin-runtime/builtin/MacroPlugin.ts","../src/config/default.ts","../src/config/config.ts","../src/app/events/EventWorkerContext.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/middleware/signals.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/type-checker.ts","../src/cli/build.ts","../src/cli/development.ts","../src/cli/utils.ts","../src/cli/production.ts","../src/cli/generators.ts","../src/cli/information.ts","../src/index.ts","../src/app/index.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);","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\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\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 setImmediate(async () => {\n try {\n await finalizer(...args);\n } catch {\n\n // no-op\n }});\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}","import {\n Events,\n StringSelectMenuBuilder,\n StringSelectMenuInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../../context/async-context';\nimport { EventInterceptorErrorHandler } from '../../common/EventInterceptor';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd,\n OnSelectMenuKitSubmit,\n SelectMenuKitPredicate } from\n'./common';\n\nexport type OnStringSelectMenuKitSubmit = OnSelectMenuKitSubmit<\n StringSelectMenuInteraction,\n StringSelectMenuKit>;\n\n\nexport type StringSelectMenuKitPredicate =\nSelectMenuKitPredicate<StringSelectMenuInteraction>;\n\nexport class StringSelectMenuKit extends StringSelectMenuBuilder {\n #onSelectHandler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n StringSelectMenuInteraction,\n StringSelectMenuKit> |\n null = null;\n #contextData: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData | 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 StringSelectMenuKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.user.id === '1234567890')\n * .onSelect(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSelect(\n handler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n StringSelectMenuInteraction,\n StringSelectMenuKit>,\n\n data?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSelectHandler) {\n this.#destroyCollector();\n }\n\n this.#onSelectHandler = 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: CommandKitSelectMenuBuilderOnEnd): 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(\n predicate: SelectMenuKitPredicate<StringSelectMenuInteraction>)\n : 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.isStringSelectMenu()) 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.#onSelectHandler;\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.#onSelectHandler = null;\n this.#contextData = null;\n }\n}","import {\n Events,\n ChannelSelectMenuBuilder,\n ChannelSelectMenuInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../../context/async-context';\nimport { EventInterceptorErrorHandler } from '../../common/EventInterceptor';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd,\n OnSelectMenuKitSubmit,\n SelectMenuKitPredicate } from\n'./common';\n\nexport type OnChannelSelectMenuKitSubmit = OnSelectMenuKitSubmit<\n ChannelSelectMenuInteraction,\n ChannelSelectMenuKit>;\n\n\nexport type ChannelSelectMenuKitPredicate =\nSelectMenuKitPredicate<ChannelSelectMenuInteraction>;\n\nexport class ChannelSelectMenuKit extends ChannelSelectMenuBuilder {\n #onSelectHandler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n ChannelSelectMenuInteraction,\n ChannelSelectMenuKit> |\n null = null;\n #contextData: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData | 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 ChannelSelectMenuKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.Channel.id === '1234567890')\n * .onSelect(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSelect(\n handler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n ChannelSelectMenuInteraction,\n ChannelSelectMenuKit>,\n\n data?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSelectHandler) {\n this.#destroyCollector();\n }\n\n this.#onSelectHandler = 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: CommandKitSelectMenuBuilderOnEnd): 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(\n predicate: SelectMenuKitPredicate<ChannelSelectMenuInteraction>)\n : 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.isChannelSelectMenu()) 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.#onSelectHandler;\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.#onSelectHandler = null;\n this.#contextData = null;\n }\n}","import {\n Events,\n MentionableSelectMenuBuilder,\n MentionableSelectMenuInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../../context/async-context';\nimport { EventInterceptorErrorHandler } from '../../common/EventInterceptor';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd,\n OnSelectMenuKitSubmit,\n SelectMenuKitPredicate } from\n'./common';\n\nexport type OnMentionableSelectMenuKitSubmit = OnSelectMenuKitSubmit<\n MentionableSelectMenuInteraction,\n MentionableSelectMenuKit>;\n\n\nexport type MentionableSelectMenuKitPredicate =\nSelectMenuKitPredicate<MentionableSelectMenuInteraction>;\n\nexport class MentionableSelectMenuKit extends MentionableSelectMenuBuilder {\n #onSelectHandler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n MentionableSelectMenuInteraction,\n MentionableSelectMenuKit> |\n null = null;\n #contextData: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData | 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 MentionableSelectMenuKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.Mentionable.id === '1234567890')\n * .onSelect(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSelect(\n handler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n MentionableSelectMenuInteraction,\n MentionableSelectMenuKit>,\n\n data?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSelectHandler) {\n this.#destroyCollector();\n }\n\n this.#onSelectHandler = 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: CommandKitSelectMenuBuilderOnEnd): 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(\n predicate: SelectMenuKitPredicate<MentionableSelectMenuInteraction>)\n : 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.isMentionableSelectMenu()) 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.#onSelectHandler;\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.#onSelectHandler = null;\n this.#contextData = null;\n }\n}","import {\n Events,\n UserSelectMenuBuilder,\n UserSelectMenuInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../../context/async-context';\nimport { EventInterceptorErrorHandler } from '../../common/EventInterceptor';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd,\n OnSelectMenuKitSubmit,\n SelectMenuKitPredicate } from\n'./common';\n\nexport type OnUserSelectMenuKitSubmit = OnSelectMenuKitSubmit<\n UserSelectMenuInteraction,\n UserSelectMenuKit>;\n\n\nexport type UserSelectMenuKitPredicate =\nSelectMenuKitPredicate<UserSelectMenuInteraction>;\n\nexport class UserSelectMenuKit extends UserSelectMenuBuilder {\n #onSelectHandler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n UserSelectMenuInteraction,\n UserSelectMenuKit> |\n null = null;\n #contextData: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData | 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 UserSelectMenuKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.user.id === '1234567890')\n * .onSelect(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSelect(\n handler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n UserSelectMenuInteraction,\n UserSelectMenuKit>,\n\n data?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSelectHandler) {\n this.#destroyCollector();\n }\n\n this.#onSelectHandler = 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: CommandKitSelectMenuBuilderOnEnd): 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(\n predicate: SelectMenuKitPredicate<UserSelectMenuInteraction>)\n : 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.isUserSelectMenu()) 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.#onSelectHandler;\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.#onSelectHandler = null;\n this.#contextData = null;\n }\n}","import {\n Events,\n RoleSelectMenuBuilder,\n RoleSelectMenuInteraction } from\n'discord.js';\nimport {\n exitContext,\n getCommandKit,\n getContext } from\n'../../../context/async-context';\nimport { EventInterceptorErrorHandler } from '../../common/EventInterceptor';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd,\n OnSelectMenuKitSubmit,\n SelectMenuKitPredicate } from\n'./common';\n\nexport type OnRoleSelectMenuKitSubmit = OnSelectMenuKitSubmit<\n RoleSelectMenuInteraction,\n RoleSelectMenuKit>;\n\n\nexport type RoleSelectMenuKitPredicate =\nSelectMenuKitPredicate<RoleSelectMenuInteraction>;\n\nexport class RoleSelectMenuKit extends RoleSelectMenuBuilder {\n #onSelectHandler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n RoleSelectMenuInteraction,\n RoleSelectMenuKit> |\n null = null;\n #contextData: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData | 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 RoleSelectMenuKit()\n * .setTitle('My Modal')\n * .setCustomId('my-modal')\n * .filter((interaction) => interaction.Role.id === '1234567890')\n * .onSelect(async (interaction) => {\n * await interaction.reply('You submitted the modal!');\n * })\n * .addComponents(actionRow1, actionRow2);\n * ```\n */\n public onSelect(\n handler: CommandKitSelectMenuBuilderInteractionCollectorDispatch<\n RoleSelectMenuInteraction,\n RoleSelectMenuKit>,\n\n data?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData)\n : this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n if (this.#onSelectHandler) {\n this.#destroyCollector();\n }\n\n this.#onSelectHandler = 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: CommandKitSelectMenuBuilderOnEnd): 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(\n predicate: SelectMenuKitPredicate<RoleSelectMenuInteraction>)\n : 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.isRoleSelectMenu()) 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.#onSelectHandler;\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.#onSelectHandler = null;\n this.#contextData = null;\n }\n}","import {\n APISelectMenuOption,\n BaseSelectMenuComponentData,\n ChannelSelectMenuComponentData,\n ChannelSelectMenuInteraction,\n MentionableSelectMenuComponentData,\n MentionableSelectMenuInteraction,\n RoleSelectMenuComponentData,\n RoleSelectMenuInteraction,\n SelectMenuComponentOptionData,\n StringSelectMenuInteraction,\n StringSelectMenuOptionBuilder,\n UserSelectMenuComponentData,\n UserSelectMenuInteraction } from\n'discord.js';\nimport { ChannelSelectMenuKit } from './ChannelSelectMenuKit';\nimport { MentionableSelectMenuKit } from './MentionableSelectMenuKit';\nimport { RoleSelectMenuKit } from './RoleSelectMenuKit';\nimport { StringSelectMenuKit } from './StringSelectMenuKit';\nimport { UserSelectMenuKit } from './UserSelectMenuKit';\nimport { MaybeArray } from '../../common/types';\nimport {\n CommandKitSelectMenuBuilderInteractionCollectorDispatch,\n CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData,\n CommandKitSelectMenuBuilderOnEnd } from\n'./common';\n\nexport interface CommonSelectMenuProps<T, C> {\n onSelect?: CommandKitSelectMenuBuilderInteractionCollectorDispatch<T, C>;\n onEnd?: CommandKitSelectMenuBuilderOnEnd;\n onError?: (error: Error) => any;\n options?: CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData;\n}\n\nexport interface SelectMenuProps<T, C> extends\n Partial<Omit<BaseSelectMenuComponentData, 'type'>>,\n CommonSelectMenuProps<T, C> {}\n\nexport interface StringSelectMenuProps extends\n SelectMenuProps<StringSelectMenuInteraction, StringSelectMenuKit> {\n children?: MaybeArray<StringSelectMenuOptionBuilder>;\n}\n\nexport type CommonBuilderKit =\nStringSelectMenuKit |\nUserSelectMenuKit |\nRoleSelectMenuKit |\nChannelSelectMenuKit |\nMentionableSelectMenuKit;\n\nexport type ResolveBuilderInteraction<T> = T extends StringSelectMenuKit ?\nStringSelectMenuInteraction :\nT extends UserSelectMenuKit ?\nUserSelectMenuInteraction :\nT extends RoleSelectMenuKit ?\nRoleSelectMenuInteraction :\nT extends ChannelSelectMenuKit ?\nChannelSelectMenuInteraction :\nT extends MentionableSelectMenuKit ?\nMentionableSelectMenuInteraction :\nnever;\n\nfunction applyPropsToBuilder<B extends CommonBuilderKit>(\nbuilder: B,\nprops: Partial<Omit<BaseSelectMenuComponentData, 'type'>> &\nCommonSelectMenuProps<ResolveBuilderInteraction<B>, B>)\n{\n builder.setCustomId(props.customId ?? `select-menu::${crypto.randomUUID()}`);\n\n if (props.maxValues != null) {\n builder.setMaxValues(props.maxValues);\n }\n\n if (props.minValues != null) {\n builder.setMinValues(props.minValues);\n }\n\n if (props.placeholder) {\n builder.setPlaceholder(props.placeholder);\n }\n\n if (props.disabled) {\n builder.setDisabled(props.disabled);\n }\n\n if (props.onEnd) {\n builder.onEnd(props.onEnd);\n }\n\n if (props.onError) {\n builder.onError(props.onError);\n }\n\n if (props.onSelect) {\n // @ts-ignore\n builder.onSelect(props.onSelect, props.options);\n }\n}\n\nexport function StringSelectMenu(props: StringSelectMenuProps) {\n const builder = new StringSelectMenuKit();\n\n applyPropsToBuilder(builder, props);\n\n if (props.children) {\n builder.setOptions(\n Array.isArray(props.children) ? props.children : [props.children]\n );\n }\n\n if (props.children) {\n builder.setOptions(\n Array.isArray(props.children) ? props.children : [props.children]\n );\n }\n\n return builder;\n}\n\nexport type StringSelectMenuOptionProps =\nSelectMenuComponentOptionData |\nAPISelectMenuOption;\n\nexport function StringSelectMenuOption(props: StringSelectMenuOptionProps) {\n return new StringSelectMenuOptionBuilder(props);\n}\n\nexport interface UserSelectMenuProps extends\n Partial<Omit<UserSelectMenuComponentData, 'type'>>,\n CommonSelectMenuProps<UserSelectMenuInteraction, UserSelectMenuKit> {}\n\nexport function UserSelectMenu(props: UserSelectMenuProps) {\n const builder = new UserSelectMenuKit();\n\n applyPropsToBuilder(builder, props);\n\n if (props.defaultValues) {\n builder.setDefaultUsers(\n Array.isArray(props.defaultValues) ?\n props.defaultValues :\n [props.defaultValues]\n );\n }\n\n return builder;\n}\n\nexport interface RoleSelectMenuProps extends\n Partial<Omit<RoleSelectMenuComponentData, 'type'>>,\n CommonSelectMenuProps<RoleSelectMenuInteraction, RoleSelectMenuKit> {}\n\nexport function RoleSelectMenu(props: RoleSelectMenuProps) {\n const builder = new RoleSelectMenuKit();\n\n applyPropsToBuilder(builder, props);\n\n if (props.defaultValues) {\n builder.setDefaultRoles(\n Array.isArray(props.defaultValues) ?\n props.defaultValues :\n [props.defaultValues]\n );\n }\n\n return builder;\n}\n\nexport interface MentionableSelectMenuProps extends\n Partial<Omit<MentionableSelectMenuComponentData, 'type'>>,\n CommonSelectMenuProps<\n MentionableSelectMenuInteraction,\n MentionableSelectMenuKit>\n{}\n\nexport function MentionableSelectMenu(props: MentionableSelectMenuProps) {\n const builder = new MentionableSelectMenuKit();\n\n applyPropsToBuilder(builder, props);\n\n if (props.defaultValues) {\n builder.setDefaultValues(\n Array.isArray(props.defaultValues) ?\n props.defaultValues :\n [props.defaultValues]\n );\n }\n\n return builder;\n}\n\nexport interface ChannelSelectMenuProps extends\n Partial<Omit<ChannelSelectMenuComponentData, 'type'>>,\n CommonSelectMenuProps<ChannelSelectMenuInteraction, ChannelSelectMenuKit> {}\n\nexport function ChannelSelectMenu(props: ChannelSelectMenuProps) {\n const builder = new ChannelSelectMenuKit();\n\n applyPropsToBuilder(builder, props);\n\n if (props.defaultValues) {\n builder.setDefaultChannels(\n Array.isArray(props.defaultValues) ?\n props.defaultValues :\n [props.defaultValues]\n );\n }\n\n if (props.channelTypes) {\n builder.setChannelTypes(\n Array.isArray(props.channelTypes) ?\n props.channelTypes :\n [props.channelTypes]\n );\n }\n\n return builder;\n}","import { Awaitable, Events } from 'discord.js';\nimport { EventInterceptorContextData } from '../../common/EventInterceptor';\n\nexport type SelectMenuKitPredicate<T> = (interaction: T) => 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 OnSelectMenuKitSubmit<T, C> =\nCommandKitSelectMenuBuilderInteractionCollectorDispatch<T, C>;\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 OnSelectMenuKitEnd = CommandKitSelectMenuBuilderOnEnd;\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 CommandKitSelectMenuBuilderInteractionCollectorDispatch<T, C> = (\ninteraction: T,\ncontext: C)\n=> Awaitable<void>;\n\nexport type CommandKitSelectMenuBuilderOnEnd = (\nreason: string)\n=> Awaitable<void>;\n\nexport type CommandKitSelectMenuBuilderInteractionCollectorDispatchContextData =\nEventInterceptorContextData<Events.InteractionCreate>;","import { ComponentBuilder } from 'discord.js';\n\nexport function applyId(props: {id?: number;}, component: ComponentBuilder) {\n if (props.id != null) {\n component.setId(props.id);\n }\n}","import {\n ActionRowBuilder,\n ComponentBuilder,\n ContainerBuilder,\n ContainerComponentData,\n FileBuilder,\n MediaGalleryBuilder,\n SectionBuilder,\n SeparatorBuilder,\n TextDisplayBuilder,\n ThumbnailBuilder } from\n'discord.js';\nimport { applyId } from './common';\n\nexport interface ContainerProps extends\n Omit<ContainerComponentData, 'type' | 'components'> {\n children?: ComponentBuilder[];\n}\n\nexport function Container(props: ContainerProps): ContainerBuilder {\n const container = new ContainerBuilder();\n\n applyId(props, container);\n\n if (typeof props.accentColor != null) {\n container.setAccentColor(props.accentColor);\n }\n\n if (props.spoiler != null) {\n container.setSpoiler(props.spoiler);\n }\n\n if (props.children?.length) {\n for (const child of props.children.flat()) {\n if (child instanceof TextDisplayBuilder) {\n container.addTextDisplayComponents(child);\n }\n\n if (child instanceof FileBuilder) {\n container.addFileComponents(child);\n }\n\n if (child instanceof ActionRowBuilder) {\n container.addActionRowComponents(child);\n }\n\n if (child instanceof SeparatorBuilder) {\n container.addSeparatorComponents(child);\n }\n\n if (child instanceof SectionBuilder) {\n container.addSectionComponents(child);\n }\n\n if (child instanceof MediaGalleryBuilder) {\n container.addMediaGalleryComponents(child);\n }\n }\n }\n\n return container;\n}","import { FileBuilder, FileComponentData } from 'discord.js';\n\nexport interface FileProps extends Omit<FileComponentData, 'type' | 'file'> {\n url: string;\n}\n\nexport function File(props: FileProps) {\n const file = new FileBuilder(props);\n\n if (props.url != null) {\n file.setURL(props.url);\n }\n\n return file;\n}","import { MediaGalleryBuilder, MediaGalleryItemBuilder } from 'discord.js';\nimport { applyId } from './common';\n\nexport interface MediaGalleryProps {\n id?: number;\n children?: MediaGalleryItemBuilder[];\n}\n\nexport function MediaGallery(props: MediaGalleryProps) {\n const gallery = new MediaGalleryBuilder();\n\n applyId(props, gallery);\n\n if (props.children != null) {\n gallery.addItems(props.children.flat());\n }\n\n return gallery;\n}\n\nexport interface MediaGalleryItemProps {\n description?: string;\n spoiler?: boolean;\n url?: string;\n}\n\nexport function MediaGalleryItem(props: MediaGalleryItemProps) {\n const item = new MediaGalleryItemBuilder();\n\n if (props.description != null) {\n item.setDescription(props.description);\n }\n\n if (props.spoiler != null) {\n item.setSpoiler(props.spoiler);\n }\n\n if (props.url != null) {\n item.setURL(props.url);\n }\n\n return item;\n}","import {\n ButtonBuilder,\n SectionBuilder,\n TextDisplayBuilder,\n ThumbnailBuilder } from\n'discord.js';\nimport { applyId } from './common';\n\nexport interface SectionProps {\n children?: (ThumbnailBuilder | ButtonBuilder | TextDisplayBuilder)[];\n id?: number;\n}\n\nexport function Section(props: SectionProps): SectionBuilder {\n const section = new SectionBuilder();\n\n applyId(props, section);\n\n if (props.children != null) {\n for (const accessory of props.children.flat()) {\n if (accessory instanceof ThumbnailBuilder) {\n section.setThumbnailAccessory(accessory);\n } else if (accessory instanceof ButtonBuilder) {\n section.setButtonAccessory(accessory);\n } else if (accessory instanceof TextDisplayBuilder) {\n section.addTextDisplayComponents(accessory);\n }\n }\n }\n\n return section;\n}\n\nexport interface ThumbnailProps {\n id?: number;\n description?: string;\n spoiler?: boolean;\n url: string;\n}\n\nexport function Thumbnail(props: ThumbnailProps) {\n const thumbnail = new ThumbnailBuilder({\n description: props.description,\n spoiler: props.spoiler,\n id: props.id,\n media: { url: props.url }\n });\n\n return thumbnail;\n}","import { SeparatorBuilder, SeparatorComponentData } from 'discord.js';\n\nexport interface SeparatorProps extends Omit<SeparatorComponentData, 'type'> {}\n\nexport function Separator(props: SeparatorProps) {\n const separator = new SeparatorBuilder(props);\n return separator;\n}","import { TextDisplayBuilder, TextDisplayComponentData } from 'discord.js';\n\nexport interface TextDisplayProps extends\n Omit<TextDisplayComponentData, 'type' | 'content'> {\n children?: string | string[];\n content?: string;\n}\n\nexport function TextDisplay(props: TextDisplayProps) {\n const textDisplay = new TextDisplayBuilder(props);\n\n if (!props.content && props.children) {\n if (Array.isArray(props.children)) {\n textDisplay.setContent(props.children.join(' '));\n } else {\n textDisplay.setContent(props.children);\n }\n }\n\n return textDisplay;\n}","export * from './container';\nexport * from './file';\nexport * from './media-gallery';\nexport * from './section';\nexport * from './separator';\nexport * from './text-display';","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 '../v1/button/ButtonKit';\nimport { warnUnstable } from '../../utils/warn-unstable';\nimport { ModalKit } from '../v1/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\n return Array.isArray(props.children) ?\n props.children.flat() :\n [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: props.children ?? children });\n}\n\nexport { createElement as jsx, createElement as jsxs };","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 './v1/action-row/ActionRow';\n\n// buttons\nexport * from './v1/button/ButtonKit';\nexport * from './v1/button/Button';\n\n// modals\nexport * from './v1/modal/ModalKit';\nexport * from './v1/modal/Modal';\n\n// select menus\nexport * from './v1/select-menu/StringSelectMenuKit';\nexport * from './v1/select-menu/ChannelSelectMenuKit';\nexport * from './v1/select-menu/MentionableSelectMenuKit';\nexport * from './v1/select-menu/UserSelectMenuKit';\nexport * from './v1/select-menu/RoleSelectMenuKit';\nexport * from './v1/select-menu/SelectMenu';\nexport * from './v1/select-menu/common';\n\n// v2\nexport * from './v2/index';\n\n// common\nexport * from './common/element';\nexport * from './common/types';\nexport * from './common/EventInterceptor';","export const COMMANDKIT_CACHE_TAG = Symbol('kCommandKitCacheTag');\n\nexport const COMMANDKIT_IS_DEV = process.env.COMMANDKIT_IS_DEV === 'true';\n\nexport const COMMANDKIT_IS_TEST = process.env.COMMANDKIT_IS_TEST === 'true';\n\nexport const COMMANDKIT_BOOTSTRAP_MODE = (process.env.\nCOMMANDKIT_BOOTSTRAP_MODE || 'development') as 'development' | 'production';\n\n/**\n * Types of Hot Module Replacement events\n */\nexport const HMREventType = {\n ReloadCommands: 'reload-commands',\n ReloadEvents: 'reload-events',\n Unknown: 'unknown'\n} as const;\n\nexport type HMREventType = (typeof HMREventType)[keyof typeof HMREventType];","import { randomUUID } from 'node:crypto';\nimport { CommonPluginRuntime } from './plugin-runtime/runtime';\n\nexport type PluginOptions = Record<string, any>;\n\nexport enum PluginType {\n Compiler = 'compiler',\n Runtime = 'runtime',\n}\n\nexport abstract class PluginCommon<\n T extends PluginOptions = PluginOptions,\n C extends CommonPluginRuntime = CommonPluginRuntime>\n{\n public abstract readonly type: PluginType;\n public readonly id = randomUUID();\n public readonly loadedAt = Date.now();\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'./plugin-runtime/types';\nimport {\n isPlugin,\n PluginCommon,\n PluginOptions,\n PluginType } from\n'./PluginCommon';\nimport { MaybeFalsey } from './types';\nimport { CompilerPluginRuntime } from './plugin-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 public readonly type = PluginType.Compiler;\n\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 isPlugin(plugin) && plugin.type === PluginType.Compiler;\n}","import { Interaction, Message, PartialMessage } from 'discord.js';\nimport {\n isPlugin,\n PluginCommon,\n PluginOptions,\n PluginType } from\n'./PluginCommon';\nimport type { CommandKitPluginRuntime } from './plugin-runtime/CommandKitPluginRuntime';\nimport { CommandBuilderLike, PreparedAppCommandExecution } from '../app';\nimport { CommandKitEnvironment } from '../context/environment';\nimport { CommandKitHMREvent } from '../utils/dev-hooks';\nimport { PreRegisterCommandsEvent } from '../app/register/CommandRegistrar';\n\nexport abstract class RuntimePlugin<\n T extends PluginOptions = PluginOptions> extends\nPluginCommon<T, CommandKitPluginRuntime> {\n public readonly type = PluginType.Runtime;\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 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 /**\n * Called after events router is initialized\n * @param ctx The context\n */\n public async onEventsRouterInit(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called after commands router is initialized\n * @param ctx The context\n */\n public async onCommandsRouterInit(\n ctx: CommandKitPluginRuntime)\n : Promise<void> {}\n\n /**\n * Called when HMR event is received\n * @param ctx The context\n * @param event The event\n */\n public async performHMR(\n ctx: CommandKitPluginRuntime,\n event: CommandKitHMREvent)\n : Promise<void> {}\n\n /**\n * Called before command is loaded for registration. This method can be used to modify the command data before it is loaded.\n * @param ctx The context\n * @param commands The command that is being loaded. This is a CommandBuilderLike object which represents Discord's command\n */\n async prepareCommand(\n ctx: CommandKitPluginRuntime,\n commands: CommandBuilderLike)\n : Promise<CommandBuilderLike | null> {\n return null;\n }\n\n /**\n * Called before command is registered to discord. This method can cancel the registration of the command and handle it manually.\n * @param ctx The context\n * @param data The command registration data\n */\n async onBeforeRegisterCommands(\n ctx: CommandKitPluginRuntime,\n event: PreRegisterCommandsEvent)\n : Promise<void> {}\n\n /**\n * Called before global commands registration. This method can cancel the registration of the command and handle it manually.\n * This method is called after `onBeforeRegisterCommands` if that stage was not handled.\n * @param ctx The context\n * @param event The command registration data\n */\n async onBeforeRegisterGlobalCommands(\n ctx: CommandKitPluginRuntime,\n event: PreRegisterCommandsEvent)\n : Promise<void> {}\n\n /**\n * Called before guild commands registration. This method can cancel the registration of the command and handle it manually.\n * This method is called before guilds of the command are resolved. It is called after `onBeforeRegisterCommands` if that stage was not handled.\n * @param ctx The context\n * @param event The command registration data\n */\n async onBeforePrepareGuildCommandsRegistration(\n ctx: CommandKitPluginRuntime,\n event: PreRegisterCommandsEvent)\n : Promise<void> {}\n\n /**\n * Called before guild commands registration. This method can cancel the registration of the command and handle it manually.\n * This method is called after guilds of the command are resolved. It is called after `onBeforePrepareGuildCommandsRegistration` if that stage was not handled.\n * @param ctx The context\n * @param event The command registration data\n */\n async onBeforeRegisterGuildCommands(\n ctx: CommandKitPluginRuntime,\n event: PreRegisterCommandsEvent)\n : Promise<void> {}\n\n /**\n * Called after command and all of its deferred functions are executed.\n * @param ctx The context\n * @param env The environment of the command. This environment contains the command execution data such as command context and more.\n */\n async onAfterCommand(\n ctx: CommandKitPluginRuntime,\n env: CommandKitEnvironment)\n {}\n}\n\nexport function isRuntimePlugin(plugin: unknown): plugin is RuntimePlugin {\n return isPlugin(plugin) && plugin.type === PluginType.Runtime;\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: 'ChatInputCommand',\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 type { 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 {\n CommandKitErrorCodes,\n createCommandKitError,\n isErrorType } from\n'../../utils/error-codes';\nimport { Logger } from '../../logger/Logger';\nimport { AsyncFunction } from '../../context/async-context';\n\nexport class CommandKitPluginRuntime {\n private plugins = new Collection<string, RuntimePlugin>();\n\n public constructor(public readonly commandkit: CommandKit) {}\n\n public getPlugins() {\n return this.plugins;\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 getPlugins() {\n return this.plugins;\n }\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;","import { DirectiveTransformerOptions } from 'directive-to-hof';\nimport {\n CompilerPlugin,\n CompilerPluginRuntime,\n MaybeFalsey,\n PluginTransformParameters,\n TransformedResult } from\n'../..';\n\nexport type CommonDirectiveTransformerOptions = DirectiveTransformerOptions & {\n enabled?: boolean;\n};\n\nexport abstract class CommonDirectiveTransformer extends CompilerPlugin<CommonDirectiveTransformerOptions> {\n private transformer: ReturnType<\n typeof import('directive-to-hof').createDirectiveTransformer> |\n null = null;\n\n public async activate(ctx: CompilerPluginRuntime): Promise<void> {\n const { createDirectiveTransformer } = await import('directive-to-hof');\n this.transformer = createDirectiveTransformer(this.options);\n }\n\n public async deactivate(ctx: CompilerPluginRuntime): Promise<void> {\n this.transformer = null;\n }\n\n public async transform(\n params: PluginTransformParameters)\n : Promise<MaybeFalsey<TransformedResult>> {\n if (!this.options.enabled) return null;\n if (!this.transformer) return null;\n\n const result = await this.transformer(\n params.contents.toString(),\n params.path\n );\n\n return {\n contents: result.contents,\n loader: result.loader\n };\n }\n}","export * from './CompilerPlugin';\nexport * from './RuntimePlugin';\nexport * from './types';\nexport * from './plugin-runtime/CommandKitPluginRuntime';\nexport * from './plugin-runtime/CompilerPluginRuntime';\nexport * from './plugin-runtime/types';\nexport * from './plugin-runtime/runtime';\nexport * from './plugin-runtime/builtin/CommonDirectiveTransformer';","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 { MacroPlugin } from '../plugins/plugin-runtime/builtin/MacroPlugin';\nimport { ResolvedCommandKitConfig } from './utils';\n\nexport const defaultConfig: ResolvedCommandKitConfig = {\n plugins: [new MacroPlugin({ enabled: true })],\n esbuildPlugins: [],\n compilerOptions: {\n macro: {\n development: false\n }\n },\n static: true,\n typescript: {\n ignoreBuildErrors: false\n },\n distDir: 'dist',\n env: {},\n sourceMap: {\n development: true,\n production: true\n },\n typedCommands: true\n};","import { MaybeArray } from '../components';\nimport { CommandKitPlugin } from '../plugins';\nimport { 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 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 ?? [])].flat(\n Infinity\n ) as MaybeArray<CommandKitPlugin[]>,\n sourceMap: {\n ...defaultConfig.sourceMap,\n ...config.sourceMap\n },\n static: config.static ?? defaultConfig.static,\n typedCommands: config.typedCommands ?? defaultConfig.typedCommands,\n typescript: {\n ...defaultConfig.typescript,\n ...config.typescript\n }\n };\n\n return defined;\n}","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { ParsedEvent } from '../router';\nimport { CommandKit } from '../../CommandKit';\n\nexport interface EventWorkerContext {\n event: string;\n namespace: string | null;\n data: ParsedEvent;\n commandkit: CommandKit;\n}\n\nexport const eventWorkerContext = new AsyncLocalStorage<EventWorkerContext>();\n\nexport function runInEventWorkerContext<T>(\ncontext: EventWorkerContext,\ncallback: () => T)\n: T {\n return eventWorkerContext.run(context, callback);\n}\n\nexport function getEventWorkerContext(): EventWorkerContext {\n const context = eventWorkerContext.getStore();\n\n if (!context) {\n throw new Error('Event worker context not found');\n }\n\n return context;\n}","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { COMMANDKIT_IS_DEV } from './constants';\nimport { getConfig } from '../config/config';\nimport { eventWorkerContext } from '../app/events/EventWorkerContext';\n\nlet appDir: string | null = null;\nlet currentDir: string | null = null;\n\nexport function getCurrentDirectory(): string {\n if (currentDir) return currentDir;\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 currentDir = root;\n\n return root;\n}\n\nexport function getSourceDirectories(): string[] {\n const dist = getConfig().distDir;\n const locations = ['src', '.commandkit', dist].map((dir) =>\n join(process.cwd(), dir)\n );\n\n return locations;\n}\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}\n\n/**\n * Creates a function from the given function that runs only in development mode.\n * @param fn The function to run in development mode.\n * @returns The function that runs only in development mode.\n * @example\n * ```ts\n * const devOnlyFn = devOnly(() => {\n * console.log('This function runs only in development mode');\n * });\n * devOnlyFn(); // This will log the message only in development mode\n * ```\n */\nexport function devOnly<T extends (...args: any[]) => any>(fn: T): T {\n const f = (...args: Parameters<T>) => {\n if (COMMANDKIT_IS_DEV) {\n return fn(...args);\n }\n };\n\n return f as T;\n}\n\n/**\n * Custom error for stopping event propagation.\n */\nexport class StopEventPropagationError extends Error {\n constructor() {\n super('Event propagation stopped');\n this.name = 'StopEventPropagationError';\n }\n}\n\n/**\n * Stops event propagation.\n * @throws {StopEventPropagationError}\n */\nexport function stopEvents(): never {\n if (!eventWorkerContext.getStore()) {\n throw new Error('stopEvents() may only be called inside an event handler');\n }\n\n throw new StopEventPropagationError();\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 { ApplicationCommandType, REST, Routes } from 'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { CommandData } from '../../types';\nimport { Logger } from '../../logger/Logger';\n\nexport interface PreRegisterCommandsEvent {\n preventDefault(): void;\n commands: CommandData[];\n}\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 const commands = this.getCommandsData();\n\n let preRegistrationPrevented = false;\n const preRegisterEvent: PreRegisterCommandsEvent = {\n preventDefault() {\n preRegistrationPrevented = true;\n },\n commands\n };\n\n await this.commandkit.plugins.execute(async (ctx, plugin) => {\n if (preRegistrationPrevented) return;\n return plugin.onBeforeRegisterCommands(ctx, preRegisterEvent);\n });\n\n if (preRegistrationPrevented) return;\n\n // we check this after the plugin event\n // because plugins may be able to register commands\n // before the client is ready\n if (!this.commandkit.client.isReady()) {\n throw new Error('Cannot register commands before the client is ready');\n }\n\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\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 let prevented = false;\n const preRegisterEvent: PreRegisterCommandsEvent = {\n preventDefault() {\n prevented = true;\n },\n commands\n };\n\n await this.commandkit.plugins.execute(async (ctx, plugin) => {\n if (prevented) return;\n return plugin.onBeforeRegisterGlobalCommands(ctx, preRegisterEvent);\n });\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 if (!commands.length) return;\n\n let prevented = false;\n const preRegisterEvent: PreRegisterCommandsEvent = {\n preventDefault() {\n prevented = true;\n },\n commands\n };\n await this.commandkit.plugins.execute(async (ctx, plugin) => {\n if (prevented) return;\n return plugin.onBeforePrepareGuildCommandsRegistration(\n ctx,\n preRegisterEvent\n );\n });\n if (prevented) return;\n\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 let prevented = false;\n const preRegisterEvent: PreRegisterCommandsEvent = {\n preventDefault() {\n prevented = true;\n },\n commands: guildCommands\n };\n\n await this.commandkit.plugins.execute(async (ctx, plugin) => {\n if (prevented) return;\n return plugin.onBeforeRegisterGuildCommands(ctx, preRegisterEvent);\n });\n\n if (prevented) continue;\n\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';\nimport type { Context } from '../app';\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 context: Context | null;\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 context: null\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 * Set the context.\n * @param context - The context to set.\n */\n public setContext(context: Context): void {\n this.#data.context = context;\n }\n\n /**\n * Get the context. `null` if not set.\n * @internal\n */\n public get context(): Context | null {\n return this.#data.context;\n }\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 after(fn: GenericFunction<[CommandKitEnvironment]>): 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 `after`.\n * @param id The deferred function id to cancel.\n */\nexport function cancelAfter(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 {\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 {\n AutocompleteInteraction,\n ChatInputCommandInteraction,\n MessageContextMenuCommandInteraction,\n Message,\n Locale,\n Interaction,\n UserContextMenuCommandInteraction,\n Client,\n Awaitable,\n Guild,\n TextBasedChannel } from\n'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport {\n MessageCommandOptions,\n MessageCommandParser } from\n'./MessageCommandParser';\nimport { CommandKitEnvironment } from '../../context/environment';\nimport { GenericFunction, getContext } from '../../context/async-context';\nimport { exitMiddleware, redirect } from '../middleware/signals';\nimport {\n LoadedCommand,\n ResolvableCommand,\n RunCommand } from\n'../handlers/AppCommandHandler';\n\nexport const CommandExecutionMode = {\n ChatInputCommand: '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 command: LoadedCommand;\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 ChatInputCommandContext = 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 ChatInputCommand = AnyCommandExecute<ChatInputCommandContext>;\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 guild where the command was triggered.\n */\n public readonly guild!: Guild | null;\n\n /**\n * The guild ID where the command was triggered.\n */\n public readonly guildId!: string | null;\n\n /**\n * The channel where the command was triggered.\n */\n public readonly channel!: TextBasedChannel | null;\n\n /**\n * The channel id where the command was triggered.\n */\n public readonly channelId!: string | null;\n\n /**\n * The client instance.\n */\n public readonly client: Client;\n\n /**\n * The command that this context belongs to.\n */\n public readonly command: LoadedCommand;\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 this.command = config.command;\n\n if (config.interaction) {\n this.guild = config.interaction.guild;\n this.guildId = config.interaction.guildId;\n this.channel = config.interaction.channel;\n this.channelId = config.interaction.channelId;\n }\n\n if (config.message) {\n this.guild = config.message.guild;\n this.guildId = config.message.guildId;\n this.channel = config.message.channel;\n this.channelId = config.message.channelId;\n }\n\n if (this.config.environment) {\n this.config.environment.setContext(this);\n }\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 // * The guild where this command was triggered.\n // */\n // public get guild() {\n // if (this.isInteraction()) {\n // return this.interaction.guild;\n // } else {\n // return (<MessageCommandContext>this).message.guild;\n // }\n // }\n\n // /**\n // * The guild ID where this command was triggered.\n // */\n // public get guildId() {\n // if (this.isInteraction()) {\n // return this.interaction.guildId;\n // } else {\n // return (<MessageCommandContext>this).message.guildId;\n // }\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.ChatInputCommand ||\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 isChatInputCommand(): this is ChatInputCommandContext {\n return this.executionMode === CommandExecutionMode.ChatInputCommand;\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 * 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(): never {\n exitMiddleware();\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 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 command: prepared.command,\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 if (!middleware.data.beforeExecute) continue;\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 if (!middleware.data.afterExecute) continue;\n try {\n await middleware.data.afterExecute(ctx);\n } catch (e) {\n if (isErrorType(e, CommandKitErrorCodes.ExitMiddleware)) {\n return;\n }\n\n throw e;\n }\n }\n });\n }\n }\n\n async #finalizer() {\n const env = useEnvironment();\n\n await env.runDeferredFunctions();\n\n env.clearAllDeferredFunctions();\n\n // plugins may have their own deferred function, useful for cleanup or post-command analytics\n await this.handler.commandkit.plugins.execute(async (ctx, plugin) => {\n await plugin.onAfterCommand(ctx, env);\n });\n }\n\n public getExecutionMode(source: Interaction | Message): CommandExecutionMode {\n if (source instanceof Message) return CommandExecutionMode.Message;\n if (source.isChatInputCommand())\n return CommandExecutionMode.ChatInputCommand;\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(force = false) {\n const location = join(process.cwd(), 'node_modules', 'commandkit-types');\n if (!COMMANDKIT_IS_DEV && !force) 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 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 './command';\nexport {};\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(command, commandTypesContent);\n\n return location;\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 AutocompleteInteraction,\n Awaitable,\n Collection,\n CommandInteraction,\n ContextMenuCommandBuilder,\n Events,\n Interaction,\n Message,\n SlashCommandBuilder } from\n'discord.js';\nimport { Context } from '../commands/Context';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { MessageCommandParser } from '../commands/MessageCommandParser';\nimport { CommandKitErrorCodes, isErrorType } from '../../utils/error-codes';\nimport { CommandRegistrar } from '../register/CommandRegistrar';\nimport { AsyncFunction, GenericFunction } from '../../context/async-context';\nimport { Logger } from '../../logger/Logger';\nimport { Command, Middleware } from '../router';\nimport { AppCommandRunner } from '../commands/AppCommandRunner';\nimport { COMMANDKIT_IS_DEV } from '../../utils/constants';\nimport { rewriteCommandDeclaration } from '../../utils/types-package';\nimport colors from '../../utils/colors';\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\nexport type 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 public readonly commandRunner = new AppCommandRunner(this);\n\n public readonly externalCommandData = new Collection<string, Command>();\n public readonly externalMiddlewareData = new Collection<string, Middleware>();\n\n public constructor(public readonly commandkit: CommandKit) {\n this.registrar = new CommandRegistrar(this.commandkit);\n }\n\n public printBanner() {\n const uncategorized = crypto.randomUUID();\n\n // Group commands by category\n const categorizedCommands = this.getCommandsArray().reduce(\n (acc, cmd) => {\n const category = cmd.command.category || uncategorized;\n acc[category] = acc[category] || [];\n acc[category].push(cmd);\n return acc;\n },\n {} as Record<string, LoadedCommand[]>\n );\n\n console.log(\n colors.green(\n `Loaded ${colors.magenta(this.loadedCommands.size.toString())} commands:`\n )\n );\n\n const categories = Object.keys(categorizedCommands).sort();\n\n // Build category tree for all nesting depths\n const categoryTree: Record<string, string[]> = {};\n\n // Find the best parent for nested categories\n categories.forEach((category) => {\n if (category === uncategorized) return;\n\n if (category.includes(':')) {\n const parts = category.split(':');\n let bestParent = null;\n\n // Try to find the deepest existing parent\n for (let i = parts.length - 1; i > 0; i--) {\n const potentialParent = parts.slice(0, i).join(':');\n if (categories.includes(potentialParent)) {\n bestParent = potentialParent;\n break;\n }\n }\n\n // If we found a parent, add this category as its child\n if (bestParent) {\n categoryTree[bestParent] = categoryTree[bestParent] || [];\n categoryTree[bestParent].push(category);\n }\n }\n });\n\n // Track categories we've processed to avoid duplicates\n const processedCategories = new Set<string>();\n\n // Recursive function to print a category and its children\n const printCategory = (\n category: string,\n indent: string = '',\n isLast: boolean = false,\n parentPrefix: string = '') =>\n {\n // Skip if already processed\n if (processedCategories.has(category)) return;\n processedCategories.add(category);\n\n const commands = categorizedCommands[category];\n const hasChildren =\n categoryTree[category] && categoryTree[category].length > 0;\n const thisPrefix = isLast ? '└─' : '├─';\n const childIndent = parentPrefix + (isLast ? ' ' : '│ ');\n\n // Print category name if not uncategorized\n if (category !== uncategorized) {\n // For nested categories, only print the last part after the colon\n const displayName = category.includes(':') ?\n category.split(':').pop() :\n category;\n\n console.log(\n colors.cyan(`${indent}${thisPrefix} ${colors.bold(displayName!)}`)\n );\n }\n\n // Print commands in this category\n commands.forEach((cmd, cmdIndex) => {\n const cmdIsLast = cmdIndex === commands.length - 1 && !hasChildren;\n const cmdPrefix = cmdIsLast ? '└─' : '├─';\n const cmdIndent = category !== uncategorized ? childIndent : indent;\n\n const name = cmd.data.command.name;\n const hasMw = cmd.command.middlewares.length > 0;\n const middlewareIcon = hasMw ? colors.magenta(' (λ)') : '';\n\n console.log(\n `${colors.green(`${cmdIndent}${cmdPrefix}`)} ${colors.yellow(name)}${middlewareIcon}`\n );\n });\n\n // Process nested categories\n if (hasChildren) {\n const children = categoryTree[category].sort();\n children.forEach((childCategory, idx) => {\n const childIsLast = idx === children.length - 1;\n printCategory(childCategory, childIndent, childIsLast, childIndent);\n });\n }\n };\n\n // Find and print top-level categories\n const topLevelCategories = categories.\n filter((category) => {\n if (category === uncategorized) return true;\n\n if (category.includes(':')) {\n const parts = category.split(':');\n // Check if any parent path exists as a category\n for (let i = 1; i < parts.length; i++) {\n const parentPath = parts.slice(0, i).join(':');\n if (categories.includes(parentPath)) {\n return false; // Not top-level, it has a parent\n }\n }\n return true; // No parent found, so it's top-level\n }\n\n return true; // Not nested, so it's top-level\n }).\n sort();\n\n // Print each top-level category\n topLevelCategories.forEach((category, index) => {\n const isLast = index === topLevelCategories.length - 1;\n printCategory(category, '', isLast);\n });\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.commandkit.client.on(Events.InteractionCreate, this.onInteraction);\n this.commandkit.client.on(Events.MessageCreate, this.onMessageCreate);\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 const isAnyCommand =\n source.isChatInputCommand() ||\n source.isAutocomplete() ||\n source.isContextMenuCommand();\n\n if (!isAnyCommand) 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 instanceof AutocompleteInteraction) &&\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 this.externalCommandData.clear();\n this.externalMiddlewareData.clear();\n\n await this.loadCommands();\n }\n\n public async addExternalMiddleware(data: Middleware[]) {\n for (const middleware of data) {\n if (!middleware.id) continue;\n\n this.externalMiddlewareData.set(middleware.id, middleware);\n }\n }\n\n public async addExternalCommands(data: Command[]) {\n for (const command of data) {\n if (!command.id) continue;\n\n this.externalCommandData.set(command.id, command);\n }\n }\n\n public async registerExternalLoadedMiddleware(data: LoadedMiddleware[]) {\n for (const middleware of data) {\n this.loadedMiddlewares.set(middleware.middleware.id, middleware);\n }\n }\n\n public async registerExternalLoadedCommands(data: LoadedCommand[]) {\n for (const command of data) {\n this.loadedCommands.set(command.command.id, command);\n this.commandNameToId.set(command.command.name, command.command.id);\n }\n }\n\n public async loadCommands() {\n await this.commandkit.plugins.execute((ctx, plugin) => {\n return plugin.onBeforeCommandsLoad(ctx);\n });\n\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 const combinedCommands = this.externalCommandData.size ?\n commands.concat(this.externalCommandData) :\n commands;\n\n const combinedMiddlewares = this.externalMiddlewareData.size ?\n middlewares.concat(this.externalMiddlewareData) :\n middlewares;\n\n // Load middlewares first\n for (const [id, middleware] of combinedMiddlewares) {\n await this.loadMiddleware(id, middleware);\n }\n\n // Load commands\n for (const [id, command] of combinedCommands) {\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 await this.commandkit.plugins.execute((ctx, plugin) => {\n return plugin.onAfterCommandsLoad(ctx);\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 let lastUpdated = data.command;\n\n await this.commandkit.plugins.execute(async (ctx, plugin) => {\n const res = await plugin.prepareCommand(ctx, lastUpdated);\n\n if (res) {\n lastUpdated = res;\n }\n });\n\n this.loadedCommands.set(id, {\n command,\n guilds: data.guilds,\n data: {\n ...data,\n command: 'toJSON' in lastUpdated ? lastUpdated.toJSON() : lastUpdated\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}","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 global: boolean;\n command: string | null;\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_MIDDLEWARE_PATTERN =\n/^\\+([^+().][^().]*)\\.middleware\\.(m|c)?(j|t)sx?$/;\nconst GLOBAL_MIDDLEWARE_PATTERN = /^\\+global-middleware\\.(m|c)?(j|t)sx?$/;\nconst COMMAND_PATTERN = /^([^+().][^().]*)\\.(m|c)?(j|t)sx?$/;\nconst CATEGORY_PATTERN = /^\\(.+\\)$/;\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 (\n MIDDLEWARE_PATTERN.test(name) ||\n GLOBAL_MIDDLEWARE_PATTERN.test(name) ||\n COMMAND_MIDDLEWARE_PATTERN.test(name));\n\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 } else if (\n entry.isDirectory() &&\n this.isCategory(entry.name) &&\n category)\n {\n // nested category\n const nestedCategory = this.isCategory(entry.name) ?\n `${category}:${entry.name.slice(1, -1)}` :\n null;\n await this.traverse(join(path, entry.name), nestedCategory);\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 global: GLOBAL_MIDDLEWARE_PATTERN.test(name),\n command: COMMAND_MIDDLEWARE_PATTERN.test(name) ?\n name.split('.')[0] || null :\n null\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.global) return true;\n if (middleware.command) return middleware.command === command.name;\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 entrypoints: 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.entrypoints) {\n options.entrypoints = Array.from(new Set(options.entrypoints));\n }\n\n if (!options.entrypoints?.length) {\n throw new Error('Entrypoint directory must be provided');\n }\n }\n\n /**\n * Adds new entrypoints to the router\n * @param entrypoints - Array of new entrypoint paths\n */\n public addEntrypoints(entrypoints: string[]) {\n this.options.entrypoints = Array.from(\n new Set([...this.options.entrypoints, ...entrypoints])\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 entrypoints(): string[] {\n return this.options.entrypoints;\n }\n\n /**\n * Checks if the entrypoint path is valid\n */\n public isValidPath() {\n return this.entrypoints.every((entrypoint) => existsSync(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 for (const entrypoint of this.entrypoints) {\n const dirs = await readdir(entrypoint, { withFileTypes: true });\n\n for (const dir of dirs) {\n if (dir.isDirectory()) {\n const path = join(entrypoint, dir.name);\n await this.scanEvent(dir.name, path, null, [], true);\n }\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.startsWith('_')) 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 { Collection } from 'discord.js';\nimport { CommandKit } from '../../CommandKit';\nimport { ListenerFunction } from '../../events/CommandKitEventsChannel';\nimport { Logger } from '../../logger/Logger';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { StopEventPropagationError } from '../../utils/utilities';\nimport { runInEventWorkerContext } from '../events/EventWorkerContext';\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 interface AppEventsHandlerLoadedData {\n name: string;\n namespace: string | null;\n onceListeners: number;\n regularListeners: number;\n metadata: ParsedEvent;\n}\n\nexport class AppEventsHandler {\n private loadedEvents = new Collection<string, LoadedEvent>();\n public constructor(public readonly commandkit: CommandKit) {}\n\n public getEvents(): AppEventsHandlerLoadedData[] {\n if (this.loadedEvents.size === 0) return [];\n\n const events = this.loadedEvents.toJSON();\n\n return events.map(\n (event) =>\n ({\n name: event.name,\n namespace: event.namespace,\n onceListeners: event.listeners.filter((listener) => listener.once).\n length,\n regularListeners: event.listeners.filter((listener) => !listener.once).\n length,\n metadata: event.event\n }) satisfies AppEventsHandlerLoadedData\n );\n }\n\n public async reloadEvents() {\n this.unregisterAll();\n await this.loadEvents();\n }\n\n public async loadEvents() {\n await this.commandkit.plugins.execute((ctx, plugin) => {\n return plugin.onBeforeEventsLoad(ctx);\n });\n\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 await this.commandkit.plugins.execute((ctx, plugin) => {\n return plugin.onAfterEventsLoad(ctx);\n });\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 await runInEventWorkerContext(\n {\n event: name,\n namespace: namespace ?? null,\n data: data.event,\n commandkit: this.commandkit\n },\n async () => {\n for (const listener of onListeners) {\n try {\n await listener.handler(...args);\n } catch (e) {\n // Check if this is a stop propagation signal\n if (e instanceof StopEventPropagationError) {\n Logger.debug(\n `Event propagation stopped for ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`\n\n );\n break; // Stop executing remaining listeners\n }\n\n // Otherwise log the error as usual\n Logger.error(\n `Error handling event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`,\n\n e\n );\n }\n }\n }\n );\n };\n\n // Create handler for \"once\" listeners with cleanup logic\n const onceHandler: ListenerFunction = async (...args) => {\n let broken = false;\n\n for (const listener of onceListeners) {\n if (broken) break; // Stop executing remaining listeners if propagation was stopped\n\n await runInEventWorkerContext(\n {\n event: name,\n namespace: namespace ?? null,\n data: data.event,\n commandkit: this.commandkit\n },\n async () => {\n try {\n // Skip if already executed (shouldn't happen with proper .once registration, but just in case)\n if (executedOnceListeners.has(listener.handler)) return;\n\n await listener.handler(...args);\n executedOnceListeners.add(listener.handler);\n } catch (e) {\n // Check if this is a stop propagation signal\n if (e instanceof StopEventPropagationError) {\n Logger.debug(\n `Event propagation stopped for ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`\n\n );\n broken = true; // Stop executing remaining listeners\n }\n\n // Otherwise log the error as usual\n Logger.error(\n `Error handling event ${name}${\n namespace ? ` of namespace ${namespace}` : ''}`,\n\n e\n );\n }\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';\nimport { execSync } from 'node:child_process';\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 await loadTypeScript();\n\n return true;\n}\n\nlet packageManager: string;\n\nfunction detectPackageManager() {\n if (packageManager) return packageManager;\n\n const lockfiles = {\n 'yarn.lock': 'yarn',\n 'pnpm-lock.yaml': 'pnpm',\n 'package-lock.json': 'npm',\n 'bun.lock': 'bun',\n 'bun.lockb': 'bun'\n };\n\n for (const [lockfile, manager] of Object.entries(lockfiles)) {\n if (fs.existsSync(join(process.cwd(), lockfile))) {\n packageManager = manager;\n break;\n }\n }\n\n if (!packageManager) {\n packageManager = 'npm';\n }\n\n return packageManager;\n}\n\nexport async function loadTypeScript(e?: string) {\n if (ts) return ts;\n\n try {\n ts = await import('typescript');\n } catch (e) {\n if (e instanceof Error && 'code' in e && e.code === 'MODULE_NOT_FOUND') {\n try {\n const packageManager = detectPackageManager();\n\n execSync(`${packageManager} add typescript`, {\n stdio: 'inherit',\n cwd: process.cwd()\n });\n\n console.log(\n colors.cyan(\n `TypeScript has been installed automatically, restarting...`\n )\n );\n\n ts = await import('typescript');\n\n return ts;\n } catch {\n panic(\n 'TypeScript is not installed and could not be installed automatically. Please install it manually.'\n );\n }\n }\n panic(e || 'TypeScript must be installed to use TypeScript config files.');\n }\n\n return ts;\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\nexport function getPossibleConfigPaths(root: string) {\n return CONFIG_FILE_NAMES.map((name) => join(root, name));\n}\n\nfunction findConfigFile(cwd: string) {\n const locations = getPossibleConfigPaths(cwd);\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, HMREventType } from './constants';\n\ninterface IpcMessageCommand {\n event: HMREventType;\n path: string;\n id?: string;\n}\n\nexport interface CommandKitHMREvent {\n event: HMREventType;\n path: string;\n accept: () => void;\n preventDefault: () => void;\n}\n\nexport function registerDevHooks(commandkit: CommandKit) {\n if (!COMMANDKIT_IS_DEV) return;\n\n process.on('message', async (message) => {\n if (typeof message !== 'object' || message === null) return;\n\n const { event, path, id } = 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 let accepted = false,\n prevented = false,\n handled = false;\n\n const hmrEvent: CommandKitHMREvent = {\n accept() {\n accepted = true;\n },\n preventDefault() {\n prevented = true;\n },\n path,\n event\n };\n\n try {\n await commandkit.plugins.execute(async (ctx, plugin) => {\n // some plugin accepted the event\n if (accepted) return;\n await plugin.performHMR?.(ctx, hmrEvent);\n });\n\n // plugin took care of it\n if (prevented) return;\n\n switch (event) {\n case HMREventType.ReloadCommands:\n commandkit.commandHandler.reloadCommands();\n handled = true;\n break;\n case HMREventType.ReloadEvents:\n commandkit.eventHandler.reloadEvents();\n handled = true;\n break;\n case HMREventType.Unknown:\n // Handle unknown events if needed\n handled = false;\n break;\n default:\n // invalid hmr event\n break;\n }\n } finally {\n // Send acknowledgment back to dev server if an id was provided\n if (id && process.send) {\n process.send({\n type: 'commandkit-hmr-ack',\n id,\n handled: handled || accepted\n });\n }\n }\n });\n}","import EventEmitter from 'node:events';\nimport type { CommandKit } from '../CommandKit';\nimport type { AsyncFunction, 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 { createElement, Fragment } from './components';\nimport { EventInterceptor } from './components/common/EventInterceptor';\nimport { Awaitable, Events, Locale, Message } from 'discord.js';\nimport { findAppDirectory } from './utils/utilities';\nimport { join } from 'node:path';\nimport { AppCommandHandler } from './app/handlers/AppCommandHandler';\nimport { CommandsRouter, EventsRouter } from './app/router';\nimport { AppEventsHandler } from './app/handlers/AppEventsHandler';\nimport { CommandKitPluginRuntime } from './plugins/plugin-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';\nimport { AsyncFunction, GenericFunction } from './context/async-context';\n\nexport interface CommandKitConfiguration {\n defaultLocale: Locale;\n getMessageCommandPrefix: (message: Message) => Awaitable<string | string[]>;\n}\n\n// @ts-ignore\nexport let commandkit: CommandKit;\n\nexport type BootstrapFunction =\nGenericFunction<[CommandKit]> |\nAsyncFunction<[CommandKit]>;\n\nconst bootstrapHooks = new Set<BootstrapFunction>();\nconst onApplicationBootstrapHooks = new Set<BootstrapFunction>();\n\n/**\n * Registers a bootstrap hook that will be called when the CommandKit instance is created.\n * This is useful for plugins that need to run some code after the CommandKit instance is fully initialized.\n * Note that not all commandkit dependiencs are available at this point. It is recommended to use the `onApplicationBootstrap` hook instead,\n * if you need access to the commandkit dependencies.\n * @param fn The bootstrap function to register.\n * @example ```ts\n * import { onBootstrap } from 'commandkit';\n *\n * onBootstrap(async (commandkit) => {\n * // Do something with the commandkit instance\n * })\n * ```\n */\nexport function onBootstrap<F extends BootstrapFunction>(fn: F): void {\n bootstrapHooks.add(fn);\n}\n\n/**\n * Registers a bootstrap hook that will be called when the CommandKit instance is created.\n * This is useful for plugins that need to run some code after the CommandKit instance is fully initialized.\n * @param fn The bootstrap function to register.\n * @example ```ts\n * import { onApplicationBootstrap } from 'commandkit';\n *\n * onApplicationBootstrap(async (commandkit) => {\n * // Do something with the commandkit instance\n * })\n * ```\n */\nexport function onApplicationBootstrap<F extends BootstrapFunction>(\nfn: F)\n: void {\n onApplicationBootstrapHooks.add(fn);\n}\n\nexport class CommandKit extends EventEmitter {\n #started = false;\n public 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 getMessageCommandPrefix: () => '!'\n };\n\n public readonly store = new Map<string, any>();\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 readonly 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 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 this.#bootstrapHooks();\n }\n\n async #bootstrapHooks() {\n for (const hook of bootstrapHooks) {\n try {\n await hook(this);\n } catch (e) {\n Logger.error('Error while executing bootstrap hook: ', e);\n } finally {\n bootstrapHooks.delete(hook);\n }\n }\n\n // force clear just in case we missed something\n bootstrapHooks.clear();\n }\n\n async #applicationBootstrapHooks() {\n for (const hook of onApplicationBootstrapHooks) {\n try {\n await hook(this);\n } catch (e) {\n Logger.error('Error while executing application bootstrap hook: ', e);\n } finally {\n onApplicationBootstrapHooks.delete(hook);\n }\n }\n // force clear just in case we missed something\n onApplicationBootstrapHooks.clear();\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 (!this.options.client) {\n throw new Error(\n colors.red('\"client\" is required when starting CommandKit.')\n );\n }\n\n this.eventInterceptor = new EventInterceptor(this.client);\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 const botToken =\n token ??\n this.options.client.token ??\n process.env.TOKEN ??\n process.env.DISCORD_TOKEN;\n\n await this.options.client.login(botToken);\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 await this.#applicationBootstrapHooks();\n }\n\n /**\n * Loads all the plugins.\n */\n async loadPlugins() {\n const config = await loadConfigFile();\n const plugins = config.plugins.flat(2).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 * 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 await this.plugins.execute((ctx, plugin) => {\n return plugin.onCommandsRouterInit(ctx);\n });\n\n this.eventsRouter = new EventsRouter({\n entrypoints: [events]\n });\n\n await this.plugins.execute((ctx, plugin) => {\n return plugin.onEventsRouterInit(ctx);\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 this.commandHandler.printBanner();\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 * 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: 'commands' | 'events') {\n const appDir = this.getAppDirectory();\n if (!appDir) return null;\n\n switch (to) {\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 */\"1.0.0-dev.20250514122653\";","export function DevEnv(_static = false) {\n const common = {\n NODE_ENV: 'development',\n COMMANDKIT_IS_DEV: 'true'\n };\n\n if (_static) return Object.assign({}, common);\n\n return Object.assign({}, process.env, common);\n}\n\nexport function ProdEnv(_static = false) {\n const common = {\n NODE_ENV: 'production',\n COMMANDKIT_IS_DEV: 'false'\n };\n\n if (_static) return Object.assign({}, common);\n\n return Object.assign({}, process.env, common);\n}\n\nexport const CommonEnvFiles = ['.env', '.env.local'];\nexport const DevEnvFiles = ['.env.development', '.env.development.local'];\nexport const ProdEnvFiles = ['.env.production', '.env.production.local'];\n\nexport const devEnvFileArgs = [...CommonEnvFiles, ...DevEnvFiles];\n\nexport const prodEnvFileArgs = [...CommonEnvFiles, ...ProdEnvFiles];","import { IOType, spawn } from 'node:child_process';\nimport { DevEnv, ProdEnv } 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: isDev ? DevEnv() : ProdEnv(),\n stdio\n }\n );\n\n ps.stdout?.pipe(process.stdout);\n ps.stderr?.pipe(process.stderr);\n\n return ps;\n}","import { existsSync } from 'node:fs';\nimport { loadTypeScript } from './common';\nimport { join, relative } from 'node:path';\nimport colors from '../utils/colors';\n\nconst TS_NOT_FOUND_ERR = `TypeScript must be installed in order to use the type checker. Please install it using \\`npm install typescript\\` or \\`yarn add typescript\\``;\n\n/**\n * Formats a TypeScript diagnostic message in a pretty, readable format\n */\nfunction formatDiagnostic(\nts: typeof import('typescript'),\ndiagnostic: import('typescript').Diagnostic,\ncwd: string)\n: string {\n const messageText = ts.flattenDiagnosticMessageText(\n diagnostic.messageText,\n '\\n'\n );\n\n if (!diagnostic.file) {\n return `${colors.red('error')}: ${messageText}`;\n }\n\n const { line, character } = ts.getLineAndCharacterOfPosition(\n diagnostic.file,\n diagnostic.start!\n );\n const fileName = relative(cwd, diagnostic.file.fileName);\n const position = `${line + 1}:${character + 1}`;\n const errorCode = diagnostic.code ? `TS${diagnostic.code}` : '';\n\n // Format the error message nicely\n return [\n `${colors.bold(colors.cyan(fileName))}:${colors.bold(colors.yellow(position))} - ${colors.red('error')} ${colors.gray(errorCode)}`,\n `${messageText}`].\n join('\\n');\n}\n\n/**\n * Performs a type check on the project using TypeScript.\n * @param path The project root or cwd\n */\nexport async function performTypeCheck(path: string) {\n const tsconfigPath = join(path, 'tsconfig.json');\n\n if (!existsSync(tsconfigPath)) return;\n\n const ts = await loadTypeScript(TS_NOT_FOUND_ERR);\n\n // Format host for error reporting\n const formatHost = {\n getCanonicalFileName: (path: string) => path,\n getCurrentDirectory: ts.sys.getCurrentDirectory,\n getNewLine: () => ts.sys.newLine\n };\n\n // Read tsconfig.json\n const configFile = ts.readConfigFile(tsconfigPath, ts.sys.readFile);\n\n if (configFile.error) {\n console.error(\n colors.red(\n `Error reading tsconfig.json: ${ts.formatDiagnostic(configFile.error, formatHost)}`\n )\n );\n process.exit(1);\n }\n\n // Parse the config file\n const parsedConfig = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n path\n );\n\n // Force noEmit to true as we only want type checking\n parsedConfig.options.noEmit = true;\n\n // Create a program\n const program = ts.createProgram({\n rootNames: parsedConfig.fileNames,\n options: parsedConfig.options,\n projectReferences: parsedConfig.projectReferences\n });\n\n // Get the diagnostics\n const diagnostics = [\n ...program.getOptionsDiagnostics(),\n ...program.getGlobalDiagnostics(),\n ...program.getSyntacticDiagnostics(),\n ...program.getSemanticDiagnostics()];\n\n\n // Report any errors\n if (diagnostics.length > 0) {\n console.log('');\n console.error(\n colors.bold(\n colors.red('Type checking failed with the following errors:')\n )\n );\n console.log('');\n\n // Group diagnostics by file for better readability\n const byFile = new Map<string, import('typescript').Diagnostic[]>();\n\n for (const diagnostic of diagnostics) {\n const fileName = diagnostic.file ? diagnostic.file.fileName : 'Global';\n if (!byFile.has(fileName)) {\n byFile.set(fileName, []);\n }\n byFile.get(fileName)!.push(diagnostic);\n }\n\n // Pretty-print each diagnostic\n const totalErrors = diagnostics.length;\n let counter = 0;\n\n for (const [_, fileDiags] of byFile) {\n for (const diagnostic of fileDiags) {\n counter++;\n console.log(formatDiagnostic(ts, diagnostic, path));\n // Add separator between errors for better readability, except for the last one\n if (counter < totalErrors) {\n console.log('');\n }\n }\n }\n\n console.log('');\n console.error(\n colors.bold(\n colors.red(`Found ${totalErrors} error${totalErrors > 1 ? 's' : ''}`)\n )\n );\n console.log('');\n\n process.exit(1);\n }\n\n console.log(colors.green('✓ Type checking completed successfully.'));\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 { DevEnv, devEnvFileArgs, ProdEnv, prodEnvFileArgs } from './env';\nimport { rimraf } from 'rimraf';\nimport { performTypeCheck } from './type-checker';\nimport { copyLocaleFiles } from './common';\nimport { MaybeArray } from '../components';\n\nexport interface ApplicationBuildOptions {\n plugins?: MaybeArray<CompilerPlugin>[] | Array<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\n if (!isDev && !config?.typescript?.ignoreBuildErrors) {\n await performTypeCheck(configPath || process.cwd());\n }\n\n const pluginRuntime = new CompilerPluginRuntime(\n (plugins || []) as CompilerPlugin[]\n );\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 esbuildOptions: (options) => {\n options.jsx = 'automatic';\n options.jsxImportSource = 'commandkit';\n\n return options;\n },\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 env: (isDev ? DevEnv(true) : ProdEnv(true)) as Record<string, string>,\n entry: [\n 'src',\n `!${config.distDir}`,\n '!.commandkit',\n '!**/*.test.*',\n '!**/*.spec.*']\n\n });\n\n await copyLocaleFiles('src', dest);\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 bootstrap() {\n const commandkit = new CommandKit({\n client: app,\n });\n\n await commandkit.start();\n}\n\nawait bootstrap().catch((e) => {\n console.error('Failed to bootstrap CommandKit application:\\\\n', e.stack);\n})\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 { getPossibleConfigPaths, 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';\nimport { setTimeout as sleep } from 'node:timers/promises';\nimport { randomUUID } from 'node:crypto';\nimport { HMREventType } from '../utils/constants';\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.flat(2).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 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\nexport async function bootstrapDevelopmentServer(configPath?: string) {\n process.env.COMMANDKIT_BOOTSTRAP_MODE = 'development';\n const start = performance.now();\n const cwd = configPath || process.cwd();\n const configPaths = getPossibleConfigPaths(cwd);\n\n const watcher = watch([join(cwd, 'src'), ...configPaths], {\n ignoreInitial: true\n });\n\n let ps: ChildProcess | null = null;\n\n const waitForAcknowledgment = (messageId: string): Promise<boolean> => {\n return new Promise((resolve) => {\n if (!ps) return resolve(false);\n\n let _handled = false;\n const onMessage = (message: any) => {\n _handled = true;\n if (typeof message !== 'object' || message === null) return;\n\n const { type, id, handled } = message;\n if (type === 'commandkit-hmr-ack' && id === messageId) {\n ps?.off('message', onMessage);\n resolve(!!handled);\n }\n };\n\n ps.once('message', onMessage);\n\n if (!_handled) {\n sleep(3000).then(() => {\n ps?.off('message', onMessage);\n resolve(false);\n });\n }\n });\n };\n\n const sendHmrEvent = async (\n event: HMREventType,\n path?: string)\n : Promise<boolean> => {\n if (!ps || !ps.send) return false;\n\n const messageId = randomUUID();\n const messagePromise = waitForAcknowledgment(messageId);\n\n ps.send({ event, path, id: messageId });\n\n // Wait for acknowledgment or timeout after 3 seconds\n try {\n let triggered = false;\n const res = !!(await Promise.race([\n messagePromise,\n sleep(3000).then(() => {\n if (!triggered) {\n console.warn(\n colors.yellow(\n `HMR acknowledgment timed out for event ${event} on path ${path}`\n )\n );\n }\n return false;\n })]\n ));\n\n triggered = true;\n\n return res;\n } catch (error) {\n console.error(\n colors.red(`Error waiting for HMR acknowledgment: ${error}`)\n );\n return false;\n }\n };\n\n const performHMR = debounce(async (path?: string): Promise<boolean> => {\n if (!path || !ps) return false;\n\n let eventType: HMREventType | null = null;\n let eventDescription = '';\n\n if (isCommandSource(path)) {\n eventType = HMREventType.ReloadCommands;\n eventDescription = 'command(s)';\n } else if (isEventSource(path)) {\n eventType = HMREventType.ReloadEvents;\n eventDescription = 'event(s)';\n } else {\n eventType = HMREventType.Unknown;\n eventDescription = 'unknown source';\n }\n\n if (eventType) {\n console.log(\n `${colors.cyanBright(`Attempting to reload ${eventDescription} at`)} ${colors.yellowBright(path)}`\n );\n\n await buildAndStart(cwd, true);\n const hmrHandled = await sendHmrEvent(eventType, path);\n\n if (hmrHandled) {\n console.log(\n `${colors.greenBright(`Successfully hot reloaded ${eventDescription} at`)} ${colors.yellowBright(path)}`\n );\n return true;\n }\n }\n\n return false;\n }, 300);\n\n const isConfigUpdate = (path: string) => {\n const isConfig = configPaths.some((configPath) => path === configPath);\n\n if (!isConfig) return false;\n\n console.log(\n colors.yellowBright(\n 'It seems like commandkit config file was updated, please restart the server manually to apply changes.'\n )\n );\n\n return isConfig;\n };\n\n const hmrHandler = async (path: string) => {\n if (isConfigUpdate(path)) return;\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 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 ps = await buildAndStart(cwd);\n break;\n case 'rc':\n console.log(`Received reload commands command, reloading...`);\n await sendHmrEvent(HMREventType.ReloadCommands);\n break;\n case 're':\n console.log(`Received reload events command, reloading...`);\n await sendHmrEvent(HMREventType.ReloadEvents);\n break;\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 );\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 { CompilerPlugin, isCompilerPlugin } from '../plugins';\nimport { createSpinner } from './utils';\n\nexport async function bootstrapProductionServer(configPath?: string) {\n process.env.COMMANDKIT_BOOTSTRAP_MODE = 'production';\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, false);\n}\n\nexport async function createProductionBuild(configPath?: string) {\n process.env.COMMANDKIT_BOOTSTRAP_MODE = 'production';\n const cwd = configPath || process.cwd();\n const config = await loadConfigFile(cwd);\n\n const spinner = await createSpinner(\n 'Creating an optimized production build\\n'\n );\n\n spinner.start();\n\n await buildApplication({\n configPath: cwd,\n isDev: false,\n plugins: config.plugins.filter((p) =>\n isCompilerPlugin(p)\n ) as CompilerPlugin[],\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 { 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');\n\nconst formatPath = (path: string) =>\npath.replace(process.cwd(), '.').replace(/\\\\/g, '/');\n\nfunction determineExtension() {\n return existsSync(join(BASE_PATH, 'tsconfig.json')) ? 'ts' : 'js';\n}\n\nfunction TS_COMMAND_SOURCE(name: string) {\n return `import type { CommandData, ChatInputCommand, MessageCommand } from 'commandkit';\n\nexport const command: CommandData = {\n name: '${name}',\n description: '${name} command',\n};\n\nexport const chatInput: ChatInputCommand = 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`;\n}\n\nfunction JS_COMMAND_SOURCE(name: string) {\n return `/**\n * @type {import('commandkit').CommandData}\n */\nexport const command = {\n name: '${name}',\n description: '${name} command',\n};\n\n/**\n * @type {import('commandkit').ChatInputCommand}\n */\nexport const chatInput = async (ctx) => {\n await ctx.interaction.reply('Hello from ${name}!');\n};\n\n/**\n * @type {import('commandkit').MessageCommand}\n */\nexport const message = async (ctx) => {\n await ctx.message.reply('Hello from ${name}!');\n};\n`;\n}\n\nexport async function generateCommand(name: string, customPath?: string) {\n const cmdPath = join(customPath || COMMANDS_DIR);\n if (!existsSync(cmdPath)) await mkdir(cmdPath, { recursive: true });\n\n const ext = determineExtension();\n const isTypeScript = ext === 'ts';\n\n const fileName = `${name}.${ext}`;\n\n if (existsSync(join(cmdPath, fileName))) {\n panic(`Command ${name} already exists.`);\n }\n\n const commandFile = isTypeScript ?\n TS_COMMAND_SOURCE(name) :\n JS_COMMAND_SOURCE(name);\n\n await writeFile(join(cmdPath, fileName), commandFile);\n\n console.log(\n colors.green(\n `Command ${colors.magenta(name)} created at ${colors.blue(formatPath(`${cmdPath}/${fileName}`))}`\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 const ext = determineExtension();\n\n let filename = `event.${ext}`;\n\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}","import os from 'node:os';\nimport { execSync } from 'node:child_process';\nimport { version as commandkitVersion } from '../version';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst knownPlugins: string[] = /* @__MACRO__ $getKnownPlugins */[\"@commandkit/cache\",\"@commandkit/devtools\",\"@commandkit/i18n\",\"@commandkit/legacy\",\"@commandkit/redis\"];\n\nfunction findPackageVersion(packageName: string) {\n try {\n const packageJsonPath = require.resolve(`${packageName}/package.json`);\n const packageJson = require(packageJsonPath);\n return packageJson.version;\n } catch (e) {\n try {\n const basePaths = [\n path.join(process.cwd(), 'node_modules', packageName),\n path.join(process.cwd(), '..', '..', 'node_modules', packageName),\n path.join(process.cwd(), '..', '..', '.pnpm', packageName),\n path.join(\n process.cwd(),\n '..',\n '..',\n 'node_modules',\n '.pnpm',\n packageName\n )];\n\n\n for (const basePath of basePaths) {\n const packageJsonPath = path.join(basePath, 'package.json');\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(\n fs.readFileSync(packageJsonPath, 'utf8')\n );\n return packageJson.version;\n }\n }\n\n const nodeModulesPath = path.join(\n process.cwd(),\n '..',\n '..',\n 'node_modules',\n '.pnpm'\n );\n if (fs.existsSync(nodeModulesPath)) {\n const folders = fs.readdirSync(nodeModulesPath);\n const packageFolder = folders.find((folder) =>\n folder.startsWith(`${packageName.replace('/', '+')}@`)\n );\n\n if (packageFolder) {\n const packageJsonPath = path.join(\n nodeModulesPath,\n packageFolder,\n 'node_modules',\n packageName,\n 'package.json'\n );\n if (fs.existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(\n fs.readFileSync(packageJsonPath, 'utf8')\n );\n return packageJson.version;\n }\n }\n }\n\n return null;\n } catch {\n return null;\n }\n }\n}\n\nfunction getBinaryVersion(binary: string) {\n try {\n const version = execSync(`${binary} --version`).toString().trim();\n return version;\n } catch {\n return null;\n }\n}\n\nexport async function showInformation() {\n const runtimeName: string = (() => {\n // @ts-ignore\n if ('Deno' in globalThis && typeof Deno !== 'undefined') return 'Deno';\n // @ts-ignore\n if ('Bun' in globalThis && typeof Bun !== 'undefined') return 'Bun';\n\n return 'Node.js';\n })();\n\n const info = {\n 'Operating System': {\n Platform: process.platform,\n Arch: process.arch,\n Version: os.version(),\n 'Available Memory (MB)': Math.round(os.totalmem() / 1024 / 1024),\n 'Available CPU cores': os.cpus().length\n },\n Runtime: runtimeName,\n Binaries: {\n Node: process.version,\n npm: getBinaryVersion('npm') || 'N/A',\n Yarn: getBinaryVersion('yarn') || 'N/A',\n pnpm: getBinaryVersion('pnpm') || 'N/A',\n Bun: getBinaryVersion('bun') || 'N/A',\n Deno: (getBinaryVersion('deno') || 'N/A').replace(/\\n|\\r/g, ' ')\n },\n 'Relevant Packages': {\n commandkit: commandkitVersion,\n 'discord.js': findPackageVersion('discord.js') || 'N/A',\n typescript: findPackageVersion('typescript') || 'N/A',\n esbuild: findPackageVersion('esbuild') || 'N/A',\n tsup: findPackageVersion('tsup') || 'N/A',\n ...knownPlugins.reduce(\n (acc, plugin) => {\n acc[plugin] = findPackageVersion(plugin) || 'N/A';\n return acc;\n },\n {} as Record<string, string>\n )\n }\n };\n\n let output = '';\n\n for (const [section, data] of Object.entries(info)) {\n output += `${section}:\\n`;\n\n if (typeof data === 'string') {\n output += ` ${data}\\n\\n`;\n continue;\n }\n\n for (const [key, value] of Object.entries(data)) {\n output += ` ${key}: ${value}\\n`;\n }\n output += '\\n';\n }\n\n console.log(output.trim());\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 './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';\nexport {\n getCurrentDirectory,\n getSourceDirectories,\n devOnly,\n debounce,\n stopEvents,\n StopEventPropagationError } from\n'./utils/utilities';\nexport type { CommandKitHMREvent } from './utils/dev-hooks';\nexport * from './utils/constants';\nexport * from './app/events/EventWorkerContext';\n\n// cli\nexport { bootstrapCommandkitCLI } from './cli/init';","export * from './handlers/AppCommandHandler';\nexport * from './commands/Context';\nexport * from './commands/MessageCommandParser';\nexport * from './middleware/signals';\nexport * from './register/CommandRegistrar';\n\nexport {\n type CommandSource,\n isInteractionSource,\n isMessageSource } from\n'./commands/helpers';","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';\nimport { generateTypesPackage } from '../utils/types-package';\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 } = await import('./generators');\n const { version } = await import('../version');\n const { showInformation } = await import('./information');\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('info').\n description(\n 'Show information about the system which can be used to report bugs.'\n ).\n action(async () => {\n await showInformation();\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 config 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 config 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 or events files').\n option('-c, --command', 'Create a new command').\n option('-e, --event', 'Create a new event').\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 {\n console.error('Please specify what to create: --command or --event');\n }\n });\n\n const types = join(process.cwd(), 'node_modules', 'commandkit-types');\n\n if (!existsSync(types)) {\n await mkdir(types, { recursive: true }).catch(() => {});\n await generateTypesPackage(true).catch(() => {});\n }\n\n await program.parseAsync(argv, options);\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,uBAEO;AAFP;AAAA;AAAA;AAAA;AAAA,wBAA6B;AAE7B,IAAO,qBAAQ,gCAAa,IAAI;AAAA;AAAA;;;ACWzB,SAAS,UAChB,OACkC;AAChC,QAAM,MAAM,IAAI,gCAAiB;AAEjC,MAAI,MAAM,QAAQ,MAAM,QAAQ,GAAG;AAEjC,QAAI,cAAc,GAAG,MAAM,QAAQ;AAAA,EACrC,WAAW,MAAM,UAAU;AAEzB,QAAI,cAAc,MAAM,QAAQ;AAAA,EAClC;AAEA,SAAO;AACT;AA3BA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAiC;AAajB;AAAA;AAAA;;;ACJT,SAAS,sBAAsB,MAA+B;AACnE,QAAM,QAAQ,IAAI,MAAM;AAExB,UAAQ,IAAI,OAAO,QAAQ,IAAI;AAE/B,SAAO;AACT;AAEO,SAAS,kBAAkB,OAA0C;AAC1E,MAAI,EAAE,iBAAiB,OAAQ,QAAO;AACtC,QAAM,OAAO,QAAQ,IAAI,OAAO,MAAM;AAEtC,aAAW,OAAO,sBAAsB;AACtC,QAAI,qBAAqB,GAAwC,MAAM;AACvE,aAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,YAAY,OAAgB,MAAkC;AAC5E,MAAI,CAAC,kBAAkB,KAAK,EAAG,QAAO;AACtC,QAAM,YAAY,QAAQ,IAAI,OAAO,MAAM;AAE3C,MAAI,CAAC,UAAW,QAAO;AAEvB,MAAI,MAAM,QAAQ,IAAI,EAAG,QAAO,KAAK,SAAS,SAAS;AAEvD,SAAO,cAAc;AACvB;AAtCA,IAAa;AAAb;AAAA;AAAA;AAAA;AAAO,IAAM,uBAAuB;AAAA,MAClC,gBAAgB,OAAO,iBAAiB;AAAA,MACxC,kBAAkB,OAAO,mBAAmB;AAAA,MAC5C,sBAAsB,OAAO,uBAAuB;AAAA,MACpD,qBAAqB,OAAO,sBAAsB;AAAA,IACpD;AAIgB;AAQA;AAYA;AAAA;AAAA;;;ACXT,SAAS,YAAe,IAAgB;AAC7C,SAAO,QAAQ,KAAK,EAAE;AACxB;AAEO,SAAS,eAChB,OACA,UACI;AACF,SAAO,QAAQ,IAAI,OAAO,QAAQ;AACpC;AASO,SAAS,yBAGhB,KAA4B,IAAO,WAAkB;AACnD,QAAM,MAAM,2BAAI,SAAgB;AAC9B,WAAO,eAAe,KAAK,YAAY;AACrC,UAAI;AAEF,cAAM,SAAS,MAAM,GAAG,GAAG,IAAI;AAE/B,eAAO;AAAA,MACT,SAAS,GAAG;AACV,YAAI,CAAC,kBAAkB,CAAC,GAAG;AACzB,cAAI,kBAAkB,CAAU;AAAA,QAClC;AAAA,MACF,UAAE;AACA,YAAI,OAAO,cAAc,YAAY;AAEnC,uBAAa,YAAY;AACvB,gBAAI;AACF,oBAAM,UAAU,GAAG,IAAI;AAAA,YACzB,QAAQ;AAAA,YAGR;AAAA,UAAC,CAAC;AAAA,QACN;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,GAxBY;AA0BZ,SAAO;AACT;AAUO,SAAS,cAAc,SAAS,OAA+B;AA7EtE;AA8EE,QAAM,QAAM,aAAQ,SAAS,MAAjB,mBAAoB,eAAc,WAAW;AAEzD,MAAI,CAAC,OAAO,QAAQ;AAClB,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,SAAO;AACT;AAMO,SAAS,aAAgD;AAC9D,QAAM,MAAM,QAAQ,SAAS;AAC7B,SAAO;AACT;AAKO,SAAS,iBAAwC;AACtD,QAAM,MAAM,QAAQ,SAAS;AAC7B,MAAI,CAAC,KAAK;AACR,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AA5GA,6BAKM;AALN;AAAA;AAAA;AAAA;AAAA,8BAAkC;AAElC;AACA;AAEA,IAAM,UAAU,IAAI,0CAAyC;AAa7C;AAIA;AAcA;AAyCA;AAcA;AAQA;AAAA;AAAA;;;ACnGhB,IAAAA,iBAAA,wIAgDa;AAhDb;AAAA;AAAA;AAAA;AAAA,IAAAA,kBAMA;AACA;AAyCO,IAAM,aAAN,MAAM,mBAAkB,8BAAc;AAAA,MAAtC;AAAA;AAAA;AACL,4CACA;AACA,yCACA;AAAA,UACE,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,UACf,MAAM;AAAA,QACR;AACA,mCAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkCvB,QACP,SACA,MACO;AA9FT;AA+FI,YAAI,KAAK,KAAK,UAAU,4BAAY,MAAM;AACxC,gBAAM,IAAI,UAAU,iDAAiD;AAAA,QACvE;AAEA,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,YAAI,mBAAK,kBAAiB;AACxB,gCAAK,2CAAL;AAAA,QACF;AAEA,2BAAK,iBAAkB;AACvB,YAAI,MAAM;AACR,6BAAK,cAAe;AAAA,YAClB,WAAW,KAAK,eAAa,wBAAK,kBAAL,mBAAmB,cAAa;AAAA,YAC7D,MAAM,KAAK,UAAQ,wBAAK,kBAAL,mBAAmB,SAAQ,IAAI,KAAK;AAAA,YACvD,QAAQ,KAAK,YAAU,wBAAK,kBAAL,mBAAmB;AAAA,YAC1C,OAAO,KAAK,WAAS,wBAAK,kBAAL,mBAAmB;AAAA,UAC1C;AAAA,QACF;AAEA,8BAAK,oDAAL;AAEA,eAAO;AAAA,MACT;AAAA,MAEO,MAAM,SAA6C;AACxD,YAAI,KAAK,KAAK,UAAU,4BAAY,MAAM;AACxC,gBAAM,IAAI,UAAU,+CAA+C;AAAA,QACrE;AAEA,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAK,iBAAL,mBAAK,cAAiB,CAAC;AACvB,2BAAK,cAAa,QAAQ;AAE1B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,QAAQ,SAA6C;AAC1D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAK,iBAAL,mBAAK,cAAiB,CAAC;AACvB,2BAAK,cAAa,UAAU;AAE5B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,OAAO,WAAqC;AACjD,2BAAK,iBAAL,mBAAK,cAAiB;AAAA,UACpB,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,QACjB;AAEA,2BAAK,cAAa,SAAS;AAE3B,eAAO;AAAA,MACT;AAAA,MAEA,IAAY,WAAW;AAErB,eAAO,KAAK,KAAK,aAAa,KAAK,KAAK;AAAA,MAC1C;AAAA,MA4CO,UAAU;AACf,8BAAK,2CAAL;AACA,eAAO;AAAA,MACT;AAAA,IAQF;AAvLE;AAEA;AAMA;AATK;AAWL,6BAAoB,kCAAG;AACrB,YAAM,MAAM,WAAW;AACvB,UAAI,CAAC,IAAK,QAAO,cAAc,IAAI,EAAE;AAErC,aAAO,YAAY,MAAM,IAAI,WAAW,gBAAgB;AAAA,IAC1D,GALoB;AAwHpB,mCAA0B,kCAAG;AAC3B,UACA,KAAK,KAAK,UAAU,4BAAY,QAChC,CAAC,mBAAK,iBACN,CAAC,mBAAK;AAEN;AAEA,YAAM,aAAa,KAAK,YAAY;AAEpC,UAAI,eAAe,MAAM;AACvB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,cAAc,sBAAK,8CAAL;AAEpB,yBAAK,QAAS,YAAY;AAAA,QACxB,uBAAO;AAAA,QACP,OAAO,gBAAgB;AAvM7B;AAwMQ,cAAI,CAAC,YAAY,SAAS,EAAG;AAE7B,gBAAMC,cAAa,KAAK,YAAY;AACpC,gBAAM,sBAAsB,YAAY;AAExC,cAAIA,eAAc,wBAAwBA,YAAY;AAEtD,gBAAM,UAAS,wBAAK,kBAAL,mBAAmB;AAElC,cAAI,UAAU,CAAE,MAAM,OAAO,WAAW,EAAI;AAE5C,gBAAM,UAAU,mBAAK;AAErB,cAAI,CAAC,QAAS,SAAO,wBAAK,YAAL;AAErB,iBAAO,QAAQ,aAAa,IAAI;AAAA,QAClC;AAAA,QACA,mBAAK;AAAA,MACP;AAAA,IACF,GAxC0B;AA+C1B,0BAAiB,kCAAG;AAlOtB;AAmOI,+BAAK,YAAL;AACA,yBAAK,QAAS;AACd,yBAAK,cAAe;AACpB,yBAAK,iBAAkB;AAAA,IACzB,GALiB;AAlL0B;AAAtC,IAAM,YAAN;AAAA;AAAA;;;ACdA,SAAS,OAAO,OAAqD;AAC1E,QAAM,SAAS,IAAI,UAAU;AAE7B,QAAM,UAAU,4BAAY;AAG5B,MAAI,MAAM,SAAS;AACjB,UAAM,aAAa,cAAc,OAAO,WAAW,CAAC;AAAA,EACtD;AAEA,MAAI,MAAM,UAAU;AAClB,WAAO,YAAY,MAAM,QAAQ;AAAA,EACnC;AAEA,MAAI,MAAM,SAAS;AACjB,WAAO,QAAQ,MAAM,SAAS,MAAM,OAAO;AAAA,EAC7C;AAEA,MAAI,MAAM,UAAU;AAClB,WAAO,YAAY,MAAM,QAAQ;AAAA,EACnC;AAEA,MAAI,MAAM,OAAO;AACf,WAAO,SAAS,MAAM,KAAK;AAAA,EAC7B;AAEA,MAAI,MAAM,OAAO;AACf,WAAO,SAAS,MAAM,KAAK;AAAA,EAC7B;AAEA,MAAI,MAAM,KAAK;AACb,WAAO,OAAO,MAAM,GAAG;AAAA,EACzB;AAEA,MAAI,MAAM,OAAO;AACf,WAAO,SAAS,MAAM,KAAK;AAAA,EAC7B;AAEA,QAAM,QAAQ,MAAM,SAAS,MAAM;AAEnC,MAAI,OAAO;AACT,WAAO;AAAA,MACL,MAAM,QAAQ,KAAK,IACnB,MAAM,KAAK,GAAG,IACd,OAAO,UAAU,WACjB,QACA,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AAEA,MAAI,MAAM,OAAO;AACf,WAAO,MAAM,MAAM,KAAK;AAAA,EAC1B;AAEA,MAAI,MAAM,SAAS;AACjB,WAAO,QAAQ,MAAM,OAAO;AAAA,EAC9B;AAEA,SAAO;AACT;AA7FA,IAAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,kBAAsD;AACtD;AAiCgB;AAAA;AAAA;;;AClChB,IAAAC,iBAAA,kBAAAC,eAAAC,SAAA,qBAAAC,yBAAA,mBAAAC,sBA+Ca;AA/Cb;AAAA;AAAA;AAAA;AAAA,IAAAJ,kBAKA;AACA;AAyCO,IAAM,YAAN,MAAM,kBAAiB,6BAAa;AAAA,MAApC;AAAA;AAAA;AACL,6CACA;AACA,2BAAAC,eACA;AAAA,UACE,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,UACf,MAAM;AAAA,QACR;AACA,2BAAAC,SAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA0BvB,SACP,SACA,MACO;AArFT;AAsFI,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,YAAI,mBAAK,mBAAkB;AACzB,gCAAK,qBAAAE,sBAAL;AAAA,QACF;AAEA,2BAAK,kBAAmB;AAExB,YAAI,MAAM;AACR,6BAAKH,eAAe;AAAA,YAClB,WAAW,KAAK,eAAa,wBAAKA,mBAAL,mBAAmB,cAAa;AAAA,YAC7D,MAAM,KAAK,UAAQ,wBAAKA,mBAAL,mBAAmB,SAAQ,IAAI,KAAK;AAAA,YACvD,QAAQ,KAAK,YAAU,wBAAKA,mBAAL,mBAAmB;AAAA,YAC1C,OAAO,KAAK,WAAS,wBAAKA,mBAAL,mBAAmB;AAAA,UAC1C;AAAA,QACF;AAEA,8BAAK,wCAAL;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,MAAM,SAA4C;AACvD,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKA,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,QAAQ;AAE1B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,QAAQ,SAA6C;AAC1D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKA,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,UAAU;AAE5B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,OAAO,WAAoC;AAChD,2BAAKA,kBAAL,mBAAKA,eAAiB;AAAA,UACpB,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,QACjB;AAEA,2BAAKA,eAAa,SAAS;AAE3B,eAAO;AAAA,MACT;AAAA,MAEA,IAAY,WAAW;AAErB,eAAO,KAAK,KAAK,aAAa,KAAK,KAAK;AAAA,MAC1C;AAAA,MAsCO,UAAU;AACf,8BAAK,qBAAAG,sBAAL;AACA,eAAO;AAAA,MACT;AAAA,IAQF;AAxKE;AAEA,IAAAH,gBAAA;AAMA,IAAAC,UAAA;AATK;AAWL,IAAAC,0BAAoB,kCAAG;AACrB,YAAM,MAAM,WAAW;AACvB,UAAI,CAAC,IAAK,QAAO,cAAc,IAAI,EAAE;AAErC,aAAO,YAAY,MAAM,IAAI,WAAW,gBAAgB;AAAA,IAC1D,GALoB;AA+GpB,wBAAe,kCAAG;AAChB,UAAI,CAAC,mBAAKF,eAAc;AAExB,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,cAAc,sBAAK,qBAAAE,yBAAL;AACpB,UAAI,CAAC,YAAa;AAElB,yBAAKD,SAAS,YAAY;AAAA,QACxB,uBAAO;AAAA,QACP,OAAO,gBAAgB;AAvL7B;AAwLQ,cAAI,CAAC,YAAY,cAAc,EAAG;AAElC,gBAAM,aAAa,KAAK,YAAY;AACpC,gBAAM,sBAAsB,YAAY;AAExC,cAAI,cAAc,wBAAwB,WAAY;AAEtD,gBAAM,UAAS,wBAAKD,mBAAL,mBAAmB;AAElC,cAAI,UAAU,CAAE,MAAM,OAAO,WAAW,EAAI;AAE5C,gBAAM,UAAU,mBAAK;AAErB,cAAI,CAAC,QAAS,SAAO,wBAAKC,aAAL;AAErB,iBAAO,QAAQ,aAAa,IAAI;AAAA,QAClC;AAAA,QACA,mBAAKD;AAAA,MACP;AAAA,IACF,GAlCe;AAyCf,IAAAG,uBAAiB,kCAAG;AAlNtB;AAmNI,+BAAKF,aAAL;AACA,yBAAKA,SAAS;AACd,yBAAK,kBAAmB;AACxB,yBAAKD,eAAe;AAAA,IACtB,GALiB;AAnKwB;AAApC,IAAM,WAAN;AAAA;AAAA;;;ACpBA,SAAS,MAAM,OAA+C;AACnE,QAAM,QAAQ,IAAI,SAAS;AAE3B,MAAI,MAAM,OAAO;AACf,UAAM,SAAS,MAAM,KAAK;AAAA,EAC5B;AAEA,MAAI,MAAM,UAAU;AAClB,UAAM,aAAa,aAAa,OAAO,WAAW,CAAC;AAAA,EACrD;AAEA,MAAI,MAAM,UAAU;AAClB,UAAM,YAAY,MAAM,QAAQ;AAAA,EAClC;AAEA,MAAI,MAAM,UAAU;AAClB,UAAM,SAAS,MAAM,UAAU,MAAM,OAAO;AAAA,EAC9C;AAEA,MAAI,MAAM,UAAU;AAClB,UAAM,UACN,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC,MAAM,QAAQ,GAEhE,IAAI,CAAC,MAAM;AACT,UAAI,aAAa,iCAAkB,QAAO;AAC1C,UAAI,aAAa;AACjB,eAAO,IAAI,iCAAiB,EAAE,cAAc,CAAC;AAAA,IAC/C,CAAC,EACD,OAAO,CAAC,MAA+C,KAAK,IAAI;AAEhE,UAAM,cAAc,MAAM;AAAA,EAC5B;AAEA,MAAI,MAAM,OAAO;AACf,UAAM,MAAM,MAAM,KAAK;AAAA,EACzB;AAEA,MAAI,MAAM,SAAS;AACjB,UAAM,QAAQ,MAAM,OAAO;AAAA,EAC7B;AAEA,SAAO;AACT;AAkBO,SAAS,UAChB,OACkC;AAChC,QAAM,QAAQ,IAAI,iCAAiB,EAAE,SAAS,MAAM,KAAK;AAEzD,MAAI,MAAM,UAAU;AAClB,UAAM,YAAY,MAAM,QAAQ;AAAA,EAClC;AAEA,MAAI,MAAM,OAAO;AACf,UAAM,SAAS,MAAM,KAAK;AAAA,EAC5B;AAEA,MAAI,MAAM,aAAa;AACrB,UAAM,eAAe,MAAM,WAAW;AAAA,EACxC;AAEA,MAAI,MAAM,WAAW;AACnB,UAAM,aAAa,MAAM,SAAS;AAAA,EACpC;AAEA,MAAI,MAAM,WAAW;AACnB,UAAM,aAAa,MAAM,SAAS;AAAA,EACpC;AAEA,MAAI,MAAM,OAAO;AACf,UAAM,SAAS,MAAM,KAAK;AAAA,EAC5B;AAEA,MAAI,MAAM,UAAU;AAClB,UAAM,YAAY,MAAM,QAAQ;AAAA,EAClC;AAEA,SAAO;AACT;AAQO,SAAS,WAChB,OACkC;AAChC,SAAO,UAAU,EAAE,GAAG,OAAO,OAAO,+BAAe,MAAM,CAAC;AAC5D;AAQO,SAAS,eAChB,OACkC;AAChC,SAAO,UAAU,EAAE,GAAG,OAAO,OAAO,+BAAe,UAAU,CAAC;AAChE;AAjJA,IAAAI;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,kBAAmE;AAGnE;AAwBgB;AA4DA;AA0CA;AAYA;AAAA;AAAA;;;AC7IhB,IAAAC,iBAAA,kBAAAC,eAAAC,SAAA,gCAAAC,yBAAAC,oBAAAC,sBA2Ba;AA3Bb;AAAA;AAAA;AAAA;AAAA,IAAAL,kBAIA;AACA;AAsBO,IAAM,uBAAN,MAAM,6BAA4B,wCAAwB;AAAA,MAA1D;AAAA;AAAA;AACL,6CAGO;AACP,2BAAAC,eACA;AAAA,UACE,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,UACf,MAAM;AAAA,QACR;AACA,2BAAAC,SAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA0BvB,SACP,SAIA,MACO;AAtET;AAuEI,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,YAAI,mBAAK,mBAAkB;AACzB,gCAAK,gCAAAG,sBAAL;AAAA,QACF;AAEA,2BAAK,kBAAmB;AAExB,YAAI,MAAM;AACR,6BAAKJ,eAAe;AAAA,YAClB,WAAW,KAAK,eAAa,wBAAKA,mBAAL,mBAAmB,cAAa;AAAA,YAC7D,MAAM,KAAK,UAAQ,wBAAKA,mBAAL,mBAAmB,SAAQ,IAAI,KAAK;AAAA,YACvD,QAAQ,KAAK,YAAU,wBAAKA,mBAAL,mBAAmB;AAAA,YAC1C,OAAO,KAAK,WAAS,wBAAKA,mBAAL,mBAAmB;AAAA,UAC1C;AAAA,QACF;AAEA,8BAAK,gCAAAG,oBAAL;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,MAAM,SAAiD;AAC5D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKH,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,QAAQ;AAE1B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,QAAQ,SAA6C;AAC1D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKA,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,UAAU;AAE5B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,OACP,WACO;AACL,2BAAKA,kBAAL,mBAAKA,eAAiB;AAAA,UACpB,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,QACjB;AAEA,2BAAKA,eAAa,SAAS;AAE3B,eAAO;AAAA,MACT;AAAA,MAEA,IAAY,WAAW;AAErB,eAAO,KAAK,KAAK,aAAa,KAAK,KAAK;AAAA,MAC1C;AAAA,MAsCO,UAAU;AACf,8BAAK,gCAAAI,sBAAL;AACA,eAAO;AAAA,MACT;AAAA,IAQF;AA/KE;AAIA,IAAAJ,gBAAA;AAMA,IAAAC,UAAA;AAXK;AAaL,IAAAC,0BAAoB,kCAAG;AACrB,YAAM,MAAM,WAAW;AACvB,UAAI,CAAC,IAAK,QAAO,cAAc,IAAI,EAAE;AAErC,aAAO,YAAY,MAAM,IAAI,WAAW,gBAAgB;AAAA,IAC1D,GALoB;AAoHpB,IAAAC,qBAAe,kCAAG;AAChB,UAAI,CAAC,mBAAKH,eAAc;AAExB,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,cAAc,sBAAK,gCAAAE,yBAAL;AACpB,UAAI,CAAC,YAAa;AAElB,yBAAKD,SAAS,YAAY;AAAA,QACxB,uBAAO;AAAA,QACP,OAAO,gBAAgB;AA1K7B;AA2KQ,cAAI,CAAC,YAAY,mBAAmB,EAAG;AAEvC,gBAAM,aAAa,KAAK,YAAY;AACpC,gBAAM,sBAAsB,YAAY;AAExC,cAAI,cAAc,wBAAwB,WAAY;AAEtD,gBAAM,UAAS,wBAAKD,mBAAL,mBAAmB;AAElC,cAAI,UAAU,CAAE,MAAM,OAAO,WAAW,EAAI;AAE5C,gBAAM,UAAU,mBAAK;AAErB,cAAI,CAAC,QAAS,SAAO,wBAAKC,aAAL;AAErB,iBAAO,QAAQ,aAAa,IAAI;AAAA,QAClC;AAAA,QACA,mBAAKD;AAAA,MACP;AAAA,IACF,GAlCe;AAyCf,IAAAI,uBAAiB,kCAAG;AArMtB;AAsMI,+BAAKH,aAAL;AACA,yBAAKA,SAAS;AACd,yBAAK,kBAAmB;AACxB,yBAAKD,eAAe;AAAA,IACtB,GALiB;AA1K8C;AAA1D,IAAM,sBAAN;AAAA;AAAA;;;AC3BP,IAAAK,iBAAAC,mBAAAC,eAAAC,SAAA,iCAAAC,yBAAAC,oBAAAC,sBA2Ba;AA3Bb;AAAA;AAAA;AAAA;AAAA,IAAAN,kBAIA;AACA;AAsBO,IAAM,wBAAN,MAAM,8BAA6B,yCAAyB;AAAA,MAA5D;AAAA;AAAA;AACL,2BAAAC,mBAGO;AACP,2BAAAC,eACA;AAAA,UACE,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,UACf,MAAM;AAAA,QACR;AACA,2BAAAC,SAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA0BvB,SACP,SAIA,MACO;AAtET;AAuEI,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,YAAI,mBAAKF,oBAAkB;AACzB,gCAAK,iCAAAK,sBAAL;AAAA,QACF;AAEA,2BAAKL,mBAAmB;AAExB,YAAI,MAAM;AACR,6BAAKC,eAAe;AAAA,YAClB,WAAW,KAAK,eAAa,wBAAKA,mBAAL,mBAAmB,cAAa;AAAA,YAC7D,MAAM,KAAK,UAAQ,wBAAKA,mBAAL,mBAAmB,SAAQ,IAAI,KAAK;AAAA,YACvD,QAAQ,KAAK,YAAU,wBAAKA,mBAAL,mBAAmB;AAAA,YAC1C,OAAO,KAAK,WAAS,wBAAKA,mBAAL,mBAAmB;AAAA,UAC1C;AAAA,QACF;AAEA,8BAAK,iCAAAG,oBAAL;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,MAAM,SAAiD;AAC5D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKH,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,QAAQ;AAE1B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,QAAQ,SAA6C;AAC1D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKA,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,UAAU;AAE5B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,OACP,WACO;AACL,2BAAKA,kBAAL,mBAAKA,eAAiB;AAAA,UACpB,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,QACjB;AAEA,2BAAKA,eAAa,SAAS;AAE3B,eAAO;AAAA,MACT;AAAA,MAEA,IAAY,WAAW;AAErB,eAAO,KAAK,KAAK,aAAa,KAAK,KAAK;AAAA,MAC1C;AAAA,MAsCO,UAAU;AACf,8BAAK,iCAAAI,sBAAL;AACA,eAAO;AAAA,MACT;AAAA,IAQF;AA/KE,IAAAL,oBAAA;AAIA,IAAAC,gBAAA;AAMA,IAAAC,UAAA;AAXK;AAaL,IAAAC,0BAAoB,kCAAG;AACrB,YAAM,MAAM,WAAW;AACvB,UAAI,CAAC,IAAK,QAAO,cAAc,IAAI,EAAE;AAErC,aAAO,YAAY,MAAM,IAAI,WAAW,gBAAgB;AAAA,IAC1D,GALoB;AAoHpB,IAAAC,qBAAe,kCAAG;AAChB,UAAI,CAAC,mBAAKH,eAAc;AAExB,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,cAAc,sBAAK,iCAAAE,yBAAL;AACpB,UAAI,CAAC,YAAa;AAElB,yBAAKD,SAAS,YAAY;AAAA,QACxB,uBAAO;AAAA,QACP,OAAO,gBAAgB;AA1K7B;AA2KQ,cAAI,CAAC,YAAY,oBAAoB,EAAG;AAExC,gBAAM,aAAa,KAAK,YAAY;AACpC,gBAAM,sBAAsB,YAAY;AAExC,cAAI,cAAc,wBAAwB,WAAY;AAEtD,gBAAM,UAAS,wBAAKD,mBAAL,mBAAmB;AAElC,cAAI,UAAU,CAAE,MAAM,OAAO,WAAW,EAAI;AAE5C,gBAAM,UAAU,mBAAKD;AAErB,cAAI,CAAC,QAAS,SAAO,wBAAKE,aAAL;AAErB,iBAAO,QAAQ,aAAa,IAAI;AAAA,QAClC;AAAA,QACA,mBAAKD;AAAA,MACP;AAAA,IACF,GAlCe;AAyCf,IAAAI,uBAAiB,kCAAG;AArMtB;AAsMI,+BAAKH,aAAL;AACA,yBAAKA,SAAS;AACd,yBAAKF,mBAAmB;AACxB,yBAAKC,eAAe;AAAA,IACtB,GALiB;AA1KgD;AAA5D,IAAM,uBAAN;AAAA;AAAA;;;AC3BP,IAAAK,iBAAAC,mBAAAC,eAAAC,SAAA,qCAAAC,yBAAAC,oBAAAC,sBA2Ba;AA3Bb;AAAA;AAAA;AAAA;AAAA,IAAAN,kBAIA;AACA;AAsBO,IAAM,4BAAN,MAAM,kCAAiC,6CAA6B;AAAA,MAApE;AAAA;AAAA;AACL,2BAAAC,mBAGO;AACP,2BAAAC,eACA;AAAA,UACE,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,UACf,MAAM;AAAA,QACR;AACA,2BAAAC,SAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA0BvB,SACP,SAIA,MACO;AAtET;AAuEI,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,YAAI,mBAAKF,oBAAkB;AACzB,gCAAK,qCAAAK,sBAAL;AAAA,QACF;AAEA,2BAAKL,mBAAmB;AAExB,YAAI,MAAM;AACR,6BAAKC,eAAe;AAAA,YAClB,WAAW,KAAK,eAAa,wBAAKA,mBAAL,mBAAmB,cAAa;AAAA,YAC7D,MAAM,KAAK,UAAQ,wBAAKA,mBAAL,mBAAmB,SAAQ,IAAI,KAAK;AAAA,YACvD,QAAQ,KAAK,YAAU,wBAAKA,mBAAL,mBAAmB;AAAA,YAC1C,OAAO,KAAK,WAAS,wBAAKA,mBAAL,mBAAmB;AAAA,UAC1C;AAAA,QACF;AAEA,8BAAK,qCAAAG,oBAAL;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,MAAM,SAAiD;AAC5D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKH,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,QAAQ;AAE1B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,QAAQ,SAA6C;AAC1D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKA,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,UAAU;AAE5B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,OACP,WACO;AACL,2BAAKA,kBAAL,mBAAKA,eAAiB;AAAA,UACpB,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,QACjB;AAEA,2BAAKA,eAAa,SAAS;AAE3B,eAAO;AAAA,MACT;AAAA,MAEA,IAAY,WAAW;AAErB,eAAO,KAAK,KAAK,aAAa,KAAK,KAAK;AAAA,MAC1C;AAAA,MAsCO,UAAU;AACf,8BAAK,qCAAAI,sBAAL;AACA,eAAO;AAAA,MACT;AAAA,IAQF;AA/KE,IAAAL,oBAAA;AAIA,IAAAC,gBAAA;AAMA,IAAAC,UAAA;AAXK;AAaL,IAAAC,0BAAoB,kCAAG;AACrB,YAAM,MAAM,WAAW;AACvB,UAAI,CAAC,IAAK,QAAO,cAAc,IAAI,EAAE;AAErC,aAAO,YAAY,MAAM,IAAI,WAAW,gBAAgB;AAAA,IAC1D,GALoB;AAoHpB,IAAAC,qBAAe,kCAAG;AAChB,UAAI,CAAC,mBAAKH,eAAc;AAExB,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,cAAc,sBAAK,qCAAAE,yBAAL;AACpB,UAAI,CAAC,YAAa;AAElB,yBAAKD,SAAS,YAAY;AAAA,QACxB,uBAAO;AAAA,QACP,OAAO,gBAAgB;AA1K7B;AA2KQ,cAAI,CAAC,YAAY,wBAAwB,EAAG;AAE5C,gBAAM,aAAa,KAAK,YAAY;AACpC,gBAAM,sBAAsB,YAAY;AAExC,cAAI,cAAc,wBAAwB,WAAY;AAEtD,gBAAM,UAAS,wBAAKD,mBAAL,mBAAmB;AAElC,cAAI,UAAU,CAAE,MAAM,OAAO,WAAW,EAAI;AAE5C,gBAAM,UAAU,mBAAKD;AAErB,cAAI,CAAC,QAAS,SAAO,wBAAKE,aAAL;AAErB,iBAAO,QAAQ,aAAa,IAAI;AAAA,QAClC;AAAA,QACA,mBAAKD;AAAA,MACP;AAAA,IACF,GAlCe;AAyCf,IAAAI,uBAAiB,kCAAG;AArMtB;AAsMI,+BAAKH,aAAL;AACA,yBAAKA,SAAS;AACd,yBAAKF,mBAAmB;AACxB,yBAAKC,eAAe;AAAA,IACtB,GALiB;AA1KwD;AAApE,IAAM,2BAAN;AAAA;AAAA;;;AC3BP,IAAAK,iBAAAC,mBAAAC,eAAAC,SAAA,8BAAAC,yBAAAC,oBAAAC,sBA2Ba;AA3Bb;AAAA;AAAA;AAAA;AAAA,IAAAN,kBAIA;AACA;AAsBO,IAAM,qBAAN,MAAM,2BAA0B,sCAAsB;AAAA,MAAtD;AAAA;AAAA;AACL,2BAAAC,mBAGO;AACP,2BAAAC,eACA;AAAA,UACE,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,UACf,MAAM;AAAA,QACR;AACA,2BAAAC,SAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA0BvB,SACP,SAIA,MACO;AAtET;AAuEI,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,YAAI,mBAAKF,oBAAkB;AACzB,gCAAK,8BAAAK,sBAAL;AAAA,QACF;AAEA,2BAAKL,mBAAmB;AAExB,YAAI,MAAM;AACR,6BAAKC,eAAe;AAAA,YAClB,WAAW,KAAK,eAAa,wBAAKA,mBAAL,mBAAmB,cAAa;AAAA,YAC7D,MAAM,KAAK,UAAQ,wBAAKA,mBAAL,mBAAmB,SAAQ,IAAI,KAAK;AAAA,YACvD,QAAQ,KAAK,YAAU,wBAAKA,mBAAL,mBAAmB;AAAA,YAC1C,OAAO,KAAK,WAAS,wBAAKA,mBAAL,mBAAmB;AAAA,UAC1C;AAAA,QACF;AAEA,8BAAK,8BAAAG,oBAAL;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,MAAM,SAAiD;AAC5D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKH,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,QAAQ;AAE1B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,QAAQ,SAA6C;AAC1D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKA,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,UAAU;AAE5B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,OACP,WACO;AACL,2BAAKA,kBAAL,mBAAKA,eAAiB;AAAA,UACpB,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,QACjB;AAEA,2BAAKA,eAAa,SAAS;AAE3B,eAAO;AAAA,MACT;AAAA,MAEA,IAAY,WAAW;AAErB,eAAO,KAAK,KAAK,aAAa,KAAK,KAAK;AAAA,MAC1C;AAAA,MAsCO,UAAU;AACf,8BAAK,8BAAAI,sBAAL;AACA,eAAO;AAAA,MACT;AAAA,IAQF;AA/KE,IAAAL,oBAAA;AAIA,IAAAC,gBAAA;AAMA,IAAAC,UAAA;AAXK;AAaL,IAAAC,0BAAoB,kCAAG;AACrB,YAAM,MAAM,WAAW;AACvB,UAAI,CAAC,IAAK,QAAO,cAAc,IAAI,EAAE;AAErC,aAAO,YAAY,MAAM,IAAI,WAAW,gBAAgB;AAAA,IAC1D,GALoB;AAoHpB,IAAAC,qBAAe,kCAAG;AAChB,UAAI,CAAC,mBAAKH,eAAc;AAExB,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,cAAc,sBAAK,8BAAAE,yBAAL;AACpB,UAAI,CAAC,YAAa;AAElB,yBAAKD,SAAS,YAAY;AAAA,QACxB,uBAAO;AAAA,QACP,OAAO,gBAAgB;AA1K7B;AA2KQ,cAAI,CAAC,YAAY,iBAAiB,EAAG;AAErC,gBAAM,aAAa,KAAK,YAAY;AACpC,gBAAM,sBAAsB,YAAY;AAExC,cAAI,cAAc,wBAAwB,WAAY;AAEtD,gBAAM,UAAS,wBAAKD,mBAAL,mBAAmB;AAElC,cAAI,UAAU,CAAE,MAAM,OAAO,WAAW,EAAI;AAE5C,gBAAM,UAAU,mBAAKD;AAErB,cAAI,CAAC,QAAS,SAAO,wBAAKE,aAAL;AAErB,iBAAO,QAAQ,aAAa,IAAI;AAAA,QAClC;AAAA,QACA,mBAAKD;AAAA,MACP;AAAA,IACF,GAlCe;AAyCf,IAAAI,uBAAiB,kCAAG;AArMtB;AAsMI,+BAAKH,aAAL;AACA,yBAAKA,SAAS;AACd,yBAAKF,mBAAmB;AACxB,yBAAKC,eAAe;AAAA,IACtB,GALiB;AA1K0C;AAAtD,IAAM,oBAAN;AAAA;AAAA;;;AC3BP,IAAAK,kBAAAC,mBAAAC,eAAAC,SAAA,8BAAAC,yBAAAC,oBAAAC,sBA2Ba;AA3Bb;AAAA;AAAA;AAAA;AAAA,IAAAN,mBAIA;AACA;AAsBO,IAAM,qBAAN,MAAM,2BAA0B,uCAAsB;AAAA,MAAtD;AAAA;AAAA;AACL,2BAAAC,mBAGO;AACP,2BAAAC,eACA;AAAA,UACE,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,UACf,MAAM;AAAA,QACR;AACA,2BAAAC,SAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA0BvB,SACP,SAIA,MACO;AAtET;AAuEI,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,YAAI,mBAAKF,oBAAkB;AACzB,gCAAK,8BAAAK,sBAAL;AAAA,QACF;AAEA,2BAAKL,mBAAmB;AAExB,YAAI,MAAM;AACR,6BAAKC,eAAe;AAAA,YAClB,WAAW,KAAK,eAAa,wBAAKA,mBAAL,mBAAmB,cAAa;AAAA,YAC7D,MAAM,KAAK,UAAQ,wBAAKA,mBAAL,mBAAmB,SAAQ,IAAI,KAAK;AAAA,YACvD,QAAQ,KAAK,YAAU,wBAAKA,mBAAL,mBAAmB;AAAA,YAC1C,OAAO,KAAK,WAAS,wBAAKA,mBAAL,mBAAmB;AAAA,UAC1C;AAAA,QACF;AAEA,8BAAK,8BAAAG,oBAAL;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,MAAM,SAAiD;AAC5D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKH,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,QAAQ;AAE1B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,QAAQ,SAA6C;AAC1D,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,2BAAKA,kBAAL,mBAAKA,eAAiB,CAAC;AACvB,2BAAKA,eAAa,UAAU;AAE5B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,OACP,WACO;AACL,2BAAKA,kBAAL,mBAAKA,eAAiB;AAAA,UACpB,WAAW;AAAA,UACX,MAAM,IAAI,KAAK;AAAA,QACjB;AAEA,2BAAKA,eAAa,SAAS;AAE3B,eAAO;AAAA,MACT;AAAA,MAEA,IAAY,WAAW;AAErB,eAAO,KAAK,KAAK,aAAa,KAAK,KAAK;AAAA,MAC1C;AAAA,MAsCO,UAAU;AACf,8BAAK,8BAAAI,sBAAL;AACA,eAAO;AAAA,MACT;AAAA,IAQF;AA/KE,IAAAL,oBAAA;AAIA,IAAAC,gBAAA;AAMA,IAAAC,UAAA;AAXK;AAaL,IAAAC,0BAAoB,kCAAG;AACrB,YAAM,MAAM,WAAW;AACvB,UAAI,CAAC,IAAK,QAAO,cAAc,IAAI,EAAE;AAErC,aAAO,YAAY,MAAM,IAAI,WAAW,gBAAgB;AAAA,IAC1D,GALoB;AAoHpB,IAAAC,qBAAe,kCAAG;AAChB,UAAI,CAAC,mBAAKH,eAAc;AAExB,UAAI,CAAC,KAAK,UAAU;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,cAAc,sBAAK,8BAAAE,yBAAL;AACpB,UAAI,CAAC,YAAa;AAElB,yBAAKD,SAAS,YAAY;AAAA,QACxB,wBAAO;AAAA,QACP,OAAO,gBAAgB;AA1K7B;AA2KQ,cAAI,CAAC,YAAY,iBAAiB,EAAG;AAErC,gBAAM,aAAa,KAAK,YAAY;AACpC,gBAAM,sBAAsB,YAAY;AAExC,cAAI,cAAc,wBAAwB,WAAY;AAEtD,gBAAM,UAAS,wBAAKD,mBAAL,mBAAmB;AAElC,cAAI,UAAU,CAAE,MAAM,OAAO,WAAW,EAAI;AAE5C,gBAAM,UAAU,mBAAKD;AAErB,cAAI,CAAC,QAAS,SAAO,wBAAKE,aAAL;AAErB,iBAAO,QAAQ,aAAa,IAAI;AAAA,QAClC;AAAA,QACA,mBAAKD;AAAA,MACP;AAAA,IACF,GAlCe;AAyCf,IAAAI,uBAAiB,kCAAG;AArMtB;AAsMI,+BAAKH,aAAL;AACA,yBAAKA,SAAS;AACd,yBAAKF,mBAAmB;AACxB,yBAAKC,eAAe;AAAA,IACtB,GALiB;AA1K0C;AAAtD,IAAM,oBAAN;AAAA;AAAA;;;ACmCP,SAAS,oBACT,SACA,OAEA;AACE,UAAQ,YAAY,MAAM,YAAY,gBAAgB,OAAO,WAAW,CAAC,EAAE;AAE3E,MAAI,MAAM,aAAa,MAAM;AAC3B,YAAQ,aAAa,MAAM,SAAS;AAAA,EACtC;AAEA,MAAI,MAAM,aAAa,MAAM;AAC3B,YAAQ,aAAa,MAAM,SAAS;AAAA,EACtC;AAEA,MAAI,MAAM,aAAa;AACrB,YAAQ,eAAe,MAAM,WAAW;AAAA,EAC1C;AAEA,MAAI,MAAM,UAAU;AAClB,YAAQ,YAAY,MAAM,QAAQ;AAAA,EACpC;AAEA,MAAI,MAAM,OAAO;AACf,YAAQ,MAAM,MAAM,KAAK;AAAA,EAC3B;AAEA,MAAI,MAAM,SAAS;AACjB,YAAQ,QAAQ,MAAM,OAAO;AAAA,EAC/B;AAEA,MAAI,MAAM,UAAU;AAElB,YAAQ,SAAS,MAAM,UAAU,MAAM,OAAO;AAAA,EAChD;AACF;AAEO,SAAS,iBAAiB,OAA8B;AAC7D,QAAM,UAAU,IAAI,oBAAoB;AAExC,sBAAoB,SAAS,KAAK;AAElC,MAAI,MAAM,UAAU;AAClB,YAAQ;AAAA,MACN,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC,MAAM,QAAQ;AAAA,IAClE;AAAA,EACF;AAEA,MAAI,MAAM,UAAU;AAClB,YAAQ;AAAA,MACN,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC,MAAM,QAAQ;AAAA,IAClE;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,uBAAuB,OAAoC;AACzE,SAAO,IAAI,+CAA8B,KAAK;AAChD;AAMO,SAAS,eAAe,OAA4B;AACzD,QAAM,UAAU,IAAI,kBAAkB;AAEtC,sBAAoB,SAAS,KAAK;AAElC,MAAI,MAAM,eAAe;AACvB,YAAQ;AAAA,MACN,MAAM,QAAQ,MAAM,aAAa,IACjC,MAAM,gBACN,CAAC,MAAM,aAAa;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,eAAe,OAA4B;AACzD,QAAM,UAAU,IAAI,kBAAkB;AAEtC,sBAAoB,SAAS,KAAK;AAElC,MAAI,MAAM,eAAe;AACvB,YAAQ;AAAA,MACN,MAAM,QAAQ,MAAM,aAAa,IACjC,MAAM,gBACN,CAAC,MAAM,aAAa;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;AASO,SAAS,sBAAsB,OAAmC;AACvE,QAAM,UAAU,IAAI,yBAAyB;AAE7C,sBAAoB,SAAS,KAAK;AAElC,MAAI,MAAM,eAAe;AACvB,YAAQ;AAAA,MACN,MAAM,QAAQ,MAAM,aAAa,IACjC,MAAM,gBACN,CAAC,MAAM,aAAa;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,kBAAkB,OAA+B;AAC/D,QAAM,UAAU,IAAI,qBAAqB;AAEzC,sBAAoB,SAAS,KAAK;AAElC,MAAI,MAAM,eAAe;AACvB,YAAQ;AAAA,MACN,MAAM,QAAQ,MAAM,aAAa,IACjC,MAAM,gBACN,CAAC,MAAM,aAAa;AAAA,IACtB;AAAA,EACF;AAEA,MAAI,MAAM,cAAc;AACtB,YAAQ;AAAA,MACN,MAAM,QAAQ,MAAM,YAAY,IAChC,MAAM,eACN,CAAC,MAAM,YAAY;AAAA,IACrB;AAAA,EACF;AAEA,SAAO;AACT;AAxNA,IAAAK;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAcA;AACA;AACA;AACA;AACA;AACA;AA2CS;AAqCO;AAwBA;AAQA;AAoBA;AAuBA;AAoBA;AAAA;AAAA;;;AClMhB;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEO,SAAS,QAAQ,OAAuB,WAA6B;AAC1E,MAAI,MAAM,MAAM,MAAM;AACpB,cAAU,MAAM,MAAM,EAAE;AAAA,EAC1B;AACF;AANA,IAAAC,eAAA;AAAA;AAAA;AAAA;AAEgB;AAAA;AAAA;;;ACiBT,SAAS,UAAU,OAAyC;AAnBnE;AAoBE,QAAM,YAAY,IAAI,kCAAiB;AAEvC,UAAQ,OAAO,SAAS;AAExB,MAAI,OAAO,MAAM,eAAe,MAAM;AACpC,cAAU,eAAe,MAAM,WAAW;AAAA,EAC5C;AAEA,MAAI,MAAM,WAAW,MAAM;AACzB,cAAU,WAAW,MAAM,OAAO;AAAA,EACpC;AAEA,OAAI,WAAM,aAAN,mBAAgB,QAAQ;AAC1B,eAAW,SAAS,MAAM,SAAS,KAAK,GAAG;AACzC,UAAI,iBAAiB,qCAAoB;AACvC,kBAAU,yBAAyB,KAAK;AAAA,MAC1C;AAEA,UAAI,iBAAiB,8BAAa;AAChC,kBAAU,kBAAkB,KAAK;AAAA,MACnC;AAEA,UAAI,iBAAiB,mCAAkB;AACrC,kBAAU,uBAAuB,KAAK;AAAA,MACxC;AAEA,UAAI,iBAAiB,mCAAkB;AACrC,kBAAU,uBAAuB,KAAK;AAAA,MACxC;AAEA,UAAI,iBAAiB,iCAAgB;AACnC,kBAAU,qBAAqB,KAAK;AAAA,MACtC;AAEA,UAAI,iBAAiB,sCAAqB;AACxC,kBAAU,0BAA0B,KAAK;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AA7DA,IAAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAWA;AACA,IAAAC;AAOgB;AAAA;AAAA;;;ACbT,SAAS,KAAK,OAAkB;AACrC,QAAM,OAAO,IAAI,6BAAY,KAAK;AAElC,MAAI,MAAM,OAAO,MAAM;AACrB,SAAK,OAAO,MAAM,GAAG;AAAA,EACvB;AAEA,SAAO;AACT;AAdA,IAAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAA+C;AAM/B;AAAA;AAAA;;;ACET,SAAS,aAAa,OAA0B;AACrD,QAAM,UAAU,IAAI,qCAAoB;AAExC,UAAQ,OAAO,OAAO;AAEtB,MAAI,MAAM,YAAY,MAAM;AAC1B,YAAQ,SAAS,MAAM,SAAS,KAAK,CAAC;AAAA,EACxC;AAEA,SAAO;AACT;AAQO,SAAS,iBAAiB,OAA8B;AAC7D,QAAM,OAAO,IAAI,yCAAwB;AAEzC,MAAI,MAAM,eAAe,MAAM;AAC7B,SAAK,eAAe,MAAM,WAAW;AAAA,EACvC;AAEA,MAAI,MAAM,WAAW,MAAM;AACzB,SAAK,WAAW,MAAM,OAAO;AAAA,EAC/B;AAEA,MAAI,MAAM,OAAO,MAAM;AACrB,SAAK,OAAO,MAAM,GAAG;AAAA,EACvB;AAEA,SAAO;AACT;AA1CA,IAAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAA6D;AAC7D,IAAAC;AAOgB;AAkBA;AAAA;AAAA;;;ACbT,SAAS,QAAQ,OAAqC;AAC3D,QAAM,UAAU,IAAI,gCAAe;AAEnC,UAAQ,OAAO,OAAO;AAEtB,MAAI,MAAM,YAAY,MAAM;AAC1B,eAAW,aAAa,MAAM,SAAS,KAAK,GAAG;AAC7C,UAAI,qBAAqB,mCAAkB;AACzC,gBAAQ,sBAAsB,SAAS;AAAA,MACzC,WAAW,qBAAqB,gCAAe;AAC7C,gBAAQ,mBAAmB,SAAS;AAAA,MACtC,WAAW,qBAAqB,qCAAoB;AAClD,gBAAQ,yBAAyB,SAAS;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AASO,SAAS,UAAU,OAAuB;AAC/C,QAAM,YAAY,IAAI,kCAAiB;AAAA,IACrC,aAAa,MAAM;AAAA,IACnB,SAAS,MAAM;AAAA,IACf,IAAI,MAAM;AAAA,IACV,OAAO,EAAE,KAAK,MAAM,IAAI;AAAA,EAC1B,CAAC;AAED,SAAO;AACT;AAjDA,IAAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAKA;AACA,IAAAC;AAOgB;AA2BA;AAAA;AAAA;;;ACpCT,SAAS,UAAU,OAAuB;AAC/C,QAAM,YAAY,IAAI,kCAAiB,KAAK;AAC5C,SAAO;AACT;AAPA,IAAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAAyD;AAIzC;AAAA;AAAA;;;ACIT,SAAS,YAAY,OAAyB;AACnD,QAAM,cAAc,IAAI,oCAAmB,KAAK;AAEhD,MAAI,CAAC,MAAM,WAAW,MAAM,UAAU;AACpC,QAAI,MAAM,QAAQ,MAAM,QAAQ,GAAG;AACjC,kBAAY,WAAW,MAAM,SAAS,KAAK,GAAG,CAAC;AAAA,IACjD,OAAO;AACL,kBAAY,WAAW,MAAM,QAAQ;AAAA,IACvC;AAAA,EACF;AAEA,SAAO;AACT;AApBA,IAAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAA6D;AAQ7C;AAAA;AAAA;;;ACRhB;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;ACHO,SAAS,YAAY,SAAiB,OAAO,qBAAqB;AACvE,UAAQ,YAAY,SAAS,EAAE,KAAK,CAAC;AACvC;AAEO,SAAS,aAAa,MAAc;AACzC,MAAI,YAAY,IAAI,IAAI,EAAG;AAE3B,cAAY,IAAI,IAAI;AAEpB;AAAA,IACE,GAAG,IAAI;AAAA,IACP;AAAA,EACF;AACF;AAfA,IAAM;AAAN;AAAA;AAAA;AAAA;AAAA,IAAM,cAAc,oBAAI,IAAY;AAEpB;AAIA;AAAA;AAAA;;;ACoBT,SAAS,oBAChB,SAC4C;AAC1C,MAAI,OAAO,YAAY,YAAY,YAAY,KAAM,QAAO;AAC5D,MAAI,CAAC,QAAQ,IAAI,SAAS,MAAM,EAAG,QAAO;AAC1C,MAAI,CAAC,QAAQ,IAAI,SAAS,MAAM,EAAG,QAAO;AAE1C,SAAO;AACT;AAEO,SAAS,WAGhB,SAAsC;AACpC,SAAO,QAAQ;AACjB;AAMO,SAAS,SAChB,OACuC;AACrC,eAAa,gBAAgB;AAE7B,SAAO,MAAM,QAAQ,MAAM,QAAQ,IACnC,MAAM,SAAS,KAAK,IACpB,CAAC,MAAM,QAAQ;AACjB;AAEO,SAAS,cAChB,MACA,UACG,UAC8B;AAC/B,eAAa,gBAAgB;AAC7B,SAAO,KAAK,EAAE,GAAG,OAAO,UAAU,MAAM,YAAY,SAAS,CAAC;AAChE;AAhEA,IAKa;AALb;AAAA;AAAA;AAAA;AAEA;AAGO,IAAM,cAAc;AAAA,MACzB,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAgBgB;AAUA;AAWA;AAUA;AAAA;AAAA;;;ACzDhB;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iDA+Ba;AA/Bb;AAAA;AAAA;AAAA;AA+BO,IAAM,oBAAN,MAAM,kBAAiB;AAAA;AAAA;AAAA;AAAA,MAcrB,YAA4B,QAAgB;AAAhB;AAd9B;AACL,4BAAQ,eAAc,oBAAI,IAG1B;AACA,4BAAQ,kBAAiB,oBAAI,IAG7B;AACA,4BAAQ,gBAAsC;AAM5C,8BAAK,6CAAL;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MA6BO,UAAgB;AACrB,YAAI,KAAK,cAAc;AACrB,wBAAc,KAAK,YAAY;AAC/B,eAAK,eAAe;AAAA,QACtB;AAEA,mBAAW,CAAC,OAAO,QAAQ,KAAK,KAAK,aAAa;AAChD,qBAAW,WAAW,UAAU;AAC9B,iBAAK,YAAY,OAAO,SAAS,SAAS;AAAA,UAC5C;AAAA,QACF;AAEA,aAAK,YAAY,MAAM;AACvB,aAAK,eAAe,MAAM;AAAA,MAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,eAAe,OAAoC;AACxD,eAAO,KAAK,YAAY,IAAI,KAAK;AAAA,MACnC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,mBAAmB,OAAmC;AAC3D,cAAM,WAAW,KAAK,YAAY,IAAI,KAAK;AAC3C,gBAAO,qCAAU,SAAQ;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA,MAKO,oBAA6B;AAClC,eAAO,KAAK,eAAe,OAAO;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA,MAKO,yBAAiC;AACtC,eAAO,KAAK,YAAY;AAAA,MAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,UACP,OACA,UACA,SACa;AACX,YAAI,CAAC,KAAK,YAAY,IAAI,KAAK,GAAG;AAChC,eAAK,YAAY,IAAI,OAAO,oBAAI,IAAI,CAAC;AACrC,eAAK,OAAO,GAAG,OAAO,KAAK,oBAAoB,KAAK,CAAC;AACrD,eAAK,OAAO,gBAAgB,KAAK,OAAO,gBAAgB,IAAI,CAAC;AAAA,QAC/D;AAEA,oBAAY,CAAC;AAGb,gBAAQ,eAAe,KAAK,IAAI;AAEhC,gBAAQ,IAAI,UAAU,WAAW,OAAO;AAExC,aAAK,YAAY,IAAI,KAAK,EAAG,IAAI,QAAQ;AAEzC,eAAO,MAAM;AACX,eAAK,YAAY,OAAO,QAAQ;AAAA,QAClC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,YACP,OACA,UACA,QACO;AAlKT;AAmKI,cAAM,WAAW,KAAK,YAAY,IAAI,KAAK;AAC3C,YAAI,CAAC,SAAU;AAEf,iBAAS,OAAO,QAAQ;AAExB,YAAI,SAAS,OAAO,GAAG;AACrB,eAAK,YAAY,OAAO,KAAK;AAC7B,eAAK,OAAO,eAAe,OAAO,KAAK,eAAe,IAAI,KAAK,CAAE;AACjE,eAAK,eAAe,OAAO,KAAK;AAChC,eAAK,OAAO;AAAA,YACV,KAAK,IAAI,KAAK,OAAO,gBAAgB,IAAI,GAAG,CAAC;AAAA,UAC/C;AAAA,QACF;AAEA,4BAAQ,IAAI,UAAU,SAAS,GAAE,UAAjC,4BAAyC,UAAU;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOQ,oBACR,OACyC;AACvC,YAAI,KAAK,eAAe,IAAI,KAAK,GAAG;AAClC,iBAAO,KAAK,eAAe,IAAI,KAAK;AAAA,QACtC;AAEA,cAAM,UAAU,iCAAU,SAA8B;AACtD,gBAAM,cAAc,KAAK,YAAY,IAAI,KAAK;AAC9C,cAAI,eAAe,YAAY,OAAO,GAAG;AACvC,uBAAW,cAAc,aAAa;AACpC,oBAAM,UAAU,QAAQ;AAAA,gBACtB;AAAA,gBACA;AAAA,cACF;AAEA,oBAAM,YACN,QAAQ,QAAQ,KAAK,IAAI,IAAI,QAAQ,eAAe,QAAQ;AAE5D,kBAAI,WAAW;AACb,qBAAK,YAAY,OAAO,YAAY,MAAM;AAC1C;AAAA,cACF;AAEA,kBAAI,QAAQ,WAAW;AACrB,wBAAQ,eAAe,KAAK,IAAI;AAAA,cAClC;AAEA,kBAAI,QAAQ,UAAU,CAAE,MAAM,QAAQ,OAAO,GAAG,IAAI,GAAI;AACtD;AAAA,cACF;AAEA,kBAAI;AACF,sBAAM,WAAW,GAAG,IAAI;AAAA,cAC1B,SAAS,GAAG;AACV,oBAAI,QAAQ,SAAS;AACnB,wBAAM,QAAQ,QAAgB,CAAC;AAAA,gBACjC,OAAO;AACL,wBAAM;AAAA,gBACR;AAAA,cACF,UAAE;AACA,oBAAI,QAAQ,MAAM;AAChB,uBAAK,YAAY,OAAO,YAAY,MAAM;AAAA,gBAC5C;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF,GAxCgB;AA0ChB,aAAK,eAAe,IAAI,OAAO,OAAO;AAEtC,eAAO;AAAA,MACT;AAAA,IACF;AA/MO;AAkBL,qBAAY,kCAAG;AACb,UAAI,KAAK,aAAc,eAAc,KAAK,YAAY;AAEtD,WAAK,eAAe,YAAY,MAAM;AACpC,mBAAW,CAAC,OAAO,QAAQ,KAAK,KAAK,aAAa;AAChD,qBAAW,WAAW,UAAU;AAC9B,kBAAM,UAAU,QAAQ;AAAA,cACtB;AAAA,cACA;AAAA,YACF;AAIA,kBAAM,YACN,QAAQ,QAAQ,KAAK,IAAI,IAAI,QAAQ,eAAe,QAAQ;AAE5D,gBAAI,WAAW;AACb,mBAAK,YAAY,OAAO,SAAS,MAAM;AAAA,YACzC;AAAA,UACF;AAAA,QACF;AAAA,MACF,GAAG,GAAM,EAAE,MAAM;AAAA,IACnB,GAtBY;AAlBgB;AAAvB,IAAM,mBAAN;AAAA;AAAA;;;AC/BP;AAAA;AAAA;AAAA;AACA;AAGA;AACA;AAGA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAAA;AAAA;;;AC1BA,IAAa,sBAEA,mBAEA,oBAEA,2BAMA;AAZb;AAAA;AAAA;AAAA;AAAO,IAAM,uBAAuB,OAAO,qBAAqB;AAEzD,IAAM,oBAAoB,QAAQ,IAAI,sBAAsB;AAE5D,IAAM,qBAAqB,QAAQ,IAAI,uBAAuB;AAE9D,IAAM,4BAA6B,QAAQ,IAClD,6BAA6B;AAKtB,IAAM,eAAe;AAAA,MAC1B,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA;AAAA;;;ACeO,SAAS,SAChB,QACwC;AACtC,SAAO,kBAAkB;AAC3B;AAnCA,wBAUsB;AAVtB;AAAA;AAAA;AAAA;AAAA,yBAA2B;AAUpB,IAAe,gBAAf,MAAe,cAGtB;AAAA,MAKS,YAA+B,SAAY;AAAZ;AAAA,MAAa;AAAA,MAHnC,SAAK,+BAAW;AAAA,MAChB,WAAW,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA,MAOpC,MAAa,SAAS,KAAuB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA,MAK9C,MAAa,WAAW,KAAuB;AAAA,MAAC;AAAA,IAClD;AAhBA;AAHO,IAAe,eAAf;AAqBS;AAAA;AAAA;;;ACuCT,SAAS,iBAAiB,QAA2C;AAC1E,SAAO,SAAS,MAAM,KAAK,OAAO;AACpC;AAxEA,IAgCsB;AAhCtB;AAAA;AAAA;AAAA;AAMA;AA0BO,IAAe,kBAAf,MAAe,wBAEtB,aAAuC;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhB,MAAa,UACb,QAC0C;AACxC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAa,QACb,MACsC;AACpC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKA,MAAa,eAA8B;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA,MAK5C,MAAa,aAA4B;AAAA,MAAC;AAAA,IAC5C;AAlCuC;AAFhC,IAAe,iBAAf;AAsCS;AAAA;AAAA;;;ACiHT,SAAS,gBAAgB,QAA0C;AACxE,SAAO,SAAS,MAAM,KAAK,OAAO;AACpC;AAzLA,IAasB;AAbtB;AAAA;AAAA;AAAA;AACA;AAYO,IAAe,iBAAf,MAAe,uBAEtB,aAAyC;AAAA,MACvB;AAAA;AAAA;AAAA;AAAA,MAIhB,MAAa,qBACb,KACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA,MAKjB,MAAa,oBACb,KACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA,MAKjB,MAAa,mBACb,KACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA,MAKjB,MAAa,kBAAkB,KAA6C;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA,MAK7E,MAAa,oBACb,KACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA,MAKjB,MAAa,mBACb,KACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjB,MAAa,oBACb,KACA,aACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjB,MAAa,uBACb,KACA,SACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQjB,MAAa,eACb,KACA,KACA,QACA,SACA,SACmB;AACjB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAa,mBACb,KACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjB,MAAa,qBACb,KACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjB,MAAa,WACb,KACA,OACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjB,MAAM,eACN,KACA,UACqC;AACnC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,yBACN,KACA,OACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQjB,MAAM,+BACN,KACA,OACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQjB,MAAM,yCACN,KACA,OACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQjB,MAAM,8BACN,KACA,OACgB;AAAA,MAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjB,MAAM,eACN,KACA,KACA;AAAA,MAAC;AAAA,IACH;AAtKyC;AAFlC,IAAe,gBAAf;AA0KS;AAAA;AAAA;;;ACvLhB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAYM,iBAQA,cAQA,gBAQA,UAQO;AA5Cb;AAAA;AAAA;AAAA;AAAA;AACA;AAWA,IAAM,kBAAkB;AAAA,MACtB,cAAc;AAAA,MACd,oBAAoB;AAAA,MACpB,iBAAiB;AAAA,MACjB,WAAW;AAAA,MACX,SAAS;AAAA,IACX;AAEA,IAAM,eAAe;AAAA,MACnB,CAAC,aAAc,GAAG,eAAO;AAAA,MACzB,CAAC,YAAa,GAAG,eAAO;AAAA,MACxB,CAAC,YAAa,GAAG,eAAO;AAAA,MACxB,CAAC,aAAc,GAAG,eAAO;AAAA,MACzB,CAAC,eAAgB,GAAG,eAAO;AAAA,IAC7B;AAEA,IAAM,iBAAiB;AAAA,MACrB,CAAC,aAAc,GAAG,eAAO;AAAA,MACzB,CAAC,YAAa,GAAG,eAAO;AAAA,MACxB,CAAC,YAAa,GAAG,eAAO;AAAA,MACxB,CAAC,aAAc,GAAG,eAAO;AAAA,MACzB,CAAC,eAAgB,GAAG,eAAO;AAAA,IAC7B;AAEA,IAAM,WAAW;AAAA,MACf,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,eAAe;AAAA,MACf,QAAQ;AAAA,IACV;AAEO,IAAM,iBAAN,MAAM,eAAiC;AAAA,MAGrC,YACA,SAAS,QAAQ,QACjB,SAAS,QAAQ,QACxB;AAFO;AACA;AAEL,aAAK,SAAS,IAAI,QAAQ,QAAQ,KAAK,QAAQ,KAAK,MAAM;AAAA,MAC5D;AAAA,MAPQ;AAAA,MASA,YAAY,MAAoB;AACtC,cAAM,QAAQ,KAAK,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AACxD,cAAM,UAAU,KAAK,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAC5D,cAAM,UAAU,KAAK,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAC5D,cAAM,SAAS,KAAK,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG;AAChE,eAAO,GAAG,KAAK,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM;AAAA,MACjD;AAAA,MAEQ,cAAsB;AAC5B,cAAM,MAAM,WAAW;AACvB,YAAI,CAAC,IAAK,QAAO;AAEjB,cAAM,OAAO,IAAI,UAAU,IAAI,iBAAiB;AAChD,cAAM,iBAAiB,IAAI,UAAU,IAAI,oBAAoB;AAC7D,cAAM,UAAU,IAAI,UAAU,IAAI,oBAAoB;AACtD,YAAI,CAAC,QAAQ,CAAC,eAAgB,QAAO;AAErC,cAAM,IAAI,gBAAgB,IAAoC;AAE9D,YAAI,CAAC,KAAK,CAAC,eAAgB,QAAO;AAElC,cAAM,cAAc,IAAI,UAAU,IAAI,aAAa;AACnD,cAAM,cAAc,IAAI,UAAU,IAAI,aAAa;AAEnD,cAAM,UAAU,UAAU,eAAO,QAAQ,IAAI,OAAO,EAAE,IAAI,MAAM;AAChE,cAAM,UAAU,cAChB,GAAG,eAAO,aAAa,IAAI,eAAe,OAAO,WAAM,WAAW,GAAG,CAAC,MACtE;AAEA,eACE,eAAO,IAAI,GAAG,SAAS,QAAQ,GAAG,IAClC,eAAO;AAAA,UACL,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,eAAO,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK;AAAA,QAC/D;AAAA,MAEJ;AAAA,MAEQ,eAAe,OAAyB;AAC9C,YAAI;AACJ,gBAAQ,OAAO;AAAA,UACb,KAAK;AACH,oBAAQ;AACR;AAAA,UACF,KAAK;AACH,oBAAQ;AACR;AAAA,UACF,KAAK;AACH,oBAAQ;AACR;AAAA,UACF,KAAK;AACH,oBAAQ;AACR;AAAA,UACF;AACE,oBAAQ;AAAA,QACZ;AAEA,cAAM,eAAe,eAAe,KAAK;AAAA,UACvC,eAAO,YAAY,IAAI,KAAK,GAAG;AAAA,QACjC;AACA,eAAO,GAAG,YAAY;AAAA,MACxB;AAAA,MAEQ,WAAW,OAAyB;AAC1C,cAAM,YAAY,KAAK,YAAY,oBAAI,KAAK,CAAC;AAC7C,cAAM,QAAQ,KAAK,eAAe,KAAK;AACvC,eAAO,GAAG,KAAK,GAAG,eAAO,IAAI,SAAS,QAAQ,CAAC,IAAI,eAAO,IAAI,SAAS,CAAC;AAAA,MAC1E;AAAA,MAEQ,KAAK,UAAoB,MAAmB;AAClD,cAAM,SAAS,KAAK,WAAW,KAAK;AACpC,cAAMC,WAAU,KAAK,YAAY;AACjC,cAAM,UAAU,aAAa,KAAK;AAElC,YAAIA,UAAS;AACX,eAAK,OAAO;AAAA,YACV,GAAG,MAAM;AAAA,EAAKA,QAAO,IAAI,eAAO,IAAI,SAAS,MAAM,CAAC;AAAA,YACpD,GAAG,KAAK,IAAI,CAAC,QAAQ,QAAQ,GAAG,CAAC;AAAA,UACnC;AAAA,QACF,OAAO;AACL,eAAK,OAAO;AAAA,YACV,GAAG,MAAM,IAAI,eAAO,IAAI,SAAS,MAAM,CAAC;AAAA,YACxC,GAAG,KAAK,IAAI,CAAC,QAAQ,QAAQ,GAAG,CAAC;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,MAEO,SAAS,MAAmB;AACjC,aAAK,KAAK,eAAgB,GAAG,IAAI;AAAA,MACnC;AAAA,MAEO,SAAS,MAAmB;AACjC,aAAK,KAAK,eAAgB,GAAG,IAAI;AAAA,MACnC;AAAA,MAEO,OAAO,MAAmB;AAC/B,aAAK,KAAK,iBAAkB,GAAG,IAAI;AAAA,MACrC;AAAA,MAEO,QAAQ,MAAmB;AAChC,aAAK,KAAK,cAAe,GAAG,IAAI;AAAA,MAClC;AAAA,MAEO,QAAQ,MAAmB;AAChC,aAAK,KAAK,cAAe,GAAG,IAAI;AAAA,MAClC;AAAA,IACF;AAnH8C;AAAvC,IAAM,gBAAN;AAAA;AAAA;;;AC9BA,SAAS,aAAa,SAA8C;AACzE,MAAI,MAAM;AAEV,MAAI,EAAC,2BAAK,WAAU;AAClB,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AAEA,QAAM,UAAU,CAAC,OAAO,SAAS,QAAQ,QAAQ,OAAO;AAExD,QAAM,OAAO;AAAA,IACX,UAAUC,UAAS;AACjB,YAAMA;AAAA,IACR;AAAA,EACF;AAEA,aAAW,UAAU,SAAS;AAC5B,SAAK,MAAM,IAAI,IAAI,SAAgB;AACjC,UAAI,SAAS,MAAM,EAAE,GAAG,IAAI;AAAA,IAC9B;AAAA,EACF;AAEA,SAAO;AACT;AApCA,IAsCa;AAtCb;AAAA;AAAA;AAAA;AAAA;AAcgB;AAwBT,IAAM,SAAS,aAAa;AAAA,MACjC,UAAU,IAAI,cAAc;AAAA,IAC9B,CAAC;AAAA;AAAA;;;ACxCD,IAAAC,kBAWa;AAXb;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAA2B;AAG3B;AAKA;AAGO,IAAM,2BAAN,MAAM,yBAAwB;AAAA,MAG5B,YAA4BC,aAAwB;AAAxB,0BAAAA;AAAA,MAAyB;AAAA,MAFpD,UAAU,IAAI,4BAAkC;AAAA,MAIjD,aAAa;AAClB,eAAO,KAAK;AAAA,MACd;AAAA,MAEO,UAAU,YAA0C;AACzD,eAAO,KAAK,QAAQ,IAAI,UAAU,KAAK;AAAA,MACzC;AAAA,MAEA,MAAa,mBAAmB,QAAuB;AACrD,cAAM,aAAa,OAAO;AAE1B,YAAI,KAAK,QAAQ,IAAI,UAAU,EAAG;AAElC,YAAI;AACF,gBAAM,OAAO,SAAS,IAAI;AAC1B,eAAK,QAAQ,IAAI,YAAY,MAAM;AAAA,QACrC,SAAS,GAAQ;AACf,gBAAM,IAAI;AAAA,YACR,8BAA8B,UAAU,OAAM,uBAAG,UAAS,CAAC;AAAA,UAC7D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAa,eAAe,QAAuB;AACjD,cAAM,aAAa,OAAO;AAE1B,YAAI,KAAK,QAAQ,IAAI,UAAU,GAAG;AAChC,gBAAM,IAAI,MAAM,qBAAqB,UAAU,mBAAmB;AAAA,QACpE;AAEA,YAAI;AACF,gBAAM,OAAO,SAAS,IAAI;AAC1B,eAAK,QAAQ,IAAI,YAAY,MAAM;AAAA,QACrC,SAAS,GAAQ;AACf,gBAAM,IAAI;AAAA,YACR,8BAA8B,UAAU,OAAM,uBAAG,UAAS,CAAC;AAAA,UAC7D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAa,iBAAiB,QAAuB;AACnD,cAAM,aAAa,OAAO;AAE1B,YAAI,CAAC,KAAK,QAAQ,IAAI,UAAU,GAAG;AACjC,gBAAM,IAAI,MAAM,qBAAqB,UAAU,mBAAmB;AAAA,QACpE;AAEA,aAAK,QAAQ,OAAO,UAAU;AAE9B,YAAI;AACF,gBAAM,OAAO,WAAW,IAAI;AAAA,QAC9B,SAAS,GAAQ;AACf,gBAAM,IAAI;AAAA,YACR,gCAAgC,UAAU,OAAM,uBAAG,UAAS,CAAC;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAa,uBAAuB;AAClC,mBAAW,UAAU,KAAK,QAAQ,OAAO,GAAG;AAC1C,gBAAM,KAAK,iBAAiB,MAAM;AAAA,QACpC;AAAA,MACF;AAAA,MAEO,UAAU;AACf,cAAM,sBAAsB,qBAAqB,mBAAmB;AAAA,MACtE;AAAA,MAEA,MAAa,QACb,GACA;AACE,YAAI;AACJ,mBAAW,UAAU,KAAK,QAAQ,OAAO,GAAG;AAC1C,cAAI;AACF,qBAAS,MAAM,EAAE,MAAM,MAAM;AAAA,UAC/B,SAAS,GAAQ;AACf,gBAAI,YAAY,GAAG,qBAAqB,mBAAmB,GAAG;AAC5D,qBAAO;AAAA,YACT;AAEA,mBAAO,MAAM,WAAW,OAAO,IAAI,aAAY,uBAAG,UAAS,CAAC;AAAA,UAC9D;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AA3FqC;AAA9B,IAAM,0BAAN;AAAA;AAAA;;;ACkLA,SAAS,kBAAkB,QAAoC;AACpE,QAAM,uBAAN,MAAM,6BAA4B,eAAe;AAAA,IAC/B,OAAO,OAAO;AAAA,IAEvB,aAA4B;AAjMvC;AAkMM,cAAO,YAAO,eAAP;AAAA,IACT;AAAA,IAEO,eAA8B;AArMzC;AAsMM,cAAO,YAAO,iBAAP;AAAA,IACT;AAAA,IAEA,MAAa,UAAU,QAAa;AAzMxC;AA0MM,cAAO,YAAO,cAAP,gCAAmB;AAAA,IAC5B;AAAA,IAEA,MAAa,QAAQ,QAAa;AA7MtC;AA8MM,cAAO,YAAO,YAAP,gCAAiB;AAAA,IAC1B;AAAA,EACF;AAlBiD;AAAjD,MAAM,sBAAN;AAqBA,SAAO;AACT;AApNA,qBAUM,SAEO;AAZb;AAAA;AAAA;AAAA;AAAA,sBAAyB;AACzB;AASA,IAAM,UAAU;AAET,IAAM,yBAAN,MAAM,uBAAsB;AAAA,MAG1B,YAA6B,SAA2B;AAA3B;AAAA,MAA4B;AAAA,MAFhD,OAAO;AAAA,MAIhB,aAAa;AAClB,eAAO,KAAK;AAAA,MACd;AAAA,MAEO,UAAU;AACf,eAAO,CAAC,KAAK,QAAQ;AAAA,MACvB;AAAA,MAEA,MAAc,OAAO,MAAyC;AAzBhE;AA0BI,cAAM,SAAS,UAAM,0BAAS,KAAK,MAAM,MAAM;AAE/C,YAAI,WAAgC,QAClC,UAAS,UAAK,SAAL,mBAAW,MAAM,KAAK;AAEjC,mBAAW,UAAU,KAAK,SAAS;AACjC,cAAI;AACF,kBAAM,MAAsC,QAAM,YAAO,cAAP,gCAAmB;AAAA,cACnE;AAAA,cACA,MAAM,KAAK;AAAA,cACX;AAAA,cACA;AAAA,YACF;AAEA,gBAAI,CAAC,IAAK;AAEV,gBAAI,IAAI,UAAU;AAChB,yBAAW,IAAI;AAAA,YACjB;AAEA,gBAAI,IAAI,QAAQ;AACd,uBAAS,IAAI;AAAA,YACf;AAAA,UACF,SAAS,GAAQ;AACf,kBAAM,MAAM,aAAa,QAAQ,IAAI,IAAI,MAAM,CAAC;AAEhD,mBAAO;AAAA,cACL,YAAY,OAAO;AAAA,cACnB,QAAQ;AAAA,gBACR;AAAA,kBACE,MAAM,IAAI;AAAA,kBACV,SAAQ,2BAAK,UAAS;AAAA,kBACtB,UAAU;AAAA,gBACZ;AAAA,cAAC;AAAA,YAEH;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAc,UAAU,MAA+C;AAvEzE;AAwEI,YAAI,SAA0B,CAAC;AAE/B,mBAAW,UAAU,KAAK,SAAS;AACjC,cAAI;AACF,kBAAM,WAAW,QAAM,YAAO,YAAP,gCAAiB;AACxC,gBAAI,CAAC,SAAU;AAEf,qBAAS,EAAE,GAAG,QAAQ,GAAG,SAAS;AAAA,UACpC,SAAS,GAAQ;AACf,kBAAM,MAAM,aAAa,QAAQ,IAAI,IAAI,MAAM,CAAC;AAEhD,mBAAO;AAAA,cACL,QAAQ;AAAA,gBACR;AAAA,kBACE,MAAM,IAAI;AAAA,kBACV,SAAQ,2BAAK,UAAS;AAAA,kBACtB,UAAU;AAAA,gBACZ;AAAA,cAAC;AAAA,YAEH;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,MAAc,UAAU;AAlG1B;AAmGI,mBAAW,UAAU,KAAK,SAAS;AACjC,cAAI;AACF,oBAAM,YAAO,iBAAP;AAAA,UACR,SAAS,GAAQ;AACf,oBAAQ;AAAA,cACN,UAAU,OAAO,IAAI,qCAAoC,uBAAG,UAAS,CAAC;AAAA,YACxE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAc,QAAQ;AA9GxB;AA+GI,mBAAW,UAAU,KAAK,SAAS;AACjC,cAAI;AACF,oBAAM,YAAO,eAAP;AAAA,UACR,SAAS,GAAQ;AACf,oBAAQ;AAAA,cACN,UAAU,OAAO,IAAI,mCAAkC,uBAAG,UAAS,CAAC;AAAA,YACtE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAc,YAAY;AA1H5B;AA2HI,mBAAW,UAAU,KAAK,SAAS;AACjC,cAAI;AACF,oBAAM,YAAO,eAAP,gCAAoB;AAAA,UAC5B,SAAS,GAAQ;AACf,oBAAQ;AAAA,cACN,UAAU,OAAO,IAAI,+BAA8B,uBAAG,UAAS,CAAC;AAAA,YAClE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAc,SAAS;AAtIzB;AAuII,mBAAW,UAAU,KAAK,SAAS;AACjC,cAAI;AACF,oBAAM,YAAO,aAAP,gCAAkB;AAAA,UAC1B,SAAS,GAAQ;AACf,oBAAQ;AAAA,cACN,UAAU,OAAO,IAAI,6BAA4B,uBAAG,UAAS,CAAC;AAAA,YAChE;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAa,UAAU;AACrB,cAAM,KAAK,MAAM;AACjB,cAAM,KAAK,UAAU;AAAA,MACvB;AAAA,MAEA,MAAa,MAAMC,QAAc;AAC/B,YAAI,CAAC,KAAK,QAAQ,OAAQ;AAE1B,cAAM,KAAK,OAAO;AAElB,cAAMA,OAAM;AAAA,UACV;AAAA,YACE,QAAQ;AAAA,UACV;AAAA,UACA,KAAK,UAAU,KAAK,IAAI;AAAA,QAC1B;AAEA,cAAMA,OAAM;AAAA,UACV;AAAA,YACE,QAAQ;AAAA,UACV;AAAA,UACA,KAAK,OAAO,KAAK,IAAI;AAAA,QACvB;AAEA,cAAMA,OAAM,QAAQ,KAAK,QAAQ,KAAK,IAAI,CAAC;AAE3C,QAAAA,OAAM,MAAM,YAAY;AACtB,gBAAM,KAAK,MAAM;AAAA,QACnB,CAAC;AAED,QAAAA,OAAM,UAAU,YAAY;AAC1B,gBAAM,KAAK,UAAU;AAAA,QACvB,CAAC;AAAA,MACH;AAAA,MAEO,kBAAkB;AACvB,eAAO;AAAA,UACL,MAAM,KAAK;AAAA,UACX,OAAO,KAAK,MAAM,KAAK,IAAI;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AA/KmC;AAA5B,IAAM,wBAAN;AAiLS;AAAA;AAAA;;;AC7LhB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAasB;AAbtB;AAAA;AAAA;AAAA;AACA;AAYO,IAAe,8BAAf,MAAe,oCAAmC,eAAkD;AAAA,MACjG,cAED;AAAA,MAEP,MAAa,SAAS,KAA2C;AAC/D,cAAM,EAAE,2BAA2B,IAAI,MAAM,OAAO,kBAAkB;AACtE,aAAK,cAAc,2BAA2B,KAAK,OAAO;AAAA,MAC5D;AAAA,MAEA,MAAa,WAAW,KAA2C;AACjE,aAAK,cAAc;AAAA,MACrB;AAAA,MAEA,MAAa,UACb,QAC0C;AACxC,YAAI,CAAC,KAAK,QAAQ,QAAS,QAAO;AAClC,YAAI,CAAC,KAAK,YAAa,QAAO;AAE9B,cAAM,SAAS,MAAM,KAAK;AAAA,UACxB,OAAO,SAAS,SAAS;AAAA,UACzB,OAAO;AAAA,QACT;AAEA,eAAO;AAAA,UACL,UAAU,OAAO;AAAA,UACjB,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AA9B2G;AAApG,IAAe,6BAAf;AAAA;AAAA;;;ACbP;AAAA;AAAA;AAAA;AAAA;AACA;AACA,IAAAC;AACA;AACA;AACA,IAAAA;AACA;AACA;AAAA;AAAA;;;ACPA,IAOa;AAPb;AAAA;AAAA;AAAA;AAAA;AAOO,IAAM,eAAN,MAAM,qBAAoB,eAAe;AAAA,MAC9B,OAAO;AAAA,MAEf;AAAA,MAER,MAAa,WAA0B;AACrC,cAAM,YAAY,MAAM,OAAO,WAAW;AAC1C,aAAK,mBAAmB,IAAI,UAAU,iBAAiB;AAAA,MACzD;AAAA,MAEA,MAAa,aAA4B;AACvC,aAAK,mBAAmB;AAAA,MAC1B;AAAA,MAEA,MAAa,UACb,QAC0C;AACxC,YAAI,CAAC,KAAK,QAAQ,QAAS,QAAO;AAElC,cAAM,EAAE,UAAU,OAAO,IAAI,MAAM,KAAK,iBAAiB;AAAA,UACvD,OAAO,SAAS,SAAS;AAAA,UACzB,OAAO;AAAA,QACT;AAEA,eAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AA7BgD;AAAzC,IAAM,cAAN;AAAA;AAAA;;;ACPP,IAGa;AAHb;AAAA;AAAA;AAAA;AAAA;AAGO,IAAM,gBAA0C;AAAA,MACrD,SAAS,CAAC,IAAI,YAAY,EAAE,SAAS,KAAK,CAAC,CAAC;AAAA,MAC5C,gBAAgB,CAAC;AAAA,MACjB,iBAAiB;AAAA,QACf,OAAO;AAAA,UACL,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,MACR,YAAY;AAAA,QACV,mBAAmB;AAAA,MACrB;AAAA,MACA,SAAS;AAAA,MACT,KAAK,CAAC;AAAA,MACN,WAAW;AAAA,QACT,aAAa;AAAA,QACb,YAAY;AAAA,MACd;AAAA,MACA,eAAe;AAAA,IACjB;AAAA;AAAA;;;ACXO,SAAS,YAAsC;AACpD,SAAO;AACT;AAMO,SAAS,aAChB,SAAoC,CAAC,GACV;AArB3B;AA2BE,YAAU;AAAA,IACR,iBAAiB;AAAA,MACf,OAAO;AAAA,QACL,GAAG,cAAc,gBAAgB;AAAA,QACjC,IAAG,YAAO,oBAAP,mBAAwB;AAAA,MAC7B;AAAA,IACF;AAAA,IACA,SAAS,OAAO,WAAW,cAAc;AAAA,IACzC,KAAK;AAAA,MACH,GAAG,cAAc;AAAA,MACjB,GAAG,OAAO;AAAA,IACZ;AAAA,IACA,gBAAgB;AAAA,MAChB,GAAI,OAAO,kBAAkB,CAAC;AAAA,MAC9B,GAAI,cAAc,kBAAkB,CAAC;AAAA,IAAE;AAAA,IAEvC,SAAS,CAAC,GAAI,OAAO,WAAW,CAAC,GAAI,GAAI,cAAc,WAAW,CAAC,CAAE,EAAE;AAAA,MACrE;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,GAAG,cAAc;AAAA,MACjB,GAAG,OAAO;AAAA,IACZ;AAAA,IACA,QAAQ,OAAO,UAAU,cAAc;AAAA,IACvC,eAAe,OAAO,iBAAiB,cAAc;AAAA,IACrD,YAAY;AAAA,MACV,GAAG,cAAc;AAAA,MACjB,GAAG,OAAO;AAAA,IACZ;AAAA,EACF;AAEA,SAAO;AACT;AA3DA,IAMI;AANJ;AAAA;AAAA;AAAA;AAEA;AAIA,IAAI,UAAoC;AAKxB;AAQA;AAAA;AAAA;;;ACNT,SAAS,wBAChBC,UACA,UACI;AACF,SAAO,mBAAmB,IAAIA,UAAS,QAAQ;AACjD;AAEO,SAAS,wBAA4C;AAC1D,QAAMA,WAAU,mBAAmB,SAAS;AAE5C,MAAI,CAACA,UAAS;AACZ,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AAEA,SAAOA;AACT;AA5BA,IAAAC,0BAWa;AAXb;AAAA;AAAA;AAAA;AAAA,IAAAA,2BAAkC;AAW3B,IAAM,qBAAqB,IAAI,2CAAsC;AAE5D;AAOA;AAAA;AAAA;;;ACXT,SAAS,sBAA8B;AAC5C,MAAI,WAAY,QAAO;AAEvB,MAAI,WAAO;AAAA,IACT,QAAQ,IAAI;AAAA,IACZ,oBAAoB,gBAAgB,UAAU,EAAE;AAAA,EAClD;AAEA,MAAI,KAAC,2BAAW,IAAI,EAAG,QAAO,QAAQ,IAAI;AAE1C,eAAa;AAEb,SAAO;AACT;AAEO,SAAS,uBAAiC;AAC/C,QAAM,OAAO,UAAU,EAAE;AACzB,QAAM,YAAY,CAAC,OAAO,eAAe,IAAI,EAAE;AAAA,IAAI,CAAC,YACpD,uBAAK,QAAQ,IAAI,GAAG,GAAG;AAAA,EACvB;AAEA,SAAO;AACT;AAMO,SAAS,mBAAkC;AAChD,MAAI,OAAQ,QAAO;AAEnB,MAAI,WAAO;AAAA,IACT,QAAQ,IAAI;AAAA,IACZ,oBAAoB,gBAAgB,UAAU,EAAE;AAAA,EAClD;AAEA,MAAI,KAAC,2BAAW,IAAI,EAAG,QAAO,QAAQ,IAAI;AAE1C,QAAM,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,YAAQ,uBAAK,MAAM,GAAG,CAAC;AAEjD,aAAW,OAAO,MAAM;AACtB,YAAI,2BAAW,GAAG,GAAG;AACnB,eAAS;AACT,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAQO,SAAS,SAChB,IACA,IACI;AACF,MAAI,QAA+B;AACnC,MAAI,UAAwD;AAE5D,SAAQ,IAAI,SAAgB;AAC1B,QAAI,OAAO;AACT,mBAAa,KAAK;AAClB,UAAI,SAAS;AACX,gBAAQ,IAAoB;AAAA,MAC9B;AAAA,IACF;AAEA,WAAO,IAAI,QAAW,CAAC,QAAQ;AAC7B,gBAAU;AACV,cAAQ,WAAW,MAAM;AACvB,cAAM,SAAS,GAAG,GAAG,IAAI;AACzB,YAAI,MAAM;AACV,gBAAQ;AACR,kBAAU;AAAA,MACZ,GAAG,EAAE;AAAA,IACP,CAAC;AAAA,EACH;AACF;AAcO,SAAS,QAA2C,IAAU;AACnE,QAAM,IAAI,2BAAI,SAAwB;AACpC,QAAI,mBAAmB;AACrB,aAAO,GAAG,GAAG,IAAI;AAAA,IACnB;AAAA,EACF,GAJU;AAMV,SAAO;AACT;AAgBO,SAAS,aAAoB;AAClC,MAAI,CAAC,mBAAmB,SAAS,GAAG;AAClC,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AAEA,QAAM,IAAI,0BAA0B;AACtC;AAtIA,oBACA,kBAKI,QACA,YA8GS;AArHb;AAAA;AAAA;AAAA;AAAA,qBAA2B;AAC3B,uBAAqB;AACrB;AACA;AACA;AAEA,IAAI,SAAwB;AAC5B,IAAI,aAA4B;AAEhB;AAeA;AAaA;AA4BA;AAuCA;AAaT,IAAM,6BAAN,MAAM,mCAAkC,MAAM;AAAA,MACnD,cAAc;AACZ,cAAM,2BAA2B;AACjC,aAAK,OAAO;AAAA,MACd;AAAA,IACF;AALqD;AAA9C,IAAM,4BAAN;AAWS;AAAA;AAAA;;;ACxHT,SAAS,UAAU,UAAkB,SAAS,OAAO;AAC1D,QAAM,eAAe,YAAAC,QAAK,QAAQ,QAAQ;AAC1C,SAAO,GAAG,YAAY,aAAa,QAAQ,YAAY,GAAG,CAAC,GAAG,SAAS,OAAO,KAAK,IAAI,CAAC,KAAK,EAAE;AACjG;AAXA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAQD;AAAA;AAAA;;;ACRhB,IACAC,kBADA,0BA2Ba,6CA2JA;AAtLb;AAAA;AAAA;AAAA;AACA,IAAAA,mBAQA;AACA;AAiBO,IAAM,wBAAN,MAAM,sBAAqB;AAAA,MAKzB,YACA,SACC,QACA,QACR;AAHO;AACC;AACA;AAPR,oCAAuC;AACvC,qCAAyC;AACzC,kCAAkB,CAAC;AAAA,MAMlB;AAAA,MAEM,UAAU;AACf,aAAK,KAAK,MAAM;AAChB,eAAO,mBAAK;AAAA,MACd;AAAA,MAEA,IAAW,UAAU;AACnB,YAAI,CAAC,mBAAK,WAAU;AAClB,6BAAK,UAAW,IAAI,sBAAsB,IAAI;AAAA,QAChD;AAEA,eAAO,mBAAK;AAAA,MACd;AAAA,MAEO,UAAa,MAA6B;AAnDnD;AAoDI,gBAAO,UAAK,MAAM,EAAE,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,MAAhD,mBAAmD;AAAA,MAC5D;AAAA,MAEO,aAAqB;AAC1B,eAAO,KAAK,MAAM,EAAE;AAAA,MACtB;AAAA,MAEO,gBAAoC;AACzC,eAAO,KAAK,MAAM,EAAE;AAAA,MACtB;AAAA,MAEO,qBAAyC;AAC9C,eAAO,KAAK,MAAM,EAAE;AAAA,MACtB;AAAA,MAEO,YAAY;AACjB,mBAAW,KAAK,KAAK,QAAQ;AAC3B,cAAI,KAAK,QAAQ,QAAQ,WAAW,CAAC,GAAG;AACtC,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,MAEO,iBAAiB;AACtB,eAAO,CAAC,KAAK,WAAW,GAAG,KAAK,mBAAmB,GAAG,KAAK,cAAc,CAAC,EAC1E,OAAO,CAAC,MAAM,CAAC,EACf,KAAK,GAAG;AAAA,MACV;AAAA,MAEO,QAA8B;AACnC,YAAI,mBAAK,UAAS;AAChB,iBAAO,mBAAK;AAAA,QACd;AAEA,cAAM,UAAU,KAAK,QAAQ;AAE7B,cAAM,SAAS,KAAK,UAAU;AAE9B,YAAI,CAAC,QAAQ;AACX,gBAAM,sBAAsB,qBAAqB,oBAAoB;AAAA,QACvE;AAEA,cAAM,QAAQ,QAAQ,MAAM,OAAO,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;AAC3D,cAAM,UAAU,MAAM,MAAM;AAE5B,2BAAK,OAAQ;AAEb,YAAI;AACJ,YAAI;AAEJ,YAAI,mCAAS,SAAS,MAAM;AAC1B,gBAAM,CAAC,EAAE,OAAO,GAAG,IAAI,QAAQ,MAAM,GAAG;AAExC,cAAI,CAAC,OAAO,OAAO;AACjB,yBAAa;AAAA,UACf,WAAW,OAAO,OAAO;AACvB,8BAAkB;AAClB,yBAAa;AAAA,UACf;AAAA,QACF;AAEA,cAAM,SAAS,KAAK;AAAA,UAClB,CAAC,SAAS,iBAAiB,UAAU,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK;AAAA,QACxE;AAEA,cAAM,UAAU,MAChB,IAAI,CAAC,SAAS;AACZ,cAAI;AACF,kBAAM,CAAC,MAAM,KAAK,IAAI,KAAK,MAAM,GAAG;AAEpC,gBAAI,EAAE,QAAQ,QAAS,QAAO;AAE9B,oBAAQ,OAAO,IAAI,GAAG;AAAA,cACpB,KAAK,8CAA6B;AAChC,uBAAO,EAAE,MAAM,OAAO,UAAU,OAAO;AAAA,cACzC,KAAK,8CAA6B;AAChC,uBAAO,EAAE,MAAM,OAAO,SAAS,OAAO,EAAE,EAAE;AAAA,cAC5C,KAAK,8CAA6B;AAChC,uBAAO,EAAE,MAAM,OAAO,WAAW,KAAK,EAAE;AAAA,cAC1C,KAAK,8CAA6B;AAChC,uBAAO,EAAE,MAAM,MAAM;AAAA,cACvB,KAAK,8CAA6B;AAChC,uBAAO;AAAA,kBACL;AAAA,kBACA,OAAO,KAAK,QAAQ,SAAS,MAAM,KAAK,CAAC,MAAM;AAC7C,2BAAO,EAAE,OAAO,MAAM,QAAQ,WAAW,EAAE;AAAA,kBAC7C,CAAC;AAAA,gBACH;AAAA,cACF,KAAK,8CAA6B;AAChC,uBAAO;AAAA,kBACL;AAAA,kBACA,OAAO,KAAK,QAAQ,SAAS,SAAS,KAAK,CAAC,MAAM;AAChD,2BAAO,EAAE,OAAO,MAAM,QAAQ,UAAU,EAAE;AAAA,kBAC5C,CAAC;AAAA,gBACH;AAAA,cACF,KAAK,8CAA6B;AAChC,uBAAO;AAAA,kBACL;AAAA,kBACA,OAAO,KAAK,QAAQ,SAAS,MAAM,KAAK,CAAC,MAAM;AAC7C,2BAAO,EAAE,OAAO,MAAM,QAAQ,WAAW,EAAE;AAAA,kBAC7C,CAAC;AAAA,gBACH;AAAA,cACF,KAAK,8CAA6B;AAChC,uBAAO;AAAA,kBACL;AAAA,kBACA,OAAO,KAAK,QAAQ,YAAY,KAAK,CAAC,MAAM;AAC1C,2BAAO,EAAE,SAAS;AAAA,kBACpB,CAAC;AAAA,gBACH;AAAA,cACF;AACE,uBAAO;AAAA,YACX;AAAA,UACF,QAAQ;AAEN,mBAAO;AAAA,UACT;AAAA,QACF,CAAC,EACD,OAAO,CAAC,MAAM,MAAM,IAAI;AAExB,2BAAK,SAAU;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,eAAO,mBAAK;AAAA,MACd;AAAA,IACF;AAxJE;AACA;AACA;AAHgC;AAA3B,IAAM,uBAAN;AA2JA,IAAM,yBAAN,MAAM,uBAAsB;AAAA,MAC1B,YAAoB,QAA8B;AAA9B;AAAA,MAA+B;AAAA,MAElD,aAAgB,MAAc,WAAW,OAAO;AACtD,cAAM,SAAS,KAAK,OAAO,UAAa,IAAI;AAE5C,YAAI,YAAY,WAAW,QAAW;AACpC,gBAAM,IAAI,MAAM,WAAW,IAAI,gBAAgB;AAAA,QACjD;AAEA,eAAO,UAAU;AAAA,MACnB;AAAA,MAIA,UAAU,MAAc,WAAW,OAAO;AArM5C;AAsMI,cAAM,OAAO,KAAK,aAAmB,MAAM,QAAQ;AACnD,cAAM,UAAS,UAAK,OAAO,QAAQ,UAApB,mBAA2B,QAAQ,MAAM,IAAI,6BAAM;AAElE,YAAI,YAAY,CAAC,QAAQ;AACvB,gBAAM,IAAI,MAAM,WAAW,IAAI,gBAAgB;AAAA,QACjD;AAEA,eAAO,UAAU;AAAA,MACnB;AAAA,MAIA,cAAc,MAAc,WAAW,OAAO;AAC5C,eAAO,KAAK,aAAyB,MAAM,QAAQ;AAAA,MACrD;AAAA,MAIA,WAAW,MAAc,WAAW,OAAO;AACzC,eAAO,KAAK,aAAsB,MAAM,QAAQ;AAAA,MAClD;AAAA,MAIA,UAAU,MAAc,WAAW,OAAO;AACxC,eAAO,KAAK,aAAqB,MAAM,QAAQ;AAAA,MACjD;AAAA,MAIA,UAAU,MAAc,WAAW,OAAO;AACxC,eAAO,KAAK,aAAqB,MAAM,QAAQ;AAAA,MACjD;AAAA,MAIA,WAAW,MAAc,WAAW,OAAO;AACzC,eAAO,KAAK,aAAqB,MAAM,QAAQ;AAAA,MACjD;AAAA,MAIA,QAAQ,MAAc,WAAW,OAAO;AACtC,eAAO,KAAK,aAAmB,MAAM,QAAQ;AAAA,MAC/C;AAAA,MAIA,WAAW,MAAc,WAAW,OAAO;AACzC,eAAO,KAAK,aAAsB,MAAM,QAAQ;AAAA,MAClD;AAAA,MAIA,QAAQ,MAAc,WAAW,OAAO;AACtC,eAAO,KAAK,aAAmB,MAAM,QAAQ;AAAA,MAC/C;AAAA,MASA,eACA,MACA,WAAW,OACgE;AACzE,cAAM,SAAS,KAAK,aAAa,MAAM,QAAQ;AAE/C,YACA,kBAAkB,gCAClB,kBAAkB,yBAClB,kBAAkB,uBAClB;AACE,iBAAO;AAAA,QACT;AAEA,YAAI,UAAU;AACZ,gBAAM,IAAI,MAAM,gBAAgB,IAAI,gBAAgB;AAAA,QACtD;AAEA,eAAO;AAAA,MACT;AAAA,MAIA,cAAc,WAAW,OAAO;AAC9B,cAAM,MAAM,KAAK,OAAO,cAAc;AAEtC,YAAI,YAAY,QAAQ,QAAW;AACjC,gBAAM,IAAI,MAAM,yBAAyB;AAAA,QAC3C;AAEA,eAAO,OAAO;AAAA,MAChB;AAAA,MAIA,mBAAmB,WAAW,OAAO;AACnC,cAAM,MAAM,KAAK,OAAO,mBAAmB;AAE3C,YAAI,YAAY,QAAQ,QAAW;AACjC,gBAAM,IAAI,MAAM,+BAA+B;AAAA,QACjD;AAEA,eAAO,OAAO;AAAA,MAChB;AAAA,IACF;AA7HmC;AAA5B,IAAM,wBAAN;AAAA;AAAA;;;ACtLP,IAAAC,kBAUa;AAVb;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAAqD;AAGrD;AAOO,IAAM,oBAAN,MAAM,kBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,MAOrB,YAA4BC,aAAwB;AAAxB,0BAAAA;AACjC,aAAK,IAAI;AAAA,UACP,KAAK,WAAW,OAAO,SACvB,QAAQ,IAAI,iBACZ,QAAQ,IAAI,SACZ;AAAA,QACF;AAAA,MACF;AAAA,MAbQ,MAAM,IAAI,sBAAK;AAAA;AAAA;AAAA;AAAA,MAkBhB,kBAAiC;AACtC,cAAM,UAAU,KAAK,WAAW;AAEhC,cAAM,WAAW,QAAQ,iBAAiB;AAE1C,eAAO,SAAS,QAAQ,CAAC,QAAQ;AAC/B,gBAAM,OACN,YAAY,IAAI,KAAK,UACrB,IAAI,KAAK,QAAQ,OAAO,IACxB,IAAI,KAAK;AAET,gBAAM,cAA6B,CAAC,IAAI;AAGxC,cACA,IAAI,KAAK,mBACT,KAAK,SAAS,wCAAuB,MACrC;AACE,wBAAY,KAAK;AAAA,cACf,GAAG;AAAA,cACH,MAAM,wCAAuB;AAAA,cAC7B,SAAS;AAAA,cACT,2BAA2B;AAAA;AAAA,cAE3B,aAAa;AAAA,YACf,CAAC;AAAA,UACH;AAEA,cACA,IAAI,KAAK,sBACT,KAAK,SAAS,wCAAuB,SACrC;AACE,wBAAY,KAAK;AAAA,cACf,GAAG;AAAA,cACH,MAAM,wCAAuB;AAAA,cAC7B,2BAA2B;AAAA;AAAA,cAE3B,aAAa;AAAA,cACb,SAAS;AAAA,YACX,CAAC;AAAA,UACH;AAEA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA,MAKA,MAAa,WAAW;AACtB,cAAM,WAAW,KAAK,gBAAgB;AAEtC,YAAI,2BAA2B;AAC/B,cAAM,mBAA6C;AAAA,UACjD,iBAAiB;AACf,uCAA2B;AAAA,UAC7B;AAAA,UACA;AAAA,QACF;AAEA,cAAM,KAAK,WAAW,QAAQ,QAAQ,OAAO,KAAK,WAAW;AAC3D,cAAI,yBAA0B;AAC9B,iBAAO,OAAO,yBAAyB,KAAK,gBAAgB;AAAA,QAC9D,CAAC;AAED,YAAI,yBAA0B;AAK9B,YAAI,CAAC,KAAK,WAAW,OAAO,QAAQ,GAAG;AACrC,gBAAM,IAAI,MAAM,qDAAqD;AAAA,QACvE;AAEA,cAAM,gBAAgB,SACtB,OAAO,CAAC,YAAS;AAxGrB;AAwGwB,+BAAQ,WAAR,mBAAgB,OAAO,SAAS;AAAA,SAAM,EAC1D,IAAI,CAAC,MAAG;AAzGZ;AAyGgB;AAAA,YACV,GAAG;AAAA,YACH,QAAQ,MAAM,KAAK,IAAI,KAAI,OAAE,WAAF,mBAAU,OAAO,QAAQ,CAAC;AAAA,UACvD;AAAA,SAAE;AAEF,cAAM,iBAAiB,SAAS;AAAA,UAC9B,CAAC,YAAS;AA/GhB;AA+GmB,sBAAC,aAAQ,WAAR,mBAAgB,OAAO,SAAS;AAAA;AAAA,QAChD;AAEA,cAAM,KAAK,qBAAqB,cAAc;AAC9C,cAAM,KAAK,oBAAoB,aAAa;AAAA,MAC9C;AAAA;AAAA;AAAA;AAAA,MAKA,MAAa,qBAAqB,UAAyB;AACzD,YAAI,CAAC,SAAS,OAAQ;AAEtB,YAAI,YAAY;AAChB,cAAM,mBAA6C;AAAA,UACjD,iBAAiB;AACf,wBAAY;AAAA,UACd;AAAA,UACA;AAAA,QACF;AAEA,cAAM,KAAK,WAAW,QAAQ,QAAQ,OAAO,KAAK,WAAW;AAC3D,cAAI,UAAW;AACf,iBAAO,OAAO,+BAA+B,KAAK,gBAAgB;AAAA,QACpE,CAAC;AAED,YAAI;AACF,gBAAM,OAAQ,MAAM,KAAK,IAAI;AAAA,YAC3B,wBAAO,oBAAoB,KAAK,WAAW,OAAO,KAAM,EAAE;AAAA,YAC1D;AAAA,cACE,MAAM,SAAS,IAAI,CAAC,OAAO;AAAA,gBACzB,GAAG;AAAA,gBACH,QAAQ;AAAA,cACV,EAAE;AAAA,YACJ;AAAA,UACF;AAEA,iBAAO;AAAA,YACL,oBAAe,KAAK,MAAM;AAAA,UAC5B;AAAA,QACF,SAAS,GAAG;AACV,iBAAO,MAAM,oDAAoD,CAAC;AAAA,QACpE;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,MAAa,oBAAoB,UAAyB;AACxD,YAAI,CAAC,SAAS,OAAQ;AAEtB,YAAI,YAAY;AAChB,cAAM,mBAA6C;AAAA,UACjD,iBAAiB;AACf,wBAAY;AAAA,UACd;AAAA,UACA;AAAA,QACF;AACA,cAAM,KAAK,WAAW,QAAQ,QAAQ,OAAO,KAAK,WAAW;AAC3D,cAAI,UAAW;AACf,iBAAO,OAAO;AAAA,YACZ;AAAA,YACA;AAAA,UACF;AAAA,QACF,CAAC;AACD,YAAI,UAAW;AAEf,YAAI;AACF,gBAAM,mBAAmB,oBAAI,IAA2B;AAExD,mBAAS,QAAQ,CAAC,YAAY;AArLpC;AAsLQ,gBAAI,GAAC,aAAQ,WAAR,mBAAgB,QAAQ;AAE7B,oBAAQ,OAAO,QAAQ,CAAC,UAAU;AAChC,kBAAI,CAAC,iBAAiB,IAAI,KAAK,GAAG;AAChC,iCAAiB,IAAI,OAAO,CAAC,CAAC;AAAA,cAChC;AAEA,+BAAiB,IAAI,KAAK,EAAG,KAAK,OAAO;AAAA,YAC3C,CAAC;AAAA,UACH,CAAC;AAED,cAAI,CAAC,iBAAiB,KAAM;AAE5B,cAAI,QAAQ;AAEZ,qBAAW,CAAC,OAAO,aAAa,KAAK,kBAAkB;AACrD,gBAAIC,aAAY;AAChB,kBAAMC,oBAA6C;AAAA,cACjD,iBAAiB;AACf,gBAAAD,aAAY;AAAA,cACd;AAAA,cACA,UAAU;AAAA,YACZ;AAEA,kBAAM,KAAK,WAAW,QAAQ,QAAQ,OAAO,KAAK,WAAW;AAC3D,kBAAIA,WAAW;AACf,qBAAO,OAAO,8BAA8B,KAAKC,iBAAgB;AAAA,YACnE,CAAC;AAED,gBAAID,WAAW;AAEf,kBAAM,OAAQ,MAAM,KAAK,IAAI;AAAA,cAC3B,wBAAO;AAAA,gBACL,KAAK,WAAW,OAAO,KAAM;AAAA,gBAC7B;AAAA,cACF;AAAA,cACA;AAAA,gBACE,MAAM,cAAc,IAAI,CAAC,OAAO;AAAA,kBAC9B,GAAG;AAAA,kBACH,QAAQ;AAAA,gBACV,EAAE;AAAA,cACJ;AAAA,YACF;AAEA,qBAAS,KAAK;AAAA,UAChB;AAEA,iBAAO,KAAK,oBAAe,KAAK,iCAAiC;AAAA,QACnE,SAAS,GAAG;AACV,iBAAO,MAAM,mDAAmD,CAAC;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AAhO8B;AAAvB,IAAM,mBAAN;AAAA;AAAA;;;ACuLA,SAAS,MAAM,IAAsD;AAC1E,QAAM,MAAM,WAAW;AAEvB,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAEA,SAAO,IAAI,yBAAyB,EAAE;AACxC;AAMO,SAAS,YAAY,IAAkB;AAC5C,QAAM,MAAM,WAAW;AAEvB,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAEA,MAAI,sBAAsB,EAAE;AAC9B;AAvNA,IAAAE,qBAAA,OAgBa,+CAwKD;AAxLZ;AAAA;AAAA;AAAA;AAAA,IAAAA,sBAA2B;AAE3B;AAcO,IAAM,yBAAN,MAAM,uBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,MAgB1B,YAA4BC,aAAwB;AAAxB,0BAAAA;AAfnC,kCAA2C;AAAA,UACzC,gBAAgB;AAAA,UAChB,MAAM;AAAA,UACN,WAAW,oBAAI,IAAI;AAAA,UACnB,mBAAmB,oBAAI,IAAI;AAAA,UAC3B,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MAM4D;AAAA;AAAA;AAAA;AAAA;AAAA,MAMrD,WAAWC,UAAwB;AACxC,2BAAK,OAAM,UAAUA;AAAA,MACvB;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAW,UAA0B;AACnC,eAAO,mBAAK,OAAM;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,oBAAkC;AACvC,eAAO,mBAAK,OAAM;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,kBAAkB,OAAoB;AAC3C,YAAI,mBAAK,OAAM,gBAAgB;AAC7B,gBAAM,IAAI,MAAM,8BAA8B;AAAA,QAChD;AAEA,2BAAK,OAAM,iBAAiB;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA,MAKO,UAAqC;AAC1C,cAAM,OAAO,mBAAK,OAAM;AAExB,YAAI,CAAC,MAAM;AACT,gBAAM,IAAI,MAAM,2BAA2B;AAAA,QAC7C;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,QAAQ,MAAuC;AACpD,2BAAK,OAAM,OAAO;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA,MAKA,IAAW,YAA8B;AACvC,eAAO,mBAAK,OAAM;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,yBACP,IACS;AACP,cAAM,SAAK,gCAAW;AACtB,2BAAK,OAAM,kBAAkB,IAAI,IAAI,EAAE;AACvC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,sBAAsB,IAAkB;AAC7C,2BAAK,OAAM,kBAAkB,OAAO,EAAE;AAAA,MACxC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAa,uBAAsC;AACjD,mBAAW,CAAC,IAAI,EAAE,KAAK,mBAAK,OAAM,mBAAmB;AACnD,cAAI;AACF,kBAAM,GAAG,IAAI;AAAA,UACf,SAAS,GAAG;AACV,iBAAK,WAAW,KAAK,sCAAsC,CAAC;AAAA,UAC9D,UAAE;AACA,iBAAK,sBAAsB,EAAE;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,4BAAkC;AACvC,2BAAK,OAAM,kBAAkB,MAAM;AAAA,MACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,UAAU,QAAsB;AACrC,2BAAK,OAAM,SAAS;AACpB,2BAAK,OAAM,YAAY,YAAY,IAAI;AAAA,MACzC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,UAAgB;AACrB,YAAI,CAAC,mBAAK,OAAM,SAAS;AACvB,6BAAK,OAAM,UAAU,YAAY,IAAI;AAAA,QACvC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,YAAoB;AACzB,eAAO,mBAAK,OAAM;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,mBAA2B;AAChC,eAAO,KAAK,IAAI,mBAAK,OAAM,UAAU,mBAAK,OAAM,SAAS;AAAA,MAC3D;AAAA,IACF;AArKE;AADiC;AAA5B,IAAM,wBAAN;AAwKA,IAAK,4BAAL,kBAAKC,+BAAL;AACL,MAAAA,2BAAA,oBAAiB;AADP,aAAAA;AAAA,OAAA;AASI;AAcA;AAAA;AAAA;;;ACnMT,SAAS,iBAAwB;AACtC,QAAM,sBAAsB,qBAAqB,cAAc;AACjE;AAMO,SAAS,QAAQ,OAAsB;AAC5C,MAAI,kBAAkB,KAAK,EAAG,OAAM;AACtC;AAKO,SAAS,WAAkB;AAChC,QAAM,sBAAsB,qBAAqB,gBAAgB;AACnE;AA7BA;AAAA;AAAA;AAAA;AAAA;AAYgB;AAQA;AAOA;AAAA;AAAA;;;AC3BhB,IA2Ba,sBA3Bb,QA8Ga,mBA9Gb,SAsca;AAtcb;AAAA;AAAA;AAAA;AAmBA;AACA;AAOO,IAAM,uBAAuB;AAAA,MAClC,kBAAkB;AAAA,MAClB,oBAAoB;AAAA,MACpB,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AA6EO,IAAM,WAAN,MAAM,SAGb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkDS,YACSC,aACG,QACnB;AAFgB,0BAAAA;AACG;AAhDnB;AAAA;AAAA;AAAA,4BAAgB;AAKhB;AAAA;AAAA;AAAA,4BAAgB;AAKhB;AAAA;AAAA;AAAA,4BAAgB;AAKhB;AAAA;AAAA;AAAA,4BAAgB;AAKhB;AAAA;AAAA;AAAA,4BAAgB;AAKhB;AAAA;AAAA;AAAA,4BAAgB;AAKhB;AAAA;AAAA;AAAA,4BAAgB;AAKhB;AAAA;AAAA;AAAA,4BAAgB;AAEhB;AAEA,4BAAQ,WAAyB;AAY/B,aAAK,cAAc,OAAO;AAC1B,aAAK,UAAU,OAAO;AACtB,aAAK,SAASA,YAAW;AACzB,2BAAK,QAAS,OAAO,SAAS,oBAAI,IAAI;AACtC,aAAK,UAAU,OAAO;AAEtB,YAAI,OAAO,aAAa;AACtB,eAAK,QAAQ,OAAO,YAAY;AAChC,eAAK,UAAU,OAAO,YAAY;AAClC,eAAK,UAAU,OAAO,YAAY;AAClC,eAAK,YAAY,OAAO,YAAY;AAAA,QACtC;AAEA,YAAI,OAAO,SAAS;AAClB,eAAK,QAAQ,OAAO,QAAQ;AAC5B,eAAK,UAAU,OAAO,QAAQ;AAC9B,eAAK,UAAU,OAAO,QAAQ;AAC9B,eAAK,YAAY,OAAO,QAAQ;AAAA,QAClC;AAEA,YAAI,KAAK,OAAO,aAAa;AAC3B,eAAK,OAAO,YAAY,WAAW,IAAI;AAAA,QACzC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAW,QAAQ;AACjB,eAAO,mBAAK;AAAA,MACd;AAAA,MAEA,IAAW,cAAsB;AAC/B,YAAI,KAAK,cAAc,GAAG;AACxB,iBAAO,KAAK,YAAY;AAAA,QAC1B,OAAO;AACL,iBAAO,KAAK,OAAO,qBAAsB,WAAW;AAAA,QACtD;AAAA,MACF;AAAA,MAEA,IAAW,UAAgD;AACzD,YAAI,KAAK,UAAU,GAAG;AACpB,gBAAM,SAAS,KAAK,OAAO;AAE3B,iBAAO,OAAO;AAAA,QAChB,OAAO;AACL,gBAAM,cAA2C,KAAM;AAEvD,iBAAO,YAAY;AAAA,QACrB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,IAAW,YAAqB;AAC9B,eAAO,KAAK,OAAO,aAAa;AAAA,MAClC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAa,eACb,SACiB;AACf,cAAM,SAAS,MAAM,KAAK,WAAW,eAAe;AAAA,UACjD,KAAK,cAAc,IAAI,KAAK,cAAc,KAAK;AAAA,UAChD;AAAA,QACF;AAEA,YAAI,CAAC,QAAQ;AACX,gBAAM,IAAI,MAAM,WAAW,OAAO,YAAY;AAAA,QAChD;AAEA,cAAM,MAAM,KAAK,OAAO,eAAe,WAAW;AAElD,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,kCAAkC;AAAA,QACpD;AAEA,cAAM,WAAW;AAAA,UACf,WAAW,OAAO,QAAQ,KAAK;AAAA,UAC/B,cAAc,OAAO,QAAQ,KAAK;AAAA,UAClC,SAAS,OAAO,QAAQ,KAAK;AAAA,UAC7B,oBAAoB,OAAO,QAAQ,KAAK;AAAA,UACxC,iBAAiB,OAAO,QAAQ,KAAK;AAAA,QACvC;AAEA,cAAM,cAAc,IAAI,UAAU;AAAA,UAChC;AAAA,QACF;AAEA,YAAI,CAAC,aAAa;AAChB,gBAAM,IAAI,MAAM,kCAAkC;AAAA,QACpD;AAEA,cAAM,UAAU,SAAS,WAAW;AAEpC,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,wBAAwB,WAAW,EAAE;AAAA,QACvD;AAEA,YAAI,UAAU,IAAI,eAAe,KAAK,WAAW;AACjD,YAAI,UAAU,IAAI,eAAe,OAAO;AAExC,cAAM,QAAQ,KAAK,MAAM,EAAE,WAAW,KAAK,CAAC,CAAC;AAE7C,iBAAS;AAAA,MACX;AAAA;AAAA;AAAA;AAAA,MAKA,IAAW,gBAA+B;AACxC,eAAO,KAAK,OAAO;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA2BO,gBAAmD;AACxD,eACE,KAAK,kBAAkB,qBAAqB,oBAC5C,KAAK,kBAAkB,qBAAqB,gBAC5C,KAAK,kBAAkB,qBAAqB,sBAC5C,KAAK,kBAAkB,qBAAqB;AAAA,MAEhD;AAAA;AAAA;AAAA;AAAA,MAKO,qBAAsD;AAC3D,eAAO,KAAK,kBAAkB,qBAAqB;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA,MAKO,iBAAqD;AAC1D,eAAO,KAAK,kBAAkB,qBAAqB;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA,MAKO,uBAAiE;AACtE,eAAO,KAAK,kBAAkB,qBAAqB;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA,MAKO,oBAA2D;AAChE,eAAO,KAAK,kBAAkB,qBAAqB;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA,MAKO,YAAwC;AAC7C,eAAO,KAAK,kBAAkB,qBAAqB;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA,MAKO,uBAA+B;AACpC,YAAI,KAAK,cAAc,GAAG;AACxB,iBAAO,KAAK,YAAY;AAAA,QAC1B,OAAO;AACL,iBAAO,KAAK,QAAQ,QAAQ,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC;AAAA,QACnD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKO,iBAAgC;AAlXzC;AAmXI,YAAI,KAAK,cAAc,GAAG;AACxB,iBAAO,KAAK,YAAY;AAAA,QAC1B,OAAO;AACL,mBAAO,UAAK,QAAQ,UAAb,mBAAoB,oBAAmB;AAAA,QAChD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKO,gBAA+B;AACpC,YAAI,KAAK,cAAc,GAAG;AACxB,iBAAO,KAAK,YAAY;AAAA,QAC1B,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,UAAU,aAAa,OAAe;AAC3C,YAAI,KAAK,QAAS,QAAO,KAAK;AAE9B,cAAM,SAAS,aAAa,KAAK,cAAc,IAAI,KAAK,eAAe;AAEvE,YAAI,CAAC,QAAQ;AACX,iBAAO,KAAK,WAAW,OAAO;AAAA,QAChC;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,UAAU,QAA6B;AAC5C,aAAK,UAAU;AAAA,MACjB;AAAA;AAAA;AAAA;AAAA,MAKO,MACP,QACyB;AACvB,YAAI,CAAC,OAAQ,QAAO,IAAI,SAAQ,KAAK,YAAY,KAAK,MAAM;AAE5D,cAAM,MAAM,IAAI,SAAQ,KAAK,YAAY;AAAA,UACvC,GAAG,KAAK;AAAA,UACR,GAAG;AAAA,UACH,OAAO,mBAAK;AAAA,QACd,CAAC;AAED,eAAO;AAAA,MACT;AAAA,MAEO,eAAyD;AAC9D,eAAO,gBAAgB;AAAA,MACzB;AAAA,MAEO,OAAiB;AACtB,YAAI,KAAK,UAAU,GAAG;AACpB,iBAAO,KAAK,OAAO,qBAAsB,QAAQ;AAAA,QACnD;AAEA,eAAO,CAAC;AAAA,MACV;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQO,OAAc;AACnB,uBAAe;AAAA,MACjB;AAAA,IACF;AA1SE;AAzCF;AAHO,IAAM,UAAN;AAwVA,IAAM,qBAAN,MAAM,2BAEb,QAAkC;AAAA,MAF3B;AAAA;AAGL,oCAAU;AAAA;AAAA;AAAA;AAAA;AAAA,MAKV,IAAW,YAAqB;AAC9B,eAAO,mBAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKO,SAAe;AACpB,2BAAK,SAAU;AAAA,MACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWO,iBAAiB,IAAsB;AAlehD;AAmeI,yBAAK,OAAO,eAAZ,mBAAwB,qBAAxB,4BAA2C;AAAA,MAC7C;AAAA,IACF;AA5BE;AADgC;AAF3B,IAAM,oBAAN;AAAA;AAAA;;;ACtcP,IAAAC,kBAAA,2CAmBa;AAnBb;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAAkE;AAClE;AAIA;AAMA;AACA;AAKA;AAEO,IAAM,oBAAN,MAAM,kBAAiB;AAAA,MACrB,YAAoB,SAA4B;AAA5B;AADtB;AAAA,MACmD;AAAA,MAExD,MAAa,WACb,UACA,QACA;AACE,cAAM,EAAE,YAAAC,YAAW,IAAI,KAAK;AAE5B,cAAM,gBAAgB,KAAK,iBAAiB,MAAM;AAElD,YAAI,aAAgC;AAEpC,cAAM,MAAM,IAAI,sBAAsBA,WAAU;AAChD,YAAI,8CAAgD;AACpD,YAAI,UAAU,IAAI,sBAAsB,KAAK;AAC7C,YAAI,UAAU,IAAI,sBAAsB,SAAS,QAAQ,QAAQ,IAAI;AACrE,YAAI,UAAU,IAAI,mBAAmB,aAAa;AAElD,cAAM,MAAM,IAAI,kBAAkBA,aAAY;AAAA,UAC5C,SAAS,SAAS;AAAA,UAClB,aAAa;AAAA,UACb;AAAA,UACA,aAAa,EAAE,kBAAkB,4BACjC,SACA;AAAA,UACA,SAAS,kBAAkB,2BAAU,SAAS;AAAA,UAC9C,WAAW;AAAA,UACX,YAAY;AAAA,YACV,kBAAkB,wBAAC,OAAmB;AACpC,2BAAa;AAAA,YACf,GAFkB;AAAA,UAGpB;AAAA,UACA,sBAAsB,SAAS;AAAA,QACjC,CAAC;AAED,YAAI,sBAAsB;AAG1B,YAAI,SAAS,YAAY,QAAQ;AAC/B,gBAAM,eAAe,KAAK,YAAY;AACpC,uBAAW,cAAc,SAAS,aAAa;AAC7C,kBAAI,CAAC,WAAW,KAAK,cAAe;AACpC,kBAAI;AACF,sBAAM,WAAW,KAAK,cAAc,GAAG;AAAA,cACzC,SAAS,GAAG;AACV,oBAAI,YAAY,GAAG,qBAAqB,cAAc,GAAG;AACvD,wCAAsB;AACtB;AAAA,gBACF;AAEA,oBACA;AAAA,kBAAY;AAAA,kBAAG;AAAA,oBACf,qBAAqB;AAAA,oBACrB,qBAAqB;AAAA,kBAAoB;AAAA,gBACzC,GACA;AACE;AAAA,gBACF;AAEA,sBAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,CAAC,IAAI,WAAW;AAElB,gBAAM,aAAa,SAAS,QAAQ;AACpC,gBAAM,KAAK,WAAW,aAAa;AAEnC,cAAI,CAAC,IAAI;AACP,mBAAO;AAAA,cACL,WAAW,SAAS,QAAQ,QAAQ,IAAI,uBAAuB,aAAa;AAAA,YAC9E;AAAA,UACF;AAEA,cAAI,IAAI;AACN,gBAAI;AACF,oBAAM,kBAAkB;AAAA,gBACtB;AAAA,gBACA,YAAY;AACV,sBAAI,yBAAyB,CAACC,SAAQ;AACpC,oBAAAA,KAAI,QAAQ;AACZ,0BAAM,QAAQA,KAAI,kBAAkB;AACpC,0BAAM,SAASA,KAAI,UAAU;AAC7B,0BAAM,OAAO,GAAGA,KAAI,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAEjD,wBAAI,OAAO;AACT,6BAAO;AAAA,wBACL,IAAI,MAAM,MAAM,IAAI,8BAA8B,MAAM,SAAS,KAAK;AAAA,sBACxE;AAEA;AAAA,oBACF;AAEA,2BAAO;AAAA,sBACL,IAAI,MAAM,MAAM,IAAI;AAAA,oBACtB;AAAA,kBACF,CAAC;AAED,yBAAO,GAAG,IAAI,MAAM,CAAC;AAAA,gBACvB;AAAA,gBACA,sBAAK,2CAAW,KAAK,IAAI;AAAA,cAC3B;AAEA,oBAAM,iBACN,cAAc,OACb,WAA0B,eAAe,IAC1C;AAEA,kBAAI,UAAU,SAAS,QAAQ,KAAK,QAAQ,IAAI;AAEhD,oBAAM,MAAM,MAAMD,YAAW,QAAQ,QAAQ,OAAOE,MAAK,WAAW;AAClE,uBAAO,OAAO;AAAA,kBACZA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAC;AAED,kBAAI,CAAC,KAAK;AACR,sBAAM,eAAe;AAAA,cACvB;AAAA,YACF,SAAS,GAAG;AACV,kBAAI,YAAY,GAAG,qBAAqB,cAAc,GAAG;AACvD,sCAAsB;AAAA,cACxB;AAEA,kBACA,CAAC;AAAA,gBAAY;AAAA,gBAAG;AAAA,kBAChB,qBAAqB;AAAA,kBACrB,qBAAqB;AAAA,gBAAc;AAAA,cACnC,GACA;AACE,uBAAO,MAAM,CAAC;AAAA,cAChB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,YAAI,CAAC,uBAAuB,SAAS,YAAY,QAAQ;AACvD,gBAAM,eAAe,KAAK,YAAY;AACpC,uBAAW,cAAc,SAAS,aAAa;AAC7C,kBAAI,CAAC,WAAW,KAAK,aAAc;AACnC,kBAAI;AACF,sBAAM,WAAW,KAAK,aAAa,GAAG;AAAA,cACxC,SAAS,GAAG;AACV,oBAAI,YAAY,GAAG,qBAAqB,cAAc,GAAG;AACvD;AAAA,gBACF;AAEA,sBAAM;AAAA,cACR;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MAeO,iBAAiB,QAAqD;AAC3E,YAAI,kBAAkB,yBAAS,QAAO,qBAAqB;AAC3D,YAAI,OAAO,mBAAmB;AAC9B,iBAAO,qBAAqB;AAC5B,YAAI,OAAO,eAAe,GAAG;AAC3B,iBAAO,qBAAqB;AAAA,QAC9B;AACA,YAAI,OAAO,4BAA4B,GAAG;AACxC,iBAAO,qBAAqB;AAAA,QAC9B;AACA,YAAI,OAAO,yBAAyB,GAAG;AACrC,iBAAO,qBAAqB;AAAA,QAC9B;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AA/LO;AAkKC,mBAAU,wCAAG;AACjB,YAAM,MAAM,eAAe;AAE3B,YAAM,IAAI,qBAAqB;AAE/B,UAAI,0BAA0B;AAG9B,YAAM,KAAK,QAAQ,WAAW,QAAQ,QAAQ,OAAO,KAAK,WAAW;AACnE,cAAM,OAAO,eAAe,KAAK,GAAG;AAAA,MACtC,CAAC;AAAA,IACH,GAXgB;AAlKY;AAAvB,IAAM,mBAAN;AAAA;AAAA;;;ACdP,eAAsB,qBAAqB,QAAQ,OAAO;AACxD,QAAM,eAAW,wBAAK,QAAQ,IAAI,GAAG,gBAAgB,kBAAkB;AACvE,MAAI,CAAC,qBAAqB,CAAC,MAAO,QAAO;AACzC,QAAM,kBAAc,wBAAK,UAAU,cAAc;AACjD,QAAM,YAAQ,wBAAK,UAAU,UAAU;AACvC,QAAM,YAAQ,wBAAK,UAAU,YAAY;AACzC,QAAM,cAAU,wBAAK,UAAU,cAAc;AAE7C,QAAM,qBAAqB;AAAA,IACzB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAEA,QAAM,eAAe;AAGrB,QAAM,eAAe;AAAA;AAAA;AAAA;AAMrB,QAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAM5B,YAAM,wBAAM,UAAU,EAAE,WAAW,KAAK,CAAC,EAAE,MAAM,MAAM;AAAA,EAAC,CAAC;AACzD,YAAM,4BAAU,aAAa,KAAK,UAAU,oBAAoB,MAAM,CAAC,CAAC;AACxE,YAAM,4BAAU,OAAO,YAAY;AACnC,YAAM,4BAAU,OAAO,YAAY;AACnC,YAAM,4BAAU,SAAS,mBAAmB;AAE5C,SAAO;AACT;AAEA,eAAsB,0BAA0B,MAAc;AAC5D,QAAM,sBAAsB;AAAA;AAAA,MAExB,IAAI;AAAA;AAAA;AAAA;AAKR,QAAM,eAAW,wBAAK,QAAQ,IAAI,GAAG,gBAAgB,kBAAkB;AAEvE,MAAI,KAAC,4BAAW,QAAQ,EAAG;AAE3B,QAAM,WAAO,wBAAK,UAAU,cAAc;AAE1C,YAAM,4BAAU,MAAM,qBAAqB,EAAE,UAAU,QAAQ,CAAC;AAClE;AA7DA,IAAAC,kBACAC,mBAEAC;AAHA;AAAA;AAAA;AAAA;AAAA,IAAAF,mBAAiC;AACjC,IAAAC,oBAAqB;AACrB;AACA,IAAAC,kBAA2B;AAEL;AAyCA;AAAA;AAAA;;;AC9CtB,IACAC,kBAkEM,mBAYA,sBAKO;AApFb;AAAA;AAAA;AAAA;AACA,IAAAA,mBAUA;AAEA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AA4CA,IAAM,oBAAoB;AAAA,MACxB,SAAS,wBAAC,MACV,aAAa,wCACb,aAAa,8CACb,KAAK,OAAO,MAAM,UAHT;AAAA,MAIT,WAAW,wBAAC,MAAe,OAAO,MAAM,YAA7B;AAAA,MACX,cAAc,wBAAC,MAAe,OAAO,MAAM,YAA7B;AAAA,MACd,SAAS,wBAAC,MAAe,OAAO,MAAM,YAA7B;AAAA,MACT,oBAAoB,wBAAC,MAAe,OAAO,MAAM,YAA7B;AAAA,MACpB,iBAAiB,wBAAC,MAAe,OAAO,MAAM,YAA7B;AAAA,IACnB;AAEA,IAAM,uBAAuB;AAAA,MAC3B,eAAe,wBAAC,MAAe,OAAO,MAAM,YAA7B;AAAA,MACf,cAAc,wBAAC,MAAe,OAAO,MAAM,YAA7B;AAAA,IAChB;AAEO,IAAM,qBAAN,MAAM,mBAAkB;AAAA,MAgBtB,YAA4BC,aAAwB;AAAxB,0BAAAA;AACjC,aAAK,YAAY,IAAI,iBAAiB,KAAK,UAAU;AAAA,MACvD;AAAA,MAjBQ,iBAAiB,IAAI,4BAAkC;AAAA,MACvD,oBAAoB,IAAI,4BAAqC;AAAA;AAAA,MAG7D,kBAAkB,oBAAI,IAAoB;AAAA,MAC1C,qBAAqB,oBAAI,IAAoB;AAAA,MAErC;AAAA,MACR,gBAAuD;AAAA,MACvD,kBAAqD;AAAA,MAC7C,gBAAgB,IAAI,iBAAiB,IAAI;AAAA,MAEzC,sBAAsB,IAAI,4BAA4B;AAAA,MACtD,yBAAyB,IAAI,4BAA+B;AAAA,MAMrE,cAAc;AACnB,cAAM,gBAAgB,OAAO,WAAW;AAGxC,cAAM,sBAAsB,KAAK,iBAAiB,EAAE;AAAA,UAClD,CAAC,KAAK,QAAQ;AACZ,kBAAM,WAAW,IAAI,QAAQ,YAAY;AACzC,gBAAI,QAAQ,IAAI,IAAI,QAAQ,KAAK,CAAC;AAClC,gBAAI,QAAQ,EAAE,KAAK,GAAG;AACtB,mBAAO;AAAA,UACT;AAAA,UACA,CAAC;AAAA,QACH;AAEA,gBAAQ;AAAA,UACN,eAAO;AAAA,YACL,UAAU,eAAO,QAAQ,KAAK,eAAe,KAAK,SAAS,CAAC,CAAC;AAAA,UAC/D;AAAA,QACF;AAEA,cAAM,aAAa,OAAO,KAAK,mBAAmB,EAAE,KAAK;AAGzD,cAAM,eAAyC,CAAC;AAGhD,mBAAW,QAAQ,CAAC,aAAa;AAC/B,cAAI,aAAa,cAAe;AAEhC,cAAI,SAAS,SAAS,GAAG,GAAG;AAC1B,kBAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,gBAAI,aAAa;AAGjB,qBAAS,IAAI,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK;AACzC,oBAAM,kBAAkB,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAClD,kBAAI,WAAW,SAAS,eAAe,GAAG;AACxC,6BAAa;AACb;AAAA,cACF;AAAA,YACF;AAGA,gBAAI,YAAY;AACd,2BAAa,UAAU,IAAI,aAAa,UAAU,KAAK,CAAC;AACxD,2BAAa,UAAU,EAAE,KAAK,QAAQ;AAAA,YACxC;AAAA,UACF;AAAA,QACF,CAAC;AAGD,cAAM,sBAAsB,oBAAI,IAAY;AAG5C,cAAM,gBAAgB,wBACtB,UACA,SAAiB,IACjB,SAAkB,OAClB,eAAuB,OACvB;AAEE,cAAI,oBAAoB,IAAI,QAAQ,EAAG;AACvC,8BAAoB,IAAI,QAAQ;AAEhC,gBAAM,WAAW,oBAAoB,QAAQ;AAC7C,gBAAM,cACN,aAAa,QAAQ,KAAK,aAAa,QAAQ,EAAE,SAAS;AAC1D,gBAAM,aAAa,SAAS,iBAAO;AACnC,gBAAM,cAAc,gBAAgB,SAAS,QAAQ;AAGrD,cAAI,aAAa,eAAe;AAE9B,kBAAM,cAAc,SAAS,SAAS,GAAG,IACzC,SAAS,MAAM,GAAG,EAAE,IAAI,IACxB;AAEA,oBAAQ;AAAA,cACN,eAAO,KAAK,GAAG,MAAM,GAAG,UAAU,IAAI,eAAO,KAAK,WAAY,CAAC,EAAE;AAAA,YACnE;AAAA,UACF;AAGA,mBAAS,QAAQ,CAAC,KAAK,aAAa;AAClC,kBAAM,YAAY,aAAa,SAAS,SAAS,KAAK,CAAC;AACvD,kBAAM,YAAY,YAAY,iBAAO;AACrC,kBAAM,YAAY,aAAa,gBAAgB,cAAc;AAE7D,kBAAM,OAAO,IAAI,KAAK,QAAQ;AAC9B,kBAAM,QAAQ,IAAI,QAAQ,YAAY,SAAS;AAC/C,kBAAM,iBAAiB,QAAQ,eAAO,QAAQ,WAAM,IAAI;AAExD,oBAAQ;AAAA,cACN,GAAG,eAAO,MAAM,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC,IAAI,eAAO,OAAO,IAAI,CAAC,GAAG,cAAc;AAAA,YACrF;AAAA,UACF,CAAC;AAGD,cAAI,aAAa;AACf,kBAAM,WAAW,aAAa,QAAQ,EAAE,KAAK;AAC7C,qBAAS,QAAQ,CAAC,eAAe,QAAQ;AACvC,oBAAM,cAAc,QAAQ,SAAS,SAAS;AAC9C,4BAAc,eAAe,aAAa,aAAa,WAAW;AAAA,YACpE,CAAC;AAAA,UACH;AAAA,QACF,GAnDsB;AAsDtB,cAAM,qBAAqB,WAC3B,OAAO,CAAC,aAAa;AACnB,cAAI,aAAa,cAAe,QAAO;AAEvC,cAAI,SAAS,SAAS,GAAG,GAAG;AAC1B,kBAAM,QAAQ,SAAS,MAAM,GAAG;AAEhC,qBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,oBAAM,aAAa,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AAC7C,kBAAI,WAAW,SAAS,UAAU,GAAG;AACnC,uBAAO;AAAA,cACT;AAAA,YACF;AACA,mBAAO;AAAA,UACT;AAEA,iBAAO;AAAA,QACT,CAAC,EACD,KAAK;AAGL,2BAAmB,QAAQ,CAAC,UAAU,UAAU;AAC9C,gBAAM,SAAS,UAAU,mBAAmB,SAAS;AACrD,wBAAc,UAAU,IAAI,MAAM;AAAA,QACpC,CAAC;AAAA,MACH;AAAA,MAEO,mBAAmB;AACxB,eAAO,MAAM,KAAK,KAAK,eAAe,OAAO,CAAC;AAAA,MAChD;AAAA,MAEO,yBAAyB;AAC9B,aAAK,kBAAkB,OAAO,gBAA6B;AACzD,gBAAM,UAAU,MAAM,KAAK,WAAW,QAAQ;AAAA,YAC5C,OAAO,KAAK,WAAW;AACrB,qBAAO,OAAO,oBAAoB,KAAK,WAAW;AAAA,YACpD;AAAA,UACF;AAGA,cAAI,QAAS;AAEb,gBAAM,gBACN,YAAY,UAAU,KACtB,YAAY,eAAe,KAC3B,YAAY,yBAAyB,KACrC,YAAY,4BAA4B;AAExC,cAAI,CAAC,cAAe;AAEpB,gBAAM,WAAW,MAAM,KAAK,kBAAkB,WAAW;AAEzD,cAAI,CAAC,SAAU;AAEf,iBAAO,KAAK,cAAc,WAAW,UAAU,WAAW;AAAA,QAC5D;AAEA,aAAK,oBAAoB,OAAO,YAAqB;AACnD,gBAAM,UAAU,MAAM,KAAK,WAAW,QAAQ;AAAA,YAC5C,OAAO,KAAK,WAAW;AACrB,qBAAO,OAAO,uBAAuB,KAAK,OAAO;AAAA,YACnD;AAAA,UACF;AAGA,cAAI,QAAS;AACb,cAAI,QAAQ,OAAO,IAAK;AAExB,gBAAM,WAAW,MAAM,KAAK,kBAAkB,OAAO;AAErD,cAAI,CAAC,SAAU;AAEf,iBAAO,KAAK,cAAc,WAAW,UAAU,OAAO;AAAA,QACxD;AAEA,aAAK,WAAW,OAAO,GAAG,wBAAO,mBAAmB,KAAK,aAAa;AACtE,aAAK,WAAW,OAAO,GAAG,wBAAO,eAAe,KAAK,eAAe;AAAA,MACtE;AAAA,MAEA,MAAa,kBACb,QACA,SAC8C;AAtShD;AAuSI,YAAI;AAGJ,YAAI,CAAC,SAAS;AACZ,cAAI,kBAAkB,0BAAS;AAC7B,gBAAI,OAAO,OAAO,IAAK,QAAO;AAE9B,kBAAM,SACN,MAAM,KAAK,WAAW,OAAO,wBAAwB,MAAM;AAE3D,qBAAS,IAAI;AAAA,cACX;AAAA,cACA,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAAM;AAAA,cACxC,CAAC,YAAoB;AApT/B,oBAAAC,KAAA;AAsTY,sBAAMC,aAAY,KAAK,gBAAgB,IAAI,OAAO;AAClD,oBAAI,CAACA,WAAW,QAAO;AAEvB,sBAAMC,iBAAgB,KAAK,eAAe,IAAID,UAAS;AACvD,oBAAI,CAACC,eAAe,QAAO;AAE3B,oBACA,OAAO,aACPF,MAAAE,eAAc,WAAd,gBAAAF,IAAsB,WACtB,CAACE,eAAc,OAAO,SAAS,OAAO,OAAQ,GAC9C;AACE,yBAAO;AAAA,gBACT;AAEA,sBAAM,OACN,YAAYA,eAAc,KAAK,UAC/BA,eAAc,KAAK,QAAQ,OAAO,IAClCA,eAAc,KAAK;AAEnB,yBACE,UAAK,YAAL,mBAAc;AAAA,kBACZ,CAAC,KAA8B,QAA6B;AAC1D,wBAAI,IAAI,IAAI,IAAI,IAAI;AACpB,2BAAO;AAAA,kBACT;AAAA,kBACA,CAAC;AAAA,sBACE,CAAC;AAAA,cAEV;AAAA,YACF;AAEA,gBAAI;AACF,oBAAM,cAAc,OAAO,eAAe;AAC1C,oBAAM,QAAQ,YAAY,MAAM,GAAG;AACnC,wBAAU,MAAM,CAAC;AAAA,YACnB,SAAS,GAAG;AACV,kBAAI,YAAY,GAAG,qBAAqB,oBAAoB,GAAG;AAC7D,uBAAO;AAAA,cACT;AACA,qBAAO,MAAM,CAAC;AACd,qBAAO;AAAA,YACT;AAAA,UACF,OAAO;AACL,kBAAM,eACN,OAAO,mBAAmB,KAC1B,OAAO,eAAe,KACtB,OAAO,qBAAqB;AAE5B,gBAAI,CAAC,aAAc,QAAO;AAE1B,sBAAU,OAAO;AAAA,UACnB;AAAA,QACF;AAGA,cAAM,YAAY,KAAK,gBAAgB,IAAI,OAAO;AAClD,YAAI,CAAC,UAAW,QAAO;AAEvB,cAAM,gBAAgB,KAAK,eAAe,IAAI,SAAS;AACvD,YAAI,CAAC,cAAe,QAAO;AAG3B,aACC,kBAAkB,uCACnB,kBAAkB,6CAClB,OAAO,aACP,mBAAc,WAAd,mBAAsB,WACtB,CAAC,cAAc,OAAO,SAAS,OAAO,OAAO,GAC7C;AACE,iBAAO;AAAA,QACT;AAGA,cAAM,cAAkC,CAAC;AAGzC,mBAAW,gBAAgB,cAAc,QAAQ,aAAa;AAC5D,gBAAM,aAAa,KAAK,kBAAkB,IAAI,YAAY;AAC1D,cAAI,YAAY;AACd,wBAAY,KAAK,UAAU;AAAA,UAC7B;AAAA,QACF;AAGA,eAAO;AAAA,UACL,SAAS;AAAA,UACT;AAAA,UACA,sBAAsB;AAAA,QACxB;AAAA,MACF;AAAA,MAEA,MAAa,iBAAiB;AAC5B,aAAK,eAAe,MAAM;AAC1B,aAAK,kBAAkB,MAAM;AAC7B,aAAK,gBAAgB,MAAM;AAC3B,aAAK,mBAAmB,MAAM;AAC9B,aAAK,oBAAoB,MAAM;AAC/B,aAAK,uBAAuB,MAAM;AAElC,cAAM,KAAK,aAAa;AAAA,MAC1B;AAAA,MAEA,MAAa,sBAAsB,MAAoB;AACrD,mBAAW,cAAc,MAAM;AAC7B,cAAI,CAAC,WAAW,GAAI;AAEpB,eAAK,uBAAuB,IAAI,WAAW,IAAI,UAAU;AAAA,QAC3D;AAAA,MACF;AAAA,MAEA,MAAa,oBAAoB,MAAiB;AAChD,mBAAW,WAAW,MAAM;AAC1B,cAAI,CAAC,QAAQ,GAAI;AAEjB,eAAK,oBAAoB,IAAI,QAAQ,IAAI,OAAO;AAAA,QAClD;AAAA,MACF;AAAA,MAEA,MAAa,iCAAiC,MAA0B;AACtE,mBAAW,cAAc,MAAM;AAC7B,eAAK,kBAAkB,IAAI,WAAW,WAAW,IAAI,UAAU;AAAA,QACjE;AAAA,MACF;AAAA,MAEA,MAAa,+BAA+B,MAAuB;AACjE,mBAAW,WAAW,MAAM;AAC1B,eAAK,eAAe,IAAI,QAAQ,QAAQ,IAAI,OAAO;AACnD,eAAK,gBAAgB,IAAI,QAAQ,QAAQ,MAAM,QAAQ,QAAQ,EAAE;AAAA,QACnE;AAAA,MACF;AAAA,MAEA,MAAa,eAAe;AAC1B,cAAM,KAAK,WAAW,QAAQ,QAAQ,CAAC,KAAK,WAAW;AACrD,iBAAO,OAAO,qBAAqB,GAAG;AAAA,QACxC,CAAC;AAED,cAAM,iBAAiB,KAAK,WAAW;AAEvC,YAAI,CAAC,gBAAgB;AACnB,gBAAM,IAAI,MAAM,yCAAyC;AAAA,QAC3D;AAEA,cAAM,EAAE,UAAU,YAAY,IAAI,eAAe,QAAQ;AAEzD,cAAM,mBAAmB,KAAK,oBAAoB,OAClD,SAAS,OAAO,KAAK,mBAAmB,IACxC;AAEA,cAAM,sBAAsB,KAAK,uBAAuB,OACxD,YAAY,OAAO,KAAK,sBAAsB,IAC9C;AAGA,mBAAW,CAAC,IAAI,UAAU,KAAK,qBAAqB;AAClD,gBAAM,KAAK,eAAe,IAAI,UAAU;AAAA,QAC1C;AAGA,mBAAW,CAAC,IAAI,OAAO,KAAK,kBAAkB;AAC5C,gBAAM,KAAK,YAAY,IAAI,OAAO;AAAA,QACpC;AAGA,YAAI,mBAAmB;AACrB,gBAAM;AAAA,YACJ,0BAA0B,MAAM;AAAA,cAC9B,KAAK,eACL,UAAU,CAAC,MAAM,KAAK,UAAU,EAAE,QAAQ,IAAI,CAAC,EAC/C,OAAO;AAAA,YACT,EAAE,KAAK,KAAK,CAAC;AAAA,UACf;AAAA,QACF;AAEA,cAAM,KAAK,WAAW,QAAQ,QAAQ,CAAC,KAAK,WAAW;AACrD,iBAAO,OAAO,oBAAoB,GAAG;AAAA,QACvC,CAAC;AAAA,MACH;AAAA,MAEA,MAAc,eAAe,IAAY,YAAwB;AAC/D,YAAI;AACF,gBAAM,OAAO,MAAM,OACjB,GAAG,UAAU,WAAW,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;AAG/C,cAAI,eAAe;AACnB,qBAAW,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,oBAAoB,GAAG;AACnE,gBAAI,KAAK,GAAG,KAAK,CAAE,MAAM,UAAU,KAAK,GAAG,CAAC,GAAI;AAC9C,oBAAM,IAAI;AAAA,gBACR,iCAAiC,EAAE,KAAK,GAAG;AAAA,cAC7C;AAAA,YACF;AAEA,gBAAI,KAAK,GAAG,EAAG;AAAA,UACjB;AAEA,cAAI,iBAAiB,GAAG;AACtB,kBAAM,IAAI;AAAA,cACR,iCAAiC,EAAE;AAAA,YACrC;AAAA,UACF;AAEA,eAAK,kBAAkB,IAAI,IAAI,EAAE,YAAY,KAAK,CAAC;AAAA,QACrD,SAAS,OAAO;AACd,iBAAO,MAAM,6BAA6B,EAAE,IAAI,KAAK;AAAA,QACvD;AAAA,MACF;AAAA,MAEA,MAAc,YAAY,IAAY,SAAkB;AACtD,YAAI;AAEF,cAAI,QAAQ,SAAS,MAAM;AACzB,iBAAK,eAAe,IAAI,IAAI;AAAA,cAC1B;AAAA,cACA,MAAM;AAAA,gBACJ,SAAS;AAAA,kBACP,MAAM,QAAQ;AAAA,kBACd,aAAa,GAAG,QAAQ,IAAI;AAAA,kBAC5B,MAAM;AAAA,gBACR;AAAA,cACF;AAAA,YACF,CAAC;AACD;AAAA,UACF;AAEA,gBAAM,OAAO,MAAM,OAAO,GAAG,UAAU,QAAQ,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;AAEpE,cAAI,CAAC,KAAK,SAAS;AACjB,kBAAM,IAAI;AAAA,cACR,8BAA8B,QAAQ,IAAI;AAAA,YAC5C;AAAA,UACF;AAEA,cAAI,eAAe;AACnB,qBAAW,CAAC,KAAK,SAAS,KAAK,OAAO,QAAQ,iBAAiB,GAAG;AAChE,gBAAI,QAAQ,aAAa,KAAK,GAAG,EAAG;AACpC,gBAAI,KAAK,GAAG,KAAK,CAAE,MAAM,UAAU,KAAK,GAAG,CAAC,GAAI;AAC9C,oBAAM,IAAI;AAAA,gBACR,8BAA8B,QAAQ,IAAI,KAAK,GAAG;AAAA,cACpD;AAAA,YACF;AAAA,UACF;AAEA,cAAI,iBAAiB,GAAG;AACtB,kBAAM,IAAI;AAAA,cACR,8BAA8B,QAAQ,IAAI;AAAA,YAC5C;AAAA,UACF;AAEA,cAAI,cAAc,KAAK;AAEvB,gBAAM,KAAK,WAAW,QAAQ,QAAQ,OAAO,KAAK,WAAW;AAC3D,kBAAM,MAAM,MAAM,OAAO,eAAe,KAAK,WAAW;AAExD,gBAAI,KAAK;AACP,4BAAc;AAAA,YAChB;AAAA,UACF,CAAC;AAED,eAAK,eAAe,IAAI,IAAI;AAAA,YAC1B;AAAA,YACA,QAAQ,KAAK;AAAA,YACb,MAAM;AAAA,cACJ,GAAG;AAAA,cACH,SAAS,YAAY,cAAc,YAAY,OAAO,IAAI;AAAA,YAC5D;AAAA,UACF,CAAC;AAGD,eAAK,gBAAgB,IAAI,QAAQ,MAAM,EAAE;AAAA,QAC3C,SAAS,OAAO;AACd,iBAAO,MAAM,0BAA0B,QAAQ,IAAI,KAAK,EAAE,KAAK,KAAK;AAAA,QACtE;AAAA,MACF;AAAA,IACF;AAnf+B;AAAxB,IAAM,oBAAN;AAAA;AAAA;;;ACpFP,IAAAC,kBACAC,iBACAC,kBACAC,mBA+BM,oBACA,4BAEA,2BACA,iBACA,kBAEO;AAzCb;AAAA;AAAA;AAAA;AAAA,IAAAH,mBAA2B;AAC3B,IAAAC,kBAAmC;AACnC,IAAAC,mBAAwB;AACxB,IAAAC,oBAAmD;AA+BnD,IAAM,qBAAqB;AAC3B,IAAM,6BACN;AACA,IAAM,4BAA4B;AAClC,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AAElB,IAAM,kBAAN,MAAM,gBAAe;AAAA,MAInB,YAA6B,SAAgC;AAAhC;AAAA,MAAiC;AAAA,MAH7D,WAAW,IAAI,4BAA4B;AAAA,MAC3C,cAAc,IAAI,4BAA+B;AAAA,MAIlD,SAAS,MAAyB;AACvC,mBAAW,CAAC,IAAI,OAAO,KAAK,OAAO,QAAQ,KAAK,QAAQ,GAAG;AACzD,eAAK,SAAS,IAAI,IAAI,OAAO;AAAA,QAC/B;AAEA,mBAAW,CAAC,IAAI,UAAU,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG;AAC/D,eAAK,YAAY,IAAI,IAAI,UAAU;AAAA,QACrC;AAAA,MACF;AAAA,MAEO,cAAuB;AAC5B,mBAAO,4BAAW,KAAK,QAAQ,UAAU;AAAA,MAC3C;AAAA,MAEQ,UAAU,MAAuB;AACvC,eAAO,gBAAgB,KAAK,IAAI;AAAA,MAClC;AAAA,MAEQ,aAAa,MAAuB;AAC1C,eACE,mBAAmB,KAAK,IAAI,KAC5B,0BAA0B,KAAK,IAAI,KACnC,2BAA2B,KAAK,IAAI;AAAA,MAExC;AAAA,MAEQ,WAAW,MAAuB;AACxC,eAAO,iBAAiB,KAAK,IAAI;AAAA,MACnC;AAAA,MAEO,QAAQ;AACb,aAAK,SAAS,MAAM;AACpB,aAAK,YAAY,MAAM;AAAA,MACzB;AAAA,MAEA,MAAa,OAAO;AAClB,cAAM,UAAU,UAAM,0BAAQ,KAAK,QAAQ,YAAY;AAAA,UACrD,eAAe;AAAA,QACjB,CAAC;AAED,mBAAW,SAAS,SAAS;AAE3B,cAAI,MAAM,KAAK,WAAW,GAAG,EAAG;AAEhC,gBAAM,eAAW,wBAAK,KAAK,QAAQ,YAAY,MAAM,IAAI;AAEzD,cAAI,MAAM,YAAY,GAAG;AACvB,kBAAM,WAAW,KAAK,WAAW,MAAM,IAAI,IAC3C,MAAM,KAAK,MAAM,GAAG,EAAE,IACtB;AAEA,kBAAM,KAAK,SAAS,UAAU,QAAQ;AAAA,UACxC,OAAO;AACL,kBAAM,KAAK,OAAO,KAAK;AAAA,UACzB;AAAA,QACF;AAEA,cAAM,KAAK,iBAAiB;AAE5B,eAAO,KAAK,OAAO;AAAA,MACrB;AAAA,MAEO,UAAU;AACf,eAAO;AAAA,UACL,UAAU,KAAK;AAAA,UACf,aAAa,KAAK;AAAA,QACpB;AAAA,MACF;AAAA,MAEO,SAAS;AACd,eAAO;AAAA,UACL,UAAU,OAAO,YAAY,KAAK,SAAS,QAAQ,CAAC;AAAA,UACpD,aAAa,OAAO,YAAY,KAAK,YAAY,QAAQ,CAAC;AAAA,QAC5D;AAAA,MACF;AAAA,MAEA,MAAc,SAASC,OAAc,UAAyB;AAC5D,cAAM,UAAU,UAAM,0BAAQA,OAAM;AAAA,UAClC,eAAe;AAAA,QACjB,CAAC;AAED,mBAAW,SAAS,SAAS;AAE3B,cAAI,MAAM,KAAK,WAAW,GAAG,EAAG;AAEhC,cAAI,MAAM,OAAO,GAAG;AAClB,gBAAI,KAAK,UAAU,MAAM,IAAI,KAAK,KAAK,aAAa,MAAM,IAAI,GAAG;AAC/D,oBAAM,KAAK,OAAO,OAAO,QAAQ;AAAA,YACnC;AAAA,UACF,WACA,MAAM,YAAY,KAClB,KAAK,WAAW,MAAM,IAAI,KAC1B,UACA;AAEE,kBAAM,iBAAiB,KAAK,WAAW,MAAM,IAAI,IACjD,GAAG,QAAQ,IAAI,MAAM,KAAK,MAAM,GAAG,EAAE,CAAC,KACtC;AACA,kBAAM,KAAK,aAAS,wBAAKA,OAAM,MAAM,IAAI,GAAG,cAAc;AAAA,UAC5D;AAAA,QAGF;AAAA,MACF;AAAA,MAEA,MAAc,OAAO,OAAe,WAA0B,MAAM;AAClE,cAAM,OAAO,MAAM;AACnB,cAAMA,YAAO,wBAAK,MAAM,YAAY,MAAM,IAAI;AAE9C,YAAI,KAAK,UAAU,IAAI,GAAG;AACxB,gBAAM,UAAmB;AAAA,YACvB,IAAI,OAAO,WAAW;AAAA,YACtB,UAAM,4BAASA,WAAM,2BAAQA,KAAI,CAAC;AAAA,YAClC,MAAAA;AAAA,YACA;AAAA,YACA,YAAY,MAAM;AAAA,YAClB,cAAc,KAAK,kBAAkBA,KAAI;AAAA,YACzC,aAAa,CAAC;AAAA,UAChB;AAEA,eAAK,SAAS,IAAI,QAAQ,IAAI,OAAO;AAAA,QACvC,WAAW,KAAK,aAAa,IAAI,GAAG;AAClC,gBAAM,aAAyB;AAAA,YAC7B,IAAI,OAAO,WAAW;AAAA,YACtB,UAAM,4BAASA,WAAM,2BAAQA,KAAI,CAAC;AAAA,YAClC,MAAAA;AAAA,YACA,cAAc,KAAK,kBAAkBA,KAAI;AAAA,YACzC,YAAY,MAAM;AAAA,YAClB,QAAQ,0BAA0B,KAAK,IAAI;AAAA,YAC3C,SAAS,2BAA2B,KAAK,IAAI,IAC7C,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK,OACtB;AAAA,UACF;AAEA,eAAK,YAAY,IAAI,WAAW,IAAI,UAAU;AAAA,QAChD;AAAA,MACF;AAAA,MAEQ,mBAAmB;AACzB,aAAK,SAAS,QAAQ,CAAC,YAAY;AACjC,gBAAM,cAAc,QAAQ;AAC5B,gBAAM,sBAAsB,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EAChE,OAAO,CAAC,eAAe;AACrB,gBAAI,WAAW,OAAQ,QAAO;AAC9B,gBAAI,WAAW,QAAS,QAAO,WAAW,YAAY,QAAQ;AAC9D,mBAAO,WAAW,eAAe;AAAA,UACnC,CAAC,EACD,IAAI,CAAC,eAAe,WAAW,EAAE;AAEjC,kBAAQ,cAAc,MAAM;AAAA,YAC1B,oBAAI,IAAI,CAAC,GAAG,QAAQ,aAAa,GAAG,mBAAmB,CAAC;AAAA,UAC1D;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MAEQ,kBAAkBA,OAAc;AACtC,cAAM,iBAAa,6BAAUA,KAAI;AACjC,eAAO,WAAW,QAAQ,KAAK,QAAQ,YAAY,EAAE;AAAA,MACvD;AAAA,IACF;AArK4B;AAArB,IAAM,iBAAN;AAAA;AAAA;;;ACzCP,IAAAC,kBACAC,iBACAC,kBACAC,mBAiCa;AApCb;AAAA;AAAA;AAAA;AAAA,IAAAH,mBAA2B;AAC3B,IAAAC,kBAA2B;AAC3B,IAAAC,mBAAwB;AACxB,IAAAC,oBAAqB;AAiCd,IAAM,gBAAN,MAAM,cAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASjB,YAAoB,SAA8B;AAA9B;AA7C7B;AA8CI,YAAI,QAAQ,aAAa;AACvB,kBAAQ,cAAc,MAAM,KAAK,IAAI,IAAI,QAAQ,WAAW,CAAC;AAAA,QAC/D;AAEA,YAAI,GAAC,aAAQ,gBAAR,mBAAqB,SAAQ;AAChC,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QACzD;AAAA,MACF;AAAA;AAAA,MAfQ,SAAS,IAAI,4BAAgC;AAAA;AAAA;AAAA;AAAA;AAAA,MAqB9C,eAAe,aAAuB;AAC3C,aAAK,QAAQ,cAAc,MAAM;AAAA,UAC/B,oBAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,aAAa,GAAG,WAAW,CAAC;AAAA,QACvD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOO,MAAM,OAAmC;AAC9C,eAAO,KAAK,OAAO,IAAI,KAAK,KAAK;AAAA,MACnC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAW,cAAwB;AACjC,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA;AAAA;AAAA;AAAA,MAKO,cAAc;AACnB,eAAO,KAAK,YAAY,MAAM,CAAC,mBAAe,4BAAW,UAAU,CAAC;AAAA,MACtE;AAAA;AAAA;AAAA;AAAA,MAKO,QAAQ;AACb,aAAK,OAAO,MAAM;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAa,SAAS;AACpB,aAAK,MAAM;AACX,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAa,OAA4B;AACvC,mBAAW,cAAc,KAAK,aAAa;AACzC,gBAAM,OAAO,UAAM,0BAAQ,YAAY,EAAE,eAAe,KAAK,CAAC;AAE9D,qBAAW,OAAO,MAAM;AACtB,gBAAI,IAAI,YAAY,GAAG;AACrB,oBAAMC,YAAO,wBAAK,YAAY,IAAI,IAAI;AACtC,oBAAM,KAAK,UAAU,IAAI,MAAMA,OAAM,MAAM,CAAC,GAAG,IAAI;AAAA,YACrD;AAAA,UACF;AAAA,QACF;AAEA,eAAO,OAAO,YAAY,KAAK,MAAM;AAAA,MACvC;AAAA;AAAA;AAAA;AAAA;AAAA,MAMO,SAAqB;AAC1B,eAAO,OAAO,YAAY,KAAK,MAAM;AAAA,MACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,MAAc,UACd,OACAA,OACA,aAA4B,MAC5B,YAAsB,CAAC,GACvB,SAAS,OACO;AACd,cAAM,QAAQ,UAAM,0BAAQA,OAAM,EAAE,eAAe,KAAK,CAAC;AACzD,cAAM,cAAc,UAAU,WAAW,KAAK,KAAK;AAGnD,cAAM,YAAY,cAAc,MAAM,MAAM,GAAG,EAAE,IAAI,cAAc;AAEnE,mBAAW,QAAQ,OAAO;AACxB,cAAI,KAAK,KAAK,WAAW,GAAG,EAAG;AAE/B,cAAI,KAAK,YAAY,GAAG;AACtB,kBAAM,eAAW,wBAAKA,OAAM,KAAK,IAAI;AACrC,kBAAM,KAAK,UAAU,KAAK,MAAM,UAAU,WAAW,SAAS;AAC9D;AAAA,UACF;AAEA,cAAI,KAAK,OAAO,KAAK,oBAAoB,KAAK,KAAK,IAAI,GAAG;AACxD,sBAAU,SAAK,wBAAK,KAAK,YAAY,KAAK,IAAI,CAAC;AAAA,UACjD;AAAA,QACF;AAEA,YAAI,CAAC,aAAa;AAChB,eAAK,OAAO,IAAI,OAAO,EAAE,OAAO,MAAAA,OAAM,WAAW,UAAU,CAAC;AAAA,QAC9D;AAAA,MACF;AAAA,IACF;AAtI0B;AAAnB,IAAM,eAAN;AAAA;AAAA;;;ACpCP;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IAAAC,kBA+Ba;AA/Bb;AAAA;AAAA;AAAA;AAAA,IAAAA,mBAA2B;AAG3B;AACA;AACA;AACA;AAyBO,IAAM,oBAAN,MAAM,kBAAiB;AAAA,MAErB,YAA4BC,aAAwB;AAAxB,0BAAAA;AAAA,MAAyB;AAAA,MADpD,eAAe,IAAI,4BAAgC;AAAA,MAGpD,YAA0C;AAC/C,YAAI,KAAK,aAAa,SAAS,EAAG,QAAO,CAAC;AAE1C,cAAM,SAAS,KAAK,aAAa,OAAO;AAExC,eAAO,OAAO;AAAA,UACZ,CAAC,WACA;AAAA,YACC,MAAM,MAAM;AAAA,YACZ,WAAW,MAAM;AAAA,YACjB,eAAe,MAAM,UAAU,OAAO,CAAC,aAAa,SAAS,IAAI,EACjE;AAAA,YACA,kBAAkB,MAAM,UAAU,OAAO,CAAC,aAAa,CAAC,SAAS,IAAI,EACrE;AAAA,YACA,UAAU,MAAM;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAa,eAAe;AAC1B,aAAK,cAAc;AACnB,cAAM,KAAK,WAAW;AAAA,MACxB;AAAA,MAEA,MAAa,aAAa;AACxB,cAAM,KAAK,WAAW,QAAQ,QAAQ,CAAC,KAAK,WAAW;AACrD,iBAAO,OAAO,mBAAmB,GAAG;AAAA,QACtC,CAAC;AAED,cAAM,SAAS,KAAK,WAAW;AAE/B,cAAM,SAAS,MAAM,OAAO,KAAK;AAEjC,mBAAW,SAAS,OAAO,OAAO,MAAM,GAAG;AACzC,gBAAM,YAA6B,CAAC;AAEpC,qBAAW,YAAY,MAAM,WAAW;AACtC,kBAAM,UAAU,MAAM,OAAO,UAAU,UAAU,IAAI;AAErD,gBAAI,CAAC,QAAQ,WAAW,OAAO,QAAQ,YAAY,YAAY;AAC7D,qBAAO;AAAA,gBACL,qBAAqB,MAAM,KAAK,GAAG,MAAM,YAAY,iBAAiB,MAAM,SAAS,KAAK,EAAE;AAAA,cAC9F;AAAA,YACF;AAEA,sBAAU,KAAK;AAAA,cACb,SAAS,QAAQ;AAAA,cACjB,MAAM,CAAC,CAAC,QAAQ;AAAA,YAClB,CAAC;AAAA,UACH;AAEA,gBAAM,MAAM,UAAU;AAEtB,cAAI,CAAC,KAAK;AACR,mBAAO;AAAA,cACL,SAAS,MAAM,KAAK,GAAG,MAAM,YAAY,iBAAiB,MAAM,SAAS,KAAK,EAAE;AAAA,YAClF;AAAA,UACF;AAEA,gBAAM,MAAM,GAAG,MAAM,YAAY,GAAG,MAAM,SAAS,MAAM,EAAE,GAAG,MAAM,KAAK;AAEzE,eAAK,aAAa,IAAI,KAAK;AAAA,YACzB,MAAM,MAAM;AAAA,YACZ,WAAW,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,UACF,CAAC;AAED,iBAAO;AAAA,YACL,uBAAkB,MAAM,KAAK,GAAG,MAAM,YAAY,iBAAiB,MAAM,SAAS,KAAK,EAAE,SAAS,GAAG,YAAY,QAAQ,IAAI,KAAK,GAAG;AAAA,UACvI;AAAA,QACF;AAEA,aAAK,wBAAwB;AAE7B,cAAM,KAAK,WAAW,QAAQ,QAAQ,CAAC,KAAK,WAAW;AACrD,iBAAO,OAAO,kBAAkB,GAAG;AAAA,QACrC,CAAC;AAAA,MACH;AAAA,MAEO,gBAAgB;AACrB,aAAK,6BAA6B;AAClC,aAAK,aAAa,MAAM;AAAA,MAC1B;AAAA,MAEO,0BAA0B;AAC/B,cAAM,SAAS,KAAK,WAAW;AAE/B,mBAAW,CAAC,KAAK,IAAI,KAAK,KAAK,aAAa,QAAQ,GAAG;AACrD,gBAAM,EAAE,MAAM,WAAW,UAAU,IAAI;AAGvC,gBAAM,gBAAgB,UAAU,OAAO,CAAC,aAAa,SAAS,IAAI;AAClE,gBAAM,cAAc,UAAU,OAAO,CAAC,aAAa,CAAC,SAAS,IAAI;AAGjE,gBAAM,wBAAwB,oBAAI,IAAsB;AAGxD,gBAAM,cAAgC,iCAAU,SAAS;AACvD,kBAAM;AAAA,cACJ;AAAA,gBACE,OAAO;AAAA,gBACP,WAAW,aAAa;AAAA,gBACxB,MAAM,KAAK;AAAA,gBACX,YAAY,KAAK;AAAA,cACnB;AAAA,cACA,YAAY;AACV,2BAAW,YAAY,aAAa;AAClC,sBAAI;AACF,0BAAM,SAAS,QAAQ,GAAG,IAAI;AAAA,kBAChC,SAAS,GAAG;AAEV,wBAAI,aAAa,2BAA2B;AAC1C,6BAAO;AAAA,wBACL,iCAAiC,IAAI,GACrC,YAAY,iBAAiB,SAAS,KAAK,EAAE;AAAA,sBAE/C;AACA;AAAA,oBACF;AAGA,2BAAO;AAAA,sBACL,wBAAwB,IAAI,GAC5B,YAAY,iBAAiB,SAAS,KAAK,EAAE;AAAA,sBAE7C;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF,GAlCsC;AAqCtC,gBAAM,cAAgC,iCAAU,SAAS;AACvD,gBAAI,SAAS;AAEb,uBAAW,YAAY,eAAe;AACpC,kBAAI,OAAQ;AAEZ,oBAAM;AAAA,gBACJ;AAAA,kBACE,OAAO;AAAA,kBACP,WAAW,aAAa;AAAA,kBACxB,MAAM,KAAK;AAAA,kBACX,YAAY,KAAK;AAAA,gBACnB;AAAA,gBACA,YAAY;AACV,sBAAI;AAEF,wBAAI,sBAAsB,IAAI,SAAS,OAAO,EAAG;AAEjD,0BAAM,SAAS,QAAQ,GAAG,IAAI;AAC9B,0CAAsB,IAAI,SAAS,OAAO;AAAA,kBAC5C,SAAS,GAAG;AAEV,wBAAI,aAAa,2BAA2B;AAC1C,6BAAO;AAAA,wBACL,iCAAiC,IAAI,GACrC,YAAY,iBAAiB,SAAS,KAAK,EAAE;AAAA,sBAE/C;AACA,+BAAS;AAAA,oBACX;AAGA,2BAAO;AAAA,sBACL,wBAAwB,IAAI,GAC5B,YAAY,iBAAiB,SAAS,KAAK,EAAE;AAAA,sBAE7C;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAGA,gBACA,sBAAsB,SAAS,cAAc,UAC7C,YAAY,WAAW,GACvB;AAEE,mBAAK,aAAa,OAAO,GAAG;AAC5B,qBAAO;AAAA,gBACL,kDAA2C,IAAI,GAC/C,YAAY,iBAAiB,SAAS,KAAK,EAAE;AAAA,cAE/C;AAAA,YACF;AAAA,UACF,GAxDsC;AA2DtC,eAAK,aAAa,IAAI,KAAK;AAAA,YACzB,GAAG;AAAA,YACH,cACA,YAAY,SAAS,IACrB,EAAE,SAAS,aAAa,MAAM,MAAM,IACpC;AAAA,YACA;AAAA,UACF,CAAC;AAGD,cAAI,WAAW;AACb,gBAAI,YAAY,SAAS,GAAG;AAC1B,mBAAK,WAAW,OAAO,GAAG,WAAW,MAAM,WAAW;AAAA,YACxD;AACA,gBAAI,cAAc,SAAS,GAAG;AAC5B,mBAAK,WAAW,OAAO,KAAK,WAAW,MAAM,WAAW;AAAA,YAC1D;AAAA,UACF,OAAO;AACL,gBAAI,YAAY,SAAS,GAAG;AAC1B,qBAAO,GAAG,MAAM,WAAW;AAAA,YAC7B;AACA,gBAAI,cAAc,SAAS,GAAG;AAC5B,qBAAO,KAAK,MAAM,WAAW;AAAA,YAC/B;AAAA,UACF;AAEA,iBAAO;AAAA,YACL,8BAAuB,IAAI,GAC3B,YAAY,iBAAiB,SAAS,KAAK,EAAE,KAC7C,YAAY,MAAM,aAAa,cAAc,MAAM;AAAA,UACrD;AAAA,QACF;AAAA,MACF;AAAA,MAEO,+BAA+B;AACpC,cAAM,SAAS,KAAK,WAAW;AAE/B,mBAAW;AAAA,UACX;AAAA,UACA,EAAE,MAAM,cAAc,UAAU;AAAA,QAAC,KACjC,KAAK,aAAa,QAAQ,GAAG;AAC3B,cAAI,cAAc;AAChB,gBAAI,WAAW;AACb,mBAAK,WAAW,OAAO,IAAI,WAAW,MAAM,aAAa,OAAO;AAAA,YAClE,OAAO;AACL,qBAAO,IAAI,MAAM,aAAa,OAAO;AAAA,YACvC;AAAA,UACF,OAAO;AACL,gBAAI,WAAW;AACb,mBAAK,WAAW,OAAO,mBAAmB,WAAW,IAAI;AAAA,YAC3D,OAAO;AACL,qBAAO,mBAAmB,IAAI;AAAA,YAChC;AAAA,UACF;AAEA,eAAK,aAAa,OAAO,GAAG;AAE5B,iBAAO;AAAA,YACL,sCAA0B,IAAI,GAC9B,YAAY,iBAAiB,SAAS,KAAK,EAAE;AAAA,UAE/C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAvQ8B;AAAvB,IAAM,mBAAN;AAAA;AAAA;;;ACrBA,SAAS,MAAM,SAAc;AAClC,UAAQ,OAAO,MAAM,OAAO;AAC5B,UAAQ,OAAO,MAAM,IAAI;AAC3B;AAKO,SAAS,MAAM,SAAqB;AACzC,QAAM,eAAO,IAAI,UAAU,OAAO,EAAE,CAAC;AACrC,UAAQ,KAAK,CAAC;AAChB;AAaA,eAAe,iBAAiB,QAAgB;AAC9C,QAAM,eAAe,gBAAgB,KAAK,MAAM;AAEhD,MAAI,CAAC,aAAc,QAAO;AAC1B,MAAI,QAAQ,SAAS,WAAY,QAAO;AAExC,QAAM,eAAe;AAErB,SAAO;AACT;AAIA,SAAS,uBAAuB;AAC9B,MAAI,eAAgB,QAAO;AAE3B,QAAM,YAAY;AAAA,IAChB,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,IACrB,YAAY;AAAA,IACZ,aAAa;AAAA,EACf;AAEA,aAAW,CAAC,UAAU,OAAO,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC3D,QAAI,gBAAAC,QAAG,eAAW,wBAAK,QAAQ,IAAI,GAAG,QAAQ,CAAC,GAAG;AAChD,uBAAiB;AACjB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,gBAAgB;AACnB,qBAAiB;AAAA,EACnB;AAEA,SAAO;AACT;AAEA,eAAsB,eAAe,GAAY;AAC/C,MAAI,GAAI,QAAO;AAEf,MAAI;AACF,SAAK,MAAM,OAAO,YAAY;AAAA,EAChC,SAASC,IAAG;AACV,QAAIA,cAAa,SAAS,UAAUA,MAAKA,GAAE,SAAS,oBAAoB;AACtE,UAAI;AACF,cAAMC,kBAAiB,qBAAqB;AAE5C,gDAAS,GAAGA,eAAc,mBAAmB;AAAA,UAC3C,OAAO;AAAA,UACP,KAAK,QAAQ,IAAI;AAAA,QACnB,CAAC;AAED,gBAAQ;AAAA,UACN,eAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AAEA,aAAK,MAAM,OAAO,YAAY;AAE9B,eAAO;AAAA,MACT,QAAQ;AACN;AAAA,UACE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,UAAMD,MAAK,8DAA8D;AAAA,EAC3E;AAEA,SAAO;AACT;AAEA,eAAsB,uBACtB,QACoC;AAClC,QAAM,aAAa,MAAM;AAEzB,QAAM,OAAO,MAAM,iBAAiB,MAAM;AAE1C,MAAI,QAAQ,IAAI;AACd,UAAM,EAAE,gBAAgB,IAAI;AAC5B,UAAM,MAAM,gBAAAD,QAAG,aAAa,QAAQ,MAAM;AAC1C,UAAM,EAAE,WAAW,IAAI,gBAAgB,KAAK;AAAA,MAC1C,iBAAiB;AAAA,QACf,QAAQ,GAAG,WAAW;AAAA,QACtB,QAAQ,GAAG,aAAa;AAAA,QACxB,kBAAkB,GAAG,qBAAqB;AAAA,MAC5C;AAAA,MACA,UAAU;AAAA,IACZ,CAAC;AAED,UAAM,kBAAkB,MAAM,qBAAqB;AAEnD,UAAM,cAAU,wBAAK,iBAAiB,gCAAgC;AAEtE,oBAAAA,QAAG,cAAc,SAAS,UAAU;AAEpC,aAAS;AAAA,EACX;AAKA,QAAM,SAAS,MAAM,OAAO,UAAU,MAAM,IAAI;AAAA,IAC9C,CAAC,SAAS,KAAK,WAAW;AAAA,EAC5B;AAEA,SAAO;AACT;AAEA,eAAe,aAAa,KAAa;AACvC,QAAM,SAAS,gBAAAA,QAAG,WAAW,GAAG;AAEhC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,mBAAmB,GAAG,EAAE;AAAA,EAC1C;AACF;AAMA,eAAsB,gBAAgB,OAAe,KAAa;AAChE,QAAM,mBAAe,wBAAK,QAAQ,IAAI,GAAG,KAAK;AAC9C,QAAM,iBAAa,wBAAK,QAAQ,IAAI,GAAG,GAAG;AAE1C,QAAM,cAAc,CAAC,aAAa;AAClC,QAAM,iBAAiB,YAAY,IAAI,CAACG,cAAS,wBAAK,cAAcA,KAAI,CAAC;AACzE,QAAM,kBAAkB,YAAY,IAAI,CAACA,cAAS,wBAAK,YAAYA,KAAI,CAAC;AAExE,aAAW,cAAc,gBAAgB;AACvC,QAAI,CAAC,gBAAAH,QAAG,WAAW,UAAU,GAAG;AAC9B;AAAA,IACF;AAGA,UAAM,iBAAiB,gBAAgB,eAAe,QAAQ,UAAU,CAAC;AAEzE,QAAI,CAAC,gBAAAA,QAAG,WAAW,cAAc,GAAG;AAClC,sBAAAA,QAAG,SAAS,MAAM,gBAAgB,EAAE,WAAW,KAAK,CAAC;AAAA,IACvD;AAEA,UAAM,gBAAAA,QAAG,SAAS,GAAG,YAAY,gBAAgB;AAAA,MAC/C,WAAW;AAAA,MACX,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;AAvLA,mBACAI,mBACAC,iBAIA,2BAEI,IAqCA;AA7CJ,IAAAC,eAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAC3B,IAAAF,oBAAqB;AACrB,IAAAC,kBAAe;AACf;AAEA;AACA,gCAAyB;AAIT;AAQA;AAgBD;AAaN;AAyBa;AAoCA;AAsCP;AAYO;AAAA;AAAA;;;AClJf,SAAS,uBAAuB,MAAc;AACnD,SAAO,kBAAkB,IAAI,CAAC,aAAS,wBAAK,MAAM,IAAI,CAAC;AACzD;AAEA,SAAS,eAAe,KAAa;AACnC,QAAM,YAAY,uBAAuB,GAAG;AAE5C,aAAW,YAAY,WAAW;AAChC,YAAI,4BAAW,QAAQ,GAAG;AACxB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,cAAc,QAAQ,KAAK,QAAQ;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAQA,eAAsB,eAAe,aAAa,QAAQ,IAAI,GAAG;AAC/D,MAAI,aAAc,QAAO;AACzB,QAAM,WAAW,eAAe,UAAU;AAC1C,MAAI,CAAC,SAAU,QAAO,UAAU;AAEhC,QAAM,SAAS,MAAM,uBAAuB,SAAS,IAAI;AAEzD,iBAAe;AAEf,SAAO;AACT;AA/CA,IAAAE,iBACAC,mBAIM,mBA0BF;AA/BJ;AAAA;AAAA;AAAA;AAAA,IAAAD,kBAA2B;AAC3B,IAAAC,oBAAqB;AACrB,IAAAC;AACA;AAEA,IAAM,oBAAoB;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAsB;AAGN;AAIP;AAeT,IAAI,eAAoD;AAMlC;AAAA;AAAA;;;ACpBf,SAAS,iBAAiBC,aAAwB;AACvD,MAAI,CAAC,kBAAmB;AAExB,UAAQ,GAAG,WAAW,OAAO,YAAY;AACvC,QAAI,OAAO,YAAY,YAAY,YAAY,KAAM;AAErD,UAAM,EAAE,OAAO,MAAAC,OAAM,GAAG,IAAI;AAC5B,QAAI,CAAC,MAAO;AAEZ,QAAI,QAAQ,IAAI,yBAAyB,QAAQ;AAC/C,aAAO,KAAK,uBAAuB,KAAK,GAAGA,QAAO,QAAQA,KAAI,KAAK,EAAE,EAAE;AAAA,IACzE;AAEA,QAAI,WAAW,OACb,YAAY,OACZ,UAAU;AAEZ,UAAM,WAA+B;AAAA,MACnC,SAAS;AACP,mBAAW;AAAA,MACb;AAAA,MACA,iBAAiB;AACf,oBAAY;AAAA,MACd;AAAA,MACA,MAAAA;AAAA,MACA;AAAA,IACF;AAEA,QAAI;AACF,YAAMD,YAAW,QAAQ,QAAQ,OAAO,KAAK,WAAW;AA9C9D;AAgDQ,YAAI,SAAU;AACd,gBAAM,YAAO,eAAP,gCAAoB,KAAK;AAAA,MACjC,CAAC;AAGD,UAAI,UAAW;AAEf,cAAQ,OAAO;AAAA,QACb,KAAK,aAAa;AAChB,UAAAA,YAAW,eAAe,eAAe;AACzC,oBAAU;AACV;AAAA,QACF,KAAK,aAAa;AAChB,UAAAA,YAAW,aAAa,aAAa;AACrC,oBAAU;AACV;AAAA,QACF,KAAK,aAAa;AAEhB,oBAAU;AACV;AAAA,QACF;AAEE;AAAA,MACJ;AAAA,IACF,UAAE;AAEA,UAAI,MAAM,QAAQ,MAAM;AACtB,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN;AAAA,UACA,SAAS,WAAW;AAAA,QACtB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAnFA;AAAA;AAAA;AAAA;AACA;AACA;AAegB;AAAA;AAAA;;;ACjBhB,wBAMa;AANb;AAAA;AAAA;AAAA;AAAA,yBAAyB;AAMlB,IAAM,2BAAN,MAAM,yBAAwB;AAAA,MAG5B,YAA4BE,aAAwB;AAAxB,0BAAAA;AAAA,MAAyB;AAAA,MAFpD,UAAU,IAAI,mBAAAC,QAAa;AAAA,MAI5B,GAAG,WAAmB;AAC3B,eAAO;AAAA,UACL,IAAI,KAAK,GAAG,KAAK,MAAM,SAAS;AAAA,UAChC,KAAK,KAAK,IAAI,KAAK,MAAM,SAAS;AAAA,UAClC,MAAM,KAAK,KAAK,KAAK,MAAM,SAAS;AAAA,UACpC,MAAM,KAAK,KAAK,KAAK,MAAM,SAAS;AAAA,UACpC,oBAAoB,KAAK,mBAAmB,KAAK,MAAM,SAAS;AAAA,QAClE;AAAA,MACF;AAAA,MAEO,GAAG,WAAmB,OAAe,UAA4B;AACtE,aAAK,QAAQ,GAAG,GAAG,SAAS,IAAI,KAAK,IAAI,QAAQ;AAAA,MACnD;AAAA,MAEO,IAAI,WAAmB,OAAe,UAA4B;AACvE,aAAK,QAAQ,IAAI,GAAG,SAAS,IAAI,KAAK,IAAI,QAAQ;AAAA,MACpD;AAAA,MAEO,KAAK,WAAmB,OAAe,UAA4B;AACxE,aAAK,QAAQ,KAAK,GAAG,SAAS,IAAI,KAAK,IAAI,QAAQ;AAAA,MACrD;AAAA,MAEO,KAAK,WAAmB,UAAkB,MAAa;AAC5D,eAAO,KAAK,QAAQ,KAAK,GAAG,SAAS,IAAI,KAAK,IAAI,GAAG,IAAI;AAAA,MAC3D;AAAA,MAIO,mBAAmB,WAAmB,OAAsB;AACjE,YAAI,OAAO;AACT,eAAK,QAAQ,mBAAmB,GAAG,SAAS,IAAI,KAAK,EAAE;AAAA,QACzD,OAAO;AACL,eAAK,QAAQ,mBAAmB,SAAS;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAxCqC;AAA9B,IAAM,0BAAN;AAAA;AAAA;;;AC6CA,SAAS,YAAyC,IAAa;AACpE,iBAAe,IAAI,EAAE;AACvB;AAcO,SAAS,uBAChB,IACO;AACL,8BAA4B,IAAI,EAAE;AACpC;AAvEA,IAAAC,qBAKAC,kBAEAC,mBAQAC,iBAaW,YAML,gBACA,6BAnCN,2HAyEa;AAzEb;AAAA;AAAA;AAAA;AAAA,IAAAH,sBAAyB;AAEzB;AACA;AACA;AACA,IAAAC,mBAAmD;AACnD;AACA,IAAAC,oBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAAC,kBAA8B;AAC9B;AACA;AACA;AACA;AAeA,IAAM,iBAAiB,oBAAI,IAAuB;AAClD,IAAM,8BAA8B,oBAAI,IAAuB;AAgB/C;AAgBA;AAMT,IAAM,cAAN,MAAM,oBAAmB,oBAAAC,QAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA6B3C,YAA6B,SAA4B;AACvD,YAAI,YAAW,UAAU;AACvB,kBAAQ;AAAA,YACN;AAAA,YACA;AAAA,cACE,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,YAAI,CAAC,QAAQ,QAAQ;AACnB,gBAAM,IAAI;AAAA,YACR,eAAO,IAAI,qDAAqD;AAAA,UAClE;AAAA,QACF;AAEA,cAAM;AAhBqB;AA7BxB;AACL,qCAAW;AACX,4BAAO;AAKP,4BAAgB,UAAkC;AAAA,UAChD,eAAe,wBAAO;AAAA,UACtB,yBAAyB,6BAAM,KAAN;AAAA,QAC3B;AAEA,4BAAgB,SAAQ,oBAAI,IAAiB;AAE7C,4BAAO;AACP,4BAAO;AACP,4BAAgB,kBAAiB,IAAI,kBAAkB,IAAI;AAC3D,4BAAgB,gBAAe,IAAI,iBAAiB,IAAI;AACxD,4BAAgB;AAChB,4BAAgB,UAAS,IAAI,wBAAwB,IAAI;AA4BvD,aAAK,UAAU,IAAI,wBAAwB,IAAI;AAE/C,YAAI,CAAC,YAAW,UAAU;AACxB,sBAAW,WAAW;AAAA,QACxB;AAGA,qBAAa,YAAW;AAExB,8BAAK,0CAAL;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAmCA,MAAM,MAAM,OAAwB;AAClC,YAAI,mBAAK,UAAU;AAEnB,YAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,gBAAM,IAAI;AAAA,YACR,eAAO,IAAI,gDAAgD;AAAA,UAC7D;AAAA,QACF;AAEA,aAAK,mBAAmB,IAAI,iBAAiB,KAAK,MAAM;AAExD,YAAI,mBAAmB;AACrB,cAAI;AACF,6BAAiB,IAAI;AAErB,kBAAM,qBAAqB;AAAA,UAC7B,SAAS,GAAG;AAEV,gBAAI,QAAQ,IAAI,0BAA0B;AACxC,qBAAO,MAAM,CAAC;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AAEA,cAAM,KAAK,YAAY;AAEvB,cAAM,sBAAK,gCAAL;AAEN,aAAK,eAAe,uBAAuB;AAC3C,aAAK,8BAA8B;AAEnC,YAAI,UAAU,SAAS,CAAC,KAAK,QAAQ,OAAO,QAAQ,GAAG;AACrD,eAAK,OAAO,KAAK,wBAAO,aAAa,YAAY;AAC/C,kBAAM,KAAK,eAAe,UAAU,SAAS;AAAA,UAC/C,CAAC;AAED,gBAAM,KAAK,QAAQ,QAAQ,CAAC,KAAK,WAAW;AAzMlD;AA0MQ,oBAAO,YAAO,wBAAP,gCAA6B;AAAA,UACtC,CAAC;AAED,gBAAM,WACN,SACA,KAAK,QAAQ,OAAO,SACpB,QAAQ,IAAI,SACZ,QAAQ,IAAI;AAEZ,gBAAM,KAAK,QAAQ,OAAO,MAAM,QAAQ;AAExC,gBAAM,KAAK,QAAQ,QAAQ,CAAC,KAAK,WAAW;AArNlD;AAsNQ,oBAAO,YAAO,uBAAP,gCAA4B;AAAA,UACrC,CAAC;AAAA,QACH,WAAW,KAAK,QAAQ,OAAO,QAAQ,GAAG;AACxC,gBAAM,KAAK,eAAe,UAAU,SAAS;AAAA,QAC/C;AAEA,2BAAK,UAAW;AAEhB,cAAM,sBAAK,qDAAL;AAAA,MACR;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,cAAc;AAClB,cAAM,SAAS,MAAM,eAAe;AACpC,cAAM,UAAU,OAAO,QAAQ,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAEvE,YAAI,CAAC,QAAQ,OAAQ;AAErB,mBAAW,UAAU,SAAS;AAC5B,gBAAM,KAAK,QAAQ,mBAAmB,MAAM;AAAA,QAC9C;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,UAAU;AACZ,eAAO,mBAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,kBACA,UACA;AACE,aAAK,OAAO,0BAA0B;AACtC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,iBAAiB,QAAgB;AAC/B,aAAK,OAAO,gBAAgB;AAC5B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,SAAS;AACX,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA;AAAA;AAAA;AAAA,MAyDA,MAAM,iBAAiB;AACrB,cAAM,KAAK,eAAe,eAAe;AAAA,MAC3C;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,eAAe;AACnB,cAAM,KAAK,aAAa,aAAa;AAAA,MACvC;AAAA;AAAA;AAAA;AAAA,MAKA,gCAAgC;AAC9B,aAAK,QAAQ,OAAO;AAAA,UAClB,KAAK,QAAQ,OAAO,gBAAgB,IAAI;AAAA,QAC1C;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,gCAAgC;AAC9B,aAAK,QAAQ,OAAO;AAAA,UAClB,KAAK,QAAQ,OAAO,gBAAgB,IAAI;AAAA,QAC1C;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,kBAAkB;AAChB,eAAO,iBAAiB;AAAA,MAC1B;AAAA,MAEA,QAAQ,IAA2B;AACjC,cAAMC,UAAS,KAAK,gBAAgB;AACpC,YAAI,CAACA,QAAQ,QAAO;AAEpB,gBAAQ,IAAI;AAAA,UACV,KAAK;AACH,uBAAO,wBAAKA,SAAQ,UAAU;AAAA,UAChC,KAAK;AACH,uBAAO,wBAAKA,SAAQ,QAAQ;AAAA,UAC9B;AACE,mBAAO;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAlTE;AADK;AA2DC,wBAAe,wCAAG;AACtB,iBAAW,QAAQ,gBAAgB;AACjC,YAAI;AACF,gBAAM,KAAK,IAAI;AAAA,QACjB,SAAS,GAAG;AACV,iBAAO,MAAM,0CAA0C,CAAC;AAAA,QAC1D,UAAE;AACA,yBAAe,OAAO,IAAI;AAAA,QAC5B;AAAA,MACF;AAGA,qBAAe,MAAM;AAAA,IACvB,GAbqB;AAef,mCAA0B,wCAAG;AACjC,iBAAW,QAAQ,6BAA6B;AAC9C,YAAI;AACF,gBAAM,KAAK,IAAI;AAAA,QACjB,SAAS,GAAG;AACV,iBAAO,MAAM,sDAAsD,CAAC;AAAA,QACtE,UAAE;AACA,sCAA4B,OAAO,IAAI;AAAA,QACzC;AAAA,MACF;AAEA,kCAA4B,MAAM;AAAA,IACpC,GAZgC;AA8H1B,cAAK,wCAAG;AACZ,YAAMA,UAAS,KAAK,gBAAgB;AACpC,UAAI,CAACA,QAAQ;AAEb,YAAM,eAAe,KAAK,QAAQ,UAAU;AAC5C,YAAM,SAAS,KAAK,QAAQ,QAAQ;AAEpC,WAAK,iBAAiB,IAAI,eAAe;AAAA,QACvC,YAAY;AAAA,MACd,CAAC;AAED,YAAM,KAAK,QAAQ,QAAQ,CAAC,KAAK,WAAW;AAC1C,eAAO,OAAO,qBAAqB,GAAG;AAAA,MACxC,CAAC;AAED,WAAK,eAAe,IAAI,aAAa;AAAA,QACnC,aAAa,CAAC,MAAM;AAAA,MACtB,CAAC;AAED,YAAM,KAAK,QAAQ,QAAQ,CAAC,KAAK,WAAW;AAC1C,eAAO,OAAO,mBAAmB,GAAG;AAAA,MACtC,CAAC;AAED,YAAM,sBAAK,sCAAL;AACN,YAAM,sBAAK,wCAAL;AAAA,IACR,GAzBW;AA2BL,sBAAa,wCAAG;AACpB,UAAI,KAAK,eAAe,YAAY,GAAG;AACrC,cAAM,SAAS,MAAM,KAAK,eAAe,KAAK;AAE9C,YAAI,mBAAmB;AACrB;AAAA,YACE;AAAA,YACA,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AAEA,YAAM,KAAK,eAAe,aAAa;AAEvC,WAAK,eAAe,YAAY;AAAA,IAClC,GAfmB;AAiBb,oBAAW,wCAAG;AAClB,UAAI,KAAK,aAAa,YAAY,GAAG;AACnC,cAAM,KAAK,aAAa,KAAK;AAAA,MAC/B;AAEA,YAAM,KAAK,aAAa,WAAW;AAAA,IACrC,GANiB;AApP0B;AAI3C,kBAJW,aAIY,iBAAgB;AACvC,kBALW,aAKY,YAAW;AAgBlC,kBArBW,aAqBJ;AArBF,IAAM,aAAN;AAAA;AAAA;;;ACzEP;AAAA;AAAA;AAAA;AAAA,IAQa;AARb;AAAA;AAAA;AAAA;AAQO,IAAM;AAAA,IAA2C;AAAA;AAAA;;;ACRjD,SAAS,OAAO,UAAU,OAAO;AACtC,QAAM,SAAS;AAAA,IACb,UAAU;AAAA,IACV,mBAAmB;AAAA,EACrB;AAEA,MAAI,QAAS,QAAO,OAAO,OAAO,CAAC,GAAG,MAAM;AAE5C,SAAO,OAAO,OAAO,CAAC,GAAG,QAAQ,KAAK,MAAM;AAC9C;AAEO,SAAS,QAAQ,UAAU,OAAO;AACvC,QAAM,SAAS;AAAA,IACb,UAAU;AAAA,IACV,mBAAmB;AAAA,EACrB;AAEA,MAAI,QAAS,QAAO,OAAO,OAAO,CAAC,GAAG,MAAM;AAE5C,SAAO,OAAO,OAAO,CAAC,GAAG,QAAQ,KAAK,MAAM;AAC9C;AApBA,IAsBa,gBACA,aACA,cAEA,gBAEA;AA5Bb;AAAA;AAAA;AAAA;AAAgB;AAWA;AAWT,IAAM,iBAAiB,CAAC,QAAQ,YAAY;AAC5C,IAAM,cAAc,CAAC,oBAAoB,wBAAwB;AACjE,IAAM,eAAe,CAAC,mBAAmB,uBAAuB;AAEhE,IAAM,iBAAiB,CAAC,GAAG,gBAAgB,GAAG,WAAW;AAEzD,IAAM,kBAAkB,CAAC,GAAG,gBAAgB,GAAG,YAAY;AAAA;AAAA;;;ACtBlE,SAAS,SAAS,kBAA2B;AAC3C,MAAI,kBAAkB;AACpB,WAAO,CAAC,QAAQ,QAAQ,QAAQ,KAAK;AAAA,EACvC;AAEA,SAAO,CAAC,QAAQ,QAAQ,MAAM;AAChC;AAEO,SAAS,iBAChB,UACA,KACA,OACA;AAlBA;AAmBE,MAAI,KAAC,gCAAW,wBAAK,KAAK,QAAQ,CAAC,GAAG;AACpC,UAAM,yCAAyC,QAAQ,EAAE;AAAA,EAC3D;AAEA,QAAM,QAAQ,SAAS,KAAK;AAE5B,QAAM,SAAK;AAAA,IACT;AAAA,IACA;AAAA,MACA,uBAAuB,QAAQ,gBAAgB,YAAY;AAAA,MAC3D;AAAA,MACA;AAAA,IAAQ;AAAA,IAER;AAAA,MACE;AAAA,MACA,aAAa;AAAA,MACb,KAAK,QAAQ,OAAO,IAAI,QAAQ;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,WAAG,WAAH,mBAAW,KAAK,QAAQ;AACxB,WAAG,WAAH,mBAAW,KAAK,QAAQ;AAExB,SAAO;AACT;AA5CA,IAAAC,4BAEAC,mBACAC;AAHA;AAAA;AAAA;AAAA;AAAA,IAAAF,6BAA8B;AAC9B;AACA,IAAAC,oBAAqB;AACrB,IAAAC,kBAA2B;AAC3B,IAAAC;AAES;AAQO;AAAA;AAAA;;;ACJhB,SAAS,iBACTC,KACA,YACA,KACS;AACP,QAAM,cAAcA,IAAG;AAAA,IACrB,WAAW;AAAA,IACX;AAAA,EACF;AAEA,MAAI,CAAC,WAAW,MAAM;AACpB,WAAO,GAAG,eAAO,IAAI,OAAO,CAAC,KAAK,WAAW;AAAA,EAC/C;AAEA,QAAM,EAAE,MAAM,UAAU,IAAIA,IAAG;AAAA,IAC7B,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AACA,QAAM,eAAW,4BAAS,KAAK,WAAW,KAAK,QAAQ;AACvD,QAAM,WAAW,GAAG,OAAO,CAAC,IAAI,YAAY,CAAC;AAC7C,QAAM,YAAY,WAAW,OAAO,KAAK,WAAW,IAAI,KAAK;AAG7D,SAAO;AAAA,IACP,GAAG,eAAO,KAAK,eAAO,KAAK,QAAQ,CAAC,CAAC,IAAI,eAAO,KAAK,eAAO,OAAO,QAAQ,CAAC,CAAC,MAAM,eAAO,IAAI,OAAO,CAAC,IAAI,eAAO,KAAK,SAAS,CAAC;AAAA,IAChI,GAAG,WAAW;AAAA,EAAE,EAChB,KAAK,IAAI;AACX;AAMA,eAAsB,iBAAiBC,OAAc;AACnD,QAAM,mBAAe,wBAAKA,OAAM,eAAe;AAE/C,MAAI,KAAC,4BAAW,YAAY,EAAG;AAE/B,QAAMD,MAAK,MAAM,eAAe,gBAAgB;AAGhD,QAAM,aAAa;AAAA,IACjB,sBAAsB,wBAACC,UAAiBA,OAAlB;AAAA,IACtB,qBAAqBD,IAAG,IAAI;AAAA,IAC5B,YAAY,6BAAMA,IAAG,IAAI,SAAb;AAAA,EACd;AAGA,QAAM,aAAaA,IAAG,eAAe,cAAcA,IAAG,IAAI,QAAQ;AAElE,MAAI,WAAW,OAAO;AACpB,YAAQ;AAAA,MACN,eAAO;AAAA,QACL,gCAAgCA,IAAG,iBAAiB,WAAW,OAAO,UAAU,CAAC;AAAA,MACnF;AAAA,IACF;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,eAAeA,IAAG;AAAA,IACtB,WAAW;AAAA,IACXA,IAAG;AAAA,IACHC;AAAA,EACF;AAGA,eAAa,QAAQ,SAAS;AAG9B,QAAM,UAAUD,IAAG,cAAc;AAAA,IAC/B,WAAW,aAAa;AAAA,IACxB,SAAS,aAAa;AAAA,IACtB,mBAAmB,aAAa;AAAA,EAClC,CAAC;AAGD,QAAM,cAAc;AAAA,IACpB,GAAG,QAAQ,sBAAsB;AAAA,IACjC,GAAG,QAAQ,qBAAqB;AAAA,IAChC,GAAG,QAAQ,wBAAwB;AAAA,IACnC,GAAG,QAAQ,uBAAuB;AAAA,EAAC;AAInC,MAAI,YAAY,SAAS,GAAG;AAC1B,YAAQ,IAAI,EAAE;AACd,YAAQ;AAAA,MACN,eAAO;AAAA,QACL,eAAO,IAAI,iDAAiD;AAAA,MAC9D;AAAA,IACF;AACA,YAAQ,IAAI,EAAE;AAGd,UAAM,SAAS,oBAAI,IAA+C;AAElE,eAAW,cAAc,aAAa;AACpC,YAAM,WAAW,WAAW,OAAO,WAAW,KAAK,WAAW;AAC9D,UAAI,CAAC,OAAO,IAAI,QAAQ,GAAG;AACzB,eAAO,IAAI,UAAU,CAAC,CAAC;AAAA,MACzB;AACA,aAAO,IAAI,QAAQ,EAAG,KAAK,UAAU;AAAA,IACvC;AAGA,UAAM,cAAc,YAAY;AAChC,QAAI,UAAU;AAEd,eAAW,CAAC,GAAG,SAAS,KAAK,QAAQ;AACnC,iBAAW,cAAc,WAAW;AAClC;AACA,gBAAQ,IAAI,iBAAiBA,KAAI,YAAYC,KAAI,CAAC;AAElD,YAAI,UAAU,aAAa;AACzB,kBAAQ,IAAI,EAAE;AAAA,QAChB;AAAA,MACF;AAAA,IACF;AAEA,YAAQ,IAAI,EAAE;AACd,YAAQ;AAAA,MACN,eAAO;AAAA,QACL,eAAO,IAAI,SAAS,WAAW,SAAS,cAAc,IAAI,MAAM,EAAE,EAAE;AAAA,MACtE;AAAA,IACF;AACA,YAAQ,IAAI,EAAE;AAEd,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAI,eAAO,MAAM,8CAAyC,CAAC;AACrE;AA9IA,IAAAC,iBAEAC,mBAGM;AALN;AAAA;AAAA;AAAA;AAAA,IAAAD,kBAA2B;AAC3B,IAAAE;AACA,IAAAD,oBAA+B;AAC/B;AAEA,IAAM,mBAAmB;AAKhB;AAiCa;AAAA;AAAA;;;ACrBtB,eAAsB,iBAAiB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AA3B5B;AA4BE,QAAM,SAAS,MAAM,eAAe,UAAU;AAE9C,MAAI,CAAC,SAAS,GAAC,sCAAQ,eAAR,mBAAoB,oBAAmB;AACpD,UAAM,iBAAiB,cAAc,QAAQ,IAAI,CAAC;AAAA,EACpD;AAEA,QAAM,gBAAgB,IAAI;AAAA,IACvB,WAAW,CAAC;AAAA,EACf;AACA,QAAM,oBAA2B,cAAc,QAAQ,IACvD,CAAC,IACD,CAAC,cAAc,gBAAgB,CAAC;AAEhC,MAAI,iDAAgB,QAAQ;AAC1B,sBAAkB,KAAK,GAAG,eAAe,IAAI,iBAAiB,CAAC;AAAA,EACjE;AAEA,MAAI;AACF,UAAM,OAAO,QAAQ,gBAAgB,OAAO;AAG5C,cAAM,uBAAO,IAAI;AAEjB,cAAM,mBAAM;AAAA,MACV,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,QAAQ;AAAA,QACN,IAAI,CAAC,QACL,6DACA;AAAA,MACF;AAAA,MACA,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,CAAC,KAAK;AAAA,MACd,OAAO;AAAA,MACP,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,gBAAgB,wBAAC,YAAY;AAC3B,gBAAQ,MAAM;AACd,gBAAQ,kBAAkB;AAE1B,eAAO;AAAA,MACT,GALgB;AAAA,MAMhB,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,QAAQ,CAAC,CAAC;AAAA,MACV,WAAW;AAAA,MACX,uBAAuB;AAAA,MACvB,MAAM;AAAA,MACN,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,KAAM,QAAQ,OAAO,IAAI,IAAI,QAAQ,IAAI;AAAA,MACzC,OAAO;AAAA,QACP;AAAA,QACA,IAAI,OAAO,OAAO;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,MAAc;AAAA,IAEhB,CAAC;AAED,UAAM,gBAAgB,OAAO,IAAI;AACjC,UAAM,gBAAgB,cAAc,QAAQ,IAAI,GAAG,CAAC,CAAC,OAAO,OAAO,OAAO;AAAA,EAC5E,SAAS,OAAO;AACd,YAAQ,MAAM,iBAAiB,KAAK;AACpC,QAAI,iBAAiB,OAAO;AAC1B,cAAQ,MAAM,kBAAkB,MAAM,KAAK;AAAA,IAC7C;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB,UAAE;AAEA,UAAM,cAAc,QAAQ;AAAA,EAC9B;AACF;AAiDA,eAAe,gBACf,YACA,OACA,SACA;AACE,QAAM,OAAO;AAAA,EACb,QAAQ;AAAA;AAAA;AAAA,EAAoC,gBAAgB,CAAC,UAAU,KAAK,GAAG,iBAAiB,aAAa,CAAC,CAAC;AAAA;AAAA,IAAS,gBAAgB,CAAC,UAAU,KAAK,GAAG,aAAa,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkB1K,QAAM,OAAO,QAAQ,gBAAgB,WAAW;AAEhD,YAAM,gCAAU,yBAAK,YAAY,MAAM,UAAU,GAAG,IAAI;AAC1D;AAnLA,iBAOAE,kBACAC,oBAEAC,gBA+FM,WAUA,eAiBA,iBAiBA;AArJN;AAAA;AAAA;AAAA;AAAA,kBAAsB;AACtB;AAKA;AACA,IAAAF,mBAA0B;AAC1B,IAAAC,qBAAqB;AACrB;AACA,IAAAC,iBAAuB;AACvB;AACA,IAAAC;AAUsB;AAmFtB,IAAM,YAAY,wBAAC,QAAiB;AAAA,iBACnB,MAAM,iBAAiB,iBAAiB,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GADtE;AAUlB,IAAM,gBAAgB;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAA0C,EAC1C,KAAK,IAAI;AAET,IAAM,kBAAkB;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAA0C,EAC1C,KAAK,IAAI;AAET,IAAM,kBAAkB,wBAAC,SACzB;AAAA,EAA0B,KAAK,KAAK,MAAM,CAAC;AAAA,QADnB;AAGT;AAAA;AAAA;;;ACxJf;AAAA;AAAA;AAAA;AAaA,eAAe,cAAc,YAAoB,YAAY,OAAO;AAClE,QAAM,SAAS,MAAM,eAAe,UAAU;AAC9C,QAAM,eAAW,mBAAK,eAAe,UAAU;AAE/C,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA,OAAO;AAAA,IACP,SAAS,OAAO,QAAQ,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;AAAA,IACjE,gBAAgB,OAAO;AAAA,EACzB,CAAC;AAED,MAAI,UAAW,QAAO;AAEtB,QAAM,KAAK,iBAAiB,UAAU,YAAY,IAAI;AAEtD,SAAO;AACT;AAQA,eAAsB,2BAA2B,YAAqB;AACpE,UAAQ,IAAI,4BAA4B;AACxC,QAAM,QAAQ,YAAY,IAAI;AAC9B,QAAM,MAAM,cAAc,QAAQ,IAAI;AACtC,QAAM,cAAc,uBAAuB,GAAG;AAE9C,QAAM,cAAU,uBAAM,KAAC,mBAAK,KAAK,KAAK,GAAG,GAAG,WAAW,GAAG;AAAA,IACxD,eAAe;AAAA,EACjB,CAAC;AAED,MAAI,KAA0B;AAE9B,QAAM,wBAAwB,wBAAC,cAAwC;AACrE,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAI,CAAC,GAAI,QAAO,QAAQ,KAAK;AAE7B,UAAI,WAAW;AACf,YAAM,YAAY,wBAAC,YAAiB;AAClC,mBAAW;AACX,YAAI,OAAO,YAAY,YAAY,YAAY,KAAM;AAErD,cAAM,EAAE,MAAM,IAAI,QAAQ,IAAI;AAC9B,YAAI,SAAS,wBAAwB,OAAO,WAAW;AACrD,mCAAI,IAAI,WAAW;AACnB,kBAAQ,CAAC,CAAC,OAAO;AAAA,QACnB;AAAA,MACF,GATkB;AAWlB,SAAG,KAAK,WAAW,SAAS;AAE5B,UAAI,CAAC,UAAU;AACb,6BAAAC,YAAM,GAAI,EAAE,KAAK,MAAM;AACrB,mCAAI,IAAI,WAAW;AACnB,kBAAQ,KAAK;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH,GAzB8B;AA2B9B,QAAM,eAAe,8BACrB,OACAC,UACsB;AACpB,QAAI,CAAC,MAAM,CAAC,GAAG,KAAM,QAAO;AAE5B,UAAM,gBAAY,gCAAW;AAC7B,UAAM,iBAAiB,sBAAsB,SAAS;AAEtD,OAAG,KAAK,EAAE,OAAO,MAAAA,OAAM,IAAI,UAAU,CAAC;AAGtC,QAAI;AACF,UAAI,YAAY;AAChB,YAAM,MAAM,CAAC,CAAE,MAAM,QAAQ;AAAA,QAAK;AAAA,UAClC;AAAA,cACA,iBAAAD,YAAM,GAAI,EAAE,KAAK,MAAM;AACrB,gBAAI,CAAC,WAAW;AACd,sBAAQ;AAAA,gBACN,eAAO;AAAA,kBACL,0CAA0C,KAAK,YAAYC,KAAI;AAAA,gBACjE;AAAA,cACF;AAAA,YACF;AACA,mBAAO;AAAA,UACT,CAAC;AAAA,QAAC;AAAA,MACF;AAEA,kBAAY;AAEZ,aAAO;AAAA,IACT,SAAS,OAAO;AACd,cAAQ;AAAA,QACN,eAAO,IAAI,yCAAyC,KAAK,EAAE;AAAA,MAC7D;AACA,aAAO;AAAA,IACT;AAAA,EACF,GArCqB;AAuCrB,QAAM,aAAa,SAAS,OAAOA,UAAoC;AACrE,QAAI,CAACA,SAAQ,CAAC,GAAI,QAAO;AAEzB,QAAI,YAAiC;AACrC,QAAI,mBAAmB;AAEvB,QAAI,gBAAgBA,KAAI,GAAG;AACzB,kBAAY,aAAa;AACzB,yBAAmB;AAAA,IACrB,WAAW,cAAcA,KAAI,GAAG;AAC9B,kBAAY,aAAa;AACzB,yBAAmB;AAAA,IACrB,OAAO;AACL,kBAAY,aAAa;AACzB,yBAAmB;AAAA,IACrB;AAEA,QAAI,WAAW;AACb,cAAQ;AAAA,QACN,GAAG,eAAO,WAAW,wBAAwB,gBAAgB,KAAK,CAAC,IAAI,eAAO,aAAaA,KAAI,CAAC;AAAA,MAClG;AAEA,YAAM,cAAc,KAAK,IAAI;AAC7B,YAAM,aAAa,MAAM,aAAa,WAAWA,KAAI;AAErD,UAAI,YAAY;AACd,gBAAQ;AAAA,UACN,GAAG,eAAO,YAAY,6BAA6B,gBAAgB,KAAK,CAAC,IAAI,eAAO,aAAaA,KAAI,CAAC;AAAA,QACxG;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAAG,GAAG;AAEN,QAAM,iBAAiB,wBAACA,UAAiB;AACvC,UAAM,WAAW,YAAY,KAAK,CAACC,gBAAeD,UAASC,WAAU;AAErE,QAAI,CAAC,SAAU,QAAO;AAEtB,YAAQ;AAAA,MACN,eAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAZuB;AAcvB,QAAM,aAAa,8BAAOD,UAAiB;AACzC,QAAI,eAAeA,KAAI,EAAG;AAC1B,UAAM,MAAM,MAAM,WAAWA,KAAI;AACjC,QAAI,IAAK;AAET,YAAQ;AAAA,MACN,GAAG,eAAO,aAAa,4DAAkD,CAAC,IAAI,eAAO,WAAWA,KAAI,CAAC;AAAA,IACvG;AAEA,6BAAI;AACJ,SAAK,MAAM,cAAc,GAAG;AAAA,EAC9B,GAXmB;AAanB,UAAQ,MAAM,GAAG,QAAQ,OAAO,MAAM;AACpC,UAAM,UAAU,EAAE,SAAS,EAAE,KAAK;AAElC,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,gBAAQ,IAAI,yCAAyC;AACrD,iCAAI;AACJ,aAAK;AACL,aAAK,MAAM,cAAc,GAAG;AAC5B;AAAA,MACF,KAAK;AACH,gBAAQ,IAAI,gDAAgD;AAC5D,cAAM,aAAa,aAAa,cAAc;AAC9C;AAAA,MACF,KAAK;AACH,gBAAQ,IAAI,8CAA8C;AAC1D,cAAM,aAAa,aAAa,YAAY;AAC5C;AACA;AAAA,IACJ;AAAA,EACF,CAAC;AAED,UAAQ,GAAG,UAAU,UAAU;AAC/B,UAAQ,GAAG,OAAO,UAAU;AAC5B,UAAQ,GAAG,UAAU,UAAU;AAC/B,UAAQ,GAAG,aAAa,UAAU;AAClC,UAAQ,GAAG,SAAS,CAAC,MAAM;AACzB,YAAQ,MAAM,CAAC;AAAA,EACjB,CAAC;AAED,OAAK,MAAM,cAAc,GAAG;AAE5B,QAAM,MAAM,YAAY,IAAI;AAE5B,UAAQ;AAAA,IACN,GAAG,eAAO,YAAY,+BAA+B,CAAC,IAAI,eAAO,aAAa,IAAI,MAAM,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC;AAAA,EAChH,eAAO,YAAY,yBAAyB,CAAC,IAAI,eAAO,aAAa,KAAK,CAAC,IAAI,eAAO,YAAY,WAAW,CAAC;AAAA;AAAA,EAE9G,eAAO,YAAY,WAAW,CAAC;AAAA,EAC/B,eAAO,aAAa,GAAG,CAAC;AAAA,EACxB,eAAO,aAAa,IAAI,CAAC;AAAA,EACzB,eAAO,aAAa,IAAI,CAAC;AAAA,EACzB;AACF;AA7NA,IAAAE,cAKA,iBAIAC,kBACAC,qBAqBM,iBAGA;AAlCN;AAAA;AAAA;AAAA;AAAA,IAAAF,eAAqB;AACrB;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AAEA,IAAAC,mBAAoC;AACpC,IAAAC,sBAA2B;AAC3B;AAEe;AAkBf,IAAM,kBAAkB,wBAAC,MACzB,EAAE,WAAW,MAAM,GAAG,EAAE,SAAS,kBAAkB,GAD3B;AAGxB,IAAM,gBAAgB,wBAAC,MACvB,EAAE,WAAW,MAAM,GAAG,EAAE,SAAS,gBAAgB,GAD3B;AAGA;AAAA;AAAA;;;ACjCtB,eAAsB,cAAc,MAA4B;AAC9D,MAAI,CAAC,KAAK;AACR,UAAM,MAAM,OAAO,KAAK;AAAA,EAC1B;AAEA,UAAQ,IAAI,WAAW,KAAK;AAAA,IAC1B;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AACH;AAbA,IAEI;AAFJ;AAAA;AAAA;AAAA;AAIsB;AAAA;AAAA;;;ACJtB;AAAA;AAAA;AAAA;AAAA;AASA,eAAsB,0BAA0B,YAAqB;AACnE,UAAQ,IAAI,4BAA4B;AACxC,QAAM,MAAM,cAAc,QAAQ,IAAI;AACtC,QAAM,SAAS,MAAM,eAAe,GAAG;AACvC,QAAM,eAAW,mBAAK,OAAO,SAAS,UAAU;AAEhD,MAAI,KAAC,sBAAW,QAAQ,GAAG;AACzB;AAAA,MACE;AAAA,IACF;AAAA,EACF;AAEA,SAAO,iBAAiB,UAAU,KAAK,KAAK;AAC9C;AAEA,eAAsB,sBAAsB,YAAqB;AAC/D,UAAQ,IAAI,4BAA4B;AACxC,QAAM,MAAM,cAAc,QAAQ,IAAI;AACtC,QAAM,SAAS,MAAM,eAAe,GAAG;AAEvC,QAAM,UAAU,MAAM;AAAA,IACpB;AAAA,EACF;AAEA,UAAQ,MAAM;AAEd,QAAM,iBAAiB;AAAA,IACrB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,SAAS,OAAO,QAAQ;AAAA,MAAO,CAAC,MAChC,iBAAiB,CAAC;AAAA,IAClB;AAAA,IACA,gBAAgB,OAAO;AAAA,EACzB,CAAC;AAED,UAAQ,QAAQ,6BAA6B;AAC/C;AA7CA,IAAAC,cAGA;AAHA;AAAA;AAAA;AAAA;AAAA,IAAAA,eAAqB;AACrB;AACA;AACA,gBAA2B;AAC3B,IAAAC;AACA;AACA;AACA;AAEsB;AAeA;AAAA;AAAA;;;ACxBtB;AAAA;AAAA;AAAA;AAAA;AAaA,SAAS,qBAAqB;AAC5B,aAAO,2BAAW,mBAAK,WAAW,eAAe,CAAC,IAAI,OAAO;AAC/D;AAEA,SAAS,kBAAkB,MAAc;AACvC,SAAO;AAAA;AAAA;AAAA,WAGE,IAAI;AAAA,kBACG,IAAI;AAAA;AAAA;AAAA;AAAA,4CAIsB,IAAI;AAAA;AAAA;AAAA;AAAA,wCAIR,IAAI;AAAA;AAAA;AAG5C;AAEA,SAAS,kBAAkB,MAAc;AACvC,SAAO;AAAA;AAAA;AAAA;AAAA,WAIE,IAAI;AAAA,kBACG,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAOsB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wCAOR,IAAI;AAAA;AAAA;AAG5C;AAEA,eAAsB,gBAAgB,MAAc,YAAqB;AACvE,QAAM,cAAU,mBAAK,cAAc,YAAY;AAC/C,MAAI,KAAC,uBAAW,OAAO,EAAG,WAAM,wBAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AAElE,QAAM,MAAM,mBAAmB;AAC/B,QAAM,eAAe,QAAQ;AAE7B,QAAM,WAAW,GAAG,IAAI,IAAI,GAAG;AAE/B,UAAI,2BAAW,mBAAK,SAAS,QAAQ,CAAC,GAAG;AACvC,UAAM,WAAW,IAAI,kBAAkB;AAAA,EACzC;AAEA,QAAM,cAAc,eACpB,kBAAkB,IAAI,IACtB,kBAAkB,IAAI;AAEtB,YAAM,gCAAU,mBAAK,SAAS,QAAQ,GAAG,WAAW;AAEpD,UAAQ;AAAA,IACN,eAAO;AAAA,MACL,WAAW,eAAO,QAAQ,IAAI,CAAC,eAAe,eAAO,KAAK,WAAW,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC;AAAA,IACjG;AAAA,EACF;AACF;AAEA,eAAsB,cAAc,MAAc,YAAqB;AACrE,QAAM,gBAAY,mBAAK,cAAc,YAAY,IAAI;AACrD,MAAI,KAAC,uBAAW,SAAS,EAAG,WAAM,wBAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAEtE,QAAM,MAAM,mBAAmB;AAE/B,MAAI,WAAW,SAAS,GAAG;AAE3B,UAAI,2BAAW,mBAAK,WAAW,QAAQ,CAAC,GAAG;AACzC,UAAM,SAAS,UAAM,0BAAQ,SAAS,GAAG;AACzC,eAAW,GAAG,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,QAAQ;AAAA,EAC1D;AAEA,QAAM,YAAY;AAAA,kCACc,KAAK,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC;AAAA,iBACtD,IAAI;AAAA;AAAA,EAEnB,KAAK;AAEL,YAAM,gCAAU,mBAAK,WAAW,QAAQ,GAAG,SAAS;AAEpD,UAAQ;AAAA,IACN,eAAO;AAAA,MACL,SAAS,eAAO,QAAQ,IAAI,CAAC,eAAe,eAAO,KAAK,WAAW,SAAS,CAAC,CAAC,IAAI,eAAO,QAAQ,QAAQ,CAAC;AAAA,IAC5G;AAAA,EACF;AACF;AAhHA,IAAAC,kBACAC,cAEAC,YAGM,WACA,cACA,YAEA;AAVN;AAAA;AAAA;AAAA;AAAA,IAAAF,mBAA0C;AAC1C,IAAAC,eAAqB;AACrB,IAAAE;AACA,IAAAD,aAA2B;AAC3B;AAEA,IAAM,YAAY,QAAQ,IAAI;AAC9B,IAAM,mBAAe,mBAAK,WAAW,kBAAkB;AACvD,IAAM,iBAAa,mBAAK,WAAW,gBAAgB;AAEnD,IAAM,aAAa,wBAACE,UACpBA,MAAK,QAAQ,QAAQ,IAAI,GAAG,GAAG,EAAE,QAAQ,OAAO,GAAG,GADhC;AAGV;AAIA;AAkBA;AAyBa;AA0BA;AAAA;AAAA;;;ACtFtB;AAAA;AAAA;AAAA;AAmDA,SAAS,mBAAmB,aAAqB;AAC/C,MAAI;AACF,UAAM,kBAAkB,QAAQ,QAAQ,GAAG,WAAW,eAAe;AACrE,UAAM,cAAc,QAAQ,eAAe;AAC3C,WAAO,YAAY;AAAA,EACrB,SAAS,GAAG;AACV,QAAI;AACF,YAAM,YAAY;AAAA,QAClB,mBAAAC,QAAK,KAAK,QAAQ,IAAI,GAAG,gBAAgB,WAAW;AAAA,QACpD,mBAAAA,QAAK,KAAK,QAAQ,IAAI,GAAG,MAAM,MAAM,gBAAgB,WAAW;AAAA,QAChE,mBAAAA,QAAK,KAAK,QAAQ,IAAI,GAAG,MAAM,MAAM,SAAS,WAAW;AAAA,QACzD,mBAAAA,QAAK;AAAA,UACH,QAAQ,IAAI;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MAAC;AAGD,iBAAW,YAAY,WAAW;AAChC,cAAM,kBAAkB,mBAAAA,QAAK,KAAK,UAAU,cAAc;AAC1D,YAAI,iBAAAC,QAAG,WAAW,eAAe,GAAG;AAClC,gBAAM,cAAc,KAAK;AAAA,YACvB,iBAAAA,QAAG,aAAa,iBAAiB,MAAM;AAAA,UACzC;AACA,iBAAO,YAAY;AAAA,QACrB;AAAA,MACF;AAEA,YAAM,kBAAkB,mBAAAD,QAAK;AAAA,QAC3B,QAAQ,IAAI;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,iBAAAC,QAAG,WAAW,eAAe,GAAG;AAClC,cAAM,UAAU,iBAAAA,QAAG,YAAY,eAAe;AAC9C,cAAM,gBAAgB,QAAQ;AAAA,UAAK,CAAC,WACpC,OAAO,WAAW,GAAG,YAAY,QAAQ,KAAK,GAAG,CAAC,GAAG;AAAA,QACrD;AAEA,YAAI,eAAe;AACjB,gBAAM,kBAAkB,mBAAAD,QAAK;AAAA,YAC3B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,cAAI,iBAAAC,QAAG,WAAW,eAAe,GAAG;AAClC,kBAAM,cAAc,KAAK;AAAA,cACvB,iBAAAA,QAAG,aAAa,iBAAiB,MAAM;AAAA,YACzC;AACA,mBAAO,YAAY;AAAA,UACrB;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,QAAgB;AACxC,MAAI;AACF,UAAMC,eAAU,qCAAS,GAAG,MAAM,YAAY,EAAE,SAAS,EAAE,KAAK;AAChE,WAAOA;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,kBAAkB;AACtC,QAAM,eAAuB,MAAM;AAEjC,QAAI,UAAU,cAAc,OAAO,SAAS,YAAa,QAAO;AAEhE,QAAI,SAAS,cAAc,OAAO,QAAQ,YAAa,QAAO;AAE9D,WAAO;AAAA,EACT,GAAG;AAEH,QAAM,OAAO;AAAA,IACX,oBAAoB;AAAA,MAClB,UAAU,QAAQ;AAAA,MAClB,MAAM,QAAQ;AAAA,MACd,SAAS,eAAAC,QAAG,QAAQ;AAAA,MACpB,yBAAyB,KAAK,MAAM,eAAAA,QAAG,SAAS,IAAI,OAAO,IAAI;AAAA,MAC/D,uBAAuB,eAAAA,QAAG,KAAK,EAAE;AAAA,IACnC;AAAA,IACA,SAAS;AAAA,IACT,UAAU;AAAA,MACR,MAAM,QAAQ;AAAA,MACd,KAAK,iBAAiB,KAAK,KAAK;AAAA,MAChC,MAAM,iBAAiB,MAAM,KAAK;AAAA,MAClC,MAAM,iBAAiB,MAAM,KAAK;AAAA,MAClC,KAAK,iBAAiB,KAAK,KAAK;AAAA,MAChC,OAAO,iBAAiB,MAAM,KAAK,OAAO,QAAQ,UAAU,GAAG;AAAA,IACjE;AAAA,IACA,qBAAqB;AAAA,MACnB,YAAY;AAAA,MACZ,cAAc,mBAAmB,YAAY,KAAK;AAAA,MAClD,YAAY,mBAAmB,YAAY,KAAK;AAAA,MAChD,SAAS,mBAAmB,SAAS,KAAK;AAAA,MAC1C,MAAM,mBAAmB,MAAM,KAAK;AAAA,MACpC,GAAG,aAAa;AAAA,QACd,CAAC,KAAK,WAAW;AACf,cAAI,MAAM,IAAI,mBAAmB,MAAM,KAAK;AAC5C,iBAAO;AAAA,QACT;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,MAAI,SAAS;AAEb,aAAW,CAAC,SAAS,IAAI,KAAK,OAAO,QAAQ,IAAI,GAAG;AAClD,cAAU,GAAG,OAAO;AAAA;AAEpB,QAAI,OAAO,SAAS,UAAU;AAC5B,gBAAU,KAAK,IAAI;AAAA;AAAA;AACnB;AAAA,IACF;AAEA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC/C,gBAAU,KAAK,GAAG,KAAK,KAAK;AAAA;AAAA,IAC9B;AACA,cAAU;AAAA,EACZ;AAEA,UAAQ,IAAI,OAAO,KAAK,CAAC;AAC3B;AA5LA,oBACAC,4BAEAC,kBACAC,oBA6CM;AAjDN;AAAA;AAAA;AAAA;AAAA,qBAAe;AACf,IAAAF,6BAAyB;AACzB;AACA,IAAAC,mBAAe;AACf,IAAAC,qBAAiB;AA6CjB,IAAM;AAAA,IAA0D,CAAC,qBAAoB,wBAAuB,oBAAmB,sBAAqB,mBAAmB;AAE9J;AAoEA;AASa;AAAA;AAAA;;;AChItB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;;;ACRA;AAAA;AACA;AACA;AACA;AACA;;;ACJA;AAAA,IAAAC,mBAAqC;AAI9B,SAAS,gBAAgB,QAA0C;AACxE,SAAO,kBAAkB;AAC3B;AAFgB;AAIT,SAAS,oBAChB,QACwB;AACtB,SAAO,CAAC,gBAAgB,MAAM;AAChC;AAJgB;;;AFEhB;;;AGVA;;;AHYA;AACA;AAEA;AACA;AACA;AASA;AACA;;;AI3BA;AAAA,IAAAC,mBAA2B;AAC3B,IAAAC,mBAAsB;AACtB,IAAAC,qBAAqB;AACrB;AAOA,eAAsB,uBACtB,MACA,SACA;AACE,UAAQ,QAAQ;AAGhB,QAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,WAAW;AAC5C,QAAM,EAAE,4BAAAC,4BAA2B,IAAI,MAAM;AAC7C,QAAM,EAAE,2BAAAC,4BAA2B,uBAAAC,uBAAsB,IAAI,MAAM;AAGnE,QAAM,EAAE,iBAAAC,kBAAiB,eAAAC,eAAc,IAAI,MAAM;AACjD,QAAM,EAAE,SAAAC,SAAQ,IAAI,MAAM;AAC1B,QAAM,EAAE,iBAAAC,iBAAgB,IAAI,MAAM;AAElC,QAAM,UAAU,IAAI,QAAQ,YAAY;AAExC,UACA,QAAQ,KAAK,EACb,QAAQD,QAAO,EACf,YAAY,qCAAqC,EACjD;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,EACF,EACA,OAAO,MAAM;AACX,UAAME,WAAU,QAAQ,KAAK;AAC7B,IAAAP,4BAA2BO,SAAQ,MAAM;AAAA,EAC3C,CAAC;AAED,UACA,QAAQ,MAAM,EACd;AAAA,IACE;AAAA,EACF,EACA,OAAO,YAAY;AACjB,UAAMD,iBAAgB;AAAA,EACxB,CAAC;AAED,UACA,QAAQ,OAAO,EACf;AAAA,IACE;AAAA,EACF,EACA,OAAO,uBAAuB,sCAAsC,EACpE,OAAO,MAAM;AACX,UAAMC,WAAU,QAAQ,KAAK;AAC7B,IAAAN,2BAA0BM,SAAQ,MAAM;AAAA,EAC1C,CAAC;AAED,UACA,QAAQ,OAAO,EACf,YAAY,0CAA0C,EACtD,OAAO,uBAAuB,sCAAsC,EACpE,OAAO,MAAM;AACX,UAAMA,WAAU,QAAQ,KAAK;AAC7B,WAAOL,uBAAsBK,SAAQ,MAAM;AAAA,EAC7C,CAAC;AAED,UACA,QAAQ,QAAQ,EAChB,YAAY,qCAAqC,EACjD,OAAO,iBAAiB,sBAAsB,EAC9C,OAAO,eAAe,oBAAoB,EAC1C,SAAS,UAAU,kCAAkC,EACrD,OAAO,OAAO,MAAMA,aAAY;AAC9B,QAAIA,SAAQ,SAAS;AACnB,YAAMJ,iBAAgB,IAAI;AAAA,IAC5B,WAAWI,SAAQ,OAAO;AACxB,YAAMH,eAAc,IAAI;AAAA,IAC1B,OAAO;AACL,cAAQ,MAAM,qDAAqD;AAAA,IACrE;AAAA,EACF,CAAC;AAED,QAAM,YAAQ,yBAAK,QAAQ,IAAI,GAAG,gBAAgB,kBAAkB;AAEpE,MAAI,KAAC,6BAAW,KAAK,GAAG;AACtB,cAAM,wBAAM,OAAO,EAAE,WAAW,KAAK,CAAC,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AACtD,UAAM,qBAAqB,IAAI,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACjD;AAEA,QAAM,QAAQ,WAAW,MAAM,OAAO;AACxC;AArFsB;;;AJRtB,IAAO,gBAAQ;","names":["import_discord","myCustomId","import_discord","import_discord","_contextData","_unsub","getEventInterceptor_fn","destroyCollector_fn","import_discord","import_discord","_contextData","_unsub","getEventInterceptor_fn","setupCollector_fn","destroyCollector_fn","import_discord","_onSelectHandler","_contextData","_unsub","getEventInterceptor_fn","setupCollector_fn","destroyCollector_fn","import_discord","_onSelectHandler","_contextData","_unsub","getEventInterceptor_fn","setupCollector_fn","destroyCollector_fn","import_discord","_onSelectHandler","_contextData","_unsub","getEventInterceptor_fn","setupCollector_fn","destroyCollector_fn","import_discord","_onSelectHandler","_contextData","_unsub","getEventInterceptor_fn","setupCollector_fn","destroyCollector_fn","import_discord","init_common","import_discord","init_common","import_discord","import_discord","init_common","import_discord","init_common","import_discord","import_discord","init_types","context","options","import_discord","commandkit","build","init_types","init_types","context","import_node_async_hooks","path","import_discord","import_discord","commandkit","prevented","preRegisterEvent","import_node_crypto","commandkit","context","CommandKitEnvironmentType","commandkit","import_discord","commandkit","env","ctx","import_promises","import_node_path","import_node_fs","import_discord","commandkit","_a","commandId","loadedCommand","import_discord","import_node_fs","import_promises","import_node_path","path","import_discord","import_node_fs","import_promises","import_node_path","path","import_discord","commandkit","fs","e","packageManager","path","import_node_path","import_node_fs","init_common","import_node_fs","import_node_path","init_common","commandkit","path","commandkit","EventEmitter","import_node_events","import_discord","import_node_path","import_node_fs","EventEmitter","appDir","import_node_child_process","import_node_path","import_node_fs","init_common","ts","path","import_node_fs","import_node_path","init_common","import_promises","import_node_path","import_rimraf","init_common","sleep","path","configPath","import_path","import_promises","import_node_crypto","import_path","init_common","import_promises","import_path","import_fs","init_common","path","path","fs","version","os","import_node_child_process","import_node_fs","import_node_path","import_discord","import_node_fs","import_promises","import_node_path","bootstrapDevelopmentServer","bootstrapProductionServer","createProductionBuild","generateCommand","generateEvent","version","showInformation","options"]}
|