commandkit 1.2.0-rc.1 → 1.2.0-rc.10

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 (252) hide show
  1. package/README.md +4 -12
  2. package/dist/{ActionRow-CmTHbo2t.js → ActionRow-CbdGFWMT.js} +3 -2
  3. package/dist/{ActionRow-CmTHbo2t.js.map → ActionRow-CbdGFWMT.js.map} +1 -1
  4. package/dist/{CommandKitEventsChannel-Bgw0XCOl.js → CommandKitEventsChannel-BtRzr3Tz.js} +3 -2
  5. package/dist/{CommandKitEventsChannel-Bgw0XCOl.js.map → CommandKitEventsChannel-BtRzr3Tz.js.map} +1 -1
  6. package/dist/{CommandsRouter-Ci1Pe8Vd.js → CommandsRouter-Dmzw-ikm.js} +18 -13
  7. package/dist/{CommandsRouter-Ci1Pe8Vd.js.map → CommandsRouter-Dmzw-ikm.js.map} +1 -1
  8. package/dist/{CompilerPlugin-CjoZAAR8.js → CompilerPlugin-M8r3yNAl.js} +2 -2
  9. package/dist/{CompilerPlugin-CjoZAAR8.js.map → CompilerPlugin-M8r3yNAl.js.map} +1 -1
  10. package/dist/{DefaultLogger-Cy55-uPl.d.ts → DefaultLogger-XCOl5nLd.d.ts} +19 -12
  11. package/dist/{EventInterceptor-CQ4PBpBJ.js → EventInterceptor-CQEXyUTp.js} +3 -5
  12. package/dist/{EventInterceptor-CQ4PBpBJ.js.map → EventInterceptor-CQEXyUTp.js.map} +1 -1
  13. package/dist/{EventWorkerContext-DJUi1W3T.d.ts → EventWorkerContext-DNWfsE1t.d.ts} +2 -2
  14. package/dist/{EventWorkerContext-CSlD9rbx.js → EventWorkerContext-Dq29tieI.js} +3 -2
  15. package/dist/{EventWorkerContext-CSlD9rbx.js.map → EventWorkerContext-Dq29tieI.js.map} +1 -1
  16. package/dist/{EventsRouter-C_J0M3uO.js → EventsRouter-3Gygh-km.js} +9 -5
  17. package/dist/{EventsRouter-C_J0M3uO.js.map → EventsRouter-3Gygh-km.js.map} +1 -1
  18. package/dist/ILogger-BW8GM-YZ.d.ts +64 -0
  19. package/dist/{Logger-iSjA-DWN.d.ts → Logger-DyfkPk7u.d.ts} +2 -2
  20. package/dist/{MessageCommandParser-ROLibZPX.d.ts → MessageCommandParser-BsGMOTDo.d.ts} +3 -3
  21. package/dist/{MessageCommandParser-B_BEQ3p8.js → MessageCommandParser-Dl0xxtdr.js} +9 -4
  22. package/dist/MessageCommandParser-Dl0xxtdr.js.map +1 -0
  23. package/dist/{PluginCommon-Di1xIa8d.js → PluginCommon-Cvl5yYM_.js} +3 -2
  24. package/dist/{PluginCommon-Di1xIa8d.js.map → PluginCommon-Cvl5yYM_.js.map} +1 -1
  25. package/dist/{RuntimePlugin-CBgBLXTG.js → RuntimePlugin-BUecuBIU.js} +3 -2
  26. package/dist/RuntimePlugin-BUecuBIU.js.map +1 -0
  27. package/dist/analytics/analytics-engine.d.ts +6 -6
  28. package/dist/analytics/analytics-engine.js +29 -28
  29. package/dist/analytics/analytics-provider.d.ts +6 -6
  30. package/dist/analytics/constants.js +1 -1
  31. package/dist/analytics/utils.js +29 -28
  32. package/dist/{analytics-engine-vA4MaJYx.d.ts → analytics-engine-jVeSoxEk.d.ts} +113 -32
  33. package/dist/app/commands/AppCommandRunner.d.ts +6 -6
  34. package/dist/app/commands/AppCommandRunner.js +29 -28
  35. package/dist/app/commands/Context.d.ts +6 -6
  36. package/dist/app/commands/Context.js +29 -28
  37. package/dist/app/commands/MessageCommandParser.d.ts +1 -1
  38. package/dist/app/commands/MessageCommandParser.js +2 -2
  39. package/dist/app/commands/helpers.js +1 -1
  40. package/dist/app/events/EventWorkerContext.d.ts +7 -7
  41. package/dist/app/events/EventWorkerContext.js +1 -1
  42. package/dist/app/handlers/AppCommandHandler.d.ts +6 -6
  43. package/dist/app/handlers/AppCommandHandler.js +29 -28
  44. package/dist/app/handlers/AppEventsHandler.d.ts +6 -6
  45. package/dist/app/handlers/AppEventsHandler.js +29 -28
  46. package/dist/app/index.d.ts +7 -7
  47. package/dist/app/index.js +31 -31
  48. package/dist/app/interrupt/signals.d.ts +2 -2
  49. package/dist/app/interrupt/signals.js +5 -5
  50. package/dist/app/middlewares/permissions.d.ts +42 -0
  51. package/dist/app/middlewares/permissions.js +39 -0
  52. package/dist/app/register/CommandRegistrar.d.ts +6 -6
  53. package/dist/app/register/CommandRegistrar.js +29 -28
  54. package/dist/app/router/CommandsRouter.js +1 -1
  55. package/dist/app/router/EventsRouter.js +1 -1
  56. package/dist/app/router/index.d.ts +1 -1
  57. package/dist/app/router/index.js +3 -3
  58. package/dist/{app-process-CjMovpoZ.js → app-process-cj2vF12T.js} +8 -5
  59. package/dist/{app-process-CjMovpoZ.js.map → app-process-cj2vF12T.js.map} +1 -1
  60. package/dist/{build-DXl8uEv4.js → build-DB_aX5xt.js} +18 -14
  61. package/dist/build-DB_aX5xt.js.map +1 -0
  62. package/dist/cli/app-process.js +4 -4
  63. package/dist/cli/build.d.ts +6 -6
  64. package/dist/cli/build.js +31 -30
  65. package/dist/cli/common.d.ts +13 -7
  66. package/dist/cli/common.js +4 -3
  67. package/dist/cli/development.js +45 -44
  68. package/dist/cli/development.js.map +1 -1
  69. package/dist/cli/generators.js +42 -11
  70. package/dist/cli/generators.js.map +1 -1
  71. package/dist/cli/information.js +14 -19
  72. package/dist/cli/information.js.map +1 -1
  73. package/dist/cli/init.js +30 -29
  74. package/dist/cli/production.js +34 -32
  75. package/dist/cli/production.js.map +1 -1
  76. package/dist/cli/type-checker.js +4 -4
  77. package/dist/{colors-Cd4Oz-r-.js → colors-DL3ucTiT.js} +3 -2
  78. package/dist/{colors-Cd4Oz-r-.js.map → colors-DL3ucTiT.js.map} +1 -1
  79. package/dist/{commandkit-DMEW0kJg.js → commandkit-lhbfAyX9.js} +523 -353
  80. package/dist/commandkit-lhbfAyX9.js.map +1 -0
  81. package/dist/commandkit.d.ts +6 -6
  82. package/dist/commandkit.js +29 -28
  83. package/dist/{common-DNADUU3_.js → common-CrqwC-sx.js} +33 -18
  84. package/dist/common-CrqwC-sx.js.map +1 -0
  85. package/dist/common-vnMIelAE.js.map +1 -1
  86. package/dist/components/common/EventInterceptor.js +1 -1
  87. package/dist/components/index.d.ts +2 -2
  88. package/dist/components/index.js +29 -28
  89. package/dist/components/v1/action-row/ActionRow.js +1 -1
  90. package/dist/components/v1/button/Button.js +29 -28
  91. package/dist/components/v1/button/ButtonKit.js +29 -28
  92. package/dist/components/v1/modal/Modal.js +29 -28
  93. package/dist/components/v1/modal/ModalKit.js +29 -28
  94. package/dist/components/v1/select-menu/ChannelSelectMenuKit.js +29 -28
  95. package/dist/components/v1/select-menu/MentionableSelectMenuKit.js +29 -28
  96. package/dist/components/v1/select-menu/RoleSelectMenuKit.js +29 -28
  97. package/dist/components/v1/select-menu/SelectMenu.js +29 -28
  98. package/dist/components/v1/select-menu/StringSelectMenuKit.js +29 -28
  99. package/dist/components/v1/select-menu/UserSelectMenuKit.js +29 -28
  100. package/dist/components/v2/container.js +1 -1
  101. package/dist/components/v2/file.js +1 -1
  102. package/dist/components/v2/index.d.ts +1 -1
  103. package/dist/components/v2/index.js +6 -6
  104. package/dist/components/v2/media-gallery.js +1 -1
  105. package/dist/components/v2/section.js +1 -1
  106. package/dist/components/v2/separator.js +1 -1
  107. package/dist/components/v2/text-display.js +1 -1
  108. package/dist/config/config.d.ts +7 -7
  109. package/dist/config/config.js +29 -28
  110. package/dist/config/default.d.ts +6 -6
  111. package/dist/config/default.js +29 -28
  112. package/dist/config/loader.d.ts +6 -6
  113. package/dist/config/loader.js +29 -28
  114. package/dist/config/types.d.ts +6 -6
  115. package/dist/config/utils.d.ts +6 -6
  116. package/dist/config/utils.js +1 -1
  117. package/dist/{config-CcWJ-vz5.d.ts → config-YAQdMBqh.d.ts} +2 -2
  118. package/dist/constants-4oxxvaJA.js.map +1 -1
  119. package/dist/constants-B5_Ta7PR.js.map +1 -1
  120. package/dist/{constants-CUND8XkG.js → constants-BOOGN85p.js} +3 -2
  121. package/dist/{constants-CUND8XkG.js.map → constants-BOOGN85p.js.map} +1 -1
  122. package/dist/{constants-DrjIvQd6.d.ts → constants-D8PMA9on.d.ts} +1 -1
  123. package/dist/{container-z621KfH5.js → container-C6GtfAPW.js} +3 -2
  124. package/dist/{container-z621KfH5.js.map → container-C6GtfAPW.js.map} +1 -1
  125. package/dist/context/async-context.d.ts +7 -7
  126. package/dist/context/async-context.js +31 -29
  127. package/dist/context/environment.d.ts +6 -6
  128. package/dist/context/environment.js +29 -28
  129. package/dist/{dotprops-C_4L7RPD.js → dotprops-tnhpnszJ.js} +2 -2
  130. package/dist/{dotprops-C_4L7RPD.js.map → dotprops-tnhpnszJ.js.map} +1 -1
  131. package/dist/element-Bak9llw_.js.map +1 -1
  132. package/dist/env-_68PRRoA.js.map +1 -1
  133. package/dist/error-codes-B4TyW4Ct.d.ts +54 -0
  134. package/dist/{error-codes-C-ViHyu-.js → error-codes-Ds0bnPvT.js} +2 -2
  135. package/dist/error-codes-Ds0bnPvT.js.map +1 -0
  136. package/dist/events/CommandKitEventsChannel.d.ts +6 -6
  137. package/dist/events/CommandKitEventsChannel.js +1 -1
  138. package/dist/{feature-flags-Cxl9JtVG.js → feature-flags-DnnKABHf.js} +11 -16
  139. package/dist/{feature-flags-Cxl9JtVG.js.map → feature-flags-DnnKABHf.js.map} +1 -1
  140. package/dist/{file-DVZC0QXI.js → file-DVOELoNv.js} +3 -2
  141. package/dist/{file-DVZC0QXI.js.map → file-DVOELoNv.js.map} +1 -1
  142. package/dist/flags/FlagProvider.d.ts +6 -6
  143. package/dist/flags/FlagProvider.js.map +1 -1
  144. package/dist/flags/feature-flags.d.ts +6 -6
  145. package/dist/flags/feature-flags.js +30 -29
  146. package/dist/flags/store.d.ts +6 -6
  147. package/dist/flags/store.js +1 -1
  148. package/dist/{helpers-BUlN3lIz.js → helpers-Dl8wW6aO.js} +3 -2
  149. package/dist/{helpers-BUlN3lIz.js.map → helpers-Dl8wW6aO.js.map} +1 -1
  150. package/dist/index-CUPkUUOR.d.ts +1 -0
  151. package/dist/index-Dw5cCt-A.d.ts +1 -0
  152. package/dist/index-E7Wvm5uX.d.ts +1 -0
  153. package/dist/index.d.ts +13 -12
  154. package/dist/index.js +47 -38
  155. package/dist/index.js.map +1 -0
  156. package/dist/{init-DTBFphOg.js → init-CY7OJPF-.js} +11 -8
  157. package/dist/{init-DTBFphOg.js.map → init-CY7OJPF-.js.map} +1 -1
  158. package/dist/kv/constants.d.ts +1 -1
  159. package/dist/kv/dotprops.js +1 -1
  160. package/dist/kv/kv.d.ts +2 -2
  161. package/dist/kv/kv.js +8 -10
  162. package/dist/kv/kv.js.map +1 -1
  163. package/dist/kv/serde.d.ts +2 -2
  164. package/dist/kv/serde.js +1 -1
  165. package/dist/logger/DefaultLogger.d.ts +2 -2
  166. package/dist/logger/DefaultLogger.js +29 -28
  167. package/dist/logger/ILogger.d.ts +1 -1
  168. package/dist/logger/Logger.d.ts +2 -2
  169. package/dist/logger/Logger.js +29 -28
  170. package/dist/logger/NoopLogger.d.ts +41 -11
  171. package/dist/logger/NoopLogger.js +5 -25
  172. package/dist/logger/NoopLogger.js.map +1 -1
  173. package/dist/{media-gallery-CIKypjbJ.js → media-gallery-zDtJ3kxb.js} +3 -2
  174. package/dist/{media-gallery-CIKypjbJ.js.map → media-gallery-zDtJ3kxb.js.map} +1 -1
  175. package/dist/plugins/CompilerPlugin.d.ts +6 -6
  176. package/dist/plugins/CompilerPlugin.js +2 -2
  177. package/dist/plugins/PluginCommon.d.ts +6 -6
  178. package/dist/plugins/PluginCommon.js +1 -1
  179. package/dist/plugins/RuntimePlugin.d.ts +6 -6
  180. package/dist/plugins/RuntimePlugin.js +2 -2
  181. package/dist/plugins/index.d.ts +6 -6
  182. package/dist/plugins/index.js +29 -28
  183. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.d.ts +6 -6
  184. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.js +29 -28
  185. package/dist/plugins/plugin-runtime/CompilerPluginRuntime.d.ts +6 -6
  186. package/dist/plugins/plugin-runtime/CompilerPluginRuntime.js +29 -28
  187. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.d.ts +6 -6
  188. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.js +29 -28
  189. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.d.ts +6 -6
  190. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.js +29 -28
  191. package/dist/plugins/plugin-runtime/runtime.d.ts +6 -6
  192. package/dist/plugins/plugin-runtime/runtime.js +1 -1
  193. package/dist/plugins/types.d.ts +6 -6
  194. package/dist/{resolve-file-url-DHTQj2mU.js → resolve-file-url-ChIyw-Vf.js} +4 -4
  195. package/dist/{resolve-file-url-DHTQj2mU.js.map → resolve-file-url-ChIyw-Vf.js.map} +1 -1
  196. package/dist/{section-CuYr0Inu.js → section-DlvrDoJK.js} +4 -4
  197. package/dist/{section-CuYr0Inu.js.map → section-DlvrDoJK.js.map} +1 -1
  198. package/dist/{separator-DLdWBjSN.js → separator-DL6QH5H1.js} +4 -4
  199. package/dist/{separator-DLdWBjSN.js.map → separator-DL6QH5H1.js.map} +1 -1
  200. package/dist/{serde-BUDI03pX.d.ts → serde-BYaKrsOV.d.ts} +2 -2
  201. package/dist/{serde-CHySNpFr.js → serde-Cc8iUa9J.js} +2 -2
  202. package/dist/{serde-CHySNpFr.js.map → serde-Cc8iUa9J.js.map} +1 -1
  203. package/dist/{signals-DHdYrd-n.js → signals-ChFMD7mB.js} +12 -15
  204. package/dist/signals-ChFMD7mB.js.map +1 -0
  205. package/dist/{signals-BQbEfy3X.d.ts → signals-SHg7J1U_.d.ts} +4 -7
  206. package/dist/{store-CiqLHedg.js → store-CM6pWVZh.js} +3 -2
  207. package/dist/{store-CiqLHedg.js.map → store-CM6pWVZh.js.map} +1 -1
  208. package/dist/{text-display--p2-BoUa.js → text-display-DbMumig_.js} +3 -2
  209. package/dist/{text-display--p2-BoUa.js.map → text-display-DbMumig_.js.map} +1 -1
  210. package/dist/{type-checker-1Iu1jJcy.js → type-checker-ocNSZh0W.js} +7 -5
  211. package/dist/{type-checker-1Iu1jJcy.js.map → type-checker-ocNSZh0W.js.map} +1 -1
  212. package/dist/{types-package-DrnIdWLg.js → types-package-BWArjyBF.js} +7 -4
  213. package/dist/{types-package-DrnIdWLg.js.map → types-package-BWArjyBF.js.map} +1 -1
  214. package/dist/types.d.ts +7 -7
  215. package/dist/utils/colors.js +1 -1
  216. package/dist/utils/dev-hooks.d.ts +6 -6
  217. package/dist/utils/dev-hooks.js +29 -28
  218. package/dist/utils/error-codes.d.ts +2 -54
  219. package/dist/utils/error-codes.js +1 -1
  220. package/dist/utils/resolve-file-url.js +1 -1
  221. package/dist/utils/types-package.js +1 -1
  222. package/dist/utils/useful-stuff/async-queue.js.map +1 -1
  223. package/dist/utils/useful-stuff/mutex.js +1 -2
  224. package/dist/utils/useful-stuff/mutex.js.map +1 -1
  225. package/dist/utils/useful-stuff/ratelimiter.js +2 -4
  226. package/dist/utils/useful-stuff/ratelimiter.js.map +1 -1
  227. package/dist/utils/useful-stuff/semaphore.js +2 -4
  228. package/dist/utils/useful-stuff/semaphore.js.map +1 -1
  229. package/dist/utils/utilities.js +29 -28
  230. package/dist/utils/warn-unstable.js.map +1 -1
  231. package/dist/utils-DCSnVAZ6.js.map +1 -1
  232. package/dist/{utils-BnXM4eKk.js → utils-KsNof0Xz.js} +1 -1
  233. package/dist/{utils-BnXM4eKk.js.map → utils-KsNof0Xz.js.map} +1 -1
  234. package/dist/{version-rfStvlqX.js → version-BCILNeQb.js} +2 -2
  235. package/dist/{version-rfStvlqX.js.map → version-BCILNeQb.js.map} +1 -1
  236. package/dist/version.js +1 -1
  237. package/hooks.cjs +2 -0
  238. package/hooks.d.ts +3 -1
  239. package/package.json +60 -59
  240. package/dist/ILogger-DBGON5wx.d.ts +0 -34
  241. package/dist/MessageCommandParser-B_BEQ3p8.js.map +0 -1
  242. package/dist/RuntimePlugin-CBgBLXTG.js.map +0 -1
  243. package/dist/build-DXl8uEv4.js.map +0 -1
  244. package/dist/commandkit-DMEW0kJg.js.map +0 -1
  245. package/dist/common-DNADUU3_.js.map +0 -1
  246. package/dist/error-codes-C-ViHyu-.js.map +0 -1
  247. package/dist/index-DKcmsWXw.d.ts +0 -1
  248. package/dist/index-DSBMRX9A.d.ts +0 -1
  249. package/dist/index-DdqikUQD.d.ts +0 -1
  250. package/dist/signals-DHdYrd-n.js.map +0 -1
  251. /package/dist/{router-DHnFRADH.js → router-Dn35v30f.js} +0 -0
  252. /package/dist/{runtime-5fxB4uhe.js → runtime-DB9CiPfe.js} +0 -0
package/README.md CHANGED
@@ -1,16 +1,12 @@
1
1
  <div align="center">
2
- <img src="https://raw.githubusercontent.com/underctrl-io/commandkit/main/apps/website/static/img/ckit_logo.svg" width="60%" />
2
+ <img src="https://raw.githubusercontent.com/underctrl-io/commandkit/main/apps/website/static/img/ckit_logo.svg" width="75%" />
3
3
  <br />
4
4
  <a href="https://ctrl.lol/discord"><img src="https://img.shields.io/discord/1055188344188973066?color=5865F2&logo=discord&logoColor=white" alt="support server" /></a>
5
5
  <a href="https://www.npmjs.com/package/commandkit"><img src="https://img.shields.io/npm/v/commandkit?maxAge=3600" alt="npm version" /></a>
6
6
  <a href="https://www.npmjs.com/package/commandkit"><img src="https://img.shields.io/npm/dt/commandkit?maxAge=3600" alt="npm downloads" /></a>
7
7
  </div>
8
8
 
9
- # CommandKit
10
-
11
- CommandKit is a library that makes it easy to handle commands and events in your Discord.js projects.
12
-
13
- > **Supports Discord.js version 14**
9
+ <p align="center">The discord.js meta-framework for building powerful, modular, and extensible Discord bots with ease.</p>
14
10
 
15
11
  ## Features
16
12
 
@@ -31,9 +27,9 @@ CommandKit is a library that makes it easy to handle commands and events in your
31
27
  - Less boilerplate code, more productivity 💪
32
28
  - and much more...
33
29
 
34
- ## Documentation
30
+ ## Getting Started
35
31
 
36
- You can find the full documentation [here](https://commandkit.dev).
32
+ Get started by checking out the [documentation](https://commandkit.dev).
37
33
 
38
34
  ## Installation
39
35
 
@@ -48,10 +44,6 @@ npm create commandkit
48
44
 
49
45
  This will prompt you to enter few details about your project. Once you have entered the details, you can simply run `commandkit dev` to start the bot application.
50
46
 
51
- ## Getting Started
52
-
53
- To get started with CommandKit, you can check out the [quick start guide](https://commandkit.dev/docs/next/guide/installation).
54
-
55
47
  ## Support and Suggestions
56
48
 
57
49
  Submit any queries or suggestions in our [Discord community](https://ctrl.lol/discord).
@@ -1,5 +1,6 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const discord_js = require_chunk.__toESM(require("discord.js"));
2
+ let discord_js = require("discord.js");
3
+ discord_js = require_chunk.__toESM(discord_js);
3
4
 
4
5
  //#region src/components/v1/action-row/ActionRow.ts
5
6
  /**
@@ -22,4 +23,4 @@ Object.defineProperty(exports, 'ActionRow', {
22
23
  return ActionRow;
23
24
  }
24
25
  });
25
- //# sourceMappingURL=ActionRow-CmTHbo2t.js.map
26
+ //# sourceMappingURL=ActionRow-CbdGFWMT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionRow-CmTHbo2t.js","names":[],"sources":["../src/components/v1/action-row/ActionRow.ts"],"sourcesContent":["import { ActionRowBuilder } from 'discord.js';\nimport { AnyCommandKitElement, CommandKitElement } from '../../common/element';\n\n/**\n * The properties for the action row component.\n */\nexport interface ActionRowProps {\n children?: AnyCommandKitElement[] | AnyCommandKitElement;\n}\n\n/**\n * The action row component.\n * @param props The action row properties.\n * @returns The commandkit element.\n * @example <ActionRow><Button label=\"Click me\" style={ButtonStyle.Primary} customId=\"click_me\" /></ActionRow>\n */\nexport function ActionRow(\n props: ActionRowProps,\n): CommandKitElement<'action-row'> {\n const row = new ActionRowBuilder();\n\n if (Array.isArray(props.children)) {\n // @ts-ignore\n row.setComponents(...props.children);\n } else if (props.children) {\n // @ts-ignore\n row.setComponents(props.children);\n }\n\n return row;\n}\n"],"mappings":";;;;;;;;;;AAgBA,SAAgB,UAChB,OACkC;CAChC,MAAM,MAAM,IAAI;AAEhB,KAAI,MAAM,QAAQ,MAAM,UAEtB,KAAI,cAAc,GAAG,MAAM;UAClB,MAAM,SAEf,KAAI,cAAc,MAAM;AAG1B,QAAO;AACT"}
1
+ {"version":3,"file":"ActionRow-CbdGFWMT.js","names":[],"sources":["../src/components/v1/action-row/ActionRow.ts"],"sourcesContent":["import { ActionRowBuilder } from 'discord.js';\nimport { AnyCommandKitElement, CommandKitElement } from '../../common/element';\n\n/**\n * The properties for the action row component.\n */\nexport interface ActionRowProps {\n children?: AnyCommandKitElement[] | AnyCommandKitElement;\n}\n\n/**\n * The action row component.\n * @param props The action row properties.\n * @returns The commandkit element.\n * @example <ActionRow><Button label=\"Click me\" style={ButtonStyle.Primary} customId=\"click_me\" /></ActionRow>\n */\nexport function ActionRow(\n props: ActionRowProps,\n): CommandKitElement<'action-row'> {\n const row = new ActionRowBuilder();\n\n if (Array.isArray(props.children)) {\n // @ts-ignore\n row.setComponents(...props.children);\n } else if (props.children) {\n // @ts-ignore\n row.setComponents(props.children);\n }\n\n return row;\n}\n"],"mappings":";;;;;;;;;;;AAgBA,SAAgB,UAChB,OACkC;CAChC,MAAM,MAAM,IAAI,6BAAkB;AAElC,KAAI,MAAM,QAAQ,MAAM,SAAS,CAE/B,KAAI,cAAc,GAAG,MAAM,SAAS;UAC3B,MAAM,SAEf,KAAI,cAAc,MAAM,SAAS;AAGnC,QAAO"}
@@ -1,5 +1,6 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const node_events = require_chunk.__toESM(require("node:events"));
2
+ let node_events = require("node:events");
3
+ node_events = require_chunk.__toESM(node_events);
3
4
 
4
5
  //#region src/events/CommandKitEventsChannel.ts
5
6
  /**
@@ -84,4 +85,4 @@ Object.defineProperty(exports, 'CommandKitEventsChannel', {
84
85
  return CommandKitEventsChannel;
85
86
  }
86
87
  });
87
- //# sourceMappingURL=CommandKitEventsChannel-Bgw0XCOl.js.map
88
+ //# sourceMappingURL=CommandKitEventsChannel-BtRzr3Tz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandKitEventsChannel-Bgw0XCOl.js","names":[],"sources":["../src/events/CommandKitEventsChannel.ts"],"sourcesContent":["import EventEmitter from 'node:events';\nimport type { CommandKit } from '../commandkit';\nimport type { AsyncFunction, GenericFunction } from '../context/async-context';\n\n/**\n * The function type for event listeners.\n */\nexport type ListenerFunction = GenericFunction | AsyncFunction;\n\n/**\n * Represents a channel for emitting and listening to events in CommandKit.\n * This class provides methods to manage event listeners and emit events\n * within a specific namespace.\n */\nexport class CommandKitEventsChannel {\n private emitter = new EventEmitter();\n\n /**\n * Creates a new instance of CommandKitEventsChannel.\n * @param commandkit The CommandKit instance that this channel belongs to.\n */\n public constructor(public readonly commandkit: CommandKit) {}\n\n /**\n * Creates a namespaced event channel. This allows you to manage events\n * within a specific namespace, preventing conflicts with other event channels.\n * This is useful for organizing events related to different parts of your application.\n * @param namespace The namespace for the event channel.\n * @returns An object containing methods for managing events within the namespace.\n * @example commandkit.events.to('customNamespace').emit('eventName', data);\n */\n public to(namespace: string) {\n return {\n on: this.on.bind(this, namespace),\n off: this.off.bind(this, namespace),\n once: this.once.bind(this, namespace),\n emit: this.emit.bind(this, namespace),\n removeAllListeners: this.removeAllListeners.bind(this, namespace),\n };\n }\n\n /**\n * Register an event listener for a specific event within the namespace.\n * @param namespace The namespace for the event channel.\n * @param event The name of the event to listen for.\n * @param listener The function to call when the event is emitted.\n */\n public on(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.on(`${namespace}:${event}`, listener);\n }\n\n /**\n * Unregister an event listener for a specific event within the namespace.\n * @param namespace The namespace for the event channel.\n * @param event The name of the event to stop listening for.\n * @param listener The function that was registered as the listener.\n */\n public off(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.off(`${namespace}:${event}`, listener);\n }\n\n /**\n * Register an event listener that will be called only once for a specific event\n * within the namespace.\n * @param namespace The namespace for the event channel.\n * @param event The name of the event to listen for.\n * @param listener The function to call when the event is emitted.\n */\n public once(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.once(`${namespace}:${event}`, listener);\n }\n\n /**\n * Emit an event within the specified namespace, calling all registered listeners.\n * @param namespace The namespace for the event channel.\n * @param event The name of the event to emit.\n * @param args The arguments to pass to the listeners.\n * @returns A boolean indicating whether any listeners were called.\n */\n public emit(namespace: string, event: string, ...args: any[]) {\n return this.emitter.emit(`${namespace}:${event}`, ...args);\n }\n\n /**\n * Remove all listeners for a specific event or all events within the namespace.\n * @param namespace The namespace for the event channel.\n * @param event The name of the event to remove listeners for. If not provided, all listeners for all events in the namespace will be removed.\n */\n public removeAllListeners(namespace: string): void;\n public removeAllListeners(namespace: string, event: string): void;\n public removeAllListeners(namespace: string, event?: string): void {\n if (event) {\n this.emitter.removeAllListeners(`${namespace}:${event}`);\n } else {\n this.emitter.removeAllListeners(namespace);\n }\n }\n}\n"],"mappings":";;;;;;;;;AAcA,IAAa,0BAAb,MAAqC;CACnC,AAAQ,UAAU,IAAI;;;;;CAMtB,AAAO,YAAY,AAAgB,YAAwB;EAAxB;CAAyB;;;;;;;;;CAU5D,AAAO,GAAG,WAAmB;AAC3B,SAAO;GACL,IAAI,KAAK,GAAG,KAAK,MAAM;GACvB,KAAK,KAAK,IAAI,KAAK,MAAM;GACzB,MAAM,KAAK,KAAK,KAAK,MAAM;GAC3B,MAAM,KAAK,KAAK,KAAK,MAAM;GAC3B,oBAAoB,KAAK,mBAAmB,KAAK,MAAM;GACxD;CACH;;;;;;;CAQA,AAAO,GAAG,WAAmB,OAAe,UAA4B;AACtE,OAAK,QAAQ,GAAG,GAAG,UAAU,GAAG,SAAS;CAC3C;;;;;;;CAQA,AAAO,IAAI,WAAmB,OAAe,UAA4B;AACvE,OAAK,QAAQ,IAAI,GAAG,UAAU,GAAG,SAAS;CAC5C;;;;;;;;CASA,AAAO,KAAK,WAAmB,OAAe,UAA4B;AACxE,OAAK,QAAQ,KAAK,GAAG,UAAU,GAAG,SAAS;CAC7C;;;;;;;;CASA,AAAO,KAAK,WAAmB,OAAe,GAAG,MAAa;AAC5D,SAAO,KAAK,QAAQ,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG;CACvD;CASA,AAAO,mBAAmB,WAAmB,OAAsB;AACjE,MAAI,MACF,MAAK,QAAQ,mBAAmB,GAAG,UAAU,GAAG;MAEhD,MAAK,QAAQ,mBAAmB;CAEpC;AACF"}
1
+ {"version":3,"file":"CommandKitEventsChannel-BtRzr3Tz.js","names":[],"sources":["../src/events/CommandKitEventsChannel.ts"],"sourcesContent":["import EventEmitter from 'node:events';\nimport type { CommandKit } from '../commandkit';\nimport type { AsyncFunction, GenericFunction } from '../context/async-context';\n\n/**\n * The function type for event listeners.\n */\nexport type ListenerFunction = GenericFunction | AsyncFunction;\n\n/**\n * Represents a channel for emitting and listening to events in CommandKit.\n * This class provides methods to manage event listeners and emit events\n * within a specific namespace.\n */\nexport class CommandKitEventsChannel {\n private emitter = new EventEmitter();\n\n /**\n * Creates a new instance of CommandKitEventsChannel.\n * @param commandkit The CommandKit instance that this channel belongs to.\n */\n public constructor(public readonly commandkit: CommandKit) {}\n\n /**\n * Creates a namespaced event channel. This allows you to manage events\n * within a specific namespace, preventing conflicts with other event channels.\n * This is useful for organizing events related to different parts of your application.\n * @param namespace The namespace for the event channel.\n * @returns An object containing methods for managing events within the namespace.\n * @example commandkit.events.to('customNamespace').emit('eventName', data);\n */\n public to(namespace: string) {\n return {\n on: this.on.bind(this, namespace),\n off: this.off.bind(this, namespace),\n once: this.once.bind(this, namespace),\n emit: this.emit.bind(this, namespace),\n removeAllListeners: this.removeAllListeners.bind(this, namespace),\n };\n }\n\n /**\n * Register an event listener for a specific event within the namespace.\n * @param namespace The namespace for the event channel.\n * @param event The name of the event to listen for.\n * @param listener The function to call when the event is emitted.\n */\n public on(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.on(`${namespace}:${event}`, listener);\n }\n\n /**\n * Unregister an event listener for a specific event within the namespace.\n * @param namespace The namespace for the event channel.\n * @param event The name of the event to stop listening for.\n * @param listener The function that was registered as the listener.\n */\n public off(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.off(`${namespace}:${event}`, listener);\n }\n\n /**\n * Register an event listener that will be called only once for a specific event\n * within the namespace.\n * @param namespace The namespace for the event channel.\n * @param event The name of the event to listen for.\n * @param listener The function to call when the event is emitted.\n */\n public once(namespace: string, event: string, listener: ListenerFunction) {\n this.emitter.once(`${namespace}:${event}`, listener);\n }\n\n /**\n * Emit an event within the specified namespace, calling all registered listeners.\n * @param namespace The namespace for the event channel.\n * @param event The name of the event to emit.\n * @param args The arguments to pass to the listeners.\n * @returns A boolean indicating whether any listeners were called.\n */\n public emit(namespace: string, event: string, ...args: any[]) {\n return this.emitter.emit(`${namespace}:${event}`, ...args);\n }\n\n /**\n * Remove all listeners for a specific event or all events within the namespace.\n * @param namespace The namespace for the event channel.\n * @param event The name of the event to remove listeners for. If not provided, all listeners for all events in the namespace will be removed.\n */\n public removeAllListeners(namespace: string): void;\n public removeAllListeners(namespace: string, event: string): void;\n public removeAllListeners(namespace: string, event?: string): void {\n if (event) {\n this.emitter.removeAllListeners(`${namespace}:${event}`);\n } else {\n this.emitter.removeAllListeners(namespace);\n }\n }\n}\n"],"mappings":";;;;;;;;;;AAcA,IAAa,0BAAb,MAAqC;CACnC,AAAQ,UAAU,IAAI,qBAAc;;;;;CAMpC,AAAO,YAAY,AAAgB,YAAwB;EAAxB;;;;;;;;;;CAUnC,AAAO,GAAG,WAAmB;AAC3B,SAAO;GACL,IAAI,KAAK,GAAG,KAAK,MAAM,UAAU;GACjC,KAAK,KAAK,IAAI,KAAK,MAAM,UAAU;GACnC,MAAM,KAAK,KAAK,KAAK,MAAM,UAAU;GACrC,MAAM,KAAK,KAAK,KAAK,MAAM,UAAU;GACrC,oBAAoB,KAAK,mBAAmB,KAAK,MAAM,UAAU;GAClE;;;;;;;;CASH,AAAO,GAAG,WAAmB,OAAe,UAA4B;AACtE,OAAK,QAAQ,GAAG,GAAG,UAAU,GAAG,SAAS,SAAS;;;;;;;;CASpD,AAAO,IAAI,WAAmB,OAAe,UAA4B;AACvE,OAAK,QAAQ,IAAI,GAAG,UAAU,GAAG,SAAS,SAAS;;;;;;;;;CAUrD,AAAO,KAAK,WAAmB,OAAe,UAA4B;AACxE,OAAK,QAAQ,KAAK,GAAG,UAAU,GAAG,SAAS,SAAS;;;;;;;;;CAUtD,AAAO,KAAK,WAAmB,OAAe,GAAG,MAAa;AAC5D,SAAO,KAAK,QAAQ,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK;;CAU5D,AAAO,mBAAmB,WAAmB,OAAsB;AACjE,MAAI,MACF,MAAK,QAAQ,mBAAmB,GAAG,UAAU,GAAG,QAAQ;MAExD,MAAK,QAAQ,mBAAmB,UAAU"}
@@ -1,8 +1,12 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const discord_js = require_chunk.__toESM(require("discord.js"));
3
- const node_fs = require_chunk.__toESM(require("node:fs"));
4
- const node_path = require_chunk.__toESM(require("node:path"));
5
- const node_fs_promises = require_chunk.__toESM(require("node:fs/promises"));
2
+ let discord_js = require("discord.js");
3
+ discord_js = require_chunk.__toESM(discord_js);
4
+ let node_fs = require("node:fs");
5
+ node_fs = require_chunk.__toESM(node_fs);
6
+ let node_path = require("node:path");
7
+ node_path = require_chunk.__toESM(node_path);
8
+ let node_fs_promises = require("node:fs/promises");
9
+ node_fs_promises = require_chunk.__toESM(node_fs_promises);
6
10
 
7
11
  //#region src/app/router/CommandsRouter.ts
8
12
  /**
@@ -186,12 +190,14 @@ var CommandsRouter = class {
186
190
  applyMiddlewares() {
187
191
  this.commands.forEach((command) => {
188
192
  const commandPath = command.parentPath;
189
- const samePathMiddlewares = Array.from(this.middlewares.values()).filter((middleware) => {
190
- if (middleware.global) return true;
191
- if (middleware.command) return middleware.command === command.name;
192
- return middleware.parentPath === commandPath;
193
- }).map((middleware) => middleware.id);
194
- command.middlewares = Array.from(new Set([...command.middlewares, ...samePathMiddlewares]));
193
+ const allMiddlewares = Array.from(this.middlewares.values());
194
+ const commandSpecificMiddlewares = allMiddlewares.filter((middleware) => middleware.command === command.name).map((middleware) => middleware.id);
195
+ const directorySpecificMiddlewares = allMiddlewares.filter((middleware) => !middleware.global && !middleware.command && middleware.parentPath === commandPath).map((middleware) => middleware.id);
196
+ command.middlewares = [
197
+ ...allMiddlewares.filter((middleware) => middleware.global).map((middleware) => middleware.id),
198
+ ...directorySpecificMiddlewares,
199
+ ...commandSpecificMiddlewares
200
+ ];
195
201
  });
196
202
  }
197
203
  /**
@@ -199,8 +205,7 @@ var CommandsRouter = class {
199
205
  * @internal
200
206
  */
201
207
  replaceEntrypoint(path) {
202
- const normalized = (0, node_path.normalize)(path);
203
- return normalized.replace(this.options.entrypoint, "");
208
+ return (0, node_path.normalize)(path).replace(this.options.entrypoint, "");
204
209
  }
205
210
  };
206
211
 
@@ -211,4 +216,4 @@ Object.defineProperty(exports, 'CommandsRouter', {
211
216
  return CommandsRouter;
212
217
  }
213
218
  });
214
- //# sourceMappingURL=CommandsRouter-Ci1Pe8Vd.js.map
219
+ //# sourceMappingURL=CommandsRouter-Dmzw-ikm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandsRouter-Ci1Pe8Vd.js","names":[],"sources":["../src/app/router/CommandsRouter.ts"],"sourcesContent":["import { Collection } from 'discord.js';\nimport { Dirent, existsSync } from 'node:fs';\nimport { readdir } from 'node:fs/promises';\nimport { basename, extname, join, normalize } from 'node:path';\n\n/**\n * Represents a command with its metadata and middleware associations.\n */\nexport interface Command {\n id: string;\n name: string;\n path: string;\n relativePath: string;\n parentPath: string;\n middlewares: Array<string>;\n category: string | null;\n}\n\n/**\n * Represents a middleware with its metadata and scope.\n */\nexport interface Middleware {\n id: string;\n name: string;\n path: string;\n relativePath: string;\n parentPath: string;\n global: boolean;\n command: string | null;\n}\n\n/**\n * Data structure containing parsed commands and middleware.\n */\nexport interface ParsedCommandData {\n commands: Record<string, Command>;\n middlewares: Record<string, Middleware>;\n}\n\n/**\n * Configuration options for the commands router.\n */\nexport interface CommandsRouterOptions {\n entrypoint: string;\n}\n\n/**\n * @private\n * @internal\n */\nconst MIDDLEWARE_PATTERN = /^\\+middleware\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst COMMAND_MIDDLEWARE_PATTERN =\n /^\\+([^+().][^().]*)\\.middleware\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst GLOBAL_MIDDLEWARE_PATTERN = /^\\+global-middleware\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst COMMAND_PATTERN = /^([^+().][^().]*)\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst CATEGORY_PATTERN = /^\\(.+\\)$/;\n\n/**\n * Handles discovery and parsing of command and middleware files in the filesystem.\n */\nexport class CommandsRouter {\n /**\n * @private\n * @internal\n */\n private commands = new Collection<string, Command>();\n\n /**\n * @private\n * @internal\n */\n private middlewares = new Collection<string, Middleware>();\n\n /**\n * Creates a new CommandsRouter instance.\n * @param options - Configuration options for the router\n */\n public constructor(private readonly options: CommandsRouterOptions) {}\n\n /**\n * Populates the router with existing command and middleware data.\n * @param data - Parsed command data to populate with\n */\n public populate(data: ParsedCommandData) {\n for (const [id, command] of Object.entries(data.commands)) {\n this.commands.set(id, command);\n }\n\n for (const [id, middleware] of Object.entries(data.middlewares)) {\n this.middlewares.set(id, middleware);\n }\n }\n\n /**\n * Checks if the configured entrypoint path exists.\n * @returns True if the path exists\n */\n public isValidPath(): boolean {\n return existsSync(this.options.entrypoint);\n }\n\n /**\n * @private\n * @internal\n */\n private isCommand(name: string): boolean {\n return COMMAND_PATTERN.test(name);\n }\n\n /**\n * @private\n * @internal\n */\n private isMiddleware(name: string): boolean {\n return (\n MIDDLEWARE_PATTERN.test(name) ||\n GLOBAL_MIDDLEWARE_PATTERN.test(name) ||\n COMMAND_MIDDLEWARE_PATTERN.test(name)\n );\n }\n\n /**\n * @private\n * @internal\n */\n private isCategory(name: string): boolean {\n return CATEGORY_PATTERN.test(name);\n }\n\n /**\n * Clears all loaded commands and middleware.\n */\n public clear() {\n this.commands.clear();\n this.middlewares.clear();\n }\n\n /**\n * Scans the filesystem for commands and middleware files.\n * @returns Parsed command data\n */\n public async scan() {\n const entries = await readdir(this.options.entrypoint, {\n withFileTypes: true,\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n const fullPath = join(this.options.entrypoint, entry.name);\n\n if (entry.isDirectory()) {\n const category = this.isCategory(entry.name)\n ? entry.name.slice(1, -1)\n : null;\n\n await this.traverse(fullPath, category);\n } else {\n await this.handle(entry);\n }\n }\n\n await this.applyMiddlewares();\n\n return this.toJSON();\n }\n\n /**\n * Gets the raw command and middleware collections.\n * @returns Object containing commands and middlewares collections\n */\n public getData() {\n return {\n commands: this.commands,\n middlewares: this.middlewares,\n };\n }\n\n /**\n * Converts the loaded data to a JSON-serializable format.\n * @returns Plain object with commands and middlewares\n */\n public toJSON() {\n return {\n commands: Object.fromEntries(this.commands.entries()),\n middlewares: Object.fromEntries(this.middlewares.entries()),\n };\n }\n\n /**\n * @private\n * @internal\n */\n private async traverse(path: string, category: string | null) {\n const entries = await readdir(path, {\n withFileTypes: true,\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n if (entry.isFile()) {\n if (this.isCommand(entry.name) || this.isMiddleware(entry.name)) {\n await this.handle(entry, category);\n }\n } else if (\n entry.isDirectory() &&\n this.isCategory(entry.name) &&\n category\n ) {\n // nested category\n const nestedCategory = this.isCategory(entry.name)\n ? `${category}:${entry.name.slice(1, -1)}`\n : null;\n await this.traverse(join(path, entry.name), nestedCategory);\n }\n\n // TODO: handle subcommands\n }\n }\n\n /**\n * @private\n * @internal\n */\n private async handle(entry: Dirent, category: string | null = null) {\n const name = entry.name;\n const path = join(entry.parentPath, entry.name);\n\n if (this.isCommand(name)) {\n const command: Command = {\n id: crypto.randomUUID(),\n name: basename(path, extname(path)),\n path,\n category,\n parentPath: entry.parentPath,\n relativePath: this.replaceEntrypoint(path),\n middlewares: [],\n };\n\n this.commands.set(command.id, command);\n } else if (this.isMiddleware(name)) {\n const middleware: Middleware = {\n id: crypto.randomUUID(),\n name: basename(path, extname(path)),\n path,\n relativePath: this.replaceEntrypoint(path),\n parentPath: entry.parentPath,\n global: GLOBAL_MIDDLEWARE_PATTERN.test(name),\n command: COMMAND_MIDDLEWARE_PATTERN.test(name)\n ? name.match(COMMAND_MIDDLEWARE_PATTERN)?.[1] || null\n : null,\n };\n\n this.middlewares.set(middleware.id, middleware);\n }\n }\n\n /**\n * @private\n * @internal\n */\n private applyMiddlewares() {\n this.commands.forEach((command) => {\n const commandPath = command.parentPath;\n const samePathMiddlewares = Array.from(this.middlewares.values())\n .filter((middleware) => {\n if (middleware.global) return true;\n if (middleware.command) return middleware.command === command.name;\n return middleware.parentPath === commandPath;\n })\n .map((middleware) => middleware.id);\n\n command.middlewares = Array.from(\n new Set([...command.middlewares, ...samePathMiddlewares]),\n );\n });\n }\n\n /**\n * @private\n * @internal\n */\n private replaceEntrypoint(path: string) {\n const normalized = normalize(path);\n return normalized.replace(this.options.entrypoint, '');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommandsRouter-Dmzw-ikm.js","names":[],"sources":["../src/app/router/CommandsRouter.ts"],"sourcesContent":["import { Collection } from 'discord.js';\nimport { Dirent, existsSync } from 'node:fs';\nimport { readdir } from 'node:fs/promises';\nimport { basename, extname, join, normalize } from 'node:path';\n\n/**\n * Represents a command with its metadata and middleware associations.\n */\nexport interface Command {\n id: string;\n name: string;\n path: string;\n relativePath: string;\n parentPath: string;\n middlewares: Array<string>;\n category: string | null;\n}\n\n/**\n * Represents a middleware with its metadata and scope.\n */\nexport interface Middleware {\n id: string;\n name: string;\n path: string;\n relativePath: string;\n parentPath: string;\n global: boolean;\n command: string | null;\n}\n\n/**\n * Data structure containing parsed commands and middleware.\n */\nexport interface ParsedCommandData {\n commands: Record<string, Command>;\n middlewares: Record<string, Middleware>;\n}\n\n/**\n * Configuration options for the commands router.\n */\nexport interface CommandsRouterOptions {\n entrypoint: string;\n}\n\n/**\n * @private\n * @internal\n */\nconst MIDDLEWARE_PATTERN = /^\\+middleware\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst COMMAND_MIDDLEWARE_PATTERN =\n /^\\+([^+().][^().]*)\\.middleware\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst GLOBAL_MIDDLEWARE_PATTERN = /^\\+global-middleware\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst COMMAND_PATTERN = /^([^+().][^().]*)\\.(m|c)?(j|t)sx?$/;\n\n/**\n * @private\n * @internal\n */\nconst CATEGORY_PATTERN = /^\\(.+\\)$/;\n\n/**\n * Handles discovery and parsing of command and middleware files in the filesystem.\n */\nexport class CommandsRouter {\n /**\n * @private\n * @internal\n */\n private commands = new Collection<string, Command>();\n\n /**\n * @private\n * @internal\n */\n private middlewares = new Collection<string, Middleware>();\n\n /**\n * Creates a new CommandsRouter instance.\n * @param options - Configuration options for the router\n */\n public constructor(private readonly options: CommandsRouterOptions) {}\n\n /**\n * Populates the router with existing command and middleware data.\n * @param data - Parsed command data to populate with\n */\n public populate(data: ParsedCommandData) {\n for (const [id, command] of Object.entries(data.commands)) {\n this.commands.set(id, command);\n }\n\n for (const [id, middleware] of Object.entries(data.middlewares)) {\n this.middlewares.set(id, middleware);\n }\n }\n\n /**\n * Checks if the configured entrypoint path exists.\n * @returns True if the path exists\n */\n public isValidPath(): boolean {\n return existsSync(this.options.entrypoint);\n }\n\n /**\n * @private\n * @internal\n */\n private isCommand(name: string): boolean {\n return COMMAND_PATTERN.test(name);\n }\n\n /**\n * @private\n * @internal\n */\n private isMiddleware(name: string): boolean {\n return (\n MIDDLEWARE_PATTERN.test(name) ||\n GLOBAL_MIDDLEWARE_PATTERN.test(name) ||\n COMMAND_MIDDLEWARE_PATTERN.test(name)\n );\n }\n\n /**\n * @private\n * @internal\n */\n private isCategory(name: string): boolean {\n return CATEGORY_PATTERN.test(name);\n }\n\n /**\n * Clears all loaded commands and middleware.\n */\n public clear() {\n this.commands.clear();\n this.middlewares.clear();\n }\n\n /**\n * Scans the filesystem for commands and middleware files.\n * @returns Parsed command data\n */\n public async scan() {\n const entries = await readdir(this.options.entrypoint, {\n withFileTypes: true,\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n const fullPath = join(this.options.entrypoint, entry.name);\n\n if (entry.isDirectory()) {\n const category = this.isCategory(entry.name)\n ? entry.name.slice(1, -1)\n : null;\n\n await this.traverse(fullPath, category);\n } else {\n await this.handle(entry);\n }\n }\n\n await this.applyMiddlewares();\n\n return this.toJSON();\n }\n\n /**\n * Gets the raw command and middleware collections.\n * @returns Object containing commands and middlewares collections\n */\n public getData() {\n return {\n commands: this.commands,\n middlewares: this.middlewares,\n };\n }\n\n /**\n * Converts the loaded data to a JSON-serializable format.\n * @returns Plain object with commands and middlewares\n */\n public toJSON() {\n return {\n commands: Object.fromEntries(this.commands.entries()),\n middlewares: Object.fromEntries(this.middlewares.entries()),\n };\n }\n\n /**\n * @private\n * @internal\n */\n private async traverse(path: string, category: string | null) {\n const entries = await readdir(path, {\n withFileTypes: true,\n });\n\n for (const entry of entries) {\n // ignore _ prefixed files\n if (entry.name.startsWith('_')) continue;\n\n if (entry.isFile()) {\n if (this.isCommand(entry.name) || this.isMiddleware(entry.name)) {\n await this.handle(entry, category);\n }\n } else if (\n entry.isDirectory() &&\n this.isCategory(entry.name) &&\n category\n ) {\n // nested category\n const nestedCategory = this.isCategory(entry.name)\n ? `${category}:${entry.name.slice(1, -1)}`\n : null;\n await this.traverse(join(path, entry.name), nestedCategory);\n }\n\n // TODO: handle subcommands\n }\n }\n\n /**\n * @private\n * @internal\n */\n private async handle(entry: Dirent, category: string | null = null) {\n const name = entry.name;\n const path = join(entry.parentPath, entry.name);\n\n if (this.isCommand(name)) {\n const command: Command = {\n id: crypto.randomUUID(),\n name: basename(path, extname(path)),\n path,\n category,\n parentPath: entry.parentPath,\n relativePath: this.replaceEntrypoint(path),\n middlewares: [],\n };\n\n this.commands.set(command.id, command);\n } else if (this.isMiddleware(name)) {\n const middleware: Middleware = {\n id: crypto.randomUUID(),\n name: basename(path, extname(path)),\n path,\n relativePath: this.replaceEntrypoint(path),\n parentPath: entry.parentPath,\n global: GLOBAL_MIDDLEWARE_PATTERN.test(name),\n command: COMMAND_MIDDLEWARE_PATTERN.test(name)\n ? name.match(COMMAND_MIDDLEWARE_PATTERN)?.[1] || null\n : null,\n };\n\n this.middlewares.set(middleware.id, middleware);\n }\n }\n\n /**\n * @private\n * @internal\n */\n private applyMiddlewares() {\n this.commands.forEach((command) => {\n const commandPath = command.parentPath;\n const allMiddlewares = Array.from(this.middlewares.values());\n\n const commandSpecificMiddlewares = allMiddlewares\n .filter((middleware) => middleware.command === command.name)\n .map((middleware) => middleware.id);\n\n const directorySpecificMiddlewares = allMiddlewares\n .filter(\n (middleware) =>\n !middleware.global &&\n !middleware.command &&\n middleware.parentPath === commandPath,\n )\n .map((middleware) => middleware.id);\n\n const globalMiddlewares = allMiddlewares\n .filter((middleware) => middleware.global)\n .map((middleware) => middleware.id);\n\n command.middlewares = [\n ...globalMiddlewares,\n ...directorySpecificMiddlewares,\n ...commandSpecificMiddlewares,\n ];\n });\n }\n\n /**\n * @private\n * @internal\n */\n private replaceEntrypoint(path: string) {\n const normalized = normalize(path);\n return normalized.replace(this.options.entrypoint, '');\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const require_PluginCommon = require('./PluginCommon-Di1xIa8d.js');
1
+ const require_PluginCommon = require('./PluginCommon-Cvl5yYM_.js');
2
2
 
3
3
  //#region src/plugins/CompilerPlugin.ts
4
4
  /**
@@ -40,4 +40,4 @@ Object.defineProperty(exports, 'isCompilerPlugin', {
40
40
  return isCompilerPlugin;
41
41
  }
42
42
  });
43
- //# sourceMappingURL=CompilerPlugin-CjoZAAR8.js.map
43
+ //# sourceMappingURL=CompilerPlugin-M8r3yNAl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CompilerPlugin-CjoZAAR8.js","names":[],"sources":["../src/plugins/CompilerPlugin.ts"],"sourcesContent":["import {\n isPlugin,\n PluginCommon,\n PluginOptions,\n PluginType,\n} from './PluginCommon';\nimport { MaybeFalsey } from './types';\nimport { CompilerPluginRuntime } from './plugin-runtime/CompilerPluginRuntime';\n\n/**\n * The parameters for the transformation function of a compiler plugin.\n */\nexport interface PluginTransformParameters {\n /**\n * The code to be transformed.\n */\n code: string;\n /**\n * The filename of the code being transformed.\n */\n id: string;\n}\n\nexport interface TransformedResult {\n /**\n * The transformed code.\n */\n code?: string;\n /**\n * The source map for the transformed code, if applicable.\n */\n map?: string | null;\n}\n\n/**\n * CommandKit plugin that runs at compile time.\n */\nexport abstract class CompilerPlugin<\n T extends PluginOptions = PluginOptions,\n> extends PluginCommon<T, CompilerPluginRuntime> {\n /**\n * The type of the plugin, which is Compiler.\n */\n public readonly type = PluginType.Compiler;\n\n /**\n * Called when transformation is requested to this plugin\n * @param params The parameters for the transformation\n * @returns The transformed result\n */\n public async transform(\n params: PluginTransformParameters,\n ): Promise<MaybeFalsey<TransformedResult>> {\n return null;\n }\n}\n\n/**\n * Type guard to check if the given object is a CompilerPlugin.\n * @param plugin The object to check.\n * @returns Boolean indicating whether the object is a CompilerPlugin.\n */\nexport function isCompilerPlugin(plugin: unknown): plugin is CompilerPlugin {\n return (\n plugin instanceof CompilerPlugin ||\n (isPlugin(plugin) && plugin.type === PluginType.Compiler)\n );\n}\n"],"mappings":";;;;;;AAqCA,IAAsB,iBAAtB,cAEA,kCAAuC;;;;CAIrC,AAAgB,OAAO,gCAAW;;;;;;CAOlC,MAAa,UACb,QAC0C;AACxC,SAAO;CACT;AACF;;;;;;AAOA,SAAgB,iBAAiB,QAA2C;AAC1E,QACE,kBAAkB,kBAClB,8BAAS,WAAW,OAAO,SAAS,gCAAW;AAEnD"}
1
+ {"version":3,"file":"CompilerPlugin-M8r3yNAl.js","names":[],"sources":["../src/plugins/CompilerPlugin.ts"],"sourcesContent":["import {\n isPlugin,\n PluginCommon,\n PluginOptions,\n PluginType,\n} from './PluginCommon';\nimport { MaybeFalsey } from './types';\nimport { CompilerPluginRuntime } from './plugin-runtime/CompilerPluginRuntime';\n\n/**\n * The parameters for the transformation function of a compiler plugin.\n */\nexport interface PluginTransformParameters {\n /**\n * The code to be transformed.\n */\n code: string;\n /**\n * The filename of the code being transformed.\n */\n id: string;\n}\n\nexport interface TransformedResult {\n /**\n * The transformed code.\n */\n code?: string;\n /**\n * The source map for the transformed code, if applicable.\n */\n map?: string | null;\n}\n\n/**\n * CommandKit plugin that runs at compile time.\n */\nexport abstract class CompilerPlugin<\n T extends PluginOptions = PluginOptions,\n> extends PluginCommon<T, CompilerPluginRuntime> {\n /**\n * The type of the plugin, which is Compiler.\n */\n public readonly type = PluginType.Compiler;\n\n /**\n * Called when transformation is requested to this plugin\n * @param params The parameters for the transformation\n * @returns The transformed result\n */\n public async transform(\n params: PluginTransformParameters,\n ): Promise<MaybeFalsey<TransformedResult>> {\n return null;\n }\n}\n\n/**\n * Type guard to check if the given object is a CompilerPlugin.\n * @param plugin The object to check.\n * @returns Boolean indicating whether the object is a CompilerPlugin.\n */\nexport function isCompilerPlugin(plugin: unknown): plugin is CompilerPlugin {\n return (\n plugin instanceof CompilerPlugin ||\n (isPlugin(plugin) && plugin.type === PluginType.Compiler)\n );\n}\n"],"mappings":";;;;;;AAqCA,IAAsB,iBAAtB,cAEA,kCAAuC;;;;CAIrC,AAAgB,OAAO,gCAAW;;;;;;CAOlC,MAAa,UACb,QAC0C;AACxC,SAAO;;;;;;;;AASX,SAAgB,iBAAiB,QAA2C;AAC1E,QACE,kBAAkB,kBAClB,8BAAS,OAAO,IAAI,OAAO,SAAS,gCAAW"}
@@ -1,4 +1,4 @@
1
- import { ILogger } from "./ILogger-DBGON5wx.js";
1
+ import { ILogger } from "./ILogger-BW8GM-YZ.js";
2
2
 
3
3
  //#region src/logger/DefaultLogger.d.ts
4
4
 
@@ -29,32 +29,39 @@ declare class DefaultLogger implements ILogger {
29
29
  private _getLevelLabel;
30
30
  private _getPrefix;
31
31
  private _log;
32
+ private _logTemplate;
32
33
  /**
33
34
  * Logs a debug message.
34
- * @param args The message arguments to log.
35
+ * @param message The message to log.
35
36
  */
36
- debug(...args: any[]): void;
37
+ debug(message: any): void;
38
+ debug(strings: TemplateStringsArray, ...values: any[]): void;
37
39
  /**
38
40
  * Logs an error message.
39
- * @param args The message arguments to log.
41
+ * @param message The error message to log.
40
42
  */
41
- error(...args: any[]): void;
43
+ error(message: any): void;
44
+ error(strings: TemplateStringsArray, ...values: any[]): void;
42
45
  /**
43
46
  * Logs a default message.
44
- * @param args The message arguments to log.
47
+ * @param message The message to log.
45
48
  */
46
- log(...args: any[]): void;
49
+ log(message: any): void;
50
+ log(strings: TemplateStringsArray, ...values: any[]): void;
47
51
  /**
48
52
  * Logs an info message.
49
- * @param args The message arguments to log.
53
+ * @param message The informational message to log.
50
54
  */
51
- info(...args: any[]): void;
55
+ info(message: any): void;
56
+ info(strings: TemplateStringsArray, ...values: any[]): void;
52
57
  /**
53
58
  * Logs a warning message.
54
- * @param args The message arguments to log.
59
+ * @param message The warning message to log.
55
60
  */
56
- warn(...args: any[]): void;
61
+ warn(message: any): void;
62
+ warn(strings: TemplateStringsArray, ...values: any[]): void;
63
+ private _isTemplateStringsArray;
57
64
  }
58
65
  //#endregion
59
66
  export { DefaultLogger };
60
- //# sourceMappingURL=DefaultLogger-Cy55-uPl.d.ts.map
67
+ //# sourceMappingURL=DefaultLogger-XCOl5nLd.d.ts.map
@@ -20,8 +20,7 @@ var EventInterceptor = class {
20
20
  this.cleanupTimer = setInterval(() => {
21
21
  for (const [event, handlers] of this.subscribers) for (const handler of handlers) {
22
22
  const options = Reflect.get(handler, "options");
23
- const isExpired = options.time && Date.now() - options.registeredAt > options.time;
24
- if (isExpired) this.unsubscribe(event, handler, "time");
23
+ if (options.time && Date.now() - options.registeredAt > options.time) this.unsubscribe(event, handler, "time");
25
24
  }
26
25
  }, 6e4).unref();
27
26
  }
@@ -112,8 +111,7 @@ var EventInterceptor = class {
112
111
  const subscribers = this.subscribers.get(event);
113
112
  if (subscribers && subscribers.size > 0) for (const subscriber of subscribers) {
114
113
  const options = Reflect.get(subscriber, "options");
115
- const isExpired = options.time && Date.now() - options.registeredAt > options.time;
116
- if (isExpired) {
114
+ if (options.time && Date.now() - options.registeredAt > options.time) {
117
115
  this.unsubscribe(event, subscriber, "time");
118
116
  continue;
119
117
  }
@@ -141,4 +139,4 @@ Object.defineProperty(exports, 'EventInterceptor', {
141
139
  return EventInterceptor;
142
140
  }
143
141
  });
144
- //# sourceMappingURL=EventInterceptor-CQ4PBpBJ.js.map
142
+ //# sourceMappingURL=EventInterceptor-CQEXyUTp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventInterceptor-CQ4PBpBJ.js","names":[],"sources":["../src/components/common/EventInterceptor.ts"],"sourcesContent":["import { Awaitable, Client, ClientEvents, Events } from 'discord.js';\n\nexport interface EventInterceptorContextData<E extends keyof ClientEvents> {\n /**\n * The filter to use for the collector.\n */\n filter?: (...args: ClientEvents[E]) => Awaitable<boolean>;\n /**\n * The duration (in ms) that the collector should run for.\n */\n time?: number;\n /**\n * If the collector should automatically reset the timer when a button is clicked.\n */\n autoReset?: boolean;\n /**\n * Whether the collector should run only once.\n */\n once?: boolean;\n /**\n * The handler to run when the collector ends.\n */\n onEnd?: (reason: string) => Awaitable<void>;\n /**\n * The handler to run upon an error.\n */\n onError?: EventInterceptorErrorHandler;\n}\n\n/**\n * The error handler for the event interceptor.\n */\nexport type EventInterceptorErrorHandler = (error: Error) => Awaitable<void>;\n\n/**\n * The event interceptor class that allows subscribing to events and handling them with custom logic.\n * It also supports automatic cleanup of expired subscriptions.\n */\nexport class EventInterceptor {\n private subscribers = new Map<\n keyof ClientEvents,\n Set<(...args: any[]) => void>\n >();\n private globalHandlers = new Map<\n keyof ClientEvents,\n (...args: any[]) => void\n >();\n private cleanupTimer: NodeJS.Timeout | null = null;\n\n /**\n * Creates the event interceptor.\n */\n public constructor(public readonly client: Client) {\n this.#cleanupLoop();\n }\n\n #cleanupLoop() {\n if (this.cleanupTimer) clearInterval(this.cleanupTimer);\n\n this.cleanupTimer = setInterval(() => {\n for (const [event, handlers] of this.subscribers) {\n for (const handler of handlers) {\n const options = Reflect.get(\n handler,\n 'options',\n ) as EventInterceptorContextData<keyof ClientEvents> & {\n registeredAt: number;\n };\n\n const isExpired =\n options.time && Date.now() - options.registeredAt > options.time;\n\n if (isExpired) {\n this.unsubscribe(event, handler, 'time');\n }\n }\n }\n }, 60_000).unref();\n }\n\n /**\n * Destroys the event interceptor.\n */\n public destroy(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n\n for (const [event, handlers] of this.subscribers) {\n for (const handler of handlers) {\n this.unsubscribe(event, handler, 'destroy');\n }\n }\n\n this.subscribers.clear();\n this.globalHandlers.clear();\n }\n\n /**\n * Whether the event has subscribers.\n * @param event The event to check.\n */\n public hasSubscribers(event: keyof ClientEvents): boolean {\n return this.subscribers.has(event);\n }\n\n /**\n * Returns the number of subscribers for the event.\n * @param event The event to check.\n */\n public getSubscriberCount(event: keyof ClientEvents): number {\n const handlers = this.subscribers.get(event);\n return handlers?.size ?? 0;\n }\n\n /**\n * Whether the event has global handlers.\n */\n public hasGlobalHandlers(): boolean {\n return this.globalHandlers.size > 0;\n }\n\n /**\n * Returns the number of global handlers.\n */\n public getGlobalHandlersCount(): number {\n return this.subscribers.size;\n }\n\n /**\n * Subscribes to an event.\n * @param event The event to subscribe to.\n * @param listener The listener to call when the event is emitted.\n * @returns A function to unsubscribe from the event.\n */\n public subscribe<Event extends keyof ClientEvents>(\n event: Event,\n listener: (...args: ClientEvents[Event]) => void,\n options?: EventInterceptorContextData<Event>,\n ): () => void {\n if (!this.subscribers.has(event)) {\n this.subscribers.set(event, new Set());\n this.client.on(event, this.createGlobalHandler(event));\n this.client.setMaxListeners(this.client.getMaxListeners() + 1);\n }\n\n options ??= {};\n\n // @ts-ignore\n options.registeredAt = Date.now();\n\n Reflect.set(listener, 'options', options);\n\n this.subscribers.get(event)!.add(listener);\n\n return () => {\n this.unsubscribe(event, listener);\n };\n }\n\n /**\n * Unsubscribes from an event.\n * @param event The event to unsubscribe from.\n */\n public unsubscribe<Event extends keyof ClientEvents>(\n event: Event,\n listener: (...args: ClientEvents[Event]) => void,\n reason?: string,\n ): void {\n const handlers = this.subscribers.get(event);\n if (!handlers) return;\n\n handlers.delete(listener);\n\n if (handlers.size < 1) {\n this.subscribers.delete(event);\n this.client.removeListener(event, this.globalHandlers.get(event)!);\n this.globalHandlers.delete(event);\n this.client.setMaxListeners(\n Math.max(this.client.getMaxListeners() - 1, 0),\n );\n }\n\n Reflect.get(listener, 'options').onEnd?.(reason ?? 'unsubscribe');\n }\n\n /**\n * Creates a global handler for the event.\n * @param event The event to create a global handler for.\n * @returns The global handler.\n */\n private createGlobalHandler<Event extends keyof ClientEvents>(\n event: Event,\n ): (...args: ClientEvents[Event]) => void {\n if (this.globalHandlers.has(event)) {\n return this.globalHandlers.get(event)!;\n }\n\n const handler = async (...args: ClientEvents[Event]) => {\n const subscribers = this.subscribers.get(event);\n if (subscribers && subscribers.size > 0) {\n for (const subscriber of subscribers) {\n const options = Reflect.get(\n subscriber,\n 'options',\n ) as EventInterceptorContextData<Event> & { registeredAt: number };\n\n const isExpired =\n options.time && Date.now() - options.registeredAt > options.time;\n\n if (isExpired) {\n this.unsubscribe(event, subscriber, 'time');\n continue;\n }\n\n if (options.autoReset) {\n options.registeredAt = Date.now();\n }\n\n if (options.filter && !(await options.filter(...args))) {\n continue;\n }\n\n try {\n await subscriber(...args);\n } catch (e) {\n if (options.onError) {\n await options.onError(<Error>e);\n } else {\n throw e;\n }\n } finally {\n if (options.once) {\n this.unsubscribe(event, subscriber, 'once');\n }\n }\n }\n }\n };\n\n this.globalHandlers.set(event, handler);\n\n return handler;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EventInterceptor-CQEXyUTp.js","names":[],"sources":["../src/components/common/EventInterceptor.ts"],"sourcesContent":["import { Awaitable, Client, ClientEvents, Events } from 'discord.js';\n\nexport interface EventInterceptorContextData<E extends keyof ClientEvents> {\n /**\n * The filter to use for the collector.\n */\n filter?: (...args: ClientEvents[E]) => Awaitable<boolean>;\n /**\n * The duration (in ms) that the collector should run for.\n */\n time?: number;\n /**\n * If the collector should automatically reset the timer when a button is clicked.\n */\n autoReset?: boolean;\n /**\n * Whether the collector should run only once.\n */\n once?: boolean;\n /**\n * The handler to run when the collector ends.\n */\n onEnd?: (reason: string) => Awaitable<void>;\n /**\n * The handler to run upon an error.\n */\n onError?: EventInterceptorErrorHandler;\n}\n\n/**\n * The error handler for the event interceptor.\n */\nexport type EventInterceptorErrorHandler = (error: Error) => Awaitable<void>;\n\n/**\n * The event interceptor class that allows subscribing to events and handling them with custom logic.\n * It also supports automatic cleanup of expired subscriptions.\n */\nexport class EventInterceptor {\n private subscribers = new Map<\n keyof ClientEvents,\n Set<(...args: any[]) => void>\n >();\n private globalHandlers = new Map<\n keyof ClientEvents,\n (...args: any[]) => void\n >();\n private cleanupTimer: NodeJS.Timeout | null = null;\n\n /**\n * Creates the event interceptor.\n */\n public constructor(public readonly client: Client) {\n this.#cleanupLoop();\n }\n\n #cleanupLoop() {\n if (this.cleanupTimer) clearInterval(this.cleanupTimer);\n\n this.cleanupTimer = setInterval(() => {\n for (const [event, handlers] of this.subscribers) {\n for (const handler of handlers) {\n const options = Reflect.get(\n handler,\n 'options',\n ) as EventInterceptorContextData<keyof ClientEvents> & {\n registeredAt: number;\n };\n\n const isExpired =\n options.time && Date.now() - options.registeredAt > options.time;\n\n if (isExpired) {\n this.unsubscribe(event, handler, 'time');\n }\n }\n }\n }, 60_000).unref();\n }\n\n /**\n * Destroys the event interceptor.\n */\n public destroy(): void {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n this.cleanupTimer = null;\n }\n\n for (const [event, handlers] of this.subscribers) {\n for (const handler of handlers) {\n this.unsubscribe(event, handler, 'destroy');\n }\n }\n\n this.subscribers.clear();\n this.globalHandlers.clear();\n }\n\n /**\n * Whether the event has subscribers.\n * @param event The event to check.\n */\n public hasSubscribers(event: keyof ClientEvents): boolean {\n return this.subscribers.has(event);\n }\n\n /**\n * Returns the number of subscribers for the event.\n * @param event The event to check.\n */\n public getSubscriberCount(event: keyof ClientEvents): number {\n const handlers = this.subscribers.get(event);\n return handlers?.size ?? 0;\n }\n\n /**\n * Whether the event has global handlers.\n */\n public hasGlobalHandlers(): boolean {\n return this.globalHandlers.size > 0;\n }\n\n /**\n * Returns the number of global handlers.\n */\n public getGlobalHandlersCount(): number {\n return this.subscribers.size;\n }\n\n /**\n * Subscribes to an event.\n * @param event The event to subscribe to.\n * @param listener The listener to call when the event is emitted.\n * @returns A function to unsubscribe from the event.\n */\n public subscribe<Event extends keyof ClientEvents>(\n event: Event,\n listener: (...args: ClientEvents[Event]) => void,\n options?: EventInterceptorContextData<Event>,\n ): () => void {\n if (!this.subscribers.has(event)) {\n this.subscribers.set(event, new Set());\n this.client.on(event, this.createGlobalHandler(event));\n this.client.setMaxListeners(this.client.getMaxListeners() + 1);\n }\n\n options ??= {};\n\n // @ts-ignore\n options.registeredAt = Date.now();\n\n Reflect.set(listener, 'options', options);\n\n this.subscribers.get(event)!.add(listener);\n\n return () => {\n this.unsubscribe(event, listener);\n };\n }\n\n /**\n * Unsubscribes from an event.\n * @param event The event to unsubscribe from.\n */\n public unsubscribe<Event extends keyof ClientEvents>(\n event: Event,\n listener: (...args: ClientEvents[Event]) => void,\n reason?: string,\n ): void {\n const handlers = this.subscribers.get(event);\n if (!handlers) return;\n\n handlers.delete(listener);\n\n if (handlers.size < 1) {\n this.subscribers.delete(event);\n this.client.removeListener(event, this.globalHandlers.get(event)!);\n this.globalHandlers.delete(event);\n this.client.setMaxListeners(\n Math.max(this.client.getMaxListeners() - 1, 0),\n );\n }\n\n Reflect.get(listener, 'options').onEnd?.(reason ?? 'unsubscribe');\n }\n\n /**\n * Creates a global handler for the event.\n * @param event The event to create a global handler for.\n * @returns The global handler.\n */\n private createGlobalHandler<Event extends keyof ClientEvents>(\n event: Event,\n ): (...args: ClientEvents[Event]) => void {\n if (this.globalHandlers.has(event)) {\n return this.globalHandlers.get(event)!;\n }\n\n const handler = async (...args: ClientEvents[Event]) => {\n const subscribers = this.subscribers.get(event);\n if (subscribers && subscribers.size > 0) {\n for (const subscriber of subscribers) {\n const options = Reflect.get(\n subscriber,\n 'options',\n ) as EventInterceptorContextData<Event> & { registeredAt: number };\n\n const isExpired =\n options.time && Date.now() - options.registeredAt > options.time;\n\n if (isExpired) {\n this.unsubscribe(event, subscriber, 'time');\n continue;\n }\n\n if (options.autoReset) {\n options.registeredAt = Date.now();\n }\n\n if (options.filter && !(await options.filter(...args))) {\n continue;\n }\n\n try {\n await subscriber(...args);\n } catch (e) {\n if (options.onError) {\n await options.onError(<Error>e);\n } else {\n throw e;\n }\n } finally {\n if (options.once) {\n this.unsubscribe(event, subscriber, 'once');\n }\n }\n }\n }\n };\n\n this.globalHandlers.set(event, handler);\n\n return handler;\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { CommandKit } from "./analytics-engine-vA4MaJYx.js";
1
+ import { CommandKit } from "./analytics-engine-jVeSoxEk.js";
2
2
  import { ParsedEvent } from "./EventsRouter-BacqK6z3.js";
3
3
  import { AsyncLocalStorage } from "node:async_hooks";
4
4
 
@@ -40,4 +40,4 @@ declare function getEventWorkerContext(): EventWorkerContext;
40
40
  declare function isEventWorkerContext(worker: any): worker is EventWorkerContext;
41
41
  //#endregion
42
42
  export { EventWorkerContext, eventWorkerContext, getEventWorkerContext, isEventWorkerContext, runInEventWorkerContext };
43
- //# sourceMappingURL=EventWorkerContext-DJUi1W3T.d.ts.map
43
+ //# sourceMappingURL=EventWorkerContext-DNWfsE1t.d.ts.map
@@ -1,5 +1,6 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const node_async_hooks = require_chunk.__toESM(require("node:async_hooks"));
2
+ let node_async_hooks = require("node:async_hooks");
3
+ node_async_hooks = require_chunk.__toESM(node_async_hooks);
3
4
 
4
5
  //#region src/app/events/EventWorkerContext.ts
5
6
  /**
@@ -65,4 +66,4 @@ Object.defineProperty(exports, 'runInEventWorkerContext', {
65
66
  return runInEventWorkerContext;
66
67
  }
67
68
  });
68
- //# sourceMappingURL=EventWorkerContext-CSlD9rbx.js.map
69
+ //# sourceMappingURL=EventWorkerContext-Dq29tieI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventWorkerContext-CSlD9rbx.js","names":[],"sources":["../src/app/events/EventWorkerContext.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { ParsedEvent } from '../router';\nimport { CommandKit } from '../../commandkit';\n\n/**\n * Context object containing information about the currently executing event.\n */\nexport interface EventWorkerContext {\n event: string;\n namespace: string | null;\n data: ParsedEvent;\n commandkit: CommandKit;\n arguments: any[];\n variables: Map<string, any>;\n}\n\n/**\n * @private\n * @internal\n */\nconst kEventWorker = Symbol('commandkitEventWorker');\n\n/**\n * Async local storage for event worker context.\n */\nexport const eventWorkerContext = new AsyncLocalStorage<EventWorkerContext>();\n\n/**\n * Runs a callback within an event worker context.\n * @param context - The event worker context\n * @param callback - The callback to execute\n * @returns The result of the callback\n */\nexport function runInEventWorkerContext<T>(\n context: EventWorkerContext,\n callback: () => T,\n): T {\n Reflect.set(context, kEventWorker, true);\n\n return eventWorkerContext.run(context, callback);\n}\n\n/**\n * Gets the current event worker context.\n * @returns The current event worker context\n * @throws Error if no context is found\n */\nexport function getEventWorkerContext(): EventWorkerContext {\n const context = eventWorkerContext.getStore();\n\n if (!context) {\n throw new Error('Event worker context not found');\n }\n\n return context;\n}\n\n/**\n * Type guard to check if an object is an event worker context.\n * @param worker - The object to check\n * @returns True if the object is an event worker context\n */\nexport function isEventWorkerContext(\n worker: any,\n): worker is EventWorkerContext {\n return worker && Reflect.get(worker, kEventWorker) === true;\n}\n"],"mappings":";;;;;;;;AAoBA,MAAM,eAAe,OAAO;;;;AAK5B,MAAa,qBAAqB,IAAI;;;;;;;AAQtC,SAAgB,wBAChB,SACA,UACI;AACF,SAAQ,IAAI,SAAS,cAAc;AAEnC,QAAO,mBAAmB,IAAI,SAAS;AACzC;;;;;;AAOA,SAAgB,wBAA4C;CAC1D,MAAM,UAAU,mBAAmB;AAEnC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM;AAGlB,QAAO;AACT;;;;;;AAOA,SAAgB,qBAChB,QAC+B;AAC7B,QAAO,UAAU,QAAQ,IAAI,QAAQ,kBAAkB;AACzD"}
1
+ {"version":3,"file":"EventWorkerContext-Dq29tieI.js","names":[],"sources":["../src/app/events/EventWorkerContext.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { ParsedEvent } from '../router';\nimport { CommandKit } from '../../commandkit';\n\n/**\n * Context object containing information about the currently executing event.\n */\nexport interface EventWorkerContext {\n event: string;\n namespace: string | null;\n data: ParsedEvent;\n commandkit: CommandKit;\n arguments: any[];\n variables: Map<string, any>;\n}\n\n/**\n * @private\n * @internal\n */\nconst kEventWorker = Symbol('commandkitEventWorker');\n\n/**\n * Async local storage for event worker context.\n */\nexport const eventWorkerContext = new AsyncLocalStorage<EventWorkerContext>();\n\n/**\n * Runs a callback within an event worker context.\n * @param context - The event worker context\n * @param callback - The callback to execute\n * @returns The result of the callback\n */\nexport function runInEventWorkerContext<T>(\n context: EventWorkerContext,\n callback: () => T,\n): T {\n Reflect.set(context, kEventWorker, true);\n\n return eventWorkerContext.run(context, callback);\n}\n\n/**\n * Gets the current event worker context.\n * @returns The current event worker context\n * @throws Error if no context is found\n */\nexport function getEventWorkerContext(): EventWorkerContext {\n const context = eventWorkerContext.getStore();\n\n if (!context) {\n throw new Error('Event worker context not found');\n }\n\n return context;\n}\n\n/**\n * Type guard to check if an object is an event worker context.\n * @param worker - The object to check\n * @returns True if the object is an event worker context\n */\nexport function isEventWorkerContext(\n worker: any,\n): worker is EventWorkerContext {\n return worker && Reflect.get(worker, kEventWorker) === true;\n}\n"],"mappings":";;;;;;;;;AAoBA,MAAM,eAAe,OAAO,wBAAwB;;;;AAKpD,MAAa,qBAAqB,IAAI,oCAAuC;;;;;;;AAQ7E,SAAgB,wBAChB,SACA,UACI;AACF,SAAQ,IAAI,SAAS,cAAc,KAAK;AAExC,QAAO,mBAAmB,IAAI,SAAS,SAAS;;;;;;;AAQlD,SAAgB,wBAA4C;CAC1D,MAAM,UAAU,mBAAmB,UAAU;AAE7C,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,iCAAiC;AAGnD,QAAO;;;;;;;AAQT,SAAgB,qBAChB,QAC+B;AAC7B,QAAO,UAAU,QAAQ,IAAI,QAAQ,aAAa,KAAK"}
@@ -1,8 +1,12 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const discord_js = require_chunk.__toESM(require("discord.js"));
3
- const node_fs = require_chunk.__toESM(require("node:fs"));
4
- const node_path = require_chunk.__toESM(require("node:path"));
5
- const node_fs_promises = require_chunk.__toESM(require("node:fs/promises"));
2
+ let discord_js = require("discord.js");
3
+ discord_js = require_chunk.__toESM(discord_js);
4
+ let node_fs = require("node:fs");
5
+ node_fs = require_chunk.__toESM(node_fs);
6
+ let node_path = require("node:path");
7
+ node_path = require_chunk.__toESM(node_path);
8
+ let node_fs_promises = require("node:fs/promises");
9
+ node_fs_promises = require_chunk.__toESM(node_fs_promises);
6
10
 
7
11
  //#region src/app/router/EventsRouter.ts
8
12
  /**
@@ -130,4 +134,4 @@ Object.defineProperty(exports, 'EventsRouter', {
130
134
  return EventsRouter;
131
135
  }
132
136
  });
133
- //# sourceMappingURL=EventsRouter-C_J0M3uO.js.map
137
+ //# sourceMappingURL=EventsRouter-3Gygh-km.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventsRouter-C_J0M3uO.js","names":[],"sources":["../src/app/router/EventsRouter.ts"],"sourcesContent":["import { Collection } from 'discord.js';\nimport { existsSync } from 'node:fs';\nimport { readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\n\n/**\n * Configuration options for the EventsRouter\n * @interface EventsRouterOptions\n */\nexport interface EventsRouterOptions {\n /** Root directory path where event handlers are located */\n entrypoints: string[];\n}\n\n/**\n * Represents a parsed event with its handlers\n * @interface ParsedEvent\n */\nexport interface ParsedEvent {\n /** Name of the event derived from directory name */\n event: string;\n /** Absolute path to the event directory */\n path: string;\n /** Array of file paths to event listener handlers */\n listeners: string[];\n /** Namespace of the event */\n namespace: string | null;\n}\n\n/** Collection of event names to their parsed metadata */\nexport type EventsTree = Record<string, ParsedEvent>;\n\n/**\n * Router for discovering and managing event handler files in a directory structure.\n * Events are represented by directories, and handlers are files within those directories.\n */\nexport class EventsRouter {\n /** Internal storage of parsed events */\n private events = new Collection<string, ParsedEvent>();\n\n /**\n * Creates a new EventsRouter instance\n * @param options - Configuration options for the router\n * @throws Error if entrypoint is not provided\n */\n public constructor(private options: EventsRouterOptions) {\n if (options.entrypoints) {\n options.entrypoints = Array.from(new Set(options.entrypoints));\n }\n\n if (!options.entrypoints?.length) {\n throw new Error('Entrypoint directory must be provided');\n }\n }\n\n /**\n * Adds new entrypoints to the router\n * @param entrypoints - Array of new entrypoint paths\n */\n public addEntrypoints(entrypoints: string[]) {\n this.options.entrypoints = Array.from(\n new Set([...this.options.entrypoints, ...entrypoints]),\n );\n }\n\n /**\n * Find a parsed event by its name\n * @param event - Name of the event to find\n * @returns Parsed event metadata or null if not found\n */\n public match(event: string): ParsedEvent | null {\n return this.events.get(event) ?? null;\n }\n\n /**\n * Get the entrypoint directory path\n * @returns Entrypoint directory path\n */\n public get entrypoints(): string[] {\n return this.options.entrypoints;\n }\n\n /**\n * Checks if the entrypoint path is valid\n */\n public isValidPath() {\n return this.entrypoints.every((entrypoint) => existsSync(entrypoint));\n }\n\n /**\n * Clear all parsed events\n */\n public clear() {\n this.events.clear();\n }\n\n /**\n * Reload and re-scan the entrypoint directory for events\n * @returns Promise resolving to the updated events tree\n */\n public async reload() {\n this.clear();\n return this.scan();\n }\n\n /**\n * Scan the entrypoint directory for events and their handlers\n * @returns Promise resolving to the events tree\n */\n public async scan(): Promise<EventsTree> {\n for (const entrypoint of this.entrypoints) {\n const dirs = await readdir(entrypoint, { withFileTypes: true });\n\n for (const dir of dirs) {\n if (dir.isDirectory()) {\n const path = join(entrypoint, dir.name);\n await this.scanEvent(dir.name, path, null, [], true);\n }\n }\n }\n\n return Object.fromEntries(this.events);\n }\n\n /**\n * Convert the internal events Collection to a plain object\n * @returns Events tree as a plain object\n */\n public toJSON(): EventsTree {\n return Object.fromEntries(this.events);\n }\n\n /**\n * Recursively scan a directory for event handlers\n * @param event - Name of the event\n * @param path - Path to the event directory\n * @param listeners - Array to collect listener file paths\n * @returns Promise resolving to the parsed event metadata\n */\n private async scanEvent(\n event: string,\n path: string,\n _namespace: string | null = null,\n listeners: string[] = [],\n isRoot = false,\n ): Promise<void> {\n const files = await readdir(path, { withFileTypes: true });\n const isNamespace = isRoot && /^\\(.+\\)$/.test(event);\n\n // if event = (something) pattern then namespace is something\n const namespace = isNamespace ? event.slice(1, -1) : (_namespace ?? null);\n\n files.sort((a, b) => a.name.localeCompare(b.name));\n\n for (const file of files) {\n if (file.name.startsWith('_')) continue;\n\n if (file.isDirectory()) {\n const nextPath = join(path, file.name);\n await this.scanEvent(file.name, nextPath, namespace, listeners);\n continue;\n }\n\n if (file.isFile() && /\\.(m|c)?(j|t)sx?$/.test(file.name)) {\n listeners.push(join(file.parentPath, file.name));\n }\n }\n\n if (!isNamespace) {\n const existing = this.events.get(event);\n\n if (existing) {\n existing.listeners = Array.from(\n new Set([...existing.listeners, ...listeners]),\n );\n\n return;\n }\n\n this.events.set(event, { event, path, listeners, namespace });\n }\n }\n}\n"],"mappings":";;;;;;;;;;;AAoCA,IAAa,eAAb,MAA0B;;CAExB,AAAQ,SAAS,IAAI;;;;;;CAOrB,AAAO,YAAY,AAAQ,SAA8B;;EAA9B;AACzB,MAAI,QAAQ,YACV,SAAQ,cAAc,MAAM,KAAK,IAAI,IAAI,QAAQ;AAGnD,MAAI,0BAAC,QAAQ,yFAAa,QACxB,OAAM,IAAI,MAAM;CAEpB;;;;;CAMA,AAAO,eAAe,aAAuB;AAC3C,OAAK,QAAQ,cAAc,MAAM,KAC/B,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,aAAa,GAAG,YAAY;CAEzD;;;;;;CAOA,AAAO,MAAM,OAAmC;AAC9C,SAAO,KAAK,OAAO,IAAI,UAAU;CACnC;;;;;CAMA,IAAW,cAAwB;AACjC,SAAO,KAAK,QAAQ;CACtB;;;;CAKA,AAAO,cAAc;AACnB,SAAO,KAAK,YAAY,OAAO,uCAA0B;CAC3D;;;;CAKA,AAAO,QAAQ;AACb,OAAK,OAAO;CACd;;;;;CAMA,MAAa,SAAS;AACpB,OAAK;AACL,SAAO,KAAK;CACd;;;;;CAMA,MAAa,OAA4B;AACvC,OAAK,MAAM,cAAc,KAAK,aAAa;GACzC,MAAM,OAAO,oCAAc,YAAY,EAAE,eAAe,MAAM;AAE9D,QAAK,MAAM,OAAO,KAChB,KAAI,IAAI,eAAe;IACrB,MAAM,2BAAY,YAAY,IAAI;AAClC,UAAM,KAAK,UAAU,IAAI,MAAM,MAAM,MAAM,EAAE,EAAE;GACjD;EAEJ;AAEA,SAAO,OAAO,YAAY,KAAK;CACjC;;;;;CAMA,AAAO,SAAqB;AAC1B,SAAO,OAAO,YAAY,KAAK;CACjC;;;;;;;;CASA,MAAc,UACd,OACA,MACA,aAA4B,MAC5B,YAAsB,EAAE,EACxB,SAAS,OACO;EACd,MAAM,QAAQ,oCAAc,MAAM,EAAE,eAAe,MAAM;EACzD,MAAM,cAAc,UAAU,WAAW,KAAK;EAG9C,MAAM,YAAY,cAAc,MAAM,MAAM,GAAG,MAAM,cAAc;AAEnE,QAAM,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE;AAE5C,OAAK,MAAM,QAAQ,OAAO;AACxB,OAAI,KAAK,KAAK,WAAW,KAAM;AAE/B,OAAI,KAAK,eAAe;IACtB,MAAM,+BAAgB,MAAM,KAAK;AACjC,UAAM,KAAK,UAAU,KAAK,MAAM,UAAU,WAAW;AACrD;GACF;AAEA,OAAI,KAAK,YAAY,oBAAoB,KAAK,KAAK,MACjD,WAAU,yBAAU,KAAK,YAAY,KAAK;EAE9C;AAEA,MAAI,CAAC,aAAa;GAChB,MAAM,WAAW,KAAK,OAAO,IAAI;AAEjC,OAAI,UAAU;AACZ,aAAS,YAAY,MAAM,KACzB,IAAI,IAAI,CAAC,GAAG,SAAS,WAAW,GAAG,UAAU;AAG/C;GACF;AAEA,QAAK,OAAO,IAAI,OAAO;IAAE;IAAO;IAAM;IAAW;IAAW;EAC9D;CACF;AACF"}
1
+ {"version":3,"file":"EventsRouter-3Gygh-km.js","names":[],"sources":["../src/app/router/EventsRouter.ts"],"sourcesContent":["import { Collection } from 'discord.js';\nimport { existsSync } from 'node:fs';\nimport { readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\n\n/**\n * Configuration options for the EventsRouter\n * @interface EventsRouterOptions\n */\nexport interface EventsRouterOptions {\n /** Root directory path where event handlers are located */\n entrypoints: string[];\n}\n\n/**\n * Represents a parsed event with its handlers\n * @interface ParsedEvent\n */\nexport interface ParsedEvent {\n /** Name of the event derived from directory name */\n event: string;\n /** Absolute path to the event directory */\n path: string;\n /** Array of file paths to event listener handlers */\n listeners: string[];\n /** Namespace of the event */\n namespace: string | null;\n}\n\n/** Collection of event names to their parsed metadata */\nexport type EventsTree = Record<string, ParsedEvent>;\n\n/**\n * Router for discovering and managing event handler files in a directory structure.\n * Events are represented by directories, and handlers are files within those directories.\n */\nexport class EventsRouter {\n /** Internal storage of parsed events */\n private events = new Collection<string, ParsedEvent>();\n\n /**\n * Creates a new EventsRouter instance\n * @param options - Configuration options for the router\n * @throws Error if entrypoint is not provided\n */\n public constructor(private options: EventsRouterOptions) {\n if (options.entrypoints) {\n options.entrypoints = Array.from(new Set(options.entrypoints));\n }\n\n if (!options.entrypoints?.length) {\n throw new Error('Entrypoint directory must be provided');\n }\n }\n\n /**\n * Adds new entrypoints to the router\n * @param entrypoints - Array of new entrypoint paths\n */\n public addEntrypoints(entrypoints: string[]) {\n this.options.entrypoints = Array.from(\n new Set([...this.options.entrypoints, ...entrypoints]),\n );\n }\n\n /**\n * Find a parsed event by its name\n * @param event - Name of the event to find\n * @returns Parsed event metadata or null if not found\n */\n public match(event: string): ParsedEvent | null {\n return this.events.get(event) ?? null;\n }\n\n /**\n * Get the entrypoint directory path\n * @returns Entrypoint directory path\n */\n public get entrypoints(): string[] {\n return this.options.entrypoints;\n }\n\n /**\n * Checks if the entrypoint path is valid\n */\n public isValidPath() {\n return this.entrypoints.every((entrypoint) => existsSync(entrypoint));\n }\n\n /**\n * Clear all parsed events\n */\n public clear() {\n this.events.clear();\n }\n\n /**\n * Reload and re-scan the entrypoint directory for events\n * @returns Promise resolving to the updated events tree\n */\n public async reload() {\n this.clear();\n return this.scan();\n }\n\n /**\n * Scan the entrypoint directory for events and their handlers\n * @returns Promise resolving to the events tree\n */\n public async scan(): Promise<EventsTree> {\n for (const entrypoint of this.entrypoints) {\n const dirs = await readdir(entrypoint, { withFileTypes: true });\n\n for (const dir of dirs) {\n if (dir.isDirectory()) {\n const path = join(entrypoint, dir.name);\n await this.scanEvent(dir.name, path, null, [], true);\n }\n }\n }\n\n return Object.fromEntries(this.events);\n }\n\n /**\n * Convert the internal events Collection to a plain object\n * @returns Events tree as a plain object\n */\n public toJSON(): EventsTree {\n return Object.fromEntries(this.events);\n }\n\n /**\n * Recursively scan a directory for event handlers\n * @param event - Name of the event\n * @param path - Path to the event directory\n * @param listeners - Array to collect listener file paths\n * @returns Promise resolving to the parsed event metadata\n */\n private async scanEvent(\n event: string,\n path: string,\n _namespace: string | null = null,\n listeners: string[] = [],\n isRoot = false,\n ): Promise<void> {\n const files = await readdir(path, { withFileTypes: true });\n const isNamespace = isRoot && /^\\(.+\\)$/.test(event);\n\n // if event = (something) pattern then namespace is something\n const namespace = isNamespace ? event.slice(1, -1) : (_namespace ?? null);\n\n files.sort((a, b) => a.name.localeCompare(b.name));\n\n for (const file of files) {\n if (file.name.startsWith('_')) continue;\n\n if (file.isDirectory()) {\n const nextPath = join(path, file.name);\n await this.scanEvent(file.name, nextPath, namespace, listeners);\n continue;\n }\n\n if (file.isFile() && /\\.(m|c)?(j|t)sx?$/.test(file.name)) {\n listeners.push(join(file.parentPath, file.name));\n }\n }\n\n if (!isNamespace) {\n const existing = this.events.get(event);\n\n if (existing) {\n existing.listeners = Array.from(\n new Set([...existing.listeners, ...listeners]),\n );\n\n return;\n }\n\n this.events.set(event, { event, path, listeners, namespace });\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAoCA,IAAa,eAAb,MAA0B;;CAExB,AAAQ,SAAS,IAAI,uBAAiC;;;;;;CAOtD,AAAO,YAAY,AAAQ,SAA8B;;EAA9B;AACzB,MAAI,QAAQ,YACV,SAAQ,cAAc,MAAM,KAAK,IAAI,IAAI,QAAQ,YAAY,CAAC;AAGhE,MAAI,0BAAC,QAAQ,yFAAa,QACxB,OAAM,IAAI,MAAM,wCAAwC;;;;;;CAQ5D,AAAO,eAAe,aAAuB;AAC3C,OAAK,QAAQ,cAAc,MAAM,KAC/B,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,aAAa,GAAG,YAAY,CAAC,CACvD;;;;;;;CAQH,AAAO,MAAM,OAAmC;AAC9C,SAAO,KAAK,OAAO,IAAI,MAAM,IAAI;;;;;;CAOnC,IAAW,cAAwB;AACjC,SAAO,KAAK,QAAQ;;;;;CAMtB,AAAO,cAAc;AACnB,SAAO,KAAK,YAAY,OAAO,uCAA0B,WAAW,CAAC;;;;;CAMvE,AAAO,QAAQ;AACb,OAAK,OAAO,OAAO;;;;;;CAOrB,MAAa,SAAS;AACpB,OAAK,OAAO;AACZ,SAAO,KAAK,MAAM;;;;;;CAOpB,MAAa,OAA4B;AACvC,OAAK,MAAM,cAAc,KAAK,aAAa;GACzC,MAAM,OAAO,oCAAc,YAAY,EAAE,eAAe,MAAM,CAAC;AAE/D,QAAK,MAAM,OAAO,KAChB,KAAI,IAAI,aAAa,EAAE;IACrB,MAAM,2BAAY,YAAY,IAAI,KAAK;AACvC,UAAM,KAAK,UAAU,IAAI,MAAM,MAAM,MAAM,EAAE,EAAE,KAAK;;;AAK1D,SAAO,OAAO,YAAY,KAAK,OAAO;;;;;;CAOxC,AAAO,SAAqB;AAC1B,SAAO,OAAO,YAAY,KAAK,OAAO;;;;;;;;;CAUxC,MAAc,UACd,OACA,MACA,aAA4B,MAC5B,YAAsB,EAAE,EACxB,SAAS,OACO;EACd,MAAM,QAAQ,oCAAc,MAAM,EAAE,eAAe,MAAM,CAAC;EAC1D,MAAM,cAAc,UAAU,WAAW,KAAK,MAAM;EAGpD,MAAM,YAAY,cAAc,MAAM,MAAM,GAAG,GAAG,GAAG,cAAc;AAEnE,QAAM,MAAM,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,KAAK,CAAC;AAElD,OAAK,MAAM,QAAQ,OAAO;AACxB,OAAI,KAAK,KAAK,WAAW,IAAI,CAAE;AAE/B,OAAI,KAAK,aAAa,EAAE;IACtB,MAAM,+BAAgB,MAAM,KAAK,KAAK;AACtC,UAAM,KAAK,UAAU,KAAK,MAAM,UAAU,WAAW,UAAU;AAC/D;;AAGF,OAAI,KAAK,QAAQ,IAAI,oBAAoB,KAAK,KAAK,KAAK,CACtD,WAAU,yBAAU,KAAK,YAAY,KAAK,KAAK,CAAC;;AAIpD,MAAI,CAAC,aAAa;GAChB,MAAM,WAAW,KAAK,OAAO,IAAI,MAAM;AAEvC,OAAI,UAAU;AACZ,aAAS,YAAY,MAAM,KACzB,IAAI,IAAI,CAAC,GAAG,SAAS,WAAW,GAAG,UAAU,CAAC,CAC/C;AAED;;AAGF,QAAK,OAAO,IAAI,OAAO;IAAE;IAAO;IAAM;IAAW;IAAW,CAAC"}
@@ -0,0 +1,64 @@
1
+ //#region src/logger/ILogger.d.ts
2
+ /**
3
+ * ILogger interface for logging functionality.
4
+ */
5
+ interface ILogger {
6
+ /**
7
+ * Logs a message with the default log level.
8
+ * @param message The message to log.
9
+ */
10
+ log(message: any): void;
11
+ /**
12
+ * Logs a message with the default log level using template literals.
13
+ * @param strings The template literal strings.
14
+ * @param values The values to interpolate.
15
+ */
16
+ log(strings: TemplateStringsArray, ...values: any[]): void;
17
+ /**
18
+ * Logs an error message.
19
+ * @param message The error message to log.
20
+ */
21
+ error(message: any): void;
22
+ /**
23
+ * Logs an error message using template literals.
24
+ * @param strings The template literal strings.
25
+ * @param values The values to interpolate.
26
+ */
27
+ error(strings: TemplateStringsArray, ...values: any[]): void;
28
+ /**
29
+ * Logs a warning message.
30
+ * @param message The warning message to log.
31
+ */
32
+ warn(message: any): void;
33
+ /**
34
+ * Logs a warning message using template literals.
35
+ * @param strings The template literal strings.
36
+ * @param values The values to interpolate.
37
+ */
38
+ warn(strings: TemplateStringsArray, ...values: any[]): void;
39
+ /**
40
+ * Logs an informational message.
41
+ * @param message The informational message to log.
42
+ */
43
+ info(message: any): void;
44
+ /**
45
+ * Logs an informational message using template literals.
46
+ * @param strings The template literal strings.
47
+ * @param values The values to interpolate.
48
+ */
49
+ info(strings: TemplateStringsArray, ...values: any[]): void;
50
+ /**
51
+ * Logs a debug message.
52
+ * @param message The debug message to log.
53
+ */
54
+ debug(message: any): void;
55
+ /**
56
+ * Logs a debug message using template literals.
57
+ * @param strings The template literal strings.
58
+ * @param values The values to interpolate.
59
+ */
60
+ debug(strings: TemplateStringsArray, ...values: any[]): void;
61
+ }
62
+ //#endregion
63
+ export { ILogger };
64
+ //# sourceMappingURL=ILogger-BW8GM-YZ.d.ts.map
@@ -1,4 +1,4 @@
1
- import { ILogger } from "./ILogger-DBGON5wx.js";
1
+ import { ILogger } from "./ILogger-BW8GM-YZ.js";
2
2
 
3
3
  //#region src/logger/Logger.d.ts
4
4
 
@@ -34,4 +34,4 @@ declare function createLogger(options: CommandKitLoggerOptions): LoggerImpl;
34
34
  declare const Logger: LoggerImpl;
35
35
  //#endregion
36
36
  export { CommandKitLoggerOptions, Logger, LoggerImpl, createLogger };
37
- //# sourceMappingURL=Logger-iSjA-DWN.d.ts.map
37
+ //# sourceMappingURL=Logger-DyfkPk7u.d.ts.map
@@ -30,10 +30,10 @@ declare class MessageCommandParser {
30
30
  /**
31
31
  * Creates a new message command parser.
32
32
  * @param message - The Discord message to parse
33
- * @param prefix - Array of valid command prefixes
33
+ * @param prefix - Array of valid command prefixes or a regular expression
34
34
  * @param schema - Function that returns the options schema for a command
35
35
  */
36
- constructor(message: Message, prefix: string[], schema: (command: string) => MessageCommandOptionsSchema);
36
+ constructor(message: Message, prefix: string[] | RegExp, schema: (command: string) => MessageCommandOptionsSchema);
37
37
  /**
38
38
  * Gets the parsed command arguments.
39
39
  * @returns Array of command arguments
@@ -192,4 +192,4 @@ declare class MessageCommandOptions {
192
192
  }
193
193
  //#endregion
194
194
  export { MessageCommandOptions, MessageCommandOptionsSchema, MessageCommandParser, ParsedMessageCommand };
195
- //# sourceMappingURL=MessageCommandParser-ROLibZPX.d.ts.map
195
+ //# sourceMappingURL=MessageCommandParser-BsGMOTDo.d.ts.map
@@ -1,6 +1,7 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const require_error_codes = require('./error-codes-C-ViHyu-.js');
3
- const discord_js = require_chunk.__toESM(require("discord.js"));
2
+ const require_error_codes = require('./error-codes-Ds0bnPvT.js');
3
+ let discord_js = require("discord.js");
4
+ discord_js = require_chunk.__toESM(discord_js);
4
5
 
5
6
  //#region src/app/commands/MessageCommandParser.ts
6
7
  /**
@@ -25,7 +26,7 @@ var MessageCommandParser = class {
25
26
  /**
26
27
  * Creates a new message command parser.
27
28
  * @param message - The Discord message to parse
28
- * @param prefix - Array of valid command prefixes
29
+ * @param prefix - Array of valid command prefixes or a regular expression
29
30
  * @param schema - Function that returns the options schema for a command
30
31
  */
31
32
  constructor(message, prefix, schema) {
@@ -83,6 +84,10 @@ var MessageCommandParser = class {
83
84
  * @returns The matched prefix or undefined
84
85
  */
85
86
  getPrefix() {
87
+ if (this.prefix instanceof RegExp) {
88
+ const match = this.message.content.match(this.prefix);
89
+ return match === null || match === void 0 ? void 0 : match[0];
90
+ }
86
91
  for (const p of this.prefix) if (this.message.content.startsWith(p)) return p;
87
92
  }
88
93
  /**
@@ -265,4 +270,4 @@ Object.defineProperty(exports, 'MessageCommandParser', {
265
270
  return MessageCommandParser;
266
271
  }
267
272
  });
268
- //# sourceMappingURL=MessageCommandParser-B_BEQ3p8.js.map
273
+ //# sourceMappingURL=MessageCommandParser-Dl0xxtdr.js.map