chore: allow configuring raw Playwright options (#287)

Fixes: https://github.com/microsoft/playwright-mcp/issues/272
This commit is contained in:
Pavel Feldman 2025-04-28 20:17:16 -07:00 committed by GitHub
parent 12e72a96c4
commit 80c9b93b72
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 125 additions and 108 deletions

View file

@ -14,8 +14,6 @@
* limitations under the License.
*/
import fs from 'fs';
import { program } from 'commander';
import { createServer } from './index';
@ -23,7 +21,7 @@ import { ServerList } from './server';
import { startHttpTransport, startStdioTransport } from './transport';
import type { Config, ToolCapability } from '../config';
import { resolveConfig } from './config';
const packageJSON = require('../package.json');
@ -41,22 +39,7 @@ program
.option('--vision', 'Run server that uses screenshots (Aria snapshots are used by default)')
.option('--config <path>', 'Path to the configuration file.')
.action(async options => {
const cliOverrides: Config = {
browser: {
type: options.browser,
userDataDir: options.userDataDir,
headless: options.headless,
executablePath: options.executablePath,
cdpEndpoint: options.cdpEndpoint,
},
server: {
port: options.port,
host: options.host,
},
capabilities: options.caps?.split(',').map((c: string) => c.trim() as ToolCapability),
vision: !!options.vision,
};
const config = await loadConfig(options.config, cliOverrides);
const config = await resolveConfig(options);
const serverList = new ServerList(() => createServer(config));
setupExitWatchdog(serverList);
@ -66,30 +49,6 @@ program
await startStdioTransport(serverList);
});
async function loadConfig(configFile: string | undefined, cliOverrides: Config): Promise<Config> {
if (!configFile)
return cliOverrides;
try {
const config = JSON.parse(await fs.promises.readFile(configFile, 'utf8'));
return {
...config,
...cliOverrides,
browser: {
...config.browser,
...cliOverrides.browser,
},
server: {
...config.server,
...cliOverrides.server,
},
};
} catch (e) {
console.error(`Error loading config file ${configFile}: ${e}`);
process.exit(1);
}
}
function setupExitWatchdog(serverList: ServerList) {
const handleExit = async () => {
setTimeout(() => process.exit(0), 15000);