---
type: JS Module
title: taze-diff.mjs
resource: npm/scripts/lib/taze-diff.mjs
docgen:
  crc: bafcd5bc
  model: openai-codex/gpt-5.4-mini
  tier: cloud-min
  score: 90
  judgeModel: openai-codex/gpt-5.4-mini
---

## Огляд

Модуль працює з даними залежностей і JSON-джерелами на рівні читання та порівняння: `diffManifestDeps` показує відмінності між наборами залежностей, а `readJsonOrNull` намагається прочитати JSON і в fail-safe гілках може повернути порожнє значення замість винятку. Інші помилки можуть поширюватися назовні, тож викликач може окремо обробляти лише ті випадки, які цей модуль свідомо пом’якшує.

## Поведінка

diffManifestDeps споживає два вже розпарсені маніфести як джерело порівняння залежностей і проходить лише ті поля, де збережені мапи залежностей. Для кожного спільного пакета воно звіряє старе й нове обмеження версії, відкидає відсутні, нерядкові або незмінені значення та розділяє зміни на major і minor/patch. Результат повертається у вигляді компактної структури: список major-розбіжностей із пакетом і старим/новим constraint та лічильник решти змін; мітку походження змін додає викликач поза цим модулем. Логіка орієнтується на конфігураційні маніфести `package.json` і `composer.json`, а для Composer також допускає відсів платформних псевдопакетів через зовнішній фільтр, якщо його передано.

readJsonOrNull виконує безпечне читання JSON-джерела й повертає розпарсений об’єкт лише коли файл доступний і вміст коректний. Якщо шлях відсутній або читання чи парсинг не вдаються, функція завершується м’яким `null` замість винятку, щоб викликач міг продовжити обробку без аварійного падіння.

## Публічний API

- diffManifestDeps — Спільне ядро taze-diff для мовних плагінів із JSON-маніфестами мапою
ім'я→constraint (package.json, composer.json): обходить поля залежностей
двох розпарсених маніфестів і класифікує кожну зміну версії на major
(breaking за caret-правилом `isBreaking`) чи minor/patch. Мітку джерела
(workspace/manifest) додає викликач — ядро повертає лише `{pkg, from, to}`.
- readJsonOrNull — Читає й парсить JSON-файл, або повертає null, якщо файл відсутній/невалідний.

## Сценарії використання

- `npm/scripts/lib/tests/taze-diff.test.mjs` (diffManifestDeps; readJsonOrNull) — класифікує major vs minor/patch по всіх полях, без мітки джерела; незмінні, видалені в новому й нестрокові значення — ігноруються; не-semver зміна рахується як minor/patch, не major; filterPkg відсіює пакети до порівняння; відсутнє поле в одному з маніфестів — пропускається; ще 2

## Гарантії поведінки

- Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
- Містить локальні fail-safe гілки; інші помилки можуть поширюватися назовні.
- Деякі локальні fail-safe гілки повертають порожнє значення (напр. `null`) замість винятку.
