release notes
release notes
Published 5/11/2022
PatchContains new featuresFix code generation for export default and /* @__PURE__ */ call (#2203)
The /* @__PURE__ */ comment annotation can be added to function calls to indicate that they are side-effect free. These annotations are passed through into the output by esbuild since many JavaScript tools understand them. However, there was an edge case where printing this comment before a function call caused esbuild to fail to parenthesize a function literal because it thought it was no longer at the start of the expression. This problem has been fixed:
// Original code
export default /* @__PURE__ */ (function() {
})()
// Old output
export default /* @__PURE__ */ function() {
}();
// New output
export default /* @__PURE__ */ (function() {
})();
Preserve ... before JSX child expressions (#2245)
TypeScript 4.5 changed how JSX child expressions that start with ... are emitted. Previously the ... was omitted but starting with TypeScript 4.5, the ... is now preserved instead. This release updates esbuild to match TypeScript's new output in this case:
// Original code
console.log(<a>{...b}</a>)
// Old output
console.log(/* @__PURE__ */ React.createElement("a", null, b));
// New output
console.log(/* @__PURE__ */ React.createElement("a", null, ...b));
Note that this behavior is TypeScript-specific. Babel doesn't support the ... token at all (it gives the error "Spread children are not supported in React").
Slightly adjust esbuild's handling of the browser field in package.json (#2239)
This release changes esbuild's interpretation of browser path remapping to fix a regression that was introduced in esbuild version 0.14.21. Browserify has a bug where it incorrectly matches package paths to relative paths in the browser field, and esbuild replicates this bug for compatibility with Browserify. I have a set of tests that I use to verify that esbuild's replication of this Browserify is accurate here: https://github.com/evanw/package-json-browser-tests. However, I was missing a test case and esbuild's behavior diverges from Browserify in this case. This release now handles this edge case as well:
entry.js:
require('pkg/sub')
node_modules/pkg/package.json:
{
"browser": {
"./sub": "./sub/foo.js",
"./sub/sub.js": "./sub/foo.js"
}
}
node_modules/pkg/sub/foo.js:
require('sub')
node_modules/sub/index.js:
console.log('works')
The import path sub in require('sub') was previously matching the remapping "./sub/sub.js": "./sub/foo.js" but with this release it should now no longer match that remapping. Now require('sub') will only match the remapping "./sub/sub": "./sub/foo.js" (without the trailing .js). Browserify apparently only matches without the .js suffix here.
release notes
Published 5/11/2022
PatchContains new featuresFix code generation for export default and /* @__PURE__ */ call (#2203)
The /* @__PURE__ */ comment annotation can be added to function calls to indicate that they are side-effect free. These annotations are passed through into the output by esbuild since many JavaScript tools understand them. However, there was an edge case where printing this comment before a function call caused esbuild to fail to parenthesize a function literal because it thought it was no longer at the start of the expression. This problem has been fixed:
// Original code
export default /* @__PURE__ */ (function() {
})()
// Old output
export default /* @__PURE__ */ function() {
}();
// New output
export default /* @__PURE__ */ (function() {
})();
Preserve ... before JSX child expressions (#2245)
TypeScript 4.5 changed how JSX child expressions that start with ... are emitted. Previously the ... was omitted but starting with TypeScript 4.5, the ... is now preserved instead. This release updates esbuild to match TypeScript's new output in this case:
// Original code
console.log(<a>{...b}</a>)
// Old output
console.log(/* @__PURE__ */ React.createElement("a", null, b));
// New output
console.log(/* @__PURE__ */ React.createElement("a", null, ...b));
Note that this behavior is TypeScript-specific. Babel doesn't support the ... token at all (it gives the error "Spread children are not supported in React").
Slightly adjust esbuild's handling of the browser field in package.json (#2239)
This release changes esbuild's interpretation of browser path remapping to fix a regression that was introduced in esbuild version 0.14.21. Browserify has a bug where it incorrectly matches package paths to relative paths in the browser field, and esbuild replicates this bug for compatibility with Browserify. I have a set of tests that I use to verify that esbuild's replication of this Browserify is accurate here: https://github.com/evanw/package-json-browser-tests. However, I was missing a test case and esbuild's behavior diverges from Browserify in this case. This release now handles this edge case as well:
entry.js:
require('pkg/sub')
node_modules/pkg/package.json:
{
"browser": {
"./sub": "./sub/foo.js",
"./sub/sub.js": "./sub/foo.js"
}
}
node_modules/pkg/sub/foo.js:
require('sub')
node_modules/sub/index.js:
console.log('works')
The import path sub in require('sub') was previously matching the remapping "./sub/sub.js": "./sub/foo.js" but with this release it should now no longer match that remapping. Now require('sub') will only match the remapping "./sub/sub": "./sub/foo.js" (without the trailing .js). Browserify apparently only matches without the .js suffix here.
An extremely fast bundler for the web