Fix a minification regression with CSS media queries (#4315)
The previous release introduced support for parsing media queries which unintentionally introduced a regression with the removal of duplicate media rules during minification. Specifically the grammar for@media <media-type> and <media-condition-without-or> { ... } was missing an equality check for the<media-condition-without-or> part, so rules with different suffix clauses in this position would incorrectly compare equal and be deduplicated. This release fixes the regression.
Update the list of known JavaScript globals (#4310)
This release updates esbuild's internal list of known JavaScript globals. These are globals that are known to not have side-effects when the property is accessed. For example, accessing the globalArray property is considered to be side-effect free but accessing the globalscrollY property can trigger a layout, which is a side-effect. This is used by esbuild's tree-shaking to safely remove unused code that is known to be side-effect free. This update adds the following global properties:
FromES2017:
FromES2020:
BigInt64ArrayBigUint64Array
FromES2021:
FinalizationRegistryWeakRef
FromES2025:
Note that this does not indicate that constructing any of these objects is side-effect free, just that accessing the identifier is side-effect free. For example, this now allows esbuild to tree-shake classes that extend fromIterator:
// This can now be tree-shaken by esbuild:classExampleIteratorextendsIterator{}Add support for the new@view-transition CSS rule (#4313)
With this release, esbuild now has improved support for pretty-printing and minifying the new@view-transition rule (which esbuild was previously unaware of):
/* Original code */@​view-transition {navigation: auto;types: check;}/* Old output */@​view-transition {navigation: auto;types: check; }/* New output */@​view-transition {navigation: auto;types: check;}The new view transition feature provides a mechanism for creating animated transitions between documents in a multi-page app. You can read more about view transition ruleshere.
This change was contributed by@yisibl.
Trim CSS rules that will never match
The CSS minifier will now remove rules whose selectors contain:is() and:where() as those selectors will never match. These selectors can currently be automatically generated by esbuild when you give esbuild nonsensical input such as the following:
/* Original code */div:before {color: green;&.foo {color: red; }}/* Old output (with --supported:nesting=false --minify) */div:before{color:green}:is().foo{color:red}/* New output (with --supported:nesting=false --minify) */div:before{color:green}This input is nonsensical because CSS nesting is (unfortunately) not supported inside of pseudo-elements such as:before. Currently esbuild generates a rule containing:is() in this case when you tell esbuild to transform nested CSS into non-nested CSS. I think it's reasonable to do that as it sort of helps explain what's going on (or at least indicates that something is wrong in the output). It shouldn't be present in minified code, however, so this release now strips it out.
This PR contains the following updates:
^0.25.9->^0.26.0Release Notes
evanw/esbuild (esbuild)
v0.26.0Compare Source
Enable trusted publishing (#4281)
GitHub and npm are recommending that maintainers for packages such as esbuild switch totrusted publishing. With this release, a VM on GitHub will now build and publish all of esbuild's packages to npm instead of me. In theory.
Unfortunately there isn't really a way to test that this works other than to do it live. So this release is that live test. Hopefully this release is uneventful and is exactly the same as the previous one (well, except for the green provenance attestation checkmark on npm that happens with trusted publishing).
v0.25.12Compare Source
Fix a minification regression with CSS media queries (#4315)
The previous release introduced support for parsing media queries which unintentionally introduced a regression with the removal of duplicate media rules during minification. Specifically the grammar for
@media <media-type> and <media-condition-without-or> { ... }was missing an equality check for the<media-condition-without-or>part, so rules with different suffix clauses in this position would incorrectly compare equal and be deduplicated. This release fixes the regression.Update the list of known JavaScript globals (#4310)
This release updates esbuild's internal list of known JavaScript globals. These are globals that are known to not have side-effects when the property is accessed. For example, accessing the global
Arrayproperty is considered to be side-effect free but accessing the globalscrollYproperty can trigger a layout, which is a side-effect. This is used by esbuild's tree-shaking to safely remove unused code that is known to be side-effect free. This update adds the following global properties:FromES2017:
AtomicsSharedArrayBufferFromES2020:
BigInt64ArrayBigUint64ArrayFromES2021:
FinalizationRegistryWeakRefFromES2025:
Float16ArrayIteratorNote that this does not indicate that constructing any of these objects is side-effect free, just that accessing the identifier is side-effect free. For example, this now allows esbuild to tree-shake classes that extend from
Iterator:Add support for the new
@view-transitionCSS rule (#4313)With this release, esbuild now has improved support for pretty-printing and minifying the new
@view-transitionrule (which esbuild was previously unaware of):The new view transition feature provides a mechanism for creating animated transitions between documents in a multi-page app. You can read more about view transition ruleshere.
This change was contributed by@yisibl.
Trim CSS rules that will never match
The CSS minifier will now remove rules whose selectors contain
:is()and:where()as those selectors will never match. These selectors can currently be automatically generated by esbuild when you give esbuild nonsensical input such as the following:This input is nonsensical because CSS nesting is (unfortunately) not supported inside of pseudo-elements such as
:before. Currently esbuild generates a rule containing:is()in this case when you tell esbuild to transform nested CSS into non-nested CSS. I think it's reasonable to do that as it sort of helps explain what's going on (or at least indicates that something is wrong in the output). It shouldn't be present in minified code, however, so this release now strips it out.Configuration
📅Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦Automerge: Enabled.
♻Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated byMend Renovate. View therepository job log.