commandkit 0.1.11-dev.20240202064607 → 0.1.11-dev.20240203230231

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 (321) hide show
  1. package/dist/CommandKit--SA9LcIq.d.mts +452 -0
  2. package/dist/CommandKit-GIHMEeqf.d.ts +452 -0
  3. package/dist/CommandKit.d.mts +5 -0
  4. package/dist/CommandKit.d.ts +5 -0
  5. package/dist/CommandKit.js +11 -0
  6. package/dist/CommandKit.js.map +1 -0
  7. package/dist/CommandKit.mjs +2 -0
  8. package/dist/CommandKit.mjs.map +1 -0
  9. package/dist/bootstrap/client.d.mts +13 -0
  10. package/dist/bootstrap/client.d.ts +13 -0
  11. package/dist/bootstrap/client.js +2 -0
  12. package/dist/bootstrap/client.js.map +1 -0
  13. package/dist/bootstrap/client.mjs +2 -0
  14. package/dist/bootstrap/client.mjs.map +1 -0
  15. package/dist/bootstrap/loadEnv.d.mts +3 -0
  16. package/dist/bootstrap/loadEnv.d.ts +3 -0
  17. package/dist/bootstrap/loadEnv.js +2 -0
  18. package/dist/bootstrap/loadEnv.js.map +1 -0
  19. package/dist/bootstrap/loadEnv.mjs +2 -0
  20. package/dist/bootstrap/loadEnv.mjs.map +1 -0
  21. package/dist/chunk-5AIBE2QR.mjs +2 -0
  22. package/dist/chunk-5AIBE2QR.mjs.map +1 -0
  23. package/dist/chunk-6CLMSPNA.mjs +2 -0
  24. package/dist/chunk-6CLMSPNA.mjs.map +1 -0
  25. package/dist/chunk-77LPS2WP.mjs +2 -0
  26. package/dist/chunk-77LPS2WP.mjs.map +1 -0
  27. package/dist/chunk-7KD7ZCH6.mjs +2 -0
  28. package/dist/chunk-7KD7ZCH6.mjs.map +1 -0
  29. package/dist/chunk-BCQP4DZP.mjs +2 -0
  30. package/dist/chunk-BCQP4DZP.mjs.map +1 -0
  31. package/dist/chunk-BJCWVCAY.mjs +2 -0
  32. package/dist/chunk-BJCWVCAY.mjs.map +1 -0
  33. package/dist/chunk-BXBLPEWT.mjs +7 -0
  34. package/dist/chunk-BXBLPEWT.mjs.map +1 -0
  35. package/dist/chunk-CHI4NRSH.mjs +2 -0
  36. package/dist/chunk-CHI4NRSH.mjs.map +1 -0
  37. package/dist/chunk-DEB7FLUS.mjs +2 -0
  38. package/dist/chunk-DEB7FLUS.mjs.map +1 -0
  39. package/dist/chunk-FQGSVSCT.mjs +2 -0
  40. package/dist/chunk-FQGSVSCT.mjs.map +1 -0
  41. package/dist/chunk-IFTUM7TS.mjs +2 -0
  42. package/dist/chunk-IFTUM7TS.mjs.map +1 -0
  43. package/dist/chunk-KATLDJ7Z.mjs +2 -0
  44. package/dist/chunk-KATLDJ7Z.mjs.map +1 -0
  45. package/dist/chunk-KUU3KDAE.mjs +2 -0
  46. package/dist/chunk-KUU3KDAE.mjs.map +1 -0
  47. package/dist/chunk-M5FMJETI.mjs +1 -0
  48. package/dist/chunk-M5FMJETI.mjs.map +1 -0
  49. package/dist/chunk-PFU3PH6M.mjs +1 -0
  50. package/dist/chunk-PFU3PH6M.mjs.map +1 -0
  51. package/dist/chunk-Q7UFCVZL.mjs +2 -0
  52. package/dist/chunk-Q7UFCVZL.mjs.map +1 -0
  53. package/dist/chunk-QC2F7O3S.mjs +2 -0
  54. package/dist/chunk-QC2F7O3S.mjs.map +1 -0
  55. package/dist/chunk-QYJ4DE3N.mjs +2 -0
  56. package/dist/chunk-QYJ4DE3N.mjs.map +1 -0
  57. package/dist/chunk-R6PIHRXD.mjs +2 -0
  58. package/dist/chunk-R6PIHRXD.mjs.map +1 -0
  59. package/dist/chunk-RQQKHSL6.mjs +4 -0
  60. package/dist/chunk-RQQKHSL6.mjs.map +1 -0
  61. package/dist/chunk-SB3FAFCD.mjs +2 -0
  62. package/dist/chunk-SB3FAFCD.mjs.map +1 -0
  63. package/dist/chunk-SXUJOOQY.mjs +4 -0
  64. package/dist/chunk-SXUJOOQY.mjs.map +1 -0
  65. package/dist/chunk-SYOEMO4R.mjs +2 -0
  66. package/dist/chunk-SYOEMO4R.mjs.map +1 -0
  67. package/dist/chunk-TZXZ3UZS.mjs +2 -0
  68. package/dist/chunk-TZXZ3UZS.mjs.map +1 -0
  69. package/dist/chunk-UV2LVAQV.mjs +2 -0
  70. package/dist/chunk-UV2LVAQV.mjs.map +1 -0
  71. package/dist/chunk-VURGPMLB.mjs +2 -0
  72. package/dist/chunk-VURGPMLB.mjs.map +1 -0
  73. package/dist/chunk-ZJRAI4W5.mjs +2 -0
  74. package/dist/chunk-ZJRAI4W5.mjs.map +1 -0
  75. package/dist/components/ButtonKit.d.mts +55 -0
  76. package/dist/components/ButtonKit.d.ts +55 -0
  77. package/dist/components/ButtonKit.js +2 -0
  78. package/dist/components/ButtonKit.js.map +1 -0
  79. package/dist/components/ButtonKit.mjs +2 -0
  80. package/dist/components/ButtonKit.mjs.map +1 -0
  81. package/dist/components/index.d.mts +2 -0
  82. package/dist/components/index.d.ts +2 -0
  83. package/dist/components/index.js +2 -0
  84. package/dist/components/index.js.map +1 -0
  85. package/dist/components/index.mjs +2 -0
  86. package/dist/components/index.mjs.map +1 -0
  87. package/dist/config.d.mts +55 -0
  88. package/dist/config.d.ts +55 -0
  89. package/dist/config.js +2 -0
  90. package/dist/config.js.map +1 -0
  91. package/dist/config.mjs +2 -0
  92. package/dist/config.mjs.map +1 -0
  93. package/dist/environment/actions/development.d.mts +8 -0
  94. package/dist/environment/actions/development.d.ts +8 -0
  95. package/dist/environment/actions/development.js +2 -0
  96. package/dist/environment/actions/development.js.map +1 -0
  97. package/dist/environment/actions/development.mjs +2 -0
  98. package/dist/environment/actions/development.mjs.map +1 -0
  99. package/dist/environment/bundler/bundle.d.mts +3 -0
  100. package/dist/environment/bundler/bundle.d.ts +3 -0
  101. package/dist/environment/bundler/bundle.js +2 -0
  102. package/dist/environment/bundler/bundle.js.map +1 -0
  103. package/dist/environment/bundler/bundle.mjs +2 -0
  104. package/dist/environment/bundler/bundle.mjs.map +1 -0
  105. package/dist/environment/bundler/shims.d.mts +3 -0
  106. package/dist/environment/bundler/shims.d.ts +3 -0
  107. package/dist/environment/bundler/shims.js +11 -0
  108. package/dist/environment/bundler/shims.js.map +1 -0
  109. package/dist/environment/bundler/shims.mjs +11 -0
  110. package/dist/environment/bundler/shims.mjs.map +1 -0
  111. package/dist/environment/cli.d.mts +2 -0
  112. package/dist/environment/cli.d.ts +2 -0
  113. package/dist/environment/cli.js +2 -0
  114. package/dist/environment/cli.js.map +1 -0
  115. package/dist/environment/cli.mjs +2 -0
  116. package/dist/environment/cli.mjs.map +1 -0
  117. package/dist/environment/common/config.d.mts +7 -0
  118. package/dist/environment/common/config.d.ts +7 -0
  119. package/dist/environment/common/config.js +2 -0
  120. package/dist/environment/common/config.js.map +1 -0
  121. package/dist/environment/common/config.mjs +2 -0
  122. package/dist/environment/common/config.mjs.map +1 -0
  123. package/dist/environment/common/logger.d.mts +9 -0
  124. package/dist/environment/common/logger.d.ts +9 -0
  125. package/dist/environment/common/logger.js +2 -0
  126. package/dist/environment/common/logger.js.map +1 -0
  127. package/dist/environment/common/logger.mjs +2 -0
  128. package/dist/environment/common/logger.mjs.map +1 -0
  129. package/dist/handlers/command-handler/CommandHandler.d.mts +5 -0
  130. package/dist/handlers/command-handler/CommandHandler.d.ts +5 -0
  131. package/dist/handlers/command-handler/CommandHandler.js +11 -0
  132. package/dist/handlers/command-handler/CommandHandler.js.map +1 -0
  133. package/dist/handlers/command-handler/CommandHandler.mjs +2 -0
  134. package/dist/handlers/command-handler/CommandHandler.mjs.map +1 -0
  135. package/dist/handlers/command-handler/functions/loadCommandsWithRest.d.mts +35 -0
  136. package/dist/handlers/command-handler/functions/loadCommandsWithRest.d.ts +35 -0
  137. package/dist/handlers/command-handler/functions/loadCommandsWithRest.js +4 -0
  138. package/dist/handlers/command-handler/functions/loadCommandsWithRest.js.map +1 -0
  139. package/dist/handlers/command-handler/functions/loadCommandsWithRest.mjs +2 -0
  140. package/dist/handlers/command-handler/functions/loadCommandsWithRest.mjs.map +1 -0
  141. package/dist/handlers/command-handler/functions/registerCommands.d.mts +20 -0
  142. package/dist/handlers/command-handler/functions/registerCommands.d.ts +20 -0
  143. package/dist/handlers/command-handler/functions/registerCommands.js +7 -0
  144. package/dist/handlers/command-handler/functions/registerCommands.js.map +1 -0
  145. package/dist/handlers/command-handler/functions/registerCommands.mjs +2 -0
  146. package/dist/handlers/command-handler/functions/registerCommands.mjs.map +1 -0
  147. package/dist/handlers/command-handler/typings.d.mts +5 -0
  148. package/dist/handlers/command-handler/typings.d.ts +5 -0
  149. package/dist/handlers/command-handler/typings.js +2 -0
  150. package/dist/handlers/command-handler/typings.js.map +1 -0
  151. package/dist/handlers/command-handler/typings.mjs +1 -0
  152. package/dist/handlers/command-handler/typings.mjs.map +1 -0
  153. package/dist/handlers/command-handler/utils/areSlashCommandsDifferent.d.mts +9 -0
  154. package/dist/handlers/command-handler/utils/areSlashCommandsDifferent.d.ts +9 -0
  155. package/dist/handlers/command-handler/utils/areSlashCommandsDifferent.js +2 -0
  156. package/dist/handlers/command-handler/utils/areSlashCommandsDifferent.js.map +1 -0
  157. package/dist/handlers/command-handler/utils/areSlashCommandsDifferent.mjs +2 -0
  158. package/dist/handlers/command-handler/utils/areSlashCommandsDifferent.mjs.map +1 -0
  159. package/dist/handlers/command-handler/validations/devOnly.d.mts +9 -0
  160. package/dist/handlers/command-handler/validations/devOnly.d.ts +9 -0
  161. package/dist/handlers/command-handler/validations/devOnly.js +2 -0
  162. package/dist/handlers/command-handler/validations/devOnly.js.map +1 -0
  163. package/dist/handlers/command-handler/validations/devOnly.mjs +2 -0
  164. package/dist/handlers/command-handler/validations/devOnly.mjs.map +1 -0
  165. package/dist/handlers/command-handler/validations/index.d.mts +10 -0
  166. package/dist/handlers/command-handler/validations/index.d.ts +10 -0
  167. package/dist/handlers/command-handler/validations/index.js +4 -0
  168. package/dist/handlers/command-handler/validations/index.js.map +1 -0
  169. package/dist/handlers/command-handler/validations/index.mjs +2 -0
  170. package/dist/handlers/command-handler/validations/index.mjs.map +1 -0
  171. package/dist/handlers/command-handler/validations/permissions.d.mts +9 -0
  172. package/dist/handlers/command-handler/validations/permissions.d.ts +9 -0
  173. package/dist/handlers/command-handler/validations/permissions.js +4 -0
  174. package/dist/handlers/command-handler/validations/permissions.js.map +1 -0
  175. package/dist/handlers/command-handler/validations/permissions.mjs +2 -0
  176. package/dist/handlers/command-handler/validations/permissions.mjs.map +1 -0
  177. package/dist/handlers/event-handler/EventHandler.d.mts +5 -0
  178. package/dist/handlers/event-handler/EventHandler.d.ts +5 -0
  179. package/dist/handlers/event-handler/EventHandler.js +2 -0
  180. package/dist/handlers/event-handler/EventHandler.js.map +1 -0
  181. package/dist/handlers/event-handler/EventHandler.mjs +2 -0
  182. package/dist/handlers/event-handler/EventHandler.mjs.map +1 -0
  183. package/dist/handlers/event-handler/typings.d.mts +5 -0
  184. package/dist/handlers/event-handler/typings.d.ts +5 -0
  185. package/dist/handlers/event-handler/typings.js +2 -0
  186. package/dist/handlers/event-handler/typings.js.map +1 -0
  187. package/dist/handlers/event-handler/typings.mjs +1 -0
  188. package/dist/handlers/event-handler/typings.mjs.map +1 -0
  189. package/dist/handlers/index.d.mts +5 -0
  190. package/dist/handlers/index.d.ts +5 -0
  191. package/dist/handlers/index.js +11 -0
  192. package/dist/handlers/index.js.map +1 -0
  193. package/dist/handlers/index.mjs +2 -0
  194. package/dist/handlers/index.mjs.map +1 -0
  195. package/dist/handlers/validation-handler/ValidationHandler.d.mts +14 -0
  196. package/dist/handlers/validation-handler/ValidationHandler.d.ts +14 -0
  197. package/dist/handlers/validation-handler/ValidationHandler.js +2 -0
  198. package/dist/handlers/validation-handler/ValidationHandler.js.map +1 -0
  199. package/dist/handlers/validation-handler/ValidationHandler.mjs +2 -0
  200. package/dist/handlers/validation-handler/ValidationHandler.mjs.map +1 -0
  201. package/dist/handlers/validation-handler/typings.d.mts +14 -0
  202. package/dist/handlers/validation-handler/typings.d.ts +14 -0
  203. package/dist/handlers/validation-handler/typings.js +2 -0
  204. package/dist/handlers/validation-handler/typings.js.map +1 -0
  205. package/dist/handlers/validation-handler/typings.mjs +1 -0
  206. package/dist/handlers/validation-handler/typings.mjs.map +1 -0
  207. package/dist/hooks/common.d.mts +12 -0
  208. package/dist/hooks/common.d.ts +12 -0
  209. package/dist/hooks/common.js +11 -0
  210. package/dist/hooks/common.js.map +1 -0
  211. package/dist/hooks/common.mjs +2 -0
  212. package/dist/hooks/common.mjs.map +1 -0
  213. package/dist/hooks/index.d.mts +14 -0
  214. package/dist/hooks/index.d.ts +14 -0
  215. package/dist/hooks/index.js +11 -0
  216. package/dist/hooks/index.js.map +1 -0
  217. package/dist/hooks/index.mjs +2 -0
  218. package/dist/hooks/index.mjs.map +1 -0
  219. package/dist/hooks/response.d.mts +7 -0
  220. package/dist/hooks/response.d.ts +7 -0
  221. package/dist/hooks/response.js +11 -0
  222. package/dist/hooks/response.js.map +1 -0
  223. package/dist/hooks/response.mjs +2 -0
  224. package/dist/hooks/response.mjs.map +1 -0
  225. package/dist/hooks/useChannel.d.mts +5 -0
  226. package/dist/hooks/useChannel.d.ts +5 -0
  227. package/dist/hooks/useChannel.js +11 -0
  228. package/dist/hooks/useChannel.js.map +1 -0
  229. package/dist/hooks/useChannel.mjs +2 -0
  230. package/dist/hooks/useChannel.mjs.map +1 -0
  231. package/dist/hooks/useClient.d.mts +5 -0
  232. package/dist/hooks/useClient.d.ts +5 -0
  233. package/dist/hooks/useClient.js +11 -0
  234. package/dist/hooks/useClient.js.map +1 -0
  235. package/dist/hooks/useClient.mjs +2 -0
  236. package/dist/hooks/useClient.mjs.map +1 -0
  237. package/dist/hooks/useCommandData.d.mts +5 -0
  238. package/dist/hooks/useCommandData.d.ts +5 -0
  239. package/dist/hooks/useCommandData.js +11 -0
  240. package/dist/hooks/useCommandData.js.map +1 -0
  241. package/dist/hooks/useCommandData.mjs +2 -0
  242. package/dist/hooks/useCommandData.mjs.map +1 -0
  243. package/dist/hooks/useCommandKit.d.mts +9 -0
  244. package/dist/hooks/useCommandKit.d.ts +9 -0
  245. package/dist/hooks/useCommandKit.js +11 -0
  246. package/dist/hooks/useCommandKit.js.map +1 -0
  247. package/dist/hooks/useCommandKit.mjs +2 -0
  248. package/dist/hooks/useCommandKit.mjs.map +1 -0
  249. package/dist/hooks/useGuild.d.mts +5 -0
  250. package/dist/hooks/useGuild.d.ts +5 -0
  251. package/dist/hooks/useGuild.js +11 -0
  252. package/dist/hooks/useGuild.js.map +1 -0
  253. package/dist/hooks/useGuild.mjs +2 -0
  254. package/dist/hooks/useGuild.mjs.map +1 -0
  255. package/dist/hooks/useInteraction.d.mts +9 -0
  256. package/dist/hooks/useInteraction.d.ts +9 -0
  257. package/dist/hooks/useInteraction.js +11 -0
  258. package/dist/hooks/useInteraction.js.map +1 -0
  259. package/dist/hooks/useInteraction.mjs +2 -0
  260. package/dist/hooks/useInteraction.mjs.map +1 -0
  261. package/dist/hooks/useMember.d.mts +5 -0
  262. package/dist/hooks/useMember.d.ts +5 -0
  263. package/dist/hooks/useMember.js +11 -0
  264. package/dist/hooks/useMember.js.map +1 -0
  265. package/dist/hooks/useMember.mjs +2 -0
  266. package/dist/hooks/useMember.mjs.map +1 -0
  267. package/dist/hooks/useUser.d.mts +5 -0
  268. package/dist/hooks/useUser.d.ts +5 -0
  269. package/dist/hooks/useUser.js +11 -0
  270. package/dist/hooks/useUser.js.map +1 -0
  271. package/dist/hooks/useUser.mjs +2 -0
  272. package/dist/hooks/useUser.mjs.map +1 -0
  273. package/dist/index.d.mts +25 -0
  274. package/dist/index.d.ts +25 -0
  275. package/dist/index.js +11 -0
  276. package/dist/index.js.map +1 -0
  277. package/dist/index.mjs +2 -0
  278. package/dist/index.mjs.map +1 -0
  279. package/dist/types/index.d.mts +5 -0
  280. package/dist/types/index.d.ts +5 -0
  281. package/dist/types/index.js +2 -0
  282. package/dist/types/index.js.map +1 -0
  283. package/dist/types/index.mjs +2 -0
  284. package/dist/types/index.mjs.map +1 -0
  285. package/dist/typings.d.mts +5 -0
  286. package/dist/typings.d.ts +5 -0
  287. package/dist/typings.js +2 -0
  288. package/dist/typings.js.map +1 -0
  289. package/dist/typings.mjs +1 -0
  290. package/dist/typings.mjs.map +1 -0
  291. package/dist/utils/clone.d.mts +3 -0
  292. package/dist/utils/clone.d.ts +3 -0
  293. package/dist/utils/clone.js +2 -0
  294. package/dist/utils/clone.js.map +1 -0
  295. package/dist/utils/clone.mjs +2 -0
  296. package/dist/utils/clone.mjs.map +1 -0
  297. package/dist/utils/colors.d.mts +27 -0
  298. package/dist/utils/colors.d.ts +27 -0
  299. package/dist/utils/colors.js +2 -0
  300. package/dist/utils/colors.js.map +1 -0
  301. package/dist/utils/colors.mjs +2 -0
  302. package/dist/utils/colors.mjs.map +1 -0
  303. package/dist/utils/get-paths.d.mts +4 -0
  304. package/dist/utils/get-paths.d.ts +4 -0
  305. package/dist/utils/get-paths.js +2 -0
  306. package/dist/utils/get-paths.js.map +1 -0
  307. package/dist/utils/get-paths.mjs +2 -0
  308. package/dist/utils/get-paths.mjs.map +1 -0
  309. package/dist/utils/resolve-file-url.d.mts +8 -0
  310. package/dist/utils/resolve-file-url.d.ts +8 -0
  311. package/dist/utils/resolve-file-url.js +2 -0
  312. package/dist/utils/resolve-file-url.js.map +1 -0
  313. package/dist/utils/resolve-file-url.mjs +2 -0
  314. package/dist/utils/resolve-file-url.mjs.map +1 -0
  315. package/dist/utils/signal.d.mts +21 -0
  316. package/dist/utils/signal.d.ts +21 -0
  317. package/dist/utils/signal.js +2 -0
  318. package/dist/utils/signal.js.map +1 -0
  319. package/dist/utils/signal.mjs +2 -0
  320. package/dist/utils/signal.mjs.map +1 -0
  321. package/package.json +2 -2
@@ -0,0 +1,452 @@
1
+ import { ValidationHandler } from './handlers/validation-handler/ValidationHandler.js';
2
+ import * as discord_js from 'discord.js';
3
+ import { Client, ChatInputCommandInteraction, ContextMenuCommandInteraction, AutocompleteInteraction, UserContextMenuCommandInteraction, MessageContextMenuCommandInteraction, PermissionsString, RESTPostAPIApplicationCommandsJSONBody, Interaction, CacheType } from 'discord.js';
4
+ import { AsyncLocalStorage } from 'async_hooks';
5
+
6
+ /**
7
+ * Command handler options.
8
+ * Similar to CommandKit options in structure.
9
+ */
10
+ interface CommandHandlerOptions {
11
+ /**
12
+ * The client created by the user.
13
+ */
14
+ client: Client;
15
+ /**
16
+ * Path to the user's commands.
17
+ */
18
+ commandsPath: string;
19
+ /**
20
+ * An array of developer guild IDs.
21
+ */
22
+ devGuildIds: string[];
23
+ /**
24
+ * An array of developer user IDs.
25
+ */
26
+ devUserIds: string[];
27
+ /**
28
+ * An array of developer role IDs.
29
+ */
30
+ devRoleIds: string[];
31
+ /**
32
+ * A validation handler instance to run validations before commands.
33
+ */
34
+ validationHandler?: ValidationHandler;
35
+ /**
36
+ * A boolean indicating whether to skip CommandKit's built-in validations (permission checking, etc.)
37
+ */
38
+ skipBuiltInValidations: boolean;
39
+ /**
40
+ * The CommandKit handler that instantiated this.
41
+ */
42
+ commandkitInstance: CommandKit;
43
+ /**
44
+ * A boolean indicating whether to register all commands in bulk.
45
+ */
46
+ bulkRegister: boolean;
47
+ /**
48
+ * Whether to enable hooks context.
49
+ */
50
+ enableHooks: boolean;
51
+ }
52
+ /**
53
+ * Private command handler data.
54
+ */
55
+ interface CommandHandlerData extends CommandHandlerOptions {
56
+ /**
57
+ * An array of command file objects.
58
+ */
59
+ commands: CommandFileObject[];
60
+ /**
61
+ * An array of built-in validations.
62
+ */
63
+ builtInValidations: BuiltInValidation[];
64
+ /**
65
+ * A validation handler instance to run validations before commands.
66
+ */
67
+ validationHandler?: ValidationHandler;
68
+ }
69
+ /**
70
+ * Parameters for CommandKit's built-in validations.
71
+ */
72
+ interface BuiltInValidationParams {
73
+ /**
74
+ * The target command to validate.
75
+ */
76
+ targetCommand: CommandFileObject;
77
+ /**
78
+ * The interaction of the target command.
79
+ */
80
+ interaction: CommandKitInteraction;
81
+ /**
82
+ * The command handler's data.
83
+ */
84
+ handlerData: CommandHandlerData;
85
+ }
86
+ /**
87
+ * Represents a command interaction.
88
+ */
89
+ type CommandKitInteraction = ChatInputCommandInteraction | ContextMenuCommandInteraction | AutocompleteInteraction;
90
+ /**
91
+ * A built in validation. Returns a boolean or void.
92
+ */
93
+ type BuiltInValidation = ({}: BuiltInValidationParams) => boolean | void;
94
+
95
+ /**
96
+ * Props for command run functions.
97
+ */
98
+ interface CommandProps {
99
+ /**
100
+ * The current command interaction object.
101
+ */
102
+ interaction: ChatInputCommandInteraction | ContextMenuCommandInteraction | UserContextMenuCommandInteraction | MessageContextMenuCommandInteraction | AutocompleteInteraction;
103
+ /**
104
+ * The Discord.js client object that CommandKit is handling.
105
+ */
106
+ client: Client<true>;
107
+ /**
108
+ * The current CommandKit handler instance.
109
+ */
110
+ handler: CommandKit;
111
+ }
112
+ /**
113
+ * Props for autocomplete command run functions.
114
+ */
115
+ interface AutocompleteProps extends CommandProps {
116
+ /**
117
+ * The current autocomplete command interaction object.
118
+ */
119
+ interaction: AutocompleteInteraction;
120
+ }
121
+ /**
122
+ * Props for slash (chat input) command run functions.
123
+ */
124
+ interface SlashCommandProps extends CommandProps {
125
+ /**
126
+ * The current slash (chat input) command interaction object.
127
+ */
128
+ interaction: ChatInputCommandInteraction;
129
+ }
130
+ /**
131
+ * Props for context menu command run functions.
132
+ */
133
+ interface ContextMenuCommandProps extends CommandProps {
134
+ /**
135
+ * The current context menu command interaction object.
136
+ */
137
+ interaction: ContextMenuCommandInteraction;
138
+ }
139
+ /**
140
+ * Props for user context menu command run functions.
141
+ */
142
+ interface UserContextMenuCommandProps extends CommandProps {
143
+ interaction: UserContextMenuCommandInteraction;
144
+ }
145
+ /**
146
+ * Props for message context menu command run functions.
147
+ */
148
+ interface MessageContextMenuCommandProps extends CommandProps {
149
+ interaction: MessageContextMenuCommandInteraction;
150
+ }
151
+ /**
152
+ * Props for command validation functions.
153
+ */
154
+ interface ValidationProps {
155
+ /**
156
+ * The current command interaction object.
157
+ */
158
+ interaction: ChatInputCommandInteraction | ContextMenuCommandInteraction | AutocompleteInteraction;
159
+ /**
160
+ * The Discord.js client object that CommandKit is handling.
161
+ */
162
+ client: Client<true>;
163
+ /**
164
+ * The current (local) target command object.
165
+ */
166
+ commandObj: CommandObject;
167
+ /**
168
+ * The current CommandKit handler instance.
169
+ */
170
+ handler: CommandKit;
171
+ }
172
+ /**
173
+ * Additional command configuration options.
174
+ */
175
+ interface CommandOptions {
176
+ /**
177
+ * A boolean indicating whether the command is guild-only.
178
+ * Used for built-in validation.
179
+ *
180
+ * @deprecated Use `dm_permission` in the command's `data` object instead.
181
+ */
182
+ guildOnly?: boolean;
183
+ /**
184
+ * A boolean indicating whether the command is developer-only.
185
+ * Used for registration and built-in validation.
186
+ */
187
+ devOnly?: boolean;
188
+ /**
189
+ * A boolean indicating whether the command is deleted/ignored on restart/reload.
190
+ */
191
+ deleted?: boolean;
192
+ /**
193
+ * A string or array of permissions that a user needs for the current command to be executed.
194
+ * Used for built-in validation.
195
+ *
196
+ * @example
197
+ * userPermissions: 'BanMembers'
198
+ * or
199
+ * userPermissions: ['BanMembers', 'KickMembers']
200
+ */
201
+ userPermissions?: PermissionsString | PermissionsString[];
202
+ /**
203
+ * A string or array of permissions that the bot needs to execute the current command.
204
+ * Used for built-in validation.
205
+ *
206
+ * @example
207
+ * botPermissions: 'BanMembers'
208
+ * or
209
+ * botPermissions: ['BanMembers', 'KickMembers']
210
+ */
211
+ botPermissions?: PermissionsString | PermissionsString[];
212
+ [key: string]: any;
213
+ }
214
+ type CommandData = RESTPostAPIApplicationCommandsJSONBody;
215
+ type CommandObject = {
216
+ /**
217
+ * An object which defines the structure of the application command.
218
+ */
219
+ data: CommandData;
220
+ /**
221
+ * Additional command configuration options.
222
+ */
223
+ options?: CommandOptions;
224
+ /**
225
+ * The path to the command file.
226
+ */
227
+ filePath: string;
228
+ /**
229
+ * The command's category. Determined based on the command folder.
230
+ *
231
+ * @example
232
+ * ```txt
233
+ * "/src/commands/ping.js" -> null
234
+ * "/src/commands/Misc/ping.js" -> "Misc"
235
+ * ```
236
+ */
237
+ category: string | null;
238
+ [key: string]: any;
239
+ };
240
+ declare enum ReloadType {
241
+ /**
242
+ * Reload developer/guild commands.
243
+ */
244
+ Developer = "dev",
245
+ /**
246
+ * Reload global commands.
247
+ */
248
+ Global = "global"
249
+ }
250
+
251
+ interface hCommandContext {
252
+ interaction: CommandKitInteraction;
253
+ command: CommandData;
254
+ }
255
+ /**
256
+ * A handler for client application commands.
257
+ */
258
+ declare class CommandHandler {
259
+ #private;
260
+ context: AsyncLocalStorage<hCommandContext> | null;
261
+ constructor({ ...options }: CommandHandlerOptions);
262
+ init(): Promise<void>;
263
+ handleCommands(): void;
264
+ get commands(): CommandFileObject[];
265
+ reloadCommands(type?: ReloadOptions): Promise<void>;
266
+ }
267
+
268
+ /**
269
+ * Event handler options.
270
+ */
271
+ interface EventHandlerOptions {
272
+ client: Client;
273
+ eventsPath: string;
274
+ commandKitInstance: CommandKit;
275
+ }
276
+ /**
277
+ * Private event handler data.
278
+ */
279
+ interface EventHandlerData extends EventHandlerOptions {
280
+ events: {
281
+ name: string;
282
+ functions: Function[];
283
+ }[];
284
+ }
285
+
286
+ /**
287
+ * A handler for client events.
288
+ */
289
+ declare class EventHandler {
290
+ #private;
291
+ constructor({ ...options }: EventHandlerOptions);
292
+ init(): Promise<void>;
293
+ get events(): {
294
+ name: string;
295
+ functions: Function[];
296
+ }[];
297
+ reloadEvents(commandHandler?: CommandHandler): Promise<void>;
298
+ }
299
+
300
+ /**
301
+ * Options for instantiating a CommandKit handler.
302
+ */
303
+ interface CommandKitOptions {
304
+ /**
305
+ * The Discord.js client object to use with CommandKit.
306
+ */
307
+ client: Client;
308
+ /**
309
+ * The path to your commands directory.
310
+ */
311
+ commandsPath?: string;
312
+ /**
313
+ * The path to your events directory.
314
+ */
315
+ eventsPath?: string;
316
+ /**
317
+ * The path to the validations directory.
318
+ */
319
+ validationsPath?: string;
320
+ /**
321
+ * List of development guild IDs to restrict devOnly commands to.
322
+ */
323
+ devGuildIds?: string[];
324
+ /**
325
+ * List of developer user IDs to restrict devOnly commands to.
326
+ */
327
+ devUserIds?: string[];
328
+ /**
329
+ * List of developer role IDs to restrict devOnly commands to.
330
+ */
331
+ devRoleIds?: string[];
332
+ /**
333
+ * Skip CommandKit's built-in validations (for devOnly commands).
334
+ */
335
+ skipBuiltInValidations?: boolean;
336
+ /**
337
+ * Bulk register application commands instead of one-by-one.
338
+ */
339
+ bulkRegister?: boolean;
340
+ /**
341
+ * Options for experimental features.
342
+ */
343
+ experimental?: {
344
+ /**
345
+ * Enable hooks. This allows you to utilize hooks such as `useInteraction()` to access the interaction object anywhere inside the command.
346
+ */
347
+ hooks?: boolean;
348
+ };
349
+ }
350
+ /**
351
+ * Private data for the CommandKit class.
352
+ */
353
+ interface CommandKitData extends CommandKitOptions {
354
+ commandHandler?: CommandHandler;
355
+ eventHandler?: EventHandler;
356
+ validationHandler?: ValidationHandler;
357
+ }
358
+ /**
359
+ * Represents a command context.
360
+ */
361
+ interface CommandContext<T extends Interaction, Cached extends CacheType> {
362
+ /**
363
+ * The interaction that triggered this command.
364
+ */
365
+ interaction: Interaction<CacheType>;
366
+ /**
367
+ * The client that instantiated this command.
368
+ */
369
+ client: Client;
370
+ /**
371
+ * The command data.
372
+ */
373
+ handler: CommandKit;
374
+ }
375
+ /**
376
+ * Represents a command file.
377
+ */
378
+ interface CommandFileObject {
379
+ data: CommandData;
380
+ options?: CommandOptions;
381
+ run: <Cached extends CacheType = CacheType>(ctx: CommandContext<Interaction, Cached>) => Awaited<void>;
382
+ autocomplete?: <Cached extends CacheType = CacheType>(ctx: CommandContext<Interaction, Cached>) => Awaited<void>;
383
+ filePath: string;
384
+ category: string | null;
385
+ [key: string]: any;
386
+ }
387
+ /**
388
+ * A reload type for commands.
389
+ */
390
+ type ReloadOptions = 'dev' | 'global' | ReloadType;
391
+
392
+ declare class CommandKit {
393
+ #private;
394
+ static _instance: CommandKit | null;
395
+ /**
396
+ * Create a new command and event handler with CommandKit.
397
+ *
398
+ * @param options - The default CommandKit configuration.
399
+ * @see {@link https://commandkit.js.org/docs/commandkit-setup}
400
+ */
401
+ constructor(options: CommandKitOptions);
402
+ /**
403
+ * Get the client attached to this CommandKit instance.
404
+ */
405
+ get client(): discord_js.Client<boolean>;
406
+ /**
407
+ * Get command handler instance.
408
+ */
409
+ get commandHandler(): CommandHandler | undefined;
410
+ /**
411
+ * Updates application commands with the latest from "commandsPath".
412
+ */
413
+ reloadCommands(type?: ReloadOptions): Promise<void>;
414
+ /**
415
+ * Updates application events with the latest from "eventsPath".
416
+ */
417
+ reloadEvents(): Promise<void>;
418
+ /**
419
+ * Updates application command validations with the latest from "validationsPath".
420
+ */
421
+ reloadValidations(): Promise<void>;
422
+ /**
423
+ * @returns An array of objects of all the commands that CommandKit is handling.
424
+ */
425
+ get commands(): CommandObject[];
426
+ /**
427
+ * @returns The path to the commands folder which was set when instantiating CommandKit.
428
+ */
429
+ get commandsPath(): string | undefined;
430
+ /**
431
+ * @returns The path to the events folder which was set when instantiating CommandKit.
432
+ */
433
+ get eventsPath(): string | undefined;
434
+ /**
435
+ * @returns The path to the validations folder which was set when instantiating CommandKit.
436
+ */
437
+ get validationsPath(): string | undefined;
438
+ /**
439
+ * @returns An array of all the developer user IDs which was set when instantiating CommandKit.
440
+ */
441
+ get devUserIds(): string[];
442
+ /**
443
+ * @returns An array of all the developer guild IDs which was set when instantiating CommandKit.
444
+ */
445
+ get devGuildIds(): string[];
446
+ /**
447
+ * @returns An array of all the developer role IDs which was set when instantiating CommandKit.
448
+ */
449
+ get devRoleIds(): string[];
450
+ }
451
+
452
+ export { type AutocompleteProps as A, type BuiltInValidationParams as B, CommandKit as C, type EventHandlerOptions as E, type MessageContextMenuCommandProps as M, ReloadType as R, type SlashCommandProps as S, type UserContextMenuCommandProps as U, type ValidationProps as V, type CommandProps as a, type ContextMenuCommandProps as b, type CommandOptions as c, type CommandData as d, type CommandObject as e, CommandHandler as f, type CommandKitInteraction as g, type hCommandContext as h, type CommandFileObject as i, type ReloadOptions as j, type CommandHandlerOptions as k, type CommandHandlerData as l, type BuiltInValidation as m, type EventHandlerData as n, EventHandler as o, type CommandKitOptions as p, type CommandKitData as q, type CommandContext as r };
@@ -0,0 +1,5 @@
1
+ import 'discord.js';
2
+ export { C as CommandKit } from './CommandKit--SA9LcIq.mjs';
3
+ import './handlers/validation-handler/ValidationHandler.mjs';
4
+ import './handlers/validation-handler/typings.mjs';
5
+ import 'async_hooks';
@@ -0,0 +1,5 @@
1
+ import 'discord.js';
2
+ export { C as CommandKit } from './CommandKit-GIHMEeqf.js';
3
+ import './handlers/validation-handler/ValidationHandler.js';
4
+ import './handlers/validation-handler/typings.js';
5
+ import 'async_hooks';
@@ -0,0 +1,11 @@
1
+ "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var CommandKit_exports={};__export(CommandKit_exports,{CommandKit:()=>CommandKit});module.exports=__toCommonJS(CommandKit_exports);var import_path=__toESM(require("path"));function toFileURL(filePath){return"file://"+import_path.default.resolve(filePath).replace(/\\\\|\\/g,"/")}__name(toFileURL,"toFileURL");var import_path2=__toESM(require("path")),import_promises=__toESM(require("fs/promises"));async function getFilePaths(directory,nesting){let filePaths=[];if(!directory)return filePaths;let files=await import_promises.default.readdir(directory,{withFileTypes:!0});for(let file of files){let filePath=import_path2.default.join(directory,file.name);file.isFile()&&filePaths.push(filePath),nesting&&file.isDirectory()&&(filePaths=[...filePaths,...await getFilePaths(filePath,!0)])}return filePaths}__name(getFilePaths,"getFilePaths");async function getFolderPaths(directory,nesting){let folderPaths=[];if(!directory)return folderPaths;let folders=await import_promises.default.readdir(directory,{withFileTypes:!0});for(let folder of folders){let folderPath=import_path2.default.join(directory,folder.name);folder.isDirectory()&&(folderPaths.push(folderPath),nesting&&(folderPaths=[...folderPaths,...await getFolderPaths(folderPath,!0)]))}return folderPaths}__name(getFolderPaths,"getFolderPaths");var import_rfdc=__toESM(require("rfdc")),clone=(0,import_rfdc.default)();var resetColor="\x1B[0m",colors_default={reset:text=>`${text}${resetColor}`,bright:text=>`\x1B[1m${text}${resetColor}`,dim:text=>`\x1B[2m${text}${resetColor}`,underscore:text=>`\x1B[4m${text}${resetColor}`,blink:text=>`\x1B[5m${text}${resetColor}`,reverse:text=>`\x1B[7m${text}${resetColor}`,hidden:text=>`\x1B[8m${text}${resetColor}`,black:text=>`\x1B[30m${text}${resetColor}`,red:text=>`\x1B[31m${text}${resetColor}`,green:text=>`\x1B[32m${text}${resetColor}`,yellow:text=>`\x1B[33m${text}${resetColor}`,blue:text=>`\x1B[34m${text}${resetColor}`,magenta:text=>`\x1B[35m${text}${resetColor}`,cyan:text=>`\x1B[36m${text}${resetColor}`,white:text=>`\x1B[37m${text}${resetColor}`,bgBlack:text=>`\x1B[40m${text}${resetColor}`,bgRed:text=>`\x1B[41m${text}${resetColor}`,bgGreen:text=>`\x1B[42m${text}${resetColor}`,bgYellow:text=>`\x1B[43m${text}${resetColor}`,bgBlue:text=>`\x1B[44m${text}${resetColor}`,bgMagenta:text=>`\x1B[45m${text}${resetColor}`,bgCyan:text=>`\x1B[46m${text}${resetColor}`,bgWhite:text=>`\x1B[47m${text}${resetColor}`};async function loadCommandsWithRest(props){if(props.reloading)if(props.client.isReady())await handleLoading(props.client,props.commands,props.devGuildIds,props.reloading,props.type);else throw new Error(colors_default.red("Cannot reload commands when client is not ready."));else props.client.once("ready",async c=>{await handleLoading(c,props.commands,props.devGuildIds,props.reloading,props.type)})}__name(loadCommandsWithRest,"loadCommandsWithRest");async function handleLoading(client,commands,devGuildIds,reloading,type){commands=commands.filter(cmd=>!cmd.options?.deleted);let devOnlyCommands=commands.filter(cmd=>cmd.options?.devOnly),globalCommands=commands.filter(cmd=>!cmd.options?.devOnly);type==="dev"?await loadDevCommands(client,devOnlyCommands,devGuildIds,reloading):type==="global"?await loadGlobalCommands(client,globalCommands,reloading):(await loadDevCommands(client,devOnlyCommands,devGuildIds,reloading),await loadGlobalCommands(client,globalCommands,reloading))}__name(handleLoading,"handleLoading");async function loadGlobalCommands(client,commands,reloading){let requestBody=commands.map(cmd=>cmd.data);await client.application.commands.set(requestBody).catch(error=>{throw new Error(colors_default.red(`Error ${reloading?"reloading":"loading"} global application commands.
2
+ `),error)}),console.log(colors_default.green(`${reloading?"Reloaded":"Loaded"} ${requestBody.length} global commands.`))}__name(loadGlobalCommands,"loadGlobalCommands");async function loadDevCommands(client,commands,guildIds,reloading){let requestBody=commands.map(cmd=>cmd.data);for(let guildId of guildIds){let targetGuild=client.guilds.cache.get(guildId)||await client.guilds.fetch(guildId);if(!targetGuild){process.emitWarning(`Cannot ${reloading?"reload":"load"} commands in guild "${guildId}" - guild doesn't exist or client isn't part of the guild.`);continue}await targetGuild.commands.set(requestBody).catch(error=>{throw new Error(colors_default.red(`Error ${reloading?"reloading":"loading"} developer application commands in guild "${targetGuild?.name||guildId}".
3
+ `),error)}),console.log(colors_default.green(`${reloading?"Reloaded":"Loaded"} ${requestBody.length} developer commands in guild "${targetGuild.name}".`))}}__name(loadDevCommands,"loadDevCommands");function areSlashCommandsDifferent(appCommand,localCommand){if(appCommand.options||(appCommand.options=[]),localCommand.options||(localCommand.options=[]),appCommand.description||(appCommand.description=""),localCommand.description||(localCommand.description=""),localCommand.description!==appCommand.description||localCommand.options.length!==appCommand.options.length)return!0}__name(areSlashCommandsDifferent,"areSlashCommandsDifferent");async function registerCommands(props){if(props.reloading)if(props.client.isReady())await handleRegistration(props.client,props.commands,props.devGuildIds,props.type);else throw new Error(colors_default.red("Cannot reload commands when client is not ready."));else props.client.once("ready",async c=>{await handleRegistration(c,props.commands,props.devGuildIds,props.type)})}__name(registerCommands,"registerCommands");async function handleRegistration(client,commands,devGuildIds,type){let devOnlyCommands=commands.filter(cmd=>cmd.options?.devOnly),globalCommands=commands.filter(cmd=>!cmd.options?.devOnly);type==="dev"?await registerDevCommands(client,devOnlyCommands,devGuildIds):type==="global"?await registerGlobalCommands(client,globalCommands):(await registerDevCommands(client,devOnlyCommands,devGuildIds),await registerGlobalCommands(client,globalCommands))}__name(handleRegistration,"handleRegistration");async function registerGlobalCommands(client,commands){let appCommandsManager=client.application.commands;await appCommandsManager.fetch();for(let command of commands){let targetCommand=appCommandsManager.cache.find(cmd=>cmd.name===command.data.name);if(command.options?.deleted){targetCommand?(await targetCommand.delete().catch(error=>{throw new Error(colors_default.red(`Failed to delete command "${command.data.name}" globally.
4
+ `),error)}),console.log(colors_default.green(`Deleted command "${command.data.name}" globally.`))):process.emitWarning(colors_default.yellow(`Ignoring: Command "${command.data.name}" is globally marked as deleted.`));continue}if(targetCommand&&areSlashCommandsDifferent(targetCommand,command.data)){await targetCommand.edit(command.data).catch(error=>{throw new Error(colors_default.red(`Failed to edit command "${command.data.name}" globally.
5
+ `),error)}),console.log(colors_default.green(`Edited command "${command.data.name}" globally.`));continue}targetCommand||(await appCommandsManager.create(command.data).catch(error=>{throw new Error(colors_default.red(`Failed to register command "${command.data.name}" globally.
6
+ `),error)}),console.log(colors_default.green(`Registered command "${command.data.name}" globally.`)))}}__name(registerGlobalCommands,"registerGlobalCommands");async function registerDevCommands(client,commands,guildIds){let devGuilds=[];for(let guildId of guildIds){let guild=client.guilds.cache.get(guildId)||await client.guilds.fetch(guildId);if(!guild){process.emitWarning(colors_default.yellow(`Ignoring: Guild ${guildId} doesn't exist or client isn't part of the guild.`));continue}devGuilds.push(guild)}let guildCommandsManagers=[];for(let guild of devGuilds){let guildCommandsManager=guild.commands;await guildCommandsManager.fetch(),guildCommandsManagers.push(guildCommandsManager)}for(let command of commands)for(let guildCommands of guildCommandsManagers){let targetCommand=guildCommands.cache.find(cmd=>cmd.name===command.data.name);if(command.options?.deleted){targetCommand?(await targetCommand.delete().catch(error=>{throw new Error(colors_default.red(`Failed to delete command "${command.data.name}" in ${guildCommands.guild.name}.`),error)}),console.log(colors_default.green(`Deleted command "${command.data.name}" in ${guildCommands.guild.name}.`))):process.emitWarning(colors_default.yellow(`Ignoring: Command "${command.data.name}" is marked as deleted in ${guildCommands.guild.name}.`));continue}if(targetCommand&&areSlashCommandsDifferent(targetCommand,command.data)){await targetCommand.edit(command.data).catch(error=>{throw new Error(colors_default.red(`Failed to edit command "${command.data.name}" in ${guildCommands.guild.name}.
7
+ `),error)}),console.log(colors_default.green(`Edited command "${command.data.name}" in ${guildCommands.guild.name}.`));continue}targetCommand||(await guildCommands.create(command.data).catch(error=>{throw new Error(colors_default.red(`Failed to register command "${command.data.name}" in ${guildCommands.guild.name}.
8
+ `),error)}),console.log(colors_default.green(`Registered command "${command.data.name}" in ${guildCommands.guild.name}.`)))}}__name(registerDevCommands,"registerDevCommands");function devOnly_default({interaction,targetCommand,handlerData}){if(!interaction.isAutocomplete()&&targetCommand.options?.devOnly){if(interaction.inGuild()&&!handlerData.devGuildIds.includes(interaction.guildId))return interaction.reply({content:"\u274C This command can only be used inside development servers.",ephemeral:!0}),!0;let memberRoles=interaction.guild?.members.cache.get(interaction.user.id)?.roles.cache,hasDevRole=!1;if(memberRoles?.forEach(role=>{handlerData.devRoleIds.includes(role.id)&&(hasDevRole=!0)}),!(handlerData.devUserIds.includes(interaction.user.id)||hasDevRole))return interaction.reply({content:"\u274C This command can only be used by developers.",ephemeral:!0}),!0}}__name(devOnly_default,"default");var import_discord=require("discord.js");function permissions_default({interaction,targetCommand}){if(interaction.isAutocomplete())return;let userPermissions=interaction.memberPermissions,userPermissionsRequired=targetCommand.options?.userPermissions,missingUserPermissions=[];typeof userPermissionsRequired=="string"&&(userPermissionsRequired=[userPermissionsRequired]);let botPermissions=interaction.guild?.members.me?.permissions,botPermissionsRequired=targetCommand.options?.botPermissions,missingBotPermissions=[];if(typeof botPermissionsRequired=="string"&&(botPermissionsRequired=[botPermissionsRequired]),!userPermissionsRequired?.length&&!botPermissionsRequired?.length)return;if(userPermissions&&userPermissionsRequired)for(let permission of userPermissionsRequired)userPermissions.has(permission)||missingUserPermissions.push(permission);if(botPermissions&&botPermissionsRequired)for(let permission of botPermissionsRequired)botPermissions.has(permission)||missingBotPermissions.push(permission);if(!missingUserPermissions.length&&!missingBotPermissions.length)return;let pattern=/([a-z])([A-Z])|([A-Z]+)([A-Z][a-z])/g;missingUserPermissions=missingUserPermissions.map(str=>str.replace(pattern,"$1$3 $2$4")),missingBotPermissions=missingBotPermissions.map(str=>str.replace(pattern,"$1$3 $2$4"));let embedDescription="",formatter=new Intl.ListFormat("en",{style:"long",type:"conjunction"}),getPermissionWord=__name(permissions=>permissions.length===1?"permission":"permissions","getPermissionWord");if(missingUserPermissions.length){let formattedPermissions=missingUserPermissions.map(p=>`\`${p}\``),permissionsString=formatter.format(formattedPermissions);embedDescription+=`- You must have the ${permissionsString} ${getPermissionWord(missingUserPermissions)} to be able to run this command.
9
+ `}if(missingBotPermissions.length){let formattedPermissions=missingBotPermissions.map(p=>`\`${p}\``),permissionsString=formatter.format(formattedPermissions);embedDescription+=`- I must have the ${permissionsString} ${getPermissionWord(missingBotPermissions)} to be able to execute this command.
10
+ `}let embed=new import_discord.EmbedBuilder().setTitle(":x: Missing permissions!").setDescription(embedDescription).setColor("Red");return interaction.reply({embeds:[embed],ephemeral:!0}),!0}__name(permissions_default,"default");var validations_default=[devOnly_default,permissions_default];var import_async_hooks=require("async_hooks");var CommandHandler=class{static{__name(this,"CommandHandler")}#data;context=null;constructor({...options}){this.#data={...options,builtInValidations:[],commands:[]}}async init(){this.#data.enableHooks&&!this.context&&(this.context=new import_async_hooks.AsyncLocalStorage),await this.#buildCommands(),this.#buildBuiltInValidations();let devOnlyCommands=this.#data.commands.filter(cmd=>cmd.options?.devOnly);devOnlyCommands.length&&!this.#data.devGuildIds.length&&process.emitWarning(colors_default.yellow('You have commands marked as "devOnly", but "devGuildIds" have not been set.')),devOnlyCommands.length&&!this.#data.devUserIds.length&&!this.#data.devRoleIds.length&&process.emitWarning(colors_default.yellow('You have commands marked as "devOnly", but "devUserIds" or "devRoleIds" have not been set.')),this.#data.bulkRegister?await loadCommandsWithRest({client:this.#data.client,devGuildIds:this.#data.devGuildIds,commands:this.#data.commands}):await registerCommands({client:this.#data.client,devGuildIds:this.#data.devGuildIds,commands:this.#data.commands}),this.handleCommands()}async#buildCommands(){let allowedExtensions=/\.(js|mjs|cjs|ts)$/i,commandFilePaths=(await getFilePaths(this.#data.commandsPath,!0)).filter(path3=>allowedExtensions.test(path3));for(let commandFilePath of commandFilePaths){let importedObj=await import(`${toFileURL(commandFilePath)}?t=${Date.now()}`),commandObj=clone(importedObj);typeof module<"u"&&typeof require<"u"&&delete require.cache[require.resolve(commandFilePath)];let compactFilePath=commandFilePath.split(process.cwd())[1]||commandFilePath;if(commandObj.default&&(commandObj=commandObj.default),importedObj.default?commandObj.data=importedObj.default.data:commandObj.data=importedObj.data,!commandObj.data){process.emitWarning(colors_default.yellow(`Ignoring: Command file ${compactFilePath} does not export "data".`));continue}if(!commandObj.data.name){process.emitWarning(colors_default.yellow(`Ignoring: Command file ${compactFilePath} does not export "data.name".`));continue}if(!commandObj.run){process.emitWarning(colors_default.yellow(`Ignoring: Command file ${commandObj.data.name} does not export "run".`));continue}if(typeof commandObj.run!="function"){process.emitWarning(colors_default.yellow(`Ignoring: Command file ${commandObj.data.name} does not export "run" as a function.`));continue}commandObj.filePath=commandFilePath;let commandCategory=commandFilePath.split(this.#data.commandsPath)[1]?.replace(/\\\\|\\/g,"/").split("/")[1]||null;commandCategory&&allowedExtensions.test(commandCategory)?commandObj.category=null:commandObj.category=commandCategory,this.#data.commands.push(commandObj)}}#buildBuiltInValidations(){for(let builtInValidationFunction of validations_default)this.#data.builtInValidations.push(builtInValidationFunction)}handleCommands(){let areHooksEnabled=this.#data.enableHooks;this.#data.client.on("interactionCreate",async interaction=>{if(!interaction.isChatInputCommand()&&!interaction.isContextMenuCommand()&&!interaction.isAutocomplete())return;let isAutocomplete=interaction.isAutocomplete(),targetCommand=this.#data.commands.find(cmd=>cmd.data.name===interaction.commandName);if(!targetCommand)return;let{data,options,run,autocomplete,...rest}=targetCommand;if(isAutocomplete&&!autocomplete)return;let executor=__name(async()=>{let commandObj={data:targetCommand.data,options:targetCommand.options,...rest};if(this.#data.validationHandler){let canRun2=!0;for(let validationFunction of this.#data.validationHandler.validations)if(await validationFunction({interaction,commandObj,client:this.#data.client,handler:this.#data.commandkitInstance})){canRun2=!1;break}if(!canRun2)return}let canRun=!0;if(!this.#data.skipBuiltInValidations){for(let validation of this.#data.builtInValidations)if(validation({targetCommand,interaction,handlerData:this.#data})){canRun=!1;break}}if(!canRun)return;let command=targetCommand[isAutocomplete?"autocomplete":"run"];if(!areHooksEnabled){let context={interaction,client:this.#data.client,handler:this.#data.commandkitInstance};return await command(context)}return command()},"executor");return this.context?this.context.run({command:targetCommand.data,interaction},executor):executor()})}get commands(){return this.#data.commands}async reloadCommands(type){if(!this.#data.commandsPath)throw new Error(colors_default.red('Cannot reload commands as "commandsPath" was not provided when instantiating CommandKit.'));this.#data.commands=[],await this.#buildCommands(),this.#data.bulkRegister?await loadCommandsWithRest({client:this.#data.client,devGuildIds:this.#data.devGuildIds,commands:this.#data.commands,reloading:!0,type}):await registerCommands({client:this.#data.client,devGuildIds:this.#data.devGuildIds,commands:this.#data.commands,reloading:!0,type})}};var EventHandler=class{static{__name(this,"EventHandler")}#data;constructor({...options}){this.#data={...options,events:[]}}async init(){await this.#buildEvents(),this.#registerEvents()}async#buildEvents(){let eventFolderPaths=await getFolderPaths(this.#data.eventsPath);for(let eventFolderPath of eventFolderPaths){let eventName=eventFolderPath.replace(/\\\\|\\/g,"/").split("/").pop(),allowedExtensions=/\.(js|mjs|cjs|ts)$/i,eventFilePaths=(await getFilePaths(eventFolderPath,!0)).filter(path3=>allowedExtensions.test(path3)),eventObj={name:eventName,functions:[]};this.#data.events.push(eventObj);for(let eventFilePath of eventFilePaths){let importedFunction=(await import(`${toFileURL(eventFilePath)}?t=${Date.now()}`)).default,eventFunction=clone(importedFunction);typeof module<"u"&&typeof require<"u"&&delete require.cache[require.resolve(eventFilePath)],eventFunction?.default&&(eventFunction=eventFunction.default);let compactFilePath=eventFilePath.split(process.cwd())[1]||eventFilePath;if(typeof eventFunction!="function"){process.emitWarning(colors_default.yellow(`Ignoring: Event file ${compactFilePath} does not export a function.`));continue}eventObj.functions.push(eventFunction)}}}#registerEvents(){let client=this.#data.client,handler=this.#data.commandKitInstance;for(let eventObj of this.#data.events)client.on(eventObj.name,async(...params)=>{for(let eventFunction of eventObj.functions)if(await eventFunction(...params,client,handler))break})}get events(){return this.#data.events}async reloadEvents(commandHandler){if(!this.#data.eventsPath)throw new Error(colors_default.red('Cannot reload events as "eventsPath" was not provided when instantiating CommandKit.'));this.#data.events=[],await this.#buildEvents(),this.#data.client.removeAllListeners(),this.#registerEvents(),commandHandler?.handleCommands()}};var ValidationHandler=class{static{__name(this,"ValidationHandler")}#data;constructor({...options}){this.#data={...options,validations:[]}}async init(){this.#data.validations=await this.#buildValidations()}async#buildValidations(){let allowedExtensions=/\.(js|mjs|cjs|ts)$/i,validationFilePaths=(await getFilePaths(this.#data.validationsPath,!0)).filter(path3=>allowedExtensions.test(path3)),validationFunctions=[];for(let validationFilePath of validationFilePaths){let importedFunction=(await import(`${toFileURL(validationFilePath)}?t=${Date.now()}`)).default,validationFunction=clone(importedFunction);typeof module<"u"&&typeof require<"u"&&delete require.cache[require.resolve(validationFilePath)],validationFunction?.default&&(validationFunction=validationFunction.default);let compactFilePath=validationFilePath.split(process.cwd())[1]||validationFilePath;if(typeof validationFunction!="function"){process.emitWarning(colors_default.yellow(`Ignoring: Validation file ${compactFilePath} does not export a function.`));continue}validationFunctions.push(validationFunction)}return validationFunctions}get validations(){return this.#data.validations}async reloadValidations(){if(!this.#data.validationsPath)throw new Error(colors_default.red('Cannot reload validations as "validationsPath" was not provided when instantiating CommandKit.'));let newValidations=await this.#buildValidations();this.#data.validations=newValidations}};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,enableHooks:this.#data.experimental?.hooks??!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||[]}};0&&(module.exports={CommandKit});
11
+ //# sourceMappingURL=CommandKit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/CommandKit.ts","../src/utils/resolve-file-url.ts","../src/utils/get-paths.ts","../src/utils/clone.ts","../src/utils/colors.ts","../src/handlers/command-handler/functions/loadCommandsWithRest.ts","../src/handlers/command-handler/utils/areSlashCommandsDifferent.ts","../src/handlers/command-handler/functions/registerCommands.ts","../src/handlers/command-handler/validations/devOnly.ts","../src/handlers/command-handler/validations/permissions.ts","../src/handlers/command-handler/validations/index.ts","../src/handlers/command-handler/CommandHandler.ts","../src/handlers/event-handler/EventHandler.ts","../src/handlers/validation-handler/ValidationHandler.ts"],"sourcesContent":["import type {\n CommandKitData,\n CommandKitOptions,\n ReloadOptions,\n} from './typings';\nimport type { CommandObject } from './types';\n\nimport { CommandHandler, EventHandler, ValidationHandler } from './handlers';\n\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.js.org/docs/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 enableHooks: this.#data.experimental?.hooks ?? 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","import path from 'path';\n\n/**\n * Convert a local file path to a file URL.\n * @param filePath - The local file's path.\n * @returns - The converted file URL.\n */\nexport function toFileURL(filePath: string) {\n const resolvedPath = path.resolve(filePath);\n return 'file://' + resolvedPath.replace(/\\\\\\\\|\\\\/g, '/');\n}\n","import path from 'path';\nimport fs from 'fs/promises';\n\nexport async function getFilePaths(\n directory: string,\n nesting?: boolean,\n): Promise<string[]> {\n let filePaths: string[] = [];\n\n if (!directory) return filePaths;\n\n const files = await fs.readdir(directory, { withFileTypes: true });\n\n for (const file of files) {\n const filePath = path.join(directory, file.name);\n\n if (file.isFile()) {\n filePaths.push(filePath);\n }\n\n if (nesting && file.isDirectory()) {\n filePaths = [...filePaths, ...(await getFilePaths(filePath, true))];\n }\n }\n\n return filePaths;\n}\n\nexport async function getFolderPaths(\n directory: string,\n nesting?: boolean,\n): Promise<string[]> {\n let folderPaths: string[] = [];\n\n if (!directory) return folderPaths;\n\n const folders = await fs.readdir(directory, { withFileTypes: true });\n\n for (const folder of folders) {\n const folderPath = path.join(directory, folder.name);\n\n if (folder.isDirectory()) {\n folderPaths.push(folderPath);\n\n if (nesting) {\n folderPaths = [\n ...folderPaths,\n ...(await getFolderPaths(folderPath, true)),\n ];\n }\n }\n }\n\n return folderPaths;\n}\n","import rfdc from 'rfdc';\n\nexport const clone = rfdc();\n","const resetColor = '\\x1b[0m';\n\nexport default {\n reset: (text: string) => `${text}${resetColor}`,\n bright: (text: string) => `\\x1b[1m${text}${resetColor}`,\n dim: (text: string) => `\\x1b[2m${text}${resetColor}`,\n underscore: (text: string) => `\\x1b[4m${text}${resetColor}`,\n blink: (text: string) => `\\x1b[5m${text}${resetColor}`,\n reverse: (text: string) => `\\x1b[7m${text}${resetColor}`,\n hidden: (text: string) => `\\x1b[8m${text}${resetColor}`,\n\n black: (text: string) => `\\x1b[30m${text}${resetColor}`,\n red: (text: string) => `\\x1b[31m${text}${resetColor}`,\n green: (text: string) => `\\x1b[32m${text}${resetColor}`,\n yellow: (text: string) => `\\x1b[33m${text}${resetColor}`,\n blue: (text: string) => `\\x1b[34m${text}${resetColor}`,\n magenta: (text: string) => `\\x1b[35m${text}${resetColor}`,\n cyan: (text: string) => `\\x1b[36m${text}${resetColor}`,\n white: (text: string) => `\\x1b[37m${text}${resetColor}`,\n\n bgBlack: (text: string) => `\\x1b[40m${text}${resetColor}`,\n bgRed: (text: string) => `\\x1b[41m${text}${resetColor}`,\n bgGreen: (text: string) => `\\x1b[42m${text}${resetColor}`,\n bgYellow: (text: string) => `\\x1b[43m${text}${resetColor}`,\n bgBlue: (text: string) => `\\x1b[44m${text}${resetColor}`,\n bgMagenta: (text: string) => `\\x1b[45m${text}${resetColor}`,\n bgCyan: (text: string) => `\\x1b[46m${text}${resetColor}`,\n bgWhite: (text: string) => `\\x1b[47m${text}${resetColor}`,\n};\n","import type { ApplicationCommandDataResolvable, Client } from 'discord.js';\nimport type { CommandFileObject, ReloadOptions } from '../../../typings';\n\nimport colors from '../../../utils/colors';\n\ntype LoadCommandsWithRestProps = {\n /**\n * The main client.\n */\n client: Client;\n\n /**\n * An array of command objects.\n */\n commands: CommandFileObject[];\n\n /**\n * An array of developer guild IDs.\n */\n devGuildIds: string[];\n\n /**\n * A boolean indicating whether these commands are reloading.\n */\n reloading?: boolean;\n\n /**\n * A type for reloading the commands (if this is reloading).\n */\n type?: ReloadOptions;\n};\n\n/**\n * Use REST to load commands.\n * @param props - Options for loading commands.\n */\nexport default async function loadCommandsWithRest(\n props: LoadCommandsWithRestProps,\n) {\n if (props.reloading) {\n if (props.client.isReady()) {\n await handleLoading(\n props.client,\n props.commands,\n props.devGuildIds,\n props.reloading,\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 handleLoading(\n c,\n props.commands,\n props.devGuildIds,\n props.reloading,\n props.type,\n );\n });\n }\n}\n\n/**\n * Handles loading commands.\n * @param client - The discord.js client instance.\n * @param commands - An array of command file objects.\n * @param devGuildIds - An array of developer guild IDs.\n * @param reloading - A boolean indicating whether this is reloading.\n * @param type - A type for reloading the commands (if this is reloading).\n */\nasync function handleLoading(\n client: Client<true>,\n commands: CommandFileObject[],\n devGuildIds: string[],\n reloading?: boolean,\n type?: ReloadOptions,\n) {\n commands = commands.filter((cmd) => !cmd.options?.deleted);\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 loadDevCommands(client, devOnlyCommands, devGuildIds, reloading);\n } else if (type === 'global') {\n await loadGlobalCommands(client, globalCommands, reloading);\n } else {\n await loadDevCommands(client, devOnlyCommands, devGuildIds, reloading);\n await loadGlobalCommands(client, globalCommands, reloading);\n }\n}\n\n/**\n * Load commands globally.\n * @param client - The discord.js client instance.\n * @param commands - An array of command file objects.\n * @param reloading - A boolean indicating whether the commands are reloading.\n */\nasync function loadGlobalCommands(\n client: Client<true>,\n commands: CommandFileObject[],\n reloading?: boolean,\n) {\n const requestBody = commands.map((cmd) => cmd.data);\n\n await client.application.commands\n .set(requestBody as ApplicationCommandDataResolvable[])\n .catch((error) => {\n throw new Error(\n colors.red(\n `Error ${\n reloading ? 'reloading' : 'loading'\n } global application commands.\\n`,\n ),\n error,\n );\n });\n\n console.log(\n colors.green(\n `${reloading ? 'Reloaded' : 'Loaded'} ${\n requestBody.length\n } global commands.`,\n ),\n );\n}\n\n/**\n * Load commands for dev guilds.\n * @param client - The discord.js client instance.\n * @param commands - An array of command file objects.\n * @param guildIds - An array of developer guild IDs.\n * @param reloading - A boolean indicating whether the commands are reloading.\n */\nasync function loadDevCommands(\n client: Client<true>,\n commands: CommandFileObject[],\n guildIds: string[],\n reloading?: boolean,\n) {\n const requestBody = commands.map((cmd) => cmd.data);\n\n for (const guildId of guildIds) {\n const targetGuild =\n client.guilds.cache.get(guildId) || (await client.guilds.fetch(guildId));\n\n if (!targetGuild) {\n process.emitWarning(\n `Cannot ${\n reloading ? 'reload' : 'load'\n } commands in guild \"${guildId}\" - guild doesn't exist or client isn't part of the guild.`,\n );\n\n continue;\n }\n\n await targetGuild.commands\n .set(requestBody as ApplicationCommandDataResolvable[])\n .catch((error) => {\n throw new Error(\n colors.red(\n `Error ${\n reloading ? 'reloading' : 'loading'\n } developer application commands in guild \"${\n targetGuild?.name || guildId\n }\".\\n`,\n ),\n error,\n );\n });\n\n console.log(\n colors.green(\n `${reloading ? 'Reloaded' : 'Loaded'} ${\n requestBody.length\n } developer commands in guild \"${targetGuild.name}\".`,\n ),\n );\n }\n}\n","/**\n * Test if two slash commands are different.\n * @param appCommand - The application command.\n * @param localCommand - The local command.\n * @returns A boolean indicating whether these commands are different\n */\nexport default function areSlashCommandsDifferent(\n appCommand: any,\n localCommand: any,\n) {\n if (!appCommand.options) appCommand.options = [];\n if (!localCommand.options) localCommand.options = [];\n\n if (!appCommand.description) appCommand.description = '';\n if (!localCommand.description) localCommand.description = '';\n\n if (\n localCommand.description !== appCommand.description ||\n localCommand.options.length !== appCommand.options.length\n ) {\n return true;\n }\n}\n","import type {\n Guild,\n Client,\n ApplicationCommandData,\n GuildApplicationCommandManager,\n ApplicationCommandDataResolvable,\n} from 'discord.js';\nimport type { CommandFileObject, ReloadOptions } from '../../../typings';\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","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","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","import devOnly from './devOnly';\nimport permissions from './permissions';\n\nexport default [devOnly, permissions];\n","import type {\n CommandHandlerData,\n CommandHandlerOptions,\n CommandKitInteraction,\n} from './typings';\nimport type { CommandFileObject, ReloadOptions } from '../../typings';\n\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { getFilePaths } from '../../utils/get-paths';\nimport { clone } from '../../utils/clone';\n\nimport loadCommandsWithRest from './functions/loadCommandsWithRest';\nimport registerCommands from './functions/registerCommands';\nimport builtInValidationsFunctions from './validations';\nimport colors from '../../utils/colors';\nimport { AsyncLocalStorage } from 'async_hooks';\nimport type { CommandData } from '../../types';\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 context: AsyncLocalStorage<hCommandContext> | null = null;\n\n constructor({ ...options }: CommandHandlerOptions) {\n this.#data = {\n ...options,\n builtInValidations: [],\n commands: [],\n };\n }\n\n async init() {\n if (this.#data.enableHooks && !this.context) {\n this.context = new AsyncLocalStorage();\n }\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 const areHooksEnabled = this.#data.enableHooks;\n\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 // if hooks are not enabled, pass the context to the command via its arguments\n if (!areHooksEnabled) {\n const context = {\n interaction,\n client: this.#data.client,\n handler: this.#data.commandkitInstance,\n };\n return await command(context);\n }\n\n // @ts-expect-error - context data is not passed when hooks are enabled\n return command();\n };\n\n if (this.context)\n return this.context.run(\n {\n command: targetCommand.data,\n interaction,\n },\n executor,\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","import type { EventHandlerOptions, EventHandlerData } from './typings';\nimport type { CommandHandler } from '../command-handler/CommandHandler';\nimport { getFilePaths, getFolderPaths } from '../../utils/get-paths';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { clone } from '../../utils/clone';\nimport colors from '../../utils/colors';\n\n/**\n * A handler for client events.\n */\nexport class EventHandler {\n #data: EventHandlerData;\n\n constructor({ ...options }: EventHandlerOptions) {\n this.#data = {\n ...options,\n events: [],\n };\n }\n\n async init() {\n await this.#buildEvents();\n this.#registerEvents();\n }\n\n async #buildEvents() {\n const eventFolderPaths = await getFolderPaths(this.#data.eventsPath);\n\n for (const eventFolderPath of eventFolderPaths) {\n const eventName = eventFolderPath\n .replace(/\\\\\\\\|\\\\/g, '/')\n .split('/')\n .pop() as string;\n\n const allowedExtensions = /\\.(js|mjs|cjs|ts)$/i;\n const eventPaths = await getFilePaths(eventFolderPath, true);\n\n const eventFilePaths = eventPaths.filter((path) =>\n allowedExtensions.test(path),\n );\n\n const eventObj = {\n name: eventName,\n functions: [] as Function[],\n };\n\n this.#data.events.push(eventObj);\n\n for (const eventFilePath of eventFilePaths) {\n const modulePath = toFileURL(eventFilePath);\n\n let importedFunction = (await import(`${modulePath}?t=${Date.now()}`))\n .default;\n let eventFunction = 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(eventFilePath)];\n }\n\n if (eventFunction?.default) {\n eventFunction = eventFunction.default;\n }\n\n const compactFilePath =\n eventFilePath.split(process.cwd())[1] || eventFilePath;\n\n if (typeof eventFunction !== 'function') {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Event file ${compactFilePath} does not export a function.`,\n ),\n );\n continue;\n }\n\n eventObj.functions.push(eventFunction);\n }\n }\n }\n\n #registerEvents() {\n const client = this.#data.client;\n const handler = this.#data.commandKitInstance;\n\n for (const eventObj of this.#data.events) {\n client.on(eventObj.name, async (...params) => {\n for (const eventFunction of eventObj.functions) {\n const stopEventLoop = await eventFunction(...params, client, handler);\n\n if (stopEventLoop) {\n break;\n }\n }\n });\n }\n }\n\n get events() {\n return this.#data.events;\n }\n\n async reloadEvents(commandHandler?: CommandHandler) {\n if (!this.#data.eventsPath) {\n throw new Error(\n colors.red(\n 'Cannot reload events as \"eventsPath\" was not provided when instantiating CommandKit.',\n ),\n );\n }\n\n this.#data.events = [];\n\n await this.#buildEvents();\n\n this.#data.client.removeAllListeners();\n\n this.#registerEvents();\n\n // Re-register \"interactionCreate\" event for application commands.\n commandHandler?.handleCommands();\n }\n}\n","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":"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","names":["path","import_path","fs","path","rfdc","path","canRun","path","path"]}