@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.
- package/bin/pw-cli.js +14 -8
- 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
|
|
764
|
-
//
|
|
765
|
-
//
|
|
766
|
-
//
|
|
767
|
-
const
|
|
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 !==
|
|
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