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
@@ -1,87 +0,0 @@
1
- import { Logger, LoggerLevel, kleur } from 'fallout-utility';
2
- import {} from '../index.js';
3
- import { RecipleModule } from '@reciple/core';
4
- import { cli } from './cli.js';
5
- import path from 'node:path';
6
- /**
7
- * Formats a log message with optional prefix, colored messages, and thread information.
8
- *
9
- * @param {string} message - The log message to format.
10
- * @param {Logger} logger - The logger instance used to get the logger name.
11
- * @param {PartialDeep<Exclude<RecipleConfig['logger'], Logger|undefined>> & { shards?: boolean; }} config - The logger configuration.
12
- * @param {LoggerLevel} level - The log level.
13
- * @return {string} The formatted log message.
14
- */
15
- export function formatLogMessage(message, logger, config, level) {
16
- const color = (msg) => {
17
- if (!config.coloredMessages || level === LoggerLevel.INFO)
18
- return msg;
19
- switch (level) {
20
- case LoggerLevel.WARN:
21
- return kleur.yellow(msg);
22
- case LoggerLevel.ERROR:
23
- return kleur.red(msg);
24
- case LoggerLevel.DEBUG:
25
- return kleur.cyan(msg);
26
- default:
27
- return msg;
28
- }
29
- };
30
- return (!config.disableLogPrefix
31
- ? color(`[${new Date().toLocaleTimeString(undefined, { hour12: false })} ${LoggerLevel[level]}]` +
32
- (config?.shards ?? cli.shardmode ? `[${cli.threadId ?? process.pid}]` : '') +
33
- (logger.name ? `[${logger.name}]` : ''))
34
- : '') + ` ${message}`;
35
- }
36
- /**
37
- * Creates a logger with the specified configuration.
38
- *
39
- * @param {Omit<PartialDeep<Exclude<RecipleConfig['logger'], Logger|undefined>>, 'enabled'> & { shards?: boolean; }} config - The configuration for the logger.
40
- * @return {Promise<Logger>} The created logger instance.
41
- */
42
- export async function createLogger(config) {
43
- const logger = new Logger({
44
- enableDebugmode: (cli.options.debugmode || config?.debugmode) ?? null,
45
- forceEmitLogEvents: true,
46
- formatMessage: (message, level, logger) => formatLogMessage(message, logger, config ?? {}, level)
47
- });
48
- const shards = config?.shards ?? cli.shardmode;
49
- const file = path.join(shards && typeof process.env.SHARDS_LOGS_FOLDER === 'string'
50
- ? process.env.SHARDS_LOGS_FOLDER
51
- : path.join(process.cwd(), config?.logToFile?.logsFolder ? config.logToFile?.logsFolder : 'logs'), !shards
52
- ? (config?.logToFile?.file ?? 'latest.log')
53
- : `shard-${(cli.threadId !== undefined ? (cli.threadId + '-') : '') + process.pid}.log`);
54
- if (config?.logToFile?.enabled) {
55
- await logger.createFileWriteStream({ file });
56
- cli.logPath = file;
57
- }
58
- return logger;
59
- }
60
- /**
61
- * Adds event listeners to the client for various module events and reciple events.
62
- *
63
- * @param {RecipleClient} client - The client to add the event listeners to.
64
- * @return {void} This function does not return anything.
65
- */
66
- export function addEventListenersToClient(client) {
67
- client.on('recipleDebug', debug => client.logger?.debug(debug));
68
- client.modules.on('resolveModuleFileError', (file, error) => client.logger?.err(`Failed to resolve module ${kleur.yellow(quoteString(file))}:`, error));
69
- client.modules.on('preStartModule', (m) => {
70
- if (!RecipleModule.getModuleRoot(m))
71
- Reflect.set(m, 'root', cli.cwd);
72
- client.logger?.debug(`Starting module ${kleur.cyan(quoteString(m.displayName))}`);
73
- });
74
- client.modules.on('postStartModule', (m) => client.logger?.log(`Started module ${kleur.cyan(quoteString(m.displayName))}`));
75
- client.modules.on('startModuleError', (m, err) => client.logger?.error(`Failed to start module ${kleur.yellow(quoteString(m.displayName))}:`, err));
76
- client.modules.on('preLoadModule', (m) => client.logger?.debug(`Loading module ${kleur.cyan(quoteString(m.displayName))}`));
77
- client.modules.on('postLoadModule', (m) => client.logger?.log(`Loaded module ${kleur.cyan(quoteString(m.displayName))}`));
78
- client.modules.on('loadModuleError', (m, err) => client.logger?.error(`Failed to load module ${kleur.yellow(quoteString(m.displayName))}:`, err));
79
- client.modules.on('preUnloadModule', (m) => client.logger?.debug(`Unloading module ${kleur.cyan(quoteString(m.displayName))}`));
80
- client.modules.on('postUnloadModule', (m) => client.logger?.log(`Unloaded module ${kleur.cyan(quoteString(m.displayName))}`));
81
- client.modules.on('unloadModuleError', (m, err) => client.logger?.error(`Failed to unload module ${kleur.yellow(quoteString(m.displayName))}:`, err));
82
- client.on('recipleRegisterApplicationCommands', (commands, guild) => client.logger?.log(`Registered (${commands?.size || 0}) application commands ${guild ? 'to ' + guild : 'globally'}`));
83
- }
84
- function quoteString(string, quote = "'") {
85
- return `${quote}${string}${quote}`;
86
- }
87
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { RecipleConfig } from '../classes/Config.js';
2
- import type { Awaitable } from 'fallout-utility/types';
3
- /**
4
- * Recursively finds modules in specified directories based on the given configuration.
5
- *
6
- * @param {RecipleConfig['modules']} config - The configuration object containing directories and filters.
7
- * @param {((filename: string) => Awaitable<boolean>)?} filter - An optional function to filter files.
8
- * @return {Promise<string[]>} A promise that resolves to an array of module file paths.
9
- */
10
- export declare function findModules(config: RecipleConfig['modules'], filter?: (filename: string) => Awaitable<boolean>): Promise<string[]>;
@@ -1,44 +0,0 @@
1
- import { lstat, mkdir, readdir } from 'node:fs/promises';
2
- import { existsAsync } from '@reciple/utils';
3
- import micromatch from 'micromatch';
4
- import path from 'node:path';
5
- /**
6
- * Recursively finds modules in specified directories based on the given configuration.
7
- *
8
- * @param {RecipleConfig['modules']} config - The configuration object containing directories and filters.
9
- * @param {((filename: string) => Awaitable<boolean>)?} filter - An optional function to filter files.
10
- * @return {Promise<string[]>} A promise that resolves to an array of module file paths.
11
- */
12
- export async function findModules(config, filter) {
13
- const modules = [];
14
- const { globby, isDynamicPattern } = await import('globby');
15
- for (const folder of config?.dirs ?? []) {
16
- const dir = path.isAbsolute(folder) ? folder : path.join(process.cwd(), folder);
17
- if (isDynamicPattern(folder, { cwd: process.cwd() })) {
18
- let dirs = await globby(folder, {
19
- cwd: process.cwd(),
20
- onlyDirectories: true,
21
- absolute: true
22
- });
23
- if (config?.exclude?.length)
24
- dirs = dirs.filter(f => !micromatch.isMatch(path.basename(f), config.exclude));
25
- modules.push(...await findModules({
26
- ...config,
27
- dirs
28
- }));
29
- continue;
30
- }
31
- if (!await existsAsync(dir))
32
- await mkdir(dir, { recursive: true });
33
- if (!(await lstat(dir)).isDirectory())
34
- continue;
35
- const files = (await readdir(dir))
36
- .map(file => path.join(dir, file))
37
- .filter(f => !config?.exclude?.length || !micromatch.isMatch(path.basename(f), config.exclude))
38
- .filter(file => (filter ? filter(file) : file.endsWith('.js')));
39
- const addFile = async (file) => !config?.filter || await Promise.resolve(config.filter(file)) ? modules.push(file) : 0;
40
- await Promise.all(files.map(f => addFile(f)));
41
- }
42
- return modules;
43
- }
44
- //# sourceMappingURL=modules.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modules.js","sourceRoot":"","sources":["../../src/utils/modules.ts"],"names":[],"mappings":"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"}