Fix a panic due to empty static class blocks (#3161)
This release fixes a bug where an internal invariant that was introduced in the previous release was sometimes violated, which then caused a panic. It happened when bundling code containing an empty static class block with both minification and bundling enabled.
v0.18.2
Lower static blocks when static fields are lowered (#2800, #2950, #3025)
This release fixes a bug where esbuild incorrectly did not lower static class blocks when static class fields needed to be lowered. For example, the following code should print 1 2 3 but previously printed 2 1 3 instead due to this bug:
// Original code
class Foo {
static x = console.log(1)
static { console.log(2) }
static y = console.log(3)
}
// Old output (with --supported:class-static-field=false)
class Foo {
static {
console.log(2);
}
}
__publicField(Foo, "x", console.log(1));
__publicField(Foo, "y", console.log(3));
// New output (with --supported:class-static-field=false)
class Foo {
}
__publicField(Foo, "x", console.log(1));
console.log(2);
__publicField(Foo, "y", console.log(3));
Use static blocks to implement --keep-names on classes (#2389)
This change fixes a bug where the name property could previously be incorrect within a class static context when using --keep-names. The problem was that the name property was being initialized after static blocks were run instead of before. This has been fixed by moving the name property initializer into a static block at the top of the class body:
// Original code
if (typeof Foo === 'undefined') {
let Foo = class {
static test = this.name
}
console.log(Foo.test)
}
// Old output (with --keep-names)
if (typeof Foo === "undefined") {
Fix a panic due to empty static class blocks (#3161)
This release fixes a bug where an internal invariant that was introduced in the previous release was sometimes violated, which then caused a panic. It happened when bundling code containing an empty static class block with both minification and bundling enabled.
0.18.2
Lower static blocks when static fields are lowered (#2800, #2950, #3025)
This release fixes a bug where esbuild incorrectly did not lower static class blocks when static class fields needed to be lowered. For example, the following code should print 1 2 3 but previously printed 2 1 3 instead due to this bug:
// Original code
class Foo {
static x = console.log(1)
static { console.log(2) }
static y = console.log(3)
}
// Old output (with --supported:class-static-field=false)
class Foo {
static {
console.log(2);
}
}
__publicField(Foo, "x", console.log(1));
__publicField(Foo, "y", console.log(3));
// New output (with --supported:class-static-field=false)
class Foo {
}
__publicField(Foo, "x", console.log(1));
console.log(2);
__publicField(Foo, "y", console.log(3));
Use static blocks to implement --keep-names on classes (#2389)
This change fixes a bug where the name property could previously be incorrect within a class static context when using --keep-names. The problem was that the name property was being initialized after static blocks were run instead of before. This has been fixed by moving the name property initializer into a static block at the top of the class body:
// Original code
if (typeof Foo === 'undefined') {
let Foo = class {
static test = this.name
}
console.log(Foo.test)
}
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps esbuild from 0.17.19 to 0.18.3.
Release notes
Sourced from esbuild's releases.
... (truncated)
Changelog
Sourced from esbuild's changelog.
... (truncated)
Commits
9224cce
publish 0.18.3 to npm35fd509
fix #3161: panic when minifyingstatic {}
a7a9096
publish 0.18.2 to npmd5b317a
fix #2389: use a static block for--keep-names
fb38ef6
inline static blocks that are all expressions8bdc589
useX
instead of✘
in expected logs on windowsb76b433
ignore uglify failure about default arugment tdz70e59c3
run more class lowering tests with bundling onc12cc90
fix #2800, fix #2950, fix #3025:static
blocksa1a1e44
auto-annotate pure iife expressionsDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)