@roboplay/sage
Version:
Codemod for Robo.js
118 lines (116 loc) • 3.92 kB
JavaScript
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