UNPKG

@roboplay/sage

Version:
118 lines (116 loc) 3.92 kB
import { Command } from 'commander'; import fs from 'node:fs'; import path from 'node:path'; import { composeColors, color } from '../core/color.js'; import { logger } from '../core/logger.js'; import { getPackageManager, checkSageUpdates } from '../core/utils.js'; import { Env } from 'robo.js/dist/core/env.js'; import { loadConfig } from 'robo.js/dist/core/config.js'; const command = new Command("doctor").description("Checks if your Robo is healthy").option("-ns --no-self-check", "do not check for updates to Sage CLI").option("-v --verbose", "print more information for debugging").action(doctorAction); var doctor_default = command; async function doctorAction(options) { logger({ level: options.verbose ? "debug" : "info" }).info(`Checking for updates...`); logger.debug(`CLI Options:`, options); logger.debug(`Package manager:`, getPackageManager()); logger.debug(`Current working directory:`, process.cwd()); if (options.selfCheck) { await checkSageUpdates(); } Env.loadSync(); const config = await loadConfig(); const checks = [checkTypescript, checkStructure]; if (config.type !== "plugin") { checks.push(checkEnvironmentVariables); } const results = checks.map((check) => check()); logger.log(composeColors(color.bold, color.underline)("\nHealth Check Results:")); results.forEach((result) => { logger.log(color.bold(`${result.ok ? color.green("\u2713") : color.red("\u2717")} ${result.message}`)); }); logger.log(""); } function checkTypescript() { const tsconfigPath = path.join(process.cwd(), "tsconfig.json"); const srcPath = path.join(process.cwd(), "src"); const tsFiles = []; function searchDir(dirPath) { const files = fs.readdirSync(dirPath); files.forEach((file) => { const filePath = path.join(dirPath, file); const fileStat = fs.statSync(filePath); if (fileStat.isDirectory()) { searchDir(filePath); } else if (path.extname(file) === ".ts") { tsFiles.push(filePath); } }); } if (!fs.existsSync(srcPath)) { return { ok: true, message: "src directory does not exist (not using TypeScript)" }; } searchDir(srcPath); if (!fs.existsSync(tsconfigPath)) { if (tsFiles.length === 0) { return { ok: true, message: "No TypeScript files or tsconfig.json found (not using TypeScript)" }; } return { ok: false, message: "tsconfig.json does not exist (using TypeScript)" }; } if (tsFiles.length === 0) { return { ok: false, message: "No TypeScript files found in src directory or subdirectories (using TypeScript)" }; } return { ok: true, message: "TypeScript files found and tsconfig.json exists (using TypeScript)" }; } function checkStructure() { const eventsPath = path.join(process.cwd(), "src", "events"); const commandsPath = path.join(process.cwd(), "src", "commands"); if (!fs.existsSync(eventsPath) || !fs.readdirSync(eventsPath).length) { return { ok: false, message: "No files found in /src/events directory" }; } if (!fs.existsSync(commandsPath) || !fs.readdirSync(commandsPath).length) { return { ok: false, message: "No files found in /src/commands directory" }; } return { ok: true, message: "Files found in /src/events and /src/commands directories" }; } function checkEnvironmentVariables() { const requiredVars = ["DISCORD_CLIENT_ID", "DISCORD_TOKEN"]; const missingVars = requiredVars.filter((variable) => !process.env[variable]); if (missingVars.length === 0) { return { ok: true, message: "All required environment variables are present" }; } return { ok: false, message: `Missing environment variables: ${missingVars.join(", ")}` }; } export { doctor_default as default }; //# sourceMappingURL=out.js.map //# sourceMappingURL=doctor.js.map