-
Emit decorators for
declare
class fields (#1675)In version 3.7, TypeScript introduced the
declare
keyword for class fields that avoids generating any code for that field:// TypeScript input class Foo { a: number declare b: number } // JavaScript output class Foo { a; }
However, it turns out that TypeScript still emits decorators for these omitted fields. With this release, esbuild will now do this too:
// TypeScript input class Foo { @decorator a: number; @decorator declare b: number; } // Old JavaScript output class Foo { a; } __decorateClass([ decorator ], Foo.prototype, "a", 2); // New JavaScript output class Foo { a; } __decorateClass([ decorator ], Foo.prototype, "a", 2); __decorateClass([ decorator ], Foo.prototype, "b", 2);
-
Experimental support for esbuild on NetBSD (#1624)
With this release, esbuild now has a published binary executable for NetBSD in the
esbuild-netbsd-64
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 @gdt.⚠️ Note: NetBSD is not one of Node's supported platforms, so installing esbuild may or may not work on NetBSD depending on how Node has been patched. This is not a problem with esbuild. ⚠️
-
Disable the "esbuild was bundled" warning if
ESBUILD_BINARY_PATH
is provided (#1678)The
ESBUILD_BINARY_PATH
environment variable allows you to substitute an alternate binary executable for esbuild's JavaScript API. This is useful in certain cases such as when debugging esbuild. The JavaScript API has some code that throws an error if it detects that it was bundled before being run, since bundling prevents esbuild from being able to find the path to its binary executable. However, that error is unnecessary ifESBUILD_BINARY_PATH
is present because an alternate path has been provided. This release disables the warning whenESBUILD_BINARY_PATH
is present so that esbuild can be used when bundled as long as you also manually specifyESBUILD_BINARY_PATH
.This change was contributed by @heypiotr.
-
Remove unused
catch
bindings when minifying (#1660)With this release, esbuild will now remove unused
catch
bindings when minifying:// Original code try { throw 0; } catch (e) { } // Old output (with --minify) try{throw 0}catch(t){} // New output (with --minify) try{throw 0}catch{}
This takes advantage of the new optional catch binding syntax feature that was introduced in ES2019. This minification rule is only enabled when optional catch bindings are supported by the target environment. Specifically, it's not enabled when using
--target=es2018
or older. Make sure to set esbuild'starget
setting correctly when minifying if the code will be running in an older JavaScript environment.This change was contributed by @sapphi-red.