refactor: move fit to size function

This commit is contained in:
2026-10-10 06:50:07 +05:00
parent dfb1f531fa
commit 0b929eced2
4 changed files with 44 additions and 40 deletions
+7 -5
View File
@@ -91,12 +91,14 @@ aligned, ontogglealign).
mime-контракт `OutputMime`; сам `io.ts` таблицу не использовал. Потребители (4
файла) переведены на новый путь.
### M6. Доменная политика сжатия в IO-модуле
### M6. Доменная политика сжатия в IO-модуле — СДЕЛАНО (2026-10)
`web/src/lib/core/io.ts:191-210`: `fitWithinBytes` — стратегия «бинарный поиск
по quality / по числу цветов квантизации» поверх `quantizeImage`,
`findMaxColorsWithin`, `findQualityWithin`. Это доменная логика, не ввод-вывод
(у файла 19 экспортов).
`fitWithinBytes` перенесён из `core/io.ts` в `core/compress.ts` (дом стратегий
сжатия). Сигнатура с инъекцией:
`fitWithinBytes(img, mime, targetBytes, quality, encodeFn)` — вызывающий
(`schema-tool-runner`) передаёт `io.encode`, поэтому `compress.ts` остаётся
DOM-free и node-тестируемым (попутно `fitWithinBytes` теперь можно
юнит-тестировать с фейковым encode). `io.ts` вернулся к чистому IO.
### M7. `clamp` продублирован 5 раз — СДЕЛАНО (2026-10)