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
This project began as a fork because I wanted a plugin that would not move side-effect imports around and mess with my CSS cascade. So its first and most distinguishing feature is that side-effect imports do not move, and other imports are not sorted across them.
This works fine in most cases, but some people have side-effect imports that they know can be sorted safely. For those, there is now an "escape hatch" option named importOrderSafeSideEffects. It is an array of glob pattern strings (similar to importOrder) which, when they match against a side-effect import, allow that import to be sorted as if it were a standard import.
Suggestions for safe use:
Use ^ at the start of your pattern and $ at the end, to avoid accidentally matching part of an import name. For example, "^server-only$", to avoid matching against import "not-server-only".
Use extreme caution if matching against relative files or CSS files. If you decide to sort CSS imports and a file ever imports more than one CSS file, your cascade may change.
You can still use // prettier-ignore to stop sorting a particular import that would otherwise be sorted.
Component testing moves to a stories and galleries model.
A story wraps your component in one specific scenario — hard-coded props, mock data, providers — and a
gallery page that you serve renders stories on demand. The new fixtures.mount() fixture navigates
to the gallery, mounts a story by id, and returns a Locator scoped to the story's root element:
test('click should expand',async({ mount })=>{constcomponent=awaitmount('components/Expandable/Stateful');awaitcomponent.getByRole('button').click();awaitexpect(component.getByTestId('expanded')).toHaveValue('true');});
Pass a story type as a template argument to type-check its props, and use update(props) / unmount() on the returned locator to re-render or tear down within a test.
🛑 Cancel operations with AbortSignal
Most operations and web-first assertions now accept a signal option that takes an AbortSignal, letting you
cancel long-running actions, navigations, waits, and assertions:
// Visual comparisons store the golden snapshot as lossless WebP.awaitexpect(page).toHaveScreenshot('homepage.webp');// Standalone screenshots can trade quality for size with lossy WebP.awaitpage.screenshot({path: 'homepage.webp',quality: 50});
page.screenshot() and locator.screenshot() also accept webp as a type,
where quality 100 (the default) is lossless and lower values use lossy compression.
🧩 Custom test filtering with Reporter.preprocess()
New reporter.preprocess() hook runs after the configuration is resolved and before reporter.onBegin(), letting a reporter mark individual tests as skipped, excluded,
fixed, or failing through a TestRun object:
New testConfig.retryStrategy controls when failed tests are retried. The default 'immediate' retries as soon as a worker is free; 'isolated' runs all retries at the end,
one by one in a single worker, to minimize interference with the rest of the suite:
New option credentials includes the context's virtual WebAuthn Credentials (passkeys) in the storage state, so they can be persisted and re-seeded into later contexts.
Actions
New scroll option ("auto" | "none") on actions to opt out of Playwright's automatic scroll-into-view.
Network
New apiResponse.timing() returns resource timing information for an API response.
Evaluation
New locator.waitForFunction() waits until a function — called with the matching element — returns a truthy value.
page.evaluate() and related methods now accept functions as evaluate arguments.
New Credentials virtual authenticator, available via browserContext.credentials, lets tests register passkeys and answer navigator.credentials.create() / navigator.credentials.get() ceremonies in the page — no real hardware key required, works in all browsers:
constcontext=awaitbrowser.newContext();// Seed a passkey your backend provisioned for a test user.awaitcontext.credentials.create('example.com',{id: credentialId,
userHandle,
privateKey,
publicKey,});awaitcontext.credentials.install();constpage=awaitcontext.newPage();awaitpage.goto('https://example.com/login');// The page's navigator.credentials.get() is answered with the seeded passkey.
You can also let the app register a passkey once in a setup test, read it back with credentials.get(), and seed it into later tests — see Credentials for details.
New option artifactsDir in browserType.connectOverCDP() controls where artifacts such as traces and downloads are stored when attached to an existing browser.
New option cursor in screencast.showActions() controls the cursor decoration rendered for pointer actions.
The onFrame callback in screencast.start() now receives a timestamp of when the frame was presented by the browser.
Test runner
The testOptions.video option now supports the same set of modes as trace: new 'on-all-retries', 'retain-on-first-failure' and 'retain-on-failure-and-retries' values. See the video modes table for which runs are recorded and kept in each mode.
Supported expect.soft.poll(...).
New fullConfig.argv — a snapshot of process.argv from the runner process, handy for reading custom arguments passed after the -- separator.
tracing.startHar() / tracing.stopHar() expose HAR recording as a first-class tracing API, with the same content, mode and urlFilter options as recordHar. The returned Disposable makes it easy to scope a recording with await using:
awaitusinghar=awaitcontext.tracing.startHar('trace.har');constpage=awaitcontext.newPage();awaitpage.goto('https://playwright.dev');// HAR is finalized when `har` goes out of scope.
🪝 Drop API
New locator.drop() simulates an external drag-and-drop of files or clipboard-like data onto an element. Playwright dispatches dragenter, dragover, and drop with a synthetic [DataTransfer] in the page context — works cross-browser and is great for testing upload zones:
New test.abort() aborts the currently running test from a fixture, hook, or route handler with an optional message. Use it when you have detected an unrecoverable misuse and want to fail the test right away:
test('does not publish to the shared page',async({ page })=>{awaitpage.route('**/publish',route=>{test.abort('Tests must not publish to the shared page. Use the `clone` option.');returnroute.abort();});// ...});
This pull request sets up GitHub code scanning for this repository. Once the scans have completed and the checks have passed, the analysis results for this pull request branch will appear on this overview. Once you merge this pull request, the 'Security' tab will show more code scanning analysis results (for example, for the default branch). Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results. For more information about GitHub code scanning, check out the documentation.
Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE
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:
3.9.0→3.10.04.3.1→4.7.11.49.1→1.62.11.2.0→1.2.201.1.1→1.1.231.1.0→1.1.151.1.0→1.2.61.1.1→1.3.111.1.0→1.1.202.2.1→2.3.71.1.6→1.1.232.1.1→2.1.241.1.1→1.1.232.1.0→2.1.151.1.1→1.1.241.2.0→1.2.221.1.1→1.1.231.1.0→1.1.161.2.0→1.4.71.1.0→1.2.182.1.1→2.3.71.1.2→1.1.151.2.0→1.4.71.1.2→1.3.31.1.0→1.3.71.1.0→1.1.211.2.1→1.2.231.1.0→1.1.181.1.0→1.1.191.1.8→1.2.161.6.0→1.6.320.14.15→20.19.431.1.0→1.3.1^33.2.1→^33.3.2^10.4.21→^10.5.41.0.0→1.1.18.1.8→8.6.08.57.0→8.57.114.2.5→14.2.359.1.0→9.1.25.2.1→5.5.67.35.0→7.37.53.17.4→3.18.31.3.1→1.7.21.2.4→1.4.21.5.0^0.476.0→^0.577.0^15.3.0-canary.14→^15.3.0-canary.170.3.0→0.4.620.14.0→20.20.222.11.0-bookworm→22.23.2-bookworm19.0.0→19.2.88.10.1→8.10.219.0.0→19.2.87.52.2→7.85.02.0.23→2.1.9=1.0.208→=1.0.229=1.0.125→=1.0.1511.5.0→1.7.42.5.2→2.6.13.4.17→3.4.19=1.7.1→=1.8.3=1.5.3→=1.5.65.5.3→5.9.30.9.1→0.9.93.23.8→3.25.76Release Notes
react-hook-form/resolvers (@hookform/resolvers)
v3.10.0Compare Source
Features
v3.9.1Compare Source
Bug Fixes
ianvs/prettier-plugin-sort-imports (@ianvs/prettier-plugin-sort-imports)
v4.7.1Compare Source
What's Changed
Fixes
Dependencies
Docs
New Contributors
Full Changelog: IanVS/prettier-plugin-sort-imports@v4.7.0...v4.7.1
v4.7.0Compare Source
What's Changed
This project began as a fork because I wanted a plugin that would not move side-effect imports around and mess with my CSS cascade. So its first and most distinguishing feature is that side-effect imports do not move, and other imports are not sorted across them.
This works fine in most cases, but some people have side-effect imports that they know can be sorted safely. For those, there is now an "escape hatch" option named
importOrderSafeSideEffects. It is an array of glob pattern strings (similar toimportOrder) which, when they match against a side-effect import, allow that import to be sorted as if it were a standard import.Suggestions for safe use:
^at the start of your pattern and$at the end, to avoid accidentally matching part of an import name. For example,"^server-only$", to avoid matching againstimport "not-server-only".// prettier-ignoreto stop sorting a particular import that would otherwise be sorted.Feedback on this feature is welcome.
Features
importOrderSafeSideEffectsoption by @IanVS in IanVS#240Internal
Full Changelog: IanVS/prettier-plugin-sort-imports@v4.6.3...v4.7.0
v4.6.3Compare Source
What's Changed
Full Changelog: IanVS/prettier-plugin-sort-imports@4.6.2...v4.6.3
v4.6.2Compare Source
What's Changed
New Contributors
Full Changelog: IanVS/prettier-plugin-sort-imports@v4.6.1...4.6.2
v4.6.1Compare Source
What's Changed
Full Changelog: IanVS/prettier-plugin-sort-imports@v4.6.0...v4.6.1
v4.6.0Compare Source
What's Changed
Full Changelog: IanVS/prettier-plugin-sort-imports@v4.5.1...v4.6.0
v4.5.1Compare Source
What's Changed
Fixes
Internal
Full Changelog: IanVS/prettier-plugin-sort-imports@v4.5.0...v4.5.1
v4.5.0Compare Source
What's Changed
New Contributors
Full Changelog: IanVS/prettier-plugin-sort-imports@v4.4.2...v4.5.0
v4.4.2Compare Source
What's Changed
New Contributors
Full Changelog: IanVS/prettier-plugin-sort-imports@v4.4.1...v4.4.2
v4.4.1Compare Source
What's Changed
New Contributors
Full Changelog: IanVS/prettier-plugin-sort-imports@v4.4.0...v4.4.1
v4.4.0Compare Source
What's Changed
Enhancements
importOrderCaseSensitiveoption for case-sensitive sorting by @acnebs in IanVS#184Maintenance
New Contributors
Full Changelog: IanVS/prettier-plugin-sort-imports@v4.3.1...v4.4.0
microsoft/playwright (@playwright/test)
v1.62.1Compare Source
v1.62.0Compare Source
🧱 New component testing model
Component testing moves to a stories and galleries model.
A story wraps your component in one specific scenario — hard-coded props, mock data, providers — and a
gallery page that you serve renders stories on demand. The new fixtures.mount() fixture navigates
to the gallery, mounts a story by id, and returns a Locator scoped to the story's root element:
Pass a story type as a template argument to type-check its props, and use
update(props)/unmount()on the returned locator to re-render or tear down within a test.🛑 Cancel operations with AbortSignal
Most operations and web-first assertions now accept a
signaloption that takes anAbortSignal, letting youcancel long-running actions, navigations, waits, and assertions:
Providing a signal does not disable the default timeout; pass
timeout: 0to disable it.🖼️ WebP screenshots
expect(page).toHaveScreenshot() and expect(locator).toHaveScreenshot()
can now store snapshots in the WebP format — just give the snapshot a
.webpname:page.screenshot() and locator.screenshot() also accept
webpas atype,where quality
100(the default) is lossless and lower values use lossy compression.🧩 Custom test filtering with Reporter.preprocess()
New reporter.preprocess() hook runs after the configuration is resolved and before
reporter.onBegin(), letting a reporter mark individual tests as skipped, excluded,
fixed, or failing through a TestRun object:
🔁 Isolated retries
New testConfig.retryStrategy controls when failed tests are retried. The default
'immediate'retries as soon as a worker is free;'isolated'runs all retries at the end,one by one in a single worker, to minimize interference with the rest of the suite:
New APIs
Browser and Context
credentialsincludes the context's virtual WebAuthn Credentials (passkeys) in the storage state, so they can be persisted and re-seeded into later contexts.Actions
scrolloption ("auto"|"none") on actions to opt out of Playwright's automatic scroll-into-view.Network
Evaluation
Command line & MCP
playwright-cli, runnable vianpx playwright mcpandnpx playwright cli.Reporters
mergeFilesreporter option:Announcements
Browser Versions
This version was also tested against the following stable channels:
v1.61.1Compare Source
v1.61.0Compare Source
🔑 WebAuthn passkeys
New Credentials virtual authenticator, available via browserContext.credentials, lets tests register passkeys and answer
navigator.credentials.create()/navigator.credentials.get()ceremonies in the page — no real hardware key required, works in all browsers:You can also let the app register a passkey once in a setup test, read it back with credentials.get(), and seed it into later tests — see Credentials for details.
🗃️ Web Storage
New WebStorage API, available via page.localStorage and page.sessionStorage, reads and writes the page's storage for the current origin:
New APIs
Network
Browser and Screencast
artifactsDirin browserType.connectOverCDP() controls where artifacts such as traces and downloads are stored when attached to an existing browser.cursorin screencast.showActions() controls the cursor decoration rendered for pointer actions.onFramecallback in screencast.start() now receives atimestampof when the frame was presented by the browser.Test runner
trace: new'on-all-retries','retain-on-first-failure'and'retain-on-failure-and-retries'values. See the video modes table for which runs are recorded and kept in each mode.expect.soft.poll(...).process.argvfrom the runner process, handy for reading custom arguments passed after the--separator.AggregateErroras a separate entry.-Gcommand line shorthand for--grep-invert.🛠️ Other improvements
Browser Versions
This version was also tested against the following stable channels:
v1.60.0Compare Source
🌐 HAR recording on Tracing
tracing.startHar() / tracing.stopHar() expose HAR recording as a first-class tracing API, with the same
content,modeandurlFilteroptions asrecordHar. The returned Disposable makes it easy to scope a recording withawait using:🪝 Drop API
New locator.drop() simulates an external drag-and-drop of files or clipboard-like data onto an element. Playwright dispatches
dragenter,dragover, anddropwith a synthetic [DataTransfer] in the page context — works cross-browser and is great for testing upload zones:🎯 Aria snapshots
page.locator('body').boxesoption on locator.ariaSnapshot() / page.ariaSnapshot() appends each element's bounding box as[box=x,y,width,height], useful for AI consumption.🛑 test.abort()
New test.abort() aborts the currently running test from a fixture, hook, or route handler with an optional message. Use it when you have detected an unrecoverable misuse and want to fail the test right away:
New APIs
Browser, Context and Page
Locators and Assertions
descriptionin page.getByRole() / locator.getByRole() / frame.getByRole() / frameLocator.getByRole() for matching the accessible description.pseudoin expect(locator).toHaveCSS() reads computed styles from::beforeor::after.stylein locator.highlight() applies extra inline CSS to the highlight overlay, plus new page.hideHighlight() to clear all highlights.Network
Configuration
📅 Schedule: (UTC)
🚦 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.