evanw/esbuild
### [`v0.12.28`](https://togithub.com/evanw/esbuild/blob/master/CHANGELOG.md#01228)
[Compare Source](https://togithub.com/evanw/esbuild/compare/v0.12.27...v0.12.28)
- Fix U+30FB and U+FF65 in identifier names in ES5 vs. ES6+ ([#1599](https://togithub.com/evanw/esbuild/issues/1599))
The ES6 specification caused two code points that were previously valid in identifier names in ES5 to no longer be valid in identifier names in ES6+. The two code points are:
- `U+30FB` i.e. `KATAKANA MIDDLE DOT` i.e. `・`
- `U+FF65` i.e. `HALFWIDTH KATAKANA MIDDLE DOT` i.e. `・`
This means that using ES6+ parsing rules will fail to parse some valid ES5 code, and generating valid ES5 code may fail to be parsed using ES6+ parsing rules. For example, esbuild would previously fail to parse `x.y・` even though it's valid ES5 code (since it's not valid ES6+ code) and esbuild could generate `{y・:x}` when minifying even though it's not valid ES6+ code (since it's valid ES5 code). This problem is the result of my incorrect assumption that ES6 is a superset of ES5.
As of this release, esbuild will now parse a superset of ES5 and ES6+ and will now quote identifier names when possible if it's not considered to be a valid identifier name in either ES5 or ES6+. In other words, a union of ES5 and ES6 rules is used for parsing and the intersection of ES5 and ES6 rules is used for printing.
- Fix `++` and `--` on class private fields when used with big integers ([#1600](https://togithub.com/evanw/esbuild/issues/1600))
Previously when esbuild lowered class private fields (e.g. `#foo`) to older JavaScript syntax, the transform of the `++` and `--` was not correct if the value is a big integer such as `123n`. The transform in esbuild is similar to Babel's transform which [has the same problem](https://togithub.com/babel/babel/issues/13756). Specifically, the code was transformed into code that either adds or subtracts the number `1` and `123n + 1` throws an exception in JavaScript. This problem has been fixed so this should now work fine starting with this release.
### [`v0.12.27`](https://togithub.com/evanw/esbuild/blob/master/CHANGELOG.md#01227)
[Compare Source](https://togithub.com/evanw/esbuild/compare/v0.12.26...v0.12.27)
- Update JavaScript syntax feature compatibility tables ([#1594](https://togithub.com/evanw/esbuild/issues/1594))
Most JavaScript syntax feature compatibility data is able to be obtained automatically via https://kangax.github.io/compat-table/. However, they are missing data for quite a few new JavaScript features (see ([kangax/compat-table#1034](https://togithub.com/kangax/compat-table/issues/1034))) so data on these new features has to be added manually. This release manually adds a few new entries:
- Top-level await
This feature lets you use `await` at the top level of a module, outside of an `async` function. Doing this holds up the entire module instantiation operation until the awaited expression is resolved or rejected. This release marks this feature as supported in Edge 89, Firefox 89, and Safari 15 (it was already marked as supported in Chrome 89 and Node 14.8). The data source for this is https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await.
- Arbitrary module namespace identifier names
This lets you use arbitrary strings as module namespace identifier names as long as they are valid UTF-16 strings. An example is `export { x as "🍕" }` which can then be imported as `import { "🍕" as y } from "./example.js"`. This release marks this feature as supported in Firefox 87 (it was already marked as supported in Chrome 90 and Node 16). The data source for this is https://bugzilla.mozilla.org/show_bug.cgi?id=1670044.
I would also like to add data for Safari. They have recently added support for arbitrary module namespace identifier names (https://bugs.webkit.org/show_bug.cgi?id=217576) and `export * as` (https://bugs.webkit.org/show_bug.cgi?id=214379). However, I have no idea how to determine which Safari release these bugs correspond to so this compatibility data for Safari has been omitted.
- Avoid unnecessary additional log messages after the server is stopped ([#1589](https://togithub.com/evanw/esbuild/issues/1589))
There is a development server built in to esbuild which is accessible via the `serve()` API call. This returns a promise that resolves to an object with a `stop()` method that immediately terminates the development server. Previously calling this could cause esbuild to print stray log messages since `stop()` could cause plugins to be unregistered while a build is still in progress. With this release, calling `stop()` no longer terminates the development server immediately. It now waits for any active builds to finish first so the builds are not interrupted and left in a confusing state.
- Fix an accidental dependency on Go ≥1.17.0 ([#1585](https://togithub.com/evanw/esbuild/pull/1585))
The source code of this release no longer uses the `math.MaxInt` constant that was introduced in Go version 1.17.0. This constant was preventing esbuild from being compiled on Go version <1.17.0. This fix was contributed by [@davezuko](https://togithub.com/davezuko).
Configuration
📅 Schedule: "every weekend" in timezone Asia/Tokyo.
🚦 Automerge: Enabled.
♻ 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 contains the following updates:
0.12.26
->0.12.28
Release Notes
evanw/esbuild
### [`v0.12.28`](https://togithub.com/evanw/esbuild/blob/master/CHANGELOG.md#01228) [Compare Source](https://togithub.com/evanw/esbuild/compare/v0.12.27...v0.12.28) - Fix U+30FB and U+FF65 in identifier names in ES5 vs. ES6+ ([#1599](https://togithub.com/evanw/esbuild/issues/1599)) The ES6 specification caused two code points that were previously valid in identifier names in ES5 to no longer be valid in identifier names in ES6+. The two code points are: - `U+30FB` i.e. `KATAKANA MIDDLE DOT` i.e. `・` - `U+FF65` i.e. `HALFWIDTH KATAKANA MIDDLE DOT` i.e. `・` This means that using ES6+ parsing rules will fail to parse some valid ES5 code, and generating valid ES5 code may fail to be parsed using ES6+ parsing rules. For example, esbuild would previously fail to parse `x.y・` even though it's valid ES5 code (since it's not valid ES6+ code) and esbuild could generate `{y・:x}` when minifying even though it's not valid ES6+ code (since it's valid ES5 code). This problem is the result of my incorrect assumption that ES6 is a superset of ES5. As of this release, esbuild will now parse a superset of ES5 and ES6+ and will now quote identifier names when possible if it's not considered to be a valid identifier name in either ES5 or ES6+. In other words, a union of ES5 and ES6 rules is used for parsing and the intersection of ES5 and ES6 rules is used for printing. - Fix `++` and `--` on class private fields when used with big integers ([#1600](https://togithub.com/evanw/esbuild/issues/1600)) Previously when esbuild lowered class private fields (e.g. `#foo`) to older JavaScript syntax, the transform of the `++` and `--` was not correct if the value is a big integer such as `123n`. The transform in esbuild is similar to Babel's transform which [has the same problem](https://togithub.com/babel/babel/issues/13756). Specifically, the code was transformed into code that either adds or subtracts the number `1` and `123n + 1` throws an exception in JavaScript. This problem has been fixed so this should now work fine starting with this release. ### [`v0.12.27`](https://togithub.com/evanw/esbuild/blob/master/CHANGELOG.md#01227) [Compare Source](https://togithub.com/evanw/esbuild/compare/v0.12.26...v0.12.27) - Update JavaScript syntax feature compatibility tables ([#1594](https://togithub.com/evanw/esbuild/issues/1594)) Most JavaScript syntax feature compatibility data is able to be obtained automatically via https://kangax.github.io/compat-table/. However, they are missing data for quite a few new JavaScript features (see ([kangax/compat-table#1034](https://togithub.com/kangax/compat-table/issues/1034))) so data on these new features has to be added manually. This release manually adds a few new entries: - Top-level await This feature lets you use `await` at the top level of a module, outside of an `async` function. Doing this holds up the entire module instantiation operation until the awaited expression is resolved or rejected. This release marks this feature as supported in Edge 89, Firefox 89, and Safari 15 (it was already marked as supported in Chrome 89 and Node 14.8). The data source for this is https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await. - Arbitrary module namespace identifier names This lets you use arbitrary strings as module namespace identifier names as long as they are valid UTF-16 strings. An example is `export { x as "🍕" }` which can then be imported as `import { "🍕" as y } from "./example.js"`. This release marks this feature as supported in Firefox 87 (it was already marked as supported in Chrome 90 and Node 16). The data source for this is https://bugzilla.mozilla.org/show_bug.cgi?id=1670044. I would also like to add data for Safari. They have recently added support for arbitrary module namespace identifier names (https://bugs.webkit.org/show_bug.cgi?id=217576) and `export * as` (https://bugs.webkit.org/show_bug.cgi?id=214379). However, I have no idea how to determine which Safari release these bugs correspond to so this compatibility data for Safari has been omitted. - Avoid unnecessary additional log messages after the server is stopped ([#1589](https://togithub.com/evanw/esbuild/issues/1589)) There is a development server built in to esbuild which is accessible via the `serve()` API call. This returns a promise that resolves to an object with a `stop()` method that immediately terminates the development server. Previously calling this could cause esbuild to print stray log messages since `stop()` could cause plugins to be unregistered while a build is still in progress. With this release, calling `stop()` no longer terminates the development server immediately. It now waits for any active builds to finish first so the builds are not interrupted and left in a confusing state. - Fix an accidental dependency on Go ≥1.17.0 ([#1585](https://togithub.com/evanw/esbuild/pull/1585)) The source code of this release no longer uses the `math.MaxInt` constant that was introduced in Go version 1.17.0. This constant was preventing esbuild from being compiled on Go version <1.17.0. This fix was contributed by [@davezuko](https://togithub.com/davezuko).Configuration
📅 Schedule: "every weekend" in timezone Asia/Tokyo.
🚦 Automerge: Enabled.
♻ 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 WhiteSource Renovate. View repository job log here.