Update npm non-major dependencies #50

Open
pv wants to merge 1 commit from renovate/npm-minor-patch into master
Owner

This PR contains the following updates:

Package Type Update Change
@mozilla/readability dependencies minor ^0.5.0 -> ^0.6.0
esbuild dependencies minor ^0.22.0 -> ^0.25.0
linkedom dependencies patch 0.18.4 -> 0.18.12

Release Notes

mozilla/readability (@​mozilla/readability)

v0.6.0

Compare Source

evanw/esbuild (esbuild)

v0.25.10

Compare Source

  • Fix a panic in a minification edge case (#​4287)

    This release fixes a panic due to a null pointer that could happen when esbuild inlines a doubly-nested identity function and the final result is empty. It was fixed by emitting the value undefined in this case, which avoids the panic. This case must be rare since it hasn't come up until now. Here is an example of code that previously triggered the panic (which only happened when minifying):

    function identity(x) { return x }
    identity({ y: identity(123) })
    
  • Fix @supports nested inside pseudo-element (#​4265)

    When transforming nested CSS to non-nested CSS, esbuild is supposed to filter out pseudo-elements such as ::placeholder for correctness. The CSS nesting specification says the following:

    The nesting selector cannot represent pseudo-elements (identical to the behavior of the ':is()' pseudo-class). We’d like to relax this restriction, but need to do so simultaneously for both ':is()' and '&', since they’re intentionally built on the same underlying mechanisms.

    However, it seems like this behavior is different for nested at-rules such as @supports, which do work with pseudo-elements. So this release modifies esbuild's behavior to now take that into account:

    /* Original code */
    ::placeholder {
      color: red;
      body & { color: green }
      @​supports (color: blue) { color: blue }
    }
    
    /* Old output (with --supported:nesting=false) */
    ::placeholder {
      color: red;
    }
    body :is() {
      color: green;
    }
    @​supports (color: blue) {
       {
        color: blue;
      }
    }
    
    /* New output (with --supported:nesting=false) */
    ::placeholder {
      color: red;
    }
    body :is() {
      color: green;
    }
    @​supports (color: blue) {
      ::placeholder {
        color: blue;
      }
    }
    

v0.25.9

Compare Source

  • Better support building projects that use Yarn on Windows (#​3131, #​3663)

    With this release, you can now use esbuild to bundle projects that use Yarn Plug'n'Play on Windows on drives other than the C: drive. The problem was as follows:

    1. Yarn in Plug'n'Play mode on Windows stores its global module cache on the C: drive
    2. Some developers put their projects on the D: drive
    3. Yarn generates relative paths that use ../.. to get from the project directory to the cache directory
    4. Windows-style paths don't support directory traversal between drives via .. (so D:\.. is just D:)
    5. I didn't have access to a Windows machine for testing this edge case

    Yarn works around this edge case by pretending Windows-style paths beginning with C:\ are actually Unix-style paths beginning with /C:/, so the ../.. path segments are able to navigate across drives inside Yarn's implementation. This was broken for a long time in esbuild but I finally got access to a Windows machine and was able to debug and fix this edge case. So you should now be able to bundle these projects with esbuild.

  • Preserve parentheses around function expressions (#​4252)

    The V8 JavaScript VM uses parentheses around function expressions as an optimization hint to immediately compile the function. Otherwise the function would be lazily-compiled, which has additional overhead if that function is always called immediately as lazy compilation involves parsing the function twice. You can read V8's blog post about this for more details.

    Previously esbuild did not represent parentheses around functions in the AST so they were lost during compilation. With this change, esbuild will now preserve parentheses around function expressions when they are present in the original source code. This means these optimization hints will not be lost when bundling with esbuild. In addition, esbuild will now automatically add this optimization hint to immediately-invoked function expressions. Here's an example:

    // Original code
    const fn0 = () => 0
    const fn1 = (() => 1)
    console.log(fn0, function() { return fn1() }())
    
    // Old output
    const fn0 = () => 0;
    const fn1 = () => 1;
    console.log(fn0, function() {
      return fn1();
    }());
    
    // New output
    const fn0 = () => 0;
    const fn1 = (() => 1);
    console.log(fn0, (function() {
      return fn1();
    })());
    

    Note that you do not want to wrap all function expressions in parentheses. This optimization hint should only be used for functions that are called on initial load. Using this hint for functions that are not called on initial load will unnecessarily delay the initial load. Again, see V8's blog post linked above for details.

  • Update Go from 1.23.10 to 1.23.12 (#​4257, #​4258)

    This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain false positive reports (specifically CVE-2025-4674 and CVE-2025-47907) from vulnerability scanners that only detect which version of the Go compiler esbuild uses.

v0.25.8

Compare Source

  • Fix another TypeScript parsing edge case (#​4248)

    This fixes a regression with a change in the previous release that tries to more accurately parse TypeScript arrow functions inside the ?: operator. The regression specifically involves parsing an arrow function containing a #private identifier inside the middle of a ?: ternary operator inside a class body. This was fixed by propagating private identifier state into the parser clone used to speculatively parse the arrow function body. Here is an example of some affected code:

    class CachedDict {
      #has = (a: string) => dict.has(a);
      has = window
        ? (word: string): boolean => this.#has(word)
        : this.#has;
    }
    
  • Fix a regression with the parsing of source phase imports

    The change in the previous release to parse source phase imports failed to properly handle the following cases:

    import source from 'bar'
    import source from from 'bar'
    import source type foo from 'bar'
    

    Parsing for these cases should now be fixed. The first case was incorrectly treated as a syntax error because esbuild was expecting the second case. And the last case was previously allowed but is now forbidden. TypeScript hasn't added this feature yet so it remains to be seen whether the last case will be allowed, but it's safer to disallow it for now. At least Babel doesn't allow the last case when parsing TypeScript, and Babel was involved with the source phase import specification.

v0.25.7

Compare Source

  • Parse and print JavaScript imports with an explicit phase (#​4238)

    This release adds basic syntax support for the defer and source import phases in JavaScript:

    • defer

      This is a stage 3 proposal for an upcoming JavaScript feature that will provide one way to eagerly load but lazily initialize imported modules. The imported module is automatically initialized on first use. Support for this syntax will also be part of the upcoming release of TypeScript 5.9. The syntax looks like this:

      import defer * as foo from "<specifier>";
      const bar = await import.defer("<specifier>");
      

      Note that this feature deliberately cannot be used with the syntax import defer foo from "<specifier>" or import defer { foo } from "<specifier>".

    • source

      This is a stage 3 proposal for an upcoming JavaScript feature that will provide another way to eagerly load but lazily initialize imported modules. The imported module is returned in an uninitialized state. Support for this syntax may or may not be a part of TypeScript 5.9 (see this issue for details). The syntax looks like this:

      import source foo from "<specifier>";
      const bar = await import.source("<specifier>");
      

      Note that this feature deliberately cannot be used with the syntax import defer * as foo from "<specifier>" or import defer { foo } from "<specifier>".

    This change only adds support for this syntax. These imports cannot currently be bundled by esbuild. To use these new features with esbuild's bundler, the imported paths must be external to the bundle and the output format must be set to esm.

  • Support optionally emitting absolute paths instead of relative paths (#​338, #​2082, #​3023)

    This release introduces the --abs-paths= feature which takes a comma-separated list of situations where esbuild should use absolute paths instead of relative paths. There are currently three supported situations: code (comments and string literals), log (log message text and location info), and metafile (the JSON build metadata).

    Using absolute paths instead of relative paths is not the default behavior because it means that the build results are no longer machine-independent (which means builds are no longer reproducible). Absolute paths can be useful when used with certain terminal emulators that allow you to click on absolute paths in the terminal text and/or when esbuild is being automatically invoked from several different directories within the same script.

  • Fix a TypeScript parsing edge case (#​4241)

    This release fixes an edge case with parsing an arrow function in TypeScript with a return type that's in the middle of a ?: ternary operator. For example:

    x = a ? (b) : c => d;
    y = a ? (b) : c => d : e;
    

    The : token in the value assigned to x pairs with the ? token, so it's not the start of a return type annotation. However, the first : token in the value assigned to y is the start of a return type annotation because after parsing the arrow function body, it turns out there's another : token that can be used to pair with the ? token. This case is notable as it's the first TypeScript edge case that esbuild has needed a backtracking parser to parse. It has been addressed by a quick hack (cloning the whole parser) as it's a rare edge case and esbuild doesn't otherwise need a backtracking parser. Hopefully this is sufficient and doesn't cause any issues.

  • Inline small constant strings when minifying

    Previously esbuild's minifier didn't inline string constants because strings can be arbitrarily long, and this isn't necessarily a size win if the string is used more than once. Starting with this release, esbuild will now inline string constants when the length of the string is three code units or less. For example:

    // Original code
    const foo = 'foo'
    console.log({ [foo]: true })
    
    // Old output (with --minify --bundle --format=esm)
    var o="foo";console.log({[o]:!0});
    
    // New output (with --minify --bundle --format=esm)
    console.log({foo:!0});
    

    Note that esbuild's constant inlining only happens in very restrictive scenarios to avoid issues with TDZ handling. This change doesn't change when esbuild's constant inlining happens. It only expands the scope of it to include certain string literals in addition to numeric and boolean literals.

v0.25.6

Compare Source

  • Fix a memory leak when cancel() is used on a build context (#​4231)

    Calling rebuild() followed by cancel() in rapid succession could previously leak memory. The bundler uses a producer/consumer model internally, and the resource leak was caused by the consumer being termianted while there were still remaining unreceived results from a producer. To avoid the leak, the consumer now waits for all producers to finish before terminating.

  • Support empty :is() and :where() syntax in CSS (#​4232)

    Previously using these selectors with esbuild would generate a warning. That warning has been removed in this release for these cases.

  • Improve tree-shaking of try statements in dead code (#​4224)

    With this release, esbuild will now remove certain try statements if esbuild considers them to be within dead code (i.e. code that is known to not ever be evaluated). For example:

    // Original code
    return 'foo'
    try { return 'bar' } catch {}
    
    // Old output (with --minify)
    return"foo";try{return"bar"}catch{}
    
    // New output (with --minify)
    return"foo";
    
  • Consider negated bigints to have no side effects

    While esbuild currently considers 1, -1, and 1n to all have no side effects, it didn't previously consider -1n to have no side effects. This is because esbuild does constant folding with numbers but not bigints. However, it meant that unused negative bigint constants were not tree-shaken. With this release, esbuild will now consider these expressions to also be side-effect free:

    // Original code
    let a = 1, b = -1, c = 1n, d = -1n
    
    // Old output (with --bundle --minify)
    (()=>{var n=-1n;})();
    
    // New output (with --bundle --minify)
    (()=>{})();
    
  • Support a configurable delay in watch mode before rebuilding (#​3476, #​4178)

    The watch() API now takes a delay option that lets you add a delay (in milliseconds) before rebuilding when a change is detected in watch mode. If you use a tool that regenerates multiple source files very slowly, this should make it more likely that esbuild's watch mode won't generate a broken intermediate build before the successful final build. This option is also available via the CLI using the --watch-delay= flag.

    This should also help avoid confusion about the watch() API's options argument. It was previously empty to allow for future API expansion, which caused some people to think that the documentation was missing. It's no longer empty now that the watch() API has an option.

  • Allow mixed array for entryPoints API option (#​4223)

    The TypeScript type definitions now allow you to pass a mixed array of both string literals and object literals to the entryPoints API option, such as ['foo.js', { out: 'lib', in: 'bar.js' }]. This was always possible to do in JavaScript but the TypeScript type definitions were previously too restrictive.

  • Update Go from 1.23.8 to 1.23.10 (#​4204, #​4207)

    This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain false positive reports (specifically CVE-2025-4673 and CVE-2025-22874) from vulnerability scanners that only detect which version of the Go compiler esbuild uses.

  • Experimental support for esbuild on OpenHarmony (#​4212)

    With this release, esbuild now publishes the @esbuild/openharmony-arm64 npm package for OpenHarmony. It contains a WebAssembly binary instead of a native binary because Go doesn't currently support OpenHarmony. Node does support it, however, so in theory esbuild should now work on OpenHarmony through WebAssembly.

    This change was contributed by @​hqzing.

v0.25.5

Compare Source

  • Fix a regression with browser in package.json (#​4187)

    The fix to #​4144 in version 0.25.3 introduced a regression that caused browser overrides specified in package.json to fail to override relative path names that end in a trailing slash. That behavior change affected the axios@0.30.0 package. This regression has been fixed, and now has test coverage.

  • Add support for certain keywords as TypeScript tuple labels (#​4192)

    Previously esbuild could incorrectly fail to parse certain keywords as TypeScript tuple labels that are parsed by the official TypeScript compiler if they were followed by a ? modifier. These labels included function, import, infer, new, readonly, and typeof. With this release, these keywords will now be parsed correctly. Here's an example of some affected code:

    type Foo = [
      value: any,
      readonly?: boolean, // This is now parsed correctly
    ]
    
  • Add CSS prefixes for the stretch sizing value (#​4184)

    This release adds support for prefixing CSS declarations such as div { width: stretch }. That CSS is now transformed into this depending on what the --target= setting includes:

    div {
      width: -webkit-fill-available;
      width: -moz-available;
      width: stretch;
    }
    

v0.25.4

Compare Source

  • Add simple support for CORS to esbuild's development server (#​4125)

    Starting with version 0.25.0, esbuild's development server is no longer configured to serve cross-origin requests. This was a deliberate change to prevent any website you visit from accessing your running esbuild development server. However, this change prevented (by design) certain use cases such as "debugging in production" by having your production website load code from localhost where the esbuild development server is running.

    To enable this use case, esbuild is adding a feature to allow Cross-Origin Resource Sharing (a.k.a. CORS) for simple requests. Specifically, passing your origin to the new cors option will now set the Access-Control-Allow-Origin response header when the request has a matching Origin header. Note that this currently only works for requests that don't send a preflight OPTIONS request, as esbuild's development server doesn't currently support OPTIONS requests.

    Some examples:

    • CLI:

      esbuild --servedir=. --cors-origin=https://example.com
      
    • JS:

      const ctx = await esbuild.context({})
      await ctx.serve({
        servedir: '.',
        cors: {
          origin: 'https://example.com',
        },
      })
      
    • Go:

      ctx, _ := api.Context(api.BuildOptions{})
      ctx.Serve(api.ServeOptions{
        Servedir: ".",
        CORS: api.CORSOptions{
          Origin: []string{"https://example.com"},
        },
      })
      

    The special origin * can be used to allow any origin to access esbuild's development server. Note that this means any website you visit will be able to read everything served by esbuild.

  • Pass through invalid URLs in source maps unmodified (#​4169)

    This fixes a regression in version 0.25.0 where sources in source maps that form invalid URLs were not being passed through to the output. Version 0.25.0 changed the interpretation of sources from file paths to URLs, which means that URL parsing can now fail. Previously URLs that couldn't be parsed were replaced with the empty string. With this release, invalid URLs in sources should now be passed through unmodified.

  • Handle exports named __proto__ in ES modules (#​4162, #​4163)

    In JavaScript, the special property name __proto__ sets the prototype when used inside an object literal. Previously esbuild's ESM-to-CommonJS conversion didn't special-case the property name of exports named __proto__ so the exported getter accidentally became the prototype of the object literal. It's unclear what this affects, if anything, but it's better practice to avoid this by using a computed property name in this case.

    This fix was contributed by @​magic-akari.

v0.25.3

Compare Source

  • Fix lowered async arrow functions before super() (#​4141, #​4142)

    This change makes it possible to call an async arrow function in a constructor before calling super() when targeting environments without async support, as long as the function body doesn't reference this. Here's an example (notice the change from this to null):

    // Original code
    class Foo extends Object {
      constructor() {
        (async () => await foo())()
        super()
      }
    }
    
    // Old output (with --target=es2016)
    class Foo extends Object {
      constructor() {
        (() => __async(this, null, function* () {
          return yield foo();
        }))();
        super();
      }
    }
    
    // New output (with --target=es2016)
    class Foo extends Object {
      constructor() {
        (() => __async(null, null, function* () {
          return yield foo();
        }))();
        super();
      }
    }
    

    Some background: Arrow functions with the async keyword are transformed into generator functions for older language targets such as --target=es2016. Since arrow functions capture this, the generated code forwards this into the body of the generator function. However, JavaScript class syntax forbids using this in a constructor before calling super(), and this forwarding was problematic since previously happened even when the function body doesn't use this. Starting with this release, esbuild will now only forward this if it's used within the function body.

    This fix was contributed by @​magic-akari.

  • Fix memory leak with --watch=true (#​4131, #​4132)

    This release fixes a memory leak with esbuild when --watch=true is used instead of --watch. Previously using --watch=true caused esbuild to continue to use more and more memory for every rebuild, but --watch=true should now behave like --watch and not leak memory.

    This bug happened because esbuild disables the garbage collector when it's not run as a long-lived process for extra speed, but esbuild's checks for which arguments cause esbuild to be a long-lived process weren't updated for the new --watch=true style of boolean command-line flags. This has been an issue since this boolean flag syntax was added in version 0.14.24 in 2022. These checks are unfortunately separate from the regular argument parser because of how esbuild's internals are organized (the command-line interface is exposed as a separate Go API so you can build your own custom esbuild CLI).

    This fix was contributed by @​mxschmitt.

  • More concise output for repeated legal comments (#​4139)

    Some libraries have many files and also use the same legal comment text in all files. Previously esbuild would copy each legal comment to the output file. Starting with this release, legal comments duplicated across separate files will now be grouped in the output file by unique comment content.

  • Allow a custom host with the development server (#​4110)

    With this release, you can now use a custom non-IP host with esbuild's local development server (either with --serve= for the CLI or with the serve() call for the API). This was previously possible, but was intentionally broken in version 0.25.0 to fix a security issue. This change adds the functionality back except that it's now opt-in and only for a single domain name that you provide.

    For example, if you add a mapping in your /etc/hosts file from local.example.com to 127.0.0.1 and then use esbuild --serve=local.example.com:8000, you will now be able to visit http://local.example.com:8000/ in your browser and successfully connect to esbuild's development server (doing that would previously have been blocked by the browser). This should also work with HTTPS if it's enabled (see esbuild's documentation for how to do that).

  • Add a limit to CSS nesting expansion (#​4114)

    With this release, esbuild will now fail with an error if there is too much CSS nesting expansion. This can happen when nested CSS is converted to CSS without nesting for older browsers as expanding CSS nesting is inherently exponential due to the resulting combinatorial explosion. The expansion limit is currently hard-coded and cannot be changed, but is extremely unlikely to trigger for real code. It exists to prevent esbuild from using too much time and/or memory. Here's an example:

    a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{color:red}}}}}}}}}}}}}}}}}}}}
    

    Previously, transforming this file with --target=safari1 took 5 seconds and generated 40mb of CSS. Trying to do that will now generate the following error instead:

    ✘ [ERROR] CSS nesting is causing too much expansion
    
        example.css:1:60:
          1 │ a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{color:red}}}}}}}}}}}}}}}}}}}}
            ╵                                                             ^
    
      CSS nesting expansion was terminated because a rule was generated with 65536 selectors. This limit
      exists to prevent esbuild from using too much time and/or memory. Please change your CSS to use
      fewer levels of nesting.
    
  • Fix path resolution edge case (#​4144)

    This fixes an edge case where esbuild's path resolution algorithm could deviate from node's path resolution algorithm. It involves a confusing situation where a directory shares the same file name as a file (but without the file extension). See the linked issue for specific details. This appears to be a case where esbuild is correctly following node's published resolution algorithm but where node itself is doing something different. Specifically the step LOAD_AS_FILE appears to be skipped when the input ends with ... This release changes esbuild's behavior for this edge case to match node's behavior.

  • Update Go from 1.23.7 to 1.23.8 (#​4133, #​4134)

    This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain reports from vulnerability scanners that detect which version of the Go compiler esbuild uses, such as for CVE-2025-22871.

    As a reminder, esbuild's development server is intended for development, not for production, so I do not consider most networking-related vulnerabilities in Go to be vulnerabilities in esbuild. Please do not use esbuild's development server in production.

v0.25.2

Compare Source

  • Support flags in regular expressions for the API (#​4121)

    The JavaScript plugin API for esbuild takes JavaScript regular expression objects for the filter option. Internally these are translated into Go regular expressions. However, this translation previously ignored the flags property of the regular expression. With this release, esbuild will now translate JavaScript regular expression flags into Go regular expression flags. Specifically the JavaScript regular expression /\.[jt]sx?$/i is turned into the Go regular expression `(?i)\.[jt]sx?$` internally inside of esbuild's API. This should make it possible to use JavaScript regular expressions with the i flag. Note that JavaScript and Go don't support all of the same regular expression features, so this mapping is only approximate.

  • Fix node-specific annotations for string literal export names (#​4100)

    When node instantiates a CommonJS module, it scans the AST to look for names to expose via ESM named exports. This is a heuristic that looks for certain patterns such as exports.NAME = ... or module.exports = { ... }. This behavior is used by esbuild to "annotate" CommonJS code that was converted from ESM with the original ESM export names. For example, when converting the file export let foo, bar from ESM to CommonJS, esbuild appends this to the end of the file:

    // Annotate the CommonJS export names for ESM import in node:
    0 && (module.exports = {
      bar,
      foo
    });
    

    However, this feature previously didn't work correctly for export names that are not valid identifiers, which can be constructed using string literal export names. The generated code contained a syntax error. That problem is fixed in this release:

    // Original code
    let foo
    export { foo as "foo!" }
    
    // Old output (with --format=cjs --platform=node)
    ...
    0 && (module.exports = {
      "foo!"
    });
    
    // New output (with --format=cjs --platform=node)
    ...
    0 && (module.exports = {
      "foo!": null
    });
    
  • Basic support for index source maps (#​3439, #​4109)

    The source map specification has an optional mode called index source maps that makes it easier for tools to create an aggregate JavaScript file by concatenating many smaller JavaScript files with source maps, and then generate an aggregate source map by simply providing the original source maps along with some offset information. My understanding is that this is rarely used in practice. I'm only aware of two uses of it in the wild: ClojureScript and Turbopack.

    This release provides basic support for indexed source maps. However, the implementation has not been tested on a real app (just on very simple test input). If you are using index source maps in a real app, please try this out and report back if anything isn't working for you.

    Note that this is also not a complete implementation. For example, index source maps technically allows nesting source maps to an arbitrary depth, while esbuild's implementation in this release only supports a single level of nesting. It's unclear whether supporting more than one level of nesting is important or not given the lack of available test cases.

    This feature was contributed by @​clyfish.

v0.25.1

Compare Source

  • Fix a panic in a minification edge case (#​4287)

    This release fixes a panic due to a null pointer that could happen when esbuild inlines a doubly-nested identity function and the final result is empty. It was fixed by emitting the value undefined in this case, which avoids the panic. This case must be rare since it hasn't come up until now. Here is an example of code that previously triggered the panic (which only happened when minifying):

    function identity(x) { return x }
    identity({ y: identity(123) })
    
  • Fix @supports nested inside pseudo-element (#​4265)

    When transforming nested CSS to non-nested CSS, esbuild is supposed to filter out pseudo-elements such as ::placeholder for correctness. The CSS nesting specification says the following:

    The nesting selector cannot represent pseudo-elements (identical to the behavior of the ':is()' pseudo-class). We’d like to relax this restriction, but need to do so simultaneously for both ':is()' and '&', since they’re intentionally built on the same underlying mechanisms.

    However, it seems like this behavior is different for nested at-rules such as @supports, which do work with pseudo-elements. So this release modifies esbuild's behavior to now take that into account:

    /* Original code */
    ::placeholder {
      color: red;
      body & { color: green }
      @&#8203;supports (color: blue) { color: blue }
    }
    
    /* Old output (with --supported:nesting=false) */
    ::placeholder {
      color: red;
    }
    body :is() {
      color: green;
    }
    @&#8203;supports (color: blue) {
       {
        color: blue;
      }
    }
    
    /* New output (with --supported:nesting=false) */
    ::placeholder {
      color: red;
    }
    body :is() {
      color: green;
    }
    @&#8203;supports (color: blue) {
      ::placeholder {
        color: blue;
      }
    }
    

v0.25.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.24.0 or ~0.24.0. See npm's documentation about semver for more information.

  • Restrict access to esbuild's development server (GHSA-67mh-4wv8-2f99)

    This change addresses esbuild's first security vulnerability report. Previously esbuild set the Access-Control-Allow-Origin header to * to allow esbuild's development server to be flexible in how it's used for development. However, this allows the websites you visit to make HTTP requests to esbuild's local development server, which gives read-only access to your source code if the website were to fetch your source code's specific URL. You can read more information in the report.

    Starting with this release, CORS will now be disabled, and requests will now be denied if the host does not match the one provided to --serve=. The default host is 0.0.0.0, which refers to all of the IP addresses that represent the local machine (e.g. both 127.0.0.1 and 192.168.0.1). If you want to customize anything about esbuild's development server, you can put a proxy in front of esbuild and modify the incoming and/or outgoing requests.

    In addition, the serve() API call has been changed to return an array of hosts instead of a single host string. This makes it possible to determine all of the hosts that esbuild's development server will accept.

    Thanks to @​sapphi-red for reporting this issue.

  • Delete output files when a build fails in watch mode (#​3643)

    It has been requested for esbuild to delete files when a build fails in watch mode. Previously esbuild left the old files in place, which could cause people to not immediately realize that the most recent build failed. With this release, esbuild will now delete all output files if a rebuild fails. Fixing the build error and triggering another rebuild will restore all output files again.

  • Fix correctness issues with the CSS nesting transform (#​3620, #​3877, #​3933, #​3997, #​4005, #​4037, #​4038)

    This release fixes the following problems:

    • Naive expansion of CSS nesting can result in an exponential blow-up of generated CSS if each nesting level has multiple selectors. Previously esbuild sometimes collapsed individual nesting levels using :is() to limit expansion. However, this collapsing wasn't correct in some cases, so it has been removed to fix correctness issues.

      /* Original code */
      .parent {
        > .a,
        > .b1 > .b2 {
          color: red;
        }
      }
      
      /* Old output (with --supported:nesting=false) */
      .parent > :is(.a, .b1 > .b2) {
        color: red;
      }
      
      /* New output (with --supported:nesting=false) */
      .parent > .a,
      .parent > .b1 > .b2 {
        color: red;
      }
      

      Thanks to @​tim-we for working on a fix.

    • The & CSS nesting selector can be repeated multiple times to increase CSS specificity. Previously esbuild ignored this possibility and incorrectly considered && to have the same specificity as &. With this release, this should now work correctly:

      /* Original code (color should be red) */
      div {
        && { color: red }
        & { color: blue }
      }
      
      /* Old output (with --supported:nesting=false) */
      div {
        color: red;
      }
      div {
        color: blue;
      }
      
      /* New output (with --supported:nesting=false) */
      div:is(div) {
        color: red;
      }
      div {
        color: blue;
      }
      

      Thanks to @​CPunisher for working on a fix.

    • Previously transforming nested CSS incorrectly removed leading combinators from within pseudoclass selectors such as :where(). This edge case has been fixed and how has test coverage.

      /* Original code */
      a b:has(> span) {
        a & {
          color: green;
        }
      }
      
      /* Old output (with --supported:nesting=false) */
      a :is(a b:has(span)) {
        color: green;
      }
      
      /* New output (with --supported:nesting=false) */
      a :is(a b:has(> span)) {
        color: green;
      }
      

      This fix was contributed by @​NoremacNergfol.

    • The CSS minifier contains logic to remove the & selector when it can be implied, which happens when there is only one and it's the leading token. However, this logic was incorrectly also applied to selector lists inside of pseudo-class selectors such as :where(). With this release, the minifier will now avoid applying this logic in this edge case:

      /* Original code */
      .a {
        & .b { color: red }
        :where(& .b) { color: blue }
      }
      
      /* Old output (with --minify) */
      .a{.b{color:red}:where(.b){color:#&#8203;00f}}
      
      /* New output (with --minify) */
      .a{.b{color:red}:where(& .b){color:#&#8203;00f}}
      
  • Fix some correctness issues with source maps (#​1745, #​3183, #​3613, #​3982)

    Previously esbuild incorrectly treated source map path references as file paths instead of as URLs. With this release, esbuild will now treat source map path references as URLs. This fixes the following problems with source maps:

    • File names in sourceMappingURL that contained a space previously did not encode the space as %20, which resulted in JavaScript tools (including esbuild) failing to read that path back in when consuming the generated output file. This should now be fixed.

    • Absolute URLs in sourceMappingURL that use the file:// scheme previously attempted to read from a folder called file:. These URLs should now be recognized and parsed correctly.

    • Entries in the sources array in the source map are now treated as URLs instead of file paths. The correct behavior for this is much more clear now that source maps has a formal specification. Many thanks to those who worked on the specification.

  • Fix incorrect package for @esbuild/netbsd-arm64 (#​4018)

    Due to a copy+paste typo, the binary published to @esbuild/netbsd-arm64 was not actually for arm64, and didn't run in that environment. This release should fix running esbuild in that environment (NetBSD on 64-bit ARM). Sorry about the mistake.

  • Fix a minification bug with bitwise operators and bigints (#​4065)

    This change removes an incorrect assumption in esbuild that all bitwise operators result in a numeric integer. That assumption was correct up until the introduction of bigints in ES2020, but is no longer correct because almost all bitwise operators now operate on both numbers and bigints. Here's an example of the incorrect minification:

    // Original code
    if ((a & b) !== 0) found = true
    
    // Old output (with --minify)
    a&b&&(found=!0);
    
    // New output (with --minify)
    (a&b)!==0&&(found=!0);
    
  • Fix esbuild incorrectly rejecting valid TypeScript edge case (#​4027)

    The following TypeScript code is valid:

    export function open(async?: boolean): void {
      console.log(async as boolean)
    }
    

    Before this version, esbuild would fail to parse this with a syntax error as it expected the token sequence async as ... to be the start of an async arrow function expression async as => .... This edge case should be parsed correctly by esbuild starting with this release.

  • Transform BigInt values into constructor calls when unsupported (#​4049)

    Previously esbuild would refuse to compile the BigInt literals (such as 123n) if they are unsupported in the configured target environment (such as with --target=es6). The rationale was that they cannot be polyfilled effectively because they change the behavior of JavaScript's arithmetic operators and JavaScript doesn't have operator overloading.

    However, this prevents using esbuild with certain libraries that would otherwise work if BigInt literals were ignored, such as with old versions of the buffer library before the library fixed support for running in environments without BigInt support. So with this release, esbuild will now turn BigInt literals into BigInt constructor calls (so 123n becomes BigInt(123)) and generate a warning in this case. You can turn off the warning with --log-override:bigint=silent or restore the warning to an error with --log-override:bigint=error if needed.

  • Change how console API dropping works (#​4020)

    Previously the --drop:console feature replaced all method calls off of the console global with undefined regardless of how long the property access chain was (so it applied to console.log() and console.log.call(console) and console.log.not.a.method()). However, it was pointed out that this breaks uses of console.log.bind(console). That's also incompatible with Terser's implementation of the feature, which is where this feature originally came from (it does support bind). So with this release, using this feature with esbuild will now only replace one level of method call (unless extended by call or apply) and will replace the method being called with an empty function in complex cases:

    // Original code
    const x = console.log('x')
    const y = console.log.call(console, 'y')
    const z = console.log.bind(console)('z')
    
    // Old output (with --drop-console)
    const x = void 0;
    const y = void 0;
    const z = (void 0)("z");
    
    // New output (with --drop-console)
    const x = void 0;
    const y = void 0;
    const z = (() => {
    }).bind(console)("z");
    

    This should more closely match Terser's existing behavior.

  • Allow BigInt literals as define values

    With this release, you can now use BigInt literals as define values, such as with --define:FOO=123n. Previously trying to do this resulted in a syntax error.

  • Fix a bug with resolve extensions in node_modules (#​4053)

    The --resolve-extensions= option lets you specify the order in which to try resolving implicit file extensions. For complicated reasons, esbuild reorders TypeScript file extensions after JavaScript ones inside of node_modules so that JavaScript source code is always preferred to TypeScript source code inside of dependencies. However, this reordering had a bug that could accidentally change the relative order of TypeScript file extensions if one of them was a prefix of the other. That bug has been fixed in this release. You can see the issue for details.

  • Better minification of statically-determined switch cases (#​4028)

    With this release, esbuild will now try to trim unused code within switch statements when the test expression and case expressions are primitive literals. This can arise when the test expression is an identifier that is substituted for a primitive literal at compile time. For example:

    // Original code
    switch (MODE) {
      case 'dev':
        installDevToolsConsole()
        break
      case 'prod':
        return
      default:
        throw new Error
    }
    
    // Old output (with --minify '--define:MODE="prod"')
    switch("prod"){case"dev":installDevToolsConsole();break;case"prod":return;default:throw new Error}
    
    // New output (with --minify '--define:MODE="prod"')
    return;
    
  • Emit /* @&#8203;__KEY__ */ for string literals derived from property names (#​4034)

    Property name mangling is an advanced feature that shortens certain property names for better minification (I say "advanced feature" because it's very easy to break your code with it). Sometimes you need to store a property name in a string, such as obj.get('foo') instead of obj.foo. JavaScript minifiers such as esbuild and Terser have a convention where a /* @&#8203;__KEY__ */ comment before the string makes it behave like a property name. So obj.get(/* @&#8203;__KEY__ */ 'foo') allows the contents of the string 'foo' to be shortened.

    However, esbuild sometimes itself generates string literals containing property names when transforming code, such as when lowering class fields to ES6 or when transforming TypeScript decorators. Previously esbuild didn't generate its own /* @&#8203;__KEY__ */ comments in this case, which means that minifying your code by running esbuild again on its own output wouldn't work correctly (this does not affect people that both minify and transform their code in a single step).

    With this release, esbuild will now generate /* @&#8203;__KEY__ */ comments for property names in generated string literals. To avoid lots of unnecessary output for people that don't use this advanced feature, the generated comments will only be present when the feature is active. If you want to generate the comments but not actually mangle any property names, you can use a flag that has no effect such as --reserve-props=., which tells esbuild to not mangle any property names (but still activates this feature).

  • The text loader now strips the UTF-8 BOM if present (#​3935)

    Some software (such as Notepad on Windows) can create text files that start with the three bytes 0xEF 0xBB 0xBF, which is referred to as the "byte order mark". This prefix is intended to be removed before using the text. Previously esbuild's text loader included this byte sequence in the string, which turns into a prefix of \uFEFF in a JavaScript string when decoded from UTF-8. With this release, esbuild's text loader will now remove these bytes when they occur at the start of the file.

  • Omit legal comment output files when empty (#​3670)

    Previously configuring esbuild with --legal-comment=external or --legal-comment=linked would always generate a .LEGAL.txt output file even if it was empty. Starting with this release, esbuild will now only do this if the file will be non-empty. This should result in a more organized output directory in some cases.

  • Update Go from 1.23.1 to 1.23.5 (#​4056, #​4057)

    This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain reports from vulnerability scanners that detect which version of the Go compiler esbuild uses.

    This PR was contributed by @​MikeWillCook.

  • Allow passing a port of 0 to the development server (#​3692)

    Unix sockets interpret a port of 0 to mean "pick a random unused port in the ephemeral port range". However, esbuild's default behavior when the port is not specified is to pick the first unused port starting from 8000 and upward. This is more convenient because port 8000 is typically free, so you can for example restart the development server and reload your app in the browser without needing to change the port in the URL. Since esbuild is written in Go (which does not have optional fields like JavaScript), not specifying the port in Go means it defaults to 0, so previously passing a port of 0 to esbuild caused port 8000 to be picked.

    Starting with this release, passing a port of 0 to esbuild when using the CLI or the JS API will now pass port 0 to the OS, which will pick a random ephemeral port. To make this possible, the Port option in the Go API has been changed from uint16 to int (to allow for additional sentinel values) and passing a port of -1 in Go now picks a random port. Both the CLI and JS APIs now remap an explicitly-provided port of 0 into -1 for the internal Go API.

    Another option would have been to change Port in Go from uint16 to *uint16 (Go's closest equivalent of number | undefined). However, that would make the common case of providing an explicit port in Go very awkward as Go doesn't support taking the address of integer constants. This tradeoff isn't worth it as picking a random ephemeral port is a rare use case. So the CLI and JS APIs should now match standard Unix behavior when the port is 0, but you need to use -1 instead with Go API.

  • Minification now avoids inlining constants with direct eval (#​4055)

    Direct eval can be used to introduce a new variable like this:

    const variable = false
    ;(function () {
      eval("var variable = true")
      console.log(variable)
    })()
    

    Previously esbuild inlined variable here (which became false), which changed the behavior of the code. This inlining is now avoided, but please keep in mind that direct eval breaks many assumptions that JavaScript tools hold about normal code (especially when bundling) and I do not recommend using it. There are usually better alternatives that have a more localized impact on your code. You can read more about this here: https://esbuild.github.io/link/direct-eval/

v0.24.2

Compare Source

  • Fix regression with --define and import.meta (#​4010, #​4012, #​4013)

    The previous change in version 0.24.1 to use a more expression-like parser for define values to allow quoted property names introduced a regression that removed the ability to use --define:import.meta=.... Even though import is normally a keyword that can't be used as an identifier, ES modules special-case the import.meta expression to behave like an identifier anyway. This change fixes the regression.

    This fix was contributed by @​sapphi-red.

v0.24.1

Compare Source

  • Allow es2024 as a target in tsconfig.json (#​4004)

    TypeScript recently added es2024 as a compilation target, so esbuild now supports this in the target field of tsconfig.json files, such as in the following configuration file:

    {
      "compilerOptions": {
        "target": "ES2024"
      }
    }
    

    As a reminder, the only thing that esbuild uses this field for is determining whether or not to use legacy TypeScript behavior for class fields. You can read more in the documentation.

    This fix was contributed by @​billyjanitsch.

  • Allow automatic semicolon insertion after get/set

    This change fixes a grammar bug in the parser that incorrectly treated the following code as a syntax error:

    class Foo {
      get
      *x() {}
      set
      *y() {}
    }
    

    The above code will be considered valid starting with this release. This change to esbuild follows a similar change to TypeScript which will allow this syntax starting with TypeScript 5.7.

  • Allow quoted property names in --define and --pure (#​4008)

    The define and pure API options now accept identifier expressions containing quoted property names. Previously all identifiers in the identifier expression had to be bare identifiers. This change now makes --define and --pure consistent with --global-name, which already supported quoted property names. For example, the following is now possible:

    // The following code now transforms to "return true;\n"
    console.log(esbuild.transformSync(
      `return process.env['SOME-TEST-VAR']`,
      { define: { 'process.env["SOME-TEST-VAR"]': 'true' } },
    ))
    

    Note that if you're passing values like this on the command line using esbuild's --define flag, then you'll need to know how to escape quote characters for your shell. You may find esbuild's JavaScript API more ergonomic and portable than writing shell code.

  • Minify empty try/catch/finally blocks (#​4003)

    With this release, esbuild will now attempt to minify empty try blocks:

    // Original code
    try {} catch { foo() } finally { bar() }
    
    // Old output (with --minify)
    try{}catch{foo()}finally{bar()}
    
    // New output (with --minify)
    bar();
    

    This can sometimes expose additional minification opportunities.

  • Include entryPoint metadata for the copy loader (#​3985)

    Almost all entry points already include a entryPoint field in the outputs map in esbuild's build metadata. However, this wasn't the case for the copy loader as that loader is a special-case that doesn't behave like other loaders. This release adds the entryPoint field in this case.

  • Source mappings may now contain null entries (#​3310, #​3878)

    With this change, sources that result in an empty source map may now emit a null source mapping (i.e. one with a generated position but without a source index or original position). This change improves source map accuracy by fixing a problem where minified code from a source without any source mappings could potentially still be associated with a mapping from another source file earlier in the generated output on the same minified line. It manifests as nonsensical files in source mapped stack traces. Now the null mapping "resets" the source map so that any lookups into the minified code without any mappings resolves to null (which appears as the output file in stack traces) instead of the incorrect source file.

    This change shouldn't affect anything in most situations. I'm only mentioning it in the release notes in case it introduces a bug with source mapping. It's part of a work-in-progress future feature that will let you omit certain unimportant files from the generated source map to reduce source map size.

  • Avoid using the parent directory name for determinism (#​3998)

    To make generated code more readable, esbuild includes the name of the source file when generating certain variable names within the file. Specifically bundling a CommonJS file generates a variable to store the lazily-evaluated module initializer. However, if a file is named index.js (or with a different extension), esbuild will use the name of the parent directory instead for a better name (since many packages have files all named index.js but have unique directory names).

    This is problematic when the bundle entry point is named index.js and the parent directory name is non-deterministic (e.g. a temporary directory created by a build script). To avoid non-determinism in esbuild's output, esbuild will now use index instead of the parent directory in this case. Specifically this will happen if the parent directory is equal to esbuild's outbase API option, which defaults to the lowest common ancestor of all user-specified entry point paths.

  • Experimental support for esbuild on NetBSD (#​3974)

    With this release, esbuild now has a published binary executable for NetBSD in the @esbuild/netbsd-arm64 npm package, and esbuild's installer has been modified to attempt to use it when on NetBSD. Hopefully this makes installing esbuild via npm work on NetBSD. This change was contributed by @​bsiegert.

    ⚠️ Note: NetBSD is not one of Node's supported platforms, so installing esbuild may or may not work on NetBSD depending on how Node has been patched. This is not a problem with esbuild. ⚠️

v0.24.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.23.0 or ~0.23.0. See npm's documentation about semver for more information.

  • Drop support for older platforms (#​3902)

    This release drops support for the following operating system:

    • macOS 10.15 Catalina

    This is because the Go programming language dropped support for this operating system version in Go 1.23, and this release updates esbuild from Go 1.22 to Go 1.23. Go 1.23 now requires macOS 11 Big Sur or later.

    Note that this only affects the binary esbuild executables that are published to the esbuild npm package. It's still possible to compile esbuild's source code for these older operating systems. If you need to, you can compile esbuild for yourself using an older version of the Go compiler (before Go version 1.23). That might look something like this:

    git clone https://github.com/evanw/esbuild.git
    cd esbuild
    go build ./cmd/esbuild
    ./esbuild --version
    
  • Fix class field decorators in TypeScript if useDefineForClassFields is false (#​3913)

    Setting the useDefineForClassFields flag to false in tsconfig.json means class fields use the legacy TypeScript behavior instead of the standard JavaScript behavior. Specifically they use assign semantics instead of define semantics (e.g. setters are triggered) and fields without an initializer are not initialized at all. However, when this legacy behavior is combined with standard JavaScript decorators, TypeScript switches to always initializing all fields, even those without initializers. Previously esbuild incorrectly continued to omit field initializers for this edge case. These field initializers in this case should now be emitted starting with this release.

  • Avoid incorrect cycle warning with tsconfig.json multiple inheritance (#​3898)

    TypeScript 5.0 introduced multiple inheritance for tsconfig.json files where extends can be an array of file paths. Previously esbuild would incorrectly treat files encountered more than once when processing separate subtrees of the multiple inheritance hierarchy as an inheritance cycle. With this release, tsconfig.json files containing this edge case should work correctly without generating a warning.

  • Handle Yarn Plug'n'Play stack overflow with tsconfig.json (#​3915)

    Previously a tsconfig.json file that extends another file in a package with an exports map could cause a stack overflow when Yarn's Plug'n'Play resolution was active. This edge case should work now starting with this release.

  • Work around more issues with Deno 1.31+ (#​3917)

    This version of Deno broke the stdin and stdout properties on command objects for inherited streams, which matters when you run esbuild's Deno module as the entry point (i.e. when import.meta.main is true). Previously esbuild would crash in Deno 1.31+ if you ran esbuild like that. This should be fixed starting with this release.

    This fix was contributed by @​Joshix-1.

v0.23.1

Compare Source

  • Allow using the node: import prefix with es* targets (#​3821)

    The node: prefix on imports is an alternate way to import built-in node modules. For example, import fs from "fs" can also be written import fs from "node:fs". This only works with certain newer versions of node, so esbuild removes it when you target older versions of node such as with --target=node14 so that your code still works. With the way esbuild's platform-specific feature compatibility table works, this was added by saying that only newer versions of node support this feature. However, that means that a target such as --target=node18,es2022 removes the node: prefix because none of the es* targets are known to support this feature. This release adds the support for the node: flag to esbuild's internal compatibility table for es* to allow you to use compound targets like this:

    // Original code
    import fs from 'node:fs'
    fs.open
    
    // Old output (with --bundle --format=esm --platform=node --target=node18,es2022)
    import fs from "fs";
    fs.open;
    
    // New output (with --bundle --format=esm --platform=node --target=node18,es2022)
    import fs from "node:fs";
    fs.open;
    
  • Fix a panic when using the CLI with invalid build flags if --analyze is present (#​3834)

    Previously esbuild's CLI could crash if it was invoked with flags that aren't valid for a "build" API call and the --analyze flag is present. This was caused by esbuild's internals attempting to add a Go plugin (which is how --analyze is implemented) to a null build object. The panic has been fixed in this release.

  • Fix incorrect location of certain error messages (#​3845)

    This release fixes a regression that caused certain errors relating to variable declarations to be reported at an incorrect location. The regression was introduced in version 0.18.7 of esbuild.

  • Print comments before case clauses in switch statements (#​3838)

    With this release, esbuild will attempt to print comments that come before case clauses in switch statements. This is similar to what esbuild already does for comments inside of certain types of expressions. Note that these types of comments are not printed if minification is enabled (specifically whitespace minification).

  • Fix a memory leak with pluginData (#​3825)

    With this release, the build context's internal pluginData cache will now be cleared when starting a new build. This should fix a leak of memory from plugins that return pluginData objects from onResolve and/or onLoad callbacks.

v0.23.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.22.0 or ~0.22.0. See npm's documentation about semver for more information.

  • Revert the recent change to avoid bundling dependencies for node (#​3819)

    This release reverts the recent change in version 0.22.0 that made --packages=external the default behavior with --platform=node. The default is now back to --packages=bundle.

    I've just been made aware that Amazon doesn't pin their dependencies in their "AWS CDK" product, which means that whenever esbuild publishes a new release, many people (potentially everyone?) using their SDK around the world instantly starts using it without Amazon checking that it works first. This change in version 0.22.0 happened to break their SDK. I'm amazed that things haven't broken before this point. This revert attempts to avoid these problems for Amazon's customers. Hopefully Amazon will pin their dependencies in the future.

    In addition, this is probably a sign that esbuild is used widely enough that it now needs to switch to a more complicated release model. I may have esbuild use a beta channel model for further development.

  • Fix preserving collapsed JSX whitespace (#​3818)

    When transformed, certain whitespace inside JSX elements is ignored completely if it collapses to an empty string. However, the whitespace should only be ignored if the JSX is being transformed, not if it's being preserved. This release fixes a bug where esbuild was previously incorrectly ignoring collapsed whitespace with --jsx=preserve. Here is an example:

    // Original code
    <Foo>
      <Bar />
    </Foo>
    
    // Old output (with --jsx=preserve)
    <Foo><Bar /></Foo>;
    
    // New output (with --jsx=preserve)
    <Foo>
      <Bar />
    </Foo>;
    
WebReflection/linkedom (linkedom)

v0.18.12

Compare Source

v0.18.11

Compare Source

v0.18.10

Compare Source

v0.18.9

Compare Source

v0.18.8

Compare Source

v0.18.7

Compare Source

v0.18.6

Compare Source

v0.18.5

Compare Source


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.

👻 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 has been generated by Renovate Bot.

This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [@mozilla/readability](https://github.com/mozilla/readability) | dependencies | minor | [`^0.5.0` -> `^0.6.0`](https://renovatebot.com/diffs/npm/@mozilla%2freadability/0.5.0/0.6.0) | | [esbuild](https://github.com/evanw/esbuild) | dependencies | minor | [`^0.22.0` -> `^0.25.0`](https://renovatebot.com/diffs/npm/esbuild/0.22.0/0.25.10) | | [linkedom](https://github.com/WebReflection/linkedom) | dependencies | patch | [`0.18.4` -> `0.18.12`](https://renovatebot.com/diffs/npm/linkedom/0.18.4/0.18.12) | --- ### Release Notes <details> <summary>mozilla/readability (@&#8203;mozilla/readability)</summary> ### [`v0.6.0`](https://github.com/mozilla/readability/blob/HEAD/CHANGELOG.md#060---2025-03-03) [Compare Source](https://github.com/mozilla/readability/compare/0.5.0...0.6.0) - [Add Parsely tags as a fallback metadata source](https://github.com/mozilla/readability/pull/865) - [Fix the case that jsonld parse process is ignored when context url include the trailing slash](https://github.com/mozilla/readability/pull/833) - [Improve data table support](https://github.com/mozilla/readability/pull/858) - [Fixed situations where short paragraphs of legitimate content would be excluded](https://github.com/mozilla/readability/pull/867) - [Add an option to modify link density value](https://github.com/mozilla/readability/pull/874) - [Byline metadata should lead to not deleting lookalike non-byline content](https://github.com/mozilla/readability/pull/869) - [Avoid removing headers on gitlab](https://github.com/mozilla/readability/pull/885) - [Improved HTML character unescaping](https://github.com/mozilla/readability/pull/896) - Various performance improvements: [#&#8203;894](https://github.com/mozilla/readability/pull/894), [#&#8203;892](https://github.com/mozilla/readability/pull/892), [#&#8203;893](https://github.com/mozilla/readability/pull/893), [#&#8203;915](https://github.com/mozilla/readability/pull/915), - [Fix broken JSONLD context handling](https://github.com/mozilla/readability/pull/902) - [Include Jekyll footnotes in output](https://github.com/mozilla/readability/pull/907) - [Handle schema.org context objects](https://github.com/mozilla/readability/pull/940) - [Fix invalid attributes breaking parsing](https://github.com/mozilla/readability/pull/918) - [Include article:author metadata](https://github.com/mozilla/readability/pull/942) - [Handle itemprop=name for author metadata](https://github.com/mozilla/readability/pull/943) - [Improve typescript definitions](https://github.com/mozilla/readability/pull/944) - [Handle JSONLD Arrays](https://github.com/mozilla/readability/pull/947) </details> <details> <summary>evanw/esbuild (esbuild)</summary> ### [`v0.25.10`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#02510) [Compare Source](https://github.com/evanw/esbuild/compare/v0.25.9...v0.25.10) - Fix a panic in a minification edge case ([#&#8203;4287](https://github.com/evanw/esbuild/issues/4287)) This release fixes a panic due to a null pointer that could happen when esbuild inlines a doubly-nested identity function and the final result is empty. It was fixed by emitting the value `undefined` in this case, which avoids the panic. This case must be rare since it hasn't come up until now. Here is an example of code that previously triggered the panic (which only happened when minifying): ```js function identity(x) { return x } identity({ y: identity(123) }) ``` - Fix `@supports` nested inside pseudo-element ([#&#8203;4265](https://github.com/evanw/esbuild/issues/4265)) When transforming nested CSS to non-nested CSS, esbuild is supposed to filter out pseudo-elements such as `::placeholder` for correctness. The [CSS nesting specification](https://www.w3.org/TR/css-nesting-1/) says the following: > The nesting selector cannot represent pseudo-elements (identical to the behavior of the ':is()' pseudo-class). We’d like to relax this restriction, but need to do so simultaneously for both ':is()' and '&', since they’re intentionally built on the same underlying mechanisms. However, it seems like this behavior is different for nested at-rules such as `@supports`, which do work with pseudo-elements. So this release modifies esbuild's behavior to now take that into account: ```css /* Original code */ ::placeholder { color: red; body & { color: green } @&#8203;supports (color: blue) { color: blue } } /* Old output (with --supported:nesting=false) */ ::placeholder { color: red; } body :is() { color: green; } @&#8203;supports (color: blue) { { color: blue; } } /* New output (with --supported:nesting=false) */ ::placeholder { color: red; } body :is() { color: green; } @&#8203;supports (color: blue) { ::placeholder { color: blue; } } ``` ### [`v0.25.9`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0259) [Compare Source](https://github.com/evanw/esbuild/compare/v0.25.8...v0.25.9) - Better support building projects that use Yarn on Windows ([#&#8203;3131](https://github.com/evanw/esbuild/issues/3131), [#&#8203;3663](https://github.com/evanw/esbuild/issues/3663)) With this release, you can now use esbuild to bundle projects that use Yarn Plug'n'Play on Windows on drives other than the `C:` drive. The problem was as follows: 1. Yarn in Plug'n'Play mode on Windows stores its global module cache on the `C:` drive 2. Some developers put their projects on the `D:` drive 3. Yarn generates relative paths that use `../..` to get from the project directory to the cache directory 4. Windows-style paths don't support directory traversal between drives via `..` (so `D:\..` is just `D:`) 5. I didn't have access to a Windows machine for testing this edge case Yarn works around this edge case by pretending Windows-style paths beginning with `C:\` are actually Unix-style paths beginning with `/C:/`, so the `../..` path segments are able to navigate across drives inside Yarn's implementation. This was broken for a long time in esbuild but I finally got access to a Windows machine and was able to debug and fix this edge case. So you should now be able to bundle these projects with esbuild. - Preserve parentheses around function expressions ([#&#8203;4252](https://github.com/evanw/esbuild/issues/4252)) The V8 JavaScript VM uses parentheses around function expressions as an optimization hint to immediately compile the function. Otherwise the function would be lazily-compiled, which has additional overhead if that function is always called immediately as lazy compilation involves parsing the function twice. You can read [V8's blog post about this](https://v8.dev/blog/preparser) for more details. Previously esbuild did not represent parentheses around functions in the AST so they were lost during compilation. With this change, esbuild will now preserve parentheses around function expressions when they are present in the original source code. This means these optimization hints will not be lost when bundling with esbuild. In addition, esbuild will now automatically add this optimization hint to immediately-invoked function expressions. Here's an example: ```js // Original code const fn0 = () => 0 const fn1 = (() => 1) console.log(fn0, function() { return fn1() }()) // Old output const fn0 = () => 0; const fn1 = () => 1; console.log(fn0, function() { return fn1(); }()); // New output const fn0 = () => 0; const fn1 = (() => 1); console.log(fn0, (function() { return fn1(); })()); ``` Note that you do not want to wrap all function expressions in parentheses. This optimization hint should only be used for functions that are called on initial load. Using this hint for functions that are not called on initial load will unnecessarily delay the initial load. Again, see V8's blog post linked above for details. - Update Go from 1.23.10 to 1.23.12 ([#&#8203;4257](https://github.com/evanw/esbuild/issues/4257), [#&#8203;4258](https://github.com/evanw/esbuild/pull/4258)) This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain false positive reports (specifically CVE-2025-4674 and CVE-2025-47907) from vulnerability scanners that only detect which version of the Go compiler esbuild uses. ### [`v0.25.8`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0258) [Compare Source](https://github.com/evanw/esbuild/compare/v0.25.7...v0.25.8) - Fix another TypeScript parsing edge case ([#&#8203;4248](https://github.com/evanw/esbuild/issues/4248)) This fixes a regression with a change in the previous release that tries to more accurately parse TypeScript arrow functions inside the `?:` operator. The regression specifically involves parsing an arrow function containing a `#private` identifier inside the middle of a `?:` ternary operator inside a class body. This was fixed by propagating private identifier state into the parser clone used to speculatively parse the arrow function body. Here is an example of some affected code: ```ts class CachedDict { #has = (a: string) => dict.has(a); has = window ? (word: string): boolean => this.#has(word) : this.#has; } ``` - Fix a regression with the parsing of source phase imports The change in the previous release to parse [source phase imports](https://github.com/tc39/proposal-source-phase-imports) failed to properly handle the following cases: ```ts import source from 'bar' import source from from 'bar' import source type foo from 'bar' ``` Parsing for these cases should now be fixed. The first case was incorrectly treated as a syntax error because esbuild was expecting the second case. And the last case was previously allowed but is now forbidden. TypeScript hasn't added this feature yet so it remains to be seen whether the last case will be allowed, but it's safer to disallow it for now. At least Babel doesn't allow the last case when parsing TypeScript, and Babel was involved with the source phase import specification. ### [`v0.25.7`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0257) [Compare Source](https://github.com/evanw/esbuild/compare/v0.25.6...v0.25.7) - Parse and print JavaScript imports with an explicit phase ([#&#8203;4238](https://github.com/evanw/esbuild/issues/4238)) This release adds basic syntax support for the `defer` and `source` import phases in JavaScript: - `defer` This is a [stage 3 proposal](https://github.com/tc39/proposal-defer-import-eval) for an upcoming JavaScript feature that will provide one way to eagerly load but lazily initialize imported modules. The imported module is automatically initialized on first use. Support for this syntax will also be part of the upcoming release of [TypeScript 5.9](https://devblogs.microsoft.com/typescript/announcing-typescript-5-9-beta/#support-for-import-defer). The syntax looks like this: ```js import defer * as foo from "<specifier>"; const bar = await import.defer("<specifier>"); ``` Note that this feature deliberately cannot be used with the syntax `import defer foo from "<specifier>"` or `import defer { foo } from "<specifier>"`. - `source` This is a [stage 3 proposal](https://github.com/tc39/proposal-source-phase-imports) for an upcoming JavaScript feature that will provide another way to eagerly load but lazily initialize imported modules. The imported module is returned in an uninitialized state. Support for this syntax may or may not be a part of TypeScript 5.9 (see [this issue](https://github.com/microsoft/TypeScript/issues/61216) for details). The syntax looks like this: ```js import source foo from "<specifier>"; const bar = await import.source("<specifier>"); ``` Note that this feature deliberately cannot be used with the syntax `import defer * as foo from "<specifier>"` or `import defer { foo } from "<specifier>"`. This change only adds support for this syntax. These imports cannot currently be bundled by esbuild. To use these new features with esbuild's bundler, the imported paths must be external to the bundle and the output format must be set to `esm`. - Support optionally emitting absolute paths instead of relative paths ([#&#8203;338](https://github.com/evanw/esbuild/issues/338), [#&#8203;2082](https://github.com/evanw/esbuild/issues/2082), [#&#8203;3023](https://github.com/evanw/esbuild/issues/3023)) This release introduces the `--abs-paths=` feature which takes a comma-separated list of situations where esbuild should use absolute paths instead of relative paths. There are currently three supported situations: `code` (comments and string literals), `log` (log message text and location info), and `metafile` (the JSON build metadata). Using absolute paths instead of relative paths is not the default behavior because it means that the build results are no longer machine-independent (which means builds are no longer reproducible). Absolute paths can be useful when used with certain terminal emulators that allow you to click on absolute paths in the terminal text and/or when esbuild is being automatically invoked from several different directories within the same script. - Fix a TypeScript parsing edge case ([#&#8203;4241](https://github.com/evanw/esbuild/issues/4241)) This release fixes an edge case with parsing an arrow function in TypeScript with a return type that's in the middle of a `?:` ternary operator. For example: ```ts x = a ? (b) : c => d; y = a ? (b) : c => d : e; ``` The `:` token in the value assigned to `x` pairs with the `?` token, so it's not the start of a return type annotation. However, the first `:` token in the value assigned to `y` is the start of a return type annotation because after parsing the arrow function body, it turns out there's another `:` token that can be used to pair with the `?` token. This case is notable as it's the first TypeScript edge case that esbuild has needed a backtracking parser to parse. It has been addressed by a quick hack (cloning the whole parser) as it's a rare edge case and esbuild doesn't otherwise need a backtracking parser. Hopefully this is sufficient and doesn't cause any issues. - Inline small constant strings when minifying Previously esbuild's minifier didn't inline string constants because strings can be arbitrarily long, and this isn't necessarily a size win if the string is used more than once. Starting with this release, esbuild will now inline string constants when the length of the string is three code units or less. For example: ```js // Original code const foo = 'foo' console.log({ [foo]: true }) // Old output (with --minify --bundle --format=esm) var o="foo";console.log({[o]:!0}); // New output (with --minify --bundle --format=esm) console.log({foo:!0}); ``` Note that esbuild's constant inlining only happens in very restrictive scenarios to avoid issues with TDZ handling. This change doesn't change when esbuild's constant inlining happens. It only expands the scope of it to include certain string literals in addition to numeric and boolean literals. ### [`v0.25.6`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0256) [Compare Source](https://github.com/evanw/esbuild/compare/v0.25.5...v0.25.6) - Fix a memory leak when `cancel()` is used on a build context ([#&#8203;4231](https://github.com/evanw/esbuild/issues/4231)) Calling `rebuild()` followed by `cancel()` in rapid succession could previously leak memory. The bundler uses a producer/consumer model internally, and the resource leak was caused by the consumer being termianted while there were still remaining unreceived results from a producer. To avoid the leak, the consumer now waits for all producers to finish before terminating. - Support empty `:is()` and `:where()` syntax in CSS ([#&#8203;4232](https://github.com/evanw/esbuild/issues/4232)) Previously using these selectors with esbuild would generate a warning. That warning has been removed in this release for these cases. - Improve tree-shaking of `try` statements in dead code ([#&#8203;4224](https://github.com/evanw/esbuild/issues/4224)) With this release, esbuild will now remove certain `try` statements if esbuild considers them to be within dead code (i.e. code that is known to not ever be evaluated). For example: ```js // Original code return 'foo' try { return 'bar' } catch {} // Old output (with --minify) return"foo";try{return"bar"}catch{} // New output (with --minify) return"foo"; ``` - Consider negated bigints to have no side effects While esbuild currently considers `1`, `-1`, and `1n` to all have no side effects, it didn't previously consider `-1n` to have no side effects. This is because esbuild does constant folding with numbers but not bigints. However, it meant that unused negative bigint constants were not tree-shaken. With this release, esbuild will now consider these expressions to also be side-effect free: ```js // Original code let a = 1, b = -1, c = 1n, d = -1n // Old output (with --bundle --minify) (()=>{var n=-1n;})(); // New output (with --bundle --minify) (()=>{})(); ``` - Support a configurable delay in watch mode before rebuilding ([#&#8203;3476](https://github.com/evanw/esbuild/issues/3476), [#&#8203;4178](https://github.com/evanw/esbuild/issues/4178)) The `watch()` API now takes a `delay` option that lets you add a delay (in milliseconds) before rebuilding when a change is detected in watch mode. If you use a tool that regenerates multiple source files very slowly, this should make it more likely that esbuild's watch mode won't generate a broken intermediate build before the successful final build. This option is also available via the CLI using the `--watch-delay=` flag. This should also help avoid confusion about the `watch()` API's options argument. It was previously empty to allow for future API expansion, which caused some people to think that the documentation was missing. It's no longer empty now that the `watch()` API has an option. - Allow mixed array for `entryPoints` API option ([#&#8203;4223](https://github.com/evanw/esbuild/issues/4223)) The TypeScript type definitions now allow you to pass a mixed array of both string literals and object literals to the `entryPoints` API option, such as `['foo.js', { out: 'lib', in: 'bar.js' }]`. This was always possible to do in JavaScript but the TypeScript type definitions were previously too restrictive. - Update Go from 1.23.8 to 1.23.10 ([#&#8203;4204](https://github.com/evanw/esbuild/issues/4204), [#&#8203;4207](https://github.com/evanw/esbuild/pull/4207)) This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain false positive reports (specifically CVE-2025-4673 and CVE-2025-22874) from vulnerability scanners that only detect which version of the Go compiler esbuild uses. - Experimental support for esbuild on OpenHarmony ([#&#8203;4212](https://github.com/evanw/esbuild/pull/4212)) With this release, esbuild now publishes the [`@esbuild/openharmony-arm64`](https://www.npmjs.com/package/@&#8203;esbuild/openharmony-arm64) npm package for [OpenHarmony](https://en.wikipedia.org/wiki/OpenHarmony). It contains a WebAssembly binary instead of a native binary because Go doesn't currently support OpenHarmony. Node does support it, however, so in theory esbuild should now work on OpenHarmony through WebAssembly. This change was contributed by [@&#8203;hqzing](https://github.com/hqzing). ### [`v0.25.5`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0255) [Compare Source](https://github.com/evanw/esbuild/compare/v0.25.4...v0.25.5) - Fix a regression with `browser` in `package.json` ([#&#8203;4187](https://github.com/evanw/esbuild/issues/4187)) The fix to [#&#8203;4144](https://github.com/evanw/esbuild/issues/4144) in version 0.25.3 introduced a regression that caused `browser` overrides specified in `package.json` to fail to override relative path names that end in a trailing slash. That behavior change affected the `axios@0.30.0` package. This regression has been fixed, and now has test coverage. - Add support for certain keywords as TypeScript tuple labels ([#&#8203;4192](https://github.com/evanw/esbuild/issues/4192)) Previously esbuild could incorrectly fail to parse certain keywords as TypeScript tuple labels that are parsed by the official TypeScript compiler if they were followed by a `?` modifier. These labels included `function`, `import`, `infer`, `new`, `readonly`, and `typeof`. With this release, these keywords will now be parsed correctly. Here's an example of some affected code: ```ts type Foo = [ value: any, readonly?: boolean, // This is now parsed correctly ] ``` - Add CSS prefixes for the `stretch` sizing value ([#&#8203;4184](https://github.com/evanw/esbuild/issues/4184)) This release adds support for prefixing CSS declarations such as `div { width: stretch }`. That CSS is now transformed into this depending on what the `--target=` setting includes: ```css div { width: -webkit-fill-available; width: -moz-available; width: stretch; } ``` ### [`v0.25.4`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0254) [Compare Source](https://github.com/evanw/esbuild/compare/v0.25.3...v0.25.4) - Add simple support for CORS to esbuild's development server ([#&#8203;4125](https://github.com/evanw/esbuild/issues/4125)) Starting with version 0.25.0, esbuild's development server is no longer configured to serve cross-origin requests. This was a deliberate change to prevent any website you visit from accessing your running esbuild development server. However, this change prevented (by design) certain use cases such as "debugging in production" by having your production website load code from `localhost` where the esbuild development server is running. To enable this use case, esbuild is adding a feature to allow [Cross-Origin Resource Sharing](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS) (a.k.a. CORS) for [simple requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CORS#simple_requests). Specifically, passing your origin to the new `cors` option will now set the `Access-Control-Allow-Origin` response header when the request has a matching `Origin` header. Note that this currently only works for requests that don't send a preflight `OPTIONS` request, as esbuild's development server doesn't currently support `OPTIONS` requests. Some examples: - **CLI:** ``` esbuild --servedir=. --cors-origin=https://example.com ``` - **JS:** ```js const ctx = await esbuild.context({}) await ctx.serve({ servedir: '.', cors: { origin: 'https://example.com', }, }) ``` - **Go:** ```go ctx, _ := api.Context(api.BuildOptions{}) ctx.Serve(api.ServeOptions{ Servedir: ".", CORS: api.CORSOptions{ Origin: []string{"https://example.com"}, }, }) ``` The special origin `*` can be used to allow any origin to access esbuild's development server. Note that this means any website you visit will be able to read everything served by esbuild. - Pass through invalid URLs in source maps unmodified ([#&#8203;4169](https://github.com/evanw/esbuild/issues/4169)) This fixes a regression in version 0.25.0 where `sources` in source maps that form invalid URLs were not being passed through to the output. Version 0.25.0 changed the interpretation of `sources` from file paths to URLs, which means that URL parsing can now fail. Previously URLs that couldn't be parsed were replaced with the empty string. With this release, invalid URLs in `sources` should now be passed through unmodified. - Handle exports named `__proto__` in ES modules ([#&#8203;4162](https://github.com/evanw/esbuild/issues/4162), [#&#8203;4163](https://github.com/evanw/esbuild/pull/4163)) In JavaScript, the special property name `__proto__` sets the prototype when used inside an object literal. Previously esbuild's ESM-to-CommonJS conversion didn't special-case the property name of exports named `__proto__` so the exported getter accidentally became the prototype of the object literal. It's unclear what this affects, if anything, but it's better practice to avoid this by using a computed property name in this case. This fix was contributed by [@&#8203;magic-akari](https://github.com/magic-akari). ### [`v0.25.3`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0253) [Compare Source](https://github.com/evanw/esbuild/compare/v0.25.2...v0.25.3) - Fix lowered `async` arrow functions before `super()` ([#&#8203;4141](https://github.com/evanw/esbuild/issues/4141), [#&#8203;4142](https://github.com/evanw/esbuild/pull/4142)) This change makes it possible to call an `async` arrow function in a constructor before calling `super()` when targeting environments without `async` support, as long as the function body doesn't reference `this`. Here's an example (notice the change from `this` to `null`): ```js // Original code class Foo extends Object { constructor() { (async () => await foo())() super() } } // Old output (with --target=es2016) class Foo extends Object { constructor() { (() => __async(this, null, function* () { return yield foo(); }))(); super(); } } // New output (with --target=es2016) class Foo extends Object { constructor() { (() => __async(null, null, function* () { return yield foo(); }))(); super(); } } ``` Some background: Arrow functions with the `async` keyword are transformed into generator functions for older language targets such as `--target=es2016`. Since arrow functions capture `this`, the generated code forwards `this` into the body of the generator function. However, JavaScript class syntax forbids using `this` in a constructor before calling `super()`, and this forwarding was problematic since previously happened even when the function body doesn't use `this`. Starting with this release, esbuild will now only forward `this` if it's used within the function body. This fix was contributed by [@&#8203;magic-akari](https://github.com/magic-akari). - Fix memory leak with `--watch=true` ([#&#8203;4131](https://github.com/evanw/esbuild/issues/4131), [#&#8203;4132](https://github.com/evanw/esbuild/pull/4132)) This release fixes a memory leak with esbuild when `--watch=true` is used instead of `--watch`. Previously using `--watch=true` caused esbuild to continue to use more and more memory for every rebuild, but `--watch=true` should now behave like `--watch` and not leak memory. This bug happened because esbuild disables the garbage collector when it's not run as a long-lived process for extra speed, but esbuild's checks for which arguments cause esbuild to be a long-lived process weren't updated for the new `--watch=true` style of boolean command-line flags. This has been an issue since this boolean flag syntax was added in version 0.14.24 in 2022. These checks are unfortunately separate from the regular argument parser because of how esbuild's internals are organized (the command-line interface is exposed as a separate [Go API](https://pkg.go.dev/github.com/evanw/esbuild/pkg/cli) so you can build your own custom esbuild CLI). This fix was contributed by [@&#8203;mxschmitt](https://github.com/mxschmitt). - More concise output for repeated legal comments ([#&#8203;4139](https://github.com/evanw/esbuild/issues/4139)) Some libraries have many files and also use the same legal comment text in all files. Previously esbuild would copy each legal comment to the output file. Starting with this release, legal comments duplicated across separate files will now be grouped in the output file by unique comment content. - Allow a custom host with the development server ([#&#8203;4110](https://github.com/evanw/esbuild/issues/4110)) With this release, you can now use a custom non-IP `host` with esbuild's local development server (either with `--serve=` for the CLI or with the `serve()` call for the API). This was previously possible, but was intentionally broken in [version 0.25.0](https://github.com/evanw/esbuild/releases/v0.25.0) to fix a security issue. This change adds the functionality back except that it's now opt-in and only for a single domain name that you provide. For example, if you add a mapping in your `/etc/hosts` file from `local.example.com` to `127.0.0.1` and then use `esbuild --serve=local.example.com:8000`, you will now be able to visit <http://local.example.com:8000/> in your browser and successfully connect to esbuild's development server (doing that would previously have been blocked by the browser). This should also work with HTTPS if it's enabled (see esbuild's documentation for how to do that). - Add a limit to CSS nesting expansion ([#&#8203;4114](https://github.com/evanw/esbuild/issues/4114)) With this release, esbuild will now fail with an error if there is too much CSS nesting expansion. This can happen when nested CSS is converted to CSS without nesting for older browsers as expanding CSS nesting is inherently exponential due to the resulting combinatorial explosion. The expansion limit is currently hard-coded and cannot be changed, but is extremely unlikely to trigger for real code. It exists to prevent esbuild from using too much time and/or memory. Here's an example: ```css a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{color:red}}}}}}}}}}}}}}}}}}}} ``` Previously, transforming this file with `--target=safari1` took 5 seconds and generated 40mb of CSS. Trying to do that will now generate the following error instead: ``` ✘ [ERROR] CSS nesting is causing too much expansion example.css:1:60: 1 │ a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{a,b{color:red}}}}}}}}}}}}}}}}}}}} ╵ ^ CSS nesting expansion was terminated because a rule was generated with 65536 selectors. This limit exists to prevent esbuild from using too much time and/or memory. Please change your CSS to use fewer levels of nesting. ``` - Fix path resolution edge case ([#&#8203;4144](https://github.com/evanw/esbuild/issues/4144)) This fixes an edge case where esbuild's path resolution algorithm could deviate from node's path resolution algorithm. It involves a confusing situation where a directory shares the same file name as a file (but without the file extension). See the linked issue for specific details. This appears to be a case where esbuild is correctly following [node's published resolution algorithm](https://nodejs.org/api/modules.html#all-together) but where node itself is doing something different. Specifically the step `LOAD_AS_FILE` appears to be skipped when the input ends with `..`. This release changes esbuild's behavior for this edge case to match node's behavior. - Update Go from 1.23.7 to 1.23.8 ([#&#8203;4133](https://github.com/evanw/esbuild/issues/4133), [#&#8203;4134](https://github.com/evanw/esbuild/pull/4134)) This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain reports from vulnerability scanners that detect which version of the Go compiler esbuild uses, such as for CVE-2025-22871. As a reminder, esbuild's development server is intended for development, not for production, so I do not consider most networking-related vulnerabilities in Go to be vulnerabilities in esbuild. Please do not use esbuild's development server in production. ### [`v0.25.2`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0252) [Compare Source](https://github.com/evanw/esbuild/compare/v0.25.1...v0.25.2) - Support flags in regular expressions for the API ([#&#8203;4121](https://github.com/evanw/esbuild/issues/4121)) The JavaScript plugin API for esbuild takes JavaScript regular expression objects for the `filter` option. Internally these are translated into Go regular expressions. However, this translation previously ignored the `flags` property of the regular expression. With this release, esbuild will now translate JavaScript regular expression flags into Go regular expression flags. Specifically the JavaScript regular expression `/\.[jt]sx?$/i` is turned into the Go regular expression `` `(?i)\.[jt]sx?$` `` internally inside of esbuild's API. This should make it possible to use JavaScript regular expressions with the `i` flag. Note that JavaScript and Go don't support all of the same regular expression features, so this mapping is only approximate. - Fix node-specific annotations for string literal export names ([#&#8203;4100](https://github.com/evanw/esbuild/issues/4100)) When node instantiates a CommonJS module, it scans the AST to look for names to expose via ESM named exports. This is a heuristic that looks for certain patterns such as `exports.NAME = ...` or `module.exports = { ... }`. This behavior is used by esbuild to "annotate" CommonJS code that was converted from ESM with the original ESM export names. For example, when converting the file `export let foo, bar` from ESM to CommonJS, esbuild appends this to the end of the file: ```js // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { bar, foo }); ``` However, this feature previously didn't work correctly for export names that are not valid identifiers, which can be constructed using string literal export names. The generated code contained a syntax error. That problem is fixed in this release: ```js // Original code let foo export { foo as "foo!" } // Old output (with --format=cjs --platform=node) ... 0 && (module.exports = { "foo!" }); // New output (with --format=cjs --platform=node) ... 0 && (module.exports = { "foo!": null }); ``` - Basic support for index source maps ([#&#8203;3439](https://github.com/evanw/esbuild/issues/3439), [#&#8203;4109](https://github.com/evanw/esbuild/pull/4109)) The source map specification has an optional mode called [index source maps](https://tc39.es/ecma426/#sec-index-source-map) that makes it easier for tools to create an aggregate JavaScript file by concatenating many smaller JavaScript files with source maps, and then generate an aggregate source map by simply providing the original source maps along with some offset information. My understanding is that this is rarely used in practice. I'm only aware of two uses of it in the wild: [ClojureScript](https://clojurescript.org/) and [Turbopack](https://turbo.build/pack/). This release provides basic support for indexed source maps. However, the implementation has not been tested on a real app (just on very simple test input). If you are using index source maps in a real app, please try this out and report back if anything isn't working for you. Note that this is also not a complete implementation. For example, index source maps technically allows nesting source maps to an arbitrary depth, while esbuild's implementation in this release only supports a single level of nesting. It's unclear whether supporting more than one level of nesting is important or not given the lack of available test cases. This feature was contributed by [@&#8203;clyfish](https://github.com/clyfish). ### [`v0.25.1`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#02510) [Compare Source](https://github.com/evanw/esbuild/compare/v0.25.0...v0.25.1) - Fix a panic in a minification edge case ([#&#8203;4287](https://github.com/evanw/esbuild/issues/4287)) This release fixes a panic due to a null pointer that could happen when esbuild inlines a doubly-nested identity function and the final result is empty. It was fixed by emitting the value `undefined` in this case, which avoids the panic. This case must be rare since it hasn't come up until now. Here is an example of code that previously triggered the panic (which only happened when minifying): ```js function identity(x) { return x } identity({ y: identity(123) }) ``` - Fix `@supports` nested inside pseudo-element ([#&#8203;4265](https://github.com/evanw/esbuild/issues/4265)) When transforming nested CSS to non-nested CSS, esbuild is supposed to filter out pseudo-elements such as `::placeholder` for correctness. The [CSS nesting specification](https://www.w3.org/TR/css-nesting-1/) says the following: > The nesting selector cannot represent pseudo-elements (identical to the behavior of the ':is()' pseudo-class). We’d like to relax this restriction, but need to do so simultaneously for both ':is()' and '&', since they’re intentionally built on the same underlying mechanisms. However, it seems like this behavior is different for nested at-rules such as `@supports`, which do work with pseudo-elements. So this release modifies esbuild's behavior to now take that into account: ```css /* Original code */ ::placeholder { color: red; body & { color: green } @&#8203;supports (color: blue) { color: blue } } /* Old output (with --supported:nesting=false) */ ::placeholder { color: red; } body :is() { color: green; } @&#8203;supports (color: blue) { { color: blue; } } /* New output (with --supported:nesting=false) */ ::placeholder { color: red; } body :is() { color: green; } @&#8203;supports (color: blue) { ::placeholder { color: blue; } } ``` ### [`v0.25.0`](https://github.com/evanw/esbuild/blob/HEAD/CHANGELOG.md#0250) [Compare Source](https://github.com/evanw/esbuild/compare/v0.24.2...v0.25.0) **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.24.0` or `~0.24.0`. See npm's documentation about [semver](https://docs.npmjs.com/cli/v6/using-npm/semver/) for more information. - Restrict access to esbuild's development server ([GHSA-67mh-4wv8-2f99](https://github.com/evanw/esbuild/security/advisories/GHSA-67mh-4wv8-2f99)) This change addresses esbuild's first security vulnerability report. Previously esbuild set the `Access-Control-Allow-Origin` header to `*` to allow esbuild's development server to be flexible in how it's used for development. However, this allows the websites you visit to make HTTP requests to esbuild's local development server, which gives read-only access to your source code if the website were to fetch your source code's specific URL. You can read more information in [the report](https://github.com/evanw/esbuild/security/advisories/GHSA-67mh-4wv8-2f99). Starting with this release, [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) will now be disabled, and requests will now be denied if the host does not match the one provided to `--serve=`. The default host is `0.0.0.0`, which refers to all of the IP addresses that represent the local machine (e.g. both `127.0.0.1` and `192.168.0.1`). If you want to customize anything about esbuild's development server, you can [put a proxy in front of esbuild](https://esbuild.github.io/api/#serve-proxy) and modify the incoming and/or outgoing requests. In addition, the `serve()` API call has been changed to return an array of `hosts` instead of a single `host` string. This makes it possible to determine all of the hosts that esbuild's development server will accept. Thanks to [@&#8203;sapphi-red](https://github.com/sapphi-red) for reporting this issue. - Delete output files when a build fails in watch mode ([#&#8203;3643](https://github.com/evanw/esbuild/issues/3643)) It has been requested for esbuild to delete files when a build fails in watch mode. Previously esbuild left the old files in place, which could cause people to not immediately realize that the most recent build failed. With this release, esbuild will now delete all output files if a rebuild fails. Fixing the build error and triggering another rebuild will restore all output files again. - Fix correctness issues with the CSS nesting transform ([#&#8203;3620](https://github.com/evanw/esbuild/issues/3620), [#&#8203;3877](https://github.com/evanw/esbuild/issues/3877), [#&#8203;3933](https://github.com/evanw/esbuild/issues/3933), [#&#8203;3997](https://github.com/evanw/esbuild/issues/3997), [#&#8203;4005](https://github.com/evanw/esbuild/issues/4005), [#&#8203;4037](https://github.com/evanw/esbuild/pull/4037), [#&#8203;4038](https://github.com/evanw/esbuild/pull/4038)) This release fixes the following problems: - Naive expansion of CSS nesting can result in an exponential blow-up of generated CSS if each nesting level has multiple selectors. Previously esbuild sometimes collapsed individual nesting levels using `:is()` to limit expansion. However, this collapsing wasn't correct in some cases, so it has been removed to fix correctness issues. ```css /* Original code */ .parent { > .a, > .b1 > .b2 { color: red; } } /* Old output (with --supported:nesting=false) */ .parent > :is(.a, .b1 > .b2) { color: red; } /* New output (with --supported:nesting=false) */ .parent > .a, .parent > .b1 > .b2 { color: red; } ``` Thanks to [@&#8203;tim-we](https://github.com/tim-we) for working on a fix. - The `&` CSS nesting selector can be repeated multiple times to increase CSS specificity. Previously esbuild ignored this possibility and incorrectly considered `&&` to have the same specificity as `&`. With this release, this should now work correctly: ```css /* Original code (color should be red) */ div { && { color: red } & { color: blue } } /* Old output (with --supported:nesting=false) */ div { color: red; } div { color: blue; } /* New output (with --supported:nesting=false) */ div:is(div) { color: red; } div { color: blue; } ``` Thanks to [@&#8203;CPunisher](https://github.com/CPunisher) for working on a fix. - Previously transforming nested CSS incorrectly removed leading combinators from within pseudoclass selectors such as `:where()`. This edge case has been fixed and how has test coverage. ```css /* Original code */ a b:has(> span) { a & { color: green; } } /* Old output (with --supported:nesting=false) */ a :is(a b:has(span)) { color: green; } /* New output (with --supported:nesting=false) */ a :is(a b:has(> span)) { color: green; } ``` This fix was contributed by [@&#8203;NoremacNergfol](https://github.com/NoremacNergfol). - The CSS minifier contains logic to remove the `&` selector when it can be implied, which happens when there is only one and it's the leading token. However, this logic was incorrectly also applied to selector lists inside of pseudo-class selectors such as `:where()`. With this release, the minifier will now avoid applying this logic in this edge case: ```css /* Original code */ .a { & .b { color: red } :where(& .b) { color: blue } } /* Old output (with --minify) */ .a{.b{color:red}:where(.b){color:#&#8203;00f}} /* New output (with --minify) */ .a{.b{color:red}:where(& .b){color:#&#8203;00f}} ``` - Fix some correctness issues with source maps ([#&#8203;1745](https://github.com/evanw/esbuild/issues/1745), [#&#8203;3183](https://github.com/evanw/esbuild/issues/3183), [#&#8203;3613](https://github.com/evanw/esbuild/issues/3613), [#&#8203;3982](https://github.com/evanw/esbuild/issues/3982)) Previously esbuild incorrectly treated source map path references as file paths instead of as URLs. With this release, esbuild will now treat source map path references as URLs. This fixes the following problems with source maps: - File names in `sourceMappingURL` that contained a space previously did not encode the space as `%20`, which resulted in JavaScript tools (including esbuild) failing to read that path back in when consuming the generated output file. This should now be fixed. - Absolute URLs in `sourceMappingURL` that use the `file://` scheme previously attempted to read from a folder called `file:`. These URLs should now be recognized and parsed correctly. - Entries in the `sources` array in the source map are now treated as URLs instead of file paths. The correct behavior for this is much more clear now that source maps has a [formal specification](https://tc39.es/ecma426/). Many thanks to those who worked on the specification. - Fix incorrect package for `@esbuild/netbsd-arm64` ([#&#8203;4018](https://github.com/evanw/esbuild/issues/4018)) Due to a copy+paste typo, the binary published to `@esbuild/netbsd-arm64` was not actually for `arm64`, and didn't run in that environment. This release should fix running esbuild in that environment (NetBSD on 64-bit ARM). Sorry about the mistake. - Fix a minification bug with bitwise operators and bigints ([#&#8203;4065](https://github.com/evanw/esbuild/issues/4065)) This change removes an incorrect assumption in esbuild that all bitwise operators result in a numeric integer. That assumption was correct up until the introduction of bigints in ES2020, but is no longer correct because almost all bitwise operators now operate on both numbers and bigints. Here's an example of the incorrect minification: ```js // Original code if ((a & b) !== 0) found = true // Old output (with --minify) a&b&&(found=!0); // New output (with --minify) (a&b)!==0&&(found=!0); ``` - Fix esbuild incorrectly rejecting valid TypeScript edge case ([#&#8203;4027](https://github.com/evanw/esbuild/issues/4027)) The following TypeScript code is valid: ```ts export function open(async?: boolean): void { console.log(async as boolean) } ``` Before this version, esbuild would fail to parse this with a syntax error as it expected the token sequence `async as ...` to be the start of an async arrow function expression `async as => ...`. This edge case should be parsed correctly by esbuild starting with this release. - Transform BigInt values into constructor calls when unsupported ([#&#8203;4049](https://github.com/evanw/esbuild/issues/4049)) Previously esbuild would refuse to compile the BigInt literals (such as `123n`) if they are unsupported in the configured target environment (such as with `--target=es6`). The rationale was that they cannot be polyfilled effectively because they change the behavior of JavaScript's arithmetic operators and JavaScript doesn't have operator overloading. However, this prevents using esbuild with certain libraries that would otherwise work if BigInt literals were ignored, such as with old versions of the [`buffer` library](https://github.com/feross/buffer) before the library fixed support for running in environments without BigInt support. So with this release, esbuild will now turn BigInt literals into BigInt constructor calls (so `123n` becomes `BigInt(123)`) and generate a warning in this case. You can turn off the warning with `--log-override:bigint=silent` or restore the warning to an error with `--log-override:bigint=error` if needed. - Change how `console` API dropping works ([#&#8203;4020](https://github.com/evanw/esbuild/issues/4020)) Previously the `--drop:console` feature replaced all method calls off of the `console` global with `undefined` regardless of how long the property access chain was (so it applied to `console.log()` and `console.log.call(console)` and `console.log.not.a.method()`). However, it was pointed out that this breaks uses of `console.log.bind(console)`. That's also incompatible with Terser's implementation of the feature, which is where this feature originally came from (it does support `bind`). So with this release, using this feature with esbuild will now only replace one level of method call (unless extended by `call` or `apply`) and will replace the method being called with an empty function in complex cases: ```js // Original code const x = console.log('x') const y = console.log.call(console, 'y') const z = console.log.bind(console)('z') // Old output (with --drop-console) const x = void 0; const y = void 0; const z = (void 0)("z"); // New output (with --drop-console) const x = void 0; const y = void 0; const z = (() => { }).bind(console)("z"); ``` This should more closely match Terser's existing behavior. - Allow BigInt literals as `define` values With this release, you can now use BigInt literals as define values, such as with `--define:FOO=123n`. Previously trying to do this resulted in a syntax error. - Fix a bug with resolve extensions in `node_modules` ([#&#8203;4053](https://github.com/evanw/esbuild/issues/4053)) The `--resolve-extensions=` option lets you specify the order in which to try resolving implicit file extensions. For complicated reasons, esbuild reorders TypeScript file extensions after JavaScript ones inside of `node_modules` so that JavaScript source code is always preferred to TypeScript source code inside of dependencies. However, this reordering had a bug that could accidentally change the relative order of TypeScript file extensions if one of them was a prefix of the other. That bug has been fixed in this release. You can see the issue for details. - Better minification of statically-determined `switch` cases ([#&#8203;4028](https://github.com/evanw/esbuild/issues/4028)) With this release, esbuild will now try to trim unused code within `switch` statements when the test expression and `case` expressions are primitive literals. This can arise when the test expression is an identifier that is substituted for a primitive literal at compile time. For example: ```js // Original code switch (MODE) { case 'dev': installDevToolsConsole() break case 'prod': return default: throw new Error } // Old output (with --minify '--define:MODE="prod"') switch("prod"){case"dev":installDevToolsConsole();break;case"prod":return;default:throw new Error} // New output (with --minify '--define:MODE="prod"') return; ``` - Emit `/* @&#8203;__KEY__ */` for string literals derived from property names ([#&#8203;4034](https://github.com/evanw/esbuild/issues/4034)) Property name mangling is an advanced feature that shortens certain property names for better minification (I say "advanced feature" because it's very easy to break your code with it). Sometimes you need to store a property name in a string, such as `obj.get('foo')` instead of `obj.foo`. JavaScript minifiers such as esbuild and [Terser](https://terser.org/) have a convention where a `/* @&#8203;__KEY__ */` comment before the string makes it behave like a property name. So `obj.get(/* @&#8203;__KEY__ */ 'foo')` allows the contents of the string `'foo'` to be shortened. However, esbuild sometimes itself generates string literals containing property names when transforming code, such as when lowering class fields to ES6 or when transforming TypeScript decorators. Previously esbuild didn't generate its own `/* @&#8203;__KEY__ */` comments in this case, which means that minifying your code by running esbuild again on its own output wouldn't work correctly (this does not affect people that both minify and transform their code in a single step). With this release, esbuild will now generate `/* @&#8203;__KEY__ */` comments for property names in generated string literals. To avoid lots of unnecessary output for people that don't use this advanced feature, the generated comments will only be present when the feature is active. If you want to generate the comments but not actually mangle any property names, you can use a flag that has no effect such as `--reserve-props=.`, which tells esbuild to not mangle any property names (but still activates this feature). - The `text` loader now strips the UTF-8 BOM if present ([#&#8203;3935](https://github.com/evanw/esbuild/issues/3935)) Some software (such as Notepad on Windows) can create text files that start with the three bytes `0xEF 0xBB 0xBF`, which is referred to as the "byte order mark". This prefix is intended to be removed before using the text. Previously esbuild's `text` loader included this byte sequence in the string, which turns into a prefix of `\uFEFF` in a JavaScript string when decoded from UTF-8. With this release, esbuild's `text` loader will now remove these bytes when they occur at the start of the file. - Omit legal comment output files when empty ([#&#8203;3670](https://github.com/evanw/esbuild/issues/3670)) Previously configuring esbuild with `--legal-comment=external` or `--legal-comment=linked` would always generate a `.LEGAL.txt` output file even if it was empty. Starting with this release, esbuild will now only do this if the file will be non-empty. This should result in a more organized output directory in some cases. - Update Go from 1.23.1 to 1.23.5 ([#&#8203;4056](https://github.com/evanw/esbuild/issues/4056), [#&#8203;4057](https://github.com/evanw/esbuild/pull/4057)) This should have no effect on existing code as this version change does not change Go's operating system support. It may remove certain reports from vulnerability scanners that detect which version of the Go compiler esbuild uses. This PR was contributed by [@&#8203;MikeWillCook](https://github.com/MikeWillCook). - Allow passing a port of 0 to the development server ([#&#8203;3692](https://github.com/evanw/esbuild/issues/3692)) Unix sockets interpret a port of 0 to mean "pick a random unused port in the [ephemeral port](https://en.wikipedia.org/wiki/Ephemeral_port) range". However, esbuild's default behavior when the port is not specified is to pick the first unused port starting from 8000 and upward. This is more convenient because port 8000 is typically free, so you can for example restart the development server and reload your app in the browser without needing to change the port in the URL. Since esbuild is written in Go (which does not have optional fields like JavaScript), not specifying the port in Go means it defaults to 0, so previously passing a port of 0 to esbuild caused port 8000 to be picked. Starting with this release, passing a port of 0 to esbuild when using the CLI or the JS API will now pass port 0 to the OS, which will pick a random ephemeral port. To make this possible, the `Port` option in the Go API has been changed from `uint16` to `int` (to allow for additional sentinel values) and passing a port of -1 in Go now picks a random port. Both the CLI and JS APIs now remap an explicitly-provided port of 0 into -1 for the internal Go API. Another option would have been to change `Port` in Go from `uint16` to `*uint16` (Go's closest equivalent of `number | undefined`). However, that would make the common case of providing an explicit port in Go very awkward as Go doesn't support taking the address of integer constants. This tradeoff isn't worth it as picking a random ephemeral port is a rare use case. So the CLI and JS APIs should now match standard Unix behavior when the port is 0, but you need to use -1 instead with Go API. - Minification now avoids inlining constants with direct `eval` ([#&#8203;4055](https://github.com/evanw/esbuild/issues/4055)) Direct `eval` can be used to introduce a new variable like this: ```js const variable = false ;(function () { eval("var variable = true") console.log(variable) })() ``` Previously esbuild inlined `variable` here (which became `false`), which changed the behavior of the code. This inlining is now avoided, but please keep in mind that direct `eval` breaks many assumptions that JavaScript tools hold about normal code (especially when bundling) and I do not recommend using it. There are usually better alternatives that have a more localized impact on your code. You can read more about this here: <https://esbuild.github.io/link/direct-eval/> ### [`v0.24.2`](https://github.com/evanw/esbuild/releases/tag/v0.24.2) [Compare Source](https://github.com/evanw/esbuild/compare/v0.24.1...v0.24.2) - Fix regression with `--define` and `import.meta` ([#&#8203;4010](https://github.com/evanw/esbuild/issues/4010), [#&#8203;4012](https://github.com/evanw/esbuild/issues/4012), [#&#8203;4013](https://github.com/evanw/esbuild/pull/4013)) The previous change in version 0.24.1 to use a more expression-like parser for `define` values to allow quoted property names introduced a regression that removed the ability to use `--define:import.meta=...`. Even though `import` is normally a keyword that can't be used as an identifier, ES modules special-case the `import.meta` expression to behave like an identifier anyway. This change fixes the regression. This fix was contributed by [@&#8203;sapphi-red](https://github.com/sapphi-red). ### [`v0.24.1`](https://github.com/evanw/esbuild/releases/tag/v0.24.1) [Compare Source](https://github.com/evanw/esbuild/compare/v0.24.0...v0.24.1) - Allow `es2024` as a target in `tsconfig.json` ([#&#8203;4004](https://github.com/evanw/esbuild/issues/4004)) TypeScript recently [added `es2024`](https://devblogs.microsoft.com/typescript/announcing-typescript-5-7/#support-for---target-es2024-and---lib-es2024) as a compilation target, so esbuild now supports this in the `target` field of `tsconfig.json` files, such as in the following configuration file: ```json { "compilerOptions": { "target": "ES2024" } } ``` As a reminder, the only thing that esbuild uses this field for is determining whether or not to use legacy TypeScript behavior for class fields. You can read more in [the documentation](https://esbuild.github.io/content-types/#tsconfig-json). This fix was contributed by [@&#8203;billyjanitsch](https://github.com/billyjanitsch). - Allow automatic semicolon insertion after `get`/`set` This change fixes a grammar bug in the parser that incorrectly treated the following code as a syntax error: ```ts class Foo { get *x() {} set *y() {} } ``` The above code will be considered valid starting with this release. This change to esbuild follows a [similar change to TypeScript](https://github.com/microsoft/TypeScript/pull/60225) which will allow this syntax starting with TypeScript 5.7. - Allow quoted property names in `--define` and `--pure` ([#&#8203;4008](https://github.com/evanw/esbuild/issues/4008)) The `define` and `pure` API options now accept identifier expressions containing quoted property names. Previously all identifiers in the identifier expression had to be bare identifiers. This change now makes `--define` and `--pure` consistent with `--global-name`, which already supported quoted property names. For example, the following is now possible: ```js // The following code now transforms to "return true;\n" console.log(esbuild.transformSync( `return process.env['SOME-TEST-VAR']`, { define: { 'process.env["SOME-TEST-VAR"]': 'true' } }, )) ``` Note that if you're passing values like this on the command line using esbuild's `--define` flag, then you'll need to know how to escape quote characters for your shell. You may find esbuild's JavaScript API more ergonomic and portable than writing shell code. - Minify empty `try`/`catch`/`finally` blocks ([#&#8203;4003](https://github.com/evanw/esbuild/issues/4003)) With this release, esbuild will now attempt to minify empty `try` blocks: ```js // Original code try {} catch { foo() } finally { bar() } // Old output (with --minify) try{}catch{foo()}finally{bar()} // New output (with --minify) bar(); ``` This can sometimes expose additional minification opportunities. - Include `entryPoint` metadata for the `copy` loader ([#&#8203;3985](https://github.com/evanw/esbuild/issues/3985)) Almost all entry points already include a `entryPoint` field in the `outputs` map in esbuild's build metadata. However, this wasn't the case for the `copy` loader as that loader is a special-case that doesn't behave like other loaders. This release adds the `entryPoint` field in this case. - Source mappings may now contain `null` entries ([#&#8203;3310](https://github.com/evanw/esbuild/issues/3310), [#&#8203;3878](https://github.com/evanw/esbuild/issues/3878)) With this change, sources that result in an empty source map may now emit a `null` source mapping (i.e. one with a generated position but without a source index or original position). This change improves source map accuracy by fixing a problem where minified code from a source without any source mappings could potentially still be associated with a mapping from another source file earlier in the generated output on the same minified line. It manifests as nonsensical files in source mapped stack traces. Now the `null` mapping "resets" the source map so that any lookups into the minified code without any mappings resolves to `null` (which appears as the output file in stack traces) instead of the incorrect source file. This change shouldn't affect anything in most situations. I'm only mentioning it in the release notes in case it introduces a bug with source mapping. It's part of a work-in-progress future feature that will let you omit certain unimportant files from the generated source map to reduce source map size. - Avoid using the parent directory name for determinism ([#&#8203;3998](https://github.com/evanw/esbuild/issues/3998)) To make generated code more readable, esbuild includes the name of the source file when generating certain variable names within the file. Specifically bundling a CommonJS file generates a variable to store the lazily-evaluated module initializer. However, if a file is named `index.js` (or with a different extension), esbuild will use the name of the parent directory instead for a better name (since many packages have files all named `index.js` but have unique directory names). This is problematic when the bundle entry point is named `index.js` and the parent directory name is non-deterministic (e.g. a temporary directory created by a build script). To avoid non-determinism in esbuild's output, esbuild will now use `index` instead of the parent directory in this case. Specifically this will happen if the parent directory is equal to esbuild's `outbase` API option, which defaults to the [lowest common ancestor](https://en.wikipedia.org/wiki/Lowest_common_ancestor) of all user-specified entry point paths. - Experimental support for esbuild on NetBSD ([#&#8203;3974](https://github.com/evanw/esbuild/pull/3974)) With this release, esbuild now has a published binary executable for [NetBSD](https://www.netbsd.org/) in the [`@esbuild/netbsd-arm64`](https://www.npmjs.com/package/@&#8203;esbuild/netbsd-arm64) npm package, and esbuild's installer has been modified to attempt to use it when on NetBSD. Hopefully this makes installing esbuild via npm work on NetBSD. This change was contributed by [@&#8203;bsiegert](https://github.com/bsiegert). ⚠️ Note: NetBSD is not one of [Node's supported platforms](https://nodejs.org/api/process.html#process_process_platform), so installing esbuild may or may not work on NetBSD depending on how Node has been patched. This is not a problem with esbuild. ⚠️ ### [`v0.24.0`](https://github.com/evanw/esbuild/releases/tag/v0.24.0) [Compare Source](https://github.com/evanw/esbuild/compare/v0.23.1...v0.24.0) ***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.23.0` or `~0.23.0`. See npm's documentation about [semver](https://docs.npmjs.com/cli/v6/using-npm/semver/) for more information. - Drop support for older platforms ([#&#8203;3902](https://github.com/evanw/esbuild/pull/3902)) This release drops support for the following operating system: - macOS 10.15 Catalina This is because the Go programming language dropped support for this operating system version in Go 1.23, and this release updates esbuild from Go 1.22 to Go 1.23. Go 1.23 now requires macOS 11 Big Sur or later. Note that this only affects the binary esbuild executables that are published to the esbuild npm package. It's still possible to compile esbuild's source code for these older operating systems. If you need to, you can compile esbuild for yourself using an older version of the Go compiler (before Go version 1.23). That might look something like this: ``` git clone https://github.com/evanw/esbuild.git cd esbuild go build ./cmd/esbuild ./esbuild --version ``` - Fix class field decorators in TypeScript if `useDefineForClassFields` is `false` ([#&#8203;3913](https://github.com/evanw/esbuild/issues/3913)) Setting the `useDefineForClassFields` flag to `false` in `tsconfig.json` means class fields use the legacy TypeScript behavior instead of the standard JavaScript behavior. Specifically they use assign semantics instead of define semantics (e.g. setters are triggered) and fields without an initializer are not initialized at all. However, when this legacy behavior is combined with standard JavaScript decorators, TypeScript switches to always initializing all fields, even those without initializers. Previously esbuild incorrectly continued to omit field initializers for this edge case. These field initializers in this case should now be emitted starting with this release. - Avoid incorrect cycle warning with `tsconfig.json` multiple inheritance ([#&#8203;3898](https://github.com/evanw/esbuild/issues/3898)) TypeScript 5.0 introduced multiple inheritance for `tsconfig.json` files where `extends` can be an array of file paths. Previously esbuild would incorrectly treat files encountered more than once when processing separate subtrees of the multiple inheritance hierarchy as an inheritance cycle. With this release, `tsconfig.json` files containing this edge case should work correctly without generating a warning. - Handle Yarn Plug'n'Play stack overflow with `tsconfig.json` ([#&#8203;3915](https://github.com/evanw/esbuild/issues/3915)) Previously a `tsconfig.json` file that `extends` another file in a package with an `exports` map could cause a stack overflow when Yarn's Plug'n'Play resolution was active. This edge case should work now starting with this release. - Work around more issues with Deno 1.31+ ([#&#8203;3917](https://github.com/evanw/esbuild/pull/3917)) This version of Deno broke the `stdin` and `stdout` properties on command objects for inherited streams, which matters when you run esbuild's Deno module as the entry point (i.e. when `import.meta.main` is `true`). Previously esbuild would crash in Deno 1.31+ if you ran esbuild like that. This should be fixed starting with this release. This fix was contributed by [@&#8203;Joshix-1](https://github.com/Joshix-1). ### [`v0.23.1`](https://github.com/evanw/esbuild/releases/tag/v0.23.1) [Compare Source](https://github.com/evanw/esbuild/compare/v0.23.0...v0.23.1) - Allow using the `node:` import prefix with `es*` targets ([#&#8203;3821](https://github.com/evanw/esbuild/issues/3821)) The [`node:` prefix on imports](https://nodejs.org/api/esm.html#node-imports) is an alternate way to import built-in node modules. For example, `import fs from "fs"` can also be written `import fs from "node:fs"`. This only works with certain newer versions of node, so esbuild removes it when you target older versions of node such as with `--target=node14` so that your code still works. With the way esbuild's platform-specific feature compatibility table works, this was added by saying that only newer versions of node support this feature. However, that means that a target such as `--target=node18,es2022` removes the `node:` prefix because none of the `es*` targets are known to support this feature. This release adds the support for the `node:` flag to esbuild's internal compatibility table for `es*` to allow you to use compound targets like this: ```js // Original code import fs from 'node:fs' fs.open // Old output (with --bundle --format=esm --platform=node --target=node18,es2022) import fs from "fs"; fs.open; // New output (with --bundle --format=esm --platform=node --target=node18,es2022) import fs from "node:fs"; fs.open; ``` - Fix a panic when using the CLI with invalid build flags if `--analyze` is present ([#&#8203;3834](https://github.com/evanw/esbuild/issues/3834)) Previously esbuild's CLI could crash if it was invoked with flags that aren't valid for a "build" API call and the `--analyze` flag is present. This was caused by esbuild's internals attempting to add a Go plugin (which is how `--analyze` is implemented) to a null build object. The panic has been fixed in this release. - Fix incorrect location of certain error messages ([#&#8203;3845](https://github.com/evanw/esbuild/issues/3845)) This release fixes a regression that caused certain errors relating to variable declarations to be reported at an incorrect location. The regression was introduced in version 0.18.7 of esbuild. - Print comments before case clauses in switch statements ([#&#8203;3838](https://github.com/evanw/esbuild/issues/3838)) With this release, esbuild will attempt to print comments that come before case clauses in switch statements. This is similar to what esbuild already does for comments inside of certain types of expressions. Note that these types of comments are not printed if minification is enabled (specifically whitespace minification). - Fix a memory leak with `pluginData` ([#&#8203;3825](https://github.com/evanw/esbuild/issues/3825)) With this release, the build context's internal `pluginData` cache will now be cleared when starting a new build. This should fix a leak of memory from plugins that return `pluginData` objects from `onResolve` and/or `onLoad` callbacks. ### [`v0.23.0`](https://github.com/evanw/esbuild/releases/tag/v0.23.0) [Compare Source](https://github.com/evanw/esbuild/compare/v0.22.0...v0.23.0) ***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.22.0` or `~0.22.0`. See npm's documentation about [semver](https://docs.npmjs.com/cli/v6/using-npm/semver/) for more information. - Revert the recent change to avoid bundling dependencies for node ([#&#8203;3819](https://github.com/evanw/esbuild/issues/3819)) This release reverts the recent change in version 0.22.0 that made `--packages=external` the default behavior with `--platform=node`. The default is now back to `--packages=bundle`. I've just been made aware that Amazon doesn't pin their dependencies in their "AWS CDK" product, which means that whenever esbuild publishes a new release, many people (potentially everyone?) using their SDK around the world instantly starts using it without Amazon checking that it works first. This change in version 0.22.0 happened to break their SDK. I'm amazed that things haven't broken before this point. This revert attempts to avoid these problems for Amazon's customers. Hopefully Amazon will pin their dependencies in the future. In addition, this is probably a sign that esbuild is used widely enough that it now needs to switch to a more complicated release model. I may have esbuild use a beta channel model for further development. - Fix preserving collapsed JSX whitespace ([#&#8203;3818](https://github.com/evanw/esbuild/issues/3818)) When transformed, certain whitespace inside JSX elements is ignored completely if it collapses to an empty string. However, the whitespace should only be ignored if the JSX is being transformed, not if it's being preserved. This release fixes a bug where esbuild was previously incorrectly ignoring collapsed whitespace with `--jsx=preserve`. Here is an example: ```jsx // Original code <Foo> <Bar /> </Foo> // Old output (with --jsx=preserve) <Foo><Bar /></Foo>; // New output (with --jsx=preserve) <Foo> <Bar /> </Foo>; ``` </details> <details> <summary>WebReflection/linkedom (linkedom)</summary> ### [`v0.18.12`](https://github.com/WebReflection/linkedom/compare/v0.18.11...v0.18.12) [Compare Source](https://github.com/WebReflection/linkedom/compare/v0.18.11...v0.18.12) ### [`v0.18.11`](https://github.com/WebReflection/linkedom/compare/v0.18.10...v0.18.11) [Compare Source](https://github.com/WebReflection/linkedom/compare/v0.18.10...v0.18.11) ### [`v0.18.10`](https://github.com/WebReflection/linkedom/compare/v0.18.9...v0.18.10) [Compare Source](https://github.com/WebReflection/linkedom/compare/v0.18.9...v0.18.10) ### [`v0.18.9`](https://github.com/WebReflection/linkedom/compare/v0.18.8...v0.18.9) [Compare Source](https://github.com/WebReflection/linkedom/compare/v0.18.8...v0.18.9) ### [`v0.18.8`](https://github.com/WebReflection/linkedom/compare/v0.18.7...v0.18.8) [Compare Source](https://github.com/WebReflection/linkedom/compare/v0.18.7...v0.18.8) ### [`v0.18.7`](https://github.com/WebReflection/linkedom/compare/v0.18.6...v0.18.7) [Compare Source](https://github.com/WebReflection/linkedom/compare/v0.18.6...v0.18.7) ### [`v0.18.6`](https://github.com/WebReflection/linkedom/compare/v0.18.5...v0.18.6) [Compare Source](https://github.com/WebReflection/linkedom/compare/v0.18.5...v0.18.6) ### [`v0.18.5`](https://github.com/WebReflection/linkedom/compare/v0.18.4...v0.18.5) [Compare Source](https://github.com/WebReflection/linkedom/compare/v0.18.4...v0.18.5) </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. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjEuOCIsInVwZGF0ZWRJblZlciI6IjQxLjExNi42IiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=-->
pv force-pushed renovate/npm-minor-patch from 879ac1cd74 to 36070a29eb 2024-09-18 11:09:01 +02:00 Compare
pv changed title from Update dependency esbuild to ^0.23.0 to Update npm non-major dependencies 2024-09-18 11:09:17 +02:00
pv force-pushed renovate/npm-minor-patch from 36070a29eb to 26f1d9d9c3 2024-09-19 10:32:35 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 26f1d9d9c3 to 45667a2850 2024-09-20 10:34:00 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 45667a2850 to ae86ed796d 2024-09-21 10:56:22 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from ae86ed796d to bf0e3dc29c 2024-09-22 10:57:21 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from bf0e3dc29c to 3e663d5c40 2024-09-23 11:50:31 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 3e663d5c40 to 38fc517358 2024-09-24 11:02:11 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 38fc517358 to 7fc41b12a7 2024-09-25 11:05:32 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 7fc41b12a7 to a5787dcb7d 2024-09-26 11:07:19 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from a5787dcb7d to e69eabd78b 2024-09-27 11:16:53 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from e69eabd78b to 922c631057 2024-09-28 10:45:00 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 922c631057 to 8e6fe473df 2024-09-29 10:36:58 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 8e6fe473df to 0b9ac1b27e 2024-09-30 11:04:07 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 0b9ac1b27e to 96f64d2031 2024-10-01 11:05:48 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 96f64d2031 to ffd5d6d152 2024-10-02 11:09:04 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from ffd5d6d152 to 91f5a9b4b6 2024-10-03 10:24:04 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 91f5a9b4b6 to aebfe8331a 2024-10-04 10:21:13 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from aebfe8331a to ded2f3cfc8 2024-10-05 10:21:35 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from ded2f3cfc8 to 20497d2a4d 2024-10-06 10:21:21 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 20497d2a4d to 5a22d5989b 2024-10-07 10:20:48 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 5a22d5989b to 2f910fee46 2024-10-08 10:21:07 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 2f910fee46 to 16ec43a876 2024-10-09 10:21:32 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 16ec43a876 to b6a8bd03bc 2024-10-10 10:24:08 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from b6a8bd03bc to 7128f28a21 2024-10-11 10:24:01 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 7128f28a21 to 515dbff2bd 2024-10-12 10:23:15 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 515dbff2bd to 74935e4b51 2024-10-13 10:23:47 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 74935e4b51 to bb0f4026ea 2024-10-14 10:24:20 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from bb0f4026ea to f6b00461af 2024-10-15 10:23:50 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from f6b00461af to 2f5816dba4 2024-10-16 10:27:12 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 2f5816dba4 to fd22e7fd26 2024-10-17 10:23:41 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from fd22e7fd26 to e837e6d160 2024-10-18 10:24:39 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from e837e6d160 to 212bcd4069 2024-10-19 10:23:50 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 212bcd4069 to 13e080c452 2024-10-20 10:24:27 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 13e080c452 to 21a486bedb 2024-10-22 10:56:04 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 21a486bedb to f09981638e 2024-10-23 10:24:52 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from f09981638e to c8a823151b 2024-10-24 10:25:38 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from c8a823151b to 0d2f18b782 2024-10-25 10:23:51 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 0d2f18b782 to 98862276b3 2024-10-26 11:02:32 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 98862276b3 to 47017f2115 2024-10-27 09:24:34 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 47017f2115 to e73b625806 2024-10-28 09:39:03 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from e73b625806 to e9b2827e9f 2024-10-29 09:25:16 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from e9b2827e9f to a4df8db7f0 2024-10-30 09:25:18 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a4df8db7f0 to 778129f47f 2024-10-31 09:25:56 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 778129f47f to 970c708397 2024-11-01 09:25:41 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 970c708397 to e1544730cf 2024-11-02 09:25:31 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from e1544730cf to e7fff5902c 2024-11-03 09:25:01 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from e7fff5902c to 628c8827f6 2024-11-04 09:26:11 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 628c8827f6 to 50f8bf73fc 2024-11-05 09:23:09 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 50f8bf73fc to f1d1450510 2024-11-06 09:22:57 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from f1d1450510 to 966c6a69ee 2024-11-07 09:17:03 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 966c6a69ee to aa77cd4d2e 2024-11-08 09:23:01 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from aa77cd4d2e to b80607eb42 2024-11-09 09:22:46 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from b80607eb42 to e7aade28d3 2024-11-10 09:23:44 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from e7aade28d3 to 86f6543964 2024-11-11 09:23:23 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 86f6543964 to a8b548e2f4 2024-11-12 09:23:36 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a8b548e2f4 to a110427067 2024-11-13 09:23:14 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a110427067 to 62ee20bfbc 2024-11-14 09:23:25 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 62ee20bfbc to a549ad6f55 2024-11-15 09:23:10 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a549ad6f55 to 4ab4276456 2024-11-16 09:24:36 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 4ab4276456 to f3683fc4d5 2024-11-17 09:23:45 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from f3683fc4d5 to 801bf13745 2024-11-18 09:23:46 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 801bf13745 to 2e08339187 2024-11-19 09:26:23 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 2e08339187 to 069d4a53c8 2024-11-20 09:24:23 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 069d4a53c8 to a303ed01ed 2024-11-21 09:25:11 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a303ed01ed to 75848707c3 2024-11-22 09:24:54 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 75848707c3 to c546085415 2024-11-23 09:06:53 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from c546085415 to d9e2b9cfe3 2024-11-24 09:06:19 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from d9e2b9cfe3 to c6a0762983 2024-11-25 09:07:47 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from c6a0762983 to dc55a8f189 2024-11-26 09:06:13 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from dc55a8f189 to 3e4c58f96f 2024-11-27 09:05:51 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 3e4c58f96f to 4dd4a8761c 2024-11-28 09:05:52 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 4dd4a8761c to 41afbbd136 2024-11-29 09:16:48 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 41afbbd136 to f7d3f3a45f 2024-11-30 09:09:06 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from f7d3f3a45f to d42181debd 2024-12-01 09:05:55 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from d42181debd to 22d6146397 2024-12-02 09:05:25 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 22d6146397 to a028e8decf 2024-12-03 09:05:27 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a028e8decf to 6f4402f148 2024-12-04 09:05:45 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 6f4402f148 to c52d37ca7a 2024-12-05 09:05:47 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from c52d37ca7a to d0afb847c7 2024-12-06 09:06:02 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from d0afb847c7 to 1458acc842 2024-12-07 09:05:27 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 1458acc842 to c32d008b15 2024-12-08 09:06:07 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from c32d008b15 to 6167bc3495 2024-12-09 09:06:17 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 6167bc3495 to 331ad48520 2024-12-10 09:06:17 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 331ad48520 to 85d8ba67ab 2024-12-11 09:05:15 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 85d8ba67ab to 25c9d0fb0c 2024-12-12 09:05:28 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 25c9d0fb0c to 8d82fb692e 2024-12-13 09:05:17 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 8d82fb692e to 057199e41f 2024-12-14 09:05:03 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 057199e41f to 32e1d93bf2 2024-12-15 09:04:42 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 32e1d93bf2 to 0e83531537 2024-12-16 09:05:06 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 0e83531537 to a71b1b4014 2024-12-17 09:04:54 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a71b1b4014 to 75b6c615bf 2024-12-18 09:05:21 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 75b6c615bf to 7b629a9adc 2024-12-19 09:05:49 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 7b629a9adc to 93d676f2a8 2024-12-20 09:05:15 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 93d676f2a8 to e109b938c0 2024-12-21 09:05:22 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from e109b938c0 to b950270c71 2024-12-22 09:05:28 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from b950270c71 to a7503e34f1 2024-12-23 09:05:05 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a7503e34f1 to f05cf8132b 2024-12-24 09:05:28 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from f05cf8132b to a79f3779be 2024-12-25 09:05:13 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a79f3779be to b1f907a952 2024-12-26 09:05:33 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from b1f907a952 to 328aa47d2a 2024-12-27 09:05:17 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 328aa47d2a to 5ce0694cb5 2024-12-28 09:05:36 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 5ce0694cb5 to 3f019ae872 2024-12-29 09:05:16 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 3f019ae872 to 4d4ccb0344 2024-12-30 09:05:20 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 4d4ccb0344 to b750979659 2024-12-31 09:05:47 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from b750979659 to ec27bbf0d7 2025-01-01 09:05:40 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from ec27bbf0d7 to 0c6a6b2ccd 2025-01-02 09:05:21 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 0c6a6b2ccd to 2119ce5184 2025-01-03 09:05:33 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 2119ce5184 to 8035b53bc9 2025-01-04 09:05:13 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 8035b53bc9 to 39b3accc7c 2025-01-05 09:05:30 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 39b3accc7c to 9c5405c321 2025-01-06 09:05:22 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 9c5405c321 to 58c02b87bc 2025-01-07 09:06:05 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 58c02b87bc to 560bfa4330 2025-01-08 09:05:33 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 560bfa4330 to 2450daaf56 2025-01-09 09:06:07 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 2450daaf56 to c53922c02e 2025-01-10 09:05:47 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from c53922c02e to 17bc8b5097 2025-01-11 09:05:44 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 17bc8b5097 to c22809dcc6 2025-01-12 09:05:30 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from c22809dcc6 to 3fe23787e7 2025-01-13 09:05:29 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 3fe23787e7 to 9d1037625c 2025-01-14 09:05:39 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 9d1037625c to 7c400b0cac 2025-01-15 09:05:43 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 7c400b0cac to 897ba29973 2025-01-16 09:05:54 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 897ba29973 to a959a14e64 2025-01-17 09:05:28 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a959a14e64 to 819005d152 2025-01-18 09:05:30 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 819005d152 to a02e9d0c7b 2025-01-19 09:06:01 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a02e9d0c7b to 96e394611b 2025-01-20 09:05:27 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 96e394611b to 3542d48c5a 2025-01-21 09:05:38 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 3542d48c5a to 0384ce9cae 2025-01-22 09:05:49 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 0384ce9cae to 65a40ab769 2025-01-23 09:05:37 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 65a40ab769 to bae8e95f18 2025-01-24 09:05:48 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from bae8e95f18 to 90545bb1db 2025-01-25 09:05:55 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 90545bb1db to 52baedc53d 2025-01-26 09:05:51 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 52baedc53d to 7e68aacabb 2025-01-27 09:05:52 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 7e68aacabb to 0782f1b4e8 2025-01-28 09:05:49 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 0782f1b4e8 to fadb39375d 2025-01-29 09:06:03 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from fadb39375d to ac7ce7a681 2025-01-30 09:05:42 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from ac7ce7a681 to bd82d0094f 2025-01-31 09:06:17 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from bd82d0094f to b76288e6d6 2025-02-01 09:05:23 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from b76288e6d6 to 59fc913942 2025-02-02 09:05:47 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 59fc913942 to 26bca07dcb 2025-02-03 09:05:52 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 26bca07dcb to a77de4014a 2025-02-04 09:05:40 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a77de4014a to a51226a85b 2025-02-05 09:05:50 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a51226a85b to c26650ff56 2025-02-06 09:05:33 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from c26650ff56 to 7675b78418 2025-02-07 09:05:53 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 7675b78418 to 38d8dbdc4a 2025-02-08 09:06:01 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 38d8dbdc4a to da08baf6b4 2025-02-09 09:05:57 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from da08baf6b4 to 8d8592a6f7 2025-02-10 09:06:00 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 8d8592a6f7 to a2a1093189 2025-02-11 09:05:40 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from a2a1093189 to 17c13f25ef 2025-02-12 09:05:50 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 17c13f25ef to f109142c25 2025-02-13 09:05:57 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from f109142c25 to 5a94ede0b6 2025-02-14 09:06:16 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 5a94ede0b6 to e920b1528b 2025-02-15 09:06:02 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from e920b1528b to 0d16b28f16 2025-02-16 09:06:07 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 0d16b28f16 to 34f0c8c7a7 2025-02-17 09:05:57 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 34f0c8c7a7 to ca45c10462 2025-02-18 09:05:58 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from ca45c10462 to 91f334d506 2025-02-19 09:05:40 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 91f334d506 to 440b9b26ab 2025-02-20 09:05:50 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 440b9b26ab to 8c47476473 2025-02-21 09:18:09 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 8c47476473 to 614e3707a6 2025-02-22 09:03:27 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 614e3707a6 to 6a35679a3f 2025-02-23 09:06:14 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 6a35679a3f to 9003730cc0 2025-02-24 09:06:54 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 9003730cc0 to fee33b214b 2025-02-25 09:05:44 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from fee33b214b to 0d370d8481 2025-02-26 09:05:08 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 0d370d8481 to 61ee0eb347 2025-03-04 09:04:57 +01:00 Compare
pv force-pushed renovate/npm-minor-patch from 61ee0eb347 to 2e59b205a3 2025-04-28 10:14:51 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 2e59b205a3 to 4b46f099d9 2025-06-05 10:15:41 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 4b46f099d9 to 052b13cb84 2025-08-22 10:06:42 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 052b13cb84 to 4baf984203 2025-09-02 09:13:15 +02:00 Compare
pv force-pushed renovate/npm-minor-patch from 4baf984203 to c29be682cd 2025-09-18 10:08:45 +02:00 Compare
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/npm-minor-patch:renovate/npm-minor-patch
git switch renovate/npm-minor-patch

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch master
git merge --no-ff renovate/npm-minor-patch
git switch renovate/npm-minor-patch
git rebase master
git switch master
git merge --ff-only renovate/npm-minor-patch
git switch renovate/npm-minor-patch
git rebase master
git switch master
git merge --no-ff renovate/npm-minor-patch
git switch master
git merge --squash renovate/npm-minor-patch
git switch master
git merge --ff-only renovate/npm-minor-patch
git switch master
git merge renovate/npm-minor-patch
git push origin master
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: pv/sloan#50
No description provided.