Untitled

 avatar
unknown
javascript
12 days ago
2.8 kB
3
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