{"version":3,"sources":["../src/NexClient.ts","../src/libs/readDirectory.ts","../src/libs/getRootPath.ts","../src/core/Registry.ts","../src/core/Command.ts","../src/core/Event.ts"],"names":["join","pathToFileURL"],"mappings":"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","sourcesContent":["import { Client, Collection, type ClientOptions } from 'discord.js';\r\nimport { Registry } from '#core/Registry';\r\nimport type { Command } from '#core/Command';\r\n\r\nexport class NexClient extends Client {\r\n\tpublic readonly registry: Registry;\r\n\tpublic readonly commands: Collection<string, Command>;\r\n\r\n\tpublic constructor(options: ClientOptions) {\r\n\t\tsuper(options);\r\n\r\n\t\tthis.commands = new Collection();\r\n\t\tthis.registry = new Registry(this);\r\n\t}\r\n}","import { readdir } from 'node:fs/promises';\r\nimport { pathToFileURL, fileURLToPath } from 'node:url';\r\nimport { join } from 'node:path';\r\nimport { getRootPath } from './getRootPath';\r\n\r\nexport type ReadDirectoryArgs = {\r\n\tdirectory: string;\r\n\textFilter: string;\r\n}\r\n\r\nexport async function readDirectory({ directory, extFilter }: ReadDirectoryArgs) {\r\n\tconst root = getRootPath();\r\n\tconst directoryUrl = pathToFileURL(join(root, directory));\r\n\tconst directoryPath = fileURLToPath(directoryUrl);\r\n\tconst directoryFiles = await readdir(directoryUrl);\r\n\tconst filteredFiles = directoryFiles.filter(file => file.endsWith(`.${extFilter}`));\r\n\r\n\treturn {\r\n\t\tdirectoryPath,\r\n\t\tfilteredFiles,\r\n\t};\r\n}","import { readFileSync } from 'node:fs';\r\nimport { dirname, join } from 'node:path';\r\n\r\nlet rootPath: string | null = null;\r\n\r\nexport function getRootPath() {\r\n\tif (rootPath !== null) return rootPath;\r\n\r\n\tconst cwd = process.cwd();\r\n\r\n\ttry {\r\n\t\tconst pkgJson = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8'));\r\n\t\trootPath = dirname(join(cwd, pkgJson.main));\r\n\t} catch {\r\n\t\trootPath = cwd;\r\n\t}\r\n\r\n\treturn rootPath;\r\n}","import type { NexClient } from '../NexClient';\r\nimport type { Event } from './Event';\r\nimport type { Command } from './Command';\r\nimport { readDirectory } from '#libs/readDirectory';\r\nimport { join } from 'node:path';\r\nimport { pathToFileURL } from 'node:url';\r\n\r\nexport class Registry {\r\n\tprivate readonly client: NexClient;\r\n\r\n\tpublic constructor(client: NexClient) {\r\n\t\tthis.client = client;\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprivate async registerEvent(fileName: string, directoryPath: string) {\r\n\t\tconst filePath = this.createImportUrl(directoryPath, fileName).href;\r\n\t\tconst { AppEvent } = await import(filePath);\r\n\t\tconst event: Event = new AppEvent(this.client);\r\n\r\n\t\tif (event.metadata.once) {\r\n\t\t\tthis.client.once(event.metadata.name, (...args) => event.execute?.(...args));\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.client.on(event.metadata.name, (...args) => event.execute?.(...args));\r\n\t\t}\r\n\t}\r\n\r\n\tpublic async registerEvents(eventDirectory: string) {\r\n\t\tconst { directoryPath, filteredFiles } = await readDirectory({\r\n\t\t\tdirectory: eventDirectory,\r\n\t\t\textFilter: 'js',\r\n\t\t});\r\n\r\n\t\tfor (const file of filteredFiles) {\r\n\t\t\tawait this.registerEvent(file, directoryPath);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprivate async registerCommand(fileName: string, directoryPath: string) {\r\n\t\tconst filePath = this.createImportUrl(directoryPath, fileName).href;\r\n\t\tconst { AppCommand } = await import(filePath);\r\n\t\tconst command: Command = new AppCommand(this.client);\r\n\r\n\t\tif (command.buildAppCommand?.() === undefined) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.client.commands.set(command.buildAppCommand().name, command);\r\n\t}\r\n\t\r\n\tpublic async registerCommands(commandDirectory: string) {\r\n\t\tconst { directoryPath, filteredFiles } = await readDirectory({\r\n\t\t\tdirectory: commandDirectory,\r\n\t\t\textFilter: 'js',\r\n\t\t});\r\n\r\n\t\tfor (const file of filteredFiles) {\r\n\t\t\tawait this.registerCommand(file, directoryPath);\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprivate createImportUrl(directory: string, file: string) {\r\n\t\treturn pathToFileURL(join(directory, file));\r\n\t}\r\n}","import type { SlashCommandBuilder, CommandInteraction } from 'discord.js';\r\nimport type { NexClient } from '../NexClient';\r\n\r\nexport class Command {\r\n\tpublic readonly client: NexClient;\r\n\r\n\tpublic constructor(client: NexClient) {\r\n\t\tthis.client = client;\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic buildAppCommand?(): SlashCommandBuilder;\r\n\r\n\tpublic async executeAppCommand?(interaction: CommandInteraction): Promise<unknown>;\r\n}","import type { NexClient } from '../NexClient';\r\n\r\nexport interface EventOptions {\r\n\treadonly name: string;\r\n\treadonly once?: boolean;\r\n}\r\n\r\nexport class Event {\r\n\tpublic readonly client: NexClient;\r\n\tpublic readonly metadata: EventOptions;\r\n\r\n\tpublic constructor(client: NexClient, { name, once }: EventOptions) {\r\n\t\tthis.client = client;\r\n\t\tthis.metadata = {\r\n\t\t\tname: name,\r\n\t\t\tonce: once,\r\n\t\t};\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpublic execute?(...args: any[]): void;\r\n}"]}