evanw/esbuild
### [`v0.17.13`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#01713)
[Compare Source](https://togithub.com/evanw/esbuild/compare/v0.17.12...v0.17.13)
- Work around an issue with `NODE_PATH` and Go's WebAssembly internals ([#3001](https://togithub.com/evanw/esbuild/issues/3001))
Go's WebAssembly implementation returns `EINVAL` instead of `ENOTDIR` when using the `readdir` syscall on a file. This messes up esbuild's implementation of node's module resolution algorithm since encountering `ENOTDIR` causes esbuild to continue its search (since it's a normal condition) while other encountering other errors causes esbuild to fail with an I/O error (since it's an unexpected condition). You can encounter this issue in practice if you use node's legacy `NODE_PATH` feature to tell esbuild to resolve node modules in a custom directory that was not installed by npm. This release works around this problem by converting `EINVAL` into `ENOTDIR` for the `readdir` syscall.
- Fix a minification bug with CSS `@layer` rules that have parsing errors ([#3016](https://togithub.com/evanw/esbuild/issues/3016))
CSS at-rules [require either a `{}` block or a semicolon at the end](https://www.w3.org/TR/css-syntax-3/#consume-at-rule). Omitting both of these causes esbuild to treat the rule as an unknown at-rule. Previous releases of esbuild had a bug that incorrectly removed unknown at-rules without any children during minification if the at-rule token matched an at-rule that esbuild can handle. Specifically [cssnano](https://cssnano.co/) can generate `@layer` rules with parsing errors, and empty `@layer` rules cannot be removed because they have side effects (`@layer` didn't exist when esbuild's CSS support was added, so esbuild wasn't written to handle this). This release changes esbuild to no longer discard `@layer` rules with parsing errors when minifying (the rule `@layer c` has a parsing error):
```css
/* Original input */
@layer a {
@layer b {
@layer c
}
}
/* Old output (with --minify) */
@layer a.b;
/* New output (with --minify) */
@layer a.b.c;
```
- Unterminated strings in CSS are no longer an error
The CSS specification provides [rules for handling parsing errors](https://www.w3.org/TR/CSS22/syndata.html#parsing-errors). One of those rules is that user agents must close strings upon reaching the end of a line (i.e., before an unescaped line feed, carriage return or form feed character), but then drop the construct (declaration or rule) in which the string was found. For example:
```css
p {
color: green;
font-family: 'Courier New Times
color: red;
color: green;
}
```
...would be treated the same as:
```css
p { color: green; color: green; }
```
...because the second declaration (from `font-family` to the semicolon after `color: red`) is invalid and is dropped.
Previously using this CSS with esbuild failed to build due to a syntax error, even though the code can be interpreted by a browser. With this release, the code now produces a warning instead of an error, and esbuild prints the invalid CSS such that it stays invalid in the output:
```css
/* esbuild's new non-minified output: */
p {
color: green;
font-family: 'Courier New Times
color: red;
color: green;
}
```
```css
/* esbuild's new minified output: */
p{font-family:'Courier New Times
color: red;color:green}
```
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.17.12
->0.17.13
Release Notes
evanw/esbuild
### [`v0.17.13`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#01713) [Compare Source](https://togithub.com/evanw/esbuild/compare/v0.17.12...v0.17.13) - Work around an issue with `NODE_PATH` and Go's WebAssembly internals ([#3001](https://togithub.com/evanw/esbuild/issues/3001)) Go's WebAssembly implementation returns `EINVAL` instead of `ENOTDIR` when using the `readdir` syscall on a file. This messes up esbuild's implementation of node's module resolution algorithm since encountering `ENOTDIR` causes esbuild to continue its search (since it's a normal condition) while other encountering other errors causes esbuild to fail with an I/O error (since it's an unexpected condition). You can encounter this issue in practice if you use node's legacy `NODE_PATH` feature to tell esbuild to resolve node modules in a custom directory that was not installed by npm. This release works around this problem by converting `EINVAL` into `ENOTDIR` for the `readdir` syscall. - Fix a minification bug with CSS `@layer` rules that have parsing errors ([#3016](https://togithub.com/evanw/esbuild/issues/3016)) CSS at-rules [require either a `{}` block or a semicolon at the end](https://www.w3.org/TR/css-syntax-3/#consume-at-rule). Omitting both of these causes esbuild to treat the rule as an unknown at-rule. Previous releases of esbuild had a bug that incorrectly removed unknown at-rules without any children during minification if the at-rule token matched an at-rule that esbuild can handle. Specifically [cssnano](https://cssnano.co/) can generate `@layer` rules with parsing errors, and empty `@layer` rules cannot be removed because they have side effects (`@layer` didn't exist when esbuild's CSS support was added, so esbuild wasn't written to handle this). This release changes esbuild to no longer discard `@layer` rules with parsing errors when minifying (the rule `@layer c` has a parsing error): ```css /* Original input */ @layer a { @layer b { @layer c } } /* Old output (with --minify) */ @layer a.b; /* New output (with --minify) */ @layer a.b.c; ``` - Unterminated strings in CSS are no longer an error The CSS specification provides [rules for handling parsing errors](https://www.w3.org/TR/CSS22/syndata.html#parsing-errors). One of those rules is that user agents must close strings upon reaching the end of a line (i.e., before an unescaped line feed, carriage return or form feed character), but then drop the construct (declaration or rule) in which the string was found. For example: ```css p { color: green; font-family: 'Courier New Times color: red; color: green; } ``` ...would be treated the same as: ```css p { color: green; color: green; } ``` ...because the second declaration (from `font-family` to the semicolon after `color: red`) is invalid and is dropped. Previously using this CSS with esbuild failed to build due to a syntax error, even though the code can be interpreted by a browser. With this release, the code now produces a warning instead of an error, and esbuild prints the invalid CSS such that it stays invalid in the output: ```css /* esbuild's new non-minified output: */ p { color: green; font-family: 'Courier New Times color: red; color: green; } ``` ```css /* esbuild's new minified output: */ p{font-family:'Courier New Times color: red;color:green} ```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.