История изменений
v1.15.0 20.05.2026
- fix(build): сохраняем config.php при провальной сборке. Раньше любая ошибка тайпчека или Rollup перезаписывала rel пустым массивом, и фолбэк PhpConfigManager превращал его в ['main.polyfill.core'] с skip_core: true. Бандл на диске оставался старым, а манифест портился молча.
- feat(diag): команда find-usages переехала на AST и разделена на две — find-usages (поиск потребителей) и find-loaders (поиск загрузчиков).
v1.14.0 18.05.2026
Полностью переработан baseline-check — модуль, который во время сборки и команды chef diag baseline ищет JavaScript- и CSS-фичи, не поддерживаемые целевыми браузерами.
Что было: список API ловился по хардкодному перечню staticMethods, globalApis, instanceMethodOwners — это означало, что каждое новое API проскальзывало мимо проверки, пока кто-то вручную не добавит его в список. Из-за этого RegExp.escape, Promise.try, Object.groupBy, Iterator.from и другие современные API оставались незамеченными, несмотря на устаревшие .browserslistrc-таргеты.
Что стало: проверка строится автоматически из двух источников:
@mdn/browser-compat-data— та же база, которой пользуется MDN для таблиц совместимости. Все статические методы, конструкторы, глобальные функции и instance-методы индексируются на старте. Различие static vs instance определяется по TC39spec_url(формальный источник истины) с фолбэком на runtime-интроспекцию.AST через
@babel/parser— заменил построчное regex-сканирование. Поддерживает JS / TS / TSX / JSX / Flow, не реагирует на упоминания API в строковых литералах и комментариях, учитывает локальный shadowing (const Promise = bluebird,import { Promise } from 'bluebird'и т.д.).Синтаксические фичи (
?.,??,??=,||=,&&=,**,...) теперь проверяются противbcd.javascript.operatorsчерез декларативный мост AST-узлов на BCD-ключи.
Дополнительно:
Чекер вынесен в отдельный модуль
src/modules/baseline/, его используют и rollup-плагин, и командаchef diag baseline. Команда теперь принудительно включает baseline-проверку черезextension.generate(), даже если вbundle.configона не включена явно.Для instance-методов (например,
.some()есть и у Array с ES5, и у Iterator с Chrome 122+) предупреждение появляется только когда метод не поддерживается ни одним из владельцев — иначе обычные.map()и.filter()ложно срабатывали бы в современных бандлах.
Покрытие тестами: добавлено 212 новых тестов в test/baseline/ (bcd-index, ast-walker, syntax-map, ignore, api-coverage, css-coverage, e2e). Существующие 58 тестов перенесены на новый API, добавлено 13 регрессионных кейсов. End-to-end тесты запускают chef diag baseline и chef build на временной репе, фиксируя реальное поведение для пользователя.
v1.13.1 14.05.2026
- build: реэкспорты из внешних расширений теперь компилируются в прямые присваивания (exports.Foo = dep.Foo) вместо live-binding геттеров через Object.defineProperty — фикс runtime-рекурсии «Maximum call stack size exceeded», когда два расширения делят один namespace
- diag: новая команда
chef diag re-exports— находит расширения, реэкспортирующие символы из других расширений, помечает критичные случаи (общий namespace, self-reference) и wildcard-реэкспорты - build: предупреждения при сборке о реэкспортах с общим namespace (CF1015) и циклических зависимостях между расширениями (CF1006) — оба с code frame на конкретной строке
importв исходниках и подсказками по исправлению, включая Runtime.loadExtension() для отложенной загрузки - build: циклические импорты файлов внутри бандла теперь фильтруются — отчёт только по прямым (A → B → A), длинные цепочки оставлены команде
chef diag circular-imports; добавлены подробныеdetailsпро TDZ и способы починки - build: автоиндекс директорий в импортах TypeScript —
import './lib'иimport './lib/'корректно резолвятся в./lib/index.{ts,tsx,mts,cts}(поведение как в Vite)
v1.13.0 14.05.2026
- build: реэкспорты из внешних расширений теперь компилируются в прямые присваивания (exports.Foo = dep.Foo) вместо live-binding геттеров через Object.defineProperty — фикс runtime-рекурсии «Maximum call stack size exceeded», когда два расширения делят один namespace
- diag: новая команда
chef diag re-exports— находит расширения, реэкспортирующие символы из других расширений, помечает критичные случаи (общий namespace, self-reference) и wildcard-реэкспорты - build: предупреждения при сборке о реэкспортах с общим namespace (CF1015) и циклических зависимостях между расширениями (CF1006) — оба с code frame на конкретной строке
importв исходниках и подсказками по исправлению, включая Runtime.loadExtension() для отложенной загрузки - build: циклические импорты файлов внутри бандла теперь фильтруются — отчёт только по прямым (A → B → A), длинные цепочки оставлены команде
chef diag circular-imports; добавлены подробныеdetailsпро TDZ и способы починки - build: автоиндекс директорий в импортах TypeScript —
import './lib'иimport './lib/'корректно резолвятся в./lib/index.{ts,tsx,mts,cts}(поведение как в Vite)
v1.12.5 13.05.2026
- diag: расширенное предупреждение CHEF_DTS с готовым рецептом исправления для каждого вида инлайна (vue-components, computed-arrow, export-const, generic) — заголовок, фрагмент кода, точная позиция и сниппет с фиксом
- diag: убраны ложные предупреждения CHEF_DTS на структурно пустых sibling-экспортах вроде Object.freeze({} as const) (например, Special из ui.icon-set.api.core)
- docs: новая страница «Troubleshooting» с разделом про DTS-инлайнинг (RU + EN)
- ci: релизные тесты теперь идут на одной версии Node (22) на каждой ОС
v1.12.4 12.05.2026
fix(windows): команда chef aliases теперь корректно работает на Windows — aliases.tsconfig.json содержит только POSIX-разделители путей, TypeScript снова резолвит алиасы.
Починены платформенные проблемы в chef build, chef test, chef lint, chef diag, chef init и связанных модулях: единый подход к путям через normalizePath/isAbsoluteAnyPlatform, корректный спавн npx/hg через shell на Windows, pathToFileURL для динамических импортов и кликабельных ссылок, os.tmpdir() вместо /tmp, регексп stack-трейсов учитывает Windows-пути, chef.config.ts загружается через tsx/cjs/api.
ci: перед npm publish теперь запускается матрица тестов на ubuntu/macos/windows × Node 22/24 — релиз с провалом на любой платформе блокируется.
v1.12.0 08.05.2026
Диагностики этапа эмита деклараций (например, TS4023) теперь показываются как warnings в выводе сборки — раньше они молча терялись. Добавлен структурный детектор инлайна: chef предупреждает, если в .d.ts разворачивается тип, импортированный из соседнего расширения (включая транзитивные re-exports), и подсказывает добавить аннотацию вида : typeof X, чтобы сохранить ссылку на namespace. Исправлено дублирование объявлений при destructured exports вида export const { a, b, c } = X — раньше такой statement рендерился по разу на каждое имя. Устаревший .d.ts удаляется, если свежий собрать не удалось — чтобы потребители не работали с фантомным API.
v1.11.0 07.05.2026
Добавлен флаг --reporter <name> для команд build/lint/test/typecheck/diag. Сейчас доступны default (человекочитаемый, по умолчанию), json (структурированный JSON в stdout) и teamcity (только для chef test).
Формат JSON-ответа:
- В корне ответа есть
chefVersionиcwd - Список нерешённых имён расширений отдаётся в поле
notFound - В test failure приходят
file/line/column/frameиdiff(без полного стек-трейса) - В test JSON корректно строится путь suite, имя браузера — реальное (
chromium/firefox/webkit) - В lint и typecheck нет дублирования сообщений между
detailsиerrors bundles[].fileNameпереименовано вbundles[].file
v1.10.0 04.05.2026
- Улучшен вывод массового запуска
chef test: расширения без тестов пропускаются молча, ошибки и упавшие тесты собираются в общую сводку в конце - Причина неудачи теперь видна прямо в строке задачи:
(build failed),(N failed),(crashed before any tests ran),(no tests collected),(no test files) - Добавлен флаг
--console— браузерный консольный вывод по умолчанию скрыт, чтобы не замусоривать массовый отчёт - В итоговую сводку добавлена строка
Testsс агрегатом по всем расширениям
v1.9.1 30.04.2026
Глобальные неймспейсы для зависимостей, заремапленных на npm-пакеты: при включённом standalone.exposeNamespaces экспорты npm-пакета теперь регистрируются под неймспейсом исходного расширения (например, ui.lexical.core → globalThis.BX.UI.Lexical.Core).
v1.9.0 29.04.2026
- Полная переработка эмиттера .d.ts на TypeScript Compiler API: правки через AST по точным позициям, корректный резолв npm-типов через sibling-экстеншены, поддержка ImportTypeNode, эмит для entry-файлов с импортами за пределами packageRoot
- Транзитивный обход npm-импортов sibling-экстеншенов: типы из под-пакетов (например, @vue/runtime-core за vue) теперь корректно ссылаются на ambient-namespace sibling'а вместо инлайн-копии
- bundle.config: новое поле
typesдля указания .d.ts файла —chef aliasesи webpack-резолверы используют его вместоinputдля design-time резолва
v1.8.3 17.04.2026
• standalone: npm-пакеты в remap резолвятся через Rollup node-resolve (ESM вместо CJS) • standalone: упрощена экспозиция пространств имён зависимостей — меньше рантайм-кода, чище бандл • test runner: тестовый бандл больше не инлайнит граф зависимостей; сборка тестов для больших пакетов больше не ломается
v1.8.2 16.04.2026
Исправлены runtime-ошибки в standalone-сборках с exposeNamespaces: true: ошибки TDZ при циклических зависимостях, падение на read-only свойствах замороженных объектов, конфликт при совпадении namespace зависимости и текущего расширения.
v1.8.1 16.04.2026
- Предупреждения о неиспользуемых импортах теперь показывают точное имя и файл с code frame
v1.8.0 15.04.2026
- Добавлен production-режим сборки и поддержка export conditions из package.json
- Standalone-сборки теперь включают CSS и ассеты зависимостей
- Исправлена генерация d.ts: корректная обработка реэкспортов через barrel-файлы и резолв путей через tsconfig
- Исправлены абсолютные пути в sourcemap при конкатенации файлов
- Исправлен safeNamespaces для формата IIFE в Rollup 4
- Исправлен резолв CSS-only зависимостей в config.php
- Добавлен флаг --force для пропуска валидации конфига проекта
v1.7.0 15.04.2026
- Standalone-сборка: инлайн всех зависимостей в один бандл с поддержкой
remapдля переопределения зависимостей - CSS-only расширения: поддержка CSS-файла как точки входа без JS-обёртки
- Опция
cssImages.absolutePathsдля абсолютных URL изображений в CSS - Опция
exposeNamespacesдля standalone-сборок - Исправлена сборка protected-расширений в standalone-режиме
- E2E-тесты: корректный поиск конфига Playwright и запуск без ошибки при пустом тест-сьюте
v1.6.3 13.04.2026
- Исправлено удаление side-effect импортов при сборке (например, файлы с регистрацией обработчиков)
- Исправлено игнорирование параметра
adjustConfigPhp: falseв bundle.config - Настройки tree-shaking приведены к стандартным значениям Rollup
v1.6.2 13.04.2026
Добавлена поддержка директории tests/ как альтернативы test/ для unit и e2e тестов
v1.6.1 11.04.2026
- Исправлена выборочная транспиляция классов: статические свойства других классов больше не затрагиваются
v1.6.0 11.04.2026
- Новая команда
chef baseline— проверка доступности веб-фич для текущих browser targets - Новая подкоманда
chef diag baseline— обзор несовместимых фич по всем расширениям - При сборке выводятся предупреждения об использовании API и CSS-свойств, не поддерживаемых целевыми браузерами
chef typecheckтеперь резолвит внешние зависимости через tsconfig paths и учитывает.d.tsфайлы расширенийtransformClassesпринимает массив имён классов для выборочной транспиляции
v1.5.1 01.04.2026
- Исправлен запуск проверки обновлений на Windows (ошибка EINVAL при вызове npm.cmd)
- Команды диагностики (chef diag) больше не создают файлы на диске при анализе зависимостей
v1.5.0 01.04.2026
- Новые диагностические команды:
deps-tree(дерево зависимостей с--depth,--flat,--why) иbundle-size(размер бандла с--with-deps) - Размер ассетов (изображения, шрифты, SVG) теперь учитывается в
top-bundle-sizeиtop-total-size— считаются только файлы, реально используемые в бандле - Сортировка по колонке в
top-bundle-size(--sort js|css|assets|total) иtop-total-size(--sort own|total|deps|tree) - Исправлен парсинг
config.phpс ранним return по условию - Исправлена генерация
.d.ts: интерфейсы с JSDoc-аннотациями выносятся за пределы namespace - Исправлено применение
preset-envк TypeScript-файлам на основеtargets
v1.4.1 30.03.2026
Исправлена ошибка запуска при глобальной установке. Исправлена двойная индентация в бандлах TypeScript-расширений
v1.4.0 29.03.2026
- Переработана генерация
.d.tsфайлов: entry-point traversal, резолв зависимых типов между файлами, поддержка re-export алиасов, abstract классов, перегрузок функций, unique symbol, дженериков - Исправлена транспиляция TypeScript файлов, импортируемых из-за пределов корня пакета (например
../../src/) - Добавлены тесты генерации
.d.ts(99 кейсов)
v1.3.1 27.03.2026
Добавлено уведомление о новых версиях chef. При запуске CLI в терминале проверяется наличие обновлений в npm-реестре, результат кешируется на 24 часа. Если доступна новая версия — после завершения команды выводится информативное сообщение с инструкцией по обновлению.
v1.3.0 27.03.2026
- Табуляция в собранных бандлах вместо пробелов
- Итоговая статистика при сборке и тестировании нескольких расширений
- Правило deny.exportDefault в chef.config — запрет export default в точке входа
- Исправлены ложные срабатывания циклических зависимостей и ускорен фильтрованный поиск
- Подавлено предупреждение Babel о деоптимизации стилей для больших файлов
- Исправлена транспиляция TypeScript-зависимостей в standalone-бандлах
v1.2.1 26.03.2026
- Исправлена генерация путей к изображениям в CSS при копировании в dist — стабильная структура с префиксом images/ и корректная перезапись url()
- Исправлено создание config.php при сборке компонентов и шаблонов — файл обновляется только для расширений
- Исправлен захват ошибок консоли в chef test — теперь отображаются runtime-ошибки и uncaught exceptions, вывод дедуплицируется между браузерами
- Исправлено дублирование бандла при совпадении имени concat-файла с выходным файлом
- Исправлены пустые строки после удаления комментариев в TypeScript-сборках
- Исключены файлы бандлов из chef lint и chef typecheck
- Добавлена поддержка rollup-совместимого формата опции treeshake в bundle.config
- Добавлена опция --exclude для команд lint и typecheck
v1.2.0 25.03.2026
Новая команда chef typecheck — проверка типов TypeScript в расширениях. Поддерживает имена расширений, glob-паттерны, --path и --file. Коды ошибок "не найдено" объединены под CF2005.
v1.1.2 25.03.2026
Исправлена проверка типов при сборке: теперь учитываются настройки compilerOptions из tsconfig.json (включая lib). Обновлён шаблон tsconfig.json — добавлены библиотеки DOM.Iterable и WebWorker.
v1.1.1 25.03.2026
Исправлен неймспейс для зависимостей без bundle.config — в source-окружении используется BX, в project — BX для расширений из bitrix/, window для остальных. Комментарии больше не удаляются из JS-расширений, только из TypeScript.
v1.1.0 24.03.2026
Новый параметр safeNamespaces в bundle.config — безопасные обращения к неймспейсам зависимостей через optional chaining в IIFE-обёртке. Исправлено копирование больших CSS-картинок в dist и порядок CSS в бандле.
v1.0.0 24.03.2026
- Команда
chef lint— линтинг расширений через ESLint 9 с поддержкой TypeScript, кешем и автоисправлением - Команда
chef diag— диагностика проекта: топ зависимостей, размеры бандлов, циклические зависимости, неиспользуемые расширения, поиск использований - Команда
chef aliasesиchef init hooks— генерация алиасов путей для TypeScript и VCS-хуки для автообновления - Флаг
chef --versionдля проверки установленной версии - Минификация через Terser вместо oxc-minify
- Валидация конфига расширения перед сборкой с подробными ошибками
- Предупреждение при отсутствии
.env.testперед запуском тестов - Дебаунс watcher в тестах для предотвращения параллельных перезапусков
- Фильтры
--include/--excludeв командах диагностики
v0.0.0-beta.15 13.03.2026
- Генерация
.d.tsдеклараций для TypeScript-расширений с поддержкой namespace - Удаление комментариев из бандла
- Паттерн
**для глубокого поиска расширений - CSS и зависимости включаются в тестовый бандл
- Структурированные диагностики с кодами ошибок (CF-коды)
- Замена внутренних зависимостей: terser → oxc-minify, php-parser → собственный парсер config.php, rollup-plugin-postcss → собственный CSS-плагин, p-queue → встроенная очередь
- Удалены неиспользуемые зависимости (@vue/compiler-sfc, @rollup/plugin-typescript)
- Убрана зависимость ora из репортеров тестов и инициализации
v0.0.0-beta.14 11.03.2026
Добавлена проверка типов TypeScript при сборке. Ошибки выводятся с фрагментом кода, подчёркиванием и кликабельной ссылкой на файл. Если есть ошибки — сборка останавливается до запуска Rollup.
v0.0.0-beta.13 11.03.2026
- Исправлена работа chef init при установке из npm
- Исправлено форматирование сообщений в chef init
- Описания релизов на двух языках с раздельным changelog в документации
v0.0.0-beta.12 11.03.2026
- Интеграция с PhpStorm — запуск и отладка тестов, TeamCity reporter, CDP debugging
- Новый тестовый reporter с live-обновлением статуса по браузерам
- Кэширование тестовых бандлов между браузерами и Rollup-модулей между расширениями
- Конфиг проекта
chef.config.ts— запрет расширений, дефолты, enforce-правила - Автозамена переменных окружения в сборке
- Улучшенная миграция Flow → TypeScript с новыми трансформациями типов
- Production-сборка (
--production), standalone-бандлы, кастомные Rollup-плагины - Ленивая загрузка команд и плагинов — быстрый холодный старт
- Документация на двух языках с деплоем на GitHub Pages
- Публикация на npm через Trusted Publisher (OIDC provenance)