/
nacha
/
pseado
Обзор
Документация
Войти
/
nacha
/
pseado
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
Безопасность
master
scripts/validate_twin.js
90 строк
3 KB
alex
feat: add CLI script for Digital Twin validation (GOST check)
04 авг 2026, 02:35
Верифицирован
04 авг 2026, 02:35
9e08c22
Код
Авторство
О чём код?
#!/usr/bin/env node /** * Digital Twin CLI Validator * Используется для проверки .pseado файлов на соответствие ГОСТ Р 57143 * * Пример использования: * node scripts/validate_twin.js asset_digital_twin.pseado */ import { readFileSync } from 'fs'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import { Parser } from '../src/core/parser.js'; import { GostDigitalTwinValidator } from '../src/extensions/digital_twin_validator.js'; import { readJsonSync } from 'fs'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); // Читаем аргументы командной строки const args = process.argv.slice(2); if (args.length === 0) { console.error('Использование: node scripts/validate_twin.js <file.pseado> [id] [revision] [status]'); process.exit(1); } const filePath = args[0]; const providedMeta = { id: args[1] || 'cli-generated-id', revision: parseInt(args[2] || '1'), status: args[3] || 'design' }; try { console.log(`\n🔍 Валидация цифрового двойника: ${filePath}`); console.log('─────────────────────────────────────────'); // 1. Чтение файла const content = readFileSync(filePath, 'utf-8'); // 2. Парсинг const parser = new Parser(); const ast = parser.parse(content); if (parser.getErrors().length > 0) { console.error('❌ Ошибки парсинга:'); parser.getErrors().forEach(e => console.error(' ' + e)); process.exit(1); } // 3. Добавление метаданных цифрового двойника ast.meta = providedMeta; // 4. Валидация по ГОСТ const validator = new GostDigitalTwinValidator(); const result = validator.validate(ast); // 5. Вывод результатов console.log(`\n📄 Структура файла:`); console.log(` Команд (элементов): ${ast.body.length}`); console.log(` Типы элементов: ${Object.keys(ast.byType || {}).join(', ')}`); console.log(`\n🔖 Метаданные цифрового двойника:`); console.log(` ID: ${providedMeta.id}`); console.log(` Ревизия: ${providedMeta.revision}`); console.log(` Статус: ${providedMeta.status}`); console.log(`\n✅ Результат валидации ГОСТ Р 57143-2016:`); if (result.valid) { console.log(' ✅ ПОЛНОЕ СООТВЕТСТВИЕ'); if (result.warnings.length > 0) { console.log(` ⚠️ Предупреждения: ${result.warnings.length}`); result.warnings.forEach(w => console.log(` - ${w}`)); } } else { console.log(' ❌ ТРЕБУЮТСЯ ИСПРАВЛЕНИЯ'); result.errors.forEach(e => console.log(` - ${e}`)); } console.log('─────────────────────────────────────────\n'); // Завершаем с кодом ошибки, если есть ошибки валидации if (!result.valid) { process.exit(2); } } catch (error) { console.error(`\n❌ Ошибка выполнения: ${error.message}`); process.exit(1); }