Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
10.4.19
->10.4.20
0.23.0
->0.24.2
4.2.0
->4.3.0
1.77.8
->1.83.1
Release Notes
postcss/autoprefixer (autoprefixer)
v10.4.20
Compare Source
fit-content
prefix for Firefox.evanw/esbuild (esbuild)
v0.24.2
Compare Source
Fix regression with
--define
andimport.meta
(#4010, #4012, #4013)The previous change in version 0.24.1 to use a more expression-like parser for
define
values to allow quoted property names introduced a regression that removed the ability to use--define:import.meta=...
. Even thoughimport
is normally a keyword that can't be used as an identifier, ES modules special-case theimport.meta
expression to behave like an identifier anyway. This change fixes the regression.This fix was contributed by @sapphi-red.
v0.24.1
Compare Source
Allow
es2024
as a target intsconfig.json
(#4004)TypeScript recently added
es2024
as a compilation target, so esbuild now supports this in thetarget
field oftsconfig.json
files, such as in the following configuration file:As a reminder, the only thing that esbuild uses this field for is determining whether or not to use legacy TypeScript behavior for class fields. You can read more in the documentation.
This fix was contributed by @billyjanitsch.
Allow automatic semicolon insertion after
get
/set
This change fixes a grammar bug in the parser that incorrectly treated the following code as a syntax error:
The above code will be considered valid starting with this release. This change to esbuild follows a similar change to TypeScript which will allow this syntax starting with TypeScript 5.7.
Allow quoted property names in
--define
and--pure
(#4008)The
define
andpure
API options now accept identifier expressions containing quoted property names. Previously all identifiers in the identifier expression had to be bare identifiers. This change now makes--define
and--pure
consistent with--global-name
, which already supported quoted property names. For example, the following is now possible:Note that if you're passing values like this on the command line using esbuild's
--define
flag, then you'll need to know how to escape quote characters for your shell. You may find esbuild's JavaScript API more ergonomic and portable than writing shell code.Minify empty
try
/catch
/finally
blocks (#4003)With this release, esbuild will now attempt to minify empty
try
blocks:This can sometimes expose additional minification opportunities.
Include
entryPoint
metadata for thecopy
loader (#3985)Almost all entry points already include a
entryPoint
field in theoutputs
map in esbuild's build metadata. However, this wasn't the case for thecopy
loader as that loader is a special-case that doesn't behave like other loaders. This release adds theentryPoint
field in this case.Source mappings may now contain
null
entries (#3310, #3878)With this change, sources that result in an empty source map may now emit a
null
source mapping (i.e. one with a generated position but without a source index or original position). This change improves source map accuracy by fixing a problem where minified code from a source without any source mappings could potentially still be associated with a mapping from another source file earlier in the generated output on the same minified line. It manifests as nonsensical files in source mapped stack traces. Now thenull
mapping "resets" the source map so that any lookups into the minified code without any mappings resolves tonull
(which appears as the output file in stack traces) instead of the incorrect source file.This change shouldn't affect anything in most situations. I'm only mentioning it in the release notes in case it introduces a bug with source mapping. It's part of a work-in-progress future feature that will let you omit certain unimportant files from the generated source map to reduce source map size.
Avoid using the parent directory name for determinism (#3998)
To make generated code more readable, esbuild includes the name of the source file when generating certain variable names within the file. Specifically bundling a CommonJS file generates a variable to store the lazily-evaluated module initializer. However, if a file is named
index.js
(or with a different extension), esbuild will use the name of the parent directory instead for a better name (since many packages have files all namedindex.js
but have unique directory names).This is problematic when the bundle entry point is named
index.js
and the parent directory name is non-deterministic (e.g. a temporary directory created by a build script). To avoid non-determinism in esbuild's output, esbuild will now useindex
instead of the parent directory in this case. Specifically this will happen if the parent directory is equal to esbuild'soutbase
API option, which defaults to the lowest common ancestor of all user-specified entry point paths.Experimental support for esbuild on NetBSD (#3974)
With this release, esbuild now has a published binary executable for NetBSD in the
@esbuild/netbsd-arm64
npm package, and esbuild's installer has been modified to attempt to use it when on NetBSD. Hopefully this makes installing esbuild via npm work on NetBSD. This change was contributed by @bsiegert.v0.24.0
Compare Source
This release deliberately contains backwards-incompatible changes. To avoid automatically picking up releases like this, you should either be pinning the exact version of
esbuild
in yourpackage.json
file (recommended) or be using a version range syntax that only accepts patch upgrades such as^0.23.0
or~0.23.0
. See npm's documentation about semver for more information.Drop support for older platforms (#3902)
This release drops support for the following operating system:
This is because the Go programming language dropped support for this operating system version in Go 1.23, and this release updates esbuild from Go 1.22 to Go 1.23. Go 1.23 now requires macOS 11 Big Sur or later.
Note that this only affects the binary esbuild executables that are published to the esbuild npm package. It's still possible to compile esbuild's source code for these older operating systems. If you need to, you can compile esbuild for yourself using an older version of the Go compiler (before Go version 1.23). That might look something like this:
Fix class field decorators in TypeScript if
useDefineForClassFields
isfalse
(#3913)Setting the
useDefineForClassFields
flag tofalse
intsconfig.json
means class fields use the legacy TypeScript behavior instead of the standard JavaScript behavior. Specifically they use assign semantics instead of define semantics (e.g. setters are triggered) and fields without an initializer are not initialized at all. However, when this legacy behavior is combined with standard JavaScript decorators, TypeScript switches to always initializing all fields, even those without initializers. Previously esbuild incorrectly continued to omit field initializers for this edge case. These field initializers in this case should now be emitted starting with this release.Avoid incorrect cycle warning with
tsconfig.json
multiple inheritance (#3898)TypeScript 5.0 introduced multiple inheritance for
tsconfig.json
files whereextends
can be an array of file paths. Previously esbuild would incorrectly treat files encountered more than once when processing separate subtrees of the multiple inheritance hierarchy as an inheritance cycle. With this release,tsconfig.json
files containing this edge case should work correctly without generating a warning.Handle Yarn Plug'n'Play stack overflow with
tsconfig.json
(#3915)Previously a
tsconfig.json
file thatextends
another file in a package with anexports
map could cause a stack overflow when Yarn's Plug'n'Play resolution was active. This edge case should work now starting with this release.Work around more issues with Deno 1.31+ (#3917)
This version of Deno broke the
stdin
andstdout
properties on command objects for inherited streams, which matters when you run esbuild's Deno module as the entry point (i.e. whenimport.meta.main
istrue
). Previously esbuild would crash in Deno 1.31+ if you ran esbuild like that. This should be fixed starting with this release.This fix was contributed by @Joshix-1.
v0.23.1
Compare Source
Allow using the
node:
import prefix withes*
targets (#3821)The
node:
prefix on imports is an alternate way to import built-in node modules. For example,import fs from "fs"
can also be writtenimport fs from "node:fs"
. This only works with certain newer versions of node, so esbuild removes it when you target older versions of node such as with--target=node14
so that your code still works. With the way esbuild's platform-specific feature compatibility table works, this was added by saying that only newer versions of node support this feature. However, that means that a target such as--target=node18,es2022
removes thenode:
prefix because none of thees*
targets are known to support this feature. This release adds the support for thenode:
flag to esbuild's internal compatibility table fores*
to allow you to use compound targets like this:Fix a panic when using the CLI with invalid build flags if
--analyze
is present (#3834)Previously esbuild's CLI could crash if it was invoked with flags that aren't valid for a "build" API call and the
--analyze
flag is present. This was caused by esbuild's internals attempting to add a Go plugin (which is how--analyze
is implemented) to a null build object. The panic has been fixed in this release.Fix incorrect location of certain error messages (#3845)
This release fixes a regression that caused certain errors relating to variable declarations to be reported at an incorrect location. The regression was introduced in version 0.18.7 of esbuild.
Print comments before case clauses in switch statements (#3838)
With this release, esbuild will attempt to print comments that come before case clauses in switch statements. This is similar to what esbuild already does for comments inside of certain types of expressions. Note that these types of comments are not printed if minification is enabled (specifically whitespace minification).
Fix a memory leak with
pluginData
(#3825)With this release, the build context's internal
pluginData
cache will now be cleared when starting a new build. This should fix a leak of memory from plugins that returnpluginData
objects fromonResolve
and/oronLoad
callbacks.MohammadYounes/rtlcss (rtlcss)
v4.3.0
Compare Source
stdin
is invalid. Thanks @lade-odoosass/dart-sass (sass)
v1.83.1
Compare Source
Fix a bug where
--quiet-deps
would get deactivated for@content
blocks,even when those blocks were entirely contained within dependencies.
Include deprecation IDs in deprecation warnings to make it easier to determine
what to pass to
--silence-deprecation
or--fatal-deprecation
.v1.83.0
Compare Source
v1.82.0
Compare Source
Command-Line Interface
Improve
--watch
mode reliability when making multiple changes at once, suchas checking out a different Git branch.
Parse the
calc-size()
function as a calculation now that it's supported insome browsers.
Dart API
SassCalculation.calcSize()
function.v1.81.1
Compare Source
v1.81.0
Compare Source
Fix a few cases where deprecation warnings weren't being emitted for global
built-in functions whose names overlap with CSS calculations.
Add support for the CSS
round()
calculation with a single argument, as longas that argument might be a unitless number.
v1.80.7
Compare Source
Embedded Host
0
asundefined
for thegreen
andblue
channels in theLegacyColor
constructor.v1.80.6
Compare Source
Command-Line Interface
@parcel/watcher
an optional dependency so this can still be installedon operating systems where it's unavailable.
v1.80.5
Compare Source
Embedded Host
@import
deprecations when using an importer with thelegacy API.
v1.80.4
Compare Source
v1.80.3
Compare Source
Fix a bug where
@import url("...")
would crash in plain CSS files.Improve consistency of how warnings are emitted by different parts of the
compiler. This should result in minimal user-visible changes, but different
types of warnings should now respond more reliably to flags like
--quiet
,--verbose
, and--silence-deprecation
.v1.80.2
Compare Source
plain-CSS
invert()
function.v1.80.1
Compare Source
v1.80.0
Compare Source
@import
is now officially deprecated, as are global built-in functions thatare available within built-in modules. See the Sass blog post for more
details on the deprecation process.
Embedded Host
emitted when using a custom importer with the legacy API.
v1.79.6
Compare Source
Fix a bug where Sass would add an extra
*/
after loud comments withwhitespace after an explicit
*/
in the indented syntax.Potentially breaking bug fix: Adding text after an explicit
*/
in theindented syntax is now an error, rather than silently generating invalid CSS.
Embedded Host
SassBoolean
type.v1.79.5
Compare Source
Changes to how
selector.unify()
and@extend
combine selectors:The relative order of pseudo-classes (like
:hover
) and pseudo-elements(like
::before
) within each original selector is now preserved whenthey're combined.
Pseudo selectors are now consistently placed at the end of the combined
selector, regardless of which selector they came from. Previously, this
reordering only applied to pseudo-selectors in the second selector.
Tweak the color transformation matrices for OKLab and OKLCH to match the
newer, more accurate values in the CSS spec.
Fix a slight inaccuracy case when converting to
srgb-linear
anddisplay-p3
.Potentially breaking bug fix:
math.unit()
now wraps multiple denominatorunits in parentheses. For example,
px/(em*em)
instead ofpx/em*em
.Command-Line Interface
@parcel/watcher
to watch the filesystem when running from JavaScript andnot using
--poll
. This should mitigate more frequent failures users havebeen seeing since version 4.0.0 of Chokidar, our previous watching tool, was
released.
JS API
SassColor.interpolate()
to allow an undefinedoptions
parameter, asthe types indicate.
Embedded Sass
v1.79.4
Compare Source
JS API
green
orblue
tocolor.change()
for legacycolors would fail.
v1.79.3
Compare Source
$channel
parameter in the suggested replacement forcolor.red()
,color.green()
,color.blue()
,color.hue()
,color.saturation()
,color.lightness()
,color.whiteness()
, andcolor.blackness()
to use a quoted string.v1.79.2
Compare Source
Add a
$space
parameter to the suggested replacement forcolor.red()
,color.green()
,color.blue()
,color.hue()
,color.saturation()
,color.lightness()
,color.whiteness()
, andcolor.blackness()
.Update deprecation warnings for the legacy JS API to include a link to
relevant documentation.
v1.79.1
Compare Source
v1.79.0
Compare Source
Breaking change: Passing a number with unit
%
to the$alpha
parameterof
color.change()
,color.adjust()
,change-color()
, andadjust-color()
is now interpreted as a percentage, instead of ignoring the unit. For example,
color.change(red, $alpha: 50%)
now returnsrgb(255 0 0 / 0.5)
.Potentially breaking compatibility fix: Sass no longer rounds RGB channels
to the nearest integer. This means that, for example,
rgb(0 0 1) != rgb(0 0 0.6)
. This matches the latest version of the CSS spec and browser behavior.Potentially breaking compatibility fix: Passing large positive or negative
values to
color.adjust()
can now cause a color's channels to go outside thatcolor's gamut. In most cases this will currently be clipped by the browser and
end up showing the same color as before, but once browsers implement gamut
mapping it may produce a different result.
Add support for CSS Color Level 4 color spaces. Each color value now tracks
its color space along with the values of each channel in that color space.
There are two general principles to keep in mind when dealing with new color
spaces:
With the exception of legacy color spaces (
rgb
,hsl
, andhwb
), colorswill always be emitted in the color space they were defined in unless
they're explicitly converted.
The
color.to-space()
function is the only way to convert a color toanother color space. Some built-in functions may do operations in a
different color space, but they'll always convert back to the original space
afterwards.
rgb
colors can now have non-integer channels and channels outside the normalgamut of 0-255. These colors are always emitted using the
rgb()
syntax sothat modern browsers that are being displayed on wide-gamut devices can
display the most accurate color possible.
Add support for all the new color syntax defined in Color Level 4, including:
oklab()
,oklch()
,lab()
, andlch()
functions;hwb()
function that matches the space-separated CSS syntax;color()
function that supports thesrgb
,srgb-linear
,display-p3
,a98-rgb
,prophoto-rgb
,rec2020
,xyz
,xyz-d50
, andxyz-d65
color spaces.Add new functions for working with color spaces:
color.to-space($color, $space)
converts$color
to the given$space
. Inmost cases this conversion is lossless—the color may end up out-of-gamut for
the destination color space, but browsers will generally display it as best
they can regardless. However, the
hsl
andhwb
spaces can't representout-of-gamut colors and so will be clamped.
color.channel($color, $channel, $space: null)
returns the value of thegiven
$channel
in$color
, after converting it to$space
if necessary.It should be used instead of the old channel-specific functions such as
color.red()
andcolor.hue()
.color.same($color1, $color2)
returns whether two colors represent the samecolor even across color spaces. It differs from
$color1 == $color2
because==
never consider colors in different (non-legacy) spaces as equal.color.is-in-gamut($color, $space: null)
returns whether$color
isin-gamut for its color space (or
$space
if it's passed).color.to-gamut($color, $space: null)
returns$color
constrained to itsspace's gamut (or to
$space
's gamut, if passed). This is generally notrecommended since even older browsers will display out-of-gamut colors as
best they can, but it may be necessary in some cases.
color.space($color)
: Returns the name of$color
's color space.color.is-legacy($color)
: Returns whether$color
is in a legacy colorspace (
rgb
,hsl
, orhwb
).color.is-powerless($color, $channel, $space: null)
: Returns whether thegiven
$channel
of$color
is powerless in$space
(or its own colorspace). A channel is "powerless" if its value doesn't affect the way the
color is displayed, such as hue for a color with 0 chroma.
color.is-missing($color, $channel)
: Returns whether$channel
's value ismissing in
$color
. Missing channels can be explicitly specified using thespecial value
none
and can appear automatically whencolor.to-space()
returns a color with a powerless channel. Missing channels are usually
treated as 0, except when interpolating between two colors and in
color.mix()
where they're treated as the same value as the other color.Update existing functions to support color spaces:
hsl()
andcolor.hwb()
no longer forbid out-of-bounds values. Instead,they follow the CSS spec by clamping them to within the allowed range.
color.change()
,color.adjust()
, andcolor.scale()
now support allchannels of all color spaces. However, if you want to modify a channel
that's not in
$color
's own color space, you have to explicitly specify thespace with the
$space
parameter. (For backwards-compatibility, thisdoesn't apply to legacy channels of legacy colors—for example, you can still
adjust an
rgb
color's saturation without passing$space: hsl
).color.mix()
andcolor.invert()
now support the standard CSS algorithmfor interpolating between two colors (the same one that's used for gradients
and animations). To use this, pass the color space to use for interpolation
to the
$method
parameter. For polar color spaces likehsl
andoklch
,this parameter also allows you to specify how hue interpolation is handled.
color.complement()
now supports a$space
parameter that indicates whichcolor space should be used to take the complement.
color.grayscale()
now operates in theoklch
space for non-legacy colors.color.ie-hex-str()
now automatically converts its color to thergb
spaceand gamut-maps it so that it can continue to take colors from any color
space.
The following functions are now deprecated, and uses should be replaced with
the new color-space-aware functions defined above:
The
color.red()
,color.green()
,color.blue()
,color.hue()
,color.saturation()
,color.lightness()
,color.whiteness()
, andcolor.blackness()
functions, as well as their global counterparts, shouldbe replaced with calls to
color.channel()
.The global
adjust-hue()
,saturate()
,desaturate()
,lighten()
,darken()
,transaprentize()
,fade-out()
,opacify()
, andfade-in()
functions should be replaced by
color.adjust()
orcolor.scale()
.Add a
global-builtin
future deprecation, which can be opted-into with the--future-deprecation
flag or thefutureDeprecations
option in the JS orDart API. This emits warnings when any global built-in functions that are
now available in
sass:
modules are called. It will become active by defaultin an upcoming release alongside the
@import
deprecation.Dart API
Added a
ColorSpace
class which represents the various color spaces definedin the CSS spec.
Added
SassColor.space
which returns a color's color space.Added
SassColor.channels
and.channelsOrNull
which returns a listof channel values, with missing channels converted to 0 or exposed as null,
respectively.
Added
SassColor.isLegacy
,.isInGamut
,.channel()
,.isChannelMissing()
,.isChannelPowerless()
,.toSpace()
,.toGamut()
,.changeChannels()
, and.interpolate()
which do the same thing as the Sass functions of thecorresponding names.
SassColor.rgb()
now allows out-of-bounds and non-integer arguments.SassColor.hsl()
and.hwb()
now allow out-of-bounds arguments.Added
SassColor.hwb()
,.srgb()
,.srgbLinear()
,.displayP3()
,.a98Rgb()
,.prophotoRgb()
,.rec2020()
,.xyzD50()
,.xyzD65()
,.lab()
,.lch()
,.oklab()
,.oklch()
, and.forSpace()
constructors.Deprecated
SassColor.red
,.green
,.blue
,.hue
,.saturation
,.lightness
,.whiteness
, and.blackness
in favor ofSassColor.channel()
.Deprecated
SassColor.changeRgb()
,.changeHsl()
, and.changeHwb()
infavor of
SassColor.changeChannels()
.Added
SassNumber.convertValueToUnit()
as a shorthand forSassNumber.convertValue()
with a single numerator.Added
InterpolationMethod
andHueInterpolationMethod
which collectivelyrepresent the method to use to interpolate two colors.
JS API
While the legacy API has been deprecated since we released the modern API, we
now emit warnings when the legacy API is used to make sure users are aware
that it will be removed in Dart Sass 2.0.0. In the meantime, you can silence
these warnings by passing
legacy-js-api
insilenceDeprecations
when usingthe legacy API.
Modify
SassColor
to accept a newspace
option, with support for all thenew color spaces defined in Color Level 4.
Add
SassColor.space
which returns a color's color space.Add
SassColor.channels
and.channelsOrNull
which returns a list of channelvalues, with missing channels converted to 0 or exposed as null, respectively.
Add
SassColor.isLegacy
,.isInGamut()
,.channel()
,.isChannelMissing()
,.isChannelPowerless()
,.toSpace()
,.toGamut()
,.change()
, and.interpolate()
which do the same thing as the Sass functions of thecorresponding names.
Deprecate
SassColor.red
,.green
,.blue
,.hue
,.saturation
,.lightness
,.whiteness
, and.blackness
in favor ofSassColor.channel()
.Embedded Sass
Add
Color
SassScript value, with support for all the new color spacesdefined in Color Level 4.
Remove
RgbColor
,HslColor
andHwbColor
SassScript values.v1.78.0
Compare Source
The
meta.feature-exists
function is now deprecated. This deprecation isnamed
feature-exists
.Fix a crash when using
@at-root
without any queries or children in theindented syntax.
JS API
Backport the deprecation options (
fatalDeprecations
,futureDeprecations
,and
silenceDeprecations
) to the legacy JS API. The legacy JS API is itselfdeprecated, and you should move off of it if possible, but this will allow
users of bundlers and other tools that are still using the legacy API to
still control deprecation warnings.
Fix a bug where accessing
SourceSpan.url
would crash when a relative URL waspassed to the Sass API.
Embedded Sass
Explicitly expose a
sass
executable from thesass-embedded
npm package.This was intended to be included in 1.63.0, but due to the way
platform-specific dependency executables are installed it did not work as
intended. Now users can run
npx sass
for local installs or justsass
whensass-embedded
is installed globally.Add linux-riscv64, linux-musl-riscv64, and android-riscv64 support for the
sass-embedded
npm package.Fix an edge case where the Dart VM could hang when shutting down when requests
were in flight.
Fix a race condition where the embedded host could fail to shut down if it was
closed around the same time a new compilation was started.
Fix a bug where parse-time deprecation warnings could not be controlled by
the deprecation options in some circumstances.
Configuration
📅 Schedule: Branch creation - "on the first day of the month" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.