[!NOTE] This PR body was truncated due to platform limits.
This PR contains the following updates:
Release Notes
SBoudrias/Inquirer.js (@​inquirer/prompts)
v8.7.5
@inquirer/prompts@8.7.5
What's new
- Dependencies updated:
@inquirer/password@5.2.5fixes the cursor overlapping the message when the password prompt is empty (#2360), and@inquirer/core@12.0.6fixes piped-stdin answers being dropped before the first render (#2359)
v8.7.4
@inquirer/prompts@8.7.4
What's new
checkbox()no longer accepts edits or submissions while an async validator is pending — the selection is captured at submit time, and repeated Enter presses don't run the validator more than once (@inquirer/checkbox, #2296).- Prompt output no longer leaks when a prompt is cancelled or aborted before its first render — the deferred initial render is now cancelled during cleanup, so a settled prompt never writes to an ended output stream or reinstalls keypress listeners (
@inquirer/core, #2318, relates to #1816). number()now treats whitespace-only input as empty, so a space-padded submit resolves to the default/undefined answer instead of a validation error (@inquirer/number, #2307).- Packages with only test-file changes are no longer version-bumped at release time (internal tooling; #2319).
Included
@inquirer/checkbox@^5.2.7@inquirer/confirm@^6.3.4@inquirer/editor@^5.3.5@inquirer/expand@^5.1.7@inquirer/input@^5.1.8@inquirer/number@^4.2.5@inquirer/password@^5.2.4@inquirer/rawlist@^5.3.7@inquirer/search@^4.3.5@inquirer/select@^5.2.7
v8.7.3
@inquirer/prompts@8.7.3
What's new
search()no longer submits a stale choice when Enter is pressed while an async search is still loading — the prompt waits for the fresh results, the query is preserved, and repeated Enter presses during validation no longer run the async validator more than once (@inquirer/search, #2291, closes #2290).confirm()now always accepts the single keystrokesy/neven with localized keywords, and unrecognized input no longer silently falls back on the default answer (@inquirer/confirm, #2281, closes #2279).expand()andrawlist()now ignore surrounding whitespace in answers (@inquirer/expand,@inquirer/rawlist, #2280).- All package READMEs now document the Deno install command (
deno add npm:@inquirer/prompts) alongside the npm/yarn/pnpm/bun ones (#2269).
Included
@inquirer/checkbox@^5.2.6@inquirer/confirm@^6.3.3@inquirer/editor@^5.3.4@inquirer/expand@^5.1.6@inquirer/input@^5.1.7@inquirer/number@^4.2.4@inquirer/password@^5.2.3@inquirer/rawlist@^5.3.6@inquirer/search@^4.3.4@inquirer/select@^5.2.6
v8.7.2
@inquirer/prompts@8.7.2
What's new
- Fixed a race where keystrokes batched in the same tick as the key that settled a prompt could still reach keypress handlers after the prompt was done, cancelled, or aborted (
@inquirer/core, #2255, closes #1816). confirm()now trims surrounding whitespace from answers before matching yes/no keywords (@inquirer/confirm, #2254).
Included
@inquirer/checkbox@^5.2.5@inquirer/confirm@^6.3.2@inquirer/editor@^5.3.3@inquirer/expand@^5.1.5@inquirer/input@^5.1.6@inquirer/number@^4.2.3@inquirer/password@^5.2.2@inquirer/rawlist@^5.3.5@inquirer/search@^4.3.3@inquirer/select@^5.2.5
v8.7.1
@inquirer/prompts@8.7.1
What's new
- All bundled prompts now pin
@inquirer/typeto an exact version in their published manifests. Since these type definitions leak into consumers'tscruns, a semver range on the types-only dependency could break downstream TypeScript builds without any change to Inquirer.js itself (#2247, fixes #2244).
Included
@inquirer/checkbox@^5.2.4@inquirer/confirm@^6.3.1@inquirer/editor@^5.3.2@inquirer/expand@^5.1.4@inquirer/input@^5.1.5@inquirer/number@^4.2.2@inquirer/password@^5.2.1@inquirer/rawlist@^5.3.4@inquirer/search@^4.3.2@inquirer/select@^5.2.4
v8.7.0
@inquirer/prompts@8.7.0
What's new
passwordgains thetoggleMaskoption (ctrl+t to reveal the typed value).confirmnow matches localized yes/no answers per-locale.- Prettified prompt and theme types for better IDE display.
- Added
inquirer-grouped-checkboxto the community prompts list (#2236).
Included
@inquirer/checkbox@^5.2.3@inquirer/confirm@^6.3.0@inquirer/editor@^5.3.1@inquirer/expand@^5.1.3@inquirer/input@^5.1.4@inquirer/number@^4.2.1@inquirer/password@^5.2.0@inquirer/rawlist@^5.3.3@inquirer/search@^4.3.1@inquirer/select@^5.2.3
v8.6.0
@inquirer/prompts@8.6.0
The all-in-one prompts package, re-exporting every individual prompt at its latest version.
Highlights
This release rides on @inquirer/core@12.0.0, which makes the useState setter accept a reducer/updater function. It also brings a new initialValue option to search, plus fixes for number, confirm, and editor.
What's new
@inquirer/search— newinitialValue?: stringoption to pre-fill the search input (#2205)
What's fixed
@inquirer/number— avoid floating-point step errors; accept explicitundefinedas default (#2166, #2182)@inquirer/confirm— accept explicitundefinedas default (#2182)@inquirer/editor— accept explicitundefinedas default (#2182)
Included prompts
@inquirer/checkbox@5.2.2@inquirer/confirm@6.2.0@inquirer/editor@5.3.0@inquirer/expand@5.1.2@inquirer/input@5.1.3@inquirer/number@4.2.0@inquirer/password@5.1.2@inquirer/rawlist@5.3.2@inquirer/search@4.3.0@inquirer/select@5.2.2
Note: This release depends on
@inquirer/core@^12.0.0, which contains a breaking change to theuseStatesetter type (it now accepts a reducer function). See the@inquirer/core@12.0.0release notes for details.
v8.5.2
- Fix security warnings in external-editor
v8.5.1
- Rolled back
mute-streamdependency from v4 to v3 to undo breaking compatibleengines. - Added tooling to prevent regression of the above in the future. This surfaced our min engines already enforced a higher limit, so adjusted the explicit limits to match the current state.
v8.5.0
- Feat: Read env variable
INQUIRER_KEYBINDINGSto enablevimoremacskeybindings; making this a user preference instead of a library author preference. One caveat is doing so disable the search feature in the select prompt. Syntax:INQUIRER_KEYBINDINGS=vim,emacs. - Fix: Line wraps would sometime cause the cursor to be mispositioned relative to the input.
- Chore: Bump dependencies.
v8.4.3
- Fix: Windows rendering bug
- Fix: Preserve exact literal types in
choicesarray (Typescript only) - Fix: Allow input
defaultvalue to be of typeundefined(Typescript only) - Bump dependencies
v8.4.2
- Fix: some Windows terminals would freeze and not react to keypresses.
v8.4.1
- Improve
expandprompt type inferrence.
v8.4.0
- Feat: Added a loading message while validating editor prompt input.
- Type improvement: Better type inference with checkbox, search and expand prompts.
- Fix:
editorprompt not always properly handling editor path on windows.
v8.3.2
- Fix broken 8.3.1 release process.
v8.3.1
- Bump dependencies
v8.3.0
- Fix: Keypresses happening before a prompt is rendered are now ignored.
- Fix (checkbox): Element who're both checked and disabled are now always included in the returned array.
- Feat (select/checkbox): Cursor will now hover disabled options of the list; but they still cannot be interacted with. This prevents the cursor jumping ahead in ways that can be confusing.
- Feat: various new theme options to make all prompts content localizable.
Finally, see our new @inquirer/i18n package!
microsoft/playwright (@​playwright/test)
v1.64.1
Bug Fixes
- #43247 [Bug]: _electron.launch intermittently loses a packaged app's first window since 1.64.0
- #43242 [Regression]: Chromium 155+ aborts a preflighted cross-origin redirect whenever any route is registered (net::ERR_ABORTED)
v1.64.0
🧰 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:
const browser = await chromium.launch({ args: ['--enable-features=WebMCP'] });
const page = await browser.newPage();
await page.goto('https://example.com');
for (const tool of await page.webmcp.tools())
console.log(tool.name, tool.description);
const result = await page.webmcp.callTool('add', { a: 2, b: 40 });
console.log(result.content[0].text); // "42"Playwright MCP also supports WebMCP by default, with page-defined tools offered to the agent as webmcp_<tool>. Pass --no-webmcp to opt out.
playwright-cli exposes 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:
// playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
video: {
mode: 'on',
size: { width: 1920, height: 1080 },
fps: 60,
show: {
actions: {
style: {
point: 'width: 20px; height: 20px; border-radius: 50%; background: red',
highlight: 'outline: 2px solid #​333; background: rgba(0, 128, 255, .15)',
title: 'font-size: 16px',
},
},
},
},
},
});- New
fpsoption in testOptions.video,recordVideoand screencast.start(). Firefox and WebKit currently capture up to 25 frames per second. - New
styleoption takes CSS declarations for thepointmarker, the targethighlightand the actiontitle. It replaces thefontSizeoption, 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.
- All video options are also available in Playwright MCP and
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:// playwright.config.ts import { defineConfig, devices } from '@playwright/test'; export default defineConfig({ projects: [ { name: 'chromium', use: devices['Desktop Chrome'] }, { name: 'firefox', use: devices['Desktop Firefox'], default: false }, { name: 'webkit', use: devices['Desktop Safari'], default: false }, ], });npx playwright test # runs chromium only npx playwright test --project=firefox # runs firefox npx playwright test --project="*" # runs all three, for example on CINew
--shufflecommand 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 271828182New
lockoption in test.describe.configure() adds test locks to all tests in a file or a group:test.describe.configure({ lock: 'user-settings' });New
typeoption oftoHaveScreenshotin testConfig.expect stores all unnamed screenshots as WebP:// playwright.config.ts export default defineConfig({ expect: { toHaveScreenshot: { type: 'webp' }, }, });
🪆 Locator.within()
New locator.within() combines two locators that you already have, reading in the natural order — "this button, within that dialog":
const saveButton = page.getByRole('button', { name: 'Save' });
const dialog = page.getByTestId('settings-dialog');
await saveButton.within(dialog).click();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.
const thirdColumn = page.getByRole('cell').nth(2).within(page.getByRole('row'));
await expect(thirdColumn).toHaveText(['Apple', 'Banana', 'Cherry']);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:
await request.addCookies([{ name: 'session-id', value: '42', url: 'https://example.com' }]); console.log(await request.cookies('https://example.com')); await request.clearCookies({ name: 'session-id' });
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:// playwright.config.ts export default defineConfig({ use: { ...devices['Desktop Chrome'], screen: undefined, }, });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
- Chromium 156.0.8078.4
- Mozilla Firefox 157.0
- WebKit 27.2
This version was also tested against the following stable channels:
- Google Chrome 155
- Microsoft Edge 155
v1.63.0
🔒 Test locks
Tests that access a shared resource — an external service, a global account setting — can now declare a named lock.
Tests that share a lock name never run concurrently, across files, workers and projects, while
everything else keeps running in parallel:
test('update user settings', { lock: 'user-settings' }, async ({ page }) => {
// never runs at the same time as other tests holding 'user-settings'
});A test can hold multiple locks, and test.describe() accepts a lock for the whole group.
Learn more about test locks.
🪟 Locate across frames
page.frameLocator() and frame.frameLocator() called without a selector search in any frame of the subtree, so you no longer need to locate the iframe first:
// Finds the button in any frame on the page.
await page.frameLocator().getByRole('button').click();The rest of the locator resolves inside a single frame, just like a regular locator, and an error is thrown when it matches elements in several frames.
👁️ Visible-only locators
New locator.visible() returns a locator that matches only visible elements. It is the recommended
replacement for the :visible CSS pseudo-class:
await page.locator('button').visible().click();🧾 Step params and subtitles
Steps now carry structured data for reporters. Playwright API steps report the target locator and call arguments,
and test.step() accepts subtitle and params options for your own steps:
await test.step('Login', async () => {
// ...
}, { subtitle: 'as admin', params: { user: 'admin' } });Reporters receive them via testStep.subtitle and testStep.params. For Playwright API
steps, the subtitle is the locator or the navigation url — for example, Click with subtitle getByRole('button').
Both are rendered next to the step title in the trace viewer and the HTML report.
🖼️ Aria and screen snapshots in traces
The snapshots option of tracing.start() and the testOptions.trace fixture option now accept an
object selecting what to capture on every action:
// playwright.config.ts
export default defineConfig({
use: {
trace: {
mode: 'on',
snapshots: { dom: true, aria: true, screen: true }
},
},
});With aria and screen snapshots recorded, the new Display Aria mode in the trace viewer shows the action screenshot side by side with the aria snapshot, and hovering an aria node highlights it on the screenshot.
New APIs
Browser and Context
httpCredentialsnow also accepts an array of credentials. The first entry matching the request origin is used, and entries without an origin match any request.- New option
opfsincludes the origin private file system in the storage state, so it can be persisted and restored into later contexts. - New events page.on('dialogclosed') and browserContext.on('dialogclosed') are emitted when a JavaScript dialog is accepted, dismissed or closed by the user.
Locators
- New locator.ariaSnapshotJSON() and page.ariaSnapshotJSON() return the aria snapshot as a JSON value instead of YAML markup, with
mode,depthandboxesoptions. - apiRequestContext.get() and other request methods accept a type argument that types the response
json():
const response = await request.get<User>('/api/users/42');
const user = await response.json(); // typed as UserTest runner
- New standalone testOptions.reducedMotion, testOptions.forcedColors and testOptions.contrast options.
- New
--add-reportercommand line option appends a reporter on top of the ones configured inplaywright.config, instead of replacing them like--reporterdoes. - New
omitTagsoption for thelist,line,dot,githubandjunitreporters suppresses the tags that are automatically appended to test titles.
Command line
npx playwright install --no-removekeeps the browsers of other Playwright installations instead of removing them.npx playwright codegen --http-credentialsrecords against pages behind HTTP authentication.
Miscellaneous
- New built-in
perfettoreporter writes a Trace Event Format file for the Perfetto UI orchrome://tracing, rendering the test run as a timeline with a lane per worker. - The HTML report renders a duration waterfall next to test steps.
Announcements
- ⚠️ The experimental
@playwright/experimental-ct-react,@playwright/experimental-ct-react17and@playwright/experimental-ct-vuepackages will no longer be updated. Follow the migration guide to move to the stories model introduced in 1.62. Story ids passed to fixtures.mount() can now be typed through the generatedStoriesregistry. - ⚠️ Ubuntu 20.04 is not supported anymore.
- 🐧 On Linux arm64, Playwright now downloads the Chrome for Testing build of Chromium, the same build used on all other platforms.
Browser Versions
- Ch
[!IMPORTANT] ✂ PR body was truncated to here.
Configuration
📅 Schedule: (UTC)
- 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 was generated by Mend Renovate. View the repository job log.