reciple 9.4.1 → 9.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +11 -13
  2. package/dist/bin.js +2 -132
  3. package/dist/bin.js.map +1 -1
  4. package/dist/classes/CLI.d.ts +54 -0
  5. package/dist/classes/CLI.js +188 -0
  6. package/dist/classes/CLI.js.map +1 -0
  7. package/dist/classes/Config.d.ts +28 -51
  8. package/dist/classes/Config.js +54 -56
  9. package/dist/classes/Config.js.map +1 -1
  10. package/dist/classes/EventHandlers.d.ts +9 -0
  11. package/dist/classes/EventHandlers.js +71 -0
  12. package/dist/classes/EventHandlers.js.map +1 -0
  13. package/dist/classes/ModuleLoader.d.ts +25 -0
  14. package/dist/classes/ModuleLoader.js +95 -0
  15. package/dist/classes/ModuleLoader.js.map +1 -0
  16. package/dist/commands/dev.d.ts +12 -0
  17. package/dist/commands/dev.js +140 -0
  18. package/dist/commands/dev.js.map +1 -0
  19. package/dist/commands/init.d.ts +7 -0
  20. package/dist/commands/init.js +10 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/shard.d.ts +9 -0
  23. package/dist/commands/shard.js +101 -0
  24. package/dist/commands/shard.js.map +1 -0
  25. package/dist/commands/start.d.ts +9 -0
  26. package/dist/commands/start.js +94 -0
  27. package/dist/commands/start.js.map +1 -0
  28. package/dist/exports.d.ts +5 -9
  29. package/dist/exports.js +5 -3
  30. package/dist/exports.js.map +1 -1
  31. package/dist/index.d.ts +6 -4
  32. package/dist/index.js +3 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/types/constants.d.ts +6 -0
  35. package/dist/types/constants.js +29 -0
  36. package/dist/types/constants.js.map +1 -0
  37. package/dist/types/structures.d.ts +36 -0
  38. package/dist/types/structures.js +2 -0
  39. package/dist/types/structures.js.map +1 -0
  40. package/package.json +8 -5
  41. package/static/config.d.mts +3 -1
  42. package/static/config.mjs +18 -0
  43. package/dist/utils/cli.d.ts +0 -60
  44. package/dist/utils/cli.js +0 -80
  45. package/dist/utils/cli.js.map +0 -1
  46. package/dist/utils/logger.d.ts +0 -31
  47. package/dist/utils/logger.js +0 -87
  48. package/dist/utils/logger.js.map +0 -1
  49. package/dist/utils/modules.d.ts +0 -10
  50. package/dist/utils/modules.js +0 -44
  51. package/dist/utils/modules.js.map +0 -1
package/README.md CHANGED
@@ -50,23 +50,21 @@ After that configure the template you want to use. [Learn More](https://reciple.
50
50
  ## CLI usage
51
51
 
52
52
  ```yml
53
- Usage: reciple [options] [cwd]
53
+ Usage: reciple [options] [command]
54
54
 
55
55
  Reciple is a Discord.js bot framework
56
56
 
57
- Arguments:
58
- cwd Change the current working directory
59
-
60
57
  Options:
61
- -v, --version output the version number
62
- -t, --token <token> Replace used bot token
63
- -c, --config <dir> Set path to a config file
64
- -D, --debugmode Enable debug mode
65
- -y, --yes Agree to all Reciple confirmation prompts
66
- --env <file> .env file location
67
- --shardmode Modifies some functionalities to support sharding
68
- --setup Create required config without starting the bot
69
- -h, --help display help for command
58
+ -v, --version output the version number
59
+ --env <file> Set .env file path (default: [".env"])
60
+ --debug Enable debug mode (default: false)
61
+ --cwd <dir> Set current working directory (default: "./")
62
+ -h, --help display help for command
63
+
64
+ Commands:
65
+ shard [options] Starts in sharding mode
66
+ start [options] Starts the bot
67
+ help [command] display help for command
70
68
  ```
71
69
 
72
70
  ## Message Commands
package/dist/bin.js CHANGED
@@ -1,134 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import { ContextMenuCommandBuilder, Logger, MessageCommandBuilder, SlashCommandBuilder, buildVersion } from '@reciple/core';
3
- import { createLogger, addEventListenersToClient } from './utils/logger.js';
4
- import { RecipleClient, findModules } from './index.js';
5
- import { command, cli, cliVersion, updateChecker } from './utils/cli.js';
6
- import { setTimeout as setTimeoutAsync } from 'node:timers/promises';
7
- import { existsAsync, resolveEnvProtocol } from '@reciple/utils';
8
- import { parentPort, threadId } from 'node:worker_threads';
9
- import { ConfigReader } from './classes/Config.js';
10
- import { config as loadEnv } from 'dotenv';
11
- import { mkdir } from 'node:fs/promises';
12
- import { kleur } from 'fallout-utility';
13
- import path from 'node:path';
14
- import semver from 'semver';
15
- command.parse();
16
- if (!await existsAsync(cli.cwd))
17
- await mkdir(cli.cwd, { recursive: true });
18
- if (cli.cwd !== cli.nodeCwd || parentPort === null) {
19
- process.chdir(cli.cwd);
20
- cli.isCwdUpdated = true;
21
- }
22
- loadEnv({ path: cli.options.env });
23
- let configPaths = [path.resolve('./reciple.mjs'), path.resolve('./reciple.js')];
24
- const configPath = path.resolve(cli.options.config ?? 'reciple.mjs');
25
- const isCustomPath = !configPaths.includes(configPath) || !!cli.options.config;
26
- if (!isCustomPath) {
27
- configPaths = configPaths.filter(p => p !== configPath);
28
- configPaths.unshift(configPath);
29
- }
30
- else {
31
- configPaths = [configPath];
32
- }
33
- const config = await ConfigReader.readConfigJS({ paths: configPaths }).then(c => c.config);
34
- const logger = config.logger instanceof Logger
35
- ? config.logger
36
- : config.logger?.enabled
37
- ? await createLogger(config.logger)
38
- : null;
39
- global.logger = logger ?? undefined;
40
- if (cli.options.setup)
41
- process.exit(0);
42
- if (cli.shardmode)
43
- config.applicationCommandRegister = { ...config.applicationCommandRegister, enabled: false };
44
- if (cli.options.token)
45
- config.token = resolveEnvProtocol(cli.options.token) ?? config.token;
46
- const processErrorHandler = (err) => logger?.error(err);
47
- process.once('uncaughtException', processErrorHandler);
48
- process.once('unhandledRejection', processErrorHandler);
49
- process.on('warning', warn => logger?.warn(warn));
50
- if (cli.shardmode) {
51
- const message = { type: 'ProcessInfo', pid: process.pid, threadId, log: cli.logPath };
52
- if (parentPort)
53
- parentPort.postMessage(message);
54
- if (process.send)
55
- process.send(message);
56
- }
57
- if (config.version && !semver.satisfies(cliVersion, config.version)) {
58
- logger?.error(`Your config version doesn't support Reciple CLI v${cliVersion}`);
59
- process.exit(1);
60
- }
61
- logger?.info(`Starting Reciple client v${buildVersion} - ${new Date()}`);
62
- const client = new RecipleClient(config);
63
- global.reciple = client;
64
- client.setLogger(logger);
65
- addEventListenersToClient(client);
66
- const moduleFilesFilter = (file) => file.endsWith('.js') || file.endsWith('.cjs') || file.endsWith('.mjs');
67
- const modules = await client.modules.resolveModuleFiles({
68
- files: await findModules(config.modules, (f) => moduleFilesFilter(f)),
69
- disableVersionCheck: config.modules?.disableModuleVersionCheck
70
- });
71
- const startedModules = await client.modules.startModules();
72
- const failedToStartModules = modules.length - startedModules.length;
73
- if (failedToStartModules > 0)
74
- logger?.warn(`Failed to load (${failedToStartModules}) modules.`);
75
- client.once('ready', async () => {
76
- if (!client.isReady())
77
- return;
78
- logger?.debug(`Client is ready!`);
79
- process.removeListener('uncaughtException', processErrorHandler);
80
- process.removeListener('unhandledRejection', processErrorHandler);
81
- const loadedModules = await client.modules.loadModules({ cacheCommands: true });
82
- const failedToLoadModules = startedModules.length - loadedModules.length;
83
- if (failedToLoadModules > 0)
84
- logger?.warn(`Failed to load (${failedToLoadModules}) modules.`);
85
- let stopping = false;
86
- const unloadModulesAndStopProcess = async (signal) => {
87
- if (stopping)
88
- return;
89
- logger?.debug(`Received exit signal: ${signal}`);
90
- stopping = true;
91
- await client.destroy(true);
92
- const signalString = signal === 'SIGINT' ? 'keyboard interrupt' : signal === 'SIGTERM' ? 'terminate' : String(signal);
93
- logger?.warn(`Process exited: ${kleur.yellow(signalString)}`);
94
- logger?.closeWriteStream();
95
- await setTimeoutAsync(10);
96
- process.exit(0);
97
- };
98
- process.stdin.resume();
99
- process.once('SIGHUP', unloadModulesAndStopProcess);
100
- process.once('SIGINT', unloadModulesAndStopProcess);
101
- process.once('SIGQUIT', unloadModulesAndStopProcess);
102
- process.once('SIGABRT', unloadModulesAndStopProcess);
103
- process.once('SIGALRM', unloadModulesAndStopProcess);
104
- process.once('SIGTERM', unloadModulesAndStopProcess);
105
- process.once('SIGBREAK', unloadModulesAndStopProcess);
106
- process.once('SIGUSR2', unloadModulesAndStopProcess);
107
- client.on('interactionCreate', interaction => {
108
- if (interaction.isContextMenuCommand()) {
109
- ContextMenuCommandBuilder.execute({ client, interaction });
110
- }
111
- else if (interaction.isChatInputCommand()) {
112
- SlashCommandBuilder.execute({ client, interaction });
113
- }
114
- });
115
- client.on('messageCreate', message => {
116
- MessageCommandBuilder.execute({ client, message });
117
- });
118
- if (config.applicationCommandRegister?.enabled !== false)
119
- await client.commands.registerApplicationCommands();
120
- logger?.warn(`Logged in as ${kleur.bold().cyan(client.user.tag)} ${kleur.magenta('(' + client.user.id + ')')}`);
121
- logger?.log(`Loaded ${client.commands.contextMenuCommands.size} context menu command(s)`);
122
- logger?.log(`Loaded ${client.commands.messageCommands.size} message command(s)`);
123
- logger?.log(`Loaded ${client.commands.slashCommands.size} slash command(s)`);
124
- logger?.log(`Loaded ${client.commands.preconditions.size} global command precondition(s)`);
125
- logger?.log(`Loaded ${client.commands.halts.size} global command halt(s)`);
126
- if (!config.checkForUpdates)
127
- return;
128
- updateChecker.on('updateAvailable', data => logger?.warn(`An update is available for ${kleur.cyan(data.package)}: ${kleur.red(data.currentVersion)} ${kleur.gray('->')} ${kleur.green().bold(data.updatedVersion)}`));
129
- updateChecker.on('updateError', (pkg, error) => logger?.debug(`An error occured while checking for updates for ${pkg}:`, error));
130
- updateChecker.startCheckInterval(1000 * 60 * 60);
131
- });
132
- logger?.debug(`Logging in...`);
133
- await client.login().then(() => logger?.debug(`Login successful`));
2
+ import { cli } from './types/constants.js';
3
+ await cli.parse();
134
4
  //# sourceMappingURL=bin.js.map
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAE3C,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { type Logger } from '@reciple/core';
2
+ import { PackageUpdateChecker, type PackageUpdateCheckerOptions } from '@reciple/utils';
3
+ import type { Command, OptionValues } from 'commander';
4
+ import { type PackageJson } from 'fallout-utility';
5
+ import type { CLIDefaultFlags } from '../types/structures.js';
6
+ import { type ExecSyncOptions } from 'node:child_process';
7
+ export interface CLIOptions {
8
+ packageJSON: PackageJson;
9
+ processCwd?: string;
10
+ commander: Command;
11
+ binPath: string;
12
+ logger?: Logger;
13
+ updateChecker?: PackageUpdateCheckerOptions | PackageUpdateChecker;
14
+ }
15
+ export declare class CLI implements CLIOptions {
16
+ static root: string;
17
+ static commandsDir: string;
18
+ static get shardMode(): boolean;
19
+ static get shardLogsFolder(): string | null | undefined;
20
+ static get shardDeployCommands(): boolean | null;
21
+ static get threadId(): number | null;
22
+ packageJSON: PackageJson;
23
+ processCwd: string;
24
+ commander: Command;
25
+ binPath: string;
26
+ logger?: Logger;
27
+ logPath?: string;
28
+ updateChecker?: PackageUpdateChecker;
29
+ get name(): string;
30
+ get description(): string;
31
+ get version(): string;
32
+ get args(): string[];
33
+ get flags(): CLIDefaultFlags;
34
+ get cwd(): string;
35
+ get isCwdUpdated(): boolean;
36
+ get threadId(): number | null;
37
+ get shardMode(): boolean;
38
+ get shardLogsFolder(): string | null | undefined;
39
+ get shardDeployCommands(): boolean | null;
40
+ get nodeEnv(): string | undefined;
41
+ constructor(options: CLIOptions);
42
+ parse(): Promise<this>;
43
+ registerSubcommands(dir?: string): Promise<Command>;
44
+ getFlags<Flags extends OptionValues = OptionValues>(command: Command | string, mergeDefault?: false): Flags | undefined;
45
+ getFlags<Flags extends OptionValues = OptionValues>(command: Command | string, mergeDefault: true): Flags & CLIDefaultFlags | undefined;
46
+ getFlags(command?: undefined): CLIDefaultFlags;
47
+ getCommand(name: string): Command | undefined;
48
+ getCommand(name?: undefined): Command;
49
+ sendProcessInfo(): Promise<void>;
50
+ protected preActionHandler(command: Command, action: Command): void;
51
+ static stringifyFlags(flags: OptionValues, command: Command, ignored?: string[]): string[];
52
+ static run(script: string, options?: ExecSyncOptions): string | Buffer;
53
+ static clearConsole(): void;
54
+ }
@@ -0,0 +1,188 @@
1
+ import { buildVersion } from '@reciple/core';
2
+ import { existsAsync, PackageUpdateChecker, recursiveDefaults } from '@reciple/utils';
3
+ import { isDebugging, kleur } from 'fallout-utility';
4
+ import { mkdir, readdir, stat } from 'node:fs/promises';
5
+ import path from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { isMainThread, parentPort, threadId } from 'node:worker_threads';
8
+ import { cli } from '../types/constants.js';
9
+ import { config as loadEnv } from 'dotenv';
10
+ import { execSync } from 'node:child_process';
11
+ export class CLI {
12
+ static root = path.join(path.dirname(fileURLToPath(import.meta.url)), '../../');
13
+ static commandsDir = path.join(CLI.root, './dist/commands');
14
+ static get shardMode() {
15
+ return !!process.env.SHARDS && !!process.env.SHARD_COUNT;
16
+ }
17
+ static get shardLogsFolder() {
18
+ return CLI.shardMode ? process.env.SHARDS_LOGS_FOLDER : null;
19
+ }
20
+ static get shardDeployCommands() {
21
+ return CLI.shardMode ? !!process.env.SHARDS_DEPLOY_COMMANDS : null;
22
+ }
23
+ static get threadId() {
24
+ return (!isMainThread && parentPort !== undefined ? threadId : undefined) ?? null;
25
+ }
26
+ packageJSON;
27
+ processCwd;
28
+ commander;
29
+ binPath;
30
+ logger;
31
+ logPath;
32
+ updateChecker;
33
+ get name() {
34
+ return this.packageJSON.name ?? 'reciple';
35
+ }
36
+ get description() {
37
+ return this.packageJSON.description ?? '';
38
+ }
39
+ get version() {
40
+ return this.packageJSON.version;
41
+ }
42
+ get args() {
43
+ return this.commander.args;
44
+ }
45
+ get flags() {
46
+ return this.commander.opts();
47
+ }
48
+ get cwd() {
49
+ const cwd = this.getFlags().cwd;
50
+ return cwd
51
+ ? path.isAbsolute(cwd) ? cwd : path.join(this.processCwd, cwd)
52
+ : this.processCwd;
53
+ }
54
+ get isCwdUpdated() {
55
+ return process.cwd() !== this.processCwd;
56
+ }
57
+ get threadId() {
58
+ return CLI.threadId;
59
+ }
60
+ get shardMode() {
61
+ return CLI.shardMode;
62
+ }
63
+ get shardLogsFolder() {
64
+ return CLI.shardLogsFolder;
65
+ }
66
+ get shardDeployCommands() {
67
+ return CLI.shardDeployCommands;
68
+ }
69
+ get nodeEnv() {
70
+ return process.env.NODE_ENV;
71
+ }
72
+ constructor(options) {
73
+ this.packageJSON = options.packageJSON;
74
+ this.processCwd = options.processCwd ?? process.cwd();
75
+ this.commander = options.commander;
76
+ this.binPath = options.binPath;
77
+ this.logger = options.logger;
78
+ if (options.updateChecker) {
79
+ this.updateChecker = options.updateChecker instanceof PackageUpdateChecker ? options.updateChecker : new PackageUpdateChecker(options.updateChecker);
80
+ }
81
+ this.commander
82
+ .name(this.name)
83
+ .description(this.description)
84
+ .version(`reciple: ${this.version}\n@reciple/client: ${buildVersion}`, '-v, --version')
85
+ .option('--env <file>', 'Set .env file path', (v, p) => p.concat(v), [path.join(this.cwd, '.env')])
86
+ .option('--debug', 'Enable debug mode', isDebugging())
87
+ .option('--production', 'Starts in production mode', false)
88
+ .hook('preAction', (cmd, action) => this.preActionHandler(cmd, action))
89
+ .allowUnknownOption(true);
90
+ if (this.threadId === null)
91
+ this.commander.option('--cwd <dir>', 'Set current working directory', this.processCwd);
92
+ }
93
+ async parse() {
94
+ await this.registerSubcommands();
95
+ if (!await existsAsync(this.cwd))
96
+ await mkdir(this.cwd, { recursive: true });
97
+ const flags = this.getFlags();
98
+ if (flags.debug && this.logger) {
99
+ this.logger.debugmode ??= {};
100
+ this.logger.debugmode.enabled ??= flags.debug;
101
+ this.logger.debugmode.printMessage ??= true;
102
+ }
103
+ this.logger?.debug(`Reciple CLI flags:`, flags);
104
+ if (flags.env.length) {
105
+ this.logger?.debug(`Loading environment variables from:\n ${kleur.cyan(flags.env.join('\n '))}`);
106
+ loadEnv({ path: flags.env });
107
+ }
108
+ this.updateChecker?.on('updateAvailable', data => this.logger?.warn(`An update is available for ${kleur.cyan(data.package)}: ${kleur.red(data.currentVersion)} ${kleur.gray('->')} ${kleur.green().bold(data.updatedVersion)}`));
109
+ this.updateChecker?.on('updateError', (pkg, error) => this.logger?.debug(`An error occured while checking for updates for ${pkg}:`, error));
110
+ this.updateChecker?.startCheckInterval(1000 * 60 * 60);
111
+ await this.commander.parseAsync();
112
+ return this;
113
+ }
114
+ async registerSubcommands(dir = CLI.commandsDir) {
115
+ const statData = await stat(dir).catch(() => null);
116
+ if (!statData)
117
+ return this.commander;
118
+ const files = (await readdir(dir))
119
+ .map(f => path.join(dir, f))
120
+ .filter(f => f.endsWith('.js'));
121
+ for (const file of files) {
122
+ const command = recursiveDefaults(await import(path.isAbsolute(file) ? `file://${file}` : file));
123
+ if (!command || typeof command !== 'function')
124
+ continue;
125
+ await Promise.resolve(command(this.commander, this)).catch(() => null);
126
+ }
127
+ return this.commander;
128
+ }
129
+ getFlags(command, mergeDefault = false) {
130
+ if (!command)
131
+ return this.flags;
132
+ command = typeof command === 'string' ? this.commander.commands.find(c => c.name() === command) : command;
133
+ const flags = command?.opts();
134
+ return mergeDefault ? { ...this.flags, ...flags } : flags;
135
+ }
136
+ getCommand(name) {
137
+ if (!name)
138
+ return this.commander;
139
+ return this.commander.commands.find(c => c.name() === name);
140
+ }
141
+ async sendProcessInfo() {
142
+ const message = { type: 'ProcessInfo', pid: process.pid, threadId, log: cli.logPath };
143
+ if (parentPort)
144
+ parentPort.postMessage(message);
145
+ if (process.send)
146
+ process.send(message);
147
+ }
148
+ preActionHandler(command, action) {
149
+ this.logger?.debug(`Running command: ${kleur.cyan(command.name())} ${kleur.gray(kleur.bold(action.name()))}`);
150
+ const flags = this.getFlags();
151
+ if (flags.debug)
152
+ process.env.NODE_ENV = 'development';
153
+ if (flags.production)
154
+ process.env.NODE_ENV = 'production';
155
+ if ((cli.cwd !== cli.processCwd && !cli.isCwdUpdated) || this.threadId === null)
156
+ process.chdir(cli.cwd);
157
+ if (flags.debug && this.logger) {
158
+ this.logger.debugmode = {
159
+ ...this.logger?.debugmode,
160
+ enabled: true
161
+ };
162
+ }
163
+ }
164
+ static stringifyFlags(flags, command, ignored = []) {
165
+ let arr = [];
166
+ for (const [key, value] of Object.entries(flags)) {
167
+ const option = command.options.find(o => o.name() === key || o.attributeName() === key);
168
+ if (!option || ignored.includes(key))
169
+ continue;
170
+ const flag = option.long ?? option.short ?? `--${option.name()}`;
171
+ if (!option.flags.endsWith('>') && !option.flags.endsWith(']') && typeof value === 'boolean') {
172
+ if (value)
173
+ arr.push(flag);
174
+ continue;
175
+ }
176
+ arr.push(flag, String(value));
177
+ }
178
+ return arr;
179
+ }
180
+ static run(script, options) {
181
+ return execSync(script, options);
182
+ }
183
+ static clearConsole() {
184
+ process.stdout.write("\u001b[3J\u001b[2J\u001b[1J");
185
+ console.clear();
186
+ }
187
+ }
188
+ //# sourceMappingURL=CLI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CLI.js","sourceRoot":"","sources":["../../src/classes/CLI.ts"],"names":[],"mappings":"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"}
@@ -1,56 +1,33 @@
1
- import { Logger, type RecipleClientConfig } from '@reciple/core';
2
- import type { Awaitable } from 'discord.js';
3
- export interface RecipleConfig extends RecipleClientConfig {
4
- logger?: {
5
- enabled: boolean;
6
- debugmode?: boolean | null;
7
- coloredMessages: boolean;
8
- disableLogPrefix: boolean;
9
- logToFile: {
10
- enabled: boolean;
11
- logsFolder: string;
12
- file: string;
13
- };
14
- } | Logger;
15
- modules?: {
16
- dirs: string[];
17
- exclude?: string[];
18
- filter?: (file: string) => Awaitable<boolean>;
19
- disableModuleVersionCheck?: boolean;
20
- };
21
- checkForUpdates?: boolean;
22
- version?: string;
23
- }
1
+ import type { RecipleConfig } from '../types/structures.js';
2
+ import { CLI } from './CLI.js';
3
+ import { type LoggerOptions } from '@reciple/core';
4
+ import type { ShardingManagerOptions } from 'discord.js';
24
5
  export interface RecipleConfigJS {
25
6
  config: RecipleConfig;
7
+ sharding?: Omit<ShardingManagerOptions, 'shardArgs' | 'token' | 'execArgv'>;
8
+ devmode?: {
9
+ watch?: string[];
10
+ ignore?: string[];
11
+ exec?: string[];
12
+ noStart?: boolean;
13
+ killSignal?: NodeJS.Signals;
14
+ };
15
+ }
16
+ export interface ConfigReadOptions {
17
+ path: string;
18
+ createIfNotExists?: boolean;
26
19
  }
27
- export declare class ConfigReader {
20
+ export declare class Config {
21
+ private constructor();
28
22
  static defaultConfigFile: string;
29
- /**
30
- * Reads the default configuration data, processes it, and returns the resulting configuration string.
31
- *
32
- * @return {Promise<string>} The default configuration data as a string.
33
- */
34
- static readDefaultConfig(): Promise<RecipleConfigJS>;
35
- /**
36
- * Reads the default configuration data, processes it, and returns the resulting configuration string.
37
- *
38
- * @return {Promise<string>} The default configuration data as a string.
39
- */
40
- static getDefaultConfigData(): Promise<string>;
41
- static readConfigJS(config: string | {
42
- paths: string[];
43
- default?: string;
44
- }, createIfNotExists?: true): Promise<RecipleConfigJS>;
45
- static readConfigJS(config: string | {
46
- paths: string[];
47
- default?: string;
48
- }, createIfNotExists?: false): Promise<RecipleConfigJS | null>;
49
- /**
50
- * Creates a configuration file if it doesn't exist and returns the file path.
51
- *
52
- * @param {string} file - The path to the configuration file.
53
- * @return {Promise<string>} The path of the created or existing configuration file.
54
- */
55
- static createConfigJS(file: string): Promise<string>;
23
+ static getDefaultConfigData(): Promise<RecipleConfigJS>;
24
+ static getDefaultConfigContent(): Promise<string>;
25
+ static readConfigFile(options: ConfigReadOptions & {
26
+ createIfNotExists: false;
27
+ }): Promise<RecipleConfigJS | null>;
28
+ static readConfigFile(options: ConfigReadOptions & {
29
+ createIfNotExists?: true;
30
+ }): Promise<RecipleConfigJS>;
31
+ static createConfigFile(file: string): Promise<string>;
32
+ static createLoggerOptions(config: RecipleConfig, options?: Partial<LoggerOptions>, cli?: CLI): Promise<LoggerOptions>;
56
33
  }