commandkit 0.1.11-dev.20250128160021 → 0.1.11-dev.20250128162551

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 (188) hide show
  1. package/bin/index.mjs +2 -50
  2. package/dist/CommandKit.js +6 -6
  3. package/dist/CommandKit.js.map +1 -1
  4. package/dist/CommandKit.mjs +1 -1
  5. package/dist/cache/CacheProvider.js +1 -1
  6. package/dist/cache/CacheProvider.js.map +1 -1
  7. package/dist/cache/CacheProvider.mjs +1 -1
  8. package/dist/cache/MemoryCache.js +1 -1
  9. package/dist/cache/MemoryCache.js.map +1 -1
  10. package/dist/cache/MemoryCache.mjs +1 -1
  11. package/dist/cache/cache.js +6 -6
  12. package/dist/cache/cache.js.map +1 -1
  13. package/dist/cache/cache.mjs +1 -1
  14. package/dist/cache/index.js +6 -6
  15. package/dist/cache/index.js.map +1 -1
  16. package/dist/cache/index.mjs +1 -1
  17. package/dist/chunk-35OSBS47.mjs +2 -0
  18. package/dist/chunk-6ZU6MOKA.mjs +2 -0
  19. package/dist/chunk-73NFQRKA.mjs +7 -0
  20. package/dist/{chunk-XJCWZEWC.mjs.map → chunk-73NFQRKA.mjs.map} +1 -1
  21. package/dist/chunk-B5T552SB.mjs +2 -0
  22. package/dist/{chunk-4OV4GE7B.mjs.map → chunk-B5T552SB.mjs.map} +1 -1
  23. package/dist/{chunk-6AX5YJEO.mjs → chunk-BNTMQC76.mjs} +2 -2
  24. package/dist/{chunk-DW5KRS5H.mjs → chunk-DTKEXOZL.mjs} +3 -3
  25. package/dist/{chunk-DW5KRS5H.mjs.map → chunk-DTKEXOZL.mjs.map} +1 -1
  26. package/dist/chunk-FC5WQLBI.mjs +3 -0
  27. package/dist/chunk-FC5WQLBI.mjs.map +1 -0
  28. package/dist/{chunk-4CG7S6RY.mjs → chunk-ICJ4BBWI.mjs} +2 -2
  29. package/dist/chunk-IRBJOQ7G.mjs +2 -0
  30. package/dist/{chunk-CO2EZ53K.mjs.map → chunk-IRBJOQ7G.mjs.map} +1 -1
  31. package/dist/chunk-JYUG7HAX.mjs +2 -0
  32. package/dist/{chunk-Z4FBPRS6.mjs.map → chunk-JYUG7HAX.mjs.map} +1 -1
  33. package/dist/chunk-KAJRRZVI.mjs +2 -0
  34. package/dist/{chunk-5KRNT4BG.mjs.map → chunk-KAJRRZVI.mjs.map} +1 -1
  35. package/dist/chunk-LQPVE73I.mjs +2 -0
  36. package/dist/{chunk-RGQOLRR6.mjs.map → chunk-LQPVE73I.mjs.map} +1 -1
  37. package/dist/{chunk-6W2KY7FK.mjs → chunk-PTP2L33V.mjs} +2 -2
  38. package/dist/{chunk-C6WU57FQ.mjs → chunk-QXMWKQIO.mjs} +2 -2
  39. package/dist/{chunk-CKNUFVNV.mjs → chunk-R4SWJR4N.mjs} +2 -2
  40. package/dist/chunk-RQ3ABUE3.mjs +2 -0
  41. package/dist/chunk-RQ3ABUE3.mjs.map +1 -0
  42. package/dist/{chunk-6BSP7AD3.mjs → chunk-RVGLG66X.mjs} +2 -2
  43. package/dist/chunk-SI3L34FF.mjs +2 -0
  44. package/dist/{chunk-UPJYI5Q6.mjs.map → chunk-SI3L34FF.mjs.map} +1 -1
  45. package/dist/chunk-TEL2J6LT.mjs +2 -0
  46. package/dist/{chunk-WNEBLBID.mjs.map → chunk-TEL2J6LT.mjs.map} +1 -1
  47. package/dist/chunk-ULPF2QCW.mjs +2 -0
  48. package/dist/chunk-ULPF2QCW.mjs.map +1 -0
  49. package/dist/{chunk-J7CCGFUZ.mjs → chunk-UP6ACDGE.mjs} +2 -2
  50. package/dist/{chunk-J7CCGFUZ.mjs.map → chunk-UP6ACDGE.mjs.map} +1 -1
  51. package/dist/chunk-UYDZJJZT.mjs +4 -0
  52. package/dist/{chunk-K43A7OIY.mjs.map → chunk-UYDZJJZT.mjs.map} +1 -1
  53. package/dist/chunk-WZU7OSUV.mjs +13 -0
  54. package/dist/chunk-WZU7OSUV.mjs.map +1 -0
  55. package/dist/chunk-Y522NY4J.mjs +2 -0
  56. package/dist/chunk-Y522NY4J.mjs.map +1 -0
  57. package/dist/chunk-ZCUZ5ENB.mjs +2 -0
  58. package/dist/chunk-ZCUZ5ENB.mjs.map +1 -0
  59. package/dist/cli/build.d.mts +4 -0
  60. package/dist/cli/build.d.ts +4 -0
  61. package/dist/cli/build.js +14 -0
  62. package/dist/cli/build.js.map +1 -0
  63. package/dist/cli/build.mjs +2 -0
  64. package/dist/cli/build.mjs.map +1 -0
  65. package/dist/cli/common.d.mts +35 -0
  66. package/dist/cli/common.d.ts +35 -0
  67. package/dist/cli/common.js +3 -0
  68. package/dist/cli/common.js.map +1 -0
  69. package/dist/cli/common.mjs +2 -0
  70. package/dist/cli/common.mjs.map +1 -0
  71. package/dist/cli/development.d.mts +3 -0
  72. package/dist/cli/development.d.ts +3 -0
  73. package/dist/cli/development.js +17 -0
  74. package/dist/cli/development.js.map +1 -0
  75. package/dist/cli/development.mjs +7 -0
  76. package/dist/cli/development.mjs.map +1 -0
  77. package/dist/cli/esbuild-plugins/plugin.d.mts +10 -0
  78. package/dist/cli/esbuild-plugins/plugin.d.ts +10 -0
  79. package/dist/cli/esbuild-plugins/plugin.js +2 -0
  80. package/dist/cli/esbuild-plugins/plugin.js.map +1 -0
  81. package/dist/cli/esbuild-plugins/plugin.mjs +2 -0
  82. package/dist/cli/esbuild-plugins/plugin.mjs.map +1 -0
  83. package/dist/cli/esbuild-plugins/use-cache.d.mts +6 -0
  84. package/dist/cli/esbuild-plugins/use-cache.d.ts +6 -0
  85. package/dist/cli/esbuild-plugins/use-cache.js +2 -0
  86. package/dist/cli/esbuild-plugins/use-cache.js.map +1 -0
  87. package/dist/cli/esbuild-plugins/use-cache.mjs +2 -0
  88. package/dist/cli/esbuild-plugins/use-cache.mjs.map +1 -0
  89. package/dist/cli/init.d.mts +10 -0
  90. package/dist/cli/init.d.ts +10 -0
  91. package/dist/cli/init.js +20 -0
  92. package/dist/cli/init.js.map +1 -0
  93. package/dist/cli/init.mjs +2 -0
  94. package/dist/cli/init.mjs.map +1 -0
  95. package/dist/cli/parse-env.d.mts +3 -0
  96. package/dist/cli/parse-env.d.ts +3 -0
  97. package/dist/cli/parse-env.js +2 -0
  98. package/dist/cli/parse-env.js.map +1 -0
  99. package/dist/cli/parse-env.mjs +2 -0
  100. package/dist/cli/parse-env.mjs.map +1 -0
  101. package/dist/cli/production.d.mts +3 -0
  102. package/dist/cli/production.d.ts +3 -0
  103. package/dist/cli/production.js +4 -0
  104. package/dist/cli/production.js.map +1 -0
  105. package/dist/cli/production.mjs +3 -0
  106. package/dist/cli/production.mjs.map +1 -0
  107. package/dist/components/ButtonKit.js +1 -1
  108. package/dist/components/ButtonKit.js.map +1 -1
  109. package/dist/components/ButtonKit.mjs +1 -1
  110. package/dist/components/index.js +1 -1
  111. package/dist/components/index.js.map +1 -1
  112. package/dist/components/index.mjs +1 -1
  113. package/dist/config.mjs +1 -1
  114. package/dist/context/async-context.js +6 -6
  115. package/dist/context/async-context.js.map +1 -1
  116. package/dist/context/async-context.mjs +1 -1
  117. package/dist/context/environment.js +1 -1
  118. package/dist/context/environment.js.map +1 -1
  119. package/dist/context/environment.mjs +1 -1
  120. package/dist/handlers/command-handler/CommandHandler.js +6 -6
  121. package/dist/handlers/command-handler/CommandHandler.js.map +1 -1
  122. package/dist/handlers/command-handler/CommandHandler.mjs +1 -1
  123. package/dist/handlers/command-handler/functions/loadCommandsWithRest.js +2 -2
  124. package/dist/handlers/command-handler/functions/loadCommandsWithRest.js.map +1 -1
  125. package/dist/handlers/command-handler/functions/loadCommandsWithRest.mjs +1 -1
  126. package/dist/handlers/command-handler/functions/registerCommands.js +2 -2
  127. package/dist/handlers/command-handler/functions/registerCommands.js.map +1 -1
  128. package/dist/handlers/command-handler/functions/registerCommands.mjs +1 -1
  129. package/dist/handlers/command-handler/utils/areSlashCommandsDifferent.mjs +1 -1
  130. package/dist/handlers/command-handler/validations/devOnly.js +1 -1
  131. package/dist/handlers/command-handler/validations/devOnly.js.map +1 -1
  132. package/dist/handlers/command-handler/validations/devOnly.mjs +1 -1
  133. package/dist/handlers/command-handler/validations/index.js +1 -1
  134. package/dist/handlers/command-handler/validations/index.js.map +1 -1
  135. package/dist/handlers/command-handler/validations/index.mjs +1 -1
  136. package/dist/handlers/command-handler/validations/permissions.js +1 -1
  137. package/dist/handlers/command-handler/validations/permissions.js.map +1 -1
  138. package/dist/handlers/command-handler/validations/permissions.mjs +1 -1
  139. package/dist/handlers/event-handler/EventHandler.js +1 -1
  140. package/dist/handlers/event-handler/EventHandler.js.map +1 -1
  141. package/dist/handlers/event-handler/EventHandler.mjs +1 -1
  142. package/dist/handlers/index.js +6 -6
  143. package/dist/handlers/index.js.map +1 -1
  144. package/dist/handlers/index.mjs +1 -1
  145. package/dist/handlers/validation-handler/ValidationHandler.js +1 -1
  146. package/dist/handlers/validation-handler/ValidationHandler.js.map +1 -1
  147. package/dist/handlers/validation-handler/ValidationHandler.mjs +1 -1
  148. package/dist/index.d.mts +2 -0
  149. package/dist/index.d.ts +2 -0
  150. package/dist/index.js +24 -6
  151. package/dist/index.js.map +1 -1
  152. package/dist/index.mjs +1 -1
  153. package/dist/index.mjs.map +1 -1
  154. package/dist/types.mjs +1 -1
  155. package/dist/utils/clone.mjs +1 -1
  156. package/dist/utils/colors.mjs +1 -1
  157. package/dist/utils/constants.mjs +1 -1
  158. package/dist/utils/error-codes.mjs +1 -1
  159. package/dist/utils/get-paths.mjs +1 -1
  160. package/dist/utils/resolve-file-url.mjs +1 -1
  161. package/dist/utils/warn-unstable.mjs +1 -1
  162. package/package.json +3 -13
  163. package/bin/build.mjs +0 -129
  164. package/bin/common.mjs +0 -125
  165. package/bin/development.mjs +0 -187
  166. package/bin/esbuild-plugins/plugin.mjs +0 -74
  167. package/bin/esbuild-plugins/use-cache.mjs +0 -160
  168. package/bin/parse-env.mjs +0 -65
  169. package/bin/production.mjs +0 -86
  170. package/dist/chunk-4OV4GE7B.mjs +0 -2
  171. package/dist/chunk-5KRNT4BG.mjs +0 -2
  172. package/dist/chunk-6TIBWNPX.mjs +0 -2
  173. package/dist/chunk-6TIGKCSX.mjs +0 -2
  174. package/dist/chunk-CO2EZ53K.mjs +0 -2
  175. package/dist/chunk-K43A7OIY.mjs +0 -4
  176. package/dist/chunk-RGQOLRR6.mjs +0 -2
  177. package/dist/chunk-UPJYI5Q6.mjs +0 -2
  178. package/dist/chunk-WNEBLBID.mjs +0 -2
  179. package/dist/chunk-XJCWZEWC.mjs +0 -7
  180. package/dist/chunk-Z4FBPRS6.mjs +0 -2
  181. /package/dist/{chunk-6TIBWNPX.mjs.map → chunk-35OSBS47.mjs.map} +0 -0
  182. /package/dist/{chunk-6TIGKCSX.mjs.map → chunk-6ZU6MOKA.mjs.map} +0 -0
  183. /package/dist/{chunk-6AX5YJEO.mjs.map → chunk-BNTMQC76.mjs.map} +0 -0
  184. /package/dist/{chunk-4CG7S6RY.mjs.map → chunk-ICJ4BBWI.mjs.map} +0 -0
  185. /package/dist/{chunk-6W2KY7FK.mjs.map → chunk-PTP2L33V.mjs.map} +0 -0
  186. /package/dist/{chunk-C6WU57FQ.mjs.map → chunk-QXMWKQIO.mjs.map} +0 -0
  187. /package/dist/{chunk-CKNUFVNV.mjs.map → chunk-R4SWJR4N.mjs.map} +0 -0
  188. /package/dist/{chunk-6BSP7AD3.mjs.map → chunk-RVGLG66X.mjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/handlers/command-handler/functions/loadCommandsWithRest.ts"],"sourcesContent":["import type { ApplicationCommandDataResolvable, Client } from 'discord.js';\nimport type { CommandFileObject, ReloadOptions } from '../../../types';\n\nimport colors from '../../../utils/colors';\n\ntype LoadCommandsWithRestProps = {\n /**\n * The main client.\n */\n client: Client;\n\n /**\n * An array of command objects.\n */\n commands: CommandFileObject[];\n\n /**\n * An array of developer guild IDs.\n */\n devGuildIds: string[];\n\n /**\n * A boolean indicating whether these commands are reloading.\n */\n reloading?: boolean;\n\n /**\n * A type for reloading the commands (if this is reloading).\n */\n type?: ReloadOptions;\n};\n\n/**\n * Use REST to load commands.\n * @param props - Options for loading commands.\n */\nexport default async function loadCommandsWithRest(\nprops: LoadCommandsWithRestProps)\n{\n if (props.reloading) {\n if (props.client.isReady()) {\n await handleLoading(\n props.client,\n props.commands,\n props.devGuildIds,\n props.reloading,\n props.type\n );\n } else {\n throw new Error(\n colors.red(`Cannot reload commands when client is not ready.`)\n );\n }\n } else {\n props.client.once('ready', async (c) => {\n await handleLoading(\n c,\n props.commands,\n props.devGuildIds,\n props.reloading,\n props.type\n );\n });\n }\n}\n\n/**\n * Handles loading commands.\n * @param client - The discord.js client instance.\n * @param commands - An array of command file objects.\n * @param devGuildIds - An array of developer guild IDs.\n * @param reloading - A boolean indicating whether this is reloading.\n * @param type - A type for reloading the commands (if this is reloading).\n */\nasync function handleLoading(\nclient: Client<true>,\ncommands: CommandFileObject[],\ndevGuildIds: string[],\nreloading?: boolean,\ntype?: ReloadOptions)\n{\n commands = commands.filter((cmd) => !cmd.options?.deleted);\n const devOnlyCommands = commands.filter((cmd) => cmd.options?.devOnly);\n const globalCommands = commands.filter((cmd) => !cmd.options?.devOnly);\n\n if (type === 'dev') {\n await loadDevCommands(client, devOnlyCommands, devGuildIds, reloading);\n } else if (type === 'global') {\n await loadGlobalCommands(client, globalCommands, reloading);\n } else {\n await loadDevCommands(client, devOnlyCommands, devGuildIds, reloading);\n await loadGlobalCommands(client, globalCommands, reloading);\n }\n}\n\n/**\n * Load commands globally.\n * @param client - The discord.js client instance.\n * @param commands - An array of command file objects.\n * @param reloading - A boolean indicating whether the commands are reloading.\n */\nasync function loadGlobalCommands(\nclient: Client<true>,\ncommands: CommandFileObject[],\nreloading?: boolean)\n{\n const requestBody = commands.map((cmd) => cmd.data);\n\n await client.application.commands.\n set(requestBody as ApplicationCommandDataResolvable[]).\n catch((error) => {\n throw new Error(\n colors.red(\n `Error ${\n reloading ? 'reloading' : 'loading'} global application commands.\\n`\n\n ),\n error\n );\n });\n\n console.log(\n colors.green(\n `${reloading ? 'Reloaded' : 'Loaded'} ${\n requestBody.length} global commands.`\n\n )\n );\n}\n\n/**\n * Load commands for dev guilds.\n * @param client - The discord.js client instance.\n * @param commands - An array of command file objects.\n * @param guildIds - An array of developer guild IDs.\n * @param reloading - A boolean indicating whether the commands are reloading.\n */\nasync function loadDevCommands(\nclient: Client<true>,\ncommands: CommandFileObject[],\nguildIds: string[],\nreloading?: boolean)\n{\n const requestBody = commands.map((cmd) => cmd.data);\n\n for (const guildId of guildIds) {\n const targetGuild =\n client.guilds.cache.get(guildId) || (await client.guilds.fetch(guildId));\n\n if (!targetGuild) {\n process.emitWarning(\n `Cannot ${\n reloading ? 'reload' : 'load'} commands in guild \"${\n guildId}\" - guild doesn't exist or client isn't part of the guild.`\n );\n\n continue;\n }\n\n await targetGuild.commands.\n set(requestBody as ApplicationCommandDataResolvable[]).\n catch((error) => {\n throw new Error(\n colors.red(\n `Error ${\n reloading ? 'reloading' : 'loading'} developer application commands in guild \"${\n\n targetGuild?.name || guildId}\".\\n`\n\n ),\n error\n );\n });\n\n console.log(\n colors.green(\n `${reloading ? 'Reloaded' : 'Loaded'} ${\n requestBody.length} developer commands in guild \"${\n targetGuild.name}\".`\n )\n );\n }\n}"],"mappings":"0FAoCA,eAAO,qBACP,MACA,CACE,GAAI,MAAM,UACR,GAAI,MAAM,OAAO,QAAQ,EACvB,MAAM,cACJ,MAAM,OACN,MAAM,SACN,MAAM,YACN,MAAM,UACN,MAAM,IACR,MAEA,OAAM,IAAI,MACR,eAAO,IAAI,kDAAkD,CAC/D,OAGF,MAAM,OAAO,KAAK,QAAS,MAAO,GAAM,CACtC,MAAM,cACJ,EACA,MAAM,SACN,MAAM,YACN,MAAM,UACN,MAAM,IACR,CACF,CAAC,CAEL,CA5B8B,oDAsC9B,eAAe,cACf,OACA,SACA,YACA,UACA,KACA,CACE,SAAW,SAAS,OAAQ,KAAQ,CAAC,IAAI,SAAS,OAAO,EACzD,IAAM,gBAAkB,SAAS,OAAQ,KAAQ,IAAI,SAAS,OAAO,EAC/D,eAAiB,SAAS,OAAQ,KAAQ,CAAC,IAAI,SAAS,OAAO,EAEjE,OAAS,MACX,MAAM,gBAAgB,OAAQ,gBAAiB,YAAa,SAAS,EAC5D,OAAS,SAClB,MAAM,mBAAmB,OAAQ,eAAgB,SAAS,GAE1D,MAAM,gBAAgB,OAAQ,gBAAiB,YAAa,SAAS,EACrE,MAAM,mBAAmB,OAAQ,eAAgB,SAAS,EAE9D,CAnBe,sCA2Bf,eAAe,mBACf,OACA,SACA,UACA,CACE,IAAM,YAAc,SAAS,IAAK,KAAQ,IAAI,IAAI,EAElD,MAAM,OAAO,YAAY,SACzB,IAAI,WAAiD,EACrD,MAAO,OAAU,CACf,MAAM,IAAI,MACR,eAAO,IACL,SACA,UAAY,YAAc,SAAS;AAAA,CAErC,EACA,KACF,CACF,CAAC,EAED,QAAQ,IACN,eAAO,MACL,GAAG,UAAY,WAAa,QAAQ,IACpC,YAAY,MAAM,mBAEpB,CACF,CACF,CA3Be,gDAoCf,eAAe,gBACf,OACA,SACA,SACA,UACA,CACE,IAAM,YAAc,SAAS,IAAK,KAAQ,IAAI,IAAI,EAElD,QAAW,WAAW,SAAU,CAC9B,IAAM,YACN,OAAO,OAAO,MAAM,IAAI,OAAO,GAAM,MAAM,OAAO,OAAO,MAAM,OAAO,EAEtE,GAAI,CAAC,YAAa,CAChB,QAAQ,YACN,UACA,UAAY,SAAW,MAAM,uBAC7B,OAAO,4DACT,EAEA,QACF,CAEA,MAAM,YAAY,SAClB,IAAI,WAAiD,EACrD,MAAO,OAAU,CACf,MAAM,IAAI,MACR,eAAO,IACL,SACA,UAAY,YAAc,SAAS,6CAEnC,aAAa,MAAQ,OAAO;AAAA,CAE9B,EACA,KACF,CACF,CAAC,EAED,QAAQ,IACN,eAAO,MACL,GAAG,UAAY,WAAa,QAAQ,IACpC,YAAY,MAAM,iCAClB,YAAY,IAAI,IAClB,CACF,CACF,CACF,CA7Ce","names":[]}
1
+ {"version":3,"sources":["../src/handlers/command-handler/functions/loadCommandsWithRest.ts"],"sourcesContent":["import type { ApplicationCommandDataResolvable, Client } from 'discord.js';\nimport type { CommandFileObject, ReloadOptions } from '../../../types';\n\nimport colors from '../../../utils/colors';\n\ntype LoadCommandsWithRestProps = {\n /**\n * The main client.\n */\n client: Client;\n\n /**\n * An array of command objects.\n */\n commands: CommandFileObject[];\n\n /**\n * An array of developer guild IDs.\n */\n devGuildIds: string[];\n\n /**\n * A boolean indicating whether these commands are reloading.\n */\n reloading?: boolean;\n\n /**\n * A type for reloading the commands (if this is reloading).\n */\n type?: ReloadOptions;\n};\n\n/**\n * Use REST to load commands.\n * @param props - Options for loading commands.\n */\nexport default async function loadCommandsWithRest(\nprops: LoadCommandsWithRestProps)\n{\n if (props.reloading) {\n if (props.client.isReady()) {\n await handleLoading(\n props.client,\n props.commands,\n props.devGuildIds,\n props.reloading,\n props.type\n );\n } else {\n throw new Error(\n colors.red(`Cannot reload commands when client is not ready.`)\n );\n }\n } else {\n props.client.once('ready', async (c) => {\n await handleLoading(\n c,\n props.commands,\n props.devGuildIds,\n props.reloading,\n props.type\n );\n });\n }\n}\n\n/**\n * Handles loading commands.\n * @param client - The discord.js client instance.\n * @param commands - An array of command file objects.\n * @param devGuildIds - An array of developer guild IDs.\n * @param reloading - A boolean indicating whether this is reloading.\n * @param type - A type for reloading the commands (if this is reloading).\n */\nasync function handleLoading(\nclient: Client<true>,\ncommands: CommandFileObject[],\ndevGuildIds: string[],\nreloading?: boolean,\ntype?: ReloadOptions)\n{\n commands = commands.filter((cmd) => !cmd.options?.deleted);\n const devOnlyCommands = commands.filter((cmd) => cmd.options?.devOnly);\n const globalCommands = commands.filter((cmd) => !cmd.options?.devOnly);\n\n if (type === 'dev') {\n await loadDevCommands(client, devOnlyCommands, devGuildIds, reloading);\n } else if (type === 'global') {\n await loadGlobalCommands(client, globalCommands, reloading);\n } else {\n await loadDevCommands(client, devOnlyCommands, devGuildIds, reloading);\n await loadGlobalCommands(client, globalCommands, reloading);\n }\n}\n\n/**\n * Load commands globally.\n * @param client - The discord.js client instance.\n * @param commands - An array of command file objects.\n * @param reloading - A boolean indicating whether the commands are reloading.\n */\nasync function loadGlobalCommands(\nclient: Client<true>,\ncommands: CommandFileObject[],\nreloading?: boolean)\n{\n const requestBody = commands.map((cmd) => cmd.data);\n\n await client.application.commands.\n set(requestBody as ApplicationCommandDataResolvable[]).\n catch((error) => {\n throw new Error(\n colors.red(\n `Error ${\n reloading ? 'reloading' : 'loading'} global application commands.\\n`\n\n ),\n error\n );\n });\n\n console.log(\n colors.green(\n `${reloading ? 'Reloaded' : 'Loaded'} ${\n requestBody.length} global commands.`\n\n )\n );\n}\n\n/**\n * Load commands for dev guilds.\n * @param client - The discord.js client instance.\n * @param commands - An array of command file objects.\n * @param guildIds - An array of developer guild IDs.\n * @param reloading - A boolean indicating whether the commands are reloading.\n */\nasync function loadDevCommands(\nclient: Client<true>,\ncommands: CommandFileObject[],\nguildIds: string[],\nreloading?: boolean)\n{\n const requestBody = commands.map((cmd) => cmd.data);\n\n for (const guildId of guildIds) {\n const targetGuild =\n client.guilds.cache.get(guildId) || (await client.guilds.fetch(guildId));\n\n if (!targetGuild) {\n process.emitWarning(\n `Cannot ${\n reloading ? 'reload' : 'load'} commands in guild \"${\n guildId}\" - guild doesn't exist or client isn't part of the guild.`\n );\n\n continue;\n }\n\n await targetGuild.commands.\n set(requestBody as ApplicationCommandDataResolvable[]).\n catch((error) => {\n throw new Error(\n colors.red(\n `Error ${\n reloading ? 'reloading' : 'loading'} developer application commands in guild \"${\n\n targetGuild?.name || guildId}\".\\n`\n\n ),\n error\n );\n });\n\n console.log(\n colors.green(\n `${reloading ? 'Reloaded' : 'Loaded'} ${\n requestBody.length} developer commands in guild \"${\n targetGuild.name}\".`\n )\n );\n }\n}"],"mappings":"0FAoCA,eAAO,qBACP,MACA,CACE,GAAI,MAAM,UACR,GAAI,MAAM,OAAO,QAAQ,EACvB,MAAM,cACJ,MAAM,OACN,MAAM,SACN,MAAM,YACN,MAAM,UACN,MAAM,IACR,MAEA,OAAM,IAAI,MACR,eAAO,IAAI,kDAAkD,CAC/D,OAGF,MAAM,OAAO,KAAK,QAAS,MAAO,GAAM,CACtC,MAAM,cACJ,EACA,MAAM,SACN,MAAM,YACN,MAAM,UACN,MAAM,IACR,CACF,CAAC,CAEL,CA5B8B,oDAsC9B,eAAe,cACf,OACA,SACA,YACA,UACA,KACA,CACE,SAAW,SAAS,OAAQ,KAAK,CAjFnC,OAiFsC,SAAC,OAAI,UAAJ,SAAa,SAAO,EACzD,IAAM,gBAAkB,SAAS,OAAQ,KAAK,CAlFhD,OAkFmD,cAAI,UAAJ,eAAa,QAAO,EAC/D,eAAiB,SAAS,OAAQ,KAAK,CAnF/C,OAmFkD,SAAC,OAAI,UAAJ,SAAa,SAAO,EAEjE,OAAS,MACX,MAAM,gBAAgB,OAAQ,gBAAiB,YAAa,SAAS,EAC5D,OAAS,SAClB,MAAM,mBAAmB,OAAQ,eAAgB,SAAS,GAE1D,MAAM,gBAAgB,OAAQ,gBAAiB,YAAa,SAAS,EACrE,MAAM,mBAAmB,OAAQ,eAAgB,SAAS,EAE9D,CAnBe,sCA2Bf,eAAe,mBACf,OACA,SACA,UACA,CACE,IAAM,YAAc,SAAS,IAAK,KAAQ,IAAI,IAAI,EAElD,MAAM,OAAO,YAAY,SACzB,IAAI,WAAiD,EACrD,MAAO,OAAU,CACf,MAAM,IAAI,MACR,eAAO,IACL,SACA,UAAY,YAAc,SAAS;AAAA,CAErC,EACA,KACF,CACF,CAAC,EAED,QAAQ,IACN,eAAO,MACL,GAAG,UAAY,WAAa,QAAQ,IACpC,YAAY,MAAM,mBAEpB,CACF,CACF,CA3Be,gDAoCf,eAAe,gBACf,OACA,SACA,SACA,UACA,CACE,IAAM,YAAc,SAAS,IAAK,KAAQ,IAAI,IAAI,EAElD,QAAW,WAAW,SAAU,CAC9B,IAAM,YACN,OAAO,OAAO,MAAM,IAAI,OAAO,GAAM,MAAM,OAAO,OAAO,MAAM,OAAO,EAEtE,GAAI,CAAC,YAAa,CAChB,QAAQ,YACN,UACA,UAAY,SAAW,MAAM,uBAC7B,OAAO,4DACT,EAEA,QACF,CAEA,MAAM,YAAY,SAClB,IAAI,WAAiD,EACrD,MAAO,OAAU,CACf,MAAM,IAAI,MACR,eAAO,IACL,SACA,UAAY,YAAc,SAAS,8CAEnC,qCAAa,OAAQ,OAAO;AAAA,CAE9B,EACA,KACF,CACF,CAAC,EAED,QAAQ,IACN,eAAO,MACL,GAAG,UAAY,WAAa,QAAQ,IACpC,YAAY,MAAM,iCAClB,YAAY,IAAI,IAClB,CACF,CACF,CACF,CA7Ce","names":[]}
@@ -0,0 +1,3 @@
1
+ import{__name}from"./chunk-35OSBS47.mjs";import{rimrafSync}from"rimraf";import{join}from"node:path";import fs from"node:fs";var resetColor="\x1B[0m",Colors={reset:__name(text=>`${text}${resetColor}`,"reset"),bright:__name(text=>`\x1B[1m${text}${resetColor}`,"bright"),dim:__name(text=>`\x1B[2m${text}${resetColor}`,"dim"),underscore:__name(text=>`\x1B[4m${text}${resetColor}`,"underscore"),blink:__name(text=>`\x1B[5m${text}${resetColor}`,"blink"),reverse:__name(text=>`\x1B[7m${text}${resetColor}`,"reverse"),hidden:__name(text=>`\x1B[8m${text}${resetColor}`,"hidden"),black:__name(text=>`\x1B[30m${text}${resetColor}`,"black"),red:__name(text=>`\x1B[31m${text}${resetColor}`,"red"),green:__name(text=>`\x1B[32m${text}${resetColor}`,"green"),yellow:__name(text=>`\x1B[33m${text}${resetColor}`,"yellow"),blue:__name(text=>`\x1B[34m${text}${resetColor}`,"blue"),magenta:__name(text=>`\x1B[35m${text}${resetColor}`,"magenta"),cyan:__name(text=>`\x1B[36m${text}${resetColor}`,"cyan"),white:__name(text=>`\x1B[37m${text}${resetColor}`,"white"),bgBlack:__name(text=>`\x1B[40m${text}${resetColor}`,"bgBlack"),bgRed:__name(text=>`\x1B[41m${text}${resetColor}`,"bgRed"),bgGreen:__name(text=>`\x1B[42m${text}${resetColor}`,"bgGreen"),bgYellow:__name(text=>`\x1B[43m${text}${resetColor}`,"bgYellow"),bgBlue:__name(text=>`\x1B[44m${text}${resetColor}`,"bgBlue"),bgMagenta:__name(text=>`\x1B[45m${text}${resetColor}`,"bgMagenta"),bgCyan:__name(text=>`\x1B[46m${text}${resetColor}`,"bgCyan"),bgWhite:__name(text=>`\x1B[47m${text}${resetColor}`,"bgWhite")};function write(message){process.stdout.write(message),process.stdout.write(`
2
+ `)}__name(write,"write");function panic(message){write(Colors.red(`Error: ${message}`)),process.exit(1)}__name(panic,"panic");function findPackageJSON(){let cwd=process.cwd(),target=join(cwd,"package.json");return fs.existsSync(target)||panic("Could not find package.json in current directory."),JSON.parse(fs.readFileSync(target,"utf8"))}__name(findPackageJSON,"findPackageJSON");var possibleFileNames=["commandkit.json","commandkit.config.json","commandkit.js","commandkit.config.js","commandkit.mjs","commandkit.config.mjs","commandkit.cjs","commandkit.config.cjs","commandkit.ts","commandkit.mts","commandkit.cts"];async function findCommandKitConfig(src){let cwd=process.cwd(),locations=src?[join(cwd,src)]:possibleFileNames.map(name=>join(cwd,name));for(let location of locations)try{return await loadConfigInner(location)}catch{continue}panic(`Could not locate commandkit config from ${cwd}`)}__name(findCommandKitConfig,"findCommandKitConfig");function ensureTypeScript(target){/\.(c|m)tsx?$/.test(target)&&!process.features.typescript&&panic("You are trying to load commandkit config file that is written in typescript. The current Node.js version does not have TypeScript feature enabled.")}__name(ensureTypeScript,"ensureTypeScript");async function loadConfigInner(target){let isJSON=target.endsWith(".json");return await ensureExists(target),ensureTypeScript(target),await import(`file://${target}`).then(conf=>conf.default||conf)}__name(loadConfigInner,"loadConfigInner");async function ensureExists(loc){await fs.promises.access(loc,fs.constants.F_OK)}__name(ensureExists,"ensureExists");function erase(dir){rimrafSync(dir)}__name(erase,"erase");export{Colors,write,panic,findPackageJSON,findCommandKitConfig,erase};
3
+ //# sourceMappingURL=chunk-FC5WQLBI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/common.ts"],"sourcesContent":["// @ts-check\n\nimport { rimrafSync } from 'rimraf';\nimport { join } from 'node:path';\nimport fs from 'node:fs';\n\nconst resetColor = '\\x1b[0m';\n\nexport const Colors = {\n reset: (text: string) => `${text}${resetColor}`,\n bright: (text: string) => `\\x1b[1m${text}${resetColor}`,\n dim: (text: string) => `\\x1b[2m${text}${resetColor}`,\n underscore: (text: string) => `\\x1b[4m${text}${resetColor}`,\n blink: (text: string) => `\\x1b[5m${text}${resetColor}`,\n reverse: (text: string) => `\\x1b[7m${text}${resetColor}`,\n hidden: (text: string) => `\\x1b[8m${text}${resetColor}`,\n\n black: (text: string) => `\\x1b[30m${text}${resetColor}`,\n red: (text: string) => `\\x1b[31m${text}${resetColor}`,\n green: (text: string) => `\\x1b[32m${text}${resetColor}`,\n yellow: (text: string) => `\\x1b[33m${text}${resetColor}`,\n blue: (text: string) => `\\x1b[34m${text}${resetColor}`,\n magenta: (text: string) => `\\x1b[35m${text}${resetColor}`,\n cyan: (text: string) => `\\x1b[36m${text}${resetColor}`,\n white: (text: string) => `\\x1b[37m${text}${resetColor}`,\n\n bgBlack: (text: string) => `\\x1b[40m${text}${resetColor}`,\n bgRed: (text: string) => `\\x1b[41m${text}${resetColor}`,\n bgGreen: (text: string) => `\\x1b[42m${text}${resetColor}`,\n bgYellow: (text: string) => `\\x1b[43m${text}${resetColor}`,\n bgBlue: (text: string) => `\\x1b[44m${text}${resetColor}`,\n bgMagenta: (text: string) => `\\x1b[45m${text}${resetColor}`,\n bgCyan: (text: string) => `\\x1b[46m${text}${resetColor}`,\n bgWhite: (text: string) => `\\x1b[47m${text}${resetColor}`\n};\n\nexport function write(message: any) {\n process.stdout.write(message);\n process.stdout.write('\\n');\n}\n\n/**\n * @returns {never}\n */\nexport function panic(message: any) {\n write(Colors.red(`Error: ${message}`));\n process.exit(1);\n}\n\nexport function findPackageJSON() {\n const cwd = process.cwd();\n const target = join(cwd, 'package.json');\n\n if (!fs.existsSync(target)) {\n panic('Could not find package.json in current directory.');\n }\n\n return JSON.parse(fs.readFileSync(target, 'utf8'));\n}\n\nconst possibleFileNames = [\n'commandkit.json',\n'commandkit.config.json',\n'commandkit.js',\n'commandkit.config.js',\n'commandkit.mjs',\n'commandkit.config.mjs',\n'commandkit.cjs',\n'commandkit.config.cjs',\n'commandkit.ts',\n'commandkit.mts',\n'commandkit.cts'];\n\n\nexport async function findCommandKitConfig(src: string) {\n const cwd = process.cwd();\n const locations = src ?\n [join(cwd, src)] :\n possibleFileNames.map((name) => join(cwd, name));\n\n for (const location of locations) {\n try {\n return await loadConfigInner(location);\n } catch (e) {\n continue;\n }\n }\n\n panic(`Could not locate commandkit config from ${cwd}`);\n}\n\nfunction ensureTypeScript(target: string) {\n const isTypeScript = /\\.(c|m)tsx?$/.test(target);\n\n if (isTypeScript && !process.features.typescript) {\n panic(\n 'You are trying to load commandkit config file that is written in typescript. The current Node.js version does not have TypeScript feature enabled.'\n );\n }\n}\n\nasync function loadConfigInner(target: string) {\n const isJSON = target.endsWith('.json');\n\n await ensureExists(target);\n\n ensureTypeScript(target);\n\n /**\n * @type {import('..').CommandKitConfig}\n */\n // @ts-ignore\n const config = await import(`file://${target}`, {\n assert: isJSON ? { type: 'json' } : undefined\n }).then((conf) => conf.default || conf);\n\n return config;\n}\n\nasync function ensureExists(loc: string) {\n await fs.promises.access(loc, fs.constants.F_OK);\n}\n\nexport function erase(dir: string) {\n rimrafSync(dir);\n}"],"mappings":"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","names":[]}
@@ -1,2 +1,2 @@
1
- import{__name}from"./chunk-6TIBWNPX.mjs";import path from"path";function toFileURL(filePath){return"file://"+path.resolve(filePath).replace(/\\\\|\\/g,"/")}__name(toFileURL,"toFileURL");export{toFileURL};
2
- //# sourceMappingURL=chunk-4CG7S6RY.mjs.map
1
+ import{__name}from"./chunk-35OSBS47.mjs";import path from"path";function toFileURL(filePath){return"file://"+path.resolve(filePath).replace(/\\\\|\\/g,"/")}__name(toFileURL,"toFileURL");export{toFileURL};
2
+ //# sourceMappingURL=chunk-ICJ4BBWI.mjs.map
@@ -0,0 +1,2 @@
1
+ import{CacheProvider}from"./chunk-SI3L34FF.mjs";import{__name,__privateAdd,__privateGet}from"./chunk-35OSBS47.mjs";var _cache,_MemoryCache=class _MemoryCache extends CacheProvider{constructor(){super(...arguments);__privateAdd(this,_cache,new Map)}async get(key){let entry=__privateGet(this,_cache).get(key);if(entry){if(entry.ttl&&Date.now()>entry.ttl){__privateGet(this,_cache).delete(key);return}return entry}}async set(key,value,ttl){let entry={value,ttl:ttl!=null?Date.now()+ttl:void 0};__privateGet(this,_cache).set(key,entry)}async exists(key){return __privateGet(this,_cache).has(key)}async delete(key){__privateGet(this,_cache).delete(key)}async clear(){__privateGet(this,_cache).clear()}async expire(key,ttl){let entry=__privateGet(this,_cache).get(key);if(!entry)return;let _ttl=Date.now()+ttl;if(_ttl<Date.now()){__privateGet(this,_cache).delete(key);return}entry.ttl=_ttl}};_cache=new WeakMap,__name(_MemoryCache,"MemoryCache");var MemoryCache=_MemoryCache;export{MemoryCache};
2
+ //# sourceMappingURL=chunk-IRBJOQ7G.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cache/MemoryCache.ts"],"sourcesContent":["import { CacheEntry, CacheProvider } from './CacheProvider';\n\nexport class MemoryCache extends CacheProvider {\n #cache = new Map<string, CacheEntry>();\n\n public async get<T>(key: string): Promise<CacheEntry<T> | undefined> {\n const entry = this.#cache.get(key);\n\n if (!entry) {\n return undefined;\n }\n\n if (entry.ttl && Date.now() > entry.ttl) {\n this.#cache.delete(key);\n return undefined;\n }\n\n return entry as CacheEntry<T>;\n }\n\n public async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n const entry: CacheEntry<T> = {\n value,\n ttl: ttl != null ? Date.now() + ttl : undefined\n };\n\n this.#cache.set(key, entry);\n }\n\n public async exists(key: string): Promise<boolean> {\n return this.#cache.has(key);\n }\n\n public async delete(key: string): Promise<void> {\n this.#cache.delete(key);\n }\n\n public async clear(): Promise<void> {\n this.#cache.clear();\n }\n\n public async expire(key: string, ttl: number): Promise<void> {\n const entry = this.#cache.get(key);\n\n if (!entry) return;\n\n const _ttl = Date.now() + ttl;\n\n // delete if _ttl is in the past\n if (_ttl < Date.now()) {\n this.#cache.delete(key);\n return;\n }\n\n entry.ttl = _ttl;\n }\n}"],"mappings":"yFAEO,IAAM,YAAN,cAA0B,aAAc,CAF/C,MAE+C,4BAC7C,OAAS,IAAI,IAEb,MAAa,IAAO,IAAiD,CACnE,IAAM,MAAQ,KAAK,OAAO,IAAI,GAAG,EAEjC,GAAK,MAIL,IAAI,MAAM,KAAO,KAAK,IAAI,EAAI,MAAM,IAAK,CACvC,KAAK,OAAO,OAAO,GAAG,EACtB,MACF,CAEA,OAAO,MACT,CAEA,MAAa,IAAO,IAAa,MAAU,IAA6B,CACtE,IAAM,MAAuB,CAC3B,MACA,IAAK,KAAO,KAAO,KAAK,IAAI,EAAI,IAAM,MACxC,EAEA,KAAK,OAAO,IAAI,IAAK,KAAK,CAC5B,CAEA,MAAa,OAAO,IAA+B,CACjD,OAAO,KAAK,OAAO,IAAI,GAAG,CAC5B,CAEA,MAAa,OAAO,IAA4B,CAC9C,KAAK,OAAO,OAAO,GAAG,CACxB,CAEA,MAAa,OAAuB,CAClC,KAAK,OAAO,MAAM,CACpB,CAEA,MAAa,OAAO,IAAa,IAA4B,CAC3D,IAAM,MAAQ,KAAK,OAAO,IAAI,GAAG,EAEjC,GAAI,CAAC,MAAO,OAEZ,IAAM,KAAO,KAAK,IAAI,EAAI,IAG1B,GAAI,KAAO,KAAK,IAAI,EAAG,CACrB,KAAK,OAAO,OAAO,GAAG,EACtB,MACF,CAEA,MAAM,IAAM,IACd,CACF","names":[]}
1
+ {"version":3,"sources":["../src/cache/MemoryCache.ts"],"sourcesContent":["import { CacheEntry, CacheProvider } from './CacheProvider';\n\nexport class MemoryCache extends CacheProvider {\n #cache = new Map<string, CacheEntry>();\n\n public async get<T>(key: string): Promise<CacheEntry<T> | undefined> {\n const entry = this.#cache.get(key);\n\n if (!entry) {\n return undefined;\n }\n\n if (entry.ttl && Date.now() > entry.ttl) {\n this.#cache.delete(key);\n return undefined;\n }\n\n return entry as CacheEntry<T>;\n }\n\n public async set<T>(key: string, value: T, ttl?: number): Promise<void> {\n const entry: CacheEntry<T> = {\n value,\n ttl: ttl != null ? Date.now() + ttl : undefined\n };\n\n this.#cache.set(key, entry);\n }\n\n public async exists(key: string): Promise<boolean> {\n return this.#cache.has(key);\n }\n\n public async delete(key: string): Promise<void> {\n this.#cache.delete(key);\n }\n\n public async clear(): Promise<void> {\n this.#cache.clear();\n }\n\n public async expire(key: string, ttl: number): Promise<void> {\n const entry = this.#cache.get(key);\n\n if (!entry) return;\n\n const _ttl = Date.now() + ttl;\n\n // delete if _ttl is in the past\n if (_ttl < Date.now()) {\n this.#cache.delete(key);\n return;\n }\n\n entry.ttl = _ttl;\n }\n}"],"mappings":"mHAAA,WAEa,aAAN,MAAM,qBAAoB,aAAc,CAAxC,kCACL,yBAAS,IAAI,KAEb,MAAa,IAAO,IAAiD,CACnE,IAAM,MAAQ,kBAAK,QAAO,IAAI,GAAG,EAEjC,GAAK,MAIL,IAAI,MAAM,KAAO,KAAK,IAAI,EAAI,MAAM,IAAK,CACvC,kBAAK,QAAO,OAAO,GAAG,EACtB,MACF,CAEA,OAAO,MACT,CAEA,MAAa,IAAO,IAAa,MAAU,IAA6B,CACtE,IAAM,MAAuB,CAC3B,MACA,IAAK,KAAO,KAAO,KAAK,IAAI,EAAI,IAAM,MACxC,EAEA,kBAAK,QAAO,IAAI,IAAK,KAAK,CAC5B,CAEA,MAAa,OAAO,IAA+B,CACjD,OAAO,kBAAK,QAAO,IAAI,GAAG,CAC5B,CAEA,MAAa,OAAO,IAA4B,CAC9C,kBAAK,QAAO,OAAO,GAAG,CACxB,CAEA,MAAa,OAAuB,CAClC,kBAAK,QAAO,MAAM,CACpB,CAEA,MAAa,OAAO,IAAa,IAA4B,CAC3D,IAAM,MAAQ,kBAAK,QAAO,IAAI,GAAG,EAEjC,GAAI,CAAC,MAAO,OAEZ,IAAM,KAAO,KAAK,IAAI,EAAI,IAG1B,GAAI,KAAO,KAAK,IAAI,EAAG,CACrB,kBAAK,QAAO,OAAO,GAAG,EACtB,MACF,CAEA,MAAM,IAAM,IACd,CACF,EArDE,mBAD6C,mCAAxC,IAAM,YAAN","names":[]}
@@ -0,0 +1,2 @@
1
+ import{__name}from"./chunk-35OSBS47.mjs";function devOnly_default({interaction,targetCommand,handlerData}){var _a,_b;if(!interaction.isAutocomplete()&&(_a=targetCommand.options)!=null&&_a.devOnly){if(interaction.inGuild()&&!handlerData.devGuildIds.includes(interaction.guildId))return interaction.reply({content:"\u274C This command can only be used inside development servers.",ephemeral:!0}),!0;let guildMember=(_b=interaction.guild)==null?void 0:_b.members.cache.get(interaction.user.id),memberRoles=guildMember==null?void 0:guildMember.roles.cache,hasDevRole=!1;if(memberRoles==null||memberRoles.forEach(role=>{handlerData.devRoleIds.includes(role.id)&&(hasDevRole=!0)}),!(handlerData.devUserIds.includes(interaction.user.id)||hasDevRole))return interaction.reply({content:"\u274C This command can only be used by developers.",ephemeral:!0}),!0}}__name(devOnly_default,"default");export{devOnly_default};
2
+ //# sourceMappingURL=chunk-JYUG7HAX.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/handlers/command-handler/validations/devOnly.ts"],"sourcesContent":["import type { BuiltInValidationParams } from '../typings';\n\nexport default function ({\n interaction,\n targetCommand,\n handlerData\n}: BuiltInValidationParams) {\n if (interaction.isAutocomplete()) return;\n\n if (targetCommand.options?.devOnly) {\n if (\n interaction.inGuild() &&\n !handlerData.devGuildIds.includes(interaction.guildId))\n {\n interaction.reply({\n content: '❌ This command can only be used inside development servers.',\n ephemeral: true\n });\n\n return true;\n }\n\n const guildMember = interaction.guild?.members.cache.get(\n interaction.user.id\n );\n const memberRoles = guildMember?.roles.cache;\n\n let hasDevRole = false;\n\n memberRoles?.forEach((role) => {\n if (handlerData.devRoleIds.includes(role.id)) {\n hasDevRole = true;\n }\n });\n\n const isDevUser =\n handlerData.devUserIds.includes(interaction.user.id) || hasDevRole;\n\n if (!isDevUser) {\n interaction.reply({\n content: '❌ This command can only be used by developers.',\n ephemeral: true\n });\n\n return true;\n }\n }\n}"],"mappings":"yCAEe,SAAR,gBAAkB,CACvB,YACA,cACA,WACF,EAA4B,CAC1B,GAAI,aAAY,eAAe,GAE3B,cAAc,SAAS,QAAS,CAClC,GACA,YAAY,QAAQ,GACpB,CAAC,YAAY,YAAY,SAAS,YAAY,OAAO,EAEnD,mBAAY,MAAM,CAChB,QAAS,mEACT,UAAW,EACb,CAAC,EAEM,GAMT,IAAM,YAHc,YAAY,OAAO,QAAQ,MAAM,IACnD,YAAY,KAAK,EACnB,GACiC,MAAM,MAEnC,WAAa,GAWjB,GATA,aAAa,QAAS,MAAS,CACzB,YAAY,WAAW,SAAS,KAAK,EAAE,IACzC,WAAa,GAEjB,CAAC,EAKG,EAFJ,YAAY,WAAW,SAAS,YAAY,KAAK,EAAE,GAAK,YAGtD,mBAAY,MAAM,CAChB,QAAS,sDACT,UAAW,EACb,CAAC,EAEM,EAEX,CACF,CA7CO","names":[]}
1
+ {"version":3,"sources":["../src/handlers/command-handler/validations/devOnly.ts"],"sourcesContent":["import type { BuiltInValidationParams } from '../typings';\n\nexport default function ({\n interaction,\n targetCommand,\n handlerData\n}: BuiltInValidationParams) {\n if (interaction.isAutocomplete()) return;\n\n if (targetCommand.options?.devOnly) {\n if (\n interaction.inGuild() &&\n !handlerData.devGuildIds.includes(interaction.guildId))\n {\n interaction.reply({\n content: '❌ This command can only be used inside development servers.',\n ephemeral: true\n });\n\n return true;\n }\n\n const guildMember = interaction.guild?.members.cache.get(\n interaction.user.id\n );\n const memberRoles = guildMember?.roles.cache;\n\n let hasDevRole = false;\n\n memberRoles?.forEach((role) => {\n if (handlerData.devRoleIds.includes(role.id)) {\n hasDevRole = true;\n }\n });\n\n const isDevUser =\n handlerData.devUserIds.includes(interaction.user.id) || hasDevRole;\n\n if (!isDevUser) {\n interaction.reply({\n content: '❌ This command can only be used by developers.',\n ephemeral: true\n });\n\n return true;\n }\n }\n}"],"mappings":"yCAEe,SAAR,gBAAkB,CACvB,YACA,cACA,WACF,EAA4B,CAN5B,UAOE,GAAI,aAAY,eAAe,IAE3B,iBAAc,UAAd,SAAuB,QAAS,CAClC,GACA,YAAY,QAAQ,GACpB,CAAC,YAAY,YAAY,SAAS,YAAY,OAAO,EAEnD,mBAAY,MAAM,CAChB,QAAS,mEACT,UAAW,EACb,CAAC,EAEM,GAGT,IAAM,aAAc,eAAY,QAAZ,eAAmB,QAAQ,MAAM,IACnD,YAAY,KAAK,IAEb,YAAc,qCAAa,MAAM,MAEnC,WAAa,GAWjB,GATA,+BAAa,QAAS,MAAS,CACzB,YAAY,WAAW,SAAS,KAAK,EAAE,IACzC,WAAa,GAEjB,GAKI,EAFJ,YAAY,WAAW,SAAS,YAAY,KAAK,EAAE,GAAK,YAGtD,mBAAY,MAAM,CAChB,QAAS,sDACT,UAAW,EACb,CAAC,EAEM,EAEX,CACF,CA7CO","names":[]}
@@ -0,0 +1,2 @@
1
+ import{ValidationHandler}from"./chunk-B5T552SB.mjs";import{loadCommandsWithRest}from"./chunk-DTKEXOZL.mjs";import{registerCommands}from"./chunk-73NFQRKA.mjs";import{validations_default}from"./chunk-6ZU6MOKA.mjs";import{EventHandler}from"./chunk-LQPVE73I.mjs";import{toFileURL}from"./chunk-ICJ4BBWI.mjs";import{clone}from"./chunk-MNPCM4QU.mjs";import{colors_default}from"./chunk-QXMWKQIO.mjs";import{CommandKitErrorCodes,isCommandKitError}from"./chunk-R4SWJR4N.mjs";import{getFilePaths}from"./chunk-RVGLG66X.mjs";import{MemoryCache}from"./chunk-IRBJOQ7G.mjs";import{CacheProvider}from"./chunk-SI3L34FF.mjs";import{__name,__privateAdd,__privateGet,__privateMethod,__privateSet,__publicField,__require}from"./chunk-35OSBS47.mjs";import{AsyncLocalStorage}from"node:async_hooks";import EventEmitter from"node:events";import{randomUUID}from"node:crypto";var _data,_CommandKitEnvironment=class _CommandKitEnvironment{constructor(commandkit){this.commandkit=commandkit;__privateAdd(this,_data,{executionError:null,type:null,variables:new Map,deferredFunctions:new Map,marker:"",markStart:0,markEnd:0})}getExecutionError(){return __privateGet(this,_data).executionError}setExecutionError(error){if(__privateGet(this,_data).executionError)throw new Error("Execution error already set.");__privateGet(this,_data).executionError=error}getType(){let type=__privateGet(this,_data).type;if(!type)throw new Error("Environment type not set.");return type}setType(type){__privateGet(this,_data).type=type}get variables(){return __privateGet(this,_data).variables}registerDeferredFunction(fn){let id=randomUUID();return __privateGet(this,_data).deferredFunctions.set(id,fn),id}clearDeferredFunction(id){__privateGet(this,_data).deferredFunctions.delete(id)}async runDeferredFunctions(){for(let[id,fn]of __privateGet(this,_data).deferredFunctions)try{await fn(this)}catch(e){this.commandkit.emit("unhandledDeferredFunctionRejection",e)}finally{this.clearDeferredFunction(id)}}clearAllDeferredFunctions(){__privateGet(this,_data).deferredFunctions.clear()}markStart(marker){__privateGet(this,_data).marker=marker,__privateGet(this,_data).markStart=performance.now()}markEnd(){__privateGet(this,_data).markEnd||(__privateGet(this,_data).markEnd=performance.now())}getMarker(){return __privateGet(this,_data).marker}getExecutionTime(){return Math.abs(__privateGet(this,_data).markEnd-__privateGet(this,_data).markStart)}};_data=new WeakMap,__name(_CommandKitEnvironment,"CommandKitEnvironment");var CommandKitEnvironment=_CommandKitEnvironment,CommandKitEnvironmentType=(CommandKitEnvironmentType2=>(CommandKitEnvironmentType2.CommandHandler="COMMAND_HANDLER",CommandKitEnvironmentType2))(CommandKitEnvironmentType||{});function after(fn){let env=getContext();if(!env)throw new Error("after must be called inside commandkit handler.");return env.registerDeferredFunction(fn)}__name(after,"after");function cancelAfter(id){let env=getContext();if(!env)throw new Error("cancelAfter must be called inside commandkit handler.");env.clearDeferredFunction(id)}__name(cancelAfter,"cancelAfter");var _data2,_CommandHandler_instances,buildCommands_fn,buildBuiltInValidations_fn,commandFinalizer_fn,interactionHandler_fn,_CommandHandler=class _CommandHandler{constructor({...options}){__privateAdd(this,_CommandHandler_instances);__privateAdd(this,_data2);__privateSet(this,_data2,{...options,builtInValidations:[],commands:[]})}async init(){await __privateMethod(this,_CommandHandler_instances,buildCommands_fn).call(this),__privateMethod(this,_CommandHandler_instances,buildBuiltInValidations_fn).call(this);let devOnlyCommands=__privateGet(this,_data2).commands.filter(cmd=>{var _a;return(_a=cmd.options)==null?void 0:_a.devOnly});devOnlyCommands.length&&!__privateGet(this,_data2).devGuildIds.length&&process.emitWarning(colors_default.yellow('You have commands marked as "devOnly", but "devGuildIds" have not been set.')),devOnlyCommands.length&&!__privateGet(this,_data2).devUserIds.length&&!__privateGet(this,_data2).devRoleIds.length&&process.emitWarning(colors_default.yellow('You have commands marked as "devOnly", but "devUserIds" or "devRoleIds" have not been set.')),__privateGet(this,_data2).bulkRegister?await loadCommandsWithRest({client:__privateGet(this,_data2).client,devGuildIds:__privateGet(this,_data2).devGuildIds,commands:__privateGet(this,_data2).commands}):await registerCommands({client:__privateGet(this,_data2).client,devGuildIds:__privateGet(this,_data2).devGuildIds,commands:__privateGet(this,_data2).commands}),this.handleCommands()}handleCommands(){__privateGet(this,_data2).client.on("interactionCreate",interaction=>{let env=new CommandKitEnvironment(__privateGet(this,_data2).commandkitInstance);return env.setType("COMMAND_HANDLER"),makeContextAwareFunction(env,__privateMethod(this,_CommandHandler_instances,interactionHandler_fn).bind(this),__privateMethod(this,_CommandHandler_instances,commandFinalizer_fn).bind(this))(interaction)})}get commands(){return __privateGet(this,_data2).commands}async reloadCommands(type){if(!__privateGet(this,_data2).commandsPath)throw new Error(colors_default.red('Cannot reload commands as "commandsPath" was not provided when instantiating CommandKit.'));__privateGet(this,_data2).commands=[],await __privateMethod(this,_CommandHandler_instances,buildCommands_fn).call(this),__privateGet(this,_data2).bulkRegister?await loadCommandsWithRest({client:__privateGet(this,_data2).client,devGuildIds:__privateGet(this,_data2).devGuildIds,commands:__privateGet(this,_data2).commands,reloading:!0,type}):await registerCommands({client:__privateGet(this,_data2).client,devGuildIds:__privateGet(this,_data2).devGuildIds,commands:__privateGet(this,_data2).commands,reloading:!0,type})}};_data2=new WeakMap,_CommandHandler_instances=new WeakSet,buildCommands_fn=__name(async function(){var _a;let allowedExtensions=/\.(js|mjs|cjs|ts)$/i,commandFilePaths=(await getFilePaths(__privateGet(this,_data2).commandsPath,!0)).filter(path=>allowedExtensions.test(path));for(let commandFilePath of commandFilePaths){let importedObj=await import(`${toFileURL(commandFilePath)}?t=${Date.now()}`),commandObj=clone(importedObj);typeof module<"u"&&typeof __require<"u"&&delete __require.cache[__require.resolve(commandFilePath)];let compactFilePath=commandFilePath.split(process.cwd())[1]||commandFilePath;if(commandObj.default&&(commandObj=commandObj.default),importedObj.default?commandObj.data=importedObj.default.data:commandObj.data=importedObj.data,!commandObj.data){process.emitWarning(colors_default.yellow(`Ignoring: Command file ${compactFilePath} does not export "data".`));continue}if(!commandObj.data.name){process.emitWarning(colors_default.yellow(`Ignoring: Command file ${compactFilePath} does not export "data.name".`));continue}if(!commandObj.run){process.emitWarning(colors_default.yellow(`Ignoring: Command file ${commandObj.data.name} does not export "run".`));continue}if(typeof commandObj.run!="function"){process.emitWarning(colors_default.yellow(`Ignoring: Command file ${commandObj.data.name} does not export "run" as a function.`));continue}commandObj.filePath=commandFilePath;let commandCategory=((_a=commandFilePath.split(__privateGet(this,_data2).commandsPath)[1])==null?void 0:_a.replace(/\\\\|\\/g,"/").split("/")[1])||null;commandCategory&&allowedExtensions.test(commandCategory)?commandObj.category=null:commandObj.category=commandCategory,__privateGet(this,_data2).commands.push(commandObj)}},"#buildCommands"),buildBuiltInValidations_fn=__name(function(){for(let builtInValidationFunction of validations_default)__privateGet(this,_data2).builtInValidations.push(builtInValidationFunction)},"#buildBuiltInValidations"),commandFinalizer_fn=__name(async function(){let env=useEnvironment();await env.runDeferredFunctions(),env.clearAllDeferredFunctions()},"#commandFinalizer"),interactionHandler_fn=__name(async function(interaction){if(!interaction.isChatInputCommand()&&!interaction.isContextMenuCommand()&&!interaction.isAutocomplete())return;let isAutocomplete=interaction.isAutocomplete(),targetCommand=__privateGet(this,_data2).commands.find(cmd=>cmd.data.name===interaction.commandName);if(!targetCommand)return;let env=useEnvironment();env.variables.set("interaction",interaction);let{data,options,run,autocomplete,...rest}=targetCommand;return isAutocomplete&&!autocomplete?void 0:__name(async()=>{let commandObj={data:targetCommand.data,options:targetCommand.options,...rest};if(__privateGet(this,_data2).validationHandler){let canRun2=!0;for(let validationFunction of __privateGet(this,_data2).validationHandler.validations)if(await validationFunction({interaction,commandObj,client:__privateGet(this,_data2).client,handler:__privateGet(this,_data2).commandkitInstance})){canRun2=!1;break}if(!canRun2)return}let canRun=!0;if(!__privateGet(this,_data2).skipBuiltInValidations){for(let validation of __privateGet(this,_data2).builtInValidations)if(validation({targetCommand,interaction,handlerData:__privateGet(this,_data2)})){canRun=!1;break}}if(!canRun)return;let command=targetCommand[isAutocomplete?"autocomplete":"run"],context2={interaction,client:__privateGet(this,_data2).client,handler:__privateGet(this,_data2).commandkitInstance};if(!__privateGet(this,_data2).commandkitInstance.isDebuggingCommands())return command(context2);after(env2=>{let error=env2.getExecutionError(),marker=env2.getMarker(),time=`${env2.getExecutionTime().toFixed(2)}ms`;if(error){console.error(colors_default.red(`[${marker} - ${time}] Error executing command: ${error}`));return}console.log(colors_default.green(`[${marker} - ${time}] Command executed successfully`))});try{return env.markStart(interaction.commandName),await command(context2)}finally{env.markEnd()}},"executor")()},"#interactionHandler"),__name(_CommandHandler,"CommandHandler");var CommandHandler=_CommandHandler;var _data3,_CommandKit_instances,init_fn,_CommandKit=class _CommandKit extends EventEmitter{constructor(options){if(_CommandKit.instance&&process.emitWarning("CommandKit instance already exists. Having multiple instance in same project is discouraged and it may lead to unexpected behavior.",{code:"MultiInstanceWarning"}),!options.client)throw new Error(colors_default.red('"client" is required when instantiating CommandKit.'));if(options.validationsPath&&!options.commandsPath)throw new Error(colors_default.red('"commandsPath" is required when "validationsPath" is set.'));super();__privateAdd(this,_CommandKit_instances);__privateAdd(this,_data3);options.debugCommands??=process.env.NODE_ENV!=="production",options.cacheProvider!==null&&(!options.cacheProvider||!(options.cacheProvider instanceof CacheProvider))&&(options.cacheProvider=new MemoryCache),__privateSet(this,_data3,options),__privateMethod(this,_CommandKit_instances,init_fn).call(this).then(()=>{this.incrementClientListenersCount()}),_CommandKit.instance||(_CommandKit.instance=this)}getCacheProvider(){return __privateGet(this,_data3).cacheProvider??null}isDebuggingCommands(){return __privateGet(this,_data3).debugCommands||!1}get client(){return __privateGet(this,_data3).client}get commandHandler(){return __privateGet(this,_data3).commandHandler}async reloadCommands(type){__privateGet(this,_data3).commandHandler&&await __privateGet(this,_data3).commandHandler.reloadCommands(type)}async reloadEvents(){__privateGet(this,_data3).eventHandler&&await __privateGet(this,_data3).eventHandler.reloadEvents(__privateGet(this,_data3).commandHandler)}async reloadValidations(){__privateGet(this,_data3).validationHandler&&await __privateGet(this,_data3).validationHandler.reloadValidations()}get commands(){return __privateGet(this,_data3).commandHandler?__privateGet(this,_data3).commandHandler.commands.map(cmd=>{let{run,autocomplete,...command}=cmd;return command}):[]}get commandsPath(){return __privateGet(this,_data3).commandsPath}get eventsPath(){return __privateGet(this,_data3).eventsPath}get validationsPath(){return __privateGet(this,_data3).validationsPath}get devUserIds(){return __privateGet(this,_data3).devUserIds||[]}get devGuildIds(){return __privateGet(this,_data3).devGuildIds||[]}get devRoleIds(){return __privateGet(this,_data3).devRoleIds||[]}incrementClientListenersCount(){__privateGet(this,_data3).client.setMaxListeners(__privateGet(this,_data3).client.getMaxListeners()+1)}decrementClientListenersCount(){__privateGet(this,_data3).client.setMaxListeners(__privateGet(this,_data3).client.getMaxListeners()-1)}};_data3=new WeakMap,_CommandKit_instances=new WeakSet,init_fn=__name(async function(){if(__privateGet(this,_data3).eventsPath){let eventHandler=new EventHandler({client:__privateGet(this,_data3).client,eventsPath:__privateGet(this,_data3).eventsPath,commandKitInstance:this});await eventHandler.init(),__privateGet(this,_data3).eventHandler=eventHandler}if(__privateGet(this,_data3).validationsPath){let validationHandler=new ValidationHandler({validationsPath:__privateGet(this,_data3).validationsPath});await validationHandler.init(),__privateGet(this,_data3).validationHandler=validationHandler}if(__privateGet(this,_data3).commandsPath){let commandHandler=new CommandHandler({client:__privateGet(this,_data3).client,commandsPath:__privateGet(this,_data3).commandsPath,devGuildIds:__privateGet(this,_data3).devGuildIds||[],devUserIds:__privateGet(this,_data3).devUserIds||[],devRoleIds:__privateGet(this,_data3).devRoleIds||[],validationHandler:__privateGet(this,_data3).validationHandler,skipBuiltInValidations:__privateGet(this,_data3).skipBuiltInValidations||!1,commandkitInstance:this,bulkRegister:__privateGet(this,_data3).bulkRegister||!1});await commandHandler.init(),__privateGet(this,_data3).commandHandler=commandHandler}},"#init"),__name(_CommandKit,"CommandKit"),__publicField(_CommandKit,"instance");var CommandKit=_CommandKit;var context=new AsyncLocalStorage;function makeContextAwareFunction(env,fn,finalizer){return __name((...args)=>context.run(env,async()=>{try{return await fn(...args)}catch(e){if(isCommandKitError(e)){let code=Reflect.get(e,"code"),interaction=env.variables.get("interaction");if(!interaction)return;switch(code){case CommandKitErrorCodes.GuildOnlyException:{interaction.isRepliable()&&await interaction.reply({content:"This command is only available in guilds.",ephemeral:!0});return}case CommandKitErrorCodes.DMOnlyException:{interaction.isRepliable()&&await interaction.reply({content:"This command is only available in DMs.",ephemeral:!0});return}}return}env.setExecutionError(e)}finally{if(typeof finalizer=="function")try{await finalizer(...args)}catch{}}}),"_fn")}__name(makeContextAwareFunction,"makeContextAwareFunction");function getCommandKit(strict=!1){var _a;let kit=((_a=context.getStore())==null?void 0:_a.commandkit)??CommandKit.instance;if(!kit&&strict)throw new Error("CommandKit instance not found.");return kit}__name(getCommandKit,"getCommandKit");function getContext(){return context.getStore()}__name(getContext,"getContext");function useEnvironment(){let ctx=context.getStore();if(!ctx)throw new Error("No commandkit environment found. Please make sure you are inside commandkit handler.");return ctx}__name(useEnvironment,"useEnvironment");function guildOnly(){let interaction=useEnvironment().variables.get("interaction");if(!interaction)throw new Error("No interaction found in environment.");if(!interaction.guild){let error=new Error("This command is only available in guilds.");throw Reflect.set(error,"code",CommandKitErrorCodes.GuildOnlyException),error}}__name(guildOnly,"guildOnly");function dmOnly(){let interaction=useEnvironment().variables.get("interaction");if(!interaction)throw new Error("No interaction found in environment.");if(interaction.guild){let error=new Error("This command is only available in DMs.");throw Reflect.set(error,"code",CommandKitErrorCodes.DMOnlyException),error}}__name(dmOnly,"dmOnly");export{makeContextAwareFunction,getCommandKit,getContext,useEnvironment,guildOnly,dmOnly,CommandKitEnvironment,CommandKitEnvironmentType,after,cancelAfter,CommandHandler,CommandKit};
2
+ //# sourceMappingURL=chunk-KAJRRZVI.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context/async-context.ts","../src/CommandKit.ts","../src/context/environment.ts","../src/handlers/command-handler/CommandHandler.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { CommandKitEnvironment } from './environment';\nimport { CommandKitErrorCodes, isCommandKitError } from '../utils/error-codes';\nimport { Interaction } from 'discord.js';\nimport { CommandKit } from '../CommandKit';\n\nconst context = new AsyncLocalStorage<CommandKitEnvironment>();\n\nexport type GenericFunction<A extends any[] = any[]> = (...args: A) => any;\n\n/**\n * Returns a context-aware version of the given function.\n * @param env - The commandkit environment data.\n * @param fn - The target function.\n * @param finalizer - An optional finalizer function to run after the target function. This function will be context-aware.\n * @internal\n */\nexport function makeContextAwareFunction<\n R extends GenericFunction,\n F extends GenericFunction>(\nenv: CommandKitEnvironment, fn: R, finalizer?: F): R {\n const _fn = (...args: any[]) => {\n return context.run(env, async () => {\n try {\n // execute the target function\n const result = await fn(...args);\n\n return result;\n } catch (e) {\n // set the error in the environment data\n if (isCommandKitError(e)) {\n const code = Reflect.get(e, 'code');\n const interaction = env.variables.get('interaction') as Interaction;\n if (!interaction) return;\n\n switch (code) {\n case CommandKitErrorCodes.GuildOnlyException:{\n if (interaction.isRepliable()) {\n await interaction.reply({\n content: 'This command is only available in guilds.',\n ephemeral: true\n });\n }\n return;\n }\n case CommandKitErrorCodes.DMOnlyException:{\n if (interaction.isRepliable()) {\n await interaction.reply({\n content: 'This command is only available in DMs.',\n ephemeral: true\n });\n }\n return;\n }\n }\n\n return;\n }\n\n env.setExecutionError(e as Error);\n } finally {\n if (typeof finalizer === 'function') {\n // execute the finalizer function\n try {\n await finalizer(...args);\n } catch {\n\n // no-op\n }}\n }\n });\n };\n\n return _fn as R;\n}\n\n/**\n * Retrieves commandkit\n * @private\n * @internal\n */\nexport function getCommandKit(): CommandKit | undefined;\nexport function getCommandKit(strict: true): CommandKit;\nexport function getCommandKit(strict: false): CommandKit | undefined;\nexport function getCommandKit(strict = false): CommandKit | undefined {\n const kit = context.getStore()?.commandkit ?? CommandKit.instance;\n\n if (!kit && strict) {\n throw new Error('CommandKit instance not found.');\n }\n\n return kit;\n}\n\n/**\n * Get the current commandkit context.\n * @internal\n */\nexport function getContext(): CommandKitEnvironment | void {\n const ctx = context.getStore();\n return ctx;\n}\n\n/**\n * Use current commandkit context. Throws an error if no context is found.\n */\nexport function useEnvironment(): CommandKitEnvironment {\n const ctx = context.getStore();\n if (!ctx) {\n throw new Error(\n 'No commandkit environment found. Please make sure you are inside commandkit handler.'\n );\n }\n\n return ctx;\n}\n\n/**\n * Ensures the command is only available in guilds.\n * Note: do not wrap this function in a try/catch block.\n */\nexport function guildOnly() {\n const env = useEnvironment();\n const interaction: Interaction = env.variables.get('interaction');\n\n if (!interaction) {\n throw new Error('No interaction found in environment.');\n }\n\n if (!interaction.guild) {\n const error = new Error('This command is only available in guilds.');\n Reflect.set(error, 'code', CommandKitErrorCodes.GuildOnlyException);\n\n throw error;\n }\n}\n\n/**\n * Ensures the command is only available in DMs.\n * Note: do not wrap this function in a try/catch block.\n */\nexport function dmOnly() {\n const env = useEnvironment();\n const interaction: Interaction = env.variables.get('interaction');\n\n if (!interaction) {\n throw new Error('No interaction found in environment.');\n }\n\n if (interaction.guild) {\n const error = new Error('This command is only available in DMs.');\n Reflect.set(error, 'code', CommandKitErrorCodes.DMOnlyException);\n\n throw error;\n }\n}","import EventEmitter from 'node:events';\nimport { CommandHandler, EventHandler, ValidationHandler } from './handlers';\nimport type {\n CommandKitData,\n CommandKitOptions,\n CommandObject,\n ReloadOptions } from\n'./types';\nimport colors from './utils/colors';\nimport { CacheProvider } from './cache/CacheProvider';\nimport { MemoryCache } from './cache/MemoryCache';\n\nexport class CommandKit extends EventEmitter {\n #data: CommandKitData;\n\n static instance: CommandKit | undefined = undefined;\n\n /**\n * Create a new command and event handler with CommandKit.\n *\n * @param options - The default CommandKit configuration.\n * @see {@link https://commandkit.dev/guide/commandkit-setup}\n */\n constructor(options: CommandKitOptions) {\n if (CommandKit.instance) {\n process.emitWarning(\n 'CommandKit instance already exists. Having multiple instance in same project is discouraged and it may lead to unexpected behavior.',\n {\n code: 'MultiInstanceWarning'\n }\n );\n }\n\n if (!options.client) {\n throw new Error(\n colors.red('\"client\" is required when instantiating CommandKit.')\n );\n }\n\n if (options.validationsPath && !options.commandsPath) {\n throw new Error(\n colors.red('\"commandsPath\" is required when \"validationsPath\" is set.')\n );\n }\n\n super();\n\n options.debugCommands ??= process.env.NODE_ENV !== 'production';\n\n if (\n options.cacheProvider !== null && (\n !options.cacheProvider ||\n !(options.cacheProvider instanceof CacheProvider)))\n {\n options.cacheProvider = new MemoryCache();\n }\n\n this.#data = options;\n\n this.#init().then(() => {\n // Increment client listeners count, as commandkit registers internal event listeners.\n this.incrementClientListenersCount();\n });\n\n if (!CommandKit.instance) {\n CommandKit.instance = this;\n }\n }\n\n /**\n * Resolves the current cache provider.\n */\n getCacheProvider(): CacheProvider | null {\n const provider = this.#data.cacheProvider;\n return provider ?? null;\n }\n\n /**\n * Whether or not to debug the command handler.\n */\n isDebuggingCommands() {\n return this.#data.debugCommands || false;\n }\n\n /**\n * Get the client attached to this CommandKit instance.\n */\n get client() {\n return this.#data.client;\n }\n\n /**\n * Get command handler instance.\n */\n get commandHandler() {\n return this.#data.commandHandler;\n }\n\n /**\n * (Private) Initialize CommandKit.\n */\n async #init() {\n // <!-- Setup event handler -->\n if (this.#data.eventsPath) {\n const eventHandler = new EventHandler({\n client: this.#data.client,\n eventsPath: this.#data.eventsPath,\n commandKitInstance: this\n });\n\n await eventHandler.init();\n\n this.#data.eventHandler = eventHandler;\n }\n\n // <!-- Setup validation handler -->\n if (this.#data.validationsPath) {\n const validationHandler = new ValidationHandler({\n validationsPath: this.#data.validationsPath\n });\n\n await validationHandler.init();\n\n this.#data.validationHandler = validationHandler;\n }\n\n // <!-- Setup command handler -->\n if (this.#data.commandsPath) {\n const commandHandler = new CommandHandler({\n client: this.#data.client,\n commandsPath: this.#data.commandsPath,\n devGuildIds: this.#data.devGuildIds || [],\n devUserIds: this.#data.devUserIds || [],\n devRoleIds: this.#data.devRoleIds || [],\n validationHandler: this.#data.validationHandler,\n skipBuiltInValidations: this.#data.skipBuiltInValidations || false,\n commandkitInstance: this,\n bulkRegister: this.#data.bulkRegister || false\n });\n\n await commandHandler.init();\n\n this.#data.commandHandler = commandHandler;\n }\n }\n\n /**\n * Updates application commands with the latest from \"commandsPath\".\n */\n async reloadCommands(type?: ReloadOptions) {\n if (!this.#data.commandHandler) return;\n await this.#data.commandHandler.reloadCommands(type);\n }\n\n /**\n * Updates application events with the latest from \"eventsPath\".\n */\n async reloadEvents() {\n if (!this.#data.eventHandler) return;\n await this.#data.eventHandler.reloadEvents(this.#data.commandHandler);\n }\n\n /**\n * Updates application command validations with the latest from \"validationsPath\".\n */\n async reloadValidations() {\n if (!this.#data.validationHandler) return;\n await this.#data.validationHandler.reloadValidations();\n }\n\n /**\n * @returns An array of objects of all the commands that CommandKit is handling.\n */\n get commands(): CommandObject[] {\n if (!this.#data.commandHandler) {\n return [];\n }\n\n const commands = this.#data.commandHandler.commands.map((cmd) => {\n const { run, autocomplete, ...command } = cmd;\n return command;\n });\n\n return commands;\n }\n\n /**\n * @returns The path to the commands folder which was set when instantiating CommandKit.\n */\n get commandsPath(): string | undefined {\n return this.#data.commandsPath;\n }\n\n /**\n * @returns The path to the events folder which was set when instantiating CommandKit.\n */\n get eventsPath(): string | undefined {\n return this.#data.eventsPath;\n }\n\n /**\n * @returns The path to the validations folder which was set when instantiating CommandKit.\n */\n get validationsPath(): string | undefined {\n return this.#data.validationsPath;\n }\n\n /**\n * @returns An array of all the developer user IDs which was set when instantiating CommandKit.\n */\n get devUserIds(): string[] {\n return this.#data.devUserIds || [];\n }\n\n /**\n * @returns An array of all the developer guild IDs which was set when instantiating CommandKit.\n */\n get devGuildIds(): string[] {\n return this.#data.devGuildIds || [];\n }\n\n /**\n * @returns An array of all the developer role IDs which was set when instantiating CommandKit.\n */\n get devRoleIds(): string[] {\n return this.#data.devRoleIds || [];\n }\n\n /**\n * Increment the client listeners count.\n */\n incrementClientListenersCount() {\n this.#data.client.setMaxListeners(this.#data.client.getMaxListeners() + 1);\n }\n\n /**\n * Decrement the client listeners count.\n */\n decrementClientListenersCount() {\n this.#data.client.setMaxListeners(this.#data.client.getMaxListeners() - 1);\n }\n}","import { randomUUID } from 'node:crypto';\nimport { CommandKit } from '../CommandKit';\nimport { GenericFunction, getContext } from './async-context';\n\nexport interface CommandKitEnvironmentInternalData {\n executionError: Error | null;\n type: CommandKitEnvironmentType | null;\n variables: Map<string, any>;\n deferredFunctions: Map<string, GenericFunction<[CommandKitEnvironment]>>;\n marker: string;\n markStart: number;\n markEnd: number;\n}\n\nexport class CommandKitEnvironment {\n #data: CommandKitEnvironmentInternalData = {\n executionError: null,\n type: null,\n variables: new Map(),\n deferredFunctions: new Map(),\n marker: '',\n markStart: 0,\n markEnd: 0\n };\n\n /**\n * Creates the commandkit execution environment.\n * @param commandkit - The commandkit instance.\n */\n public constructor(public readonly commandkit: CommandKit) {}\n\n /**\n * Get the execution error.\n * @internal\n */\n public getExecutionError(): Error | null {\n return this.#data.executionError;\n }\n\n /**\n * Set the execution error.\n * @param error - The error to set.\n * @internal\n */\n public setExecutionError(error: Error): void {\n if (this.#data.executionError) {\n throw new Error('Execution error already set.');\n }\n\n this.#data.executionError = error;\n }\n\n /**\n * Get the environment type.\n */\n public getType(): CommandKitEnvironmentType {\n const type = this.#data.type;\n\n if (!type) {\n throw new Error('Environment type not set.');\n }\n\n return type;\n }\n\n /**\n * Set the environment type.\n * @param type - The environment type to set.\n * @internal\n */\n public setType(type: CommandKitEnvironmentType): void {\n this.#data.type = type;\n }\n\n /**\n * The variables store for this environment.\n */\n public get variables(): Map<string, any> {\n return this.#data.variables;\n }\n\n /**\n * Register a deferred function.\n * @param fn - The deferred function to register.\n * @returns The deferred function id.\n * @internal\n */\n public registerDeferredFunction(\n fn: GenericFunction<[CommandKitEnvironment]>)\n : string {\n const id = randomUUID();\n this.#data.deferredFunctions.set(id, fn);\n return id;\n }\n\n /**\n * Clear a deferred function by id.\n * @param id - The deferred function id to clear.\n * @internal\n */\n public clearDeferredFunction(id: string): void {\n this.#data.deferredFunctions.delete(id);\n }\n\n /**\n * Run all deferred functions sequentially.\n * @internal\n */\n public async runDeferredFunctions(): Promise<void> {\n for (const [id, fn] of this.#data.deferredFunctions) {\n try {\n await fn(this);\n } catch (e) {\n this.commandkit.emit('unhandledDeferredFunctionRejection', e);\n } finally {\n this.clearDeferredFunction(id);\n }\n }\n }\n\n /**\n * Clear all deferred functions.\n * @internal\n */\n public clearAllDeferredFunctions(): void {\n this.#data.deferredFunctions.clear();\n }\n\n /**\n * Mark the start of a command execution.\n * @param marker - The marker to set.\n * @internal\n */\n public markStart(marker: string): void {\n this.#data.marker = marker;\n this.#data.markStart = performance.now();\n }\n\n /**\n * Mark the end of a command execution.\n * @internal\n */\n public markEnd(): void {\n if (!this.#data.markEnd) this.#data.markEnd = performance.now();\n }\n\n /**\n * Get the marker.\n * @internal\n */\n public getMarker(): string {\n return this.#data.marker;\n }\n\n /**\n * Get the execution time in milliseconds.\n * @internal\n */\n public getExecutionTime(): number {\n return Math.abs(this.#data.markEnd - this.#data.markStart);\n }\n}\n\nexport enum CommandKitEnvironmentType {\n CommandHandler = 'COMMAND_HANDLER',\n}\n\n/**\n * Runs the given function after the current handler has finished executing.\n * @param fn The function to run after the current handler.\n * @returns The deferred function id. This can be used to cancel the deferred function.\n */\nexport function after(fn: GenericFunction<[CommandKitEnvironment]>): string {\n const env = getContext();\n\n if (!env) {\n throw new Error('after must be called inside commandkit handler.');\n }\n\n return env.registerDeferredFunction(fn);\n}\n\n/**\n * Cancels a deferred function registered with `after`.\n * @param id The deferred function id to cancel.\n */\nexport function cancelAfter(id: string): void {\n const env = getContext();\n\n if (!env) {\n throw new Error('cancelAfter must be called inside commandkit handler.');\n }\n\n env.clearDeferredFunction(id);\n}","import { CacheType, Interaction } from 'discord.js';\nimport type {\n CommandData,\n CommandFileObject,\n ReloadOptions } from\n'../../types';\nimport { clone } from '../../utils/clone';\nimport colors from '../../utils/colors';\nimport { getFilePaths } from '../../utils/get-paths';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport loadCommandsWithRest from './functions/loadCommandsWithRest';\nimport registerCommands from './functions/registerCommands';\nimport type {\n CommandHandlerData,\n CommandHandlerOptions,\n CommandKitInteraction } from\n'./typings';\nimport builtInValidationsFunctions from './validations';\nimport {\n makeContextAwareFunction,\n useEnvironment } from\n'../../context/async-context';\nimport {\n after,\n CommandKitEnvironment,\n CommandKitEnvironmentType } from\n'../../context/environment';\n\nexport interface hCommandContext {\n interaction: CommandKitInteraction;\n command: CommandData;\n}\n\n/**\n * A handler for client application commands.\n */\nexport class CommandHandler {\n #data: CommandHandlerData;\n\n constructor({ ...options }: CommandHandlerOptions) {\n this.#data = {\n ...options,\n builtInValidations: [],\n commands: []\n };\n }\n\n async init() {\n await this.#buildCommands();\n\n this.#buildBuiltInValidations();\n\n const devOnlyCommands = this.#data.commands.filter(\n (cmd) => cmd.options?.devOnly\n );\n\n if (devOnlyCommands.length && !this.#data.devGuildIds.length) {\n process.emitWarning(\n colors.yellow(\n 'You have commands marked as \"devOnly\", but \"devGuildIds\" have not been set.'\n )\n );\n }\n\n if (\n devOnlyCommands.length &&\n !this.#data.devUserIds.length &&\n !this.#data.devRoleIds.length)\n {\n process.emitWarning(\n colors.yellow(\n 'You have commands marked as \"devOnly\", but \"devUserIds\" or \"devRoleIds\" have not been set.'\n )\n );\n }\n\n if (this.#data.bulkRegister) {\n await loadCommandsWithRest({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands\n });\n } else {\n await registerCommands({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands\n });\n }\n\n this.handleCommands();\n }\n\n async #buildCommands() {\n const allowedExtensions = /\\.(js|mjs|cjs|ts)$/i;\n const paths = await getFilePaths(this.#data.commandsPath, true);\n\n const commandFilePaths = paths.filter((path) =>\n allowedExtensions.test(path)\n );\n\n for (const commandFilePath of commandFilePaths) {\n const modulePath = toFileURL(commandFilePath);\n\n const importedObj = await import(`${modulePath}?t=${Date.now()}`);\n let commandObj: CommandFileObject = clone(importedObj); // Make commandObj extensible\n\n // If it's CommonJS, invalidate the import cache\n if (typeof module !== 'undefined' && typeof require !== 'undefined') {\n delete require.cache[require.resolve(commandFilePath)];\n }\n\n const compactFilePath =\n commandFilePath.split(process.cwd())[1] || commandFilePath;\n\n if (commandObj.default)\n commandObj = commandObj.default as CommandFileObject;\n\n // Ensure builder properties\n if (importedObj.default) {\n commandObj.data = importedObj.default.data;\n } else {\n commandObj.data = importedObj.data;\n }\n\n if (!commandObj.data) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${compactFilePath} does not export \"data\".`\n )\n );\n continue;\n }\n\n if (!commandObj.data.name) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${compactFilePath} does not export \"data.name\".`\n )\n );\n continue;\n }\n\n if (!commandObj.run) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${commandObj.data.name} does not export \"run\".`\n )\n );\n continue;\n }\n\n if (typeof commandObj.run !== 'function') {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${commandObj.data.name} does not export \"run\" as a function.`\n )\n );\n continue;\n }\n\n commandObj.filePath = commandFilePath;\n\n let commandCategory =\n commandFilePath.\n split(this.#data.commandsPath)[1]?.\n replace(/\\\\\\\\|\\\\/g, '/').\n split('/')[1] || null;\n\n if (commandCategory && allowedExtensions.test(commandCategory)) {\n commandObj.category = null;\n } else {\n commandObj.category = commandCategory;\n }\n\n this.#data.commands.push(commandObj);\n }\n }\n\n #buildBuiltInValidations() {\n for (const builtInValidationFunction of builtInValidationsFunctions) {\n this.#data.builtInValidations.push(builtInValidationFunction);\n }\n }\n\n async #commandFinalizer() {\n const env = useEnvironment();\n\n await env.runDeferredFunctions();\n\n // Clear all deferred functions if we somehow missed them\n env.clearAllDeferredFunctions();\n }\n\n async #interactionHandler(interaction: Interaction<CacheType>) {\n if (\n !interaction.isChatInputCommand() &&\n !interaction.isContextMenuCommand() &&\n !interaction.isAutocomplete())\n\n return;\n\n const isAutocomplete = interaction.isAutocomplete();\n\n const targetCommand = this.#data.commands.find(\n (cmd) => cmd.data.name === interaction.commandName\n );\n\n if (!targetCommand) return;\n\n const env = useEnvironment();\n\n env.variables.set('interaction', interaction);\n\n const { data, options, run, autocomplete, ...rest } = targetCommand;\n\n // Skip if autocomplete handler is not defined\n if (isAutocomplete && !autocomplete) return;\n\n const executor = async () => {\n const commandObj = {\n data: targetCommand.data,\n options: targetCommand.options,\n ...rest\n };\n\n if (this.#data.validationHandler) {\n let canRun = true;\n\n for (const validationFunction of this.#data.validationHandler.\n validations) {\n const stopValidationLoop = await validationFunction({\n interaction,\n commandObj,\n client: this.#data.client,\n handler: this.#data.commandkitInstance\n });\n\n if (stopValidationLoop) {\n canRun = false;\n break;\n }\n }\n\n if (!canRun) return;\n }\n\n let canRun = true;\n\n // If custom validations pass and !skipBuiltInValidations, run built-in CommandKit validation functions\n if (!this.#data.skipBuiltInValidations) {\n for (const validation of this.#data.builtInValidations) {\n const stopValidationLoop = validation({\n targetCommand,\n interaction,\n handlerData: this.#data\n });\n\n if (stopValidationLoop) {\n canRun = false;\n break;\n }\n }\n }\n\n if (!canRun) return;\n\n const command = targetCommand[isAutocomplete ? 'autocomplete' : 'run']!;\n\n const context = {\n interaction,\n client: this.#data.client,\n handler: this.#data.commandkitInstance\n };\n\n const shouldDebug = this.#data.commandkitInstance.isDebuggingCommands();\n\n if (!shouldDebug) {\n return command(context);\n }\n\n after((env) => {\n const error = env.getExecutionError();\n const marker = env.getMarker();\n const time = `${env.getExecutionTime().toFixed(2)}ms`;\n\n if (error) {\n console.error(\n colors.red(\n `[${marker} - ${time}] Error executing command: ${error}`\n )\n );\n return;\n }\n\n console.log(\n colors.green(`[${marker} - ${time}] Command executed successfully`)\n );\n });\n\n try {\n env.markStart(interaction.commandName);\n const res = await command(context);\n\n return res;\n } finally {\n env.markEnd();\n }\n };\n\n return executor();\n }\n\n handleCommands() {\n this.#data.client.on('interactionCreate', (interaction) => {\n const env = new CommandKitEnvironment(this.#data.commandkitInstance);\n env.setType(CommandKitEnvironmentType.CommandHandler);\n\n return makeContextAwareFunction(\n env,\n this.#interactionHandler.bind(this),\n this.#commandFinalizer.bind(this)\n )(interaction);\n });\n }\n\n get commands() {\n return this.#data.commands;\n }\n\n async reloadCommands(type?: ReloadOptions) {\n if (!this.#data.commandsPath) {\n throw new Error(\n colors.red(\n 'Cannot reload commands as \"commandsPath\" was not provided when instantiating CommandKit.'\n )\n );\n }\n\n this.#data.commands = [];\n\n // Re-build commands tree\n await this.#buildCommands();\n\n if (this.#data.bulkRegister) {\n await loadCommandsWithRest({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands,\n reloading: true,\n type\n });\n } else {\n await registerCommands({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands,\n reloading: true,\n type\n });\n }\n }\n}"],"mappings":"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","names":["CommandKitEnvironmentType","canRun","context","env"]}
1
+ {"version":3,"sources":["../src/context/async-context.ts","../src/CommandKit.ts","../src/context/environment.ts","../src/handlers/command-handler/CommandHandler.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport { CommandKitEnvironment } from './environment';\nimport { CommandKitErrorCodes, isCommandKitError } from '../utils/error-codes';\nimport { Interaction } from 'discord.js';\nimport { CommandKit } from '../CommandKit';\n\nconst context = new AsyncLocalStorage<CommandKitEnvironment>();\n\nexport type GenericFunction<A extends any[] = any[]> = (...args: A) => any;\n\n/**\n * Returns a context-aware version of the given function.\n * @param env - The commandkit environment data.\n * @param fn - The target function.\n * @param finalizer - An optional finalizer function to run after the target function. This function will be context-aware.\n * @internal\n */\nexport function makeContextAwareFunction<\n R extends GenericFunction,\n F extends GenericFunction>(\nenv: CommandKitEnvironment, fn: R, finalizer?: F): R {\n const _fn = (...args: any[]) => {\n return context.run(env, async () => {\n try {\n // execute the target function\n const result = await fn(...args);\n\n return result;\n } catch (e) {\n // set the error in the environment data\n if (isCommandKitError(e)) {\n const code = Reflect.get(e, 'code');\n const interaction = env.variables.get('interaction') as Interaction;\n if (!interaction) return;\n\n switch (code) {\n case CommandKitErrorCodes.GuildOnlyException:{\n if (interaction.isRepliable()) {\n await interaction.reply({\n content: 'This command is only available in guilds.',\n ephemeral: true\n });\n }\n return;\n }\n case CommandKitErrorCodes.DMOnlyException:{\n if (interaction.isRepliable()) {\n await interaction.reply({\n content: 'This command is only available in DMs.',\n ephemeral: true\n });\n }\n return;\n }\n }\n\n return;\n }\n\n env.setExecutionError(e as Error);\n } finally {\n if (typeof finalizer === 'function') {\n // execute the finalizer function\n try {\n await finalizer(...args);\n } catch {\n\n // no-op\n }}\n }\n });\n };\n\n return _fn as R;\n}\n\n/**\n * Retrieves commandkit\n * @private\n * @internal\n */\nexport function getCommandKit(): CommandKit | undefined;\nexport function getCommandKit(strict: true): CommandKit;\nexport function getCommandKit(strict: false): CommandKit | undefined;\nexport function getCommandKit(strict = false): CommandKit | undefined {\n const kit = context.getStore()?.commandkit ?? CommandKit.instance;\n\n if (!kit && strict) {\n throw new Error('CommandKit instance not found.');\n }\n\n return kit;\n}\n\n/**\n * Get the current commandkit context.\n * @internal\n */\nexport function getContext(): CommandKitEnvironment | void {\n const ctx = context.getStore();\n return ctx;\n}\n\n/**\n * Use current commandkit context. Throws an error if no context is found.\n */\nexport function useEnvironment(): CommandKitEnvironment {\n const ctx = context.getStore();\n if (!ctx) {\n throw new Error(\n 'No commandkit environment found. Please make sure you are inside commandkit handler.'\n );\n }\n\n return ctx;\n}\n\n/**\n * Ensures the command is only available in guilds.\n * Note: do not wrap this function in a try/catch block.\n */\nexport function guildOnly() {\n const env = useEnvironment();\n const interaction: Interaction = env.variables.get('interaction');\n\n if (!interaction) {\n throw new Error('No interaction found in environment.');\n }\n\n if (!interaction.guild) {\n const error = new Error('This command is only available in guilds.');\n Reflect.set(error, 'code', CommandKitErrorCodes.GuildOnlyException);\n\n throw error;\n }\n}\n\n/**\n * Ensures the command is only available in DMs.\n * Note: do not wrap this function in a try/catch block.\n */\nexport function dmOnly() {\n const env = useEnvironment();\n const interaction: Interaction = env.variables.get('interaction');\n\n if (!interaction) {\n throw new Error('No interaction found in environment.');\n }\n\n if (interaction.guild) {\n const error = new Error('This command is only available in DMs.');\n Reflect.set(error, 'code', CommandKitErrorCodes.DMOnlyException);\n\n throw error;\n }\n}","import EventEmitter from 'node:events';\nimport { CommandHandler, EventHandler, ValidationHandler } from './handlers';\nimport type {\n CommandKitData,\n CommandKitOptions,\n CommandObject,\n ReloadOptions } from\n'./types';\nimport colors from './utils/colors';\nimport { CacheProvider } from './cache/CacheProvider';\nimport { MemoryCache } from './cache/MemoryCache';\n\nexport class CommandKit extends EventEmitter {\n #data: CommandKitData;\n\n static instance: CommandKit | undefined = undefined;\n\n /**\n * Create a new command and event handler with CommandKit.\n *\n * @param options - The default CommandKit configuration.\n * @see {@link https://commandkit.dev/guide/commandkit-setup}\n */\n constructor(options: CommandKitOptions) {\n if (CommandKit.instance) {\n process.emitWarning(\n 'CommandKit instance already exists. Having multiple instance in same project is discouraged and it may lead to unexpected behavior.',\n {\n code: 'MultiInstanceWarning'\n }\n );\n }\n\n if (!options.client) {\n throw new Error(\n colors.red('\"client\" is required when instantiating CommandKit.')\n );\n }\n\n if (options.validationsPath && !options.commandsPath) {\n throw new Error(\n colors.red('\"commandsPath\" is required when \"validationsPath\" is set.')\n );\n }\n\n super();\n\n options.debugCommands ??= process.env.NODE_ENV !== 'production';\n\n if (\n options.cacheProvider !== null && (\n !options.cacheProvider ||\n !(options.cacheProvider instanceof CacheProvider)))\n {\n options.cacheProvider = new MemoryCache();\n }\n\n this.#data = options;\n\n this.#init().then(() => {\n // Increment client listeners count, as commandkit registers internal event listeners.\n this.incrementClientListenersCount();\n });\n\n if (!CommandKit.instance) {\n CommandKit.instance = this;\n }\n }\n\n /**\n * Resolves the current cache provider.\n */\n getCacheProvider(): CacheProvider | null {\n const provider = this.#data.cacheProvider;\n return provider ?? null;\n }\n\n /**\n * Whether or not to debug the command handler.\n */\n isDebuggingCommands() {\n return this.#data.debugCommands || false;\n }\n\n /**\n * Get the client attached to this CommandKit instance.\n */\n get client() {\n return this.#data.client;\n }\n\n /**\n * Get command handler instance.\n */\n get commandHandler() {\n return this.#data.commandHandler;\n }\n\n /**\n * (Private) Initialize CommandKit.\n */\n async #init() {\n // <!-- Setup event handler -->\n if (this.#data.eventsPath) {\n const eventHandler = new EventHandler({\n client: this.#data.client,\n eventsPath: this.#data.eventsPath,\n commandKitInstance: this\n });\n\n await eventHandler.init();\n\n this.#data.eventHandler = eventHandler;\n }\n\n // <!-- Setup validation handler -->\n if (this.#data.validationsPath) {\n const validationHandler = new ValidationHandler({\n validationsPath: this.#data.validationsPath\n });\n\n await validationHandler.init();\n\n this.#data.validationHandler = validationHandler;\n }\n\n // <!-- Setup command handler -->\n if (this.#data.commandsPath) {\n const commandHandler = new CommandHandler({\n client: this.#data.client,\n commandsPath: this.#data.commandsPath,\n devGuildIds: this.#data.devGuildIds || [],\n devUserIds: this.#data.devUserIds || [],\n devRoleIds: this.#data.devRoleIds || [],\n validationHandler: this.#data.validationHandler,\n skipBuiltInValidations: this.#data.skipBuiltInValidations || false,\n commandkitInstance: this,\n bulkRegister: this.#data.bulkRegister || false\n });\n\n await commandHandler.init();\n\n this.#data.commandHandler = commandHandler;\n }\n }\n\n /**\n * Updates application commands with the latest from \"commandsPath\".\n */\n async reloadCommands(type?: ReloadOptions) {\n if (!this.#data.commandHandler) return;\n await this.#data.commandHandler.reloadCommands(type);\n }\n\n /**\n * Updates application events with the latest from \"eventsPath\".\n */\n async reloadEvents() {\n if (!this.#data.eventHandler) return;\n await this.#data.eventHandler.reloadEvents(this.#data.commandHandler);\n }\n\n /**\n * Updates application command validations with the latest from \"validationsPath\".\n */\n async reloadValidations() {\n if (!this.#data.validationHandler) return;\n await this.#data.validationHandler.reloadValidations();\n }\n\n /**\n * @returns An array of objects of all the commands that CommandKit is handling.\n */\n get commands(): CommandObject[] {\n if (!this.#data.commandHandler) {\n return [];\n }\n\n const commands = this.#data.commandHandler.commands.map((cmd) => {\n const { run, autocomplete, ...command } = cmd;\n return command;\n });\n\n return commands;\n }\n\n /**\n * @returns The path to the commands folder which was set when instantiating CommandKit.\n */\n get commandsPath(): string | undefined {\n return this.#data.commandsPath;\n }\n\n /**\n * @returns The path to the events folder which was set when instantiating CommandKit.\n */\n get eventsPath(): string | undefined {\n return this.#data.eventsPath;\n }\n\n /**\n * @returns The path to the validations folder which was set when instantiating CommandKit.\n */\n get validationsPath(): string | undefined {\n return this.#data.validationsPath;\n }\n\n /**\n * @returns An array of all the developer user IDs which was set when instantiating CommandKit.\n */\n get devUserIds(): string[] {\n return this.#data.devUserIds || [];\n }\n\n /**\n * @returns An array of all the developer guild IDs which was set when instantiating CommandKit.\n */\n get devGuildIds(): string[] {\n return this.#data.devGuildIds || [];\n }\n\n /**\n * @returns An array of all the developer role IDs which was set when instantiating CommandKit.\n */\n get devRoleIds(): string[] {\n return this.#data.devRoleIds || [];\n }\n\n /**\n * Increment the client listeners count.\n */\n incrementClientListenersCount() {\n this.#data.client.setMaxListeners(this.#data.client.getMaxListeners() + 1);\n }\n\n /**\n * Decrement the client listeners count.\n */\n decrementClientListenersCount() {\n this.#data.client.setMaxListeners(this.#data.client.getMaxListeners() - 1);\n }\n}","import { randomUUID } from 'node:crypto';\nimport { CommandKit } from '../CommandKit';\nimport { GenericFunction, getContext } from './async-context';\n\nexport interface CommandKitEnvironmentInternalData {\n executionError: Error | null;\n type: CommandKitEnvironmentType | null;\n variables: Map<string, any>;\n deferredFunctions: Map<string, GenericFunction<[CommandKitEnvironment]>>;\n marker: string;\n markStart: number;\n markEnd: number;\n}\n\nexport class CommandKitEnvironment {\n #data: CommandKitEnvironmentInternalData = {\n executionError: null,\n type: null,\n variables: new Map(),\n deferredFunctions: new Map(),\n marker: '',\n markStart: 0,\n markEnd: 0\n };\n\n /**\n * Creates the commandkit execution environment.\n * @param commandkit - The commandkit instance.\n */\n public constructor(public readonly commandkit: CommandKit) {}\n\n /**\n * Get the execution error.\n * @internal\n */\n public getExecutionError(): Error | null {\n return this.#data.executionError;\n }\n\n /**\n * Set the execution error.\n * @param error - The error to set.\n * @internal\n */\n public setExecutionError(error: Error): void {\n if (this.#data.executionError) {\n throw new Error('Execution error already set.');\n }\n\n this.#data.executionError = error;\n }\n\n /**\n * Get the environment type.\n */\n public getType(): CommandKitEnvironmentType {\n const type = this.#data.type;\n\n if (!type) {\n throw new Error('Environment type not set.');\n }\n\n return type;\n }\n\n /**\n * Set the environment type.\n * @param type - The environment type to set.\n * @internal\n */\n public setType(type: CommandKitEnvironmentType): void {\n this.#data.type = type;\n }\n\n /**\n * The variables store for this environment.\n */\n public get variables(): Map<string, any> {\n return this.#data.variables;\n }\n\n /**\n * Register a deferred function.\n * @param fn - The deferred function to register.\n * @returns The deferred function id.\n * @internal\n */\n public registerDeferredFunction(\n fn: GenericFunction<[CommandKitEnvironment]>)\n : string {\n const id = randomUUID();\n this.#data.deferredFunctions.set(id, fn);\n return id;\n }\n\n /**\n * Clear a deferred function by id.\n * @param id - The deferred function id to clear.\n * @internal\n */\n public clearDeferredFunction(id: string): void {\n this.#data.deferredFunctions.delete(id);\n }\n\n /**\n * Run all deferred functions sequentially.\n * @internal\n */\n public async runDeferredFunctions(): Promise<void> {\n for (const [id, fn] of this.#data.deferredFunctions) {\n try {\n await fn(this);\n } catch (e) {\n this.commandkit.emit('unhandledDeferredFunctionRejection', e);\n } finally {\n this.clearDeferredFunction(id);\n }\n }\n }\n\n /**\n * Clear all deferred functions.\n * @internal\n */\n public clearAllDeferredFunctions(): void {\n this.#data.deferredFunctions.clear();\n }\n\n /**\n * Mark the start of a command execution.\n * @param marker - The marker to set.\n * @internal\n */\n public markStart(marker: string): void {\n this.#data.marker = marker;\n this.#data.markStart = performance.now();\n }\n\n /**\n * Mark the end of a command execution.\n * @internal\n */\n public markEnd(): void {\n if (!this.#data.markEnd) this.#data.markEnd = performance.now();\n }\n\n /**\n * Get the marker.\n * @internal\n */\n public getMarker(): string {\n return this.#data.marker;\n }\n\n /**\n * Get the execution time in milliseconds.\n * @internal\n */\n public getExecutionTime(): number {\n return Math.abs(this.#data.markEnd - this.#data.markStart);\n }\n}\n\nexport enum CommandKitEnvironmentType {\n CommandHandler = 'COMMAND_HANDLER',\n}\n\n/**\n * Runs the given function after the current handler has finished executing.\n * @param fn The function to run after the current handler.\n * @returns The deferred function id. This can be used to cancel the deferred function.\n */\nexport function after(fn: GenericFunction<[CommandKitEnvironment]>): string {\n const env = getContext();\n\n if (!env) {\n throw new Error('after must be called inside commandkit handler.');\n }\n\n return env.registerDeferredFunction(fn);\n}\n\n/**\n * Cancels a deferred function registered with `after`.\n * @param id The deferred function id to cancel.\n */\nexport function cancelAfter(id: string): void {\n const env = getContext();\n\n if (!env) {\n throw new Error('cancelAfter must be called inside commandkit handler.');\n }\n\n env.clearDeferredFunction(id);\n}","import { CacheType, Interaction } from 'discord.js';\nimport type {\n CommandData,\n CommandFileObject,\n ReloadOptions } from\n'../../types';\nimport { clone } from '../../utils/clone';\nimport colors from '../../utils/colors';\nimport { getFilePaths } from '../../utils/get-paths';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport loadCommandsWithRest from './functions/loadCommandsWithRest';\nimport registerCommands from './functions/registerCommands';\nimport type {\n CommandHandlerData,\n CommandHandlerOptions,\n CommandKitInteraction } from\n'./typings';\nimport builtInValidationsFunctions from './validations';\nimport {\n makeContextAwareFunction,\n useEnvironment } from\n'../../context/async-context';\nimport {\n after,\n CommandKitEnvironment,\n CommandKitEnvironmentType } from\n'../../context/environment';\n\nexport interface hCommandContext {\n interaction: CommandKitInteraction;\n command: CommandData;\n}\n\n/**\n * A handler for client application commands.\n */\nexport class CommandHandler {\n #data: CommandHandlerData;\n\n constructor({ ...options }: CommandHandlerOptions) {\n this.#data = {\n ...options,\n builtInValidations: [],\n commands: []\n };\n }\n\n async init() {\n await this.#buildCommands();\n\n this.#buildBuiltInValidations();\n\n const devOnlyCommands = this.#data.commands.filter(\n (cmd) => cmd.options?.devOnly\n );\n\n if (devOnlyCommands.length && !this.#data.devGuildIds.length) {\n process.emitWarning(\n colors.yellow(\n 'You have commands marked as \"devOnly\", but \"devGuildIds\" have not been set.'\n )\n );\n }\n\n if (\n devOnlyCommands.length &&\n !this.#data.devUserIds.length &&\n !this.#data.devRoleIds.length)\n {\n process.emitWarning(\n colors.yellow(\n 'You have commands marked as \"devOnly\", but \"devUserIds\" or \"devRoleIds\" have not been set.'\n )\n );\n }\n\n if (this.#data.bulkRegister) {\n await loadCommandsWithRest({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands\n });\n } else {\n await registerCommands({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands\n });\n }\n\n this.handleCommands();\n }\n\n async #buildCommands() {\n const allowedExtensions = /\\.(js|mjs|cjs|ts)$/i;\n const paths = await getFilePaths(this.#data.commandsPath, true);\n\n const commandFilePaths = paths.filter((path) =>\n allowedExtensions.test(path)\n );\n\n for (const commandFilePath of commandFilePaths) {\n const modulePath = toFileURL(commandFilePath);\n\n const importedObj = await import(`${modulePath}?t=${Date.now()}`);\n let commandObj: CommandFileObject = clone(importedObj); // Make commandObj extensible\n\n // If it's CommonJS, invalidate the import cache\n if (typeof module !== 'undefined' && typeof require !== 'undefined') {\n delete require.cache[require.resolve(commandFilePath)];\n }\n\n const compactFilePath =\n commandFilePath.split(process.cwd())[1] || commandFilePath;\n\n if (commandObj.default)\n commandObj = commandObj.default as CommandFileObject;\n\n // Ensure builder properties\n if (importedObj.default) {\n commandObj.data = importedObj.default.data;\n } else {\n commandObj.data = importedObj.data;\n }\n\n if (!commandObj.data) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${compactFilePath} does not export \"data\".`\n )\n );\n continue;\n }\n\n if (!commandObj.data.name) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${compactFilePath} does not export \"data.name\".`\n )\n );\n continue;\n }\n\n if (!commandObj.run) {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${commandObj.data.name} does not export \"run\".`\n )\n );\n continue;\n }\n\n if (typeof commandObj.run !== 'function') {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Command file ${commandObj.data.name} does not export \"run\" as a function.`\n )\n );\n continue;\n }\n\n commandObj.filePath = commandFilePath;\n\n let commandCategory =\n commandFilePath.\n split(this.#data.commandsPath)[1]?.\n replace(/\\\\\\\\|\\\\/g, '/').\n split('/')[1] || null;\n\n if (commandCategory && allowedExtensions.test(commandCategory)) {\n commandObj.category = null;\n } else {\n commandObj.category = commandCategory;\n }\n\n this.#data.commands.push(commandObj);\n }\n }\n\n #buildBuiltInValidations() {\n for (const builtInValidationFunction of builtInValidationsFunctions) {\n this.#data.builtInValidations.push(builtInValidationFunction);\n }\n }\n\n async #commandFinalizer() {\n const env = useEnvironment();\n\n await env.runDeferredFunctions();\n\n // Clear all deferred functions if we somehow missed them\n env.clearAllDeferredFunctions();\n }\n\n async #interactionHandler(interaction: Interaction<CacheType>) {\n if (\n !interaction.isChatInputCommand() &&\n !interaction.isContextMenuCommand() &&\n !interaction.isAutocomplete())\n\n return;\n\n const isAutocomplete = interaction.isAutocomplete();\n\n const targetCommand = this.#data.commands.find(\n (cmd) => cmd.data.name === interaction.commandName\n );\n\n if (!targetCommand) return;\n\n const env = useEnvironment();\n\n env.variables.set('interaction', interaction);\n\n const { data, options, run, autocomplete, ...rest } = targetCommand;\n\n // Skip if autocomplete handler is not defined\n if (isAutocomplete && !autocomplete) return;\n\n const executor = async () => {\n const commandObj = {\n data: targetCommand.data,\n options: targetCommand.options,\n ...rest\n };\n\n if (this.#data.validationHandler) {\n let canRun = true;\n\n for (const validationFunction of this.#data.validationHandler.\n validations) {\n const stopValidationLoop = await validationFunction({\n interaction,\n commandObj,\n client: this.#data.client,\n handler: this.#data.commandkitInstance\n });\n\n if (stopValidationLoop) {\n canRun = false;\n break;\n }\n }\n\n if (!canRun) return;\n }\n\n let canRun = true;\n\n // If custom validations pass and !skipBuiltInValidations, run built-in CommandKit validation functions\n if (!this.#data.skipBuiltInValidations) {\n for (const validation of this.#data.builtInValidations) {\n const stopValidationLoop = validation({\n targetCommand,\n interaction,\n handlerData: this.#data\n });\n\n if (stopValidationLoop) {\n canRun = false;\n break;\n }\n }\n }\n\n if (!canRun) return;\n\n const command = targetCommand[isAutocomplete ? 'autocomplete' : 'run']!;\n\n const context = {\n interaction,\n client: this.#data.client,\n handler: this.#data.commandkitInstance\n };\n\n const shouldDebug = this.#data.commandkitInstance.isDebuggingCommands();\n\n if (!shouldDebug) {\n return command(context);\n }\n\n after((env) => {\n const error = env.getExecutionError();\n const marker = env.getMarker();\n const time = `${env.getExecutionTime().toFixed(2)}ms`;\n\n if (error) {\n console.error(\n colors.red(\n `[${marker} - ${time}] Error executing command: ${error}`\n )\n );\n return;\n }\n\n console.log(\n colors.green(`[${marker} - ${time}] Command executed successfully`)\n );\n });\n\n try {\n env.markStart(interaction.commandName);\n const res = await command(context);\n\n return res;\n } finally {\n env.markEnd();\n }\n };\n\n return executor();\n }\n\n handleCommands() {\n this.#data.client.on('interactionCreate', (interaction) => {\n const env = new CommandKitEnvironment(this.#data.commandkitInstance);\n env.setType(CommandKitEnvironmentType.CommandHandler);\n\n return makeContextAwareFunction(\n env,\n this.#interactionHandler.bind(this),\n this.#commandFinalizer.bind(this)\n )(interaction);\n });\n }\n\n get commands() {\n return this.#data.commands;\n }\n\n async reloadCommands(type?: ReloadOptions) {\n if (!this.#data.commandsPath) {\n throw new Error(\n colors.red(\n 'Cannot reload commands as \"commandsPath\" was not provided when instantiating CommandKit.'\n )\n );\n }\n\n this.#data.commands = [];\n\n // Re-build commands tree\n await this.#buildCommands();\n\n if (this.#data.bulkRegister) {\n await loadCommandsWithRest({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands,\n reloading: true,\n type\n });\n } else {\n await registerCommands({\n client: this.#data.client,\n devGuildIds: this.#data.devGuildIds,\n commands: this.#data.commands,\n reloading: true,\n type\n });\n }\n }\n}"],"mappings":"stBAAA,OAAS,sBAAyB,mBCAlC,OAAO,iBAAkB,cCAzB,OAAS,eAAkB,cAA3B,UAca,uBAAN,MAAM,sBAAsB,CAe1B,YAA4B,WAAwB,CAAxB,2BAdnC,wBAA2C,CACzC,eAAgB,KAChB,KAAM,KACN,UAAW,IAAI,IACf,kBAAmB,IAAI,IACvB,OAAQ,GACR,UAAW,EACX,QAAS,CACX,EAM4D,CAMrD,mBAAkC,CACvC,OAAO,kBAAK,OAAM,cACpB,CAOO,kBAAkB,MAAoB,CAC3C,GAAI,kBAAK,OAAM,eACb,MAAM,IAAI,MAAM,8BAA8B,EAGhD,kBAAK,OAAM,eAAiB,KAC9B,CAKO,SAAqC,CAC1C,IAAM,KAAO,kBAAK,OAAM,KAExB,GAAI,CAAC,KACH,MAAM,IAAI,MAAM,2BAA2B,EAG7C,OAAO,IACT,CAOO,QAAQ,KAAuC,CACpD,kBAAK,OAAM,KAAO,IACpB,CAKA,IAAW,WAA8B,CACvC,OAAO,kBAAK,OAAM,SACpB,CAQO,yBACP,GACS,CACP,IAAM,GAAK,WAAW,EACtB,yBAAK,OAAM,kBAAkB,IAAI,GAAI,EAAE,EAChC,EACT,CAOO,sBAAsB,GAAkB,CAC7C,kBAAK,OAAM,kBAAkB,OAAO,EAAE,CACxC,CAMA,MAAa,sBAAsC,CACjD,OAAW,CAAC,GAAI,EAAE,IAAK,kBAAK,OAAM,kBAChC,GAAI,CACF,MAAM,GAAG,IAAI,CACf,OAAS,EAAG,CACV,KAAK,WAAW,KAAK,qCAAsC,CAAC,CAC9D,QAAE,CACA,KAAK,sBAAsB,EAAE,CAC/B,CAEJ,CAMO,2BAAkC,CACvC,kBAAK,OAAM,kBAAkB,MAAM,CACrC,CAOO,UAAU,OAAsB,CACrC,kBAAK,OAAM,OAAS,OACpB,kBAAK,OAAM,UAAY,YAAY,IAAI,CACzC,CAMO,SAAgB,CAChB,kBAAK,OAAM,UAAS,kBAAK,OAAM,QAAU,YAAY,IAAI,EAChE,CAMO,WAAoB,CACzB,OAAO,kBAAK,OAAM,MACpB,CAMO,kBAA2B,CAChC,OAAO,KAAK,IAAI,kBAAK,OAAM,QAAU,kBAAK,OAAM,SAAS,CAC3D,CACF,EAlJE,kBADiC,uDAA5B,IAAM,sBAAN,uBAqJK,2BAAAA,6BACVA,2BAAA,eAAiB,kBADPA,6BAAA,+BASL,SAAS,MAAM,GAAsD,CAC1E,IAAM,IAAM,WAAW,EAEvB,GAAI,CAAC,IACH,MAAM,IAAI,MAAM,iDAAiD,EAGnE,OAAO,IAAI,yBAAyB,EAAE,CACxC,CARgB,sBAcT,SAAS,YAAY,GAAkB,CAC5C,IAAM,IAAM,WAAW,EAEvB,GAAI,CAAC,IACH,MAAM,IAAI,MAAM,uDAAuD,EAGzE,IAAI,sBAAsB,EAAE,CAC9B,CARgB,kCC1LhB,IAAAC,OAAA,gHAoCa,gBAAN,MAAM,eAAe,CAG1B,YAAY,CAAE,GAAG,OAAQ,EAA0B,CAH9C,6CACL,kBAAAA,QAGE,kBAAKA,OAAQ,CACX,GAAG,QACH,mBAAoB,CAAC,EACrB,SAAU,CAAC,CACb,EACF,CAEA,MAAM,MAAO,CACX,MAAM,qBAAK,4CAAL,WAEN,qBAAK,sDAAL,WAEA,IAAM,gBAAkB,kBAAKA,QAAM,SAAS,OACzC,KAAK,CArDZ,OAqDe,cAAI,UAAJ,eAAa,QACxB,EAEI,gBAAgB,QAAU,CAAC,kBAAKA,QAAM,YAAY,QACpD,QAAQ,YACN,eAAO,OACL,6EACF,CACF,EAIF,gBAAgB,QAChB,CAAC,kBAAKA,QAAM,WAAW,QACvB,CAAC,kBAAKA,QAAM,WAAW,QAErB,QAAQ,YACN,eAAO,OACL,4FACF,CACF,EAGE,kBAAKA,QAAM,aACb,MAAM,qBAAqB,CACzB,OAAQ,kBAAKA,QAAM,OACnB,YAAa,kBAAKA,QAAM,YACxB,SAAU,kBAAKA,QAAM,QACvB,CAAC,EAED,MAAM,iBAAiB,CACrB,OAAQ,kBAAKA,QAAM,OACnB,YAAa,kBAAKA,QAAM,YACxB,SAAU,kBAAKA,QAAM,QACvB,CAAC,EAGH,KAAK,eAAe,CACtB,CA8NA,gBAAiB,CACf,kBAAKA,QAAM,OAAO,GAAG,oBAAsB,aAAgB,CACzD,IAAM,IAAM,IAAI,sBAAsB,kBAAKA,QAAM,kBAAkB,EACnE,WAAI,yBAAgD,EAE7C,yBACL,IACA,qBAAK,iDAAoB,KAAK,IAAI,EAClC,qBAAK,+CAAkB,KAAK,IAAI,CAClC,EAAE,WAAW,CACf,CAAC,CACH,CAEA,IAAI,UAAW,CACb,OAAO,kBAAKA,QAAM,QACpB,CAEA,MAAM,eAAe,KAAsB,CACzC,GAAI,CAAC,kBAAKA,QAAM,aACd,MAAM,IAAI,MACR,eAAO,IACL,0FACF,CACF,EAGF,kBAAKA,QAAM,SAAW,CAAC,EAGvB,MAAM,qBAAK,4CAAL,WAEF,kBAAKA,QAAM,aACb,MAAM,qBAAqB,CACzB,OAAQ,kBAAKA,QAAM,OACnB,YAAa,kBAAKA,QAAM,YACxB,SAAU,kBAAKA,QAAM,SACrB,UAAW,GACX,IACF,CAAC,EAED,MAAM,iBAAiB,CACrB,OAAQ,kBAAKA,QAAM,OACnB,YAAa,kBAAKA,QAAM,YACxB,SAAU,kBAAKA,QAAM,SACrB,UAAW,GACX,IACF,CAAC,CAEL,CACF,EArUEA,OAAA,YADK,sCAyDC,iBAAc,uBAAG,CA7FzB,OA8FI,IAAM,kBAAoB,sBAGpB,kBAFQ,MAAM,aAAa,kBAAKA,QAAM,aAAc,EAAI,GAE/B,OAAQ,MACvC,kBAAkB,KAAK,IAAI,CAC3B,EAEA,QAAW,mBAAmB,iBAAkB,CAG9C,IAAM,YAAc,MAAM,OAAO,GAFd,UAAU,eAAe,CAEE,MAAM,KAAK,IAAI,CAAC,IAC1D,WAAgC,MAAM,WAAW,EAGjD,OAAO,OAAW,KAAe,OAAO,UAAY,KACtD,OAAO,UAAQ,MAAM,UAAQ,QAAQ,eAAe,CAAC,EAGvD,IAAM,gBACN,gBAAgB,MAAM,QAAQ,IAAI,CAAC,EAAE,CAAC,GAAK,gBAY3C,GAVI,WAAW,UACf,WAAa,WAAW,SAGpB,YAAY,QACd,WAAW,KAAO,YAAY,QAAQ,KAEtC,WAAW,KAAO,YAAY,KAG5B,CAAC,WAAW,KAAM,CACpB,QAAQ,YACN,eAAO,OACL,0BAA0B,eAAe,0BAC3C,CACF,EACA,QACF,CAEA,GAAI,CAAC,WAAW,KAAK,KAAM,CACzB,QAAQ,YACN,eAAO,OACL,0BAA0B,eAAe,+BAC3C,CACF,EACA,QACF,CAEA,GAAI,CAAC,WAAW,IAAK,CACnB,QAAQ,YACN,eAAO,OACL,0BAA0B,WAAW,KAAK,IAAI,yBAChD,CACF,EACA,QACF,CAEA,GAAI,OAAO,WAAW,KAAQ,WAAY,CACxC,QAAQ,YACN,eAAO,OACL,0BAA0B,WAAW,KAAK,IAAI,uCAChD,CACF,EACA,QACF,CAEA,WAAW,SAAW,gBAEtB,IAAI,kBACJ,mBACA,MAAM,kBAAKA,QAAM,YAAY,EAAE,CAAC,IADhC,eAEA,QAAQ,WAAY,KACpB,MAAM,KAAK,KAAM,KAEb,iBAAmB,kBAAkB,KAAK,eAAe,EAC3D,WAAW,SAAW,KAEtB,WAAW,SAAW,gBAGxB,kBAAKA,QAAM,SAAS,KAAK,UAAU,CACrC,CACF,EApFoB,kBAsFpB,2BAAwB,iBAAG,CACzB,QAAW,6BAA6B,oBACtC,kBAAKA,QAAM,mBAAmB,KAAK,yBAAyB,CAEhE,EAJwB,4BAMlB,oBAAiB,uBAAG,CACxB,IAAM,IAAM,eAAe,EAE3B,MAAM,IAAI,qBAAqB,EAG/B,IAAI,0BAA0B,CAChC,EAPuB,qBASjB,sBAAmB,sBAAC,YAAqC,CAC7D,GACA,CAAC,YAAY,mBAAmB,GAChC,CAAC,YAAY,qBAAqB,GAClC,CAAC,YAAY,eAAe,EAE5B,OAEA,IAAM,eAAiB,YAAY,eAAe,EAE5C,cAAgB,kBAAKA,QAAM,SAAS,KACvC,KAAQ,IAAI,KAAK,OAAS,YAAY,WACzC,EAEA,GAAI,CAAC,cAAe,OAEpB,IAAM,IAAM,eAAe,EAE3B,IAAI,UAAU,IAAI,cAAe,WAAW,EAE5C,GAAM,CAAE,KAAM,QAAS,IAAK,aAAc,GAAG,IAAK,EAAI,cAGtD,OAAI,gBAAkB,CAAC,aAAc,OAEpB,gBAAY,CAC3B,IAAM,WAAa,CACjB,KAAM,cAAc,KACpB,QAAS,cAAc,QACvB,GAAG,IACL,EAEA,GAAI,kBAAKA,QAAM,kBAAmB,CAChC,IAAIC,QAAS,GAEb,QAAW,sBAAsB,kBAAKD,QAAM,kBAC5C,YAQE,GAP2B,MAAM,mBAAmB,CAClD,YACA,WACA,OAAQ,kBAAKA,QAAM,OACnB,QAAS,kBAAKA,QAAM,kBACtB,CAAC,EAEuB,CACtBC,QAAS,GACT,KACF,CAGF,GAAI,CAACA,QAAQ,MACf,CAEA,IAAI,OAAS,GAGb,GAAI,CAAC,kBAAKD,QAAM,wBACd,QAAW,cAAc,kBAAKA,QAAM,mBAOlC,GAN2B,WAAW,CACpC,cACA,YACA,YAAa,kBAAKA,OACpB,CAAC,EAEuB,CACtB,OAAS,GACT,KACF,EAIJ,GAAI,CAAC,OAAQ,OAEb,IAAM,QAAU,cAAc,eAAiB,eAAiB,KAAK,EAE/DE,SAAU,CACd,YACA,OAAQ,kBAAKF,QAAM,OACnB,QAAS,kBAAKA,QAAM,kBACtB,EAIA,GAAI,CAFgB,kBAAKA,QAAM,mBAAmB,oBAAoB,EAGpE,OAAO,QAAQE,QAAO,EAGxB,MAAOC,MAAQ,CACb,IAAM,MAAQA,KAAI,kBAAkB,EAC9B,OAASA,KAAI,UAAU,EACvB,KAAO,GAAGA,KAAI,iBAAiB,EAAE,QAAQ,CAAC,CAAC,KAEjD,GAAI,MAAO,CACT,QAAQ,MACN,eAAO,IACL,IAAI,MAAM,MAAM,IAAI,8BAA8B,KAAK,EACzD,CACF,EACA,MACF,CAEA,QAAQ,IACN,eAAO,MAAM,IAAI,MAAM,MAAM,IAAI,iCAAiC,CACpE,CACF,CAAC,EAED,GAAI,CACF,WAAI,UAAU,YAAY,WAAW,EACzB,MAAM,QAAQD,QAAO,CAGnC,QAAE,CACA,IAAI,QAAQ,CACd,CACF,EAzFiB,YA2FD,CAClB,EArHyB,uBA9JC,yCAArB,IAAM,eAAN,gBFpCP,IAAAE,OAAA,8BAYa,YAAN,MAAM,oBAAmB,YAAa,CAW3C,YAAY,QAA4B,CAUtC,GATI,YAAW,UACb,QAAQ,YACN,sIACA,CACE,KAAM,sBACR,CACF,EAGE,CAAC,QAAQ,OACX,MAAM,IAAI,MACR,eAAO,IAAI,qDAAqD,CAClE,EAGF,GAAI,QAAQ,iBAAmB,CAAC,QAAQ,aACtC,MAAM,IAAI,MACR,eAAO,IAAI,2DAA2D,CACxE,EAGF,MAAM,EAjCH,yCACL,kBAAAA,QAkCE,QAAQ,gBAAkB,QAAQ,IAAI,WAAa,aAGnD,QAAQ,gBAAkB,OAC1B,CAAC,QAAQ,eACT,EAAE,QAAQ,yBAAyB,kBAEjC,QAAQ,cAAgB,IAAI,aAG9B,kBAAKA,OAAQ,SAEb,qBAAK,+BAAL,WAAa,KAAK,IAAM,CAEtB,KAAK,8BAA8B,CACrC,CAAC,EAEI,YAAW,WACd,YAAW,SAAW,KAE1B,CAKA,kBAAyC,CAEvC,OADiB,kBAAKA,QAAM,eACT,IACrB,CAKA,qBAAsB,CACpB,OAAO,kBAAKA,QAAM,eAAiB,EACrC,CAKA,IAAI,QAAS,CACX,OAAO,kBAAKA,QAAM,MACpB,CAKA,IAAI,gBAAiB,CACnB,OAAO,kBAAKA,QAAM,cACpB,CAqDA,MAAM,eAAe,KAAsB,CACpC,kBAAKA,QAAM,gBAChB,MAAM,kBAAKA,QAAM,eAAe,eAAe,IAAI,CACrD,CAKA,MAAM,cAAe,CACd,kBAAKA,QAAM,cAChB,MAAM,kBAAKA,QAAM,aAAa,aAAa,kBAAKA,QAAM,cAAc,CACtE,CAKA,MAAM,mBAAoB,CACnB,kBAAKA,QAAM,mBAChB,MAAM,kBAAKA,QAAM,kBAAkB,kBAAkB,CACvD,CAKA,IAAI,UAA4B,CAC9B,OAAK,kBAAKA,QAAM,eAIC,kBAAKA,QAAM,eAAe,SAAS,IAAK,KAAQ,CAC/D,GAAM,CAAE,IAAK,aAAc,GAAG,OAAQ,EAAI,IAC1C,OAAO,OACT,CAAC,EANQ,CAAC,CASZ,CAKA,IAAI,cAAmC,CACrC,OAAO,kBAAKA,QAAM,YACpB,CAKA,IAAI,YAAiC,CACnC,OAAO,kBAAKA,QAAM,UACpB,CAKA,IAAI,iBAAsC,CACxC,OAAO,kBAAKA,QAAM,eACpB,CAKA,IAAI,YAAuB,CACzB,OAAO,kBAAKA,QAAM,YAAc,CAAC,CACnC,CAKA,IAAI,aAAwB,CAC1B,OAAO,kBAAKA,QAAM,aAAe,CAAC,CACpC,CAKA,IAAI,YAAuB,CACzB,OAAO,kBAAKA,QAAM,YAAc,CAAC,CACnC,CAKA,+BAAgC,CAC9B,kBAAKA,QAAM,OAAO,gBAAgB,kBAAKA,QAAM,OAAO,gBAAgB,EAAI,CAAC,CAC3E,CAKA,+BAAgC,CAC9B,kBAAKA,QAAM,OAAO,gBAAgB,kBAAKA,QAAM,OAAO,gBAAgB,EAAI,CAAC,CAC3E,CACF,EApOEA,OAAA,YADK,kCAyFC,QAAK,uBAAG,CAEZ,GAAI,kBAAKA,QAAM,WAAY,CACzB,IAAM,aAAe,IAAI,aAAa,CACpC,OAAQ,kBAAKA,QAAM,OACnB,WAAY,kBAAKA,QAAM,WACvB,mBAAoB,IACtB,CAAC,EAED,MAAM,aAAa,KAAK,EAExB,kBAAKA,QAAM,aAAe,YAC5B,CAGA,GAAI,kBAAKA,QAAM,gBAAiB,CAC9B,IAAM,kBAAoB,IAAI,kBAAkB,CAC9C,gBAAiB,kBAAKA,QAAM,eAC9B,CAAC,EAED,MAAM,kBAAkB,KAAK,EAE7B,kBAAKA,QAAM,kBAAoB,iBACjC,CAGA,GAAI,kBAAKA,QAAM,aAAc,CAC3B,IAAM,eAAiB,IAAI,eAAe,CACxC,OAAQ,kBAAKA,QAAM,OACnB,aAAc,kBAAKA,QAAM,aACzB,YAAa,kBAAKA,QAAM,aAAe,CAAC,EACxC,WAAY,kBAAKA,QAAM,YAAc,CAAC,EACtC,WAAY,kBAAKA,QAAM,YAAc,CAAC,EACtC,kBAAmB,kBAAKA,QAAM,kBAC9B,uBAAwB,kBAAKA,QAAM,wBAA0B,GAC7D,mBAAoB,KACpB,aAAc,kBAAKA,QAAM,cAAgB,EAC3C,CAAC,EAED,MAAM,eAAe,KAAK,EAE1B,kBAAKA,QAAM,eAAiB,cAC9B,CACF,EA3CW,SAzFgC,iCAG3C,cAHW,YAGJ,YAHF,IAAM,WAAN,YDNP,IAAM,QAAU,IAAI,kBAWb,SAAS,yBAGhB,IAA4B,GAAO,UAAkB,CAqDnD,OApDY,WAAI,OACP,QAAQ,IAAI,IAAK,SAAY,CAClC,GAAI,CAIF,OAFe,MAAM,GAAG,GAAG,IAAI,CAGjC,OAAS,EAAG,CAEV,GAAI,kBAAkB,CAAC,EAAG,CACxB,IAAM,KAAO,QAAQ,IAAI,EAAG,MAAM,EAC5B,YAAc,IAAI,UAAU,IAAI,aAAa,EACnD,GAAI,CAAC,YAAa,OAElB,OAAQ,KAAM,CACZ,KAAK,qBAAqB,mBAAmB,CACrC,YAAY,YAAY,GAC1B,MAAM,YAAY,MAAM,CACtB,QAAS,4CACT,UAAW,EACb,CAAC,EAEH,MACF,CACF,KAAK,qBAAqB,gBAAgB,CAClC,YAAY,YAAY,GAC1B,MAAM,YAAY,MAAM,CACtB,QAAS,yCACT,UAAW,EACb,CAAC,EAEH,MACF,CACJ,CAEA,MACF,CAEA,IAAI,kBAAkB,CAAU,CAClC,QAAE,CACA,GAAI,OAAO,WAAc,WAEvB,GAAI,CACF,MAAM,UAAU,GAAG,IAAI,CACzB,MAAQ,CAGR,CACJ,CACF,CAAC,EAjDS,MAqDd,CAzDgB,4DAmET,SAAS,cAAc,OAAS,GAA+B,CApFtE,OAqFE,IAAM,MAAM,WAAQ,SAAS,IAAjB,eAAoB,aAAc,WAAW,SAEzD,GAAI,CAAC,KAAO,OACV,MAAM,IAAI,MAAM,gCAAgC,EAGlD,OAAO,GACT,CARgB,sCAcT,SAAS,YAA2C,CAEzD,OADY,QAAQ,SAAS,CAE/B,CAHgB,gCAQT,SAAS,gBAAwC,CACtD,IAAM,IAAM,QAAQ,SAAS,EAC7B,GAAI,CAAC,IACH,MAAM,IAAI,MACR,sFACF,EAGF,OAAO,GACT,CATgB,wCAeT,SAAS,WAAY,CAE1B,IAAM,YADM,eAAe,EACU,UAAU,IAAI,aAAa,EAEhE,GAAI,CAAC,YACH,MAAM,IAAI,MAAM,sCAAsC,EAGxD,GAAI,CAAC,YAAY,MAAO,CACtB,IAAM,MAAQ,IAAI,MAAM,2CAA2C,EACnE,cAAQ,IAAI,MAAO,OAAQ,qBAAqB,kBAAkB,EAE5D,KACR,CACF,CAdgB,8BAoBT,SAAS,QAAS,CAEvB,IAAM,YADM,eAAe,EACU,UAAU,IAAI,aAAa,EAEhE,GAAI,CAAC,YACH,MAAM,IAAI,MAAM,sCAAsC,EAGxD,GAAI,YAAY,MAAO,CACrB,IAAM,MAAQ,IAAI,MAAM,wCAAwC,EAChE,cAAQ,IAAI,MAAO,OAAQ,qBAAqB,eAAe,EAEzD,KACR,CACF,CAdgB","names":["CommandKitEnvironmentType","_data","canRun","context","env","_data"]}
@@ -0,0 +1,2 @@
1
+ import{toFileURL}from"./chunk-ICJ4BBWI.mjs";import{clone}from"./chunk-MNPCM4QU.mjs";import{colors_default}from"./chunk-QXMWKQIO.mjs";import{getFilePaths,getFolderPaths}from"./chunk-RVGLG66X.mjs";import{__name,__privateAdd,__privateGet,__privateMethod,__privateSet,__require}from"./chunk-35OSBS47.mjs";var _data,_EventHandler_instances,buildEvents_fn,registerEvents_fn,_EventHandler=class _EventHandler{constructor({...options}){__privateAdd(this,_EventHandler_instances);__privateAdd(this,_data);__privateSet(this,_data,{...options,events:[]})}async init(){await __privateMethod(this,_EventHandler_instances,buildEvents_fn).call(this),__privateMethod(this,_EventHandler_instances,registerEvents_fn).call(this)}get events(){return __privateGet(this,_data).events}async reloadEvents(commandHandler){if(!__privateGet(this,_data).eventsPath)throw new Error(colors_default.red('Cannot reload events as "eventsPath" was not provided when instantiating CommandKit.'));__privateGet(this,_data).events=[],await __privateMethod(this,_EventHandler_instances,buildEvents_fn).call(this),__privateGet(this,_data).client.removeAllListeners(),__privateMethod(this,_EventHandler_instances,registerEvents_fn).call(this),commandHandler==null||commandHandler.handleCommands()}};_data=new WeakMap,_EventHandler_instances=new WeakSet,buildEvents_fn=__name(async function(){let eventFolderPaths=await getFolderPaths(__privateGet(this,_data).eventsPath);for(let eventFolderPath of eventFolderPaths){let eventName=eventFolderPath.replace(/\\\\|\\/g,"/").split("/").pop(),allowedExtensions=/\.(js|mjs|cjs|ts)$/i,eventFilePaths=(await getFilePaths(eventFolderPath,!0)).filter(path=>allowedExtensions.test(path)),eventObj={name:eventName,functions:[]};__privateGet(this,_data).events.push(eventObj);for(let eventFilePath of eventFilePaths){let importedFunction=(await import(`${toFileURL(eventFilePath)}?t=${Date.now()}`)).default,eventFunction=clone(importedFunction);typeof module<"u"&&typeof __require<"u"&&delete __require.cache[__require.resolve(eventFilePath)],eventFunction!=null&&eventFunction.default&&(eventFunction=eventFunction.default);let compactFilePath=eventFilePath.split(process.cwd())[1]||eventFilePath;if(typeof eventFunction!="function"){process.emitWarning(colors_default.yellow(`Ignoring: Event file ${compactFilePath} does not export a function.`));continue}eventObj.functions.push(eventFunction)}}},"#buildEvents"),registerEvents_fn=__name(function(){let client=__privateGet(this,_data).client,handler=__privateGet(this,_data).commandKitInstance;for(let eventObj of __privateGet(this,_data).events)client.on(eventObj.name,async(...params)=>{for(let eventFunction of eventObj.functions)if(await eventFunction(...params,client,handler))break})},"#registerEvents"),__name(_EventHandler,"EventHandler");var EventHandler=_EventHandler;export{EventHandler};
2
+ //# sourceMappingURL=chunk-LQPVE73I.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/handlers/event-handler/EventHandler.ts"],"sourcesContent":["import type { EventHandlerOptions, EventHandlerData } from './typings';\nimport type { CommandHandler } from '../command-handler/CommandHandler';\nimport { getFilePaths, getFolderPaths } from '../../utils/get-paths';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { clone } from '../../utils/clone';\nimport colors from '../../utils/colors';\n\n/**\n * A handler for client events.\n */\nexport class EventHandler {\n #data: EventHandlerData;\n\n constructor({ ...options }: EventHandlerOptions) {\n this.#data = {\n ...options,\n events: []\n };\n }\n\n async init() {\n await this.#buildEvents();\n this.#registerEvents();\n }\n\n async #buildEvents() {\n const eventFolderPaths = await getFolderPaths(this.#data.eventsPath);\n\n for (const eventFolderPath of eventFolderPaths) {\n const eventName = eventFolderPath.\n replace(/\\\\\\\\|\\\\/g, '/').\n split('/').\n pop() as string;\n\n const allowedExtensions = /\\.(js|mjs|cjs|ts)$/i;\n const eventPaths = await getFilePaths(eventFolderPath, true);\n\n const eventFilePaths = eventPaths.filter((path) =>\n allowedExtensions.test(path)\n );\n\n const eventObj = {\n name: eventName,\n functions: [] as Function[]\n };\n\n this.#data.events.push(eventObj);\n\n for (const eventFilePath of eventFilePaths) {\n const modulePath = toFileURL(eventFilePath);\n\n let importedFunction = (await import(`${modulePath}?t=${Date.now()}`)).\n default;\n let eventFunction = clone(importedFunction);\n\n // If it's CommonJS, invalidate the import cache\n if (typeof module !== 'undefined' && typeof require !== 'undefined') {\n delete require.cache[require.resolve(eventFilePath)];\n }\n\n if (eventFunction?.default) {\n eventFunction = eventFunction.default;\n }\n\n const compactFilePath =\n eventFilePath.split(process.cwd())[1] || eventFilePath;\n\n if (typeof eventFunction !== 'function') {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Event file ${compactFilePath} does not export a function.`\n )\n );\n continue;\n }\n\n eventObj.functions.push(eventFunction);\n }\n }\n }\n\n #registerEvents() {\n const client = this.#data.client;\n const handler = this.#data.commandKitInstance;\n\n for (const eventObj of this.#data.events) {\n client.on(eventObj.name, async (...params) => {\n for (const eventFunction of eventObj.functions) {\n const stopEventLoop = await eventFunction(...params, client, handler);\n\n if (stopEventLoop) {\n break;\n }\n }\n });\n }\n }\n\n get events() {\n return this.#data.events;\n }\n\n async reloadEvents(commandHandler?: CommandHandler) {\n if (!this.#data.eventsPath) {\n throw new Error(\n colors.red(\n 'Cannot reload events as \"eventsPath\" was not provided when instantiating CommandKit.'\n )\n );\n }\n\n this.#data.events = [];\n\n await this.#buildEvents();\n\n this.#data.client.removeAllListeners();\n\n this.#registerEvents();\n\n // Re-register \"interactionCreate\" event for application commands.\n commandHandler?.handleCommands();\n }\n}"],"mappings":"sPAUO,IAAM,aAAN,KAAmB,CAV1B,MAU0B,6BACxB,MAEA,YAAY,CAAE,GAAG,OAAQ,EAAwB,CAC/C,KAAK,MAAQ,CACX,GAAG,QACH,OAAQ,CAAC,CACX,CACF,CAEA,MAAM,MAAO,CACX,MAAM,KAAK,aAAa,EACxB,KAAK,gBAAgB,CACvB,CAEA,KAAM,cAAe,CACnB,IAAM,iBAAmB,MAAM,eAAe,KAAK,MAAM,UAAU,EAEnE,QAAW,mBAAmB,iBAAkB,CAC9C,IAAM,UAAY,gBAClB,QAAQ,WAAY,GAAG,EACvB,MAAM,GAAG,EACT,IAAI,EAEE,kBAAoB,sBAGpB,gBAFa,MAAM,aAAa,gBAAiB,EAAI,GAEzB,OAAQ,MAC1C,kBAAkB,KAAK,IAAI,CAC3B,EAEM,SAAW,CACf,KAAM,UACN,UAAW,CAAC,CACd,EAEA,KAAK,MAAM,OAAO,KAAK,QAAQ,EAE/B,QAAW,iBAAiB,eAAgB,CAG1C,IAAI,kBAAoB,MAAM,OAAO,GAFlB,UAAU,aAAa,CAEQ,MAAM,KAAK,IAAI,CAAC,KAClE,QACI,cAAgB,MAAM,gBAAgB,EAGtC,OAAO,OAAW,KAAe,OAAO,UAAY,KACtD,OAAO,UAAQ,MAAM,UAAQ,QAAQ,aAAa,CAAC,EAGjD,eAAe,UACjB,cAAgB,cAAc,SAGhC,IAAM,gBACN,cAAc,MAAM,QAAQ,IAAI,CAAC,EAAE,CAAC,GAAK,cAEzC,GAAI,OAAO,eAAkB,WAAY,CACvC,QAAQ,YACN,eAAO,OACL,wBAAwB,eAAe,8BACzC,CACF,EACA,QACF,CAEA,SAAS,UAAU,KAAK,aAAa,CACvC,CACF,CACF,CAEA,iBAAkB,CAChB,IAAM,OAAS,KAAK,MAAM,OACpB,QAAU,KAAK,MAAM,mBAE3B,QAAW,YAAY,KAAK,MAAM,OAChC,OAAO,GAAG,SAAS,KAAM,SAAU,SAAW,CAC5C,QAAW,iBAAiB,SAAS,UAGnC,GAFsB,MAAM,cAAc,GAAG,OAAQ,OAAQ,OAAO,EAGlE,KAGN,CAAC,CAEL,CAEA,IAAI,QAAS,CACX,OAAO,KAAK,MAAM,MACpB,CAEA,MAAM,aAAa,eAAiC,CAClD,GAAI,CAAC,KAAK,MAAM,WACd,MAAM,IAAI,MACR,eAAO,IACL,sFACF,CACF,EAGF,KAAK,MAAM,OAAS,CAAC,EAErB,MAAM,KAAK,aAAa,EAExB,KAAK,MAAM,OAAO,mBAAmB,EAErC,KAAK,gBAAgB,EAGrB,gBAAgB,eAAe,CACjC,CACF","names":[]}
1
+ {"version":3,"sources":["../src/handlers/event-handler/EventHandler.ts"],"sourcesContent":["import type { EventHandlerOptions, EventHandlerData } from './typings';\nimport type { CommandHandler } from '../command-handler/CommandHandler';\nimport { getFilePaths, getFolderPaths } from '../../utils/get-paths';\nimport { toFileURL } from '../../utils/resolve-file-url';\nimport { clone } from '../../utils/clone';\nimport colors from '../../utils/colors';\n\n/**\n * A handler for client events.\n */\nexport class EventHandler {\n #data: EventHandlerData;\n\n constructor({ ...options }: EventHandlerOptions) {\n this.#data = {\n ...options,\n events: []\n };\n }\n\n async init() {\n await this.#buildEvents();\n this.#registerEvents();\n }\n\n async #buildEvents() {\n const eventFolderPaths = await getFolderPaths(this.#data.eventsPath);\n\n for (const eventFolderPath of eventFolderPaths) {\n const eventName = eventFolderPath.\n replace(/\\\\\\\\|\\\\/g, '/').\n split('/').\n pop() as string;\n\n const allowedExtensions = /\\.(js|mjs|cjs|ts)$/i;\n const eventPaths = await getFilePaths(eventFolderPath, true);\n\n const eventFilePaths = eventPaths.filter((path) =>\n allowedExtensions.test(path)\n );\n\n const eventObj = {\n name: eventName,\n functions: [] as Function[]\n };\n\n this.#data.events.push(eventObj);\n\n for (const eventFilePath of eventFilePaths) {\n const modulePath = toFileURL(eventFilePath);\n\n let importedFunction = (await import(`${modulePath}?t=${Date.now()}`)).\n default;\n let eventFunction = clone(importedFunction);\n\n // If it's CommonJS, invalidate the import cache\n if (typeof module !== 'undefined' && typeof require !== 'undefined') {\n delete require.cache[require.resolve(eventFilePath)];\n }\n\n if (eventFunction?.default) {\n eventFunction = eventFunction.default;\n }\n\n const compactFilePath =\n eventFilePath.split(process.cwd())[1] || eventFilePath;\n\n if (typeof eventFunction !== 'function') {\n process.emitWarning(\n colors.yellow(\n `Ignoring: Event file ${compactFilePath} does not export a function.`\n )\n );\n continue;\n }\n\n eventObj.functions.push(eventFunction);\n }\n }\n }\n\n #registerEvents() {\n const client = this.#data.client;\n const handler = this.#data.commandKitInstance;\n\n for (const eventObj of this.#data.events) {\n client.on(eventObj.name, async (...params) => {\n for (const eventFunction of eventObj.functions) {\n const stopEventLoop = await eventFunction(...params, client, handler);\n\n if (stopEventLoop) {\n break;\n }\n }\n });\n }\n }\n\n get events() {\n return this.#data.events;\n }\n\n async reloadEvents(commandHandler?: CommandHandler) {\n if (!this.#data.eventsPath) {\n throw new Error(\n colors.red(\n 'Cannot reload events as \"eventsPath\" was not provided when instantiating CommandKit.'\n )\n );\n }\n\n this.#data.events = [];\n\n await this.#buildEvents();\n\n this.#data.client.removeAllListeners();\n\n this.#registerEvents();\n\n // Re-register \"interactionCreate\" event for application commands.\n commandHandler?.handleCommands();\n }\n}"],"mappings":"6SAAA,mEAUa,cAAN,MAAM,aAAa,CAGxB,YAAY,CAAE,GAAG,OAAQ,EAAwB,CAH5C,2CACL,yBAGE,kBAAK,MAAQ,CACX,GAAG,QACH,OAAQ,CAAC,CACX,EACF,CAEA,MAAM,MAAO,CACX,MAAM,qBAAK,wCAAL,WACN,qBAAK,2CAAL,UACF,CA2EA,IAAI,QAAS,CACX,OAAO,kBAAK,OAAM,MACpB,CAEA,MAAM,aAAa,eAAiC,CAClD,GAAI,CAAC,kBAAK,OAAM,WACd,MAAM,IAAI,MACR,eAAO,IACL,sFACF,CACF,EAGF,kBAAK,OAAM,OAAS,CAAC,EAErB,MAAM,qBAAK,wCAAL,WAEN,kBAAK,OAAM,OAAO,mBAAmB,EAErC,qBAAK,2CAAL,WAGA,qCAAgB,gBAClB,CACF,EA/GE,kBADK,oCAeC,eAAY,uBAAG,CACnB,IAAM,iBAAmB,MAAM,eAAe,kBAAK,OAAM,UAAU,EAEnE,QAAW,mBAAmB,iBAAkB,CAC9C,IAAM,UAAY,gBAClB,QAAQ,WAAY,GAAG,EACvB,MAAM,GAAG,EACT,IAAI,EAEE,kBAAoB,sBAGpB,gBAFa,MAAM,aAAa,gBAAiB,EAAI,GAEzB,OAAQ,MAC1C,kBAAkB,KAAK,IAAI,CAC3B,EAEM,SAAW,CACf,KAAM,UACN,UAAW,CAAC,CACd,EAEA,kBAAK,OAAM,OAAO,KAAK,QAAQ,EAE/B,QAAW,iBAAiB,eAAgB,CAG1C,IAAI,kBAAoB,MAAM,OAAO,GAFlB,UAAU,aAAa,CAEQ,MAAM,KAAK,IAAI,CAAC,KAClE,QACI,cAAgB,MAAM,gBAAgB,EAGtC,OAAO,OAAW,KAAe,OAAO,UAAY,KACtD,OAAO,UAAQ,MAAM,UAAQ,QAAQ,aAAa,CAAC,EAGjD,mCAAe,UACjB,cAAgB,cAAc,SAGhC,IAAM,gBACN,cAAc,MAAM,QAAQ,IAAI,CAAC,EAAE,CAAC,GAAK,cAEzC,GAAI,OAAO,eAAkB,WAAY,CACvC,QAAQ,YACN,eAAO,OACL,wBAAwB,eAAe,8BACzC,CACF,EACA,QACF,CAEA,SAAS,UAAU,KAAK,aAAa,CACvC,CACF,CACF,EAtDkB,gBAwDlB,kBAAe,iBAAG,CAChB,IAAM,OAAS,kBAAK,OAAM,OACpB,QAAU,kBAAK,OAAM,mBAE3B,QAAW,YAAY,kBAAK,OAAM,OAChC,OAAO,GAAG,SAAS,KAAM,SAAU,SAAW,CAC5C,QAAW,iBAAiB,SAAS,UAGnC,GAFsB,MAAM,cAAc,GAAG,OAAQ,OAAQ,OAAO,EAGlE,KAGN,CAAC,CAEL,EAfe,mBAvES,qCAAnB,IAAM,aAAN","names":[]}
@@ -1,2 +1,2 @@
1
- import{__name}from"./chunk-6TIBWNPX.mjs";var globalConfig={envExtra:!0,outDir:"dist",watch:!0,clearRestartLogs:!0,minify:!1,sourcemap:!1,nodeOptions:[],antiCrash:!0,requirePolyfill:!0};function getConfig(){return globalConfig}__name(getConfig,"getConfig");var requiredProps=["src","main"];function defineConfig(config){for(let prop of requiredProps)if(!config[prop])throw new Error(`[CommandKit Config] Missing required config property: ${prop}`);return globalConfig={...globalConfig,...config},globalConfig}__name(defineConfig,"defineConfig");export{getConfig,defineConfig};
2
- //# sourceMappingURL=chunk-6W2KY7FK.mjs.map
1
+ import{__name}from"./chunk-35OSBS47.mjs";var globalConfig={envExtra:!0,outDir:"dist",watch:!0,clearRestartLogs:!0,minify:!1,sourcemap:!1,nodeOptions:[],antiCrash:!0,requirePolyfill:!0};function getConfig(){return globalConfig}__name(getConfig,"getConfig");var requiredProps=["src","main"];function defineConfig(config){for(let prop of requiredProps)if(!config[prop])throw new Error(`[CommandKit Config] Missing required config property: ${prop}`);return globalConfig={...globalConfig,...config},globalConfig}__name(defineConfig,"defineConfig");export{getConfig,defineConfig};
2
+ //# sourceMappingURL=chunk-PTP2L33V.mjs.map
@@ -1,2 +1,2 @@
1
- import{__name}from"./chunk-6TIBWNPX.mjs";var resetColor="\x1B[0m",colors_default={reset:__name(text=>`${text}${resetColor}`,"reset"),bright:__name(text=>`\x1B[1m${text}${resetColor}`,"bright"),dim:__name(text=>`\x1B[2m${text}${resetColor}`,"dim"),underscore:__name(text=>`\x1B[4m${text}${resetColor}`,"underscore"),blink:__name(text=>`\x1B[5m${text}${resetColor}`,"blink"),reverse:__name(text=>`\x1B[7m${text}${resetColor}`,"reverse"),hidden:__name(text=>`\x1B[8m${text}${resetColor}`,"hidden"),black:__name(text=>`\x1B[30m${text}${resetColor}`,"black"),red:__name(text=>`\x1B[31m${text}${resetColor}`,"red"),green:__name(text=>`\x1B[32m${text}${resetColor}`,"green"),yellow:__name(text=>`\x1B[33m${text}${resetColor}`,"yellow"),blue:__name(text=>`\x1B[34m${text}${resetColor}`,"blue"),magenta:__name(text=>`\x1B[35m${text}${resetColor}`,"magenta"),cyan:__name(text=>`\x1B[36m${text}${resetColor}`,"cyan"),white:__name(text=>`\x1B[37m${text}${resetColor}`,"white"),bgBlack:__name(text=>`\x1B[40m${text}${resetColor}`,"bgBlack"),bgRed:__name(text=>`\x1B[41m${text}${resetColor}`,"bgRed"),bgGreen:__name(text=>`\x1B[42m${text}${resetColor}`,"bgGreen"),bgYellow:__name(text=>`\x1B[43m${text}${resetColor}`,"bgYellow"),bgBlue:__name(text=>`\x1B[44m${text}${resetColor}`,"bgBlue"),bgMagenta:__name(text=>`\x1B[45m${text}${resetColor}`,"bgMagenta"),bgCyan:__name(text=>`\x1B[46m${text}${resetColor}`,"bgCyan"),bgWhite:__name(text=>`\x1B[47m${text}${resetColor}`,"bgWhite")};export{colors_default};
2
- //# sourceMappingURL=chunk-C6WU57FQ.mjs.map
1
+ import{__name}from"./chunk-35OSBS47.mjs";var resetColor="\x1B[0m",colors_default={reset:__name(text=>`${text}${resetColor}`,"reset"),bright:__name(text=>`\x1B[1m${text}${resetColor}`,"bright"),dim:__name(text=>`\x1B[2m${text}${resetColor}`,"dim"),underscore:__name(text=>`\x1B[4m${text}${resetColor}`,"underscore"),blink:__name(text=>`\x1B[5m${text}${resetColor}`,"blink"),reverse:__name(text=>`\x1B[7m${text}${resetColor}`,"reverse"),hidden:__name(text=>`\x1B[8m${text}${resetColor}`,"hidden"),black:__name(text=>`\x1B[30m${text}${resetColor}`,"black"),red:__name(text=>`\x1B[31m${text}${resetColor}`,"red"),green:__name(text=>`\x1B[32m${text}${resetColor}`,"green"),yellow:__name(text=>`\x1B[33m${text}${resetColor}`,"yellow"),blue:__name(text=>`\x1B[34m${text}${resetColor}`,"blue"),magenta:__name(text=>`\x1B[35m${text}${resetColor}`,"magenta"),cyan:__name(text=>`\x1B[36m${text}${resetColor}`,"cyan"),white:__name(text=>`\x1B[37m${text}${resetColor}`,"white"),bgBlack:__name(text=>`\x1B[40m${text}${resetColor}`,"bgBlack"),bgRed:__name(text=>`\x1B[41m${text}${resetColor}`,"bgRed"),bgGreen:__name(text=>`\x1B[42m${text}${resetColor}`,"bgGreen"),bgYellow:__name(text=>`\x1B[43m${text}${resetColor}`,"bgYellow"),bgBlue:__name(text=>`\x1B[44m${text}${resetColor}`,"bgBlue"),bgMagenta:__name(text=>`\x1B[45m${text}${resetColor}`,"bgMagenta"),bgCyan:__name(text=>`\x1B[46m${text}${resetColor}`,"bgCyan"),bgWhite:__name(text=>`\x1B[47m${text}${resetColor}`,"bgWhite")};export{colors_default};
2
+ //# sourceMappingURL=chunk-QXMWKQIO.mjs.map
@@ -1,2 +1,2 @@
1
- import{__name}from"./chunk-6TIBWNPX.mjs";var CommandKitErrorCodes={GuildOnlyException:Symbol("kGuildOnlyException"),DMOnlyException:Symbol("kDMOnlyException")};function isCommandKitError(error){if(!(error instanceof Error))return!1;let code=Reflect.get(error,"code");for(let key in CommandKitErrorCodes)if(CommandKitErrorCodes[key]===code)return!0;return!1}__name(isCommandKitError,"isCommandKitError");export{CommandKitErrorCodes,isCommandKitError};
2
- //# sourceMappingURL=chunk-CKNUFVNV.mjs.map
1
+ import{__name}from"./chunk-35OSBS47.mjs";var CommandKitErrorCodes={GuildOnlyException:Symbol("kGuildOnlyException"),DMOnlyException:Symbol("kDMOnlyException")};function isCommandKitError(error){if(!(error instanceof Error))return!1;let code=Reflect.get(error,"code");for(let key in CommandKitErrorCodes)if(CommandKitErrorCodes[key]===code)return!0;return!1}__name(isCommandKitError,"isCommandKitError");export{CommandKitErrorCodes,isCommandKitError};
2
+ //# sourceMappingURL=chunk-R4SWJR4N.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__name}from"./chunk-35OSBS47.mjs";import{randomUUID}from"node:crypto";var valuesMap={true:!0,false:!1,null:null,undefined:void 0,__UUIDv4__:__name(()=>randomUUID(),"__UUIDv4__")},VALUE_PREFIXES={JSON:"JSON::",DATE:"DATE::"};function catcher(fn){try{return fn(),!0}catch{return!1}}__name(catcher,"catcher");function parseEnv(src){for(let key in src){let value=src[key];if(typeof value=="string"){if(value.startsWith(VALUE_PREFIXES.JSON)){catcher(()=>src[key]=JSON.parse(value.replace(VALUE_PREFIXES.JSON,"")));continue}if(value.startsWith(VALUE_PREFIXES.DATE)){src[key]=new Date(value.replace(VALUE_PREFIXES.DATE,""));continue}if(value.includes(",")){src[key]=value.split(",").map(v=>v.trim());continue}if(/^[0-9]+n$/.test(value)){src[key]=BigInt(value);continue}if(value in valuesMap){src[key]=typeof valuesMap[value]=="function"?valuesMap[value]():valuesMap[value];continue}}}return src}__name(parseEnv,"parseEnv");export{parseEnv};
2
+ //# sourceMappingURL=chunk-RQ3ABUE3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/parse-env.ts"],"sourcesContent":["// @ts-check\n\nimport { randomUUID } from 'node:crypto';\n\nconst valuesMap = {\n true: true,\n false: false,\n null: null,\n undefined: undefined,\n __UUIDv4__: () => randomUUID()\n};\n\nconst VALUE_PREFIXES = {\n JSON: 'JSON::',\n DATE: 'DATE::'\n};\n\nfunction catcher(fn: Function) {\n try {\n fn();\n return true;\n } catch {\n return false;\n }\n}\n\nexport function parseEnv(src: any) {\n for (const key in src) {\n const value = src[key];\n\n if (typeof value !== 'string') continue;\n\n if (value.startsWith(VALUE_PREFIXES.JSON)) {\n catcher(\n () => src[key] = JSON.parse(value.replace(VALUE_PREFIXES.JSON, ''))\n );\n continue;\n }\n\n if (value.startsWith(VALUE_PREFIXES.DATE)) {\n src[key] = new Date(value.replace(VALUE_PREFIXES.DATE, ''));\n continue;\n }\n\n if (value.includes(',')) {\n src[key] = value.split(',').map((v) => v.trim());\n continue;\n }\n\n if (/^[0-9]+n$/.test(value)) {\n src[key] = BigInt(value);\n continue;\n }\n\n if (value in valuesMap) {\n src[key] =\n // @ts-ignore\n typeof valuesMap[value] === 'function' ?\n // @ts-ignore\n valuesMap[value]() :\n // @ts-ignore\n valuesMap[value];\n continue;\n }\n }\n\n return src;\n}"],"mappings":"yCAEA,OAAS,eAAkB,cAE3B,IAAM,UAAY,CAChB,KAAM,GACN,MAAO,GACP,KAAM,KACN,UAAW,OACX,WAAY,WAAM,WAAW,EAAjB,aACd,EAEM,eAAiB,CACrB,KAAM,SACN,KAAM,QACR,EAEA,SAAS,QAAQ,GAAc,CAC7B,GAAI,CACF,UAAG,EACI,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAPS,0BASF,SAAS,SAAS,IAAU,CACjC,QAAW,OAAO,IAAK,CACrB,IAAM,MAAQ,IAAI,GAAG,EAErB,GAAI,OAAO,OAAU,SAErB,IAAI,MAAM,WAAW,eAAe,IAAI,EAAG,CACzC,QACE,IAAM,IAAI,GAAG,EAAI,KAAK,MAAM,MAAM,QAAQ,eAAe,KAAM,EAAE,CAAC,CACpE,EACA,QACF,CAEA,GAAI,MAAM,WAAW,eAAe,IAAI,EAAG,CACzC,IAAI,GAAG,EAAI,IAAI,KAAK,MAAM,QAAQ,eAAe,KAAM,EAAE,CAAC,EAC1D,QACF,CAEA,GAAI,MAAM,SAAS,GAAG,EAAG,CACvB,IAAI,GAAG,EAAI,MAAM,MAAM,GAAG,EAAE,IAAK,GAAM,EAAE,KAAK,CAAC,EAC/C,QACF,CAEA,GAAI,YAAY,KAAK,KAAK,EAAG,CAC3B,IAAI,GAAG,EAAI,OAAO,KAAK,EACvB,QACF,CAEA,GAAI,SAAS,UAAW,CACtB,IAAI,GAAG,EAEP,OAAO,UAAU,KAAK,GAAM,WAE5B,UAAU,KAAK,EAAE,EAEjB,UAAU,KAAK,EACf,QACF,EACF,CAEA,OAAO,GACT,CAzCgB","names":[]}
@@ -1,2 +1,2 @@
1
- import{__name}from"./chunk-6TIBWNPX.mjs";import path from"path";import fs from"fs/promises";async function getFilePaths(directory,nesting){let filePaths=[];if(!directory)return filePaths;let files=await fs.readdir(directory,{withFileTypes:!0});for(let file of files){let filePath=path.join(directory,file.name);file.isFile()&&filePaths.push(filePath),nesting&&file.isDirectory()&&(filePaths=[...filePaths,...await getFilePaths(filePath,!0)])}return filePaths}__name(getFilePaths,"getFilePaths");async function getFolderPaths(directory,nesting){let folderPaths=[];if(!directory)return folderPaths;let folders=await fs.readdir(directory,{withFileTypes:!0});for(let folder of folders){let folderPath=path.join(directory,folder.name);folder.isDirectory()&&(folderPaths.push(folderPath),nesting&&(folderPaths=[...folderPaths,...await getFolderPaths(folderPath,!0)]))}return folderPaths}__name(getFolderPaths,"getFolderPaths");export{getFilePaths,getFolderPaths};
2
- //# sourceMappingURL=chunk-6BSP7AD3.mjs.map
1
+ import{__name}from"./chunk-35OSBS47.mjs";import path from"path";import fs from"fs/promises";async function getFilePaths(directory,nesting){let filePaths=[];if(!directory)return filePaths;let files=await fs.readdir(directory,{withFileTypes:!0});for(let file of files){let filePath=path.join(directory,file.name);file.isFile()&&filePaths.push(filePath),nesting&&file.isDirectory()&&(filePaths=[...filePaths,...await getFilePaths(filePath,!0)])}return filePaths}__name(getFilePaths,"getFilePaths");async function getFolderPaths(directory,nesting){let folderPaths=[];if(!directory)return folderPaths;let folders=await fs.readdir(directory,{withFileTypes:!0});for(let folder of folders){let folderPath=path.join(directory,folder.name);folder.isDirectory()&&(folderPaths.push(folderPath),nesting&&(folderPaths=[...folderPaths,...await getFolderPaths(folderPath,!0)]))}return folderPaths}__name(getFolderPaths,"getFolderPaths");export{getFilePaths,getFolderPaths};
2
+ //# sourceMappingURL=chunk-RVGLG66X.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__name}from"./chunk-35OSBS47.mjs";var _CacheProvider=class _CacheProvider{};__name(_CacheProvider,"CacheProvider");var CacheProvider=_CacheProvider;export{CacheProvider};
2
+ //# sourceMappingURL=chunk-SI3L34FF.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cache/CacheProvider.ts"],"sourcesContent":["export interface CacheEntry<T = unknown> {\n value: T;\n ttl?: number;\n}\n\nexport abstract class CacheProvider {\n abstract get<T>(key: string): Promise<CacheEntry<T> | undefined>;\n abstract set<T>(key: string, value: T, ttl?: number): Promise<void>;\n abstract exists(key: string): Promise<boolean>;\n abstract delete(key: string): Promise<void>;\n abstract clear(): Promise<void>;\n abstract expire(key: string, ttl: number): Promise<void>;\n}"],"mappings":"yCAKO,IAAe,cAAf,KAA6B,CALpC,MAKoC,8BAOpC","names":[]}
1
+ {"version":3,"sources":["../src/cache/CacheProvider.ts"],"sourcesContent":["export interface CacheEntry<T = unknown> {\n value: T;\n ttl?: number;\n}\n\nexport abstract class CacheProvider {\n abstract get<T>(key: string): Promise<CacheEntry<T> | undefined>;\n abstract set<T>(key: string, value: T, ttl?: number): Promise<void>;\n abstract exists(key: string): Promise<boolean>;\n abstract delete(key: string): Promise<void>;\n abstract clear(): Promise<void>;\n abstract expire(key: string, ttl: number): Promise<void>;\n}"],"mappings":"yCAKO,IAAe,eAAf,MAAe,cAAc,CAOpC,EAPoC,uCAA7B,IAAe,cAAf","names":[]}
@@ -0,0 +1,2 @@
1
+ import{__name,__privateAdd,__privateGet,__privateMethod,__privateSet}from"./chunk-35OSBS47.mjs";import{ButtonStyle,ButtonBuilder,ComponentType}from"discord.js";var _onClickHandler,_onEndHandler,_contextData,_collector,_ButtonKit_instances,setupInteractionCollector_fn,destroyCollector_fn,_ButtonKit=class _ButtonKit extends ButtonBuilder{constructor(){super(...arguments);__privateAdd(this,_ButtonKit_instances);__privateAdd(this,_onClickHandler,null);__privateAdd(this,_onEndHandler,null);__privateAdd(this,_contextData,null);__privateAdd(this,_collector,null)}onClick(handler,data){if(this.data.style===ButtonStyle.Link)throw new TypeError('Cannot setup "onClick" handler on link buttons.');if(!handler)throw new TypeError('Cannot setup "onClick" without a handler function parameter.');return __privateMethod(this,_ButtonKit_instances,destroyCollector_fn).call(this),__privateSet(this,_onClickHandler,handler),data&&__privateSet(this,_contextData,data),__privateMethod(this,_ButtonKit_instances,setupInteractionCollector_fn).call(this),this}onEnd(handler){if(!handler)throw new TypeError('Cannot setup "onEnd" without a handler function parameter.');return __privateSet(this,_onEndHandler,handler),this}dispose(){var _a;return __privateMethod(this,_ButtonKit_instances,destroyCollector_fn).call(this),(_a=__privateGet(this,_onEndHandler))==null||_a.call(this,"disposed"),this}};_onClickHandler=new WeakMap,_onEndHandler=new WeakMap,_contextData=new WeakMap,_collector=new WeakMap,_ButtonKit_instances=new WeakSet,setupInteractionCollector_fn=__name(function(){if(!__privateGet(this,_contextData)||!__privateGet(this,_onClickHandler))return;let message=__privateGet(this,_contextData).message;if(!message)throw new TypeError('Cannot setup "onClick" handler without a message in the context data.');if("customId"in this.data&&!this.data.customId)throw new TypeError('Cannot setup "onClick" handler on a button without a custom id.');let data={time:864e5,autoReset:!0,...__privateGet(this,_contextData)},collector=__privateSet(this,_collector,message.createMessageComponentCollector({filter:__name(interaction=>interaction.customId===this.data.custom_id&&interaction.message.id===message.id,"filter"),componentType:ComponentType.Button,...data}));__privateGet(this,_collector).on("collect",interaction=>{let handler=__privateGet(this,_onClickHandler);return handler?__privateGet(this,_collector)?(data.autoReset&&__privateGet(this,_collector).resetTimer(),handler(interaction)):collector.stop("destroyed"):__privateMethod(this,_ButtonKit_instances,destroyCollector_fn).call(this)}),__privateGet(this,_collector).on("end",(_,reason)=>{var _a;__privateMethod(this,_ButtonKit_instances,destroyCollector_fn).call(this),(_a=__privateGet(this,_onEndHandler))==null||_a.call(this,reason)})},"#setupInteractionCollector"),destroyCollector_fn=__name(function(){var _a,_b;(_a=__privateGet(this,_collector))==null||_a.stop("end"),(_b=__privateGet(this,_collector))==null||_b.removeAllListeners(),__privateSet(this,_collector,null),__privateSet(this,_contextData,null),__privateSet(this,_onClickHandler,null)},"#destroyCollector"),__name(_ButtonKit,"ButtonKit");var ButtonKit=_ButtonKit;export{ButtonKit};
2
+ //# sourceMappingURL=chunk-TEL2J6LT.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ButtonKit.ts"],"sourcesContent":["import {\n type Message,\n type Awaitable,\n type ButtonInteraction,\n type InteractionCollector,\n type InteractionCollectorOptions,\n type APIButtonComponentWithCustomId,\n ButtonStyle,\n ButtonBuilder,\n ComponentType } from\n'discord.js';\n\n/**\n * The handler to run when a button is clicked. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type CommandKitButtonBuilderInteractionCollectorDispatch = (\ninteraction: ButtonInteraction)\n=> Awaitable<void>;\n\nexport type CommandKitButtonBuilderOnEnd = (reason: string) => Awaitable<void>;\n\nexport type CommandKitButtonBuilderInteractionCollectorDispatchContextData = {\n /**\n * The message to listen for button interactions on.\n */\n message: Message;\n /**\n * The duration (in ms) that the collector should run for.\n */\n time?: number;\n /**\n * If the collector should automatically reset the timer when a button is clicked.\n */\n autoReset?: boolean;\n} & Omit<\n InteractionCollectorOptions<ButtonInteraction>,\n 'filter' | 'componentType'>;\n\n\nexport class ButtonKit extends ButtonBuilder {\n #onClickHandler: CommandKitButtonBuilderInteractionCollectorDispatch | null =\n null;\n #onEndHandler: CommandKitButtonBuilderOnEnd | null = null;\n #contextData: CommandKitButtonBuilderInteractionCollectorDispatchContextData | null =\n null;\n #collector: InteractionCollector<ButtonInteraction> | null = null;\n\n /**\n * Sets up an inline interaction collector for this button. This collector by default allows as many interactions as possible if it is actively used.\n * If unused, this expires after 24 hours or custom time if specified.\n * @param handler The handler to run when the button is clicked\n * @param data The context data to use for the interaction collector\n * @returns This button\n * @example\n * ```ts\n * const button = new ButtonKit()\n * .setLabel('Click me')\n * .setStyle(ButtonStyle.Primary)\n * .setCustomId('click_me');\n *\n * const row = new ActionRowBuilder().addComponents(button);\n *\n * const message = await channel.send({ content: 'Click the button', components: [row] });\n *\n * button.onClick(async (interaction) => {\n * await interaction.reply('You clicked me!');\n * }, { message });\n *\n * // Remove onClick handler and destroy the interaction collector\n * button.onClick(null);\n * ```\n */\n public onClick(\n handler: CommandKitButtonBuilderInteractionCollectorDispatch,\n data?: CommandKitButtonBuilderInteractionCollectorDispatchContextData)\n : this {\n if (this.data.style === ButtonStyle.Link) {\n throw new TypeError('Cannot setup \"onClick\" handler on link buttons.');\n }\n\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n this.#destroyCollector();\n\n this.#onClickHandler = handler;\n if (data) this.#contextData = data;\n\n this.#setupInteractionCollector();\n\n return this;\n }\n\n public onEnd(handler: CommandKitButtonBuilderOnEnd): this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onEnd\" without a handler function parameter.'\n );\n }\n\n this.#onEndHandler = handler;\n\n return this;\n }\n\n #setupInteractionCollector() {\n if (!this.#contextData || !this.#onClickHandler) return;\n\n const message = this.#contextData.message;\n\n if (!message) {\n throw new TypeError(\n 'Cannot setup \"onClick\" handler without a message in the context data.'\n );\n }\n\n if ('customId' in this.data && !this.data.customId) {\n throw new TypeError(\n 'Cannot setup \"onClick\" handler on a button without a custom id.'\n );\n }\n\n const data = {\n time: 86_400_000,\n autoReset: true,\n ...this.#contextData\n };\n\n const collector = this.#collector =\n message.createMessageComponentCollector({\n filter: (interaction) =>\n interaction.customId ===\n (<APIButtonComponentWithCustomId> this.data).custom_id &&\n interaction.message.id === message.id,\n componentType: ComponentType.Button,\n ...data\n });\n\n this.#collector.on('collect', (interaction) => {\n const handler = this.#onClickHandler;\n\n if (!handler) return this.#destroyCollector();\n\n if (!this.#collector) {\n return collector.stop('destroyed');\n }\n\n if (data.autoReset) {\n this.#collector.resetTimer();\n }\n\n return handler(interaction);\n });\n\n this.#collector.on('end', (_, reason) => {\n this.#destroyCollector();\n this.#onEndHandler?.(reason);\n });\n }\n\n public dispose() {\n this.#destroyCollector();\n this.#onEndHandler?.('disposed');\n return this;\n }\n\n #destroyCollector() {\n this.#collector?.stop('end');\n this.#collector?.removeAllListeners();\n this.#collector = null;\n this.#contextData = null;\n this.#onClickHandler = null;\n }\n}"],"mappings":"yCAAA,OAOE,YACA,cACA,kBACF,aA8BO,IAAM,UAAN,cAAwB,aAAc,CAxC7C,MAwC6C,0BAC3C,gBACA,KACA,cAAqD,KACrD,aACA,KACA,WAA6D,KA2BtD,QACP,QACA,KACO,CACL,GAAI,KAAK,KAAK,QAAU,YAAY,KAClC,MAAM,IAAI,UAAU,iDAAiD,EAGvE,GAAI,CAAC,QACH,MAAM,IAAI,UACR,8DACF,EAGF,YAAK,kBAAkB,EAEvB,KAAK,gBAAkB,QACnB,OAAM,KAAK,aAAe,MAE9B,KAAK,2BAA2B,EAEzB,IACT,CAEO,MAAM,QAA6C,CACxD,GAAI,CAAC,QACH,MAAM,IAAI,UACR,4DACF,EAGF,YAAK,cAAgB,QAEd,IACT,CAEA,4BAA6B,CAC3B,GAAI,CAAC,KAAK,cAAgB,CAAC,KAAK,gBAAiB,OAEjD,IAAM,QAAU,KAAK,aAAa,QAElC,GAAI,CAAC,QACH,MAAM,IAAI,UACR,uEACF,EAGF,GAAI,aAAc,KAAK,MAAQ,CAAC,KAAK,KAAK,SACxC,MAAM,IAAI,UACR,iEACF,EAGF,IAAM,KAAO,CACX,KAAM,MACN,UAAW,GACX,GAAG,KAAK,YACV,EAEM,UAAY,KAAK,WACvB,QAAQ,gCAAgC,CACtC,OAAQ,OAAC,aACT,YAAY,WACsB,KAAK,KAAM,WAC7C,YAAY,QAAQ,KAAO,QAAQ,GAH3B,UAIR,cAAe,cAAc,OAC7B,GAAG,IACL,CAAC,EAED,KAAK,WAAW,GAAG,UAAY,aAAgB,CAC7C,IAAM,QAAU,KAAK,gBAErB,OAAK,QAEA,KAAK,YAIN,KAAK,WACP,KAAK,WAAW,WAAW,EAGtB,QAAQ,WAAW,GAPjB,UAAU,KAAK,WAAW,EAHd,KAAK,kBAAkB,CAW9C,CAAC,EAED,KAAK,WAAW,GAAG,MAAO,CAAC,EAAG,SAAW,CACvC,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,MAAM,CAC7B,CAAC,CACH,CAEO,SAAU,CACf,YAAK,kBAAkB,EACvB,KAAK,gBAAgB,UAAU,EACxB,IACT,CAEA,mBAAoB,CAClB,KAAK,YAAY,KAAK,KAAK,EAC3B,KAAK,YAAY,mBAAmB,EACpC,KAAK,WAAa,KAClB,KAAK,aAAe,KACpB,KAAK,gBAAkB,IACzB,CACF","names":[]}
1
+ {"version":3,"sources":["../src/components/ButtonKit.ts"],"sourcesContent":["import {\n type Message,\n type Awaitable,\n type ButtonInteraction,\n type InteractionCollector,\n type InteractionCollectorOptions,\n type APIButtonComponentWithCustomId,\n ButtonStyle,\n ButtonBuilder,\n ComponentType } from\n'discord.js';\n\n/**\n * The handler to run when a button is clicked. This handler is called with the interaction as the first argument.\n * If the first argument is null, it means that the interaction collector has been destroyed.\n */\nexport type CommandKitButtonBuilderInteractionCollectorDispatch = (\ninteraction: ButtonInteraction)\n=> Awaitable<void>;\n\nexport type CommandKitButtonBuilderOnEnd = (reason: string) => Awaitable<void>;\n\nexport type CommandKitButtonBuilderInteractionCollectorDispatchContextData = {\n /**\n * The message to listen for button interactions on.\n */\n message: Message;\n /**\n * The duration (in ms) that the collector should run for.\n */\n time?: number;\n /**\n * If the collector should automatically reset the timer when a button is clicked.\n */\n autoReset?: boolean;\n} & Omit<\n InteractionCollectorOptions<ButtonInteraction>,\n 'filter' | 'componentType'>;\n\n\nexport class ButtonKit extends ButtonBuilder {\n #onClickHandler: CommandKitButtonBuilderInteractionCollectorDispatch | null =\n null;\n #onEndHandler: CommandKitButtonBuilderOnEnd | null = null;\n #contextData: CommandKitButtonBuilderInteractionCollectorDispatchContextData | null =\n null;\n #collector: InteractionCollector<ButtonInteraction> | null = null;\n\n /**\n * Sets up an inline interaction collector for this button. This collector by default allows as many interactions as possible if it is actively used.\n * If unused, this expires after 24 hours or custom time if specified.\n * @param handler The handler to run when the button is clicked\n * @param data The context data to use for the interaction collector\n * @returns This button\n * @example\n * ```ts\n * const button = new ButtonKit()\n * .setLabel('Click me')\n * .setStyle(ButtonStyle.Primary)\n * .setCustomId('click_me');\n *\n * const row = new ActionRowBuilder().addComponents(button);\n *\n * const message = await channel.send({ content: 'Click the button', components: [row] });\n *\n * button.onClick(async (interaction) => {\n * await interaction.reply('You clicked me!');\n * }, { message });\n *\n * // Remove onClick handler and destroy the interaction collector\n * button.onClick(null);\n * ```\n */\n public onClick(\n handler: CommandKitButtonBuilderInteractionCollectorDispatch,\n data?: CommandKitButtonBuilderInteractionCollectorDispatchContextData)\n : this {\n if (this.data.style === ButtonStyle.Link) {\n throw new TypeError('Cannot setup \"onClick\" handler on link buttons.');\n }\n\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onClick\" without a handler function parameter.'\n );\n }\n\n this.#destroyCollector();\n\n this.#onClickHandler = handler;\n if (data) this.#contextData = data;\n\n this.#setupInteractionCollector();\n\n return this;\n }\n\n public onEnd(handler: CommandKitButtonBuilderOnEnd): this {\n if (!handler) {\n throw new TypeError(\n 'Cannot setup \"onEnd\" without a handler function parameter.'\n );\n }\n\n this.#onEndHandler = handler;\n\n return this;\n }\n\n #setupInteractionCollector() {\n if (!this.#contextData || !this.#onClickHandler) return;\n\n const message = this.#contextData.message;\n\n if (!message) {\n throw new TypeError(\n 'Cannot setup \"onClick\" handler without a message in the context data.'\n );\n }\n\n if ('customId' in this.data && !this.data.customId) {\n throw new TypeError(\n 'Cannot setup \"onClick\" handler on a button without a custom id.'\n );\n }\n\n const data = {\n time: 86_400_000,\n autoReset: true,\n ...this.#contextData\n };\n\n const collector = this.#collector =\n message.createMessageComponentCollector({\n filter: (interaction) =>\n interaction.customId ===\n (<APIButtonComponentWithCustomId> this.data).custom_id &&\n interaction.message.id === message.id,\n componentType: ComponentType.Button,\n ...data\n });\n\n this.#collector.on('collect', (interaction) => {\n const handler = this.#onClickHandler;\n\n if (!handler) return this.#destroyCollector();\n\n if (!this.#collector) {\n return collector.stop('destroyed');\n }\n\n if (data.autoReset) {\n this.#collector.resetTimer();\n }\n\n return handler(interaction);\n });\n\n this.#collector.on('end', (_, reason) => {\n this.#destroyCollector();\n this.#onEndHandler?.(reason);\n });\n }\n\n public dispose() {\n this.#destroyCollector();\n this.#onEndHandler?.('disposed');\n return this;\n }\n\n #destroyCollector() {\n this.#collector?.stop('end');\n this.#collector?.removeAllListeners();\n this.#collector = null;\n this.#contextData = null;\n this.#onClickHandler = null;\n }\n}"],"mappings":"gGAAA,OAOE,YACA,cACA,kBACF,aAVA,gIAwCa,WAAN,MAAM,mBAAkB,aAAc,CAAtC,0EACL,kCACA,MACA,gCAAqD,MACrD,+BACA,MACA,6BAA6D,MA2BtD,QACP,QACA,KACO,CACL,GAAI,KAAK,KAAK,QAAU,YAAY,KAClC,MAAM,IAAI,UAAU,iDAAiD,EAGvE,GAAI,CAAC,QACH,MAAM,IAAI,UACR,8DACF,EAGF,4BAAK,0CAAL,WAEA,kBAAK,gBAAkB,SACnB,MAAM,kBAAK,aAAe,MAE9B,qBAAK,mDAAL,WAEO,IACT,CAEO,MAAM,QAA6C,CACxD,GAAI,CAAC,QACH,MAAM,IAAI,UACR,4DACF,EAGF,yBAAK,cAAgB,SAEd,IACT,CAyDO,SAAU,CApKnB,OAqKI,4BAAK,0CAAL,YACA,qBAAK,iBAAL,mBAAqB,YACd,IACT,CASF,EAxIE,4BAEA,0BACA,yBAEA,uBANK,iCAqEL,6BAA0B,iBAAG,CAC3B,GAAI,CAAC,kBAAK,eAAgB,CAAC,kBAAK,iBAAiB,OAEjD,IAAM,QAAU,kBAAK,cAAa,QAElC,GAAI,CAAC,QACH,MAAM,IAAI,UACR,uEACF,EAGF,GAAI,aAAc,KAAK,MAAQ,CAAC,KAAK,KAAK,SACxC,MAAM,IAAI,UACR,iEACF,EAGF,IAAM,KAAO,CACX,KAAM,MACN,UAAW,GACX,GAAG,kBAAK,aACV,EAEM,UAAY,kBAAK,WACvB,QAAQ,gCAAgC,CACtC,OAAQ,OAAC,aACT,YAAY,WACsB,KAAK,KAAM,WAC7C,YAAY,QAAQ,KAAO,QAAQ,GAH3B,UAIR,cAAe,cAAc,OAC7B,GAAG,IACL,CAAC,GAED,kBAAK,YAAW,GAAG,UAAY,aAAgB,CAC7C,IAAM,QAAU,kBAAK,iBAErB,OAAK,QAEA,kBAAK,aAIN,KAAK,WACP,kBAAK,YAAW,WAAW,EAGtB,QAAQ,WAAW,GAPjB,UAAU,KAAK,WAAW,EAHd,qBAAK,0CAAL,UAWvB,CAAC,EAED,kBAAK,YAAW,GAAG,MAAO,CAAC,EAAG,SAAW,CA9J7C,OA+JM,qBAAK,0CAAL,YACA,qBAAK,iBAAL,mBAAqB,OACvB,CAAC,CACH,EArD0B,8BA6D1B,oBAAiB,iBAAG,CA1KtB,WA2KI,qBAAK,cAAL,SAAiB,KAAK,QACtB,qBAAK,cAAL,SAAiB,qBACjB,kBAAK,WAAa,MAClB,kBAAK,aAAe,MACpB,kBAAK,gBAAkB,KACzB,EANiB,qBAlI0B,+BAAtC,IAAM,UAAN","names":[]}
@@ -0,0 +1,2 @@
1
+ import{__name}from"./chunk-35OSBS47.mjs";async function bootstrapCommandkitCLI(argv,options){let{Command}=await import("commander"),{bootstrapDevelopmentServer}=await import("./cli/development.mjs"),{bootstrapProductionServer}=await import("./cli/production.mjs"),{bootstrapProductionBuild}=await import("./cli/build.mjs"),program=new Command("commandkit");program.command("dev").description("Start your bot in development mode.").option("-c, --config <path>","Path to your commandkit config file.","./commandkit.js").action(()=>{let options2=program.opts();bootstrapDevelopmentServer(options2)}),program.command("start").description("Start your bot in production mode after running the build command.").option("-c, --config <path>","Path to your commandkit.json file.","./commandkit.js").action(()=>{let options2=program.opts();bootstrapProductionServer(options2.config)}),program.command("build").description("Build your project for production usage.").option("-c, --config <path>","Path to your commandkit.json file.","./commandkit.json").action(()=>{let options2=program.opts();bootstrapProductionBuild(options2.config)}),await program.parseAsync(argv,options)}__name(bootstrapCommandkitCLI,"bootstrapCommandkitCLI");export{bootstrapCommandkitCLI};
2
+ //# sourceMappingURL=chunk-ULPF2QCW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/init.ts"],"sourcesContent":["/**\n * Creates a command line interface for CommandKit.\n * @param argv The arguments passed to the CLI.\n * @param options The options passed to the CLI.\n */\nexport async function bootstrapCommandkitCLI(\nargv: string[],\noptions?: import('commander').ParseOptions | undefined)\n{\n const { Command } = await import('commander');\n const { bootstrapDevelopmentServer } = await import('./development');\n const { bootstrapProductionServer } = await import('./production');\n const { bootstrapProductionBuild } = await import('./build');\n\n const program = new Command('commandkit');\n\n program.\n command('dev').\n description('Start your bot in development mode.').\n option(\n '-c, --config <path>',\n 'Path to your commandkit config file.',\n './commandkit.js'\n ).\n action(() => {\n const options = program.opts();\n bootstrapDevelopmentServer(options);\n });\n\n program.\n command('start').\n description(\n 'Start your bot in production mode after running the build command.'\n ).\n option(\n '-c, --config <path>',\n 'Path to your commandkit.json file.',\n './commandkit.js'\n ).\n action(() => {\n const options = program.opts();\n bootstrapProductionServer(options.config);\n });\n\n program.\n command('build').\n description('Build your project for production usage.').\n option(\n '-c, --config <path>',\n 'Path to your commandkit.json file.',\n './commandkit.json'\n ).\n action(() => {\n const options = program.opts();\n bootstrapProductionBuild(options.config);\n });\n\n await program.parseAsync(argv, options);\n}"],"mappings":"yCAKA,eAAsB,uBACtB,KACA,QACA,CACE,GAAM,CAAE,OAAQ,EAAI,KAAM,QAAO,WAAW,EACtC,CAAE,0BAA2B,EAAI,KAAM,QAAO,uBAAe,EAC7D,CAAE,yBAA0B,EAAI,KAAM,QAAO,sBAAc,EAC3D,CAAE,wBAAyB,EAAI,KAAM,QAAO,iBAAS,EAErD,QAAU,IAAI,QAAQ,YAAY,EAExC,QACA,QAAQ,KAAK,EACb,YAAY,qCAAqC,EACjD,OACE,sBACA,uCACA,iBACF,EACA,OAAO,IAAM,CACX,IAAMA,SAAU,QAAQ,KAAK,EAC7B,2BAA2BA,QAAO,CACpC,CAAC,EAED,QACA,QAAQ,OAAO,EACf,YACE,oEACF,EACA,OACE,sBACA,qCACA,iBACF,EACA,OAAO,IAAM,CACX,IAAMA,SAAU,QAAQ,KAAK,EAC7B,0BAA0BA,SAAQ,MAAM,CAC1C,CAAC,EAED,QACA,QAAQ,OAAO,EACf,YAAY,0CAA0C,EACtD,OACE,sBACA,qCACA,mBACF,EACA,OAAO,IAAM,CACX,IAAMA,SAAU,QAAQ,KAAK,EAC7B,yBAAyBA,SAAQ,MAAM,CACzC,CAAC,EAED,MAAM,QAAQ,WAAW,KAAM,OAAO,CACxC,CArDsB","names":["options"]}
@@ -1,2 +1,2 @@
1
- import{getCommandKit}from"./chunk-5KRNT4BG.mjs";import{__name}from"./chunk-6TIBWNPX.mjs";import{AsyncLocalStorage}from"node:async_hooks";import ms from"ms";import{randomUUID}from"node:crypto";var CACHED_FUNCTIONS_STORE=new WeakMap,TAG_FUNCTION_MAP=new Map,DEFAULT_TTL=ms("15m"),cacheContext=new AsyncLocalStorage,__identificationKey=`__cache_identification_key_${Date.now()}__${Math.random()}__`,getDefaultCacheTag=__name(()=>({tag:randomUUID(),ttl:DEFAULT_TTL}),"getDefaultCacheTag");function cache(fn,params){return params=Object.assign({},getDefaultCacheTag(),params),useCache(fn,__identificationKey,params)}__name(cache,"cache");function useCache(fn,id,tag){if(id!==void 0&&id!==__identificationKey)throw new TypeError("useCache may not be called directly.");let isLocal=id===__identificationKey,memoized=__name(async(...args)=>{let cache2=getCommandKit(!0).getCacheProvider();if(!cache2)throw new Error("CacheProvider was not found, please provide a cache provider to the CommandKit instance.");let context=cacheContext.getStore();if(context===void 0)throw new Error('useCache must be called inside a function decorated with "use cache" directive.');let entryKey=context.params.tag,entry=await cache2.get(entryKey);if(entry!==void 0)return entry.value;let ttl=typeof context.params.ttl=="string"?ms(context.params.ttl):context.params.ttl,writeCache=__name(async(...args2)=>{let result=await fn(...args2);return CACHED_FUNCTIONS_STORE.set(fn,{...context.params,target:fn,memo:cacheContext.exit(()=>wrapper)}),entryKey!==context.params.tag&&TAG_FUNCTION_MAP.delete(entryKey),TAG_FUNCTION_MAP.set(context.params.tag,fn),await cache2.set(entryKey,result,ttl),result},"writeCache");return CACHED_FUNCTIONS_STORE.set(fn,{...context.params,target:fn,memo:cacheContext.exit(()=>wrapper)}),TAG_FUNCTION_MAP.set(entryKey,fn),writeCache(...args)},"memoized"),wrapper=__name(async(...args)=>{let params=CACHED_FUNCTIONS_STORE.get(fn)??((isLocal?tag:null)||getDefaultCacheTag());return cacheContext.run({params,target:fn},()=>memoized(...args))},"wrapper");return wrapper}__name(useCache,"useCache");function cacheTag(tag){if(!tag)throw new TypeError("cacheTag must be called with a tag.");let context=cacheContext.getStore();if(context===void 0)throw new Error('cacheTag must be called inside cache() or a function decorated with "use cache" directive.');let tagObj;typeof tag=="string"?tagObj={tag,ttl:context.params?.ttl??DEFAULT_TTL}:tagObj=tag,context.params=tagObj}__name(cacheTag,"cacheTag");function cacheLife(life){if(life==null)throw new TypeError("cacheLife must be called with a time-to-live value.");let context=cacheContext.getStore();if(context===void 0)throw new Error('cacheLife must be called inside cache() or a function decorated with "use cache" directive.');typeof life=="string"?context.params.ttl=ms(life):context.params.ttl=life}__name(cacheLife,"cacheLife");async function invalidate(tag){let cache2=getCommandKit(!0).getCacheProvider();if(!cache2)throw new Error("CacheProvider was not found, please provide a cache provider to the CommandKit instance.");await cache2.delete(tag)}__name(invalidate,"invalidate");async function revalidate(tag,...args){let cache2=getCommandKit(!0).getCacheProvider();if(!cache2)throw new Error("CacheProvider was not found, please provide a cache provider to the CommandKit instance.");await cache2.delete(tag);let tagFn=TAG_FUNCTION_MAP.get(tag);if(!tagFn)return;let ctx=CACHED_FUNCTIONS_STORE.get(tagFn);if(ctx)return ctx.memo(...args)}__name(revalidate,"revalidate");export{cache,useCache,cacheTag,cacheLife,invalidate,revalidate};
2
- //# sourceMappingURL=chunk-J7CCGFUZ.mjs.map
1
+ import{getCommandKit}from"./chunk-KAJRRZVI.mjs";import{__name}from"./chunk-35OSBS47.mjs";import{AsyncLocalStorage}from"node:async_hooks";import ms from"ms";import{randomUUID}from"node:crypto";var CACHED_FUNCTIONS_STORE=new WeakMap,TAG_FUNCTION_MAP=new Map,DEFAULT_TTL=ms("15m"),cacheContext=new AsyncLocalStorage,__identificationKey=`__cache_identification_key_${Date.now()}__${Math.random()}__`,getDefaultCacheTag=__name(()=>({tag:randomUUID(),ttl:DEFAULT_TTL}),"getDefaultCacheTag");function cache(fn,params){return params=Object.assign({},getDefaultCacheTag(),params),useCache(fn,__identificationKey,params)}__name(cache,"cache");function useCache(fn,id,tag){if(id!==void 0&&id!==__identificationKey)throw new TypeError("useCache may not be called directly.");let isLocal=id===__identificationKey,memoized=__name(async(...args)=>{let cache2=getCommandKit(!0).getCacheProvider();if(!cache2)throw new Error("CacheProvider was not found, please provide a cache provider to the CommandKit instance.");let context=cacheContext.getStore();if(context===void 0)throw new Error('useCache must be called inside a function decorated with "use cache" directive.');let entryKey=context.params.tag,entry=await cache2.get(entryKey);if(entry!==void 0)return entry.value;let ttl=typeof context.params.ttl=="string"?ms(context.params.ttl):context.params.ttl,writeCache=__name(async(...args2)=>{let result=await fn(...args2);return CACHED_FUNCTIONS_STORE.set(fn,{...context.params,target:fn,memo:cacheContext.exit(()=>wrapper)}),entryKey!==context.params.tag&&TAG_FUNCTION_MAP.delete(entryKey),TAG_FUNCTION_MAP.set(context.params.tag,fn),await cache2.set(entryKey,result,ttl),result},"writeCache");return CACHED_FUNCTIONS_STORE.set(fn,{...context.params,target:fn,memo:cacheContext.exit(()=>wrapper)}),TAG_FUNCTION_MAP.set(entryKey,fn),writeCache(...args)},"memoized"),wrapper=__name(async(...args)=>{let params=CACHED_FUNCTIONS_STORE.get(fn)??((isLocal?tag:null)||getDefaultCacheTag());return cacheContext.run({params,target:fn},()=>memoized(...args))},"wrapper");return wrapper}__name(useCache,"useCache");function cacheTag(tag){var _a;if(!tag)throw new TypeError("cacheTag must be called with a tag.");let context=cacheContext.getStore();if(context===void 0)throw new Error('cacheTag must be called inside cache() or a function decorated with "use cache" directive.');let tagObj;typeof tag=="string"?tagObj={tag,ttl:((_a=context.params)==null?void 0:_a.ttl)??DEFAULT_TTL}:tagObj=tag,context.params=tagObj}__name(cacheTag,"cacheTag");function cacheLife(life){if(life==null)throw new TypeError("cacheLife must be called with a time-to-live value.");let context=cacheContext.getStore();if(context===void 0)throw new Error('cacheLife must be called inside cache() or a function decorated with "use cache" directive.');typeof life=="string"?context.params.ttl=ms(life):context.params.ttl=life}__name(cacheLife,"cacheLife");async function invalidate(tag){let cache2=getCommandKit(!0).getCacheProvider();if(!cache2)throw new Error("CacheProvider was not found, please provide a cache provider to the CommandKit instance.");await cache2.delete(tag)}__name(invalidate,"invalidate");async function revalidate(tag,...args){let cache2=getCommandKit(!0).getCacheProvider();if(!cache2)throw new Error("CacheProvider was not found, please provide a cache provider to the CommandKit instance.");await cache2.delete(tag);let tagFn=TAG_FUNCTION_MAP.get(tag);if(!tagFn)return;let ctx=CACHED_FUNCTIONS_STORE.get(tagFn);if(ctx)return ctx.memo(...args)}__name(revalidate,"revalidate");export{cache,useCache,cacheTag,cacheLife,invalidate,revalidate};
2
+ //# sourceMappingURL=chunk-UP6ACDGE.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cache/cache.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport ms from 'ms';\nimport { GenericFunction, getCommandKit } from '../context/async-context';\nimport { randomUUID } from 'node:crypto';\n\nexport type AsyncFunction<R extends any[] = any[], T = any> = (\n...args: R)\n=> Promise<T>;\n\nexport interface CacheTag {\n tag: string;\n ttl: number | string;\n}\n\nexport interface CacheParams extends CacheTag {\n target: GenericFunction;\n memo: GenericFunction;\n}\n\ninterface CacheContext {\n target: GenericFunction;\n params: CacheTag;\n memo?: GenericFunction;\n}\n\nconst CACHED_FUNCTIONS_STORE = new WeakMap<Function, CacheParams>();\nconst TAG_FUNCTION_MAP = new Map<string, Function>();\nconst DEFAULT_TTL = ms('15m');\n\nconst cacheContext = new AsyncLocalStorage<CacheContext>();\n\nconst __identificationKey = `__cache_identification_key_${Date.now()}__${Math.random()}__`;\n\nconst getDefaultCacheTag = (): CacheTag => {\n return {\n tag: randomUUID(),\n ttl: DEFAULT_TTL\n };\n};\n\n/**\n * Cache a function with a specific tag and time-to-live.\n * @param fn The function to cache.\n * @param params The cache tag and time-to-live.\n * @returns The memoized function.\n */\nfunction cache<R extends any[], F extends AsyncFunction<R>>(\nfn: F,\nparams?: Partial<CacheTag>)\n: F {\n params = Object.assign({}, getDefaultCacheTag(), params);\n\n return useCache(fn, __identificationKey, params as CacheTag);\n}\n\n/**\n * **DO NOT USE THIS FUNCTION DIRECTLY**\n * @internal\n * @private\n */\nfunction useCache<R extends any[], F extends AsyncFunction<R>>(\nfn: F,\nid?: string,\ntag?: CacheTag)\n: F {\n if (id !== undefined && id !== __identificationKey) {\n throw new TypeError('useCache may not be called directly.');\n }\n\n const isLocal = id === __identificationKey;\n\n const memoized = (async (...args) => {\n const commandkit = getCommandKit(true);\n const cache = commandkit.getCacheProvider();\n\n if (!cache) {\n throw new Error(\n 'CacheProvider was not found, please provide a cache provider to the CommandKit instance.'\n );\n }\n\n const context = cacheContext.getStore();\n\n if (context === undefined) {\n throw new Error(\n 'useCache must be called inside a function decorated with \"use cache\" directive.'\n );\n }\n\n const entryKey = context.params.tag;\n const entry = await cache.get(entryKey);\n\n // cache hit\n if (entry !== undefined) {\n return entry.value;\n }\n\n const ttl =\n typeof context.params.ttl === 'string' ?\n ms(context.params.ttl) :\n context.params.ttl;\n\n const writeCache = async (...args: any) => {\n const result = await fn(...args);\n\n CACHED_FUNCTIONS_STORE.set(fn, {\n ...context.params,\n target: fn,\n memo: cacheContext.exit(() => wrapper)\n });\n\n if (entryKey !== context.params.tag) {\n TAG_FUNCTION_MAP.delete(entryKey);\n }\n\n TAG_FUNCTION_MAP.set(context.params.tag, fn);\n\n await cache.set(entryKey, result, ttl);\n\n return result;\n };\n\n CACHED_FUNCTIONS_STORE.set(fn, {\n ...context.params,\n target: fn,\n memo: cacheContext.exit(() => wrapper)\n });\n\n TAG_FUNCTION_MAP.set(entryKey, fn);\n\n return writeCache(...args);\n }) as F;\n\n const wrapper = (async (...args: any) => {\n const params =\n CACHED_FUNCTIONS_STORE.get(fn) ?? (\n (isLocal ? tag : null) || getDefaultCacheTag());\n\n return cacheContext.run(\n {\n params,\n target: fn\n },\n () => memoized(...args)\n );\n }) as F;\n\n return wrapper;\n}\n\n/**\n * Tags the current function with the given cache tag name\n * @param tag The cache tag name.\n */\nfunction cacheTag(tag: string): void;\n/**\n * Tags the current function with the given cache tag parameters.\n * @param tag The cache tag parameters.\n */\nfunction cacheTag(tag: CacheTag): void;\n/**\n * Tags the current function with the given cache tag name or parameters.\n * @param tag The cache tag name or parameters.\n */\nfunction cacheTag(tag: CacheTag | string): void {\n if (!tag) {\n throw new TypeError('cacheTag must be called with a tag.');\n }\n\n const context = cacheContext.getStore();\n\n if (context === undefined) {\n throw new Error(\n 'cacheTag must be called inside cache() or a function decorated with \"use cache\" directive.'\n );\n }\n\n let tagObj: CacheTag;\n\n if (typeof tag === 'string') {\n tagObj = {\n tag,\n ttl: context.params?.ttl ?? DEFAULT_TTL\n };\n } else {\n tagObj = tag;\n }\n\n context.params = tagObj;\n}\n\n/**\n * Sets the time-to-live for the current cache tag.\n * @param life The time-to-live value in milliseconds or a string.\n */\nfunction cacheLife(life: string): void;\nfunction cacheLife(life: number): void;\nfunction cacheLife(life: string | number) {\n if (life == null) {\n throw new TypeError('cacheLife must be called with a time-to-live value.');\n }\n\n const context = cacheContext.getStore();\n\n if (context === undefined) {\n throw new Error(\n 'cacheLife must be called inside cache() or a function decorated with \"use cache\" directive.'\n );\n }\n\n if (typeof life === 'string') {\n context.params.ttl = ms(life);\n } else {\n context.params.ttl = life;\n }\n}\n\n/**\n * Invalidates the cache with the given tag.\n * This will immediately remove the cache entry. The next time cache is requested, it will be re-fetched.\n * @param tag The cache tag to invalidate.\n */\nasync function invalidate(tag: string) {\n const commandkit = getCommandKit(true);\n const cache = commandkit.getCacheProvider();\n\n if (!cache) {\n throw new Error(\n 'CacheProvider was not found, please provide a cache provider to the CommandKit instance.'\n );\n }\n\n await cache.delete(tag);\n}\n\n/**\n * Revalidates the cache with the given tag.\n * This will immediately remove the cache entry and re-fetch the value.\n * @param tag The cache tag to revalidate.\n * @param args The arguments to pass to the memoized function (if any).\n * @returns The new value of the cache.\n */\nasync function revalidate<R = any>(\ntag: string,\n...args: any[])\n: Promise<R | undefined> {\n const commandkit = getCommandKit(true);\n const cache = commandkit.getCacheProvider();\n\n if (!cache) {\n throw new Error(\n 'CacheProvider was not found, please provide a cache provider to the CommandKit instance.'\n );\n }\n\n await cache.delete(tag);\n\n const tagFn = TAG_FUNCTION_MAP.get(tag);\n if (!tagFn) return undefined;\n\n const ctx = CACHED_FUNCTIONS_STORE.get(tagFn);\n if (!ctx) return undefined;\n\n return ctx.memo(...args) as R;\n}\n\nexport {\n cache,\n useCache as super_duper_secret_internal_for_use_cache_directive_of_commandkit_cli_do_not_use_it_directly_or_you_will_be_fired_from_your_job_kthxbai,\n cacheTag,\n cacheLife,\n invalidate,\n revalidate };"],"mappings":"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","names":["cache","args"]}
1
+ {"version":3,"sources":["../src/cache/cache.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks';\nimport ms from 'ms';\nimport { GenericFunction, getCommandKit } from '../context/async-context';\nimport { randomUUID } from 'node:crypto';\n\nexport type AsyncFunction<R extends any[] = any[], T = any> = (\n...args: R)\n=> Promise<T>;\n\nexport interface CacheTag {\n tag: string;\n ttl: number | string;\n}\n\nexport interface CacheParams extends CacheTag {\n target: GenericFunction;\n memo: GenericFunction;\n}\n\ninterface CacheContext {\n target: GenericFunction;\n params: CacheTag;\n memo?: GenericFunction;\n}\n\nconst CACHED_FUNCTIONS_STORE = new WeakMap<Function, CacheParams>();\nconst TAG_FUNCTION_MAP = new Map<string, Function>();\nconst DEFAULT_TTL = ms('15m');\n\nconst cacheContext = new AsyncLocalStorage<CacheContext>();\n\nconst __identificationKey = `__cache_identification_key_${Date.now()}__${Math.random()}__`;\n\nconst getDefaultCacheTag = (): CacheTag => {\n return {\n tag: randomUUID(),\n ttl: DEFAULT_TTL\n };\n};\n\n/**\n * Cache a function with a specific tag and time-to-live.\n * @param fn The function to cache.\n * @param params The cache tag and time-to-live.\n * @returns The memoized function.\n */\nfunction cache<R extends any[], F extends AsyncFunction<R>>(\nfn: F,\nparams?: Partial<CacheTag>)\n: F {\n params = Object.assign({}, getDefaultCacheTag(), params);\n\n return useCache(fn, __identificationKey, params as CacheTag);\n}\n\n/**\n * **DO NOT USE THIS FUNCTION DIRECTLY**\n * @internal\n * @private\n */\nfunction useCache<R extends any[], F extends AsyncFunction<R>>(\nfn: F,\nid?: string,\ntag?: CacheTag)\n: F {\n if (id !== undefined && id !== __identificationKey) {\n throw new TypeError('useCache may not be called directly.');\n }\n\n const isLocal = id === __identificationKey;\n\n const memoized = (async (...args) => {\n const commandkit = getCommandKit(true);\n const cache = commandkit.getCacheProvider();\n\n if (!cache) {\n throw new Error(\n 'CacheProvider was not found, please provide a cache provider to the CommandKit instance.'\n );\n }\n\n const context = cacheContext.getStore();\n\n if (context === undefined) {\n throw new Error(\n 'useCache must be called inside a function decorated with \"use cache\" directive.'\n );\n }\n\n const entryKey = context.params.tag;\n const entry = await cache.get(entryKey);\n\n // cache hit\n if (entry !== undefined) {\n return entry.value;\n }\n\n const ttl =\n typeof context.params.ttl === 'string' ?\n ms(context.params.ttl) :\n context.params.ttl;\n\n const writeCache = async (...args: any) => {\n const result = await fn(...args);\n\n CACHED_FUNCTIONS_STORE.set(fn, {\n ...context.params,\n target: fn,\n memo: cacheContext.exit(() => wrapper)\n });\n\n if (entryKey !== context.params.tag) {\n TAG_FUNCTION_MAP.delete(entryKey);\n }\n\n TAG_FUNCTION_MAP.set(context.params.tag, fn);\n\n await cache.set(entryKey, result, ttl);\n\n return result;\n };\n\n CACHED_FUNCTIONS_STORE.set(fn, {\n ...context.params,\n target: fn,\n memo: cacheContext.exit(() => wrapper)\n });\n\n TAG_FUNCTION_MAP.set(entryKey, fn);\n\n return writeCache(...args);\n }) as F;\n\n const wrapper = (async (...args: any) => {\n const params =\n CACHED_FUNCTIONS_STORE.get(fn) ?? (\n (isLocal ? tag : null) || getDefaultCacheTag());\n\n return cacheContext.run(\n {\n params,\n target: fn\n },\n () => memoized(...args)\n );\n }) as F;\n\n return wrapper;\n}\n\n/**\n * Tags the current function with the given cache tag name\n * @param tag The cache tag name.\n */\nfunction cacheTag(tag: string): void;\n/**\n * Tags the current function with the given cache tag parameters.\n * @param tag The cache tag parameters.\n */\nfunction cacheTag(tag: CacheTag): void;\n/**\n * Tags the current function with the given cache tag name or parameters.\n * @param tag The cache tag name or parameters.\n */\nfunction cacheTag(tag: CacheTag | string): void {\n if (!tag) {\n throw new TypeError('cacheTag must be called with a tag.');\n }\n\n const context = cacheContext.getStore();\n\n if (context === undefined) {\n throw new Error(\n 'cacheTag must be called inside cache() or a function decorated with \"use cache\" directive.'\n );\n }\n\n let tagObj: CacheTag;\n\n if (typeof tag === 'string') {\n tagObj = {\n tag,\n ttl: context.params?.ttl ?? DEFAULT_TTL\n };\n } else {\n tagObj = tag;\n }\n\n context.params = tagObj;\n}\n\n/**\n * Sets the time-to-live for the current cache tag.\n * @param life The time-to-live value in milliseconds or a string.\n */\nfunction cacheLife(life: string): void;\nfunction cacheLife(life: number): void;\nfunction cacheLife(life: string | number) {\n if (life == null) {\n throw new TypeError('cacheLife must be called with a time-to-live value.');\n }\n\n const context = cacheContext.getStore();\n\n if (context === undefined) {\n throw new Error(\n 'cacheLife must be called inside cache() or a function decorated with \"use cache\" directive.'\n );\n }\n\n if (typeof life === 'string') {\n context.params.ttl = ms(life);\n } else {\n context.params.ttl = life;\n }\n}\n\n/**\n * Invalidates the cache with the given tag.\n * This will immediately remove the cache entry. The next time cache is requested, it will be re-fetched.\n * @param tag The cache tag to invalidate.\n */\nasync function invalidate(tag: string) {\n const commandkit = getCommandKit(true);\n const cache = commandkit.getCacheProvider();\n\n if (!cache) {\n throw new Error(\n 'CacheProvider was not found, please provide a cache provider to the CommandKit instance.'\n );\n }\n\n await cache.delete(tag);\n}\n\n/**\n * Revalidates the cache with the given tag.\n * This will immediately remove the cache entry and re-fetch the value.\n * @param tag The cache tag to revalidate.\n * @param args The arguments to pass to the memoized function (if any).\n * @returns The new value of the cache.\n */\nasync function revalidate<R = any>(\ntag: string,\n...args: any[])\n: Promise<R | undefined> {\n const commandkit = getCommandKit(true);\n const cache = commandkit.getCacheProvider();\n\n if (!cache) {\n throw new Error(\n 'CacheProvider was not found, please provide a cache provider to the CommandKit instance.'\n );\n }\n\n await cache.delete(tag);\n\n const tagFn = TAG_FUNCTION_MAP.get(tag);\n if (!tagFn) return undefined;\n\n const ctx = CACHED_FUNCTIONS_STORE.get(tagFn);\n if (!ctx) return undefined;\n\n return ctx.memo(...args) as R;\n}\n\nexport {\n cache,\n useCache as super_duper_secret_internal_for_use_cache_directive_of_commandkit_cli_do_not_use_it_directly_or_you_will_be_fired_from_your_job_kthxbai,\n cacheTag,\n cacheLife,\n invalidate,\n revalidate };"],"mappings":"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","names":["cache","args"]}