reciple 10.0.24 → 10.0.27

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.
@@ -81,9 +81,7 @@ export const config = {
81
81
  export const build = {
82
82
  entry: ['./src/**/*.{js,jsx,ts,tsx}'],
83
83
  tsconfig: './jsconfig.json',
84
- outDir: './modules',
85
- external: [],
86
- noExternal: [],
84
+ outDir: './modules'
87
85
  };
88
86
 
89
87
  /**
@@ -88,9 +88,7 @@ export const config: Config = {
88
88
  export const build: BuildConfig = {
89
89
  entry: ['./src/**/*.{js,jsx,ts,tsx}'],
90
90
  tsconfig: './jsconfig.json',
91
- outDir: './modules',
92
- external: [],
93
- noExternal: [],
91
+ outDir: './modules'
94
92
  };
95
93
 
96
94
  export const sharding: ShardingConfig = {
@@ -1,4 +1,4 @@
1
- //#region \0@oxc-project+runtime@0.110.0/helpers/decorate.js
1
+ //#region \0@oxc-project+runtime@0.112.0/helpers/decorate.js
2
2
  function __decorate(decorators, target, key, desc) {
3
3
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
4
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -94,7 +94,7 @@ var CLI = class {
94
94
  (function(_CLI) {
95
95
  _CLI.root = path.join(path.dirname(fileURLToPath(import.meta.url)), "../../../");
96
96
  _CLI.bin = path.join(CLI.root, "dist/bin/reciple.mjs");
97
- _CLI.version = "10.0.24";
97
+ _CLI.version = "10.0.27";
98
98
  function stringifyFlags(flags, command, ignored = []) {
99
99
  let arr = [];
100
100
  for (const [key, value] of Object.entries(flags)) {
@@ -108,7 +108,6 @@ var ConfigReader = class ConfigReader {
108
108
  outDir: "./modules",
109
109
  tsconfig: `./${type ?? "ts"}config.json`,
110
110
  external: [],
111
- noExternal: [],
112
111
  sourcemap: true,
113
112
  treeshake: true,
114
113
  clean: true,
@@ -117,6 +116,7 @@ var ConfigReader = class ConfigReader {
117
116
  platform: "node",
118
117
  format: "esm",
119
118
  unbundle: true,
119
+ noExternal: void 0,
120
120
  skipNodeModulesBundle: true
121
121
  };
122
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigReader.mjs","names":[],"sources":["../../../src/classes/cli/ConfigReader.ts"],"sourcesContent":["import type { ModuleLoader } from '../client/ModuleLoader.js';\nimport type { ModuleManager } from '../managers/ModuleManager.js';\nimport type { EventListeners } from '../client/EventListeners.js';\nimport type { Logger } from '@prtty/print';\nimport { CLI } from './CLI.js';\nimport { Client, RecipleError, type Config } from '@reciple/core';\nimport type { BuildConfig } from '../../helpers/types.js';\nimport type { UserConfig as TsdownConfig } from 'tsdown';\nimport path from 'node:path';\nimport { mkdir, readdir, readFile, stat, writeFile } from 'node:fs/promises';\nimport { resolveTSConfig } from 'pkg-types';\nimport { colors } from '@prtty/prtty';\nimport type { ShardingManagerOptions } from 'discord.js';\nimport { createJiti, type JitiResolveOptions } from 'jiti';\nimport { RuntimeEnvironment } from './RuntimeEnvironment.js';\n\ndeclare module \"@reciple/core\" {\n interface Config {\n token?: string;\n modules?: ModuleLoader.Config;\n logger?: Logger|Logger.Options;\n }\n\n interface Client {\n readonly modules: ModuleManager;\n readonly moduleLoader: ModuleLoader;\n readonly eventListeners: EventListeners;\n readonly cli: CLI;\n logger: Logger;\n }\n}\n\nexport class ConfigReader {\n private _client: Client|null = null;\n private _config: Config|null = null;\n private _build: BuildConfig|null = null;\n private _sharding: ShardingManagerOptions|null = null;\n\n get client() {\n if (!this._client) throw new RecipleError('client is not yet loaded from config.');\n return this._client;\n }\n\n get config() {\n return this._config ?? {};\n }\n\n get build() {\n return ConfigReader.normalizeTsdownConfig({\n overrides: this._build ?? {}\n });\n }\n\n get sharding() {\n return this._sharding;\n }\n\n constructor(public readonly filepath: string) {}\n\n public async read(options?: JitiResolveOptions): Promise<ConfigReader> {\n let module: ConfigReader.ModuleData;\n\n const runtime = RuntimeEnvironment.get();\n switch (runtime) {\n case 'bun':\n module = await import(`file://${path.resolve(this.filepath)}`);\n break;\n case 'deno':\n case 'node':\n default:\n const jiti = createJiti(path.resolve(path.dirname(this.filepath)));\n module = await jiti.import<ConfigReader.ModuleData>(`./${path.basename(this.filepath)}`, {\n default: true,\n ...options\n });\n }\n\n if (!module || !module.client) {\n throw new RecipleError(`exported client is not an instance of ${colors.cyan('Client')} from ${colors.green('\"@reciple/core\"')}.`);\n }\n\n this._client = module.client;\n this._config = module.config ?? null;\n this._build = module.build ?? null;\n this._sharding = module.sharding ?? null;\n\n return this;\n }\n\n public async create(options: Omit<ConfigReader.CreateOptions, 'path'>): Promise<ConfigReader> {\n const exists = await ConfigReader.exists(this.filepath);\n\n if (exists && options.throwIfExists === true) {\n throw new RecipleError(`Config file already exists at ${colors.green(path.relative(process.cwd(), this.filepath))}.`);\n }\n\n if (!exists || exists && options.overwrite !== false) {\n await mkdir(path.dirname(this.filepath), { recursive: true });\n await writeFile(this.filepath, await ConfigReader.getDefaultContent(options.type));\n }\n\n return options.readOptions !== false ? this.read(options.readOptions) : this;\n }\n\n public static async exists(file: string): Promise<boolean> {\n return await stat(file).then(s => s.isFile()).catch(() => false);\n }\n\n public static async create(options: ConfigReader.CreateOptions): Promise<ConfigReader> {\n return new ConfigReader(options.path).create(options);\n }\n\n public static async find(options?: ConfigReader.FindOptions): Promise<string|null> {\n const filenames = ConfigReader.configFilenames.filter(f => !options?.lang || f.endsWith(options.lang));\n const directories = options?.directories ?? ['.', '.config'];\n\n for (const directory of directories) {\n const stats = await stat(directory).catch(() => undefined);\n\n if (!stats?.isDirectory()) continue;\n\n const file = (await readdir(directory)).find(f => filenames.includes(f));\n if (file) return path.join(directory, file);\n }\n\n return null;\n }\n}\n\nexport namespace ConfigReader {\n export interface ModuleData {\n client: Client;\n config?: Config;\n build?: BuildConfig;\n sharding?: ShardingManagerOptions;\n }\n\n export interface CreateOptions {\n path: string;\n overwrite?: boolean;\n throwIfExists?: boolean;\n type: LangType;\n readOptions?: JitiResolveOptions|false;\n }\n\n export interface FindOptions {\n lang?: LangType;\n directories?: string[];\n }\n\n export async function getProjectLang(cwd: string): Promise<LangType> {\n const hasTsConfig = !!await resolveTSConfig(cwd, { try: true });\n const configLangIsTypescript = !!(await ConfigReader.find({\n directories: [cwd, path.join(cwd, '.config')],\n lang: 'ts'\n }));\n\n return hasTsConfig || configLangIsTypescript ? 'ts' : 'js';\n }\n\n export type LangType = 'ts'|'js';\n\n export const defaultConfigPath = {\n ts: path.join(CLI.root, 'assets/config', `reciple.config.ts`),\n js: path.join(CLI.root, 'assets/config', `reciple.config.js`)\n };\n\n export async function getDefaultContent(type: LangType): Promise<string> {\n const filepath = ConfigReader.defaultConfigPath[type];\n const content = await readFile(filepath, 'utf-8');\n return content;\n }\n\n export const configFilenames = [\n 'reciple.config.ts',\n 'reciple.config.mts',\n 'reciple.config.js',\n 'reciple.config.mjs'\n ];\n\n export function createConfigFilename(type: LangType, esm: boolean = false): string {\n return `reciple.config.${esm ? 'm' : ''}${type}`;\n }\n\n export function normalizeTsdownConfig({ type, overrides }: { type?: LangType; overrides?: BuildConfig; } = {}): TsdownConfig {\n return {\n entry: [`./src/**/*.{ts,tsx,js,jsx}`],\n outDir: './modules',\n tsconfig: `./${type ?? 'ts'}config.json`,\n external: [],\n noExternal: [],\n sourcemap: true,\n treeshake: true,\n clean: true,\n ...overrides,\n watch: false,\n platform: 'node',\n format: 'esm',\n unbundle: true,\n skipNodeModulesBundle: true\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConfigReader.mjs","names":[],"sources":["../../../src/classes/cli/ConfigReader.ts"],"sourcesContent":["import type { ModuleLoader } from '../client/ModuleLoader.js';\nimport type { ModuleManager } from '../managers/ModuleManager.js';\nimport type { EventListeners } from '../client/EventListeners.js';\nimport type { Logger } from '@prtty/print';\nimport { CLI } from './CLI.js';\nimport { Client, RecipleError, type Config } from '@reciple/core';\nimport type { BuildConfig } from '../../helpers/types.js';\nimport type { UserConfig as TsdownConfig } from 'tsdown';\nimport path from 'node:path';\nimport { mkdir, readdir, readFile, stat, writeFile } from 'node:fs/promises';\nimport { resolveTSConfig } from 'pkg-types';\nimport { colors } from '@prtty/prtty';\nimport type { ShardingManagerOptions } from 'discord.js';\nimport { createJiti, type JitiResolveOptions } from 'jiti';\nimport { RuntimeEnvironment } from './RuntimeEnvironment.js';\n\ndeclare module \"@reciple/core\" {\n interface Config {\n token?: string;\n modules?: ModuleLoader.Config;\n logger?: Logger|Logger.Options;\n }\n\n interface Client {\n readonly modules: ModuleManager;\n readonly moduleLoader: ModuleLoader;\n readonly eventListeners: EventListeners;\n readonly cli: CLI;\n logger: Logger;\n }\n}\n\nexport class ConfigReader {\n private _client: Client|null = null;\n private _config: Config|null = null;\n private _build: BuildConfig|null = null;\n private _sharding: ShardingManagerOptions|null = null;\n\n get client() {\n if (!this._client) throw new RecipleError('client is not yet loaded from config.');\n return this._client;\n }\n\n get config() {\n return this._config ?? {};\n }\n\n get build() {\n return ConfigReader.normalizeTsdownConfig({\n overrides: this._build ?? {}\n });\n }\n\n get sharding() {\n return this._sharding;\n }\n\n constructor(public readonly filepath: string) {}\n\n public async read(options?: JitiResolveOptions): Promise<ConfigReader> {\n let module: ConfigReader.ModuleData;\n\n const runtime = RuntimeEnvironment.get();\n switch (runtime) {\n case 'bun':\n module = await import(`file://${path.resolve(this.filepath)}`);\n break;\n case 'deno':\n case 'node':\n default:\n const jiti = createJiti(path.resolve(path.dirname(this.filepath)));\n module = await jiti.import<ConfigReader.ModuleData>(`./${path.basename(this.filepath)}`, {\n default: true,\n ...options\n });\n }\n\n if (!module || !module.client) {\n throw new RecipleError(`exported client is not an instance of ${colors.cyan('Client')} from ${colors.green('\"@reciple/core\"')}.`);\n }\n\n this._client = module.client;\n this._config = module.config ?? null;\n this._build = module.build ?? null;\n this._sharding = module.sharding ?? null;\n\n return this;\n }\n\n public async create(options: Omit<ConfigReader.CreateOptions, 'path'>): Promise<ConfigReader> {\n const exists = await ConfigReader.exists(this.filepath);\n\n if (exists && options.throwIfExists === true) {\n throw new RecipleError(`Config file already exists at ${colors.green(path.relative(process.cwd(), this.filepath))}.`);\n }\n\n if (!exists || exists && options.overwrite !== false) {\n await mkdir(path.dirname(this.filepath), { recursive: true });\n await writeFile(this.filepath, await ConfigReader.getDefaultContent(options.type));\n }\n\n return options.readOptions !== false ? this.read(options.readOptions) : this;\n }\n\n public static async exists(file: string): Promise<boolean> {\n return await stat(file).then(s => s.isFile()).catch(() => false);\n }\n\n public static async create(options: ConfigReader.CreateOptions): Promise<ConfigReader> {\n return new ConfigReader(options.path).create(options);\n }\n\n public static async find(options?: ConfigReader.FindOptions): Promise<string|null> {\n const filenames = ConfigReader.configFilenames.filter(f => !options?.lang || f.endsWith(options.lang));\n const directories = options?.directories ?? ['.', '.config'];\n\n for (const directory of directories) {\n const stats = await stat(directory).catch(() => undefined);\n\n if (!stats?.isDirectory()) continue;\n\n const file = (await readdir(directory)).find(f => filenames.includes(f));\n if (file) return path.join(directory, file);\n }\n\n return null;\n }\n}\n\nexport namespace ConfigReader {\n export interface ModuleData {\n client: Client;\n config?: Config;\n build?: BuildConfig;\n sharding?: ShardingManagerOptions;\n }\n\n export interface CreateOptions {\n path: string;\n overwrite?: boolean;\n throwIfExists?: boolean;\n type: LangType;\n readOptions?: JitiResolveOptions|false;\n }\n\n export interface FindOptions {\n lang?: LangType;\n directories?: string[];\n }\n\n export async function getProjectLang(cwd: string): Promise<LangType> {\n const hasTsConfig = !!await resolveTSConfig(cwd, { try: true });\n const configLangIsTypescript = !!(await ConfigReader.find({\n directories: [cwd, path.join(cwd, '.config')],\n lang: 'ts'\n }));\n\n return hasTsConfig || configLangIsTypescript ? 'ts' : 'js';\n }\n\n export type LangType = 'ts'|'js';\n\n export const defaultConfigPath = {\n ts: path.join(CLI.root, 'assets/config', `reciple.config.ts`),\n js: path.join(CLI.root, 'assets/config', `reciple.config.js`)\n };\n\n export async function getDefaultContent(type: LangType): Promise<string> {\n const filepath = ConfigReader.defaultConfigPath[type];\n const content = await readFile(filepath, 'utf-8');\n return content;\n }\n\n export const configFilenames = [\n 'reciple.config.ts',\n 'reciple.config.mts',\n 'reciple.config.js',\n 'reciple.config.mjs'\n ];\n\n export function createConfigFilename(type: LangType, esm: boolean = false): string {\n return `reciple.config.${esm ? 'm' : ''}${type}`;\n }\n\n export function normalizeTsdownConfig({ type, overrides }: { type?: LangType; overrides?: BuildConfig; } = {}): TsdownConfig {\n return {\n entry: [`./src/**/*.{ts,tsx,js,jsx}`],\n outDir: './modules',\n tsconfig: `./${type ?? 'ts'}config.json`,\n external: [],\n sourcemap: true,\n treeshake: true,\n clean: true,\n ...overrides,\n watch: false,\n platform: 'node',\n format: 'esm',\n unbundle: true,\n noExternal: undefined,\n skipNodeModulesBundle: true\n };\n }\n}\n"],"mappings":"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"}
@@ -2,7 +2,7 @@ import { AnyModule } from "../../helpers/types.mjs";
2
2
  import { Logger } from "@prtty/print";
3
3
  import { Client, RecipleError } from "@reciple/core";
4
4
  import { Awaitable } from "discord.js";
5
- import * as globby0 from "globby";
5
+ import * as globby$1 from "globby";
6
6
  import { EventEmitter } from "node:events";
7
7
 
8
8
  //#region src/classes/client/ModuleLoader.d.ts
@@ -26,7 +26,7 @@ declare class ModuleLoader extends EventEmitter<ModuleLoader.Events> {
26
26
  private emitOrThrow;
27
27
  }
28
28
  declare namespace ModuleLoader {
29
- let globby: typeof globby0 | null;
29
+ let globby: typeof globby$1 | null;
30
30
  const fileTypes: string[];
31
31
  interface Config {
32
32
  directories?: string[];
@@ -48,7 +48,7 @@ declare namespace ModuleLoader {
48
48
  outDir: string;
49
49
  cwd?: string;
50
50
  }
51
- function getGlobby(): Promise<typeof globby0>;
51
+ function getGlobby(): Promise<typeof globby$1>;
52
52
  }
53
53
  //#endregion
54
54
  export { ModuleLoader };
@@ -11,14 +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$1 from "node:path";
14
+ import path from "node:path";
15
15
  import { recursiveDefaults } from "@reciple/utils";
16
16
  import { mkdir, readdir, stat } from "node:fs/promises";
17
17
  import { colors } from "@prtty/prtty";
18
18
  import { CommandType, RecipleError } from "@reciple/core";
19
19
  import "discord.js";
20
20
  import micromatch from "micromatch";
21
- import { globby as globby$1, isDynamicPattern } from "globby";
21
+ import { globby, isDynamicPattern } from "globby";
22
22
  import { EventEmitter } from "node:events";
23
23
 
24
24
  //#region src/classes/client/ModuleLoader.ts
@@ -58,7 +58,7 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
58
58
  let directories = [];
59
59
  for (const directory of config?.directories ?? []) {
60
60
  if (isDynamicPattern(directory, { cwd })) {
61
- const matches = await globby$1(directory, {
61
+ const matches = await globby(directory, {
62
62
  cwd,
63
63
  ignore: config?.ignore,
64
64
  onlyDirectories: true,
@@ -68,7 +68,7 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
68
68
  scanned.push(...matches);
69
69
  continue;
70
70
  }
71
- scanned.push(path$1.join(cwd, directory));
71
+ scanned.push(path.join(cwd, directory));
72
72
  }
73
73
  for (const directory of scanned) {
74
74
  if (!await stat(directory).catch(() => void 0) && config?.createDirectories !== false) await mkdir(directory, { recursive: true });
@@ -86,7 +86,7 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
86
86
  matchBase: true,
87
87
  dot: true
88
88
  });
89
- files = files.map((f) => path$1.join(directory, f));
89
+ files = files.map((f) => path.join(directory, f));
90
90
  for (const file of files) {
91
91
  if (config?.filter ? !await config?.filter(file) : ModuleLoader.fileTypes.every((type) => !file.endsWith(`.${type}`))) continue;
92
92
  modules.push(file);
@@ -97,7 +97,7 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
97
97
  }
98
98
  static async resolveModuleFromPath(filepath, options) {
99
99
  if (!await stat(filepath).catch(() => void 0)) throw new RecipleError(`Module not found: ${filepath}`);
100
- const data = recursiveDefaults(await import(`file://${path$1.resolve(options?.cwd ?? process.cwd(), filepath)}`));
100
+ const data = recursiveDefaults(await import(`file://${path.resolve(options?.cwd ?? process.cwd(), filepath)}`));
101
101
  if (BaseModule.isModule(data)) return data;
102
102
  if (data && "moduleType" in data) switch (data?.moduleType) {
103
103
  case ModuleType.Command:
@@ -125,10 +125,10 @@ var ModuleLoader = class ModuleLoader extends EventEmitter {
125
125
  return BaseModule.from(data);
126
126
  }
127
127
  static async resolveSourceDirectories(options) {
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));
128
+ const dir = path.isAbsolute(options.baseUrl) ? options.baseUrl : path.resolve(path.join(options.cwd ?? process.cwd(), options.baseUrl));
129
+ const root = path.resolve(path.join(dir, options.rootDir));
130
+ const out = path.resolve(path.join(dir, options.outDir));
131
+ return options.directories.map((directory) => path.resolve(directory).replace(out, root));
132
132
  }
133
133
  emitOrThrow(event, error) {
134
134
  if (this.client.listenerCount(event) > 0) return this.emit(event, error);
@@ -1 +1 @@
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
+ {"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 { 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,6 +1,6 @@
1
1
  import { BaseModule } from "../modules/BaseModule.mjs";
2
2
  import { ModuleType } from "../../helpers/constants.mjs";
3
- import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.110.0/helpers/decorate.mjs";
3
+ import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.112.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";
@@ -1,6 +1,6 @@
1
1
  import { BaseModule } from "./BaseModule.mjs";
2
2
  import { ModuleType } from "../../helpers/constants.mjs";
3
- import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.110.0/helpers/decorate.mjs";
3
+ import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.112.0/helpers/decorate.mjs";
4
4
  import { CommandPostcondition } from "@reciple/core";
5
5
  import { hasMixin, mix } from "ts-mixer";
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { BaseModule } from "./BaseModule.mjs";
2
2
  import { ModuleType } from "../../helpers/constants.mjs";
3
- import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.110.0/helpers/decorate.mjs";
3
+ import { __decorate } from "../../_virtual/_@oxc-project_runtime@0.112.0/helpers/decorate.mjs";
4
4
  import { CommandPrecondition } from "@reciple/core";
5
5
  import { hasMixin, mix } from "ts-mixer";
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { BaseModule } from "../BaseModule.mjs";
2
2
  import { ModuleType } from "../../../helpers/constants.mjs";
3
- import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.110.0/helpers/decorate.mjs";
3
+ import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.112.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";
@@ -1,6 +1,6 @@
1
1
  import { BaseModule } from "../BaseModule.mjs";
2
2
  import { ModuleType } from "../../../helpers/constants.mjs";
3
- import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.110.0/helpers/decorate.mjs";
3
+ import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.112.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";
@@ -1,6 +1,6 @@
1
1
  import { BaseModule } from "../BaseModule.mjs";
2
2
  import { ModuleType } from "../../../helpers/constants.mjs";
3
- import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.110.0/helpers/decorate.mjs";
3
+ import { __decorate } from "../../../_virtual/_@oxc-project_runtime@0.112.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";
@@ -53,7 +53,7 @@ var TemplateBuilder = class TemplateBuilder {
53
53
  placeholder: `Leave empty to use current directory`,
54
54
  defaultValue: process.cwd(),
55
55
  validate: (value) => {
56
- value = path.resolve(value);
56
+ value = path.resolve(value ?? "");
57
57
  if (existsSync(value) && !statSync(value).isDirectory()) return "Invalid folder directory";
58
58
  }
59
59
  });
@@ -1 +1 @@
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 } 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 text({\n message: 'Enter Discord Bot Token',\n placeholder: 'Bot Token from Discord Developer Portal',\n defaultValue: env[tokenKey] || ''\n });\n\n if (isCancel(token)) throw new NotAnError('Operation cancelled');\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: `SlashCommand.${this.typescript ? 'ts' : 'js'}`,\n template: moduleTemplates.find(t => t.name === 'SlashCommand')\n })\n .setupPlaceholders()\n .then(m => m.build({ silent: true })),\n new ModuleTemplateBuilder({\n ...moduleOptions,\n directory: 'src/events',\n filename: `ClientEvent.${this.typescript ? 'ts' : 'js'}`,\n template: moduleTemplates.find(t => t.name === 'ClientEvent')\n })\n .setupPlaceholders()\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
+ {"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 } 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 text({\n message: 'Enter Discord Bot Token',\n placeholder: 'Bot Token from Discord Developer Portal',\n defaultValue: env[tokenKey] || ''\n });\n\n if (isCancel(token)) throw new NotAnError('Operation cancelled');\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: `SlashCommand.${this.typescript ? 'ts' : 'js'}`,\n template: moduleTemplates.find(t => t.name === 'SlashCommand')\n })\n .setupPlaceholders()\n .then(m => m.build({ silent: true })),\n new ModuleTemplateBuilder({\n ...moduleOptions,\n directory: 'src/events',\n filename: `ClientEvent.${this.typescript ? 'ts' : 'js'}`,\n template: moduleTemplates.find(t => t.name === 'ClientEvent')\n })\n .setupPlaceholders()\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,36 +1,36 @@
1
1
  import { ModuleType } from "../../helpers/constants.mjs";
2
2
  import { AnyModuleData } from "../../helpers/types.mjs";
3
3
  import { Validator } from "@reciple/core";
4
- import * as _sapphire_shapeshift40 from "@sapphire/shapeshift";
4
+ import * as _sapphire_shapeshift0 from "@sapphire/shapeshift";
5
5
 
6
6
  //#region src/classes/validation/BaseModuleValidator.d.ts
7
7
  declare class BaseModuleValidator extends Validator {
8
- static id: _sapphire_shapeshift40.StringValidator<string>;
9
- static moduleType: _sapphire_shapeshift40.NativeEnumValidator<typeof ModuleType>;
10
- static onEnable: _sapphire_shapeshift40.UnionValidator<Function | undefined>;
11
- static onReady: _sapphire_shapeshift40.UnionValidator<Function | undefined>;
12
- static onDisable: _sapphire_shapeshift40.UnionValidator<Function | undefined>;
13
- static object: _sapphire_shapeshift40.ObjectValidator<{
8
+ static id: _sapphire_shapeshift0.StringValidator<string>;
9
+ static moduleType: _sapphire_shapeshift0.NativeEnumValidator<typeof ModuleType>;
10
+ static onEnable: _sapphire_shapeshift0.UnionValidator<Function | undefined>;
11
+ static onReady: _sapphire_shapeshift0.UnionValidator<Function | undefined>;
12
+ static onDisable: _sapphire_shapeshift0.UnionValidator<Function | undefined>;
13
+ static object: _sapphire_shapeshift0.ObjectValidator<{
14
14
  id: string | undefined;
15
15
  moduleType: ModuleType | undefined;
16
16
  onEnable: Function | undefined;
17
17
  onReady: Function | undefined;
18
18
  onDisable: Function | undefined;
19
- }, _sapphire_shapeshift40.UndefinedToOptional<{
19
+ }, _sapphire_shapeshift0.UndefinedToOptional<{
20
20
  id: string | undefined;
21
21
  moduleType: ModuleType | undefined;
22
22
  onEnable: Function | undefined;
23
23
  onReady: Function | undefined;
24
24
  onDisable: Function | undefined;
25
25
  }>>;
26
- static resolvable: _sapphire_shapeshift40.UnionValidator<_sapphire_shapeshift40.UndefinedToOptional<{
27
- toJSON: Function;
28
- }> | _sapphire_shapeshift40.UndefinedToOptional<{
26
+ static resolvable: _sapphire_shapeshift0.UnionValidator<_sapphire_shapeshift0.UndefinedToOptional<{
29
27
  id: string | undefined;
30
28
  moduleType: ModuleType | undefined;
31
29
  onEnable: Function | undefined;
32
30
  onReady: Function | undefined;
33
31
  onDisable: Function | undefined;
32
+ }> | _sapphire_shapeshift0.UndefinedToOptional<{
33
+ toJSON: Function;
34
34
  }>>;
35
35
  static isValidId(id: unknown): asserts id is string;
36
36
  static isValidModuleType(moduleType: unknown): asserts moduleType is ModuleType;
@@ -3,11 +3,11 @@ import { AnyCommandModuleData } from "../../helpers/types.mjs";
3
3
  import "../../index.mjs";
4
4
  import * as _reciple_core0 from "@reciple/core";
5
5
  import { Validator } from "@reciple/core";
6
- import * as _sapphire_shapeshift15 from "@sapphire/shapeshift";
6
+ import * as _sapphire_shapeshift0 from "@sapphire/shapeshift";
7
7
 
8
8
  //#region src/classes/validation/CommandModuleValidator.d.ts
9
9
  declare class CommandModuleValidator extends Validator {
10
- static object: _sapphire_shapeshift15.ObjectValidator<{
10
+ static object: _sapphire_shapeshift0.ObjectValidator<{
11
11
  id: string | undefined;
12
12
  moduleType: ModuleType | undefined;
13
13
  onEnable: Function | undefined;
@@ -16,23 +16,23 @@ declare class CommandModuleValidator extends Validator {
16
16
  } & {
17
17
  id: string;
18
18
  type: _reciple_core0.CommandType;
19
- data: _sapphire_shapeshift15.UndefinedToOptional<{
19
+ data: _sapphire_shapeshift0.UndefinedToOptional<{
20
20
  name: any;
21
21
  description: any;
22
22
  aliases: any;
23
23
  options: any;
24
24
  flags: any;
25
- }> | _sapphire_shapeshift15.UndefinedToOptional<{
25
+ }> | _sapphire_shapeshift0.UndefinedToOptional<{
26
26
  type: any;
27
27
  name: any;
28
28
  }>;
29
29
  cooldown: number | undefined;
30
- preconditions: _sapphire_shapeshift15.UndefinedToOptional<{
30
+ preconditions: _sapphire_shapeshift0.UndefinedToOptional<{
31
31
  id: any;
32
32
  scope: any;
33
33
  execute: any;
34
34
  }>[] | undefined;
35
- postconditions: _sapphire_shapeshift15.UndefinedToOptional<{
35
+ postconditions: _sapphire_shapeshift0.UndefinedToOptional<{
36
36
  id: any;
37
37
  scope: any;
38
38
  execute: any;
@@ -40,7 +40,7 @@ declare class CommandModuleValidator extends Validator {
40
40
  disabledPreconditions: string[] | undefined;
41
41
  disabledPostconditions: string[] | undefined;
42
42
  execute: Function;
43
- }, _sapphire_shapeshift15.UndefinedToOptional<{
43
+ }, _sapphire_shapeshift0.UndefinedToOptional<{
44
44
  id: string | undefined;
45
45
  moduleType: ModuleType | undefined;
46
46
  onEnable: Function | undefined;
@@ -49,23 +49,23 @@ declare class CommandModuleValidator extends Validator {
49
49
  } & {
50
50
  id: string;
51
51
  type: _reciple_core0.CommandType;
52
- data: _sapphire_shapeshift15.UndefinedToOptional<{
52
+ data: _sapphire_shapeshift0.UndefinedToOptional<{
53
53
  name: any;
54
54
  description: any;
55
55
  aliases: any;
56
56
  options: any;
57
57
  flags: any;
58
- }> | _sapphire_shapeshift15.UndefinedToOptional<{
58
+ }> | _sapphire_shapeshift0.UndefinedToOptional<{
59
59
  type: any;
60
60
  name: any;
61
61
  }>;
62
62
  cooldown: number | undefined;
63
- preconditions: _sapphire_shapeshift15.UndefinedToOptional<{
63
+ preconditions: _sapphire_shapeshift0.UndefinedToOptional<{
64
64
  id: any;
65
65
  scope: any;
66
66
  execute: any;
67
67
  }>[] | undefined;
68
- postconditions: _sapphire_shapeshift15.UndefinedToOptional<{
68
+ postconditions: _sapphire_shapeshift0.UndefinedToOptional<{
69
69
  id: any;
70
70
  scope: any;
71
71
  execute: any;
@@ -74,9 +74,9 @@ declare class CommandModuleValidator extends Validator {
74
74
  disabledPostconditions: string[] | undefined;
75
75
  execute: Function;
76
76
  }>>;
77
- static resolvable: _sapphire_shapeshift15.UnionValidator<_sapphire_shapeshift15.UndefinedToOptional<{
77
+ static resolvable: _sapphire_shapeshift0.UnionValidator<_sapphire_shapeshift0.UndefinedToOptional<{
78
78
  toJSON: Function;
79
- }> | _sapphire_shapeshift15.UndefinedToOptional<{
79
+ }> | _sapphire_shapeshift0.UndefinedToOptional<{
80
80
  id: string | undefined;
81
81
  moduleType: ModuleType | undefined;
82
82
  onEnable: Function | undefined;
@@ -85,23 +85,23 @@ declare class CommandModuleValidator extends Validator {
85
85
  } & {
86
86
  id: string;
87
87
  type: _reciple_core0.CommandType;
88
- data: _sapphire_shapeshift15.UndefinedToOptional<{
88
+ data: _sapphire_shapeshift0.UndefinedToOptional<{
89
89
  name: any;
90
90
  description: any;
91
91
  aliases: any;
92
92
  options: any;
93
93
  flags: any;
94
- }> | _sapphire_shapeshift15.UndefinedToOptional<{
94
+ }> | _sapphire_shapeshift0.UndefinedToOptional<{
95
95
  type: any;
96
96
  name: any;
97
97
  }>;
98
98
  cooldown: number | undefined;
99
- preconditions: _sapphire_shapeshift15.UndefinedToOptional<{
99
+ preconditions: _sapphire_shapeshift0.UndefinedToOptional<{
100
100
  id: any;
101
101
  scope: any;
102
102
  execute: any;
103
103
  }>[] | undefined;
104
- postconditions: _sapphire_shapeshift15.UndefinedToOptional<{
104
+ postconditions: _sapphire_shapeshift0.UndefinedToOptional<{
105
105
  id: any;
106
106
  scope: any;
107
107
  execute: any;
@@ -3,19 +3,19 @@ import { EventModule } from "../modules/events/EventModule.mjs";
3
3
  import "../../index.mjs";
4
4
  import { Validator } from "@reciple/core";
5
5
  import { EventEmitter } from "node:events";
6
- import * as _sapphire_shapeshift6 from "@sapphire/shapeshift";
6
+ import * as _sapphire_shapeshift0 from "@sapphire/shapeshift";
7
7
 
8
8
  //#region src/classes/validation/EventModuleValidator.d.ts
9
9
  declare class EventModuleValidator extends Validator {
10
- static emitter: _sapphire_shapeshift6.InstanceValidator<EventEmitter<{
10
+ static emitter: _sapphire_shapeshift0.InstanceValidator<EventEmitter<{
11
11
  [x: string]: any[];
12
12
  [x: number]: any[];
13
13
  [x: symbol]: any[];
14
14
  }>>;
15
- static event: _sapphire_shapeshift6.StringValidator<string>;
16
- static once: _sapphire_shapeshift6.UnionValidator<boolean | undefined>;
17
- static onEvent: _sapphire_shapeshift6.InstanceValidator<Function>;
18
- static object: _sapphire_shapeshift6.ObjectValidator<{
15
+ static event: _sapphire_shapeshift0.StringValidator<string>;
16
+ static once: _sapphire_shapeshift0.UnionValidator<boolean | undefined>;
17
+ static onEvent: _sapphire_shapeshift0.InstanceValidator<Function>;
18
+ static object: _sapphire_shapeshift0.ObjectValidator<{
19
19
  id: string | undefined;
20
20
  moduleType: ModuleType | undefined;
21
21
  onEnable: Function | undefined;
@@ -30,7 +30,7 @@ declare class EventModuleValidator extends Validator {
30
30
  event: string;
31
31
  once: boolean | undefined;
32
32
  onEvent: Function;
33
- }, _sapphire_shapeshift6.UndefinedToOptional<{
33
+ }, _sapphire_shapeshift0.UndefinedToOptional<{
34
34
  id: string | undefined;
35
35
  moduleType: ModuleType | undefined;
36
36
  onEnable: Function | undefined;
@@ -46,9 +46,7 @@ declare class EventModuleValidator extends Validator {
46
46
  once: boolean | undefined;
47
47
  onEvent: Function;
48
48
  }>>;
49
- static resolvable: _sapphire_shapeshift6.UnionValidator<_sapphire_shapeshift6.UndefinedToOptional<{
50
- toJSON: Function;
51
- }> | _sapphire_shapeshift6.UndefinedToOptional<{
49
+ static resolvable: _sapphire_shapeshift0.UnionValidator<_sapphire_shapeshift0.UndefinedToOptional<{
52
50
  id: string | undefined;
53
51
  moduleType: ModuleType | undefined;
54
52
  onEnable: Function | undefined;
@@ -63,6 +61,8 @@ declare class EventModuleValidator extends Validator {
63
61
  event: string;
64
62
  once: boolean | undefined;
65
63
  onEvent: Function;
64
+ }> | _sapphire_shapeshift0.UndefinedToOptional<{
65
+ toJSON: Function;
66
66
  }>>;
67
67
  static isValidEmitter(emitter: unknown): asserts emitter is EventEmitter;
68
68
  static isValidEvent(event: unknown): asserts event is string;
@@ -1,22 +1,22 @@
1
1
  import { PostconditionModule } from "../modules/PostconditionModule.mjs";
2
2
  import { CommandPostconditionReason, CommandType, Validator } from "@reciple/core";
3
- import * as _sapphire_shapeshift32 from "@sapphire/shapeshift";
3
+ import * as _sapphire_shapeshift0 from "@sapphire/shapeshift";
4
4
 
5
5
  //#region src/classes/validation/PostconditionModule.d.ts
6
6
  declare class PostconditionModuleValidator extends Validator {
7
- static scope: _sapphire_shapeshift32.UnionValidator<CommandType[] | undefined>;
8
- static accepts: _sapphire_shapeshift32.UnionValidator<CommandPostconditionReason[] | undefined>;
9
- static execute: _sapphire_shapeshift32.InstanceValidator<Function>;
10
- static object: _sapphire_shapeshift32.ObjectValidator<{
7
+ static scope: _sapphire_shapeshift0.UnionValidator<CommandType[] | undefined>;
8
+ static accepts: _sapphire_shapeshift0.UnionValidator<CommandPostconditionReason[] | undefined>;
9
+ static execute: _sapphire_shapeshift0.InstanceValidator<Function>;
10
+ static object: _sapphire_shapeshift0.ObjectValidator<{
11
11
  scope: CommandType[] | undefined;
12
12
  execute: Function;
13
- }, _sapphire_shapeshift32.UndefinedToOptional<{
13
+ }, _sapphire_shapeshift0.UndefinedToOptional<{
14
14
  scope: CommandType[] | undefined;
15
15
  execute: Function;
16
16
  }>>;
17
- static resolvable: _sapphire_shapeshift32.UnionValidator<_sapphire_shapeshift32.UndefinedToOptional<{
17
+ static resolvable: _sapphire_shapeshift0.UnionValidator<_sapphire_shapeshift0.UndefinedToOptional<{
18
18
  toJSON: Function;
19
- }> | _sapphire_shapeshift32.UndefinedToOptional<{
19
+ }> | _sapphire_shapeshift0.UndefinedToOptional<{
20
20
  scope: CommandType[] | undefined;
21
21
  execute: Function;
22
22
  }>>;
@@ -14,10 +14,10 @@ declare class PreconditionModuleValidator extends Validator {
14
14
  execute: Function;
15
15
  }>>;
16
16
  static resolvable: _sapphire_shapeshift0.UnionValidator<_sapphire_shapeshift0.UndefinedToOptional<{
17
+ toJSON: Function;
18
+ }> | _sapphire_shapeshift0.UndefinedToOptional<{
17
19
  scope: CommandType[] | undefined;
18
20
  execute: Function;
19
- }> | _sapphire_shapeshift0.UndefinedToOptional<{
20
- toJSON: Function;
21
21
  }>>;
22
22
  static isValidScope(scope: unknown): asserts scope is CommandType[];
23
23
  static isValidExecute(execute: unknown): asserts execute is (...args: unknown[]) => Promise<void>;
@@ -15,7 +15,7 @@ type AnyModule = BaseModule | AnyCommandModule | PreconditionModule | Postcondit
15
15
  type AnyModuleData = BaseModule.Data | AnyCommandModuleData | PreconditionModule.Data | PostconditionModule.Data | EventModule.Data;
16
16
  type AnyCommandModule<T extends CommandType = CommandType> = T extends CommandType.Message ? MessageCommandModule : T extends CommandType.Slash ? SlashCommandModule : T extends CommandType.ContextMenu ? ContextMenuCommandModule : MessageCommandModule | SlashCommandModule | ContextMenuCommandModule;
17
17
  type AnyCommandModuleData<T extends CommandType = CommandType> = T extends CommandType.Message ? MessageCommandModule.Data : T extends CommandType.Slash ? SlashCommandModule.Data : T extends CommandType.ContextMenu ? ContextMenuCommandModule.Data : MessageCommandModule.Data | SlashCommandModule.Data | ContextMenuCommandModule.Data;
18
- type BuildConfig = Omit<UserConfig, 'watch' | 'skipNodeModulesBundle' | 'platform' | 'format' | 'unbundle' | 'skipNodeModulesBundle' | 'cjsDefault' | 'workspace' | 'customLogger' | 'logLevel'>;
18
+ type BuildConfig = Omit<UserConfig, 'watch' | 'skipNodeModulesBundle' | 'platform' | 'format' | 'unbundle' | 'skipNodeModulesBundle' | 'noExternal' | 'cjsDefault' | 'workspace' | 'customLogger' | 'logLevel'>;
19
19
  type ShardingConfig = Omit<ShardingManagerOptions, 'shardArgs' | 'token' | 'execArgv'>;
20
20
  //#endregion
21
21
  export { AnyCommandBuilderMethods, AnyCommandModule, AnyCommandModuleData, AnyModule, AnyModuleData, BuildConfig, ShardingConfig };
package/dist/package.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  //#region package.json
2
2
  var package_default = {
3
3
  name: "reciple",
4
- version: "10.0.24",
4
+ version: "10.0.27",
5
5
  license: "LGPL-3.0-only",
6
6
  description: "The CLI for reciple",
7
7
  module: "./dist/index.mjs",
@@ -36,29 +36,29 @@ var package_default = {
36
36
  "directory": "packages/reciple"
37
37
  },
38
38
  dependencies: {
39
- "@clack/prompts": "^0.11.0",
39
+ "@clack/prompts": "^1.0.0",
40
40
  "@dotenvx/dotenvx": "^1.52.0",
41
41
  "@prtty/print": "catalog:",
42
42
  "@prtty/prtty": "catalog:",
43
43
  "@reciple/utils": "workspace:^",
44
44
  "@sapphire/shapeshift": "^4.0.0",
45
45
  "@sapphire/snowflake": "^3.5.5",
46
- "commander": "^14.0.2",
46
+ "commander": "^14.0.3",
47
47
  "github-slugger": "^2.0.0",
48
48
  "globby": "^16.1.0",
49
49
  "jiti": "^2.6.1",
50
50
  "micromatch": "^4.0.8",
51
- "nypm": "^0.6.4",
51
+ "nypm": "^0.6.5",
52
52
  "pkg-types": "^2.3.0",
53
53
  "ts-mixer": "^6.0.4",
54
- "tsdown": "^0.20.1"
54
+ "tsdown": "catalog:"
55
55
  },
56
56
  devDependencies: {
57
57
  "@reciple/jsx": "workspace:^",
58
58
  "@types/micromatch": "^4.0.10",
59
59
  "@types/node": "catalog:",
60
60
  "nodemon": "^3.1.11",
61
- "rolldown": "^1.0.0-rc.1",
61
+ "rolldown": "^1.0.0-rc.3",
62
62
  "typescript": "catalog:"
63
63
  },
64
64
  peerDependencies: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reciple",
3
- "version": "10.0.24",
3
+ "version": "10.0.27",
4
4
  "license": "LGPL-3.0-only",
5
5
  "description": "The CLI for reciple",
6
6
  "module": "./dist/index.mjs",
@@ -35,29 +35,29 @@
35
35
  "directory": "packages/reciple"
36
36
  },
37
37
  "dependencies": {
38
- "@clack/prompts": "^0.11.0",
38
+ "@clack/prompts": "^1.0.0",
39
39
  "@dotenvx/dotenvx": "^1.52.0",
40
- "@prtty/print": "^1.1.0",
41
- "@prtty/prtty": "^1.1.0",
40
+ "@prtty/print": "^1.1.1",
41
+ "@prtty/prtty": "^1.1.1",
42
42
  "@reciple/utils": "^10.0.1",
43
43
  "@sapphire/shapeshift": "^4.0.0",
44
44
  "@sapphire/snowflake": "^3.5.5",
45
- "commander": "^14.0.2",
45
+ "commander": "^14.0.3",
46
46
  "github-slugger": "^2.0.0",
47
47
  "globby": "^16.1.0",
48
48
  "jiti": "^2.6.1",
49
49
  "micromatch": "^4.0.8",
50
- "nypm": "^0.6.4",
50
+ "nypm": "^0.6.5",
51
51
  "pkg-types": "^2.3.0",
52
52
  "ts-mixer": "^6.0.4",
53
- "tsdown": "^0.20.1"
53
+ "tsdown": "^0.20.3"
54
54
  },
55
55
  "devDependencies": {
56
- "@reciple/jsx": "^10.0.2",
56
+ "@reciple/jsx": "^10.0.8",
57
57
  "@types/micromatch": "^4.0.10",
58
- "@types/node": "^25.0.9",
58
+ "@types/node": "^25.2.1",
59
59
  "nodemon": "^3.1.11",
60
- "rolldown": "^1.0.0-rc.1",
60
+ "rolldown": "^1.0.0-rc.3",
61
61
  "typescript": "^5.9.3"
62
62
  },
63
63
  "peerDependencies": {