commandkit 1.0.0-rc1 → 1.2.0-dev.20250819020008

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 (104) hide show
  1. package/README.md +4 -12
  2. package/dist/{CommandsRouter-Ci1Pe8Vd.js → CommandsRouter-tMAivEfv.js} +10 -7
  3. package/dist/{CommandsRouter-Ci1Pe8Vd.js.map → CommandsRouter-tMAivEfv.js.map} +1 -1
  4. package/dist/{EventWorkerContext-DJUi1W3T.d.ts → EventWorkerContext-C7CG7hIP.d.ts} +2 -2
  5. package/dist/analytics/analytics-engine.d.ts +1 -1
  6. package/dist/analytics/analytics-engine.js +2 -2
  7. package/dist/analytics/analytics-provider.d.ts +1 -1
  8. package/dist/analytics/utils.js +2 -2
  9. package/dist/{analytics-engine-vA4MaJYx.d.ts → analytics-engine-nkyqvYAE.d.ts} +2 -2
  10. package/dist/app/commands/AppCommandRunner.d.ts +1 -1
  11. package/dist/app/commands/AppCommandRunner.js +2 -2
  12. package/dist/app/commands/Context.d.ts +1 -1
  13. package/dist/app/commands/Context.js +2 -2
  14. package/dist/app/events/EventWorkerContext.d.ts +2 -2
  15. package/dist/app/handlers/AppCommandHandler.d.ts +1 -1
  16. package/dist/app/handlers/AppCommandHandler.js +2 -2
  17. package/dist/app/handlers/AppEventsHandler.d.ts +1 -1
  18. package/dist/app/handlers/AppEventsHandler.js +2 -2
  19. package/dist/app/index.d.ts +1 -1
  20. package/dist/app/index.js +2 -2
  21. package/dist/app/register/CommandRegistrar.d.ts +1 -1
  22. package/dist/app/register/CommandRegistrar.js +2 -2
  23. package/dist/app/router/CommandsRouter.js +1 -1
  24. package/dist/app/router/index.js +1 -1
  25. package/dist/{build-DXl8uEv4.js → build-BoGqWPIS.js} +2 -2
  26. package/dist/{build-DXl8uEv4.js.map → build-BoGqWPIS.js.map} +1 -1
  27. package/dist/cli/build.d.ts +1 -1
  28. package/dist/cli/build.js +3 -3
  29. package/dist/cli/common.d.ts +1 -1
  30. package/dist/cli/development.js +3 -3
  31. package/dist/cli/information.js +1 -1
  32. package/dist/cli/init.js +3 -3
  33. package/dist/cli/production.js +3 -3
  34. package/dist/{commandkit-DMEW0kJg.js → commandkit-5VMG2thU.js} +4 -4
  35. package/dist/{commandkit-DMEW0kJg.js.map → commandkit-5VMG2thU.js.map} +1 -1
  36. package/dist/commandkit.d.ts +1 -1
  37. package/dist/commandkit.js +2 -2
  38. package/dist/components/index.js +2 -2
  39. package/dist/components/v1/button/Button.js +2 -2
  40. package/dist/components/v1/button/ButtonKit.js +2 -2
  41. package/dist/components/v1/modal/Modal.js +2 -2
  42. package/dist/components/v1/modal/ModalKit.js +2 -2
  43. package/dist/components/v1/select-menu/ChannelSelectMenuKit.js +2 -2
  44. package/dist/components/v1/select-menu/MentionableSelectMenuKit.js +2 -2
  45. package/dist/components/v1/select-menu/RoleSelectMenuKit.js +2 -2
  46. package/dist/components/v1/select-menu/SelectMenu.js +2 -2
  47. package/dist/components/v1/select-menu/StringSelectMenuKit.js +2 -2
  48. package/dist/components/v1/select-menu/UserSelectMenuKit.js +2 -2
  49. package/dist/config/config.d.ts +2 -2
  50. package/dist/config/config.js +2 -2
  51. package/dist/config/default.d.ts +1 -1
  52. package/dist/config/default.js +2 -2
  53. package/dist/config/loader.d.ts +1 -1
  54. package/dist/config/loader.js +2 -2
  55. package/dist/config/types.d.ts +1 -1
  56. package/dist/config/utils.d.ts +1 -1
  57. package/dist/{config-CcWJ-vz5.d.ts → config-C1msSu1G.d.ts} +2 -2
  58. package/dist/{constants-DrjIvQd6.d.ts → constants-D8PMA9on.d.ts} +1 -1
  59. package/dist/context/async-context.d.ts +1 -1
  60. package/dist/context/async-context.js +2 -2
  61. package/dist/context/environment.d.ts +1 -1
  62. package/dist/context/environment.js +2 -2
  63. package/dist/error-codes-BzoEctmD.d.ts +54 -0
  64. package/dist/events/CommandKitEventsChannel.d.ts +1 -1
  65. package/dist/{feature-flags-Cxl9JtVG.js → feature-flags-C44dggkN.js} +2 -2
  66. package/dist/{feature-flags-Cxl9JtVG.js.map → feature-flags-C44dggkN.js.map} +1 -1
  67. package/dist/flags/FlagProvider.d.ts +1 -1
  68. package/dist/flags/feature-flags.d.ts +1 -1
  69. package/dist/flags/feature-flags.js +3 -3
  70. package/dist/flags/store.d.ts +1 -1
  71. package/dist/index.d.ts +5 -4
  72. package/dist/index.js +8 -6
  73. package/dist/{init-DTBFphOg.js → init-ZjceQTSt.js} +2 -2
  74. package/dist/{init-DTBFphOg.js.map → init-ZjceQTSt.js.map} +1 -1
  75. package/dist/kv/constants.d.ts +1 -1
  76. package/dist/kv/kv.d.ts +2 -2
  77. package/dist/kv/serde.d.ts +2 -2
  78. package/dist/logger/DefaultLogger.js +2 -2
  79. package/dist/logger/Logger.js +2 -2
  80. package/dist/plugins/CompilerPlugin.d.ts +1 -1
  81. package/dist/plugins/PluginCommon.d.ts +1 -1
  82. package/dist/plugins/RuntimePlugin.d.ts +1 -1
  83. package/dist/plugins/index.d.ts +1 -1
  84. package/dist/plugins/index.js +2 -2
  85. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.d.ts +1 -1
  86. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.js +2 -2
  87. package/dist/plugins/plugin-runtime/CompilerPluginRuntime.d.ts +1 -1
  88. package/dist/plugins/plugin-runtime/CompilerPluginRuntime.js +2 -2
  89. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.d.ts +1 -1
  90. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.js +2 -2
  91. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.d.ts +1 -1
  92. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.js +2 -2
  93. package/dist/plugins/plugin-runtime/runtime.d.ts +1 -1
  94. package/dist/plugins/types.d.ts +1 -1
  95. package/dist/{serde-BUDI03pX.d.ts → serde-BYaKrsOV.d.ts} +2 -2
  96. package/dist/types.d.ts +1 -1
  97. package/dist/utils/dev-hooks.d.ts +1 -1
  98. package/dist/utils/dev-hooks.js +2 -2
  99. package/dist/utils/error-codes.d.ts +2 -54
  100. package/dist/utils/utilities.js +2 -2
  101. package/dist/{version-77Em35sO.js → version-eRVLZxyL.js} +2 -2
  102. package/dist/{version-77Em35sO.js.map → version-eRVLZxyL.js.map} +1 -1
  103. package/dist/version.js +1 -1
  104. package/package.json +2 -2
package/README.md CHANGED
@@ -1,16 +1,12 @@
1
1
  <div align="center">
2
- <img src="https://raw.githubusercontent.com/underctrl-io/commandkit/main/apps/website/static/img/ckit_logo.svg" width="60%" />
2
+ <img src="https://raw.githubusercontent.com/underctrl-io/commandkit/main/apps/website/static/img/ckit_logo.svg" width="75%" />
3
3
  <br />
4
4
  <a href="https://ctrl.lol/discord"><img src="https://img.shields.io/discord/1055188344188973066?color=5865F2&logo=discord&logoColor=white" alt="support server" /></a>
5
5
  <a href="https://www.npmjs.com/package/commandkit"><img src="https://img.shields.io/npm/v/commandkit?maxAge=3600" alt="npm version" /></a>
6
6
  <a href="https://www.npmjs.com/package/commandkit"><img src="https://img.shields.io/npm/dt/commandkit?maxAge=3600" alt="npm downloads" /></a>
7
7
  </div>
8
8
 
9
- # CommandKit
10
-
11
- CommandKit is a library that makes it easy to handle commands and events in your Discord.js projects.
12
-
13
- > **Supports Discord.js version 14**
9
+ <p align="center">The discord.js meta-framework for building powerful, modular, and extensible Discord bots with ease.</p>
14
10
 
15
11
  ## Features
16
12
 
@@ -31,9 +27,9 @@ CommandKit is a library that makes it easy to handle commands and events in your
31
27
  - Less boilerplate code, more productivity 💪
32
28
  - and much more...
33
29
 
34
- ## Documentation
30
+ ## Getting Started
35
31
 
36
- You can find the full documentation [here](https://commandkit.dev).
32
+ Get started by checking out the [documentation](https://commandkit.dev).
37
33
 
38
34
  ## Installation
39
35
 
@@ -48,10 +44,6 @@ npm create commandkit
48
44
 
49
45
  This will prompt you to enter few details about your project. Once you have entered the details, you can simply run `commandkit dev` to start the bot application.
50
46
 
51
- ## Getting Started
52
-
53
- To get started with CommandKit, you can check out the [quick start guide](https://commandkit.dev/docs/next/guide/installation).
54
-
55
47
  ## Support and Suggestions
56
48
 
57
49
  Submit any queries or suggestions in our [Discord community](https://ctrl.lol/discord).
@@ -186,12 +186,15 @@ var CommandsRouter = class {
186
186
  applyMiddlewares() {
187
187
  this.commands.forEach((command) => {
188
188
  const commandPath = command.parentPath;
189
- const samePathMiddlewares = Array.from(this.middlewares.values()).filter((middleware) => {
190
- if (middleware.global) return true;
191
- if (middleware.command) return middleware.command === command.name;
192
- return middleware.parentPath === commandPath;
193
- }).map((middleware) => middleware.id);
194
- command.middlewares = Array.from(new Set([...command.middlewares, ...samePathMiddlewares]));
189
+ const allMiddlewares = Array.from(this.middlewares.values());
190
+ const commandSpecificMiddlewares = allMiddlewares.filter((middleware) => middleware.command === command.name).map((middleware) => middleware.id);
191
+ const directorySpecificMiddlewares = allMiddlewares.filter((middleware) => !middleware.global && !middleware.command && middleware.parentPath === commandPath).map((middleware) => middleware.id);
192
+ const globalMiddlewares = allMiddlewares.filter((middleware) => middleware.global).map((middleware) => middleware.id);
193
+ command.middlewares = [
194
+ ...commandSpecificMiddlewares,
195
+ ...directorySpecificMiddlewares,
196
+ ...globalMiddlewares
197
+ ];
195
198
  });
196
199
  }
197
200
  /**
@@ -211,4 +214,4 @@ Object.defineProperty(exports, 'CommandsRouter', {
211
214
  return CommandsRouter;
212
215
  }
213
216
  });
214
- //# sourceMappingURL=CommandsRouter-Ci1Pe8Vd.js.map
217
+ //# sourceMappingURL=CommandsRouter-tMAivEfv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandsRouter-Ci1Pe8Vd.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';\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 and middleware.\n */\nexport interface ParsedCommandData {\n commands: Record<string, Command>;\n middlewares: Record<string, Middleware>;\n}\n\n/**\n * Configuration options for the commands router.\n */\nexport interface CommandsRouterOptions {\n entrypoint: string;\n}\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 * 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 * 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 and middleware data.\n * @param data - Parsed command data to populate with\n */\n public populate(data: ParsedCommandData) {\n for (const [id, command] of Object.entries(data.commands)) {\n this.commands.set(id, command);\n }\n\n for (const [id, middleware] of Object.entries(data.middlewares)) {\n this.middlewares.set(id, middleware);\n }\n }\n\n /**\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 * Clears all loaded commands and middleware.\n */\n public clear() {\n this.commands.clear();\n this.middlewares.clear();\n }\n\n /**\n * Scans the filesystem for commands and middleware files.\n * @returns Parsed command data\n */\n public async scan() {\n const entries = await readdir(this.options.entrypoint, {\n withFileTypes: true,\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n const fullPath = join(this.options.entrypoint, entry.name);\n\n if (entry.isDirectory()) {\n const category = this.isCategory(entry.name)\n ? entry.name.slice(1, -1)\n : null;\n\n await this.traverse(fullPath, category);\n } else {\n await this.handle(entry);\n }\n }\n\n await this.applyMiddlewares();\n\n return this.toJSON();\n }\n\n /**\n * Gets the raw command and middleware collections.\n * @returns Object containing commands and middlewares collections\n */\n public getData() {\n return {\n commands: this.commands,\n middlewares: this.middlewares,\n };\n }\n\n /**\n * Converts the loaded data to a JSON-serializable format.\n * @returns Plain object with commands and middlewares\n */\n public toJSON() {\n return {\n commands: Object.fromEntries(this.commands.entries()),\n middlewares: Object.fromEntries(this.middlewares.entries()),\n };\n }\n\n /**\n * @private\n * @internal\n */\n private async traverse(path: string, category: string | null) {\n const entries = await readdir(path, {\n withFileTypes: true,\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n if (entry.isFile()) {\n if (this.isCommand(entry.name) || this.isMiddleware(entry.name)) {\n await this.handle(entry, category);\n }\n } else if (\n entry.isDirectory() &&\n this.isCategory(entry.name) &&\n category\n ) {\n // nested category\n const nestedCategory = this.isCategory(entry.name)\n ? `${category}:${entry.name.slice(1, -1)}`\n : null;\n await this.traverse(join(path, entry.name), nestedCategory);\n }\n\n // TODO: handle subcommands\n }\n }\n\n /**\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 } else if (this.isMiddleware(name)) {\n const middleware: Middleware = {\n id: crypto.randomUUID(),\n name: basename(path, extname(path)),\n path,\n relativePath: this.replaceEntrypoint(path),\n parentPath: entry.parentPath,\n global: GLOBAL_MIDDLEWARE_PATTERN.test(name),\n command: COMMAND_MIDDLEWARE_PATTERN.test(name)\n ? name.match(COMMAND_MIDDLEWARE_PATTERN)?.[1] || null\n : null,\n };\n\n this.middlewares.set(middleware.id, middleware);\n }\n }\n\n /**\n * @private\n * @internal\n */\n private applyMiddlewares() {\n this.commands.forEach((command) => {\n const commandPath = command.parentPath;\n const samePathMiddlewares = Array.from(this.middlewares.values())\n .filter((middleware) => {\n if (middleware.global) return true;\n if (middleware.command) return middleware.command === command.name;\n return middleware.parentPath === commandPath;\n })\n .map((middleware) => middleware.id);\n\n command.middlewares = Array.from(\n new Set([...command.middlewares, ...samePathMiddlewares]),\n );\n });\n }\n\n /**\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-tMAivEfv.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';\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 and middleware.\n */\nexport interface ParsedCommandData {\n commands: Record<string, Command>;\n middlewares: Record<string, Middleware>;\n}\n\n/**\n * Configuration options for the commands router.\n */\nexport interface CommandsRouterOptions {\n entrypoint: string;\n}\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 * 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 * 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 and middleware data.\n * @param data - Parsed command data to populate with\n */\n public populate(data: ParsedCommandData) {\n for (const [id, command] of Object.entries(data.commands)) {\n this.commands.set(id, command);\n }\n\n for (const [id, middleware] of Object.entries(data.middlewares)) {\n this.middlewares.set(id, middleware);\n }\n }\n\n /**\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 * Clears all loaded commands and middleware.\n */\n public clear() {\n this.commands.clear();\n this.middlewares.clear();\n }\n\n /**\n * Scans the filesystem for commands and middleware files.\n * @returns Parsed command data\n */\n public async scan() {\n const entries = await readdir(this.options.entrypoint, {\n withFileTypes: true,\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n const fullPath = join(this.options.entrypoint, entry.name);\n\n if (entry.isDirectory()) {\n const category = this.isCategory(entry.name)\n ? entry.name.slice(1, -1)\n : null;\n\n await this.traverse(fullPath, category);\n } else {\n await this.handle(entry);\n }\n }\n\n await this.applyMiddlewares();\n\n return this.toJSON();\n }\n\n /**\n * Gets the raw command and middleware collections.\n * @returns Object containing commands and middlewares collections\n */\n public getData() {\n return {\n commands: this.commands,\n middlewares: this.middlewares,\n };\n }\n\n /**\n * Converts the loaded data to a JSON-serializable format.\n * @returns Plain object with commands and middlewares\n */\n public toJSON() {\n return {\n commands: Object.fromEntries(this.commands.entries()),\n middlewares: Object.fromEntries(this.middlewares.entries()),\n };\n }\n\n /**\n * @private\n * @internal\n */\n private async traverse(path: string, category: string | null) {\n const entries = await readdir(path, {\n withFileTypes: true,\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n if (entry.isFile()) {\n if (this.isCommand(entry.name) || this.isMiddleware(entry.name)) {\n await this.handle(entry, category);\n }\n } else if (\n entry.isDirectory() &&\n this.isCategory(entry.name) &&\n category\n ) {\n // nested category\n const nestedCategory = this.isCategory(entry.name)\n ? `${category}:${entry.name.slice(1, -1)}`\n : null;\n await this.traverse(join(path, entry.name), nestedCategory);\n }\n\n // TODO: handle subcommands\n }\n }\n\n /**\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 } else if (this.isMiddleware(name)) {\n const middleware: Middleware = {\n id: crypto.randomUUID(),\n name: basename(path, extname(path)),\n path,\n relativePath: this.replaceEntrypoint(path),\n parentPath: entry.parentPath,\n global: GLOBAL_MIDDLEWARE_PATTERN.test(name),\n command: COMMAND_MIDDLEWARE_PATTERN.test(name)\n ? name.match(COMMAND_MIDDLEWARE_PATTERN)?.[1] || null\n : null,\n };\n\n this.middlewares.set(middleware.id, middleware);\n }\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(\n (middleware) =>\n !middleware.global &&\n !middleware.command &&\n middleware.parentPath === commandPath,\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 ...commandSpecificMiddlewares,\n ...directorySpecificMiddlewares,\n ...globalMiddlewares,\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,4 +1,4 @@
1
- import { CommandKit } from "./analytics-engine-vA4MaJYx.js";
1
+ import { CommandKit } from "./analytics-engine-nkyqvYAE.js";
2
2
  import { ParsedEvent } from "./EventsRouter-BacqK6z3.js";
3
3
  import { AsyncLocalStorage } from "node:async_hooks";
4
4
 
@@ -40,4 +40,4 @@ declare function getEventWorkerContext(): EventWorkerContext;
40
40
  declare function isEventWorkerContext(worker: any): worker is EventWorkerContext;
41
41
  //#endregion
42
42
  export { EventWorkerContext, eventWorkerContext, getEventWorkerContext, isEventWorkerContext, runInEventWorkerContext };
43
- //# sourceMappingURL=EventWorkerContext-DJUi1W3T.d.ts.map
43
+ //# sourceMappingURL=EventWorkerContext-C7CG7hIP.d.ts.map
@@ -1,4 +1,4 @@
1
- import { AnalyticsEngine, FilterFunction } from "../analytics-engine-vA4MaJYx.js";
1
+ import { AnalyticsEngine, FilterFunction } from "../analytics-engine-nkyqvYAE.js";
2
2
  import "../EventInterceptor-x-R2qshQ.js";
3
3
  import "../ButtonKit-C7r7RPNf.js";
4
4
  import "../ModalKit-Btz58KYn.js";
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C-ViHyu-.js');
4
- const require_commandkit = require('../commandkit-DMEW0kJg.js');
4
+ const require_commandkit = require('../commandkit-5VMG2thU.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-vnMIelAE.js');
7
7
  require('../container-z621KfH5.js');
@@ -27,7 +27,7 @@ require('../EventWorkerContext-CSlD9rbx.js');
27
27
  require('../signals-DHdYrd-n.js');
28
28
  require('../constants-CUND8XkG.js');
29
29
  require('../MessageCommandParser-B_BEQ3p8.js');
30
- require('../CommandsRouter-Ci1Pe8Vd.js');
30
+ require('../CommandsRouter-tMAivEfv.js');
31
31
  require('../EventsRouter-C_J0M3uO.js');
32
32
  require('../router-DHnFRADH.js');
33
33
  require('../common-DNADUU3_.js');
@@ -1,4 +1,4 @@
1
- import { AnalyticsEvent, AnalyticsProvider, IdentifyEvent } from "../analytics-engine-vA4MaJYx.js";
1
+ import { AnalyticsEvent, AnalyticsProvider, IdentifyEvent } from "../analytics-engine-nkyqvYAE.js";
2
2
  import "../EventInterceptor-x-R2qshQ.js";
3
3
  import "../ButtonKit-C7r7RPNf.js";
4
4
  import "../ModalKit-Btz58KYn.js";
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C-ViHyu-.js');
4
- const require_commandkit = require('../commandkit-DMEW0kJg.js');
4
+ const require_commandkit = require('../commandkit-5VMG2thU.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-vnMIelAE.js');
7
7
  require('../container-z621KfH5.js');
@@ -27,7 +27,7 @@ require('../EventWorkerContext-CSlD9rbx.js');
27
27
  require('../signals-DHdYrd-n.js');
28
28
  require('../constants-CUND8XkG.js');
29
29
  require('../MessageCommandParser-B_BEQ3p8.js');
30
- require('../CommandsRouter-Ci1Pe8Vd.js');
30
+ require('../CommandsRouter-tMAivEfv.js');
31
31
  require('../EventsRouter-C_J0M3uO.js');
32
32
  require('../router-DHnFRADH.js');
33
33
  require('../common-DNADUU3_.js');
@@ -49,7 +49,7 @@ type CommandData = Prettify<Omit<RESTPostAPIApplicationCommandsJSONBody, 'descri
49
49
  /**
50
50
  * Represents an event handler for a specific event.
51
51
  */
52
- type EventHandler<K extends keyof ClientEvents> = (...args: ClientEvents[K]) => void | Promise<void>;
52
+ type EventHandler<K extends keyof ClientEvents> = (...args: [...ClientEvents[K], Client<true>, CommandKit]) => void | Promise<void>;
53
53
  //#endregion
54
54
  //#region src/app/commands/Context.d.ts
55
55
  /**
@@ -2180,4 +2180,4 @@ declare class AnalyticsEngine {
2180
2180
  }
2181
2181
  //#endregion
2182
2182
  export { AnalyticsEngine, AnalyticsEvent, AnalyticsProvider, AnyCommandExecute, AppCommand, AppCommandHandler, AppCommandNative, AppCommandRunner, AppEventsHandler, AppEventsHandlerLoadedData, AsyncFunction, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, BootstrapFunction, ChatInputCommand, ChatInputCommandContext, CommandBuilderLike, CommandContext, CommandContextOptions, CommandData, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandExecutionMode, CommandFlagContext, CommandKit, CommandKitCompilerOptions, CommandKitConfig, CommandKitConfiguration, CommandKitEnvironment, CommandKitEnvironmentInternalData, CommandKitEnvironmentType, CommandKitEventDispatch, CommandKitEventsChannel, CommandKitHMREvent, CommandKitOptions, CommandKitPlugin, CommandKitPluginRuntime, CommandRegistrar, CommandTypeData, CommonDirectiveTransformer, CommonDirectiveTransformerOptions, CommonPluginRuntime, CompilerPlugin, CompilerPluginRuntime, Context, ContextParameters, CustomAppCommandProps, CustomEvaluationContext, CustomEvaluationFunction, DecideFunction, DeepPartial, DeepRequired, EvaluationContext, EventFlagContext, EventHandler, EventListener, FeatureFlag, FeatureFlagDefinition, FilterFunction, FlagConfiguration, FlagProvider, FlagRunner, FlagStore, GenericFunction, IdentifyEvent, IdentifyFunction, InteractionCommandContext, InteractionCommandMiddlewareContext, IpcMessageCommand, JsonFlagProvider, ListenerFunction, LoadedCommand, LoadedEvent, MaybeFalsey, MaybePromise, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, MiddlewareContext, MiddlewareContextArgs, PluginCommon, PluginOptions, PluginTransformParameters, PluginType, PreRegisterCommandsEvent, PreparedAppCommandExecution, ResolvableCommand, ResolvedCommandKitConfig, RunCommand, RunCommandOptions, RuntimePlugin, SlashCommandMiddlewareContext, TemplateHandler, TransformedResult, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext, after, cancelAfter, commandkit, exitContext, flag, getCommandKit, getContext, isCommandWorkerContext, isCompilerPlugin, isPlugin, isRuntimePlugin, makeContextAwareFunction, mergeDeep, onApplicationBootstrap, onBootstrap, provideContext, registerDevHooks, setFlagProvider, useEnvironment };
2183
- //# sourceMappingURL=analytics-engine-vA4MaJYx.d.ts.map
2183
+ //# sourceMappingURL=analytics-engine-nkyqvYAE.d.ts.map
@@ -1,4 +1,4 @@
1
- import { AppCommandRunner, RunCommandOptions } from "../../analytics-engine-vA4MaJYx.js";
1
+ import { AppCommandRunner, RunCommandOptions } from "../../analytics-engine-nkyqvYAE.js";
2
2
  import "../../EventInterceptor-x-R2qshQ.js";
3
3
  import "../../ButtonKit-C7r7RPNf.js";
4
4
  import "../../ModalKit-Btz58KYn.js";
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C-ViHyu-.js');
4
- const require_commandkit = require('../../commandkit-DMEW0kJg.js');
4
+ const require_commandkit = require('../../commandkit-5VMG2thU.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-vnMIelAE.js');
7
7
  require('../../container-z621KfH5.js');
@@ -27,7 +27,7 @@ require('../../EventWorkerContext-CSlD9rbx.js');
27
27
  require('../../signals-DHdYrd-n.js');
28
28
  require('../../constants-CUND8XkG.js');
29
29
  require('../../MessageCommandParser-B_BEQ3p8.js');
30
- require('../../CommandsRouter-Ci1Pe8Vd.js');
30
+ require('../../CommandsRouter-tMAivEfv.js');
31
31
  require('../../EventsRouter-C_J0M3uO.js');
32
32
  require('../../router-DHnFRADH.js');
33
33
  require('../../common-DNADUU3_.js');
@@ -1,4 +1,4 @@
1
- import { AnyCommandExecute, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, ChatInputCommand, ChatInputCommandContext, CommandContextOptions, CommandExecutionMode, Context, ContextParameters, InteractionCommandContext, InteractionCommandMiddlewareContext, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, MiddlewareContext, MiddlewareContextArgs, SlashCommandMiddlewareContext, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext } from "../../analytics-engine-vA4MaJYx.js";
1
+ import { AnyCommandExecute, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, ChatInputCommand, ChatInputCommandContext, CommandContextOptions, CommandExecutionMode, Context, ContextParameters, InteractionCommandContext, InteractionCommandMiddlewareContext, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, MiddlewareContext, MiddlewareContextArgs, SlashCommandMiddlewareContext, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext } from "../../analytics-engine-nkyqvYAE.js";
2
2
  import "../../EventInterceptor-x-R2qshQ.js";
3
3
  import "../../ButtonKit-C7r7RPNf.js";
4
4
  import "../../ModalKit-Btz58KYn.js";
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C-ViHyu-.js');
4
- const require_commandkit = require('../../commandkit-DMEW0kJg.js');
4
+ const require_commandkit = require('../../commandkit-5VMG2thU.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-vnMIelAE.js');
7
7
  require('../../container-z621KfH5.js');
@@ -27,7 +27,7 @@ require('../../EventWorkerContext-CSlD9rbx.js');
27
27
  require('../../signals-DHdYrd-n.js');
28
28
  require('../../constants-CUND8XkG.js');
29
29
  require('../../MessageCommandParser-B_BEQ3p8.js');
30
- require('../../CommandsRouter-Ci1Pe8Vd.js');
30
+ require('../../CommandsRouter-tMAivEfv.js');
31
31
  require('../../EventsRouter-C_J0M3uO.js');
32
32
  require('../../router-DHnFRADH.js');
33
33
  require('../../common-DNADUU3_.js');
@@ -1,4 +1,4 @@
1
- import "../../analytics-engine-vA4MaJYx.js";
1
+ import "../../analytics-engine-nkyqvYAE.js";
2
2
  import "../../EventInterceptor-x-R2qshQ.js";
3
3
  import "../../ButtonKit-C7r7RPNf.js";
4
4
  import "../../ModalKit-Btz58KYn.js";
@@ -29,5 +29,5 @@ import "../../CommandsRouter-CoOA7hkf.js";
29
29
  import "../../EventsRouter-BacqK6z3.js";
30
30
  import "../../index-DKcmsWXw.js";
31
31
  import "../../constants-MKu-Q1jh.js";
32
- import { EventWorkerContext, eventWorkerContext, getEventWorkerContext, isEventWorkerContext, runInEventWorkerContext } from "../../EventWorkerContext-DJUi1W3T.js";
32
+ import { EventWorkerContext, eventWorkerContext, getEventWorkerContext, isEventWorkerContext, runInEventWorkerContext } from "../../EventWorkerContext-C7CG7hIP.js";
33
33
  export { EventWorkerContext, eventWorkerContext, getEventWorkerContext, isEventWorkerContext, runInEventWorkerContext };
@@ -1,4 +1,4 @@
1
- import { AppCommand, AppCommandHandler, AppCommandNative, CommandBuilderLike, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandTypeData, CustomAppCommandProps, LoadedCommand, PreparedAppCommandExecution, ResolvableCommand, RunCommand } from "../../analytics-engine-vA4MaJYx.js";
1
+ import { AppCommand, AppCommandHandler, AppCommandNative, CommandBuilderLike, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandTypeData, CustomAppCommandProps, LoadedCommand, PreparedAppCommandExecution, ResolvableCommand, RunCommand } from "../../analytics-engine-nkyqvYAE.js";
2
2
  import "../../EventInterceptor-x-R2qshQ.js";
3
3
  import "../../ButtonKit-C7r7RPNf.js";
4
4
  import "../../ModalKit-Btz58KYn.js";
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C-ViHyu-.js');
4
- const require_commandkit = require('../../commandkit-DMEW0kJg.js');
4
+ const require_commandkit = require('../../commandkit-5VMG2thU.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-vnMIelAE.js');
7
7
  require('../../container-z621KfH5.js');
@@ -27,7 +27,7 @@ require('../../EventWorkerContext-CSlD9rbx.js');
27
27
  require('../../signals-DHdYrd-n.js');
28
28
  require('../../constants-CUND8XkG.js');
29
29
  require('../../MessageCommandParser-B_BEQ3p8.js');
30
- require('../../CommandsRouter-Ci1Pe8Vd.js');
30
+ require('../../CommandsRouter-tMAivEfv.js');
31
31
  require('../../EventsRouter-C_J0M3uO.js');
32
32
  require('../../router-DHnFRADH.js');
33
33
  require('../../common-DNADUU3_.js');
@@ -1,4 +1,4 @@
1
- import { AppEventsHandler, AppEventsHandlerLoadedData, EventListener, LoadedEvent } from "../../analytics-engine-vA4MaJYx.js";
1
+ import { AppEventsHandler, AppEventsHandlerLoadedData, EventListener, LoadedEvent } from "../../analytics-engine-nkyqvYAE.js";
2
2
  import "../../EventInterceptor-x-R2qshQ.js";
3
3
  import "../../ButtonKit-C7r7RPNf.js";
4
4
  import "../../ModalKit-Btz58KYn.js";
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C-ViHyu-.js');
4
- const require_commandkit = require('../../commandkit-DMEW0kJg.js');
4
+ const require_commandkit = require('../../commandkit-5VMG2thU.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-vnMIelAE.js');
7
7
  require('../../container-z621KfH5.js');
@@ -27,7 +27,7 @@ require('../../EventWorkerContext-CSlD9rbx.js');
27
27
  require('../../signals-DHdYrd-n.js');
28
28
  require('../../constants-CUND8XkG.js');
29
29
  require('../../MessageCommandParser-B_BEQ3p8.js');
30
- require('../../CommandsRouter-Ci1Pe8Vd.js');
30
+ require('../../CommandsRouter-tMAivEfv.js');
31
31
  require('../../EventsRouter-C_J0M3uO.js');
32
32
  require('../../router-DHnFRADH.js');
33
33
  require('../../common-DNADUU3_.js');
@@ -1,4 +1,4 @@
1
- import { AnyCommandExecute, AppCommand, AppCommandHandler, AppCommandNative, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, ChatInputCommand, ChatInputCommandContext, CommandBuilderLike, CommandContextOptions, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandExecutionMode, CommandRegistrar, CommandTypeData, Context, ContextParameters, CustomAppCommandProps, InteractionCommandContext, InteractionCommandMiddlewareContext, LoadedCommand, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, MiddlewareContext, MiddlewareContextArgs, PreRegisterCommandsEvent, PreparedAppCommandExecution, ResolvableCommand, RunCommand, SlashCommandMiddlewareContext, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext } from "../analytics-engine-vA4MaJYx.js";
1
+ import { AnyCommandExecute, AppCommand, AppCommandHandler, AppCommandNative, AutocompleteCommand, AutocompleteCommandContext, AutocompleteCommandMiddlewareContext, ChatInputCommand, ChatInputCommandContext, CommandBuilderLike, CommandContextOptions, CommandDataSchema, CommandDataSchemaKey, CommandDataSchemaValue, CommandExecutionMode, CommandRegistrar, CommandTypeData, Context, ContextParameters, CustomAppCommandProps, InteractionCommandContext, InteractionCommandMiddlewareContext, LoadedCommand, MessageCommand, MessageCommandContext, MessageCommandMiddlewareContext, MessageContextMenuCommand, MessageContextMenuCommandContext, MessageContextMenuCommandMiddlewareContext, MiddlewareContext, MiddlewareContextArgs, PreRegisterCommandsEvent, PreparedAppCommandExecution, ResolvableCommand, RunCommand, SlashCommandMiddlewareContext, UserContextMenuCommand, UserContextMenuCommandContext, UserContextMenuCommandMiddlewareContext } from "../analytics-engine-nkyqvYAE.js";
2
2
  import "../EventInterceptor-x-R2qshQ.js";
3
3
  import "../ButtonKit-C7r7RPNf.js";
4
4
  import "../ModalKit-Btz58KYn.js";
package/dist/app/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C-ViHyu-.js');
4
- const require_commandkit = require('../commandkit-DMEW0kJg.js');
4
+ const require_commandkit = require('../commandkit-5VMG2thU.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-vnMIelAE.js');
7
7
  require('../container-z621KfH5.js');
@@ -27,7 +27,7 @@ require('../EventWorkerContext-CSlD9rbx.js');
27
27
  const require_signals = require('../signals-DHdYrd-n.js');
28
28
  require('../constants-CUND8XkG.js');
29
29
  const require_MessageCommandParser = require('../MessageCommandParser-B_BEQ3p8.js');
30
- require('../CommandsRouter-Ci1Pe8Vd.js');
30
+ require('../CommandsRouter-tMAivEfv.js');
31
31
  require('../EventsRouter-C_J0M3uO.js');
32
32
  require('../router-DHnFRADH.js');
33
33
  require('../common-DNADUU3_.js');
@@ -1,4 +1,4 @@
1
- import { CommandRegistrar, PreRegisterCommandsEvent } from "../../analytics-engine-vA4MaJYx.js";
1
+ import { CommandRegistrar, PreRegisterCommandsEvent } from "../../analytics-engine-nkyqvYAE.js";
2
2
  import "../../EventInterceptor-x-R2qshQ.js";
3
3
  import "../../ButtonKit-C7r7RPNf.js";
4
4
  import "../../ModalKit-Btz58KYn.js";
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C-ViHyu-.js');
4
- const require_commandkit = require('../../commandkit-DMEW0kJg.js');
4
+ const require_commandkit = require('../../commandkit-5VMG2thU.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-vnMIelAE.js');
7
7
  require('../../container-z621KfH5.js');
@@ -27,7 +27,7 @@ require('../../EventWorkerContext-CSlD9rbx.js');
27
27
  require('../../signals-DHdYrd-n.js');
28
28
  require('../../constants-CUND8XkG.js');
29
29
  require('../../MessageCommandParser-B_BEQ3p8.js');
30
- require('../../CommandsRouter-Ci1Pe8Vd.js');
30
+ require('../../CommandsRouter-tMAivEfv.js');
31
31
  require('../../EventsRouter-C_J0M3uO.js');
32
32
  require('../../router-DHnFRADH.js');
33
33
  require('../../common-DNADUU3_.js');
@@ -1,3 +1,3 @@
1
- const require_CommandsRouter = require('../../CommandsRouter-Ci1Pe8Vd.js');
1
+ const require_CommandsRouter = require('../../CommandsRouter-tMAivEfv.js');
2
2
 
3
3
  exports.CommandsRouter = require_CommandsRouter.CommandsRouter;
@@ -1,4 +1,4 @@
1
- const require_CommandsRouter = require('../../CommandsRouter-Ci1Pe8Vd.js');
1
+ const require_CommandsRouter = require('../../CommandsRouter-tMAivEfv.js');
2
2
  const require_EventsRouter = require('../../EventsRouter-C_J0M3uO.js');
3
3
  require('../../router-DHnFRADH.js');
4
4
 
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const require_commandkit = require('./commandkit-DMEW0kJg.js');
2
+ const require_commandkit = require('./commandkit-5VMG2thU.js');
3
3
  const require_constants = require('./constants-B5_Ta7PR.js');
4
4
  const require_utils = require('./utils-BnXM4eKk.js');
5
5
  const require_common = require('./common-DNADUU3_.js');
@@ -167,4 +167,4 @@ Object.defineProperty(exports, 'buildApplication', {
167
167
  return buildApplication;
168
168
  }
169
169
  });
170
- //# sourceMappingURL=build-DXl8uEv4.js.map
170
+ //# sourceMappingURL=build-BoGqWPIS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-DXl8uEv4.js","names":[],"sources":["../src/cli/build.ts"],"sourcesContent":["import { build, Options } from 'tsdown';\nimport { CompilerPlugin, CompilerPluginRuntime } from '../plugins';\nimport { loadConfigFile } from '../config/loader';\nimport { writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { DevEnv, devEnvFileArgs, ProdEnv, prodEnvFileArgs } from './env';\nimport { rimraf } from 'rimraf';\nimport { performTypeCheck } from './type-checker';\nimport { copyLocaleFiles } from './common';\nimport { MaybeArray } from '../components';\nimport { COMMANDKIT_CWD } from '../utils/constants';\nimport { mergeDeep } from '../config/utils';\nimport { existsSync } from 'node:fs';\n\n/**\n * @private\n * @internal\n */\nexport interface ApplicationBuildOptions {\n plugins?: MaybeArray<CompilerPlugin>[] | Array<CompilerPlugin>;\n rolldownPlugins?: any[];\n isDev?: boolean;\n configPath?: string;\n}\n\n// emit public env variables and given env variables\n/**\n * @private\n * @internal\n */\nfunction mergeDefinitionsIfNeeded(env: Record<string, string>, isDev: boolean) {\n const values = Object.fromEntries(\n Object.entries(process.env).filter(\n ([k]) => !(k in env) && k.startsWith('COMMANDKIT_PUBLIC_'),\n ),\n );\n\n return {\n ...env,\n ...values,\n ...(isDev\n ? {\n NODE_ENV: 'development',\n COMMANDKIT_BOOTSTRAP_MODE: 'development',\n COMMANDKIT_IS_DEV: 'true',\n COMMANDKIT_IS_TEST: 'false',\n }\n : {\n NODE_ENV: 'production',\n COMMANDKIT_BOOTSTRAP_MODE: 'production',\n COMMANDKIT_IS_DEV: 'false',\n COMMANDKIT_IS_TEST: 'false',\n }),\n };\n}\n\n/**\n * @private\n * @internal\n */\nexport async function buildApplication({\n plugins,\n rolldownPlugins,\n isDev,\n configPath,\n}: ApplicationBuildOptions) {\n const config = await loadConfigFile(configPath);\n\n if (!isDev && !config?.typescript?.ignoreBuildErrors) {\n await performTypeCheck(configPath || COMMANDKIT_CWD);\n }\n\n const pluginRuntime = new CompilerPluginRuntime(\n (plugins || []) as CompilerPlugin[],\n );\n\n rolldownPlugins ??= [];\n\n rolldownPlugins.push(pluginRuntime.toJSON());\n\n try {\n const dest = isDev ? '.commandkit' : config.distDir;\n\n // Clean the destination directory\n await rimraf(dest);\n\n await pluginRuntime.init();\n\n await build(\n mergeDeep(\n {\n watch: false,\n dts: false,\n clean: true,\n format: ['esm'],\n shims: true,\n minify: false,\n silent: !!isDev,\n inputOptions: {\n transform: {\n jsx: {\n runtime: 'automatic',\n importSource: 'commandkit',\n },\n },\n checks: {\n circularDependency: true,\n },\n onwarn: (warning, defaultWarn) => {\n if (warning?.message?.includes('compilerOptions.jsx')) return;\n\n return defaultWarn(warning);\n },\n onLog: (level, log, defaultLog) => {\n if (isDev) return;\n\n return defaultLog(level, log);\n },\n moduleTypes: {\n '.json': 'js',\n '.node': 'binary',\n },\n },\n plugins: rolldownPlugins,\n platform: 'node',\n skipNodeModulesBundle: true,\n sourcemap:\n config.sourceMap?.[isDev ? 'development' : 'production'] ?? true,\n target: 'node16',\n outDir: dest,\n env: mergeDefinitionsIfNeeded(config.env || {}, !!isDev),\n entry: Array.from(\n new Set([\n 'src/**/*.{js,cjs,mjs,ts,cts,mts,jsx,tsx}',\n `!${config.distDir}`,\n '!.commandkit',\n '!**/*.test.*',\n '!**/*.spec.*',\n ...(config.entrypoints ?? []),\n ]),\n ),\n unbundle: isDev\n ? true\n : (config.compilerOptions?.disableChunking ?? false),\n } satisfies Options,\n config.compilerOptions?.tsdown,\n ),\n );\n\n await copyLocaleFiles('src', dest);\n await injectEntryFile(\n configPath || COMMANDKIT_CWD,\n !!isDev,\n !!(\n config.antiCrashScript?.[isDev ? 'development' : 'production'] ??\n (isDev ? true : false)\n ),\n config.distDir,\n );\n } catch (error) {\n console.error('Build failed:', error);\n if (error instanceof Error) {\n console.error('Error details:', error.stack);\n }\n process.exit(1); // Force exit on error\n } finally {\n // Ensure plugins are cleaned up\n await pluginRuntime.destroy();\n }\n}\n\nconst envScript = (dev: boolean) => `// --- Environment Variables Loader ---\nconst $env = [${(dev ? devEnvFileArgs : prodEnvFileArgs).map((p) => `\"${p}\"`).join(', ')}];\nfor (const file of $env) {\n try {\n process.loadEnvFile(file);\n console.log('\\\\x1b[36m✔ Loaded \\\\x1b[0m\\\\x1b[33m%s\\\\x1b[0m', file);\n } catch {}\n}\n`;\n\nconst antiCrashScript = [\n '// --- CommandKit Anti-Crash Monitor ---',\n \" // 'uncaughtException' event is supposed to be used to perform synchronous cleanup before shutting down the process\",\n ' // instead of using it as a means to resume operation.',\n ' // But it exists here due to compatibility reasons with discord bot ecosystem.',\n \" const p = (t) => `\\\\x1b[31m${t}\\\\x1b[0m`, b = '[CommandKit Anti-Crash Monitor]', l = console.log, e1 = 'uncaughtException', e2 = 'unhandledRejection';\",\n ' if (!process.eventNames().includes(e1)) // skip if it is already handled',\n ' process.on(e1, (e) => {',\n ' l(p(`${b} Uncaught Exception`)); l(p(b), p(e.stack || e));',\n ' })',\n ' if (!process.eventNames().includes(e2)) // skip if it is already handled',\n ' process.on(e2, (r) => {',\n ' l(p(`${b} Unhandled promise rejection`)); l(p(`${b} ${r.stack || r}`));',\n ' });',\n '// --- CommandKit Anti-Crash Monitor ---',\n].join('\\n');\n\nconst wrapInAsyncIIFE = (code: string[]) =>\n `;await (async () => {\\n${code.join('\\n\\n')}\\n})();`;\n\nasync function injectEntryFile(\n configPath: string,\n isDev: boolean,\n emitAntiCrashScript: boolean,\n distDir?: string,\n) {\n const dist = isDev ? '.commandkit' : distDir || 'dist';\n const entryFilePath = join(configPath, dist, 'index.js');\n\n // skip if the entry file already exists\n if (existsSync(entryFilePath)) return;\n\n const code = `/* Entrypoint File Generated By CommandKit */\n${isDev ? `\\n\\n// Injected for development\\n${wrapInAsyncIIFE([envScript(isDev), emitAntiCrashScript ? antiCrashScript : ''])}\\n\\n` : wrapInAsyncIIFE([envScript(isDev)])}\n\nimport { commandkit } from 'commandkit';\nimport { Client } from 'discord.js';\n\nasync function bootstrap() {\n const app = await import('./app.js').then((m) => m.default ?? m);\n\n if (!app || !(app instanceof Client)) {\n throw new Error('The app file must default export the discord.js client instance');\n }\n\n commandkit.setClient(app);\n\n await commandkit.start();\n}\n\nawait bootstrap().catch((e) => {\n console.error('Failed to bootstrap CommandKit application:\\\\n', e.stack);\n})\n`;\n\n await writeFile(entryFilePath, code);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"build-BoGqWPIS.js","names":[],"sources":["../src/cli/build.ts"],"sourcesContent":["import { build, Options } from 'tsdown';\nimport { CompilerPlugin, CompilerPluginRuntime } from '../plugins';\nimport { loadConfigFile } from '../config/loader';\nimport { writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { DevEnv, devEnvFileArgs, ProdEnv, prodEnvFileArgs } from './env';\nimport { rimraf } from 'rimraf';\nimport { performTypeCheck } from './type-checker';\nimport { copyLocaleFiles } from './common';\nimport { MaybeArray } from '../components';\nimport { COMMANDKIT_CWD } from '../utils/constants';\nimport { mergeDeep } from '../config/utils';\nimport { existsSync } from 'node:fs';\n\n/**\n * @private\n * @internal\n */\nexport interface ApplicationBuildOptions {\n plugins?: MaybeArray<CompilerPlugin>[] | Array<CompilerPlugin>;\n rolldownPlugins?: any[];\n isDev?: boolean;\n configPath?: string;\n}\n\n// emit public env variables and given env variables\n/**\n * @private\n * @internal\n */\nfunction mergeDefinitionsIfNeeded(env: Record<string, string>, isDev: boolean) {\n const values = Object.fromEntries(\n Object.entries(process.env).filter(\n ([k]) => !(k in env) && k.startsWith('COMMANDKIT_PUBLIC_'),\n ),\n );\n\n return {\n ...env,\n ...values,\n ...(isDev\n ? {\n NODE_ENV: 'development',\n COMMANDKIT_BOOTSTRAP_MODE: 'development',\n COMMANDKIT_IS_DEV: 'true',\n COMMANDKIT_IS_TEST: 'false',\n }\n : {\n NODE_ENV: 'production',\n COMMANDKIT_BOOTSTRAP_MODE: 'production',\n COMMANDKIT_IS_DEV: 'false',\n COMMANDKIT_IS_TEST: 'false',\n }),\n };\n}\n\n/**\n * @private\n * @internal\n */\nexport async function buildApplication({\n plugins,\n rolldownPlugins,\n isDev,\n configPath,\n}: ApplicationBuildOptions) {\n const config = await loadConfigFile(configPath);\n\n if (!isDev && !config?.typescript?.ignoreBuildErrors) {\n await performTypeCheck(configPath || COMMANDKIT_CWD);\n }\n\n const pluginRuntime = new CompilerPluginRuntime(\n (plugins || []) as CompilerPlugin[],\n );\n\n rolldownPlugins ??= [];\n\n rolldownPlugins.push(pluginRuntime.toJSON());\n\n try {\n const dest = isDev ? '.commandkit' : config.distDir;\n\n // Clean the destination directory\n await rimraf(dest);\n\n await pluginRuntime.init();\n\n await build(\n mergeDeep(\n {\n watch: false,\n dts: false,\n clean: true,\n format: ['esm'],\n shims: true,\n minify: false,\n silent: !!isDev,\n inputOptions: {\n transform: {\n jsx: {\n runtime: 'automatic',\n importSource: 'commandkit',\n },\n },\n checks: {\n circularDependency: true,\n },\n onwarn: (warning, defaultWarn) => {\n if (warning?.message?.includes('compilerOptions.jsx')) return;\n\n return defaultWarn(warning);\n },\n onLog: (level, log, defaultLog) => {\n if (isDev) return;\n\n return defaultLog(level, log);\n },\n moduleTypes: {\n '.json': 'js',\n '.node': 'binary',\n },\n },\n plugins: rolldownPlugins,\n platform: 'node',\n skipNodeModulesBundle: true,\n sourcemap:\n config.sourceMap?.[isDev ? 'development' : 'production'] ?? true,\n target: 'node16',\n outDir: dest,\n env: mergeDefinitionsIfNeeded(config.env || {}, !!isDev),\n entry: Array.from(\n new Set([\n 'src/**/*.{js,cjs,mjs,ts,cts,mts,jsx,tsx}',\n `!${config.distDir}`,\n '!.commandkit',\n '!**/*.test.*',\n '!**/*.spec.*',\n ...(config.entrypoints ?? []),\n ]),\n ),\n unbundle: isDev\n ? true\n : (config.compilerOptions?.disableChunking ?? false),\n } satisfies Options,\n config.compilerOptions?.tsdown,\n ),\n );\n\n await copyLocaleFiles('src', dest);\n await injectEntryFile(\n configPath || COMMANDKIT_CWD,\n !!isDev,\n !!(\n config.antiCrashScript?.[isDev ? 'development' : 'production'] ??\n (isDev ? true : false)\n ),\n config.distDir,\n );\n } catch (error) {\n console.error('Build failed:', error);\n if (error instanceof Error) {\n console.error('Error details:', error.stack);\n }\n process.exit(1); // Force exit on error\n } finally {\n // Ensure plugins are cleaned up\n await pluginRuntime.destroy();\n }\n}\n\nconst envScript = (dev: boolean) => `// --- Environment Variables Loader ---\nconst $env = [${(dev ? devEnvFileArgs : prodEnvFileArgs).map((p) => `\"${p}\"`).join(', ')}];\nfor (const file of $env) {\n try {\n process.loadEnvFile(file);\n console.log('\\\\x1b[36m✔ Loaded \\\\x1b[0m\\\\x1b[33m%s\\\\x1b[0m', file);\n } catch {}\n}\n`;\n\nconst antiCrashScript = [\n '// --- CommandKit Anti-Crash Monitor ---',\n \" // 'uncaughtException' event is supposed to be used to perform synchronous cleanup before shutting down the process\",\n ' // instead of using it as a means to resume operation.',\n ' // But it exists here due to compatibility reasons with discord bot ecosystem.',\n \" const p = (t) => `\\\\x1b[31m${t}\\\\x1b[0m`, b = '[CommandKit Anti-Crash Monitor]', l = console.log, e1 = 'uncaughtException', e2 = 'unhandledRejection';\",\n ' if (!process.eventNames().includes(e1)) // skip if it is already handled',\n ' process.on(e1, (e) => {',\n ' l(p(`${b} Uncaught Exception`)); l(p(b), p(e.stack || e));',\n ' })',\n ' if (!process.eventNames().includes(e2)) // skip if it is already handled',\n ' process.on(e2, (r) => {',\n ' l(p(`${b} Unhandled promise rejection`)); l(p(`${b} ${r.stack || r}`));',\n ' });',\n '// --- CommandKit Anti-Crash Monitor ---',\n].join('\\n');\n\nconst wrapInAsyncIIFE = (code: string[]) =>\n `;await (async () => {\\n${code.join('\\n\\n')}\\n})();`;\n\nasync function injectEntryFile(\n configPath: string,\n isDev: boolean,\n emitAntiCrashScript: boolean,\n distDir?: string,\n) {\n const dist = isDev ? '.commandkit' : distDir || 'dist';\n const entryFilePath = join(configPath, dist, 'index.js');\n\n // skip if the entry file already exists\n if (existsSync(entryFilePath)) return;\n\n const code = `/* Entrypoint File Generated By CommandKit */\n${isDev ? `\\n\\n// Injected for development\\n${wrapInAsyncIIFE([envScript(isDev), emitAntiCrashScript ? antiCrashScript : ''])}\\n\\n` : wrapInAsyncIIFE([envScript(isDev)])}\n\nimport { commandkit } from 'commandkit';\nimport { Client } from 'discord.js';\n\nasync function bootstrap() {\n const app = await import('./app.js').then((m) => m.default ?? m);\n\n if (!app || !(app instanceof Client)) {\n throw new Error('The app file must default export the discord.js client instance');\n }\n\n commandkit.setClient(app);\n\n await commandkit.start();\n}\n\nawait bootstrap().catch((e) => {\n console.error('Failed to bootstrap CommandKit application:\\\\n', e.stack);\n})\n`;\n\n await writeFile(entryFilePath, code);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { CompilerPlugin } from "../analytics-engine-vA4MaJYx.js";
1
+ import { CompilerPlugin } from "../analytics-engine-nkyqvYAE.js";
2
2
  import "../EventInterceptor-x-R2qshQ.js";
3
3
  import "../ButtonKit-C7r7RPNf.js";
4
4
  import "../ModalKit-Btz58KYn.js";
package/dist/cli/build.js CHANGED
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C-ViHyu-.js');
4
- require('../commandkit-DMEW0kJg.js');
4
+ require('../commandkit-5VMG2thU.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-vnMIelAE.js');
7
7
  require('../container-z621KfH5.js');
@@ -27,7 +27,7 @@ require('../EventWorkerContext-CSlD9rbx.js');
27
27
  require('../signals-DHdYrd-n.js');
28
28
  require('../constants-CUND8XkG.js');
29
29
  require('../MessageCommandParser-B_BEQ3p8.js');
30
- require('../CommandsRouter-Ci1Pe8Vd.js');
30
+ require('../CommandsRouter-tMAivEfv.js');
31
31
  require('../EventsRouter-C_J0M3uO.js');
32
32
  require('../router-DHnFRADH.js');
33
33
  require('../common-DNADUU3_.js');
@@ -35,6 +35,6 @@ require('../CommandKitEventsChannel-Bgw0XCOl.js');
35
35
  require('../store-CiqLHedg.js');
36
36
  require('../env-_68PRRoA.js');
37
37
  require('../type-checker-1Iu1jJcy.js');
38
- const require_build = require('../build-DXl8uEv4.js');
38
+ const require_build = require('../build-BoGqWPIS.js');
39
39
 
40
40
  exports.buildApplication = require_build.buildApplication;
@@ -1,4 +1,4 @@
1
- import { ResolvedCommandKitConfig } from "../analytics-engine-vA4MaJYx.js";
1
+ import { ResolvedCommandKitConfig } from "../analytics-engine-nkyqvYAE.js";
2
2
  import "../EventInterceptor-x-R2qshQ.js";
3
3
  import "../ButtonKit-C7r7RPNf.js";
4
4
  import "../ModalKit-Btz58KYn.js";
@@ -2,7 +2,7 @@ const require_chunk = require('../chunk-nOFOJqeH.js');
2
2
  const require_colors = require('../colors-Cd4Oz-r-.js');
3
3
  require('../ActionRow-CmTHbo2t.js');
4
4
  require('../error-codes-C-ViHyu-.js');
5
- const require_commandkit = require('../commandkit-DMEW0kJg.js');
5
+ const require_commandkit = require('../commandkit-5VMG2thU.js');
6
6
  require('../common-CcfjYnPG.js');
7
7
  require('../common-vnMIelAE.js');
8
8
  require('../container-z621KfH5.js');
@@ -28,7 +28,7 @@ require('../EventWorkerContext-CSlD9rbx.js');
28
28
  require('../signals-DHdYrd-n.js');
29
29
  require('../constants-CUND8XkG.js');
30
30
  require('../MessageCommandParser-B_BEQ3p8.js');
31
- require('../CommandsRouter-Ci1Pe8Vd.js');
31
+ require('../CommandsRouter-tMAivEfv.js');
32
32
  require('../EventsRouter-C_J0M3uO.js');
33
33
  require('../router-DHnFRADH.js');
34
34
  const require_common$2 = require('../common-DNADUU3_.js');
@@ -37,7 +37,7 @@ require('../store-CiqLHedg.js');
37
37
  require('../env-_68PRRoA.js');
38
38
  const require_app_process = require('../app-process-CjMovpoZ.js');
39
39
  require('../type-checker-1Iu1jJcy.js');
40
- const require_build = require('../build-DXl8uEv4.js');
40
+ const require_build = require('../build-BoGqWPIS.js');
41
41
  const node_crypto = require_chunk.__toESM(require("node:crypto"));
42
42
  const path = require_chunk.__toESM(require("path"));
43
43
  const chokidar = require_chunk.__toESM(require("chokidar"));
@@ -1,6 +1,6 @@
1
1
  const require_chunk = require('../chunk-nOFOJqeH.js');
2
2
  const require_constants = require('../constants-B5_Ta7PR.js');
3
- const require_version = require('../version-77Em35sO.js');
3
+ const require_version = require('../version-eRVLZxyL.js');
4
4
  const node_fs = require_chunk.__toESM(require("node:fs"));
5
5
  const node_path = require_chunk.__toESM(require("node:path"));
6
6
  const node_child_process = require_chunk.__toESM(require("node:child_process"));
package/dist/cli/init.js CHANGED
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C-ViHyu-.js');
4
- require('../commandkit-DMEW0kJg.js');
4
+ require('../commandkit-5VMG2thU.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-vnMIelAE.js');
7
7
  require('../container-z621KfH5.js');
@@ -27,12 +27,12 @@ require('../EventWorkerContext-CSlD9rbx.js');
27
27
  require('../signals-DHdYrd-n.js');
28
28
  require('../constants-CUND8XkG.js');
29
29
  require('../MessageCommandParser-B_BEQ3p8.js');
30
- require('../CommandsRouter-Ci1Pe8Vd.js');
30
+ require('../CommandsRouter-tMAivEfv.js');
31
31
  require('../EventsRouter-C_J0M3uO.js');
32
32
  require('../router-DHnFRADH.js');
33
33
  require('../common-DNADUU3_.js');
34
34
  require('../CommandKitEventsChannel-Bgw0XCOl.js');
35
35
  require('../store-CiqLHedg.js');
36
- const require_init = require('../init-DTBFphOg.js');
36
+ const require_init = require('../init-ZjceQTSt.js');
37
37
 
38
38
  exports.bootstrapCommandkitCLI = require_init.bootstrapCommandkitCLI;
@@ -2,7 +2,7 @@ const require_chunk = require('../chunk-nOFOJqeH.js');
2
2
  require('../colors-Cd4Oz-r-.js');
3
3
  require('../ActionRow-CmTHbo2t.js');
4
4
  require('../error-codes-C-ViHyu-.js');
5
- const require_commandkit = require('../commandkit-DMEW0kJg.js');
5
+ const require_commandkit = require('../commandkit-5VMG2thU.js');
6
6
  require('../common-CcfjYnPG.js');
7
7
  require('../common-vnMIelAE.js');
8
8
  require('../container-z621KfH5.js');
@@ -28,7 +28,7 @@ require('../EventWorkerContext-CSlD9rbx.js');
28
28
  require('../signals-DHdYrd-n.js');
29
29
  require('../constants-CUND8XkG.js');
30
30
  require('../MessageCommandParser-B_BEQ3p8.js');
31
- require('../CommandsRouter-Ci1Pe8Vd.js');
31
+ require('../CommandsRouter-tMAivEfv.js');
32
32
  require('../EventsRouter-C_J0M3uO.js');
33
33
  require('../router-DHnFRADH.js');
34
34
  const require_common$2 = require('../common-DNADUU3_.js');
@@ -37,7 +37,7 @@ require('../store-CiqLHedg.js');
37
37
  require('../env-_68PRRoA.js');
38
38
  const require_app_process = require('../app-process-CjMovpoZ.js');
39
39
  require('../type-checker-1Iu1jJcy.js');
40
- const require_build = require('../build-DXl8uEv4.js');
40
+ const require_build = require('../build-BoGqWPIS.js');
41
41
  const require_utils$1 = require('../utils-DCSnVAZ6.js');
42
42
  const fs = require_chunk.__toESM(require("fs"));
43
43