reciple 10.0.1-dev.8 → 10.0.2

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 (76) 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.110.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 +27 -26
  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 +46 -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 +27 -25
  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 +22 -22
  58. package/dist/classes/templates/ModuleTemplateBuilder.mjs.map +1 -1
  59. package/dist/classes/templates/TemplateBuilder.mjs +31 -27
  60. package/dist/classes/templates/TemplateBuilder.mjs.map +1 -1
  61. package/dist/classes/validation/BaseModuleValidator.d.mts +11 -11
  62. package/dist/classes/validation/CommandModuleValidator.d.mts +17 -17
  63. package/dist/classes/validation/EventModuleValidator.d.mts +28 -12
  64. package/dist/classes/validation/PostconditionModule.d.mts +9 -9
  65. package/dist/classes/validation/PreconditionModule.d.mts +7 -7
  66. package/dist/helpers/constants.d.mts +2 -4
  67. package/dist/helpers/constants.mjs +8 -8
  68. package/dist/helpers/constants.mjs.map +1 -1
  69. package/dist/helpers/types.d.mts +3 -1
  70. package/dist/index.d.mts +4 -5
  71. package/dist/index.mjs +3 -4
  72. package/dist/index.mjs.map +1 -1
  73. package/dist/package.mjs +18 -16
  74. package/dist/package.mjs.map +1 -1
  75. package/package.json +16 -14
  76. package/LICENSE +0 -155
@@ -1,5 +1,5 @@
1
- import { ModuleType } from "../../helpers/constants.mjs";
2
1
  import { BaseModule } from "../modules/BaseModule.mjs";
2
+ import { ModuleType } from "../../helpers/constants.mjs";
3
3
  import { BaseModuleValidator } from "../validation/BaseModuleValidator.mjs";
4
4
  import { PostconditionModule } from "../modules/PostconditionModule.mjs";
5
5
  import { PreconditionModule } from "../modules/PreconditionModule.mjs";
@@ -11,13 +11,14 @@ import { CommandModuleValidator } from "../validation/CommandModuleValidator.mjs
11
11
  import { EventModuleValidator } from "../validation/EventModuleValidator.mjs";
12
12
  import { PreconditionModuleValidator } from "../validation/PreconditionModule.mjs";
13
13
  import { PostconditionModuleValidator } from "../validation/PostconditionModule.mjs";
14
- import path from "node:path";
15
- import { colors, recursiveDefaults } from "@reciple/utils";
14
+ import path$1 from "node:path";
15
+ import { recursiveDefaults } from "@reciple/utils";
16
16
  import { mkdir, readdir, stat } from "node:fs/promises";
17
+ import { colors } from "@prtty/prtty";
17
18
  import { CommandType, RecipleError } from "@reciple/core";
18
19
  import "discord.js";
19
20
  import micromatch from "micromatch";
20
- import { globby, isDynamicPattern } from "globby";
21
+ import { globby as globby$1, isDynamicPattern } from "globby";
21
22
  import { EventEmitter } from "node:events";
22
23
 
23
24
  //#region src/classes/client/ModuleLoader.ts
@@ -29,22 +30,22 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
29
30
  this.logger = this.client.logger.clone({ label: "ModuleLoader" });
30
31
  }
31
32
  async findModules(ignoreErrors = false) {
32
- const modulePaths = await ModuleLoader.scanForModules(this.client.config?.modules);
33
+ const modulePaths = await ModuleLoader.scanForModulePaths(this.client.config?.modules);
33
34
  const modules = [];
34
35
  this.emit("modulesResolving", modulePaths);
35
- for (const path$1 of modulePaths) try {
36
- this.emit("moduleResolving", path$1);
37
- const resolved = await ModuleLoader.resolveModulePath(path$1);
36
+ for (const path of modulePaths) try {
37
+ this.emit("moduleResolving", path);
38
+ const resolved = await ModuleLoader.resolveModuleFromPath(path);
38
39
  Object.assign(resolved, {
39
40
  client: this.client,
40
- __$filepath: path$1
41
+ __$filepath: path
41
42
  });
42
43
  modules.push(resolved);
43
44
  this.emit("moduleResolved", resolved);
44
45
  } catch (error) {
45
46
  if (ignoreErrors) continue;
46
47
  this.emitOrThrow("moduleResolveError", new RecipleError({
47
- message: `Failed to load module: ${colors.cyan(path$1)}`,
48
+ message: `Failed to load module: ${colors.cyan(path)}`,
48
49
  cause: error
49
50
  }));
50
51
  }
@@ -57,7 +58,7 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
57
58
  let directories = [];
58
59
  for (const directory of config?.directories ?? []) {
59
60
  if (isDynamicPattern(directory, { cwd })) {
60
- const matches = await globby(directory, {
61
+ const matches = await globby$1(directory, {
61
62
  cwd,
62
63
  ignore: config?.ignore,
63
64
  onlyDirectories: true,
@@ -67,7 +68,7 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
67
68
  scanned.push(...matches);
68
69
  continue;
69
70
  }
70
- scanned.push(path.join(cwd, directory));
71
+ scanned.push(path$1.join(cwd, directory));
71
72
  }
72
73
  for (const directory of scanned) {
73
74
  if (!await stat(directory).catch(() => void 0) && config?.createDirectories !== false) await mkdir(directory, { recursive: true });
@@ -75,7 +76,7 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
75
76
  }
76
77
  return directories;
77
78
  }
78
- static async scanForModules(config) {
79
+ static async scanForModulePaths(config) {
79
80
  const directories = await ModuleLoader.scanForDirectories(config);
80
81
  let modules = [];
81
82
  for (const directory of directories) {
@@ -85,7 +86,7 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
85
86
  matchBase: true,
86
87
  dot: true
87
88
  });
88
- files = files.map((f) => path.join(directory, f));
89
+ files = files.map((f) => path$1.join(directory, f));
89
90
  for (const file of files) {
90
91
  if (config?.filter ? !await config?.filter(file) : ModuleLoader.fileTypes.every((type) => !file.endsWith(`.${type}`))) continue;
91
92
  modules.push(file);
@@ -94,11 +95,11 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
94
95
  if (config?.sort) modules.sort(config.sort);
95
96
  return modules;
96
97
  }
97
- static async resolveModulePath(filepath, options) {
98
+ static async resolveModuleFromPath(filepath, options) {
98
99
  if (!await stat(filepath).catch(() => void 0)) throw new RecipleError(`Module not found: ${filepath}`);
99
- const data = recursiveDefaults(await import(`file://${path.resolve(options?.cwd ?? process.cwd(), filepath)}`));
100
+ const data = recursiveDefaults(await import(`file://${path$1.resolve(options?.cwd ?? process.cwd(), filepath)}`));
100
101
  if (BaseModule.isModule(data)) return data;
101
- switch (data?.moduleType) {
102
+ if (data && "moduleType" in data) switch (data?.moduleType) {
102
103
  case ModuleType.Command:
103
104
  CommandModuleValidator.isValid(data);
104
105
  switch (data.type) {
@@ -116,17 +117,18 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
116
117
  case ModuleType.Postcondition:
117
118
  PostconditionModuleValidator.isValid(data);
118
119
  return PostconditionModule.from(data);
119
- case ModuleType.Base:
120
120
  default:
121
121
  BaseModuleValidator.isValid(data);
122
122
  return BaseModule.from(data);
123
123
  }
124
+ BaseModuleValidator.isValid(data);
125
+ return BaseModule.from(data);
124
126
  }
125
127
  static async resolveSourceDirectories(options) {
126
- const dir = path.isAbsolute(options.baseUrl) ? options.baseUrl : path.resolve(path.join(options.cwd ?? process.cwd(), options.baseUrl));
127
- const root = path.resolve(path.join(dir, options.rootDir));
128
- const out = path.resolve(path.join(dir, options.outDir));
129
- return options.directories.map((directory) => path.resolve(directory).replace(out, root));
128
+ const dir = path$1.isAbsolute(options.baseUrl) ? options.baseUrl : path$1.resolve(path$1.join(options.cwd ?? process.cwd(), options.baseUrl));
129
+ const root = path$1.resolve(path$1.join(dir, options.rootDir));
130
+ const out = path$1.resolve(path$1.join(dir, options.outDir));
131
+ return options.directories.map((directory) => path$1.resolve(directory).replace(out, root));
130
132
  }
131
133
  emitOrThrow(event, error) {
132
134
  if (this.client.listenerCount(event) > 0) return this.emit(event, error);
@@ -134,15 +136,15 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
134
136
  }
135
137
  };
136
138
  (function(_ModuleLoader) {
137
- let globby$1 = _ModuleLoader.globby = null;
139
+ let globby = _ModuleLoader.globby = null;
138
140
  _ModuleLoader.fileTypes = [
139
141
  "js",
140
142
  "mjs",
141
143
  "jsx"
142
144
  ];
143
145
  async function getGlobby() {
144
- if (globby$1) return globby$1;
145
- return globby$1 = await import("globby");
146
+ if (globby) return globby;
147
+ return globby = await import("globby");
146
148
  }
147
149
  _ModuleLoader.getGlobby = getGlobby;
148
150
  })(ModuleLoader || (ModuleLoader = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleLoader.mjs","names":["client: Client","modules: AnyModule[]","path","scanned: string[]","directories: string[]","modules: string[]","globby: typeof import('globby')|null","globby"],"sources":["../../../src/classes/client/ModuleLoader.ts"],"sourcesContent":["import { type Awaitable } from 'discord.js';\nimport path from 'node:path';\nimport { mkdir, readdir, stat } from 'node:fs/promises';\nimport micromatch from 'micromatch';\nimport { globby, isDynamicPattern } from 'globby';\nimport { CommandType, RecipleError, type Client } from '@reciple/core';\nimport type { AnyModule, AnyModuleData } from '../../helpers/types.js';\nimport { colors, recursiveDefaults } from '@reciple/utils';\nimport { BaseModule } from '../modules/BaseModule.js';\nimport { BaseModuleValidator } from '../validation/BaseModuleValidator.js';\nimport { ModuleType } from '../../helpers/constants.js';\nimport { PostconditionModule } from '../modules/PostconditionModule.js';\nimport { PreconditionModule } from '../modules/PreconditionModule.js';\nimport { EventModule } from '../modules/events/EventModule.js';\nimport { MessageCommandModule } from '../modules/commands/MessageCommandModule.js';\nimport { SlashCommandModule } from '../modules/commands/SlashCommandModule.js';\nimport { ContextMenuCommandModule } from '../modules/commands/ContextMenuCommandModule.js';\nimport { CommandModuleValidator } from '../validation/CommandModuleValidator.js';\nimport { EventModuleValidator } from '../validation/EventModuleValidator.js';\nimport { PreconditionModuleValidator } from '../validation/PreconditionModule.js';\nimport { PostconditionModuleValidator } from '../validation/PostconditionModule.js';\nimport type { Logger } from 'prtyprnt';\nimport { EventEmitter } from 'node:events';\n\nexport class ModuleLoader extends EventEmitter<ModuleLoader.Events> {\n public readonly logger: Logger;\n\n constructor(public readonly client: Client) {\n super();\n\n this.logger = this.client.logger.clone({\n label: 'ModuleLoader'\n });\n }\n\n public async findModules(ignoreErrors: boolean = false): Promise<AnyModule[]> {\n const modulePaths = await ModuleLoader.scanForModules(this.client.config?.modules);\n const modules: AnyModule[] = [];\n\n this.emit('modulesResolving', modulePaths);\n\n for (const path of modulePaths) {\n try {\n this.emit('moduleResolving', path);\n const resolved = await ModuleLoader.resolveModulePath(path);\n\n Object.assign(resolved, { client: this.client, __$filepath: path });\n modules.push(resolved);\n\n this.emit('moduleResolved', resolved);\n } catch (error) {\n if (ignoreErrors) continue;\n\n this.emitOrThrow('moduleResolveError', new RecipleError({\n message: `Failed to load module: ${colors.cyan(path)}`,\n cause: error\n }));\n }\n }\n\n this.emit('modulesResolved', modules);\n return modules;\n }\n\n public static async scanForDirectories(config?: Pick<ModuleLoader.Config, 'directories'|'ignore'> & { cwd?: string; createDirectories?: boolean; }) {\n const cwd = config?.cwd ?? process.cwd();\n\n let scanned: string[] = [];\n let directories: string[] = [];\n\n for (const directory of config?.directories ?? []) {\n if (isDynamicPattern(directory, { cwd })) {\n const matches = await globby(directory, {\n cwd,\n ignore: config?.ignore,\n onlyDirectories: true,\n baseNameMatch: true,\n absolute: true\n });\n\n scanned.push(...matches);\n continue;\n }\n\n scanned.push(path.join(cwd, directory));\n }\n\n for (const directory of scanned) {\n const stats = await stat(directory).catch(() => undefined);\n\n if (!stats && config?.createDirectories !== false) {\n await mkdir(directory, { recursive: true });\n }\n\n directories.push(directory);\n }\n\n return directories;\n }\n\n public static async scanForModules(config?: ModuleLoader.Config & { cwd?: string; createDirectories?: boolean; }): Promise<string[]> {\n const directories = await ModuleLoader.scanForDirectories(config);\n\n let modules: string[] = [];\n\n for (const directory of directories) {\n let files = await readdir(directory);\n\n if (config?.ignore?.length) {\n files = micromatch.not(files, config.ignore, {\n cwd: directory,\n matchBase: true,\n dot: true\n });\n }\n\n files = files.map(f => path.join(directory, f));\n\n for (const file of files) {\n if (config?.filter ? !(await config?.filter(file)) : ModuleLoader.fileTypes.every(type => !file.endsWith(`.${type}`))) continue;\n modules.push(file);\n }\n }\n\n if (config?.sort) modules.sort(config.sort);\n\n return modules;\n }\n\n public static async resolveModulePath(filepath: string, options?: { cwd?: string; }): Promise<AnyModule> {\n const stats = await stat(filepath).catch(() => undefined);\n if (!stats) throw new RecipleError(`Module not found: ${filepath}`);\n\n const data = recursiveDefaults<AnyModule|AnyModuleData|undefined>(await import(`file://${path.resolve(options?.cwd ?? process.cwd(), filepath)}`));\n if (BaseModule.isModule(data)) return data;\n\n switch (data?.moduleType) {\n case ModuleType.Command:\n CommandModuleValidator.isValid(data);\n switch (data.type) {\n case CommandType.Message: return MessageCommandModule.from(data);\n case CommandType.Slash: return SlashCommandModule.from(data);\n case CommandType.ContextMenu: return ContextMenuCommandModule.from(data);\n default: throw new RecipleError(`Unknown command type from module: ${colors.cyan(filepath)}`);\n }\n case ModuleType.Event:\n EventModuleValidator.isValid(data);\n return EventModule.from(data);\n case ModuleType.Precondition:\n PreconditionModuleValidator.isValid(data);\n return PreconditionModule.from(data);\n case ModuleType.Postcondition:\n PostconditionModuleValidator.isValid(data);\n return PostconditionModule.from(data);\n case ModuleType.Base:\n default:\n BaseModuleValidator.isValid(data);\n return BaseModule.from(data);\n }\n }\n\n public static async resolveSourceDirectories(options: ModuleLoader.ResolveSourceDirectoryOptions): Promise<string[]> {\n const dir = path.isAbsolute(options.baseUrl) ? options.baseUrl : path.resolve(path.join(options.cwd ?? process.cwd(), options.baseUrl));\n\n const root = path.resolve(path.join(dir, options.rootDir));\n const out = path.resolve(path.join(dir, options.outDir));\n\n return options.directories.map(directory => path.resolve(directory).replace(out, root));\n }\n\n private emitOrThrow<K extends keyof Pick<ModuleLoader.Events, 'moduleResolveError'>>(event: K, error: RecipleError) {\n if (this.client.listenerCount(event) > 0) {\n // @ts-expect-error\n return this.emit(event, error);\n }\n\n throw error;\n }\n}\n\nexport namespace ModuleLoader {\n export let globby: typeof import('globby')|null = null;\n\n export const fileTypes = [\n 'js',\n 'mjs',\n 'jsx'\n ];\n\n export interface Config {\n directories?: string[];\n ignore?: string[];\n filter?: (filepath: string) => Awaitable<boolean>;\n sort?: (a: string, b: string) => number;\n }\n\n export interface Events {\n moduleResolveError: [error: RecipleError];\n moduleResolved: [module: AnyModule];\n moduleResolving: [filepath: string];\n modulesResolved: [modules: AnyModule[]];\n modulesResolving: [files: string[]];\n }\n\n export interface ResolveSourceDirectoryOptions {\n directories: string[];\n baseUrl: string;\n rootDir: string;\n outDir: string;\n cwd?: string;\n }\n\n export async function getGlobby(): Promise<typeof import('globby')> {\n if (globby) return globby;\n\n return globby = await import('globby');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ModuleLoader.mjs","names":["globby","path"],"sources":["../../../src/classes/client/ModuleLoader.ts"],"sourcesContent":["import { type Awaitable } from 'discord.js';\nimport path from 'node:path';\nimport { mkdir, readdir, stat } from 'node:fs/promises';\nimport micromatch from 'micromatch';\nimport { globby, isDynamicPattern } from 'globby';\nimport { CommandType, RecipleError, type Client } from '@reciple/core';\nimport type { AnyModule, AnyModuleData } from '../../helpers/types.js';\nimport { recursiveDefaults } from '@reciple/utils';\nimport { BaseModule } from '../modules/BaseModule.js';\nimport { BaseModuleValidator } from '../validation/BaseModuleValidator.js';\nimport { ModuleType } from '../../helpers/constants.js';\nimport { PostconditionModule } from '../modules/PostconditionModule.js';\nimport { PreconditionModule } from '../modules/PreconditionModule.js';\nimport { EventModule } from '../modules/events/EventModule.js';\nimport { MessageCommandModule } from '../modules/commands/MessageCommandModule.js';\nimport { SlashCommandModule } from '../modules/commands/SlashCommandModule.js';\nimport { ContextMenuCommandModule } from '../modules/commands/ContextMenuCommandModule.js';\nimport { CommandModuleValidator } from '../validation/CommandModuleValidator.js';\nimport { EventModuleValidator } from '../validation/EventModuleValidator.js';\nimport { PreconditionModuleValidator } from '../validation/PreconditionModule.js';\nimport { PostconditionModuleValidator } from '../validation/PostconditionModule.js';\nimport type { Logger } from '@prtty/print';\nimport { EventEmitter } from 'node:events';\nimport { colors } from '@prtty/prtty';\n\nexport class ModuleLoader extends EventEmitter<ModuleLoader.Events> {\n public readonly logger: Logger;\n\n constructor(public readonly client: Client) {\n super();\n\n this.logger = this.client.logger.clone({\n label: 'ModuleLoader'\n });\n }\n\n public async findModules(ignoreErrors: boolean = false): Promise<AnyModule[]> {\n const modulePaths = await ModuleLoader.scanForModulePaths(this.client.config?.modules);\n const modules: AnyModule[] = [];\n\n this.emit('modulesResolving', modulePaths);\n\n for (const path of modulePaths) {\n try {\n this.emit('moduleResolving', path);\n const resolved = await ModuleLoader.resolveModuleFromPath(path);\n\n Object.assign(resolved, { client: this.client, __$filepath: path });\n modules.push(resolved);\n\n this.emit('moduleResolved', resolved);\n } catch (error) {\n if (ignoreErrors) continue;\n\n this.emitOrThrow('moduleResolveError', new RecipleError({\n message: `Failed to load module: ${colors.cyan(path)}`,\n cause: error\n }));\n }\n }\n\n this.emit('modulesResolved', modules);\n return modules;\n }\n\n public static async scanForDirectories(config?: Pick<ModuleLoader.Config, 'directories'|'ignore'> & { cwd?: string; createDirectories?: boolean; }) {\n const cwd = config?.cwd ?? process.cwd();\n\n let scanned: string[] = [];\n let directories: string[] = [];\n\n for (const directory of config?.directories ?? []) {\n if (isDynamicPattern(directory, { cwd })) {\n const matches = await globby(directory, {\n cwd,\n ignore: config?.ignore,\n onlyDirectories: true,\n baseNameMatch: true,\n absolute: true\n });\n\n scanned.push(...matches);\n continue;\n }\n\n scanned.push(path.join(cwd, directory));\n }\n\n for (const directory of scanned) {\n const stats = await stat(directory).catch(() => undefined);\n\n if (!stats && config?.createDirectories !== false) {\n await mkdir(directory, { recursive: true });\n }\n\n directories.push(directory);\n }\n\n return directories;\n }\n\n public static async scanForModulePaths(config?: ModuleLoader.Config & { cwd?: string; createDirectories?: boolean; }): Promise<string[]> {\n const directories = await ModuleLoader.scanForDirectories(config);\n\n let modules: string[] = [];\n\n for (const directory of directories) {\n let files = await readdir(directory);\n\n if (config?.ignore?.length) {\n files = micromatch.not(files, config.ignore, {\n cwd: directory,\n matchBase: true,\n dot: true\n });\n }\n\n files = files.map(f => path.join(directory, f));\n\n for (const file of files) {\n if (config?.filter ? !(await config?.filter(file)) : ModuleLoader.fileTypes.every(type => !file.endsWith(`.${type}`))) continue;\n modules.push(file);\n }\n }\n\n if (config?.sort) modules.sort(config.sort);\n\n return modules;\n }\n\n public static async resolveModuleFromPath(filepath: string, options?: { cwd?: string; }): Promise<AnyModule> {\n const stats = await stat(filepath).catch(() => undefined);\n if (!stats) throw new RecipleError(`Module not found: ${filepath}`);\n\n const data = recursiveDefaults<AnyModule|AnyModuleData|undefined>(await import(`file://${path.resolve(options?.cwd ?? process.cwd(), filepath)}`));\n if (BaseModule.isModule(data)) return data;\n\n if (data && 'moduleType' in data) {\n switch (data?.moduleType) {\n case ModuleType.Command:\n CommandModuleValidator.isValid(data);\n switch (data.type) {\n case CommandType.Message: return MessageCommandModule.from(data);\n case CommandType.Slash: return SlashCommandModule.from(data);\n case CommandType.ContextMenu: return ContextMenuCommandModule.from(data);\n default: throw new RecipleError(`Unknown command type from module: ${colors.cyan(filepath)}`);\n }\n case ModuleType.Event:\n EventModuleValidator.isValid(data);\n return EventModule.from(data);\n case ModuleType.Precondition:\n PreconditionModuleValidator.isValid(data);\n return PreconditionModule.from(data);\n case ModuleType.Postcondition:\n PostconditionModuleValidator.isValid(data);\n return PostconditionModule.from(data);\n default:\n BaseModuleValidator.isValid(data);\n return BaseModule.from(data);\n }\n }\n\n BaseModuleValidator.isValid(data);\n return BaseModule.from(data);\n }\n\n public static async resolveSourceDirectories(options: ModuleLoader.ResolveSourceDirectoryOptions): Promise<string[]> {\n const dir = path.isAbsolute(options.baseUrl) ? options.baseUrl : path.resolve(path.join(options.cwd ?? process.cwd(), options.baseUrl));\n\n const root = path.resolve(path.join(dir, options.rootDir));\n const out = path.resolve(path.join(dir, options.outDir));\n\n return options.directories.map(directory => path.resolve(directory).replace(out, root));\n }\n\n private emitOrThrow<K extends keyof Pick<ModuleLoader.Events, 'moduleResolveError'>>(event: K, error: RecipleError) {\n if (this.client.listenerCount(event) > 0) {\n // @ts-expect-error\n return this.emit(event, error);\n }\n\n throw error;\n }\n}\n\nexport namespace ModuleLoader {\n export let globby: typeof import('globby')|null = null;\n\n export const fileTypes = [\n 'js',\n 'mjs',\n 'jsx'\n ];\n\n export interface Config {\n directories?: string[];\n ignore?: string[];\n filter?: (filepath: string) => Awaitable<boolean>;\n sort?: (a: string, b: string) => number;\n }\n\n export interface Events {\n moduleResolveError: [error: RecipleError];\n moduleResolved: [module: AnyModule];\n moduleResolving: [filepath: string];\n modulesResolved: [modules: AnyModule[]];\n modulesResolving: [files: string[]];\n }\n\n export interface ResolveSourceDirectoryOptions {\n directories: string[];\n baseUrl: string;\n rootDir: string;\n outDir: string;\n cwd?: string;\n }\n\n export async function getGlobby(): Promise<typeof import('globby')> {\n if (globby) return globby;\n\n return globby = await import('globby');\n }\n}\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import { ModuleType } from "../../helpers/constants.mjs";
2
1
  import { BaseModule } from "../modules/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.110.0/helpers/decorate.mjs";
4
4
  import { BaseManager, RecipleError } from "@reciple/core";
5
5
  import { mix } from "ts-mixer";
6
6
  import { EventEmitter } from "node:events";
7
7
 
8
8
  //#region src/classes/managers/ModuleManager.ts
9
- let ModuleManager = class ModuleManager$1 {
9
+ let ModuleManager = class ModuleManager {
10
10
  holds = BaseModule;
11
11
  constructor(client) {
12
12
  this.client = client;
@@ -59,6 +59,7 @@ let ModuleManager = class ModuleManager$1 {
59
59
  }
60
60
  add(module) {
61
61
  this.cache.set(module.id, module);
62
+ if (!("moduleType" in module)) return;
62
63
  switch (module.moduleType) {
63
64
  case ModuleType.Command:
64
65
  this.client.commands?.add(module);
@@ -72,12 +73,12 @@ let ModuleManager = class ModuleManager$1 {
72
73
  case ModuleType.Postcondition:
73
74
  this.client.postconditions?.cache.set(module.id, module);
74
75
  break;
75
- case ModuleType.Base:
76
76
  default: break;
77
77
  }
78
78
  }
79
79
  remove(module) {
80
80
  this.cache.delete(module.id);
81
+ if (!("moduleType" in module)) return;
81
82
  switch (module.moduleType) {
82
83
  case ModuleType.Command:
83
84
  this.client.commands?.cache.delete(module.id);
@@ -91,7 +92,6 @@ let ModuleManager = class ModuleManager$1 {
91
92
  case ModuleType.Postcondition:
92
93
  this.client.postconditions?.cache.delete(module.id);
93
94
  break;
94
- case ModuleType.Base:
95
95
  default: break;
96
96
  }
97
97
  }
@@ -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.110.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.110.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.110.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.110.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.110.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 };