reciple 10.0.1-dev.8 → 10.0.1

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 (75) hide show
  1. package/README.md +69 -0
  2. package/assets/config/reciple.config.js +7 -0
  3. package/assets/config/reciple.config.ts +5 -0
  4. package/assets/global/nodemon.json +1 -0
  5. package/assets/templates/javascript/jsconfig.json +4 -0
  6. package/assets/templates/typescript/tsconfig.json +4 -0
  7. package/dist/_virtual/{_@oxc-project_runtime@0.99.0 → _@oxc-project_runtime@0.108.0}/helpers/decorate.mjs +1 -1
  8. package/dist/bin/commands/build.mjs +1 -1
  9. package/dist/bin/commands/build.mjs.map +1 -1
  10. package/dist/bin/commands/create.mjs +3 -2
  11. package/dist/bin/commands/create.mjs.map +1 -1
  12. package/dist/bin/commands/createModule.mjs +2 -2
  13. package/dist/bin/commands/createModule.mjs.map +1 -1
  14. package/dist/bin/commands/start.mjs +10 -9
  15. package/dist/bin/commands/start.mjs.map +1 -1
  16. package/dist/bin/commands/startSharding.d.mts +18 -0
  17. package/dist/bin/commands/startSharding.mjs +101 -0
  18. package/dist/bin/commands/startSharding.mjs.map +1 -0
  19. package/dist/bin/reciple.mjs +0 -0
  20. package/dist/classes/cli/CLI.d.mts +1 -1
  21. package/dist/classes/cli/CLI.mjs +6 -5
  22. package/dist/classes/cli/CLI.mjs.map +1 -1
  23. package/dist/classes/cli/ConfigReader.d.mts +24 -29
  24. package/dist/classes/cli/ConfigReader.mjs +45 -61
  25. package/dist/classes/cli/ConfigReader.mjs.map +1 -1
  26. package/dist/classes/cli/RuntimeEnvironment.mjs +1 -1
  27. package/dist/classes/cli/RuntimeEnvironment.mjs.map +1 -1
  28. package/dist/classes/client/EventListeners.mjs +3 -2
  29. package/dist/classes/client/EventListeners.mjs.map +1 -1
  30. package/dist/classes/client/ModuleLoader.d.mts +3 -3
  31. package/dist/classes/client/ModuleLoader.mjs +10 -8
  32. package/dist/classes/client/ModuleLoader.mjs.map +1 -1
  33. package/dist/classes/managers/ModuleManager.mjs +5 -5
  34. package/dist/classes/managers/ModuleManager.mjs.map +1 -1
  35. package/dist/classes/modules/BaseModule.d.mts +0 -3
  36. package/dist/classes/modules/BaseModule.mjs +2 -4
  37. package/dist/classes/modules/BaseModule.mjs.map +1 -1
  38. package/dist/classes/modules/PostconditionModule.d.mts +1 -1
  39. package/dist/classes/modules/PostconditionModule.mjs +5 -5
  40. package/dist/classes/modules/PostconditionModule.mjs.map +1 -1
  41. package/dist/classes/modules/PreconditionModule.d.mts +1 -1
  42. package/dist/classes/modules/PreconditionModule.mjs +5 -5
  43. package/dist/classes/modules/PreconditionModule.mjs.map +1 -1
  44. package/dist/classes/modules/commands/ContextMenuCommandModule.d.mts +1 -1
  45. package/dist/classes/modules/commands/ContextMenuCommandModule.mjs +5 -5
  46. package/dist/classes/modules/commands/ContextMenuCommandModule.mjs.map +1 -1
  47. package/dist/classes/modules/commands/MessageCommandModule.d.mts +1 -1
  48. package/dist/classes/modules/commands/MessageCommandModule.mjs +5 -5
  49. package/dist/classes/modules/commands/MessageCommandModule.mjs.map +1 -1
  50. package/dist/classes/modules/commands/SlashCommandModule.d.mts +1 -1
  51. package/dist/classes/modules/commands/SlashCommandModule.mjs +5 -5
  52. package/dist/classes/modules/commands/SlashCommandModule.mjs.map +1 -1
  53. package/dist/classes/modules/events/EventModule.d.mts +3 -4
  54. package/dist/classes/modules/events/EventModule.mjs +3 -4
  55. package/dist/classes/modules/events/EventModule.mjs.map +1 -1
  56. package/dist/classes/templates/ModuleTemplateBuilder.d.mts +1 -1
  57. package/dist/classes/templates/ModuleTemplateBuilder.mjs +3 -3
  58. package/dist/classes/templates/ModuleTemplateBuilder.mjs.map +1 -1
  59. package/dist/classes/templates/TemplateBuilder.mjs +27 -23
  60. package/dist/classes/templates/TemplateBuilder.mjs.map +1 -1
  61. package/dist/classes/validation/BaseModuleValidator.d.mts +10 -10
  62. package/dist/classes/validation/CommandModuleValidator.d.mts +17 -17
  63. package/dist/classes/validation/EventModuleValidator.d.mts +20 -4
  64. package/dist/classes/validation/PreconditionModule.d.mts +7 -7
  65. package/dist/helpers/constants.d.mts +1 -2
  66. package/dist/helpers/constants.mjs +8 -8
  67. package/dist/helpers/constants.mjs.map +1 -1
  68. package/dist/helpers/types.d.mts +3 -1
  69. package/dist/index.d.mts +4 -5
  70. package/dist/index.mjs +3 -4
  71. package/dist/index.mjs.map +1 -1
  72. package/dist/package.mjs +18 -16
  73. package/dist/package.mjs.map +1 -1
  74. package/package.json +16 -14
  75. package/LICENSE +0 -155
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleManager.mjs","names":["ModuleManager","client: Client","enabledModules: AnyModule[]","readyModules: AnyModule[]","disabledModules: AnyModule[]"],"sources":["../../../src/classes/managers/ModuleManager.ts"],"sourcesContent":["import { mix } from 'ts-mixer';\nimport { BaseModule } from '../modules/BaseModule.js';\nimport { BaseManager, RecipleError, type Client } from '@reciple/core';\nimport { EventEmitter } from 'node:events';\nimport type { AnyModule } from '../../helpers/types.js';\nimport { ModuleType } from '../../helpers/constants.js';\n\nexport interface ModuleManager extends BaseManager<string, AnyModule, BaseModule.Resolvable>, EventEmitter<ModuleManager.Events> {}\n\n@mix(BaseManager, EventEmitter)\nexport class ModuleManager {\n public readonly holds = BaseModule;\n\n constructor(public readonly client: Client) {}\n\n public async enableModules({ modules, removeFromCacheOnError }: ModuleManager.EventExecuteData & { removeFromCacheOnError?: boolean; } = { modules: Array.from(this.cache.values()) }): Promise<AnyModule[]> {\n const enabledModules: AnyModule[] = [];\n\n for (const module of modules ?? []) {\n this.emit('modulePreEnable', module);\n\n await module.onEnable({ client: this.client }).catch(e => {\n if (removeFromCacheOnError) this.cache.delete(module.id);\n this.emitOrThrow('moduleEnableError', module, e);\n });\n\n this.emit('moduleEnable', module);\n this.add(module);\n enabledModules.push(module);\n }\n\n this.emit('enabledModules', enabledModules);\n return enabledModules;\n }\n\n public async readyModules({ modules, removeFromCacheOnError }: ModuleManager.EventExecuteData & { removeFromCacheOnError?: boolean; } = { modules: Array.from(this.cache.values()) }): Promise<AnyModule[]> {\n const readyModules: AnyModule[] = [];\n\n if (!this.client.isReady()) throw new RecipleError(RecipleError.Code.ClientNotReady());\n\n for (const module of modules ?? []) {\n this.emit('modulePreReady', module);\n\n await module.onReady({ client: this.client }).catch(e => {\n if (removeFromCacheOnError !== false) this.remove(module);\n this.emitOrThrow('moduleReadyError', module, e);\n });\n\n this.emit('moduleReady', module);\n this.cache.set(module.id, module);\n readyModules.push(module);\n }\n\n this.emit('readyModules', readyModules);\n return readyModules;\n }\n\n public async disableModules({ modules, removeFromCache }: ModuleManager.EventExecuteData & { removeFromCache?: boolean; } = { modules: Array.from(this.cache.values()) }): Promise<AnyModule[]> {\n const disabledModules: AnyModule[] = [];\n\n for (const module of modules ?? []) {\n this.emit('modulePreDisable', module);\n\n await module.onDisable({ client: this.client }).catch(e => {\n if (removeFromCache !== false) this.remove(module);\n this.emitOrThrow('moduleDisableError', module, e);\n });\n\n this.emit('moduleDisable', module);\n if (removeFromCache !== false) this.remove(module);\n disabledModules.push(module);\n }\n\n this.emit('disabledModules', disabledModules);\n return disabledModules;\n }\n\n public add(module: AnyModule): void {\n this.cache.set(module.id, module);\n switch (module.moduleType) {\n case ModuleType.Command:\n this.client.commands?.add(module);\n break;\n case ModuleType.Event:\n this.client.eventListeners.register(module);\n break;\n case ModuleType.Precondition:\n this.client.preconditions?.cache.set(module.id, module);\n break;\n case ModuleType.Postcondition:\n this.client.postconditions?.cache.set(module.id, module);\n break;\n case ModuleType.Base:\n default:\n break;\n }\n }\n\n public remove(module: AnyModule): void {\n this.cache.delete(module.id);\n switch (module.moduleType) {\n case ModuleType.Command:\n this.client.commands?.cache.delete(module.id);\n break;\n case ModuleType.Event:\n this.client.eventListeners.unregister(module);\n break;\n case ModuleType.Precondition:\n this.client.preconditions?.cache.delete(module.id);\n break;\n case ModuleType.Postcondition:\n this.client.postconditions?.cache.delete(module.id);\n break;\n case ModuleType.Base:\n default:\n break;\n }\n }\n\n private emitOrThrow<K extends keyof Pick<ModuleManager.Events, 'moduleDisableError'|'moduleEnableError'|'moduleReadyError'>>(event: K, ...args: ModuleManager.Events[K]) {\n if (this.client.listenerCount(event) > 0) {\n return this.emit(event, ...(args as never));\n }\n\n throw args[1];\n }\n}\n\nexport namespace ModuleManager {\n export interface Events {\n modulePreEnable: [module: AnyModule];\n moduleEnable: [module: AnyModule];\n moduleEnableError: [module: AnyModule, error: Error];\n enabledModules: [modules: AnyModule[]];\n\n modulePreReady: [module: AnyModule];\n moduleReady: [module: AnyModule];\n moduleReadyError: [module: AnyModule, error: Error];\n readyModules: [modules: AnyModule[]];\n\n modulePreDisable: [module: AnyModule];\n moduleDisable: [module: AnyModule];\n moduleDisableError: [module: AnyModule, error: Error];\n disabledModules: [modules: AnyModule[]];\n }\n\n export interface EventExecuteData {\n modules?: AnyModule[];\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ModuleManager.mjs","names":[],"sources":["../../../src/classes/managers/ModuleManager.ts"],"sourcesContent":["import { mix } from 'ts-mixer';\nimport { BaseModule } from '../modules/BaseModule.js';\nimport { BaseManager, RecipleError, type Client } from '@reciple/core';\nimport { EventEmitter } from 'node:events';\nimport type { AnyModule } from '../../helpers/types.js';\nimport { ModuleType } from '../../helpers/constants.js';\n\nexport interface ModuleManager extends BaseManager<string, AnyModule, BaseModule.Resolvable>, EventEmitter<ModuleManager.Events> {}\n\n@mix(BaseManager, EventEmitter)\nexport class ModuleManager {\n public readonly holds = BaseModule;\n\n constructor(public readonly client: Client) {}\n\n public async enableModules({ modules, removeFromCacheOnError }: ModuleManager.EventExecuteData & { removeFromCacheOnError?: boolean; } = { modules: Array.from(this.cache.values()) }): Promise<AnyModule[]> {\n const enabledModules: AnyModule[] = [];\n\n for (const module of modules ?? []) {\n this.emit('modulePreEnable', module);\n\n await module.onEnable({ client: this.client }).catch(e => {\n if (removeFromCacheOnError) this.cache.delete(module.id);\n this.emitOrThrow('moduleEnableError', module, e);\n });\n\n this.emit('moduleEnable', module);\n this.add(module);\n enabledModules.push(module);\n }\n\n this.emit('enabledModules', enabledModules);\n return enabledModules;\n }\n\n public async readyModules({ modules, removeFromCacheOnError }: ModuleManager.EventExecuteData & { removeFromCacheOnError?: boolean; } = { modules: Array.from(this.cache.values()) }): Promise<AnyModule[]> {\n const readyModules: AnyModule[] = [];\n\n if (!this.client.isReady()) throw new RecipleError(RecipleError.Code.ClientNotReady());\n\n for (const module of modules ?? []) {\n this.emit('modulePreReady', module);\n\n await module.onReady({ client: this.client }).catch(e => {\n if (removeFromCacheOnError !== false) this.remove(module);\n this.emitOrThrow('moduleReadyError', module, e);\n });\n\n this.emit('moduleReady', module);\n this.cache.set(module.id, module);\n readyModules.push(module);\n }\n\n this.emit('readyModules', readyModules);\n return readyModules;\n }\n\n public async disableModules({ modules, removeFromCache }: ModuleManager.EventExecuteData & { removeFromCache?: boolean; } = { modules: Array.from(this.cache.values()) }): Promise<AnyModule[]> {\n const disabledModules: AnyModule[] = [];\n\n for (const module of modules ?? []) {\n this.emit('modulePreDisable', module);\n\n await module.onDisable({ client: this.client }).catch(e => {\n if (removeFromCache !== false) this.remove(module);\n this.emitOrThrow('moduleDisableError', module, e);\n });\n\n this.emit('moduleDisable', module);\n if (removeFromCache !== false) this.remove(module);\n disabledModules.push(module);\n }\n\n this.emit('disabledModules', disabledModules);\n return disabledModules;\n }\n\n public add(module: AnyModule): void {\n this.cache.set(module.id, module);\n\n if (!('moduleType' in module)) return;\n\n switch (module.moduleType) {\n case ModuleType.Command:\n this.client.commands?.add(module);\n break;\n case ModuleType.Event:\n this.client.eventListeners.register(module);\n break;\n case ModuleType.Precondition:\n this.client.preconditions?.cache.set(module.id, module);\n break;\n case ModuleType.Postcondition:\n this.client.postconditions?.cache.set(module.id, module);\n break;\n default:\n break;\n }\n }\n\n public remove(module: AnyModule): void {\n this.cache.delete(module.id);\n\n if (!('moduleType' in module)) return;\n\n switch (module.moduleType) {\n case ModuleType.Command:\n this.client.commands?.cache.delete(module.id);\n break;\n case ModuleType.Event:\n this.client.eventListeners.unregister(module);\n break;\n case ModuleType.Precondition:\n this.client.preconditions?.cache.delete(module.id);\n break;\n case ModuleType.Postcondition:\n this.client.postconditions?.cache.delete(module.id);\n break;\n default:\n break;\n }\n }\n\n private emitOrThrow<K extends keyof Pick<ModuleManager.Events, 'moduleDisableError'|'moduleEnableError'|'moduleReadyError'>>(event: K, ...args: ModuleManager.Events[K]) {\n if (this.client.listenerCount(event) > 0) {\n return this.emit(event, ...(args as never));\n }\n\n throw args[1];\n }\n}\n\nexport namespace ModuleManager {\n export interface Events {\n modulePreEnable: [module: AnyModule];\n moduleEnable: [module: AnyModule];\n moduleEnableError: [module: AnyModule, error: Error];\n enabledModules: [modules: AnyModule[]];\n\n modulePreReady: [module: AnyModule];\n moduleReady: [module: AnyModule];\n moduleReadyError: [module: AnyModule, error: Error];\n readyModules: [modules: AnyModule[]];\n\n modulePreDisable: [module: AnyModule];\n moduleDisable: [module: AnyModule];\n moduleDisableError: [module: AnyModule, error: Error];\n disabledModules: [modules: AnyModule[]];\n }\n\n export interface EventExecuteData {\n modules?: AnyModule[];\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import { ModuleType } from "../../helpers/constants.mjs";
2
1
  import { AnyModule } from "../../helpers/types.mjs";
3
2
  import { Client } from "@reciple/core";
4
3
 
@@ -6,7 +5,6 @@ import { Client } from "@reciple/core";
6
5
  declare class BaseModule implements BaseModule.Data {
7
6
  private readonly __$filepath;
8
7
  readonly id: string;
9
- readonly moduleType: ModuleType.Base;
10
8
  client: Client;
11
9
  onEnable(data: BaseModule.EventData<boolean>): Promise<void>;
12
10
  onReady(data: BaseModule.EventData<true>): Promise<void>;
@@ -20,7 +18,6 @@ declare namespace BaseModule {
20
18
  const constructor: typeof BaseModule;
21
19
  interface Data {
22
20
  id?: string;
23
- moduleType?: ModuleType.Base;
24
21
  onEnable?(data: BaseModule.EventData<false>): Promise<void>;
25
22
  onReady?(data: BaseModule.EventData<true>): Promise<void>;
26
23
  onDisable?(data: BaseModule.EventData<boolean>): Promise<void>;
@@ -1,4 +1,3 @@
1
- import { ModuleType } from "../../helpers/constants.mjs";
2
1
  import { DiscordSnowflake } from "@sapphire/snowflake";
3
2
  import { hasMixin } from "ts-mixer";
4
3
 
@@ -6,16 +5,15 @@ import { hasMixin } from "ts-mixer";
6
5
  var BaseModule = class BaseModule {
7
6
  __$filepath = "";
8
7
  id = DiscordSnowflake.generate().toString();
9
- moduleType = ModuleType.Base;
10
8
  client;
11
9
  async onEnable(data) {}
12
10
  async onReady(data) {}
13
11
  async onDisable(data) {}
14
12
  static isModule(data) {
15
- return data instanceof BaseModule || hasMixin(data, BaseModule);
13
+ return hasMixin(data, BaseModule);
16
14
  }
17
15
  static from(data) {
18
- if (data instanceof BaseModule || hasMixin(data, BaseModule)) return data;
16
+ if (hasMixin(data, BaseModule)) return data;
19
17
  const ModuleInstance = class extends BaseModule {};
20
18
  Object.assign(ModuleInstance.prototype, data);
21
19
  return new ModuleInstance();
@@ -1 +1 @@
1
- {"version":3,"file":"BaseModule.mjs","names":[],"sources":["../../../src/classes/modules/BaseModule.ts"],"sourcesContent":["import type { Client } from '@reciple/core';\nimport { DiscordSnowflake } from '@sapphire/snowflake';\nimport { ModuleType } from '../../helpers/constants.js';\nimport { hasMixin } from 'ts-mixer';\nimport type { AnyModule } from '../../helpers/types.js';\n\nexport class BaseModule implements BaseModule.Data {\n private readonly __$filepath: string = '';\n\n public readonly id: string = DiscordSnowflake.generate().toString();\n public readonly moduleType: ModuleType.Base = ModuleType.Base;\n\n public client!: Client;\n\n public async onEnable(data: BaseModule.EventData<boolean>): Promise<void> {}\n\n public async onReady(data: BaseModule.EventData<true>): Promise<void> {}\n\n public async onDisable(data: BaseModule.EventData<boolean>): Promise<void> {}\n\n public static isModule(data: unknown): data is AnyModule {\n return data instanceof BaseModule || hasMixin(data, BaseModule);\n }\n\n public static from(data: BaseModule.Resolvable): BaseModule {\n if (data instanceof BaseModule || hasMixin(data, BaseModule)) return data;\n\n const ModuleInstance = class extends BaseModule {};\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n\n public static getFilepath(module: AnyModule): string {\n return (module as BaseModule).__$filepath || '';\n }\n}\n\nexport namespace BaseModule {\n export type Resolvable = BaseModule|Data;\n\n export const constructor = BaseModule;\n\n export interface Data {\n id?: string;\n moduleType?: ModuleType.Base;\n onEnable?(data: BaseModule.EventData<false>): Promise<void>;\n onReady?(data: BaseModule.EventData<true>): Promise<void>;\n onDisable?(data: BaseModule.EventData<boolean>): Promise<void>;\n }\n\n export interface EventData<Ready extends boolean = boolean> {\n client: Client<Ready>;\n }\n}\n"],"mappings":";;;;;AAMA,IAAa,aAAb,MAAa,WAAsC;CAC/C,AAAiB,cAAsB;CAEvC,AAAgB,KAAa,iBAAiB,UAAU,CAAC,UAAU;CACnE,AAAgB,aAA8B,WAAW;CAEzD,AAAO;CAEP,MAAa,SAAS,MAAoD;CAE1E,MAAa,QAAQ,MAAiD;CAEtE,MAAa,UAAU,MAAoD;CAE3E,OAAc,SAAS,MAAkC;AACrD,SAAO,gBAAgB,cAAc,SAAS,MAAM,WAAW;;CAGnE,OAAc,KAAK,MAAyC;AACxD,MAAI,gBAAgB,cAAc,SAAS,MAAM,WAAW,CAAE,QAAO;EAErE,MAAM,iBAAiB,cAAc,WAAW;AAChD,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;CAG/B,OAAc,YAAY,QAA2B;AACjD,SAAQ,OAAsB,eAAe;;;;2BAOtB"}
1
+ {"version":3,"file":"BaseModule.mjs","names":[],"sources":["../../../src/classes/modules/BaseModule.ts"],"sourcesContent":["import type { Client } from '@reciple/core';\nimport { DiscordSnowflake } from '@sapphire/snowflake';\nimport { hasMixin } from 'ts-mixer';\nimport type { AnyModule } from '../../helpers/types.js';\n\nexport class BaseModule implements BaseModule.Data {\n private readonly __$filepath: string = '';\n\n public readonly id: string = DiscordSnowflake.generate().toString();\n\n public client!: Client;\n\n public async onEnable(data: BaseModule.EventData<boolean>): Promise<void> {}\n\n public async onReady(data: BaseModule.EventData<true>): Promise<void> {}\n\n public async onDisable(data: BaseModule.EventData<boolean>): Promise<void> {}\n\n public static isModule(data: unknown): data is AnyModule {\n return hasMixin(data, BaseModule);\n }\n\n public static from(data: BaseModule.Resolvable): BaseModule {\n if (hasMixin(data, BaseModule)) return data;\n\n const ModuleInstance = class extends BaseModule {};\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n\n public static getFilepath(module: AnyModule): string {\n return (module as BaseModule).__$filepath || '';\n }\n}\n\nexport namespace BaseModule {\n export type Resolvable = BaseModule|Data;\n\n export const constructor = BaseModule;\n\n export interface Data {\n id?: string;\n onEnable?(data: BaseModule.EventData<false>): Promise<void>;\n onReady?(data: BaseModule.EventData<true>): Promise<void>;\n onDisable?(data: BaseModule.EventData<boolean>): Promise<void>;\n }\n\n export interface EventData<Ready extends boolean = boolean> {\n client: Client<Ready>;\n }\n}\n"],"mappings":";;;;AAKA,IAAa,aAAb,MAAa,WAAsC;CAC/C,AAAiB,cAAsB;CAEvC,AAAgB,KAAa,iBAAiB,UAAU,CAAC,UAAU;CAEnE,AAAO;CAEP,MAAa,SAAS,MAAoD;CAE1E,MAAa,QAAQ,MAAiD;CAEtE,MAAa,UAAU,MAAoD;CAE3E,OAAc,SAAS,MAAkC;AACrD,SAAO,SAAS,MAAM,WAAW;;CAGrC,OAAc,KAAK,MAAyC;AACxD,MAAI,SAAS,MAAM,WAAW,CAAE,QAAO;EAEvC,MAAM,iBAAiB,cAAc,WAAW;AAChD,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;CAG/B,OAAc,YAAY,QAA2B;AACjD,SAAQ,OAAsB,eAAe;;;;2BAOtB"}
@@ -1,5 +1,5 @@
1
- import { ModuleType } from "../../helpers/constants.mjs";
2
1
  import { BaseModule } from "./BaseModule.mjs";
2
+ import { ModuleType } from "../../helpers/constants.mjs";
3
3
  import { CommandPostcondition, CommandPrecondition, CommandType } from "@reciple/core";
4
4
 
5
5
  //#region src/classes/modules/PostconditionModule.d.ts
@@ -1,15 +1,15 @@
1
- import { ModuleType } from "../../helpers/constants.mjs";
2
1
  import { BaseModule } from "./BaseModule.mjs";
3
- import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs";
2
+ import { ModuleType } from "../../helpers/constants.mjs";
3
+ import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs";
4
4
  import { CommandPostcondition } from "@reciple/core";
5
5
  import { hasMixin, mix } from "ts-mixer";
6
6
 
7
7
  //#region src/classes/modules/PostconditionModule.ts
8
8
  var _PostconditionModule;
9
- let PostconditionModule = _PostconditionModule = class PostconditionModule$1 {
9
+ let PostconditionModule = _PostconditionModule = class PostconditionModule {
10
10
  moduleType = ModuleType.Postcondition;
11
11
  static from(data) {
12
- if (data instanceof _PostconditionModule || hasMixin(data, _PostconditionModule)) return data;
12
+ if (hasMixin(data, _PostconditionModule)) return data;
13
13
  const ModuleInstance = class extends _PostconditionModule {
14
14
  execute = data.execute;
15
15
  };
@@ -17,7 +17,7 @@ let PostconditionModule = _PostconditionModule = class PostconditionModule$1 {
17
17
  return new ModuleInstance();
18
18
  }
19
19
  };
20
- PostconditionModule = _PostconditionModule = __decorate([mix(BaseModule, CommandPostcondition)], PostconditionModule);
20
+ PostconditionModule = _PostconditionModule = __decorate([mix(CommandPostcondition, BaseModule)], PostconditionModule);
21
21
 
22
22
  //#endregion
23
23
  export { PostconditionModule };
@@ -1 +1 @@
1
- {"version":3,"file":"PostconditionModule.mjs","names":["PostconditionModule"],"sources":["../../../src/classes/modules/PostconditionModule.ts"],"sourcesContent":["import { CommandPostcondition, type CommandPrecondition, type CommandType } from '@reciple/core';\nimport { BaseModule } from './BaseModule.js';\nimport { hasMixin, mix } from 'ts-mixer';\nimport { ModuleType } from '../../helpers/constants.js';\n\nexport interface PostconditionModule<D = any> extends Omit<BaseModule, 'moduleType'>, CommandPostcondition<D> {}\n\n@mix(BaseModule, CommandPostcondition)\nexport abstract class PostconditionModule<D = any> implements PostconditionModule<D> {\n public moduleType: ModuleType.Postcondition = ModuleType.Postcondition;\n\n public abstract execute<T extends CommandType>(data: CommandPostcondition.ExecuteData<T>, preconditionTrigger?: CommandPrecondition.ResultData<T, any>): Promise<CommandPostcondition.ResultDataResolvable<T, D>>;\n\n public static from<D = any>(data: PostconditionModule.Resolvable<D>): PostconditionModule<D> {\n if (data instanceof PostconditionModule || hasMixin(data, PostconditionModule)) return data;\n\n const ModuleInstance = class extends PostconditionModule { execute = data.execute; };\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace PostconditionModule {\n export type Resolvable<D = any> = PostconditionModule<D>|PostconditionModule.Data<D>;\n\n export interface Data<D = any> extends Omit<BaseModule.Data, 'moduleType'>, Omit<CommandPostcondition.Data<D>, 'id'> {\n moduleType: ModuleType.Postcondition;\n }\n}\n"],"mappings":";;;;;;;;AAQO,uDAAeA,sBAA+D;CACjF,AAAO,aAAuC,WAAW;CAIzD,OAAc,KAAc,MAAiE;AACzF,MAAI,wCAAuC,SAAS,2BAA0B,CAAE,QAAO;EAEvF,MAAM,iBAAiB,mCAAkC;GAAE,UAAU,KAAK;;AAC1E,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;;yDAXlC,IAAI,YAAY,qBAAqB"}
1
+ {"version":3,"file":"PostconditionModule.mjs","names":[],"sources":["../../../src/classes/modules/PostconditionModule.ts"],"sourcesContent":["import { CommandPostcondition, type CommandPrecondition, type CommandType } from '@reciple/core';\nimport { BaseModule } from './BaseModule.js';\nimport { hasMixin, mix } from 'ts-mixer';\nimport { ModuleType } from '../../helpers/constants.js';\n\nexport interface PostconditionModule<D = any> extends Omit<BaseModule, 'moduleType'>, CommandPostcondition<D> {}\n\n@mix(CommandPostcondition, BaseModule)\nexport abstract class PostconditionModule<D = any> implements PostconditionModule<D> {\n public moduleType: ModuleType.Postcondition = ModuleType.Postcondition;\n\n public abstract execute<T extends CommandType>(data: CommandPostcondition.ExecuteData<T>, preconditionTrigger?: CommandPrecondition.ResultData<T, any>): Promise<CommandPostcondition.ResultDataResolvable<T, D>>;\n\n public static from<D = any>(data: PostconditionModule.Resolvable<D>): PostconditionModule<D> {\n if (hasMixin(data, PostconditionModule)) return data;\n\n const ModuleInstance = class extends PostconditionModule { execute = data.execute; };\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace PostconditionModule {\n export type Resolvable<D = any> = PostconditionModule<D>|PostconditionModule.Data<D>;\n\n export interface Data<D = any> extends Omit<BaseModule.Data, 'moduleType'>, Omit<CommandPostcondition.Data<D>, 'id'> {\n moduleType: ModuleType.Postcondition;\n }\n}\n"],"mappings":";;;;;;;;AAQO,uDAAe,oBAA+D;CACjF,AAAO,aAAuC,WAAW;CAIzD,OAAc,KAAc,MAAiE;AACzF,MAAI,SAAS,2BAA0B,CAAE,QAAO;EAEhD,MAAM,iBAAiB,mCAAkC;GAAE,UAAU,KAAK;;AAC1E,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;;yDAXlC,IAAI,sBAAsB,WAAW"}
@@ -1,5 +1,5 @@
1
- import { ModuleType } from "../../helpers/constants.mjs";
2
1
  import { BaseModule } from "./BaseModule.mjs";
2
+ import { ModuleType } from "../../helpers/constants.mjs";
3
3
  import { AnyCommandExecuteData, CommandPrecondition, CommandType } from "@reciple/core";
4
4
 
5
5
  //#region src/classes/modules/PreconditionModule.d.ts
@@ -1,15 +1,15 @@
1
- import { ModuleType } from "../../helpers/constants.mjs";
2
1
  import { BaseModule } from "./BaseModule.mjs";
3
- import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs";
2
+ import { ModuleType } from "../../helpers/constants.mjs";
3
+ import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs";
4
4
  import { CommandPrecondition } from "@reciple/core";
5
5
  import { hasMixin, mix } from "ts-mixer";
6
6
 
7
7
  //#region src/classes/modules/PreconditionModule.ts
8
8
  var _PreconditionModule;
9
- let PreconditionModule = _PreconditionModule = class PreconditionModule$1 {
9
+ let PreconditionModule = _PreconditionModule = class PreconditionModule {
10
10
  moduleType = ModuleType.Precondition;
11
11
  static from(data) {
12
- if (data instanceof _PreconditionModule || hasMixin(data, _PreconditionModule)) return data;
12
+ if (hasMixin(data, _PreconditionModule)) return data;
13
13
  const ModuleInstance = class extends _PreconditionModule {
14
14
  execute = data.execute;
15
15
  };
@@ -17,7 +17,7 @@ let PreconditionModule = _PreconditionModule = class PreconditionModule$1 {
17
17
  return new ModuleInstance();
18
18
  }
19
19
  };
20
- PreconditionModule = _PreconditionModule = __decorate([mix(BaseModule, CommandPrecondition)], PreconditionModule);
20
+ PreconditionModule = _PreconditionModule = __decorate([mix(CommandPrecondition, BaseModule)], PreconditionModule);
21
21
 
22
22
  //#endregion
23
23
  export { PreconditionModule };
@@ -1 +1 @@
1
- {"version":3,"file":"PreconditionModule.mjs","names":["PreconditionModule"],"sources":["../../../src/classes/modules/PreconditionModule.ts"],"sourcesContent":["import { CommandPrecondition, type AnyCommandExecuteData, type CommandType } from '@reciple/core';\nimport { BaseModule } from './BaseModule.js';\nimport { hasMixin, mix } from 'ts-mixer';\nimport { ModuleType } from '../../helpers/constants.js';\n\nexport interface PreconditionModule<D = any> extends Omit<BaseModule, 'moduleType'>, CommandPrecondition<D> {}\n\n@mix(BaseModule, CommandPrecondition)\nexport abstract class PreconditionModule<D = any> implements PreconditionModule<D> {\n public moduleType: ModuleType.Precondition = ModuleType.Precondition;\n\n public abstract execute<T extends CommandType>(data: AnyCommandExecuteData<T>): Promise<CommandPrecondition.ResultDataResolvable<T, D>>;\n\n public static from<D>(data: PreconditionModule.Resolvable<D>): PreconditionModule<D> {\n if (data instanceof PreconditionModule || hasMixin(data, PreconditionModule)) return data;\n\n const ModuleInstance = class extends PreconditionModule { execute = data.execute; };\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace PreconditionModule {\n export type Resolvable<D = any> = PreconditionModule<D>|PreconditionModule.Data<D>;\n\n export interface Data<D = any> extends Omit<BaseModule.Data, 'moduleType'>, Omit<CommandPrecondition.Data<D>, 'id'> {\n moduleType: ModuleType.Precondition;\n }\n}\n"],"mappings":";;;;;;;;AAQO,qDAAeA,qBAA6D;CAC/E,AAAO,aAAsC,WAAW;CAIxD,OAAc,KAAQ,MAA+D;AACjF,MAAI,uCAAsC,SAAS,0BAAyB,CAAE,QAAO;EAErF,MAAM,iBAAiB,kCAAiC;GAAE,UAAU,KAAK;;AACzE,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;;uDAXlC,IAAI,YAAY,oBAAoB"}
1
+ {"version":3,"file":"PreconditionModule.mjs","names":[],"sources":["../../../src/classes/modules/PreconditionModule.ts"],"sourcesContent":["import { CommandPrecondition, type AnyCommandExecuteData, type CommandType } from '@reciple/core';\nimport { BaseModule } from './BaseModule.js';\nimport { hasMixin, mix } from 'ts-mixer';\nimport { ModuleType } from '../../helpers/constants.js';\n\nexport interface PreconditionModule<D = any> extends Omit<BaseModule, 'moduleType'>, CommandPrecondition<D> {}\n\n@mix(CommandPrecondition, BaseModule)\nexport abstract class PreconditionModule<D = any> implements PreconditionModule<D> {\n public moduleType: ModuleType.Precondition = ModuleType.Precondition;\n\n public abstract execute<T extends CommandType>(data: AnyCommandExecuteData<T>): Promise<CommandPrecondition.ResultDataResolvable<T, D>>;\n\n public static from<D>(data: PreconditionModule.Resolvable<D>): PreconditionModule<D> {\n if (hasMixin(data, PreconditionModule)) return data;\n\n const ModuleInstance = class extends PreconditionModule { execute = data.execute; };\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace PreconditionModule {\n export type Resolvable<D = any> = PreconditionModule<D>|PreconditionModule.Data<D>;\n\n export interface Data<D = any> extends Omit<BaseModule.Data, 'moduleType'>, Omit<CommandPrecondition.Data<D>, 'id'> {\n moduleType: ModuleType.Precondition;\n }\n}\n"],"mappings":";;;;;;;;AAQO,qDAAe,mBAA6D;CAC/E,AAAO,aAAsC,WAAW;CAIxD,OAAc,KAAQ,MAA+D;AACjF,MAAI,SAAS,0BAAyB,CAAE,QAAO;EAE/C,MAAM,iBAAiB,kCAAiC;GAAE,UAAU,KAAK;;AACzE,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;;uDAXlC,IAAI,qBAAqB,WAAW"}
@@ -1,5 +1,5 @@
1
- import { ModuleType } from "../../../helpers/constants.mjs";
2
1
  import { BaseModule } from "../BaseModule.mjs";
2
+ import { ModuleType } from "../../../helpers/constants.mjs";
3
3
  import { AnyCommandBuilderMethods } from "../../../helpers/types.mjs";
4
4
  import { ContextMenuCommand, ContextMenuCommandBuilder } from "@reciple/core";
5
5
 
@@ -1,17 +1,17 @@
1
- import { ModuleType } from "../../../helpers/constants.mjs";
2
1
  import { BaseModule } from "../BaseModule.mjs";
3
- import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs";
2
+ import { ModuleType } from "../../../helpers/constants.mjs";
3
+ import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs";
4
4
  import { ContextMenuCommand } from "@reciple/core";
5
5
  import { DiscordSnowflake } from "@sapphire/snowflake";
6
6
  import { hasMixin, mix } from "ts-mixer";
7
7
 
8
8
  //#region src/classes/modules/commands/ContextMenuCommandModule.ts
9
9
  var _ContextMenuCommandModule;
10
- let ContextMenuCommandModule = _ContextMenuCommandModule = class ContextMenuCommandModule$1 {
10
+ let ContextMenuCommandModule = _ContextMenuCommandModule = class ContextMenuCommandModule {
11
11
  moduleType = ModuleType.Command;
12
12
  id = DiscordSnowflake.generate().toString();
13
13
  static from(data) {
14
- if (data instanceof _ContextMenuCommandModule || hasMixin(data, _ContextMenuCommandModule)) return data;
14
+ if (hasMixin(data, _ContextMenuCommandModule)) return data;
15
15
  const ModuleInstance = class extends _ContextMenuCommandModule {
16
16
  data = data.data;
17
17
  execute = data.execute;
@@ -20,7 +20,7 @@ let ContextMenuCommandModule = _ContextMenuCommandModule = class ContextMenuComm
20
20
  return new ModuleInstance();
21
21
  }
22
22
  };
23
- ContextMenuCommandModule = _ContextMenuCommandModule = __decorate([mix(BaseModule, ContextMenuCommand)], ContextMenuCommandModule);
23
+ ContextMenuCommandModule = _ContextMenuCommandModule = __decorate([mix(ContextMenuCommand, BaseModule)], ContextMenuCommandModule);
24
24
 
25
25
  //#endregion
26
26
  export { ContextMenuCommandModule };
@@ -1 +1 @@
1
- {"version":3,"file":"ContextMenuCommandModule.mjs","names":["ContextMenuCommandModule"],"sources":["../../../../src/classes/modules/commands/ContextMenuCommandModule.ts"],"sourcesContent":["import { BaseModule } from '../BaseModule.js';\nimport { ModuleType } from '../../../helpers/constants.js';\nimport { DiscordSnowflake } from '@sapphire/snowflake';\nimport { hasMixin, mix } from 'ts-mixer';\nimport type { AnyCommandBuilderMethods } from '../../../helpers/types.js';\nimport { ContextMenuCommand, type ContextMenuCommandBuilder } from '@reciple/core';\n\nexport interface ContextMenuCommandModule extends Omit<BaseModule, 'moduleType'>, ContextMenuCommandModule.ContextMenuCommandWithoutBuilderMethods {}\n\n@mix(BaseModule, ContextMenuCommand)\nexport abstract class ContextMenuCommandModule implements ContextMenuCommandModule {\n public readonly moduleType: ModuleType.Command = ModuleType.Command;\n public readonly id: string = DiscordSnowflake.generate().toString();\n\n public abstract data: ContextMenuCommandBuilder.Data;\n\n public abstract execute(data: ContextMenuCommand.ExecuteData): Promise<void>;\n\n public static from(data: ContextMenuCommandModule.Resolvable): ContextMenuCommandModule {\n if (data instanceof ContextMenuCommandModule || hasMixin(data, ContextMenuCommandModule)) return data;\n\n const ModuleInstance = class extends ContextMenuCommandModule { data = data.data; execute = data.execute; };\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace ContextMenuCommandModule {\n export type Resolvable = ContextMenuCommandModule|ContextMenuCommandModule.Data;\n\n export interface Data extends Omit<BaseModule.Data, 'moduleType'>, Omit<ContextMenuCommand.Data, 'id'> {\n moduleType: ModuleType.Command;\n }\n\n export type ContextMenuCommandWithoutBuilderMethods = Omit<ContextMenuCommand, AnyCommandBuilderMethods>;\n}\n"],"mappings":";;;;;;;;;AAUO,iEAAeA,2BAA6D;CAC/E,AAAgB,aAAiC,WAAW;CAC5D,AAAgB,KAAa,iBAAiB,UAAU,CAAC,UAAU;CAMnE,OAAc,KAAK,MAAqE;AACpF,MAAI,6CAA4C,SAAS,gCAA+B,CAAE,QAAO;EAEjG,MAAM,iBAAiB,wCAAuC;GAAE,OAAO,KAAK;GAAM,UAAU,KAAK;;AACjG,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;;mEAdlC,IAAI,YAAY,mBAAmB"}
1
+ {"version":3,"file":"ContextMenuCommandModule.mjs","names":[],"sources":["../../../../src/classes/modules/commands/ContextMenuCommandModule.ts"],"sourcesContent":["import { BaseModule } from '../BaseModule.js';\nimport { ModuleType } from '../../../helpers/constants.js';\nimport { DiscordSnowflake } from '@sapphire/snowflake';\nimport { hasMixin, mix } from 'ts-mixer';\nimport type { AnyCommandBuilderMethods } from '../../../helpers/types.js';\nimport { ContextMenuCommand, type ContextMenuCommandBuilder } from '@reciple/core';\n\nexport interface ContextMenuCommandModule extends Omit<BaseModule, 'moduleType'>, ContextMenuCommandModule.ContextMenuCommandWithoutBuilderMethods {}\n\n@mix(ContextMenuCommand, BaseModule)\nexport abstract class ContextMenuCommandModule implements ContextMenuCommandModule {\n public readonly moduleType: ModuleType.Command = ModuleType.Command;\n public readonly id: string = DiscordSnowflake.generate().toString();\n\n public abstract data: ContextMenuCommandBuilder.Data;\n\n public abstract execute(data: ContextMenuCommand.ExecuteData): Promise<void>;\n\n public static from(data: ContextMenuCommandModule.Resolvable): ContextMenuCommandModule {\n if (hasMixin(data, ContextMenuCommandModule)) return data;\n\n const ModuleInstance = class extends ContextMenuCommandModule { data = data.data; execute = data.execute; };\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace ContextMenuCommandModule {\n export type Resolvable = ContextMenuCommandModule|ContextMenuCommandModule.Data;\n\n export interface Data extends Omit<BaseModule.Data, 'moduleType'>, Omit<ContextMenuCommand.Data, 'id'> {\n moduleType: ModuleType.Command;\n }\n\n export type ContextMenuCommandWithoutBuilderMethods = Omit<ContextMenuCommand, AnyCommandBuilderMethods>;\n}\n"],"mappings":";;;;;;;;;AAUO,iEAAe,yBAA6D;CAC/E,AAAgB,aAAiC,WAAW;CAC5D,AAAgB,KAAa,iBAAiB,UAAU,CAAC,UAAU;CAMnE,OAAc,KAAK,MAAqE;AACpF,MAAI,SAAS,gCAA+B,CAAE,QAAO;EAErD,MAAM,iBAAiB,wCAAuC;GAAE,OAAO,KAAK;GAAM,UAAU,KAAK;;AACjG,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;;mEAdlC,IAAI,oBAAoB,WAAW"}
@@ -1,5 +1,5 @@
1
- import { ModuleType } from "../../../helpers/constants.mjs";
2
1
  import { BaseModule } from "../BaseModule.mjs";
2
+ import { ModuleType } from "../../../helpers/constants.mjs";
3
3
  import { AnyCommandBuilderMethods } from "../../../helpers/types.mjs";
4
4
  import { MessageCommand, MessageCommandBuilder } from "@reciple/core";
5
5
 
@@ -1,17 +1,17 @@
1
- import { ModuleType } from "../../../helpers/constants.mjs";
2
1
  import { BaseModule } from "../BaseModule.mjs";
3
- import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs";
2
+ import { ModuleType } from "../../../helpers/constants.mjs";
3
+ import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs";
4
4
  import { MessageCommand, MessageCommandBuilder } from "@reciple/core";
5
5
  import { DiscordSnowflake } from "@sapphire/snowflake";
6
6
  import { hasMixin, mix } from "ts-mixer";
7
7
 
8
8
  //#region src/classes/modules/commands/MessageCommandModule.ts
9
9
  var _MessageCommandModule;
10
- let MessageCommandModule = _MessageCommandModule = class MessageCommandModule$1 {
10
+ let MessageCommandModule = _MessageCommandModule = class MessageCommandModule {
11
11
  moduleType = ModuleType.Command;
12
12
  id = DiscordSnowflake.generate().toString();
13
13
  static from(data) {
14
- if (data instanceof _MessageCommandModule || hasMixin(data, _MessageCommandModule)) return data;
14
+ if (hasMixin(data, _MessageCommandModule)) return data;
15
15
  const ModuleInstance = class extends _MessageCommandModule {
16
16
  data = data.data;
17
17
  execute = data.execute;
@@ -20,7 +20,7 @@ let MessageCommandModule = _MessageCommandModule = class MessageCommandModule$1
20
20
  return new ModuleInstance();
21
21
  }
22
22
  };
23
- MessageCommandModule = _MessageCommandModule = __decorate([mix(BaseModule, MessageCommand)], MessageCommandModule);
23
+ MessageCommandModule = _MessageCommandModule = __decorate([mix(MessageCommand, BaseModule)], MessageCommandModule);
24
24
 
25
25
  //#endregion
26
26
  export { MessageCommandModule };
@@ -1 +1 @@
1
- {"version":3,"file":"MessageCommandModule.mjs","names":["MessageCommandModule"],"sources":["../../../../src/classes/modules/commands/MessageCommandModule.ts"],"sourcesContent":["import { MessageCommand, MessageCommandBuilder } from '@reciple/core';\nimport { BaseModule } from '../BaseModule.js';\nimport { ModuleType } from '../../../helpers/constants.js';\nimport { DiscordSnowflake } from '@sapphire/snowflake';\nimport { hasMixin, mix } from 'ts-mixer';\nimport type { AnyCommandBuilderMethods } from '../../../helpers/types.js';\n\nexport interface MessageCommandModule extends Omit<BaseModule, 'moduleType'>, MessageCommandModule.MessageCommandWithoutBuilderMethods {}\n\n@mix(BaseModule, MessageCommand)\nexport abstract class MessageCommandModule implements MessageCommandModule {\n public readonly moduleType: ModuleType.Command = ModuleType.Command;\n public readonly id: string = DiscordSnowflake.generate().toString();\n\n public abstract data: MessageCommandBuilder.Data;\n\n public abstract execute(data: MessageCommand.ExecuteData): Promise<void>;\n\n public static from(data: MessageCommandModule.Resolvable): MessageCommandModule {\n if (data instanceof MessageCommandModule || hasMixin(data, MessageCommandModule)) return data;\n\n const ModuleInstance = class extends MessageCommandModule { data = data.data; execute = data.execute; };\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace MessageCommandModule {\n export type Resolvable = MessageCommandModule|MessageCommandModule.Data;\n\n export interface Data extends Omit<BaseModule.Data, 'moduleType'>, Omit<MessageCommand.Data, 'id'> {\n moduleType: ModuleType.Command;\n }\n\n export type MessageCommandWithoutBuilderMethods = Omit<MessageCommand, AnyCommandBuilderMethods|'options'|'flags'>;\n}\n"],"mappings":";;;;;;;;;AAUO,yDAAeA,uBAAqD;CACvE,AAAgB,aAAiC,WAAW;CAC5D,AAAgB,KAAa,iBAAiB,UAAU,CAAC,UAAU;CAMnE,OAAc,KAAK,MAA6D;AAC5E,MAAI,yCAAwC,SAAS,4BAA2B,CAAE,QAAO;EAEzF,MAAM,iBAAiB,oCAAmC;GAAE,OAAO,KAAK;GAAM,UAAU,KAAK;;AAC7F,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;;2DAdlC,IAAI,YAAY,eAAe"}
1
+ {"version":3,"file":"MessageCommandModule.mjs","names":[],"sources":["../../../../src/classes/modules/commands/MessageCommandModule.ts"],"sourcesContent":["import { MessageCommand, MessageCommandBuilder } from '@reciple/core';\nimport { BaseModule } from '../BaseModule.js';\nimport { ModuleType } from '../../../helpers/constants.js';\nimport { DiscordSnowflake } from '@sapphire/snowflake';\nimport { hasMixin, mix } from 'ts-mixer';\nimport type { AnyCommandBuilderMethods } from '../../../helpers/types.js';\n\nexport interface MessageCommandModule extends Omit<BaseModule, 'moduleType'>, MessageCommandModule.MessageCommandWithoutBuilderMethods {}\n\n@mix(MessageCommand, BaseModule)\nexport abstract class MessageCommandModule implements MessageCommandModule {\n public readonly moduleType: ModuleType.Command = ModuleType.Command;\n public readonly id: string = DiscordSnowflake.generate().toString();\n\n public abstract data: MessageCommandBuilder.Data;\n\n public abstract execute(data: MessageCommand.ExecuteData): Promise<void>;\n\n public static from(data: MessageCommandModule.Resolvable): MessageCommandModule {\n if (hasMixin(data, MessageCommandModule)) return data;\n\n const ModuleInstance = class extends MessageCommandModule { data = data.data; execute = data.execute; };\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace MessageCommandModule {\n export type Resolvable = MessageCommandModule|MessageCommandModule.Data;\n\n export interface Data extends Omit<BaseModule.Data, 'moduleType'>, Omit<MessageCommand.Data, 'id'> {\n moduleType: ModuleType.Command;\n }\n\n export type MessageCommandWithoutBuilderMethods = Omit<MessageCommand, AnyCommandBuilderMethods|'options'|'flags'>;\n}\n"],"mappings":";;;;;;;;;AAUO,yDAAe,qBAAqD;CACvE,AAAgB,aAAiC,WAAW;CAC5D,AAAgB,KAAa,iBAAiB,UAAU,CAAC,UAAU;CAMnE,OAAc,KAAK,MAA6D;AAC5E,MAAI,SAAS,4BAA2B,CAAE,QAAO;EAEjD,MAAM,iBAAiB,oCAAmC;GAAE,OAAO,KAAK;GAAM,UAAU,KAAK;;AAC7F,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;;2DAdlC,IAAI,gBAAgB,WAAW"}
@@ -1,5 +1,5 @@
1
- import { ModuleType } from "../../../helpers/constants.mjs";
2
1
  import { BaseModule } from "../BaseModule.mjs";
2
+ import { ModuleType } from "../../../helpers/constants.mjs";
3
3
  import { AnyCommandBuilderMethods } from "../../../helpers/types.mjs";
4
4
  import { SlashCommand, SlashCommandBuilder } from "@reciple/core";
5
5
 
@@ -1,17 +1,17 @@
1
- import { ModuleType } from "../../../helpers/constants.mjs";
2
1
  import { BaseModule } from "../BaseModule.mjs";
3
- import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs";
2
+ import { ModuleType } from "../../../helpers/constants.mjs";
3
+ import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs";
4
4
  import { SlashCommand } from "@reciple/core";
5
5
  import { DiscordSnowflake } from "@sapphire/snowflake";
6
6
  import { hasMixin, mix } from "ts-mixer";
7
7
 
8
8
  //#region src/classes/modules/commands/SlashCommandModule.ts
9
9
  var _SlashCommandModule;
10
- let SlashCommandModule = _SlashCommandModule = class SlashCommandModule$1 {
10
+ let SlashCommandModule = _SlashCommandModule = class SlashCommandModule {
11
11
  moduleType = ModuleType.Command;
12
12
  id = DiscordSnowflake.generate().toString();
13
13
  static from(data) {
14
- if (data instanceof _SlashCommandModule || hasMixin(data, _SlashCommandModule)) return data;
14
+ if (hasMixin(data, _SlashCommandModule)) return data;
15
15
  const ModuleInstance = class extends _SlashCommandModule {
16
16
  data = data.data;
17
17
  execute = data.execute;
@@ -20,7 +20,7 @@ let SlashCommandModule = _SlashCommandModule = class SlashCommandModule$1 {
20
20
  return new ModuleInstance();
21
21
  }
22
22
  };
23
- SlashCommandModule = _SlashCommandModule = __decorate([mix(BaseModule, SlashCommand)], SlashCommandModule);
23
+ SlashCommandModule = _SlashCommandModule = __decorate([mix(SlashCommand, BaseModule)], SlashCommandModule);
24
24
 
25
25
  //#endregion
26
26
  export { SlashCommandModule };
@@ -1 +1 @@
1
- {"version":3,"file":"SlashCommandModule.mjs","names":["SlashCommandModule"],"sources":["../../../../src/classes/modules/commands/SlashCommandModule.ts"],"sourcesContent":["import { BaseModule } from '../BaseModule.js';\nimport { ModuleType } from '../../../helpers/constants.js';\nimport { DiscordSnowflake } from '@sapphire/snowflake';\nimport { hasMixin, mix } from 'ts-mixer';\nimport { SlashCommand, type SlashCommandBuilder } from '@reciple/core';\nimport type { AnyCommandBuilderMethods } from '../../../helpers/types.js';\n\nexport interface SlashCommandModule extends Omit<BaseModule, 'moduleType'>, SlashCommandModule.SlashCommandWithoutBuilderMethods {}\n\n@mix(BaseModule, SlashCommand)\nexport abstract class SlashCommandModule implements SlashCommandModule {\n public readonly moduleType: ModuleType.Command = ModuleType.Command;\n public readonly id: string = DiscordSnowflake.generate().toString();\n\n public abstract data: SlashCommandBuilder.Data;\n\n public abstract execute(data: SlashCommand.ExecuteData): Promise<void>;\n\n public static from(data: SlashCommandModule.Resolvable): SlashCommandModule {\n if (data instanceof SlashCommandModule || hasMixin(data, SlashCommandModule)) return data;\n\n const ModuleInstance = class extends SlashCommandModule { data = data.data; execute = data.execute; };\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace SlashCommandModule {\n export type Resolvable = SlashCommandModule|SlashCommandModule.Data;\n\n export interface Data extends Omit<BaseModule.Data, 'moduleType'>, Omit<SlashCommand.Data, 'id'> {\n moduleType: ModuleType.Command;\n }\n\n export type SlashCommandWithoutBuilderMethods = Omit<SlashCommand, AnyCommandBuilderMethods>;\n}\n"],"mappings":";;;;;;;;;AAUO,qDAAeA,qBAAiD;CACnE,AAAgB,aAAiC,WAAW;CAC5D,AAAgB,KAAa,iBAAiB,UAAU,CAAC,UAAU;CAMnE,OAAc,KAAK,MAAyD;AACxE,MAAI,uCAAsC,SAAS,0BAAyB,CAAE,QAAO;EAErF,MAAM,iBAAiB,kCAAiC;GAAE,OAAO,KAAK;GAAM,UAAU,KAAK;;AAC3F,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;;uDAdlC,IAAI,YAAY,aAAa"}
1
+ {"version":3,"file":"SlashCommandModule.mjs","names":[],"sources":["../../../../src/classes/modules/commands/SlashCommandModule.ts"],"sourcesContent":["import { BaseModule } from '../BaseModule.js';\nimport { ModuleType } from '../../../helpers/constants.js';\nimport { DiscordSnowflake } from '@sapphire/snowflake';\nimport { hasMixin, mix } from 'ts-mixer';\nimport { SlashCommand, type SlashCommandBuilder } from '@reciple/core';\nimport type { AnyCommandBuilderMethods } from '../../../helpers/types.js';\n\nexport interface SlashCommandModule extends Omit<BaseModule, 'moduleType'>, SlashCommandModule.SlashCommandWithoutBuilderMethods {}\n\n@mix(SlashCommand, BaseModule)\nexport abstract class SlashCommandModule implements SlashCommandModule {\n public readonly moduleType: ModuleType.Command = ModuleType.Command;\n public readonly id: string = DiscordSnowflake.generate().toString();\n\n public abstract data: SlashCommandBuilder.Data;\n\n public abstract execute(data: SlashCommand.ExecuteData): Promise<void>;\n\n public static from(data: SlashCommandModule.Resolvable): SlashCommandModule {\n if (hasMixin(data, SlashCommandModule)) return data;\n\n const ModuleInstance = class extends SlashCommandModule { data = data.data; execute = data.execute; };\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace SlashCommandModule {\n export type Resolvable = SlashCommandModule|SlashCommandModule.Data;\n\n export interface Data extends Omit<BaseModule.Data, 'moduleType'>, Omit<SlashCommand.Data, 'id'> {\n moduleType: ModuleType.Command;\n }\n\n export type SlashCommandWithoutBuilderMethods = Omit<SlashCommand, AnyCommandBuilderMethods>;\n}\n"],"mappings":";;;;;;;;;AAUO,qDAAe,mBAAiD;CACnE,AAAgB,aAAiC,WAAW;CAC5D,AAAgB,KAAa,iBAAiB,UAAU,CAAC,UAAU;CAMnE,OAAc,KAAK,MAAyD;AACxE,MAAI,SAAS,0BAAyB,CAAE,QAAO;EAE/C,MAAM,iBAAiB,kCAAiC;GAAE,OAAO,KAAK;GAAM,UAAU,KAAK;;AAC3F,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB;;;uDAdlC,IAAI,cAAc,WAAW"}
@@ -1,11 +1,10 @@
1
- import { ModuleType } from "../../../helpers/constants.mjs";
2
1
  import { BaseModule } from "../BaseModule.mjs";
3
- import { Awaitable, Constructable } from "discord.js";
2
+ import { ModuleType } from "../../../helpers/constants.mjs";
3
+ import { Awaitable } from "discord.js";
4
4
  import { EventEmitter } from "node:events";
5
5
 
6
6
  //#region src/classes/modules/events/EventModule.d.ts
7
- declare const base: Constructable<Omit<BaseModule, 'moduleType'>>;
8
- declare abstract class EventModule<Events extends EventModule.EventMap = EventModule.EventMap, Event extends keyof Events = keyof Events> extends base implements EventModule.Data<Events, Event> {
7
+ declare abstract class EventModule<Events extends EventModule.EventMap = EventModule.EventMap, Event extends keyof Events = keyof Events> extends BaseModule implements EventModule.Data<Events, Event> {
9
8
  readonly moduleType: ModuleType.Event;
10
9
  abstract emitter: EventEmitter;
11
10
  abstract event: Event;
@@ -1,15 +1,14 @@
1
- import { ModuleType } from "../../../helpers/constants.mjs";
2
1
  import { BaseModule } from "../BaseModule.mjs";
2
+ import { ModuleType } from "../../../helpers/constants.mjs";
3
3
  import { hasMixin } from "ts-mixer";
4
4
  import { EventEmitter } from "node:events";
5
5
 
6
6
  //#region src/classes/modules/events/EventModule.ts
7
- const base = BaseModule;
8
- var EventModule = class EventModule extends base {
7
+ var EventModule = class EventModule extends BaseModule {
9
8
  moduleType = ModuleType.Event;
10
9
  once = false;
11
10
  static from(data) {
12
- if (data instanceof EventModule || hasMixin(data, EventModule)) return data;
11
+ if (hasMixin(data, EventModule)) return data;
13
12
  const ModuleInstance = class extends EventModule {
14
13
  emitter = data.emitter;
15
14
  event = data.event;
@@ -1 +1 @@
1
- {"version":3,"file":"EventModule.mjs","names":["base: Constructable<Omit<BaseModule, 'moduleType'>>"],"sources":["../../../../src/classes/modules/events/EventModule.ts"],"sourcesContent":["import { EventEmitter } from 'node:events';\nimport { BaseModule } from '../BaseModule.js';\nimport { ModuleType } from '../../../helpers/constants.js';\nimport type { Awaitable, Constructable } from 'discord.js';\nimport { hasMixin } from 'ts-mixer';\n\nconst base: Constructable<Omit<BaseModule, 'moduleType'>> = BaseModule;\n\nexport abstract class EventModule<Events extends EventModule.EventMap = EventModule.EventMap, Event extends keyof Events = keyof Events> extends base implements EventModule.Data<Events, Event> {\n public readonly moduleType: ModuleType.Event = ModuleType.Event;\n public abstract emitter: EventEmitter;\n public abstract event: Event;\n\n public once?: boolean = false;\n\n public abstract onEvent(...args: Events[Event]): Awaitable<void>;\n\n public static from(data: EventModule.Resolvable): EventModule {\n if (data instanceof EventModule || hasMixin(data, EventModule)) return data;\n\n const ModuleInstance = class extends EventModule {\n emitter = data.emitter;\n event = data.event;\n once = data.once;\n onEvent = data.onEvent;\n };\n\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace EventModule {\n export type EventMap = Record<string|symbol, any>;\n export type Resolvable<Events extends EventModule.EventMap = EventModule.EventMap, Event extends keyof Events = keyof Events> = EventModule<Events, Event>|EventModule.Data<Events, Event>;\n\n export interface Data<Events extends EventModule.EventMap = EventModule.EventMap, Event extends keyof Events = keyof Events> extends Omit<BaseModule.Data, 'moduleType'> {\n moduleType: ModuleType.Event;\n emitter: EventEmitter;\n event: Event;\n once?: boolean;\n onEvent: (...args: Events[Event]) => Awaitable<void>;\n }\n}\n"],"mappings":";;;;;;AAMA,MAAMA,OAAsD;AAE5D,IAAsB,cAAtB,MAAsB,oBAA2H,KAAgD;CAC7L,AAAgB,aAA+B,WAAW;CAI1D,AAAO,OAAiB;CAIxB,OAAc,KAAK,MAA2C;AAC1D,MAAI,gBAAgB,eAAe,SAAS,MAAM,YAAY,CAAE,QAAO;EAEvE,MAAM,iBAAiB,cAAc,YAAY;GAC7C,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,UAAU,KAAK;;AAGnB,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB"}
1
+ {"version":3,"file":"EventModule.mjs","names":[],"sources":["../../../../src/classes/modules/events/EventModule.ts"],"sourcesContent":["import { EventEmitter } from 'node:events';\nimport { BaseModule } from '../BaseModule.js';\nimport { ModuleType } from '../../../helpers/constants.js';\nimport type { Awaitable } from 'discord.js';\nimport { hasMixin } from 'ts-mixer';\n\nexport abstract class EventModule<Events extends EventModule.EventMap = EventModule.EventMap, Event extends keyof Events = keyof Events> extends BaseModule implements EventModule.Data<Events, Event> {\n public readonly moduleType: ModuleType.Event = ModuleType.Event;\n public abstract emitter: EventEmitter;\n public abstract event: Event;\n\n public once?: boolean = false;\n\n public abstract onEvent(...args: Events[Event]): Awaitable<void>;\n\n public static from(data: EventModule.Resolvable): EventModule {\n if (hasMixin(data, EventModule)) return data;\n\n const ModuleInstance = class extends EventModule {\n emitter = data.emitter;\n event = data.event;\n once = data.once;\n onEvent = data.onEvent;\n };\n\n Object.assign(ModuleInstance.prototype, data);\n return new ModuleInstance();\n }\n}\n\nexport namespace EventModule {\n export type EventMap = Record<string|symbol, any>;\n export type Resolvable<Events extends EventModule.EventMap = EventModule.EventMap, Event extends keyof Events = keyof Events> = EventModule<Events, Event>|EventModule.Data<Events, Event>;\n\n export interface Data<Events extends EventModule.EventMap = EventModule.EventMap, Event extends keyof Events = keyof Events> extends Omit<BaseModule.Data, 'moduleType'> {\n moduleType: ModuleType.Event;\n emitter: EventEmitter;\n event: Event;\n once?: boolean;\n onEvent: (...args: Events[Event]) => Awaitable<void>;\n }\n}\n"],"mappings":";;;;;;AAMA,IAAsB,cAAtB,MAAsB,oBAA2H,WAAsD;CACnM,AAAgB,aAA+B,WAAW;CAI1D,AAAO,OAAiB;CAIxB,OAAc,KAAK,MAA2C;AAC1D,MAAI,SAAS,MAAM,YAAY,CAAE,QAAO;EAExC,MAAM,iBAAiB,cAAc,YAAY;GAC7C,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,UAAU,KAAK;;AAGnB,SAAO,OAAO,eAAe,WAAW,KAAK;AAC7C,SAAO,IAAI,gBAAgB"}
@@ -59,7 +59,7 @@ declare namespace ModuleTemplateBuilder {
59
59
  CommandContextMenuType = "$COMMAND_CONTEXT_MENU_TYPE$",
60
60
  EventEmitter = "$EVENT_EMITTER$",
61
61
  EventName = "$EVENT_NAME$",
62
- EventOnce = "$EVENT_ONCE$",
62
+ EventOnce = "$EVENT_ONCE$"
63
63
  }
64
64
  const PlaceholderDefaultValues: Record<Placeholder, string>;
65
65
  const SourceDirectory: {
@@ -1,8 +1,8 @@
1
1
  import { NotAnError } from "../NotAnError.mjs";
2
2
  import { CLI } from "../cli/CLI.mjs";
3
3
  import { ConfigReader } from "../cli/ConfigReader.mjs";
4
- import { ModuleType } from "../../helpers/constants.mjs";
5
4
  import { BaseModule } from "../modules/BaseModule.mjs";
5
+ import { ModuleType } from "../../helpers/constants.mjs";
6
6
  import { PostconditionModule } from "../modules/PostconditionModule.mjs";
7
7
  import { PreconditionModule } from "../modules/PreconditionModule.mjs";
8
8
  import { EventModule } from "../modules/events/EventModule.mjs";
@@ -13,9 +13,9 @@ import { ModuleLoader } from "../client/ModuleLoader.mjs";
13
13
  import { ClientEventModule } from "../modules/events/ClientEventModule.mjs";
14
14
  import { RESTEventModule } from "../modules/events/RESTEventModule.mjs";
15
15
  import path from "node:path";
16
- import { colors } from "@reciple/utils";
17
16
  import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
18
17
  import { confirm, intro, isCancel, outro, select, text } from "@clack/prompts";
18
+ import { colors } from "@prtty/prtty";
19
19
  import { readTSConfig } from "pkg-types";
20
20
  import { ApplicationCommandType } from "discord.js";
21
21
  import { existsSync } from "node:fs";
@@ -48,7 +48,7 @@ var ModuleTemplateBuilder = class ModuleTemplateBuilder {
48
48
  this.defaultAll = options?.defaultAll ?? false;
49
49
  }
50
50
  async init() {
51
- intro(colors.bold(colors.black(colors.bgCyan(` ${this.cli.command.name()} create module - v${this.cli.build} `))));
51
+ intro(colors.bold().black().bgCyan(` ${this.cli.command.name()} create module - v${this.cli.build} `));
52
52
  return this;
53
53
  }
54
54
  async setupLanguage(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleTemplateBuilder.mjs","names":["template","value: string|symbol","value","directory","ModuleTypeClassName: Record<ModuleType, string[]>","files: string[]","templates: ModuleTemplateBuilder.Data[]"],"sources":["../../../src/classes/templates/ModuleTemplateBuilder.ts"],"sourcesContent":["import path from 'node:path';\nimport { CLI } from '../cli/CLI.js';\nimport { ModuleType } from '../../helpers/constants.js';\nimport { BaseModule } from '../modules/BaseModule.js';\nimport { MessageCommandModule } from '../modules/commands/MessageCommandModule.js';\nimport { SlashCommandModule } from '../modules/commands/SlashCommandModule.js';\nimport { ContextMenuCommandModule } from '../modules/commands/ContextMenuCommandModule.js';\nimport { ClientEventModule } from '../modules/events/ClientEventModule.js';\nimport { EventModule } from '../modules/events/EventModule.js';\nimport { RESTEventModule } from '../modules/events/RESTEventModule.js';\nimport { PostconditionModule } from '../modules/PostconditionModule.js';\nimport { PreconditionModule } from '../modules/PreconditionModule.js';\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';\nimport { ConfigReader } from '../cli/ConfigReader.js';\nimport { confirm, intro, isCancel, outro, select, text } from '@clack/prompts';\nimport { NotAnError } from '../NotAnError.js';\nimport { ApplicationCommandType } from 'discord.js';\nimport { ModuleLoader } from '../client/ModuleLoader.js';\nimport { existsSync } from 'node:fs';\nimport { colors } from '@reciple/utils';\nimport { readTSConfig } from 'pkg-types';\n\nexport class ModuleTemplateBuilder {\n public _directory?: string;\n\n public readonly cli: CLI;\n public readonly config: ConfigReader;\n\n public template?: ModuleTemplateBuilder.Data;\n public typescript?: boolean;\n public filename?: string;\n public defaultAll: boolean;\n\n get content() {\n return this.template?.content ?? '';\n }\n\n get directory() {\n return this._directory ?? process.cwd();\n }\n\n get filepath() {\n return path.join(this.directory, this.filename ?? '');\n }\n\n constructor(options: ModuleTemplateBuilder.Options) {\n this.cli = options.cli;\n this.config = options.config;\n this.template = options?.template;\n this.typescript = options?.typescript;\n this._directory = options?.directory;\n this.filename = options?.filename;\n this.defaultAll = options?.defaultAll ?? false;\n }\n\n public async init(): Promise<this> {\n intro(colors.bold(colors.black(colors.bgCyan(` ${this.cli.command.name()} create module - v${this.cli.build} `))));\n return this;\n }\n\n public async setupLanguage(options?: ModuleTemplateBuilder.SetupLanguageOptions): Promise<this> {\n this.typescript = options?.typescript ?? this.typescript;\n\n if (!this.typescript) {\n const isTypeScriptDefault = (await ConfigReader.getProjectLang(this.directory)) === 'ts';\n const isTypeScript = this.defaultAll\n ? isTypeScriptDefault\n : await confirm({\n message: 'Would you like to use TypeScript?',\n active: 'Yes',\n inactive: 'No',\n initialValue: isTypeScriptDefault\n });\n\n if (isCancel(isTypeScript)) throw new NotAnError('Operation cancelled');\n this.typescript = isTypeScript;\n }\n\n return this;\n }\n\n public async setupTemplate(options?: ModuleTemplateBuilder.SetupTemplateOptions): Promise<this> {\n let template = typeof options?.template === 'object' ? options.template : undefined;\n\n if (!template) {\n const templateName = typeof options?.template === 'string' ? options.template : undefined;\n const templates = await ModuleTemplateBuilder.resolveModuleTemplates(this.typescript ? 'ts' : 'js');\n\n const selectedTemplate = this.defaultAll\n ? templateName ? templates.find(template => template.name === templateName) : templates.at(0)\n : await select({\n message: 'Select a module template',\n options: templates.map(template => ({\n label: template.name,\n value: template\n }))\n });\n\n if (isCancel(selectedTemplate)) throw new NotAnError('Operation cancelled');\n template = selectedTemplate;\n }\n\n this.template = template;\n if (!this.template) throw new NotAnError('No template selected');\n\n return this;\n }\n\n public async setupPlaceholders(): Promise<this> {\n const placeholders = Object.keys(ModuleTemplateBuilder.Placeholder).filter(k => !k.startsWith('$')) as (keyof typeof ModuleTemplateBuilder.Placeholder)[];\n\n for (const placeholderKey of placeholders) {\n if (!ModuleTemplateBuilder.hasPlaceholder(ModuleTemplateBuilder.Placeholder[placeholderKey], this.content)) continue;\n const placeholder = ModuleTemplateBuilder.Placeholder[placeholderKey];\n const defaultValue = ModuleTemplateBuilder.PlaceholderDefaultValues[placeholder];\n\n let value: string|symbol;\n\n if (this.defaultAll) {\n value = defaultValue;\n } else {\n switch (placeholder) {\n case ModuleTemplateBuilder.Placeholder.ModuleName:\n case ModuleTemplateBuilder.Placeholder.CommandName:\n case ModuleTemplateBuilder.Placeholder.EventName:\n value = this.defaultAll\n ? defaultValue\n : await text({\n message: `What would you like to name the ${placeholderKey.replace('Name', '').toLowerCase()}?`,\n initialValue: defaultValue,\n placeholder: defaultValue,\n defaultValue,\n validate: (value) => {\n if (!value) return 'Please enter a value';\n if (value.includes(' ')) return 'Please enter a value without spaces';\n }\n });\n break;\n case ModuleTemplateBuilder.Placeholder.CommandContextMenuType:\n const type = await select({\n message: 'Select a command context menu type',\n options: [\n { label: 'Message', value: ApplicationCommandType.Message },\n { label: 'User', value: ApplicationCommandType.User }\n ],\n initialValue: ApplicationCommandType.Message\n });\n\n value = isCancel(type) ? type : `${type}`;\n break;\n case ModuleTemplateBuilder.Placeholder.EventOnce:\n const once = await confirm({\n message: `Would you like to use the event once?`,\n active: 'Yes',\n inactive: 'No',\n initialValue: false\n });\n\n value = isCancel(once) ? once : `${once}`;\n break;\n case ModuleTemplateBuilder.Placeholder.EventEmitter:\n default:\n value = await text({\n message: `What would you like to use for the ${ModuleTemplateBuilder.toTextCase(placeholder)}?`,\n initialValue: defaultValue,\n placeholder: defaultValue,\n defaultValue\n });\n break;\n }\n }\n\n if (isCancel(value)) throw new NotAnError('Operation cancelled');\n if (!this.template) throw new NotAnError('No template selected');\n this.template.content = ModuleTemplateBuilder.removeExpectedErrorComments(this.content.replaceAll(placeholder, value));\n }\n\n return this;\n }\n\n public async setupDirectory(options?: ModuleTemplateBuilder.SetupDirectoryOptions): Promise<this> {\n let directory = options?.directory;\n\n if (!directory) {\n const cwd = process.cwd();\n const tsconfig = this.config.build.tsconfig\n ? await readTSConfig(typeof this.config.build.tsconfig == 'string' ? this.config.build.tsconfig : cwd, { try: true })\n : undefined;\n\n let directories = await ModuleLoader.scanForDirectories(this.config.config.modules);\n directories = await ModuleLoader.resolveSourceDirectories({\n directories,\n baseUrl: tsconfig?.compilerOptions?.baseUrl ?? '.',\n rootDir: tsconfig?.compilerOptions?.rootDir ?? 'src',\n outDir: tsconfig?.compilerOptions?.outDir ?? 'modules',\n cwd\n });\n\n const selectedDirectory = this.defaultAll\n ? directories.at(0)\n : await select({\n message: 'Select a directory',\n options: directories.map(directory => ({\n label: path.relative(cwd, directory),\n value: directory\n }))\n });\n\n if (isCancel(selectedDirectory)) throw new NotAnError('Operation cancelled');\n directory = selectedDirectory;\n }\n\n if (!directory) throw new NotAnError('No directory selected');\n this._directory = directory;\n\n return this;\n }\n\n public async setupFilename(options?: ModuleTemplateBuilder.SetupFilenameOptions): Promise<this> {\n let filename = options?.filename;\n\n if (!filename) {\n const defaultFilename = `${this.template?.name}.${this.typescript ? 'ts' : 'js'}`;\n const selectedFilename = this.defaultAll\n ? defaultFilename\n : await text({\n message: 'What would you like to name the module file?',\n initialValue: defaultFilename,\n placeholder: defaultFilename,\n defaultValue: defaultFilename,\n validate: (value) => {\n if (!value) return 'Please enter a value';\n if (existsSync(path.join(this.directory, value))) return 'File already exists';\n }\n });\n\n if (isCancel(selectedFilename)) throw new NotAnError('Operation cancelled');\n filename = selectedFilename;\n }\n\n if (!filename) throw new NotAnError('No filename selected');\n this.filename = filename;\n\n return this;\n }\n\n public async build({ overwrite, silent }: ModuleTemplateBuilder.BuildOptions = {}): Promise<this> {\n await mkdir(this.directory, { recursive: true });\n await writeFile(this.filepath, this.content, { flag: overwrite === false ? 'wx' : undefined });\n if (!silent) outro(`Module ${colors.green(this.template?.name!)} created in ${colors.cyan(path.relative(process.cwd(), this.filepath))}`);\n return this;\n }\n}\n\nexport namespace ModuleTemplateBuilder {\n export interface Options {\n cli: CLI;\n config: ConfigReader;\n template?: ModuleTemplateBuilder.Data;\n typescript?: boolean;\n directory?: string;\n filename?: string;\n defaultAll?: boolean;\n }\n\n export interface SetupLanguageOptions {\n typescript?: boolean;\n }\n\n export interface SetupTemplateOptions {\n template?: ModuleTemplateBuilder.Data|string;\n }\n\n export interface SetupDirectoryOptions {\n directory?: string;\n }\n\n export interface SetupFilenameOptions {\n filename?: string;\n }\n\n export interface BuildOptions {\n overwrite?: boolean;\n silent?: boolean;\n }\n\n export enum Placeholder {\n ModuleName = '$MODULE_NAME$',\n CommandName = '$COMMAND_NAME$',\n CommandDescription = '$COMMAND_DESCRIPTION$',\n CommandContextMenuType = '$COMMAND_CONTEXT_MENU_TYPE$',\n EventEmitter = '$EVENT_EMITTER$',\n EventName = '$EVENT_NAME$',\n EventOnce = '$EVENT_ONCE$'\n }\n\n export const PlaceholderDefaultValues: Record<Placeholder, string> = {\n [Placeholder.ModuleName]: 'MyModule',\n [Placeholder.CommandName]: 'my-command',\n [Placeholder.CommandDescription]: 'My command',\n [Placeholder.CommandContextMenuType]: `${ApplicationCommandType.Message}`,\n [Placeholder.EventEmitter]: 'null',\n [Placeholder.EventName]: 'my-event',\n [Placeholder.EventOnce]: 'false'\n }\n\n export const SourceDirectory = {\n js: path.join(CLI.root, './assets/modules/javascript'),\n ts: path.join(CLI.root, './assets/modules/typescript')\n };\n\n export const ModuleTypeClassName: Record<ModuleType, string[]> = {\n [ModuleType.Base]: [BaseModule.name],\n [ModuleType.Command]: [MessageCommandModule.name, SlashCommandModule.name, ContextMenuCommandModule.name],\n [ModuleType.Event]: [ClientEventModule.name, EventModule.name, RESTEventModule.name],\n [ModuleType.Postcondition]: [PostconditionModule.name],\n [ModuleType.Precondition]: [PreconditionModule.name]\n };\n\n export interface Data {\n src: string;\n name: string;\n content: string;\n moduleType: ModuleType|null;\n }\n\n export async function resolveModuleTemplates(source: keyof typeof SourceDirectory): Promise<ModuleTemplateBuilder.Data[]> {\n const src = ModuleTemplateBuilder.SourceDirectory[source];\n const files: string[] = await readdir(src);\n const templates: ModuleTemplateBuilder.Data[] = [];\n\n for (const file of files) {\n const filepath = path.join(src, file);\n const content = await readFile(filepath, 'utf-8');\n const moduleType = ModuleTemplateBuilder.getModuleTemplateContentType(content);\n\n templates.push({ src: filepath, name: path.parse(filepath).name, content, moduleType });\n }\n\n return templates;\n }\n\n export function getModuleTemplateContentType(content: string): ModuleType|null {\n const createExtendStatement = (name: string) => `export class ${Placeholder.ModuleName} extends ${name}`;\n\n for (const type of Object.keys(ModuleTypeClassName).map(Number) as ModuleType[]) {\n const statements = ModuleTypeClassName[type].map(createExtendStatement);\n\n for (const statement of statements) {\n if (content.includes(statement)) return type;\n }\n }\n\n return null;\n }\n\n export function hasPlaceholder(placeholder: Placeholder, content: string): boolean {\n return content.includes(placeholder);\n }\n\n export function removeExpectedErrorComments(content: string): string {\n const lines = content.split('\\n');\n\n return lines\n .filter(line => !line.trim().includes('// @ts-expect-error'))\n .join('\\n');\n }\n\n export function toTextCase(string: string): string {\n return String(string)\n .replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g, '')\n .replace(/([a-z])([A-Z])/g, (m, a, b) => a + '_' + b.toLowerCase())\n .replace(/[^A-Za-z0-9]+|_+/g, ' ')\n .toLowerCase();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ModuleTemplateBuilder.mjs","names":["template","value","directory"],"sources":["../../../src/classes/templates/ModuleTemplateBuilder.ts"],"sourcesContent":["import path from 'node:path';\nimport { CLI } from '../cli/CLI.js';\nimport { ModuleType } from '../../helpers/constants.js';\nimport { BaseModule } from '../modules/BaseModule.js';\nimport { MessageCommandModule } from '../modules/commands/MessageCommandModule.js';\nimport { SlashCommandModule } from '../modules/commands/SlashCommandModule.js';\nimport { ContextMenuCommandModule } from '../modules/commands/ContextMenuCommandModule.js';\nimport { ClientEventModule } from '../modules/events/ClientEventModule.js';\nimport { EventModule } from '../modules/events/EventModule.js';\nimport { RESTEventModule } from '../modules/events/RESTEventModule.js';\nimport { PostconditionModule } from '../modules/PostconditionModule.js';\nimport { PreconditionModule } from '../modules/PreconditionModule.js';\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';\nimport { ConfigReader } from '../cli/ConfigReader.js';\nimport { confirm, intro, isCancel, outro, select, text } from '@clack/prompts';\nimport { NotAnError } from '../NotAnError.js';\nimport { ApplicationCommandType } from 'discord.js';\nimport { ModuleLoader } from '../client/ModuleLoader.js';\nimport { existsSync } from 'node:fs';\nimport { readTSConfig } from 'pkg-types';\nimport { colors } from '@prtty/prtty';\n\nexport class ModuleTemplateBuilder {\n public _directory?: string;\n\n public readonly cli: CLI;\n public readonly config: ConfigReader;\n\n public template?: ModuleTemplateBuilder.Data;\n public typescript?: boolean;\n public filename?: string;\n public defaultAll: boolean;\n\n get content() {\n return this.template?.content ?? '';\n }\n\n get directory() {\n return this._directory ?? process.cwd();\n }\n\n get filepath() {\n return path.join(this.directory, this.filename ?? '');\n }\n\n constructor(options: ModuleTemplateBuilder.Options) {\n this.cli = options.cli;\n this.config = options.config;\n this.template = options?.template;\n this.typescript = options?.typescript;\n this._directory = options?.directory;\n this.filename = options?.filename;\n this.defaultAll = options?.defaultAll ?? false;\n }\n\n public async init(): Promise<this> {\n intro(colors.bold().black().bgCyan(` ${this.cli.command.name()} create module - v${this.cli.build} `));\n return this;\n }\n\n public async setupLanguage(options?: ModuleTemplateBuilder.SetupLanguageOptions): Promise<this> {\n this.typescript = options?.typescript ?? this.typescript;\n\n if (!this.typescript) {\n const isTypeScriptDefault = (await ConfigReader.getProjectLang(this.directory)) === 'ts';\n const isTypeScript = this.defaultAll\n ? isTypeScriptDefault\n : await confirm({\n message: 'Would you like to use TypeScript?',\n active: 'Yes',\n inactive: 'No',\n initialValue: isTypeScriptDefault\n });\n\n if (isCancel(isTypeScript)) throw new NotAnError('Operation cancelled');\n this.typescript = isTypeScript;\n }\n\n return this;\n }\n\n public async setupTemplate(options?: ModuleTemplateBuilder.SetupTemplateOptions): Promise<this> {\n let template = typeof options?.template === 'object' ? options.template : undefined;\n\n if (!template) {\n const templateName = typeof options?.template === 'string' ? options.template : undefined;\n const templates = await ModuleTemplateBuilder.resolveModuleTemplates(this.typescript ? 'ts' : 'js');\n\n const selectedTemplate = this.defaultAll\n ? templateName ? templates.find(template => template.name === templateName) : templates.at(0)\n : await select({\n message: 'Select a module template',\n options: templates.map(template => ({\n label: template.name,\n value: template\n }))\n });\n\n if (isCancel(selectedTemplate)) throw new NotAnError('Operation cancelled');\n template = selectedTemplate;\n }\n\n this.template = template;\n if (!this.template) throw new NotAnError('No template selected');\n\n return this;\n }\n\n public async setupPlaceholders(): Promise<this> {\n const placeholders = Object.keys(ModuleTemplateBuilder.Placeholder).filter(k => !k.startsWith('$')) as (keyof typeof ModuleTemplateBuilder.Placeholder)[];\n\n for (const placeholderKey of placeholders) {\n if (!ModuleTemplateBuilder.hasPlaceholder(ModuleTemplateBuilder.Placeholder[placeholderKey], this.content)) continue;\n const placeholder = ModuleTemplateBuilder.Placeholder[placeholderKey];\n const defaultValue = ModuleTemplateBuilder.PlaceholderDefaultValues[placeholder];\n\n let value: string|symbol;\n\n if (this.defaultAll) {\n value = defaultValue;\n } else {\n switch (placeholder) {\n case ModuleTemplateBuilder.Placeholder.ModuleName:\n case ModuleTemplateBuilder.Placeholder.CommandName:\n case ModuleTemplateBuilder.Placeholder.EventName:\n value = this.defaultAll\n ? defaultValue\n : await text({\n message: `What would you like to name the ${placeholderKey.replace('Name', '').toLowerCase()}?`,\n initialValue: defaultValue,\n placeholder: defaultValue,\n defaultValue,\n validate: (value) => {\n if (!value) return 'Please enter a value';\n if (value.includes(' ')) return 'Please enter a value without spaces';\n }\n });\n break;\n case ModuleTemplateBuilder.Placeholder.CommandContextMenuType:\n const type = await select({\n message: 'Select a command context menu type',\n options: [\n { label: 'Message', value: ApplicationCommandType.Message },\n { label: 'User', value: ApplicationCommandType.User }\n ],\n initialValue: ApplicationCommandType.Message\n });\n\n value = isCancel(type) ? type : `${type}`;\n break;\n case ModuleTemplateBuilder.Placeholder.EventOnce:\n const once = await confirm({\n message: `Would you like to use the event once?`,\n active: 'Yes',\n inactive: 'No',\n initialValue: false\n });\n\n value = isCancel(once) ? once : `${once}`;\n break;\n case ModuleTemplateBuilder.Placeholder.EventEmitter:\n default:\n value = await text({\n message: `What would you like to use for the ${ModuleTemplateBuilder.toTextCase(placeholder)}?`,\n initialValue: defaultValue,\n placeholder: defaultValue,\n defaultValue\n });\n break;\n }\n }\n\n if (isCancel(value)) throw new NotAnError('Operation cancelled');\n if (!this.template) throw new NotAnError('No template selected');\n this.template.content = ModuleTemplateBuilder.removeExpectedErrorComments(this.content.replaceAll(placeholder, value));\n }\n\n return this;\n }\n\n public async setupDirectory(options?: ModuleTemplateBuilder.SetupDirectoryOptions): Promise<this> {\n let directory = options?.directory;\n\n if (!directory) {\n const cwd = process.cwd();\n const tsconfig = this.config.build.tsconfig\n ? await readTSConfig(typeof this.config.build.tsconfig == 'string' ? this.config.build.tsconfig : cwd, { try: true })\n : undefined;\n\n let directories = await ModuleLoader.scanForDirectories(this.config.config.modules);\n directories = await ModuleLoader.resolveSourceDirectories({\n directories,\n baseUrl: tsconfig?.compilerOptions?.baseUrl ?? '.',\n rootDir: tsconfig?.compilerOptions?.rootDir ?? 'src',\n outDir: tsconfig?.compilerOptions?.outDir ?? 'modules',\n cwd\n });\n\n const selectedDirectory = this.defaultAll\n ? directories.at(0)\n : await select({\n message: 'Select a directory',\n options: directories.map(directory => ({\n label: path.relative(cwd, directory),\n value: directory\n }))\n });\n\n if (isCancel(selectedDirectory)) throw new NotAnError('Operation cancelled');\n directory = selectedDirectory;\n }\n\n if (!directory) throw new NotAnError('No directory selected');\n this._directory = directory;\n\n return this;\n }\n\n public async setupFilename(options?: ModuleTemplateBuilder.SetupFilenameOptions): Promise<this> {\n let filename = options?.filename;\n\n if (!filename) {\n const defaultFilename = `${this.template?.name}.${this.typescript ? 'ts' : 'js'}`;\n const selectedFilename = this.defaultAll\n ? defaultFilename\n : await text({\n message: 'What would you like to name the module file?',\n initialValue: defaultFilename,\n placeholder: defaultFilename,\n defaultValue: defaultFilename,\n validate: (value) => {\n if (!value) return 'Please enter a value';\n if (existsSync(path.join(this.directory, value))) return 'File already exists';\n }\n });\n\n if (isCancel(selectedFilename)) throw new NotAnError('Operation cancelled');\n filename = selectedFilename;\n }\n\n if (!filename) throw new NotAnError('No filename selected');\n this.filename = filename;\n\n return this;\n }\n\n public async build({ overwrite, silent }: ModuleTemplateBuilder.BuildOptions = {}): Promise<this> {\n await mkdir(this.directory, { recursive: true });\n await writeFile(this.filepath, this.content, { flag: overwrite === false ? 'wx' : undefined });\n if (!silent) outro(`Module ${colors.green(this.template?.name!)} created in ${colors.cyan(path.relative(process.cwd(), this.filepath))}`);\n return this;\n }\n}\n\nexport namespace ModuleTemplateBuilder {\n export interface Options {\n cli: CLI;\n config: ConfigReader;\n template?: ModuleTemplateBuilder.Data;\n typescript?: boolean;\n directory?: string;\n filename?: string;\n defaultAll?: boolean;\n }\n\n export interface SetupLanguageOptions {\n typescript?: boolean;\n }\n\n export interface SetupTemplateOptions {\n template?: ModuleTemplateBuilder.Data|string;\n }\n\n export interface SetupDirectoryOptions {\n directory?: string;\n }\n\n export interface SetupFilenameOptions {\n filename?: string;\n }\n\n export interface BuildOptions {\n overwrite?: boolean;\n silent?: boolean;\n }\n\n export enum Placeholder {\n ModuleName = '$MODULE_NAME$',\n CommandName = '$COMMAND_NAME$',\n CommandDescription = '$COMMAND_DESCRIPTION$',\n CommandContextMenuType = '$COMMAND_CONTEXT_MENU_TYPE$',\n EventEmitter = '$EVENT_EMITTER$',\n EventName = '$EVENT_NAME$',\n EventOnce = '$EVENT_ONCE$'\n }\n\n export const PlaceholderDefaultValues: Record<Placeholder, string> = {\n [Placeholder.ModuleName]: 'MyModule',\n [Placeholder.CommandName]: 'my-command',\n [Placeholder.CommandDescription]: 'My command',\n [Placeholder.CommandContextMenuType]: `${ApplicationCommandType.Message}`,\n [Placeholder.EventEmitter]: 'null',\n [Placeholder.EventName]: 'my-event',\n [Placeholder.EventOnce]: 'false'\n }\n\n export const SourceDirectory = {\n js: path.join(CLI.root, './assets/modules/javascript'),\n ts: path.join(CLI.root, './assets/modules/typescript')\n };\n\n export const ModuleTypeClassName: Record<ModuleType, string[]> = {\n [ModuleType.Base]: [BaseModule.name],\n [ModuleType.Command]: [MessageCommandModule.name, SlashCommandModule.name, ContextMenuCommandModule.name],\n [ModuleType.Event]: [ClientEventModule.name, EventModule.name, RESTEventModule.name],\n [ModuleType.Postcondition]: [PostconditionModule.name],\n [ModuleType.Precondition]: [PreconditionModule.name]\n };\n\n export interface Data {\n src: string;\n name: string;\n content: string;\n moduleType: ModuleType|null;\n }\n\n export async function resolveModuleTemplates(source: keyof typeof SourceDirectory): Promise<ModuleTemplateBuilder.Data[]> {\n const src = ModuleTemplateBuilder.SourceDirectory[source];\n const files: string[] = await readdir(src);\n const templates: ModuleTemplateBuilder.Data[] = [];\n\n for (const file of files) {\n const filepath = path.join(src, file);\n const content = await readFile(filepath, 'utf-8');\n const moduleType = ModuleTemplateBuilder.getModuleTemplateContentType(content);\n\n templates.push({ src: filepath, name: path.parse(filepath).name, content, moduleType });\n }\n\n return templates;\n }\n\n export function getModuleTemplateContentType(content: string): ModuleType|null {\n const createExtendStatement = (name: string) => `export class ${Placeholder.ModuleName} extends ${name}`;\n\n for (const type of Object.keys(ModuleTypeClassName).map(Number) as ModuleType[]) {\n const statements = ModuleTypeClassName[type].map(createExtendStatement);\n\n for (const statement of statements) {\n if (content.includes(statement)) return type;\n }\n }\n\n return null;\n }\n\n export function hasPlaceholder(placeholder: Placeholder, content: string): boolean {\n return content.includes(placeholder);\n }\n\n export function removeExpectedErrorComments(content: string): string {\n const lines = content.split('\\n');\n\n return lines\n .filter(line => !line.trim().includes('// @ts-expect-error'))\n .join('\\n');\n }\n\n export function toTextCase(string: string): string {\n return String(string)\n .replace(/^[^A-Za-z0-9]*|[^A-Za-z0-9]*$/g, '')\n .replace(/([a-z])([A-Z])/g, (m, a, b) => a + '_' + b.toLowerCase())\n .replace(/[^A-Za-z0-9]+|_+/g, ' ')\n .toLowerCase();\n }\n}\n"],"mappings":"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"}