reciple 10.0.42 → 10.0.44
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.
- package/assets/global/nodemon.json +3 -0
- package/dist/_virtual/{_@oxc-project_runtime@0.115.0 → _@oxc-project_runtime@0.122.0}/helpers/decorate.mjs +1 -1
- package/dist/bin/commands/build.d.mts +1 -2
- package/dist/bin/commands/build.mjs +1 -2
- package/dist/bin/commands/create.d.mts +1 -2
- package/dist/bin/commands/create.mjs +1 -2
- package/dist/bin/commands/createModule.d.mts +1 -2
- package/dist/bin/commands/createModule.mjs +1 -2
- package/dist/bin/commands/start.d.mts +1 -2
- package/dist/bin/commands/start.mjs +1 -2
- package/dist/bin/commands/startSharding.d.mts +1 -2
- package/dist/bin/commands/startSharding.mjs +1 -2
- package/dist/bin/reciple.mjs +1 -2
- package/dist/classes/NotAnError.d.mts +1 -2
- package/dist/classes/NotAnError.mjs +1 -2
- package/dist/classes/cli/CLI.d.mts +1 -2
- package/dist/classes/cli/CLI.mjs +2 -3
- package/dist/classes/cli/CLISubcommand.d.mts +1 -2
- package/dist/classes/cli/CLISubcommand.mjs +1 -2
- package/dist/classes/cli/ConfigReader.d.mts +1 -2
- package/dist/classes/cli/ConfigReader.mjs +1 -2
- package/dist/classes/cli/RuntimeEnvironment.d.mts +1 -2
- package/dist/classes/cli/RuntimeEnvironment.mjs +1 -2
- package/dist/classes/client/EventListeners.d.mts +1 -2
- package/dist/classes/client/EventListeners.mjs +1 -2
- package/dist/classes/client/ModuleLoader.d.mts +1 -2
- package/dist/classes/client/ModuleLoader.mjs +1 -2
- package/dist/classes/managers/ModuleManager.d.mts +1 -2
- package/dist/classes/managers/ModuleManager.mjs +2 -3
- package/dist/classes/modules/BaseModule.d.mts +1 -2
- package/dist/classes/modules/BaseModule.mjs +1 -2
- package/dist/classes/modules/PostconditionModule.d.mts +1 -2
- package/dist/classes/modules/PostconditionModule.mjs +2 -3
- package/dist/classes/modules/PreconditionModule.d.mts +1 -2
- package/dist/classes/modules/PreconditionModule.mjs +2 -3
- package/dist/classes/modules/commands/ContextMenuCommandModule.d.mts +1 -2
- package/dist/classes/modules/commands/ContextMenuCommandModule.mjs +2 -3
- package/dist/classes/modules/commands/MessageCommandModule.d.mts +1 -2
- package/dist/classes/modules/commands/MessageCommandModule.mjs +2 -3
- package/dist/classes/modules/commands/SlashCommandModule.d.mts +1 -2
- package/dist/classes/modules/commands/SlashCommandModule.mjs +2 -3
- package/dist/classes/modules/events/ClientEventModule.d.mts +1 -2
- package/dist/classes/modules/events/ClientEventModule.mjs +1 -2
- package/dist/classes/modules/events/EventModule.d.mts +3 -5
- package/dist/classes/modules/events/EventModule.mjs +1 -2
- package/dist/classes/modules/events/RESTEventModule.d.mts +1 -2
- package/dist/classes/modules/events/RESTEventModule.mjs +1 -2
- package/dist/classes/templates/ModuleTemplateBuilder.d.mts +1 -2
- package/dist/classes/templates/ModuleTemplateBuilder.mjs +1 -2
- package/dist/classes/templates/TemplateBuilder.d.mts +1 -2
- package/dist/classes/templates/TemplateBuilder.mjs +1 -2
- package/dist/classes/validation/BaseModuleValidator.d.mts +11 -12
- package/dist/classes/validation/BaseModuleValidator.mjs +1 -2
- package/dist/classes/validation/CommandModuleValidator.d.mts +23 -24
- package/dist/classes/validation/CommandModuleValidator.mjs +1 -2
- package/dist/classes/validation/EventModuleValidator.d.mts +11 -12
- package/dist/classes/validation/EventModuleValidator.mjs +1 -2
- package/dist/classes/validation/PostconditionModule.d.mts +9 -10
- package/dist/classes/validation/PostconditionModule.mjs +1 -2
- package/dist/classes/validation/PreconditionModule.d.mts +8 -9
- package/dist/classes/validation/PreconditionModule.mjs +1 -2
- package/dist/helpers/constants.d.mts +1 -2
- package/dist/helpers/constants.mjs +1 -2
- package/dist/helpers/types.d.mts +1 -2
- package/dist/index.d.mts +1 -2
- package/dist/index.mjs +1 -2
- package/dist/package.mjs +4 -5
- package/package.json +8 -8
- package/dist/bin/commands/build.mjs.map +0 -1
- package/dist/bin/commands/create.mjs.map +0 -1
- package/dist/bin/commands/createModule.mjs.map +0 -1
- package/dist/bin/commands/start.mjs.map +0 -1
- package/dist/bin/commands/startSharding.mjs.map +0 -1
- package/dist/bin/reciple.mjs.map +0 -1
- package/dist/classes/NotAnError.mjs.map +0 -1
- package/dist/classes/cli/CLI.mjs.map +0 -1
- package/dist/classes/cli/CLISubcommand.mjs.map +0 -1
- package/dist/classes/cli/ConfigReader.mjs.map +0 -1
- package/dist/classes/cli/RuntimeEnvironment.mjs.map +0 -1
- package/dist/classes/client/EventListeners.mjs.map +0 -1
- package/dist/classes/client/ModuleLoader.mjs.map +0 -1
- package/dist/classes/managers/ModuleManager.mjs.map +0 -1
- package/dist/classes/modules/BaseModule.mjs.map +0 -1
- package/dist/classes/modules/PostconditionModule.mjs.map +0 -1
- package/dist/classes/modules/PreconditionModule.mjs.map +0 -1
- package/dist/classes/modules/commands/ContextMenuCommandModule.mjs.map +0 -1
- package/dist/classes/modules/commands/MessageCommandModule.mjs.map +0 -1
- package/dist/classes/modules/commands/SlashCommandModule.mjs.map +0 -1
- package/dist/classes/modules/events/ClientEventModule.mjs.map +0 -1
- package/dist/classes/modules/events/EventModule.mjs.map +0 -1
- package/dist/classes/modules/events/RESTEventModule.mjs.map +0 -1
- package/dist/classes/templates/ModuleTemplateBuilder.mjs.map +0 -1
- package/dist/classes/templates/TemplateBuilder.mjs.map +0 -1
- package/dist/classes/validation/BaseModuleValidator.mjs.map +0 -1
- package/dist/classes/validation/CommandModuleValidator.mjs.map +0 -1
- package/dist/classes/validation/EventModuleValidator.mjs.map +0 -1
- package/dist/classes/validation/PostconditionModule.mjs.map +0 -1
- package/dist/classes/validation/PreconditionModule.mjs.map +0 -1
- package/dist/helpers/constants.mjs.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/package.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModuleLoader.mjs","names":[],"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 { glob, isDynamicPattern } from 'tinyglobby';\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)) {\n const matches = await glob(directory, {\n cwd,\n ignore: config?.ignore,\n onlyDirectories: 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 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"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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(\n { modules, removeFromCacheOnError }: ModuleManager.EventExecuteData & { removeFromCacheOnError?: boolean; } = {}\n ): Promise<AnyModule[]> {\n const enabledModules: AnyModule[] = [];\n\n for (const module of modules ?? this.cache.values()) {\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(\n { modules, removeFromCacheOnError }: ModuleManager.EventExecuteData & { removeFromCacheOnError?: boolean; } = {}\n ): 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 ?? this.cache.values()) {\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(\n { modules, removeFromCache }: ModuleManager.EventExecuteData & { removeFromCache?: boolean; } = {}\n ): Promise<AnyModule[]> {\n const disabledModules: AnyModule[] = [];\n\n for (const module of modules ?? this.cache.values()) {\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 +0,0 @@
|
|
|
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;;;CAI9C;2BAGwB;mCAY9B"}
|
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
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'|'onEnable'|'onReady'|'onDisable'>, ContextMenuCommandModule.ContextMenuCommandWithoutBuilderMethods {\n onEnable(data: BaseModule.EventData<boolean>): Promise<void>;\n onReady(data: BaseModule.EventData<true>): Promise<void>;\n onDisable(data: BaseModule.EventData<boolean>): Promise<void>;\n}\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":";;;;;;;;;AAcO,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 +0,0 @@
|
|
|
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'|'onEnable'|'onReady'|'onDisable'>, MessageCommandModule.MessageCommandWithoutBuilderMethods {\n onEnable(data: BaseModule.EventData<boolean>): Promise<void>;\n onReady(data: BaseModule.EventData<true>): Promise<void>;\n onDisable(data: BaseModule.EventData<boolean>): Promise<void>;\n}\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\nclass Test extends MessageCommandModule {\n public data: MessageCommandBuilder.Data = new MessageCommandBuilder()\n .toJSON();\n\n public async execute(data: MessageCommand.ExecuteData): Promise<void> {\n \n }\n}\n"],"mappings":";;;;;;;;;AAcO,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 +0,0 @@
|
|
|
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'|'onEnable'|'onReady'|'onDisable'>, SlashCommandModule.SlashCommandWithoutBuilderMethods {\n onEnable(data: BaseModule.EventData<boolean>): Promise<void>;\n onReady(data: BaseModule.EventData<true>): Promise<void>;\n onDisable(data: BaseModule.EventData<boolean>): Promise<void>;\n}\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":";;;;;;;;;AAcO,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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ClientEventModule.mjs","names":[],"sources":["../../../../src/classes/modules/events/ClientEventModule.ts"],"sourcesContent":["import type { Client } from '@reciple/core';\nimport { EventModule } from './EventModule.js';\n\nexport abstract class ClientEventModule<Event extends keyof Client.Events> extends EventModule<Client.Events, Event> {\n public emitter: Client = useClient();\n public abstract event: Event;\n}\n"],"mappings":";;;AAGA,IAAsB,oBAAtB,cAAmF,YAAkC;CACjH,AAAO,UAAkB,WAAW"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RESTEventModule.mjs","names":[],"sources":["../../../../src/classes/modules/events/RESTEventModule.ts"],"sourcesContent":["import { EventModule } from './EventModule.js';\nimport type { REST, RestEventsMap } from 'discord.js';\n\nexport abstract class RESTEventModule<Event extends keyof RestEventsMap> extends EventModule<RestEventsMap, Event> {\n public emitter: REST = useClient().rest;\n public abstract event: Event;\n}\n"],"mappings":";;;AAGA,IAAsB,kBAAtB,cAAiF,YAAkC;CAC/G,AAAO,UAAgB,WAAW,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ModuleTemplateBuilder.mjs","names":[],"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(defaultValues?: Partial<Record<keyof typeof ModuleTemplateBuilder.Placeholder, string>>): 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 = defaultValues?.[placeholderKey] ?? 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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateBuilder.mjs","names":["parseDotenv"],"sources":["../../../src/classes/templates/TemplateBuilder.ts"],"sourcesContent":["import { isDebugging, PackageJsonBuilder } from '@reciple/utils';\nimport { ConfigReader } from '../cli/ConfigReader.js';\nimport { copyFile, mkdir, readdir, readFile, stat, writeFile } from 'node:fs/promises';\nimport { confirm, intro, isCancel, outro, select, text, log, password } from '@clack/prompts';\nimport micromatch from 'micromatch';\nimport { CLI } from '../cli/CLI.js';\nimport path from 'node:path';\nimport { existsSync, statSync } from 'node:fs';\nimport { NotAnError } from '../NotAnError.js';\nimport { slug } from 'github-slugger';\nimport { packageJSON } from '../../helpers/constants.js';\nimport { parse as parseDotenv } from '@dotenvx/dotenvx';\nimport { ModuleTemplateBuilder } from './ModuleTemplateBuilder.js';\nimport { detectPackageManager, installDependencies, installDependenciesCommand, runScript, runScriptCommand, type PackageManagerName } from 'nypm';\nimport { colors } from '@prtty/prtty';\n\nexport class TemplateBuilder {\n public originalCwd: string = process.cwd();\n\n public cli: CLI;\n public typescript?: boolean;\n public token?: string;\n public defaultAll: boolean;\n\n public config?: ConfigReader;\n public packageJson?: PackageJsonBuilder;\n\n public packageManager?: PackageManagerName;\n public dependenciesInstalled: boolean = false;\n\n get relativeDirectory() {\n return path.relative(this.originalCwd, process.cwd());\n }\n\n get packageJsonPath() {\n return path.join(process.cwd(), 'package.json');\n }\n\n get name() {\n return slug(path.basename(process.cwd()));\n }\n\n constructor(options: TemplateBuilder.Options) {\n this.cli = options.cli;\n this.typescript = options.typescript;\n this.defaultAll = options.defaultAll ?? false;\n this.packageManager = options.packageManager;\n this.token = options.token;\n }\n\n public async init(): Promise<this> {\n intro(colors.bold().black().bgCyan(` ${this.cli.command.name()} create - v${this.cli.build} `));\n return this;\n }\n\n public async createDirectory(options?: TemplateBuilder.CreateDirectoryOptions): Promise<this> {\n let cwd: string = this.originalCwd;\n\n if (!options?.directory) {\n const dir = this.defaultAll\n ? process.cwd()\n : await text({\n message: `Enter project directory`,\n placeholder: `Leave empty to use current directory`,\n defaultValue: process.cwd(),\n validate: value => {\n value = path.resolve(value ?? '');\n if (existsSync(value) && !statSync(value).isDirectory()) return 'Invalid folder directory';\n }\n });\n\n if (isCancel(dir)) throw new NotAnError('Operation cancelled');\n\n cwd = path.resolve(dir);\n } else {\n cwd = path.resolve(options.directory);\n }\n\n const stats = await stat(cwd).catch(() => undefined);\n const relative = path.relative(process.cwd(), cwd);\n\n if (stats) {\n let files = await readdir(cwd);\n files = micromatch.not(files, options?.ignoredFiles ?? TemplateBuilder.ignoredDirectoryFiles, { dot: true });\n\n if (files.length) {\n switch (options?.onNotEmpty) {\n case 'throw':\n throw new NotAnError(`Directory ${colors.cyan(relative)} is not empty`);\n case 'ignore':\n return this;\n default:\n const overwrite = this.defaultAll\n ? false\n : await confirm({\n message: `Directory ${colors.cyan(relative)} is not empty. Would you like to continue?`,\n active: 'Yes',\n inactive: 'No',\n initialValue: false\n });\n\n if (!overwrite) throw new NotAnError(`Directory ${colors.cyan(relative)} is not empty`);\n if (isCancel(overwrite)) throw new NotAnError('Operation cancelled');\n break;\n }\n }\n }\n\n await mkdir(cwd, { recursive: true });\n process.chdir(cwd);\n return this;\n }\n\n public async setupLanguage(options?: TemplateBuilder.SetupLanguageOptions): Promise<this> {\n this.typescript = options?.typescript ?? this.typescript;\n\n if (!this.typescript) {\n const isTypeScript = this.defaultAll\n ? false\n : await confirm({\n message: 'Would you like to use TypeScript?',\n active: 'Yes',\n inactive: 'No',\n initialValue: false\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 createEnvFile(options?: TemplateBuilder.CreateEnvFileOptions): Promise<this> {\n const tokenKey = options?.tokenKey ?? 'DISCORD_TOKEN';\n const envFile = options?.envFile ? path.resolve(options.envFile) : '.env';\n const stats = await stat(envFile).catch(() => undefined);\n\n let env = options?.env ?? {};\n env = stats\n ? parseDotenv(await readFile(envFile, 'utf-8'), {\n processEnv: env\n })\n : env;\n\n if (env[tokenKey]) {\n const skip = this.defaultAll || await confirm({\n message: 'Discord bot token already exists in .env file, do you want to skip?',\n initialValue: true,\n active: 'Yes',\n inactive: 'No'\n });\n\n if (isCancel(skip)) throw new NotAnError('Operation cancelled');\n if (skip) return this;\n }\n\n const token = await password({\n message: 'Enter Discord Bot Token',\n mask: '*'\n }) || env[tokenKey] || '';\n\n if (isCancel(token)) throw new NotAnError('Operation cancelled');\n\n env[tokenKey] = token;\n\n await writeFile(envFile, `\\n${tokenKey}=\"${token}\"\\n`, {\n encoding: 'utf-8',\n flag: 'a'\n });\n\n return this;\n }\n\n public async createConfig(options?: TemplateBuilder.CreateConfigOptions): Promise<this> {\n let filepath = options?.path;\n\n filepath ??= await ConfigReader.find({\n lang: this.typescript ? 'ts' : this.typescript === false ? 'js' : undefined\n }) ?? ConfigReader.createConfigFilename(this.typescript ? 'ts' : 'js');\n\n const exists = await ConfigReader.exists(filepath);\n\n if (exists) {\n const overwrite = this.defaultAll\n ? false\n : await confirm({\n message: `Config file already exists at ${colors.green(path.relative(process.cwd(), filepath))}. Would you like to overwrite it?`,\n active: 'Yes',\n inactive: 'No',\n initialValue: false\n });\n\n if (!overwrite) return this;\n if (isCancel(overwrite)) throw new NotAnError('Operation cancelled');\n }\n\n this.config = await ConfigReader.create({\n ...options,\n path: filepath,\n type: this.typescript ? 'ts' : 'js',\n overwrite: true,\n readOptions: false\n });\n\n return this;\n }\n\n public async createTemplate(options?: TemplateBuilder.CreateModulesOptions): Promise<this> {\n const source = path.join(CLI.root, './assets/templates/', this.typescript ? 'typescript' : 'javascript');\n const globals = path.join(CLI.root, './assets/global/');\n\n function rename(data: TemplateBuilder.CopyMetadata) {\n switch (data.basename) {\n case 'gitignore':\n return '.gitignore';\n default:\n return options?.rename?.(data) ?? data.basename;\n }\n }\n\n function overwrite(data: TemplateBuilder.CopyMetadata) {\n switch (data.basename) {\n case 'gitignore':\n return false;\n case 'tsconfig.json':\n case 'jsconfig.json':\n return true;\n default:\n return (typeof options?.overwrite === 'boolean' ? options.overwrite : options?.overwrite?.(data)) ?? true;\n }\n }\n\n const [template, loader] = CLI.createSpinnerPromise({\n promise: Promise.all([\n TemplateBuilder.copy(source, process.cwd(), { ...options, rename, overwrite }),\n TemplateBuilder.copy(globals, process.cwd(), { ...options, rename, overwrite })\n ]),\n message: 'Copying template files',\n successMessage: 'Files copied successfully',\n errorMessage: 'Failed to copy files'\n });\n\n await template;\n return this;\n }\n\n public async setPackageManager(options?: TemplateBuilder.SetPackageManagerOptions) {\n this.packageManager = options?.packageManager ?? this.packageManager;\n\n if (!this.packageManager) {\n const defaultPackageManager = await detectPackageManager(process.cwd()).then(pm => pm?.name ?? 'npm');\n const packageManager: PackageManagerName|symbol = this.defaultAll\n ? defaultPackageManager\n : await select({\n message: 'Select package manager',\n options: [\n { value: defaultPackageManager, label: defaultPackageManager },\n ...[\n { value: 'npm', label: 'npm' },\n { value: 'yarn', label: 'yarn' },\n { value: 'pnpm', label: 'pnpm' },\n { value: 'bun', label: 'bun' },\n { value: 'deno', label: 'deno' }\n ].filter(o => o.value !== defaultPackageManager) as { value: PackageManagerName; label: string; }[]\n ],\n initialValue: defaultPackageManager\n });\n\n if (isCancel(packageManager)) throw new NotAnError('Operation cancelled');\n this.packageManager = packageManager;\n }\n\n this.packageJson = await PackageJsonBuilder.read(this.packageJsonPath, true);\n this.packageJson.merge({\n name: this.name,\n private: true,\n type: 'module',\n scripts: {\n build: `reciple build`,\n start: 'reciple start',\n dev: 'nodemon',\n },\n ...TemplateBuilder.createDependencyRecord(this.typescript ? 'ts' : 'js'),\n });\n\n await this.packageJson?.write(this.packageJsonPath, true);\n\n return this;\n }\n\n public async installDependencies(options?: TemplateBuilder.InstallDependenciesOptions): Promise<this> {\n if (options?.value !== false) {\n if (options?.value === undefined) {\n const install = this.defaultAll\n ? true\n : await confirm({\n message: `Would you like to install dependencies?`,\n active: 'Yes',\n inactive: 'No',\n initialValue: true\n });\n\n if (isCancel(install)) throw new NotAnError('Operation cancelled');\n if (!install) return this;\n }\n\n await CLI.createSpinnerPromise({\n promise: installDependencies({\n packageManager: this.packageManager,\n silent: !isDebugging()\n }),\n indicator: 'timer',\n errorMessage: `${colors.bold().red('✗')} Failed to install dependencies`,\n successMessage: `${colors.bold().green('✔')} Dependencies installed successfully`,\n message: `${colors.bold().dim('$')} Installing dependencies`\n })[0];\n\n this.dependenciesInstalled = true;\n }\n\n return this;\n }\n\n public async createModules(): Promise<this> {\n const moduleTemplates = await ModuleTemplateBuilder.resolveModuleTemplates(this.typescript ? 'ts' : 'js');\n\n await mkdir('src', { recursive: true });\n\n if (!this.dependenciesInstalled) {\n log.warn('Dependencies not installed. Skipping module creation.');\n return this;\n }\n\n const moduleOptions: ModuleTemplateBuilder.Options = {\n cli: this.cli,\n config: await this.config?.read()!,\n defaultAll: true,\n typescript: this.typescript,\n };\n\n const [template, loader] = CLI.createSpinnerPromise({\n promise: Promise.all([\n new ModuleTemplateBuilder({\n ...moduleOptions,\n directory: 'src/commands',\n filename: `PingCommand.${this.typescript ? 'ts' : 'js'}`,\n template: moduleTemplates.find(t => t.name === 'SlashCommand')\n })\n .setupPlaceholders({\n CommandName: 'ping',\n CommandDescription: 'My ping command!',\n ModuleName: 'PingCommand'\n })\n .then(m => m.build({ silent: true })),\n new ModuleTemplateBuilder({\n ...moduleOptions,\n directory: 'src/events',\n filename: `ClientReady.${this.typescript ? 'ts' : 'js'}`,\n template: moduleTemplates.find(t => t.name === 'ClientEvent')\n })\n .setupPlaceholders({\n EventName: 'clientReady',\n ModuleName: 'ClientReadyEvent'\n })\n .then(m => m.build({ silent: true }))\n ]),\n message: 'Creating module templates',\n successMessage: 'Module templates created successfully',\n errorMessage: 'Failed to create module templates'\n });\n\n await template;\n return this;\n }\n\n public async build(options?: TemplateBuilder.BuildOptions): Promise<this> {\n if (!options?.skipBuild && this.dependenciesInstalled) await CLI.createSpinnerPromise({\n promise: runScript('build', {\n packageManager: this.packageManager,\n silent: !isDebugging()\n }),\n indicator: 'timer',\n errorMessage: `${colors.bold().red('✗')} Failed to build project`,\n successMessage: `${colors.bold().green('✔')} Project built successfully`,\n message: `${colors.bold().dim('$')} Building project`\n })[0];\n\n outro(`Project created in ${colors.cyan(this.relativeDirectory)}`);\n\n console.log(`\\n${colors.bold().green('✔')} Start developing:`);\n\n if (this.relativeDirectory) {\n console.log(` • ${colors.cyan().bold(`cd ${this.relativeDirectory}`)}`);\n }\n\n if (!this.dependenciesInstalled) {\n console.log(` • ${colors.cyan().bold(installDependenciesCommand(this.packageManager ?? 'npm'))} ${colors.dim('(Install dependencies)')}`);\n }\n\n console.log(` • ${colors.cyan().bold(runScriptCommand(this.packageManager ?? 'npm', 'build'))} ${colors.dim('(Build)')}`);\n console.log(` • ${colors.cyan().bold(runScriptCommand(this.packageManager ?? 'npm', 'dev'))} ${colors.dim('(Development)')}`);\n console.log(` • ${colors.cyan().bold(runScriptCommand(this.packageManager ?? 'npm', 'start'))} ${colors.dim('(Production)')}`);\n\n\n return this;\n }\n}\n\nexport namespace TemplateBuilder {\n export interface Options {\n cli: CLI;\n typescript?: boolean;\n packageManager?: PackageManagerName;\n defaultAll?: boolean;\n token?: string;\n }\n\n export const ignoredDirectoryFiles = ['.*', 'LICENSE'];\n\n export const dependencies: Record<'ts'|'js'|'both', Partial<Record<'dependencies'|'devDependencies', Record<string, string>>>> = {\n both: {\n dependencies: {\n '@reciple/core': packageJSON.peerDependencies?.['@reciple/core']!,\n '@reciple/jsx': packageJSON.devDependencies?.['@reciple/jsx']!,\n 'discord.js': packageJSON.peerDependencies?.['discord.js']!,\n 'reciple': `^${packageJSON.version}`,\n },\n devDependencies: {\n '@types/node': packageJSON.devDependencies?.['@types/node']!,\n nodemon: packageJSON.devDependencies?.nodemon!,\n typescript: packageJSON.devDependencies?.['typescript']!,\n }\n },\n ts: {},\n js: {}\n };\n\n export function createDependencyRecord(type: 'ts'|'js'): Partial<Record<'dependencies'|'devDependencies', Record<string, string>>> {\n const record = type === 'ts'\n ? dependencies.ts\n : type === 'js'\n ? dependencies.js\n : {};\n\n record.dependencies = { ...record.dependencies, ...dependencies.both.dependencies };\n record.devDependencies = { ...record.devDependencies, ...dependencies.both.devDependencies };\n\n return record;\n }\n\n export interface CreateDirectoryOptions {\n directory?: string;\n ignoredFiles?: string[];\n onNotEmpty?: 'prompt'|'throw'|'ignore';\n }\n\n export interface SetupLanguageOptions {\n typescript?: boolean;\n }\n\n export interface CreateConfigOptions extends Partial<ConfigReader.CreateOptions> {}\n\n export interface CreateModulesOptions extends Partial<CopyOptions> {}\n\n export interface SetPackageManagerOptions {\n packageManager?: PackageManagerName;\n }\n\n export interface InstallDependenciesOptions {\n value?: boolean;\n }\n\n export interface CreateEnvFileOptions {\n envFile?: string;\n tokenKey?: string;\n env?: Record<string, string>;\n }\n\n export interface BuildOptions {\n skipBuild?: boolean;\n }\n\n export interface CopyOptions {\n overwrite?: boolean|((data: CopyMetadata) => boolean);\n filter?: (data: CopyMetadata) => boolean;\n rename?: (data: CopyMetadata) => string;\n }\n\n export interface CopyMetadata {\n basename: string;\n src: string;\n dest: string;\n }\n\n export async function copy(from: string, to: string, options?: CopyOptions): Promise<void> {\n const fromStats = await stat(from).catch(() => undefined);\n if (!fromStats) return;\n\n if (fromStats.isDirectory()) {\n const files = await readdir(from);\n\n for (const file of files) {\n const data: CopyMetadata = {\n basename: file,\n src: path.join(from, file),\n dest: to\n };\n\n await copy(\n data.src,\n path.join(to,\n options?.rename\n ? options.rename(data)\n : file\n ),\n options\n );\n }\n return;\n }\n\n const data: CopyMetadata = {\n basename: path.basename(from),\n src: from,\n dest: to\n };\n\n if (options?.filter && !options.filter(data)) return;\n\n const toStats = await stat(to).catch(() => undefined);\n const overwrite = typeof options?.overwrite === 'function'\n ? options.overwrite(data)\n : options?.overwrite ?? true;\n\n if (toStats && overwrite) return;\n\n await mkdir(path.dirname(to), { recursive: true });\n await copyFile(from, to);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseModuleValidator.mjs","names":[],"sources":["../../../src/classes/validation/BaseModuleValidator.ts"],"sourcesContent":["import { Validator } from '@reciple/core';\nimport { ModuleType } from '../../helpers/constants.js';\nimport type { AnyModuleData } from '../../helpers/types.js';\n\nexport class BaseModuleValidator extends Validator {\n public static id = BaseModuleValidator.s.string().lengthGreaterThan(0);\n public static moduleType = BaseModuleValidator.s.nativeEnum(ModuleType);\n public static onEnable = BaseModuleValidator.s.instance(Function).optional();\n public static onReady = BaseModuleValidator.s.instance(Function).optional();\n public static onDisable = BaseModuleValidator.s.instance(Function).optional();\n\n public static object = BaseModuleValidator.s.object({\n id: BaseModuleValidator.id.optional(),\n moduleType: BaseModuleValidator.moduleType.optional(),\n onEnable: BaseModuleValidator.onEnable,\n onReady: BaseModuleValidator.onReady,\n onDisable: BaseModuleValidator.onDisable\n });\n\n public static resolvable = BaseModuleValidator.s.union([\n BaseModuleValidator.object,\n BaseModuleValidator.jsonEncodable\n ]);\n\n public static isValidId(id: unknown): asserts id is string {\n BaseModuleValidator.id.setValidationEnabled(BaseModuleValidator.isValidationEnabled).parse(id);\n }\n\n public static isValidModuleType(moduleType: unknown): asserts moduleType is ModuleType {\n BaseModuleValidator.moduleType.setValidationEnabled(BaseModuleValidator.isValidationEnabled).parse(moduleType);\n }\n\n public static isValidOnEnable(onEnable: unknown): asserts onEnable is () => Promise<void> {\n BaseModuleValidator.onEnable.setValidationEnabled(BaseModuleValidator.isValidationEnabled).parse(onEnable);\n }\n\n public static isValidOnReady(onReady: unknown): asserts onReady is () => Promise<void> {\n BaseModuleValidator.onReady.setValidationEnabled(BaseModuleValidator.isValidationEnabled).parse(onReady);\n }\n\n public static isValidOnDisable(onDisable: unknown): asserts onDisable is () => Promise<void> {\n BaseModuleValidator.onDisable.setValidationEnabled(BaseModuleValidator.isValidationEnabled).parse(onDisable);\n }\n\n public static isValid(value: unknown): asserts value is AnyModuleData {\n const data = value as AnyModuleData;\n\n if ('id' in data) BaseModuleValidator.isValidId(data.id);\n if ('moduleType' in data) BaseModuleValidator.isValidModuleType(data.moduleType);\n\n BaseModuleValidator.isValidOnEnable(data.onEnable);\n BaseModuleValidator.isValidOnReady(data.onReady);\n BaseModuleValidator.isValidOnDisable(data.onDisable);\n }\n}\n"],"mappings":";;;;AAIA,IAAa,sBAAb,MAAa,4BAA4B,UAAU;CAC/C,OAAc,KAAK,oBAAoB,EAAE,QAAQ,CAAC,kBAAkB,EAAE;CACtE,OAAc,aAAa,oBAAoB,EAAE,WAAW,WAAW;CACvE,OAAc,WAAW,oBAAoB,EAAE,SAAS,SAAS,CAAC,UAAU;CAC5E,OAAc,UAAU,oBAAoB,EAAE,SAAS,SAAS,CAAC,UAAU;CAC3E,OAAc,YAAY,oBAAoB,EAAE,SAAS,SAAS,CAAC,UAAU;CAE7E,OAAc,SAAS,oBAAoB,EAAE,OAAO;EAChD,IAAI,oBAAoB,GAAG,UAAU;EACrC,YAAY,oBAAoB,WAAW,UAAU;EACrD,UAAU,oBAAoB;EAC9B,SAAS,oBAAoB;EAC7B,WAAW,oBAAoB;EAClC,CAAC;CAEF,OAAc,aAAa,oBAAoB,EAAE,MAAM,CACnD,oBAAoB,QACpB,oBAAoB,cACvB,CAAC;CAEF,OAAc,UAAU,IAAmC;AACvD,sBAAoB,GAAG,qBAAqB,oBAAoB,oBAAoB,CAAC,MAAM,GAAG;;CAGlG,OAAc,kBAAkB,YAAuD;AACnF,sBAAoB,WAAW,qBAAqB,oBAAoB,oBAAoB,CAAC,MAAM,WAAW;;CAGlH,OAAc,gBAAgB,UAA4D;AACtF,sBAAoB,SAAS,qBAAqB,oBAAoB,oBAAoB,CAAC,MAAM,SAAS;;CAG9G,OAAc,eAAe,SAA0D;AACnF,sBAAoB,QAAQ,qBAAqB,oBAAoB,oBAAoB,CAAC,MAAM,QAAQ;;CAG5G,OAAc,iBAAiB,WAA8D;AACzF,sBAAoB,UAAU,qBAAqB,oBAAoB,oBAAoB,CAAC,MAAM,UAAU;;CAGhH,OAAc,QAAQ,OAAgD;EAClE,MAAM,OAAO;AAEb,MAAI,QAAQ,KAAM,qBAAoB,UAAU,KAAK,GAAG;AACxD,MAAI,gBAAgB,KAAM,qBAAoB,kBAAkB,KAAK,WAAW;AAEhF,sBAAoB,gBAAgB,KAAK,SAAS;AAClD,sBAAoB,eAAe,KAAK,QAAQ;AAChD,sBAAoB,iBAAiB,KAAK,UAAU"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CommandModuleValidator.mjs","names":[],"sources":["../../../src/classes/validation/CommandModuleValidator.ts"],"sourcesContent":["import { BaseModuleValidator } from './BaseModuleValidator.js';\nimport { BaseCommandValidator, Validator } from '@reciple/core';\nimport type { AnyCommandModuleData } from '../../helpers/types.js';\n\nexport class CommandModuleValidator extends Validator {\n public static object = BaseModuleValidator.object.extend(BaseCommandValidator.object);\n public static resolvable = Validator.s.union([CommandModuleValidator.object, Validator.jsonEncodable]);\n\n public static isValid(value: unknown): asserts value is AnyCommandModuleData {\n BaseModuleValidator.isValid(value);\n BaseCommandValidator.isValid(value);\n }\n}\n"],"mappings":";;;;AAIA,IAAa,yBAAb,MAAa,+BAA+B,UAAU;CAClD,OAAc,SAAS,oBAAoB,OAAO,OAAO,qBAAqB,OAAO;CACrF,OAAc,aAAa,UAAU,EAAE,MAAM,CAAC,uBAAuB,QAAQ,UAAU,cAAc,CAAC;CAEtG,OAAc,QAAQ,OAAuD;AACzE,sBAAoB,QAAQ,MAAM;AAClC,uBAAqB,QAAQ,MAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventModuleValidator.mjs","names":[],"sources":["../../../src/classes/validation/EventModuleValidator.ts"],"sourcesContent":["import { Validator } from '@reciple/core';\nimport { EventEmitter } from 'node:events';\nimport { BaseModuleValidator } from './BaseModuleValidator.js';\nimport type { EventModule } from '../modules/events/EventModule.js';\n\nexport class EventModuleValidator extends Validator {\n public static emitter = Validator.s.instance(EventEmitter);\n public static event = Validator.s.string();\n public static once = Validator.s.boolean().optional();\n public static onEvent = Validator.s.instance(Function);\n\n public static object = BaseModuleValidator.object.extend({\n emitter: EventModuleValidator.emitter,\n event: EventModuleValidator.event,\n once: EventModuleValidator.once,\n onEvent: EventModuleValidator.onEvent\n });\n\n public static resolvable = EventModuleValidator.s.union([EventModuleValidator.object, EventModuleValidator.jsonEncodable]);\n\n public static isValidEmitter(emitter: unknown): asserts emitter is EventEmitter {\n EventModuleValidator.emitter.setValidationEnabled(EventModuleValidator.isValidationEnabled).parse(emitter);\n }\n\n public static isValidEvent(event: unknown): asserts event is string {\n EventModuleValidator.event.setValidationEnabled(EventModuleValidator.isValidationEnabled).parse(event);\n }\n\n public static isValidOnce(once: unknown): asserts once is boolean {\n EventModuleValidator.once.setValidationEnabled(EventModuleValidator.isValidationEnabled).parse(once);\n }\n\n public static isValidOnEvent(onEvent: unknown): asserts onEvent is (...args: unknown[]) => Promise<void> {\n EventModuleValidator.onEvent.setValidationEnabled(EventModuleValidator.isValidationEnabled).parse(onEvent);\n }\n\n public static isValid(value: unknown): asserts value is EventModule.Data {\n const data = value as EventModule;\n\n BaseModuleValidator.isValid(data);\n EventModuleValidator.isValidEmitter(data.emitter);\n EventModuleValidator.isValidEvent(data.event);\n EventModuleValidator.isValidOnce(data.once);\n EventModuleValidator.isValidOnEvent(data.onEvent);\n }\n}\n"],"mappings":";;;;;AAKA,IAAa,uBAAb,MAAa,6BAA6B,UAAU;CAChD,OAAc,UAAU,UAAU,EAAE,SAAS,aAAa;CAC1D,OAAc,QAAQ,UAAU,EAAE,QAAQ;CAC1C,OAAc,OAAO,UAAU,EAAE,SAAS,CAAC,UAAU;CACrD,OAAc,UAAU,UAAU,EAAE,SAAS,SAAS;CAEtD,OAAc,SAAS,oBAAoB,OAAO,OAAO;EACrD,SAAS,qBAAqB;EAC9B,OAAO,qBAAqB;EAC5B,MAAM,qBAAqB;EAC3B,SAAS,qBAAqB;EACjC,CAAC;CAEF,OAAc,aAAa,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,QAAQ,qBAAqB,cAAc,CAAC;CAE1H,OAAc,eAAe,SAAmD;AAC5E,uBAAqB,QAAQ,qBAAqB,qBAAqB,oBAAoB,CAAC,MAAM,QAAQ;;CAG9G,OAAc,aAAa,OAAyC;AAChE,uBAAqB,MAAM,qBAAqB,qBAAqB,oBAAoB,CAAC,MAAM,MAAM;;CAG1G,OAAc,YAAY,MAAwC;AAC9D,uBAAqB,KAAK,qBAAqB,qBAAqB,oBAAoB,CAAC,MAAM,KAAK;;CAGxG,OAAc,eAAe,SAA4E;AACrG,uBAAqB,QAAQ,qBAAqB,qBAAqB,oBAAoB,CAAC,MAAM,QAAQ;;CAG9G,OAAc,QAAQ,OAAmD;EACrE,MAAM,OAAO;AAEb,sBAAoB,QAAQ,KAAK;AACjC,uBAAqB,eAAe,KAAK,QAAQ;AACjD,uBAAqB,aAAa,KAAK,MAAM;AAC7C,uBAAqB,YAAY,KAAK,KAAK;AAC3C,uBAAqB,eAAe,KAAK,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PostconditionModule.mjs","names":[],"sources":["../../../src/classes/validation/PostconditionModule.ts"],"sourcesContent":["import { CommandPostconditionReason, CommandType, Validator } from '@reciple/core';\nimport { BaseModuleValidator } from './BaseModuleValidator.js';\nimport type { PostconditionModule } from '../modules/PostconditionModule.js';\n\nexport class PostconditionModuleValidator extends Validator {\n public static scope = Validator.s.nativeEnum(CommandType).array().optional();\n public static accepts = Validator.s.nativeEnum(CommandPostconditionReason).array().optional();\n public static execute = Validator.s.instance(Function);\n\n public static object = Validator.s.object({\n scope: PostconditionModuleValidator.scope,\n execute: PostconditionModuleValidator.execute\n });\n\n public static resolvable = Validator.s.union([PostconditionModuleValidator.object, PostconditionModuleValidator.jsonEncodable]);\n\n public static isValidScope(scope: unknown): asserts scope is CommandType[] {\n PostconditionModuleValidator.scope.setValidationEnabled(PostconditionModuleValidator.isValidationEnabled).parse(scope);\n }\n\n public static isValidAccepts(accepts: unknown): asserts accepts is CommandPostconditionReason[] {\n PostconditionModuleValidator.accepts.setValidationEnabled(PostconditionModuleValidator.isValidationEnabled).parse(accepts);\n }\n\n public static isValidExecute(execute: unknown): asserts execute is (...args: unknown[]) => Promise<void> {\n PostconditionModuleValidator.execute.setValidationEnabled(PostconditionModuleValidator.isValidationEnabled).parse(execute);\n }\n\n public static isValid(value: unknown): asserts value is PostconditionModule.Data {\n const data = value as PostconditionModule.Data;\n\n BaseModuleValidator.isValid(data);\n PostconditionModuleValidator.isValidScope(data.scope);\n PostconditionModuleValidator.isValidAccepts(data.accepts);\n PostconditionModuleValidator.isValidExecute(data.execute);\n }\n}\n"],"mappings":";;;;AAIA,IAAa,+BAAb,MAAa,qCAAqC,UAAU;CACxD,OAAc,QAAQ,UAAU,EAAE,WAAW,YAAY,CAAC,OAAO,CAAC,UAAU;CAC5E,OAAc,UAAU,UAAU,EAAE,WAAW,2BAA2B,CAAC,OAAO,CAAC,UAAU;CAC7F,OAAc,UAAU,UAAU,EAAE,SAAS,SAAS;CAEtD,OAAc,SAAS,UAAU,EAAE,OAAO;EACtC,OAAO,6BAA6B;EACpC,SAAS,6BAA6B;EACzC,CAAC;CAEF,OAAc,aAAa,UAAU,EAAE,MAAM,CAAC,6BAA6B,QAAQ,6BAA6B,cAAc,CAAC;CAE/H,OAAc,aAAa,OAAgD;AACvE,+BAA6B,MAAM,qBAAqB,6BAA6B,oBAAoB,CAAC,MAAM,MAAM;;CAG1H,OAAc,eAAe,SAAmE;AAC5F,+BAA6B,QAAQ,qBAAqB,6BAA6B,oBAAoB,CAAC,MAAM,QAAQ;;CAG9H,OAAc,eAAe,SAA4E;AACrG,+BAA6B,QAAQ,qBAAqB,6BAA6B,oBAAoB,CAAC,MAAM,QAAQ;;CAG9H,OAAc,QAAQ,OAA2D;EAC7E,MAAM,OAAO;AAEb,sBAAoB,QAAQ,KAAK;AACjC,+BAA6B,aAAa,KAAK,MAAM;AACrD,+BAA6B,eAAe,KAAK,QAAQ;AACzD,+BAA6B,eAAe,KAAK,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PreconditionModule.mjs","names":[],"sources":["../../../src/classes/validation/PreconditionModule.ts"],"sourcesContent":["import { CommandType, Validator } from '@reciple/core';\nimport type { PreconditionModule } from '../modules/PreconditionModule.js';\nimport { BaseModuleValidator } from './BaseModuleValidator.js';\n\nexport class PreconditionModuleValidator extends Validator {\n public static scope = Validator.s.nativeEnum(CommandType).array().optional();\n public static execute = Validator.s.instance(Function);\n\n public static object = Validator.s.object({\n scope: PreconditionModuleValidator.scope,\n execute: PreconditionModuleValidator.execute\n });\n\n public static resolvable = Validator.s.union([PreconditionModuleValidator.object, PreconditionModuleValidator.jsonEncodable]);\n\n public static isValidScope(scope: unknown): asserts scope is CommandType[] {\n PreconditionModuleValidator.scope.setValidationEnabled(PreconditionModuleValidator.isValidationEnabled).parse(scope);\n }\n\n public static isValidExecute(execute: unknown): asserts execute is (...args: unknown[]) => Promise<void> {\n PreconditionModuleValidator.execute.setValidationEnabled(PreconditionModuleValidator.isValidationEnabled).parse(execute);\n }\n\n public static isValid(value: unknown): asserts value is PreconditionModule.Data {\n const data = value as PreconditionModule.Data;\n\n BaseModuleValidator.isValid(data);\n PreconditionModuleValidator.isValidScope(data.scope);\n PreconditionModuleValidator.isValidExecute(data.execute);\n }\n}\n"],"mappings":";;;;AAIA,IAAa,8BAAb,MAAa,oCAAoC,UAAU;CACvD,OAAc,QAAQ,UAAU,EAAE,WAAW,YAAY,CAAC,OAAO,CAAC,UAAU;CAC5E,OAAc,UAAU,UAAU,EAAE,SAAS,SAAS;CAEtD,OAAc,SAAS,UAAU,EAAE,OAAO;EACtC,OAAO,4BAA4B;EACnC,SAAS,4BAA4B;EACxC,CAAC;CAEF,OAAc,aAAa,UAAU,EAAE,MAAM,CAAC,4BAA4B,QAAQ,4BAA4B,cAAc,CAAC;CAE7H,OAAc,aAAa,OAAgD;AACvE,8BAA4B,MAAM,qBAAqB,4BAA4B,oBAAoB,CAAC,MAAM,MAAM;;CAGxH,OAAc,eAAe,SAA4E;AACrG,8BAA4B,QAAQ,qBAAqB,4BAA4B,oBAAoB,CAAC,MAAM,QAAQ;;CAG5H,OAAc,QAAQ,OAA0D;EAC5E,MAAM,OAAO;AAEb,sBAAoB,QAAQ,KAAK;AACjC,8BAA4B,aAAa,KAAK,MAAM;AACpD,8BAA4B,eAAe,KAAK,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.mjs","names":[],"sources":["../../src/helpers/constants.ts"],"sourcesContent":["import { CLI } from '../classes/cli/CLI.js';\nimport path from 'node:path';\nimport { logger } from '@prtty/print';\nimport type { PackageJson } from '@reciple/utils';\n\n/**\n * @private\n */\nexport const packageJSON = await import('../../package.json', { with: { type: 'json' } }).then(m => m.default as PackageJson);\n\nexport const cli = new CLI({\n name: packageJSON.name ?? 'reciple',\n description: packageJSON.description ?? '',\n build: packageJSON.version ?? '0.0.0',\n subcommandsDir: path.join(path.dirname(CLI.bin), './commands'),\n logger\n});\n\nexport enum ModuleType {\n Base = 1,\n Command,\n Event,\n Precondition,\n Postcondition\n}\n"],"mappings":";;;;;;;;AAQA,MAAa,cAAc,MAAM,OAAO,sBAAsB,EAAE,MAAM,EAAE,MAAM,QAAQ,EAAE,EAAE,MAAK,MAAK,EAAE,QAAuB;AAE7H,MAAa,MAAM,IAAI,IAAI;CACvB,MAAM,YAAY,QAAQ;CAC1B,aAAa,YAAY,eAAe;CACxC,OAAO,YAAY,WAAW;CAC9B,gBAAgB,KAAK,KAAK,KAAK,QAAQ,IAAI,IAAI,EAAE,aAAa;CAC9D;CACH,CAAC;AAEF,IAAY,aAAL;AACH;AACA;AACA;AACA;AACA;;KACH"}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { Client } from '@reciple/core';\nimport { logger, type Logger } from '@prtty/print';\n\nexport * from './classes/NotAnError.js';\n\nexport * from './classes/cli/CLI.js';\nexport * from './classes/cli/CLISubcommand.js';\nexport * from './classes/cli/ConfigReader.js';\nexport * from './classes/cli/RuntimeEnvironment.js';\n\nexport * from './classes/client/EventListeners.js';\nexport * from './classes/client/ModuleLoader.js';\n\nexport * from './classes/managers/ModuleManager.js';\n\nexport * from './classes/modules/BaseModule.js';\nexport * from './classes/modules/commands/ContextMenuCommandModule.js';\nexport * from './classes/modules/commands/MessageCommandModule.js';\nexport * from './classes/modules/commands/SlashCommandModule.js';\nexport * from './classes/modules/events/ClientEventModule.js';\nexport * from './classes/modules/events/EventModule.js';\nexport * from './classes/modules/events/RESTEventModule.js';\nexport * from './classes/modules/PostconditionModule.js';\nexport * from './classes/modules/PreconditionModule.js';\n\nexport * from './classes/templates/ModuleTemplateBuilder.js';\nexport * from './classes/templates/TemplateBuilder.js';\n\nexport * from './classes/validation/BaseModuleValidator.js';\nexport * from './classes/validation/CommandModuleValidator.js';\nexport * from './classes/validation/EventModuleValidator.js';\nexport * from './classes/validation/PostconditionModule.js';\nexport * from './classes/validation/PreconditionModule.js';\n\nexport * from './helpers/constants.js';\nexport * from './helpers/types.js';\n\nexport * from '@reciple/core';\n\nglobalThis.useClient = () => {\n throw new Error('Client is not yet loaded.');\n};\n\nglobalThis.useLogger = () => logger;\n\ndeclare global {\n var useClient: () => Client;\n var useLogger: () => Logger;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,WAAW,kBAAkB;AACzB,OAAM,IAAI,MAAM,4BAA4B;;AAGhD,WAAW,kBAAkB"}
|
package/dist/package.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"package.mjs","names":[],"sources":["../package.json"],"sourcesContent":[""],"mappings":""}
|