Changelog
v1.15.0 5/20/2026
- fix(build): preserve config.php when the build fails. Previously, a type-check or Rollup error would rewrite rel with an empty array, and PhpConfigManager's fallback would turn it into ['main.polyfill.core'] with skip_core: true. The bundle on disk stayed intact while the manifest was silently corrupted.
- feat(diag): find-usages was reworked on top of AST and split into two commands — find-usages (consumer lookup) and find-loaders (loader lookup).
v1.14.0 5/18/2026
The baseline-check module — which detects JavaScript and CSS features unsupported by target browsers during chef build and chef diag baseline — has been completely rewritten.
Before: the API matcher relied on hardcoded lists (staticMethods, globalApis, instanceMethodOwners), so every new JavaScript API slipped past the check until someone added it to the list manually. As a result, RegExp.escape, Promise.try, Object.groupBy, Iterator.from and other modern APIs went undetected even with outdated .browserslistrc targets.
After: the check is built automatically from two sources:
@mdn/browser-compat-data— the same data MDN uses to render its compatibility tables. Every static method, constructor, global function, and instance method is indexed up front. Static vs instance is resolved through the TC39spec_url(the formal source of truth) with a runtime introspection fallback.AST via
@babel/parser— replaces the line-based regex scan. Handles JS / TS / TSX / JSX / Flow, ignores API names inside string literals and comments, and respects local shadowing (const Promise = bluebird,import { Promise } from 'bluebird', etc.).Syntax features (
?.,??,??=,||=,&&=,**,...) are now checked againstbcd.javascript.operatorsvia a declarative AST-node-to-BCD-key bridge.
Additionally:
The checker was extracted to a standalone
src/modules/baseline/module shared by the rollup plugin and thechef diag baselinecommand. The command now forces baseline checks viaextension.generate()even when the bundle config does not opt in.For instance methods (e.g.
.some()exists on Array since ES5 and on Iterator since Chrome 122+), a warning is reported only when the method is unsupported on every owner — otherwise common iteration methods like.map()and.filter()would falsely trigger on modern bundles.
Test coverage: 212 new tests added under test/baseline/ (bcd-index, ast-walker, syntax-map, ignore, api-coverage, css-coverage, e2e). The existing 58 tests were migrated to the new module API and 13 regression cases were added. End-to-end tests spawn chef diag baseline and chef build against a fresh fixture repo to lock down the actual user-facing behaviour.
v1.13.1 5/14/2026
- build: re-exports from external extensions now compile to plain assignments (exports.Foo = dep.Foo) instead of live-binding getters via Object.defineProperty — fixes the runtime "Maximum call stack size exceeded" crash when two extensions share a namespace
- diag: new
chef diag re-exportscommand — finds extensions that re-export symbols from other extensions, flags critical cases (shared namespace, self-reference) and wildcard re-exports - build: warnings during build for same-namespace re-exports (CF1015) and inter-extension circular dependencies (CF1006) — both with a code frame on the actual
importline and concrete fix hints, including Runtime.loadExtension() for deferred loading - build: in-bundle file circular imports are now filtered — only direct cycles (A → B → A) are reported, longer chains are left to
chef diag circular-imports; richdetailsexplain the TDZ failure mode and how to fix - build: TypeScript directory imports auto-index —
import './lib'andimport './lib/'correctly resolve to./lib/index.{ts,tsx,mts,cts}(Vite-like behaviour)
v1.13.0 5/14/2026
- build: re-exports from external extensions now compile to plain assignments (exports.Foo = dep.Foo) instead of live-binding getters via Object.defineProperty — fixes the runtime "Maximum call stack size exceeded" crash when two extensions share a namespace
- diag: new
chef diag re-exportscommand — finds extensions that re-export symbols from other extensions, flags critical cases (shared namespace, self-reference) and wildcard re-exports - build: warnings during build for same-namespace re-exports (CF1015) and inter-extension circular dependencies (CF1006) — both with a code frame on the actual
importline and concrete fix hints, including Runtime.loadExtension() for deferred loading - build: in-bundle file circular imports are now filtered — only direct cycles (A → B → A) are reported, longer chains are left to
chef diag circular-imports; richdetailsexplain the TDZ failure mode and how to fix - build: TypeScript directory imports auto-index —
import './lib'andimport './lib/'correctly resolve to./lib/index.{ts,tsx,mts,cts}(Vite-like behaviour)
v1.12.5 5/13/2026
- diag: richer CHEF_DTS warning with a per-kind fix recipe (vue-components, computed-arrow, export-const, generic) — heading, code frame, at-location, and a ready-to-paste fix snippet
- diag: drop phantom CHEF_DTS warnings on structurally empty sibling exports like Object.freeze({} as const) (e.g. Special from ui.icon-set.api.core)
- docs: new "Troubleshooting" page with a section on DTS inlining (RU + EN)
- ci: release tests now run on a single Node version (22) per OS
v1.12.4 5/12/2026
fix(windows): chef aliases now works correctly on Windows — aliases.tsconfig.json contains POSIX-only path separators and TypeScript resolves aliases again.
Cross-platform fixes for chef build, chef test, chef lint, chef diag, chef init and related modules: a single path-normalisation approach via normalizePath/isAbsoluteAnyPlatform, shell flag for npx/hg spawns on Windows, pathToFileURL for dynamic imports and clickable links, os.tmpdir() instead of hard-coded /tmp, stack-trace regex accepts Windows paths, chef.config.ts loads through tsx/cjs/api.
ci: a matrix of tests now runs on ubuntu/macos/windows × Node 22/24 before npm publish, so a failure on any platform blocks the release.
v1.12.0 5/8/2026
Declaration emit-time diagnostics (e.g. TS4023) now surface as build warnings instead of being silently dropped. A new structural detector warns when a type literal in the .d.ts matches the shape of a value imported from a sibling extension (including transitive re-exports), and suggests adding a : typeof X annotation to keep the namespace reference. Fixed duplicate output for destructured exports like export const { a, b, c } = X — previously the statement was rendered once per destructured name. Stale .d.ts is now removed when a fresh bundle cannot be produced, so consumers do not work against a phantom API.
v1.11.0 5/7/2026
New --reporter <name> flag for build/lint/test/typecheck/diag commands. Available reporters: default (human-readable, default), json (structured JSON to stdout), and teamcity (chef test only).
JSON shape:
- Top-level
chefVersionandcwd - Unresolved extension names go into a separate
notFoundfield - Test failures carry
file/line/column/frameanddiff(no full stack trace) - Test JSON builds the suite path correctly and reports the actual browser name (
chromium/firefox/webkit) - Lint and typecheck no longer duplicate messages between
detailsanderrors bundles[].fileNamerenamed tobundles[].file
v1.10.0 5/4/2026
- Improved
chef testbulk run output: extensions without tests are skipped silently, errors and failed tests are aggregated into a single end-of-run summary - Failure reason is now shown inline next to each task:
(build failed),(N failed),(crashed before any tests ran),(no tests collected),(no test files) - Added
--consoleflag — browser console output is now hidden by default to keep bulk reports clean - Added a
Testsrow to the final summary with totals across all extensions
v1.9.1 4/30/2026
Global namespaces for npm-remapped dependencies: when standalone.exposeNamespaces is enabled, npm package exports are now registered under the source extension namespace (e.g. ui.lexical.core → globalThis.BX.UI.Lexical.Core).
v1.9.0 4/29/2026
- Rewrote the .d.ts emitter on top of the TypeScript Compiler API: AST-positional edits, proper npm type resolution via sibling extensions, ImportTypeNode support, emit for entries that import outside packageRoot
- Transitively walk sibling npm imports when matching ownership — types from sub-packages (e.g. @vue/runtime-core behind vue) now reference the sibling's ambient namespace instead of being inlined
- bundle.config: new
typesfield pointing at a .d.ts file —chef aliasesand webpack resolvers use it instead ofinputfor design-time resolution
v1.8.3 4/17/2026
• standalone: npm packages in remap now resolve through Rollup's node-resolve (ESM instead of CJS) • standalone: simplified dependency namespace exposure — less runtime code, cleaner bundle • test runner: test bundle no longer inlines the dependency graph; building tests for large packages no longer breaks
v1.8.2 4/16/2026
Fixed runtime errors in standalone builds with exposeNamespaces: true: TDZ errors with circular dependencies, crashes on read-only properties of frozen objects, and conflicts when a dependency namespace matches the current extension namespace.
v1.8.1 4/16/2026
- Unused import warnings now show exact names and files with code frames
v1.8.0 4/15/2026
- Added production build mode and package.json export conditions support
- Standalone builds now include CSS and assets from dependencies
- Fixed d.ts generation: correct handling of re-exports through barrel files and tsconfig path resolution
- Fixed absolute paths in sourcemaps when concatenating files
- Fixed safeNamespaces for Rollup 4 IIFE format
- Fixed CSS-only dependency resolution in config.php
- Added --force flag to skip project config validation
v1.7.0 4/15/2026
- Standalone builds: inline all dependencies into a single bundle with
remapsupport for dependency overrides - CSS-only extensions: use CSS file as entry point without JS wrapper
cssImages.absolutePathsoption for absolute image URLs in CSSexposeNamespacesoption for standalone builds- Fixed protected extension inlining in standalone mode
- E2E tests: proper Playwright config lookup and graceful handling of empty test suites
v1.6.3 4/13/2026
- Fixed removal of side-effect imports during build (e.g. handler registration files)
- Fixed
adjustConfigPhp: falsebeing ignored in bundle.config - Tree-shaking settings aligned with Rollup defaults
v1.6.2 4/13/2026
Added support for tests/ directory as an alternative to test/ for unit and e2e tests
v1.6.1 4/11/2026
- Fixed selective class transpilation: static properties of other classes are no longer affected
v1.6.0 4/11/2026
- New
chef baselinecommand — check web feature availability for current browser targets - New
chef diag baselinesubcommand — overview of unsupported features across all extensions - Build now warns about usage of APIs and CSS properties not supported by target browsers
chef typechecknow resolves external dependencies via tsconfig paths and includes extension.d.tsfilestransformClassesaccepts an array of class names for selective transpilation
v1.5.1 4/1/2026
- Fixed update check crash on Windows (EINVAL when spawning npm.cmd)
- Diagnostic commands (chef diag) no longer write files to disk when resolving dependencies
v1.5.0 4/1/2026
- New diagnostic commands:
deps-tree(dependency tree with--depth,--flat,--why) andbundle-size(bundle size with--with-deps) - Asset sizes (images, fonts, SVG) are now included in
top-bundle-sizeandtop-total-size— only files actually referenced from bundles are counted - Column sorting for
top-bundle-size(--sort js|css|assets|total) andtop-total-size(--sort own|total|deps|tree) - Fixed parsing of
config.phpfiles with early conditional returns - Fixed
.d.tsgeneration: JSDoc-annotated interfaces are now placed outside the namespace - Fixed
preset-envapplication to TypeScript files based ontargets
v1.4.1 3/30/2026
Fixed startup crash on global install. Fixed doubled indentation in TypeScript extension bundles
v1.4.0 3/29/2026
- Reworked
.d.tsfile generation: entry-point traversal, cross-file type resolution, re-export aliases, abstract classes, function overloads, unique symbols, generics - Fixed transpilation of TypeScript files imported from outside the package root (e.g.
../../src/) - Added declaration emitter test suite (99 cases)
v1.3.1 3/27/2026
Added update notification for new chef versions. When running CLI in a terminal, npm registry is checked for updates with results cached for 24 hours. If a newer version is available, an informative message with update instructions is displayed after the command finishes.
v1.3.0 3/27/2026
- Tab indentation in bundle output instead of spaces
- Summary output when building or testing multiple extensions
- deny.exportDefault rule in chef.config — block export default in entry points
- Fixed false circular dependency reports and faster filtered scans
- Suppressed Babel deoptimised styling warning for large files
- Fixed TypeScript dependency transpilation in standalone test bundles
v1.2.1 3/26/2026
- Fixed CSS image path generation when copying to dist — stable structure with images/ prefix and correct url() rewriting
- Fixed config.php creation when building components and templates — file is only updated for extensions
- Fixed console error capture in chef test — runtime errors and uncaught exceptions are now displayed, output is deduplicated across browsers
- Fixed bundle duplication when concat file has the same basename as output
- Fixed blank lines left by stripped comments in TypeScript builds
- Excluded bundle output files from chef lint and chef typecheck
- Added support for rollup-compatible treeshake option format in bundle.config
- Added --exclude option for lint and typecheck commands
v1.2.0 3/25/2026
New chef typecheck command for checking TypeScript types in extensions. Supports extension names, glob patterns, --path and --file options. Not-found errors unified under CF2005.
v1.1.2 3/25/2026
Fixed type checking during build: compilerOptions from tsconfig.json (including lib) are now passed to the type checker. Updated tsconfig.json template with DOM.Iterable and WebWorker libraries.
v1.1.1 3/25/2026
Fixed namespace for dependencies without bundle.config — uses BX in source environment, BX for bitrix/ extensions and window for others in project environment. Comments are no longer stripped from JS extensions, only from TypeScript.
v1.1.0 3/24/2026
New safeNamespaces option in bundle.config — safe dependency namespace access via optional chaining in the IIFE wrapper. Fixed copying large CSS images to dist and CSS ordering in bundles.
v1.0.0 3/24/2026
chef lintcommand — extension linting via ESLint 9 with TypeScript support, caching, and auto-fixchef diagcommand — project diagnostics: top dependencies, bundle sizes, circular dependencies, unused extensions, usage searchchef aliasesandchef init hookscommands — TypeScript path alias generation and VCS hooks for auto-updatingchef --versionflag to check installed version- Bundle minification via Terser instead of oxc-minify
- Extension config validation before build with detailed error messages
- Warning when
.env.testis missing before running tests - Test watcher debounce to prevent concurrent reruns
--include/--excludefilters for diagnostic commands
v0.0.0-beta.15 3/13/2026
- Generate
.d.tsnamespace declarations for TypeScript extensions - Strip comments from bundle output
**glob pattern for deep extension matching- Bundle CSS and dependencies into test bundle
- Structured diagnostics with CF error codes
- Replace internal dependencies: terser → oxc-minify, php-parser → built-in config.php parser, rollup-plugin-postcss → built-in CSS plugin, p-queue → built-in queue
- Remove unused dependencies (@vue/compiler-sfc, @rollup/plugin-typescript)
- Remove ora dependency from test and init reporters
v0.0.0-beta.14 3/11/2026
Added TypeScript type-checking during build. Errors are displayed with a code snippet, underline, and a clickable file link. If errors are found, the build stops before Rollup starts.
v0.0.0-beta.13 3/11/2026
- Fixed chef init when installed from npm
- Fixed message formatting in chef init
- Bilingual release notes (RU/EN) with per-locale changelog in docs
v0.0.0-beta.12 3/11/2026
- PhpStorm integration — run/debug tests, TeamCity reporter, CDP debugging
- New test reporter with live per-browser status updates
- Test bundle caching across browsers and Rollup module caching across extensions
- Project config
chef.config.ts— deny rules, defaults, enforce policies - Auto-replace environment variables in builds
- Improved Flow → TypeScript migration with new type transformations
- Production builds (
--production), standalone bundles, custom Rollup plugins - Lazy-load commands and plugins for faster cold start
- Bilingual documentation deployed to GitHub Pages
- npm publishing via Trusted Publisher (OIDC provenance)