Skip to content

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Oct 11, 2025

This PR contains the following updates:

Package Change Age Confidence
@changesets/cli (source) 2.29.72.29.8 age confidence
@tsconfig/node-lts (source) 22.0.222.0.4 age confidence
@tsconfig/node-ts (source) 23.6.123.6.2 age confidence
@tsconfig/strictest (source) 2.0.62.0.8 age confidence
@types/node (source) 22.18.822.19.7 age confidence
esbuild ^0.25.10^0.27.0 age confidence
tsdown (source) ^0.15.6^0.20.0 age confidence

Release Notes

changesets/changesets (@​changesets/cli)

v2.29.8

Compare Source

tsconfig/bases (@​tsconfig/node-lts)

v22.0.4

Compare Source

v22.0.3

Compare Source

evanw/esbuild (esbuild)

v0.27.2

Compare Source

  • Allow import path specifiers starting with #/ (#​4361)

    Previously the specification for package.json disallowed import path specifiers starting with #/, but this restriction has recently been relaxed and support for it is being added across the JavaScript ecosystem. One use case is using it for a wildcard pattern such as mapping #/* to ./src/* (previously you had to use another character such as #_* instead, which was more confusing). There is some more context in nodejs/node#49182.

    This change was contributed by @​hybrist.

  • Automatically add the -webkit-mask prefix (#​4357, #​4358)

    This release automatically adds the -webkit- vendor prefix for the mask CSS shorthand property:

    /* Original code */
    main {
      mask: url(x.png) center/5rem no-repeat
    }
    
    /* Old output (with --target=chrome110) */
    main {
      mask: url(x.png) center/5rem no-repeat;
    }
    
    /* New output (with --target=chrome110) */
    main {
      -webkit-mask: url(x.png) center/5rem no-repeat;
      mask: url(x.png) center/5rem no-repeat;
    }

    This change was contributed by @​BPJEnnova.

  • Additional minification of switch statements (#​4176, #​4359)

    This release contains additional minification patterns for reducing switch statements. Here is an example:

    // Original code
    switch (x) {
      case 0:
        foo()
        break
      case 1:
      default:
        bar()
    }
    
    // Old output (with --minify)
    switch(x){case 0:foo();break;case 1:default:bar()}
    
    // New output (with --minify)
    x===0?foo():bar();
  • Forbid using declarations inside switch clauses (#​4323)

    This is a rare change to remove something that was previously possible. The Explicit Resource Management proposal introduced using declarations. These were previously allowed inside case and default clauses in switch statements. This had well-defined semantics and was already widely implemented (by V8, SpiderMonkey, TypeScript, esbuild, and others). However, it was considered to be too confusing because of how scope works in switch statements, so it has been removed from the specification. This edge case will now be a syntax error. See tc39/proposal-explicit-resource-management#215 and rbuckton/ecma262#14 for details.

    Here is an example of code that is no longer allowed:

    switch (mode) {
      case 'read':
        using readLock = db.read()
        return readAll(readLock)
    
      case 'write':
        using writeLock = db.write()
        return writeAll(writeLock)
    }

    That code will now have to be modified to look like this instead (note the additional { and } block statements around each case body):

    switch (mode) {
      case 'read': {
        using readLock = db.read()
        return readAll(readLock)
      }
      case 'write': {
        using writeLock = db.write()
        return writeAll(writeLock)
      }
    }

    This is not being released in one of esbuild's breaking change releases since this feature hasn't been finalized yet, and esbuild always tracks the current state of the specification (so esbuild's previous behavior was arguably incorrect).

v0.27.1

Compare Source

  • Fix bundler bug with var nested inside if (#​4348)

    This release fixes a bug with the bundler that happens when importing an ES module using require (which causes it to be wrapped) and there's a top-level var inside an if statement without being wrapped in a { ... } block (and a few other conditions). The bundling transform needed to hoist these var declarations outside of the lazy ES module wrapper for correctness. See the issue for details.

  • Fix minifier bug with for inside try inside label (#​4351)

    This fixes an old regression from version v0.21.4. Some code was introduced to move the label inside the try statement to address a problem with transforming labeled for await loops to avoid the await (the transformation involves converting the for await loop into a for loop and wrapping it in a try statement). However, it introduces problems for cross-compiled JVM code that uses all three of these features heavily. This release restricts this transform to only apply to for loops that esbuild itself generates internally as part of the for await transform. Here is an example of some affected code:

    // Original code
    d: {
      e: {
        try {
          while (1) { break d }
        } catch { break e; }
      }
    }
    
    // Old output (with --minify)
    a:try{e:for(;;)break a}catch{break e}
    
    // New output (with --minify)
    a:e:try{for(;;)break a}catch{break e}
  • Inline IIFEs containing a single expression (#​4354)

    Previously inlining of IIFEs (immediately-invoked function expressions) only worked if the body contained a single return statement. Now it should also work if the body contains a single expression statement instead:

    // Original code
    const foo = () => {
      const cb = () => {
        console.log(x())
      }
      return cb()
    }
    
    // Old output (with --minify)
    const foo=()=>(()=>{console.log(x())})();
    
    // New output (with --minify)
    const foo=()=>{console.log(x())};
  • The minifier now strips empty finally clauses (#​4353)

    This improvement means that finally clauses containing dead code can potentially cause the associated try statement to be removed from the output entirely in minified builds:

    // Original code
    function foo(callback) {
      if (DEBUG) stack.push(callback.name);
      try {
        callback();
      } finally {
        if (DEBUG) stack.pop();
      }
    }
    
    // Old output (with --minify --define:DEBUG=false)
    function foo(a){try{a()}finally{}}
    
    // New output (with --minify --define:DEBUG=false)
    function foo(a){a()}
  • Allow tree-shaking of the Symbol constructor

    With this release, calling Symbol is now considered to be side-effect free when the argument is known to be a primitive value. This means esbuild can now tree-shake module-level symbol variables:

    // Original code
    const a = Symbol('foo')
    const b = Symbol(bar)
    
    // Old output (with --tree-shaking=true)
    const a = Symbol("foo");
    const b = Symbol(bar);
    
    // New output (with --tree-shaking=true)
    const b = Symbol(bar);

v0.27.0

Compare Source

This release deliberately contains backwards-incompatible changes. To avoid automatically picking up releases like this, you should either be pinning the exact version of esbuild in your package.json file (recommended) or be using a version range syntax that only accepts patch upgrades such as ^0.26.0 or ~0.26.0. See npm's documentation about semver for more information.

  • Use Uint8Array.fromBase64 if available (#​4286)

    With this release, esbuild's binary loader will now use the new Uint8Array.fromBase64 function unless it's unavailable in the configured target environment. If it's unavailable, esbuild's previous code for this will be used as a fallback. Note that this means you may now need to specify target when using this feature with Node (for example --target=node22) unless you're using Node v25+.

  • Update the Go compiler from v1.23.12 to v1.25.4 (#​4208, #​4311)

    This raises the operating system requirements for running esbuild:

    • Linux: now requires a kernel version of 3.2 or later
    • macOS: now requires macOS 12 (Monterey) or later

v0.26.0

Compare Source

  • Enable trusted publishing (#​4281)

    GitHub and npm are recommending that maintainers for packages such as esbuild switch to trusted publishing. With this release, a VM on GitHub will now build and publish all of esbuild's packages to npm instead of me. In theory.

    Unfortunately there isn't really a way to test that this works other than to do it live. So this release is that live test. Hopefully this release is uneventful and is exactly the same as the previous one (well, except for the green provenance attestation checkmark on npm that happens with trusted publishing).

v0.25.12

Compare Source

  • Fix a minification regression with CSS media queries (#​4315)

    The previous release introduced support for parsing media queries which unintentionally introduced a regression with the removal of duplicate media rules during minification. Specifically the grammar for @media <media-type> and <media-condition-without-or> { ... } was missing an equality check for the <media-condition-without-or> part, so rules with different suffix clauses in this position would incorrectly compare equal and be deduplicated. This release fixes the regression.

  • Update the list of known JavaScript globals (#​4310)

    This release updates esbuild's internal list of known JavaScript globals. These are globals that are known to not have side-effects when the property is accessed. For example, accessing the global Array property is considered to be side-effect free but accessing the global scrollY property can trigger a layout, which is a side-effect. This is used by esbuild's tree-shaking to safely remove unused code that is known to be side-effect free. This update adds the following global properties:

    From ES2017:

    • Atomics
    • SharedArrayBuffer

    From ES2020:

    • BigInt64Array
    • BigUint64Array

    From ES2021:

    • FinalizationRegistry
    • WeakRef

    From ES2025:

    • Float16Array
    • Iterator

    Note that this does not indicate that constructing any of these objects is side-effect free, just that accessing the identifier is side-effect free. For example, this now allows esbuild to tree-shake classes that extend from Iterator:

    // This can now be tree-shaken by esbuild:
    class ExampleIterator extends Iterator {}
  • Add support for the new @view-transition CSS rule (#​4313)

    With this release, esbuild now has improved support for pretty-printing and minifying the new @view-transition rule (which esbuild was previously unaware of):

    /* Original code */
    @&#8203;view-transition {
      navigation: auto;
      types: check;
    }
    
    /* Old output */
    @&#8203;view-transition { navigation: auto; types: check; }
    
    /* New output */
    @&#8203;view-transition {
      navigation: auto;
      types: check;
    }

    The new view transition feature provides a mechanism for creating animated transitions between documents in a multi-page app. You can read more about view transition rules here.

    This change was contributed by @​yisibl.

  • Trim CSS rules that will never match

    The CSS minifier will now remove rules whose selectors contain :is() and :where() as those selectors will never match. These selectors can currently be automatically generated by esbuild when you give esbuild nonsensical input such as the following:

    /* Original code */
    div:before {
      color: green;
      &.foo {
        color: red;
      }
    }
    
    /* Old output (with --supported:nesting=false --minify) */
    div:before{color:green}:is().foo{color:red}
    
    /* New output (with --supported:nesting=false --minify) */
    div:before{color:green}

    This input is nonsensical because CSS nesting is (unfortunately) not supported inside of pseudo-elements such as :before. Currently esbuild generates a rule containing :is() in this case when you tell esbuild to transform nested CSS into non-nested CSS. I think it's reasonable to do that as it sort of helps explain what's going on (or at least indicates that something is wrong in the output). It shouldn't be present in minified code, however, so this release now strips it out.

v0.25.11

Compare Source

  • Add support for with { type: 'bytes' } imports (#​4292)

    The import bytes proposal has reached stage 2.7 in the TC39 process, which means that although it isn't quite recommended for implementation, it's generally approved and ready for validation. Furthermore it has already been implemented by Deno and Webpack. So with this release, esbuild will also add support for this. It behaves exactly the same as esbuild's existing binary loader. Here's an example:

    import data from './image.png' with { type: 'bytes' }
    const view = new DataView(data.buffer, 0, 24)
    const width = view.getInt32(16)
    const height = view.getInt32(20)
    console.log('size:', width + '\xD7' + height)
  • Lower CSS media query range syntax (#​3748, #​4293)

    With this release, esbuild will now transform CSS media query range syntax into equivalent syntax using min-/max- prefixes for older browsers. For example, the following CSS:

    @&#8203;media (640px <= width <= 960px) {
      main {
        display: flex;
      }
    }

    will be transformed like this with a target such as --target=chrome100 (or more specifically with --supported:media-range=false if desired):

    @&#8203;media (min-width: 640px) and (max-width: 960px) {
      main {
        display: flex;
      }
    }
rolldown/tsdown (tsdown)

v0.20.1

Compare Source

   🚀 Features
    View changes on GitHub

v0.20.0

Compare Source

   🚨 Breaking Changes
   🚀 Features
   🐞 Bug Fixes
   🏎 Performance
    View changes on GitHub

v0.19.0

Compare Source

   🚨 Breaking Changes
   🚀 Features
   🐞 Bug Fixes
   🏎 Performance
    View changes on GitHub

v0.18.4

Compare Source

   🚀 Features
    View changes on GitHub

v0.18.3

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v0.18.2

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v0.18.1

Compare Source

   🚀 Features
export default defineConfig({
  entry: {
    '*': './src/*.ts',
    'data-loaders': './src/data-loaders/entries/index.ts',
    'data-loaders/*': './src/data-loaders/entries/!(index).ts',
    'volar/*': './src/volar/entries/*.ts',
  },
}
   🐞 Bug Fixes
    View changes on GitHub

v0.18.0

Compare Source

   🚨 Breaking Changes

v0.17.4

Compare Source

   🚨 Breaking Changes
   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v0.17.3

Compare Source

   🚀 Features
  • copy: Support glob in copy  -  by @​kricsleo and @​sxzz in #​637 (c1fd4)
    • This may be a breaking change, as the behavior has changed again in v0.17.4. Please upgrade to v0.17.4 and verify the issue.
   🐞 Bug Fixes
    View changes on GitHub

v0.17.2

Compare Source

   🐞 Bug Fixes
    View changes on GitHub

v0.17.1

Compare Source

   🐞 Bug Fixes
    View changes on GitHub

v0.17.0

Compare Source

   🚨 Breaking Changes

Notable features: https://bsky.app/profile/sxzz.dev/post/3m6xi7e7d5k2b

   🚀 Features
   🐞 Bug Fixes
   🏎 Performance
    View changes on GitHub

v0.16.8

Compare Source

   🚀 Features
Deprecation
  • Deprecate attw.profile = 'esmOnly', use esm-only instead.
    View changes on GitHub

v0.16.7

Compare Source

   🚀 Features
    View changes on GitHub

v0.16.6

Compare Source

   🚀 Features
    View changes on GitHub

v0.16.5

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v0.16.4

Compare Source

   🚀 Features
    View changes on GitHub

v0.16.3

Compare Source

   🏎 Performance
    View changes on GitHub

v0.16.2

Compare Source

   🚀 Features
  • Upgrade rolldown to v1.0.0-beta.49  -  by @​sxzz (48181)
  • entry: Auto enable glob, support infer entry extension  -  by @​sxzz and jinghaihan (2c525)
    View changes on GitHub

v0.16.1

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v0.16.0

Compare Source

   🚨 Breaking Changes
  • Rename config exports  -  by @​sxzz in #​519 (7de20)
    • Split Options interface into UserConfig and InlineConfig. The original one now is InlineConfig.
    • Rename NormalizedUserConfig to UserConfig
    • Rename ResolvedOptions to ResolvedConfig
  • Defaults fixedExtension to true when platform is node  -  by @​sxzz in #​517 (e1168)
  • Rename --debug CLI flag to --debug-logs  -  by @​sxzz in #​576 (e4ef6)
   🚀 Features
    View changes on GitHub

v0.15.12

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v0.15.11

Compare Source

No significant changes

    View changes on GitHub

v0.15.10

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v0.15.9

Compare Source

   🐞 Bug Fixes
    View changes on GitHub

v0.15.8

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

v0.15.7

Compare Source

   🚀 Features
   🐞 Bug Fixes
    View changes on GitHub

Configuration

📅 Schedule: Branch creation - Only on Sunday and Saturday ( * * * * 0,6 ) (UTC), Automerge - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC).

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@changeset-bot
Copy link

changeset-bot bot commented Oct 11, 2025

⚠️ No Changeset found

Latest commit: 4087db7

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@renovate renovate bot changed the title chore(deps): update dependency @types/node to v22.18.9 chore(deps): update dependency @types/node to v22.18.10 Oct 11, 2025
@renovate renovate bot force-pushed the renovate/dev-only branch from c5fc59d to 0f1a2f0 Compare October 11, 2025 17:09
@renovate renovate bot changed the title chore(deps): update dependency @types/node to v22.18.10 chore(deps): update dev-only Oct 13, 2025
@renovate renovate bot force-pushed the renovate/dev-only branch 4 times, most recently from 6680db7 to 99aa1af Compare October 20, 2025 13:49
@renovate renovate bot force-pushed the renovate/dev-only branch 3 times, most recently from 3396b23 to 3fb485f Compare October 26, 2025 12:42
@renovate renovate bot force-pushed the renovate/dev-only branch 9 times, most recently from d09102a to 8ef2480 Compare November 3, 2025 04:47
@renovate renovate bot force-pushed the renovate/dev-only branch 6 times, most recently from 6a85431 to 01de0cc Compare November 9, 2025 20:49
@renovate renovate bot force-pushed the renovate/dev-only branch 2 times, most recently from ef841d3 to b67e1fb Compare November 20, 2025 09:01
@renovate renovate bot force-pushed the renovate/dev-only branch 3 times, most recently from 7ecddf0 to 8b4015f Compare November 27, 2025 20:35
@renovate renovate bot force-pushed the renovate/dev-only branch 7 times, most recently from cd19b87 to ba85c16 Compare December 9, 2025 04:08
@renovate renovate bot force-pushed the renovate/dev-only branch 6 times, most recently from a84cf1f to 34898c0 Compare December 17, 2025 23:56
@renovate renovate bot force-pushed the renovate/dev-only branch 2 times, most recently from db6d71d to 2a34004 Compare December 24, 2025 17:26
@renovate renovate bot force-pushed the renovate/dev-only branch from 2a34004 to 400a0bf Compare December 30, 2025 14:03
@renovate renovate bot force-pushed the renovate/dev-only branch 4 times, most recently from f986140 to 56c0f64 Compare January 13, 2026 16:13
@renovate renovate bot force-pushed the renovate/dev-only branch 3 times, most recently from 0b4206a to 6e82331 Compare January 22, 2026 17:04
@renovate renovate bot force-pushed the renovate/dev-only branch from 6e82331 to 4087db7 Compare January 22, 2026 20:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant