evanw/esbuild (esbuild)
### [`v0.18.9`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0189)
[Compare Source](https://togithub.com/evanw/esbuild/compare/v0.18.8...v0.18.9)
- Fix `await using` declarations inside `async` generator functions
I forgot about the new `await using` declarations when implementing lowering for `async` generator functions in the previous release. This change fixes the transformation of `await using` declarations when they are inside lowered `async` generator functions:
```js
// Original code
async function* foo() {
await using x = await y
}
// Old output (with --supported:async-generator=false)
function foo() {
return __asyncGenerator(this, null, function* () {
await using x = yield new __await(y);
});
}
// New output (with --supported:async-generator=false)
function foo() {
return __asyncGenerator(this, null, function* () {
var _stack = [];
try {
const x = __using(_stack, yield new __await(y), true);
} catch (_) {
var _error = _, _hasError = true;
} finally {
var _promise = __callDispose(_stack, _error, _hasError);
_promise && (yield new __await(_promise));
}
});
}
```
- Insert some prefixed CSS properties when appropriate ([#3122](https://togithub.com/evanw/esbuild/issues/3122))
With this release, esbuild will now insert prefixed CSS properties in certain cases when the `target` setting includes browsers that require a certain prefix. This is currently done for the following properties:
- `appearance: *;` => `-webkit-appearance: *; -moz-appearance: *;`
- `backdrop-filter: *;` => `-webkit-backdrop-filter: *;`
- `background-clip: text` => `-webkit-background-clip: text;`
- `box-decoration-break: *;` => `-webkit-box-decoration-break: *;`
- `clip-path: *;` => `-webkit-clip-path: *;`
- `font-kerning: *;` => `-webkit-font-kerning: *;`
- `hyphens: *;` => `-webkit-hyphens: *;`
- `initial-letter: *;` => `-webkit-initial-letter: *;`
- `mask-image: *;` => `-webkit-mask-image: *;`
- `mask-origin: *;` => `-webkit-mask-origin: *;`
- `mask-position: *;` => `-webkit-mask-position: *;`
- `mask-repeat: *;` => `-webkit-mask-repeat: *;`
- `mask-size: *;` => `-webkit-mask-size: *;`
- `position: sticky;` => `position: -webkit-sticky;`
- `print-color-adjust: *;` => `-webkit-print-color-adjust: *;`
- `tab-size: *;` => `-moz-tab-size: *; -o-tab-size: *;`
- `text-decoration-color: *;` => `-webkit-text-decoration-color: *; -moz-text-decoration-color: *;`
- `text-decoration-line: *;` => `-webkit-text-decoration-line: *; -moz-text-decoration-line: *;`
- `text-decoration-skip: *;` => `-webkit-text-decoration-skip: *;`
- `text-emphasis-color: *;` => `-webkit-text-emphasis-color: *;`
- `text-emphasis-position: *;` => `-webkit-text-emphasis-position: *;`
- `text-emphasis-style: *;` => `-webkit-text-emphasis-style: *;`
- `text-orientation: *;` => `-webkit-text-orientation: *;`
- `text-size-adjust: *;` => `-webkit-text-size-adjust: *; -ms-text-size-adjust: *;`
- `user-select: *;` => `-webkit-user-select: *; -moz-user-select: *; -ms-user-select: *;`
Here is an example:
```css
/* Original code */
div {
mask-image: url(x.png);
}
/* Old output (with --target=chrome99) */
div {
mask-image: url(x.png);
}
/* New output (with --target=chrome99) */
div {
-webkit-mask-image: url(x.png);
mask-image: url(x.png);
}
```
Browser compatibility data was sourced from the tables on https://caniuse.com. Support for more CSS properties can be added in the future as appropriate.
- Fix an obscure identifier minification bug ([#2809](https://togithub.com/evanw/esbuild/issues/2809))
Function declarations in nested scopes behave differently depending on whether or not `"use strict"` is present. To avoid generating code that behaves differently depending on whether strict mode is enabled or not, esbuild transforms nested function declarations into variable declarations. However, there was a bug where the generated variable name was not being recorded as declared internally, which meant that it wasn't being renamed correctly by the minifier and could cause a name collision. This bug has been fixed:
```js
// Original code
const n = ''
for (let i of [0,1]) {
function f () {}
}
// Old output (with --minify-identifiers --format=esm)
const f = "";
for (let o of [0, 1]) {
let n = function() {
};
var f = n;
}
// New output (with --minify-identifiers --format=esm)
const f = "";
for (let o of [0, 1]) {
let n = function() {
};
var t = n;
}
```
- Fix a bug in esbuild's compatibility table script ([#3179](https://togithub.com/evanw/esbuild/pull/3179))
Setting esbuild's `target` to a specific JavaScript engine tells esbuild to use the JavaScript syntax feature compatibility data from https://kangax.github.io/compat-table/es6/ for that engine to determine which syntax features to allow. However, esbuild's script that builds this internal compatibility table had a bug that incorrectly ignores tests for engines that still have outstanding implementation bugs which were never fixed. This change fixes this bug with the script.
The only case where this changed the information in esbuild's internal compatibility table is that the `hermes` target is marked as no longer supporting destructuring. This is because there is a failing destructuring-related test for Hermes on https://kangax.github.io/compat-table/es6/. If you want to use destructuring with Hermes anyway, you can pass `--supported:destructuring=true` to esbuild to override the `hermes` target and force esbuild to accept this syntax.
This fix was contributed by [@ArrayZoneYour](https://togithub.com/ArrayZoneYour).
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), 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.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, check this box
This PR has been generated by Mend Renovate. View repository job log here.
This PR contains the following updates:
0.18.8
->0.18.9
Release Notes
evanw/esbuild (esbuild)
### [`v0.18.9`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0189) [Compare Source](https://togithub.com/evanw/esbuild/compare/v0.18.8...v0.18.9) - Fix `await using` declarations inside `async` generator functions I forgot about the new `await using` declarations when implementing lowering for `async` generator functions in the previous release. This change fixes the transformation of `await using` declarations when they are inside lowered `async` generator functions: ```js // Original code async function* foo() { await using x = await y } // Old output (with --supported:async-generator=false) function foo() { return __asyncGenerator(this, null, function* () { await using x = yield new __await(y); }); } // New output (with --supported:async-generator=false) function foo() { return __asyncGenerator(this, null, function* () { var _stack = []; try { const x = __using(_stack, yield new __await(y), true); } catch (_) { var _error = _, _hasError = true; } finally { var _promise = __callDispose(_stack, _error, _hasError); _promise && (yield new __await(_promise)); } }); } ``` - Insert some prefixed CSS properties when appropriate ([#3122](https://togithub.com/evanw/esbuild/issues/3122)) With this release, esbuild will now insert prefixed CSS properties in certain cases when the `target` setting includes browsers that require a certain prefix. This is currently done for the following properties: - `appearance: *;` => `-webkit-appearance: *; -moz-appearance: *;` - `backdrop-filter: *;` => `-webkit-backdrop-filter: *;` - `background-clip: text` => `-webkit-background-clip: text;` - `box-decoration-break: *;` => `-webkit-box-decoration-break: *;` - `clip-path: *;` => `-webkit-clip-path: *;` - `font-kerning: *;` => `-webkit-font-kerning: *;` - `hyphens: *;` => `-webkit-hyphens: *;` - `initial-letter: *;` => `-webkit-initial-letter: *;` - `mask-image: *;` => `-webkit-mask-image: *;` - `mask-origin: *;` => `-webkit-mask-origin: *;` - `mask-position: *;` => `-webkit-mask-position: *;` - `mask-repeat: *;` => `-webkit-mask-repeat: *;` - `mask-size: *;` => `-webkit-mask-size: *;` - `position: sticky;` => `position: -webkit-sticky;` - `print-color-adjust: *;` => `-webkit-print-color-adjust: *;` - `tab-size: *;` => `-moz-tab-size: *; -o-tab-size: *;` - `text-decoration-color: *;` => `-webkit-text-decoration-color: *; -moz-text-decoration-color: *;` - `text-decoration-line: *;` => `-webkit-text-decoration-line: *; -moz-text-decoration-line: *;` - `text-decoration-skip: *;` => `-webkit-text-decoration-skip: *;` - `text-emphasis-color: *;` => `-webkit-text-emphasis-color: *;` - `text-emphasis-position: *;` => `-webkit-text-emphasis-position: *;` - `text-emphasis-style: *;` => `-webkit-text-emphasis-style: *;` - `text-orientation: *;` => `-webkit-text-orientation: *;` - `text-size-adjust: *;` => `-webkit-text-size-adjust: *; -ms-text-size-adjust: *;` - `user-select: *;` => `-webkit-user-select: *; -moz-user-select: *; -ms-user-select: *;` Here is an example: ```css /* Original code */ div { mask-image: url(x.png); } /* Old output (with --target=chrome99) */ div { mask-image: url(x.png); } /* New output (with --target=chrome99) */ div { -webkit-mask-image: url(x.png); mask-image: url(x.png); } ``` Browser compatibility data was sourced from the tables on https://caniuse.com. Support for more CSS properties can be added in the future as appropriate. - Fix an obscure identifier minification bug ([#2809](https://togithub.com/evanw/esbuild/issues/2809)) Function declarations in nested scopes behave differently depending on whether or not `"use strict"` is present. To avoid generating code that behaves differently depending on whether strict mode is enabled or not, esbuild transforms nested function declarations into variable declarations. However, there was a bug where the generated variable name was not being recorded as declared internally, which meant that it wasn't being renamed correctly by the minifier and could cause a name collision. This bug has been fixed: ```js // Original code const n = '' for (let i of [0,1]) { function f () {} } // Old output (with --minify-identifiers --format=esm) const f = ""; for (let o of [0, 1]) { let n = function() { }; var f = n; } // New output (with --minify-identifiers --format=esm) const f = ""; for (let o of [0, 1]) { let n = function() { }; var t = n; } ``` - Fix a bug in esbuild's compatibility table script ([#3179](https://togithub.com/evanw/esbuild/pull/3179)) Setting esbuild's `target` to a specific JavaScript engine tells esbuild to use the JavaScript syntax feature compatibility data from https://kangax.github.io/compat-table/es6/ for that engine to determine which syntax features to allow. However, esbuild's script that builds this internal compatibility table had a bug that incorrectly ignores tests for engines that still have outstanding implementation bugs which were never fixed. This change fixes this bug with the script. The only case where this changed the information in esbuild's internal compatibility table is that the `hermes` target is marked as no longer supporting destructuring. This is because there is a failing destructuring-related test for Hermes on https://kangax.github.io/compat-table/es6/. If you want to use destructuring with Hermes anyway, you can pass `--supported:destructuring=true` to esbuild to override the `hermes` target and force esbuild to accept this syntax. This fix was contributed by [@ArrayZoneYour](https://togithub.com/ArrayZoneYour).Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), 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.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate. View repository job log here.