Closed renovate[bot] closed 2 years ago
Merging #147 (168464d) into develop (43c8714) will not change coverage. The diff coverage is
n/a
.
@@ Coverage Diff @@
## develop #147 +/- ##
========================================
Coverage 82.89% 82.89%
========================================
Files 14 14
Lines 345 345
Branches 60 60
========================================
Hits 286 286
Misses 54 54
Partials 5 5
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.
Kudos, SonarCloud Quality Gate passed!
0 Bugs
0 Vulnerabilities
0 Security Hotspots
0 Code Smells
No Coverage information
0.0% Duplication
This PR contains the following updates:
0.14.51
->0.15.6
Release Notes
evanw/esbuild
### [`v0.15.6`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0156) [Compare Source](https://togithub.com/evanw/esbuild/compare/v0.15.5...v0.15.6) - Lower `for await` loops ([#1930](https://togithub.com/evanw/esbuild/issues/1930)) This release lowers `for await` loops to the equivalent `for` loop containing `await` when esbuild is configured such that `for await` loops are unsupported. This transform still requires at least generator functions to be supported since esbuild's lowering of `await` currently relies on generators. This new transformation is mostly modeled after what the TypeScript compiler does. Here's an example: ```js async function f() { for await (let x of y) x() } ``` The code above will now become the following code with `--target=es2017` (omitting the code for the `__forAwait` helper function): ```js async function f() { try { for (var iter = __forAwait(y), more, temp, error; more = !(temp = await iter.next()).done; more = false) { let x = temp.value; x(); } } catch (temp) { error = [temp]; } finally { try { more && (temp = iter.return) && await temp.call(iter); } finally { if (error) throw error[0]; } } } ``` - Automatically fix invalid `supported` configurations ([#2497](https://togithub.com/evanw/esbuild/issues/2497)) The `--target=` setting lets you tell esbuild to target a specific version of one or more JavaScript runtimes such as `chrome80,node14` and esbuild will restrict its output to only those features supported by all targeted JavaScript runtimes. More recently, esbuild introduced the `--supported:` setting that lets you override which features are supported on a per-feature basis. However, this now lets you configure nonsensical things such as `--supported:async-await=false --supported:async-generator=true`. Previously doing this could result in esbuild building successfully but producing invalid output. Starting with this release, esbuild will now attempt to automatically fix nonsensical feature override configurations by introducing more overrides until the configuration makes sense. So now the configuration from previous example will be changed such that `async-await=false` implies `async-generator=false`. The full list of implications that were introduced is below: - `async-await=false` implies: - `async-generator=false` - `for-await=false` - `top-level-await=false` - `generator=false` implies: - `async-generator=false` - `object-accessors=false` implies: - `class-private-accessor=false` - `class-private-static-accessor=false` - `class-field=false` implies: - `class-private-field=false` - `class-static-field=false` implies: - `class-private-static-field=false` - `class=false` implies: - `class-field=false` - `class-private-accessor=false` - `class-private-brand-check=false` - `class-private-field=false` - `class-private-method=false` - `class-private-static-accessor=false` - `class-private-static-field=false` - `class-private-static-method=false` - `class-static-blocks=false` - `class-static-field=false` - Implement a small minification improvement ([#2496](https://togithub.com/evanw/esbuild/issues/2496)) Some people write code that contains a label with an immediate break such as `x: break x`. Previously this code was not removed during minification but it will now be removed during minification starting with this release. - Fix installing esbuild via Yarn with `enableScripts: false` configured ([#2457](https://togithub.com/evanw/esbuild/pull/2457)) If esbuild is installed with Yarn with the `enableScripts: false` setting configured, then Yarn will not "unplug" the `esbuild` package (i.e. it will keep the entire package inside a `.zip` file). This messes with esbuild's library code that extracts the platform-specific binary executable because that code copies the binary executable into the esbuild package directory, and Yarn's `.zip` file system shim doesn't let you write to a directory inside of a `.zip` file. This release fixes this problem by writing to the `node_modules/.cache/esbuild` directory instead in this case. So you should now be able to use esbuild with Yarn when `enableScripts: false` is configured. This fix was contributed by [@jonaskuske](https://togithub.com/jonaskuske). ### [`v0.15.5`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0155) [Compare Source](https://togithub.com/evanw/esbuild/compare/v0.15.4...v0.15.5) - Fix issues with Yarn PnP and Yarn's workspaces feature ([#2476](https://togithub.com/evanw/esbuild/issues/2476)) This release makes sure esbuild works with a Yarn feature called [workspaces](https://yarnpkg.com/features/workspaces/). Previously esbuild wasn't tested in this scenario, but this scenario now has test coverage. Getting this to work involved further tweaks to esbuild's custom code for what happens after Yarn PnP's path resolution algorithm runs, which is not currently covered by Yarn's PnP specification. These tweaks also fix `exports` map resolution with Yarn PnP for non-empty subpaths, which wasn't previously working. ### [`v0.15.4`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0154) [Compare Source](https://togithub.com/evanw/esbuild/compare/v0.15.3...v0.15.4) - Consider TypeScript import assignments to be side-effect free ([#2468](https://togithub.com/evanw/esbuild/issues/2468)) TypeScript has a [legacy import syntax](https://www.typescriptlang.org/docs/handbook/namespaces.html#aliases) for working with TypeScript namespaces that looks like this: ```ts import { someNamespace } from './some-file' import bar = someNamespace.foo; // some-file.ts export namespace someNamespace { export let foo = 123 } ``` Since esbuild converts TypeScript into JavaScript one file at a time, it doesn't know if `bar` is supposed to be a value or a type (or both, which TypeScript actually allows in this case). This is problematic because values are supposed to be kept during the conversion but types are supposed to be removed during the conversion. Currently esbuild keeps `bar` in the output, which is done because `someNamespace.foo` is a property access and property accesses run code that could potentially have a side effect (although there is no side effect in this case). With this release, esbuild will now consider `someNamespace.foo` to have no side effects. This means `bar` will now be removed when bundling and when tree shaking is enabled. Note that it will still not be removed when tree shaking is disabled. This is because in this mode, esbuild supports adding additional code to the end of the generated output that's in the same scope as the module. That code could potentially make use of `bar`, so it would be incorrect to remove it. If you want `bar` to be removed, you'll have to enable tree shaking (which tells esbuild that nothing else depends on the unexported top-level symbols in the generated output). - Change the order of the banner and the `"use strict"` directive ([#2467](https://togithub.com/evanw/esbuild/issues/2467)) Previously the top of the file contained the following things in order: 1. The hashbang comment (see below) from the source code, if present 2. The `"use strict"` directive from the source code, if present 3. The content of esbuild's `banner` API option, if specified This was problematic for people that used the `banner` API option to insert the hashbang comment instead of using esbuild's hashbang comment preservation feature. So with this release, the order has now been changed to: 1. The hashbang comment (see below) from the source code, if present 2. The content of esbuild's `banner` API option, if specified 3. The `"use strict"` directive from the source code, if present I'm considering this change to be a bug fix instead of a breaking change because esbuild's documentation states that the `banner` API option can be used to "insert an arbitrary string at the beginning of generated JavaScript files". While this isn't technically true because esbuild may still insert the original hashbang comment before the banner, it's at least more correct now because the banner will now come before the `"use strict"` directive. For context: JavaScript files recently allowed using a [hashbang comment](https://togithub.com/tc39/proposal-hashbang), which starts with `#!` and which must start at the very first character of the file. It allows Unix systems to execute the file directly as a script without needing to prefix it by the `node` command. This comment typically has the value `#!/usr/bin/env node`. Hashbang comments will be a part of ES2023 when it's released next year. - Fix `exports` maps with Yarn PnP path resolution ([#2473](https://togithub.com/evanw/esbuild/issues/2473)) The Yarn PnP specification says that to resolve a package path, you first resolve it to the absolute path of a directory, and then you run node's module resolution algorithm on it. Previously esbuild followed this part of the specification. However, doing this means that `exports` in `package.json` is not respected because node's module resolution algorithm doesn't interpret `exports` for absolute paths. So with this release, esbuild will now use a modified algorithm that deviates from both specifications but that should hopefully behave more similar to what Yarn actually does: node's module resolution algorithm is run with the original import path but starting from the directory returned by Yarn PnP. ### [`v0.15.3`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0153) [Compare Source](https://togithub.com/evanw/esbuild/compare/v0.15.2...v0.15.3) - Change the Yarn PnP manifest to a singleton ([#2463](https://togithub.com/evanw/esbuild/issues/2463)) Previously esbuild searched for the Yarn PnP manifest in the parent directories of each file. But with Yarn's `enableGlobalCache` setting it's possible to configure Yarn PnP's implementation to reach outside of the directory subtree containing the Yarn PnP manifest. This was causing esbuild to fail to bundle projects with the `enableGlobalCache` setting enabled. To handle this case, *esbuild will now only search for the Yarn PnP manifest in the current working directory of the esbuild process*. If you're using esbuild's CLI, this means you will now have to `cd` into the appropriate directory first. If you're using esbuild's API, you can override esbuild's value for the current working directory with the `absWorkingDir` API option. - Fix Yarn PnP resolution failures due to backslashes in paths on Windows ([#2462](https://togithub.com/evanw/esbuild/issues/2462)) Previously dependencies of a Yarn PnP virtual dependency failed to resolve on Windows. This was because Windows uses `\` instead of `/` as a path separator, and the path manipulation algorithms used for Yarn PnP expected `/`. This release converts `\` into `/` in Windows paths, which fixes this issue. - Fix `sideEffects` patterns containing slashes on Windows ([#2465](https://togithub.com/evanw/esbuild/issues/2465)) The `sideEffects` field in `package.json` lets you specify an array of patterns to mark which files have side effects (which causes all other files to be considered to not have side effects by exclusion). That looks like this: ```json "sideEffects": [ "**/index.js", "**/index.prod.js" ] ``` However, the presence of the `/` character in the pattern meant that the pattern failed to match Windows-style paths, which broke `sideEffects` on Windows in this case. This release fixes this problem by adding additional code to handle Windows-style paths. ### [`v0.15.2`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0152) [Compare Source](https://togithub.com/evanw/esbuild/compare/v0.15.1...v0.15.2) - Fix Yarn PnP issue with packages containing `index.js` ([#2455](https://togithub.com/evanw/esbuild/issues/2455), [#2461](https://togithub.com/evanw/esbuild/issues/2461)) Yarn PnP's tests require the resolved paths to end in `/`. That's not how the rest of esbuild's internals work, however, and doing this messed up esbuild's node module path resolution regarding automatically-detected `index.js` files. Previously packages that relied on implicit `index.js` resolution rules didn't work with esbuild under Yarn PnP. Removing this slash has fixed esbuild's path resolution behavior regarding `index.js`, which should now the same both with and without Yarn PnP. - Fix Yarn PnP support for `extends` in `tsconfig.json` ([#2456](https://togithub.com/evanw/esbuild/issues/2456)) Previously using `extends` in `tsconfig.json` with a path in a Yarn PnP package didn't work. This is because the process of setting up package path resolution rules requires parsing `tsconfig.json` files (due to the `baseUrl` and `paths` features) and resolving `extends` to a package path requires package path resolution rules to already be set up, which is a circular dependency. This cycle is broken by using special rules for `extends` in `tsconfig.json` that bypasses esbuild's normal package path resolution process. This is why using `extends` with a Yarn PnP package didn't automatically work. With this release, these special rules have been modified to check for a Yarn PnP manifest so this case should work now. - Fix Yarn PnP support in `esbuild-wasm` ([#2458](https://togithub.com/evanw/esbuild/issues/2458)) When running esbuild via WebAssembly, Yarn PnP support previously failed because Go's file system internals return `EINVAL` when trying to read a `.zip` file as a directory when run with WebAssembly. This was unexpected because Go's file system internals return `ENOTDIR` for this case on native. This release updates esbuild to treat `EINVAL` like `ENOTDIR` in this case, which fixes using `esbuild-wasm` to bundle a Yarn PnP project. Note that to be able to use `esbuild-wasm` for Yarn PnP successfully, you currently have to run it using `node` instead of `yarn node`. This is because the file system shim that Yarn overwrites node's native file system API with currently generates invalid file descriptors with negative values when inside a `.zip` file. This prevents esbuild from working correctly because Go's file system internals don't expect syscalls that succeed without an error to return an invalid file descriptor. Yarn is working on fixing their use of invalid file descriptors. ### [`v0.15.1`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0151) [Compare Source](https://togithub.com/evanw/esbuild/compare/v0.15.0...v0.15.1) - Update esbuild's Yarn Plug'n'Play implementation to match the latest specification changes ([#2452](https://togithub.com/evanw/esbuild/issues/2452), [#2453](https://togithub.com/evanw/esbuild/pull/2453)) This release updates esbuild's implementation of Yarn Plug'n'Play to match some changes to Yarn's specification that just landed. The changes are as follows: - Check for platform-specific absolute paths instead of always for the `/` prefix The specification previously said that Yarn Plug'n'Play path resolution rules should not apply for paths that start with `/`. The intent was to avoid accidentally processing absolute paths. However, absolute paths on Windows such as `C:\project` start with drive letters instead of with `/`. So the specification was changed to instead explicitly avoid processing absolute paths. - Make `$$virtual` an alias for `__virtual__` Supporting Yarn-style path resolution requires implementing a custom Yarn-specific path traversal scheme where certain path segments are considered no-ops. Specifically any path containing segments of the form `__virtual__/Configuration
📅 Schedule: Branch creation - "before 3am on the first day of the month" (UTC), Automerge - At any time (no schedule defined).
🚦 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 Mend Renovate. View repository job log here.