@playwright-repl/runner 0.21.2
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/README.md +116 -0
- package/dist/args.d.ts +16 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +48 -0
- package/dist/args.js.map +1 -0
- package/dist/bridge-utils.cjs +197 -0
- package/dist/bridge-utils.cjs.map +1 -0
- package/dist/bridge-utils.d.cts +30 -0
- package/dist/bridge-utils.d.cts.map +1 -0
- package/dist/browser.d.ts +12 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +40 -0
- package/dist/browser.js.map +1 -0
- package/dist/bundler.d.ts +6 -0
- package/dist/bundler.d.ts.map +1 -0
- package/dist/bundler.js +32 -0
- package/dist/bundler.js.map +1 -0
- package/dist/cdpPreload.cjs +44 -0
- package/dist/cdpPreload.cjs.map +1 -0
- package/dist/cdpPreload.d.cts +11 -0
- package/dist/cdpPreload.d.cts.map +1 -0
- package/dist/chrome-extension/background.js +233485 -0
- package/dist/chrome-extension/background.js.map +1 -0
- package/dist/chrome-extension/content/picker.js +279 -0
- package/dist/chrome-extension/content/recorder.js +475 -0
- package/dist/chrome-extension/devtools/console.html +17 -0
- package/dist/chrome-extension/devtools/console.js +28 -0
- package/dist/chrome-extension/devtools/console.js.map +1 -0
- package/dist/chrome-extension/devtools/devtools.html +8 -0
- package/dist/chrome-extension/devtools/devtools.js +7 -0
- package/dist/chrome-extension/devtools/devtools.js.map +1 -0
- package/dist/chrome-extension/icons/dramaturg_icon_128.png +0 -0
- package/dist/chrome-extension/icons/dramaturg_icon_16.png +0 -0
- package/dist/chrome-extension/icons/dramaturg_icon_32.png +0 -0
- package/dist/chrome-extension/icons/dramaturg_icon_48.png +0 -0
- package/dist/chrome-extension/index.css +1333 -0
- package/dist/chrome-extension/index.js +12462 -0
- package/dist/chrome-extension/index.js.map +1 -0
- package/dist/chrome-extension/index2.js +27327 -0
- package/dist/chrome-extension/index2.js.map +1 -0
- package/dist/chrome-extension/manifest.json +46 -0
- package/dist/chrome-extension/modulepreload-polyfill.js +30 -0
- package/dist/chrome-extension/modulepreload-polyfill.js.map +1 -0
- package/dist/chrome-extension/newtab/newtab.html +202 -0
- package/dist/chrome-extension/offscreen/offscreen.html +6 -0
- package/dist/chrome-extension/offscreen/offscreen.js +54 -0
- package/dist/chrome-extension/offscreen/offscreen.js.map +1 -0
- package/dist/chrome-extension/panel/panel.html +16 -0
- package/dist/chrome-extension/panel/panel.js +2210 -0
- package/dist/chrome-extension/panel/panel.js.map +1 -0
- package/dist/chrome-extension/preferences/preferences.html +14 -0
- package/dist/chrome-extension/preferences/preferences.js +102 -0
- package/dist/chrome-extension/preferences/preferences.js.map +1 -0
- package/dist/chrome-extension/settings.js +13 -0
- package/dist/chrome-extension/settings.js.map +1 -0
- package/dist/chrome-extension/sw-debugger-core.js +1127 -0
- package/dist/chrome-extension/sw-debugger-core.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +43 -0
- package/dist/cli.js.map +1 -0
- package/dist/compiler/classify.d.ts +13 -0
- package/dist/compiler/classify.d.ts.map +1 -0
- package/dist/compiler/classify.js +143 -0
- package/dist/compiler/classify.js.map +1 -0
- package/dist/compiler/index.d.ts +24 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +41 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/parser.d.ts +24 -0
- package/dist/compiler/parser.d.ts.map +1 -0
- package/dist/compiler/parser.js +77 -0
- package/dist/compiler/parser.js.map +1 -0
- package/dist/compiler/transform.d.ts +20 -0
- package/dist/compiler/transform.d.ts.map +1 -0
- package/dist/compiler/transform.js +36 -0
- package/dist/compiler/transform.js.map +1 -0
- package/dist/compiler.d.ts +24 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +129 -0
- package/dist/compiler.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -0
- package/dist/discover.d.ts +5 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +46 -0
- package/dist/discover.js.map +1 -0
- package/dist/execute.d.ts +13 -0
- package/dist/execute.d.ts.map +1 -0
- package/dist/execute.js +281 -0
- package/dist/execute.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/mode-detect.d.ts +21 -0
- package/dist/mode-detect.d.ts.map +1 -0
- package/dist/mode-detect.js +67 -0
- package/dist/mode-detect.js.map +1 -0
- package/dist/proxy-page.d.ts +32 -0
- package/dist/proxy-page.d.ts.map +1 -0
- package/dist/proxy-page.js +192 -0
- package/dist/proxy-page.js.map +1 -0
- package/dist/pw-cli.d.ts +12 -0
- package/dist/pw-cli.d.ts.map +1 -0
- package/dist/pw-cli.js +73 -0
- package/dist/pw-cli.js.map +1 -0
- package/dist/pw-launch.d.ts +15 -0
- package/dist/pw-launch.d.ts.map +1 -0
- package/dist/pw-launch.js +97 -0
- package/dist/pw-launch.js.map +1 -0
- package/dist/pw-preload.cjs +164 -0
- package/dist/pw-preload.cjs.map +1 -0
- package/dist/pw-preload.d.cts +15 -0
- package/dist/pw-preload.d.cts.map +1 -0
- package/dist/pw-repl-extension.d.ts +12 -0
- package/dist/pw-repl-extension.d.ts.map +1 -0
- package/dist/pw-repl-extension.js +100 -0
- package/dist/pw-repl-extension.js.map +1 -0
- package/dist/pw-repl.d.ts +12 -0
- package/dist/pw-repl.d.ts.map +1 -0
- package/dist/pw-repl.js +111 -0
- package/dist/pw-repl.js.map +1 -0
- package/dist/pw-worker.cjs +216 -0
- package/dist/pw-worker.cjs.map +1 -0
- package/dist/pw-worker.d.cts +13 -0
- package/dist/pw-worker.d.cts.map +1 -0
- package/dist/pw-worker.d.ts +11 -0
- package/dist/pw-worker.d.ts.map +1 -0
- package/dist/pw-worker.js +51 -0
- package/dist/pw-worker.js.map +1 -0
- package/dist/run-test.d.ts +22 -0
- package/dist/run-test.d.ts.map +1 -0
- package/dist/run-test.js +358 -0
- package/dist/run-test.js.map +1 -0
- package/dist/runner.d.ts +10 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +82 -0
- package/dist/runner.js.map +1 -0
- package/dist/shim/alias.d.ts +11 -0
- package/dist/shim/alias.d.ts.map +1 -0
- package/dist/shim/alias.js +24 -0
- package/dist/shim/alias.js.map +1 -0
- package/dist/shim/framework.d.ts +11 -0
- package/dist/shim/framework.d.ts.map +1 -0
- package/dist/shim/framework.js +11 -0
- package/dist/shim/framework.js.map +1 -0
- package/dist/shim/test-runner-node.d.ts +49 -0
- package/dist/shim/test-runner-node.d.ts.map +1 -0
- package/dist/shim/test-runner-node.js +191 -0
- package/dist/shim/test-runner-node.js.map +1 -0
- package/dist/shim/test-runner.d.ts +44 -0
- package/dist/shim/test-runner.d.ts.map +1 -0
- package/dist/shim/test-runner.js +181 -0
- package/dist/shim/test-runner.js.map +1 -0
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy-page.js","sourceRoot":"","sources":["../src/proxy-page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,YAAY,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAE5C,SAAS,WAAW,CAAI,OAAmB,EAAE,EAAU,EAAE,KAAa;IACpE,IAAI,KAAU,CAAC;IACf,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,OAAO;QACP,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,OAAO,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACrH,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACrC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAElC,gEAAgE;AAChE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY;CACjD,CAAC,CAAC;AAEH,oGAAoG;AACpG,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,cAAc;IACd,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ;IAC5B,QAAQ,EAAE,WAAW;IACrB,UAAU,EAAa,gDAAgD;IACvE,gBAAgB,EAAO,sCAAsC;IAC7D,IAAI,EAAE,KAAK,EAAE,MAAM,EAAG,iCAAiC;CACxD,CAAC,CAAC;AAEH,SAAS,SAAS,CAAC,KAAa,EAAE,MAAiB,EAAE,QAAc,EAAE,OAAa;IAChF,MAAM,OAAO,GAAsB;QACjC,GAAG,CAAC,OAAO,EAAE,IAAI;YACf,qCAAqC;YACrC,IAAI,IAAI,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YACrC,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAErC,2BAA2B;YAC3B,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAyB,EAAE,MAAwB,EAAE,EAAE;oBAC7D,MAAM,GAAG,GAAG,SAAS,KAAK,EAAE,CAAC;oBAC7B,IAAI,YAAY;wBAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;oBACzE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;wBACvD,IAAI,YAAY;4BAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;wBAC/G,IAAI,CAAC,CAAC,OAAO;4BAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC;6BACtD,CAAC;4BACJ,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;4BACpB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE;gCAAE,OAAO,CAAC,SAAS,CAAC,CAAC;iCACrD,CAAC;gCACJ,IAAI,CAAC;oCAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gCAAC,CAAC;gCAClC,MAAM,CAAC;oCAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gCAAC,CAAC;4BAC1B,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnB,CAAC,CAAC;YACJ,CAAC;YAED,qDAAqD;YACrD,IAAI,IAAI,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;gBAChC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;YACrB,CAAC;YAED,iEAAiE;YACjE,IAAI,QAAQ,IAAI,KAAK,KAAK,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACtE,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC7D,CAAC;YAED,mEAAmE;YACnE,IAAI,OAAO,IAAI,KAAK,KAAK,MAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACtE,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5D,CAAC;YAED,0DAA0D;YAC1D,OAAO,iBAAiB,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClF,CAAC;KACF,CAAC;IAEF,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,MAAiB,EAAE,QAAc,EAAE,OAAa;IACxF,6EAA6E;IAC7E,MAAM,EAAE,GAAG,cAAY,CAAC,CAAC;IACzB,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE;QACnB,GAAG,CAAC,OAAO,EAAE,IAAI;YACf,IAAI,IAAI,KAAK,UAAU;gBAAE,OAAO,IAAI,CAAC;YACrC,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAErC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,OAAyB,EAAE,MAAwB,EAAE,EAAE;oBAC7D,WAAW,CAAC,MAAM,CAAC,SAAS,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;wBACpE,IAAI,CAAC,CAAC,OAAO;4BAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC;6BACtD,CAAC;4BACJ,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;4BACpB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE;gCAAE,OAAO,CAAC,SAAS,CAAC,CAAC;iCACrD,CAAC;gCACJ,IAAI,CAAC;oCAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gCAAC,CAAC;gCAClC,MAAM,CAAC;oCAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gCAAC,CAAC;4BAC1B,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnB,CAAC,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;gBAChC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;YACrB,CAAC;YAED,OAAO,iBAAiB,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClF,CAAC;QAED,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,SAAS,CAAC,GAAG,KAAK,IAAI,OAAO,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtE,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,iCAAiC;IACjC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAK,GAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,OAAQ,GAAW,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IACD,sCAAsC;IACtC,IAAI,GAAG,YAAY,MAAM,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IACD,iCAAiC;IACjC,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IACD,yBAAyB;IACzB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,QAAc,EAAE,OAAa;IAC9E,OAAO,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC5C,4CAA4C;IAC5C,MAAM,YAAY,GAAG,CAAC,MAAW,EAAE,EAAE,CAAC,CAAC;QACrC,IAAI,EAAE,CAAC,QAAa,EAAE,EAAE,GAAG,IAAI,MAAM,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChJ,OAAO,EAAE,CAAC,QAAa,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnL,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxG,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrG,SAAS,EAAE,CAAC,QAAa,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7I,OAAO,EAAE,CAAC,OAAe,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACrH,GAAG,EAAE;YACH,IAAI,EAAE,CAAC,QAAa,EAAE,EAAE,GAAG,IAAI,MAAM,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClH,SAAS,EAAE,CAAC,QAAa,EAAE,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACjJ;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,MAAW,EAAE,EAAE;QACrB,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,0BAA0B;YAC1B,OAAO,iBAAiB,CAAC,UAAU,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACnE,CAAC;QACD,mCAAmC;QACnC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}
|
package/dist/pw-cli.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* pw — drop-in replacement for npx playwright test
|
|
4
|
+
*
|
|
5
|
+
* Routes test files:
|
|
6
|
+
* - Bridge-eligible files → direct bridge execution (fast, no test runner overhead)
|
|
7
|
+
* - Node-mode files → standard `npx playwright test` (full compatibility)
|
|
8
|
+
*
|
|
9
|
+
* When no bridge is available, all tests go through standard Playwright.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=pw-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-cli.d.ts","sourceRoot":"","sources":["../src/pw-cli.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|
package/dist/pw-cli.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* pw — drop-in replacement for npx playwright test
|
|
4
|
+
*
|
|
5
|
+
* Routes test files:
|
|
6
|
+
* - Bridge-eligible files → direct bridge execution (fast, no test runner overhead)
|
|
7
|
+
* - Node-mode files → standard `npx playwright test` (full compatibility)
|
|
8
|
+
*
|
|
9
|
+
* When no bridge is available, all tests go through standard Playwright.
|
|
10
|
+
*/
|
|
11
|
+
import { spawn } from 'node:child_process';
|
|
12
|
+
import { createRequire } from 'node:module';
|
|
13
|
+
import path from 'node:path';
|
|
14
|
+
import fs from 'node:fs';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const _require = createRequire(__filename);
|
|
18
|
+
// Resolve Playwright CLI from the user's project to avoid duplicate module instances
|
|
19
|
+
const projectRequire = createRequire(path.join(process.cwd(), 'package.json'));
|
|
20
|
+
let pwCliPath;
|
|
21
|
+
try {
|
|
22
|
+
pwCliPath = projectRequire.resolve('@playwright/test/cli');
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
pwCliPath = _require.resolve('@playwright/test/cli');
|
|
26
|
+
}
|
|
27
|
+
// Chrome extension: bundled in dist/chrome-extension/ (npm), or monorepo fallback (dev)
|
|
28
|
+
const bundledExt = path.resolve(path.dirname(__filename), 'chrome-extension');
|
|
29
|
+
const monorepoExt = path.resolve(path.dirname(__filename), '../../extension/dist');
|
|
30
|
+
const extPath = fs.existsSync(path.join(bundledExt, 'manifest.json'))
|
|
31
|
+
? bundledExt
|
|
32
|
+
: monorepoExt;
|
|
33
|
+
const args = process.argv.slice(2);
|
|
34
|
+
const subcommand = args[0];
|
|
35
|
+
// ─── Subcommands ─────────────────────────────────────────────────────────────
|
|
36
|
+
if (subcommand === 'launch') {
|
|
37
|
+
const { handleLaunch } = await import('./pw-launch.js');
|
|
38
|
+
await handleLaunch(args.slice(1));
|
|
39
|
+
process.exit(0);
|
|
40
|
+
}
|
|
41
|
+
if (subcommand === 'close') {
|
|
42
|
+
const { handleClose } = await import('./pw-launch.js');
|
|
43
|
+
await handleClose(args.slice(1));
|
|
44
|
+
process.exit(0);
|
|
45
|
+
}
|
|
46
|
+
if (subcommand === 'repl') {
|
|
47
|
+
const { handleRepl } = await import('./pw-repl.js');
|
|
48
|
+
await handleRepl(args.slice(1));
|
|
49
|
+
// handleRepl keeps process alive via node:repl — don't exit here
|
|
50
|
+
}
|
|
51
|
+
if (subcommand === 'repl-extension') {
|
|
52
|
+
const { handleReplExtension } = await import('./pw-repl-extension.js');
|
|
53
|
+
await handleReplExtension(args.slice(1));
|
|
54
|
+
// handleReplExtension keeps process alive via node:repl
|
|
55
|
+
}
|
|
56
|
+
// ─── Default: test ───────────────────────────────────────────────────────────
|
|
57
|
+
if (args.length === 0 || (args[0] && args[0].startsWith('-'))) {
|
|
58
|
+
args.unshift('test');
|
|
59
|
+
}
|
|
60
|
+
// Run tests via standard Playwright — no preload, no Module._load hooks.
|
|
61
|
+
// Bridge mode is handled by the VS Code extension's _tryDirectBridge.
|
|
62
|
+
const child = spawn(process.execPath, [pwCliPath, ...args], {
|
|
63
|
+
stdio: 'inherit',
|
|
64
|
+
cwd: process.cwd(),
|
|
65
|
+
env: {
|
|
66
|
+
...process.env,
|
|
67
|
+
PW_EXT_PATH: extPath,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
child.on('exit', (code) => {
|
|
71
|
+
process.exit(code ?? 1);
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=pw-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-cli.js","sourceRoot":"","sources":["../src/pw-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pw launch / pw close — browser lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* Launches Chrome with the extension loaded and --remote-debugging-port.
|
|
5
|
+
* Injects the bridge port into the extension so it knows where to connect
|
|
6
|
+
* when pw repl-extension starts a BridgeServer later.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* pw launch --port 9222 # launch Chrome + extension
|
|
10
|
+
* pw launch --port 9222 --bridge-port 9877 # custom bridge port
|
|
11
|
+
* pw close --port 9222 # close browser via CDP
|
|
12
|
+
*/
|
|
13
|
+
export declare function handleLaunch(argv: string[]): Promise<void>;
|
|
14
|
+
export declare function handleClose(argv: string[]): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=pw-launch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-launch.d.ts","sourceRoot":"","sources":["../src/pw-launch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA0BH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDhE;AAID,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAW/D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pw launch / pw close — browser lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* Launches Chrome with the extension loaded and --remote-debugging-port.
|
|
5
|
+
* Injects the bridge port into the extension so it knows where to connect
|
|
6
|
+
* when pw repl-extension starts a BridgeServer later.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* pw launch --port 9222 # launch Chrome + extension
|
|
10
|
+
* pw launch --port 9222 --bridge-port 9877 # custom bridge port
|
|
11
|
+
* pw close --port 9222 # close browser via CDP
|
|
12
|
+
*/
|
|
13
|
+
import fs from 'node:fs';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
import { createRequire } from 'node:module';
|
|
16
|
+
import { fileURLToPath } from 'node:url';
|
|
17
|
+
import { minimist } from '@playwright-repl/core';
|
|
18
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
19
|
+
const _require = createRequire(__filename);
|
|
20
|
+
// ─── Extension path resolution ───────────────────────────────────────────────
|
|
21
|
+
function findExtensionPath() {
|
|
22
|
+
const bundledExt = path.resolve(path.dirname(__filename), 'chrome-extension');
|
|
23
|
+
const coreMain = _require.resolve('@playwright-repl/core');
|
|
24
|
+
const coreDir = coreMain.replace(/[\\/]dist[\\/].*$/, '');
|
|
25
|
+
const monorepoExt = path.resolve(coreDir, '../extension/dist');
|
|
26
|
+
const extPath = fs.existsSync(path.join(bundledExt, 'manifest.json')) ? bundledExt : monorepoExt;
|
|
27
|
+
if (!fs.existsSync(path.join(extPath, 'manifest.json')))
|
|
28
|
+
throw new Error('Chrome extension not found. Run "pnpm run build" first.');
|
|
29
|
+
return extPath;
|
|
30
|
+
}
|
|
31
|
+
// ─── handleLaunch ────────────────────────────────────────────────────────────
|
|
32
|
+
export async function handleLaunch(argv) {
|
|
33
|
+
const args = minimist(argv, {
|
|
34
|
+
boolean: ['headless'],
|
|
35
|
+
string: ['port', 'bridge-port'],
|
|
36
|
+
default: { port: '9222', 'bridge-port': '9877' },
|
|
37
|
+
});
|
|
38
|
+
const port = parseInt(args.port, 10);
|
|
39
|
+
const bridgePort = parseInt(args['bridge-port'], 10);
|
|
40
|
+
const headless = args.headless;
|
|
41
|
+
const extPath = findExtensionPath();
|
|
42
|
+
// 1. Launch Chrome with extension
|
|
43
|
+
const pw = _require('@playwright/test');
|
|
44
|
+
const os = await import('node:os');
|
|
45
|
+
const userDataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'pw-repl-'));
|
|
46
|
+
const defaultDir = path.join(userDataDir, 'Default');
|
|
47
|
+
fs.mkdirSync(defaultDir, { recursive: true });
|
|
48
|
+
fs.writeFileSync(path.join(defaultDir, 'Preferences'), JSON.stringify({
|
|
49
|
+
devtools: { preferences: { currentDockState: '"bottom"' } },
|
|
50
|
+
}));
|
|
51
|
+
const browserContext = await pw.chromium.launchPersistentContext(userDataDir, {
|
|
52
|
+
channel: 'chromium',
|
|
53
|
+
headless,
|
|
54
|
+
args: [
|
|
55
|
+
`--disable-extensions-except=${extPath}`,
|
|
56
|
+
`--load-extension=${extPath}`,
|
|
57
|
+
'--no-first-run',
|
|
58
|
+
'--no-default-browser-check',
|
|
59
|
+
'--disable-background-timer-throttling',
|
|
60
|
+
'--disable-infobars',
|
|
61
|
+
`--remote-debugging-port=${port}`,
|
|
62
|
+
],
|
|
63
|
+
});
|
|
64
|
+
console.log(`Chrome launched on CDP port ${port}`);
|
|
65
|
+
// 2. Inject bridge port into extension via service worker
|
|
66
|
+
let sw = browserContext.serviceWorkers()[0];
|
|
67
|
+
if (!sw)
|
|
68
|
+
sw = await browserContext.waitForEvent('serviceworker', { timeout: 10000 });
|
|
69
|
+
await sw.evaluate((p) => {
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
71
|
+
globalThis.chrome.storage.local.set({ bridgePort: p });
|
|
72
|
+
}, bridgePort);
|
|
73
|
+
console.log(`Bridge port ${bridgePort} set via service worker`);
|
|
74
|
+
console.log(`Ready! CDP: ${port} | Bridge: ${bridgePort}`);
|
|
75
|
+
console.log('Extension will connect when BridgeServer starts (pw repl-extension).');
|
|
76
|
+
// Keep alive, Ctrl+C to close
|
|
77
|
+
await new Promise((resolve) => {
|
|
78
|
+
process.on('SIGINT', async () => {
|
|
79
|
+
console.log('\nClosing...');
|
|
80
|
+
await browserContext.close().catch(() => { });
|
|
81
|
+
resolve();
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
// ─── handleClose ─────────────────────────────────────────────────────────────
|
|
86
|
+
export async function handleClose(argv) {
|
|
87
|
+
const args = minimist(argv, {
|
|
88
|
+
string: ['port'],
|
|
89
|
+
default: { port: '9222' },
|
|
90
|
+
});
|
|
91
|
+
const port = parseInt(args.port, 10);
|
|
92
|
+
const pw = _require('@playwright/test');
|
|
93
|
+
const browser = await pw.chromium.connectOverCDP(`http://localhost:${port}`);
|
|
94
|
+
await browser.close();
|
|
95
|
+
console.log(`Browser on port ${port} closed.`);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=pw-launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-launch.js","sourceRoot":"","sources":["../src/pw-launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Preloaded via NODE_OPTIONS --require.
|
|
4
|
+
*
|
|
5
|
+
* Patches Playwright's chromium.launch for:
|
|
6
|
+
* 1. Context reuse — shared context/page across tests in a worker
|
|
7
|
+
* 2. CDP reuse — connectOverCDP when PW_REUSE_CDP is set
|
|
8
|
+
*
|
|
9
|
+
* Also patches workerMain to route bridge-eligible tests to the bridge.
|
|
10
|
+
*
|
|
11
|
+
* Uses process 'loaded' event to patch AFTER all modules are initialized,
|
|
12
|
+
* avoiding Module._load hooks that interfere with Playwright's test file
|
|
13
|
+
* loading context (which causes "two different versions" errors).
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
const Module = require("module");
|
|
17
|
+
const path = require("path");
|
|
18
|
+
let sharedContext = null;
|
|
19
|
+
let sharedPage = null;
|
|
20
|
+
let defaultViewport = null;
|
|
21
|
+
// ─── workerMain interception (must use Module._load for this) ────────────────
|
|
22
|
+
// Only intercept 'workerMain', pass everything else through immediately.
|
|
23
|
+
const origLoad = Module._load;
|
|
24
|
+
let workerPatched = false;
|
|
25
|
+
Module._load = function (request, parent) {
|
|
26
|
+
// Only intercept workerMain — everything else passes through untouched
|
|
27
|
+
if (!workerPatched && typeof request === 'string' && request.includes('workerMain')) {
|
|
28
|
+
workerPatched = true;
|
|
29
|
+
// Remove hook BEFORE loading workerMain so test file loading
|
|
30
|
+
// goes through the original Module._load (no foreign stack frames)
|
|
31
|
+
Module._load = origLoad;
|
|
32
|
+
const realModule = origLoad.call(this, request, parent);
|
|
33
|
+
const origCreate = realModule.create;
|
|
34
|
+
return {
|
|
35
|
+
create(params) {
|
|
36
|
+
const worker = origCreate(params);
|
|
37
|
+
const bridge = origLoad.call(this, path.resolve(__dirname, 'pw-worker.cjs'), module);
|
|
38
|
+
bridge.patchWorker(worker, params);
|
|
39
|
+
return worker;
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
// Pass through — hook is still active but only until workerMain is found
|
|
44
|
+
return origLoad.apply(this, arguments);
|
|
45
|
+
};
|
|
46
|
+
// ─── chromium.launch patching (deferred, no Module._load) ────────────────────
|
|
47
|
+
// Use setImmediate to patch after all --require scripts and the main module
|
|
48
|
+
// have loaded. By this time, @playwright/test is in the module cache.
|
|
49
|
+
setImmediate(() => {
|
|
50
|
+
let pw;
|
|
51
|
+
try {
|
|
52
|
+
// Resolve from user's project to avoid duplicate module instances
|
|
53
|
+
const { createRequire } = require('module');
|
|
54
|
+
const projectRequire = createRequire(path.join(process.cwd(), 'package.json'));
|
|
55
|
+
pw = projectRequire('@playwright/test');
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
try {
|
|
59
|
+
pw = require('@playwright/test');
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return; // @playwright/test not available, nothing to patch
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (!pw?.chromium?.launch || pw.chromium.launch._pwReusePatched)
|
|
66
|
+
return;
|
|
67
|
+
pw.chromium.launch._pwReusePatched = true;
|
|
68
|
+
const origLaunch = pw.chromium.launch;
|
|
69
|
+
pw.chromium.launch = async function () {
|
|
70
|
+
const cdpEndpoint = process.env.PW_REUSE_CDP;
|
|
71
|
+
// When BrowserManager is running, connect to its browser via CDP
|
|
72
|
+
if (cdpEndpoint && pw.chromium.connectOverCDP) {
|
|
73
|
+
let browser;
|
|
74
|
+
try {
|
|
75
|
+
browser = await pw.chromium.connectOverCDP(cdpEndpoint);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Browser not running — fall back to normal launch
|
|
79
|
+
return origLaunch.apply(this, arguments);
|
|
80
|
+
}
|
|
81
|
+
// Reuse existing context from BrowserManager
|
|
82
|
+
const origNewContext = browser.newContext.bind(browser);
|
|
83
|
+
browser.newContext = async function (contextOptions) {
|
|
84
|
+
if (!sharedContext) {
|
|
85
|
+
const contexts = browser.contexts();
|
|
86
|
+
if (contexts.length > 0) {
|
|
87
|
+
sharedContext = contexts[0];
|
|
88
|
+
sharedPage = sharedContext.pages()[0] || await sharedContext.newPage();
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
sharedContext = await origNewContext(contextOptions);
|
|
92
|
+
sharedPage = sharedContext.pages()[0] || await sharedContext.newPage();
|
|
93
|
+
}
|
|
94
|
+
defaultViewport = sharedPage.viewportSize();
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
try {
|
|
98
|
+
await sharedContext.clearCookies();
|
|
99
|
+
await sharedContext.clearPermissions().catch(() => { });
|
|
100
|
+
await sharedContext.unrouteAll({ behavior: 'ignoreErrors' }).catch(() => { });
|
|
101
|
+
await sharedPage.unrouteAll({ behavior: 'ignoreErrors' }).catch(() => { });
|
|
102
|
+
if (defaultViewport)
|
|
103
|
+
await sharedPage.setViewportSize(defaultViewport);
|
|
104
|
+
await sharedPage.evaluate(() => {
|
|
105
|
+
try {
|
|
106
|
+
localStorage.clear();
|
|
107
|
+
}
|
|
108
|
+
catch { }
|
|
109
|
+
try {
|
|
110
|
+
sessionStorage.clear();
|
|
111
|
+
}
|
|
112
|
+
catch { }
|
|
113
|
+
}).catch(() => { });
|
|
114
|
+
await sharedPage.goto('about:blank', { waitUntil: 'commit' });
|
|
115
|
+
}
|
|
116
|
+
catch { }
|
|
117
|
+
}
|
|
118
|
+
sharedContext.newPage = async () => sharedPage;
|
|
119
|
+
sharedContext.close = async () => { };
|
|
120
|
+
return sharedContext;
|
|
121
|
+
};
|
|
122
|
+
// Don't close BrowserManager's browser
|
|
123
|
+
browser.close = async () => { };
|
|
124
|
+
return browser;
|
|
125
|
+
}
|
|
126
|
+
// Normal path: launch new browser, reuse context across tests
|
|
127
|
+
const browser = await origLaunch.apply(this, arguments);
|
|
128
|
+
const origNewContext = browser.newContext.bind(browser);
|
|
129
|
+
browser.newContext = async function (contextOptions) {
|
|
130
|
+
if (!sharedContext) {
|
|
131
|
+
sharedContext = await origNewContext(contextOptions);
|
|
132
|
+
sharedPage = sharedContext.pages()[0] || await sharedContext.newPage();
|
|
133
|
+
defaultViewport = sharedPage.viewportSize();
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
try {
|
|
137
|
+
await sharedContext.clearCookies();
|
|
138
|
+
await sharedContext.clearPermissions().catch(() => { });
|
|
139
|
+
await sharedContext.unrouteAll({ behavior: 'ignoreErrors' }).catch(() => { });
|
|
140
|
+
await sharedPage.unrouteAll({ behavior: 'ignoreErrors' }).catch(() => { });
|
|
141
|
+
if (defaultViewport)
|
|
142
|
+
await sharedPage.setViewportSize(defaultViewport);
|
|
143
|
+
await sharedPage.evaluate(() => {
|
|
144
|
+
try {
|
|
145
|
+
localStorage.clear();
|
|
146
|
+
}
|
|
147
|
+
catch { }
|
|
148
|
+
try {
|
|
149
|
+
sessionStorage.clear();
|
|
150
|
+
}
|
|
151
|
+
catch { }
|
|
152
|
+
}).catch(() => { });
|
|
153
|
+
await sharedPage.goto('about:blank', { waitUntil: 'commit' });
|
|
154
|
+
}
|
|
155
|
+
catch { }
|
|
156
|
+
}
|
|
157
|
+
sharedContext.newPage = async () => sharedPage;
|
|
158
|
+
sharedContext.close = async () => { };
|
|
159
|
+
return sharedContext;
|
|
160
|
+
};
|
|
161
|
+
return browser;
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
//# sourceMappingURL=pw-preload.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-preload.cjs","sourceRoot":"","sources":["../src/pw-preload.cts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preloaded via NODE_OPTIONS --require.
|
|
3
|
+
*
|
|
4
|
+
* Patches Playwright's chromium.launch for:
|
|
5
|
+
* 1. Context reuse — shared context/page across tests in a worker
|
|
6
|
+
* 2. CDP reuse — connectOverCDP when PW_REUSE_CDP is set
|
|
7
|
+
*
|
|
8
|
+
* Also patches workerMain to route bridge-eligible tests to the bridge.
|
|
9
|
+
*
|
|
10
|
+
* Uses process 'loaded' event to patch AFTER all modules are initialized,
|
|
11
|
+
* avoiding Module._load hooks that interfere with Playwright's test file
|
|
12
|
+
* loading context (which causes "two different versions" errors).
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=pw-preload.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-preload.d.cts","sourceRoot":"","sources":["../src/pw-preload.cts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pw repl-extension — REPL that routes commands through the Chrome extension bridge.
|
|
3
|
+
*
|
|
4
|
+
* Starts a BridgeServer and waits for the extension to connect. The extension
|
|
5
|
+
* retries every 3s, so start this after `pw launch --bridge-port <port>`.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* pw repl-extension --bridge-port 9877 # interactive REPL
|
|
9
|
+
* pw repl-extension --bridge-port 9877 bench.js # run script, exit
|
|
10
|
+
*/
|
|
11
|
+
export declare function handleReplExtension(argv: string[]): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=pw-repl-extension.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-repl-extension.d.ts","sourceRoot":"","sources":["../src/pw-repl-extension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFvE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pw repl-extension — REPL that routes commands through the Chrome extension bridge.
|
|
3
|
+
*
|
|
4
|
+
* Starts a BridgeServer and waits for the extension to connect. The extension
|
|
5
|
+
* retries every 3s, so start this after `pw launch --bridge-port <port>`.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* pw repl-extension --bridge-port 9877 # interactive REPL
|
|
9
|
+
* pw repl-extension --bridge-port 9877 bench.js # run script, exit
|
|
10
|
+
*/
|
|
11
|
+
import repl from 'node:repl';
|
|
12
|
+
import { inspect } from 'node:util';
|
|
13
|
+
import fs from 'node:fs';
|
|
14
|
+
import { BridgeServer, minimist } from '@playwright-repl/core';
|
|
15
|
+
export async function handleReplExtension(argv) {
|
|
16
|
+
const args = minimist(argv, {
|
|
17
|
+
string: ['bridge-port'],
|
|
18
|
+
default: { 'bridge-port': '9877' },
|
|
19
|
+
});
|
|
20
|
+
const bridgePort = parseInt(args['bridge-port'], 10);
|
|
21
|
+
const scriptFile = args._[0];
|
|
22
|
+
// Start BridgeServer and wait for extension to connect
|
|
23
|
+
const bridge = new BridgeServer();
|
|
24
|
+
await bridge.start(bridgePort);
|
|
25
|
+
console.log(`BridgeServer on port ${bridge.port}`);
|
|
26
|
+
console.log('Waiting for extension to connect...');
|
|
27
|
+
await bridge.waitForConnection(30000);
|
|
28
|
+
console.log('Extension connected.');
|
|
29
|
+
// Script mode: read file, run through bridge, print timing, exit
|
|
30
|
+
if (scriptFile) {
|
|
31
|
+
const script = fs.readFileSync(scriptFile, 'utf-8');
|
|
32
|
+
const start = performance.now();
|
|
33
|
+
try {
|
|
34
|
+
const result = await bridge.runScript(script, 'javascript');
|
|
35
|
+
const elapsed = performance.now() - start;
|
|
36
|
+
if (result.text)
|
|
37
|
+
console.log(result.text);
|
|
38
|
+
console.log(`${elapsed.toFixed(1)}ms${result.isError ? ' (error)' : ''}`);
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
const elapsed = performance.now() - start;
|
|
42
|
+
console.error(e.message);
|
|
43
|
+
console.log(`${elapsed.toFixed(1)}ms (error)`);
|
|
44
|
+
}
|
|
45
|
+
await bridge.close();
|
|
46
|
+
process.exit(0);
|
|
47
|
+
}
|
|
48
|
+
let lastElapsed = 0;
|
|
49
|
+
function formatValue(value) {
|
|
50
|
+
if (value === undefined || value === null)
|
|
51
|
+
return '';
|
|
52
|
+
if (typeof value === 'string')
|
|
53
|
+
return value;
|
|
54
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
55
|
+
return String(value);
|
|
56
|
+
return inspect(value, { depth: 1, colors: true });
|
|
57
|
+
}
|
|
58
|
+
const r = repl.start({
|
|
59
|
+
prompt: 'pw> ',
|
|
60
|
+
eval: (input, _context, _file, cb) => {
|
|
61
|
+
const cmd = input.trim();
|
|
62
|
+
if (!cmd) {
|
|
63
|
+
cb(null, undefined);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const start = performance.now();
|
|
67
|
+
bridge.run(cmd).then((result) => {
|
|
68
|
+
lastElapsed = performance.now() - start;
|
|
69
|
+
if (result.isError) {
|
|
70
|
+
cb(new Error(result.text || 'Unknown error'));
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
cb(null, result.text || undefined);
|
|
74
|
+
}
|
|
75
|
+
}, (err) => {
|
|
76
|
+
lastElapsed = performance.now() - start;
|
|
77
|
+
cb(err);
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
writer(value) {
|
|
81
|
+
const formatted = formatValue(value);
|
|
82
|
+
const timing = `(${lastElapsed.toFixed(1)}ms)`;
|
|
83
|
+
lastElapsed = 0;
|
|
84
|
+
if (!formatted && !timing)
|
|
85
|
+
return '';
|
|
86
|
+
if (!formatted)
|
|
87
|
+
return timing;
|
|
88
|
+
return timing ? `${formatted}\n${timing}` : formatted;
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
// Block until REPL exits (Ctrl+D / .exit)
|
|
92
|
+
await new Promise((resolve) => {
|
|
93
|
+
r.on('exit', async () => {
|
|
94
|
+
await bridge.close();
|
|
95
|
+
resolve();
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
process.exit(0);
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=pw-repl-extension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-repl-extension.js","sourceRoot":"","sources":["../src/pw-repl-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pw repl — minimal Node REPL with Playwright globals.
|
|
3
|
+
*
|
|
4
|
+
* Connects to an existing Chrome via CDP, exposes page/context/browser/expect
|
|
5
|
+
* on the REPL context, and lets you type raw Playwright API or plain JS.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* pw repl --port 9222 # interactive REPL
|
|
9
|
+
* pw repl --port 9222 bench.js # run script, exit (browser stays alive)
|
|
10
|
+
*/
|
|
11
|
+
export declare function handleRepl(argv: string[]): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=pw-repl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pw-repl.d.ts","sourceRoot":"","sources":["../src/pw-repl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkG9D"}
|