diff --git a/apps/playwright-browser-tunnel/package.json b/apps/playwright-browser-tunnel/package.json index e296049cdf..818960db1c 100644 --- a/apps/playwright-browser-tunnel/package.json +++ b/apps/playwright-browser-tunnel/package.json @@ -48,7 +48,6 @@ "@rushstack/terminal": "workspace:*", "@rushstack/ts-command-line": "workspace:*", "string-argv": "~0.3.1", - "semver": "~7.5.4", "ws": "~8.14.1", "playwright": "1.56.1" }, diff --git a/apps/playwright-browser-tunnel/src/PlaywrightBrowserTunnel.ts b/apps/playwright-browser-tunnel/src/PlaywrightBrowserTunnel.ts index 6b5a084eab..1fa0627b53 100644 --- a/apps/playwright-browser-tunnel/src/PlaywrightBrowserTunnel.ts +++ b/apps/playwright-browser-tunnel/src/PlaywrightBrowserTunnel.ts @@ -6,7 +6,6 @@ import { once } from 'node:events'; import type { BrowserServer, BrowserType, LaunchOptions } from 'playwright-core'; import { type RawData, WebSocket, type WebSocketServer } from 'ws'; -import semver from 'semver'; import { TerminalProviderSeverity, TerminalStreamWritable, type ITerminal } from '@rushstack/terminal'; import { Executable, FileSystem, Async } from '@rushstack/node-core-library'; @@ -48,7 +47,7 @@ export interface IHandshake { action: 'handshake'; browserName: BrowserName; launchOptions: LaunchOptions; - playwrightVersion: semver.SemVer; + playwrightVersion: string; } type TunnelMode = 'poll-connection' | 'wait-for-incoming-connection'; @@ -432,10 +431,7 @@ export class PlaywrightTunnel { if (action !== 'handshake') { throw new Error(`Invalid action: ${action}. Expected 'handshake'.`); } - const playwrightVersionSemver: semver.SemVer | null = semver.coerce(playwrightVersion); - if (!playwrightVersionSemver) { - throw new Error(`Invalid Playwright version: ${playwrightVersion}. Must be a valid semver version.`); - } + if (!isValidBrowserName(browserName)) { throw new Error( `Invalid browser name: ${browserName}. Must be one of ${Array.from(validBrowserNames).join(', ')}.` @@ -445,7 +441,7 @@ export class PlaywrightTunnel { return { action, launchOptions: launchOptions as LaunchOptions, - playwrightVersion: playwrightVersionSemver, + playwrightVersion, browserName }; } diff --git a/apps/playwright-browser-tunnel/src/tunneledBrowserConnection/TunneledBrowserConnection.ts b/apps/playwright-browser-tunnel/src/tunneledBrowserConnection/TunneledBrowserConnection.ts index 0d466c6067..6bb8d561a0 100644 --- a/apps/playwright-browser-tunnel/src/tunneledBrowserConnection/TunneledBrowserConnection.ts +++ b/apps/playwright-browser-tunnel/src/tunneledBrowserConnection/TunneledBrowserConnection.ts @@ -23,15 +23,14 @@ import type { } from './ITunneledBrowserConnection'; import { DEFAULT_LISTEN_PORT, SUPPORTED_BROWSER_NAMES } from './constants'; -const { version: playwrightVersion } = playwrightPackageJson; - /** * Creates a tunneled WebSocket endpoint that a local Playwright client can connect to. * @beta */ export async function tunneledBrowserConnection( logger: ITerminal, - port: number = DEFAULT_LISTEN_PORT + port: number = DEFAULT_LISTEN_PORT, + playwrightVersion: string = playwrightPackageJson.version ): Promise { // Server that remote peer (actual browser host) connects to const remoteWsServer: WebSocketServer = new WebSocketServer({ port }); diff --git a/common/changes/@rushstack/playwright-browser-tunnel/fix-tunnel-flexibility_2026-02-24-23-50.json b/common/changes/@rushstack/playwright-browser-tunnel/fix-tunnel-flexibility_2026-02-24-23-50.json new file mode 100644 index 0000000000..46783c966a --- /dev/null +++ b/common/changes/@rushstack/playwright-browser-tunnel/fix-tunnel-flexibility_2026-02-24-23-50.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/playwright-browser-tunnel", + "comment": "Add playwright-versioning and remove semver", + "type": "patch" + } + ], + "packageName": "@rushstack/playwright-browser-tunnel" +} \ No newline at end of file diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 574e783810..c4ca8a4020 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -336,9 +336,6 @@ importers: playwright: specifier: 1.56.1 version: 1.56.1 - semver: - specifier: ~7.5.4 - version: 7.5.4 string-argv: specifier: ~0.3.1 version: 0.3.2 diff --git a/common/reviews/api/playwright-browser-tunnel.api.md b/common/reviews/api/playwright-browser-tunnel.api.md index 150997beaa..2cdb88416a 100644 --- a/common/reviews/api/playwright-browser-tunnel.api.md +++ b/common/reviews/api/playwright-browser-tunnel.api.md @@ -7,7 +7,6 @@ import type { Browser } from 'playwright-core'; import { ITerminal } from '@rushstack/terminal'; import type { LaunchOptions } from 'playwright-core'; -import semver from 'semver'; // @beta export type BrowserName = 'chromium' | 'firefox' | 'webkit'; @@ -43,7 +42,7 @@ export interface IHandshake { // (undocumented) launchOptions: LaunchOptions; // (undocumented) - playwrightVersion: semver.SemVer; + playwrightVersion: string; } // @beta @@ -112,7 +111,7 @@ export class PlaywrightTunnel { } // @beta -export function tunneledBrowserConnection(logger: ITerminal, port?: number): Promise; +export function tunneledBrowserConnection(logger: ITerminal, port?: number, playwrightVersion?: string): Promise; // @beta export type TunnelStatus = 'waiting-for-connection' | 'browser-server-running' | 'stopped' | 'setting-up-browser-server' | 'error'; diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json b/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json index 99c5c4c97b..1ee9159796 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json @@ -1,6 +1,6 @@ { "name": "playwright-local-browser-server", - "version": "0.1.2", + "version": "0.1.3", "repository": { "type": "git", "url": "https://github.com/microsoft/rushstack.git",