reciple 10.0.5 → 10.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/{_@oxc-project_runtime@0.110.0 → _@oxc-project_runtime@0.108.0}/helpers/decorate.mjs +1 -1
- package/dist/bin/commands/build.d.mts +1 -6
- package/dist/bin/commands/build.mjs +3 -2
- package/dist/bin/commands/build.mjs.map +1 -1
- package/dist/bin/commands/create.mjs +2 -3
- package/dist/bin/commands/create.mjs.map +1 -1
- package/dist/bin/commands/createModule.d.mts +0 -1
- package/dist/bin/commands/createModule.mjs +3 -2
- package/dist/bin/commands/createModule.mjs.map +1 -1
- package/dist/bin/commands/start.d.mts +0 -1
- package/dist/bin/commands/start.mjs +26 -25
- package/dist/bin/commands/start.mjs.map +1 -1
- package/dist/bin/commands/startSharding.mjs +21 -20
- package/dist/bin/commands/startSharding.mjs.map +1 -1
- package/dist/classes/cli/CLI.d.mts +1 -0
- package/dist/classes/cli/CLI.mjs +9 -1
- package/dist/classes/cli/CLI.mjs.map +1 -1
- package/dist/classes/cli/ConfigReader.d.mts +1 -4
- package/dist/classes/cli/ConfigReader.mjs +3 -8
- package/dist/classes/cli/ConfigReader.mjs.map +1 -1
- package/dist/classes/client/ModuleLoader.mjs +18 -18
- package/dist/classes/client/ModuleLoader.mjs.map +1 -1
- package/dist/classes/managers/ModuleManager.mjs +1 -1
- package/dist/classes/modules/PostconditionModule.mjs +1 -1
- package/dist/classes/modules/PreconditionModule.mjs +1 -1
- package/dist/classes/modules/commands/ContextMenuCommandModule.mjs +1 -1
- package/dist/classes/modules/commands/MessageCommandModule.mjs +1 -1
- package/dist/classes/modules/commands/SlashCommandModule.mjs +1 -1
- package/dist/classes/templates/ModuleTemplateBuilder.mjs +19 -19
- package/dist/classes/templates/ModuleTemplateBuilder.mjs.map +1 -1
- package/dist/classes/templates/TemplateBuilder.d.mts +1 -3
- package/dist/classes/templates/TemplateBuilder.mjs +30 -38
- package/dist/classes/templates/TemplateBuilder.mjs.map +1 -1
- package/dist/classes/validation/BaseModuleValidator.d.mts +10 -10
- package/dist/classes/validation/CommandModuleValidator.d.mts +17 -17
- package/dist/classes/validation/EventModuleValidator.d.mts +10 -10
- package/dist/classes/validation/PreconditionModule.d.mts +7 -7
- package/dist/package.mjs +1 -1
- package/package.json +1 -1
|
@@ -16,7 +16,7 @@ import { detectPackageManager, installDependencies, installDependenciesCommand,
|
|
|
16
16
|
|
|
17
17
|
//#region src/classes/templates/TemplateBuilder.ts
|
|
18
18
|
var TemplateBuilder = class TemplateBuilder {
|
|
19
|
-
|
|
19
|
+
originalCwd = process.cwd();
|
|
20
20
|
cli;
|
|
21
21
|
typescript;
|
|
22
22
|
token;
|
|
@@ -25,21 +25,17 @@ var TemplateBuilder = class TemplateBuilder {
|
|
|
25
25
|
packageJson;
|
|
26
26
|
packageManager;
|
|
27
27
|
dependenciesInstalled = false;
|
|
28
|
-
get directory() {
|
|
29
|
-
return this._directory ?? process.cwd();
|
|
30
|
-
}
|
|
31
28
|
get relativeDirectory() {
|
|
32
|
-
return path.relative(process.cwd()
|
|
29
|
+
return path.relative(this.originalCwd, process.cwd());
|
|
33
30
|
}
|
|
34
31
|
get packageJsonPath() {
|
|
35
|
-
return path.join(
|
|
32
|
+
return path.join(process.cwd(), "package.json");
|
|
36
33
|
}
|
|
37
34
|
get name() {
|
|
38
|
-
return slug(path.basename(
|
|
35
|
+
return slug(path.basename(process.cwd()));
|
|
39
36
|
}
|
|
40
37
|
constructor(options) {
|
|
41
38
|
this.cli = options.cli;
|
|
42
|
-
this._directory = options.directory;
|
|
43
39
|
this.typescript = options.typescript;
|
|
44
40
|
this.defaultAll = options.defaultAll ?? false;
|
|
45
41
|
this.packageManager = options.packageManager;
|
|
@@ -50,40 +46,42 @@ var TemplateBuilder = class TemplateBuilder {
|
|
|
50
46
|
return this;
|
|
51
47
|
}
|
|
52
48
|
async createDirectory(options) {
|
|
53
|
-
|
|
54
|
-
if (!
|
|
49
|
+
let cwd = this.originalCwd;
|
|
50
|
+
if (!options?.directory) {
|
|
55
51
|
const dir = this.defaultAll ? process.cwd() : await text({
|
|
56
52
|
message: `Enter project directory`,
|
|
57
53
|
placeholder: `Leave empty to use current directory`,
|
|
58
54
|
defaultValue: process.cwd(),
|
|
59
55
|
validate: (value) => {
|
|
60
|
-
|
|
61
|
-
if (existsSync(
|
|
56
|
+
value = path.resolve(value);
|
|
57
|
+
if (existsSync(value) && !statSync(value).isDirectory()) return "Invalid folder directory";
|
|
62
58
|
}
|
|
63
59
|
});
|
|
64
60
|
if (isCancel(dir)) throw new NotAnError("Operation cancelled");
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
61
|
+
cwd = path.resolve(dir);
|
|
62
|
+
} else cwd = path.resolve(options.directory);
|
|
63
|
+
const stats = await stat(cwd).catch(() => void 0);
|
|
64
|
+
const relative = path.relative(process.cwd(), cwd);
|
|
65
|
+
if (stats) {
|
|
66
|
+
let files = await readdir(cwd);
|
|
70
67
|
files = micromatch.not(files, options?.ignoredFiles ?? TemplateBuilder.ignoredDirectoryFiles, { dot: true });
|
|
71
68
|
if (files.length) switch (options?.onNotEmpty) {
|
|
72
|
-
case "throw": throw new NotAnError(`Directory ${colors.cyan(
|
|
69
|
+
case "throw": throw new NotAnError(`Directory ${colors.cyan(relative)} is not empty`);
|
|
73
70
|
case "ignore": return this;
|
|
74
71
|
default:
|
|
75
72
|
const overwrite = this.defaultAll ? false : await confirm({
|
|
76
|
-
message: `Directory ${colors.cyan(
|
|
73
|
+
message: `Directory ${colors.cyan(relative)} is not empty. Would you like to continue?`,
|
|
77
74
|
active: "Yes",
|
|
78
75
|
inactive: "No",
|
|
79
76
|
initialValue: false
|
|
80
77
|
});
|
|
81
|
-
if (!overwrite) throw new NotAnError(`Directory ${colors.cyan(
|
|
78
|
+
if (!overwrite) throw new NotAnError(`Directory ${colors.cyan(relative)} is not empty`);
|
|
82
79
|
if (isCancel(overwrite)) throw new NotAnError("Operation cancelled");
|
|
83
80
|
break;
|
|
84
81
|
}
|
|
85
82
|
}
|
|
86
|
-
await mkdir(
|
|
83
|
+
await mkdir(cwd, { recursive: true });
|
|
84
|
+
process.chdir(cwd);
|
|
87
85
|
return this;
|
|
88
86
|
}
|
|
89
87
|
async setupLanguage(options) {
|
|
@@ -102,7 +100,7 @@ var TemplateBuilder = class TemplateBuilder {
|
|
|
102
100
|
}
|
|
103
101
|
async createEnvFile(options) {
|
|
104
102
|
const tokenKey = options?.tokenKey ?? "DISCORD_TOKEN";
|
|
105
|
-
const envFile = options?.envFile ? path.resolve(options.envFile) :
|
|
103
|
+
const envFile = options?.envFile ? path.resolve(options.envFile) : ".env";
|
|
106
104
|
const stats = await stat(envFile).catch(() => void 0);
|
|
107
105
|
let env = options?.env ?? {};
|
|
108
106
|
env = stats ? parse(await readFile(envFile, "utf-8"), { processEnv: env }) : env;
|
|
@@ -131,10 +129,7 @@ var TemplateBuilder = class TemplateBuilder {
|
|
|
131
129
|
}
|
|
132
130
|
async createConfig(options) {
|
|
133
131
|
let filepath = options?.path;
|
|
134
|
-
|
|
135
|
-
cwd: this.directory,
|
|
136
|
-
lang: this.typescript ? "ts" : this.typescript === false ? "js" : void 0
|
|
137
|
-
}) ?? path.join(this.directory, ConfigReader.createConfigFilename(this.typescript ? "ts" : "js"));
|
|
132
|
+
filepath ??= await ConfigReader.find({ lang: this.typescript ? "ts" : this.typescript === false ? "js" : void 0 }) ?? ConfigReader.createConfigFilename(this.typescript ? "ts" : "js");
|
|
138
133
|
if (await ConfigReader.exists(filepath)) {
|
|
139
134
|
const overwrite = this.defaultAll ? false : await confirm({
|
|
140
135
|
message: `Config file already exists at ${colors.green(path.relative(process.cwd(), filepath))}. Would you like to overwrite it?`,
|
|
@@ -172,11 +167,11 @@ var TemplateBuilder = class TemplateBuilder {
|
|
|
172
167
|
}
|
|
173
168
|
}
|
|
174
169
|
const [template, loader] = CLI.createSpinnerPromise({
|
|
175
|
-
promise: Promise.all([TemplateBuilder.copy(source,
|
|
170
|
+
promise: Promise.all([TemplateBuilder.copy(source, process.cwd(), {
|
|
176
171
|
...options,
|
|
177
172
|
rename,
|
|
178
173
|
overwrite
|
|
179
|
-
}), TemplateBuilder.copy(globals,
|
|
174
|
+
}), TemplateBuilder.copy(globals, process.cwd(), {
|
|
180
175
|
...options,
|
|
181
176
|
rename,
|
|
182
177
|
overwrite
|
|
@@ -191,7 +186,7 @@ var TemplateBuilder = class TemplateBuilder {
|
|
|
191
186
|
async setPackageManager(options) {
|
|
192
187
|
this.packageManager = options?.packageManager ?? this.packageManager;
|
|
193
188
|
if (!this.packageManager) {
|
|
194
|
-
const defaultPackageManager = await detectPackageManager(
|
|
189
|
+
const defaultPackageManager = await detectPackageManager(process.cwd()).then((pm) => pm?.name ?? "npm");
|
|
195
190
|
const packageManager = this.defaultAll ? defaultPackageManager : await select({
|
|
196
191
|
message: "Select package manager",
|
|
197
192
|
options: [{
|
|
@@ -253,7 +248,6 @@ var TemplateBuilder = class TemplateBuilder {
|
|
|
253
248
|
}
|
|
254
249
|
await CLI.createSpinnerPromise({
|
|
255
250
|
promise: installDependencies({
|
|
256
|
-
cwd: this.directory,
|
|
257
251
|
packageManager: this.packageManager,
|
|
258
252
|
silent: !isDebugging()
|
|
259
253
|
}),
|
|
@@ -267,28 +261,27 @@ var TemplateBuilder = class TemplateBuilder {
|
|
|
267
261
|
return this;
|
|
268
262
|
}
|
|
269
263
|
async createModules() {
|
|
270
|
-
const modulesDirectory = path.join(this.directory, "src");
|
|
271
264
|
const moduleTemplates = await ModuleTemplateBuilder.resolveModuleTemplates(this.typescript ? "ts" : "js");
|
|
272
|
-
await mkdir(
|
|
265
|
+
await mkdir("src", { recursive: true });
|
|
273
266
|
if (!this.dependenciesInstalled) {
|
|
274
267
|
log.warn("Dependencies not installed. Skipping module creation.");
|
|
275
268
|
return this;
|
|
276
269
|
}
|
|
277
270
|
const moduleOptions = {
|
|
278
271
|
cli: this.cli,
|
|
279
|
-
config: await this.config?.read(
|
|
272
|
+
config: await this.config?.read(),
|
|
280
273
|
defaultAll: true,
|
|
281
274
|
typescript: this.typescript
|
|
282
275
|
};
|
|
283
276
|
const [template, loader] = CLI.createSpinnerPromise({
|
|
284
277
|
promise: Promise.all([new ModuleTemplateBuilder({
|
|
285
278
|
...moduleOptions,
|
|
286
|
-
directory:
|
|
279
|
+
directory: "src/commands",
|
|
287
280
|
filename: `SlashCommand.${this.typescript ? "ts" : "js"}`,
|
|
288
281
|
template: moduleTemplates.find((t) => t.name === "SlashCommand")
|
|
289
282
|
}).setupPlaceholders().then((m) => m.build({ silent: true })), new ModuleTemplateBuilder({
|
|
290
283
|
...moduleOptions,
|
|
291
|
-
directory:
|
|
284
|
+
directory: "src/events",
|
|
292
285
|
filename: `ClientEvent.${this.typescript ? "ts" : "js"}`,
|
|
293
286
|
template: moduleTemplates.find((t) => t.name === "ClientEvent")
|
|
294
287
|
}).setupPlaceholders().then((m) => m.build({ silent: true }))]),
|
|
@@ -302,7 +295,6 @@ var TemplateBuilder = class TemplateBuilder {
|
|
|
302
295
|
async build(options) {
|
|
303
296
|
if (!options?.skipBuild && this.dependenciesInstalled) await CLI.createSpinnerPromise({
|
|
304
297
|
promise: runScript("build", {
|
|
305
|
-
cwd: this.directory,
|
|
306
298
|
packageManager: this.packageManager,
|
|
307
299
|
silent: !isDebugging()
|
|
308
300
|
}),
|
|
@@ -358,12 +350,12 @@ var TemplateBuilder = class TemplateBuilder {
|
|
|
358
350
|
if (fromStats.isDirectory()) {
|
|
359
351
|
const files = await readdir(from);
|
|
360
352
|
for (const file of files) {
|
|
361
|
-
const data = {
|
|
353
|
+
const data$1 = {
|
|
362
354
|
basename: file,
|
|
363
355
|
src: path.join(from, file),
|
|
364
356
|
dest: to
|
|
365
357
|
};
|
|
366
|
-
await copy(data.src, path.join(to, options?.rename ? options.rename(data) : file), options);
|
|
358
|
+
await copy(data$1.src, path.join(to, options?.rename ? options.rename(data$1) : file), options);
|
|
367
359
|
}
|
|
368
360
|
return;
|
|
369
361
|
}
|
|
@@ -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 private _directory?: string;\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 directory() {\n return this._directory ?? process.cwd();\n }\n\n get relativeDirectory() {\n return path.relative(process.cwd(), this.directory) || './';\n }\n\n get packageJsonPath() {\n return path.join(this.directory, 'package.json');\n }\n\n get name() {\n return slug(path.basename(this.directory));\n }\n\n constructor(options: TemplateBuilder.Options) {\n this.cli = options.cli;\n this._directory = options.directory;\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 this._directory = options?.directory ?? this._directory;\n\n if (!this._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 const dir = path.resolve(value);\n if (existsSync(dir) && !statSync(dir).isDirectory()) return 'Invalid folder directory';\n }\n });\n\n if (isCancel(dir)) throw new NotAnError('Operation cancelled');\n this._directory = dir;\n }\n\n this._directory = path.resolve(this._directory);\n\n const stats = await stat(this.directory).catch(() => undefined);\n\n if (stats) {\n let files = await readdir(this.directory);\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(this.relativeDirectory)} 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(this.relativeDirectory)} 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(this.relativeDirectory)} is not empty`);\n if (isCancel(overwrite)) throw new NotAnError('Operation cancelled');\n break;\n }\n }\n }\n\n await mkdir(this.directory, { recursive: true });\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) : path.join(this.directory, '.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 if (!filepath) {\n filepath = await ConfigReader.find({\n cwd: this.directory,\n lang: this.typescript\n ? 'ts'\n : this.typescript === false\n ? 'js'\n : undefined\n }) ?? path.join(\n this.directory,\n ConfigReader.createConfigFilename(this.typescript ? 'ts' : 'js')\n );\n }\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, this.directory, { ...options, rename, overwrite }),\n TemplateBuilder.copy(globals, this.directory, { ...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(this.directory).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 cwd: this.directory,\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 modulesDirectory = path.join(this.directory, 'src');\n const moduleTemplates = await ModuleTemplateBuilder.resolveModuleTemplates(this.typescript ? 'ts' : 'js');\n\n await mkdir(modulesDirectory, { 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({ ignoreInstanceCheck: true })!,\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: path.join(modulesDirectory, '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: path.join(modulesDirectory, '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 cwd: this.directory,\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 console.log(` • ${colors.cyan().bold(installDependenciesCommand(this.packageManager ?? 'npm'))} ${colors.dim('(Install dependencies)')}`);\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 directory?: string;\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.dependencies?.['@reciple/core']!,\n '@reciple/jsx': packageJSON.dependencies?.['@reciple/jsx']!,\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":";;;;;;;;;;;;;;;;;AAgBA,IAAa,kBAAb,MAAa,gBAAgB;CACzB,AAAQ;CAER,AAAO;CACP,AAAO;CACP,AAAO;CACP,AAAO;CAEP,AAAO;CACP,AAAO;CAEP,AAAO;CACP,AAAO,wBAAiC;CAExC,IAAI,YAAY;AACZ,SAAO,KAAK,cAAc,QAAQ,KAAK;;CAG3C,IAAI,oBAAoB;AACpB,SAAO,KAAK,SAAS,QAAQ,KAAK,EAAE,KAAK,UAAU,IAAI;;CAG3D,IAAI,kBAAkB;AAClB,SAAO,KAAK,KAAK,KAAK,WAAW,eAAe;;CAGpD,IAAI,OAAO;AACP,SAAO,KAAK,KAAK,SAAS,KAAK,UAAU,CAAC;;CAG9C,YAAY,SAAkC;AAC1C,OAAK,MAAM,QAAQ;AACnB,OAAK,aAAa,QAAQ;AAC1B,OAAK,aAAa,QAAQ;AAC1B,OAAK,aAAa,QAAQ,cAAc;AACxC,OAAK,iBAAiB,QAAQ;AAC9B,OAAK,QAAQ,QAAQ;;CAGzB,MAAa,OAAsB;AAC/B,QAAM,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,IAAI,QAAQ,MAAM,CAAC,aAAa,KAAK,IAAI,MAAM,GAAG,CAAC;AAC/F,SAAO;;CAGX,MAAa,gBAAgB,SAAiE;AAC1F,OAAK,aAAa,SAAS,aAAa,KAAK;AAE7C,MAAI,CAAC,KAAK,YAAY;GAClB,MAAM,MAAM,KAAK,aACX,QAAQ,KAAK,GACb,MAAM,KAAK;IACT,SAAS;IACT,aAAa;IACb,cAAc,QAAQ,KAAK;IAC3B,WAAU,UAAS;KACf,MAAM,MAAM,KAAK,QAAQ,MAAM;AAC/B,SAAI,WAAW,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,CAAE,QAAO;;IAEnE,CAAC;AAEN,OAAI,SAAS,IAAI,CAAE,OAAM,IAAI,WAAW,sBAAsB;AAC9D,QAAK,aAAa;;AAGtB,OAAK,aAAa,KAAK,QAAQ,KAAK,WAAW;AAI/C,MAFc,MAAM,KAAK,KAAK,UAAU,CAAC,YAAY,OAAU,EAEpD;GACP,IAAI,QAAQ,MAAM,QAAQ,KAAK,UAAU;AACrC,WAAQ,WAAW,IAAI,OAAO,SAAS,gBAAgB,gBAAgB,uBAAuB,EAAE,KAAK,MAAM,CAAC;AAEhH,OAAI,MAAM,OACN,SAAQ,SAAS,YAAjB;IACI,KAAK,QACD,OAAM,IAAI,WAAW,aAAa,OAAO,KAAK,KAAK,kBAAkB,CAAC,eAAe;IACzF,KAAK,SACD,QAAO;IACX;KACI,MAAM,YAAY,KAAK,aACjB,QACA,MAAM,QAAQ;MACZ,SAAS,aAAa,OAAO,KAAK,KAAK,kBAAkB,CAAC;MAC1D,QAAQ;MACR,UAAU;MACV,cAAc;MACjB,CAAC;AAEN,SAAI,CAAC,UAAW,OAAM,IAAI,WAAW,aAAa,OAAO,KAAK,KAAK,kBAAkB,CAAC,eAAe;AACrG,SAAI,SAAS,UAAU,CAAE,OAAM,IAAI,WAAW,sBAAsB;AACpE;;;AAKhB,QAAM,MAAM,KAAK,WAAW,EAAE,WAAW,MAAM,CAAC;AAChD,SAAO;;CAGX,MAAa,cAAc,SAA+D;AACtF,OAAK,aAAa,SAAS,cAAc,KAAK;AAE9C,MAAI,CAAC,KAAK,YAAY;GAClB,MAAM,eAAe,KAAK,aACpB,QACA,MAAM,QAAQ;IACZ,SAAS;IACT,QAAQ;IACR,UAAU;IACV,cAAc;IACjB,CAAC;AAEN,OAAI,SAAS,aAAa,CAAE,OAAM,IAAI,WAAW,sBAAsB;AACvE,QAAK,aAAa;;AAGtB,SAAO;;CAGX,MAAa,cAAc,SAA+D;EACtF,MAAM,WAAW,SAAS,YAAY;EACtC,MAAM,UAAU,SAAS,UAAU,KAAK,QAAQ,QAAQ,QAAQ,GAAG,KAAK,KAAK,KAAK,WAAW,OAAO;EACpG,MAAM,QAAQ,MAAM,KAAK,QAAQ,CAAC,YAAY,OAAU;EAExD,IAAI,MAAM,SAAS,OAAO,EAAE;AACxB,QAAM,QACAA,MAAY,MAAM,SAAS,SAAS,QAAQ,EAAE,EAC5C,YAAY,KACf,CAAC,GACA;AAEV,MAAI,IAAI,WAAW;GACf,MAAM,OAAO,KAAK,cAAc,MAAM,QAAQ;IAC1C,SAAS;IACT,cAAc;IACd,QAAQ;IACR,UAAU;IACb,CAAC;AAEF,OAAI,SAAS,KAAK,CAAE,OAAM,IAAI,WAAW,sBAAsB;AAC/D,OAAI,KAAM,QAAO;;EAGrB,MAAM,QAAQ,MAAM,KAAK;GACrB,SAAS;GACT,aAAa;GACb,cAAc,IAAI;GACrB,CAAC;AAEF,MAAI,SAAS,MAAM,CAAE,OAAM,IAAI,WAAW,sBAAsB;AAChE,MAAI,YAAY;AAEhB,QAAM,UAAU,SAAS,KAAK,SAAS,IAAI,MAAM,MAAM;GACnD,UAAU;GACV,MAAM;GACT,CAAC;AAEF,SAAO;;CAGX,MAAa,aAAa,SAA8D;EACpF,IAAI,WAAW,SAAS;AAExB,MAAI,CAAC,SACD,YAAW,MAAM,aAAa,KAAK;GAC/B,KAAK,KAAK;GACV,MAAM,KAAK,aACL,OACA,KAAK,eAAe,QAChB,OACA;GACb,CAAC,IAAI,KAAK,KACH,KAAK,WACL,aAAa,qBAAqB,KAAK,aAAa,OAAO,KAAK,CACnE;AAKT,MAFe,MAAM,aAAa,OAAO,SAAS,EAEtC;GACR,MAAM,YAAY,KAAK,aACjB,QACA,MAAM,QAAQ;IACZ,SAAS,iCAAiC,OAAO,MAAM,KAAK,SAAS,QAAQ,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/F,QAAQ;IACR,UAAU;IACV,cAAc;IACjB,CAAC;AAEN,OAAI,CAAC,UAAW,QAAO;AACvB,OAAI,SAAS,UAAU,CAAE,OAAM,IAAI,WAAW,sBAAsB;;AAGxE,OAAK,SAAS,MAAM,aAAa,OAAO;GACpC,GAAG;GACH,MAAM;GACN,MAAM,KAAK,aAAa,OAAO;GAC/B,WAAW;GACX,aAAa;GAChB,CAAC;AAEF,SAAO;;CAGX,MAAa,eAAe,SAA+D;EACvF,MAAM,SAAS,KAAK,KAAK,IAAI,MAAM,uBAAuB,KAAK,aAAa,eAAe,aAAa;EACxG,MAAM,UAAU,KAAK,KAAK,IAAI,MAAM,mBAAmB;EAEvD,SAAS,OAAO,MAAoC;AAChD,WAAQ,KAAK,UAAb;IACI,KAAK,YACD,QAAO;IACX,QACI,QAAO,SAAS,SAAS,KAAK,IAAI,KAAK;;;EAInD,SAAS,UAAU,MAAoC;AACnD,WAAQ,KAAK,UAAb;IACI,KAAK,YACD,QAAO;IACX,KAAK;IACL,KAAK,gBACD,QAAO;IACX,QACI,SAAQ,OAAO,SAAS,cAAc,YAAY,QAAQ,YAAY,SAAS,YAAY,KAAK,KAAK;;;EAIjH,MAAM,CAAC,UAAU,UAAU,IAAI,qBAAqB;GAChD,SAAS,QAAQ,IAAI,CACjB,gBAAgB,KAAK,QAAQ,KAAK,WAAW;IAAE,GAAG;IAAS;IAAQ;IAAW,CAAC,EAC/E,gBAAgB,KAAK,SAAS,KAAK,WAAW;IAAE,GAAG;IAAS;IAAQ;IAAW,CAAC,CACnF,CAAC;GACF,SAAS;GACT,gBAAgB;GAChB,cAAc;GACjB,CAAC;AAEF,QAAM;AACN,SAAO;;CAGX,MAAa,kBAAkB,SAAoD;AAC/E,OAAK,iBAAiB,SAAS,kBAAkB,KAAK;AAEtD,MAAI,CAAC,KAAK,gBAAgB;GACtB,MAAM,wBAAwB,MAAM,qBAAqB,KAAK,UAAU,CAAC,MAAK,OAAM,IAAI,QAAQ,MAAM;GACtG,MAAM,iBAA4C,KAAK,aACjD,wBACA,MAAM,OAAO;IACX,SAAS;IACT,SAAS,CACL;KAAE,OAAO;KAAuB,OAAO;KAAuB,EAC9D,GAAG;KACC;MAAE,OAAO;MAAO,OAAO;MAAO;KAC9B;MAAE,OAAO;MAAQ,OAAO;MAAQ;KAChC;MAAE,OAAO;MAAQ,OAAO;MAAQ;KAChC;MAAE,OAAO;MAAO,OAAO;MAAO;KAC9B;MAAE,OAAO;MAAQ,OAAO;MAAQ;KACnC,CAAC,QAAO,MAAK,EAAE,UAAU,sBAAsB,CACnD;IACD,cAAc;IACjB,CAAC;AAEN,OAAI,SAAS,eAAe,CAAE,OAAM,IAAI,WAAW,sBAAsB;AACzE,QAAK,iBAAiB;;AAG1B,OAAK,cAAc,MAAM,mBAAmB,KAAK,KAAK,iBAAiB,KAAK;AAC5E,OAAK,YAAY,MAAM;GACnB,MAAM,KAAK;GACX,SAAS;GACT,MAAM;GACN,SAAS;IACL,OAAO;IACP,OAAO;IACP,KAAK;IACR;GACD,GAAG,gBAAgB,uBAAuB,KAAK,aAAa,OAAO,KAAK;GAC3E,CAAC;AAEF,QAAM,KAAK,aAAa,MAAM,KAAK,iBAAiB,KAAK;AAEzD,SAAO;;CAGX,MAAa,oBAAoB,SAAqE;AAClG,MAAI,SAAS,UAAU,OAAO;AAC1B,OAAI,SAAS,UAAU,QAAW;IAC9B,MAAM,UAAU,KAAK,aACf,OACA,MAAM,QAAQ;KACZ,SAAS;KACT,QAAQ;KACR,UAAU;KACV,cAAc;KACjB,CAAC;AAEN,QAAI,SAAS,QAAQ,CAAE,OAAM,IAAI,WAAW,sBAAsB;AAClE,QAAI,CAAC,QAAS,QAAO;;AAGzB,SAAM,IAAI,qBAAqB;IAC3B,SAAS,oBAAoB;KACzB,KAAK,KAAK;KACV,gBAAgB,KAAK;KACrB,QAAQ,CAAC,aAAa;KACzB,CAAC;IACF,WAAW;IACX,cAAc,GAAG,OAAO,MAAM,CAAC,IAAI,IAAI,CAAC;IACxC,gBAAgB,GAAG,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC;IAC5C,SAAS,GAAG,OAAO,MAAM,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC,CAAC;AAEH,QAAK,wBAAwB;;AAGjC,SAAO;;CAGX,MAAa,gBAA+B;EACxC,MAAM,mBAAmB,KAAK,KAAK,KAAK,WAAW,MAAM;EACzD,MAAM,kBAAkB,MAAM,sBAAsB,uBAAuB,KAAK,aAAa,OAAO,KAAK;AAEzG,QAAM,MAAM,kBAAkB,EAAE,WAAW,MAAM,CAAC;AAElD,MAAI,CAAC,KAAK,uBAAuB;AAC7B,OAAI,KAAK,wDAAwD;AACjE,UAAO;;EAGX,MAAM,gBAA+C;GACjD,KAAK,KAAK;GACV,QAAQ,MAAM,KAAK,QAAQ,KAAK,EAAE,qBAAqB,MAAM,CAAC;GAC9D,YAAY;GACZ,YAAY,KAAK;GACpB;EAED,MAAM,CAAC,UAAU,UAAU,IAAI,qBAAqB;GAChD,SAAS,QAAQ,IAAI,CACjB,IAAI,sBAAsB;IAClB,GAAG;IACH,WAAW,KAAK,KAAK,kBAAkB,WAAW;IAClD,UAAU,gBAAgB,KAAK,aAAa,OAAO;IACnD,UAAU,gBAAgB,MAAK,MAAK,EAAE,SAAS,eAAe;IACjE,CAAC,CACD,mBAAmB,CACnB,MAAK,MAAK,EAAE,MAAM,EAAE,QAAQ,MAAM,CAAC,CAAC,EACzC,IAAI,sBAAsB;IAClB,GAAG;IACH,WAAW,KAAK,KAAK,kBAAkB,SAAS;IAChD,UAAU,eAAe,KAAK,aAAa,OAAO;IAClD,UAAU,gBAAgB,MAAK,MAAK,EAAE,SAAS,cAAc;IAChE,CAAC,CACD,mBAAmB,CACnB,MAAK,MAAK,EAAE,MAAM,EAAE,QAAQ,MAAM,CAAC,CAAC,CAC5C,CAAC;GACF,SAAS;GACT,gBAAgB;GAChB,cAAc;GACjB,CAAC;AAEF,QAAM;AACN,SAAO;;CAGX,MAAa,MAAM,SAAuD;AACtE,MAAI,CAAC,SAAS,aAAa,KAAK,sBAAuB,OAAM,IAAI,qBAAqB;GAClF,SAAS,UAAU,SAAS;IACxB,KAAK,KAAK;IACV,gBAAgB,KAAK;IACrB,QAAQ,CAAC,aAAa;IACzB,CAAC;GACF,WAAW;GACX,cAAc,GAAG,OAAO,MAAM,CAAC,IAAI,IAAI,CAAC;GACxC,gBAAgB,GAAG,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC;GAC5C,SAAS,GAAG,OAAO,MAAM,CAAC,IAAI,IAAI,CAAC;GACtC,CAAC,CAAC;AAEH,QAAM,sBAAsB,OAAO,KAAK,KAAK,kBAAkB,GAAG;AAElE,UAAQ,IAAI,KAAK,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,oBAAoB;AAE9D,MAAI,KAAK,sBAAsB,KAC3B,SAAQ,IAAI,OAAO,OAAO,MAAM,CAAC,KAAK,MAAM,KAAK,oBAAoB,GAAG;AAG5E,UAAQ,IAAI,OAAO,OAAO,MAAM,CAAC,KAAK,2BAA2B,KAAK,kBAAkB,MAAM,CAAC,CAAC,GAAG,OAAO,IAAI,yBAAyB,GAAG;AAC1I,UAAQ,IAAI,OAAO,OAAO,MAAM,CAAC,KAAK,iBAAiB,KAAK,kBAAkB,OAAO,QAAQ,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,GAAG;AAC1H,UAAQ,IAAI,OAAO,OAAO,MAAM,CAAC,KAAK,iBAAiB,KAAK,kBAAkB,OAAO,MAAM,CAAC,CAAC,GAAG,OAAO,IAAI,gBAAgB,GAAG;AAC9H,UAAQ,IAAI,OAAO,OAAO,MAAM,CAAC,KAAK,iBAAiB,KAAK,kBAAkB,OAAO,QAAQ,CAAC,CAAC,GAAG,OAAO,IAAI,eAAe,GAAG;AAG/H,SAAO;;;;0CAc0B,CAAC,MAAM,UAAU;CAE/C,MAAM,+CAAoH;EAC7H,MAAM;GACF,cAAc;IACV,iBAAiB,YAAY,eAAe;IAC5C,gBAAgB,YAAY,eAAe;IAC3C,WAAW,IAAI,YAAY;IAC9B;GACD,iBAAiB;IACb,eAAe,YAAY,kBAAkB;IAC7C,SAAS,YAAY,iBAAiB;IACtC,YAAY,YAAY,kBAAkB;IAC7C;GACJ;EACD,IAAI,EAAE;EACN,IAAI,EAAE;EACT;CAEM,SAAS,uBAAuB,MAA4F;EAC/H,MAAM,SAAS,SAAS,OAClB,aAAa,KACb,SAAS,OACL,aAAa,KACb,EAAE;AAEZ,SAAO,eAAe;GAAE,GAAG,OAAO;GAAc,GAAG,aAAa,KAAK;GAAc;AACnF,SAAO,kBAAkB;GAAE,GAAG,OAAO;GAAiB,GAAG,aAAa,KAAK;GAAiB;AAE5F,SAAO;;;CA+CJ,eAAe,KAAK,MAAc,IAAY,SAAsC;EACvF,MAAM,YAAY,MAAM,KAAK,KAAK,CAAC,YAAY,OAAU;AACzD,MAAI,CAAC,UAAW;AAEhB,MAAI,UAAU,aAAa,EAAE;GACzB,MAAM,QAAQ,MAAM,QAAQ,KAAK;AAEjC,QAAK,MAAM,QAAQ,OAAO;IACtB,MAAM,OAAqB;KACvB,UAAU;KACV,KAAK,KAAK,KAAK,MAAM,KAAK;KAC1B,MAAM;KACT;AAED,UAAM,KACF,KAAK,KACL,KAAK,KAAK,IACN,SAAS,SACH,QAAQ,OAAO,KAAK,GACpB,KACT,EACD,QACH;;AAEL;;EAGJ,MAAM,OAAqB;GACvB,UAAU,KAAK,SAAS,KAAK;GAC7B,KAAK;GACL,MAAM;GACT;AAED,MAAI,SAAS,UAAU,CAAC,QAAQ,OAAO,KAAK,CAAE;EAE9C,MAAM,UAAU,MAAM,KAAK,GAAG,CAAC,YAAY,OAAU;EACrD,MAAM,YAAY,OAAO,SAAS,cAAc,aAC1C,QAAQ,UAAU,KAAK,GACvB,SAAS,aAAa;AAE5B,MAAI,WAAW,UAAW;AAE1B,QAAM,MAAM,KAAK,QAAQ,GAAG,EAAE,EAAE,WAAW,MAAM,CAAC;AAClD,QAAM,SAAS,MAAM,GAAG"}
|
|
1
|
+
{"version":3,"file":"TemplateBuilder.mjs","names":["parseDotenv","data"],"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 console.log(` • ${colors.cyan().bold(installDependenciesCommand(this.packageManager ?? 'npm'))} ${colors.dim('(Install dependencies)')}`);\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.dependencies?.['@reciple/core']!,\n '@reciple/jsx': packageJSON.dependencies?.['@reciple/jsx']!,\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,35 +1,35 @@
|
|
|
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
|
|
4
|
+
import * as _sapphire_shapeshift15 from "@sapphire/shapeshift";
|
|
5
5
|
|
|
6
6
|
//#region src/classes/validation/BaseModuleValidator.d.ts
|
|
7
7
|
declare class BaseModuleValidator extends Validator {
|
|
8
|
-
static id:
|
|
9
|
-
static moduleType:
|
|
10
|
-
static onEnable:
|
|
11
|
-
static onReady:
|
|
12
|
-
static onDisable:
|
|
13
|
-
static object:
|
|
8
|
+
static id: _sapphire_shapeshift15.StringValidator<string>;
|
|
9
|
+
static moduleType: _sapphire_shapeshift15.NativeEnumValidator<typeof ModuleType>;
|
|
10
|
+
static onEnable: _sapphire_shapeshift15.UnionValidator<Function | undefined>;
|
|
11
|
+
static onReady: _sapphire_shapeshift15.UnionValidator<Function | undefined>;
|
|
12
|
+
static onDisable: _sapphire_shapeshift15.UnionValidator<Function | undefined>;
|
|
13
|
+
static object: _sapphire_shapeshift15.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
|
-
},
|
|
19
|
+
}, _sapphire_shapeshift15.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:
|
|
26
|
+
static resolvable: _sapphire_shapeshift15.UnionValidator<_sapphire_shapeshift15.UndefinedToOptional<{
|
|
27
27
|
id: string | undefined;
|
|
28
28
|
moduleType: ModuleType | undefined;
|
|
29
29
|
onEnable: Function | undefined;
|
|
30
30
|
onReady: Function | undefined;
|
|
31
31
|
onDisable: Function | undefined;
|
|
32
|
-
}> |
|
|
32
|
+
}> | _sapphire_shapeshift15.UndefinedToOptional<{
|
|
33
33
|
toJSON: Function;
|
|
34
34
|
}>>;
|
|
35
35
|
static isValidId(id: unknown): asserts id is string;
|
|
@@ -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
|
|
6
|
+
import * as _sapphire_shapeshift25 from "@sapphire/shapeshift";
|
|
7
7
|
|
|
8
8
|
//#region src/classes/validation/CommandModuleValidator.d.ts
|
|
9
9
|
declare class CommandModuleValidator extends Validator {
|
|
10
|
-
static object:
|
|
10
|
+
static object: _sapphire_shapeshift25.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:
|
|
19
|
+
data: _sapphire_shapeshift25.UndefinedToOptional<{
|
|
20
20
|
name: any;
|
|
21
21
|
description: any;
|
|
22
22
|
aliases: any;
|
|
23
23
|
options: any;
|
|
24
24
|
flags: any;
|
|
25
|
-
}> |
|
|
25
|
+
}> | _sapphire_shapeshift25.UndefinedToOptional<{
|
|
26
26
|
type: any;
|
|
27
27
|
name: any;
|
|
28
28
|
}>;
|
|
29
29
|
cooldown: number | undefined;
|
|
30
|
-
preconditions:
|
|
30
|
+
preconditions: _sapphire_shapeshift25.UndefinedToOptional<{
|
|
31
31
|
id: any;
|
|
32
32
|
scope: any;
|
|
33
33
|
execute: any;
|
|
34
34
|
}>[] | undefined;
|
|
35
|
-
postconditions:
|
|
35
|
+
postconditions: _sapphire_shapeshift25.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
|
-
},
|
|
43
|
+
}, _sapphire_shapeshift25.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:
|
|
52
|
+
data: _sapphire_shapeshift25.UndefinedToOptional<{
|
|
53
53
|
name: any;
|
|
54
54
|
description: any;
|
|
55
55
|
aliases: any;
|
|
56
56
|
options: any;
|
|
57
57
|
flags: any;
|
|
58
|
-
}> |
|
|
58
|
+
}> | _sapphire_shapeshift25.UndefinedToOptional<{
|
|
59
59
|
type: any;
|
|
60
60
|
name: any;
|
|
61
61
|
}>;
|
|
62
62
|
cooldown: number | undefined;
|
|
63
|
-
preconditions:
|
|
63
|
+
preconditions: _sapphire_shapeshift25.UndefinedToOptional<{
|
|
64
64
|
id: any;
|
|
65
65
|
scope: any;
|
|
66
66
|
execute: any;
|
|
67
67
|
}>[] | undefined;
|
|
68
|
-
postconditions:
|
|
68
|
+
postconditions: _sapphire_shapeshift25.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:
|
|
77
|
+
static resolvable: _sapphire_shapeshift25.UnionValidator<_sapphire_shapeshift25.UndefinedToOptional<{
|
|
78
78
|
toJSON: Function;
|
|
79
|
-
}> |
|
|
79
|
+
}> | _sapphire_shapeshift25.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:
|
|
88
|
+
data: _sapphire_shapeshift25.UndefinedToOptional<{
|
|
89
89
|
name: any;
|
|
90
90
|
description: any;
|
|
91
91
|
aliases: any;
|
|
92
92
|
options: any;
|
|
93
93
|
flags: any;
|
|
94
|
-
}> |
|
|
94
|
+
}> | _sapphire_shapeshift25.UndefinedToOptional<{
|
|
95
95
|
type: any;
|
|
96
96
|
name: any;
|
|
97
97
|
}>;
|
|
98
98
|
cooldown: number | undefined;
|
|
99
|
-
preconditions:
|
|
99
|
+
preconditions: _sapphire_shapeshift25.UndefinedToOptional<{
|
|
100
100
|
id: any;
|
|
101
101
|
scope: any;
|
|
102
102
|
execute: any;
|
|
103
103
|
}>[] | undefined;
|
|
104
|
-
postconditions:
|
|
104
|
+
postconditions: _sapphire_shapeshift25.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
|
|
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:
|
|
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:
|
|
16
|
-
static once:
|
|
17
|
-
static onEvent:
|
|
18
|
-
static object:
|
|
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
|
-
},
|
|
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:
|
|
50
|
-
toJSON: Function;
|
|
51
|
-
}> | _sapphire_shapeshift33.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,21 +1,21 @@
|
|
|
1
1
|
import { PreconditionModule } from "../modules/PreconditionModule.mjs";
|
|
2
2
|
import { CommandType, Validator } from "@reciple/core";
|
|
3
|
-
import * as
|
|
3
|
+
import * as _sapphire_shapeshift8 from "@sapphire/shapeshift";
|
|
4
4
|
|
|
5
5
|
//#region src/classes/validation/PreconditionModule.d.ts
|
|
6
6
|
declare class PreconditionModuleValidator extends Validator {
|
|
7
|
-
static scope:
|
|
8
|
-
static execute:
|
|
9
|
-
static object:
|
|
7
|
+
static scope: _sapphire_shapeshift8.UnionValidator<CommandType[] | undefined>;
|
|
8
|
+
static execute: _sapphire_shapeshift8.InstanceValidator<Function>;
|
|
9
|
+
static object: _sapphire_shapeshift8.ObjectValidator<{
|
|
10
10
|
scope: CommandType[] | undefined;
|
|
11
11
|
execute: Function;
|
|
12
|
-
},
|
|
12
|
+
}, _sapphire_shapeshift8.UndefinedToOptional<{
|
|
13
13
|
scope: CommandType[] | undefined;
|
|
14
14
|
execute: Function;
|
|
15
15
|
}>>;
|
|
16
|
-
static resolvable:
|
|
16
|
+
static resolvable: _sapphire_shapeshift8.UnionValidator<_sapphire_shapeshift8.UndefinedToOptional<{
|
|
17
17
|
toJSON: Function;
|
|
18
|
-
}> |
|
|
18
|
+
}> | _sapphire_shapeshift8.UndefinedToOptional<{
|
|
19
19
|
scope: CommandType[] | undefined;
|
|
20
20
|
execute: Function;
|
|
21
21
|
}>>;
|
package/dist/package.mjs
CHANGED