Skip to content

Kseolis/Difference-Calculator25

Repository files navigation

Вычислитель отличий (Difference Calculator)

Hexlet Check CI Code Smells Coverage Quality Gate Status

Утилита командной строки для сравнения конфигурационных файлов в форматах JSON и YAML.

Установка и запуск

# Установка зависимостей
make install

# Линтинг
make lint

# Тесты
make test

# Покрытие кода
make coverage

# Создание глобальной ссылки
make link

Архитектура проекта

src/
├── diff.js              # Главный API
├── parser.js           # Парсинг JSON/YAML файлов
├── formatter/
│   ├── index.js         # Выбор и вызов форматтеров
│   ├── stylish.js       # Stylish форматтер
│   ├── plain.js         # Plain форматтер
│   └── json.js          # JSON форматтер

bin/
└── gendiff.js           # CLI точка входа

Использование

CLI

# Базовое использование (формат stylish по умолчанию)
gendiff file1.json file2.json

# С указанием формата
gendiff -f plain file1.json file2.json
gendiff -f json file1.json file2.json
gendiff -f stylish file1.json file2.json

# С YAML файлами
gendiff file1.yml file2.yml
gendiff -f plain file1.yml file2.yml

API

import genDiff from '@hexlet/code';

// Сравнение файлов
const diff = genDiff('file1.json', 'file2.json', 'formatStylish');
console.log(diff);

Поддерживаемые форматы

Входные форматы

  • JSON (.json)
  • YAML (.yml, .yaml)

Форматы вывода

1. Stylish (по умолчанию)

gendiff file1.json file2.json

Вывод:

{
  - follow: false
    host: hexlet.io
  - proxy: 123.234.53.22
  - timeout: 50
  + timeout: 20
  + verbose: true
}

2. Plain

gendiff -f plain file1.json file2.json

Вывод:

Property 'follow' was removed
Property 'proxy' was removed
Property 'timeout' was updated. From 50 to 20
Property 'verbose' was added with value: true

3. JSON

gendiff -f json file1.json file2.json

Вывод:

[
  {
    "type": "removed",
    "key": "follow",
    "value": false
  },
  {
    "type": "unchanged",
    "key": "host",
    "value": "hexlet.io"
  },
  {
    "type": "removed",
    "key": "proxy",
    "value": "123.234.53.22"
  },
  {
    "type": "updated",
    "key": "timeout",
    "value1": 50,
    "value2": 20
  },
  {
    "type": "added",
    "key": "verbose",
    "value": true
  }
]

Примеры файлов

file1.json

{
  "timeout": 50,
  "proxy": "123.234.53.22",
  "follow": false,
  "host": "hexlet.io"
}

file2.json

{
  "timeout": 20,
  "verbose": true,
  "host": "hexlet.io"
}

Разработка

Команды разработки

# Установка зависимостей
npm ci

# Линтинг
npm run lint

# Тесты
npm test

# Тесты в режиме наблюдения
npm run test:watch

# Покрытие кода
npm run coverage

# Создание глобальной ссылки
npm link

# Публикация (dry-run)
npm publish --dry-run

Структура тестов

__tests__/
├── genDiff.test.js     # Тесты форматтеров

CI/CD

  • Hexlet Check: Автоматическая проверка заданий
  • CI Pipeline: Линтинг, тесты, покрытие кода
  • SonarQube: Анализ качества кода (при наличии токенов)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors