Skip to content

Releases: cloudcastle-apps/collection

v1.1.0 — сериализация через cloudcastle/serialize

Choose a tag to compare

@Zorin-Alexey Zorin-Alexey released this 16 Jul 17:23
Immutable release. Only release title and notes can be modified.
b6332e5

Добавлено

  • toSerialized(?SerializerInterface $serializer = null) и Collection::fromSerialized(string $payload, ?SerializerInterface $serializer = null) — сериализация и восстановление элементов любым форматом cloudcastle/serialize: JSON по умолчанию, PHP с белым списком классов, igbinary, подписанный. Fail-safe контракт, DoS-лимиты, анти-POP (fail-closed исключение на неразрешённом классе).

Изменено

  • toJson() без флагов кодирует через cloudcastle/serialize: юникод без экранирования ("Москва" вместо "\u041c..."), дробные сохраняют тип (1.0, а не 1), вложенность и длина ограничены. Пользовательские флаги — прямой json_encode, совместимость полная. Цена расширенного контракта ≈2 % пропускной способности toJson.
  • Внутренний хэш уникальности (unique()/duplicates()) для объектов и массивов считается через PhpSerializer.

Качество

150 тестов, покрытие 100 % (554/554), MSI 100 % (565 killed / 0 escaped).

v1.0.0 — первый релиз

Choose a tag to compare

@Zorin-Alexey Zorin-Alexey released this 16 Jul 02:10
Immutable release. Only release title and notes can be modified.

Первый стабильный релиз cloudcastle/collection.

Возможности

  • ~85 методов в одном классе Collection: создание (make/wrap/times/range/fromJson), доступ и поиск (first/last/firstOrFail/sole/search), трансформация (map/flatMap/pluck/flatten), фильтрация (filter/reject/where-семейство/unique/duplicates), срезы и группировка (chunk/split/partition/groupBy/keyBy/countBy), объединение (merge/union/combine/zip/crossJoin/diff/intersect), агрегация (sum/avg/median/mode/reduce), сортировка (sortBy по Шварцу), мутаторы и higher-order (each/tap/pipe/when).
  • Строгая семантика (===) во всех сравнениях: contains('1')contains(1), unique не схлопывает 1/'1'/true — защита от type juggling по построению.
  • Строка из данных — данные: имя функции никогда не выполняется; map('intval') не передаёт ключ в базу счисления, filter('is_int') не падает ArgumentCountError.
  • JSON fail-safe: исключения вместо тихого false, валидация верхнего уровня, клэмп глубины.

Качество

  • 100% покрытие на каждый файл пятью видами тестов, Infection MSI 100% (553/553).
  • PHPStan max, Psalm level 1, PHPMD, Deptrac, Rector, PSR-12. Матрица CI PHP 8.1–8.5.
  • Бенчмарки против четырёх аналогов с графой победителя: where ×7 быстрее illuminate, pluck ×29, sum по полю ×12, groupBy ×4; честно задокументированы и проигрыши (unique — цена строгости, chunk — вложенные коллекции).

Полный список — в CHANGELOG.