cloud-castle/parser-neon

Безопасный разбор и сериализация NEON для PHP 8.1+ без зависимостей: block + inline, только данные (нет entity/объектов), fail-loud, двунаправленность.

Maintainers

Package info

gitverse.ru/cloud-castle/parser-neon

Homepage

Issues

Documentation

pkg:composer/cloud-castle/parser-neon

Transparency log

Statistics

Installs: 11

Dependents: 1

Suggesters: 0

v1.0.0 2026-07-20 07:12 UTC

This package is not auto-updated.

Last update: 2026-07-20 07:21:51 UTC


README

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

CloudCastle Parser Neon

CloudCastle Parser Neon

Packagist Version Downloads PHP Version License

Безопасный разбор и сериализация NEON для PHP 8.1+ без внешних зависимостей. Block-структуры, inline-выражения [a, b] / {k: v}, типизированные скаляры. Разбирает только данные — никаких entity-вызовов (Foo(...)) и объектов, что исключает инъекции. Fail-loud, исключения не раскрывают исходных данных.

Установка

composer require cloud-castle/parser-neon

Требуется PHP 8.1+.

Быстрый старт

<?php

use CloudCastle\Parser\Neon\Neon;

// Разбор NEON в структуру PHP (block + inline).
$config = Neon::decode(<<<NEON
name: demo
debug: false
hosts:
  - a.local
  - b.local
limits: {cpu: 4, memory: 512}
NEON);
// ['name' => 'demo', 'debug' => false, 'hosts' => [...], 'limits' => ['cpu' => 4, ...]]

// Сериализация обратно в NEON.
$neon = Neon::encode(['app' => ['name' => 'demo', 'workers' => 4]]);

// Проверка без исключения.
if (Neon::isValid($input)) {
    // ...
}

Возможности

  • Block + inline NEON: отображения, списки, вложенность по отступам, inline-выражения [a, b] и {k: v} с любой вложенностью, типизированные скаляры (bool/null/int/float), кавычки, комментарии.
  • Только данные: разбор возвращает массивы и скаляры — никаких entity-вызовов (Foo(...)) и объектов (в отличие от nette/neon), то есть нет инъекций.
  • Fail-loud: ошибка разбора или сериализации — исключение (ParseException/EncodingException), а не тихий null/false.
  • Исключения не содержат исходных данных — только причину и номер строки.
  • Двунаправленность: decode() (NEON → структура) и encode() (структура → NEON).
  • Нулевые зависимости — чистый PHP.

Сравнение с аналогами

Все таблицы ниже сгенерированы автоматически из честных сравнительных тестов (benchmarks/compare.php) на ОДИНАКОВОЙ операции для всех аналогов, PHP 8.1.34, без Xdebug.

1. Функциональность

Возможность🏆 CloudCastlenettesymfonyspycpreg¹
Разбор block-конфига (отображения/списки/вложенность)
Inline-выражения [a, b] / {k: v}
Разбор в чистые данные (массивы/скаляры, без объектов)
Fail-loud: исключение при ошибке разбора
Ноль зависимостей (только PHP)
Всего🏆 54432

2. Безопасность и корректность

Свойство🏆 CloudCastlenettesymfonyspycpreg¹
Не создаёт объекты при разборе (nette/neon создаёт Entity)
Нет entity-вызовов/тегов — нет инъекций и выполнения кода
Fail-loud: исключение вместо тихого null/false
Исключения не раскрывают исходные данные (нет утечки ПД)
Ноль зависимостей (малая поверхность атаки)
Всего🏆 51233

3. Производительность

разбор конфигурационного документа, 20 000 раз (минимум из 4).

РешениеВремя (мс)Итог
preg¹31,5базовый уровень (не библиотека)
🏆 CloudCastle716,6быстрейшее среди библиотек
spyc985,8аналог
symfony1 697,7аналог
nette1 821,4аналог

4. Потребление памяти

Пик памяти на 20 000 операций (изолированный процесс, только целевая библиотека).

РешениеПиковая память (KB)Итог
🏆 CloudCastle7 111легчайшее среди библиотек
nette7 111аналог
spyc7 111аналог
preg¹7 111базовый уровень (не библиотека)
symfony7 161аналог

¹ Базовый уровень (нативные вызовы/примитивы без полноты решения) показан для контекста и не претендует на победу среди библиотек-аналогов.

Вывод: CloudCastle Parser Neon — самый безопасный среди рассмотренных (единственный отклоняет entity-вызовы и не создаёт объекты, тогда как nette/neon инстанцирует Entity для Foo(...)) и самый быстрый среди библиотек (быстрее nette/neon, symfony/yaml, spyc; наивный regex-разбор — базовый уровень). NEON как формат реализует по сути только nette/neon; symfony/yaml и spyc приведены как парсеры близких конфиг-форматов на общем block-документе. Это намеренное безопасное подмножество NEON для конфигураций: нужны entity и полная спека NEON — берите nette/neon; важна защита от инъекций и нулевые зависимости — этот пакет.

Разработка

composer install
composer check    # линтеры + статический анализ + тесты
composer fix      # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci       # полный CI-пайплайн локально

Полный список команд с описаниями: composer run-script --list.

Документация

Лицензия

MIT © CloudCastle (alex-4-17@yandex.ru)

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano