@playwright-repl/runner 0.21.6 → 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.
@@ -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, g as attachToTab, ac as onConsoleEvent, a5 as Console } from "../index2.js";
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
- if (chrome.devtools?.inspectedWindow) {
9
- const tabId = chrome.devtools.inspectedWindow.tabId;
10
- attachToTab(tabId).then((res) => {
11
- if (res.ok && res.url)
12
- dispatch({ type: "ATTACH_SUCCESS", url: res.url, tabId });
13
- }).catch((e) => console.warn("[pw-repl] auto-attach failed:", e));
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\r\n // Auto-attach to the inspected tab\r\n useEffect(() => {\r\n if (chrome.devtools?.inspectedWindow) {\r\n const tabId = chrome.devtools.inspectedWindow.tabId;\r\n attachToTab(tabId).then(res => {\r\n if (res.ok && res.url)\r\n dispatch({ type: 'ATTACH_SUCCESS', url: res.url, tabId });\r\n }).catch(e => console.warn('[pw-repl] auto-attach failed:', e));\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;AAG/DC,eAAAA,UAAU,MAAM;AACd,QAAI,OAAO,UAAU,iBAAiB;AACpC,YAAM,QAAQ,OAAO,SAAS,gBAAgB;AAC9C,kBAAY,KAAK,EAAE,KAAK,CAAA,QAAO;AAC7B,YAAI,IAAI,MAAM,IAAI;AAChB,mBAAS,EAAE,MAAM,kBAAkB,KAAK,IAAI,KAAK,OAAO;AAAA,MAC5D,CAAC,EAAE,MAAM,CAAA,MAAK,QAAQ,KAAK,iCAAiC,CAAC,CAAC;AAAA,IAChE;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
+ {"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,6 +1,6 @@
1
1
  import "../modulepreload-polyfill.js";
2
2
  chrome.devtools.panels.create(
3
- "REPL",
3
+ "Playwright",
4
4
  "icons/dramaturg_icon_16.png",
5
5
  "devtools/console.html"
6
6
  );
@@ -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 'REPL',\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;"}
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;"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": 3,
3
3
  "name": "Dramaturg",
4
- "version": "0.20.0",
4
+ "version": "0.21.6",
5
5
  "description": "Playwright engineer's companion — console, editor, runner, debugger, and recorder in a Chrome side panel.",
6
6
  "permissions": [
7
7
  "activeTab",
@@ -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://") || url.startsWith("about:");
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("about:") && !t.url.startsWith(panelUrl) && (!t.url.startsWith("chrome-extension://") || t.url.startsWith(ownOrigin))));
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://") && !url.startsWith("about:") && (!url.startsWith("chrome-extension://") || url.startsWith(ownOrigin))) {
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://") && !changeInfo.url.startsWith("about:") && (!changeInfo.url.startsWith("chrome-extension://") || changeInfo.url.startsWith(`chrome-extension://${chrome.runtime.id}/`))) {
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
  });