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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cli/esbuild-plugins/plugin.ts","../../../src/cli/esbuild-plugins/use-cache.ts"],"sourcesContent":["import { MacroTransformer } from 'use-macro';\nimport { cacheDirectivePlugin } from './use-cache';\nimport { readFile } from 'node:fs/promises';\n\nconst defaultConfig = {\n 'use-macro': true,\n 'use-cache': true\n};\n\ninterface CommandKitEsbuildPluginConfig {\n 'use-macro'?: boolean;\n 'use-cache'?: boolean;\n}\n\nexport const commandkitPlugin = (config?: CommandKitEsbuildPluginConfig) => {\n config = Object.assign({}, defaultConfig, config);\n\n const plugins = [\n {\n name: 'use-macro',\n plugin: async (content: string, args: any) => {\n const transformer = new MacroTransformer();\n const { contents } = await transformer.transform(content, args.path);\n return contents;\n }\n },\n {\n name: 'use-cache',\n plugin: async (content: string, args: any) => {\n const { contents } = await cacheDirectivePlugin(content, args);\n return contents;\n }\n }].\n filter((p) => {\n return !!config[p.name as keyof CommandKitEsbuildPluginConfig];\n });\n\n return {\n name: 'commandkit-transformer-plugin',\n setup(build: any) {\n if (!plugins.length) return;\n\n const fileFilter = /\\.(c|m)?(t|j)sx?$/;\n\n build.onLoad({ filter: fileFilter }, async (args: any) => {\n const source = await readFile(args.path, 'utf8');\n const loader = args.path.split('.').pop();\n\n let contents = source;\n\n for (const _plugin of plugins) {\n const { plugin, name } = _plugin;\n try {\n contents = await plugin(contents, args);\n } catch (e) {\n const err = new Error(`Plugin ${name} failed with ${e}`);\n err.stack = e instanceof Error ? e.stack : '';\n\n throw err;\n }\n }\n\n return {\n contents,\n loader\n };\n });\n }\n };\n};","import * as parser from '@babel/parser';\nimport _traverse from '@babel/traverse';\nimport _generate from '@babel/generator';\nimport * as t from '@babel/types';\n\n// @ts-ignore\nconst traverse = _traverse.default || _traverse;\n// @ts-ignore\nconst generate = _generate.default || _generate;\n\nconst IMPORT_PATH = 'commandkit';\nconst DIRECTIVE = 'use cache';\nconst CACHE_IDENTIFIER =\n'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\nconst generateRandomString = (length = 6) => {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n return Array.from(\n { length },\n () => chars[Math.floor(Math.random() * chars.length)]\n ).join('');\n};\n\nexport const cacheDirectivePlugin = async (source: string, args: any) => {\n const ast = parser.parse(source, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx']\n });\n\n let state = {\n needsImport: false,\n hasExistingImport: false,\n cacheIdentifierName: CACHE_IDENTIFIER,\n modifications: []\n };\n\n // First pass: check for naming collisions and collect modifications\n traverse(ast, {\n Program: {\n enter(path: any) {\n const binding = path.scope.getBinding(CACHE_IDENTIFIER);\n if (binding) {\n state.cacheIdentifierName = `${CACHE_IDENTIFIER}_${generateRandomString()}`;\n }\n }\n },\n\n ImportDeclaration(path: any) {\n if (\n path.node.source.value === IMPORT_PATH &&\n path.node.specifiers.some(\n (spec: any) =>\n t.isImportSpecifier(spec) &&\n // @ts-ignore\n spec.imported.name === CACHE_IDENTIFIER\n ))\n {\n state.hasExistingImport = true;\n if (state.cacheIdentifierName !== CACHE_IDENTIFIER) {\n // @ts-ignore\n state.modifications.push(() => {\n path.node.specifiers.forEach((spec: any) => {\n if (\n t.isImportSpecifier(spec) &&\n // @ts-ignore\n spec.imported.name === CACHE_IDENTIFIER)\n {\n spec.local.name = state.cacheIdentifierName;\n }\n });\n });\n }\n }\n },\n\n 'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression'(\n path: any)\n {\n const body = t.isBlockStatement(path.node.body) ? path.node.body : null;\n const hasUseCache = body?.directives?.some(\n (d: any) => d.value.value === DIRECTIVE\n );\n\n if (!hasUseCache && !t.isBlockStatement(path.node.body)) {\n const parentFunction = path.findParent(\n (p: any) =>\n (p.isFunction() || p.isProgram()) && 'directives' in p.node\n );\n if (\n !parentFunction?.node.directives?.some(\n (d: any) => d.value.value === DIRECTIVE\n ))\n {\n return;\n }\n }\n\n if (hasUseCache || !t.isBlockStatement(path.node.body)) {\n // Check if the function is async\n if (!path.node.async) {\n throw new Error(\n `\"${DIRECTIVE}\" directive may only be used in async functions at ${args.path}`\n );\n }\n\n state.needsImport = true;\n const isDeclaration = t.isFunctionDeclaration(path.node);\n const name = isDeclaration ? path.node.id?.name : undefined;\n\n // Create a new body without the 'use cache' directive\n const newBody = t.isBlockStatement(path.node.body) ?\n t.blockStatement(\n path.node.body.body,\n path.node.body.directives.filter(\n (d: any) => d.value.value !== DIRECTIVE\n )\n ) :\n path.node.body;\n\n const wrapped = t.callExpression(\n t.identifier(state.cacheIdentifierName),\n [t.arrowFunctionExpression(path.node.params, newBody, true)]\n );\n\n // @ts-ignore\n state.modifications.push(() => {\n if (name) {\n path.replaceWith(\n t.variableDeclaration('const', [\n t.variableDeclarator(t.identifier(name), wrapped)]\n )\n );\n } else if (!t.isVariableDeclarator(path.parent)) {\n path.replaceWith(wrapped);\n } else {\n path.parent.init = wrapped;\n }\n });\n }\n }\n });\n\n // Apply all collected modifications\n if (state.modifications.length > 0) {\n // Add import if needed\n if (state.needsImport && !state.hasExistingImport) {\n ast.program.body.unshift(\n t.importDeclaration(\n [\n t.importSpecifier(\n t.identifier(state.cacheIdentifierName),\n t.identifier(CACHE_IDENTIFIER)\n )],\n\n t.stringLiteral(IMPORT_PATH)\n )\n );\n }\n\n // Apply collected modifications\n // @ts-ignore\n state.modifications.forEach((modify) => modify());\n }\n\n const { code } = generate(ast);\n return {\n contents: code,\n loader: args.path.split('.').pop()\n };\n};"],"mappings":"q+BAAA,mIAAA,qBAAiC,qBCAjC,WAAwB,kCACxB,gBAAsB,oCACtB,iBAAsB,qCACtB,EAAmB,iCAGnB,IAAM,SAAW,gBAAAA,QAAU,SAAW,gBAAAA,QAEhC,SAAW,iBAAAC,QAAU,SAAW,iBAAAA,QAEhC,YAAc,aACd,UAAY,YACZ,iBACN,0IAEM,qBAAuB,QAAC,OAAS,IAAM,CAC3C,IAAM,MAAQ,uDACd,OAAO,MAAM,KACX,CAAE,MAAO,EACT,IAAM,MAAM,KAAK,MAAM,KAAK,OAAO,EAAI,MAAM,MAAM,CAAC,CACtD,EAAE,KAAK,EAAE,CACX,EAN6B,wBAQhB,qBAAuB,aAAO,OAAgB,OAAc,CACvE,IAAM,IAAa,aAAM,OAAQ,CAC/B,WAAY,SACZ,QAAS,CAAC,aAAc,KAAK,CAC/B,CAAC,EAEG,MAAQ,CACV,YAAa,GACb,kBAAmB,GACnB,oBAAqB,iBACrB,cAAe,CAAC,CAClB,EAGA,SAAS,IAAK,CACZ,QAAS,CACP,MAAM,KAAW,CACC,KAAK,MAAM,WAAW,gBAAgB,IAEpD,MAAM,oBAAsB,GAAG,gBAAgB,IAAI,qBAAqB,CAAC,GAE7E,CACF,EAEA,kBAAkB,KAAW,CAE3B,KAAK,KAAK,OAAO,QAAU,aAC3B,KAAK,KAAK,WAAW,KAClB,MACC,oBAAkB,IAAI,GAExB,KAAK,SAAS,OAAS,gBACzB,IAEE,MAAM,kBAAoB,GACtB,MAAM,sBAAwB,kBAEhC,MAAM,cAAc,KAAK,IAAM,CAC7B,KAAK,KAAK,WAAW,QAAS,MAAc,CAExC,oBAAkB,IAAI,GAExB,KAAK,SAAS,OAAS,mBAErB,KAAK,MAAM,KAAO,MAAM,oBAE5B,CAAC,CACH,CAAC,EAGP,EAEA,iEACA,KACA,CA7EJ,aA8EM,IAAM,KAAS,mBAAiB,KAAK,KAAK,IAAI,EAAI,KAAK,KAAK,KAAO,KAC7D,aAAc,0BAAM,aAAN,eAAkB,KACnC,GAAW,EAAE,MAAM,QAAU,WAGhC,GAAI,CAAC,aAAe,CAAG,mBAAiB,KAAK,KAAK,IAAI,EAAG,CACvD,IAAM,eAAiB,KAAK,WACzB,IACA,EAAE,WAAW,GAAK,EAAE,UAAU,IAAM,eAAgB,EAAE,IACzD,EACA,GACA,GAAC,8CAAgB,KAAK,aAArB,SAAiC,KAC/B,GAAW,EAAE,MAAM,QAAU,YAG9B,MAEJ,CAEA,GAAI,aAAe,CAAG,mBAAiB,KAAK,KAAK,IAAI,EAAG,CAEtD,GAAI,CAAC,KAAK,KAAK,MACb,MAAM,IAAI,MACR,IAAI,SAAS,sDAAsD,KAAK,IAAI,EAC9E,EAGF,MAAM,YAAc,GAEpB,IAAM,KADkB,wBAAsB,KAAK,IAAI,GAC1B,QAAK,KAAK,KAAV,eAAc,KAAO,OAG5C,QAAY,mBAAiB,KAAK,KAAK,IAAI,EAC/C,iBACA,KAAK,KAAK,KAAK,KACf,KAAK,KAAK,KAAK,WAAW,OACvB,GAAW,EAAE,MAAM,QAAU,SAChC,CACF,EACA,KAAK,KAAK,KAEJ,QAAY,iBACd,aAAW,MAAM,mBAAmB,EACtC,CAAG,0BAAwB,KAAK,KAAK,OAAQ,QAAS,EAAI,CAAC,CAC7D,EAGA,MAAM,cAAc,KAAK,IAAM,CACzB,KACF,KAAK,YACD,sBAAoB,QAAS,CAC7B,qBAAqB,aAAW,IAAI,EAAG,OAAO,CAAC,CACjD,CACF,EACY,uBAAqB,KAAK,MAAM,EAG5C,KAAK,OAAO,KAAO,QAFnB,KAAK,YAAY,OAAO,CAI5B,CAAC,CACH,CACF,CACF,CAAC,EAGG,MAAM,cAAc,OAAS,IAE3B,MAAM,aAAe,CAAC,MAAM,mBAC9B,IAAI,QAAQ,KAAK,QACb,oBACA,CACE,kBACE,aAAW,MAAM,mBAAmB,EACpC,aAAW,gBAAgB,CAC/B,CAAC,EAEC,gBAAc,WAAW,CAC7B,CACF,EAKF,MAAM,cAAc,QAAS,QAAW,OAAO,CAAC,GAGlD,GAAM,CAAE,IAAK,EAAI,SAAS,GAAG,EAC7B,MAAO,CACL,SAAU,KACV,OAAQ,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,CACnC,CACF,EAlJoC,wBDrBpC,oBAAyB,uBAEzB,IAAM,cAAgB,CACpB,YAAa,GACb,YAAa,EACf,EAOa,iBAAmB,OAAC,QAA2C,CAC1E,OAAS,OAAO,OAAO,CAAC,EAAG,cAAe,MAAM,EAEhD,IAAM,QAAU,CAChB,CACE,KAAM,YACN,OAAQ,aAAO,QAAiB,OAAc,CAC5C,IAAM,YAAc,IAAI,kCAClB,CAAE,QAAS,EAAI,MAAM,YAAY,UAAU,QAAS,KAAK,IAAI,EACnE,OAAO,QACT,EAJQ,SAKV,EACA,CACE,KAAM,YACN,OAAQ,aAAO,QAAiB,OAAc,CAC5C,GAAM,CAAE,QAAS,EAAI,MAAM,qBAAqB,QAAS,IAAI,EAC7D,OAAO,QACT,EAHQ,SAIV,CAAC,EACD,OAAQ,GACC,CAAC,CAAC,OAAO,EAAE,IAA2C,CAC9D,EAED,MAAO,CACL,KAAM,gCACN,MAAM,MAAY,CAChB,GAAI,CAAC,QAAQ,OAAQ,OAErB,IAAM,WAAa,oBAEnB,MAAM,OAAO,CAAE,OAAQ,UAAW,EAAG,MAAO,MAAc,CACxD,IAAM,OAAS,QAAM,0BAAS,KAAK,KAAM,MAAM,EACzC,OAAS,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,EAEpC,SAAW,OAEf,QAAW,WAAW,QAAS,CAC7B,GAAM,CAAE,OAAQ,IAAK,EAAI,QACzB,GAAI,CACF,SAAW,MAAM,OAAO,SAAU,IAAI,CACxC,OAAS,EAAG,CACV,IAAM,IAAM,IAAI,MAAM,UAAU,IAAI,gBAAgB,CAAC,EAAE,EACvD,UAAI,MAAQ,aAAa,MAAQ,EAAE,MAAQ,GAErC,GACR,CACF,CAEA,MAAO,CACL,SACA,MACF,CACF,CAAC,CACH,CACF,CACF,EAvDgC","names":["_traverse","_generate"]}
@@ -0,0 +1,2 @@
1
+ import{commandkitPlugin}from"../../chunk-ZCUZ5ENB.mjs";import"../../chunk-Y522NY4J.mjs";import"../../chunk-35OSBS47.mjs";export{commandkitPlugin};
2
+ //# sourceMappingURL=plugin.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,6 @@
1
+ declare const cacheDirectivePlugin: (source: string, args: any) => Promise<{
2
+ contents: any;
3
+ loader: any;
4
+ }>;
5
+
6
+ export { cacheDirectivePlugin };
@@ -0,0 +1,6 @@
1
+ declare const cacheDirectivePlugin: (source: string, args: any) => Promise<{
2
+ contents: any;
3
+ loader: any;
4
+ }>;
5
+
6
+ export { cacheDirectivePlugin };
@@ -0,0 +1,2 @@
1
+ "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var use_cache_exports={};__export(use_cache_exports,{cacheDirectivePlugin:()=>cacheDirectivePlugin});module.exports=__toCommonJS(use_cache_exports);var parser=__toESM(require("@babel/parser")),import_traverse=__toESM(require("@babel/traverse")),import_generator=__toESM(require("@babel/generator")),t=__toESM(require("@babel/types"));var traverse=import_traverse.default.default||import_traverse.default,generate=import_generator.default.default||import_generator.default,IMPORT_PATH="commandkit",DIRECTIVE="use cache",CACHE_IDENTIFIER="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",generateRandomString=__name((length=6)=>{let chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";return Array.from({length},()=>chars[Math.floor(Math.random()*chars.length)]).join("")},"generateRandomString"),cacheDirectivePlugin=__name(async(source,args)=>{let ast=parser.parse(source,{sourceType:"module",plugins:["typescript","jsx"]}),state={needsImport:!1,hasExistingImport:!1,cacheIdentifierName:CACHE_IDENTIFIER,modifications:[]};traverse(ast,{Program:{enter(path){path.scope.getBinding(CACHE_IDENTIFIER)&&(state.cacheIdentifierName=`${CACHE_IDENTIFIER}_${generateRandomString()}`)}},ImportDeclaration(path){path.node.source.value===IMPORT_PATH&&path.node.specifiers.some(spec=>t.isImportSpecifier(spec)&&spec.imported.name===CACHE_IDENTIFIER)&&(state.hasExistingImport=!0,state.cacheIdentifierName!==CACHE_IDENTIFIER&&state.modifications.push(()=>{path.node.specifiers.forEach(spec=>{t.isImportSpecifier(spec)&&spec.imported.name===CACHE_IDENTIFIER&&(spec.local.name=state.cacheIdentifierName)})}))},"FunctionDeclaration|FunctionExpression|ArrowFunctionExpression"(path){var _a,_b,_c;let body=t.isBlockStatement(path.node.body)?path.node.body:null,hasUseCache=(_a=body==null?void 0:body.directives)==null?void 0:_a.some(d=>d.value.value===DIRECTIVE);if(!hasUseCache&&!t.isBlockStatement(path.node.body)){let parentFunction=path.findParent(p=>(p.isFunction()||p.isProgram())&&"directives"in p.node);if(!((_b=parentFunction==null?void 0:parentFunction.node.directives)!=null&&_b.some(d=>d.value.value===DIRECTIVE)))return}if(hasUseCache||!t.isBlockStatement(path.node.body)){if(!path.node.async)throw new Error(`"${DIRECTIVE}" directive may only be used in async functions at ${args.path}`);state.needsImport=!0;let name=t.isFunctionDeclaration(path.node)?(_c=path.node.id)==null?void 0:_c.name:void 0,newBody=t.isBlockStatement(path.node.body)?t.blockStatement(path.node.body.body,path.node.body.directives.filter(d=>d.value.value!==DIRECTIVE)):path.node.body,wrapped=t.callExpression(t.identifier(state.cacheIdentifierName),[t.arrowFunctionExpression(path.node.params,newBody,!0)]);state.modifications.push(()=>{name?path.replaceWith(t.variableDeclaration("const",[t.variableDeclarator(t.identifier(name),wrapped)])):t.isVariableDeclarator(path.parent)?path.parent.init=wrapped:path.replaceWith(wrapped)})}}}),state.modifications.length>0&&(state.needsImport&&!state.hasExistingImport&&ast.program.body.unshift(t.importDeclaration([t.importSpecifier(t.identifier(state.cacheIdentifierName),t.identifier(CACHE_IDENTIFIER))],t.stringLiteral(IMPORT_PATH))),state.modifications.forEach(modify=>modify()));let{code}=generate(ast);return{contents:code,loader:args.path.split(".").pop()}},"cacheDirectivePlugin");0&&(module.exports={cacheDirectivePlugin});
2
+ //# sourceMappingURL=use-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cli/esbuild-plugins/use-cache.ts"],"sourcesContent":["import * as parser from '@babel/parser';\nimport _traverse from '@babel/traverse';\nimport _generate from '@babel/generator';\nimport * as t from '@babel/types';\n\n// @ts-ignore\nconst traverse = _traverse.default || _traverse;\n// @ts-ignore\nconst generate = _generate.default || _generate;\n\nconst IMPORT_PATH = 'commandkit';\nconst DIRECTIVE = 'use cache';\nconst CACHE_IDENTIFIER =\n'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\nconst generateRandomString = (length = 6) => {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n return Array.from(\n { length },\n () => chars[Math.floor(Math.random() * chars.length)]\n ).join('');\n};\n\nexport const cacheDirectivePlugin = async (source: string, args: any) => {\n const ast = parser.parse(source, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx']\n });\n\n let state = {\n needsImport: false,\n hasExistingImport: false,\n cacheIdentifierName: CACHE_IDENTIFIER,\n modifications: []\n };\n\n // First pass: check for naming collisions and collect modifications\n traverse(ast, {\n Program: {\n enter(path: any) {\n const binding = path.scope.getBinding(CACHE_IDENTIFIER);\n if (binding) {\n state.cacheIdentifierName = `${CACHE_IDENTIFIER}_${generateRandomString()}`;\n }\n }\n },\n\n ImportDeclaration(path: any) {\n if (\n path.node.source.value === IMPORT_PATH &&\n path.node.specifiers.some(\n (spec: any) =>\n t.isImportSpecifier(spec) &&\n // @ts-ignore\n spec.imported.name === CACHE_IDENTIFIER\n ))\n {\n state.hasExistingImport = true;\n if (state.cacheIdentifierName !== CACHE_IDENTIFIER) {\n // @ts-ignore\n state.modifications.push(() => {\n path.node.specifiers.forEach((spec: any) => {\n if (\n t.isImportSpecifier(spec) &&\n // @ts-ignore\n spec.imported.name === CACHE_IDENTIFIER)\n {\n spec.local.name = state.cacheIdentifierName;\n }\n });\n });\n }\n }\n },\n\n 'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression'(\n path: any)\n {\n const body = t.isBlockStatement(path.node.body) ? path.node.body : null;\n const hasUseCache = body?.directives?.some(\n (d: any) => d.value.value === DIRECTIVE\n );\n\n if (!hasUseCache && !t.isBlockStatement(path.node.body)) {\n const parentFunction = path.findParent(\n (p: any) =>\n (p.isFunction() || p.isProgram()) && 'directives' in p.node\n );\n if (\n !parentFunction?.node.directives?.some(\n (d: any) => d.value.value === DIRECTIVE\n ))\n {\n return;\n }\n }\n\n if (hasUseCache || !t.isBlockStatement(path.node.body)) {\n // Check if the function is async\n if (!path.node.async) {\n throw new Error(\n `\"${DIRECTIVE}\" directive may only be used in async functions at ${args.path}`\n );\n }\n\n state.needsImport = true;\n const isDeclaration = t.isFunctionDeclaration(path.node);\n const name = isDeclaration ? path.node.id?.name : undefined;\n\n // Create a new body without the 'use cache' directive\n const newBody = t.isBlockStatement(path.node.body) ?\n t.blockStatement(\n path.node.body.body,\n path.node.body.directives.filter(\n (d: any) => d.value.value !== DIRECTIVE\n )\n ) :\n path.node.body;\n\n const wrapped = t.callExpression(\n t.identifier(state.cacheIdentifierName),\n [t.arrowFunctionExpression(path.node.params, newBody, true)]\n );\n\n // @ts-ignore\n state.modifications.push(() => {\n if (name) {\n path.replaceWith(\n t.variableDeclaration('const', [\n t.variableDeclarator(t.identifier(name), wrapped)]\n )\n );\n } else if (!t.isVariableDeclarator(path.parent)) {\n path.replaceWith(wrapped);\n } else {\n path.parent.init = wrapped;\n }\n });\n }\n }\n });\n\n // Apply all collected modifications\n if (state.modifications.length > 0) {\n // Add import if needed\n if (state.needsImport && !state.hasExistingImport) {\n ast.program.body.unshift(\n t.importDeclaration(\n [\n t.importSpecifier(\n t.identifier(state.cacheIdentifierName),\n t.identifier(CACHE_IDENTIFIER)\n )],\n\n t.stringLiteral(IMPORT_PATH)\n )\n );\n }\n\n // Apply collected modifications\n // @ts-ignore\n state.modifications.forEach((modify) => modify());\n }\n\n const { code } = generate(ast);\n return {\n contents: code,\n loader: args.path.split('.').pop()\n };\n};"],"mappings":"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","names":["_traverse","_generate"]}
@@ -0,0 +1,2 @@
1
+ import{cacheDirectivePlugin}from"../../chunk-Y522NY4J.mjs";import"../../chunk-35OSBS47.mjs";export{cacheDirectivePlugin};
2
+ //# sourceMappingURL=use-cache.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,10 @@
1
+ import * as commander from 'commander';
2
+
3
+ /**
4
+ * Creates a command line interface for CommandKit.
5
+ * @param argv The arguments passed to the CLI.
6
+ * @param options The options passed to the CLI.
7
+ */
8
+ declare function bootstrapCommandkitCLI(argv: string[], options?: commander.ParseOptions | undefined): Promise<void>;
9
+
10
+ export { bootstrapCommandkitCLI };
@@ -0,0 +1,10 @@
1
+ import * as commander from 'commander';
2
+
3
+ /**
4
+ * Creates a command line interface for CommandKit.
5
+ * @param argv The arguments passed to the CLI.
6
+ * @param options The options passed to the CLI.
7
+ */
8
+ declare function bootstrapCommandkitCLI(argv: string[], options?: commander.ParseOptions | undefined): Promise<void>;
9
+
10
+ export { bootstrapCommandkitCLI };
@@ -0,0 +1,20 @@
1
+ "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __esm=(fn,res)=>function(){return fn&&(res=(0,fn[__getOwnPropNames(fn)[0]])(fn=0)),res};var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var init_cjs_shims=__esm({"../../node_modules/.pnpm/tsup@8.3.5_jiti@1.21.7_postcss@8.4.49_tsx@4.19.2_typescript@5.7.3_yaml@2.7.0/node_modules/tsup/assets/cjs_shims.js"(){"use strict"}});function write(message){process.stdout.write(message),process.stdout.write(`
2
+ `)}function panic(message){write(Colors.red(`Error: ${message}`)),process.exit(1)}async function findCommandKitConfig(src){let cwd=process.cwd(),locations=src?[(0,import_node_path.join)(cwd,src)]:possibleFileNames.map(name=>(0,import_node_path.join)(cwd,name));for(let location of locations)try{return await loadConfigInner(location)}catch{continue}panic(`Could not locate commandkit config from ${cwd}`)}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.")}async function loadConfigInner(target){let isJSON=target.endsWith(".json");return await ensureExists(target),ensureTypeScript(target),await import(`file://${target}`).then(conf=>conf.default||conf)}async function ensureExists(loc){await import_node_fs.default.promises.access(loc,import_node_fs.default.constants.F_OK)}function erase(dir){(0,import_rimraf.rimrafSync)(dir)}var import_rimraf,import_node_path,import_node_fs,resetColor,Colors,possibleFileNames,init_common=__esm({"src/cli/common.ts"(){"use strict";init_cjs_shims();import_rimraf=require("rimraf"),import_node_path=require("path"),import_node_fs=__toESM(require("fs")),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")};__name(write,"write");__name(panic,"panic");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"];__name(findCommandKitConfig,"findCommandKitConfig");__name(ensureTypeScript,"ensureTypeScript");__name(loadConfigInner,"loadConfigInner");__name(ensureExists,"ensureExists");__name(erase,"erase")}});function catcher(fn){try{return fn(),!0}catch{return!1}}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}var import_node_crypto,valuesMap,VALUE_PREFIXES,init_parse_env=__esm({"src/cli/parse-env.ts"(){"use strict";init_cjs_shims();import_node_crypto=require("crypto"),valuesMap={true:!0,false:!1,null:null,undefined:void 0,__UUIDv4__:__name(()=>(0,import_node_crypto.randomUUID)(),"__UUIDv4__")},VALUE_PREFIXES={JSON:"JSON::",DATE:"DATE::"};__name(catcher,"catcher");__name(parseEnv,"parseEnv")}});var parser,import_traverse,import_generator,t,traverse,generate,IMPORT_PATH,DIRECTIVE,CACHE_IDENTIFIER,generateRandomString,cacheDirectivePlugin,init_use_cache=__esm({"src/cli/esbuild-plugins/use-cache.ts"(){"use strict";init_cjs_shims();parser=__toESM(require("@babel/parser")),import_traverse=__toESM(require("@babel/traverse")),import_generator=__toESM(require("@babel/generator")),t=__toESM(require("@babel/types")),traverse=import_traverse.default.default||import_traverse.default,generate=import_generator.default.default||import_generator.default,IMPORT_PATH="commandkit",DIRECTIVE="use cache",CACHE_IDENTIFIER="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",generateRandomString=__name((length=6)=>{let chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";return Array.from({length},()=>chars[Math.floor(Math.random()*chars.length)]).join("")},"generateRandomString"),cacheDirectivePlugin=__name(async(source,args)=>{let ast=parser.parse(source,{sourceType:"module",plugins:["typescript","jsx"]}),state={needsImport:!1,hasExistingImport:!1,cacheIdentifierName:CACHE_IDENTIFIER,modifications:[]};traverse(ast,{Program:{enter(path){path.scope.getBinding(CACHE_IDENTIFIER)&&(state.cacheIdentifierName=`${CACHE_IDENTIFIER}_${generateRandomString()}`)}},ImportDeclaration(path){path.node.source.value===IMPORT_PATH&&path.node.specifiers.some(spec=>t.isImportSpecifier(spec)&&spec.imported.name===CACHE_IDENTIFIER)&&(state.hasExistingImport=!0,state.cacheIdentifierName!==CACHE_IDENTIFIER&&state.modifications.push(()=>{path.node.specifiers.forEach(spec=>{t.isImportSpecifier(spec)&&spec.imported.name===CACHE_IDENTIFIER&&(spec.local.name=state.cacheIdentifierName)})}))},"FunctionDeclaration|FunctionExpression|ArrowFunctionExpression"(path){var _a,_b,_c;let body=t.isBlockStatement(path.node.body)?path.node.body:null,hasUseCache=(_a=body==null?void 0:body.directives)==null?void 0:_a.some(d=>d.value.value===DIRECTIVE);if(!hasUseCache&&!t.isBlockStatement(path.node.body)){let parentFunction=path.findParent(p=>(p.isFunction()||p.isProgram())&&"directives"in p.node);if(!((_b=parentFunction==null?void 0:parentFunction.node.directives)!=null&&_b.some(d=>d.value.value===DIRECTIVE)))return}if(hasUseCache||!t.isBlockStatement(path.node.body)){if(!path.node.async)throw new Error(`"${DIRECTIVE}" directive may only be used in async functions at ${args.path}`);state.needsImport=!0;let name=t.isFunctionDeclaration(path.node)?(_c=path.node.id)==null?void 0:_c.name:void 0,newBody=t.isBlockStatement(path.node.body)?t.blockStatement(path.node.body.body,path.node.body.directives.filter(d=>d.value.value!==DIRECTIVE)):path.node.body,wrapped=t.callExpression(t.identifier(state.cacheIdentifierName),[t.arrowFunctionExpression(path.node.params,newBody,!0)]);state.modifications.push(()=>{name?path.replaceWith(t.variableDeclaration("const",[t.variableDeclarator(t.identifier(name),wrapped)])):t.isVariableDeclarator(path.parent)?path.parent.init=wrapped:path.replaceWith(wrapped)})}}}),state.modifications.length>0&&(state.needsImport&&!state.hasExistingImport&&ast.program.body.unshift(t.importDeclaration([t.importSpecifier(t.identifier(state.cacheIdentifierName),t.identifier(CACHE_IDENTIFIER))],t.stringLiteral(IMPORT_PATH))),state.modifications.forEach(modify=>modify()));let{code}=generate(ast);return{contents:code,loader:args.path.split(".").pop()}},"cacheDirectivePlugin")}});var import_use_macro,import_promises,defaultConfig,commandkitPlugin,init_plugin=__esm({"src/cli/esbuild-plugins/plugin.ts"(){"use strict";init_cjs_shims();import_use_macro=require("use-macro");init_use_cache();import_promises=require("fs/promises"),defaultConfig={"use-macro":!0,"use-cache":!0},commandkitPlugin=__name(config=>{config=Object.assign({},defaultConfig,config);let plugins=[{name:"use-macro",plugin:__name(async(content,args)=>{let transformer=new import_use_macro.MacroTransformer,{contents}=await transformer.transform(content,args.path);return contents},"plugin")},{name:"use-cache",plugin:__name(async(content,args)=>{let{contents}=await cacheDirectivePlugin(content,args);return contents},"plugin")}].filter(p=>!!config[p.name]);return{name:"commandkit-transformer-plugin",setup(build3){if(!plugins.length)return;let fileFilter=/\.(c|m)?(t|j)sx?$/;build3.onLoad({filter:fileFilter},async args=>{let source=await(0,import_promises.readFile)(args.path,"utf8"),loader=args.path.split(".").pop(),contents=source;for(let _plugin of plugins){let{plugin,name}=_plugin;try{contents=await plugin(contents,args)}catch(e){let err=new Error(`Plugin ${name} failed with ${e}`);throw err.stack=e instanceof Error?e.stack:"",err}}return{contents,loader}})}}},"commandkitPlugin")}});var build_exports={};__export(build_exports,{bootstrapProductionBuild:()=>bootstrapProductionBuild,injectShims:()=>injectShims});async function bootstrapProductionBuild(config){let{sourcemap=!1,minify=!1,outDir="dist",antiCrash=!0,src,main,requirePolyfill:polyfillRequire}=await findCommandKitConfig(config),status=(0,import_ora.default)(`Creating optimized production build...
3
+ `).start(),start=performance.now();erase(outDir);try{await(0,import_tsup.build)({clean:!0,format:["esm"],dts:!1,skipNodeModulesBundle:!0,minify,shims:!0,banner:{js:"/* Optimized production build generated by CommandKit */"},sourcemap,keepNames:!0,outDir,silent:!0,watch:!1,cjsInterop:!0,entry:[src,"!dist","!.commandkit",`!${outDir}`],esbuildPlugins:[commandkitPlugin()]}),await injectShims(outDir,main,antiCrash,polyfillRequire),status.succeed(Colors.green(`Build completed in ${(performance.now()-start).toFixed(2)}ms!`)),write(Colors.green(`
4
+ Run ${Colors.magenta("commandkit start")} ${Colors.green("to start your bot.")}`))}catch(e){status.fail(`Build failed after ${(performance.now()-start).toFixed(2)}ms!`),panic(e)}}async function injectShims(outDir,main,antiCrash,polyfillRequire){let path=(0,import_node_path2.join)(process.cwd(),outDir,main),head=[`
5
+
6
+ ;await (async()=>{`," 'use strict';"].join(`
7
+ `),tail=`
8
+ })();`,requireScript=polyfillRequire?["// --- CommandKit require() polyfill ---",' if (typeof require === "undefined") {',' const { createRequire } = await import("node:module");'," const __require = createRequire(import.meta.url);",' Object.defineProperty(globalThis, "require", {'," value: (id) => {"," return __require(id);"," },"," configurable: true,"," enumerable: false,"," writable: true,"," });"," }","// --- CommandKit require() polyfill ---"].join(`
9
+ `):"",antiCrashScript=antiCrash?["// --- CommandKit Anti-Crash Monitor ---"," // 'uncaughtException' event is supposed to be used to perform synchronous cleanup before shutting down the process"," // instead of using it as a means to resume operation."," // But it exists here due to compatibility reasons with discord bot ecosystem."," const p = (t) => `\\x1b[33m${t}\\x1b[0m`, b = '[CommandKit Anti-Crash Monitor]', l = console.log, e1 = 'uncaughtException', e2 = 'unhandledRejection';"," if (!process.eventNames().includes(e1)) // skip if it is already handled"," process.on(e1, (e) => {"," l(p(`${b} Uncaught Exception`)); l(p(b), p(e.stack || e));"," })"," if (!process.eventNames().includes(e2)) // skip if it is already handled"," process.on(e2, (r) => {"," l(p(`${b} Unhandled promise rejection`)); l(p(`${b} ${r.stack || r}`));"," });","// --- CommandKit Anti-Crash Monitor ---"].join(`
10
+ `):"",contents=await(0,import_promises2.readFile)(path,"utf-8"),finalScript=[head,requireScript,antiCrashScript,tail,`
11
+
12
+ `,contents].join(`
13
+ `);return(0,import_promises2.writeFile)(path,finalScript)}var import_promises2,import_node_path2,import_tsup,import_ora,init_build=__esm({"src/cli/build.ts"(){"use strict";init_cjs_shims();import_promises2=require("fs/promises"),import_node_path2=require("path"),import_tsup=require("tsup");init_common();import_ora=__toESM(require("ora"));init_plugin();__name(bootstrapProductionBuild,"bootstrapProductionBuild");__name(injectShims,"injectShims")}});var development_exports={};__export(development_exports,{bootstrapDevelopmentServer:()=>bootstrapDevelopmentServer});async function bootstrapDevelopmentServer(opts){let{src,main,watch=!!opts.noWatch,nodeOptions=[],envExtra=!0,clearRestartLogs=!0,outDir,requirePolyfill}=await findCommandKitConfig(opts.config);src||panic("Could not find src in commandkit.json"),main||panic("Could not find main in commandkit.json");let watchMode=watch,status=(0,import_ora2.default)(Colors.green(`Starting a development server...
14
+ `)).start(),start=performance.now();watchMode&&!nodeOptions.includes("--watch")?nodeOptions.push("--watch"):!watchMode&&nodeOptions.includes("--watch")&&nodeOptions.splice(nodeOptions.indexOf("--watch"),1),nodeOptions.includes("--enable-source-maps")||nodeOptions.push("--enable-source-maps"),erase(".commandkit");try{await(0,import_tsup2.build)({clean:!0,format:["esm"],dts:!1,skipNodeModulesBundle:!0,minify:!1,shims:!0,sourcemap:"inline",keepNames:!0,outDir:".commandkit",silent:!0,entry:[src,"!dist","!.commandkit",`!${outDir}`].filter(Boolean),watch:watchMode,cjsInterop:!0,async onSuccess(){return await injectShims(".commandkit",main,!1,requirePolyfill)},esbuildPlugins:[commandkitPlugin({"use-macro":!1})]}),status.succeed(Colors.green(`Dev server started in ${(performance.now()-start).toFixed(2)}ms!
15
+ `)),watchMode&&write(Colors.cyan(`Watching for file changes...
16
+ `));let processEnv={},env=(0,import_dotenv.config)({path:(0,import_node_path3.join)(process.cwd(),".env"),processEnv});envExtra&&parseEnv(processEnv),env.error&&write(Colors.yellow(`[DOTENV] Warning: ${env.error.message}`)),env.parsed&&write(Colors.blue("[DOTENV] Loaded .env file!"));let ps=import_node_child_process.default.spawn("node",[...nodeOptions,(0,import_node_path3.join)(process.cwd(),".commandkit",main)],{env:{...process.env,...processEnv,NODE_ENV:"development",COMMANDKIT_DEV:!0,COMMANDKIT_PRODUCTION:!1},cwd:process.cwd()}),isLastLogRestarting=!1,hasStarted=!1;ps.stdout.on("data",data=>{let message=data.toString();if(FAILED_RUNNING_PATTERN.test(message)){write(Colors.cyan("Failed running the bot, waiting for changes...")),isLastLogRestarting=!1,hasStarted||(hasStarted=!0);return}if(clearRestartLogs&&!RESTARTING_MSG_PATTERN.test(message))write(message),isLastLogRestarting=!1;else{if(isLastLogRestarting||!hasStarted){hasStarted||(hasStarted=!0);return}write(Colors.cyan("\u2300 Restarting the bot...")),isLastLogRestarting=!0}hasStarted||(hasStarted=!0)}),ps.stderr.on("data",data=>{let message=data.toString();message.includes("ExperimentalWarning: Watch mode is an experimental feature and might change at any time")||write(Colors.red(message))}),ps.on("close",code=>{write(`
17
+ `),process.exit(code??0)}),ps.on("error",err=>{panic(err)})}catch(e){status.fail(`Error occurred after ${(performance.now()-start).toFixed(2)}ms!
18
+ `),panic(e instanceof Error?e.stack:e)}}var import_dotenv,import_node_path3,import_tsup2,import_node_child_process,import_ora2,RESTARTING_MSG_PATTERN,FAILED_RUNNING_PATTERN,init_development=__esm({"src/cli/development.ts"(){"use strict";init_cjs_shims();import_dotenv=require("dotenv"),import_node_path3=require("path"),import_tsup2=require("tsup");init_common();init_parse_env();import_node_child_process=__toESM(require("child_process")),import_ora2=__toESM(require("ora"));init_build();init_plugin();RESTARTING_MSG_PATTERN=/^Restarting '|".+'|"\n?$/,FAILED_RUNNING_PATTERN=/^Failed running '.+'|"\n?$/;__name(bootstrapDevelopmentServer,"bootstrapDevelopmentServer")}});var production_exports={};__export(production_exports,{bootstrapProductionServer:()=>bootstrapProductionServer});async function bootstrapProductionServer(config){let{main,outDir="dist",envExtra=!0,sourcemap}=await findCommandKitConfig(config);(0,import_node_fs2.existsSync)((0,import_node_path4.join)(process.cwd(),outDir,main))||panic("Could not find production build, maybe run `commandkit build` first?");try{let processEnv={},env=(0,import_dotenv2.config)({path:(0,import_node_path4.join)(process.cwd(),".env"),processEnv});envExtra&&parseEnv(processEnv),env.error&&write(Colors.yellow(`[DOTENV] Warning: ${env.error.message}`)),env.parsed&&write(Colors.blue("[DOTENV] Loaded .env file!"));let ps=import_node_child_process2.default.spawn("node",[sourcemap?"--enable-source-maps":"",(0,import_node_path4.join)(process.cwd(),outDir,main)].filter(Boolean),{env:{...process.env,...processEnv,NODE_ENV:"production",COMMANDKIT_DEV:!1,COMMANDKIT_PROD:!0},cwd:process.cwd()});ps.stdout.on("data",data=>{write(data.toString())}),ps.stderr.on("data",data=>{write(Colors.red(data.toString()))}),ps.on("close",code=>{write(`
19
+ `),process.exit(code??0)}),ps.on("error",err=>{panic(err)})}catch(e){panic(e)}}var import_dotenv2,import_node_fs2,import_node_path4,import_node_child_process2,init_production=__esm({"src/cli/production.ts"(){"use strict";init_cjs_shims();import_dotenv2=require("dotenv"),import_node_fs2=require("fs"),import_node_path4=require("path");init_common();init_parse_env();import_node_child_process2=__toESM(require("child_process"));__name(bootstrapProductionServer,"bootstrapProductionServer")}});var init_exports={};__export(init_exports,{bootstrapCommandkitCLI:()=>bootstrapCommandkitCLI});module.exports=__toCommonJS(init_exports);init_cjs_shims();async function bootstrapCommandkitCLI(argv,options){let{Command}=await import("commander"),{bootstrapDevelopmentServer:bootstrapDevelopmentServer2}=await Promise.resolve().then(()=>(init_development(),development_exports)),{bootstrapProductionServer:bootstrapProductionServer2}=await Promise.resolve().then(()=>(init_production(),production_exports)),{bootstrapProductionBuild:bootstrapProductionBuild2}=await Promise.resolve().then(()=>(init_build(),build_exports)),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();bootstrapDevelopmentServer2(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();bootstrapProductionServer2(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();bootstrapProductionBuild2(options2.config)}),await program.parseAsync(argv,options)}__name(bootstrapCommandkitCLI,"bootstrapCommandkitCLI");0&&(module.exports={bootstrapCommandkitCLI});
20
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../node_modules/.pnpm/tsup@8.3.5_jiti@1.21.7_postcss@8.4.49_tsx@4.19.2_typescript@5.7.3_yaml@2.7.0/node_modules/tsup/assets/cjs_shims.js","../../src/cli/common.ts","../../src/cli/parse-env.ts","../../src/cli/esbuild-plugins/use-cache.ts","../../src/cli/esbuild-plugins/plugin.ts","../../src/cli/build.ts","../../src/cli/development.ts","../../src/cli/production.ts","../../src/cli/init.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\ntypeof document === 'undefined' ?\nnew URL(`file:${__filename}`).href :\ndocument.currentScript && document.currentScript.src ||\nnew URL('main.js', document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */getImportMetaUrl();","// @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}","// @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}","import * as parser from '@babel/parser';\nimport _traverse from '@babel/traverse';\nimport _generate from '@babel/generator';\nimport * as t from '@babel/types';\n\n// @ts-ignore\nconst traverse = _traverse.default || _traverse;\n// @ts-ignore\nconst generate = _generate.default || _generate;\n\nconst IMPORT_PATH = 'commandkit';\nconst DIRECTIVE = 'use cache';\nconst CACHE_IDENTIFIER =\n'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\nconst generateRandomString = (length = 6) => {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n return Array.from(\n { length },\n () => chars[Math.floor(Math.random() * chars.length)]\n ).join('');\n};\n\nexport const cacheDirectivePlugin = async (source: string, args: any) => {\n const ast = parser.parse(source, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx']\n });\n\n let state = {\n needsImport: false,\n hasExistingImport: false,\n cacheIdentifierName: CACHE_IDENTIFIER,\n modifications: []\n };\n\n // First pass: check for naming collisions and collect modifications\n traverse(ast, {\n Program: {\n enter(path: any) {\n const binding = path.scope.getBinding(CACHE_IDENTIFIER);\n if (binding) {\n state.cacheIdentifierName = `${CACHE_IDENTIFIER}_${generateRandomString()}`;\n }\n }\n },\n\n ImportDeclaration(path: any) {\n if (\n path.node.source.value === IMPORT_PATH &&\n path.node.specifiers.some(\n (spec: any) =>\n t.isImportSpecifier(spec) &&\n // @ts-ignore\n spec.imported.name === CACHE_IDENTIFIER\n ))\n {\n state.hasExistingImport = true;\n if (state.cacheIdentifierName !== CACHE_IDENTIFIER) {\n // @ts-ignore\n state.modifications.push(() => {\n path.node.specifiers.forEach((spec: any) => {\n if (\n t.isImportSpecifier(spec) &&\n // @ts-ignore\n spec.imported.name === CACHE_IDENTIFIER)\n {\n spec.local.name = state.cacheIdentifierName;\n }\n });\n });\n }\n }\n },\n\n 'FunctionDeclaration|FunctionExpression|ArrowFunctionExpression'(\n path: any)\n {\n const body = t.isBlockStatement(path.node.body) ? path.node.body : null;\n const hasUseCache = body?.directives?.some(\n (d: any) => d.value.value === DIRECTIVE\n );\n\n if (!hasUseCache && !t.isBlockStatement(path.node.body)) {\n const parentFunction = path.findParent(\n (p: any) =>\n (p.isFunction() || p.isProgram()) && 'directives' in p.node\n );\n if (\n !parentFunction?.node.directives?.some(\n (d: any) => d.value.value === DIRECTIVE\n ))\n {\n return;\n }\n }\n\n if (hasUseCache || !t.isBlockStatement(path.node.body)) {\n // Check if the function is async\n if (!path.node.async) {\n throw new Error(\n `\"${DIRECTIVE}\" directive may only be used in async functions at ${args.path}`\n );\n }\n\n state.needsImport = true;\n const isDeclaration = t.isFunctionDeclaration(path.node);\n const name = isDeclaration ? path.node.id?.name : undefined;\n\n // Create a new body without the 'use cache' directive\n const newBody = t.isBlockStatement(path.node.body) ?\n t.blockStatement(\n path.node.body.body,\n path.node.body.directives.filter(\n (d: any) => d.value.value !== DIRECTIVE\n )\n ) :\n path.node.body;\n\n const wrapped = t.callExpression(\n t.identifier(state.cacheIdentifierName),\n [t.arrowFunctionExpression(path.node.params, newBody, true)]\n );\n\n // @ts-ignore\n state.modifications.push(() => {\n if (name) {\n path.replaceWith(\n t.variableDeclaration('const', [\n t.variableDeclarator(t.identifier(name), wrapped)]\n )\n );\n } else if (!t.isVariableDeclarator(path.parent)) {\n path.replaceWith(wrapped);\n } else {\n path.parent.init = wrapped;\n }\n });\n }\n }\n });\n\n // Apply all collected modifications\n if (state.modifications.length > 0) {\n // Add import if needed\n if (state.needsImport && !state.hasExistingImport) {\n ast.program.body.unshift(\n t.importDeclaration(\n [\n t.importSpecifier(\n t.identifier(state.cacheIdentifierName),\n t.identifier(CACHE_IDENTIFIER)\n )],\n\n t.stringLiteral(IMPORT_PATH)\n )\n );\n }\n\n // Apply collected modifications\n // @ts-ignore\n state.modifications.forEach((modify) => modify());\n }\n\n const { code } = generate(ast);\n return {\n contents: code,\n loader: args.path.split('.').pop()\n };\n};","import { MacroTransformer } from 'use-macro';\nimport { cacheDirectivePlugin } from './use-cache';\nimport { readFile } from 'node:fs/promises';\n\nconst defaultConfig = {\n 'use-macro': true,\n 'use-cache': true\n};\n\ninterface CommandKitEsbuildPluginConfig {\n 'use-macro'?: boolean;\n 'use-cache'?: boolean;\n}\n\nexport const commandkitPlugin = (config?: CommandKitEsbuildPluginConfig) => {\n config = Object.assign({}, defaultConfig, config);\n\n const plugins = [\n {\n name: 'use-macro',\n plugin: async (content: string, args: any) => {\n const transformer = new MacroTransformer();\n const { contents } = await transformer.transform(content, args.path);\n return contents;\n }\n },\n {\n name: 'use-cache',\n plugin: async (content: string, args: any) => {\n const { contents } = await cacheDirectivePlugin(content, args);\n return contents;\n }\n }].\n filter((p) => {\n return !!config[p.name as keyof CommandKitEsbuildPluginConfig];\n });\n\n return {\n name: 'commandkit-transformer-plugin',\n setup(build: any) {\n if (!plugins.length) return;\n\n const fileFilter = /\\.(c|m)?(t|j)sx?$/;\n\n build.onLoad({ filter: fileFilter }, async (args: any) => {\n const source = await readFile(args.path, 'utf8');\n const loader = args.path.split('.').pop();\n\n let contents = source;\n\n for (const _plugin of plugins) {\n const { plugin, name } = _plugin;\n try {\n contents = await plugin(contents, args);\n } catch (e) {\n const err = new Error(`Plugin ${name} failed with ${e}`);\n err.stack = e instanceof Error ? e.stack : '';\n\n throw err;\n }\n }\n\n return {\n contents,\n loader\n };\n });\n }\n };\n};","// @ts-check\n\nimport { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { build } from 'tsup';\nimport { Colors, erase, findCommandKitConfig, panic, write } from './common.js';\nimport ora from 'ora';\nimport { commandkitPlugin } from './esbuild-plugins/plugin';\n\nexport async function bootstrapProductionBuild(config: any) {\n const {\n sourcemap = false,\n minify = false,\n outDir = 'dist',\n antiCrash = true,\n src,\n main,\n requirePolyfill: polyfillRequire\n } = await findCommandKitConfig(config);\n\n const status = ora('Creating optimized production build...\\n').start();\n const start = performance.now();\n\n erase(outDir);\n\n try {\n await build({\n clean: true,\n format: ['esm'],\n dts: false,\n skipNodeModulesBundle: true,\n minify,\n shims: true,\n banner: {\n js: '/* Optimized production build generated by CommandKit */'\n },\n sourcemap,\n keepNames: true,\n outDir,\n silent: true,\n watch: false,\n cjsInterop: true,\n entry: [src, '!dist', '!.commandkit', `!${outDir}`],\n esbuildPlugins: [commandkitPlugin()]\n });\n\n await injectShims(outDir, main, antiCrash, polyfillRequire);\n\n status.succeed(\n Colors.green(\n `Build completed in ${(performance.now() - start).toFixed(2)}ms!`\n )\n );\n write(\n Colors.green(\n `\\nRun ${Colors.magenta(`commandkit start`)} ${Colors.green(\n 'to start your bot.'\n )}`\n )\n );\n } catch (e) {\n status.fail(\n `Build failed after ${(performance.now() - start).toFixed(2)}ms!`\n );\n panic(e);\n }\n}\n\nexport async function injectShims(\noutDir: string,\nmain: string,\nantiCrash: boolean,\npolyfillRequire: boolean)\n{\n const path = join(process.cwd(), outDir, main);\n\n const head = ['\\n\\n;await (async()=>{', \" 'use strict';\"].join('\\n');\n const tail = '\\n})();';\n const requireScript = polyfillRequire ?\n [\n '// --- CommandKit require() polyfill ---',\n ' if (typeof require === \"undefined\") {',\n ' const { createRequire } = await import(\"node:module\");',\n ' const __require = createRequire(import.meta.url);',\n ' Object.defineProperty(globalThis, \"require\", {',\n ' value: (id) => {',\n ' return __require(id);',\n ' },',\n ' configurable: true,',\n ' enumerable: false,',\n ' writable: true,',\n ' });',\n ' }',\n '// --- CommandKit require() polyfill ---'].\n join('\\n') :\n '';\n\n const antiCrashScript = antiCrash ?\n [\n '// --- CommandKit Anti-Crash Monitor ---',\n \" // 'uncaughtException' event is supposed to be used to perform synchronous cleanup before shutting down the process\",\n ' // instead of using it as a means to resume operation.',\n ' // But it exists here due to compatibility reasons with discord bot ecosystem.',\n \" const p = (t) => `\\\\x1b[33m${t}\\\\x1b[0m`, b = '[CommandKit Anti-Crash Monitor]', l = console.log, e1 = 'uncaughtException', e2 = 'unhandledRejection';\",\n ' if (!process.eventNames().includes(e1)) // skip if it is already handled',\n ' process.on(e1, (e) => {',\n ' l(p(`${b} Uncaught Exception`)); l(p(b), p(e.stack || e));',\n ' })',\n ' if (!process.eventNames().includes(e2)) // skip if it is already handled',\n ' process.on(e2, (r) => {',\n ' l(p(`${b} Unhandled promise rejection`)); l(p(`${b} ${r.stack || r}`));',\n ' });',\n '// --- CommandKit Anti-Crash Monitor ---'].\n join('\\n') :\n '';\n\n const contents = await readFile(path, 'utf-8');\n const finalScript = [\n head,\n requireScript,\n antiCrashScript,\n tail,\n '\\n\\n',\n contents].\n join('\\n');\n\n return writeFile(path, finalScript);\n}","// @ts-check\nimport { config as dotenv } from 'dotenv';\nimport { join } from 'node:path';\nimport { build } from 'tsup';\nimport { Colors, erase, findCommandKitConfig, panic, write } from './common';\nimport { parseEnv } from './parse-env';\nimport child_process from 'node:child_process';\nimport ora from 'ora';\nimport { injectShims } from './build';\nimport { commandkitPlugin } from './esbuild-plugins/plugin';\n\nconst RESTARTING_MSG_PATTERN = /^Restarting '|\".+'|\"\\n?$/;\nconst FAILED_RUNNING_PATTERN = /^Failed running '.+'|\"\\n?$/;\n\nexport async function bootstrapDevelopmentServer(opts: any) {\n const {\n src,\n main,\n watch = Boolean(opts.noWatch),\n nodeOptions = [],\n envExtra = true,\n clearRestartLogs = true,\n outDir,\n requirePolyfill\n } = await findCommandKitConfig(opts.config);\n\n if (!src) {\n panic('Could not find src in commandkit.json');\n }\n\n if (!main) {\n panic('Could not find main in commandkit.json');\n }\n\n const watchMode = watch;\n const status = ora(\n Colors.green('Starting a development server...\\n')\n ).start();\n const start = performance.now();\n\n if (watchMode && !nodeOptions.includes('--watch')) {\n nodeOptions.push('--watch');\n } else if (!watchMode && nodeOptions.includes('--watch')) {\n nodeOptions.splice(nodeOptions.indexOf('--watch'), 1);\n }\n\n if (!nodeOptions.includes('--enable-source-maps')) {\n nodeOptions.push('--enable-source-maps');\n }\n\n erase('.commandkit');\n\n try {\n await build({\n clean: true,\n format: ['esm'],\n dts: false,\n skipNodeModulesBundle: true,\n minify: false,\n shims: true,\n sourcemap: 'inline',\n keepNames: true,\n outDir: '.commandkit',\n silent: true,\n entry: [src, '!dist', '!.commandkit', `!${outDir}`].filter(Boolean),\n watch: watchMode,\n cjsInterop: true,\n async onSuccess() {\n return await injectShims('.commandkit', main, false, requirePolyfill);\n },\n esbuildPlugins: [\n commandkitPlugin({\n 'use-macro': false\n })]\n\n });\n\n status.succeed(\n Colors.green(\n `Dev server started in ${(performance.now() - start).toFixed(2)}ms!\\n`\n )\n );\n\n if (watchMode) write(Colors.cyan('Watching for file changes...\\n'));\n\n const processEnv = {};\n\n const env = dotenv({\n path: join(process.cwd(), '.env'),\n processEnv\n });\n\n if (envExtra) {\n parseEnv(processEnv);\n }\n\n if (env.error) {\n write(Colors.yellow(`[DOTENV] Warning: ${env.error.message}`));\n }\n\n if (env.parsed) {\n write(Colors.blue('[DOTENV] Loaded .env file!'));\n }\n\n const ps: child_process.ChildProcessWithoutNullStreams =\n child_process.spawn(\n 'node',\n [...nodeOptions, join(process.cwd(), '.commandkit', main)],\n {\n env: {\n ...process.env,\n ...processEnv,\n NODE_ENV: 'development',\n // @ts-expect-error\n COMMANDKIT_DEV: true,\n // @ts-expect-error\n COMMANDKIT_PRODUCTION: false\n },\n cwd: process.cwd()\n }\n );\n\n let isLastLogRestarting = false,\n hasStarted = false;\n\n ps.stdout.on('data', (data) => {\n const message = data.toString();\n\n if (FAILED_RUNNING_PATTERN.test(message)) {\n write(Colors.cyan('Failed running the bot, waiting for changes...'));\n isLastLogRestarting = false;\n if (!hasStarted) hasStarted = true;\n return;\n }\n\n if (clearRestartLogs && !RESTARTING_MSG_PATTERN.test(message)) {\n write(message);\n isLastLogRestarting = false;\n } else {\n if (isLastLogRestarting || !hasStarted) {\n if (!hasStarted) hasStarted = true;\n return;\n }\n write(Colors.cyan('⌀ Restarting the bot...'));\n isLastLogRestarting = true;\n }\n\n if (!hasStarted) hasStarted = true;\n });\n\n ps.stderr.on('data', (data) => {\n const message = data.toString();\n\n if (\n message.includes(\n 'ExperimentalWarning: Watch mode is an experimental feature and might change at any time'\n ))\n\n return;\n\n write(Colors.red(message));\n });\n\n ps.on('close', (code) => {\n write('\\n');\n process.exit(code ?? 0);\n });\n\n ps.on('error', (err) => {\n panic(err);\n });\n } catch (e) {\n status.fail(\n `Error occurred after ${(performance.now() - start).toFixed(2)}ms!\\n`\n );\n panic(e instanceof Error ? e.stack : e);\n }\n}","// @ts-check\nimport { config as dotenv } from 'dotenv';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Colors, findCommandKitConfig, panic, write } from './common';\nimport { parseEnv } from './parse-env';\nimport child_process from 'node:child_process';\n\nexport async function bootstrapProductionServer(config: any) {\n const {\n main,\n outDir = 'dist',\n envExtra = true,\n sourcemap\n } = await findCommandKitConfig(config);\n\n if (!existsSync(join(process.cwd(), outDir, main))) {\n panic(\n 'Could not find production build, maybe run `commandkit build` first?'\n );\n }\n\n try {\n const processEnv = {};\n\n const env = dotenv({\n path: join(process.cwd(), '.env'),\n processEnv\n });\n\n if (envExtra) {\n parseEnv(processEnv);\n }\n\n if (env.error) {\n write(Colors.yellow(`[DOTENV] Warning: ${env.error.message}`));\n }\n\n if (env.parsed) {\n write(Colors.blue('[DOTENV] Loaded .env file!'));\n }\n\n const ps: child_process.ChildProcessWithoutNullStreams =\n child_process.spawn(\n 'node',\n [\n sourcemap ? '--enable-source-maps' : '',\n join(process.cwd(), outDir, main)].\n filter(Boolean),\n {\n env: {\n ...process.env,\n ...processEnv,\n NODE_ENV: 'production',\n // @ts-expect-error\n COMMANDKIT_DEV: false,\n // @ts-expect-error\n COMMANDKIT_PROD: true\n },\n cwd: process.cwd()\n }\n );\n\n ps.stdout.on('data', (data) => {\n write(data.toString());\n });\n\n ps.stderr.on('data', (data) => {\n write(Colors.red(data.toString()));\n });\n\n ps.on('close', (code) => {\n write('\\n');\n process.exit(code ?? 0);\n });\n\n ps.on('error', (err) => {\n panic(err);\n });\n } catch (e) {\n panic(e);\n }\n}","/**\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":"ikCAAA,0LCoCO,SAAS,MAAM,QAAc,CAClC,QAAQ,OAAO,MAAM,OAAO,EAC5B,QAAQ,OAAO,MAAM;AAAA,CAAI,CAC3B,CAKO,SAAS,MAAM,QAAc,CAClC,MAAM,OAAO,IAAI,UAAU,OAAO,EAAE,CAAC,EACrC,QAAQ,KAAK,CAAC,CAChB,CA2BA,eAAsB,qBAAqB,IAAa,CACtD,IAAM,IAAM,QAAQ,IAAI,EAClB,UAAY,IAClB,IAAC,uBAAK,IAAK,GAAG,CAAC,EACf,kBAAkB,IAAK,SAAS,uBAAK,IAAK,IAAI,CAAC,EAE/C,QAAW,YAAY,UACrB,GAAI,CACF,OAAO,MAAM,gBAAgB,QAAQ,CACvC,MAAY,CACV,QACF,CAGF,MAAM,2CAA2C,GAAG,EAAE,CACxD,CAEA,SAAS,iBAAiB,OAAgB,CACnB,eAAe,KAAK,MAAM,GAE3B,CAAC,QAAQ,SAAS,YACpC,MACE,oJACF,CAEJ,CAEA,eAAe,gBAAgB,OAAgB,CAC7C,IAAM,OAAS,OAAO,SAAS,OAAO,EAEtC,aAAM,aAAa,MAAM,EAEzB,iBAAiB,MAAM,EAMR,MAAM,OAAO,UAAU,MAAM,IAEzC,KAAM,MAAS,KAAK,SAAW,IAAI,CAGxC,CAEA,eAAe,aAAa,IAAa,CACvC,MAAM,eAAAA,QAAG,SAAS,OAAO,IAAK,eAAAA,QAAG,UAAU,IAAI,CACjD,CAEO,SAAS,MAAM,IAAa,IACjC,0BAAW,GAAG,CAChB,CA7HA,IAEA,cACA,iBACA,eAEM,WAEO,OAoDP,kBA5DN,uEAEA,cAA2B,kBAC3B,iBAAqB,gBACrB,eAAe,uBAET,WAAa,UAEN,OAAS,CACpB,MAAO,OAAC,MAAiB,GAAG,IAAI,GAAG,UAAU,GAAtC,SACP,OAAQ,OAAC,MAAiB,UAAU,IAAI,GAAG,UAAU,GAA7C,UACR,IAAK,OAAC,MAAiB,UAAU,IAAI,GAAG,UAAU,GAA7C,OACL,WAAY,OAAC,MAAiB,UAAU,IAAI,GAAG,UAAU,GAA7C,cACZ,MAAO,OAAC,MAAiB,UAAU,IAAI,GAAG,UAAU,GAA7C,SACP,QAAS,OAAC,MAAiB,UAAU,IAAI,GAAG,UAAU,GAA7C,WACT,OAAQ,OAAC,MAAiB,UAAU,IAAI,GAAG,UAAU,GAA7C,UAER,MAAO,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,SACP,IAAK,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,OACL,MAAO,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,SACP,OAAQ,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,UACR,KAAM,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,QACN,QAAS,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,WACT,KAAM,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,QACN,MAAO,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,SAEP,QAAS,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,WACT,MAAO,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,SACP,QAAS,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,WACT,SAAU,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,YACV,OAAQ,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,UACR,UAAW,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,aACX,OAAQ,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,UACR,QAAS,OAAC,MAAiB,WAAW,IAAI,GAAG,UAAU,GAA9C,UACX,EAEgB,sBAQA,sBAgBV,kBAAoB,CAC1B,kBACA,yBACA,gBACA,uBACA,iBACA,wBACA,iBACA,wBACA,gBACA,iBACA,gBAAgB,EAGM,oDAiBb,4CAUM,0CAkBA,oCAIC,yBC1GhB,SAAS,QAAQ,GAAc,CAC7B,GAAI,CACF,UAAG,EACI,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAEO,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,CAnEA,IAEA,mBAEM,UAQA,eAZN,6EAEA,mBAA2B,kBAErB,UAAY,CAChB,KAAM,GACN,MAAO,GACP,KAAM,KACN,UAAW,OACX,WAAY,cAAM,+BAAW,EAAjB,aACd,EAEM,eAAiB,CACrB,KAAM,SACN,KAAM,QACR,EAES,0BASO,+BC1BhB,WACA,gBACA,iBACA,EAGM,SAEA,SAEA,YACA,UACA,iBAGA,qBAQO,qBAvBb,oGAAwB,kCACxB,gBAAsB,oCACtB,iBAAsB,qCACtB,EAAmB,iCAGb,SAAW,gBAAAC,QAAU,SAAW,gBAAAA,QAEhC,SAAW,iBAAAC,QAAU,SAAW,iBAAAA,QAEhC,YAAc,aACd,UAAY,YACZ,iBACN,0IAEM,qBAAuB,QAAC,OAAS,IAAM,CAC3C,IAAM,MAAQ,uDACd,OAAO,MAAM,KACX,CAAE,MAAO,EACT,IAAM,MAAM,KAAK,MAAM,KAAK,OAAO,EAAI,MAAM,MAAM,CAAC,CACtD,EAAE,KAAK,EAAE,CACX,EAN6B,wBAQhB,qBAAuB,aAAO,OAAgB,OAAc,CACvE,IAAM,IAAa,aAAM,OAAQ,CAC/B,WAAY,SACZ,QAAS,CAAC,aAAc,KAAK,CAC/B,CAAC,EAEG,MAAQ,CACV,YAAa,GACb,kBAAmB,GACnB,oBAAqB,iBACrB,cAAe,CAAC,CAClB,EAGA,SAAS,IAAK,CACZ,QAAS,CACP,MAAM,KAAW,CACC,KAAK,MAAM,WAAW,gBAAgB,IAEpD,MAAM,oBAAsB,GAAG,gBAAgB,IAAI,qBAAqB,CAAC,GAE7E,CACF,EAEA,kBAAkB,KAAW,CAE3B,KAAK,KAAK,OAAO,QAAU,aAC3B,KAAK,KAAK,WAAW,KAClB,MACC,oBAAkB,IAAI,GAExB,KAAK,SAAS,OAAS,gBACzB,IAEE,MAAM,kBAAoB,GACtB,MAAM,sBAAwB,kBAEhC,MAAM,cAAc,KAAK,IAAM,CAC7B,KAAK,KAAK,WAAW,QAAS,MAAc,CAExC,oBAAkB,IAAI,GAExB,KAAK,SAAS,OAAS,mBAErB,KAAK,MAAM,KAAO,MAAM,oBAE5B,CAAC,CACH,CAAC,EAGP,EAEA,iEACA,KACA,CA7EJ,aA8EM,IAAM,KAAS,mBAAiB,KAAK,KAAK,IAAI,EAAI,KAAK,KAAK,KAAO,KAC7D,aAAc,0BAAM,aAAN,eAAkB,KACnC,GAAW,EAAE,MAAM,QAAU,WAGhC,GAAI,CAAC,aAAe,CAAG,mBAAiB,KAAK,KAAK,IAAI,EAAG,CACvD,IAAM,eAAiB,KAAK,WACzB,IACA,EAAE,WAAW,GAAK,EAAE,UAAU,IAAM,eAAgB,EAAE,IACzD,EACA,GACA,GAAC,8CAAgB,KAAK,aAArB,SAAiC,KAC/B,GAAW,EAAE,MAAM,QAAU,YAG9B,MAEJ,CAEA,GAAI,aAAe,CAAG,mBAAiB,KAAK,KAAK,IAAI,EAAG,CAEtD,GAAI,CAAC,KAAK,KAAK,MACb,MAAM,IAAI,MACR,IAAI,SAAS,sDAAsD,KAAK,IAAI,EAC9E,EAGF,MAAM,YAAc,GAEpB,IAAM,KADkB,wBAAsB,KAAK,IAAI,GAC1B,QAAK,KAAK,KAAV,eAAc,KAAO,OAG5C,QAAY,mBAAiB,KAAK,KAAK,IAAI,EAC/C,iBACA,KAAK,KAAK,KAAK,KACf,KAAK,KAAK,KAAK,WAAW,OACvB,GAAW,EAAE,MAAM,QAAU,SAChC,CACF,EACA,KAAK,KAAK,KAEJ,QAAY,iBACd,aAAW,MAAM,mBAAmB,EACtC,CAAG,0BAAwB,KAAK,KAAK,OAAQ,QAAS,EAAI,CAAC,CAC7D,EAGA,MAAM,cAAc,KAAK,IAAM,CACzB,KACF,KAAK,YACD,sBAAoB,QAAS,CAC7B,qBAAqB,aAAW,IAAI,EAAG,OAAO,CAAC,CACjD,CACF,EACY,uBAAqB,KAAK,MAAM,EAG5C,KAAK,OAAO,KAAO,QAFnB,KAAK,YAAY,OAAO,CAI5B,CAAC,CACH,CACF,CACF,CAAC,EAGG,MAAM,cAAc,OAAS,IAE3B,MAAM,aAAe,CAAC,MAAM,mBAC9B,IAAI,QAAQ,KAAK,QACb,oBACA,CACE,kBACE,aAAW,MAAM,mBAAmB,EACpC,aAAW,gBAAgB,CAC/B,CAAC,EAEC,gBAAc,WAAW,CAC7B,CACF,EAKF,MAAM,cAAc,QAAS,QAAW,OAAO,CAAC,GAGlD,GAAM,CAAE,IAAK,EAAI,SAAS,GAAG,EAC7B,MAAO,CACL,SAAU,KACV,OAAQ,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,CACnC,CACF,EAlJoC,2BCvBpC,qBAEA,gBAEM,cAUO,iBAdb,wGAAiC,qBACjC,iBACA,gBAAyB,uBAEnB,cAAgB,CACpB,YAAa,GACb,YAAa,EACf,EAOa,iBAAmB,OAAC,QAA2C,CAC1E,OAAS,OAAO,OAAO,CAAC,EAAG,cAAe,MAAM,EAEhD,IAAM,QAAU,CAChB,CACE,KAAM,YACN,OAAQ,aAAO,QAAiB,OAAc,CAC5C,IAAM,YAAc,IAAI,kCAClB,CAAE,QAAS,EAAI,MAAM,YAAY,UAAU,QAAS,KAAK,IAAI,EACnE,OAAO,QACT,EAJQ,SAKV,EACA,CACE,KAAM,YACN,OAAQ,aAAO,QAAiB,OAAc,CAC5C,GAAM,CAAE,QAAS,EAAI,MAAM,qBAAqB,QAAS,IAAI,EAC7D,OAAO,QACT,EAHQ,SAIV,CAAC,EACD,OAAQ,GACC,CAAC,CAAC,OAAO,EAAE,IAA2C,CAC9D,EAED,MAAO,CACL,KAAM,gCACN,MAAMC,OAAY,CAChB,GAAI,CAAC,QAAQ,OAAQ,OAErB,IAAM,WAAa,oBAEnBA,OAAM,OAAO,CAAE,OAAQ,UAAW,EAAG,MAAO,MAAc,CACxD,IAAM,OAAS,QAAM,0BAAS,KAAK,KAAM,MAAM,EACzC,OAAS,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,EAEpC,SAAW,OAEf,QAAW,WAAW,QAAS,CAC7B,GAAM,CAAE,OAAQ,IAAK,EAAI,QACzB,GAAI,CACF,SAAW,MAAM,OAAO,SAAU,IAAI,CACxC,OAAS,EAAG,CACV,IAAM,IAAM,IAAI,MAAM,UAAU,IAAI,gBAAgB,CAAC,EAAE,EACvD,UAAI,MAAQ,aAAa,MAAQ,EAAE,MAAQ,GAErC,GACR,CACF,CAEA,MAAO,CACL,SACA,MACF,CACF,CAAC,CACH,CACF,CACF,EAvDgC,uBCdhC,iIASA,eAAsB,yBAAyB,OAAa,CAC1D,GAAM,CACJ,UAAY,GACZ,OAAS,GACT,OAAS,OACT,UAAY,GACZ,IACA,KACA,gBAAiB,eACnB,EAAI,MAAM,qBAAqB,MAAM,EAE/B,UAAS,WAAAC,SAAI;AAAA,CAA0C,EAAE,MAAM,EAC/D,MAAQ,YAAY,IAAI,EAE9B,MAAM,MAAM,EAEZ,GAAI,CACF,QAAM,mBAAM,CACV,MAAO,GACP,OAAQ,CAAC,KAAK,EACd,IAAK,GACL,sBAAuB,GACvB,OACA,MAAO,GACP,OAAQ,CACN,GAAI,0DACN,EACA,UACA,UAAW,GACX,OACA,OAAQ,GACR,MAAO,GACP,WAAY,GACZ,MAAO,CAAC,IAAK,QAAS,eAAgB,IAAI,MAAM,EAAE,EAClD,eAAgB,CAAC,iBAAiB,CAAC,CACrC,CAAC,EAED,MAAM,YAAY,OAAQ,KAAM,UAAW,eAAe,EAE1D,OAAO,QACL,OAAO,MACL,uBAAuB,YAAY,IAAI,EAAI,OAAO,QAAQ,CAAC,CAAC,KAC9D,CACF,EACA,MACE,OAAO,MACL;AAAA,MAAS,OAAO,QAAQ,kBAAkB,CAAC,IAAI,OAAO,MACpD,oBACF,CAAC,EACH,CACF,CACF,OAAS,EAAG,CACV,OAAO,KACL,uBAAuB,YAAY,IAAI,EAAI,OAAO,QAAQ,CAAC,CAAC,KAC9D,EACA,MAAM,CAAC,CACT,CACF,CAEA,eAAsB,YACtB,OACA,KACA,UACA,gBACA,CACE,IAAM,QAAO,wBAAK,QAAQ,IAAI,EAAG,OAAQ,IAAI,EAEvC,KAAO,CAAC;AAAA;AAAA,oBAA0B,iBAAiB,EAAE,KAAK;AAAA,CAAI,EAC9D,KAAO;AAAA,OACP,cAAgB,gBACtB,CACA,2CACA,0CACA,6DACA,wDACA,qDACA,yBACA,gCACA,WACA,4BACA,2BACA,wBACA,UACA,MACA,0CAA0C,EAC1C,KAAK;AAAA,CAAI,EACT,GAEM,gBAAkB,UACxB,CACA,2CACA,wHACA,2DACA,mFACA,2JACA,6EACA,8BACA,mEACA,SACA,6EACA,8BACA,gFACA,UACA,0CAA0C,EAC1C,KAAK;AAAA,CAAI,EACT,GAEM,SAAW,QAAM,2BAAS,KAAM,OAAO,EACvC,YAAc,CACpB,KACA,cACA,gBACA,KACA;AAAA;AAAA,EACA,QAAQ,EACR,KAAK;AAAA,CAAI,EAET,SAAO,4BAAU,KAAM,WAAW,CACpC,CA/HA,IAEAC,iBACAC,kBACA,YAEA,WANA,qEAEAD,iBAAoC,uBACpCC,kBAAqB,gBACrB,YAAsB,gBACtB,cACA,WAAgB,wBAChB,cAEsB,4DA2DA,qCCpEtB,qHAcA,eAAsB,2BAA2B,KAAW,CAC1D,GAAM,CACJ,IACA,KACA,MAAQ,EAAQ,KAAK,QACrB,YAAc,CAAC,EACf,SAAW,GACX,iBAAmB,GACnB,OACA,eACF,EAAI,MAAM,qBAAqB,KAAK,MAAM,EAErC,KACH,MAAM,uCAAuC,EAG1C,MACH,MAAM,wCAAwC,EAGhD,IAAM,UAAY,MACZ,UAAS,YAAAC,SACb,OAAO,MAAM;AAAA,CAAoC,CACnD,EAAE,MAAM,EACF,MAAQ,YAAY,IAAI,EAE1B,WAAa,CAAC,YAAY,SAAS,SAAS,EAC9C,YAAY,KAAK,SAAS,EACjB,CAAC,WAAa,YAAY,SAAS,SAAS,GACrD,YAAY,OAAO,YAAY,QAAQ,SAAS,EAAG,CAAC,EAGjD,YAAY,SAAS,sBAAsB,GAC9C,YAAY,KAAK,sBAAsB,EAGzC,MAAM,aAAa,EAEnB,GAAI,CACF,QAAM,oBAAM,CACV,MAAO,GACP,OAAQ,CAAC,KAAK,EACd,IAAK,GACL,sBAAuB,GACvB,OAAQ,GACR,MAAO,GACP,UAAW,SACX,UAAW,GACX,OAAQ,cACR,OAAQ,GACR,MAAO,CAAC,IAAK,QAAS,eAAgB,IAAI,MAAM,EAAE,EAAE,OAAO,OAAO,EAClE,MAAO,UACP,WAAY,GACZ,MAAM,WAAY,CAChB,OAAO,MAAM,YAAY,cAAe,KAAM,GAAO,eAAe,CACtE,EACA,eAAgB,CAChB,iBAAiB,CACf,YAAa,EACf,CAAC,CAAC,CAEJ,CAAC,EAED,OAAO,QACL,OAAO,MACL,0BAA0B,YAAY,IAAI,EAAI,OAAO,QAAQ,CAAC,CAAC;AAAA,CACjE,CACF,EAEI,WAAW,MAAM,OAAO,KAAK;AAAA,CAAgC,CAAC,EAElE,IAAM,WAAa,CAAC,EAEd,OAAM,cAAAC,QAAO,CACjB,QAAM,wBAAK,QAAQ,IAAI,EAAG,MAAM,EAChC,UACF,CAAC,EAEG,UACF,SAAS,UAAU,EAGjB,IAAI,OACN,MAAM,OAAO,OAAO,qBAAqB,IAAI,MAAM,OAAO,EAAE,CAAC,EAG3D,IAAI,QACN,MAAM,OAAO,KAAK,4BAA4B,CAAC,EAGjD,IAAM,GACN,0BAAAC,QAAc,MACZ,OACA,CAAC,GAAG,eAAa,wBAAK,QAAQ,IAAI,EAAG,cAAe,IAAI,CAAC,EACzD,CACE,IAAK,CACH,GAAG,QAAQ,IACX,GAAG,WACH,SAAU,cAEV,eAAgB,GAEhB,sBAAuB,EACzB,EACA,IAAK,QAAQ,IAAI,CACnB,CACF,EAEI,oBAAsB,GACxB,WAAa,GAEf,GAAG,OAAO,GAAG,OAAS,MAAS,CAC7B,IAAM,QAAU,KAAK,SAAS,EAE9B,GAAI,uBAAuB,KAAK,OAAO,EAAG,CACxC,MAAM,OAAO,KAAK,gDAAgD,CAAC,EACnE,oBAAsB,GACjB,aAAY,WAAa,IAC9B,MACF,CAEA,GAAI,kBAAoB,CAAC,uBAAuB,KAAK,OAAO,EAC1D,MAAM,OAAO,EACb,oBAAsB,OACjB,CACL,GAAI,qBAAuB,CAAC,WAAY,CACjC,aAAY,WAAa,IAC9B,MACF,CACA,MAAM,OAAO,KAAK,8BAAyB,CAAC,EAC5C,oBAAsB,EACxB,CAEK,aAAY,WAAa,GAChC,CAAC,EAED,GAAG,OAAO,GAAG,OAAS,MAAS,CAC7B,IAAM,QAAU,KAAK,SAAS,EAG9B,QAAQ,SACN,yFACF,GAIA,MAAM,OAAO,IAAI,OAAO,CAAC,CAC3B,CAAC,EAED,GAAG,GAAG,QAAU,MAAS,CACvB,MAAM;AAAA,CAAI,EACV,QAAQ,KAAK,MAAQ,CAAC,CACxB,CAAC,EAED,GAAG,GAAG,QAAU,KAAQ,CACtB,MAAM,GAAG,CACX,CAAC,CACH,OAAS,EAAG,CACV,OAAO,KACL,yBAAyB,YAAY,IAAI,EAAI,OAAO,QAAQ,CAAC,CAAC;AAAA,CAChE,EACA,MAAM,aAAa,MAAQ,EAAE,MAAQ,CAAC,CACxC,CACF,CAjLA,IACA,cACAC,kBACAC,aAGA,0BACAC,YAIM,uBACA,uBAZN,iFACA,cAAiC,kBACjCF,kBAAqB,gBACrBC,aAAsB,gBACtB,cACA,iBACA,0BAA0B,kCAC1BC,YAAgB,wBAChB,aACA,cAEM,uBAAyB,2BACzB,uBAAyB,6BAET,mECdtB,iHAQA,eAAsB,0BAA0B,OAAa,CAC3D,GAAM,CACJ,KACA,OAAS,OACT,SAAW,GACX,SACF,EAAI,MAAM,qBAAqB,MAAM,KAEhC,+BAAW,wBAAK,QAAQ,IAAI,EAAG,OAAQ,IAAI,CAAC,GAC/C,MACE,sEACF,EAGF,GAAI,CACF,IAAM,WAAa,CAAC,EAEd,OAAM,eAAAC,QAAO,CACjB,QAAM,wBAAK,QAAQ,IAAI,EAAG,MAAM,EAChC,UACF,CAAC,EAEG,UACF,SAAS,UAAU,EAGjB,IAAI,OACN,MAAM,OAAO,OAAO,qBAAqB,IAAI,MAAM,OAAO,EAAE,CAAC,EAG3D,IAAI,QACN,MAAM,OAAO,KAAK,4BAA4B,CAAC,EAGjD,IAAM,GACN,2BAAAC,QAAc,MACZ,OACA,CACA,UAAY,uBAAyB,MACrC,wBAAK,QAAQ,IAAI,EAAG,OAAQ,IAAI,CAAC,EACjC,OAAO,OAAO,EACd,CACE,IAAK,CACH,GAAG,QAAQ,IACX,GAAG,WACH,SAAU,aAEV,eAAgB,GAEhB,gBAAiB,EACnB,EACA,IAAK,QAAQ,IAAI,CACnB,CACF,EAEA,GAAG,OAAO,GAAG,OAAS,MAAS,CAC7B,MAAM,KAAK,SAAS,CAAC,CACvB,CAAC,EAED,GAAG,OAAO,GAAG,OAAS,MAAS,CAC7B,MAAM,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CACnC,CAAC,EAED,GAAG,GAAG,QAAU,MAAS,CACvB,MAAM;AAAA,CAAI,EACV,QAAQ,KAAK,MAAQ,CAAC,CACxB,CAAC,EAED,GAAG,GAAG,QAAU,KAAQ,CACtB,MAAM,GAAG,CACX,CAAC,CACH,OAAS,EAAG,CACV,MAAM,CAAC,CACT,CACF,CAlFA,IACAC,eACAC,gBACAC,kBAGAC,2BANA,+EACAH,eAAiC,kBACjCC,gBAA2B,cAC3BC,kBAAqB,gBACrB,cACA,iBACAC,2BAA0B,kCAEJ,iECRtB,0JAKA,eAAsB,uBACtB,KACA,QACA,CACE,GAAM,CAAE,OAAQ,EAAI,KAAM,QAAO,WAAW,EACtC,CAAE,2BAAAC,2BAA2B,EAAI,KAAM,sEACvC,CAAE,0BAAAC,0BAA0B,EAAI,KAAM,oEACtC,CAAE,yBAAAC,yBAAyB,EAAI,KAAM,0DAErC,QAAU,IAAI,QAAQ,YAAY,EAExC,QACA,QAAQ,KAAK,EACb,YAAY,qCAAqC,EACjD,OACE,sBACA,uCACA,iBACF,EACA,OAAO,IAAM,CACX,IAAMC,SAAU,QAAQ,KAAK,EAC7BH,4BAA2BG,QAAO,CACpC,CAAC,EAED,QACA,QAAQ,OAAO,EACf,YACE,oEACF,EACA,OACE,sBACA,qCACA,iBACF,EACA,OAAO,IAAM,CACX,IAAMA,SAAU,QAAQ,KAAK,EAC7BF,2BAA0BE,SAAQ,MAAM,CAC1C,CAAC,EAED,QACA,QAAQ,OAAO,EACf,YAAY,0CAA0C,EACtD,OACE,sBACA,qCACA,mBACF,EACA,OAAO,IAAM,CACX,IAAMA,SAAU,QAAQ,KAAK,EAC7BD,0BAAyBC,SAAQ,MAAM,CACzC,CAAC,EAED,MAAM,QAAQ,WAAW,KAAM,OAAO,CACxC,CArDsB","names":["fs","_traverse","_generate","build","ora","import_promises","import_node_path","ora","dotenv","child_process","import_node_path","import_tsup","import_ora","dotenv","child_process","import_dotenv","import_node_fs","import_node_path","import_node_child_process","bootstrapDevelopmentServer","bootstrapProductionServer","bootstrapProductionBuild","options"]}
@@ -0,0 +1,2 @@
1
+ import{bootstrapCommandkitCLI}from"../chunk-ULPF2QCW.mjs";import"../chunk-35OSBS47.mjs";export{bootstrapCommandkitCLI};
2
+ //# sourceMappingURL=init.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,3 @@
1
+ declare function parseEnv(src: any): any;
2
+
3
+ export { parseEnv };
@@ -0,0 +1,3 @@
1
+ declare function parseEnv(src: any): any;
2
+
3
+ export { parseEnv };
@@ -0,0 +1,2 @@
1
+ "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var parse_env_exports={};__export(parse_env_exports,{parseEnv:()=>parseEnv});module.exports=__toCommonJS(parse_env_exports);var import_node_crypto=require("crypto");var valuesMap={true:!0,false:!1,null:null,undefined:void 0,__UUIDv4__:__name(()=>(0,import_node_crypto.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");0&&(module.exports={parseEnv});
2
+ //# sourceMappingURL=parse-env.js.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":"ouBAAA,4HAEA,uBAA2B,kBAE3B,IAAM,UAAY,CAChB,KAAM,GACN,MAAO,GACP,KAAM,KACN,UAAW,OACX,WAAY,cAAM,+BAAW,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":[]}
@@ -0,0 +1,2 @@
1
+ import{parseEnv}from"../chunk-RQ3ABUE3.mjs";import"../chunk-35OSBS47.mjs";export{parseEnv};
2
+ //# sourceMappingURL=parse-env.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,3 @@
1
+ declare function bootstrapProductionServer(config: any): Promise<void>;
2
+
3
+ export { bootstrapProductionServer };
@@ -0,0 +1,3 @@
1
+ declare function bootstrapProductionServer(config: any): Promise<void>;
2
+
3
+ export { bootstrapProductionServer };
@@ -0,0 +1,4 @@
1
+ "use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var production_exports={};__export(production_exports,{bootstrapProductionServer:()=>bootstrapProductionServer});module.exports=__toCommonJS(production_exports);var import_dotenv=require("dotenv"),import_node_fs2=require("fs"),import_node_path2=require("path");var import_rimraf=require("rimraf"),import_node_path=require("path"),import_node_fs=__toESM(require("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");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?[(0,import_node_path.join)(cwd,src)]:possibleFileNames.map(name=>(0,import_node_path.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 import_node_fs.default.promises.access(loc,import_node_fs.default.constants.F_OK)}__name(ensureExists,"ensureExists");var import_node_crypto=require("crypto");var valuesMap={true:!0,false:!1,null:null,undefined:void 0,__UUIDv4__:__name(()=>(0,import_node_crypto.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");var import_node_child_process=__toESM(require("child_process"));async function bootstrapProductionServer(config){let{main,outDir="dist",envExtra=!0,sourcemap}=await findCommandKitConfig(config);(0,import_node_fs2.existsSync)((0,import_node_path2.join)(process.cwd(),outDir,main))||panic("Could not find production build, maybe run `commandkit build` first?");try{let processEnv={},env=(0,import_dotenv.config)({path:(0,import_node_path2.join)(process.cwd(),".env"),processEnv});envExtra&&parseEnv(processEnv),env.error&&write(Colors.yellow(`[DOTENV] Warning: ${env.error.message}`)),env.parsed&&write(Colors.blue("[DOTENV] Loaded .env file!"));let ps=import_node_child_process.default.spawn("node",[sourcemap?"--enable-source-maps":"",(0,import_node_path2.join)(process.cwd(),outDir,main)].filter(Boolean),{env:{...process.env,...processEnv,NODE_ENV:"production",COMMANDKIT_DEV:!1,COMMANDKIT_PROD:!0},cwd:process.cwd()});ps.stdout.on("data",data=>{write(data.toString())}),ps.stderr.on("data",data=>{write(Colors.red(data.toString()))}),ps.on("close",code=>{write(`
3
+ `),process.exit(code??0)}),ps.on("error",err=>{panic(err)})}catch(e){panic(e)}}__name(bootstrapProductionServer,"bootstrapProductionServer");0&&(module.exports={bootstrapProductionServer});
4
+ //# sourceMappingURL=production.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/production.ts","../../src/cli/common.ts","../../src/cli/parse-env.ts"],"sourcesContent":["// @ts-check\nimport { config as dotenv } from 'dotenv';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Colors, findCommandKitConfig, panic, write } from './common';\nimport { parseEnv } from './parse-env';\nimport child_process from 'node:child_process';\n\nexport async function bootstrapProductionServer(config: any) {\n const {\n main,\n outDir = 'dist',\n envExtra = true,\n sourcemap\n } = await findCommandKitConfig(config);\n\n if (!existsSync(join(process.cwd(), outDir, main))) {\n panic(\n 'Could not find production build, maybe run `commandkit build` first?'\n );\n }\n\n try {\n const processEnv = {};\n\n const env = dotenv({\n path: join(process.cwd(), '.env'),\n processEnv\n });\n\n if (envExtra) {\n parseEnv(processEnv);\n }\n\n if (env.error) {\n write(Colors.yellow(`[DOTENV] Warning: ${env.error.message}`));\n }\n\n if (env.parsed) {\n write(Colors.blue('[DOTENV] Loaded .env file!'));\n }\n\n const ps: child_process.ChildProcessWithoutNullStreams =\n child_process.spawn(\n 'node',\n [\n sourcemap ? '--enable-source-maps' : '',\n join(process.cwd(), outDir, main)].\n filter(Boolean),\n {\n env: {\n ...process.env,\n ...processEnv,\n NODE_ENV: 'production',\n // @ts-expect-error\n COMMANDKIT_DEV: false,\n // @ts-expect-error\n COMMANDKIT_PROD: true\n },\n cwd: process.cwd()\n }\n );\n\n ps.stdout.on('data', (data) => {\n write(data.toString());\n });\n\n ps.stderr.on('data', (data) => {\n write(Colors.red(data.toString()));\n });\n\n ps.on('close', (code) => {\n write('\\n');\n process.exit(code ?? 0);\n });\n\n ps.on('error', (err) => {\n panic(err);\n });\n } catch (e) {\n panic(e);\n }\n}","// @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}","// @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":"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","names":["import_node_fs","import_node_path","fs","dotenv","child_process"]}
@@ -0,0 +1,3 @@
1
+ import{Colors,findCommandKitConfig,panic,write}from"../chunk-FC5WQLBI.mjs";import{parseEnv}from"../chunk-RQ3ABUE3.mjs";import{__name}from"../chunk-35OSBS47.mjs";import{config as dotenv}from"dotenv";import{existsSync}from"node:fs";import{join}from"node:path";import child_process from"node:child_process";async function bootstrapProductionServer(config){let{main,outDir="dist",envExtra=!0,sourcemap}=await findCommandKitConfig(config);existsSync(join(process.cwd(),outDir,main))||panic("Could not find production build, maybe run `commandkit build` first?");try{let processEnv={},env=dotenv({path:join(process.cwd(),".env"),processEnv});envExtra&&parseEnv(processEnv),env.error&&write(Colors.yellow(`[DOTENV] Warning: ${env.error.message}`)),env.parsed&&write(Colors.blue("[DOTENV] Loaded .env file!"));let ps=child_process.spawn("node",[sourcemap?"--enable-source-maps":"",join(process.cwd(),outDir,main)].filter(Boolean),{env:{...process.env,...processEnv,NODE_ENV:"production",COMMANDKIT_DEV:!1,COMMANDKIT_PROD:!0},cwd:process.cwd()});ps.stdout.on("data",data=>{write(data.toString())}),ps.stderr.on("data",data=>{write(Colors.red(data.toString()))}),ps.on("close",code=>{write(`
2
+ `),process.exit(code??0)}),ps.on("error",err=>{panic(err)})}catch(e){panic(e)}}__name(bootstrapProductionServer,"bootstrapProductionServer");export{bootstrapProductionServer};
3
+ //# sourceMappingURL=production.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/production.ts"],"sourcesContent":["// @ts-check\nimport { config as dotenv } from 'dotenv';\nimport { existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Colors, findCommandKitConfig, panic, write } from './common';\nimport { parseEnv } from './parse-env';\nimport child_process from 'node:child_process';\n\nexport async function bootstrapProductionServer(config: any) {\n const {\n main,\n outDir = 'dist',\n envExtra = true,\n sourcemap\n } = await findCommandKitConfig(config);\n\n if (!existsSync(join(process.cwd(), outDir, main))) {\n panic(\n 'Could not find production build, maybe run `commandkit build` first?'\n );\n }\n\n try {\n const processEnv = {};\n\n const env = dotenv({\n path: join(process.cwd(), '.env'),\n processEnv\n });\n\n if (envExtra) {\n parseEnv(processEnv);\n }\n\n if (env.error) {\n write(Colors.yellow(`[DOTENV] Warning: ${env.error.message}`));\n }\n\n if (env.parsed) {\n write(Colors.blue('[DOTENV] Loaded .env file!'));\n }\n\n const ps: child_process.ChildProcessWithoutNullStreams =\n child_process.spawn(\n 'node',\n [\n sourcemap ? '--enable-source-maps' : '',\n join(process.cwd(), outDir, main)].\n filter(Boolean),\n {\n env: {\n ...process.env,\n ...processEnv,\n NODE_ENV: 'production',\n // @ts-expect-error\n COMMANDKIT_DEV: false,\n // @ts-expect-error\n COMMANDKIT_PROD: true\n },\n cwd: process.cwd()\n }\n );\n\n ps.stdout.on('data', (data) => {\n write(data.toString());\n });\n\n ps.stderr.on('data', (data) => {\n write(Colors.red(data.toString()));\n });\n\n ps.on('close', (code) => {\n write('\\n');\n process.exit(code ?? 0);\n });\n\n ps.on('error', (err) => {\n panic(err);\n });\n } catch (e) {\n panic(e);\n }\n}"],"mappings":"iKACA,OAAS,UAAU,WAAc,SACjC,OAAS,eAAkB,UAC3B,OAAS,SAAY,YAGrB,OAAO,kBAAmB,qBAE1B,eAAsB,0BAA0B,OAAa,CAC3D,GAAM,CACJ,KACA,OAAS,OACT,SAAW,GACX,SACF,EAAI,MAAM,qBAAqB,MAAM,EAEhC,WAAW,KAAK,QAAQ,IAAI,EAAG,OAAQ,IAAI,CAAC,GAC/C,MACE,sEACF,EAGF,GAAI,CACF,IAAM,WAAa,CAAC,EAEd,IAAM,OAAO,CACjB,KAAM,KAAK,QAAQ,IAAI,EAAG,MAAM,EAChC,UACF,CAAC,EAEG,UACF,SAAS,UAAU,EAGjB,IAAI,OACN,MAAM,OAAO,OAAO,qBAAqB,IAAI,MAAM,OAAO,EAAE,CAAC,EAG3D,IAAI,QACN,MAAM,OAAO,KAAK,4BAA4B,CAAC,EAGjD,IAAM,GACN,cAAc,MACZ,OACA,CACA,UAAY,uBAAyB,GACrC,KAAK,QAAQ,IAAI,EAAG,OAAQ,IAAI,CAAC,EACjC,OAAO,OAAO,EACd,CACE,IAAK,CACH,GAAG,QAAQ,IACX,GAAG,WACH,SAAU,aAEV,eAAgB,GAEhB,gBAAiB,EACnB,EACA,IAAK,QAAQ,IAAI,CACnB,CACF,EAEA,GAAG,OAAO,GAAG,OAAS,MAAS,CAC7B,MAAM,KAAK,SAAS,CAAC,CACvB,CAAC,EAED,GAAG,OAAO,GAAG,OAAS,MAAS,CAC7B,MAAM,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CACnC,CAAC,EAED,GAAG,GAAG,QAAU,MAAS,CACvB,MAAM;AAAA,CAAI,EACV,QAAQ,KAAK,MAAQ,CAAC,CACxB,CAAC,EAED,GAAG,GAAG,QAAU,KAAQ,CACtB,MAAM,GAAG,CACX,CAAC,CACH,OAAS,EAAG,CACV,MAAM,CAAC,CACT,CACF,CA1EsB","names":[]}
@@ -1,2 +1,2 @@
1
- "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var ButtonKit_exports={};__export(ButtonKit_exports,{ButtonKit:()=>ButtonKit});module.exports=__toCommonJS(ButtonKit_exports);var import_discord=require("discord.js");var ButtonKit=class extends import_discord.ButtonBuilder{static{__name(this,"ButtonKit")}#onClickHandler=null;#onEndHandler=null;#contextData=null;#collector=null;onClick(handler,data){if(this.data.style===import_discord.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 this.#destroyCollector(),this.#onClickHandler=handler,data&&(this.#contextData=data),this.#setupInteractionCollector(),this}onEnd(handler){if(!handler)throw new TypeError('Cannot setup "onEnd" without a handler function parameter.');return this.#onEndHandler=handler,this}#setupInteractionCollector(){if(!this.#contextData||!this.#onClickHandler)return;let message=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,...this.#contextData},collector=this.#collector=message.createMessageComponentCollector({filter:__name(interaction=>interaction.customId===this.data.custom_id&&interaction.message.id===message.id,"filter"),componentType:import_discord.ComponentType.Button,...data});this.#collector.on("collect",interaction=>{let handler=this.#onClickHandler;return handler?this.#collector?(data.autoReset&&this.#collector.resetTimer(),handler(interaction)):collector.stop("destroyed"):this.#destroyCollector()}),this.#collector.on("end",(_,reason)=>{this.#destroyCollector(),this.#onEndHandler?.(reason)})}dispose(){return this.#destroyCollector(),this.#onEndHandler?.("disposed"),this}#destroyCollector(){this.#collector?.stop("end"),this.#collector?.removeAllListeners(),this.#collector=null,this.#contextData=null,this.#onClickHandler=null}};0&&(module.exports={ButtonKit});
1
+ "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __typeError=msg=>{throw TypeError(msg)};var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var __accessCheck=(obj,member,msg)=>member.has(obj)||__typeError("Cannot "+msg);var __privateGet=(obj,member,getter)=>(__accessCheck(obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet=(obj,member,value,setter)=>(__accessCheck(obj,member,"write to private field"),setter?setter.call(obj,value):member.set(obj,value),value),__privateMethod=(obj,member,method)=>(__accessCheck(obj,member,"access private method"),method);var ButtonKit_exports={};__export(ButtonKit_exports,{ButtonKit:()=>ButtonKit});module.exports=__toCommonJS(ButtonKit_exports);var import_discord=require("discord.js");var _onClickHandler,_onEndHandler,_contextData,_collector,_ButtonKit_instances,setupInteractionCollector_fn,destroyCollector_fn,_ButtonKit=class _ButtonKit extends import_discord.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===import_discord.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:import_discord.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;0&&(module.exports={ButtonKit});
2
2
  //# sourceMappingURL=ButtonKit.js.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":"ouBAAA,8HAAA,mBAUA,sBA8BO,IAAM,UAAN,cAAwB,4BAAc,CAxC7C,MAwC6C,0BAC3C,gBACA,KACA,cAAqD,KACrD,aACA,KACA,WAA6D,KA2BtD,QACP,QACA,KACO,CACL,GAAI,KAAK,KAAK,QAAU,2BAAY,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,6BAAc,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":"64CAAA,8HAAA,mBAUA,sBAVA,gIAwCa,WAAN,MAAM,mBAAkB,4BAAc,CAAtC,0EACL,kCACA,MACA,gCAAqD,MACrD,+BACA,MACA,6BAA6D,MA2BtD,QACP,QACA,KACO,CACL,GAAI,KAAK,KAAK,QAAU,2BAAY,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,6BAAc,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":[]}
@@ -1,2 +1,2 @@
1
- import{ButtonKit}from"../chunk-WNEBLBID.mjs";import"../chunk-6TIBWNPX.mjs";export{ButtonKit};
1
+ import{ButtonKit}from"../chunk-TEL2J6LT.mjs";import"../chunk-35OSBS47.mjs";export{ButtonKit};
2
2
  //# sourceMappingURL=ButtonKit.mjs.map
@@ -1,2 +1,2 @@
1
- "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var components_exports={};__export(components_exports,{ButtonKit:()=>ButtonKit});module.exports=__toCommonJS(components_exports);var import_discord=require("discord.js");var ButtonKit=class extends import_discord.ButtonBuilder{static{__name(this,"ButtonKit")}#onClickHandler=null;#onEndHandler=null;#contextData=null;#collector=null;onClick(handler,data){if(this.data.style===import_discord.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 this.#destroyCollector(),this.#onClickHandler=handler,data&&(this.#contextData=data),this.#setupInteractionCollector(),this}onEnd(handler){if(!handler)throw new TypeError('Cannot setup "onEnd" without a handler function parameter.');return this.#onEndHandler=handler,this}#setupInteractionCollector(){if(!this.#contextData||!this.#onClickHandler)return;let message=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,...this.#contextData},collector=this.#collector=message.createMessageComponentCollector({filter:__name(interaction=>interaction.customId===this.data.custom_id&&interaction.message.id===message.id,"filter"),componentType:import_discord.ComponentType.Button,...data});this.#collector.on("collect",interaction=>{let handler=this.#onClickHandler;return handler?this.#collector?(data.autoReset&&this.#collector.resetTimer(),handler(interaction)):collector.stop("destroyed"):this.#destroyCollector()}),this.#collector.on("end",(_,reason)=>{this.#destroyCollector(),this.#onEndHandler?.(reason)})}dispose(){return this.#destroyCollector(),this.#onEndHandler?.("disposed"),this}#destroyCollector(){this.#collector?.stop("end"),this.#collector?.removeAllListeners(),this.#collector=null,this.#contextData=null,this.#onClickHandler=null}};0&&(module.exports={ButtonKit});
1
+ "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __typeError=msg=>{throw TypeError(msg)};var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var __accessCheck=(obj,member,msg)=>member.has(obj)||__typeError("Cannot "+msg);var __privateGet=(obj,member,getter)=>(__accessCheck(obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet=(obj,member,value,setter)=>(__accessCheck(obj,member,"write to private field"),setter?setter.call(obj,value):member.set(obj,value),value),__privateMethod=(obj,member,method)=>(__accessCheck(obj,member,"access private method"),method);var components_exports={};__export(components_exports,{ButtonKit:()=>ButtonKit});module.exports=__toCommonJS(components_exports);var import_discord=require("discord.js");var _onClickHandler,_onEndHandler,_contextData,_collector,_ButtonKit_instances,setupInteractionCollector_fn,destroyCollector_fn,_ButtonKit=class _ButtonKit extends import_discord.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===import_discord.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:import_discord.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;0&&(module.exports={ButtonKit});
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/index.ts","../../src/components/ButtonKit.ts"],"sourcesContent":["export * from './ButtonKit';","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":"ouBAAA,iICAA,mBAUA,sBA8BO,IAAM,UAAN,cAAwB,4BAAc,CAxC7C,MAwC6C,0BAC3C,gBACA,KACA,cAAqD,KACrD,aACA,KACA,WAA6D,KA2BtD,QACP,QACA,KACO,CACL,GAAI,KAAK,KAAK,QAAU,2BAAY,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,6BAAc,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/index.ts","../../src/components/ButtonKit.ts"],"sourcesContent":["export * from './ButtonKit';","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":"64CAAA,iICAA,mBAUA,sBAVA,gIAwCa,WAAN,MAAM,mBAAkB,4BAAc,CAAtC,0EACL,kCACA,MACA,gCAAqD,MACrD,+BACA,MACA,6BAA6D,MA2BtD,QACP,QACA,KACO,CACL,GAAI,KAAK,KAAK,QAAU,2BAAY,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,6BAAc,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":[]}
@@ -1,2 +1,2 @@
1
- import"../chunk-M5FMJETI.mjs";import{ButtonKit}from"../chunk-WNEBLBID.mjs";import"../chunk-6TIBWNPX.mjs";export{ButtonKit};
1
+ import"../chunk-M5FMJETI.mjs";import{ButtonKit}from"../chunk-TEL2J6LT.mjs";import"../chunk-35OSBS47.mjs";export{ButtonKit};
2
2
  //# sourceMappingURL=index.mjs.map
package/dist/config.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{defineConfig,getConfig}from"./chunk-6W2KY7FK.mjs";import"./chunk-6TIBWNPX.mjs";export{defineConfig,getConfig};
1
+ import{defineConfig,getConfig}from"./chunk-PTP2L33V.mjs";import"./chunk-35OSBS47.mjs";export{defineConfig,getConfig};
2
2
  //# sourceMappingURL=config.mjs.map