const cluster = require('cluster'); async function start() { const { playwrightPath, browserTypeName, launchOptions, stallOnClose } = JSON.parse(process.argv[2]); if (stallOnClose) { launchOptions.__testHookGracefullyClose = () => { console.log(`(stalled=>true)`); return new Promise(() => {}); }; } const playwright = require(require('path').join(playwrightPath, 'index')); const browserServer = await playwright[browserTypeName].launchServer(launchOptions); browserServer.on('close', (exitCode, signal) => { console.log(`(exitCode=>${exitCode})`); console.log(`(signal=>${signal})`); }); console.log(`(pid=>${browserServer.process().pid})`); console.log(`(wsEndpoint=>${browserServer.wsEndpoint()})`); } if (cluster.isWorker || !JSON.parse(process.argv[2]).inCluster) { start(); } else { cluster.fork(); cluster.on('exit', (worker, code, signal) => { process.exit(0); }); }