@playwright-repl/runner 0.21.5 → 0.21.7
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/dist/bridge-utils.cjs +13 -1
- package/dist/bridge-utils.cjs.map +1 -1
- package/dist/bridge-utils.d.cts.map +1 -1
- package/dist/chrome-extension/devtools/console.js +23 -7
- package/dist/chrome-extension/devtools/console.js.map +1 -1
- package/dist/chrome-extension/devtools/devtools.js +1 -1
- package/dist/chrome-extension/devtools/devtools.js.map +1 -1
- package/dist/chrome-extension/manifest.json +1 -1
- package/dist/chrome-extension/panel/panel.js +5 -5
- package/dist/chrome-extension/panel/panel.js.map +1 -1
- package/dist/chrome-extension/sw-debugger-core.js +1 -1
- package/dist/chrome-extension/sw-debugger-core.js.map +1 -1
- package/dist/pw-cli.js +0 -0
- package/package.json +37 -37
- package/LICENSE +0 -21
package/dist/bridge-utils.cjs
CHANGED
|
@@ -88,7 +88,19 @@ function needsNode(filePath) {
|
|
|
88
88
|
* Uses esbuild with an alias plugin to replace @playwright/test with the bridge shim.
|
|
89
89
|
*/
|
|
90
90
|
async function compile(testFilePath) {
|
|
91
|
-
|
|
91
|
+
// Use native esbuild when available (fast), fall back to esbuild-wasm (cross-platform)
|
|
92
|
+
let esbuild;
|
|
93
|
+
if (process.env.PW_USE_ESBUILD_WASM) {
|
|
94
|
+
esbuild = require('esbuild-wasm');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
try {
|
|
98
|
+
esbuild = require('esbuild');
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
esbuild = require('esbuild-wasm');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
92
104
|
const testDir = path.dirname(testFilePath);
|
|
93
105
|
const testFileName = path.basename(testFilePath);
|
|
94
106
|
const shimPath = path.resolve(__dirname, 'shim', 'alias.ts');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-utils.cjs","sourceRoot":"","sources":["../src/bridge-utils.cts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA0CH,8BAgCC;AAQD,
|
|
1
|
+
{"version":3,"file":"bridge-utils.cjs","sourceRoot":"","sources":["../src/bridge-utils.cts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-utils.d.cts","sourceRoot":"","sources":["../src/bridge-utils.cts"],"names":[],"mappings":"AAAA;;;;GAIG;AAsCH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgCnD;AAID;;;GAGG;AACH,wBAAsB,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"bridge-utils.d.cts","sourceRoot":"","sources":["../src/bridge-utils.cts"],"names":[],"mappings":"AAAA;;;;GAIG;AAsCH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAgCnD;AAID;;;GAGG;AACH,wBAAsB,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuCnE;AAID,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CA0B/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAoBnF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CAyB/E"}
|
|
@@ -1,17 +1,33 @@
|
|
|
1
1
|
import "../modulepreload-polyfill.js";
|
|
2
2
|
import { c as clientExports, j as jsxRuntimeExports, r as reactExports } from "../index.js";
|
|
3
|
-
import { aa as panelReducer, ab as initialState,
|
|
3
|
+
import { aa as panelReducer, ab as initialState, ac as onConsoleEvent, a5 as Console, g as attachToTab } from "../index2.js";
|
|
4
4
|
import "../sw-debugger-core.js";
|
|
5
5
|
function DevToolsConsole() {
|
|
6
6
|
const [state, dispatch] = reactExports.useReducer(panelReducer, initialState);
|
|
7
7
|
reactExports.useEffect(() => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
const inspectedTabId = chrome.devtools?.inspectedWindow?.tabId;
|
|
9
|
+
async function doAttach(tabId) {
|
|
10
|
+
const [res, tab] = await Promise.all([
|
|
11
|
+
attachToTab(tabId),
|
|
12
|
+
chrome.tabs.get(tabId).catch(() => null)
|
|
13
|
+
]);
|
|
14
|
+
if (res.ok && res.url) {
|
|
15
|
+
const idx = (tab?.index ?? 0) + 1;
|
|
16
|
+
dispatch({ type: "ATTACH_SUCCESS", url: res.url, tabId });
|
|
17
|
+
dispatch({ type: "ADD_LINE", line: { text: `Attached to tab ${idx}: ${res.url}`, type: "info" } });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (inspectedTabId) {
|
|
21
|
+
doAttach(inspectedTabId).catch((e) => console.warn("[pw-repl] auto-attach failed:", e));
|
|
14
22
|
}
|
|
23
|
+
const onActivated = (info) => {
|
|
24
|
+
if (!inspectedTabId || info.tabId !== inspectedTabId) return;
|
|
25
|
+
doAttach(inspectedTabId).catch((e) => console.warn("[pw-repl] re-attach failed:", e));
|
|
26
|
+
};
|
|
27
|
+
chrome.tabs.onActivated.addListener(onActivated);
|
|
28
|
+
return () => {
|
|
29
|
+
chrome.tabs.onActivated.removeListener(onActivated);
|
|
30
|
+
};
|
|
15
31
|
}, []);
|
|
16
32
|
reactExports.useEffect(() => {
|
|
17
33
|
onConsoleEvent((level, args) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","sources":["../../src/devtools/console.tsx"],"sourcesContent":["/**\r\n * DevTools REPL Console — mounts the Console component in a DevTools panel.\r\n */\r\nimport '../panel/panel.css';\r\nimport { createRoot } from 'react-dom/client';\r\nimport { useReducer, useEffect } from 'react';\r\nimport { panelReducer, initialState } from '../panel/reducer';\r\nimport { attachToTab } from '../panel/lib/bridge';\r\nimport { Console } from '../panel/components/Console';\r\nimport { onConsoleEvent } from '../panel/lib/sw-debugger';\r\n\r\nfunction DevToolsConsole() {\r\n const [state, dispatch] = useReducer(panelReducer, initialState);\r\n
|
|
1
|
+
{"version":3,"file":"console.js","sources":["../../src/devtools/console.tsx"],"sourcesContent":["/**\r\n * DevTools REPL Console — mounts the Console component in a DevTools panel.\r\n */\r\nimport '../panel/panel.css';\r\nimport { createRoot } from 'react-dom/client';\r\nimport { useReducer, useEffect } from 'react';\r\nimport { panelReducer, initialState } from '../panel/reducer';\r\nimport { attachToTab } from '../panel/lib/bridge';\r\nimport { Console } from '../panel/components/Console';\r\nimport { onConsoleEvent } from '../panel/lib/sw-debugger';\r\n\r\nfunction DevToolsConsole() {\r\n const [state, dispatch] = useReducer(panelReducer, initialState);\r\n // Auto-attach to the inspected tab, re-attach when user switches back\r\n useEffect(() => {\r\n const inspectedTabId = chrome.devtools?.inspectedWindow?.tabId;\r\n\r\n async function doAttach(tabId: number) {\r\n const [res, tab] = await Promise.all([\r\n attachToTab(tabId),\r\n chrome.tabs.get(tabId).catch(() => null),\r\n ]);\r\n if (res.ok && res.url) {\r\n const idx = (tab?.index ?? 0) + 1;\r\n dispatch({ type: 'ATTACH_SUCCESS', url: res.url, tabId });\r\n dispatch({ type: 'ADD_LINE', line: { text: `Attached to tab ${idx}: ${res.url}`, type: 'info' } });\r\n }\r\n }\r\n\r\n if (inspectedTabId) {\r\n doAttach(inspectedTabId).catch(e => console.warn('[pw-repl] auto-attach failed:', e));\r\n }\r\n\r\n const onActivated = (info: chrome.tabs.TabActiveInfo) => {\r\n if (!inspectedTabId || info.tabId !== inspectedTabId) return;\r\n doAttach(inspectedTabId).catch(e => console.warn('[pw-repl] re-attach failed:', e));\r\n };\r\n chrome.tabs.onActivated.addListener(onActivated);\r\n\r\n return () => {\r\n chrome.tabs.onActivated.removeListener(onActivated);\r\n };\r\n }, []);\r\n\r\n // Forward console.log/error from the page\r\n useEffect(() => {\r\n onConsoleEvent((level, args) => {\r\n for (const arg of args) {\r\n const type = level === 'error' ? 'error' : level === 'warn' ? 'info' : 'success';\r\n dispatch({ type: 'ADD_LINE', line: { text: '', type, value: arg } });\r\n }\r\n });\r\n return () => onConsoleEvent(null);\r\n }, [dispatch]);\r\n\r\n return <Console outputLines={state.outputLines} dispatch={dispatch} />;\r\n}\r\n\r\ncreateRoot(document.getElementById('root')!).render(<DevToolsConsole />);\r\n"],"names":["useReducer","useEffect","jsx","createRoot"],"mappings":";;;;AAWA,SAAS,kBAAkB;AACzB,QAAM,CAAC,OAAO,QAAQ,IAAIA,aAAAA,WAAW,cAAc,YAAY;AAE/DC,eAAAA,UAAU,MAAM;AACd,UAAM,iBAAiB,OAAO,UAAU,iBAAiB;AAEzD,mBAAe,SAAS,OAAe;AACrC,YAAM,CAAC,KAAK,GAAG,IAAI,MAAM,QAAQ,IAAI;AAAA,QACnC,YAAY,KAAK;AAAA,QACjB,OAAO,KAAK,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI;AAAA,MAAA,CACxC;AACD,UAAI,IAAI,MAAM,IAAI,KAAK;AACrB,cAAM,OAAO,KAAK,SAAS,KAAK;AAChC,iBAAS,EAAE,MAAM,kBAAkB,KAAK,IAAI,KAAK,OAAO;AACxD,iBAAS,EAAE,MAAM,YAAY,MAAM,EAAE,MAAM,mBAAmB,GAAG,KAAK,IAAI,GAAG,IAAI,MAAM,OAAA,GAAU;AAAA,MACnG;AAAA,IACF;AAEA,QAAI,gBAAgB;AAClB,eAAS,cAAc,EAAE,MAAM,CAAA,MAAK,QAAQ,KAAK,iCAAiC,CAAC,CAAC;AAAA,IACtF;AAEA,UAAM,cAAc,CAAC,SAAoC;AACvD,UAAI,CAAC,kBAAkB,KAAK,UAAU,eAAgB;AACtD,eAAS,cAAc,EAAE,MAAM,CAAA,MAAK,QAAQ,KAAK,+BAA+B,CAAC,CAAC;AAAA,IACpF;AACA,WAAO,KAAK,YAAY,YAAY,WAAW;AAE/C,WAAO,MAAM;AACX,aAAO,KAAK,YAAY,eAAe,WAAW;AAAA,IACpD;AAAA,EACF,GAAG,CAAA,CAAE;AAGLA,eAAAA,UAAU,MAAM;AACd,mBAAe,CAAC,OAAO,SAAS;AAC9B,iBAAW,OAAO,MAAM;AACtB,cAAM,OAAO,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS;AACvE,iBAAS,EAAE,MAAM,YAAY,MAAM,EAAE,MAAM,IAAI,MAAM,OAAO,IAAA,EAAI,CAAG;AAAA,MACrE;AAAA,IACF,CAAC;AACD,WAAO,MAAM,eAAe,IAAI;AAAA,EAClC,GAAG,CAAC,QAAQ,CAAC;AAEb,SAAOC,kCAAAA,IAAC,SAAA,EAAQ,aAAa,MAAM,aAAa,UAAoB;AACtE;AAEAC,cAAAA,WAAW,SAAS,eAAe,MAAM,CAAE,EAAE,OAAOD,kCAAAA,IAAC,mBAAgB,CAAE;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.js","sources":["../../src/devtools/devtools.ts"],"sourcesContent":["/**\r\n * DevTools entry point — creates a \"REPL\" panel in Chrome DevTools.\r\n */\r\nchrome.devtools.panels.create(\r\n '
|
|
1
|
+
{"version":3,"file":"devtools.js","sources":["../../src/devtools/devtools.ts"],"sourcesContent":["/**\r\n * DevTools entry point — creates a \"REPL\" panel in Chrome DevTools.\r\n */\r\nchrome.devtools.panels.create(\r\n 'Playwright',\r\n 'icons/dramaturg_icon_16.png',\r\n 'devtools/console.html',\r\n);\r\n"],"names":[],"mappings":";AAGA,OAAO,SAAS,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AACF;"}
|
|
@@ -118,10 +118,11 @@ function Toolbar({ editorContent, editorMode, stepLine, attachedUrl, attachedTab
|
|
|
118
118
|
const lines = reactExports.useMemo(() => editorContent.split("\n"), [editorContent]);
|
|
119
119
|
function isInternalUrl(url) {
|
|
120
120
|
if (!url) return true;
|
|
121
|
-
return url.startsWith("chrome://") || url.startsWith("chrome-extension://")
|
|
121
|
+
return url.startsWith("chrome://") || url.startsWith("chrome-extension://");
|
|
122
122
|
}
|
|
123
123
|
function getTabLabel(tab) {
|
|
124
124
|
try {
|
|
125
|
+
if (tab.url?.startsWith("about:")) return tab.url;
|
|
125
126
|
const url = new URL(tab.url);
|
|
126
127
|
if (url.protocol === "chrome:") return `chrome://${url.hostname}`;
|
|
127
128
|
return url.hostname;
|
|
@@ -134,7 +135,7 @@ function Toolbar({ editorContent, editorMode, stepLine, attachedUrl, attachedTab
|
|
|
134
135
|
const tabs = await chrome.tabs.query({});
|
|
135
136
|
const ownOrigin = `chrome-extension://${chrome.runtime.id}/`;
|
|
136
137
|
const panelUrl = `${ownOrigin}panel/panel.html`;
|
|
137
|
-
setAvailableTabs(tabs.filter((t) => t?.url && !t.url.startsWith(
|
|
138
|
+
setAvailableTabs(tabs.filter((t) => t?.url && !t.url.startsWith(panelUrl) && (!t.url.startsWith("chrome-extension://") || t.url.startsWith(ownOrigin))));
|
|
138
139
|
}
|
|
139
140
|
async function checkActiveTab() {
|
|
140
141
|
if (!chrome.tabs?.query) return;
|
|
@@ -2126,14 +2127,13 @@ function App() {
|
|
|
2126
2127
|
const tab = tabs[0];
|
|
2127
2128
|
const url = tab?.url ?? "";
|
|
2128
2129
|
const ownOrigin = `chrome-extension://${chrome.runtime.id}/`;
|
|
2129
|
-
if (tab?.id && !url.startsWith("chrome://") &&
|
|
2130
|
+
if (tab?.id && !url.startsWith("chrome://") && (!url.startsWith("chrome-extension://") || url.startsWith(ownOrigin))) {
|
|
2130
2131
|
doAttach(tab.id);
|
|
2131
2132
|
}
|
|
2132
2133
|
});
|
|
2133
2134
|
const onActivated = async (info) => {
|
|
2134
2135
|
const tab = await chrome.tabs.get(info.tabId).catch(() => null);
|
|
2135
2136
|
const url = tab?.url ?? "";
|
|
2136
|
-
if (url.startsWith("about:")) return;
|
|
2137
2137
|
if (url.startsWith("chrome-extension://") && !url.startsWith(`chrome-extension://${chrome.runtime.id}/`)) return;
|
|
2138
2138
|
if (url.startsWith("chrome://")) {
|
|
2139
2139
|
attachedTabRef.current = null;
|
|
@@ -2148,7 +2148,7 @@ function App() {
|
|
|
2148
2148
|
if (changeInfo.url) dispatch({ type: "UPDATE_URL", url: changeInfo.url });
|
|
2149
2149
|
return;
|
|
2150
2150
|
}
|
|
2151
|
-
if (changeInfo.url && !changeInfo.url.startsWith("chrome://") &&
|
|
2151
|
+
if (changeInfo.url && !changeInfo.url.startsWith("chrome://") && (!changeInfo.url.startsWith("chrome-extension://") || changeInfo.url.startsWith(`chrome-extension://${chrome.runtime.id}/`))) {
|
|
2152
2152
|
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
|
|
2153
2153
|
if (tabs[0]?.id === tabId) doAttach(tabId);
|
|
2154
2154
|
});
|