@guanzhu.me/pw-cli 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/bin/pw-cli.js +14 -8
  2. package/package.json +1 -1
package/bin/pw-cli.js CHANGED
@@ -760,14 +760,22 @@ async function main() {
760
760
  const openIdx = argv.indexOf('open');
761
761
  const afterOpen = argv.slice(openIdx + 1);
762
762
 
763
- // If a URL is provided with open, split into two steps to avoid goto timeout:
764
- // 1) spawn open (no URL) to start the browser daemon
765
- // 2) navigate via run-code with waitUntil:'domcontentloaded' + timeout:0
766
- // so redirects (login flows, SPA routing) never time out
767
- const urlArg = afterOpen.find(a => !a.startsWith('-') && /^https?:\/\//.test(a));
763
+ // If a URL is provided with open:
764
+ // - If a session is already running: open a new tab directly via our CDP executor
765
+ // - Otherwise: spawn open (no URL) to start the browser, then navigate via playwright-cli run-code
766
+ // (lenient wait strategy so redirects/login flows/SPA routing never time out)
767
+ const rawUrlArg = afterOpen.find(a => !a.startsWith('-') && /^(https?:\/\/|[a-zA-Z0-9]([a-zA-Z0-9-]*\.)+[a-zA-Z]{2,})/.test(a));
768
+ const urlArg = rawUrlArg && !/^https?:\/\//.test(rawUrlArg) ? `https://${rawUrlArg}` : rawUrlArg;
768
769
  if (urlArg) {
770
+ const navCode = `async page => { const newPage = await page.context().newPage(); await newPage.goto(${JSON.stringify(urlArg)}, { waitUntil: 'domcontentloaded', timeout: 0 }); return newPage.url(); }`;
771
+ const alive = await isSessionAlive(session);
772
+ if (alive) {
773
+ // Browser already running — create a new tab directly, skip playwright-cli open
774
+ await handleRunCode(['run-code', navCode]);
775
+ return;
776
+ }
769
777
  const { spawnSync } = require('child_process');
770
- const openOnlyArgs = injectOpenDefaults(afterOpen.filter(a => a !== urlArg));
778
+ const openOnlyArgs = injectOpenDefaults(afterOpen.filter(a => a !== rawUrlArg));
771
779
  const res = spawnSync(process.execPath, [cliPath, 'open', ...openOnlyArgs], {
772
780
  stdio: 'inherit',
773
781
  cwd: PW_CLI_DIR,
@@ -776,8 +784,6 @@ async function main() {
776
784
  process.stderr.write('pw-cli: failed to open browser\n');
777
785
  process.exit(res.status || 1);
778
786
  }
779
- // Replace open+url with a run-code navigation (lenient wait strategy)
780
- const navCode = `async page => { const newPage = await page.context().newPage(); await newPage.goto(${JSON.stringify(urlArg)}, { waitUntil: 'domcontentloaded', timeout: 0 }); return newPage.url(); }`;
781
787
  argv = ['run-code', navCode];
782
788
  } else {
783
789
  const enhanced = injectOpenDefaults(afterOpen);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guanzhu.me/pw-cli",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Persistent Playwright browser CLI with headed defaults, profile support, queueing, and script execution",
5
5
  "bin": {
6
6
  "pw-cli": "./bin/pw-cli.js"