commandkit 1.2.1-dev.20260411010608 → 1.2.1-dev.20260411122819

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.
Files changed (142) hide show
  1. package/dist/CommandTree-DwfiCsOl.d.ts +55 -0
  2. package/dist/{CommandsRouter-DiNoF0dq.d.ts → CommandsRouter-D-b3xv38.d.ts} +102 -25
  3. package/dist/{EventsRouter-EuuSu6NH.d.ts → EventsRouter-Dyr_oJJD.d.ts} +1 -1
  4. package/dist/{MessageCommandParser-DPCbHXCS.d.ts → MessageCommandParser-UTKsRvb9.d.ts} +7 -1
  5. package/dist/analytics/analytics-engine.d.ts +1 -1
  6. package/dist/analytics/analytics-engine.js +1 -1
  7. package/dist/analytics/analytics-provider.d.ts +1 -1
  8. package/dist/analytics/utils.js +1 -1
  9. package/dist/{analytics-engine-uBNaD2CQ.d.ts → analytics-engine-BimOLPwO.d.ts} +109 -17
  10. package/dist/app/commands/AppCommandRunner.d.ts +1 -1
  11. package/dist/app/commands/AppCommandRunner.js +1 -1
  12. package/dist/app/commands/Context.d.ts +1 -1
  13. package/dist/app/commands/Context.js +1 -1
  14. package/dist/app/commands/MessageCommandParser.d.ts +1 -1
  15. package/dist/app/commands/MessageCommandParser.js +75 -70
  16. package/dist/app/commands/MessageCommandParser.js.map +1 -1
  17. package/dist/app/commands/helpers.d.ts +1 -1
  18. package/dist/app/events/EventWorkerContext.d.ts +2 -2
  19. package/dist/app/handlers/AppCommandHandler.d.ts +1 -1
  20. package/dist/app/handlers/AppCommandHandler.js +1 -1
  21. package/dist/app/handlers/AppEventsHandler.d.ts +1 -1
  22. package/dist/app/handlers/AppEventsHandler.js +1 -1
  23. package/dist/app/index.d.ts +4 -4
  24. package/dist/app/index.js +1 -1
  25. package/dist/app/interrupt/signals.d.ts +1 -1
  26. package/dist/app/middlewares/permissions.d.ts +1 -1
  27. package/dist/app/middlewares/permissions.js +1 -1
  28. package/dist/app/register/CommandRegistrar.d.ts +1 -1
  29. package/dist/app/register/CommandRegistrar.js +1 -1
  30. package/dist/app/router/CommandTree.d.ts +2 -0
  31. package/dist/app/router/CommandTree.js +1 -0
  32. package/dist/app/router/CommandsRouter.d.ts +1 -1
  33. package/dist/app/router/CommandsRouter.js +385 -23
  34. package/dist/app/router/CommandsRouter.js.map +1 -1
  35. package/dist/app/router/EventsRouter.d.ts +1 -1
  36. package/dist/app/router/index.d.ts +4 -3
  37. package/dist/checkbox-CvQGiyRe.d.ts +28 -0
  38. package/dist/cli/build.d.ts +1 -1
  39. package/dist/cli/build.js +1 -1
  40. package/dist/cli/common.d.ts +1 -1
  41. package/dist/cli/development.d.ts +1 -1
  42. package/dist/cli/development.js +1 -1
  43. package/dist/cli/init.js +1 -1
  44. package/dist/cli/production.js +1 -1
  45. package/dist/{commandkit-DNln6BAJ.js → commandkit-D2HMPuRQ.js} +548 -109
  46. package/dist/commandkit-D2HMPuRQ.js.map +1 -0
  47. package/dist/commandkit.d.ts +1 -1
  48. package/dist/commandkit.js +1 -1
  49. package/dist/components/common/element.js +1 -1
  50. package/dist/components/display/common.js +1 -1
  51. package/dist/components/display/container.d.ts +1 -1
  52. package/dist/components/display/container.js +1 -1
  53. package/dist/components/display/file.d.ts +1 -1
  54. package/dist/components/display/index.d.ts +8 -8
  55. package/dist/components/display/index.js +1 -1
  56. package/dist/components/display/label.d.ts +1 -1
  57. package/dist/components/display/label.js +1 -1
  58. package/dist/components/display/media-gallery.d.ts +1 -1
  59. package/dist/components/display/media-gallery.js +1 -1
  60. package/dist/components/display/poll.d.ts +1 -1
  61. package/dist/components/display/section.d.ts +1 -1
  62. package/dist/components/display/section.js +1 -1
  63. package/dist/components/display/separator.d.ts +1 -1
  64. package/dist/components/display/text-display.d.ts +1 -1
  65. package/dist/components/index.d.ts +11 -9
  66. package/dist/components/index.js +6 -1
  67. package/dist/components/interactive/button/Button.js +1 -1
  68. package/dist/components/interactive/button/ButtonKit.js +1 -1
  69. package/dist/components/interactive/checkbox/checkbox.d.ts +2 -0
  70. package/dist/components/interactive/checkbox/checkbox.js +6 -0
  71. package/dist/components/interactive/modal/Modal.js +1 -1
  72. package/dist/components/interactive/modal/ModalKit.js +1 -1
  73. package/dist/components/interactive/radio/radio.d.ts +2 -0
  74. package/dist/components/interactive/radio/radio.js +5 -0
  75. package/dist/components/interactive/select-menu/ChannelSelectMenuKit.js +1 -1
  76. package/dist/components/interactive/select-menu/MentionableSelectMenuKit.js +1 -1
  77. package/dist/components/interactive/select-menu/RoleSelectMenuKit.js +1 -1
  78. package/dist/components/interactive/select-menu/SelectMenu.js +1 -1
  79. package/dist/components/interactive/select-menu/StringSelectMenuKit.js +1 -1
  80. package/dist/components/interactive/select-menu/UserSelectMenuKit.js +1 -1
  81. package/dist/config/config.d.ts +1 -1
  82. package/dist/config/config.js +1 -1
  83. package/dist/config/default.d.ts +1 -1
  84. package/dist/config/default.js +1 -1
  85. package/dist/config/loader.d.ts +1 -1
  86. package/dist/config/loader.js +1 -1
  87. package/dist/config/types.d.ts +1 -1
  88. package/dist/config/utils.d.ts +1 -1
  89. package/dist/{constants-DqtJY0t-.d.ts → constants-D_sgdBHy.d.ts} +1 -1
  90. package/dist/{constants-DwxpkIeH.d.ts → constants-GWSfiS4h.d.ts} +1 -1
  91. package/dist/{container-CYojOA9d.d.ts → container-B7Kmw__R.d.ts} +1 -1
  92. package/dist/context/async-context.d.ts +1 -1
  93. package/dist/context/async-context.js +1 -1
  94. package/dist/context/environment.d.ts +1 -1
  95. package/dist/context/environment.js +1 -1
  96. package/dist/events/CommandKitEventsChannel.d.ts +1 -1
  97. package/dist/{file-DLO1zEcH.d.ts → file-BP8aoN3A.d.ts} +1 -1
  98. package/dist/flags/FlagProvider.d.ts +1 -1
  99. package/dist/flags/feature-flags.d.ts +1 -1
  100. package/dist/flags/feature-flags.js +1 -1
  101. package/dist/flags/store.d.ts +1 -1
  102. package/dist/{helpers-zmC44Mcu.d.ts → helpers-C5jRrAM1.d.ts} +1 -1
  103. package/dist/index.d.ts +19 -16
  104. package/dist/index.js +6 -1
  105. package/dist/kv/constants.d.ts +1 -1
  106. package/dist/kv/serde.d.ts +1 -1
  107. package/dist/{label-DqGRqodo.d.ts → label-CqHiBMXP.d.ts} +1 -1
  108. package/dist/logger/DefaultLogger.js +1 -1
  109. package/dist/logger/Logger.js +1 -1
  110. package/dist/{media-gallery-Ca8es-eB.d.ts → media-gallery-hFfa57Kd.d.ts} +1 -1
  111. package/dist/plugins/CompilerPlugin.d.ts +1 -1
  112. package/dist/plugins/PluginCommon.d.ts +1 -1
  113. package/dist/plugins/RuntimePlugin.d.ts +1 -1
  114. package/dist/plugins/index.d.ts +1 -1
  115. package/dist/plugins/index.js +1 -1
  116. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.d.ts +1 -1
  117. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.js +1 -1
  118. package/dist/plugins/plugin-runtime/CompilerPluginRuntime.d.ts +1 -1
  119. package/dist/plugins/plugin-runtime/CompilerPluginRuntime.js +1 -1
  120. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.d.ts +1 -1
  121. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.js +1 -1
  122. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.d.ts +1 -1
  123. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.js +1 -1
  124. package/dist/plugins/plugin-runtime/runtime.d.ts +1 -1
  125. package/dist/plugins/types.d.ts +1 -1
  126. package/dist/{poll-DQ6DX_Tt.d.ts → poll-ElAd5Z2K.d.ts} +1 -1
  127. package/dist/radio-Dcd4YIZx.d.ts +21 -0
  128. package/dist/{section-Q8nwx_-q.d.ts → section-BqDLXlp3.d.ts} +1 -1
  129. package/dist/{separator-B8P-kdIK.d.ts → separator-DSaCa1Tc.d.ts} +1 -1
  130. package/dist/{signals-CBXwugBW.d.ts → signals-DVOXPkQK.d.ts} +1 -1
  131. package/dist/{text-display-CL9C2yMc.d.ts → text-display-D-0dD7bR.d.ts} +1 -1
  132. package/dist/types.d.ts +1 -1
  133. package/dist/utils/constants.d.ts +1 -1
  134. package/dist/utils/dev-hooks.d.ts +1 -1
  135. package/dist/utils/dev-hooks.js +1 -1
  136. package/dist/utils/utilities.js +1 -1
  137. package/dist/version.js +1 -1
  138. package/package.json +3 -3
  139. package/dist/commandkit-DNln6BAJ.js.map +0 -1
  140. /package/dist/{index-BIsCUWAs.d.ts → index-CQiOqvUC.d.ts} +0 -0
  141. /package/dist/{index-CwHYpK-f.d.ts → index-CTLjHn5u.d.ts} +0 -0
  142. /package/dist/{index-DHrsNvX1.d.ts → index-LKrIp3Oo.d.ts} +0 -0
@@ -66,6 +66,13 @@ var MessageCommandParser = class {
66
66
  return this.parse().command;
67
67
  }
68
68
  /**
69
+ * Gets the full command route as an array of segments.
70
+ * @returns Array of command segments
71
+ */
72
+ getFullRoute() {
73
+ return this.parse().fullRoute;
74
+ }
75
+ /**
69
76
  * Gets the subcommand name if present.
70
77
  * @returns The subcommand name or undefined
71
78
  */
@@ -95,11 +102,7 @@ var MessageCommandParser = class {
95
102
  * @returns The complete command string
96
103
  */
97
104
  getFullCommand() {
98
- return [
99
- this.getCommand(),
100
- this.getSubcommandGroup(),
101
- this.getSubcommand()
102
- ].filter((v) => v).join(" ");
105
+ return this.getFullRoute().join(" ");
103
106
  }
104
107
  /**
105
108
  * Parses the message content into structured command data.
@@ -110,79 +113,81 @@ var MessageCommandParser = class {
110
113
  const content = this.message.content;
111
114
  const prefix = this.getPrefix();
112
115
  if (!prefix) throw require_utils_error_codes.createCommandKitError(require_utils_error_codes.CommandKitErrorCodes.InvalidCommandPrefix);
113
- const parts = content.slice(prefix.length).trim().split(" ");
114
- const command = parts.shift();
116
+ const body = content.slice(prefix.length).trim();
117
+ if (!body) throw require_utils_error_codes.createCommandKitError(require_utils_error_codes.CommandKitErrorCodes.InvalidCommandPrefix);
118
+ const parts = body.split(" ");
119
+ const commandToken = parts.shift();
115
120
  this.#args = parts;
121
+ let command = "";
116
122
  let subcommandGroup;
117
123
  let subcommand;
118
- if (command === null || command === void 0 ? void 0 : command.includes(":")) {
119
- const [, group, cmd] = command.split(":");
120
- if (!cmd && group) subcommand = group;
121
- else if (cmd && group) {
122
- subcommandGroup = group;
123
- subcommand = cmd;
124
+ const fullRoute = (commandToken === null || commandToken === void 0 ? void 0 : commandToken.split(":")) ?? [];
125
+ if (fullRoute.length) {
126
+ command = fullRoute[0];
127
+ if (fullRoute.length === 2) subcommand = fullRoute[1];
128
+ else if (fullRoute.length >= 3) {
129
+ subcommandGroup = fullRoute[1];
130
+ subcommand = fullRoute[fullRoute.length - 1];
124
131
  }
125
132
  }
126
- const schema = this.schema([
127
- command,
128
- subcommandGroup,
129
- subcommand
130
- ].filter(Boolean).join(" ").trim());
133
+ const schema = this.schema(fullRoute.join(" ").trim());
134
+ const options = parts.map((part) => {
135
+ try {
136
+ const [name, value] = part.split(":");
137
+ if (!(name in schema)) return null;
138
+ switch (schema[name]) {
139
+ case discord_js.ApplicationCommandOptionType.Boolean: return {
140
+ name,
141
+ value: value === "true"
142
+ };
143
+ case discord_js.ApplicationCommandOptionType.Integer: return {
144
+ name,
145
+ value: parseInt(value, 10)
146
+ };
147
+ case discord_js.ApplicationCommandOptionType.Number: return {
148
+ name,
149
+ value: parseFloat(value)
150
+ };
151
+ case discord_js.ApplicationCommandOptionType.String: return {
152
+ name,
153
+ value
154
+ };
155
+ case discord_js.ApplicationCommandOptionType.User: return {
156
+ name,
157
+ value: this.message.mentions.users.find((u) => {
158
+ return u.id === value.replace(/[<@!>]/g, "");
159
+ })
160
+ };
161
+ case discord_js.ApplicationCommandOptionType.Channel: return {
162
+ name,
163
+ value: this.message.mentions.channels.find((c) => {
164
+ return c.id === value.replace(/[<#>]/g, "");
165
+ })
166
+ };
167
+ case discord_js.ApplicationCommandOptionType.Role: return {
168
+ name,
169
+ value: this.message.mentions.roles.find((r) => {
170
+ return r.id === value.replace(/[<@&>]/g, "");
171
+ })
172
+ };
173
+ case discord_js.ApplicationCommandOptionType.Attachment: return {
174
+ name,
175
+ value: this.message.attachments.find((a) => {
176
+ return a.name === value;
177
+ })
178
+ };
179
+ default: return null;
180
+ }
181
+ } catch {
182
+ return null;
183
+ }
184
+ }).filter((v) => v !== null);
131
185
  this.#parsed = {
132
186
  command,
133
- options: parts.map((part) => {
134
- try {
135
- const [name, value] = part.split(":");
136
- if (!(name in schema)) return null;
137
- switch (schema[name]) {
138
- case discord_js.ApplicationCommandOptionType.Boolean: return {
139
- name,
140
- value: value === "true"
141
- };
142
- case discord_js.ApplicationCommandOptionType.Integer: return {
143
- name,
144
- value: parseInt(value, 10)
145
- };
146
- case discord_js.ApplicationCommandOptionType.Number: return {
147
- name,
148
- value: parseFloat(value)
149
- };
150
- case discord_js.ApplicationCommandOptionType.String: return {
151
- name,
152
- value
153
- };
154
- case discord_js.ApplicationCommandOptionType.User: return {
155
- name,
156
- value: this.message.mentions.users.find((u) => {
157
- return u.id === value.replace(/[<@!>]/g, "");
158
- })
159
- };
160
- case discord_js.ApplicationCommandOptionType.Channel: return {
161
- name,
162
- value: this.message.mentions.channels.find((c) => {
163
- return c.id === value.replace(/[<#>]/g, "");
164
- })
165
- };
166
- case discord_js.ApplicationCommandOptionType.Role: return {
167
- name,
168
- value: this.message.mentions.roles.find((r) => {
169
- return r.id === value.replace(/[<@&>]/g, "");
170
- })
171
- };
172
- case discord_js.ApplicationCommandOptionType.Attachment: return {
173
- name,
174
- value: this.message.attachments.find((a) => {
175
- return a.name === value;
176
- })
177
- };
178
- default: return null;
179
- }
180
- } catch {
181
- return null;
182
- }
183
- }).filter((v) => v !== null),
187
+ options,
184
188
  subcommand,
185
- subcommandGroup
189
+ subcommandGroup,
190
+ fullRoute
186
191
  };
187
192
  return this.#parsed;
188
193
  }
@@ -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}\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 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.getCommand(), this.getSubcommandGroup(), this.getSubcommand()]\n .filter((v) => v)\n .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 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\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":["../../../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,2 +1,2 @@
1
- import { n as isInteractionSource, r as isMessageSource, t as CommandSource } from "../../helpers-zmC44Mcu.js";
1
+ import { n as isInteractionSource, r as isMessageSource, t as CommandSource } from "../../helpers-C5jRrAM1.js";
2
2
  export { CommandSource, isInteractionSource, isMessageSource };
@@ -1,5 +1,5 @@
1
- import { s as CommandKit } from "../../analytics-engine-uBNaD2CQ.js";
2
- import { i as ParsedEvent } from "../../EventsRouter-EuuSu6NH.js";
1
+ import { s as CommandKit } from "../../analytics-engine-BimOLPwO.js";
2
+ import { i as ParsedEvent } from "../../EventsRouter-Dyr_oJJD.js";
3
3
  import { AsyncLocalStorage } from "node:async_hooks";
4
4
 
5
5
  //#region src/app/events/EventWorkerContext.d.ts
@@ -1,2 +1,2 @@
1
- import { _t as CustomAppCommandProps, bt as ResolvableCommand, dt as AppCommandNative, ft as CommandBuilderLike, gt as CommandTypeData, ht as CommandDataSchemaValue, lt as AppCommand, mt as CommandDataSchemaKey, pt as CommandDataSchema, ut as AppCommandHandler, vt as LoadedCommand, xt as RunCommand, yt as PreparedAppCommandExecution } from "../../analytics-engine-uBNaD2CQ.js";
1
+ import { _t as CustomAppCommandProps, bt as ResolvableCommand, dt as AppCommandNative, ft as CommandBuilderLike, gt as CommandTypeData, ht as CommandDataSchemaValue, lt as AppCommand, mt as CommandDataSchemaKey, pt as CommandDataSchema, ut as AppCommandHandler, vt as LoadedCommand, xt as RunCommand, yt as PreparedAppCommandExecution } from "../../analytics-engine-BimOLPwO.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-DNln6BAJ.js');
2
+ const require_commandkit = require('../../commandkit-D2HMPuRQ.js');
3
3
 
4
4
  exports.AppCommandHandler = require_commandkit.AppCommandHandler;
@@ -1,2 +1,2 @@
1
- import { at as EventListener, it as AppEventsHandlerLoadedData, ot as LoadedEvent, rt as AppEventsHandler } from "../../analytics-engine-uBNaD2CQ.js";
1
+ import { at as EventListener, it as AppEventsHandlerLoadedData, ot as LoadedEvent, rt as AppEventsHandler } from "../../analytics-engine-BimOLPwO.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-DNln6BAJ.js');
2
+ const require_commandkit = require('../../commandkit-D2HMPuRQ.js');
3
3
 
4
4
  exports.AppEventsHandler = require_commandkit.AppEventsHandler;
@@ -1,5 +1,5 @@
1
- import { $t as MessageCommand, Bt as PreRegisterCommandsEvent, Gt as ChatInputCommand, Ht as AutocompleteCommand, Jt as CommandExecutionMode, Kt as ChatInputCommandContext, Qt as InteractionCommandMiddlewareContext, Ut as AutocompleteCommandContext, Vt as AnyCommandExecute, Wt as AutocompleteCommandMiddlewareContext, Xt as ContextParameters, Yt as Context, Zt as InteractionCommandContext, _t as CustomAppCommandProps, an as MiddlewareContext, bt as ResolvableCommand, cn as UserContextMenuCommand, dt as AppCommandNative, en as MessageCommandContext, ft as CommandBuilderLike, gt as CommandTypeData, ht as CommandDataSchemaValue, in as MessageContextMenuCommandMiddlewareContext, ln as UserContextMenuCommandContext, lt as AppCommand, mt as CommandDataSchemaKey, nn as MessageContextMenuCommand, on as MiddlewareContextArgs, pt as CommandDataSchema, qt as CommandContextOptions, rn as MessageContextMenuCommandContext, sn as SlashCommandMiddlewareContext, tn as MessageCommandMiddlewareContext, un as UserContextMenuCommandMiddlewareContext, ut as AppCommandHandler, vt as LoadedCommand, xt as RunCommand, yt as PreparedAppCommandExecution, zt as CommandRegistrar } from "../analytics-engine-uBNaD2CQ.js";
2
- import { i as ParsedMessageCommand, n as MessageCommandOptionsSchema, r as MessageCommandParser, t as MessageCommandOptions } from "../MessageCommandParser-DPCbHXCS.js";
3
- import { i as stopMiddlewares, n as rethrow, r as stopEvents, t as redirect } from "../signals-CBXwugBW.js";
4
- import { n as isInteractionSource, r as isMessageSource, t as CommandSource } from "../helpers-zmC44Mcu.js";
1
+ import { $t as MessageCommand, Bt as PreRegisterCommandsEvent, Gt as ChatInputCommand, Ht as AutocompleteCommand, Jt as CommandExecutionMode, Kt as ChatInputCommandContext, Qt as InteractionCommandMiddlewareContext, Ut as AutocompleteCommandContext, Vt as AnyCommandExecute, Wt as AutocompleteCommandMiddlewareContext, Xt as ContextParameters, Yt as Context, Zt as InteractionCommandContext, _t as CustomAppCommandProps, an as MiddlewareContext, bt as ResolvableCommand, cn as UserContextMenuCommand, dt as AppCommandNative, en as MessageCommandContext, ft as CommandBuilderLike, gt as CommandTypeData, ht as CommandDataSchemaValue, in as MessageContextMenuCommandMiddlewareContext, ln as UserContextMenuCommandContext, lt as AppCommand, mt as CommandDataSchemaKey, nn as MessageContextMenuCommand, on as MiddlewareContextArgs, pt as CommandDataSchema, qt as CommandContextOptions, rn as MessageContextMenuCommandContext, sn as SlashCommandMiddlewareContext, tn as MessageCommandMiddlewareContext, un as UserContextMenuCommandMiddlewareContext, ut as AppCommandHandler, vt as LoadedCommand, xt as RunCommand, yt as PreparedAppCommandExecution, zt as CommandRegistrar } from "../analytics-engine-BimOLPwO.js";
2
+ import { i as ParsedMessageCommand, n as MessageCommandOptionsSchema, r as MessageCommandParser, t as MessageCommandOptions } from "../MessageCommandParser-UTKsRvb9.js";
3
+ import { i as stopMiddlewares, n as rethrow, r as stopEvents, t as redirect } from "../signals-DVOXPkQK.js";
4
+ import { n as isInteractionSource, r as isMessageSource, t as CommandSource } from "../helpers-C5jRrAM1.js";
5
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 };
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-DNln6BAJ.js');
2
+ const require_commandkit = require('../commandkit-D2HMPuRQ.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-CBXwugBW.js";
1
+ import { i as stopMiddlewares, n as rethrow, r as stopEvents, t as redirect } from "../../signals-DVOXPkQK.js";
2
2
  export { redirect, rethrow, stopEvents, stopMiddlewares };
@@ -1,4 +1,4 @@
1
- import { an as MiddlewareContext } from "../../analytics-engine-uBNaD2CQ.js";
1
+ import { an as MiddlewareContext } from "../../analytics-engine-BimOLPwO.js";
2
2
 
3
3
  //#region src/app/middlewares/permissions.d.ts
4
4
  declare const middlewareId: `${string}-${string}-${string}-${string}-${string}`;
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_commandkit = require('../../commandkit-DNln6BAJ.js');
2
+ const require_commandkit = require('../../commandkit-D2HMPuRQ.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 PreRegisterCommandsEvent, zt as CommandRegistrar } from "../../analytics-engine-uBNaD2CQ.js";
1
+ import { Bt as PreRegisterCommandsEvent, zt as CommandRegistrar } from "../../analytics-engine-BimOLPwO.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-DNln6BAJ.js');
2
+ const require_commandkit = require('../../commandkit-D2HMPuRQ.js');
3
3
 
4
4
  exports.CommandRegistrar = require_commandkit.CommandRegistrar;
@@ -0,0 +1,2 @@
1
+ import { a as CompiledCommandRoute, i as CommandTreeNodeSource, n as CommandTreeNode, r as CommandTreeNodeKind, t as CommandRouteDiagnostic } from "../../CommandTree-DwfiCsOl.js";
2
+ export { CommandRouteDiagnostic, CommandTreeNode, CommandTreeNodeKind, CommandTreeNodeSource, CompiledCommandRoute };
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
@@ -1,2 +1,2 @@
1
- import { a as ParsedCommandData, i as Middleware, n as CommandsRouter, r as CommandsRouterOptions, t as Command } from "../../CommandsRouter-DiNoF0dq.js";
1
+ import { a as ParsedCommandData, i as Middleware, n as CommandsRouter, r as CommandsRouterOptions, t as Command } from "../../CommandsRouter-D-b3xv38.js";
2
2
  export { Command, CommandsRouter, CommandsRouterOptions, Middleware, ParsedCommandData };