@mart-dev-test-1/parser
v0.2.2
Published
ECSS parser — high-performance parser written in Rust (napi-rs); parses ECSS source into an AST.
Downloads
331
Maintainers
Readme
import { parseEcss } from '@mart-dev-test-1/parser';
const ast = parseEcss(source);📦 Установка
npm i @mart-dev-test-1/parserpnpm add @mart-dev-test-1/parseryarn add @mart-dev-test-1/parserЭто нативный пакет: основная логика написана на Rust и скомпилирована в Node-аддон через napi-rs. Готовые бинарники подключаются автоматически под вашу платформу через optionalDependencies — отдельный пакет на каждую цель (darwin-arm64, darwin-x64, linux-x64-gnu, win32-x64-msvc). Шаг компиляции при установке не требуется.
🧩 Что это
@mart-dev-test-1/parser — нативный парсер ECSS на Rust и первый этап конвейера ECSS:
исходный код .ecss → parseEcss() → AST → компиляторПарсер только превращает текст в AST (дерево EcssStylesheet) — он не резолвит @import, не подставляет @const, не разворачивает наследование и не генерирует CSS. Всё это происходит на последующих этапах.
Пакет низкоуровневый и внутренний. Напрямую он нужен редко: в обычном проекте вы подключаете @mart-dev-test-1/vite-plugin (или другой плагин сборщика), который сам вызывает парсер под капотом. Тянуть @mart-dev-test-1/parser руками стоит, только если вы пишете собственный инструмент поверх ECSS-конвейера.
🛠 API
parseEcss(source: string): EcssStylesheet
Разбирает строку с исходным кодом ECSS и возвращает AST — объект EcssStylesheet с полем rules. Типы AST (EcssStylesheet, EcssRule, BlockDecl, EnumDecl, …) экспортируются пакетом и доступны в TypeScript.
import { parseEcss } from '@mart-dev-test-1/parser';
const ast = parseEcss(`
@block Button {
@param --variant: enum(Variant);
color: red;
}
`);
ast.rules; // массив правил верхнего уровняПри синтаксической ошибке функция бросает исключение. Сообщение начинается с позиции в исходнике в формате [строка:столбец]:
try {
parseEcss('@block {');
} catch (error) {
// например: [1:8] expected block name
console.error((error as Error).message);
}👨💻 Автор
Разработка и поддержка: Руслан Мартынов
Если нашёл баг или есть предложение — открывай issue или отправляй pull request.
📄 Лицензия
Распространяется под лицензией MIT.
