Skip to content

Commit

Permalink
bump(deps): update dependency esbuild to ^0.19.7 (#712)
Browse files Browse the repository at this point in the history
[![Mend Renovate logo
banner](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [esbuild](https://togithub.com/evanw/esbuild) | [`^0.19.6` ->
`^0.19.7`](https://renovatebot.com/diffs/npm/esbuild/0.19.6/0.19.7) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/esbuild/0.19.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/esbuild/0.19.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/esbuild/0.19.6/0.19.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/esbuild/0.19.6/0.19.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>evanw/esbuild (esbuild)</summary>

###
[`v0.19.7`](https://togithub.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0197)

[Compare
Source](https://togithub.com/evanw/esbuild/compare/v0.19.6...v0.19.7)

- Add support for bundling code that uses import attributes
([#&#8203;3384](https://togithub.com/evanw/esbuild/issues/3384))

JavaScript is gaining new syntax for associating a map of string
key-value pairs with individual ESM imports. The proposal is still a
work in progress and is still undergoing significant changes before
being finalized. However, the first iteration has already been shipping
in Chromium-based browsers for a while, and the second iteration has
landed in V8 and is now shipping in node, so it makes sense for esbuild
to support it. Here are the two major iterations of this proposal (so
far):

    1.  Import assertions (deprecated, will not be standardized)
        -   Uses the `assert` keyword
        -   Does *not* affect module resolution
        -   Causes an error if the assertion fails
        -   Shipping in Chrome 91+ (and in esbuild 0.11.22+)

    2.  Import attributes (currently set to become standardized)
        -   Uses the `with` keyword
        -   Affects module resolution
        -   Unknown attributes cause an error
        -   Shipping in node 21+

You can already use esbuild to bundle code that uses import assertions
(the first iteration). However, this feature is mostly useless for
bundlers because import assertions are not allowed to affect module
resolution. It's basically only useful as an annotation on external
imports, which esbuild will then preserve in the output for use in a
browser (which would otherwise refuse to load certain imports).

With this release, esbuild now supports bundling code that uses import
attributes (the second iteration). This is much more useful for bundlers
because they are allowed to affect module resolution, which means the
key-value pairs can be provided to plugins. Here's an example, which
uses esbuild's built-in support for the upcoming [JSON module
standard](https://togithub.com/tc39/proposal-json-modules):

    ```js
    // On static imports
    import foo from './package.json' with { type: 'json' }
    console.log(foo)

    // On dynamic imports
const bar = await import('./package.json', { with: { type: 'json' } })
    console.log(bar)
    ```

One important consequence of the change in semantics between import
assertions and import attributes is that two imports with identical
paths but different import attributes are now considered to be different
modules. This is because the import attributes are provided to the
loader, which might then use those attributes during loading. For
example, you could imagine an image loader that produces an image of a
different size depending on the import attributes.

Import attributes are now reported in the
[metafile](https://esbuild.github.io/api/#metafile) and are now provided
to [on-load plugins](https://esbuild.github.io/plugins/#on-load) as a
map in the `with` property. For example, here's an esbuild plugin that
turns all imports with a `type` import attribute equal to `'cheese'`
into a module that exports the cheese emoji:

    ```js
    const cheesePlugin = {
      name: 'cheese',
      setup(build) {
        build.onLoad({ filter: /.*/ }, args => {
          if (args.with.type === 'cheese') return {
            contents: `export default "🧀"`,
          }
        })
      }
    }

    require('esbuild').build({
      bundle: true,
      write: false,
      stdin: {
        contents: `
import foo from 'data:text/javascript,' with { type: 'cheese' }
          console.log(foo)
        `,
      },
      plugins: [cheesePlugin],
    }).then(result => {
      const code = new Function(result.outputFiles[0].text)
      code()
    })
    ```

Warning: It's possible that the second iteration of this feature may
change significantly again even though it's already shipping in real
JavaScript VMs (since it has already happened once before). In that
case, esbuild may end up adjusting its implementation to match the
eventual standard behavior. So keep in mind that by using this, you are
using an unstable upcoming JavaScript feature that may undergo breaking
changes in the future.

- Adjust TypeScript experimental decorator behavior
([#&#8203;3230](https://togithub.com/evanw/esbuild/issues/3230),
[#&#8203;3326](https://togithub.com/evanw/esbuild/issues/3326),
[#&#8203;3394](https://togithub.com/evanw/esbuild/issues/3394))

With this release, esbuild will now allow TypeScript experimental
decorators to access both static class properties and `#private` class
names. For example:

    ```js
    const check =
      <T,>(a: T, b: T): PropertyDecorator =>
        () => console.log(a === b)

    async function test() {
      class Foo {
        static #foo = 1
        static bar = 1 + Foo.#foo
        @&#8203;check(Foo.#foo, 1) a: any
        @&#8203;check(Foo.bar, await Promise.resolve(2)) b: any
      }
    }

    test().then(() => console.log('pass'))
    ```

This will now print `true true pass` when compiled by esbuild.
Previously esbuild evaluated TypeScript decorators outside of the class
body, so it didn't allow decorators to access `Foo` or `#foo`. Now
esbuild does something different, although it's hard to concisely
explain exactly what esbuild is doing now (see the background section
below for more information).

Note that TypeScript's experimental decorator support is currently
buggy: TypeScript's compiler passes this test if only the first `@check`
is present or if only the second `@check` is present, but TypeScript's
compiler fails this test if both checks are present together. I haven't
changed esbuild to match TypeScript's behavior exactly here because I'm
waiting for TypeScript to fix these bugs instead.

Some background: TypeScript experimental decorators don't have
consistent semantics regarding the context that the decorators are
evaluated in. For example, TypeScript will let you use `await` within a
decorator, which implies that the decorator runs outside the class body
(since `await` isn't supported inside a class body), but TypeScript will
also let you use `#private` names, which implies that the decorator runs
inside the class body (since `#private` names are only supported inside
a class body). The value of `this` in a decorator is also buggy (the
run-time value of `this` changes if any decorator in the class uses a
`#private` name but the type of `this` doesn't change, leading to the
type checker no longer matching reality). These inconsistent semantics
make it hard for esbuild to implement this feature as decorator
evaluation happens in some superposition of both inside and outside the
class body that is particular to the internal implementation details of
the TypeScript compiler.

- Forbid `--keep-names` when targeting old browsers
([#&#8203;3477](https://togithub.com/evanw/esbuild/issues/3477))

The `--keep-names` setting needs to be able to assign to the `name`
property on functions and classes. However, before ES6 this property was
non-configurable, and attempting to assign to it would throw an error.
So with this release, esbuild will no longer allow you to enable this
setting while also targeting a really old browser.

</details>

---

### 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.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/levaintech/contented).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy41OS44IiwidXBkYXRlZEluVmVyIjoiMzcuNTkuOCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
  • Loading branch information
renovate[bot] authored Nov 22, 2023
1 parent 92c53ab commit 69cc61e
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 77 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"@types/node": "^18.18.6",
"@typescript-eslint/eslint-plugin": "^6.12.0",
"@typescript-eslint/parser": "^6.12.0",
"esbuild": "^0.19.6",
"esbuild": "^0.19.7",
"esbuild-jest": "^0.5.0",
"eslint": "^8.54.0",
"eslint-config-airbnb-base": "^15.0.0",
Expand Down
152 changes: 76 additions & 76 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 69cc61e

Please sign in to comment.