История изменений
v2.0.2 22.10.2026
chef diag find-usages и chef diag unused больше не читают JS-файлы из каталогов lang. Там лежат файлы фраз, а не код: Bitrix может хранить фразы экстеншна в JS-файле в lang/<язык>/ вместо config.php. Раньше такие файлы сканировались как исходники, и текст фраз мог дать ложное использование экстеншна. PHP-файлы из lang пропускались и раньше. Теперь JS-файлы тоже пропускаются, как и написано в справке команд.
v2.0.1 16.10.2026
chef-oxlint без аргументов запускает языковой сервер, если первым на стандартный ввод приходит сообщение LSP, — так к нему подключается редактор. Плагин Oxc для JetBrains IDE до версии 0.0.44 в ручной настройке запускает указанный бинарник без --lsp, если не включена настройка Add --lsp CLI argument. Раньше chef-oxlint в этом случае проверял текущий каталог как обычный oxlint и не отвечал редактору, а IDE через 100 секунд сообщала 'initialized' response not received from the server. Запуск из терминала и в CI работает как раньше. В инструкции для PhpStorm описана настройка для старых версий плагина.
Битый тестовый файл больше не роняет весь прогон. Файл, который не собирается (синтаксическая ошибка, импорт несуществующего модуля) или падает при загрузке (ошибка вне it), выводится отдельной группой с упавшей записью Failed to build или Failed to load, причиной и фрагментом кода, а остальные файлы выполняются. Раньше в unit-тестах такой файл давал build failed на всё расширение или молча отключал тесты файлов после него, и прогон мог остаться зелёным. В e2e chef повторяет прогон Playwright без битых spec-файлов. Синтаксическая ошибка в TypeScript указывает на строку исходника, а не транспилированного кода, а стек-трейсы unit-тестов больше не съезжают в исходниках с символами U+2028/U+2029. Если в одном браузере тесты не запустились, в отчёте остаются результаты остальных. С --list выводятся ошибки, из-за которых тесты не удалось перечислить.
v2.0.0 14.10.2026
Мажорная версия: сменился линтер по умолчанию. chef lint теперь проверяет код через oxlint и не читает eslint.config.*, поэтому результаты могут отличаться от прежних, в том числе в CI. Чтобы остаться на ESLint, запускайте chef lint --linter eslint или задайте CHEF_LINTER=eslint.
chef берёт конфиг oxlint из проекта (oxlint.config.ts или .oxlintrc.json), а если его нет — пресеты Bitrix24 @bitrix24/oxlint-config-bitrix24 и @bitrix24/oxlint-config-bitrix24-mobile. Файлы из ignorePatterns конфига проекта не проверяются. Flow oxlint не читает, поэтому chef проверяет Flow-файлы через копию, в которой сохранены все позиции оригинала: у maybe-типов убирается ?, и файл читается как TypeScript, а если TypeScript его не разбирает, типы заменяются пробелами. Находки, вызванные самим преобразованием, не выводятся, а исправления --fix переносятся в оригинал. Файл, который не удалось разобрать, выводится с ошибкой разбора, а не пропускается молча. Расширения передаются в oxlint группами по мере того, как находятся, так что один процесс oxlint проверяет сотни файлов.
Для редакторов появился языковой сервер: chef lint --lsp или бинарник chef-oxlint --lsp. Flow-файлы он понимает так же, как chef lint, каждое расширение открывает как отдельную рабочую область, а путь к конфигу, заданный в редакторе, важнее пресетов. Как подключить его в PhpStorm, описано в документации.
Исправлены крайние случаи banner. Текст с незакрытым /* больше не закомментирует бандл, одиночный \r и разделители строк U+2028/U+2029 считаются переводами строк, в минифицированном бандле баннер ставится в самое начало, а плагины из plugins видят бандл уже с баннером. С --reporter json результат больше не обрезается на 64 КиБ при выводе в пайп (например, в jq) на macOS. Обновлён source-map-js с исправлением уязвимости.
v1.29.0 12.10.2026
В bundle.config появился параметр banner — комментарий, который добавляется в JS-бандл при каждой сборке, например копирайт или лицензия. Строка добавляется в начало бандла, а объект { top, bottom } позволяет добавить текст в начало, в конец или в оба места. Обычный текст оборачивается в юридический комментарий /*! ... */, который сохраняют минификаторы и сборщики при повторной обработке бандла; текст, уже оформленный как комментарий, вставляется как есть. Баннер добавляется в готовый бандл, поэтому его не удаляют ни очистка комментариев в TypeScript-сборке, ни минификация, а при concat он оборачивает весь склеенный файл. Source map сдвигается на добавленные строки, и позиции в отладчике остаются верными.
v1.28.1 02.10.2026
Закрыты уязвимости, которые находил npm audit в зависимостях разработки chef: mocha обновлён до 12-й версии, esbuild — до 0.28. На установку и работу chef у пользователей это не влияет: зависимости пакета не изменились, а собранный код chef совпадает с предыдущей версией.
v1.28.0 02.10.2026
В bundle.config появился параметр inline — список расширений, код которых встраивается в бандл вместо подключения внешней зависимостью. В бандл попадает только то, что реально импортировано и используется, остальное удаляется при сборке. Встроенные расширения не попадают в rel в config.php, а их собственные зависимости остаются внешними, если сами не перечислены в inline. Имена принимают глоб-паттерны ('ui.bbcode.*'), исходники могут быть на TypeScript, JavaScript или Flow независимо от языка расширения, CSS встроенного кода попадает в CSS-бандл, а chef test встраивает те же расширения в тестовый бандл. Если у расширения нет исходников, сборка завершается ошибкой CF1016. Если встроенное расширение всё равно загружается на страницу через rel другой зависимости и его код выполнится дважды, chef предупреждает кодом CF1017. В JSON-отчёте сборки появилось поле inlined. Ошибки, которые выбрасывают плагины сборки, теперь сохраняют свой код CFxxxx.
v1.27.0 30.09.2026
Проверка типов, транспиляция TypeScript и сборка .d.ts переведены на TypeScript 7.1 — новый компилятор, написанный на Go. chef typecheck работает примерно в 3 раза быстрее, сборка TypeScript-расширений — в 1,6–1,9 раза. TypeScript 7 строже выводит типы из JS-зависимостей, поэтому в части расширений могут появиться новые ошибки: параметры Flow-функций с аннотацией типа стали обязательными при вызове из TypeScript, JSDoc-тип Object больше не приравнивается к any, а некоторые @ts-expect-error становятся лишними. Если IDE работает на TypeScript 5 или 6, её ошибки могут отличаться от ошибок chef. Обращения к глобальному BX — BX.ready(), window.BX, globalThis.BX — по-прежнему не считаются ошибкой, даже если значение BX нигде не объявлено. chef aliases больше не записывает baseUrl в aliases.tsconfig.json: TypeScript 7 эту опцию не поддерживает, а старые файлы с baseUrl chef читает как раньше. Убраны ложные предупреждения CHEF_DTS о встраивании типов в .d.ts.
Chef запускается примерно в 5 раз быстрее: каждая команда загружает только свои зависимости. Проверка Baseline разбирает исходники нативным парсером Oxc, а к Babel обращается, только если Oxc не справился.
Данные о браузерах (caniuse-lite) теперь обновляются с каждым релизом chef. Вместо предупреждения browserslist с советом запустить update-browserslist-db chef показывает своё и предлагает обновить сам chef.
Зависимости обновлены до последних версий в рамках текущих мажоров, в том числе с исправлениями уязвимостей в rollup, postcss и svgo.
v1.26.0 28.09.2026
Chef теперь сам объясняет AI-агентам, как с ним работать. Команда chef help agent печатает справку в Markdown: что такое расширение и как устроены имена, что умеет chef и какие особенности его поведения важно учитывать, а также все команды с опциями, коды ошибок и оглавление документации. Правил работы справка не навязывает — их задаёт проект в своих инструкциях и в chef.config. Команды, опции и коды ошибок генерируются из самого chef, поэтому справка всегда соответствует установленной версии. Английская документация теперь входит в npm-пакет, и справка ссылается на её файлы, так что агенту не нужен доступ в интернет. Команда chef init agents добавляет в AGENTS.md проекта (и в существующий CLAUDE.md) короткий блок, который отправляет агента к chef help agent; после обновления chef запускать её повторно не нужно. chef help <команда> теперь показывает все опции команды и её подкоманд — раньше выводилась только строка описания.
v1.25.0 26.09.2026
В cssImages появилась настройка встраивания для отдельных изображений. Метка ?no-inline в url() отключает встраивание: файл копируется в dist, даже если он меньше maxSize. Метка ?inline, наоборот, встраивает файл при любом размере, в том числе при type: 'copy'. Метка удаляется из итогового URL, остальные параметры сохраняются. Для групп файлов добавлен параметр cssImages.exclude — глоб-маски от корня расширения. SVG со ссылкой на фрагмент (sprite.svg#icon) больше не встраивается: раньше фрагмент терялся и вместо нужной части подставлялся весь файл. Теперь такой файл копируется, а фрагмент в URL сохраняется.
v1.24.2 14.09.2026
Убрано предупреждение о расхождении версий @playwright/test при запуске e2e-тестов. Playwright всегда берётся из проекта, а версия из поставки chef используется только когда в проекте его нет, поэтому разные версии — штатная ситуация.
v1.24.1 07.09.2026
Исправлена сборка TypeScript-компонентов с заданным namespace: файл объявлений script.d.ts, который создаёт сама сборка, больше не попадает во вход проверки типов. Раньше он переопределял глобальный BX, и каждая успешная сборка ломала следующую — появлялись ошибки TS2339 (BX.PopupWindow, BX.Loader) в файлах, которые никто не менял. По той же причине ложные ошибки выдавал chef typecheck. Сторонние файлы объявлений по-прежнему учитываются.
v1.24.0 07.09.2026
Путь к странице запуска unit-тестов теперь настраивается через переменную MOCHA_WRAPPER в .env.test. Раньше адрес /dev/ui/cli/mocha-wrapper.php был зашит в код, и на установках, где эта страница доступна по другому адресу, unit-тесты запустить было нельзя. Принимается как путь от корня сайта, так и полный URL — в этом случае хост из BASE_URL не используется. Значение по умолчанию не изменилось. В сообщение об ошибке недоступной страницы добавлена подсказка про эту переменную.
v1.23.1 03.09.2026
chef test unit теперь берёт Playwright из проекта, а не из собственных зависимостей chef.
Раньше unit-тесты импортировали Playwright из node_modules самого chef. При глобальной установке npm разрешает диапазон версий без lock-файла, поэтому копия chef уходила вперёд относительно версии, закреплённой в проекте, и запуск падал с «Executable doesn't exist» на ревизии браузера, которую никто не устанавливал: npx playwright install в проекте ставит браузеры только под его собственную версию. При этом chef test e2e работал, так как запускает npx playwright из корня проекта.
Теперь оба раннера используют одну и ту же копию Playwright и один набор браузеров. Если в проекте Playwright не объявлен, chef, как и раньше, использует свою копию.
v1.23.0 02.09.2026
Репортер тестов больше не теряет flaky-тесты: сводка показывает число прошедших с ретрая, называет их по именам и предупреждает, что на упавшей попытке Playwright дописывает отсутствующий эталонный снимок — зелёный прогон с ретраями не доказывает эталон. Прогон, в котором часть отобранных тестов не отчиталась ни одним результатом, теперь падает с сообщением Mismatch вместо зелёного выхода с кодом 0 — в CI такой прогон станет красным. В --reporter json добавлены retries у результата браузера и flaky в счётчики.
v1.22.0 01.09.2026
Опции Playwright теперь можно передавать прямо в chef test: всё, что chef не считает своим, уходит раннеру — chef test e2e ui.buttons --update-snapshots работает без обходных путей. Ходовые опции перечислены в chef test e2e --help, но работает любая, включая добавленные в свежих версиях Playwright. Если версии @playwright/test в проекте и в поставке chef разошлись, перед e2e-прогоном появится предупреждение с подсказкой брать проектный бинарник при прямом вызове. В режиме --list теперь видна причина ошибки, а не пустое «errored».
v1.21.0 10.07.2026
Улучшения вывода chef test:
- Единый статус-бар по браузерам: стадии старта (starting/building/preparing) → счётчики N/M и текущий тест, в одном виде от запуска до финала
- Результаты сгруппированы по describe-блокам (как в --list): путь suite — заголовком, тесты под ним; мульти-браузерный тест — одна строка с тегом всех движков
- Повторно прошедшие тесты (retry) помечаются как flaky, отдельной цифрой в сводке
- Не запускать браузер, если у расширения нет тестовых файлов
- Ctrl+C во время прогона корректно восстанавливает терминал (курсор и режим ввода)
v1.20.0 09.07.2026
Улучшения chef test:
- --list — вывод списка тестов без запуска (unit/e2e/модуль), со сводкой по видам
- --console [browser|node|all] — печать вывода console.* из тестов
- Артефакты упавших e2e-тестов (screenshot, video, trace) в отчёте и --json, сгруппированы по браузеру
- JSON-репортер для тестов модуля; единая обработка e2e расширений и модулей
- --grep нормализуется в NFC (корректный матч кириллицы); подсказка, если паттерн из нескольких слов передан без кавычек
- Понятные ошибки вместо «no tests collected»: недоступная тестовая страница, битый конфиг, сбой e2e-прогона
v1.19.0 06.07.2026
Убрана поддержка Mercurial. Команды chef flow-to-ts и chef init hooks теперь работают только с Git: переименование файлов через git mv, установка git-хуков вместо .hg/hgrc.
v1.18.1 02.07.2026
Исправлены source maps собранных бандлов — позиции больше не съезжают (строки указывают на реальный исходный код). Типы, доступные через контейнер main.core (например Cache.MemoryCache), теперь корректно резолвятся в namespace-ссылку в .d.ts вместо относительного импорта
v1.18.0 01.07.2026
Миграция Flow→TypeScript теперь конвертирует module.exports в export default в bundle.config. Все создаваемые chef файлы (шаблоны, aliases.tsconfig.json, результат миграции) заканчиваются пустой строкой
v1.17.1 01.07.2026
Документация по multi-user e2e-тестам: как задавать нескольких пользователей в .env.test и выбирать их в тестах через test.use({ user }) и loginAs
v1.17.0 25.06.2026
Добавлена команда chef test module для сценарных E2E-тестов уровня модуля — для проверок, в которых участвует сразу несколько расширений. Тесты лежат в tests/chef/e2e/ модуля; на установленном Bitrix ищутся в local/modules/. Расширения и модули без тестов теперь помечаются как skipped, а не passed.
v1.16.0 10.06.2026
Последовательный запуск браузеров в e2e-тестах и переработанный вывод результатов.
- Браузерные движки в e2e-прогонах запускаются последовательно, по одному за раз — прогоны стали стабильными на машинах с ограниченной памятью
- Статус-бар показывает состояние каждого браузера: завершён, выполняется (со спиннером и счётчиком) или в очереди, плюс общее время прогона
- Каждый прогон теста в каждом браузере выводится отдельной строкой с накапливающимся тегом браузеров
- В итоговой сводке добавлена разбивка результатов по браузерам
- Тесты, прошедшие со второй попытки, больше не считаются упавшими
- Исправлены дублирующиеся строки и утечка управляющих символов при выводе вне терминала (IDE, CI, pipe)
- Длительности во всех отчётах выводятся в едином формате: миллисекунды, секунды, минуты, часы
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)