Untitled
unknown
javascript
9 months ago
2.8 kB
8
Indexable
// generate-api.js
const { exec } = require('child_process');
const { promisify } = require('util');
const fs = require('fs').promises;
const path = require('path');
const execAsync = promisify(exec);
// Цвета для консоли
const colors = {
reset: '\x1b[0m',
green: '\x1b[32m',
blue: '\x1b[34m',
red: '\x1b[31m',
};
async function generateApi(filePath) {
const command = `export NODE_TLS_REJECT_UNAUTHORIZED=0 && npx @rtk-query/codegen-openapi ${filePath}`;
try {
console.log(`${colors.blue}Запуск генерации для:${colors.reset} ${filePath}`);
const { stdout, stderr } = await execAsync(command);
if (stdout) {
console.log(`${colors.green}✓ Успешно выполнен:${colors.reset} ${filePath}`);
console.log(stdout);
}
if (stderr) {
console.error(`${colors.red}Предупреждения:${colors.reset}\n${stderr}`);
}
return true;
} catch (error) {
console.error(`${colors.red}✗ Ошибка при выполнении:${colors.reset} ${filePath}`);
console.error(error.message);
return false;
}
}
// Функция для поиска всех файлов config
async function findGenerateFiles(dir) {
const files = [];
async function scan(directory) {
const entries = await fs.readdir(directory, { withFileTypes: true });
for (const entry of entries) {
const fullPath = path.join(directory, entry.name);
if (entry.isDirectory()) {
await scan(fullPath);
} else if (entry.name === 'generate.ts') {
files.push(fullPath);
}
}
}
await scan(dir);
return files;
}
// Главная функция
async function main() {
try {
// Проверяем существование папки src
try {
await fs.access('src');
} catch {
console.error('Папка src не найдена!');
process.exit(1);
}
console.log('Начинаем генерацию API...');
console.log('----------------------------------------');
const files = await findGenerateFiles('src');
if (files.length === 0) {
return;
}
const results = await Promise.all(files.map((file) => generateApi(file)));
// Подсчитываем результаты
const successful = results.filter(Boolean).length;
const failed = results.length - successful;
console.log(`${colors.green}Генерация завершена!${colors.reset}`);
console.log(`Успешно: ${successful}`);
if (failed > 0) {
console.log(`${colors.red}С ошибками: ${failed}${colors.reset}`);
}
} catch (error) {
console.error(`${colors.red}Критическая ошибка:${colors.reset}`, error);
process.exit(1);
}
}
// Запускаем скрипт
main();Editor is loading...
Leave a Comment