Skip to content

История изменений

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 определяется по TC39 spec_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)

Распространяется под лицензией MIT.