commandkit 1.0.0-dev.20250606020134 → 1.0.0-dev.20250606121449

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 (52) hide show
  1. package/dist/{CommandKit-D8HJegdh.js → CommandKit-CnLBu_7m.js} +2 -2
  2. package/dist/{CommandKit-D8HJegdh.js.map → CommandKit-CnLBu_7m.js.map} +1 -1
  3. package/dist/CommandKit.js +1 -1
  4. package/dist/analytics/analytics-engine.js +1 -1
  5. package/dist/analytics/utils.js +1 -1
  6. package/dist/app/commands/AppCommandRunner.js +1 -1
  7. package/dist/app/commands/Context.js +1 -1
  8. package/dist/app/handlers/AppCommandHandler.js +1 -1
  9. package/dist/app/handlers/AppEventsHandler.js +1 -1
  10. package/dist/app/index.js +1 -1
  11. package/dist/app/register/CommandRegistrar.js +1 -1
  12. package/dist/{build-DqOWmJAg.js → build-BejatFZX.js} +2 -2
  13. package/dist/{build-DqOWmJAg.js.map → build-BejatFZX.js.map} +1 -1
  14. package/dist/cli/build.js +2 -2
  15. package/dist/cli/development.js +2 -2
  16. package/dist/cli/information.js +1 -1
  17. package/dist/cli/init.js +2 -2
  18. package/dist/cli/production.js +2 -2
  19. package/dist/components/index.js +1 -1
  20. package/dist/components/v1/button/Button.js +1 -1
  21. package/dist/components/v1/button/ButtonKit.js +1 -1
  22. package/dist/components/v1/modal/Modal.js +1 -1
  23. package/dist/components/v1/modal/ModalKit.js +1 -1
  24. package/dist/components/v1/select-menu/ChannelSelectMenuKit.js +1 -1
  25. package/dist/components/v1/select-menu/MentionableSelectMenuKit.js +1 -1
  26. package/dist/components/v1/select-menu/RoleSelectMenuKit.js +1 -1
  27. package/dist/components/v1/select-menu/SelectMenu.js +1 -1
  28. package/dist/components/v1/select-menu/StringSelectMenuKit.js +1 -1
  29. package/dist/components/v1/select-menu/UserSelectMenuKit.js +1 -1
  30. package/dist/config/config.js +1 -1
  31. package/dist/config/default.js +1 -1
  32. package/dist/config/loader.js +1 -1
  33. package/dist/context/async-context.js +1 -1
  34. package/dist/context/environment.js +1 -1
  35. package/dist/{feature-flags-DBD8a_eD.js → feature-flags-DJi3gEFN.js} +2 -2
  36. package/dist/{feature-flags-DBD8a_eD.js.map → feature-flags-DJi3gEFN.js.map} +1 -1
  37. package/dist/flags/feature-flags.js +2 -2
  38. package/dist/index.js +4 -4
  39. package/dist/{init-B2LsvQoh.js → init-BDgyvx9E.js} +2 -2
  40. package/dist/{init-B2LsvQoh.js.map → init-BDgyvx9E.js.map} +1 -1
  41. package/dist/logger/DefaultLogger.js +1 -1
  42. package/dist/logger/Logger.js +1 -1
  43. package/dist/plugins/index.js +1 -1
  44. package/dist/plugins/plugin-runtime/CommandKitPluginRuntime.js +1 -1
  45. package/dist/plugins/plugin-runtime/builtin/CommonDirectiveTransformer.js +1 -1
  46. package/dist/plugins/plugin-runtime/builtin/MacroPlugin.js +1 -1
  47. package/dist/utils/dev-hooks.js +1 -1
  48. package/dist/utils/utilities.js +1 -1
  49. package/dist/{version-C9ijCrHf.js → version-ljw239LW.js} +2 -2
  50. package/dist/{version-C9ijCrHf.js.map → version-ljw239LW.js.map} +1 -1
  51. package/dist/version.js +1 -1
  52. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  require('./colors-Cd4Oz-r-.js');
2
2
  require('./ActionRow-CmTHbo2t.js');
3
3
  require('./error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('./CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('./CommandKit-CnLBu_7m.js');
5
5
  require('./common-CcfjYnPG.js');
6
6
  require('./common-CeO-vn8Y.js');
7
7
  require('./container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../CommandKit-CnLBu_7m.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-CeO-vn8Y.js');
7
7
  require('../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../CommandKit-CnLBu_7m.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-CeO-vn8Y.js');
7
7
  require('../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../CommandKit-CnLBu_7m.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-CeO-vn8Y.js');
7
7
  require('../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../CommandKit-CnLBu_7m.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-CeO-vn8Y.js');
7
7
  require('../../container-CpuiLsZM.js');
package/dist/app/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../CommandKit-CnLBu_7m.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-CeO-vn8Y.js');
7
7
  require('../../container-CpuiLsZM.js');
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const require_CommandKit = require('./CommandKit-D8HJegdh.js');
2
+ const require_CommandKit = require('./CommandKit-CnLBu_7m.js');
3
3
  const require_CompilerPluginRuntime = require('./CompilerPluginRuntime-C9wmPMQf.js');
4
4
  const require_common = require('./common-CW8v7gAn.js');
5
5
  const require_env = require('./env-ERkaRfQO.js');
@@ -132,4 +132,4 @@ Object.defineProperty(exports, 'buildApplication', {
132
132
  return buildApplication;
133
133
  }
134
134
  });
135
- //# sourceMappingURL=build-DqOWmJAg.js.map
135
+ //# sourceMappingURL=build-BejatFZX.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-DqOWmJAg.js","names":[],"sources":["../src/cli/build.ts"],"sourcesContent":["import { build } from 'tsdown';\nimport { CompilerPlugin, CompilerPluginRuntime } from '../plugins';\nimport { loadConfigFile } from '../config/loader';\nimport { writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { DevEnv, devEnvFileArgs, ProdEnv, prodEnvFileArgs } from './env';\nimport { rimraf } from 'rimraf';\nimport { performTypeCheck } from './type-checker';\nimport { copyLocaleFiles } from './common';\nimport { MaybeArray } from '../components';\n\nexport interface ApplicationBuildOptions {\n plugins?: MaybeArray<CompilerPlugin>[] | Array<CompilerPlugin>;\n rolldownPlugins?: any[];\n isDev?: boolean;\n configPath?: string;\n}\n\n// emit public env variables and given env variables\nfunction mergeDefinitionsIfNeeded(env: Record<string, string>) {\n const values = Object.fromEntries(\n Object.entries(process.env).filter(\n ([k]) => !(k in env) && k.startsWith('COMMANDKIT_PUBLIC_'),\n ),\n );\n\n return {\n ...env,\n ...values,\n };\n}\n\nexport async function buildApplication({\n plugins,\n rolldownPlugins,\n isDev,\n configPath,\n}: ApplicationBuildOptions) {\n const config = await loadConfigFile(configPath);\n\n if (!isDev && !config?.typescript?.ignoreBuildErrors) {\n await performTypeCheck(configPath || process.cwd());\n }\n\n const pluginRuntime = new CompilerPluginRuntime(\n (plugins || []) as CompilerPlugin[],\n );\n\n rolldownPlugins ??= [];\n\n rolldownPlugins.push(pluginRuntime.toJSON());\n\n try {\n const dest = isDev ? '.commandkit' : config.distDir;\n\n // Clean the destination directory\n await rimraf(dest);\n\n await pluginRuntime.init();\n\n await build({\n watch: false,\n dts: false,\n clean: true,\n format: ['esm'],\n shims: true,\n minify: false,\n silent: !!isDev,\n inputOptions: {\n transform: {\n jsx: {\n runtime: 'automatic',\n importSource: 'commandkit',\n },\n },\n moduleTypes: {\n '.json': 'js',\n '.node': 'binary',\n },\n },\n plugins: rolldownPlugins,\n platform: 'node',\n skipNodeModulesBundle: true,\n sourcemap: true,\n target: 'node16',\n outDir: dest,\n env: mergeDefinitionsIfNeeded(config.env || {}),\n entry: [\n 'src',\n `!${config.distDir}`,\n '!.commandkit',\n '!**/*.test.*',\n '!**/*.spec.*',\n ],\n unbundle: !!isDev,\n });\n\n await copyLocaleFiles('src', dest);\n await injectEntryFile(configPath || process.cwd(), !!isDev, config.distDir);\n } catch (error) {\n console.error('Build failed:', error);\n if (error instanceof Error) {\n console.error('Error details:', error.stack);\n }\n process.exit(1); // Force exit on error\n } finally {\n // Ensure plugins are cleaned up\n await pluginRuntime.destroy();\n }\n}\n\nconst envScript = (dev: boolean) => `// --- Environment Variables Loader ---\nconst $env = [${(dev ? devEnvFileArgs : prodEnvFileArgs).map((p) => `\"${p}\"`).join(', ')}];\nfor (const file of $env) {\n try {\n process.loadEnvFile(file);\n console.log('\\\\x1b[36m✔ Loaded \\\\x1b[0m\\\\x1b[33m%s\\\\x1b[0m', file);\n } catch {}\n}\n`;\n\nconst antiCrashScript = [\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[31m${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\nconst wrapInAsyncIIFE = (code: string[]) =>\n `;await (async () => {\\n${code.join('\\n\\n')}\\n})();`;\n\nasync function injectEntryFile(\n configPath: string,\n isDev: boolean,\n distDir?: string,\n) {\n const code = `/* Entrypoint File Generated By CommandKit */\n${isDev ? `\\n\\n// Injected for development\\n${wrapInAsyncIIFE([envScript(isDev), antiCrashScript])}\\n\\n` : wrapInAsyncIIFE([envScript(isDev)])}\n\nimport { commandkit } from 'commandkit';\nimport { Client } from 'discord.js';\n\nasync function bootstrap() {\n const app = await import('./app.js').then((m) => m.default ?? m);\n\n if (!app || !(app instanceof Client)) {\n throw new Error('The app file must default export the discord.js client instance');\n }\n\n commandkit.setClient(app);\n\n await commandkit.start();\n}\n\nawait bootstrap().catch((e) => {\n console.error('Failed to bootstrap CommandKit application:\\\\n', e.stack);\n})\n`;\n\n const dist = isDev ? '.commandkit' : distDir || 'dist';\n\n await writeFile(join(configPath, dist, 'index.js'), code);\n}\n"],"mappings":";;;;;;;;;;;;AAmBA,SAAS,yBAAyB,KAA6B;CAC7D,MAAM,SAAS,OAAO,YACpB,OAAO,QAAQ,QAAQ,IAAI,CAAC,OAC1B,CAAC,CAAC,EAAE,OAAO,KAAK,QAAQ,EAAE,WAAW,qBAAqB,CAC3D,CACF;AAED,QAAO;EACL,GAAG;EACH,GAAG;CACJ;AACH;AAEA,eAAsB,iBAAiB,EACrC,SACA,iBACA,OACA,YACwB,EAAE;;CAC1B,MAAM,SAAS,MAAM,kCAAe,WAAW;AAE/C,MAAK,yEAAU,OAAQ,oFAAY,mBACjC,OAAM,sCAAiB,cAAc,QAAQ,KAAK,CAAC;CAGrD,MAAM,gBAAgB,IAAI,oDACvB,WAAW,CAAE;AAGhB,qBAAoB,CAAE;AAEtB,iBAAgB,KAAK,cAAc,QAAQ,CAAC;AAE5C,KAAI;EACF,MAAM,OAAO,QAAQ,gBAAgB,OAAO;AAG5C,QAAM,mBAAO,KAAK;AAElB,QAAM,cAAc,MAAM;AAE1B,QAAM,kBAAM;GACV,OAAO;GACP,KAAK;GACL,OAAO;GACP,QAAQ,CAAC,KAAM;GACf,OAAO;GACP,QAAQ;GACR,UAAU;GACV,cAAc;IACZ,WAAW,EACT,KAAK;KACH,SAAS;KACT,cAAc;IACf,EACF;IACD,aAAa;KACX,SAAS;KACT,SAAS;IACV;GACF;GACD,SAAS;GACT,UAAU;GACV,uBAAuB;GACvB,WAAW;GACX,QAAQ;GACR,QAAQ;GACR,KAAK,yBAAyB,OAAO,OAAO,CAAE,EAAC;GAC/C,OAAO;IACP;KACC,GAAG,OAAO,QAAQ;IACnB;IACA;IACA;GAAe;GAEf,YAAY;EACb,EAAC;AAEF,QAAM,+BAAgB,OAAO,KAAK;AAClC,QAAM,gBAAgB,cAAc,QAAQ,KAAK,IAAI,OAAO,OAAO,QAAQ;CAC5E,SAAQ,OAAO;AACd,UAAQ,MAAM,iBAAiB,MAAM;AACrC,MAAI,iBAAiB,MACnB,SAAQ,MAAM,kBAAkB,MAAM,MAAM;AAE9C,UAAQ,KAAK,EAAE;CAChB,UAAS;AAER,QAAM,cAAc,SAAS;CAC/B;AACF;AAEA,MAAM,YAAY,CAAC,SAAkB;gBACrB,CAAC,MAAM,6BAAiB,6BAAiB,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC;;;;;;;;AASzF,MAAM,kBAAkB;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAA2C,EAC3C,KAAK,KAAK;AAEV,MAAM,kBAAkB,CAAC,UACxB,yBAAyB,KAAK,KAAK,OAAO,CAAC;AAE5C,eAAe,gBACf,YACA,OACA,SACA;CACE,MAAM,QAAQ;EACd,SAAS,mCAAmC,gBAAgB,CAAC,UAAU,MAAM,EAAE,eAAgB,EAAC,CAAC,QAAQ,gBAAgB,CAAC,UAAU,MAAM,AAAC,EAAC,CAAA;;;;;;;;;;;;;;;;;;;;;CAsB5I,MAAM,OAAO,QAAQ,gBAAgB,WAAW;AAEhD,OAAM,gCAAU,oBAAK,YAAY,MAAM,WAAW,EAAE,KAAK;AAC3D"}
1
+ {"version":3,"file":"build-BejatFZX.js","names":[],"sources":["../src/cli/build.ts"],"sourcesContent":["import { build } from 'tsdown';\nimport { CompilerPlugin, CompilerPluginRuntime } from '../plugins';\nimport { loadConfigFile } from '../config/loader';\nimport { writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { DevEnv, devEnvFileArgs, ProdEnv, prodEnvFileArgs } from './env';\nimport { rimraf } from 'rimraf';\nimport { performTypeCheck } from './type-checker';\nimport { copyLocaleFiles } from './common';\nimport { MaybeArray } from '../components';\n\nexport interface ApplicationBuildOptions {\n plugins?: MaybeArray<CompilerPlugin>[] | Array<CompilerPlugin>;\n rolldownPlugins?: any[];\n isDev?: boolean;\n configPath?: string;\n}\n\n// emit public env variables and given env variables\nfunction mergeDefinitionsIfNeeded(env: Record<string, string>) {\n const values = Object.fromEntries(\n Object.entries(process.env).filter(\n ([k]) => !(k in env) && k.startsWith('COMMANDKIT_PUBLIC_'),\n ),\n );\n\n return {\n ...env,\n ...values,\n };\n}\n\nexport async function buildApplication({\n plugins,\n rolldownPlugins,\n isDev,\n configPath,\n}: ApplicationBuildOptions) {\n const config = await loadConfigFile(configPath);\n\n if (!isDev && !config?.typescript?.ignoreBuildErrors) {\n await performTypeCheck(configPath || process.cwd());\n }\n\n const pluginRuntime = new CompilerPluginRuntime(\n (plugins || []) as CompilerPlugin[],\n );\n\n rolldownPlugins ??= [];\n\n rolldownPlugins.push(pluginRuntime.toJSON());\n\n try {\n const dest = isDev ? '.commandkit' : config.distDir;\n\n // Clean the destination directory\n await rimraf(dest);\n\n await pluginRuntime.init();\n\n await build({\n watch: false,\n dts: false,\n clean: true,\n format: ['esm'],\n shims: true,\n minify: false,\n silent: !!isDev,\n inputOptions: {\n transform: {\n jsx: {\n runtime: 'automatic',\n importSource: 'commandkit',\n },\n },\n moduleTypes: {\n '.json': 'js',\n '.node': 'binary',\n },\n },\n plugins: rolldownPlugins,\n platform: 'node',\n skipNodeModulesBundle: true,\n sourcemap: true,\n target: 'node16',\n outDir: dest,\n env: mergeDefinitionsIfNeeded(config.env || {}),\n entry: [\n 'src',\n `!${config.distDir}`,\n '!.commandkit',\n '!**/*.test.*',\n '!**/*.spec.*',\n ],\n unbundle: !!isDev,\n });\n\n await copyLocaleFiles('src', dest);\n await injectEntryFile(configPath || process.cwd(), !!isDev, config.distDir);\n } catch (error) {\n console.error('Build failed:', error);\n if (error instanceof Error) {\n console.error('Error details:', error.stack);\n }\n process.exit(1); // Force exit on error\n } finally {\n // Ensure plugins are cleaned up\n await pluginRuntime.destroy();\n }\n}\n\nconst envScript = (dev: boolean) => `// --- Environment Variables Loader ---\nconst $env = [${(dev ? devEnvFileArgs : prodEnvFileArgs).map((p) => `\"${p}\"`).join(', ')}];\nfor (const file of $env) {\n try {\n process.loadEnvFile(file);\n console.log('\\\\x1b[36m✔ Loaded \\\\x1b[0m\\\\x1b[33m%s\\\\x1b[0m', file);\n } catch {}\n}\n`;\n\nconst antiCrashScript = [\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[31m${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\nconst wrapInAsyncIIFE = (code: string[]) =>\n `;await (async () => {\\n${code.join('\\n\\n')}\\n})();`;\n\nasync function injectEntryFile(\n configPath: string,\n isDev: boolean,\n distDir?: string,\n) {\n const code = `/* Entrypoint File Generated By CommandKit */\n${isDev ? `\\n\\n// Injected for development\\n${wrapInAsyncIIFE([envScript(isDev), antiCrashScript])}\\n\\n` : wrapInAsyncIIFE([envScript(isDev)])}\n\nimport { commandkit } from 'commandkit';\nimport { Client } from 'discord.js';\n\nasync function bootstrap() {\n const app = await import('./app.js').then((m) => m.default ?? m);\n\n if (!app || !(app instanceof Client)) {\n throw new Error('The app file must default export the discord.js client instance');\n }\n\n commandkit.setClient(app);\n\n await commandkit.start();\n}\n\nawait bootstrap().catch((e) => {\n console.error('Failed to bootstrap CommandKit application:\\\\n', e.stack);\n})\n`;\n\n const dist = isDev ? '.commandkit' : distDir || 'dist';\n\n await writeFile(join(configPath, dist, 'index.js'), code);\n}\n"],"mappings":";;;;;;;;;;;;AAmBA,SAAS,yBAAyB,KAA6B;CAC7D,MAAM,SAAS,OAAO,YACpB,OAAO,QAAQ,QAAQ,IAAI,CAAC,OAC1B,CAAC,CAAC,EAAE,OAAO,KAAK,QAAQ,EAAE,WAAW,qBAAqB,CAC3D,CACF;AAED,QAAO;EACL,GAAG;EACH,GAAG;CACJ;AACH;AAEA,eAAsB,iBAAiB,EACrC,SACA,iBACA,OACA,YACwB,EAAE;;CAC1B,MAAM,SAAS,MAAM,kCAAe,WAAW;AAE/C,MAAK,yEAAU,OAAQ,oFAAY,mBACjC,OAAM,sCAAiB,cAAc,QAAQ,KAAK,CAAC;CAGrD,MAAM,gBAAgB,IAAI,oDACvB,WAAW,CAAE;AAGhB,qBAAoB,CAAE;AAEtB,iBAAgB,KAAK,cAAc,QAAQ,CAAC;AAE5C,KAAI;EACF,MAAM,OAAO,QAAQ,gBAAgB,OAAO;AAG5C,QAAM,mBAAO,KAAK;AAElB,QAAM,cAAc,MAAM;AAE1B,QAAM,kBAAM;GACV,OAAO;GACP,KAAK;GACL,OAAO;GACP,QAAQ,CAAC,KAAM;GACf,OAAO;GACP,QAAQ;GACR,UAAU;GACV,cAAc;IACZ,WAAW,EACT,KAAK;KACH,SAAS;KACT,cAAc;IACf,EACF;IACD,aAAa;KACX,SAAS;KACT,SAAS;IACV;GACF;GACD,SAAS;GACT,UAAU;GACV,uBAAuB;GACvB,WAAW;GACX,QAAQ;GACR,QAAQ;GACR,KAAK,yBAAyB,OAAO,OAAO,CAAE,EAAC;GAC/C,OAAO;IACP;KACC,GAAG,OAAO,QAAQ;IACnB;IACA;IACA;GAAe;GAEf,YAAY;EACb,EAAC;AAEF,QAAM,+BAAgB,OAAO,KAAK;AAClC,QAAM,gBAAgB,cAAc,QAAQ,KAAK,IAAI,OAAO,OAAO,QAAQ;CAC5E,SAAQ,OAAO;AACd,UAAQ,MAAM,iBAAiB,MAAM;AACrC,MAAI,iBAAiB,MACnB,SAAQ,MAAM,kBAAkB,MAAM,MAAM;AAE9C,UAAQ,KAAK,EAAE;CAChB,UAAS;AAER,QAAM,cAAc,SAAS;CAC/B;AACF;AAEA,MAAM,YAAY,CAAC,SAAkB;gBACrB,CAAC,MAAM,6BAAiB,6BAAiB,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC;;;;;;;;AASzF,MAAM,kBAAkB;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAA2C,EAC3C,KAAK,KAAK;AAEV,MAAM,kBAAkB,CAAC,UACxB,yBAAyB,KAAK,KAAK,OAAO,CAAC;AAE5C,eAAe,gBACf,YACA,OACA,SACA;CACE,MAAM,QAAQ;EACd,SAAS,mCAAmC,gBAAgB,CAAC,UAAU,MAAM,EAAE,eAAgB,EAAC,CAAC,QAAQ,gBAAgB,CAAC,UAAU,MAAM,AAAC,EAAC,CAAA;;;;;;;;;;;;;;;;;;;;;CAsB5I,MAAM,OAAO,QAAQ,gBAAgB,WAAW;AAEhD,OAAM,gCAAU,oBAAK,YAAY,MAAM,WAAW,EAAE,KAAK;AAC3D"}
package/dist/cli/build.js CHANGED
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- require('../CommandKit-D8HJegdh.js');
4
+ require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -36,6 +36,6 @@ require('../CommandKitEventsChannel-B6LKgxmv.js');
36
36
  require('../store-Ci6ib2C9.js');
37
37
  require('../env-ERkaRfQO.js');
38
38
  require('../type-checker-CXVdS7qc.js');
39
- const require_build = require('../build-DqOWmJAg.js');
39
+ const require_build = require('../build-BejatFZX.js');
40
40
 
41
41
  exports.buildApplication = require_build.buildApplication;
@@ -2,7 +2,7 @@ const require_chunk = require('../chunk-nOFOJqeH.js');
2
2
  const require_colors = require('../colors-Cd4Oz-r-.js');
3
3
  require('../ActionRow-CmTHbo2t.js');
4
4
  require('../error-codes-C_UO39jz.js');
5
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
5
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
6
6
  require('../common-CcfjYnPG.js');
7
7
  require('../common-CeO-vn8Y.js');
8
8
  require('../container-CpuiLsZM.js');
@@ -38,7 +38,7 @@ require('../store-Ci6ib2C9.js');
38
38
  require('../env-ERkaRfQO.js');
39
39
  const require_app_process = require('../app-process-YbSHvqf-.js');
40
40
  require('../type-checker-CXVdS7qc.js');
41
- const require_build = require('../build-DqOWmJAg.js');
41
+ const require_build = require('../build-BejatFZX.js');
42
42
  const node_crypto = require_chunk.__toESM(require("node:crypto"));
43
43
  const path = require_chunk.__toESM(require("path"));
44
44
  const chokidar = require_chunk.__toESM(require("chokidar"));
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('../chunk-nOFOJqeH.js');
2
- const require_version = require('../version-C9ijCrHf.js');
2
+ const require_version = require('../version-ljw239LW.js');
3
3
  const node_fs = require_chunk.__toESM(require("node:fs"));
4
4
  const node_path = require_chunk.__toESM(require("node:path"));
5
5
  const node_child_process = require_chunk.__toESM(require("node:child_process"));
package/dist/cli/init.js CHANGED
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- require('../CommandKit-D8HJegdh.js');
4
+ require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -34,6 +34,6 @@ require('../router-Dn35v30f.js');
34
34
  require('../common-CW8v7gAn.js');
35
35
  require('../CommandKitEventsChannel-B6LKgxmv.js');
36
36
  require('../store-Ci6ib2C9.js');
37
- const require_init = require('../init-B2LsvQoh.js');
37
+ const require_init = require('../init-BDgyvx9E.js');
38
38
 
39
39
  exports.bootstrapCommandkitCLI = require_init.bootstrapCommandkitCLI;
@@ -2,7 +2,7 @@ const require_chunk = require('../chunk-nOFOJqeH.js');
2
2
  require('../colors-Cd4Oz-r-.js');
3
3
  require('../ActionRow-CmTHbo2t.js');
4
4
  require('../error-codes-C_UO39jz.js');
5
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
5
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
6
6
  require('../common-CcfjYnPG.js');
7
7
  require('../common-CeO-vn8Y.js');
8
8
  require('../container-CpuiLsZM.js');
@@ -38,7 +38,7 @@ require('../store-Ci6ib2C9.js');
38
38
  require('../env-ERkaRfQO.js');
39
39
  const require_app_process = require('../app-process-YbSHvqf-.js');
40
40
  require('../type-checker-CXVdS7qc.js');
41
- const require_build = require('../build-DqOWmJAg.js');
41
+ const require_build = require('../build-BejatFZX.js');
42
42
  const require_utils = require('../utils-IYtoeTur.js');
43
43
  const fs = require_chunk.__toESM(require("fs"));
44
44
 
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  const require_ActionRow = require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  const require_container = require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,4 +1,4 @@
1
- const require_CommandKit = require('./CommandKit-D8HJegdh.js');
1
+ const require_CommandKit = require('./CommandKit-CnLBu_7m.js');
2
2
  const require_EventWorkerContext = require('./EventWorkerContext-BAKiTqJz.js');
3
3
  const require_constants = require('./constants-DWe181uQ.js');
4
4
 
@@ -109,4 +109,4 @@ Object.defineProperty(exports, 'flag', {
109
109
  return flag;
110
110
  }
111
111
  });
112
- //# sourceMappingURL=feature-flags-DBD8a_eD.js.map
112
+ //# sourceMappingURL=feature-flags-DJi3gEFN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-flags-DBD8a_eD.js","names":[],"sources":["../src/flags/feature-flags.ts"],"sourcesContent":["import { getCommandKit, getContext } from '../context/async-context';\nimport { eventWorkerContext } from '../app/events/EventWorkerContext';\nimport { ParsedEvent } from '../app/router';\nimport { CommandKit } from '../CommandKit';\nimport {\n AutocompleteInteraction,\n ChatInputCommandInteraction,\n Client,\n ClientEvents,\n ContextMenuCommandInteraction,\n Guild,\n Message,\n TextBasedChannel,\n} from 'discord.js';\nimport { LoadedCommand } from '../app';\nimport { defer, JsonSerialize } from '../utils/utilities';\nimport { AnalyticsEvents } from '../analytics/constants';\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport type IdentifyFunction<R> = (\n context: EvaluationContext,\n) => MaybePromise<R>;\n\nexport type DecideFunction<E, R> = (data: { entities: E }) => MaybePromise<R>;\n\nexport interface FeatureFlagDefinition<R, Entity> {\n key: string;\n description?: string;\n identify?: IdentifyFunction<Entity>;\n decide: DecideFunction<Entity, R>;\n}\n\nexport interface CommandFlagContext {\n client: Client<true>;\n commandkit: CommandKit;\n command: {\n interaction?:\n | ChatInputCommandInteraction\n | AutocompleteInteraction\n | ContextMenuCommandInteraction;\n message?: Message;\n guild: Guild | null;\n channel: TextBasedChannel | null;\n command: LoadedCommand;\n };\n event: null;\n}\n\nexport interface EventFlagContext {\n client: Client<true>;\n commandkit: CommandKit;\n event: {\n data: ParsedEvent;\n event: string;\n namespace: string | null;\n arguments: any[];\n argumentsAs<E extends keyof ClientEvents>(event: E): ClientEvents[E];\n };\n command: null;\n}\n\nexport type EvaluationContext = CommandFlagContext | EventFlagContext;\n\nexport type CustomEvaluationFunction<E> = () => MaybePromise<E>;\n\nexport type CustomEvaluationContext<E> = {\n identify: E | CustomEvaluationFunction<E>;\n};\n\nexport interface FlagRunner<E, R> {\n (): Promise<R>;\n run(context: CustomEvaluationContext<E>): Promise<R>;\n}\n\nexport class FeatureFlag<R, T> {\n private commandkit: CommandKit;\n public constructor(public readonly options: FeatureFlagDefinition<R, T>) {\n this.commandkit = getCommandKit(true);\n const FlagStore = this.commandkit.flags;\n\n if (FlagStore.has(options.key)) {\n throw new Error(`Feature flag with key \"${options.key}\" already exists.`);\n }\n\n FlagStore.set(options.key, this);\n }\n\n private getContext(): EvaluationContext {\n const env = getContext();\n\n if (env?.context) {\n const {\n client,\n commandkit,\n interaction,\n message,\n guild,\n channel,\n command,\n } = env.context;\n\n return {\n client: client as Client<true>,\n commandkit,\n command: {\n interaction,\n message,\n guild,\n channel,\n command,\n },\n event: null,\n };\n }\n\n const eventCtx = eventWorkerContext.getStore();\n\n if (eventCtx) {\n const { commandkit, data, event, namespace } = eventCtx;\n\n return {\n client: commandkit.client as Client<true>,\n commandkit,\n event: {\n data,\n event,\n namespace,\n arguments: eventCtx.arguments,\n argumentsAs: (eventName) => {\n const args = eventCtx.arguments as ClientEvents[typeof eventName];\n return args;\n },\n },\n command: null,\n };\n }\n\n throw new Error(\n 'Could not determine the execution context. Feature flags may only be used inside a command or event.',\n );\n }\n\n public async execute(res?: T): Promise<R> {\n const { decide, identify } = this.options;\n\n const identificationStart = performance.now();\n const entities =\n res ??\n (await (async () => {\n const ctx = this.getContext();\n return (await identify?.(ctx)) ?? ({} as T);\n })());\n const identificationTime = performance.now() - identificationStart;\n\n const decisionStart = performance.now();\n const decisionResult = await decide({\n entities,\n });\n const decisionTime = performance.now() - decisionStart;\n\n defer(async () => {\n await this.commandkit.analytics.track({\n name: AnalyticsEvents.FEATURE_FLAG_METRICS,\n data: {\n flag: this.options.key,\n identificationTime: identificationTime.toFixed(2),\n decisionTime: decisionTime.toFixed(2),\n },\n });\n });\n\n defer(async () => {\n await this.commandkit.analytics.track({\n name: AnalyticsEvents.FEATURE_FLAG_DECISION,\n id:\n entities &&\n typeof entities === 'object' &&\n 'id' in entities &&\n typeof entities.id === 'string'\n ? entities.id\n : undefined,\n data: {\n flag: this.options.key,\n decision: JsonSerialize(decisionResult, 'unknown'),\n },\n });\n });\n\n return decisionResult as R;\n }\n}\n\nexport function flag<Returns = boolean, Entity = Record<any, any>>(\n options: FeatureFlagDefinition<Returns, Entity>,\n): FlagRunner<Entity, Returns> {\n const flag = new FeatureFlag<Returns, Entity>(options);\n const runner = flag.execute.bind(flag, undefined) as FlagRunner<\n Entity,\n Returns\n >;\n\n runner.run = async function (ctx) {\n if (!ctx?.identify) {\n throw new Error(\n 'Custom evaluation context must have an identify function or object.',\n );\n }\n\n const context = (\n typeof ctx === 'function'\n ? await (ctx as CustomEvaluationFunction<Entity>)()\n : ctx\n ) as Entity;\n\n const decisionResult = await flag.execute(context);\n\n return decisionResult;\n };\n\n return runner;\n}\n"],"mappings":";;;;;AA2EA,IAAa,cAAb,MAA+B;CAC7B,AAAQ;CACR,AAAO,YAA4B,SAAsC;EAAtC;AACjC,OAAK,aAAa,iCAAc,KAAK;EACrC,MAAM,YAAY,KAAK,WAAW;AAElC,MAAI,UAAU,IAAI,QAAQ,IAAI,CAC5B,OAAM,IAAI,OAAO,yBAAyB,QAAQ,IAAI;AAGxD,YAAU,IAAI,QAAQ,KAAK,KAAK;CAClC;CAEA,AAAQ,aAAgC;EACtC,MAAM,MAAM,+BAAY;AAExB,gDAAI,IAAK,SAAS;GAChB,MAAM,EACJ,QACA,YACA,aACA,SACA,OACA,SACA,SACD,GAAG,IAAI;AAER,UAAO;IACG;IACR;IACA,SAAS;KACP;KACA;KACA;KACA;KACA;IACD;IACD,OAAO;GACR;EACH;EAEA,MAAM,WAAW,8CAAmB,UAAU;AAE9C,MAAI,UAAU;GACZ,MAAM,EAAE,YAAY,MAAM,OAAO,WAAW,GAAG;AAE/C,UAAO;IACL,QAAQ,WAAW;IACnB;IACA,OAAO;KACL;KACA;KACA;KACA,WAAW,SAAS;KACpB,aAAa,CAAC,cAAc;MAC1B,MAAM,OAAO,SAAS;AACtB,aAAO;KACR;IACF;IACD,SAAS;GACV;EACH;AAEA,QAAM,IAAI,MACR;CAEJ;CAEA,MAAa,QAAQ,KAAqB;EACxC,MAAM,EAAE,QAAQ,UAAU,GAAG,KAAK;EAElC,MAAM,sBAAsB,YAAY,KAAK;EAC7C,MAAM,WACN,OACA,MAAM,CAAC,YAAY;GACjB,MAAM,MAAM,KAAK,YAAY;AAC7B,UAAQ,2DAAM,SAAW,IAAI,KAAK,CAAE;EACrC,IAAG;EACJ,MAAM,qBAAqB,YAAY,KAAK,GAAG;EAE/C,MAAM,gBAAgB,YAAY,KAAK;EACvC,MAAM,iBAAiB,MAAM,OAAO,EAClC,SACD,EAAC;EACF,MAAM,eAAe,YAAY,KAAK,GAAG;AAEzC,2BAAM,YAAY;AAChB,SAAM,KAAK,WAAW,UAAU,MAAM;IACpC,MAAM,kCAAgB;IACtB,MAAM;KACJ,MAAM,KAAK,QAAQ;KACnB,oBAAoB,mBAAmB,QAAQ,EAAE;KACjD,cAAc,aAAa,QAAQ,EAAE;IACtC;GACF,EAAC;EACH,EAAC;AAEF,2BAAM,YAAY;AAChB,SAAM,KAAK,WAAW,UAAU,MAAM;IACpC,MAAM,kCAAgB;IACtB,IACA,mBACO,aAAa,YACpB,QAAQ,mBACD,SAAS,OAAO,WACvB,SAAS;IAET,MAAM;KACJ,MAAM,KAAK,QAAQ;KACnB,UAAU,iCAAc,gBAAgB,UAAU;IACnD;GACF,EAAC;EACH,EAAC;AAEF,SAAO;CACT;AACF;AAEA,SAAgB,KAChB,SAC8B;CAC5B,MAAM,SAAO,IAAI,YAA6B;CAC9C,MAAM,SAAS,OAAK,QAAQ,KAAK,eAAgB;AAKjD,QAAO,MAAM,eAAgB,KAAK;AAChC,kDAAK,IAAK,UACR,OAAM,IAAI,MACR;EAIJ,MAAM,iBACC,QAAQ,aACf,MAAM,AAAC,KAA0C,GACjD;EAGA,MAAM,iBAAiB,MAAM,OAAK,QAAQ,QAAQ;AAElD,SAAO;CACR;AAED,QAAO;AACT"}
1
+ {"version":3,"file":"feature-flags-DJi3gEFN.js","names":[],"sources":["../src/flags/feature-flags.ts"],"sourcesContent":["import { getCommandKit, getContext } from '../context/async-context';\nimport { eventWorkerContext } from '../app/events/EventWorkerContext';\nimport { ParsedEvent } from '../app/router';\nimport { CommandKit } from '../CommandKit';\nimport {\n AutocompleteInteraction,\n ChatInputCommandInteraction,\n Client,\n ClientEvents,\n ContextMenuCommandInteraction,\n Guild,\n Message,\n TextBasedChannel,\n} from 'discord.js';\nimport { LoadedCommand } from '../app';\nimport { defer, JsonSerialize } from '../utils/utilities';\nimport { AnalyticsEvents } from '../analytics/constants';\n\nexport type MaybePromise<T> = T | Promise<T>;\n\nexport type IdentifyFunction<R> = (\n context: EvaluationContext,\n) => MaybePromise<R>;\n\nexport type DecideFunction<E, R> = (data: { entities: E }) => MaybePromise<R>;\n\nexport interface FeatureFlagDefinition<R, Entity> {\n key: string;\n description?: string;\n identify?: IdentifyFunction<Entity>;\n decide: DecideFunction<Entity, R>;\n}\n\nexport interface CommandFlagContext {\n client: Client<true>;\n commandkit: CommandKit;\n command: {\n interaction?:\n | ChatInputCommandInteraction\n | AutocompleteInteraction\n | ContextMenuCommandInteraction;\n message?: Message;\n guild: Guild | null;\n channel: TextBasedChannel | null;\n command: LoadedCommand;\n };\n event: null;\n}\n\nexport interface EventFlagContext {\n client: Client<true>;\n commandkit: CommandKit;\n event: {\n data: ParsedEvent;\n event: string;\n namespace: string | null;\n arguments: any[];\n argumentsAs<E extends keyof ClientEvents>(event: E): ClientEvents[E];\n };\n command: null;\n}\n\nexport type EvaluationContext = CommandFlagContext | EventFlagContext;\n\nexport type CustomEvaluationFunction<E> = () => MaybePromise<E>;\n\nexport type CustomEvaluationContext<E> = {\n identify: E | CustomEvaluationFunction<E>;\n};\n\nexport interface FlagRunner<E, R> {\n (): Promise<R>;\n run(context: CustomEvaluationContext<E>): Promise<R>;\n}\n\nexport class FeatureFlag<R, T> {\n private commandkit: CommandKit;\n public constructor(public readonly options: FeatureFlagDefinition<R, T>) {\n this.commandkit = getCommandKit(true);\n const FlagStore = this.commandkit.flags;\n\n if (FlagStore.has(options.key)) {\n throw new Error(`Feature flag with key \"${options.key}\" already exists.`);\n }\n\n FlagStore.set(options.key, this);\n }\n\n private getContext(): EvaluationContext {\n const env = getContext();\n\n if (env?.context) {\n const {\n client,\n commandkit,\n interaction,\n message,\n guild,\n channel,\n command,\n } = env.context;\n\n return {\n client: client as Client<true>,\n commandkit,\n command: {\n interaction,\n message,\n guild,\n channel,\n command,\n },\n event: null,\n };\n }\n\n const eventCtx = eventWorkerContext.getStore();\n\n if (eventCtx) {\n const { commandkit, data, event, namespace } = eventCtx;\n\n return {\n client: commandkit.client as Client<true>,\n commandkit,\n event: {\n data,\n event,\n namespace,\n arguments: eventCtx.arguments,\n argumentsAs: (eventName) => {\n const args = eventCtx.arguments as ClientEvents[typeof eventName];\n return args;\n },\n },\n command: null,\n };\n }\n\n throw new Error(\n 'Could not determine the execution context. Feature flags may only be used inside a command or event.',\n );\n }\n\n public async execute(res?: T): Promise<R> {\n const { decide, identify } = this.options;\n\n const identificationStart = performance.now();\n const entities =\n res ??\n (await (async () => {\n const ctx = this.getContext();\n return (await identify?.(ctx)) ?? ({} as T);\n })());\n const identificationTime = performance.now() - identificationStart;\n\n const decisionStart = performance.now();\n const decisionResult = await decide({\n entities,\n });\n const decisionTime = performance.now() - decisionStart;\n\n defer(async () => {\n await this.commandkit.analytics.track({\n name: AnalyticsEvents.FEATURE_FLAG_METRICS,\n data: {\n flag: this.options.key,\n identificationTime: identificationTime.toFixed(2),\n decisionTime: decisionTime.toFixed(2),\n },\n });\n });\n\n defer(async () => {\n await this.commandkit.analytics.track({\n name: AnalyticsEvents.FEATURE_FLAG_DECISION,\n id:\n entities &&\n typeof entities === 'object' &&\n 'id' in entities &&\n typeof entities.id === 'string'\n ? entities.id\n : undefined,\n data: {\n flag: this.options.key,\n decision: JsonSerialize(decisionResult, 'unknown'),\n },\n });\n });\n\n return decisionResult as R;\n }\n}\n\nexport function flag<Returns = boolean, Entity = Record<any, any>>(\n options: FeatureFlagDefinition<Returns, Entity>,\n): FlagRunner<Entity, Returns> {\n const flag = new FeatureFlag<Returns, Entity>(options);\n const runner = flag.execute.bind(flag, undefined) as FlagRunner<\n Entity,\n Returns\n >;\n\n runner.run = async function (ctx) {\n if (!ctx?.identify) {\n throw new Error(\n 'Custom evaluation context must have an identify function or object.',\n );\n }\n\n const context = (\n typeof ctx === 'function'\n ? await (ctx as CustomEvaluationFunction<Entity>)()\n : ctx\n ) as Entity;\n\n const decisionResult = await flag.execute(context);\n\n return decisionResult;\n };\n\n return runner;\n}\n"],"mappings":";;;;;AA2EA,IAAa,cAAb,MAA+B;CAC7B,AAAQ;CACR,AAAO,YAA4B,SAAsC;EAAtC;AACjC,OAAK,aAAa,iCAAc,KAAK;EACrC,MAAM,YAAY,KAAK,WAAW;AAElC,MAAI,UAAU,IAAI,QAAQ,IAAI,CAC5B,OAAM,IAAI,OAAO,yBAAyB,QAAQ,IAAI;AAGxD,YAAU,IAAI,QAAQ,KAAK,KAAK;CAClC;CAEA,AAAQ,aAAgC;EACtC,MAAM,MAAM,+BAAY;AAExB,gDAAI,IAAK,SAAS;GAChB,MAAM,EACJ,QACA,YACA,aACA,SACA,OACA,SACA,SACD,GAAG,IAAI;AAER,UAAO;IACG;IACR;IACA,SAAS;KACP;KACA;KACA;KACA;KACA;IACD;IACD,OAAO;GACR;EACH;EAEA,MAAM,WAAW,8CAAmB,UAAU;AAE9C,MAAI,UAAU;GACZ,MAAM,EAAE,YAAY,MAAM,OAAO,WAAW,GAAG;AAE/C,UAAO;IACL,QAAQ,WAAW;IACnB;IACA,OAAO;KACL;KACA;KACA;KACA,WAAW,SAAS;KACpB,aAAa,CAAC,cAAc;MAC1B,MAAM,OAAO,SAAS;AACtB,aAAO;KACR;IACF;IACD,SAAS;GACV;EACH;AAEA,QAAM,IAAI,MACR;CAEJ;CAEA,MAAa,QAAQ,KAAqB;EACxC,MAAM,EAAE,QAAQ,UAAU,GAAG,KAAK;EAElC,MAAM,sBAAsB,YAAY,KAAK;EAC7C,MAAM,WACN,OACA,MAAM,CAAC,YAAY;GACjB,MAAM,MAAM,KAAK,YAAY;AAC7B,UAAQ,2DAAM,SAAW,IAAI,KAAK,CAAE;EACrC,IAAG;EACJ,MAAM,qBAAqB,YAAY,KAAK,GAAG;EAE/C,MAAM,gBAAgB,YAAY,KAAK;EACvC,MAAM,iBAAiB,MAAM,OAAO,EAClC,SACD,EAAC;EACF,MAAM,eAAe,YAAY,KAAK,GAAG;AAEzC,2BAAM,YAAY;AAChB,SAAM,KAAK,WAAW,UAAU,MAAM;IACpC,MAAM,kCAAgB;IACtB,MAAM;KACJ,MAAM,KAAK,QAAQ;KACnB,oBAAoB,mBAAmB,QAAQ,EAAE;KACjD,cAAc,aAAa,QAAQ,EAAE;IACtC;GACF,EAAC;EACH,EAAC;AAEF,2BAAM,YAAY;AAChB,SAAM,KAAK,WAAW,UAAU,MAAM;IACpC,MAAM,kCAAgB;IACtB,IACA,mBACO,aAAa,YACpB,QAAQ,mBACD,SAAS,OAAO,WACvB,SAAS;IAET,MAAM;KACJ,MAAM,KAAK,QAAQ;KACnB,UAAU,iCAAc,gBAAgB,UAAU;IACnD;GACF,EAAC;EACH,EAAC;AAEF,SAAO;CACT;AACF;AAEA,SAAgB,KAChB,SAC8B;CAC5B,MAAM,SAAO,IAAI,YAA6B;CAC9C,MAAM,SAAS,OAAK,QAAQ,KAAK,eAAgB;AAKjD,QAAO,MAAM,eAAgB,KAAK;AAChC,kDAAK,IAAK,UACR,OAAM,IAAI,MACR;EAIJ,MAAM,iBACC,QAAQ,aACf,MAAM,AAAC,KAA0C,GACjD;EAGA,MAAM,iBAAiB,MAAM,OAAK,QAAQ,QAAQ;AAElD,SAAO;CACR;AAED,QAAO;AACT"}
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- require('../CommandKit-D8HJegdh.js');
4
+ require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -34,7 +34,7 @@ require('../router-Dn35v30f.js');
34
34
  require('../common-CW8v7gAn.js');
35
35
  require('../CommandKitEventsChannel-B6LKgxmv.js');
36
36
  require('../store-Ci6ib2C9.js');
37
- const require_feature_flags = require('../feature-flags-DBD8a_eD.js');
37
+ const require_feature_flags = require('../feature-flags-DJi3gEFN.js');
38
38
 
39
39
  exports.FeatureFlag = require_feature_flags.FeatureFlag;
40
40
  exports.flag = require_feature_flags.flag;
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
2
2
  require('./colors-Cd4Oz-r-.js');
3
3
  const require_ActionRow = require('./ActionRow-CmTHbo2t.js');
4
4
  require('./error-codes-C_UO39jz.js');
5
- const require_CommandKit = require('./CommandKit-D8HJegdh.js');
5
+ const require_CommandKit = require('./CommandKit-CnLBu_7m.js');
6
6
  require('./common-CcfjYnPG.js');
7
7
  require('./common-CeO-vn8Y.js');
8
8
  const require_container = require('./container-CpuiLsZM.js');
@@ -38,9 +38,9 @@ require('./store-Ci6ib2C9.js');
38
38
  const require_helpers = require('./helpers-CswC9gKF.js');
39
39
  require('./app-CXCbKsPz.js');
40
40
  require('./ILogger-DucYb0bG.js');
41
- const require_version = require('./version-C9ijCrHf.js');
42
- const require_feature_flags = require('./feature-flags-DBD8a_eD.js');
43
- const require_init = require('./init-B2LsvQoh.js');
41
+ const require_version = require('./version-ljw239LW.js');
42
+ const require_feature_flags = require('./feature-flags-DJi3gEFN.js');
43
+ const require_init = require('./init-BDgyvx9E.js');
44
44
 
45
45
  //#region src/index.ts
46
46
  var src_default = require_CommandKit.CommandKit;
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require('./chunk-nOFOJqeH.js');
2
- const require_CommandKit = require('./CommandKit-D8HJegdh.js');
2
+ const require_CommandKit = require('./CommandKit-CnLBu_7m.js');
3
3
  const require_CompilerPlugin = require('./CompilerPlugin-DrnhOC1c.js');
4
4
  const require_CompilerPluginRuntime = require('./CompilerPluginRuntime-C9wmPMQf.js');
5
5
  const require_types_package = require('./types-package-CTSNSM93.js');
@@ -89,4 +89,4 @@ Object.defineProperty(exports, 'bootstrapCommandkitCLI', {
89
89
  return bootstrapCommandkitCLI;
90
90
  }
91
91
  });
92
- //# sourceMappingURL=init-B2LsvQoh.js.map
92
+ //# sourceMappingURL=init-BDgyvx9E.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init-B2LsvQoh.js","names":[],"sources":["../src/cli/init.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { generateTypesPackage } from '../utils/types-package';\nimport { loadConfigFile } from '../config/loader';\nimport {\n CompilerPlugin,\n CompilerPluginRuntime,\n isCompilerPlugin,\n} from '../plugins';\nimport { panic } from './common';\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(\n argv: string[],\n options?: import('commander').ParseOptions | undefined,\n) {\n process.title = 'CommandKit CLI';\n\n // imports are lazily loaded when the cli is used, instead of loading it with the lib itself\n const { Command } = await import('commander');\n const { bootstrapDevelopmentServer } = await import('./development');\n const { bootstrapProductionServer, createProductionBuild } = await import(\n './production'\n );\n const { generateCommand, generateEvent } = await import('./generators');\n const { version } = await import('../version');\n const { showInformation } = await import('./information');\n const { setCLIEnv } = await import('./env');\n\n const program = new Command('commandkit');\n\n program\n .command('dev')\n .version(version)\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.config);\n });\n\n program\n .command('info')\n .description(\n 'Show information about the system which can be used to report bugs.',\n )\n .action(async () => {\n await showInformation();\n });\n\n program\n .command('start')\n .description(\n 'Start your bot in production mode after running the build command.',\n )\n .option('-c, --config [path]', 'Path to your commandkit config file.')\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('-c, --config [path]', 'Path to your commandkit config file.')\n .action(() => {\n setCLIEnv();\n const options = program.opts();\n return createProductionBuild(options.config);\n });\n\n program\n .command('create')\n .description(\n 'Create new files using built-in templates or custom plugin templates',\n )\n .argument(\n '<template>',\n 'The template to use (e.g. command, event, or custom plugin template)',\n )\n .argument('[args...]', 'Additional arguments for the template')\n .action(async (template, args) => {\n setCLIEnv();\n\n // Handle custom plugin templates\n const { plugins } = await loadConfigFile();\n const runtime = new CompilerPluginRuntime(\n plugins.filter((p) => isCompilerPlugin(p)) as CompilerPlugin[],\n );\n\n try {\n await runtime.init();\n const templateHandler = runtime.getTemplate(template);\n\n if (!templateHandler) {\n // Handle built-in templates\n if (template === 'command') {\n const [name] = args;\n if (!name) {\n panic('Command name is required');\n }\n await generateCommand(name);\n return;\n }\n\n if (template === 'event') {\n const [name] = args;\n if (!name) {\n panic('Event name is required');\n }\n await generateEvent(name);\n return;\n }\n\n const valid = Array.from(\n new Set([\n 'command',\n 'event',\n ...Array.from(runtime.getTemplates().keys()),\n ]),\n ).map((t) => `\"${t}\"`);\n\n panic(\n `Template \"${template}\" not found. Available templates: ${valid.join(', ')}`,\n );\n }\n\n await templateHandler(args);\n } catch (e: any) {\n panic(`Failed to execute template \"${template}\": ${e?.message || e}`);\n } finally {\n await runtime.destroy();\n }\n });\n\n const types = join(process.cwd(), 'node_modules', 'commandkit-types');\n\n if (!existsSync(types)) {\n await mkdir(types, { recursive: true }).catch(() => {});\n await generateTypesPackage(true).catch(() => {});\n }\n\n await program.parseAsync(argv, options);\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAiBA,eAAsB,uBACtB,MACA,SACA;AACE,SAAQ,QAAQ;CAGhB,MAAM,EAAE,SAAS,GAAG,MAAM,OAAO;CACjC,MAAM,EAAE,4BAA4B,GAAG,2CAAM;CAC7C,MAAM,EAAE,2BAA2B,uBAAuB,GAAG,2CAAM;CAGnE,MAAM,EAAE,iBAAiB,eAAe,GAAG,2CAAM;CACjD,MAAM,EAAE,SAAS,GAAG,2CAAM;CAC1B,MAAM,EAAE,iBAAiB,GAAG,2CAAM;CAClC,MAAM,EAAE,WAAW,GAAG,2CAAM;CAE5B,MAAM,UAAU,IAAI,QAAQ;AAE5B,SACA,QAAQ,MAAM,CACd,QAAQ,QAAQ,CAChB,YAAY,sCAAsC,CAClD,OACE,uBACA,wCACA,kBACD,CACD,OAAO,MAAM;EACX,MAAM,YAAU,QAAQ,MAAM;AAC9B,6BAA2B,UAAQ,OAAO;CAC3C,EAAC;AAEF,SACA,QAAQ,OAAO,CACf,YACE,sEACD,CACD,OAAO,YAAY;AACjB,QAAM,iBAAiB;CACxB,EAAC;AAEF,SACA,QAAQ,QAAQ,CAChB,YACE,qEACD,CACD,OAAO,uBAAuB,uCAAuC,CACrE,OAAO,MAAM;EACX,MAAM,YAAU,QAAQ,MAAM;AAC9B,4BAA0B,UAAQ,OAAO;CAC1C,EAAC;AAEF,SACA,QAAQ,QAAQ,CAChB,YAAY,2CAA2C,CACvD,OAAO,uBAAuB,uCAAuC,CACrE,OAAO,MAAM;AACX,aAAW;EACX,MAAM,YAAU,QAAQ,MAAM;AAC9B,SAAO,sBAAsB,UAAQ,OAAO;CAC7C,EAAC;AAEF,SACA,QAAQ,SAAS,CACjB,YACE,uEACD,CACD,SACE,cACA,uEACD,CACD,SAAS,aAAa,wCAAwC,CAC9D,OAAO,OAAO,UAAU,SAAS;AAC/B,aAAW;EAGX,MAAM,EAAE,SAAS,GAAG,MAAM,mCAAgB;EAC1C,MAAM,UAAU,IAAI,oDAClB,QAAQ,OAAO,CAAC,MAAM,wCAAiB,EAAE,CAAC;AAG5C,MAAI;AACF,SAAM,QAAQ,MAAM;GACpB,MAAM,kBAAkB,QAAQ,YAAY,SAAS;AAErD,QAAK,iBAAiB;AAEpB,QAAI,aAAa,WAAW;KAC1B,MAAM,CAAC,KAAK,GAAG;AACf,UAAK,KACH,sBAAM,2BAA2B;AAEnC,WAAM,gBAAgB,KAAK;AAC3B;IACD;AAED,QAAI,aAAa,SAAS;KACxB,MAAM,CAAC,KAAK,GAAG;AACf,UAAK,KACH,sBAAM,yBAAyB;AAEjC,WAAM,cAAc,KAAK;AACzB;IACD;IAED,MAAM,QAAQ,MAAM,KAClB,IAAI,IAAI;KACR;KACA;KACA,GAAG,MAAM,KAAK,QAAQ,cAAc,CAAC,MAAM,CAAC;IAAC,GAE9C,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG;AAEtB,0BACG,YAAY,SAAS,oCAAoC,MAAM,KAAK,KAAK,CAAC,EAC5E;GACF;AAED,SAAM,gBAAgB,KAAK;EAC5B,SAAQ,GAAQ;AACf,yBAAO,8BAA8B,SAAS,4CAAK,EAAG,YAAW,EAAE,EAAE;EACtE,UAAS;AACR,SAAM,QAAQ,SAAS;EACxB;CACF,EAAC;CAEF,MAAM,QAAQ,oBAAK,QAAQ,KAAK,EAAE,gBAAgB,mBAAmB;AAErE,MAAK,wBAAW,MAAM,EAAE;AACtB,QAAM,4BAAM,OAAO,EAAE,WAAW,KAAM,EAAC,CAAC,MAAM,MAAM,CAAE,EAAC;AACvD,QAAM,2CAAqB,KAAK,CAAC,MAAM,MAAM,CAAE,EAAC;CAClD;AAEA,OAAM,QAAQ,WAAW,MAAM,QAAQ;AACzC"}
1
+ {"version":3,"file":"init-BDgyvx9E.js","names":[],"sources":["../src/cli/init.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { generateTypesPackage } from '../utils/types-package';\nimport { loadConfigFile } from '../config/loader';\nimport {\n CompilerPlugin,\n CompilerPluginRuntime,\n isCompilerPlugin,\n} from '../plugins';\nimport { panic } from './common';\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(\n argv: string[],\n options?: import('commander').ParseOptions | undefined,\n) {\n process.title = 'CommandKit CLI';\n\n // imports are lazily loaded when the cli is used, instead of loading it with the lib itself\n const { Command } = await import('commander');\n const { bootstrapDevelopmentServer } = await import('./development');\n const { bootstrapProductionServer, createProductionBuild } = await import(\n './production'\n );\n const { generateCommand, generateEvent } = await import('./generators');\n const { version } = await import('../version');\n const { showInformation } = await import('./information');\n const { setCLIEnv } = await import('./env');\n\n const program = new Command('commandkit');\n\n program\n .command('dev')\n .version(version)\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.config);\n });\n\n program\n .command('info')\n .description(\n 'Show information about the system which can be used to report bugs.',\n )\n .action(async () => {\n await showInformation();\n });\n\n program\n .command('start')\n .description(\n 'Start your bot in production mode after running the build command.',\n )\n .option('-c, --config [path]', 'Path to your commandkit config file.')\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('-c, --config [path]', 'Path to your commandkit config file.')\n .action(() => {\n setCLIEnv();\n const options = program.opts();\n return createProductionBuild(options.config);\n });\n\n program\n .command('create')\n .description(\n 'Create new files using built-in templates or custom plugin templates',\n )\n .argument(\n '<template>',\n 'The template to use (e.g. command, event, or custom plugin template)',\n )\n .argument('[args...]', 'Additional arguments for the template')\n .action(async (template, args) => {\n setCLIEnv();\n\n // Handle custom plugin templates\n const { plugins } = await loadConfigFile();\n const runtime = new CompilerPluginRuntime(\n plugins.filter((p) => isCompilerPlugin(p)) as CompilerPlugin[],\n );\n\n try {\n await runtime.init();\n const templateHandler = runtime.getTemplate(template);\n\n if (!templateHandler) {\n // Handle built-in templates\n if (template === 'command') {\n const [name] = args;\n if (!name) {\n panic('Command name is required');\n }\n await generateCommand(name);\n return;\n }\n\n if (template === 'event') {\n const [name] = args;\n if (!name) {\n panic('Event name is required');\n }\n await generateEvent(name);\n return;\n }\n\n const valid = Array.from(\n new Set([\n 'command',\n 'event',\n ...Array.from(runtime.getTemplates().keys()),\n ]),\n ).map((t) => `\"${t}\"`);\n\n panic(\n `Template \"${template}\" not found. Available templates: ${valid.join(', ')}`,\n );\n }\n\n await templateHandler(args);\n } catch (e: any) {\n panic(`Failed to execute template \"${template}\": ${e?.message || e}`);\n } finally {\n await runtime.destroy();\n }\n });\n\n const types = join(process.cwd(), 'node_modules', 'commandkit-types');\n\n if (!existsSync(types)) {\n await mkdir(types, { recursive: true }).catch(() => {});\n await generateTypesPackage(true).catch(() => {});\n }\n\n await program.parseAsync(argv, options);\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAiBA,eAAsB,uBACtB,MACA,SACA;AACE,SAAQ,QAAQ;CAGhB,MAAM,EAAE,SAAS,GAAG,MAAM,OAAO;CACjC,MAAM,EAAE,4BAA4B,GAAG,2CAAM;CAC7C,MAAM,EAAE,2BAA2B,uBAAuB,GAAG,2CAAM;CAGnE,MAAM,EAAE,iBAAiB,eAAe,GAAG,2CAAM;CACjD,MAAM,EAAE,SAAS,GAAG,2CAAM;CAC1B,MAAM,EAAE,iBAAiB,GAAG,2CAAM;CAClC,MAAM,EAAE,WAAW,GAAG,2CAAM;CAE5B,MAAM,UAAU,IAAI,QAAQ;AAE5B,SACA,QAAQ,MAAM,CACd,QAAQ,QAAQ,CAChB,YAAY,sCAAsC,CAClD,OACE,uBACA,wCACA,kBACD,CACD,OAAO,MAAM;EACX,MAAM,YAAU,QAAQ,MAAM;AAC9B,6BAA2B,UAAQ,OAAO;CAC3C,EAAC;AAEF,SACA,QAAQ,OAAO,CACf,YACE,sEACD,CACD,OAAO,YAAY;AACjB,QAAM,iBAAiB;CACxB,EAAC;AAEF,SACA,QAAQ,QAAQ,CAChB,YACE,qEACD,CACD,OAAO,uBAAuB,uCAAuC,CACrE,OAAO,MAAM;EACX,MAAM,YAAU,QAAQ,MAAM;AAC9B,4BAA0B,UAAQ,OAAO;CAC1C,EAAC;AAEF,SACA,QAAQ,QAAQ,CAChB,YAAY,2CAA2C,CACvD,OAAO,uBAAuB,uCAAuC,CACrE,OAAO,MAAM;AACX,aAAW;EACX,MAAM,YAAU,QAAQ,MAAM;AAC9B,SAAO,sBAAsB,UAAQ,OAAO;CAC7C,EAAC;AAEF,SACA,QAAQ,SAAS,CACjB,YACE,uEACD,CACD,SACE,cACA,uEACD,CACD,SAAS,aAAa,wCAAwC,CAC9D,OAAO,OAAO,UAAU,SAAS;AAC/B,aAAW;EAGX,MAAM,EAAE,SAAS,GAAG,MAAM,mCAAgB;EAC1C,MAAM,UAAU,IAAI,oDAClB,QAAQ,OAAO,CAAC,MAAM,wCAAiB,EAAE,CAAC;AAG5C,MAAI;AACF,SAAM,QAAQ,MAAM;GACpB,MAAM,kBAAkB,QAAQ,YAAY,SAAS;AAErD,QAAK,iBAAiB;AAEpB,QAAI,aAAa,WAAW;KAC1B,MAAM,CAAC,KAAK,GAAG;AACf,UAAK,KACH,sBAAM,2BAA2B;AAEnC,WAAM,gBAAgB,KAAK;AAC3B;IACD;AAED,QAAI,aAAa,SAAS;KACxB,MAAM,CAAC,KAAK,GAAG;AACf,UAAK,KACH,sBAAM,yBAAyB;AAEjC,WAAM,cAAc,KAAK;AACzB;IACD;IAED,MAAM,QAAQ,MAAM,KAClB,IAAI,IAAI;KACR;KACA;KACA,GAAG,MAAM,KAAK,QAAQ,cAAc,CAAC,MAAM,CAAC;IAAC,GAE9C,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG;AAEtB,0BACG,YAAY,SAAS,oCAAoC,MAAM,KAAK,KAAK,CAAC,EAC5E;GACF;AAED,SAAM,gBAAgB,KAAK;EAC5B,SAAQ,GAAQ;AACf,yBAAO,8BAA8B,SAAS,4CAAK,EAAG,YAAW,EAAE,EAAE;EACtE,UAAS;AACR,SAAM,QAAQ,SAAS;EACxB;CACF,EAAC;CAEF,MAAM,QAAQ,oBAAK,QAAQ,KAAK,EAAE,gBAAgB,mBAAmB;AAErE,MAAK,wBAAW,MAAM,EAAE;AACtB,QAAM,4BAAM,OAAO,EAAE,WAAW,KAAM,EAAC,CAAC,MAAM,MAAM,CAAE,EAAC;AACvD,QAAM,2CAAqB,KAAK,CAAC,MAAM,MAAM,CAAE,EAAC;CAClD;AAEA,OAAM,QAAQ,WAAW,MAAM,QAAQ;AACzC"}
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../colors-Cd4Oz-r-.js');
2
2
  require('../ActionRow-CmTHbo2t.js');
3
3
  require('../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../CommandKit-CnLBu_7m.js');
5
5
  require('../common-CcfjYnPG.js');
6
6
  require('../common-CeO-vn8Y.js');
7
7
  require('../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../colors-Cd4Oz-r-.js');
2
2
  require('../../ActionRow-CmTHbo2t.js');
3
3
  require('../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../CommandKit-CnLBu_7m.js');
5
5
  require('../../common-CcfjYnPG.js');
6
6
  require('../../common-CeO-vn8Y.js');
7
7
  require('../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');
@@ -1,7 +1,7 @@
1
1
  require('../../../colors-Cd4Oz-r-.js');
2
2
  require('../../../ActionRow-CmTHbo2t.js');
3
3
  require('../../../error-codes-C_UO39jz.js');
4
- const require_CommandKit = require('../../../CommandKit-D8HJegdh.js');
4
+ const require_CommandKit = require('../../../CommandKit-CnLBu_7m.js');
5
5
  require('../../../common-CcfjYnPG.js');
6
6
  require('../../../common-CeO-vn8Y.js');
7
7
  require('../../../container-CpuiLsZM.js');