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:
^18.11.10
->^18.11.13
^5.45.0
->^5.46.0
^5.45.0
->^5.46.0
^0.25.3
->^0.25.7
^0.15.17
->^0.16.4
^2.8.0
->^2.8.1
^4.9.3
->^4.9.4
^0.25.3
->^0.25.7
Release Notes
typescript-eslint/typescript-eslint (@typescript-eslint/eslint-plugin)
v5.46.0
Compare Source
Bug Fixes
object
instead ofRecord<string, unknown>
(#6079) (d91a5fc)Features
5.45.1 (2022-12-05)
Bug Fixes
import type
(#6095) (98caa92)ignoreFunctionTypeParameterNameValueShadow
(#6129) (9d58b6b)v5.45.1
Compare Source
Bug Fixes
import type
(#6095) (98caa92)ignoreFunctionTypeParameterNameValueShadow
(#6129) (9d58b6b)typescript-eslint/typescript-eslint (@typescript-eslint/parser)
v5.46.0
Compare Source
Note: Version bump only for package @typescript-eslint/parser
5.45.1 (2022-12-05)
Bug Fixes
v5.45.1
Compare Source
Bug Fixes
vitest-dev/vitest
v0.25.7
Compare Source
🚀 Features
🐞 Bug Fixes
View changes on GitHub
v0.25.6
Compare Source
🐞 Bug Fixes
View changes on GitHub
v0.25.5
Compare Source
🚀 Features
🐞 Bug Fixes
View changes on GitHub
v0.25.4
Compare Source
🚀 Features
each
title - by @scarf005 in https://github.com/vitest-dev/vitest/issues/2420 and https://github.com/vitest-dev/vitest/issues/2421 (1868f)🐞 Bug Fixes
View changes on GitHub
evanw/esbuild
v0.16.4
Compare Source
Fix binary downloads from the
@esbuild/
scope for Deno (#2729)Version 0.16.0 of esbuild moved esbuild's binary executables into npm packages under the
@esbuild/
scope, which accidentally broke the binary downloader script for Deno. This release fixes this script so it should now be possible to use esbuild version 0.16.4+ with Deno.v0.16.3
Compare Source
Fix a hang with the JS API in certain cases (#2727)
A change that was made in version 0.15.13 accidentally introduced a case when using esbuild's JS API could cause the node process to fail to exit. The change broke esbuild's watchdog timer, which detects if the parent process no longer exists and then automatically exits esbuild. This hang happened when you ran node as a child process with the
stderr
stream set topipe
instead ofinherit
, in the child process you call esbuild's JS API and passincremental: true
but do not calldispose()
on the returnedrebuild
object, and then callprocess.exit()
. In that case the parent node process was still waiting for the esbuild process that was created by the child node process to exit. The change made in version 0.15.13 was trying to avoid using Go'ssync.WaitGroup
API incorrectly because the API is not thread-safe. Instead of doing this, I have now reverted that change and implemented a thread-safe version of thesync.WaitGroup
API for esbuild to use instead.v0.16.2
Compare Source
Fix
process.env.NODE_ENV
substitution when transforming (#2718)Version 0.16.0 introduced an unintentional regression that caused
process.env.NODE_ENV
to be automatically substituted with either"development"
or"production"
when using esbuild'stransform
API. This substitution is a necessary feature of esbuild'sbuild
API because the React framework crashes when you bundle it without doing this. But thetransform
API is typically used as part of a larger build pipeline so the benefit of esbuild doing this automatically is not as clear, and esbuild previously didn't do this.However, version 0.16.0 switched the default value of the
platform
setting for thetransform
API fromneutral
tobrowser
, both to align it with esbuild's documentation (which saysbrowser
is the default value) and because escaping the</script>
character sequence is now tied to thebrowser
platform (see the release notes for version 0.16.0 for details). That accidentally enabled automatic substitution ofprocess.env.NODE_ENV
because esbuild always did that for code meant for the browser. To fix this regression, esbuild will now only automatically substituteprocess.env.NODE_ENV
when using thebuild
API.Prevent
define
from substituting constants into assignment position (#2719)The
define
feature lets you replace certain expressions with constants. For example, you could use it to replace references to the global property referencewindow.DEBUG
withfalse
at compile time, which can then potentially help esbuild remove unused code from your bundle. It's similar to DefinePlugin in Webpack.However, if you write code such as
window.DEBUG = true
and then definedwindow.DEBUG
tofalse
, esbuild previously generated the outputfalse = true
which is a syntax error in JavaScript. This behavior is not typically a problem because it doesn't make sense to substitutewindow.DEBUG
with a constant if its value changes at run-time (Webpack'sDefinePlugin
also generatesfalse = true
in this case). But it can be alarming to have esbuild generate code with a syntax error.So with this release, esbuild will no longer substitute
define
constants into assignment position to avoid generating code with a syntax error. Instead esbuild will generate a warning, which currently looks like this:Fix a regression with
npm install --no-optional
(#2720)Normally when you install esbuild with
npm install
, npm itself is the tool that downloads the correct binary executable for the current platform. This happens because of how esbuild's primary package uses npm'soptionalDependencies
feature. However, if you deliberately disable this withnpm install --no-optional
then esbuild's install script will attempt to repair the installation by manually downloading and extracting the binary executable from the package that was supposed to be installed.The change in version 0.16.0 to move esbuild's nested packages into the
@esbuild/
scope unintentionally broke this logic because of how npm's URL structure is different for scoped packages vs. normal packages. It was actually already broken for a few platforms earlier because esbuild already had packages for some platforms in the@esbuild/
scope, but I didn't discover this then because esbuild's integration tests aren't run on all platforms. Anyway, this release contains some changes to the install script that should hopefully get this scenario working again.v0.16.1
Compare Source
This is a hotfix for the previous release.
Re-allow importing JSON with the
copy
loader using an import assertionThe previous release made it so when
assert { type: 'json' }
is present on an import statement, esbuild validated that thejson
loader was used. This is what an import assertion is supposed to do. However, I forgot about the relatively newcopy
loader, which sort of behaves as if the import path was marked as external (and thus not loaded at all) except that the file is copied to the output directory and the import path is rewritten to point to the copy. In this case whatever JavaScript runtime ends up running the code is the one to evaluate the import assertion. So esbuild should really allow this case as well. With this release, esbuild now allows both thejson
andcopy
loaders when anassert { type: 'json' }
import assertion is present.v0.16.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.15.0
or~0.15.0
. See npm's documentation about semver for more information.Move all binary executable packages to the
@esbuild/
scopeBinary package executables for esbuild are published as individual packages separate from the main
esbuild
package so you only have to download the relevant one for the current platform when you install esbuild. This release moves all of these packages under the@esbuild/
scope to avoid collisions with 3rd-party packages. It also changes them to a consistent naming scheme that uses theos
andcpu
names from node.The package name changes are as follows:
@esbuild/linux-loong64
=>@esbuild/linux-loong64
(no change)esbuild-android-64
=>@esbuild/android-x64
esbuild-android-arm64
=>@esbuild/android-arm64
esbuild-darwin-64
=>@esbuild/darwin-x64
esbuild-darwin-arm64
=>@esbuild/darwin-arm64
esbuild-freebsd-64
=>@esbuild/freebsd-x64
esbuild-freebsd-arm64
=>@esbuild/freebsd-arm64
esbuild-linux-32
=>@esbuild/linux-ia32
esbuild-linux-64
=>@esbuild/linux-x64
esbuild-linux-arm
=>@esbuild/linux-arm
esbuild-linux-arm64
=>@esbuild/linux-arm64
esbuild-linux-mips64le
=>@esbuild/linux-mips64el
esbuild-linux-ppc64le
=>@esbuild/linux-ppc64
esbuild-linux-riscv64
=>@esbuild/linux-riscv64
esbuild-linux-s390x
=>@esbuild/linux-s390x
esbuild-netbsd-64
=>@esbuild/netbsd-x64
esbuild-openbsd-64
=>@esbuild/openbsd-x64
esbuild-sunos-64
=>@esbuild/sunos-x64
esbuild-wasm
=>esbuild-wasm
(no change)esbuild-windows-32
=>@esbuild/win32-ia32
esbuild-windows-64
=>@esbuild/win32-x64
esbuild-windows-arm64
=>@esbuild/win32-arm64
esbuild
=>esbuild
(no change)Normal usage of the
esbuild
andesbuild-wasm
packages should not be affected. These name changes should only affect tools that hard-coded the individual binary executable package names into custom esbuild downloader scripts.This change was not made with performance in mind. But as a bonus, installing esbuild with npm may potentially happen faster now. This is because npm's package installation protocol is inefficient: it always downloads metadata for all past versions of each package even when it only needs metadata about a single version. This makes npm package downloads O(n) in the number of published versions, which penalizes packages like esbuild that are updated regularly. Since most of esbuild's package names have now changed, npm will now need to download much less data when installing esbuild (8.72mb of package manifests before this change → 0.06mb of package manifests after this change). However, this is only a temporary improvement. Installing esbuild will gradually get slower again as further versions of esbuild are published.
Publish a shell script that downloads esbuild directly
In addition to all of the existing ways to install esbuild, you can now also download esbuild directly like this:
curl -fsSL https://esbuild.github.io/dl/latest | sh
This runs a small shell script that downloads the latest
esbuild
binary executable to the current directory. This can be convenient on systems that don't havenpm
installed or when you just want to get a copy of esbuild quickly without any extra steps. If you want a specific version of esbuild (starting with this version onward), you can provide that version in the URL instead oflatest
:curl -fsSL https://esbuild.github.io/dl/v0.16.0 | sh
Note that the download script needs to be able to access registry.npmjs.org to be able to complete the download. This download script doesn't yet support all of the platforms that esbuild supports because I lack the necessary testing environments. If the download script doesn't work for you because you're on an unsupported platform, please file an issue on the esbuild repo so we can add support for it.
Fix some parameter names for the Go API
This release changes some parameter names for the Go API to be consistent with the JavaScript and CLI APIs:
OutExtensions
=>OutExtension
JSXMode
=>JSX
Add additional validation of API parameters
The JavaScript API now does some additional validation of API parameters to catch incorrect uses of esbuild's API. The biggest impact of this is likely that esbuild now strictly only accepts strings with the
define
parameter. This would already have been a type error with esbuild's TypeScript type definitions, but it was previously not enforced for people using esbuild's API JavaScript without TypeScript.The
define
parameter appears at first glance to take a JSON object if you aren't paying close attention, but this actually isn't true. Values fordefine
are instead strings of JavaScript code. This means you have to usedefine: { foo: '"bar"' }
to replacefoo
with the string"bar"
. Usingdefine: { foo: 'bar' }
actually replacesfoo
with the identifierbar
. Previously esbuild allowed you to passdefine: { foo: false }
andfalse
was automatically converted into a string, which made it more confusing to understand whatdefine
actually represents. Starting with this release, passing non-string values such as withdefine: { foo: false }
will no longer be allowed. You will now have to writedefine: { foo: 'false' }
instead.Generate shorter data URLs if possible (#1843)
Loading a file with esbuild's
dataurl
loader generates a JavaScript module with a data URL for that file in a string as a single default export. Previously the data URLs generated by esbuild all used base64 encoding. However, this is unnecessarily long for most textual data (e.g. SVG images). So with this release, esbuild'sdataurl
loader will now use percent encoding instead of base64 encoding if the result will be shorter. This can result in ~25% smaller data URLs for large SVGs. If you want the old behavior, you can use thebase64
loader instead and then construct the data URL yourself.Avoid marking entry points as external (#2382)
Previously you couldn't specify
--external:*
to mark all import paths as external because that also ended up making the entry point itself external, which caused the build to fail. With this release, esbuild'sexternal
API parameter no longer applies to entry points so using--external:*
is now possible.One additional consequence of this change is that the
kind
parameter is now required when calling theresolve()
function in esbuild's plugin API. Previously thekind
parameter defaulted toentry-point
, but that no longer interacts withexternal
so it didn't seem wise for this to continue to be the default. You now have to specifykind
so that the path resolution mode is explicit.Disallow non-
default
imports whenassert { type: 'json' }
is presentThere is now standard behavior for importing a JSON file into an ES module using an
import
statement. However, it requires you to place theassert { type: 'json' }
import assertion after the import path. This import assertion tells the JavaScript runtime to throw an error if the import does not end up resolving to a JSON file. On the web, the type of a file is determined by theContent-Type
HTTP header instead of by the file extension. The import assertion prevents security problems on the web where a.json
file may actually resolve to a JavaScript file containing malicious code, which is likely not expected for an import that is supposed to only contain pure side-effect free data.By default, esbuild uses the file extension to determine the type of a file, so this import assertion is unnecessary with esbuild. However, esbuild's JSON import feature has a non-standard extension that allows you to import top-level properties of the JSON object as named imports. For example, esbuild lets you do this:
This is useful for tree-shaking when bundling because it means esbuild will only include the the
version
field ofpackage.json
in your bundle. This is non-standard behavior though and doesn't match the behavior of what happens when you import JSON in a real JavaScript runtime (after addingassert { type: 'json' }
). In a real JavaScript runtime the only thing you can import is thedefault
import. So with this release, esbuild will now prevent you from importing non-default
import names ifassert { type: 'json' }
is present. This ensures that code containingassert { type: 'json' }
isn't relying on non-standard behavior that won't work everywhere. So the following code is now an error with esbuild when bundling:In addition, adding
assert { type: 'json' }
to an import statement now means esbuild will generate an error if the loader for the file is anything other thanjson
, which is required by the import assertion specification.Provide a way to disable automatic escaping of
</script>
(#2649)If you inject esbuild's output into a script tag in an HTML file, code containing the literal characters
</script>
will cause the tag to be ended early which will break the code:To avoid this, esbuild automatically escapes these strings in generated JavaScript files (e.g.
"</script>"
becomes"<\/script>"
instead). This also applies to</style>
in generated CSS files. Previously this always happened and there wasn't a way to turn this off.With this release, esbuild will now only do this if the
platform
setting is set tobrowser
(the default value). Settingplatform
tonode
orneutral
will disable this behavior. This behavior can also now be disabled with--supported:inline-script=false
(for JS) and--supported:inline-style=false
(for CSS).Throw an early error if decoded UTF-8 text isn't a
Uint8Array
(#2532)If you run esbuild's JavaScript API in a broken JavaScript environment where
new TextEncoder().encode("") instanceof Uint8Array
is false, then esbuild's API will fail with a confusing serialization error message that makes it seem like esbuild has a bug even though the real problem is that the JavaScript environment itself is broken. This can happen when using the test framework called Jest. With this release, esbuild's API will now throw earlier when it detects that the environment is unable to encode UTF-8 text correctly with an error message that makes it more clear that this is not a problem with esbuild.Change the default "legal comment" behavior
The legal comments feature automatically gathers comments containing
@license
or@preserve
and puts the comments somewhere (either in the generated code or in a separate file). People sometimes want this to happen so that the their dependencies' software licenses are retained in the generated output code. By default esbuild puts these comments at the end of the file when bundling. However, people sometimes find this confusing because these comments can be very generic and may not mention which library they come from. So with this release, esbuild will now discard legal comments by default. You now have to opt-in to preserving them if you want this behavior.Enable the
module
condition by default (#2417)Package authors want to be able to use the new
exports
field inpackage.json
to provide tree-shakable ESM code for ESM-aware bundlers while simultaneously providing fallback CommonJS code for other cases.Node's proposed way to do this involves using the
import
andrequire
export conditions so that you get the ESM code if you use an import statement and the CommonJS code if you use a require call. However, this has a major drawback: if some code in the bundle uses an import statement and other code in the bundle uses a require call, then you'll get two copies of the same package in the bundle. This is known as the dual package hazard and can lead to bloated bundles or even worse to subtle logic bugs.Webpack supports an alternate solution: an export condition called
module
that takes effect regardless of whether the package was imported using an import statement or a require call. This works because bundlers such as Webpack support importing a ESM using a require call (something node doesn't support). You could already do this with esbuild using--conditions=module
but you previously had to explicitly enable this. Package authors are concerned that esbuild users won't know to do this and will get suboptimal output with their package, so they have requested for esbuild to do this automatically.So with this release, esbuild will now automatically add the
module
condition when there aren't any customconditions
already configured. You can disable this with--conditions=
orconditions: []
(i.e. explicitly clearing all custom conditions).Rename the
master
branch tomain
The primary branch for this repository was previously called
master
but is now calledmain
. This change mirrors a similar change in many other projects.Remove esbuild's
_exit(0)
hack for WebAssembly (#714)Node had an unfortunate bug where the node process is unnecessarily kept open while a WebAssembly module is being optimized: https://github.com/nodejs/node/issues/36616. This means cases where running
esbuild
should take a few milliseconds can end up taking many seconds instead.The workaround was to force node to exit by ending the process early. This was done by esbuild in one of two ways depending on the exit code. For non-zero exit codes (i.e. when there is a build error), the
esbuild
command could just callprocess.kill(process.pid)
to avoid the hang. But for zero exit codes, esbuild had to load a N-API native node extension that calls the operating system'sexit(0)
function.However, this problem has essentially been fixed in node starting with version 18.3.0. So I have removed this hack from esbuild. If you are using an earlier version of node with
esbuild-wasm
and you don't want theesbuild
command to hang for a while when exiting, you can upgrade to node 18.3.0 or higher to remove the hang.The fix came from a V8 upgrade: this commit enabled dynamic tiering for WebAssembly by default for all projects that use V8's WebAssembly implementation. Previously all functions in the WebAssembly module were optimized in a single batch job but with dynamic tiering, V8 now optimizes individual WebAssembly functions as needed. This avoids unnecessary WebAssembly compilation which allows node to exit on time.
v0.15.18
Compare Source
Performance improvements for both JS and CSS
This release brings noticeable performance improvements for JS parsing and for CSS parsing and printing. Here's an example benchmark for using esbuild to pretty-print a single large minified CSS file and JS file:
The performance improvements were very straightforward:
Identifiers were being scanned using a generic character advancement function instead of using custom inline code. Advancing past each character involved UTF-8 decoding as well as updating multiple member variables. This was sped up using loop that skips UTF-8 decoding entirely and that only updates member variables once at the end. This is faster because identifiers are plain ASCII in the vast majority of cases, so Unicode decoding is almost always unnecessary.
CSS identifiers and CSS strings were still being printed one character at a time. Apparently I forgot to move this part of esbuild's CSS infrastructure beyond the proof-of-concept stage. These were both very obvious in the profiler, so I think maybe I have just never profiled esbuild's CSS printing before?
There was unnecessary work being done that was related to source maps when source map output was disabled. I likely haven't observed this before because esbuild's benchmarks always have source maps enabled. This work is now disabled when it's not going to be used.
I definitely should have caught these performance issues earlier. Better late than never I suppose.
prettier/prettier
v2.8.1
Compare Source
diff
Fix SCSS map in arguments (#9184 by @agamkrbit)
Support auto accessors syntax (#13919 by @sosukesuzuki)
Support for Auto Accessors Syntax landed in TypeScript 4.9.
(Doesn't work well with
babel-ts
parser)Microsoft/TypeScript
v4.9.4
: TypeScript 4.9.4Compare Source
For release notes, check out the release announcement.
For the complete list of fixed issues, check out the
Downloads are available on:
Changes:
e286821
Bump version to 4.9.4 and LKG.eb5419f
Cherry-pick #51704 to release 4.9 (#51712)b4d382b
Cherry-pick changes for narrowing to tagged literal types.e7a02f4
Port of #51626 and #51689 to release-4.9 (#51627)1727912
Cherry-pick fix aroundvisitEachChild
to release-4.9. (#51544)This list of changes was auto generated.
Configuration
📅 Schedule: Branch creation - "before 12pm on Sunday" (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.
This PR has been generated by Mend Renovate. View repository job log here.