commandkit 0.1.11-dev.20241216063101 → 0.1.11-dev.20250104131827

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 (121) hide show
  1. package/dist/{CommandKit-5A-bV3Vk.d.ts → CommandKit-8KZkBcWO.d.ts} +0 -1
  2. package/dist/{CommandKit-T-afZ88V.d.mts → CommandKit-eNQRmrvH.d.mts} +0 -1
  3. package/dist/CommandKit.d.mts +1 -1
  4. package/dist/CommandKit.d.ts +1 -1
  5. package/dist/CommandKit.js +1 -1
  6. package/dist/CommandKit.js.map +1 -1
  7. package/dist/CommandKit.mjs +1 -1
  8. package/dist/{chunk-S4EH6QCH.mjs → chunk-4IWEG3WI.mjs} +1 -1
  9. package/dist/chunk-4IWEG3WI.mjs.map +1 -0
  10. package/dist/{chunk-R6PIHRXD.mjs → chunk-4U6VHAPY.mjs} +1 -1
  11. package/dist/chunk-4U6VHAPY.mjs.map +1 -0
  12. package/dist/{chunk-KATLDJ7Z.mjs → chunk-D7RDGUPK.mjs} +1 -1
  13. package/dist/{chunk-KATLDJ7Z.mjs.map → chunk-D7RDGUPK.mjs.map} +1 -1
  14. package/dist/{chunk-KS4QE6MZ.mjs → chunk-E2KEPOOS.mjs} +2 -2
  15. package/dist/chunk-E2KEPOOS.mjs.map +1 -0
  16. package/dist/chunk-FXJNQE5B.mjs +2 -0
  17. package/dist/chunk-FXJNQE5B.mjs.map +1 -0
  18. package/dist/{chunk-PX4OF66R.mjs → chunk-GS3Q7VW7.mjs} +1 -1
  19. package/dist/{chunk-PX4OF66R.mjs.map → chunk-GS3Q7VW7.mjs.map} +1 -1
  20. package/dist/{chunk-QPR6W4EV.mjs → chunk-I2MRY4KL.mjs} +2 -2
  21. package/dist/chunk-I2MRY4KL.mjs.map +1 -0
  22. package/dist/{chunk-NODJAQWQ.mjs → chunk-IHC5YX2R.mjs} +2 -2
  23. package/dist/chunk-IHC5YX2R.mjs.map +1 -0
  24. package/dist/{chunk-ZJTZPOCC.mjs → chunk-J3ZMR7KK.mjs} +2 -2
  25. package/dist/chunk-J3ZMR7KK.mjs.map +1 -0
  26. package/dist/{chunk-77LPS2WP.mjs → chunk-JFCJXIOI.mjs} +1 -1
  27. package/dist/chunk-JFCJXIOI.mjs.map +1 -0
  28. package/dist/{chunk-VURGPMLB.mjs → chunk-MNPCM4QU.mjs} +1 -1
  29. package/dist/chunk-MNPCM4QU.mjs.map +1 -0
  30. package/dist/{chunk-SXUJOOQY.mjs → chunk-SFWUUQXC.mjs} +1 -1
  31. package/dist/chunk-SFWUUQXC.mjs.map +1 -0
  32. package/dist/{chunk-KUU3KDAE.mjs → chunk-UXQFRVAB.mjs} +1 -1
  33. package/dist/chunk-UXQFRVAB.mjs.map +1 -0
  34. package/dist/{chunk-IBEW665M.mjs → chunk-YSVQ45EN.mjs} +2 -2
  35. package/dist/chunk-YSVQ45EN.mjs.map +1 -0
  36. package/dist/chunk-YZT2CEWE.mjs +2 -0
  37. package/dist/{chunk-5AIBE2QR.mjs.map → chunk-YZT2CEWE.mjs.map} +1 -1
  38. package/dist/{chunk-FQGSVSCT.mjs → chunk-ZE7AC2HG.mjs} +1 -1
  39. package/dist/{chunk-FQGSVSCT.mjs.map → chunk-ZE7AC2HG.mjs.map} +1 -1
  40. package/dist/components/ButtonKit.js.map +1 -1
  41. package/dist/components/ButtonKit.mjs +1 -1
  42. package/dist/components/index.js.map +1 -1
  43. package/dist/components/index.mjs +1 -1
  44. package/dist/config.js.map +1 -1
  45. package/dist/config.mjs +1 -1
  46. package/dist/handlers/command-handler/CommandHandler.d.mts +1 -1
  47. package/dist/handlers/command-handler/CommandHandler.d.ts +1 -1
  48. package/dist/handlers/command-handler/CommandHandler.js.map +1 -1
  49. package/dist/handlers/command-handler/CommandHandler.mjs +1 -1
  50. package/dist/handlers/command-handler/functions/loadCommandsWithRest.d.mts +1 -1
  51. package/dist/handlers/command-handler/functions/loadCommandsWithRest.d.ts +1 -1
  52. package/dist/handlers/command-handler/functions/loadCommandsWithRest.js.map +1 -1
  53. package/dist/handlers/command-handler/functions/loadCommandsWithRest.mjs +1 -1
  54. package/dist/handlers/command-handler/functions/registerCommands.d.mts +1 -1
  55. package/dist/handlers/command-handler/functions/registerCommands.d.ts +1 -1
  56. package/dist/handlers/command-handler/functions/registerCommands.js.map +1 -1
  57. package/dist/handlers/command-handler/functions/registerCommands.mjs +1 -1
  58. package/dist/handlers/command-handler/typings.d.mts +1 -1
  59. package/dist/handlers/command-handler/typings.d.ts +1 -1
  60. package/dist/handlers/command-handler/typings.js.map +1 -1
  61. package/dist/handlers/command-handler/utils/areSlashCommandsDifferent.js.map +1 -1
  62. package/dist/handlers/command-handler/utils/areSlashCommandsDifferent.mjs +1 -1
  63. package/dist/handlers/command-handler/validations/devOnly.d.mts +1 -1
  64. package/dist/handlers/command-handler/validations/devOnly.d.ts +1 -1
  65. package/dist/handlers/command-handler/validations/devOnly.js.map +1 -1
  66. package/dist/handlers/command-handler/validations/devOnly.mjs +1 -1
  67. package/dist/handlers/command-handler/validations/index.d.mts +1 -1
  68. package/dist/handlers/command-handler/validations/index.d.ts +1 -1
  69. package/dist/handlers/command-handler/validations/index.js.map +1 -1
  70. package/dist/handlers/command-handler/validations/index.mjs +1 -1
  71. package/dist/handlers/command-handler/validations/permissions.d.mts +1 -1
  72. package/dist/handlers/command-handler/validations/permissions.d.ts +1 -1
  73. package/dist/handlers/command-handler/validations/permissions.js.map +1 -1
  74. package/dist/handlers/command-handler/validations/permissions.mjs +1 -1
  75. package/dist/handlers/event-handler/EventHandler.d.mts +1 -1
  76. package/dist/handlers/event-handler/EventHandler.d.ts +1 -1
  77. package/dist/handlers/event-handler/EventHandler.js.map +1 -1
  78. package/dist/handlers/event-handler/EventHandler.mjs +1 -1
  79. package/dist/handlers/event-handler/typings.d.mts +1 -1
  80. package/dist/handlers/event-handler/typings.d.ts +1 -1
  81. package/dist/handlers/event-handler/typings.js.map +1 -1
  82. package/dist/handlers/index.d.mts +1 -1
  83. package/dist/handlers/index.d.ts +1 -1
  84. package/dist/handlers/index.js.map +1 -1
  85. package/dist/handlers/index.mjs +1 -1
  86. package/dist/handlers/validation-handler/ValidationHandler.js.map +1 -1
  87. package/dist/handlers/validation-handler/ValidationHandler.mjs +1 -1
  88. package/dist/handlers/validation-handler/typings.js.map +1 -1
  89. package/dist/index.d.mts +1 -1
  90. package/dist/index.d.ts +1 -1
  91. package/dist/index.js +1 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/index.mjs +1 -1
  94. package/dist/index.mjs.map +1 -1
  95. package/dist/types.d.mts +1 -1
  96. package/dist/types.d.ts +1 -1
  97. package/dist/types.js.map +1 -1
  98. package/dist/types.mjs.map +1 -1
  99. package/dist/utils/clone.js.map +1 -1
  100. package/dist/utils/clone.mjs +1 -1
  101. package/dist/utils/colors.js.map +1 -1
  102. package/dist/utils/colors.mjs +1 -1
  103. package/dist/utils/get-paths.js.map +1 -1
  104. package/dist/utils/get-paths.mjs +1 -1
  105. package/dist/utils/resolve-file-url.js.map +1 -1
  106. package/dist/utils/resolve-file-url.mjs +1 -1
  107. package/package.json +2 -2
  108. package/dist/chunk-5AIBE2QR.mjs +0 -2
  109. package/dist/chunk-77LPS2WP.mjs.map +0 -1
  110. package/dist/chunk-IBEW665M.mjs.map +0 -1
  111. package/dist/chunk-KS4QE6MZ.mjs.map +0 -1
  112. package/dist/chunk-KUU3KDAE.mjs.map +0 -1
  113. package/dist/chunk-NODJAQWQ.mjs.map +0 -1
  114. package/dist/chunk-PMEQUCOT.mjs +0 -2
  115. package/dist/chunk-PMEQUCOT.mjs.map +0 -1
  116. package/dist/chunk-QPR6W4EV.mjs.map +0 -1
  117. package/dist/chunk-R6PIHRXD.mjs.map +0 -1
  118. package/dist/chunk-S4EH6QCH.mjs.map +0 -1
  119. package/dist/chunk-SXUJOOQY.mjs.map +0 -1
  120. package/dist/chunk-VURGPMLB.mjs.map +0 -1
  121. package/dist/chunk-ZJTZPOCC.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/handlers/command-handler/CommandHandler.ts"],"sourcesContent":["import type {\n CommandData,\n CommandFileObject,\n ReloadOptions,\n} from '../../types';\nimport { clone } from '../../utils/clone';\nimport colors from '../../utils/colors';\nimport { getFilePaths } from '../../utils/get-paths';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport loadCommandsWithRest from './functions/loadCommandsWithRest';\nimport registerCommands from './functions/registerCommands';\nimport type {\n CommandHandlerData,\n CommandHandlerOptions,\n CommandKitInteraction,\n} from './typings';\nimport builtInValidationsFunctions from './validations';\n\nexport interface hCommandContext {\n interaction: CommandKitInteraction;\n command: CommandData;\n}\n\n/**\n * A handler for client application commands.\n */\nexport class CommandHandler {\n #data: CommandHandlerData;\n\n constructor({ ...options }: CommandHandlerOptions) {\n this.#data = {\n ...options,\n builtInValidations: [],\n commands: [],\n };\n }\n\n async init() {\n await this.#buildCommands();\n\n this.#buildBuiltInValidations();\n\n const devOnlyCommands = this.#data.commands.filter(\n (cmd) => cmd.options?.devOnly,\n );\n\n if (devOnlyCommands.length && !this.#data.devGuildIds.length) {\n process.emitWarning(\n colors.yellow(\n 'You have commands marked as \"devOnly\", but \"devGuildIds\" have not been set.',\n ),\n );\n }\n\n if (\n devOnlyCommands.length &&\n !this.#data.devUserIds.length &&\n !this.#data.devRoleIds.length\n ) {\n process.emitWarning(\n colors.yellow(\n 'You have commands marked as \"devOnly\", but \"devUserIds\" or \"devRoleIds\" have not been set.',\n ),\n );\n }\n\n if (this.#data.bulkRegister) {\n await loadCommandsWithRest({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands,\n });\n } else {\n await registerCommands({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands,\n });\n }\n\n this.handleCommands();\n }\n\n async #buildCommands() {\n const allowedExtensions = /\\.(js|mjs|cjs|ts)$/i;\n const paths = await getFilePaths(this.#data.commandsPath, true);\n\n const commandFilePaths = paths.filter((path) =>\n allowedExtensions.test(path),\n );\n\n for (const commandFilePath of commandFilePaths) {\n const modulePath = toFileURL(commandFilePath);\n\n const importedObj = await import(`${modulePath}?t=${Date.now()}`);\n let commandObj: CommandFileObject = clone(importedObj); // Make commandObj extensible\n\n // If it's CommonJS, invalidate the import cache\n if (typeof module !== 'undefined' && typeof require !== 'undefined') {\n delete require.cache[require.resolve(commandFilePath)];\n }\n\n const compactFilePath =\n commandFilePath.split(process.cwd())[1] || commandFilePath;\n\n if (commandObj.default)\n commandObj = commandObj.default as CommandFileObject;\n\n // Ensure builder properties\n if (importedObj.default) {\n commandObj.data = importedObj.default.data;\n } else {\n commandObj.data = importedObj.data;\n }\n\n if (!commandObj.data) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${compactFilePath} does not export \"data\".`,\n ),\n );\n continue;\n }\n\n if (!commandObj.data.name) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${compactFilePath} does not export \"data.name\".`,\n ),\n );\n continue;\n }\n\n if (!commandObj.run) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${commandObj.data.name} does not export \"run\".`,\n ),\n );\n continue;\n }\n\n if (typeof commandObj.run !== 'function') {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${commandObj.data.name} does not export \"run\" as a function.`,\n ),\n );\n continue;\n }\n\n commandObj.filePath = commandFilePath;\n\n let commandCategory =\n commandFilePath\n .split(this.#data.commandsPath)[1]\n ?.replace(/\\\\\\\\|\\\\/g, '/')\n .split('/')[1] || null;\n\n if (commandCategory && allowedExtensions.test(commandCategory)) {\n commandObj.category = null;\n } else {\n commandObj.category = commandCategory;\n }\n\n this.#data.commands.push(commandObj);\n }\n }\n\n #buildBuiltInValidations() {\n for (const builtInValidationFunction of builtInValidationsFunctions) {\n this.#data.builtInValidations.push(builtInValidationFunction);\n }\n }\n\n handleCommands() {\n this.#data.client.on('interactionCreate', async (interaction) => {\n if (\n !interaction.isChatInputCommand() &&\n !interaction.isContextMenuCommand() &&\n !interaction.isAutocomplete()\n )\n return;\n\n const isAutocomplete = interaction.isAutocomplete();\n\n const targetCommand = this.#data.commands.find(\n (cmd) => cmd.data.name === interaction.commandName,\n );\n\n if (!targetCommand) return;\n\n const { data, options, run, autocomplete, ...rest } = targetCommand;\n\n // Skip if autocomplete handler is not defined\n if (isAutocomplete && !autocomplete) return;\n\n const executor = async () => {\n const commandObj = {\n data: targetCommand.data,\n options: targetCommand.options,\n ...rest,\n };\n\n if (this.#data.validationHandler) {\n let canRun = true;\n\n for (const validationFunction of this.#data.validationHandler\n .validations) {\n const stopValidationLoop = await validationFunction({\n interaction,\n commandObj,\n client: this.#data.client,\n handler: this.#data.commandkitInstance,\n });\n\n if (stopValidationLoop) {\n canRun = false;\n break;\n }\n }\n\n if (!canRun) return;\n }\n\n let canRun = true;\n\n // If custom validations pass and !skipBuiltInValidations, run built-in CommandKit validation functions\n if (!this.#data.skipBuiltInValidations) {\n for (const validation of this.#data.builtInValidations) {\n const stopValidationLoop = validation({\n targetCommand,\n interaction,\n handlerData: this.#data,\n });\n\n if (stopValidationLoop) {\n canRun = false;\n break;\n }\n }\n }\n\n if (!canRun) return;\n\n const command = targetCommand[isAutocomplete ? 'autocomplete' : 'run']!;\n\n const context = {\n interaction,\n client: this.#data.client,\n handler: this.#data.commandkitInstance,\n };\n return await command(context);\n };\n\n return executor();\n });\n }\n\n get commands() {\n return this.#data.commands;\n }\n\n async reloadCommands(type?: ReloadOptions) {\n if (!this.#data.commandsPath) {\n throw new Error(\n colors.red(\n 'Cannot reload commands as \"commandsPath\" was not provided when instantiating CommandKit.',\n ),\n );\n }\n\n this.#data.commands = [];\n\n // Re-build commands tree\n await this.#buildCommands();\n\n if (this.#data.bulkRegister) {\n await loadCommandsWithRest({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands,\n reloading: true,\n type,\n });\n } else {\n await registerCommands({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands,\n reloading: true,\n type,\n });\n }\n }\n}\n"],"mappings":"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","names":["canRun"]}
@@ -1,2 +0,0 @@
1
- import{CommandHandler}from"./chunk-NODJAQWQ.mjs";import{EventHandler}from"./chunk-KS4QE6MZ.mjs";import{ValidationHandler}from"./chunk-ZJTZPOCC.mjs";import{colors_default}from"./chunk-FQGSVSCT.mjs";import{__name}from"./chunk-7KD7ZCH6.mjs";var CommandKit=class _CommandKit{static{__name(this,"CommandKit")}#data;static _instance=null;constructor(options){if(!options.client)throw new Error(colors_default.red('"client" is required when instantiating CommandKit.'));if(options.validationsPath&&!options.commandsPath)throw new Error(colors_default.red('"commandsPath" is required when "validationsPath" is set.'));this.#data=options,_CommandKit._instance=this,this.#init()}get client(){return this.#data.client}get commandHandler(){return this.#data.commandHandler}async#init(){if(this.#data.eventsPath){let eventHandler=new EventHandler({client:this.#data.client,eventsPath:this.#data.eventsPath,commandKitInstance:this});await eventHandler.init(),this.#data.eventHandler=eventHandler}if(this.#data.validationsPath){let validationHandler=new ValidationHandler({validationsPath:this.#data.validationsPath});await validationHandler.init(),this.#data.validationHandler=validationHandler}if(this.#data.commandsPath){let commandHandler=new CommandHandler({client:this.#data.client,commandsPath:this.#data.commandsPath,devGuildIds:this.#data.devGuildIds||[],devUserIds:this.#data.devUserIds||[],devRoleIds:this.#data.devRoleIds||[],validationHandler:this.#data.validationHandler,skipBuiltInValidations:this.#data.skipBuiltInValidations||!1,commandkitInstance:this,bulkRegister:this.#data.bulkRegister||!1});await commandHandler.init(),this.#data.commandHandler=commandHandler}}async reloadCommands(type){this.#data.commandHandler&&await this.#data.commandHandler.reloadCommands(type)}async reloadEvents(){this.#data.eventHandler&&await this.#data.eventHandler.reloadEvents(this.#data.commandHandler)}async reloadValidations(){this.#data.validationHandler&&await this.#data.validationHandler.reloadValidations()}get commands(){return this.#data.commandHandler?this.#data.commandHandler.commands.map(cmd=>{let{run,autocomplete,...command}=cmd;return command}):[]}get commandsPath(){return this.#data.commandsPath}get eventsPath(){return this.#data.eventsPath}get validationsPath(){return this.#data.validationsPath}get devUserIds(){return this.#data.devUserIds||[]}get devGuildIds(){return this.#data.devGuildIds||[]}get devRoleIds(){return this.#data.devRoleIds||[]}};export{CommandKit};
2
- //# sourceMappingURL=chunk-PMEQUCOT.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/CommandKit.ts"],"sourcesContent":["import { CommandHandler, EventHandler, ValidationHandler } from './handlers';\nimport type {\n CommandKitData,\n CommandKitOptions,\n CommandObject,\n ReloadOptions,\n} from './types';\nimport colors from './utils/colors';\n\nexport class CommandKit {\n #data: CommandKitData;\n static _instance: CommandKit | null = null;\n\n /**\n * Create a new command and event handler with CommandKit.\n *\n * @param options - The default CommandKit configuration.\n * @see {@link https://commandkit.dev/guide/commandkit-setup}\n */\n constructor(options: CommandKitOptions) {\n if (!options.client) {\n throw new Error(\n colors.red('\"client\" is required when instantiating CommandKit.'),\n );\n }\n\n if (options.validationsPath && !options.commandsPath) {\n throw new Error(\n colors.red('\"commandsPath\" is required when \"validationsPath\" is set.'),\n );\n }\n\n this.#data = options;\n CommandKit._instance = this;\n\n this.#init();\n }\n\n /**\n * Get the client attached to this CommandKit instance.\n */\n get client() {\n return this.#data.client;\n }\n\n /**\n * Get command handler instance.\n */\n get commandHandler() {\n return this.#data.commandHandler;\n }\n\n /**\n * (Private) Initialize CommandKit.\n */\n async #init() {\n // <!-- Setup event handler -->\n if (this.#data.eventsPath) {\n const eventHandler = new EventHandler({\n client: this.#data.client,\n eventsPath: this.#data.eventsPath,\n commandKitInstance: this,\n });\n\n await eventHandler.init();\n\n this.#data.eventHandler = eventHandler;\n }\n\n // <!-- Setup validation handler -->\n if (this.#data.validationsPath) {\n const validationHandler = new ValidationHandler({\n validationsPath: this.#data.validationsPath,\n });\n\n await validationHandler.init();\n\n this.#data.validationHandler = validationHandler;\n }\n\n // <!-- Setup command handler -->\n if (this.#data.commandsPath) {\n const commandHandler = new CommandHandler({\n client: this.#data.client,\n commandsPath: this.#data.commandsPath,\n devGuildIds: this.#data.devGuildIds || [],\n devUserIds: this.#data.devUserIds || [],\n devRoleIds: this.#data.devRoleIds || [],\n validationHandler: this.#data.validationHandler,\n skipBuiltInValidations: this.#data.skipBuiltInValidations || false,\n commandkitInstance: this,\n bulkRegister: this.#data.bulkRegister || false,\n });\n\n await commandHandler.init();\n\n this.#data.commandHandler = commandHandler;\n }\n }\n\n /**\n * Updates application commands with the latest from \"commandsPath\".\n */\n async reloadCommands(type?: ReloadOptions) {\n if (!this.#data.commandHandler) return;\n await this.#data.commandHandler.reloadCommands(type);\n }\n\n /**\n * Updates application events with the latest from \"eventsPath\".\n */\n async reloadEvents() {\n if (!this.#data.eventHandler) return;\n await this.#data.eventHandler.reloadEvents(this.#data.commandHandler);\n }\n\n /**\n * Updates application command validations with the latest from \"validationsPath\".\n */\n async reloadValidations() {\n if (!this.#data.validationHandler) return;\n await this.#data.validationHandler.reloadValidations();\n }\n\n /**\n * @returns An array of objects of all the commands that CommandKit is handling.\n */\n get commands(): CommandObject[] {\n if (!this.#data.commandHandler) {\n return [];\n }\n\n const commands = this.#data.commandHandler.commands.map((cmd) => {\n const { run, autocomplete, ...command } = cmd;\n return command;\n });\n\n return commands;\n }\n\n /**\n * @returns The path to the commands folder which was set when instantiating CommandKit.\n */\n get commandsPath(): string | undefined {\n return this.#data.commandsPath;\n }\n\n /**\n * @returns The path to the events folder which was set when instantiating CommandKit.\n */\n get eventsPath(): string | undefined {\n return this.#data.eventsPath;\n }\n\n /**\n * @returns The path to the validations folder which was set when instantiating CommandKit.\n */\n get validationsPath(): string | undefined {\n return this.#data.validationsPath;\n }\n\n /**\n * @returns An array of all the developer user IDs which was set when instantiating CommandKit.\n */\n get devUserIds(): string[] {\n return this.#data.devUserIds || [];\n }\n\n /**\n * @returns An array of all the developer guild IDs which was set when instantiating CommandKit.\n */\n get devGuildIds(): string[] {\n return this.#data.devGuildIds || [];\n }\n\n /**\n * @returns An array of all the developer role IDs which was set when instantiating CommandKit.\n */\n get devRoleIds(): string[] {\n return this.#data.devRoleIds || [];\n }\n}\n"],"mappings":"8OASO,IAAM,WAAN,MAAM,WAAW,CATxB,MASwB,2BACtB,MACA,OAAO,UAA+B,KAQtC,YAAY,QAA4B,CACtC,GAAI,CAAC,QAAQ,OACX,MAAM,IAAI,MACR,eAAO,IAAI,qDAAqD,CAClE,EAGF,GAAI,QAAQ,iBAAmB,CAAC,QAAQ,aACtC,MAAM,IAAI,MACR,eAAO,IAAI,2DAA2D,CACxE,EAGF,KAAK,MAAQ,QACb,YAAW,UAAY,KAEvB,KAAK,MAAM,CACb,CAKA,IAAI,QAAS,CACX,OAAO,KAAK,MAAM,MACpB,CAKA,IAAI,gBAAiB,CACnB,OAAO,KAAK,MAAM,cACpB,CAKA,KAAM,OAAQ,CAEZ,GAAI,KAAK,MAAM,WAAY,CACzB,IAAM,aAAe,IAAI,aAAa,CACpC,OAAQ,KAAK,MAAM,OACnB,WAAY,KAAK,MAAM,WACvB,mBAAoB,IACtB,CAAC,EAED,MAAM,aAAa,KAAK,EAExB,KAAK,MAAM,aAAe,YAC5B,CAGA,GAAI,KAAK,MAAM,gBAAiB,CAC9B,IAAM,kBAAoB,IAAI,kBAAkB,CAC9C,gBAAiB,KAAK,MAAM,eAC9B,CAAC,EAED,MAAM,kBAAkB,KAAK,EAE7B,KAAK,MAAM,kBAAoB,iBACjC,CAGA,GAAI,KAAK,MAAM,aAAc,CAC3B,IAAM,eAAiB,IAAI,eAAe,CACxC,OAAQ,KAAK,MAAM,OACnB,aAAc,KAAK,MAAM,aACzB,YAAa,KAAK,MAAM,aAAe,CAAC,EACxC,WAAY,KAAK,MAAM,YAAc,CAAC,EACtC,WAAY,KAAK,MAAM,YAAc,CAAC,EACtC,kBAAmB,KAAK,MAAM,kBAC9B,uBAAwB,KAAK,MAAM,wBAA0B,GAC7D,mBAAoB,KACpB,aAAc,KAAK,MAAM,cAAgB,EAC3C,CAAC,EAED,MAAM,eAAe,KAAK,EAE1B,KAAK,MAAM,eAAiB,cAC9B,CACF,CAKA,MAAM,eAAe,KAAsB,CACpC,KAAK,MAAM,gBAChB,MAAM,KAAK,MAAM,eAAe,eAAe,IAAI,CACrD,CAKA,MAAM,cAAe,CACd,KAAK,MAAM,cAChB,MAAM,KAAK,MAAM,aAAa,aAAa,KAAK,MAAM,cAAc,CACtE,CAKA,MAAM,mBAAoB,CACnB,KAAK,MAAM,mBAChB,MAAM,KAAK,MAAM,kBAAkB,kBAAkB,CACvD,CAKA,IAAI,UAA4B,CAC9B,OAAK,KAAK,MAAM,eAIC,KAAK,MAAM,eAAe,SAAS,IAAK,KAAQ,CAC/D,GAAM,CAAE,IAAK,aAAc,GAAG,OAAQ,EAAI,IAC1C,OAAO,OACT,CAAC,EANQ,CAAC,CASZ,CAKA,IAAI,cAAmC,CACrC,OAAO,KAAK,MAAM,YACpB,CAKA,IAAI,YAAiC,CACnC,OAAO,KAAK,MAAM,UACpB,CAKA,IAAI,iBAAsC,CACxC,OAAO,KAAK,MAAM,eACpB,CAKA,IAAI,YAAuB,CACzB,OAAO,KAAK,MAAM,YAAc,CAAC,CACnC,CAKA,IAAI,aAAwB,CAC1B,OAAO,KAAK,MAAM,aAAe,CAAC,CACpC,CAKA,IAAI,YAAuB,CACzB,OAAO,KAAK,MAAM,YAAc,CAAC,CACnC,CACF","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/handlers/command-handler/functions/registerCommands.ts"],"sourcesContent":["import type {\n Guild,\n Client,\n ApplicationCommandData,\n GuildApplicationCommandManager,\n ApplicationCommandDataResolvable,\n} from 'discord.js';\nimport type { CommandFileObject, ReloadOptions } from '../../../types';\n\nimport areSlashCommandsDifferent from '../utils/areSlashCommandsDifferent';\n\nimport colors from '../../../utils/colors';\n\ntype RegisterCommandProps = {\n client: Client;\n commands: CommandFileObject[];\n devGuildIds: string[];\n reloading?: boolean;\n type?: ReloadOptions;\n};\n\n/**\n * Register client commands to Discord.\n * @param props\n */\nexport default async function registerCommands(props: RegisterCommandProps) {\n if (props.reloading) {\n if (props.client.isReady()) {\n await handleRegistration(\n props.client,\n props.commands,\n props.devGuildIds,\n props.type,\n );\n } else {\n throw new Error(\n colors.red(`Cannot reload commands when client is not ready.`),\n );\n }\n } else {\n props.client.once('ready', async (c) => {\n await handleRegistration(\n c,\n props.commands,\n props.devGuildIds,\n props.type,\n );\n });\n }\n}\n\nasync function handleRegistration(\n client: Client<true>,\n commands: CommandFileObject[],\n devGuildIds: string[],\n type?: ReloadOptions,\n) {\n const devOnlyCommands = commands.filter((cmd) => cmd.options?.devOnly);\n const globalCommands = commands.filter((cmd) => !cmd.options?.devOnly);\n\n if (type === 'dev') {\n await registerDevCommands(client, devOnlyCommands, devGuildIds);\n } else if (type === 'global') {\n await registerGlobalCommands(client, globalCommands);\n } else {\n await registerDevCommands(client, devOnlyCommands, devGuildIds);\n await registerGlobalCommands(client, globalCommands);\n }\n}\n\nasync function registerGlobalCommands(\n client: Client<true>,\n commands: CommandFileObject[],\n) {\n const appCommandsManager = client.application.commands;\n await appCommandsManager.fetch();\n\n for (const command of commands) {\n const targetCommand = appCommandsManager.cache.find(\n (cmd) => cmd.name === command.data.name,\n );\n\n // <!-- Delete global command -->\n if (command.options?.deleted) {\n if (!targetCommand) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command \"${command.data.name}\" is globally marked as deleted.`,\n ),\n );\n } else {\n await targetCommand.delete().catch((error) => {\n throw new Error(\n colors.red(\n `Failed to delete command \"${command.data.name}\" globally.\\n`,\n ),\n error,\n );\n });\n\n console.log(\n colors.green(`Deleted command \"${command.data.name}\" globally.`),\n );\n }\n\n continue;\n }\n\n // <!-- Edit global command -->\n if (targetCommand) {\n const commandsAreDifferent = areSlashCommandsDifferent(\n targetCommand,\n command.data,\n );\n\n if (commandsAreDifferent) {\n await targetCommand\n .edit(command.data as Partial<ApplicationCommandData>)\n .catch((error) => {\n throw new Error(\n colors.red(\n `Failed to edit command \"${command.data.name}\" globally.\\n`,\n ),\n error,\n );\n });\n\n console.log(\n colors.green(`Edited command \"${command.data.name}\" globally.`),\n );\n\n continue;\n }\n }\n\n // <!-- Register global command -->\n if (targetCommand) continue;\n\n await appCommandsManager\n .create(command.data as ApplicationCommandDataResolvable)\n .catch((error) => {\n throw new Error(\n colors.red(\n `Failed to register command \"${command.data.name}\" globally.\\n`,\n ),\n error,\n );\n });\n\n console.log(\n colors.green(`Registered command \"${command.data.name}\" globally.`),\n );\n }\n}\n\nasync function registerDevCommands(\n client: Client<true>,\n commands: CommandFileObject[],\n guildIds: string[],\n) {\n const devGuilds: Guild[] = [];\n\n for (const guildId of guildIds) {\n const guild =\n client.guilds.cache.get(guildId) || (await client.guilds.fetch(guildId));\n\n if (!guild) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Guild ${guildId} doesn't exist or client isn't part of the guild.`,\n ),\n );\n continue;\n }\n\n devGuilds.push(guild);\n }\n\n const guildCommandsManagers: GuildApplicationCommandManager[] = [];\n\n for (const guild of devGuilds) {\n const guildCommandsManager = guild.commands;\n await guildCommandsManager.fetch();\n\n guildCommandsManagers.push(guildCommandsManager);\n }\n\n for (const command of commands) {\n for (const guildCommands of guildCommandsManagers) {\n const targetCommand = guildCommands.cache.find(\n (cmd) => cmd.name === command.data.name,\n );\n\n // <!-- Delete dev command -->\n if (command.options?.deleted) {\n if (!targetCommand) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command \"${command.data.name}\" is marked as deleted in ${guildCommands.guild.name}.`,\n ),\n );\n } else {\n await targetCommand.delete().catch((error) => {\n throw new Error(\n colors.red(\n `Failed to delete command \"${command.data.name}\" in ${guildCommands.guild.name}.`,\n ),\n error,\n );\n });\n\n console.log(\n colors.green(\n `Deleted command \"${command.data.name}\" in ${guildCommands.guild.name}.`,\n ),\n );\n }\n\n continue;\n }\n\n // <!-- Edit dev command -->\n if (targetCommand) {\n const commandsAreDifferent = areSlashCommandsDifferent(\n targetCommand,\n command.data,\n );\n\n if (commandsAreDifferent) {\n await targetCommand\n .edit(command.data as Partial<ApplicationCommandData>)\n .catch((error) => {\n throw new Error(\n colors.red(\n `Failed to edit command \"${command.data.name}\" in ${guildCommands.guild.name}.\\n`,\n ),\n error,\n );\n });\n\n console.log(\n colors.green(\n `Edited command \"${command.data.name}\" in ${guildCommands.guild.name}.`,\n ),\n );\n\n continue;\n }\n }\n\n // <!-- Register guild command -->\n if (targetCommand) continue;\n\n await guildCommands\n .create(command.data as ApplicationCommandDataResolvable)\n .catch((error) => {\n throw new Error(\n colors.red(\n `Failed to register command \"${command.data.name}\" in ${guildCommands.guild.name}.\\n`,\n ),\n error,\n );\n });\n\n console.log(\n colors.green(\n `Registered command \"${command.data.name}\" in ${guildCommands.guild.name}.`,\n ),\n );\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/handlers/command-handler/validations/devOnly.ts"],"sourcesContent":["import type { BuiltInValidationParams } from '../typings';\n\nexport default function ({\n interaction,\n targetCommand,\n handlerData,\n}: BuiltInValidationParams) {\n if (interaction.isAutocomplete()) return;\n\n if (targetCommand.options?.devOnly) {\n if (\n interaction.inGuild() &&\n !handlerData.devGuildIds.includes(interaction.guildId)\n ) {\n interaction.reply({\n content: '❌ This command can only be used inside development servers.',\n ephemeral: true,\n });\n\n return true;\n }\n\n const guildMember = interaction.guild?.members.cache.get(\n interaction.user.id,\n );\n const memberRoles = guildMember?.roles.cache;\n\n let hasDevRole = false;\n\n memberRoles?.forEach((role) => {\n if (handlerData.devRoleIds.includes(role.id)) {\n hasDevRole = true;\n }\n });\n\n const isDevUser =\n handlerData.devUserIds.includes(interaction.user.id) || hasDevRole;\n\n if (!isDevUser) {\n interaction.reply({\n content: '❌ This command can only be used by developers.',\n ephemeral: true,\n });\n\n return true;\n }\n }\n}\n"],"mappings":"yCAEe,SAAR,gBAAkB,CACvB,YACA,cACA,WACF,EAA4B,CAC1B,GAAI,aAAY,eAAe,GAE3B,cAAc,SAAS,QAAS,CAClC,GACE,YAAY,QAAQ,GACpB,CAAC,YAAY,YAAY,SAAS,YAAY,OAAO,EAErD,mBAAY,MAAM,CAChB,QAAS,mEACT,UAAW,EACb,CAAC,EAEM,GAMT,IAAM,YAHc,YAAY,OAAO,QAAQ,MAAM,IACnD,YAAY,KAAK,EACnB,GACiC,MAAM,MAEnC,WAAa,GAWjB,GATA,aAAa,QAAS,MAAS,CACzB,YAAY,WAAW,SAAS,KAAK,EAAE,IACzC,WAAa,GAEjB,CAAC,EAKG,EAFF,YAAY,WAAW,SAAS,YAAY,KAAK,EAAE,GAAK,YAGxD,mBAAY,MAAM,CAChB,QAAS,sDACT,UAAW,EACb,CAAC,EAEM,EAEX,CACF,CA7CO","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ButtonKit.ts"],"sourcesContent":["import {\n type Message,\n type Awaitable,\n type ButtonInteraction,\n type InteractionCollector,\n type InteractionCollectorOptions,\n type APIButtonComponentWithCustomId,\n ButtonStyle,\n ButtonBuilder,\n ComponentType,\n} from 'discord.js';\n\n/**\n * The handler to run when a button is clicked. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type CommandKitButtonBuilderInteractionCollectorDispatch = (\n interaction: ButtonInteraction,\n) => Awaitable<void>;\n\nexport type CommandKitButtonBuilderOnEnd = (reason: string) => Awaitable<void>;\n\nexport type CommandKitButtonBuilderInteractionCollectorDispatchContextData = {\n /**\n * The message to listen for button interactions on.\n */\n message: Message;\n /**\n * The duration (in ms) that the collector should run for.\n */\n time?: number;\n /**\n * If the collector should automatically reset the timer when a button is clicked.\n */\n autoReset?: boolean;\n} & Omit<\n InteractionCollectorOptions<ButtonInteraction>,\n 'filter' | 'componentType'\n>;\n\nexport class ButtonKit extends ButtonBuilder {\n #onClickHandler: CommandKitButtonBuilderInteractionCollectorDispatch | null =\n null;\n #onEndHandler: CommandKitButtonBuilderOnEnd | null = null;\n #contextData: CommandKitButtonBuilderInteractionCollectorDispatchContextData | null =\n null;\n #collector: InteractionCollector<ButtonInteraction> | null = null;\n\n /**\n * Sets up an inline interaction collector for this button. This collector by default allows as many interactions as possible if it is actively used.\n * If unused, this expires after 24 hours or custom time if specified.\n * @param handler The handler to run when the button is clicked\n * @param data The context data to use for the interaction collector\n * @returns This button\n * @example\n * ```ts\n * const button = new ButtonKit()\n * .setLabel('Click me')\n * .setStyle(ButtonStyle.Primary)\n * .setCustomId('click_me');\n *\n * const row = new ActionRowBuilder().addComponents(button);\n *\n * const message = await channel.send({ content: 'Click the button', components: [row] });\n *\n * button.onClick(async (interaction) => {\n * await interaction.reply('You clicked me!');\n * }, { message });\n *\n * // Remove onClick handler and destroy the interaction collector\n * button.onClick(null);\n * ```\n */\n public onClick(\n handler: CommandKitButtonBuilderInteractionCollectorDispatch,\n data?: CommandKitButtonBuilderInteractionCollectorDispatchContextData,\n ): this {\n if (this.data.style === ButtonStyle.Link) {\n throw new TypeError('Cannot setup \"onClick\" handler on link buttons.');\n }\n\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.',\n );\n }\n\n this.#destroyCollector();\n\n this.#onClickHandler = handler;\n if (data) this.#contextData = data;\n\n this.#setupInteractionCollector();\n\n return this;\n }\n\n public onEnd(handler: CommandKitButtonBuilderOnEnd): this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onEnd\" without a handler function parameter.',\n );\n }\n\n this.#onEndHandler = handler;\n\n return this;\n }\n\n #setupInteractionCollector() {\n if (!this.#contextData || !this.#onClickHandler) return;\n\n const message = this.#contextData.message;\n\n if (!message) {\n throw new TypeError(\n 'Cannot setup \"onClick\" handler without a message in the context data.',\n );\n }\n\n if ('customId' in this.data && !this.data.customId) {\n throw new TypeError(\n 'Cannot setup \"onClick\" handler on a button without a custom id.',\n );\n }\n\n const data = {\n time: 86_400_000,\n autoReset: true,\n ...this.#contextData,\n };\n\n const collector = (this.#collector =\n message.createMessageComponentCollector({\n filter: (interaction) =>\n interaction.customId ===\n (<APIButtonComponentWithCustomId>this.data).custom_id &&\n interaction.message.id === message.id,\n componentType: ComponentType.Button,\n ...data,\n }));\n\n this.#collector.on('collect', (interaction) => {\n const handler = this.#onClickHandler;\n\n if (!handler) return this.#destroyCollector();\n\n if (!this.#collector) {\n return collector.stop('destroyed');\n }\n\n if (data.autoReset) {\n this.#collector.resetTimer();\n }\n\n return handler(interaction);\n });\n\n this.#collector.on('end', (_, reason) => {\n this.#destroyCollector();\n this.#onEndHandler?.(reason);\n });\n }\n\n public dispose() {\n this.#destroyCollector();\n this.#onEndHandler?.('disposed');\n return this;\n }\n\n #destroyCollector() {\n this.#collector?.stop('end');\n this.#collector?.removeAllListeners();\n this.#collector = null;\n this.#contextData = null;\n this.#onClickHandler = null;\n }\n}\n"],"mappings":"yCAAA,OAOE,YACA,cACA,kBACK,aA8BA,IAAM,UAAN,cAAwB,aAAc,CAxC7C,MAwC6C,0BAC3C,gBACE,KACF,cAAqD,KACrD,aACE,KACF,WAA6D,KA2BtD,QACL,QACA,KACM,CACN,GAAI,KAAK,KAAK,QAAU,YAAY,KAClC,MAAM,IAAI,UAAU,iDAAiD,EAGvE,GAAI,CAAC,QACH,MAAM,IAAI,UACR,8DACF,EAGF,YAAK,kBAAkB,EAEvB,KAAK,gBAAkB,QACnB,OAAM,KAAK,aAAe,MAE9B,KAAK,2BAA2B,EAEzB,IACT,CAEO,MAAM,QAA6C,CACxD,GAAI,CAAC,QACH,MAAM,IAAI,UACR,4DACF,EAGF,YAAK,cAAgB,QAEd,IACT,CAEA,4BAA6B,CAC3B,GAAI,CAAC,KAAK,cAAgB,CAAC,KAAK,gBAAiB,OAEjD,IAAM,QAAU,KAAK,aAAa,QAElC,GAAI,CAAC,QACH,MAAM,IAAI,UACR,uEACF,EAGF,GAAI,aAAc,KAAK,MAAQ,CAAC,KAAK,KAAK,SACxC,MAAM,IAAI,UACR,iEACF,EAGF,IAAM,KAAO,CACX,KAAM,MACN,UAAW,GACX,GAAG,KAAK,YACV,EAEM,UAAa,KAAK,WACtB,QAAQ,gCAAgC,CACtC,OAAS,aACP,YAAY,WACuB,KAAK,KAAM,WAC9C,YAAY,QAAQ,KAAO,QAAQ,GACrC,cAAe,cAAc,OAC7B,GAAG,IACL,CAAC,EAEH,KAAK,WAAW,GAAG,UAAY,aAAgB,CAC7C,IAAM,QAAU,KAAK,gBAErB,OAAK,QAEA,KAAK,YAIN,KAAK,WACP,KAAK,WAAW,WAAW,EAGtB,QAAQ,WAAW,GAPjB,UAAU,KAAK,WAAW,EAHd,KAAK,kBAAkB,CAW9C,CAAC,EAED,KAAK,WAAW,GAAG,MAAO,CAAC,EAAG,SAAW,CACvC,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,MAAM,CAC7B,CAAC,CACH,CAEO,SAAU,CACf,YAAK,kBAAkB,EACvB,KAAK,gBAAgB,UAAU,EACxB,IACT,CAEA,mBAAoB,CAClB,KAAK,YAAY,KAAK,KAAK,EAC3B,KAAK,YAAY,mBAAmB,EACpC,KAAK,WAAa,KAClB,KAAK,aAAe,KACpB,KAAK,gBAAkB,IACzB,CACF","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/handlers/command-handler/validations/permissions.ts"],"sourcesContent":["import type { BuiltInValidationParams } from '../typings';\nimport { EmbedBuilder } from 'discord.js';\n\nexport default function ({\n interaction,\n targetCommand,\n}: BuiltInValidationParams) {\n if (interaction.isAutocomplete()) return;\n const userPermissions = interaction.memberPermissions;\n let userPermissionsRequired = targetCommand.options?.userPermissions;\n let missingUserPermissions: string[] = [];\n\n if (typeof userPermissionsRequired === 'string') {\n userPermissionsRequired = [userPermissionsRequired];\n }\n\n const botPermissions = interaction.guild?.members.me?.permissions;\n let botPermissionsRequired = targetCommand.options?.botPermissions;\n let missingBotPermissions: string[] = [];\n\n if (typeof botPermissionsRequired === 'string') {\n botPermissionsRequired = [botPermissionsRequired];\n }\n\n if (!userPermissionsRequired?.length && !botPermissionsRequired?.length) {\n return;\n }\n\n if (userPermissions && userPermissionsRequired) {\n for (const permission of userPermissionsRequired) {\n const hasPermission = userPermissions.has(permission);\n\n if (!hasPermission) {\n missingUserPermissions.push(permission);\n }\n }\n }\n\n if (botPermissions && botPermissionsRequired) {\n for (const permission of botPermissionsRequired) {\n const hasPermission = botPermissions.has(permission);\n\n if (!hasPermission) {\n missingBotPermissions.push(permission);\n }\n }\n }\n\n if (!missingUserPermissions.length && !missingBotPermissions.length) {\n return;\n }\n\n // Fix casing. e.g. KickMembers -> Kick Members\n const pattern = /([a-z])([A-Z])|([A-Z]+)([A-Z][a-z])/g;\n\n missingUserPermissions = missingUserPermissions.map((str) =>\n str.replace(pattern, '$1$3 $2$4'),\n );\n missingBotPermissions = missingBotPermissions.map((str) =>\n str.replace(pattern, '$1$3 $2$4'),\n );\n\n let embedDescription = '';\n\n const formatter = new Intl.ListFormat('en', {\n style: 'long',\n type: 'conjunction',\n });\n\n const getPermissionWord = (permissions: string[]) =>\n permissions.length === 1 ? 'permission' : 'permissions';\n\n if (missingUserPermissions.length) {\n const formattedPermissions = missingUserPermissions.map((p) => `\\`${p}\\``);\n const permissionsString = formatter.format(formattedPermissions);\n\n embedDescription += `- You must have the ${permissionsString} ${getPermissionWord(\n missingUserPermissions,\n )} to be able to run this command.\\n`;\n }\n\n if (missingBotPermissions.length) {\n const formattedPermissions = missingBotPermissions.map((p) => `\\`${p}\\``);\n const permissionsString = formatter.format(formattedPermissions);\n\n embedDescription += `- I must have the ${permissionsString} ${getPermissionWord(\n missingBotPermissions,\n )} to be able to execute this command.\\n`;\n }\n\n const embed = new EmbedBuilder()\n .setTitle(`:x: Missing permissions!`)\n .setDescription(embedDescription)\n .setColor('Red');\n\n interaction.reply({ embeds: [embed], ephemeral: true });\n return true;\n}\n"],"mappings":"yCACA,OAAS,iBAAoB,aAEd,SAAR,oBAAkB,CACvB,YACA,aACF,EAA4B,CAC1B,GAAI,YAAY,eAAe,EAAG,OAClC,IAAM,gBAAkB,YAAY,kBAChC,wBAA0B,cAAc,SAAS,gBACjD,uBAAmC,CAAC,EAEpC,OAAO,yBAA4B,WACrC,wBAA0B,CAAC,uBAAuB,GAGpD,IAAM,eAAiB,YAAY,OAAO,QAAQ,IAAI,YAClD,uBAAyB,cAAc,SAAS,eAChD,sBAAkC,CAAC,EAMvC,GAJI,OAAO,wBAA2B,WACpC,uBAAyB,CAAC,sBAAsB,GAG9C,CAAC,yBAAyB,QAAU,CAAC,wBAAwB,OAC/D,OAGF,GAAI,iBAAmB,wBACrB,QAAW,cAAc,wBACD,gBAAgB,IAAI,UAAU,GAGlD,uBAAuB,KAAK,UAAU,EAK5C,GAAI,gBAAkB,uBACpB,QAAW,cAAc,uBACD,eAAe,IAAI,UAAU,GAGjD,sBAAsB,KAAK,UAAU,EAK3C,GAAI,CAAC,uBAAuB,QAAU,CAAC,sBAAsB,OAC3D,OAIF,IAAM,QAAU,uCAEhB,uBAAyB,uBAAuB,IAAK,KACnD,IAAI,QAAQ,QAAS,WAAW,CAClC,EACA,sBAAwB,sBAAsB,IAAK,KACjD,IAAI,QAAQ,QAAS,WAAW,CAClC,EAEA,IAAI,iBAAmB,GAEjB,UAAY,IAAI,KAAK,WAAW,KAAM,CAC1C,MAAO,OACP,KAAM,aACR,CAAC,EAEK,kBAAoB,OAAC,aACzB,YAAY,SAAW,EAAI,aAAe,cADlB,qBAG1B,GAAI,uBAAuB,OAAQ,CACjC,IAAM,qBAAuB,uBAAuB,IAAK,GAAM,KAAK,CAAC,IAAI,EACnE,kBAAoB,UAAU,OAAO,oBAAoB,EAE/D,kBAAoB,uBAAuB,iBAAiB,IAAI,kBAC9D,sBACF,CAAC;AAAA,CACH,CAEA,GAAI,sBAAsB,OAAQ,CAChC,IAAM,qBAAuB,sBAAsB,IAAK,GAAM,KAAK,CAAC,IAAI,EAClE,kBAAoB,UAAU,OAAO,oBAAoB,EAE/D,kBAAoB,qBAAqB,iBAAiB,IAAI,kBAC5D,qBACF,CAAC;AAAA,CACH,CAEA,IAAM,MAAQ,IAAI,aAAa,EAC5B,SAAS,0BAA0B,EACnC,eAAe,gBAAgB,EAC/B,SAAS,KAAK,EAEjB,mBAAY,MAAM,CAAE,OAAQ,CAAC,KAAK,EAAG,UAAW,EAAK,CAAC,EAC/C,EACT,CA9FO","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/clone.ts"],"sourcesContent":["import rfdc from 'rfdc';\n\nexport const clone = rfdc();\n"],"mappings":"AAAA,OAAO,SAAU,OAEV,IAAM,MAAQ,KAAK","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/handlers/validation-handler/ValidationHandler.ts"],"sourcesContent":["import type {\n ValidationHandlerData,\n ValidationHandlerOptions,\n} from './typings';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { getFilePaths } from '../../utils/get-paths';\nimport { clone } from '../../utils/clone';\nimport colors from '../../utils/colors';\n\n/**\n * A handler for command validations.\n */\nexport class ValidationHandler {\n #data: ValidationHandlerData;\n\n constructor({ ...options }: ValidationHandlerOptions) {\n this.#data = {\n ...options,\n validations: [],\n };\n }\n\n async init() {\n this.#data.validations = await this.#buildValidations();\n }\n\n async #buildValidations() {\n const allowedExtensions = /\\.(js|mjs|cjs|ts)$/i;\n\n const validationPaths = await getFilePaths(\n this.#data.validationsPath,\n true,\n );\n const validationFilePaths = validationPaths.filter((path) =>\n allowedExtensions.test(path),\n );\n\n const validationFunctions: Function[] = [];\n\n for (const validationFilePath of validationFilePaths) {\n const modulePath = toFileURL(validationFilePath);\n\n let importedFunction = (await import(`${modulePath}?t=${Date.now()}`))\n .default;\n let validationFunction = clone(importedFunction);\n\n // If it's CommonJS, invalidate the import cache\n if (typeof module !== 'undefined' && typeof require !== 'undefined') {\n delete require.cache[require.resolve(validationFilePath)];\n }\n\n if (validationFunction?.default) {\n validationFunction = validationFunction.default;\n }\n\n const compactFilePath =\n validationFilePath.split(process.cwd())[1] || validationFilePath;\n\n if (typeof validationFunction !== 'function') {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Validation file ${compactFilePath} does not export a function.`,\n ),\n );\n continue;\n }\n\n validationFunctions.push(validationFunction);\n }\n\n return validationFunctions;\n }\n\n get validations() {\n return this.#data.validations;\n }\n\n async reloadValidations() {\n if (!this.#data.validationsPath) {\n throw new Error(\n colors.red(\n 'Cannot reload validations as \"validationsPath\" was not provided when instantiating CommandKit.',\n ),\n );\n }\n\n const newValidations = await this.#buildValidations();\n\n this.#data.validations = newValidations;\n }\n}\n"],"mappings":"uOAYO,IAAM,kBAAN,KAAwB,CAZ/B,MAY+B,kCAC7B,MAEA,YAAY,CAAE,GAAG,OAAQ,EAA6B,CACpD,KAAK,MAAQ,CACX,GAAG,QACH,YAAa,CAAC,CAChB,CACF,CAEA,MAAM,MAAO,CACX,KAAK,MAAM,YAAc,MAAM,KAAK,kBAAkB,CACxD,CAEA,KAAM,mBAAoB,CACxB,IAAM,kBAAoB,sBAMpB,qBAJkB,MAAM,aAC5B,KAAK,MAAM,gBACX,EACF,GAC4C,OAAQ,MAClD,kBAAkB,KAAK,IAAI,CAC7B,EAEM,oBAAkC,CAAC,EAEzC,QAAW,sBAAsB,oBAAqB,CAGpD,IAAI,kBAAoB,MAAM,OAAO,GAFlB,UAAU,kBAAkB,CAEG,MAAM,KAAK,IAAI,CAAC,KAC/D,QACC,mBAAqB,MAAM,gBAAgB,EAG3C,OAAO,OAAW,KAAe,OAAO,UAAY,KACtD,OAAO,UAAQ,MAAM,UAAQ,QAAQ,kBAAkB,CAAC,EAGtD,oBAAoB,UACtB,mBAAqB,mBAAmB,SAG1C,IAAM,gBACJ,mBAAmB,MAAM,QAAQ,IAAI,CAAC,EAAE,CAAC,GAAK,mBAEhD,GAAI,OAAO,oBAAuB,WAAY,CAC5C,QAAQ,YACN,eAAO,OACL,6BAA6B,eAAe,8BAC9C,CACF,EACA,QACF,CAEA,oBAAoB,KAAK,kBAAkB,CAC7C,CAEA,OAAO,mBACT,CAEA,IAAI,aAAc,CAChB,OAAO,KAAK,MAAM,WACpB,CAEA,MAAM,mBAAoB,CACxB,GAAI,CAAC,KAAK,MAAM,gBACd,MAAM,IAAI,MACR,eAAO,IACL,gGACF,CACF,EAGF,IAAM,eAAiB,MAAM,KAAK,kBAAkB,EAEpD,KAAK,MAAM,YAAc,cAC3B,CACF","names":[]}