[Security] Bump esbuild, vitest and @vitejs/plugin-react
Bumps esbuild to 0.25.3 and updates ancestor dependencies esbuild, vitest and @vitejs/plugin-react. These dependencies need to be updated together.
Updates esbuild
from 0.21.5 to 0.25.3 This update includes a security fix.
Vulnerabilities fixed
esbuild enables any website to send any requests to the development server and read the response
Summary
esbuild allows any websites to send any request to the development server and read the response due to default CORS settings.
Details
esbuild sets
Access-Control-Allow-Origin: *
header to all requests, including the SSE connection, which allows any websites to send any request to the development server and read the response.https://github.com/evanw/esbuild/blob/df815ac27b84f8b34374c9182a93c94718f8a630/pkg/api/serve_other.go#L121 https://github.com/evanw/esbuild/blob/df815ac27b84f8b34374c9182a93c94718f8a630/pkg/api/serve_other.go#L363
Attack scenario:
- The attacker serves a malicious web page (
http://malicious.example.com
).- The user accesses the malicious web page.
- The attacker sends a
fetch('http://127.0.0.1:8000/main.js')
request by JS in that malicious web page. This request is normally blocked by same-origin policy, but that's not the case for the reasons above.- The attacker gets the content of
http://127.0.0.1:8000/main.js
.In this scenario, I assumed that the attacker knows the URL of the bundle output file name. But the attacker can also get that information by
... (truncated)
Patched versions: 0.25.0 Affected versions: <= 0.24.2
Release notes
Sourced from esbuild's releases.
v0.25.3
Fix lowered
async
arrow functions beforesuper()
(#4141, #4142)This change makes it possible to call an
async
arrow function in a constructor before callingsuper()
when targeting environments withoutasync
support, as long as the function body doesn't referencethis
. Here's an example (notice the change fromthis
tonull
):// Original code class Foo extends Object { constructor() { (async () => await foo())() super() } } // Old output (with --target=es2016) class Foo extends Object { constructor() { (() => __async(this, null, function* () { return yield foo(); }))(); super(); } } // New output (with --target=es2016) class Foo extends Object { constructor() { (() => __async(null, null, function* () { return yield foo(); }))(); super(); } }
Some background: Arrow functions with the
async
keyword are transformed into generator functions for older language targets such as--target=es2016
. Since arrow functions capturethis
, the generated code forwardsthis
into the body of the generator function. However, JavaScript class syntax forbids usingthis
in a constructor before callingsuper()
, and this forwarding was problematic since previously happened even when the function body doesn't usethis
. Starting with this release, esbuild will now only forwardthis
if it's used within the function body.This fix was contributed by
@magic-akari
.Fix memory leak with
--watch=true
(#4131, #4132)This release fixes a memory leak with esbuild when
--watch=true
is used instead of--watch
. Previously using--watch=true
caused esbuild to continue to use more and more memory for every rebuild, but--watch=true
should now behave like--watch
and not leak memory.This bug happened because esbuild disables the garbage collector when it's not run as a long-lived process for extra speed, but esbuild's checks for which arguments cause esbuild to be a long-lived process weren't updated for the new
--watch=true
style of boolean command-line flags. This has been an issue since this boolean flag syntax was added in version 0.14.24 in 2022. These checks are unfortunately separate from the regular argument parser because of how esbuild's internals are organized (the command-line interface is exposed as a separate Go API so you can build your own custom esbuild CLI).This fix was contributed by
@mxschmitt
.More concise output for repeated legal comments (#4139)
Some libraries have many files and also use the same legal comment text in all files. Previously esbuild would copy each legal comment to the output file. Starting with this release, legal comments duplicated across separate files will now be grouped in the output file by unique comment content.
... (truncated)
Changelog
Sourced from esbuild's changelog.
Changelog: 2024
This changelog documents all esbuild versions published in the year 2024 (versions 0.19.12 through 0.24.2).
0.24.2
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
.0.24.1
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:{ "compilerOptions": { "target": "ES2024" } }
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:
class Foo { get *x() {} set *y() {} }
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:
... (truncated)
Commits
-
677910b
publish 0.25.3 to npm -
a41040e
fix #4110: support custom non-IPhost
values -
dfe0e1c
fix #4114: add a limit to css nesting expansion -
a54916b
fix #4139: deduplicate repeated legal comments -
dc60e60
runmake update-compat-table
-
d917038
fix #4144: node path resolution edge case -
7ed1684
fix #4141: Avoid redundantthis
access during async function lowering (#4142) -
edc3a23
docs(dev): update alias command formake test-go
(#4113) -
1ee8b67
workaroundprocess.exit()
not exiting in node -
5c56e07
changelog note with credit for the fix - Additional commits viewable in compare view
Updates vitest
from 2.1.1 to 3.1.2
Release notes
Sourced from vitest's releases.
v3.1.2
🐞 Bug Fixes
- Add global
chai
variable invitest/globals
(fix: #7474) - by@Jay-Karia
in vitest-dev/vitest#7771 and vitest-dev/vitest#7474 (d9297)- Prevent modifying
test.exclude
when same object passed incoverage.exclude
- by@AriPerkkio
in vitest-dev/vitest#7774 (c3751)- Fix already hoisted mock - by
@hi-ogawa
in vitest-dev/vitest#7815 (773b1)- Fix test.scoped inheritance - by
@hi-ogawa
in vitest-dev/vitest#7814 (db6c3)- Remove pointer-events-none after resizing the left panel - by
@alexprudhomme
in vitest-dev/vitest#7811 (a7e77)- Default to run mode when stdin is not a TTY - by
@kentonv
,@hi-ogawa
and@sheremet-va
in vitest-dev/vitest#7673 (6358f)- Use happy-dom/jsdom types for
envionmentOptions
- by@hi-ogawa
in vitest-dev/vitest#7795 (67430)- browser:
- Fix transform error before browser server initialization - by
@hi-ogawa
in vitest-dev/vitest#7783 (5f762)- Fix mocking from outside of root - by
@hi-ogawa
in vitest-dev/vitest#7789 (03f55)- Scale iframe for non ui case - by
@hi-ogawa
in vitest-dev/vitest#6512 (c3374)- coverage:
await
profiler calls - by@AriPerkkio
in vitest-dev/vitest#7763 (795a6)- Expose profiling timers - by
@AriPerkkio
in vitest-dev/vitest#7820 (5652b)- deps:
- Update all non-major dependencies - in vitest-dev/vitest#7765 (7c3df)
- Update all non-major dependencies - in vitest-dev/vitest#7831 (15701)
- runner:
- Correctly call test hooks and teardown functions - by
@sheremet-va
in vitest-dev/vitest#7775 (3c00c)- Show stacktrace on test timeout error - by
@hi-ogawa
in vitest-dev/vitest#7799 (df33b)- ui:
- Load panel sizes from storage on initial load - by
@userquin
in vitest-dev/vitest#7265 (6555d)- vite-node:
- Named export should overwrite export all - by
@hi-ogawa
in vitest-dev/vitest#7846 (5ba0d)- Add ERR_MODULE_NOT_FOUND code error if module cannot be loaded - by
@sheremet-va
in vitest-dev/vitest#7776 (f9eac)
🏎️ Performance
- browser: Improve browser parallelisation - by
@sheremet-va
in vitest-dev/vitest#7665 (816a5)View changes on GitHub
v3.1.1
🐞 Bug Fixes
- reporter:
- Report tests in correct order - by
@sheremet-va
in vitest-dev/vitest#7752 (b166e)- Print test only once in the verbose mode - by
@sheremet-va
in vitest-dev/vitest#7738 (69ca4)View changes on GitHub
v3.1.0
🚀 Features
- Introduce
%$
option to add number of the test to its title - by@kemuridama
in vitest-dev/vitest#7412 (df347)- Add
diff.maxDepth
option and set non-Infinity
value as a default to reduce crash - by@hi-ogawa
in vitest-dev/vitest#7481 (eacab)- Allow array element for
test.each/for
title formatting - by@hi-ogawa
in vitest-dev/vitest#7522 (ea3d6)
... (truncated)
Commits
-
5a0afd1
chore: release v3.1.2 -
b70a6f1
chore(deps): unbundle tinyglobby and update (#7864) -
f9eacbc
fix(vite-node): add ERR_MODULE_NOT_FOUND code error if module cannot be loade... -
3102986
docs:browser.provider
link (#7851) -
816a5c5
perf(browser): improve browser parallelisation (#7665) -
6743008
fix: use happy-dom/jsdom types forenvionmentOptions
(#7795) -
6358f21
fix: default to run mode when stdin is not a TTY (#7673) -
15701f5
fix(deps): update all non-major dependencies (#7831) -
5652bf9
fix(coverage): expose profiling timers (#7820) -
29084f1
chore(deps): update all non-major dependencies (#7802) - Additional commits viewable in compare view
Updates @vitejs/plugin-react
from 4.3.1 to 4.4.1
Release notes
Sourced from @vitejs/plugin-react
's releases.
plugin-react@4.4.1
Fix type issue when using
moduleResolution: "node"
in tsconfig #462plugin-react@4.4.0
Make compatible with rolldown-vite
This plugin is now compatible with rolldown-powered version of Vite. Note that currently the
__source
property value position might be incorrect. This will be fixed in the near future.plugin-react@4.4.0-beta.2
Add
reactRefreshHost
optionAdd
reactRefreshHost
option to set a React Fast Refresh runtime URL prefix. This is useful in a module federation context to enable HMR by specifying the host application URL in the Vite config of a remote application. See full discussion here: module-federation/vite#183export default defineConfig({ plugins: [react({ reactRefreshHost: 'http://localhost:3000' })], })
plugin-react@4.4.0-beta.1
No release notes provided.
plugin-react@4.3.4
Add Vite 6 to peerDependencies range
Vite 6 is highly backward compatible, not much to add!
Force Babel to output spec compliant import attributes #386
The default was an old spec (
with type: "json"
). We now enforce spec compliant (with { type: "json" }
)plugin-react@4.3.3
React Compiler runtimeModule option removed
React Compiler was updated to accept a
target
option andruntimeModule
was removed. vite-plugin-react will still detectruntimeModule
for backwards compatibility.When using a custom
runtimeModule
ortarget !== '19'
, the plugin will not try to pre-optimizereact/compiler-runtime
dependency.The react-compiler-runtime is now available on npm can be used instead of the local shim for people using the compiler with React < 19.
Here is the configuration to use the compiler with React 18 and correct source maps in development:
npm install babel-plugin-react-compiler react-compiler-runtime @babel/plugin-transform-react-jsx-development
</tr></table>
... (truncated)
Changelog
Sourced from @vitejs/plugin-react
's changelog.
4.4.1 (2025-04-19)
Fix type issue when using
moduleResolution: "node"
in tsconfig #4624.4.0 (2025-04-15)
Make compatible with rolldown-vite
This plugin is now compatible with rolldown-powered version of Vite. Note that currently the
__source
property value position might be incorrect. This will be fixed in the near future.4.4.0-beta.2 (2025-04-15)
Add
reactRefreshHost
optionAdd
reactRefreshHost
option to set a React Fast Refresh runtime URL prefix. This is useful in a module federation context to enable HMR by specifying the host application URL in the Vite config of a remote application. See full discussion here: module-federation/vite#183export default defineConfig({ plugins: [react({ reactRefreshHost: 'http://localhost:3000' })], })
4.4.0-beta.1 (2025-04-09)
4.4.0-beta.0 (2025-04-09)
4.3.4 (2024-11-26)
Add Vite 6 to peerDependencies range
Vite 6 is highly backward compatible, not much to add!
Force Babel to output spec compliant import attributes #386
The default was an old spec (
with type: "json"
). We now enforce spec compliant (with { type: "json" }
)4.3.3 (2024-10-19)
React Compiler runtimeModule option removed
React Compiler was updated to accept a
target
option andruntimeModule
was removed. vite-plugin-react will still detectruntimeModule
for backwards compatibility.When using a custom
runtimeModule
ortarget !== '19'
, the plugin will not try to pre-optimizereact/compiler-runtime
dependency.The react-compiler-runtime is now available on npm can be used instead of the local shim for people using the compiler with React < 19.
Here is the configuration to use the compiler with React 18 and correct source maps in development:
... (truncated)
Commits
-
57cc398
release: plugin-react@4.4.1 -
a62bdd6
fix(react): fix package.jsontypes
(#462) -
8beda4f
release: plugin-react@4.4.0 -
fffe4ad
feat: add support for rolldown-vite (#451) -
c197fd9
release: plugin-react@4.4.0-beta.2 -
bd1a1ad
fix(deps): update all non-major dependencies (#392) -
87f7fdd
feat: addreactRefreshHost
option to support module federation HMR (#420) -
da01d56
release: plugin-react@4.4.0-beta.1 -
9b1b510
chore: fix refresh runtime path in dev (#444) -
8258442
release: plugin-react@4.4.0-beta.0 - Additional commits viewable in compare view