Skip to content

chore(deps): update all devdependencies#1867

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/all-dev
Open

chore(deps): update all devdependencies#1867
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/all-dev

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate Bot commented May 9, 2026

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
@apollo/client (source) 4.1.94.2.0 age adoption passing confidence
@changesets/changelog-github (source) 0.6.00.7.0 age adoption passing confidence
graphql 16.13.216.14.0 age adoption passing confidence
graphql 16.13.216.14.0 age adoption passing confidence
jest (source) 30.3.030.4.2 age adoption passing confidence
terser-webpack-plugin 5.5.05.6.1 age adoption passing confidence
tsx (source) 4.21.04.22.3 age adoption passing confidence
webpack 5.106.25.107.2 age adoption passing confidence
ws 8.20.08.21.0 age adoption passing confidence

Release Notes

apollographql/apollo-client (@​apollo/client)

v4.2.0

Compare Source

Minor Changes
  • #​13132 f3ce805 Thanks @​phryneas! - Introduce "classic" and "modern" method and hook signatures.

    Apollo Client 4.2 introduces two signature styles for methods and hooks. All signatures previously present are now "classic" signatures, and a new set of "modern" signatures are added alongside them.

    Classic signatures are the default and are identical to the signatures before Apollo Client 4.2, preserving backward compatibility. Classic signatures still work with manually specified TypeScript generics (e.g., useSuspenseQuery<MyData>(...)). However, manually specifying generics has been discouraged for a long time—instead, we recommend using TypedDocumentNode to automatically infer types, which provides more accurate results without any manual annotations.

    Modern signatures automatically incorporate your declared defaultOptions into return types, providing more accurate types. Modern signatures infer types from the document node and do not support manually passing generic type arguments; TypeScript will produce a type error if you attempt to do so.

    Methods and hooks automatically switch to modern signatures the moment any non-optional property is declared in DeclareDefaultOptions. The switch happens across all methods and hooks globally:

    // apollo.d.ts
    import "@&#8203;apollo/client";
    declare module "@&#8203;apollo/client" {
      namespace ApolloClient {
        namespace DeclareDefaultOptions {
          interface WatchQuery {
            errorPolicy: "all"; // non-optional → modern signatures activated automatically
          }
        }
      }
    }

    Users can also manually switch to modern signatures without declaring any defaultOptions, for example when wanting accurate type inference without relying on global defaultOptions:

    // apollo.d.ts
    import "@&#8203;apollo/client";
    declare module "@&#8203;apollo/client" {
      export interface TypeOverrides {
        signatureStyle: "modern";
      }
    }

    Users can do a global DeclareDefaultOptions type augmentation and then manually switch back to "classic" for migration purposes:

    // apollo.d.ts
    import "@&#8203;apollo/client";
    declare module "@&#8203;apollo/client" {
      export interface TypeOverrides {
        signatureStyle: "classic";
      }
    }

    Note that this is not recommended for long-term use. When combined with DeclareDefaultOptions, switching back to classic results in the same incorrect types as before Apollo Client 4.2—methods and hooks will not reflect the defaultOptions you've declared.

  • #​13130 dd12231 Thanks @​jerelmiller! - Improve the accuracy of client.query return type to better detect the current errorPolicy. The data property is no longer nullable when the errorPolicy is none. This makes it possible to remove the undefined checks or optional chaining in most cases.

  • #​13210 1f9a428 Thanks @​jerelmiller! - Add support for automatic event-based refetching, such as window focus.

    The RefetchEventManager class handles automatic refetches in response to events. Apollo Client provides built-in sources for window focus and network reconnect as windowFocusSource and onlineSource.

    Event refetching is fully opt-in. Create and pass a RefetchEventManager instance to the ApolloClient constructor to activate the event listeners.

    import {
      ApolloClient,
      InMemoryCache,
      RefetchEventManager,
      windowFocusSource,
      onlineSource,
    } from "@&#8203;apollo/client";
    
    const client = new ApolloClient({
      link,
      cache: new InMemoryCache(),
      refetchEventManager: new RefetchEventManager({
        sources: {
          // Refetch when window is focused
          windowFocus: windowFocusSource,
    
          // Refetch when the user comes back online
          online: onlineSource,
        },
      }),
    });

    By default, all active queries refetch when the events fire. Queries can opt out per-event or disable all event refetches:

    // Skip refetch on window focus for this query, but keep `online`
    useQuery(QUERY, {
      refetchOn: { windowFocus: false },
    });
    
    // Disable all event-driven refetches for this query
    useQuery(OTHER_QUERY, {
      refetchOn: false,
    });
    
    // Enable every event for this query, regardless of defaultOptions
    useQuery(LIVE_DASHBOARD, {
      refetchOn: true,
    });
    
    // Dynamically enable or disable a refetch when the event fires
    useQuery(LIVE_DASHBOARD, {
      refetchOn: ({ source, payload }) => {
        if (source === "windowFocus") {
          // payload is the data associated with the event
          return someCondition(payload);
        }
    
        return true;
      },
    });
    
    // Dynamically enable or disable a refetch for a specific event
    useQuery(LIVE_DASHBOARD, {
      refetchOn: {
        windowFocus: ({ payload }) => {
          // payload is the data associated with the event
          return someCondition(payload);
        },
      },
    });

    To enable per-query opt-in rather than opt-out, set defaultOptions.watchQuery.refetchOn to false and enable it per-query instead.

    const client = new ApolloClient({
      link,
      cache,
      refetchEventManager: new RefetchEventManager({
        sources: { windowFocus: windowFocusSource },
      }),
      defaultOptions: {
        watchQuery: { refetchOn: false },
      },
    });
    
    // Only this query refetches on window focus
    useQuery(DASHBOARD_QUERY, { refetchOn: { windowFocus: true } });

    When defaultOptions.watchQuery.refetchOn and per-query refetchOn options are provided, the objects are merged together.

Custom events

You can also add your own custom events that trigger refetches. Register your event name and payload type using TypeScript module augmentation, then provide a source function that returns an Observable. The source's emitted value becomes the event's payload.

import { Observable } from "@&#8203;apollo/client";
import { filter } from "rxjs";
import { AppState, AppStateStatus, Platform } from "react-native";

declare module "@&#8203;apollo/client" {
  interface RefetchEvents {
    reactNativeAppStatus: AppStateStatus;
  }
}

const refetchEventManager = new RefetchEventManager({
  sources: {
    reactNativeAppStatus: () => {
      return new Observable((observer) => {
        const subscription = AppState.addEventListener("change", (status) => {
          observer.next(status);
        });
        return () => subscription.remove();
      }).pipe(
        filter((status) => Platform.OS !== "web" && status === "active")
      );
    },
  },
});

// Disable per-query by setting the event to false
useQuery(QUERY, { refetchOn: { reactNativeAppStatus: false } });
Manually trigger an event refetch

Refetches can be triggered imperatively by calling emit with the event name and its payload (if any).

refetchEventManager.emit("reactNativeAppStatus", "active");
Sourceless events

A source that has no automatic detection logic but still wants imperative emit support can be declared as true. Type the event as void to omit the payload argument.

declare module "@&#8203;apollo/client" {
  interface RefetchEvents {
    userTriggered: void;
  }
}

const refetchEventManager = new RefetchEventManager({
  sources: { userTriggered: true },
});

refetchEventManager.emit("userTriggered");

Note: Calling emit on an event without a registered source will log a warning and result in a no-op.

Custom handlers

When an event fires, the default handler calls client.refetchQueries({ include: "active" }) filtered by each query's refetchOn setting. You can override the handler for an event to add your own custom filtering. For example, to refetch all queries, including standby queries, define a handler for the event:

const refetchEventManager = new RefetchEventManager({
  // ...
  handlers: {
    userTriggered: ({ client, source, payload, matchesRefetchOn }) => {
      return client.refetchQueries({
        include: "all",
        onQueryUpdated: (observableQuery) => {
          return matchesRefetchOn(observableQuery);
        },
      });
    },
  },
});

Handlers must return either a RefetchQueriesResult or void. Returning void skips refetching for the event.

  • #​13232 f1b541f Thanks @​jerelmiller! - Version bump to rc.

  • #​13206 08fccab Thanks @​jerelmiller! - Extend the defaultOptions type-safety work to client.mutate and useMutation.

    The errorPolicy option now flows through to the result types for mutations in the same way it already does for queries:

    • ApolloClient.MutateResult<TData, TErrorPolicy> maps errorPolicy to the concrete shape of data and error:
      • "none"{ data: TData; error?: never }
      • "all"{ data: TData | undefined; error?: ErrorLike }
      • "ignore"{ data: TData | undefined; error?: never }
    • client.mutate and useMutation pick up the declared defaultOptions.mutate.errorPolicy and the explicit errorPolicy on each call to narrow return types accordingly.
    • useMutation.Result.error is narrowed to undefined when errorPolicy is "ignore", since client.mutate never resolves with an error in that case.

    DeclareDefaultOptions.Mutate already accepted errorPolicy; the new behavior is that once you declare it, hook and method return types reflect it:

    // apollo.d.ts
    import "@&#8203;apollo/client";
    
    declare module "@&#8203;apollo/client" {
      namespace ApolloClient {
        namespace DeclareDefaultOptions {
          interface Mutate {
            errorPolicy: "all";
          }
        }
      }
    }
    const result = await client.mutate({ mutation: MUTATION });
    result.data;
    //     ^? TData | undefined
    result.error;
    //     ^? ErrorLike | undefined

    Setting errorPolicy on an individual call overrides the default for that call's return type.

  • #​13222 b93c172 Thanks @​jerelmiller! - Extend the defaultOptions type-safety work to preloadQuery (returned from createQueryPreloader). Defaults declared in DeclareDefaultOptions.WatchQuery now work with preloadQuery to ensure the PreloadedQueryRef's data states are correctly set.

    // apollo.d.ts
    import "@&#8203;apollo/client";
    
    declare module "@&#8203;apollo/client" {
      namespace ApolloClient {
        namespace DeclareDefaultOptions {
          interface WatchQuery {
            errorPolicy: "all";
          }
        }
      }
    }
    const preloadQuery = createQueryPreloader(client);
    const queryRef = preloadQuery(QUERY);
    //    ^? PreloadedQueryRef<TData, TVariables, "complete" | "streaming" | "empty">
  • #​13132 f3ce805 Thanks @​phryneas! - Synchronize method and hook return types with defaultOptions.

    Prior to this change, the following code snippet would always apply:

    declare const MY_QUERY: TypedDocumentNode<TData, TVariables>;
    const result1 = useSuspenseQuery(MY_QUERY);
    result1.data;
    //      ^? TData
    const result2 = useSuspenseQuery(MY_QUERY, { errorPolicy: "all" });
    result2.data;
    //      ^? TData | undefined

    While these types are generally correct, if you were to set errorPolicy: 'all' as a default option, the type of result.data for the first query would remain TData instead of changing to TData | undefined to match the runtime behavior.

    We are now enforcing that certain defaultOptions types need to be registered globally. This means that if you want to use errorPolicy: 'all' as a default option for a query, you will need to register its type like this:

    // apollo.d.ts
    import "@&#8203;apollo/client";
    
    declare module "@&#8203;apollo/client" {
      namespace ApolloClient {
        namespace DeclareDefaultOptions {
          interface WatchQuery {
            // possible global-registered values:
            // * `errorPolicy`
            // * `returnPartialData`
            errorPolicy: "all";
          }
          interface Query {
            // possible global-registered values:
            // * `errorPolicy`
          }
          interface Mutate {
            // possible global-registered values:
            // * `errorPolicy`
          }
        }
      }
    }

    Once this type declaration is in place, the type of result.data in the above example will correctly be changed to TData | undefined, reflecting the possibility that if an error occurs, data might be undefined. Manually specifying useSuspenseQuery(MY_QUERY, { errorPolicy: "none" }); changes result.data to TData to reflect the local override.

    This change means that you will need to declare your default options types in order to use defaultOptions with ApolloClient, otherwise you will see a TypeScript error.

    Without the type declaration, the following (previously valid) code will now error:

    new ApolloClient({
      link: ApolloLink.empty(),
      cache: new InMemoryCache(),
      defaultOptions: {
        watchQuery: {
          // results in a type error:
          // Type '"all"' is not assignable to type '"A default option for watchQuery.errorPolicy must be declared in ApolloClient.DeclareDefaultOptions before usage. See https://www.apollographql.com/docs/react/data/typescript#declaring-default-options-for-type-safety."'.
          errorPolicy: "all",
        },
      },
    });

    If you are creating multiple instances of Apollo Client with conflicting default options and you cannot register a single defaultOptions value as a result, you can relax the constraints by declaring those options as union types covering all values used by all clients. The properties can be required (to enforce them in defaultOptions) or optional (if some constructor calls won't pass a value):

    // apollo.d.ts
    import "@&#8203;apollo/client";
    
    declare module "@&#8203;apollo/client" {
      export namespace ApolloClient {
        export namespace DeclareDefaultOptions {
          interface WatchQuery {
            errorPolicy?: "none" | "all" | "ignore";
            returnPartialData?: boolean;
          }
          interface Query {
            errorPolicy?: "none" | "all" | "ignore";
          }
          interface Mutate {
            errorPolicy?: "none" | "all" | "ignore";
          }
        }
      }
    }

    With this declaration, the ApolloClient constructor accepts any of those values in defaultOptions. The tradeoff is that hook and method return types become more generic. For example, calling useSuspenseQuery without an explicit errorPolicy will return a result typed as if all error policies are possible, since TypeScript can't know which specific value your instance uses at runtime.

    Note that making a property optional (errorPolicy?:) is equivalent to adding the TypeScript default value ("none") to the union. So errorPolicy?: "all" | "ignore" has the same effect on return types as errorPolicy: "none" | "all" | "ignore", because TypeScript assumes the option could also be absent (i.e., "none").

    You can also use a partial union that only lists the values you actually use. For example, if you only ever use "all" or "ignore", declare errorPolicy: "all" | "ignore" (required) to keep the union narrow and avoid unused values broadening your signatures unnecessarily.

Patch Changes
  • #​13217 790f987 Thanks @​jerelmiller! - Fix the deprecation for the classic signatures for function overloads that rely on type inference from a TypedDocumentNode. The deprecation now only applies to classic signatures that provide explicit type arguments to encourage the use of TypedDocumentNode.

  • #​13166 0537d97 Thanks @​jerelmiller! - Release changes in 4.1.5 and 4.1.6.

  • #​13215 54c9eb7 Thanks @​jerelmiller! - Ensure the options object for the useQuery, useSuspenseQuery, and useBackgroundQuery hooks provide proper IntelliSense suggestions.

  • #​13229 9a7f65a Thanks @​jerelmiller! - Fix refetchOn merging when defaultOptions.watchQuery.refetchOn is set to a non-object value (false, true, or a function) and the per-query refetchOn is an object. Previously the per-query object completely replaced the default so unspecified events fell back to "enabled" regardless of the default.

    The defaultOptions value now applies to any event the per-query object does not explicitly configure:

    • false - unspecified events stay disabled
    • true - unspecified events refetch
    • Callback function - the function is called for unspecified events to determine whether to refetch
    const client = new ApolloClient({
      // ...
      defaultOptions: {
        watchQuery: {
          refetchOn: false,
        },
      },
    });
    
    // Only `windowFocus` refetches. Other events stay disabled per the default.
    useQuery(QUERY, { refetchOn: { windowFocus: true } });
  • #​13230 b25b659 Thanks @​jerelmiller! - Add the ability to override the default event handler on RefetchEventManager. The default handler runs when no per-source handler is configured for an event. Provide a custom handler via the defaultHandler constructor option or the setDefaultEventHandler instance method.

    new RefetchEventManager({
      defaultHandler: ({ client, matchesRefetchOn }) => {
        return client.refetchQueries({
          include: "all",
          onQueryUpdated: matchesRefetchOn,
        });
      },
    });
changesets/changesets (@​changesets/changelog-github)

v0.7.0

Compare Source

Minor Changes
graphql/graphql-js (graphql)

v16.14.0

Compare Source

v16.14.0 (2026-05-03)

New Feature 🚀
Bug Fix 🐞
Docs 📝
Committers: 4
jestjs/jest (jest)

v30.4.2

Compare Source

Fixes
  • [jest-runtime] Fix named imports from CJS modules whose module.exports is a function with own-property exports (#​16150)

v30.4.1

Compare Source

Features
  • [jest-config, jest-core, jest-runner, jest-schemas, jest-types] Allow custom runner configuration options via tuple format ['runner-path', {options}] (#​16141)
Fixes
  • [jest-runtime] Align CJS-from-ESM default export with Node: module.exports is always the ESM default, __esModule unwrapping is no longer applied (#​16143)

v30.4.0

Compare Source

Features
  • [babel-jest] Support collecting coverage from .mts, .cts (and other) files (#​15994)
  • [jest-circus, jest-cli, jest-config, jest-core, jest-jasmine2, jest-types] Add --collect-tests flag to discover and list tests without executing them (#​16006)
  • [jest-config, jest-runner, jest-worker] Add workerGracefulExitTimeout config option to control how long workers are given to exit before being force-killed (#​15984)
  • [jest-config] Add support for jest.config.mts as a valid configuration file (#​16005)
  • [jest-config, jest-core, jest-reporters, jest-runner] verbose and silent can now be set per-project; the project-level value overrides the global value for that project's tests (#​16133)
  • [@jest/fake-timers] Accept Temporal.Duration in jest.advanceTimersByTime() and jest.advanceTimersByTimeAsync() (#​16128)
  • [@jest/fake-timers] Accept Temporal.Instant and Temporal.ZonedDateTime in jest.setSystemTime() and useFakeTimers({now}) (#​16128)
  • [@jest/fake-timers] Support faking Temporal.Now.* (#​16131)
  • [jest-mock] Add clearMocksOnScope(scope) on ModuleMocker for clearing every mock function exposed on a scope object (#​16088)
  • [jest-resolve] Add canResolveSync() on Resolver so callers can detect when a user-configured resolver only exports an async hook (#​16064)
  • [jest-runtime] Use synchronous evaluate() for ES modules without top-level await on Node versions that support it (v24.9+), and prefer the synchronous transform path when a sync transformer is configured (#​16062)
  • [jest-runtime] Support require() of ES modules on Node v24.9+ (#​16074)
  • [jest-runtime] Validate TC39 import attributes (with { type: 'json' }) on ESM imports (#​16127)
  • [@jest/transform] Add canTransformSync(filename) on ScriptTransformer so callers can pick the sync vs async transform path (#​16062)
  • [jest-util] Add isError helper (#​16076)
  • [pretty-format] Support React 19 (#​16123)
Fixes
  • [expect-utils] Fix toStrictEqual failing on structuredClone results due to cross-realm constructor mismatch (#​15959)
  • [@jest/expect-utils] Prevent toMatchObject/subset matching from throwing when encountering exotic iterables (#​15952)
  • [fake-timers] Convert Date to milliseconds before passing to @sinonjs/fake-timers (#​16029)
  • [jest] Export GlobalConfig and ProjectConfig TypeScript types (#​16132)
  • [jest-circus] Prevent crash when asyncError is undefined for non-Error throws (#​16003)
  • [jest-circus, jest-jasmine2] Include Error.cause in JSON failureMessages output (#​15967)
  • [jest-config] Fix preset path resolution on Windows when the preset uses subpath exports (#​15961)
  • [jest-config] Allow collectCoverage and coverageProvider in project config without a validation warning (#​16132)
  • [jest-config] Project config validator now emits "is not supported in an individual project configuration" instead of "probably a typing mistake" for known global-only options (#​16132)
  • [jest-environment-node] Fix --localstorage-file warning on Node 25+ (#​16086)
  • [jest-reporters] Apply global coverage threshold to unmatched pattern files in addition to glob/path thresholds (#​16137)
  • [jest-reporters, jest-runner, jest-runtime, jest-transform] Fix coverage report not showing correct code coverage when using projects config option (#​16140)
  • [jest-runtime] Resolve expect and @jest/expect from the internal module registry so test-file imports share the same JestAssertionError as the global expect (#​16130)
  • [jest-runtime] Improve CJS-from-ESM interop: __esModule/Babel default unwrap, broader named-export coverage, and shared CJS singleton across importers (#​16050)
  • [jest-runtime] Load .js files with ESM syntax but no "type":"module" marker as native ESM (#​16050)
  • [jest-runtime] Extend the .js-with-ESM-syntax fallback to require() on Node v24.9+ - falls back to require(esm) when the CJS parser rejects ESM syntax (#​16078)
  • [jest-runtime] Fix deadlocks and double-evaluation in concurrent ESM and wasm imports (#​16050)
  • [jest-runtime] Fix error when require() is called after the Jest environment has been torn down (#​15951)
  • [jest-runtime] Fix missing error when import() is called after the Jest environment has been torn down (#​16080)
  • [jest-runtime] Fix virtual unstable_mockModule registrations not respected in ESM (#​16081)
  • [jest-runtime] Apply moduleNameMapper when resolving modules with require.resolve() and the paths option (#​16135)
Chore & Maintenance
  • [@jest/fake-timers] Upgrade @sinonjs/fake-timers (#​16139)
  • [jest-runtime] Use synchronous linkRequests / instantiate for ESM linking on Node v24.9+ (#​16063)
webpack/minimizer-webpack-plugin (terser-webpack-plugin)

v5.6.1

Compare Source

Patch Changes
  • deduplicate extracted comments in linear time, so builds stay fast when an asset contains many distinct preserved comments (by @​alexander-akait in #​682)

v5.6.0

Compare Source

Minor Changes
  • support array of minimizers for minify and terserOptions (by @​alexander-akait in #​674)

  • add built-in CSS minimizers from css-minimizer-webpack-plugin (by @​alexander-akait in #​674)

  • add built-in HTML minimizers from html-minimizer-webpack-plugin (by @​alexander-akait in #​674)

  • add filter method to minimizers, allowing a single plugin instance to handle multiple asset types (by @​alexander-akait in #​674)

  • terser-webpack-plugin has been renamed to minimizer-webpack-plugin, merging other minimizers from css-minimizer-webpack-plugin and html-minimizer-webpack-plugin. We will continue to publish new releases under the old name, but we recommend switching to the new package - minimizer-webpack-plugin. It is now a single plugin for minification. We also added the ability to specify different minifier types using only one plugin instance, which will improve performance. (by @​alexander-akait in #​677)

  • rename terserOptions to minimizerOptions; terserOptions is kept as a deprecated alias (by @​alexander-akait in #​674)

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

privatenumber/tsx (tsx)

v4.22.3

Compare Source

v4.22.2

Compare Source

v4.22.1

Compare Source

v4.22.0

Compare Source

v4.21.1

Compare Source

Bug Fixes
  • support Node 20.11/21.2 import.meta paths (acf3d8f)
  • support Node.js 24.15.0 (c1d2d45)
  • support Node.js 26.1.0 and 25.9.0 (1d7e528)

This release is also available on:

webpack/webpack (webpack)

v5.107.2

Compare Source

Patch Changes
  • Reduce per-file overhead in ContextModuleFactory.resolveDependencies by batching alternativeRequests hook calls. Previously the hook was invoked once per file in the context (with a single-item array), paying per-call overhead (closure allocation, resolverFactory.get, intermediate arrays in RequireContextPlugin) for every file. The hook is now invoked once per directory with all matched files in one batch — RequireContextPlugin's tap already iterates the items array, so the output is unchanged. Steady-state rebuild on a 4000-file require.context drops a further ~15 ms (after the watch-mode purge fix in the same release). (by @​alexander-akait in #​21020)

  • Include each external info's runtimeCondition in ConcatenatedModule#updateHash so changes to a concatenated external's runtime condition invalidate persistent caches instead of slipping through with the module id alone. (by @​alexander-akait in #​21023)

  • Fix HTML [contenthash] for referenced asset and inline-style URL changes. (by @​alexander-akait in #​21018)

  • Resolve chunk-hash placeholders in chunk URLs embedded into extracted HTML. (by @​alexander-akait in #​21018)

  • Remove unnecessary __webpack_require__ runtime helpers in ESM library output with multi-module chunks. (by @​xiaoxiaojx in #​21032)

  • Rewrite NormalModule#getSideEffectsConnectionState walk as an allocation-light iterative loop instead of a generator trampoline, restoring rebuild performance lost in #​20993 while keeping deep import chains stack-safe. (by @​alexander-akait in #​21014)

  • Fix runtime ReferenceError on the first activation of a lazy-compiled module when output.library.type produces a closure-wrapped bundle (umd, umd2, amd, amd-require, system). (by @​alexander-akait in #​21013)

    External modules of these types reference closure-bound identifiers like __WEBPACK_EXTERNAL_MODULE_react__, supplied by the library wrapper that is generated once per chunk. When lazyCompilation activates an entry or import for the first time, any external dependency the lazily-built module pulls in arrives in a hot-update chunk that lives outside the original wrapper closure, so its factory body cannot resolve the closure identifier and only a manual page refresh recovers.

    The inactive LazyCompilationProxyModule now declares statically-enumerable externals (string and object forms of externals) as its own dependencies, so the initial entry chunk's library wrapper already exposes their closure identifiers. When activation later pulls in those externals through the lazily-compiled module, they resolve to the already-installed factories instead of throwing. Function and RegExp externals are not pre-populated because their effective request set isn't knowable up front.

  • Fill in missing entryOptions when an async block joins an existing entrypoint. (by @​alexander-akait in #​21026)

  • Release per-child codeGenerationResults in MultiCompiler and at Compiler.close to reduce memory retention. (by @​alexander-akait in #​21015)

  • Reduce peak memory of SourceMapDevToolPlugin on large builds (closes #​20961). (by @​alexander-akait in #​20963)

  • Fix slow require.context() / dynamic import() rebuilds in watch mode (#​13636). When a file inside a watched context directory changed, NodeWatchFileSystem would call inputFileSystem.purge(contextDir). The enhanced-resolve purge implementation matches cache keys with key.startsWith(contextDir), so the stat cache of every file under the directory was discarded on every rebuild — ContextModuleFactory.resolveDependencies then re-stat-ed the whole tree on each rebuild. Single-file rebuilds on a 4000-file context now reuse the warm stat cache, dropping median rebuild from ~1260 ms to ~650 ms in a local reproduction (≈49%). For directory items that are explicitly watched contexts, purge is now called with { exact: true } (added in enhanced-resolve@5.22.0) so only the directory's own entry is invalidated; file-level changes in the same aggregated event continue to purge file stats and the parent readdir as before. (by @​alexander-akait in #​21020)

v5.107.1

Compare Source

Patch Changes
  • Align the experimental HTML tokenizer with the WHATWG spec: fix offset-range bugs in the script-data, content-mode end-tag, attribute-value, and EOF states; surface tokenizer parse errors to consumers via a new parseError callback ("warning" when the tokenizer recovers and the emitted token is still well-formed, "error" when the offset range is incomplete — e.g. eof-in-tag); and add the full WHATWG named character references table so decodeHtmlEntities handles all named entities (including legacy bare forms like &AMP and multi-code-point entities like &NotEqualTilde;) with proper longest-prefix backtracking. (by @​alexander-akait in #​21000)

  • Tree-shake CommonJS modules imported through a const NAME = require(LITERAL) binding when only static members of NAME are read. Previously webpack treated every export of such modules as referenced (because the bare require() dependency reports EXPORTS_OBJECT_REFERENCED), so unused exports.x = ... assignments remained in the bundle even with usedExports enabled. The parser now forwards NAME.x / NAME.x() / NAME["x"] accesses to the underlying CommonJsRequireDependency as referenced exports, falling back to the full exports object the moment NAME is read in any other context (passed by value, destructured later, accessed with a dynamic key, …). This brings the binding form to parity with the existing destructuring form (const { x } = require(...)). (by @​alexander-akait in #​21003)

  • Fix RangeError: Maximum call stack size exceeded thrown from HarmonyImportSideEffectDependency.getModuleEvaluationSideEffectsState on long linear chains of side-effect-free imports. NormalModule.getSideEffectsConnectionState previously descended through HarmonyImportSideEffectDependency.getModuleEvaluationSideEffectsState recursively, adding two stack frames per module, which overflowed V8's stack at a few thousand modules deep. The traversal is now iterative. (by @​alexander-akait in #​20993)

  • Fix NormalModuleFactory parser/generator types: (by @​alexander-akait in #​20999)

    • module.generator.html now uses HtmlGeneratorOptions instead of EmptyGeneratorOptions (the extract option was hidden from the createGenerator / generator hook types).
    • WebAssembly (webassembly/async, webassembly/sync) generator hooks now use EmptyGeneratorOptions instead of EmptyParserOptions.
    • NormalModuleFactory#getParser / createParser / getGenerator / createGenerator are now generic over the module-type string, returning the specific parser/generator class for known types (e.g. JavascriptParser for "javascript/auto", CssGenerator for "css", etc.) instead of always returning the base Parser / Generator.
    • NormalModuleCreateData is now generic over the module type so parser, parserOptions, generator, and generatorOptions are narrowed to the specific class / options for the given type.
  • Link import bindings used inside define(...) callbacks in ES modules. Previously, HarmonyDetectionParserPlugin skipped walking the arguments of define calls in harmony modules, so references to imported bindings inside an inline AMD define factory (e.g. define(function () { console.log(foo); })) were not rewritten to their imported references and could cause ReferenceError at runtime. Inner graph usage analysis is also fixed for the related pattern const fn = function () { foo; }; define(fn);. (by @​alexander-akait in #​20990)

  • HTML-entry pipeline (experiments.html + experiments.css): emit <link rel="stylesheet"> tags for CSS chunks reachable from a <script src> entry. Previously when the bundled JS imported CSS, the resulting .css file was emitted to disk but never referenced from the extracted HTML (no <link> tag), and when splitChunks extracted CSS into sibling chunks the HTML cloned the originating <script> for each one — producing <script src="style.js"> pointing at non-existent JS filenames instead of <link rel="stylesheet" href="style.css">. CSS chunks are now sorted by the entrypoint's module post-order index so the <link> tags also appear in source import order, fixing the cascade ordering issue documented in html-webpack-plugin#1838 and webpack/mini-css-extract-plugin#959 for HTML-entry builds. nonce/crossorigin/referrerpolicy are copied from the originating tag onto the emitted <link>. (by @​alexander-akait in #​21002)

  • Allow devtool and SourceMapDevToolPlugin (or multiple SourceMapDevToolPlugin instances) to coexist on the same asset. Previously the second instance would silently skip any asset whose info.related.sourceMap had already been set by an earlier instance, and even when it ran the asset had been rewrapped as a RawSource so no source map could be recovered — producing an empty .map file. The plugin now keeps a per-compilation stash of pristine source maps, namespaces its persistent cache entries by the options that affect output, and appends additional related.sourceMap entries instead of overwriting them. The classic workaround of pairing devtool: 'hidden-source-map' with a new webpack.SourceMapDevToolPlugin({ filename: '[file].secondary.map', noSources: true }) now produces both maps in a single build. (by @​alexander-akait in #​21001)

  • Narrow TemplatePathFn callback types by context. pathData.chunk is now non-optional for chunk filename callbacks (output.filename, chunkFilename, cssFilename, cssChunkFilename, htmlFilename, htmlChunkFilename, optimization.splitChunks.cacheGroups[*].filename), and pathData.module is non-optional for module filename callbacks (output.assetModuleFilename, per-module generator.filename / generator.outputPath, module.parser.css.localIdentName). (by @​alexander-akait in #​20987)

  • Tighten the CreateData typedef in NormalModuleFactory. CreateData now represents the fully-populated value passed to the createModule, module, and createModuleClass hooks (NormalModuleCreateData & { settings: ModuleSettings }), while ResolveData.createData is typed as Partial<CreateData> to reflect the empty initial state. Plugins tapping those hooks no longer need to cast individual fields away from optional. (by @​alexander-akait in #​20992)

  • Stop webpackPrefetch / webpackPreload magic comments from leaking across import() call sites that share a webpackChunkName. When two imports targeted the same named chunk and only one of them set webpackPrefetch: true, the prefetch directive was applied from every parent chunk that referenced the named chunk. Prefetch and preload orders are now resolved per import() call site instead of from the shared chunk group's accumulated options. (by @​alexander-akait in #​20994)

  • Fix [fullhash:N] and [hash:N] (with length suffix) in output.publicPath not being interpolated at runtime. The detection regex in RuntimePlugin only matched [fullhash] / [hash] without a length suffix, so the PublicPathRuntimeModule was not flagged as a full-hash module and __webpack_require__.p was emitted with the placeholder XXXX left in place (e.g. out/XXXX/) instead of the real hash truncated to the requested length. (by @​alexander-akait in #​21004)

  • Re-export ModuleNotFoundError from webpack/lib/ModuleNotFoundError for backward compatibility with old plugins that import it from that path. This re-export will be removed in webpack 6. (by @​alexander-akait in #​20988)

v5.107.0

Compare Source

Minor Changes
  • Add module.generator.javascript.anonymousDefaultExportName option to control whether webpack sets .name to "default" for anonymous default export functions and classes per ES spec. Defaults to true for applications and false for libraries (when output.library is set) to avoid unnecessary bundle size overhead. Also extract anonymous default export .name fix-up into a shared runtime helper (__webpack_require__.dn), replacing repeated inline Object.defineProperty / Object.getOwnPropertyDescriptor calls with a single short call per module to reduce output size. (by @​xiaoxiaojx in #​20894)

  • Support module concatenation (scope hoisting) for CSS

Note

PR body was truncated to here.


Configuration

📅 Schedule: (in timezone America/Los_Angeles)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

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

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


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

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

@renovate renovate Bot requested a review from a team as a code owner May 9, 2026 17:00
@renovate renovate Bot enabled auto-merge (squash) May 9, 2026 17:00
@renovate
Copy link
Copy Markdown
Contributor Author

renovate Bot commented May 9, 2026

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: development/client-angular/package-lock.json
npm warn Unknown env config "store". This will stop working in the next major version of npm. See `npm help npmrc` for supported config options.
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: simple-apollo-angular@0.0.0
npm warn Found: zone.js@0.16.1
npm warn node_modules/zone.js
npm warn   dev zone.js@"0.16.2" from the root project
npm warn
npm warn Could not resolve dependency:
npm warn peer zone.js@"~0.14.0" from @angular/core@17.3.12
npm warn node_modules/@angular/core
npm warn   dev @angular/core@"17.3.12" from the root project
npm warn   5 more (@angular/common, @angular/compiler, ...)
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: simple-apollo-angular@0.0.0
npm warn Found: zone.js@0.16.1
npm warn node_modules/zone.js
npm warn   dev zone.js@"0.16.2" from the root project
npm warn
npm warn Could not resolve dependency:
npm warn peer zone.js@"~0.14.0" from @angular/core@17.3.12
npm warn node_modules/@angular/core
npm warn   dev @angular/core@"17.3.12" from the root project
npm warn   5 more (@angular/common, @angular/compiler, ...)
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: simple-apollo-angular@0.0.0
npm warn Found: zone.js@0.16.1
npm warn node_modules/zone.js
npm warn   dev zone.js@"0.16.2" from the root project
npm warn
npm warn Could not resolve dependency:
npm warn peer zone.js@"~0.14.0" from @angular/core@17.3.12
npm warn node_modules/@angular/core
npm warn   dev @angular/core@"17.3.12" from the root project
npm warn   5 more (@angular/common, @angular/compiler, ...)
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: simple-apollo-angular@0.0.0
npm warn Found: zone.js@0.16.1
npm warn node_modules/zone.js
npm warn   dev zone.js@"0.16.2" from the root project
npm warn
npm warn Could not resolve dependency:
npm warn peer zone.js@"~0.14.0" from @angular/core@17.3.12
npm warn node_modules/@angular/core
npm warn   dev @angular/core@"17.3.12" from the root project
npm warn   5 more (@angular/common, @angular/compiler, ...)
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: simple-apollo-angular@0.0.0
npm warn Found: zone.js@0.16.1
npm warn node_modules/zone.js
npm warn   dev zone.js@"0.16.2" from the root project
npm warn
npm warn Could not resolve dependency:
npm warn peer zone.js@"~0.14.0" from @angular/core@17.3.12
npm warn node_modules/@angular/core
npm warn   dev @angular/core@"17.3.12" from the root project
npm warn   5 more (@angular/common, @angular/compiler, ...)
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: simple-apollo-angular@0.0.0
npm warn Found: zone.js@0.16.1
npm warn node_modules/zone.js
npm warn   dev zone.js@"0.16.2" from the root project
npm warn
npm warn Could not resolve dependency:
npm warn peer zone.js@"~0.14.0" from @angular/core@17.3.12
npm warn node_modules/@angular/core
npm warn   dev @angular/core@"17.3.12" from the root project
npm warn   5 more (@angular/common, @angular/compiler, ...)
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: simple-apollo-angular@0.0.0
npm warn Found: zone.js@0.16.1
npm warn node_modules/zone.js
npm warn   dev zone.js@"0.16.2" from the root project
npm warn
npm warn Could not resolve dependency:
npm warn peer zone.js@"~0.14.0" from @angular/core@17.3.12
npm warn node_modules/@angular/core
npm warn   dev @angular/core@"17.3.12" from the root project
npm warn   5 more (@angular/common, @angular/compiler, ...)
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: simple-apollo-angular@0.0.0
npm warn Found: zone.js@0.16.1
npm warn node_modules/zone.js
npm warn   dev zone.js@"0.16.2" from the root project
npm warn
npm warn Could not resolve dependency:
npm warn peer zone.js@"~0.14.0" from @angular/core@17.3.12
npm warn node_modules/@angular/core
npm warn   dev @angular/core@"17.3.12" from the root project
npm warn   5 more (@angular/common, @angular/compiler, ...)
npm warn ERESOLVE overriding peer dependency
npm error code ERESOLVE
npm error ERESOLVE could not resolve
npm error
npm error While resolving: @angular-devkit/build-angular@17.3.17
npm error Found: typescript@5.9.3
npm error node_modules/typescript
npm error   peer typescript@">=5.2 <5.5" from @ngtools/webpack@17.3.17
npm error   node_modules/@angular-devkit/build-angular/node_modules/@ngtools/webpack
npm error     @ngtools/webpack@"17.3.17" from @angular-devkit/build-angular@17.3.17
npm error     node_modules/@angular-devkit/build-angular
npm error       dev @angular-devkit/build-angular@"17.3.17" from the root project
npm error
npm error Could not resolve dependency:
npm error peer typescript@">=5.2 <5.5" from @angular-devkit/build-angular@17.3.17
npm error node_modules/@angular-devkit/build-angular
npm error   dev @angular-devkit/build-angular@"17.3.17" from the root project
npm error
npm error Conflicting peer dependency: typescript@5.4.5
npm error node_modules/typescript
npm error   peer typescript@">=5.2 <5.5" from @angular-devkit/build-angular@17.3.17
npm error   node_modules/@angular-devkit/build-angular
npm error     dev @angular-devkit/build-angular@"17.3.17" from the root project
npm error
npm error Fix the upstream dependency conflict, or retry this command with --force or --legacy-peer-deps to accept an incorrect (and potentially broken) dependency resolution.
npm error
npm error
npm error For a full report see:
npm error /runner/cache/others/npm/_logs/2026-05-27T17_42_26_581Z-eresolve-report.txt
npm error A complete log of this run can be found in: /runner/cache/others/npm/_logs/2026-05-27T17_42_26_581Z-debug-0.log

@relativeci
Copy link
Copy Markdown

relativeci Bot commented May 9, 2026

#2099 Bundle Size — 2.02MiB (-0.01%).

f0cea2a(current) vs d99e0a2 main#2089(baseline)

Warning

Bundle contains 16 duplicate packages – View duplicate packages

Bundle metrics  Change 3 changes Improvement 1 improvement
                 Current
#2099
     Baseline
#2089
Improvement  Initial JS 1.73MiB(-0.01%) 1.73MiB
No change  Initial CSS 0B 0B
Change  Cache Invalidation 81.78% 78.81%
No change  Chunks 5 5
No change  Assets 237 237
Change  Modules 1528(-0.07%) 1529
No change  Duplicate Modules 134 134
No change  Duplicate Code 5.68% 5.68%
No change  Packages 180 180
No change  Duplicate Packages 12 12
Bundle size by type  Change 1 change Improvement 1 improvement
                 Current
#2099
     Baseline
#2089
Improvement  JS 1.73MiB (-0.01%) 1.73MiB
No change  Other 251.83KiB 251.83KiB
No change  IMG 35.85KiB 35.85KiB
No change  HTML 857B 857B

Bundle analysis reportBranch renovate/all-devProject dashboard


Generated by RelativeCIDocumentationReport issue

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 9, 2026

npm i https://pkg.pr.new/apollo-client-devtools@1867
npm i https://pkg.pr.new/@apollo/client-devtools-vscode@1867

commit: f0cea2a

@renovate renovate Bot force-pushed the renovate/all-dev branch 5 times, most recently from 2372cf4 to f22c5c4 Compare May 22, 2026 19:32
@renovate renovate Bot force-pushed the renovate/all-dev branch 3 times, most recently from c90edab to 89acca1 Compare May 25, 2026 18:34
@renovate renovate Bot force-pushed the renovate/all-dev branch from 89acca1 to f0cea2a Compare May 27, 2026 17:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants