commandkit 1.2.1-dev.20260414125348 → 1.2.1-dev.20260920033200
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/README.md +1 -1
- package/cache.cjs +2 -0
- package/cache.d.ts +1 -0
- package/dist/{ActionRow-Bt9qi0Mb.d.ts → ActionRow-DSh9roc5.d.ts} +2 -3
- package/dist/{Button-DxJLcZIU.d.ts → Button-BPsE5ju0.d.ts} +5 -6
- package/dist/{ButtonKit-BfcyvWfj.d.ts → ButtonKit-CNPmVg3h.d.ts} +2 -3
- package/dist/{ChannelSelectMenuKit-DYkudikb.d.ts → ChannelSelectMenuKit-CcOdaLQ6.d.ts} +3 -4
- package/dist/{CommandTree-DwfiCsOl.d.ts → CommandTree-qu-8oAEV.d.ts} +1 -1
- package/dist/{CommandsRouter-D-b3xv38.d.ts → CommandsRouter-Co225Ae5.d.ts} +24 -4
- package/dist/{EventInterceptor-D9JKMcfi.d.ts → EventInterceptor-wg378vJp.d.ts} +1 -2
- package/dist/{EventsRouter-Dyr_oJJD.d.ts → EventsRouter-Bt63ZuEF.d.ts} +21 -2
- package/dist/{MentionableSelectMenuKit-Mu4xqP6B.d.ts → MentionableSelectMenuKit-8_Nkgn_a.d.ts} +3 -4
- package/dist/{MessageCommandParser-UTKsRvb9.d.ts → MessageCommandParser-BYbxHOSK.d.ts} +1 -2
- package/dist/{Modal-v9rrcMl-.d.ts → Modal-DbWK6VmV.d.ts} +5 -6
- package/dist/{ModalKit-XJSM65SV.d.ts → ModalKit-CnmUVpw-.d.ts} +2 -3
- package/dist/{RoleSelectMenuKit-CCjcp3HY.d.ts → RoleSelectMenuKit-Bei7DHqD.d.ts} +3 -4
- package/dist/{SelectMenu-CY0vvoSu.d.ts → SelectMenu-Bce_PClo.d.ts} +8 -9
- package/dist/{StringSelectMenuKit-G5nBTicX.d.ts → StringSelectMenuKit-CBeB9HqT.d.ts} +3 -4
- package/dist/TreeArtifact-D6FZ5SVd.d.ts +27 -0
- package/dist/{UserSelectMenuKit-D3SO_fXA.d.ts → UserSelectMenuKit-DZmeZ_Tp.d.ts} +3 -4
- package/dist/analytics/analytics-engine.d.ts +1 -1
- package/dist/analytics/analytics-engine.js +1 -1
- package/dist/analytics/analytics-provider.d.ts +1 -1
- package/dist/analytics/constants.js +0 -1
- package/dist/analytics/constants.js.map +1 -1
- package/dist/analytics/utils.js +1 -1
- package/dist/{analytics-engine-BYA0ongA.d.ts → analytics-engine-Bz1p7ud3.d.ts} +51 -15
- package/dist/app/commands/AppCommandRunner.d.ts +1 -1
- package/dist/app/commands/AppCommandRunner.js +1 -1
- package/dist/app/commands/Context.d.ts +1 -1
- package/dist/app/commands/Context.js +1 -1
- package/dist/app/commands/MessageCommandParser.d.ts +1 -1
- package/dist/app/commands/MessageCommandParser.js +4 -1
- package/dist/app/commands/MessageCommandParser.js.map +1 -1
- package/dist/app/commands/helpers.d.ts +1 -1
- package/dist/app/commands/helpers.js +0 -1
- package/dist/app/commands/helpers.js.map +1 -1
- package/dist/app/events/EventWorkerContext.d.ts +3 -3
- package/dist/app/events/EventWorkerContext.js +0 -1
- package/dist/app/events/EventWorkerContext.js.map +1 -1
- package/dist/app/handlers/AppCommandHandler.d.ts +1 -1
- package/dist/app/handlers/AppCommandHandler.js +1 -1
- package/dist/app/handlers/AppEventsHandler.d.ts +1 -1
- package/dist/app/handlers/AppEventsHandler.js +1 -1
- package/dist/app/index.d.ts +5 -5
- package/dist/app/index.js +1 -1
- package/dist/app/interrupt/signals.d.ts +1 -1
- package/dist/app/interrupt/signals.js.map +1 -1
- package/dist/app/middlewares/permissions.d.ts +1 -2
- package/dist/app/middlewares/permissions.js +1 -1
- package/dist/app/register/CommandRegistrar.d.ts +1 -1
- package/dist/app/register/CommandRegistrar.js +1 -1
- package/dist/app/router/CommandTree.d.ts +1 -1
- package/dist/app/router/CommandsRouter.d.ts +2 -2
- package/dist/app/router/CommandsRouter.js +60 -1
- package/dist/app/router/CommandsRouter.js.map +1 -1
- package/dist/app/router/EventsRouter.d.ts +2 -2
- package/dist/app/router/EventsRouter.js +56 -3
- package/dist/app/router/EventsRouter.js.map +1 -1
- package/dist/app/router/TreeArtifact.d.ts +2 -0
- package/dist/app/router/TreeArtifact.js +87 -0
- package/dist/app/router/TreeArtifact.js.map +1 -0
- package/dist/app/router/index.d.ts +6 -4
- package/dist/app/router/index.js +8 -1
- package/dist/{checkbox-CvQGiyRe.d.ts → checkbox-DoR0Pcxm.d.ts} +2 -3
- package/dist/cli/app-process.d.ts +2 -4
- package/dist/cli/app-process.js +0 -1
- package/dist/cli/app-process.js.map +1 -1
- package/dist/cli/build.d.ts +4 -9
- package/dist/cli/build.js +30 -4
- package/dist/cli/build.js.map +1 -1
- package/dist/cli/common.d.ts +3 -6
- package/dist/cli/common.js +2 -2
- package/dist/cli/common.js.map +1 -1
- package/dist/cli/development.d.ts +4 -5
- package/dist/cli/development.js +11 -11
- package/dist/cli/development.js.map +1 -1
- package/dist/cli/env.js.map +1 -1
- package/dist/cli/generators.js +0 -1
- package/dist/cli/generators.js.map +1 -1
- package/dist/cli/information.js +4 -5
- package/dist/cli/information.js.map +1 -1
- package/dist/cli/init.d.ts +1 -3
- package/dist/cli/init.js +37 -12
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/production.d.ts +1 -3
- package/dist/cli/production.js +1 -2
- package/dist/cli/production.js.map +1 -1
- package/dist/cli/type-checker.js +0 -1
- package/dist/cli/type-checker.js.map +1 -1
- package/dist/cli/utils.d.ts +0 -1
- package/dist/cli/utils.js.map +1 -1
- package/dist/{commandkit-DTqT800J.js → commandkit-gJ4YjTy4.js} +165 -87
- package/dist/commandkit-gJ4YjTy4.js.map +1 -0
- package/dist/commandkit.d.ts +1 -1
- package/dist/commandkit.js +1 -1
- package/dist/{common-CCvvgnxi.d.ts → common-CIbPzguv.d.ts} +2 -3
- package/dist/components/common/EventInterceptor.d.ts +1 -1
- package/dist/components/common/EventInterceptor.js +1 -0
- package/dist/components/common/EventInterceptor.js.map +1 -1
- package/dist/components/common/element.d.ts +1 -1
- package/dist/components/common/element.js +1 -1
- package/dist/components/common/types.d.ts +1 -1
- package/dist/components/display/common.d.ts +0 -1
- package/dist/components/display/common.js +1 -1
- package/dist/components/display/container.d.ts +1 -1
- package/dist/components/display/container.js +1 -1
- package/dist/components/display/file.d.ts +1 -1
- package/dist/components/display/file.js +0 -1
- package/dist/components/display/file.js.map +1 -1
- package/dist/components/display/index.d.ts +9 -8
- package/dist/components/display/index.js +1 -1
- package/dist/components/display/label.d.ts +1 -1
- package/dist/components/display/label.js +1 -1
- package/dist/components/display/media-gallery.d.ts +1 -1
- package/dist/components/display/media-gallery.js +1 -1
- package/dist/components/display/poll.d.ts +1 -1
- package/dist/components/display/poll.js +4 -10
- package/dist/components/display/poll.js.map +1 -1
- package/dist/components/display/section.d.ts +1 -1
- package/dist/components/display/section.js +1 -1
- package/dist/components/display/separator.d.ts +1 -1
- package/dist/components/display/separator.js +0 -1
- package/dist/components/display/separator.js.map +1 -1
- package/dist/components/display/text-display.d.ts +1 -1
- package/dist/components/display/text-display.js +0 -1
- package/dist/components/display/text-display.js.map +1 -1
- package/dist/components/index.d.ts +25 -24
- package/dist/components/index.js +1 -1
- package/dist/components/interactive/action-row/ActionRow.d.ts +1 -1
- package/dist/components/interactive/action-row/ActionRow.js +0 -1
- package/dist/components/interactive/action-row/ActionRow.js.map +1 -1
- package/dist/components/interactive/button/Button.d.ts +1 -1
- package/dist/components/interactive/button/Button.js +1 -1
- package/dist/components/interactive/button/ButtonKit.d.ts +1 -1
- package/dist/components/interactive/button/ButtonKit.js +1 -1
- package/dist/components/interactive/checkbox/checkbox.d.ts +1 -1
- package/dist/components/interactive/checkbox/checkbox.js +1 -1
- package/dist/components/interactive/modal/Modal.d.ts +1 -1
- package/dist/components/interactive/modal/Modal.js +1 -1
- package/dist/components/interactive/modal/ModalKit.d.ts +1 -1
- package/dist/components/interactive/modal/ModalKit.js +1 -1
- package/dist/components/interactive/radio/radio.d.ts +1 -1
- package/dist/components/interactive/radio/radio.js +1 -1
- package/dist/components/interactive/select-menu/ChannelSelectMenuKit.d.ts +1 -1
- package/dist/components/interactive/select-menu/ChannelSelectMenuKit.js +1 -1
- package/dist/components/interactive/select-menu/MentionableSelectMenuKit.d.ts +1 -1
- package/dist/components/interactive/select-menu/MentionableSelectMenuKit.js +1 -1
- package/dist/components/interactive/select-menu/RoleSelectMenuKit.d.ts +1 -1
- package/dist/components/interactive/select-menu/RoleSelectMenuKit.js +1 -1
- package/dist/components/interactive/select-menu/SelectMenu.d.ts +1 -1
- package/dist/components/interactive/select-menu/SelectMenu.js +1 -1
- package/dist/components/interactive/select-menu/StringSelectMenuKit.d.ts +1 -1
- package/dist/components/interactive/select-menu/StringSelectMenuKit.js +1 -1
- package/dist/components/interactive/select-menu/UserSelectMenuKit.d.ts +1 -1
- package/dist/components/interactive/select-menu/UserSelectMenuKit.js +1 -1
- package/dist/components/interactive/select-menu/common.d.ts +1 -1
- package/dist/config/config.d.ts +1 -2
- package/dist/config/config.js +1 -1
- package/dist/config/default.d.ts +1 -2
- package/dist/config/default.js +1 -1
- package/dist/config/loader.d.ts +1 -2
- package/dist/config/loader.js +1 -1
- package/dist/config/types.d.ts +1 -1
- package/dist/config/utils.d.ts +1 -1
- package/dist/config/utils.js.map +1 -1
- package/dist/{constants-D_sgdBHy.d.ts → constants-B7AfnOFa.d.ts} +1 -1
- package/dist/{constants-GWSfiS4h.d.ts → constants-kWgE3L9F.d.ts} +15 -2
- package/dist/{container-B7Kmw__R.d.ts → container-NVgblXmw.d.ts} +1 -2
- package/dist/context/async-context.d.ts +1 -1
- package/dist/context/async-context.js +1 -1
- package/dist/context/environment.d.ts +1 -1
- package/dist/context/environment.js +1 -1
- package/dist/{element-DeLvTMfZ.d.ts → element-BMZYAAQ-.d.ts} +3 -4
- package/dist/events/CommandKitEventsChannel.d.ts +1 -1
- package/dist/events/CommandKitEventsChannel.js +3 -2
- package/dist/events/CommandKitEventsChannel.js.map +1 -1
- package/dist/{file-BP8aoN3A.d.ts → file-DYAmr697.d.ts} +1 -2
- package/dist/flags/FlagProvider.d.ts +1 -1
- package/dist/flags/FlagProvider.js +1 -0
- package/dist/flags/FlagProvider.js.map +1 -1
- package/dist/flags/feature-flags.d.ts +1 -1
- package/dist/flags/feature-flags.js +1 -1
- package/dist/flags/store.d.ts +1 -1
- package/dist/flags/store.js +0 -1
- package/dist/flags/store.js.map +1 -1
- package/dist/{helpers-C5jRrAM1.d.ts → helpers-vlnRvNJv.d.ts} +1 -2
- package/dist/index-CAFaKBs_.d.ts +8 -0
- package/dist/index-COt7nfC9.d.ts +2 -0
- package/dist/index-DvqHpiuh.d.ts +16 -0
- package/dist/index.d.ts +37 -34
- package/dist/index.js +9 -2
- package/dist/kv/constants.d.ts +1 -1
- package/dist/kv/constants.js.map +1 -1
- package/dist/kv/dotprops.js.map +1 -1
- package/dist/kv/kv.d.ts +0 -1
- package/dist/kv/kv.js +1 -1
- package/dist/kv/kv.js.map +1 -1
- package/dist/kv/serde.d.ts +1 -2
- package/dist/kv/serde.js +27 -27
- package/dist/kv/serde.js.map +1 -1
- package/dist/{label-CqHiBMXP.d.ts → label-DClaYktn.d.ts} +1 -2
- package/dist/logger/DefaultLogger.d.ts +0 -1
- package/dist/logger/DefaultLogger.js +1 -1
- package/dist/logger/Logger.d.ts +0 -1
- package/dist/logger/Logger.js +1 -1
- package/dist/logger/NoopLogger.d.ts +0 -1
- package/dist/logger/NoopLogger.js.map +1 -1
- package/dist/{media-gallery-hFfa57Kd.d.ts → media-gallery-z2Snzz-u.d.ts} +1 -2
- package/dist/plugins/CompilerPlugin.d.ts +1 -1
- package/dist/plugins/CompilerPlugin.js +2 -2
- package/dist/plugins/CompilerPlugin.js.map +1 -1
- package/dist/plugins/PluginCommon.d.ts +1 -1
- package/dist/plugins/PluginCommon.js +1 -1
- package/dist/plugins/PluginCommon.js.map +1 -1
- package/dist/plugins/RuntimePlugin.d.ts +1 -1
- package/dist/plugins/RuntimePlugin.js +2 -2
- package/dist/plugins/RuntimePlugin.js.map +1 -1
- package/dist/plugins/index.d.ts +1 -1
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.d.ts +1 -1
- package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.js +1 -1
- package/dist/plugins/plugin-runtime/CompilerPluginRuntime.d.ts +1 -1
- package/dist/plugins/plugin-runtime/CompilerPluginRuntime.js +1 -1
- package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.d.ts +1 -1
- package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.js +1 -1
- package/dist/plugins/plugin-runtime/builtin/MacroPlugin.d.ts +1 -2
- package/dist/plugins/plugin-runtime/builtin/MacroPlugin.js +1 -1
- package/dist/plugins/plugin-runtime/runtime.d.ts +1 -1
- package/dist/plugins/types.d.ts +1 -1
- package/dist/{poll-ElAd5Z2K.d.ts → poll-D2QDStsw.d.ts} +4 -14
- package/dist/{radio-Dcd4YIZx.d.ts → radio-CJH_N4lq.d.ts} +2 -3
- package/dist/{section-BqDLXlp3.d.ts → section-DrFBT5b-.d.ts} +1 -2
- package/dist/{separator-DSaCa1Tc.d.ts → separator-BVm3w6yd.d.ts} +1 -2
- package/dist/{signals-DVOXPkQK.d.ts → signals-DRMDrCOn.d.ts} +1 -1
- package/dist/{text-display-D-0dD7bR.d.ts → text-display-BG0nNqy3.d.ts} +1 -2
- package/dist/{types-DZy7U-Ld.d.ts → types-ur7SvktF.d.ts} +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/utils/colors.d.ts +1 -3
- package/dist/utils/colors.js +0 -1
- package/dist/utils/colors.js.map +1 -1
- package/dist/utils/constants.d.ts +2 -2
- package/dist/utils/constants.js +19 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/dev-hooks.d.ts +1 -1
- package/dist/utils/dev-hooks.js +1 -1
- package/dist/utils/error-codes.js +15 -0
- package/dist/utils/error-codes.js.map +1 -1
- package/dist/utils/resolve-file-url.js +2 -2
- package/dist/utils/resolve-file-url.js.map +1 -1
- package/dist/utils/types-package.d.ts +6 -2
- package/dist/utils/types-package.js +31 -38
- package/dist/utils/types-package.js.map +1 -1
- package/dist/utils/useful-stuff/async-queue.js.map +1 -1
- package/dist/utils/useful-stuff/mutex.js.map +1 -1
- package/dist/utils/useful-stuff/ratelimiter.js +4 -1
- package/dist/utils/useful-stuff/ratelimiter.js.map +1 -1
- package/dist/utils/useful-stuff/semaphore.js.map +1 -1
- package/dist/utils/utilities.js +1 -1
- package/dist/utils/warning.d.ts +1 -5
- package/dist/utils/warning.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +17 -17
- package/dist/commandkit-DTqT800J.js.map +0 -1
- package/dist/index-CQiOqvUC.d.ts +0 -1
- package/dist/index-CTLjHn5u.d.ts +0 -1
- package/dist/index-LKrIp3Oo.d.ts +0 -1
- /package/dist/{chunk-BE-pF4vm.js → rolldown-runtime-C_NdSu1c.js} +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_chunk = require('../../chunk-BE-pF4vm.js');
|
|
3
2
|
const require_utils_error_codes = require('../../utils/error-codes.js');
|
|
4
3
|
let discord_js = require("discord.js");
|
|
5
4
|
|
|
@@ -8,6 +7,9 @@ let discord_js = require("discord.js");
|
|
|
8
7
|
* Parses message content into structured command data with options and subcommands.
|
|
9
8
|
*/
|
|
10
9
|
var MessageCommandParser = class {
|
|
10
|
+
message;
|
|
11
|
+
prefix;
|
|
12
|
+
schema;
|
|
11
13
|
/**
|
|
12
14
|
* @private
|
|
13
15
|
* @internal
|
|
@@ -196,6 +198,7 @@ var MessageCommandParser = class {
|
|
|
196
198
|
* Provides typed access to message command options with methods similar to Discord.js interaction options.
|
|
197
199
|
*/
|
|
198
200
|
var MessageCommandOptions = class {
|
|
201
|
+
parser;
|
|
199
202
|
/**
|
|
200
203
|
* Creates a new message command options instance.
|
|
201
204
|
* @param parser - The message command parser instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageCommandParser.js","names":[],"sources":["../../../src/app/commands/MessageCommandParser.ts"],"sourcesContent":["import { Channel } from 'diagnostics_channel';\nimport {\n Message,\n ApplicationCommandOptionType,\n GuildMember,\n Attachment,\n User,\n Role,\n CommandInteractionOption,\n} from 'discord.js';\nimport {\n CommandKitErrorCodes,\n createCommandKitError,\n} from '../../utils/error-codes';\n\n/**\n * Represents a parsed message command with its components.\n */\nexport interface ParsedMessageCommand {\n command: string;\n options: { name: string; value: unknown }[];\n subcommand?: string;\n subcommandGroup?: string;\n fullRoute: string[];\n}\n\n/**\n * Schema defining the types of options for a message command.\n */\nexport type MessageCommandOptionsSchema = Record<\n string,\n ApplicationCommandOptionType\n>;\n\n/**\n * Parses message content into structured command data with options and subcommands.\n */\nexport class MessageCommandParser {\n /**\n * @private\n * @internal\n */\n #parsed: ParsedMessageCommand | null = null;\n\n /**\n * @private\n * @internal\n */\n #options: MessageCommandOptions | null = null;\n\n /**\n * @private\n * @internal\n */\n #args: string[] = [];\n\n /**\n * Creates a new message command parser.\n * @param message - The Discord message to parse\n * @param prefix - Array of valid command prefixes or a regular expression\n * @param schema - Function that returns the options schema for a command\n */\n public constructor(\n public message: Message,\n private prefix: string[] | RegExp,\n private schema: (command: string) => MessageCommandOptionsSchema,\n ) {}\n\n /**\n * Gets the parsed command arguments.\n * @returns Array of command arguments\n */\n public getArgs() {\n void this.parse();\n return this.#args;\n }\n\n /**\n * Gets the message command options object for easy access to typed option values.\n */\n public get options() {\n if (!this.#options) {\n this.#options = new MessageCommandOptions(this);\n }\n\n return this.#options;\n }\n\n /**\n * Gets a specific option value by name.\n * @param name - The option name\n * @returns The option value or undefined if not found\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 /**\n * Gets the main command name.\n * @returns The command name\n */\n public getCommand(): string {\n return this.parse().command;\n }\n\n /**\n * Gets the full command route as an array of segments.\n * @returns Array of command segments\n */\n public getFullRoute(): string[] {\n return this.parse().fullRoute;\n }\n\n /**\n * Gets the subcommand name if present.\n * @returns The subcommand name or undefined\n */\n public getSubcommand(): string | undefined {\n return this.parse().subcommand;\n }\n\n /**\n * Gets the subcommand group name if present.\n * @returns The subcommand group name or undefined\n */\n public getSubcommandGroup(): string | undefined {\n return this.parse().subcommandGroup;\n }\n\n /**\n * Gets the prefix used in the message.\n * @returns The matched prefix or undefined\n */\n public getPrefix() {\n if (this.prefix instanceof RegExp) {\n const match = this.message.content.match(this.prefix);\n return match?.[0];\n }\n\n for (const p of this.prefix) {\n if (this.message.content.startsWith(p)) {\n return p;\n }\n }\n }\n\n /**\n * Gets the full command including subcommand group and subcommand.\n * @returns The complete command string\n */\n public getFullCommand() {\n return this.getFullRoute().join(' ');\n }\n\n /**\n * Parses the message content into structured command data.\n * @returns The parsed command data\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 body = content.slice(prefix.length).trim();\n\n if (!body) {\n throw createCommandKitError(CommandKitErrorCodes.InvalidCommandPrefix);\n }\n\n const parts = body.split(' ');\n const commandToken = parts.shift();\n\n this.#args = parts;\n\n let command: string | undefined = '';\n let subcommandGroup: string | undefined;\n let subcommand: string | undefined;\n\n const fullRoute = commandToken?.split(':') ?? [];\n\n if (fullRoute.length) {\n command = fullRoute[0];\n\n if (fullRoute.length === 2) {\n subcommand = fullRoute[1];\n } else if (fullRoute.length >= 3) {\n subcommandGroup = fullRoute[1];\n subcommand = fullRoute[fullRoute.length - 1];\n }\n }\n\n const schema = this.schema(fullRoute.join(' ').trim());\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 fullRoute,\n };\n\n return this.#parsed;\n }\n}\n\n/**\n * Provides typed access to message command options with methods similar to Discord.js interaction options.\n */\nexport class MessageCommandOptions {\n /**\n * Creates a new message command options instance.\n * @param parser - The message command parser instance\n */\n public constructor(private parser: MessageCommandParser) {}\n\n /**\n * @private\n * @internal\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 /**\n * Gets a guild member from the command options.\n * @param name - The option name\n * @param required - Whether the option is required\n * @returns The guild member or null if not found\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 /**\n * Gets an attachment from the command options.\n * @param name - The option name\n * @param required - Whether the option is required\n * @returns The attachment or null if not found\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 /**\n * Gets a boolean value from the command options.\n * @param name - The option name\n * @param required - Whether the option is required\n * @returns The boolean value or null if not found\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 /**\n * Gets a number value from the command options.\n * @param name - The option name\n * @param required - Whether the option is required\n * @returns The number value or null if not found\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 /**\n * Gets a string value from the command options.\n * @param name - The option name\n * @param required - Whether the option is required\n * @returns The string value or null if not found\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 /**\n * Gets an integer value from the command options.\n * @param name - The option name\n * @param required - Whether the option is required\n * @returns The integer value or null if not found\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 /**\n * Gets a user from the command options.\n * @param name - The option name\n * @param required - Whether the option is required\n * @returns The user or null if not found\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 /**\n * Gets a channel from the command options.\n * @param name - The option name\n * @param required - Whether the option is required\n * @returns The channel or null if not found\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 /**\n * Gets a role from the command options.\n * @param name - The option name\n * @param required - Whether the option is required\n * @returns The role or null if not found\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 /**\n * Gets a mentionable (user, member, or role) from the command options.\n * @param name - The option name\n * @param required - Whether the option is required\n * @returns The mentionable or null if not found\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 /**\n * Gets the subcommand name from the command.\n * @param required - Whether the subcommand is required\n * @returns The subcommand name or null if not found\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 /**\n * Gets the subcommand group name from the command.\n * @param required - Whether the subcommand group is required\n * @returns The subcommand group name or null if not found\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}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MessageCommandParser.js","names":[],"sources":[],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as isInteractionSource, r as isMessageSource, t as CommandSource } from "../../helpers-
|
|
1
|
+
import { n as isInteractionSource, r as isMessageSource, t as CommandSource } from "../../helpers-vlnRvNJv.js";
|
|
2
2
|
export { CommandSource, isInteractionSource, isMessageSource };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":[],"sources":[
|
|
1
|
+
{"version":3,"file":"helpers.js","names":[],"sources":[],"mappings":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { s as CommandKit } from "../../analytics-engine-
|
|
2
|
-
import {
|
|
1
|
+
import { s as CommandKit } from "../../analytics-engine-Bz1p7ud3.js";
|
|
2
|
+
import { a as ParsedEvent } from "../../EventsRouter-Bt63ZuEF.js";
|
|
3
|
+
import "../../index-COt7nfC9.js";
|
|
3
4
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
4
|
-
|
|
5
5
|
//#region src/app/events/EventWorkerContext.d.ts
|
|
6
6
|
/**
|
|
7
7
|
* Context object containing information about the currently executing event.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventWorkerContext.js","names":[],"sources":[
|
|
1
|
+
{"version":3,"file":"EventWorkerContext.js","names":[],"sources":[],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { St as RunCommand, _t as CommandTypeData, bt as PreparedAppCommandExecution, dt as AppCommandHandler, ft as AppCommandNative, gt as CommandDataSchemaValue, ht as CommandDataSchemaKey, mt as CommandDataSchema, pt as CommandBuilderLike, ut as AppCommand, vt as CustomAppCommandProps, xt as ResolvableCommand, yt as LoadedCommand } from "../../analytics-engine-
|
|
1
|
+
import { St as RunCommand, _t as CommandTypeData, bt as PreparedAppCommandExecution, dt as AppCommandHandler, ft as AppCommandNative, gt as CommandDataSchemaValue, ht as CommandDataSchemaKey, mt as CommandDataSchema, pt as CommandBuilderLike, ut as AppCommand, vt as CustomAppCommandProps, xt as ResolvableCommand, yt as LoadedCommand } from "../../analytics-engine-Bz1p7ud3.js";
|
|
2
2
|
export { AppCommand, AppCommandHandler, AppCommandNative, CommandBuilderLike, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandTypeData, CustomAppCommandProps, LoadedCommand, PreparedAppCommandExecution, ResolvableCommand, RunCommand };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_commandkit = require('../../commandkit-
|
|
2
|
+
const require_commandkit = require('../../commandkit-gJ4YjTy4.js');
|
|
3
3
|
|
|
4
4
|
exports.AppCommandHandler = require_commandkit.AppCommandHandler;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { at as AppEventsHandlerLoadedData, it as AppEventsHandler, ot as EventListener, st as LoadedEvent } from "../../analytics-engine-
|
|
1
|
+
import { at as AppEventsHandlerLoadedData, it as AppEventsHandler, ot as EventListener, st as LoadedEvent } from "../../analytics-engine-Bz1p7ud3.js";
|
|
2
2
|
export { AppEventsHandler, AppEventsHandlerLoadedData, EventListener, LoadedEvent };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_commandkit = require('../../commandkit-
|
|
2
|
+
const require_commandkit = require('../../commandkit-gJ4YjTy4.js');
|
|
3
3
|
|
|
4
4
|
exports.AppEventsHandler = require_commandkit.AppEventsHandler;
|
package/dist/app/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { $t as InteractionCommandMiddlewareContext, Bt as CommandRegistrar, Gt as AutocompleteCommandMiddlewareContext, Ht as AnyCommandExecute, Jt as CommandContextOptions, Kt as ChatInputCommand, Qt as InteractionCommandContext, St as RunCommand, Ut as AutocompleteCommand, Vt as PreRegisterCommandsEvent, Wt as AutocompleteCommandContext, Xt as Context, Yt as CommandExecutionMode, Zt as ContextParameters, _t as CommandTypeData, an as MessageContextMenuCommandMiddlewareContext, bt as PreparedAppCommandExecution, cn as SlashCommandMiddlewareContext, dn as UserContextMenuCommandMiddlewareContext, dt as AppCommandHandler, en as MessageCommand, ft as AppCommandNative, gt as CommandDataSchemaValue, ht as CommandDataSchemaKey, in as MessageContextMenuCommandContext, ln as UserContextMenuCommand, mt as CommandDataSchema, nn as MessageCommandMiddlewareContext, on as MiddlewareContext, pt as CommandBuilderLike, qt as ChatInputCommandContext, rn as MessageContextMenuCommand, sn as MiddlewareContextArgs, tn as MessageCommandContext, un as UserContextMenuCommandContext, ut as AppCommand, vt as CustomAppCommandProps, xt as ResolvableCommand, yt as LoadedCommand } from "../analytics-engine-
|
|
2
|
-
import { i as ParsedMessageCommand, n as MessageCommandOptionsSchema, r as MessageCommandParser, t as MessageCommandOptions } from "../MessageCommandParser-
|
|
3
|
-
import { i as stopMiddlewares, n as rethrow, r as stopEvents, t as redirect } from "../signals-
|
|
4
|
-
import { n as isInteractionSource, r as isMessageSource, t as CommandSource } from "../helpers-
|
|
5
|
-
export { AnyCommandExecute, AppCommand, AppCommandHandler, AppCommandNative, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, ChatInputCommand, ChatInputCommandContext, CommandBuilderLike, CommandContextOptions, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandExecutionMode, CommandRegistrar, CommandSource, CommandTypeData, Context, ContextParameters, CustomAppCommandProps, InteractionCommandContext, InteractionCommandMiddlewareContext, LoadedCommand, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageCommandOptions, MessageCommandOptionsSchema, MessageCommandParser, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, MiddlewareContext, MiddlewareContextArgs, ParsedMessageCommand, PreRegisterCommandsEvent, PreparedAppCommandExecution, ResolvableCommand, RunCommand, SlashCommandMiddlewareContext, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext, isInteractionSource, isMessageSource, redirect, rethrow, stopEvents, stopMiddlewares };
|
|
1
|
+
import { $t as InteractionCommandMiddlewareContext, Bt as CommandRegistrar, Gt as AutocompleteCommandMiddlewareContext, Ht as AnyCommandExecute, Jt as CommandContextOptions, Kt as ChatInputCommand, Qt as InteractionCommandContext, St as RunCommand, Ut as AutocompleteCommand, Vt as PreRegisterCommandsEvent, Wt as AutocompleteCommandContext, Xt as Context, Yt as CommandExecutionMode, Zt as ContextParameters, _t as CommandTypeData, an as MessageContextMenuCommandMiddlewareContext, bt as PreparedAppCommandExecution, cn as SlashCommandMiddlewareContext, dn as UserContextMenuCommandMiddlewareContext, dt as AppCommandHandler, en as MessageCommand, ft as AppCommandNative, gt as CommandDataSchemaValue, ht as CommandDataSchemaKey, in as MessageContextMenuCommandContext, ln as UserContextMenuCommand, mt as CommandDataSchema, nn as MessageCommandMiddlewareContext, on as MiddlewareContext, pt as CommandBuilderLike, qt as ChatInputCommandContext, rn as MessageContextMenuCommand, sn as MiddlewareContextArgs, tn as MessageCommandContext, un as UserContextMenuCommandContext, ut as AppCommand, vt as CustomAppCommandProps, xt as ResolvableCommand, yt as LoadedCommand } from "../analytics-engine-Bz1p7ud3.js";
|
|
2
|
+
import { i as ParsedMessageCommand, n as MessageCommandOptionsSchema, r as MessageCommandParser, t as MessageCommandOptions } from "../MessageCommandParser-BYbxHOSK.js";
|
|
3
|
+
import { i as stopMiddlewares, n as rethrow, r as stopEvents, t as redirect } from "../signals-DRMDrCOn.js";
|
|
4
|
+
import { n as isInteractionSource, r as isMessageSource, t as CommandSource } from "../helpers-vlnRvNJv.js";
|
|
5
|
+
export { AnyCommandExecute, AppCommand, AppCommandHandler, AppCommandNative, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, ChatInputCommand, ChatInputCommandContext, CommandBuilderLike, CommandContextOptions, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandExecutionMode, CommandRegistrar, type CommandSource, CommandTypeData, Context, ContextParameters, CustomAppCommandProps, InteractionCommandContext, InteractionCommandMiddlewareContext, LoadedCommand, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageCommandOptions, MessageCommandOptionsSchema, MessageCommandParser, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, MiddlewareContext, MiddlewareContextArgs, ParsedMessageCommand, PreRegisterCommandsEvent, PreparedAppCommandExecution, ResolvableCommand, RunCommand, SlashCommandMiddlewareContext, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext, isInteractionSource, isMessageSource, redirect, rethrow, stopEvents, stopMiddlewares };
|
package/dist/app/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_commandkit = require('../commandkit-
|
|
2
|
+
const require_commandkit = require('../commandkit-gJ4YjTy4.js');
|
|
3
3
|
const require_app_interrupt_signals = require('./interrupt/signals.js');
|
|
4
4
|
const require_app_commands_helpers = require('./commands/helpers.js');
|
|
5
5
|
const require_app_commands_MessageCommandParser = require('./commands/MessageCommandParser.js');
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as stopMiddlewares, n as rethrow, r as stopEvents, t as redirect } from "../../signals-
|
|
1
|
+
import { i as stopMiddlewares, n as rethrow, r as stopEvents, t as redirect } from "../../signals-DRMDrCOn.js";
|
|
2
2
|
export { redirect, rethrow, stopEvents, stopMiddlewares };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals.js","names":[],"sources":[
|
|
1
|
+
{"version":3,"file":"signals.js","names":[],"sources":[],"mappings":""}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { on as MiddlewareContext } from "../../analytics-engine-
|
|
2
|
-
|
|
1
|
+
import { on as MiddlewareContext } from "../../analytics-engine-Bz1p7ud3.js";
|
|
3
2
|
//#region src/app/middlewares/permissions.d.ts
|
|
4
3
|
declare const middlewareId: `${string}-${string}-${string}-${string}-${string}`;
|
|
5
4
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_commandkit = require('../../commandkit-
|
|
2
|
+
const require_commandkit = require('../../commandkit-gJ4YjTy4.js');
|
|
3
3
|
|
|
4
4
|
exports.beforeExecute = require_commandkit.beforeExecute;
|
|
5
5
|
exports.middlewareId = require_commandkit.middlewareId;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Bt as CommandRegistrar, Vt as PreRegisterCommandsEvent } from "../../analytics-engine-
|
|
1
|
+
import { Bt as CommandRegistrar, Vt as PreRegisterCommandsEvent } from "../../analytics-engine-Bz1p7ud3.js";
|
|
2
2
|
export { CommandRegistrar, PreRegisterCommandsEvent };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_commandkit = require('../../commandkit-
|
|
2
|
+
const require_commandkit = require('../../commandkit-gJ4YjTy4.js');
|
|
3
3
|
|
|
4
4
|
exports.CommandRegistrar = require_commandkit.CommandRegistrar;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as CompiledCommandRoute, i as CommandTreeNodeSource, n as CommandTreeNode, r as CommandTreeNodeKind, t as CommandRouteDiagnostic } from "../../CommandTree-
|
|
1
|
+
import { a as CompiledCommandRoute, i as CommandTreeNodeSource, n as CommandTreeNode, r as CommandTreeNodeKind, t as CommandRouteDiagnostic } from "../../CommandTree-qu-8oAEV.js";
|
|
2
2
|
export { CommandRouteDiagnostic, CommandTreeNode, CommandTreeNodeKind, CommandTreeNodeSource, CompiledCommandRoute };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as ParsedCommandData, i as Middleware, n as CommandsRouter, r as CommandsRouterOptions, t as Command } from "../../CommandsRouter-
|
|
2
|
-
export { Command, CommandsRouter, CommandsRouterOptions, Middleware, ParsedCommandData };
|
|
1
|
+
import { a as ParsedCommandData, i as Middleware, n as CommandsRouter, o as RouterFileChangeType, r as CommandsRouterOptions, t as Command } from "../../CommandsRouter-Co225Ae5.js";
|
|
2
|
+
export { Command, CommandsRouter, CommandsRouterOptions, Middleware, ParsedCommandData, RouterFileChangeType };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_chunk = require('../../chunk-BE-pF4vm.js');
|
|
3
2
|
let discord_js = require("discord.js");
|
|
4
3
|
let node_fs = require("node:fs");
|
|
5
4
|
let node_path = require("node:path");
|
|
@@ -61,6 +60,7 @@ const SUBCOMMAND_FILE_PATTERN = /^([^+().][^().]*)\.subcommand\.(m|c)?(j|t)sx?$/
|
|
|
61
60
|
* Handles discovery and parsing of command and middleware files in the filesystem.
|
|
62
61
|
*/
|
|
63
62
|
var CommandsRouter = class {
|
|
63
|
+
options;
|
|
64
64
|
/**
|
|
65
65
|
* @private
|
|
66
66
|
* @internal
|
|
@@ -191,6 +191,28 @@ var CommandsRouter = class {
|
|
|
191
191
|
return this.toJSON();
|
|
192
192
|
}
|
|
193
193
|
/**
|
|
194
|
+
* Incrementally updates only the top-level command subtree affected by a file change.
|
|
195
|
+
* Falls back to a full scan when the changed path cannot be safely scoped.
|
|
196
|
+
*/
|
|
197
|
+
async scanIncremental(changedPath, _changeType = "change") {
|
|
198
|
+
var _topLevelToken$match;
|
|
199
|
+
const normalizedPath = (0, node_path.normalize)(changedPath);
|
|
200
|
+
if (!this.isWithinPath(this.options.entrypoint, normalizedPath)) return this.toJSON();
|
|
201
|
+
const relativePath = this.replaceEntrypoint(normalizedPath).replace(/^[/\\]/, "").split(/[/\\]/).filter(Boolean);
|
|
202
|
+
if (!relativePath.length) return this.scan();
|
|
203
|
+
const topLevelToken = relativePath[0];
|
|
204
|
+
if (!this.isCommandDirectory(topLevelToken)) return this.scan();
|
|
205
|
+
const commandName = (_topLevelToken$match = topLevelToken.match(COMMAND_DIRECTORY_PATTERN)) === null || _topLevelToken$match === void 0 ? void 0 : _topLevelToken$match[1];
|
|
206
|
+
if (!commandName) return this.scan();
|
|
207
|
+
this.ensureRootNode();
|
|
208
|
+
const commandRootDirectory = (0, node_path.join)(this.options.entrypoint, topLevelToken);
|
|
209
|
+
this.pruneCommandSubtree(commandName, commandRootDirectory);
|
|
210
|
+
if ((0, node_fs.existsSync)(commandRootDirectory)) await this.traverseDirectory(commandRootDirectory, "command", null, ROOT_NODE_ID, commandName);
|
|
211
|
+
await this.applyMiddlewares();
|
|
212
|
+
this.compileTree();
|
|
213
|
+
return this.toJSON();
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
194
216
|
* Gets the raw command, middleware, and compiled tree collections.
|
|
195
217
|
* @returns Object containing router collections
|
|
196
218
|
*/
|
|
@@ -252,6 +274,33 @@ var CommandsRouter = class {
|
|
|
252
274
|
* @private
|
|
253
275
|
* @internal
|
|
254
276
|
*/
|
|
277
|
+
ensureRootNode() {
|
|
278
|
+
if (!this.treeNodes.has(ROOT_NODE_ID)) this.initializeRootNode();
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* @private
|
|
282
|
+
* @internal
|
|
283
|
+
*/
|
|
284
|
+
pruneCommandSubtree(commandName, commandRootDirectory) {
|
|
285
|
+
const normalizedRootDirectory = (0, node_path.normalize)(commandRootDirectory);
|
|
286
|
+
for (const [id, command] of this.commands.entries()) if (command.name === commandName || this.isWithinPath(normalizedRootDirectory, command.path) || this.isWithinPath(normalizedRootDirectory, command.parentPath)) this.commands.delete(id);
|
|
287
|
+
for (const [id, middleware] of this.middlewares.entries()) if (this.isWithinPath(normalizedRootDirectory, middleware.path) || this.isWithinPath(normalizedRootDirectory, middleware.parentPath)) this.middlewares.delete(id);
|
|
288
|
+
const nodeIdsToDelete = /* @__PURE__ */ new Set();
|
|
289
|
+
for (const [id, node] of this.treeNodes.entries()) {
|
|
290
|
+
if (id === ROOT_NODE_ID) continue;
|
|
291
|
+
if (node.route[0] === commandName || this.isWithinPath(normalizedRootDirectory, node.directoryPath) || node.definitionPath && this.isWithinPath(normalizedRootDirectory, node.definitionPath)) nodeIdsToDelete.add(id);
|
|
292
|
+
}
|
|
293
|
+
if (nodeIdsToDelete.size) {
|
|
294
|
+
for (const id of nodeIdsToDelete) this.treeNodes.delete(id);
|
|
295
|
+
for (const node of this.treeNodes.values()) node.childIds = node.childIds.filter((childId) => {
|
|
296
|
+
return !nodeIdsToDelete.has(childId);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* @private
|
|
302
|
+
* @internal
|
|
303
|
+
*/
|
|
255
304
|
async traverseDirectory(path, state, category, parentId, token) {
|
|
256
305
|
let node = null;
|
|
257
306
|
if (state === "command") {
|
|
@@ -449,6 +498,7 @@ var CommandsRouter = class {
|
|
|
449
498
|
if (node.id === ROOT_NODE_ID) continue;
|
|
450
499
|
const hasChildren = node.childIds.length > 0;
|
|
451
500
|
node.executable = !!node.definitionPath && node.kind !== "group" && !hasChildren;
|
|
501
|
+
if (hasChildren && node.definitionPath && node.kind !== "group") this.addDiagnostic("NON_LEAF_NODE_MAY_HAVE_HANDLERS", `Hierarchical node "${node.route.join(".")}" has child nodes. Ensure its command.ts file does not export chatInput, message, or autocomplete handlers. Executable handlers must be defined on leaf nodes.`, node.definitionPath);
|
|
452
502
|
if (node.kind === "subcommand" && hasChildren) this.addDiagnostic("SUBCOMMAND_CANNOT_HAVE_CHILDREN", `Subcommand "${node.route.join(".")}" cannot contain child command nodes.`, node.definitionPath ?? node.directoryPath);
|
|
453
503
|
if (node.kind === "command") {
|
|
454
504
|
const childKinds = new Set(node.childIds.map((childId) => {
|
|
@@ -566,6 +616,15 @@ var CommandsRouter = class {
|
|
|
566
616
|
replaceEntrypoint(path) {
|
|
567
617
|
return (0, node_path.normalize)(path).replace(this.options.entrypoint, "");
|
|
568
618
|
}
|
|
619
|
+
/**
|
|
620
|
+
* @private
|
|
621
|
+
* @internal
|
|
622
|
+
*/
|
|
623
|
+
isWithinPath(basePath, targetPath) {
|
|
624
|
+
const rel = (0, node_path.relative)((0, node_path.normalize)(basePath), (0, node_path.normalize)(targetPath));
|
|
625
|
+
if (!rel) return true;
|
|
626
|
+
return !rel.startsWith("..") && !(0, node_path.isAbsolute)(rel);
|
|
627
|
+
}
|
|
569
628
|
};
|
|
570
629
|
|
|
571
630
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandsRouter.js","names":[],"sources":["../../../src/app/router/CommandsRouter.ts"],"sourcesContent":["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';\nimport {\n CommandRouteDiagnostic,\n CommandTreeNode,\n CommandTreeNodeKind,\n CompiledCommandRoute,\n} from './CommandTree';\n\n/**\n * Represents a command with its metadata and middleware associations.\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\n/**\n * Represents a middleware with its metadata and scope.\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\n/**\n * Data structure containing parsed commands, middleware, and tree data.\n */\nexport interface ParsedCommandData {\n commands: Record<string, Command>;\n middlewares: Record<string, Middleware>;\n treeNodes?: Record<string, CommandTreeNode>;\n compiledRoutes?: Record<string, CompiledCommandRoute>;\n diagnostics?: CommandRouteDiagnostic[];\n}\n\n/**\n * Configuration options for the commands router.\n */\nexport interface CommandsRouterOptions {\n entrypoint: string;\n}\n\nconst ROOT_NODE_ID = '__commandkit_router_root__';\n\n/**\n * @private\n * @internal\n */\nconst MIDDLEWARE_PATTERN = /^\\+middleware\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst COMMAND_MIDDLEWARE_PATTERN =\n /^\\+([^+().][^().]*)\\.middleware\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst GLOBAL_MIDDLEWARE_PATTERN = /^\\+global-middleware\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst COMMAND_PATTERN = /^([^+().][^().]*)\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst CATEGORY_PATTERN = /^\\(.+\\)$/;\n\n/**\n * @private\n * @internal\n */\nconst COMMAND_DIRECTORY_PATTERN = /^\\[([^\\][\\\\\\/]+)\\]$/;\n\n/**\n * @private\n * @internal\n */\nconst GROUP_DIRECTORY_PATTERN = /^\\{([^}{\\\\\\/]+)\\}$/;\n\n/**\n * @private\n * @internal\n */\nconst COMMAND_DEFINITION_PATTERN = /^command\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst GROUP_DEFINITION_PATTERN = /^group\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst SUBCOMMAND_FILE_PATTERN =\n /^([^+().][^().]*)\\.subcommand\\.(m|c)?(j|t)sx?$/;\n\n/**\n * Handles discovery and parsing of command and middleware files in the filesystem.\n */\nexport class CommandsRouter {\n /**\n * @private\n * @internal\n */\n private commands = new Collection<string, Command>();\n\n /**\n * @private\n * @internal\n */\n private middlewares = new Collection<string, Middleware>();\n\n /**\n * @private\n * @internal\n */\n private treeNodes = new Collection<string, CommandTreeNode>();\n\n /**\n * @private\n * @internal\n */\n private compiledRoutes = new Collection<string, CompiledCommandRoute>();\n\n /**\n * @private\n * @internal\n */\n private diagnostics: CommandRouteDiagnostic[] = [];\n\n /**\n * Creates a new CommandsRouter instance.\n * @param options - Configuration options for the router\n */\n public constructor(private readonly options: CommandsRouterOptions) {}\n\n /**\n * Populates the router with existing command, middleware, and tree data.\n * @param data - Parsed command data to populate with\n */\n public populate(data: ParsedCommandData): void {\n this.clear();\n\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 for (const [id, node] of Object.entries(data.treeNodes ?? {})) {\n this.treeNodes.set(id, node);\n }\n\n for (const [key, route] of Object.entries(data.compiledRoutes ?? {})) {\n this.compiledRoutes.set(key, route);\n }\n\n this.diagnostics = [...(data.diagnostics ?? [])];\n }\n\n /**\n * Checks if the configured entrypoint path exists.\n * @returns True if the path exists\n */\n public isValidPath(): boolean {\n return existsSync(this.options.entrypoint);\n }\n\n /**\n * @private\n * @internal\n */\n private isCommand(name: string): boolean {\n return COMMAND_PATTERN.test(name);\n }\n\n /**\n * @private\n * @internal\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 /**\n * @private\n * @internal\n */\n private isCategory(name: string): boolean {\n return CATEGORY_PATTERN.test(name);\n }\n\n /**\n * @private\n * @internal\n */\n private isCommandDirectory(name: string): boolean {\n return COMMAND_DIRECTORY_PATTERN.test(name);\n }\n\n /**\n * @private\n * @internal\n */\n private isGroupDirectory(name: string): boolean {\n return GROUP_DIRECTORY_PATTERN.test(name);\n }\n\n /**\n * @private\n * @internal\n */\n private isCommandDefinition(name: string): boolean {\n return COMMAND_DEFINITION_PATTERN.test(name);\n }\n\n /**\n * @private\n * @internal\n */\n private isGroupDefinition(name: string): boolean {\n return GROUP_DEFINITION_PATTERN.test(name);\n }\n\n /**\n * @private\n * @internal\n */\n private isSubcommandFile(name: string): boolean {\n return SUBCOMMAND_FILE_PATTERN.test(name);\n }\n\n /**\n * Clears all loaded commands, middleware, and compiled tree data.\n */\n public clear(): void {\n this.commands.clear();\n this.middlewares.clear();\n this.treeNodes.clear();\n this.compiledRoutes.clear();\n this.diagnostics = [];\n }\n\n /**\n * Scans the filesystem for commands and middleware files.\n * @returns Parsed command data\n */\n public async scan(): Promise<ParsedCommandData> {\n this.clear();\n this.initializeRootNode();\n\n await this.traverseDirectory(\n this.options.entrypoint,\n 'normal',\n null,\n ROOT_NODE_ID,\n );\n\n await this.applyMiddlewares();\n this.compileTree();\n\n return this.toJSON();\n }\n\n /**\n * Gets the raw command, middleware, and compiled tree collections.\n * @returns Object containing router collections\n */\n public getData(): {\n commands: Collection<string, Command>;\n middlewares: Collection<string, Middleware>;\n treeNodes: Collection<string, CommandTreeNode>;\n compiledRoutes: Collection<string, CompiledCommandRoute>;\n diagnostics: CommandRouteDiagnostic[];\n } {\n return {\n commands: this.commands,\n middlewares: this.middlewares,\n treeNodes: this.treeNodes,\n compiledRoutes: this.compiledRoutes,\n diagnostics: this.diagnostics,\n };\n }\n\n /**\n * Gets only the internal command tree and compiled route data.\n * @returns Object containing tree data\n */\n public getTreeData(): {\n treeNodes: Collection<string, CommandTreeNode>;\n compiledRoutes: Collection<string, CompiledCommandRoute>;\n diagnostics: CommandRouteDiagnostic[];\n } {\n return {\n treeNodes: this.treeNodes,\n compiledRoutes: this.compiledRoutes,\n diagnostics: this.diagnostics,\n };\n }\n\n /**\n * Converts the loaded data to a JSON-serializable format.\n * @returns Plain object with commands, middleware, and tree data\n */\n public toJSON(): ParsedCommandData {\n return {\n commands: Object.fromEntries(this.commands.entries()),\n middlewares: Object.fromEntries(this.middlewares.entries()),\n treeNodes: Object.fromEntries(this.treeNodes.entries()),\n compiledRoutes: Object.fromEntries(this.compiledRoutes.entries()),\n diagnostics: this.diagnostics,\n };\n }\n\n /**\n * @private\n * @internal\n */\n private initializeRootNode() {\n this.treeNodes.set(ROOT_NODE_ID, {\n id: ROOT_NODE_ID,\n source: 'root',\n kind: 'root',\n token: '',\n route: [],\n category: null,\n parentId: null,\n childIds: [],\n directoryPath: this.options.entrypoint,\n definitionPath: null,\n relativePath: '',\n shorthand: false,\n executable: false,\n });\n }\n\n /**\n * @private\n * @internal\n */\n private async traverseDirectory(\n path: string,\n state: 'normal' | 'command' | 'group',\n category: string | null,\n parentId: string,\n token?: string,\n ) {\n let node: CommandTreeNode | null = null;\n\n if (state === 'command') {\n node = this.createTreeNode({\n source: 'directory',\n token: token!,\n category,\n parentId,\n directoryPath: path,\n definitionPath: null,\n shorthand: false,\n });\n if (!node) return;\n } else if (state === 'group') {\n node = this.createTreeNode({\n source: 'group',\n token: token!,\n category,\n parentId,\n directoryPath: path,\n definitionPath: null,\n shorthand: false,\n });\n if (!node) return;\n }\n\n const currentNodeId = node ? node.id : parentId;\n\n const entries = await readdir(path, {\n withFileTypes: true,\n });\n\n for (const entry of entries) {\n if (entry.name.startsWith('_')) continue;\n\n const fullPath = join(path, entry.name);\n\n if (entry.isFile()) {\n if (state === 'command') {\n if (this.isCommandDefinition(entry.name)) {\n node!.definitionPath = fullPath;\n node!.relativePath = this.replaceEntrypoint(fullPath);\n continue;\n }\n if (this.isSubcommandFile(entry.name)) {\n this.createTreeNode({\n source: 'shorthand',\n token: entry.name.match(SUBCOMMAND_FILE_PATTERN)![1],\n category,\n parentId: currentNodeId,\n directoryPath: path,\n definitionPath: fullPath,\n shorthand: true,\n });\n continue;\n }\n if (this.isMiddleware(entry.name)) {\n await this.handle(entry, category);\n continue;\n }\n if (this.isCommand(entry.name)) {\n this.addDiagnostic(\n 'UNSUPPORTED_FILE_IN_COMMAND_DIRECTORY',\n 'Only command.ts, middleware files, and subcommand shorthand files are supported inside a command directory.',\n fullPath,\n );\n }\n } else if (state === 'group') {\n if (this.isGroupDefinition(entry.name)) {\n node!.definitionPath = fullPath;\n node!.relativePath = this.replaceEntrypoint(fullPath);\n continue;\n }\n if (this.isSubcommandFile(entry.name)) {\n this.createTreeNode({\n source: 'shorthand',\n token: entry.name.match(SUBCOMMAND_FILE_PATTERN)![1],\n category,\n parentId: currentNodeId,\n directoryPath: path,\n definitionPath: fullPath,\n shorthand: true,\n });\n continue;\n }\n if (this.isMiddleware(entry.name)) {\n await this.handle(entry, category);\n continue;\n }\n if (this.isCommand(entry.name)) {\n this.addDiagnostic(\n 'UNSUPPORTED_FILE_IN_GROUP_DIRECTORY',\n 'Only group.ts, middleware files, and subcommand shorthand files are supported inside a group directory.',\n fullPath,\n );\n }\n } else {\n if (this.isSubcommandFile(entry.name)) {\n if (currentNodeId === ROOT_NODE_ID) {\n this.addDiagnostic(\n 'ORPHAN_SUBCOMMAND_FILE',\n 'Subcommand shorthand files must be nested inside a command or group directory.',\n fullPath,\n );\n } else {\n this.createTreeNode({\n source: 'shorthand',\n token: entry.name.match(SUBCOMMAND_FILE_PATTERN)![1],\n category,\n parentId: currentNodeId,\n directoryPath: path,\n definitionPath: fullPath,\n shorthand: true,\n });\n }\n continue;\n }\n if (this.isCommand(entry.name) || this.isMiddleware(entry.name)) {\n const result = await this.handle(entry, category);\n if (result.command) {\n this.createFlatCommandNode(result.command);\n }\n }\n }\n continue;\n }\n\n if (!entry.isDirectory()) continue;\n\n if (this.isCommandDirectory(entry.name)) {\n if (state === 'command' || state === 'group') {\n await this.traverseDirectory(\n fullPath,\n 'command',\n category,\n currentNodeId,\n entry.name.match(COMMAND_DIRECTORY_PATTERN)![1],\n );\n } else if (currentNodeId !== ROOT_NODE_ID) {\n this.addDiagnostic(\n 'NESTED_COMMAND_NOT_ALLOWED',\n 'Command directories cannot be nested under group or subcommand directories unless they are part of a hierarchical structure.',\n fullPath,\n );\n } else {\n await this.traverseDirectory(\n fullPath,\n 'command',\n category,\n ROOT_NODE_ID,\n entry.name.match(COMMAND_DIRECTORY_PATTERN)![1],\n );\n }\n continue;\n }\n\n if (this.isGroupDirectory(entry.name)) {\n if (currentNodeId === ROOT_NODE_ID) {\n this.addDiagnostic(\n 'ROOT_GROUP_NOT_ALLOWED',\n 'Group directories must be nested inside a command directory.',\n fullPath,\n );\n } else {\n await this.traverseDirectory(\n fullPath,\n 'group',\n category,\n currentNodeId,\n entry.name.match(GROUP_DIRECTORY_PATTERN)![1],\n );\n }\n continue;\n }\n\n if (this.isCategory(entry.name)) {\n const nestedCategory = category\n ? `${category}:${entry.name.slice(1, -1)}`\n : entry.name.slice(1, -1);\n await this.traverseDirectory(\n fullPath,\n 'normal',\n nestedCategory,\n currentNodeId,\n );\n continue;\n }\n\n await this.traverseDirectory(fullPath, 'normal', category, currentNodeId);\n }\n\n if (state === 'command' && node && !node.definitionPath) {\n this.addDiagnostic(\n 'MISSING_COMMAND_DEFINITION',\n 'Command directories must include a command.ts file.',\n path,\n );\n } else if (state === 'group' && node && !node.definitionPath) {\n this.addDiagnostic(\n 'MISSING_GROUP_DEFINITION',\n 'Group directories must include a group.ts file.',\n path,\n );\n }\n }\n\n /**\n * @private\n * @internal\n */\n private createFlatCommandNode(command: Command) {\n this.createTreeNode({\n id: command.id,\n source: 'flat',\n token: command.name,\n category: command.category,\n parentId: ROOT_NODE_ID,\n directoryPath: command.parentPath,\n definitionPath: command.path,\n shorthand: false,\n });\n }\n\n /**\n * @private\n * @internal\n */\n private createTreeNode(options: {\n id?: string;\n source: Exclude<CommandTreeNode['source'], 'root'>;\n token: string;\n category: string | null;\n parentId: string;\n directoryPath: string;\n definitionPath: string | null;\n shorthand: boolean;\n }) {\n const parent = this.treeNodes.get(options.parentId);\n\n if (!parent) {\n this.addDiagnostic(\n 'MISSING_PARENT_NODE',\n `Unable to create command tree node \"${options.token}\" because its parent node was not found.`,\n options.directoryPath,\n );\n return null;\n }\n\n const duplicate = parent.childIds.some((childId) => {\n return this.treeNodes.get(childId)?.token === options.token;\n });\n\n if (duplicate) {\n this.addDiagnostic(\n 'DUPLICATE_SIBLING_TOKEN',\n `Duplicate command token \"${options.token}\" found under the same parent.`,\n options.definitionPath ?? options.directoryPath,\n );\n return null;\n }\n\n const route = [...parent.route, options.token];\n const node: CommandTreeNode = {\n id: options.id ?? crypto.randomUUID(),\n source: options.source,\n kind: this.resolveNodeKind(options.source, route.length),\n token: options.token,\n route,\n category: options.category,\n parentId: options.parentId,\n childIds: [],\n directoryPath: options.directoryPath,\n definitionPath: options.definitionPath,\n relativePath: this.replaceEntrypoint(\n options.definitionPath ?? options.directoryPath,\n ),\n shorthand: options.shorthand,\n executable: false,\n };\n\n this.treeNodes.set(node.id, node);\n parent.childIds.push(node.id);\n\n return node;\n }\n\n /**\n * @private\n * @internal\n */\n private resolveNodeKind(\n source: CommandTreeNode['source'],\n depth: number,\n ): CommandTreeNodeKind {\n switch (source) {\n case 'root':\n return 'root';\n case 'flat':\n return 'flat';\n case 'group':\n return 'group';\n case 'shorthand':\n return 'subcommand';\n case 'directory':\n return depth === 1 ? 'command' : 'subcommand';\n default:\n return source satisfies never;\n }\n }\n\n /**\n * @private\n * @internal\n */\n private compileTree() {\n this.compiledRoutes.clear();\n\n for (const node of this.treeNodes.values()) {\n if (node.id === ROOT_NODE_ID) continue;\n\n const hasChildren = node.childIds.length > 0;\n node.executable =\n !!node.definitionPath && node.kind !== 'group' && !hasChildren;\n\n if (node.kind === 'subcommand' && hasChildren) {\n this.addDiagnostic(\n 'SUBCOMMAND_CANNOT_HAVE_CHILDREN',\n `Subcommand \"${node.route.join('.')}\" cannot contain child command nodes.`,\n node.definitionPath ?? node.directoryPath,\n );\n }\n\n if (node.kind === 'command') {\n const childKinds = new Set(\n node.childIds\n .map((childId) => this.treeNodes.get(childId)?.kind)\n .filter(Boolean),\n );\n\n if (childKinds.has('group') && childKinds.has('subcommand')) {\n this.addDiagnostic(\n 'MIXED_ROOT_CHILDREN',\n `Command \"${node.route.join('.')}\" cannot mix direct subcommands and subcommand groups.`,\n node.definitionPath ?? node.directoryPath,\n );\n }\n }\n\n if (!node.executable || !node.definitionPath) continue;\n\n const key = node.route.join('.');\n const routeKind = node.kind as Exclude<\n CommandTreeNodeKind,\n 'root' | 'group'\n >;\n this.compiledRoutes.set(key, {\n id: node.id,\n key,\n kind: routeKind,\n token: node.token,\n route: node.route,\n category: node.category,\n definitionPath: node.definitionPath,\n relativePath: this.replaceEntrypoint(node.definitionPath),\n nodeId: node.id,\n middlewares: this.collectCompiledMiddlewares(node),\n });\n }\n }\n\n /**\n * @private\n * @internal\n */\n private collectCompiledMiddlewares(node: CommandTreeNode) {\n const allMiddlewares = Array.from(this.middlewares.values());\n const globalMiddlewares = allMiddlewares\n .filter((middleware) => middleware.global)\n .map((middleware) => middleware.id);\n\n const directoryMiddlewares = allMiddlewares\n .filter((middleware) => {\n return (\n !middleware.global &&\n !middleware.command &&\n middleware.parentPath === node.directoryPath\n );\n })\n .map((middleware) => middleware.id);\n\n const commandSpecificMiddlewares = allMiddlewares\n .filter((middleware) => {\n return (\n middleware.command === node.token &&\n middleware.parentPath === node.directoryPath\n );\n })\n .map((middleware) => middleware.id);\n\n return [\n ...globalMiddlewares,\n ...directoryMiddlewares,\n ...commandSpecificMiddlewares,\n ];\n }\n\n /**\n * @private\n * @internal\n */\n private addDiagnostic(code: string, message: string, path: string) {\n this.diagnostics.push({\n code,\n message,\n path: normalize(path),\n });\n }\n\n /**\n * @private\n * @internal\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 return { command };\n }\n\n 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.match(COMMAND_MIDDLEWARE_PATTERN)?.[1] || null\n : null,\n };\n\n this.middlewares.set(middleware.id, middleware);\n return { middleware };\n }\n\n return {};\n }\n\n /**\n * @private\n * @internal\n */\n private applyMiddlewares() {\n this.commands.forEach((command) => {\n const commandPath = command.parentPath;\n const allMiddlewares = Array.from(this.middlewares.values());\n\n const commandSpecificMiddlewares = allMiddlewares\n .filter((middleware) => middleware.command === command.name)\n .map((middleware) => middleware.id);\n\n const directorySpecificMiddlewares = allMiddlewares\n .filter((middleware) => {\n return (\n !middleware.global &&\n !middleware.command &&\n middleware.parentPath === commandPath\n );\n })\n .map((middleware) => middleware.id);\n\n const globalMiddlewares = allMiddlewares\n .filter((middleware) => middleware.global)\n .map((middleware) => middleware.id);\n\n command.middlewares = [\n ...globalMiddlewares,\n ...directorySpecificMiddlewares,\n ...commandSpecificMiddlewares,\n ];\n });\n }\n\n /**\n * @private\n * @internal\n */\n private replaceEntrypoint(path: string) {\n const normalized = normalize(path);\n return normalized.replace(this.options.entrypoint, '');\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CommandsRouter.js","names":[],"sources":[],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { EventsRouter, EventsRouterOptions, EventsTree, ParsedEvent };
|
|
1
|
+
import { a as ParsedEvent, i as EventsTree, n as EventsRouterFileChangeType, r as EventsRouterOptions, t as EventsRouter } from "../../EventsRouter-Bt63ZuEF.js";
|
|
2
|
+
export { EventsRouter, EventsRouterFileChangeType, EventsRouterOptions, EventsTree, ParsedEvent };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_chunk = require('../../chunk-BE-pF4vm.js');
|
|
3
2
|
let discord_js = require("discord.js");
|
|
4
3
|
let node_fs = require("node:fs");
|
|
5
4
|
let node_path = require("node:path");
|
|
@@ -11,6 +10,7 @@ let node_fs_promises = require("node:fs/promises");
|
|
|
11
10
|
* Events are represented by directories, and handlers are files within those directories.
|
|
12
11
|
*/
|
|
13
12
|
var EventsRouter = class {
|
|
13
|
+
options;
|
|
14
14
|
/** Internal storage of parsed events */
|
|
15
15
|
events = new discord_js.Collection();
|
|
16
16
|
/**
|
|
@@ -29,7 +29,7 @@ var EventsRouter = class {
|
|
|
29
29
|
* @param entrypoints - Array of new entrypoint paths
|
|
30
30
|
*/
|
|
31
31
|
addEntrypoints(entrypoints) {
|
|
32
|
-
this.options.entrypoints = Array.from(new Set([...this.options.entrypoints, ...entrypoints]));
|
|
32
|
+
this.options.entrypoints = Array.from(/* @__PURE__ */ new Set([...this.options.entrypoints, ...entrypoints]));
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* Find a parsed event by its name
|
|
@@ -59,6 +59,13 @@ var EventsRouter = class {
|
|
|
59
59
|
this.events.clear();
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
+
* Populates router state from pre-resolved event metadata.
|
|
63
|
+
*/
|
|
64
|
+
populate(events) {
|
|
65
|
+
this.clear();
|
|
66
|
+
for (const [key, event] of Object.entries(events)) this.events.set(key, event);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
62
69
|
* Reload and re-scan the entrypoint directory for events
|
|
63
70
|
* @returns Promise resolving to the updated events tree
|
|
64
71
|
*/
|
|
@@ -71,6 +78,7 @@ var EventsRouter = class {
|
|
|
71
78
|
* @returns Promise resolving to the events tree
|
|
72
79
|
*/
|
|
73
80
|
async scan() {
|
|
81
|
+
this.clear();
|
|
74
82
|
for (const entrypoint of this.entrypoints) {
|
|
75
83
|
const dirs = await (0, node_fs_promises.readdir)(entrypoint, { withFileTypes: true });
|
|
76
84
|
for (const dir of dirs) if (dir.isDirectory()) {
|
|
@@ -81,6 +89,33 @@ var EventsRouter = class {
|
|
|
81
89
|
return Object.fromEntries(this.events);
|
|
82
90
|
}
|
|
83
91
|
/**
|
|
92
|
+
* Incrementally rescans only the event subtree impacted by a changed path.
|
|
93
|
+
*/
|
|
94
|
+
async scanIncremental(changedPath, _changeType = "change") {
|
|
95
|
+
const resolvedChangedPath = (0, node_path.normalize)(changedPath);
|
|
96
|
+
const entrypoint = this.entrypoints.find((root) => this.isWithinPath(root, resolvedChangedPath));
|
|
97
|
+
if (!entrypoint) return this.toJSON();
|
|
98
|
+
const branch = this.resolveTopLevelBranch(entrypoint, resolvedChangedPath);
|
|
99
|
+
if (!branch) return this.scan();
|
|
100
|
+
const normalizedBranch = (0, node_path.normalize)(branch);
|
|
101
|
+
for (const [key, event] of this.events.entries()) {
|
|
102
|
+
const listeners = event.listeners.filter((listener) => !this.isWithinPath(normalizedBranch, listener));
|
|
103
|
+
if (!listeners.length && this.isWithinPath(normalizedBranch, event.path)) {
|
|
104
|
+
this.events.delete(key);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
this.events.set(key, {
|
|
108
|
+
...event,
|
|
109
|
+
listeners
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if ((0, node_fs.existsSync)(normalizedBranch)) {
|
|
113
|
+
const branchName = branch.slice(entrypoint.length).replace(/^[/\\]/, "").split(/[/\\]/).filter(Boolean)[0];
|
|
114
|
+
if (branchName) await this.scanEvent(branchName, normalizedBranch, null, [], true);
|
|
115
|
+
}
|
|
116
|
+
return this.toJSON();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
84
119
|
* Convert the internal events Collection to a plain object
|
|
85
120
|
* @returns Events tree as a plain object
|
|
86
121
|
*/
|
|
@@ -111,7 +146,7 @@ var EventsRouter = class {
|
|
|
111
146
|
if (!isNamespace) {
|
|
112
147
|
const existing = this.events.get(event);
|
|
113
148
|
if (existing) {
|
|
114
|
-
existing.listeners = Array.from(new Set([...existing.listeners, ...listeners]));
|
|
149
|
+
existing.listeners = Array.from(/* @__PURE__ */ new Set([...existing.listeners, ...listeners]));
|
|
115
150
|
return;
|
|
116
151
|
}
|
|
117
152
|
this.events.set(event, {
|
|
@@ -122,6 +157,24 @@ var EventsRouter = class {
|
|
|
122
157
|
});
|
|
123
158
|
}
|
|
124
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* @private
|
|
162
|
+
* @internal
|
|
163
|
+
*/
|
|
164
|
+
isWithinPath(basePath, targetPath) {
|
|
165
|
+
const rel = (0, node_path.relative)((0, node_path.normalize)(basePath), (0, node_path.normalize)(targetPath));
|
|
166
|
+
if (!rel) return true;
|
|
167
|
+
return !rel.startsWith("..") && !(0, node_path.isAbsolute)(rel);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* @private
|
|
171
|
+
* @internal
|
|
172
|
+
*/
|
|
173
|
+
resolveTopLevelBranch(entrypoint, changedPath) {
|
|
174
|
+
const rel = (0, node_path.relative)(entrypoint, changedPath).split(/[/\\]/).filter(Boolean);
|
|
175
|
+
if (!rel.length) return null;
|
|
176
|
+
return (0, node_path.join)(entrypoint, rel[0]);
|
|
177
|
+
}
|
|
125
178
|
};
|
|
126
179
|
|
|
127
180
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventsRouter.js","names":[],"sources":[
|
|
1
|
+
{"version":3,"file":"EventsRouter.js","names":[],"sources":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as createRouterTreeArtifact, i as RouterTreeArtifact, n as ROUTER_TREE_ARTIFACT_FILE, o as hydrateRouterTreeArtifact, r as ROUTER_TREE_ARTIFACT_SCHEMA_VERSION, s as validateRouterTreeArtifact, t as ROUTER_TREE_ARTIFACT_DIRECTORY } from "../../TreeArtifact-D6FZ5SVd.js";
|
|
2
|
+
export { ROUTER_TREE_ARTIFACT_DIRECTORY, ROUTER_TREE_ARTIFACT_FILE, ROUTER_TREE_ARTIFACT_SCHEMA_VERSION, RouterTreeArtifact, createRouterTreeArtifact, hydrateRouterTreeArtifact, validateRouterTreeArtifact };
|