You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chore(deps): update all non-major dependencies - #1950
New page.webmcp and frame.webmcp give access to the tools that a page registers through the experimental WebMCP browser API, so you can test them like any other part of your app:
New style option takes CSS declarations for the point marker, the target highlight and the action title. It replaces the fontSize option, which is now deprecated.
The cursor stays visible at the last action point, survives navigations and travels along a natural, eased path.
Videos are encoded with VP9 instead of VP8, which takes less CPU and produces smaller files of the same or better
quality.
New testProject.default option keeps a project in the config without running it by default. You can configure every browser you care about, and let a plain npx playwright test run just your favourite one:
npx playwright test# runs chromium only
npx playwright test --project=firefox # runs firefox
npx playwright test --project="*"# runs all three, for example on CI
New --shuffle command line option schedules tests in a random order, which helps to find tests that accidentally depend on each other.
npx playwright test --shuffle
# Running 42 tests using 4 workers, shuffle seed 271828182# ...# Pass the seed to reproduce the same order.
npx playwright test --shuffle 271828182
Relative locators such as locator.nth() or locator.first() are resolved inside each parent
separately, which makes column-like queries straightforward:
// The third cell of every row, not the third cell in the table.constthirdColumn=page.getByRole('cell').nth(2).within(page.getByRole('row'));awaitexpect(thirdColumn).toHaveText(['Apple','Banana','Cherry']);
New option signCount sets the initial signature counter of a virtual credential. credentials.create() and credentials.get() return the current signCount, and it is saved and restored together with the credentials in the storage state.
New fullConfig.filteredProjects lists the projects that were selected to run after applying the --project filter. It is available in global setup and reporters.
screen property is now forwarded from the device descriptors. If you use ...devices['Desktop Chrome'] and alike, window.screen and media queries now see the emulated screen size. You can opt-out by explicitly setting screen to undefined:
JSX in your test files now follows your tsconfig.json. Playwright compiles JSX in test files according to the jsx, jsxFactory, jsxFragmentFactory and jsxImportSourcetsconfig options, and defaults to the automatic runtime from react/jsx-runtime.
--update-snapshots=missing now passes the test run. Tests that only create missing snapshots now pass in the 'missing' mode of testConfig.updateSnapshots, so that CI can generate new snapshots and verify the existing ones in a single run. The mode used when the option is not specified is now called 'default' and behaves as before: missing snapshots are written and the test fails.
Elements inside hidden iframes are considered hidden. Elements inside an iframe that is not visible, for example with visibility: hidden, are now considered hidden by actions, locator.isVisible() and expect(locator).toBeVisible().
Browser Versions
Chromium 156.0.8078.4
Mozilla Firefox 157.0
WebKit 27.2
This version was also tested against the following stable channels:
This feature release updates our build tooling to TSDown and PNPM, adds official TypeScript 7 support, and includes a long list of bugfixes across RTK Query, createAsyncThunk, createEntityAdapter, and combineSlices.
Changelog
Build Tooling Updates
We've fully modernizing modernized our build tooling across all of the Redux repos. That included switching from Yarn to PNPM, ESLint to Oxlint, Prettier to Oxfmt, and TSUp to TSDown.
The part that matters for users is that we now build the package with TSDown instead of tsup. The package layout, exports definitions, and exported APIs are all unchanged from 2.12. We've checked the new build with attw, and verified that CJS and ESM entry points load in both dev and prod builds, and that the legacy-esm artifacts still target ES2017. The contents of the bundles do look a bit different (smaller CJS artifacts, slightly different helper output in the legacy-esm files). If you see any behavior differences that look build-related, please file an issue!
This is also our first release published via the updated PNPM-based workflow, still using NPM Trusted Publishing. We've also added pkg.pr.new previews for every commit, so you can try out a PR build before it's released.
Docs Updates
We've shipped a new combined Redux libraries docs site! The core docs site at https://redux.js.org now contains the docs for all of our libraries: Redux core and usage guides, Redux Toolkit, React Redux, and Reselect. The prior standalone docs sites for RTK, R-R, and Reselect now redirect to their respective sections of the combined docs. We've also done a major cleanup pass on the docs, deduplicating pages that had similarities (like the Next.js or RTK2 migration pages that lived in both the core and RTK docs), and updating outdated content (modernizing example code snippets, deleting dead links, and making RTK and hooks the default patterns shown). The RTK content now lives at https://redux.js.org/toolkit/ .
TypeScript 7 Support
TS 7.0 (the native Go port) is now out! We fixed the remaining type errors in RTK when checked by TS 7.0 and 7.1, and TS 7.0 is now part of our CI test matrix.
Per our TS support policy of matching DefinitelyTyped's support window, we've also updated our support matrix to TS 5.6+. As always, RTK may still work with earlier versions, but we no longer test against them.
RTK Query Fixes
useQueryState (and thus useQuery) was passing a new inline selector to useSelector on every render, and also reading the store directly during render. The selector is now memoized, and the direct store read is gone. This also fixes a bug where isSuccess could flip from false to true on an unrelated re-render while a query was refetching after an error. isSuccess now correctly stays false in that case.
data now reflects cache updates made via updateQueryData while a refetch is in flight, instead of showing the previous result.
Polling now reads the current cache state when each poll fires, rather than the state at the time the poll was scheduled. This means skipPollingIfUnfocused respects focus loss that happens after scheduling, and polls stop if their cache entry was removed.
We fixed a race where a duplicate query request rejected by the thunk condition could cause queued tag invalidations to run too early and be lost, leaving stale data in the cache.
Tags with falsy ids like 0 now invalidate and clean up correctly.
Lazy query hooks now re-subscribe correctly when effects restart while the hook state is preserved, such as with Fast Refresh or <Activity>.
Infinite queries no longer trigger onQueryStarted when fetching past the end of the list, and the infinite query hook result type now includes the page error flags.
fetchBaseQuery only treats a URL as absolute if it starts with a scheme.
We also fixed an error when rehydrating state for an endpoint name that has no definition.
Other Fixes
createAsyncThunk no longer swallows aborts that happen before the pending action is dispatched, and now correctly sets rejectedWithValue when rejectWithValue is called with a falsy payload.
createEntityAdapter's setAll now keeps the last item when given duplicate IDs, matching setMany. The sorted adapter's updateMany now merges multiple updates for the same ID before applying them.
combineSlices now keeps its internal state proxy cache per instance, so multiple combined reducers no longer interfere with each other.
The immutability check middleware now handles circular references in state.
The dynamic middleware now caches its composed middleware chains when the list of middleware hasn't changed.
Conclusion: This dependency update exposes Rstest config-snapshot drift. The observed failure is not evidence of a Rslib runtime regression.
Impact:Run 38377549807 fails six tests in packages/core/tests/core/rsbuild.test.ts; each diff adds "minimized": false to cssUrlLoader options.
Why this PR
This PR changes the Rslib Rsbuild catalog/lock from 2.2.11 to 2.2.12. Rsbuild #8606 intentionally added this option to avoid minifying CSS URL assets twice. Rstest snapshots still describe the earlier config shape. Holding Rstest at da8eb2266c810b714cfc8f722237de84223e5659, a focused version comparison passes all 47 tests with Rsbuild 2.2.11 and reproduces the same six failures with 2.2.12.
Suggested next step
Rstest should align its Rsbuild dependency/lockfile baseline and regenerate the affected snapshots. Updating snapshots alone passes 47/47 with 2.2.12 but fails six tests with the old 2.2.11 baseline. An alternative is a narrowly scoped test assertion that accepts the absent/false default while continuing to check meaningful CSS options; this needs maintainer review of snapshot coverage.
No automatic repair PR was opened: the preferred change includes a dependency update and generated snapshots, which this automation excludes from automatic repair. No runtime code change is proposed.
Evidence and attribution checks
Ecosystem / suite: rslib/rstest
Tested upstream: ad8a4dce709e3f43f784c551b08fbdac7a33b2c2 (from origin/data:rslib.json, not the workflow SHA).
Current job 115229635445: 6 failed / 1584 passed; six config-snapshot mismatches, all adding minimized: false.
Previous job 115176588545: the same config test file passed 47/47 with Rsbuild 2.2.11. The new job reports Rsbuild 2.2.12 in dependency resolution.
Downstream moved from 77b6cf60 to da8eb226; that diff changes DOM/VM assertions, not this config test or its snapshots. The fixed-downstream version comparison reproduces the failure independently of that change. The eco-ci workflow SHA is identical (e9c64c33) in both runs.
No matching signature was found in automation history; the earlier rslib/rstest VSCode worker failures have a different signature. The previous green and deterministic version comparison do not support a flaky attribution here.
Runtime config evidence: the tests invoke rsbuildInstance.inspectConfig() and compare its origin.bundlerConfigs; their received config contains the CSS URL loader and the new option. This is observed config, not an inferred feature flag.
Local commands: pnpm install --frozen-lockfile; node --run build; DEBUG=rsbuild pnpm exec rstest packages/core/tests/core/rsbuild.test.ts with each published Rsbuild version. Only the isolated worktree's core Rsbuild link was switched; no Rspack canary was used.
Candidate snapshot generation: pnpm exec rstest -u packages/core/tests/core/rsbuild.test.ts; reviewed diff is eight minimized: false lines. A subsequent non-update run passed 47/47 with 2.2.12. These temporary snapshot changes were not committed.
Limits: full eco-ci combination and full suite were not rerun locally; no lint/type-check claim is made for an unsubmitted repair. The initial external artifact path introduced extra path-only snapshot noise; the reported comparison uses the normal pnpm directory shape.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^2.66.16→^2.66.170.45.3→0.50.0^8.0.6→^8.0.7^7.59.2→^7.59.41.63.0→1.64.0^2.12.0→^2.13.0~2.2.11→~2.2.12^2.0.22→^2.0.23^2.0.22→^2.0.23^2.0.22→^2.0.23^2.0.22→^2.0.23^2.0.22→^2.0.23^2.0.22→^2.0.23^2.0.22→^2.0.23^2.0.22→^2.0.23^0.12.2→^0.12.3^0.12.2→^0.12.3^4.4.3→^4.5.0^10.6.0→^10.6.1^10.6.0→^10.6.1^10.6.0→^10.6.1^10.6.0→^10.6.1^4.17.25→^4.17.26^24.19.0→^24.19.2^7.0.0→^7.1.0^5.2.1→^5.3.0^20.14.5→^20.14.6^1.4.2→^1.4.3^4.79.0→^4.80.012.5.1→12.11.2>=12.5.1→>=12.11.2^3.9.9→^3.9.10^0.8.0→^0.8.3^1.9.15→^1.9.17^10.6.0→^10.6.1^3.6.0→^3.6.1^3.6.0→^3.6.1^3.6.0→^3.6.1^5.57.1→^5.57.2^3.3.11→^3.3.13Release Notes
arco-design/arco-design (@arco-design/web-react)
v2.66.17Compare Source
🐛 BugFix
maxTagCountand receives repeated resize notifications.(#3199)🐛 问题修复
maxTagCount时,重复的尺寸通知可能导致无限更新的问题。(#3199)ast-grep/ast-grep (@ast-grep/napi)
v0.50.0Compare Source
#2955#2950#2954#2983#2984#2956#2925#2936#2922#2979#2981#2966#2967#2968#2948#2946#2972#2977#2971#2969#2965#2964#2932#2941#2942#2960#2962#2945#2937#2920#2931#2926#2928#2919#2921#2923#2918#2944babel/babel (@babel/core)
v8.0.7Compare Source
🐛 Bug Fix
babel-helper-create-regexp-features-plugin,babel-plugin-transform-dotall-regex,babel-plugin-transform-unicode-sets-regex,babel-preset-envbabel-plugin-transform-for-offor awaitintransform-for-of(@brunoborta)babel-helpers,babel-plugin-transform-async-generator-functions,babel-runtime-corejs3asyncIteratorhelper forwarding.throw()to.return()(@brunoborta)babel-parserbabel-helpers,babel-plugin-transform-class-properties,babel-plugin-transform-modules-systemjs,babel-runtime-corejs3@@toPrimitiveusage in toPrimitive helper (@nicolo-ribaudo)babel-plugin-transform-block-scopingbabel-helper-create-class-features-plugin,babel-plugin-transform-private-property-in-object#x inon static private fields before initialization (@hoobnn)babel-traverseNodePath#evaluate(@CINC0S)path.evaluate(@wulu007)babel-core🏠 Internal
babel-helpers,babel-plugin-transform-modules-commonjs,babel-runtime-corejs3interopRequireWildcardhelper (@nicolo-ribaudo)microsoft/rushstack (@microsoft/api-extractor)
v7.59.4Tue, 06 Oct 2026 00:04:37 GMT
Version update only
v7.59.3Mon, 28 Sep 2026 20:08:26 GMT
Version update only
microsoft/playwright (@playwright/test)
v1.64.0Compare Source
🧰 WebMCP
New page.webmcp and frame.webmcp give access to the tools that a page registers through the experimental WebMCP browser API, so you can test them like any other part of your app:
Playwright MCP also supports WebMCP by default, with page-defined tools offered to the agent as
webmcp_<tool>. Pass--no-webmcpto opt out.playwright-cliexposes them as well:playwright-cli webmcp-list playwright-cli webmcp-call search_catalog --params '{"query":"cats"}'🎬 Better videos
Videos can now be recorded at a custom frame rate, and the decorations for actions are styled with plain CSS:
fpsoption in testOptions.video,recordVideoandscreencast.start(). Firefox and WebKit currently capture up to 25 frames per second.
styleoption takes CSS declarations for thepointmarker, the targethighlightand the actiontitle. It replaces thefontSizeoption, which is now deprecated.quality.
playwright-cli.🎯 Test runner
New testProject.default option keeps a project in the config without running it by default. You can configure every browser you care about, and let a plain
npx playwright testrun just your favourite one:New
--shufflecommand line option schedules tests in a random order, which helps to find tests that accidentally depend on each other.New
lockoption in test.describe.configure() adds test locks to all tests in a file or a group:New
typeoption oftoHaveScreenshotin testConfig.expect stores all unnamed screenshots as WebP:🪆 Locator.within()
New locator.within() combines two locators that you already have, reading in the natural order —
"this button, within that dialog":
Relative locators such as locator.nth() or locator.first() are resolved inside each parent
separately, which makes column-like queries straightforward:
New APIs
New page.getByRef() locates an element by its aria ref, such as
e2, reported by page.ariaSnapshot() in the'ai'mode.New option
includeShadowin page.content() and frame.content() serializes open shadow roots as declarative shadow DOM.New option
signCountsets the initial signature counter of a virtual credential. credentials.create() and credentials.get() return the currentsignCount, and it is saved and restored together with the credentials in the storage state.New fullConfig.filteredProjects lists the projects that were selected to run after applying the
--projectfilter. It is available in global setup and reporters.New apiRequestContext.addCookies(), apiRequestContext.cookies() and apiRequestContext.clearCookies() manage cookies of a request context, mirroring the BrowserContext methods:
Breaking changes⚠️
screenproperty is now forwarded from the device descriptors. If you use...devices['Desktop Chrome']and alike,window.screenand media queries now see the emulated screen size. You can opt-out by explicitly settingscreentoundefined:JSX in your test files now follows your
tsconfig.json. Playwright compiles JSX in test files according to thejsx,jsxFactory,jsxFragmentFactoryandjsxImportSourcetsconfig options, and defaults to the automatic runtime fromreact/jsx-runtime.--update-snapshots=missingnow passes the test run. Tests that only create missing snapshots now pass in the'missing'mode of testConfig.updateSnapshots, so that CI can generate new snapshots and verify the existing ones in a single run. The mode used when the option is not specified is now called'default'and behaves as before: missing snapshots are written and the test fails.Elements inside hidden iframes are considered hidden. Elements inside an iframe that is not visible, for example with
visibility: hidden, are now considered hidden by actions, locator.isVisible() and expect(locator).toBeVisible().Browser Versions
This version was also tested against the following stable channels:
reduxjs/redux-toolkit (@reduxjs/toolkit)
v2.13.0Compare Source
This feature release updates our build tooling to TSDown and PNPM, adds official TypeScript 7 support, and includes a long list of bugfixes across RTK Query,
createAsyncThunk,createEntityAdapter, andcombineSlices.Changelog
Build Tooling Updates
We've fully modernizing modernized our build tooling across all of the Redux repos. That included switching from Yarn to PNPM, ESLint to Oxlint, Prettier to Oxfmt, and TSUp to TSDown.
The part that matters for users is that we now build the package with TSDown instead of
tsup. The package layout,exportsdefinitions, and exported APIs are all unchanged from 2.12. We've checked the new build withattw, and verified that CJS and ESM entry points load in both dev and prod builds, and that thelegacy-esmartifacts still target ES2017. The contents of the bundles do look a bit different (smaller CJS artifacts, slightly different helper output in thelegacy-esmfiles). If you see any behavior differences that look build-related, please file an issue!This is also our first release published via the updated PNPM-based workflow, still using NPM Trusted Publishing. We've also added
pkg.pr.newpreviews for every commit, so you can try out a PR build before it's released.Docs Updates
We've shipped a new combined Redux libraries docs site! The core docs site at https://redux.js.org now contains the docs for all of our libraries: Redux core and usage guides, Redux Toolkit, React Redux, and Reselect. The prior standalone docs sites for RTK, R-R, and Reselect now redirect to their respective sections of the combined docs. We've also done a major cleanup pass on the docs, deduplicating pages that had similarities (like the Next.js or RTK2 migration pages that lived in both the core and RTK docs), and updating outdated content (modernizing example code snippets, deleting dead links, and making RTK and hooks the default patterns shown). The RTK content now lives at https://redux.js.org/toolkit/ .
TypeScript 7 Support
TS 7.0 (the native Go port) is now out! We fixed the remaining type errors in RTK when checked by TS 7.0 and 7.1, and TS 7.0 is now part of our CI test matrix.
Per our TS support policy of matching DefinitelyTyped's support window, we've also updated our support matrix to TS 5.6+. As always, RTK may still work with earlier versions, but we no longer test against them.
RTK Query Fixes
useQueryState(and thususeQuery) was passing a new inline selector touseSelectoron every render, and also reading the store directly during render. The selector is now memoized, and the direct store read is gone. This also fixes a bug whereisSuccesscould flip fromfalsetotrueon an unrelated re-render while a query was refetching after an error.isSuccessnow correctly staysfalsein that case.datanow reflects cache updates made viaupdateQueryDatawhile a refetch is in flight, instead of showing the previous result.Polling now reads the current cache state when each poll fires, rather than the state at the time the poll was scheduled. This means
skipPollingIfUnfocusedrespects focus loss that happens after scheduling, and polls stop if their cache entry was removed.We fixed a race where a duplicate query request rejected by the thunk condition could cause queued tag invalidations to run too early and be lost, leaving stale data in the cache.
Tags with falsy ids like
0now invalidate and clean up correctly.Lazy query hooks now re-subscribe correctly when effects restart while the hook state is preserved, such as with Fast Refresh or
<Activity>.Infinite queries no longer trigger
onQueryStartedwhen fetching past the end of the list, and the infinite query hook result type now includes the page error flags.fetchBaseQueryonly treats a URL as absolute if it starts with a scheme.We also fixed an error when rehydrating state for an endpoint name that has no definition.
Other Fixes
createAsyncThunkno longer swallows aborts that happen before thependingaction is dispatched, and now correctly setsrejectedWithValuewhenrejectWithValueis called with a falsy payload.createEntityAdapter'ssetAllnow keeps the last item when given duplicate IDs, matchingsetMany. The sorted adapter'supdateManynow merges multiple updates for the same ID before applying them.combineSlicesnow keeps its internal state proxy cache per instance, so multiple combined reducers no longer interfere with each other.The immutability check middleware now handles circular references in state.
The dynamic middleware now caches its composed middleware chains when the list of middleware hasn't changed.
What's Changed
pkg.pr.newby @aryaemami59 in #5256entityAdapter):setAllwith duplicate IDs keeps last occurrence (consistent withsetMany) by @JSap0914 in #5321createAsyncThunkaborts that happen before pending by @chatman-media in #5314useRef<T | undefined>(undefined)usages in RTK Query hooks by @DucMinhNe in #5315onQueryStartedfrom triggering at end-of-list by @joseph0926 in #5182remark-typescript-toolsand update to TS7 by @markerikson in #5390rejectedWithValuefor falsyrejectWithValuepayloads by @dfedoryshchev in #5395immutableStateInvariantMiddlewareby @hamed-bavar in #5433useQueryStateandisSuccessduring refetch-after-error by @markerikson in #5456Full Changelog: reduxjs/redux-toolkit@v2.12.0...v2.13.0
web-infra-dev/rsbuild (@rsbuild/core)
v2.2.12Compare Source
What's Changed
New Features 🎉
Performance 🚀
Bug Fixes 🐞
Document 📖
Other Changes
Full Changelog: web-infra-dev/rsbuild@v2.2.11...v2.2.12
web-infra-dev/rspress (@rspress/core)
v2.0.23Compare Source
What's Changed
Bug Fixes 🐞
Configuration
📅 Schedule: (UTC)
* 0-3 * * 1)🚦 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.
This PR was generated by Mend Renovate. View the repository job log.