@playwright-repl/browser-extension 0.24.0 → 0.24.1

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 +0,0 @@
1
- {"version":3,"file":"sw-debugger-core.js","sources":["../src/panel/lib/page-scripts.ts","../src/panel/lib/commands.ts","../src/panel/lib/execute.ts","../src/lib/sw-debugger-core.ts"],"sourcesContent":["// @ts-nocheck — This file is intentionally untyped JavaScript.\r\n// Functions here are called directly with the Playwright page object.\r\n// Type annotations are omitted so this file can also be used in\r\n// plain-JS contexts without a TypeScript build step.\r\n\r\n/**\r\n * Page-context functions for direct execution.\r\n *\r\n * Each function is a real, testable async function that takes (page, ...args).\r\n * background.ts calls them directly with the page object from crxApp.\r\n */\r\n\r\n// ─── Verify functions ───────────────────────────────────────────────────────\r\n\r\nexport async function verifyText(page, text) {\r\n if (await page.getByText(text).filter({ visible: true }).count() === 0)\r\n throw new Error('Text not found: ' + text);\r\n}\r\n\r\nexport async function verifyElement(page, role, name) {\r\n if (await page.getByRole(role, { name }).count() === 0)\r\n throw new Error('Element not found: ' + role + ' \"' + name + '\"');\r\n}\r\n\r\nexport async function verifyValue(page, ref, expected) {\r\n const el = page.locator('[aria-ref=\"' + ref + '\"]');\r\n const v = await el.inputValue();\r\n if (v !== expected)\r\n throw new Error('Expected \"' + expected + '\", got \"' + v + '\"');\r\n}\r\n\r\nexport async function verifyList(page, ref, items) {\r\n const loc = page.locator('[aria-ref=\"' + ref + '\"]');\r\n for (const item of items) {\r\n if (await loc.getByText(item).count() === 0)\r\n throw new Error('Item not found: ' + item);\r\n }\r\n}\r\n\r\nexport async function verifyTitle(page, text) {\r\n const title = await page.title();\r\n if (!title.includes(text))\r\n throw new Error('Title \"' + title + '\" does not contain \"' + text + '\"');\r\n}\r\n\r\nexport async function verifyUrl(page, text) {\r\n const url = page.url();\r\n if (!url.includes(text))\r\n throw new Error('URL \"' + url + '\" does not contain \"' + text + '\"');\r\n}\r\n\r\nexport async function waitForText(page, text) {\r\n await page.getByText(text).first().waitFor({ state: 'visible', timeout: 10000 });\r\n}\r\n\r\nexport async function verifyNoText(page, text) {\r\n if (await page.getByText(text).filter({ visible: true }).count() > 0)\r\n throw new Error('Text still visible: ' + text);\r\n}\r\n\r\nexport async function verifyNoElement(page, role, name) {\r\n if (await page.getByRole(role, { name }).count() > 0)\r\n throw new Error('Element still exists: ' + role + ' \"' + name + '\"');\r\n}\r\n\r\nexport async function verifyVisible(page, role, name) {\r\n if (!(await page.getByRole(role, { name }).isVisible()))\r\n throw new Error('Element not visible: ' + role + ' \"' + name + '\"');\r\n}\r\n\r\nexport async function verifyInputValue(page, label, expected) {\r\n let loc = page.getByLabel(label);\r\n if (await loc.count() === 0) loc = page.getByRole('spinbutton', { name: label });\r\n if (await loc.count() === 0) loc = page.getByRole('textbox', { name: label });\r\n if (await loc.count() === 0) loc = page.getByRole('combobox', { name: label });\r\n\r\n if (await loc.count() > 0) {\r\n const el = loc.first();\r\n const inputType = await el.evaluate(e => e instanceof HTMLInputElement ? e.type : '');\r\n if (inputType === 'checkbox') {\r\n const isChecked = await el.isChecked();\r\n const expectChecked = ['checked', 'true', 'yes', '1'].includes(expected.toLowerCase());\r\n if (isChecked !== expectChecked)\r\n throw new Error('Expected \"' + label + '\" to be ' + expected + ', but was ' + (isChecked ? 'checked' : 'unchecked'));\r\n return;\r\n }\r\n const value = await el.inputValue();\r\n if (String(value) !== String(expected))\r\n throw new Error('Expected \"' + expected + '\", got \"' + value + '\" for \"' + label + '\"');\r\n return;\r\n }\r\n\r\n // Radio group: find a role=group labeled <label>, then check which radio is selected\r\n const group = page.getByRole('group', { name: label });\r\n if (await group.count() > 0) {\r\n const checkedRadio = group.locator('input[type=radio]:checked');\r\n if (await checkedRadio.count() === 0)\r\n throw new Error('No radio button selected in group \"' + label + '\"');\r\n const value = await checkedRadio.evaluate(e => {\r\n const lbl = document.querySelector('label[for=\"' + e.id + '\"]');\r\n return lbl ? lbl.textContent.trim() : e.value;\r\n });\r\n if (value !== expected)\r\n throw new Error('Expected \"' + expected + '\" selected, got \"' + value + '\" in group \"' + label + '\"');\r\n return;\r\n }\r\n\r\n throw new Error('Element not found for label: ' + label);\r\n}\r\n\r\n// ─── Text locator actions ───────────────────────────────────────────────────\r\n\r\nexport async function actionByText(page, text, action, nth?, exact?) {\r\n let loc = page.getByText(text, { exact: true });\r\n if (!exact) {\r\n if (await loc.count() === 0) loc = page.getByRole('button', { name: text });\r\n if (await loc.count() === 0) loc = page.getByRole('link', { name: text });\r\n if (await loc.count() === 0) loc = page.getByRole('textbox', { name: text });\r\n if (await loc.count() === 0) loc = page.getByRole('combobox', { name: text });\r\n if (await loc.count() === 0) loc = page.getByPlaceholder(text);\r\n if (await loc.count() === 0) loc = page.getByText(text);\r\n }\r\n if (nth !== undefined) loc = loc.filter({ visible: true }).nth(nth);\r\n await loc[action]();\r\n}\r\n\r\nexport async function fillByText(page, text, value, nth?, exact?) {\r\n let loc = page.getByLabel(text);\r\n if (!exact) {\r\n if (await loc.count() === 0) loc = page.getByPlaceholder(text);\r\n if (await loc.count() === 0) loc = page.getByRole('textbox', { name: text });\r\n }\r\n if (nth !== undefined) loc = loc.filter({ visible: true }).nth(nth);\r\n await loc.fill(value);\r\n}\r\n\r\nexport async function selectByText(page, text, value, nth?, exact?) {\r\n let loc = page.getByLabel(text);\r\n if (!exact) {\r\n if (await loc.count() === 0) loc = page.getByRole('combobox', { name: text });\r\n }\r\n if (nth !== undefined) loc = loc.filter({ visible: true }).nth(nth);\r\n await loc.selectOption(value);\r\n}\r\n\r\nexport async function checkByText(page, text, nth?, exact?) {\r\n if (!exact) {\r\n const item = page.getByRole('listitem').filter({ hasText: text });\r\n if (await item.count() > 0) {\r\n const target = nth !== undefined ? item.filter({ visible: true }).nth(nth) : item;\r\n await target.getByRole('checkbox').check();\r\n return;\r\n }\r\n }\r\n let loc = page.getByLabel(text);\r\n if (!exact) {\r\n if (await loc.count() === 0) loc = page.getByRole('checkbox', { name: text });\r\n }\r\n if (nth !== undefined) loc = loc.filter({ visible: true }).nth(nth);\r\n await loc.check();\r\n}\r\n\r\nexport async function uncheckByText(page, text, nth?, exact?) {\r\n if (!exact) {\r\n const item = page.getByRole('listitem').filter({ hasText: text });\r\n if (await item.count() > 0) {\r\n const target = nth !== undefined ? item.filter({ visible: true }).nth(nth) : item;\r\n await target.getByRole('checkbox').uncheck();\r\n return;\r\n }\r\n }\r\n let loc = page.getByLabel(text);\r\n if (!exact) {\r\n if (await loc.count() === 0) loc = page.getByRole('checkbox', { name: text });\r\n }\r\n if (nth !== undefined) loc = loc.filter({ visible: true }).nth(nth);\r\n await loc.uncheck();\r\n}\r\n\r\n// ─── Role-based actions (used by recorder output) ──────────────────────────\r\n\r\nexport async function actionByRole(page, role, name, action, nth, inRole, inText) {\r\n let loc = page.getByRole(role, { name, exact: true });\r\n if (inRole !== undefined && inText !== undefined) {\r\n const cr = ({ list: 'listitem' })[inRole] || inRole;\r\n loc = page.getByRole(cr).filter({ hasText: inText }).getByRole(role, { name, exact: true });\r\n }\r\n if (nth !== undefined) loc = loc.nth(nth);\r\n await loc[action]();\r\n}\r\n\r\nexport async function fillByRole(page, role, name, value, nth, inRole, inText) {\r\n let loc = page.getByRole(role, { name, exact: true });\r\n if (inRole !== undefined && inText !== undefined) {\r\n const cr = ({ list: 'listitem' })[inRole] || inRole;\r\n loc = page.getByRole(cr).filter({ hasText: inText }).getByRole(role, { name, exact: true });\r\n }\r\n if (nth !== undefined) loc = loc.nth(nth);\r\n await loc.fill(value);\r\n}\r\n\r\nexport async function selectByRole(page, role, name, value, nth, inRole, inText) {\r\n let loc = page.getByRole(role, { name, exact: true });\r\n if (inRole !== undefined && inText !== undefined) {\r\n const cr = ({ list: 'listitem' })[inRole] || inRole;\r\n loc = page.getByRole(cr).filter({ hasText: inText }).getByRole(role, { name, exact: true });\r\n }\r\n if (nth !== undefined) loc = loc.nth(nth);\r\n await loc.selectOption(value);\r\n}\r\n\r\n// ─── Highlight ──────────────────────────────────────────────────────────────\r\n\r\nexport async function highlightByText(page, text, nth?, exact?) {\r\n let loc = exact ? page.getByText(text, { exact: true }) : page.getByText(text);\r\n const count = await loc.count();\r\n if (nth !== undefined) loc = loc.filter({ visible: true }).nth(nth);\r\n await loc.highlight();\r\n return nth !== undefined\r\n ? 'Highlighted 1 of ' + count\r\n : 'Highlighted ' + count + ' element' + (count !== 1 ? 's' : '');\r\n}\r\n\r\nexport async function highlightByRole(page, role, name, nth) {\r\n let loc = page.getByRole(role, { name, exact: true });\r\n const count = await loc.count();\r\n if (nth !== undefined) loc = loc.nth(nth);\r\n await loc.highlight();\r\n return nth !== undefined\r\n ? 'Highlighted 1 of ' + count\r\n : 'Highlighted ' + count + ' element' + (count !== 1 ? 's' : '');\r\n}\r\n\r\nexport async function highlightBySelector(page, selector, nth?) {\r\n let loc = page.locator(selector);\r\n const count = await loc.count();\r\n if (nth !== undefined) loc = loc.filter({ visible: true }).nth(nth);\r\n await loc.highlight();\r\n return nth !== undefined\r\n ? 'Highlighted 1 of ' + count\r\n : 'Highlighted ' + count + ' element' + (count !== 1 ? 's' : '');\r\n}\r\n\r\nexport async function highlightByRef(page, ref) {\r\n const loc = page.locator('aria-ref=' + ref);\r\n await loc.highlight();\r\n return 'Highlighted';\r\n}\r\n\r\nexport async function clearHighlight(page) {\r\n // Highlight a non-matching locator — Playwright replaces the current highlight\r\n // with nothing (0 elements), clearing it visually while keeping internal state valid.\r\n await page.locator('#__pw_clear__').highlight().catch(() => {});\r\n return 'Cleared';\r\n}\r\n\r\n// ─── Chaining (>> selectors) ────────────────────────────────────────────────\r\n\r\nexport async function chainAction(page, selector, action, value) {\r\n const loc = page.locator(selector);\r\n if (value !== undefined) await loc[action](value);\r\n else await loc[action]();\r\n return 'Done';\r\n}\r\n\r\n// ─── Navigation ─────────────────────────────────────────────────────────────\r\n\r\nexport async function goBack(page) {\r\n await page.goBack();\r\n return page.url();\r\n}\r\n\r\nexport async function goForward(page) {\r\n await page.goForward();\r\n return page.url();\r\n}\r\n\r\nexport async function gotoUrl(page, url) {\r\n await page.goto(url);\r\n return 'Navigated to ' + url;\r\n}\r\n\r\nexport async function reloadPage(page) {\r\n await page.reload();\r\n return 'Reloaded';\r\n}\r\n\r\n// ─── Timing ─────────────────────────────────────────────────────────────────\r\n\r\nexport async function waitMs(page, ms) {\r\n await page.waitForTimeout(ms);\r\n return 'Waited ' + ms + 'ms';\r\n}\r\n\r\n// ─── Page info ───────────────────────────────────────────────────────────────\r\n\r\nexport async function getTitle(page) {\r\n return await page.title();\r\n}\r\n\r\nexport async function getUrl(page) {\r\n return page.url();\r\n}\r\n\r\n// ─── Eval ────────────────────────────────────────────────────────────────────\r\n\r\nexport async function evalCode(page, code) {\r\n const result = await page.evaluate(code);\r\n return result !== undefined ? JSON.stringify(result) : 'undefined';\r\n}\r\n\r\n// ─── Run Code ────────────────────────────────────────────────────────────────\r\n\r\nexport async function runCode(page, code) {\r\n const AsyncFunction = runCode.constructor;\r\n const trimmed = code.trim();\r\n // If code is a function expression, call it with page; otherwise treat as function body\r\n const isFnExpr = /^(async\\s*)?\\(|^(async\\s+)?function\\b/.test(trimmed);\r\n const body = isFnExpr ? `return (${trimmed})(page)` : `return ${trimmed}`;\r\n const fn = new AsyncFunction('page', body);\r\n const result = await fn(page);\r\n return result != null && typeof result !== 'object' ? String(result) : 'Done';\r\n}\r\n\r\n// ─── Screenshot ──────────────────────────────────────────────────────────────\r\n\r\nexport async function takeScreenshot(page, fullPage) {\r\n const data = await page.screenshot({ type: 'jpeg', fullPage: !!fullPage });\r\n // Return object so background.ts can set the image field\r\n return { __image: data.toString('base64'), mimeType: 'image/jpeg' };\r\n}\r\n\r\n// ─── Snapshot ────────────────────────────────────────────────────────────────\r\n\r\nexport async function takeSnapshot(page) {\r\n if (typeof page.ariaSnapshot === 'function') {\r\n return await page.ariaSnapshot({ mode: 'ai' });\r\n }\r\n // Legacy fallback for older Playwright versions\r\n if (typeof page._snapshotForAI === 'function') {\r\n const result = await page._snapshotForAI();\r\n return result.full ?? String(result);\r\n }\r\n const title = await page.title();\r\n const url = page.url();\r\n return 'Title: ' + title + '\\nURL: ' + url;\r\n}\r\n\r\n// ─── Ref-based actions ───────────────────────────────────────────────────────\r\n\r\nexport async function refAction(page, ref, action, value) {\r\n // Use the aria-ref custom selector engine (NOT a CSS attribute selector).\r\n // Refs are JS properties on elements, resolved via _lastAriaSnapshotForQuery.\r\n // Run snapshot first if refs are stale.\r\n const loc = page.locator('aria-ref=' + ref);\r\n if (await loc.count() === 0) throw new Error('Element ' + ref + ' not found. Run snapshot first.');\r\n if (value !== undefined) await loc[action](value);\r\n else await loc[action]();\r\n return 'Done';\r\n}\r\n\r\n// ─── Press / Type ────────────────────────────────────────────────────────────\r\n\r\nexport async function pressKey(page, target, key) {\r\n if (!target || target === key) {\r\n // pressKey called with only a key (global keyboard press)\r\n await page.keyboard.press(target);\r\n return 'Pressed ' + target;\r\n }\r\n const isRef = /^e\\d+$/.test(target);\r\n if (isRef) {\r\n await page.locator('aria-ref=' + target).press(key);\r\n return 'Pressed ' + key;\r\n }\r\n let loc = page.getByText(target, { exact: true });\r\n if (await loc.count() === 0) loc = page.getByRole('textbox', { name: target });\r\n if (await loc.count() === 0) loc = page.getByRole('combobox', { name: target });\r\n if (await loc.count() === 0) loc = page.getByPlaceholder(target);\r\n if (await loc.count() === 0) loc = page.getByText(target);\r\n await loc.press(key);\r\n return 'Pressed ' + key;\r\n}\r\n\r\nexport async function pressKeyByRole(page, role, name, key, nth, inRole, inText) {\r\n let loc = page.getByRole(role, { name, exact: true });\r\n if (inRole !== undefined && inText !== undefined) {\r\n const cr = ({ list: 'listitem' })[inRole] || inRole;\r\n loc = page.getByRole(cr).filter({ hasText: inText }).getByRole(role, { name, exact: true });\r\n }\r\n if (nth !== undefined) loc = loc.nth(nth);\r\n await loc.press(key);\r\n return 'Pressed ' + key;\r\n}\r\n\r\nexport async function typeText(page, text) {\r\n await page.keyboard.type(text);\r\n return 'Typed';\r\n}\r\n\r\n// ─── Storage ─────────────────────────────────────────────────────────────────\r\n\r\nexport async function localStorageGet(page, key) {\r\n return await page.evaluate(k => localStorage.getItem(k), key);\r\n}\r\n\r\nexport async function localStorageSet(page, key, value) {\r\n await page.evaluate(([k, v]) => localStorage.setItem(k, v), [key, value]);\r\n return 'Set';\r\n}\r\n\r\nexport async function localStorageDelete(page, key) {\r\n await page.evaluate(k => localStorage.removeItem(k), key);\r\n return 'Deleted';\r\n}\r\n\r\nexport async function localStorageClear(page) {\r\n await page.evaluate(() => localStorage.clear());\r\n return 'Cleared';\r\n}\r\n\r\nexport async function localStorageList(page) {\r\n const items = await page.evaluate(() => {\r\n const result = {};\r\n for (let i = 0; i < localStorage.length; i++) {\r\n const k = localStorage.key(i);\r\n result[k] = localStorage.getItem(k);\r\n }\r\n return result;\r\n });\r\n return JSON.stringify(items, null, 2);\r\n}\r\n\r\nexport async function sessionStorageGet(page, key) {\r\n return await page.evaluate(k => sessionStorage.getItem(k), key);\r\n}\r\n\r\nexport async function sessionStorageSet(page, key, value) {\r\n await page.evaluate(([k, v]) => sessionStorage.setItem(k, v), [key, value]);\r\n return 'Set';\r\n}\r\n\r\nexport async function sessionStorageDelete(page, key) {\r\n await page.evaluate(k => sessionStorage.removeItem(k), key);\r\n return 'Deleted';\r\n}\r\n\r\nexport async function sessionStorageClear(page) {\r\n await page.evaluate(() => sessionStorage.clear());\r\n return 'Cleared';\r\n}\r\n\r\nexport async function sessionStorageList(page) {\r\n const items = await page.evaluate(() => {\r\n const result = {};\r\n for (let i = 0; i < sessionStorage.length; i++) {\r\n const k = sessionStorage.key(i);\r\n result[k] = sessionStorage.getItem(k);\r\n }\r\n return result;\r\n });\r\n return JSON.stringify(items, null, 2);\r\n}\r\n\r\n// ─── Cookies ─────────────────────────────────────────────────────────────────\r\n\r\nexport async function cookieList(page) {\r\n const cookies = await page.context().cookies();\r\n return JSON.stringify(cookies, null, 2);\r\n}\r\n\r\nexport async function cookieGet(page, name) {\r\n const cookies = await page.context().cookies();\r\n const c = cookies.find(c => c.name === name);\r\n return c ? JSON.stringify(c, null, 2) : 'Cookie not found: ' + name;\r\n}\r\n\r\nexport async function cookieSet(page, name, value) {\r\n const url = page.url();\r\n await page.context().addCookies([{ name, value, url }]);\r\n return 'Cookie set: ' + name;\r\n}\r\n\r\nexport async function cookieDelete(page, name) {\r\n await page.context().clearCookies({ name });\r\n return 'Cookie deleted: ' + name;\r\n}\r\n\r\nexport async function cookieClear(page) {\r\n await page.context().clearCookies();\r\n return 'Cleared';\r\n}\r\n\r\n// ─── Drag ─────────────────────────────────────────────────────────────────────\r\n\r\nexport async function dragDrop(page, source, target) {\r\n const srcLoc = /^e\\d+$/.test(source) ? page.locator('aria-ref=' + source) : page.getByText(source);\r\n const tgtLoc = /^e\\d+$/.test(target) ? page.locator('aria-ref=' + target) : page.getByText(target);\r\n await srcLoc.dragTo(tgtLoc);\r\n return 'Dragged';\r\n}\r\n\r\n// ─── Resize ───────────────────────────────────────────────────────────────────\r\n\r\nexport async function resizeViewport(page, width, height) {\r\n await page.setViewportSize({ width: parseInt(width), height: parseInt(height) });\r\n return 'Resized to ' + width + 'x' + height;\r\n}\r\n\r\n// ─── PDF ─────────────────────────────────────────────────────────────────────\r\n\r\nexport async function takePdf(page) {\r\n const data = await page.pdf();\r\n return { __image: data.toString('base64'), mimeType: 'application/pdf' };\r\n}\r\n\r\n// ─── Console / Network / Dialog / Route (globalThis state) ───────────────────\r\n\r\nexport async function getConsoleMessages(_page, clear) {\r\n if (clear) { globalThis.__consoleMessages = []; return 'Console cleared'; }\r\n const msgs = globalThis.__consoleMessages || [];\r\n return msgs.length === 0 ? 'No console messages (listening...)' : msgs.join('\\n');\r\n}\r\n\r\nexport async function getNetworkRequests(_page, clear, includeStatic) {\r\n if (clear) { globalThis.__networkRequests = []; return 'Network log cleared'; }\r\n let reqs = globalThis.__networkRequests || [];\r\n if (!includeStatic) {\r\n const skip = new Set(['stylesheet', 'image', 'font', 'media', 'other']);\r\n reqs = reqs.filter(r => !skip.has(r.type));\r\n }\r\n return reqs.length === 0\r\n ? 'No network requests (listening...)'\r\n : reqs.map(r => r.status + ' ' + r.method + ' ' + r.url).join('\\n');\r\n}\r\n\r\nexport async function setDialogAccept(_page) {\r\n globalThis.__dialogMode = 'accept';\r\n return 'Dialogs will be auto-accepted';\r\n}\r\n\r\nexport async function setDialogDismiss(_page) {\r\n globalThis.__dialogMode = 'dismiss';\r\n return 'Dialogs will be auto-dismissed';\r\n}\r\n\r\nexport async function addRoute(page, pattern) {\r\n if (!globalThis.__activeRoutes) globalThis.__activeRoutes = [];\r\n const handler = route => route.abort();\r\n await page.route(pattern, handler);\r\n globalThis.__activeRoutes.push({ pattern, handler });\r\n return 'Route added (blocked): ' + pattern;\r\n}\r\n\r\nexport async function listRoutes(_page) {\r\n const routes = globalThis.__activeRoutes || [];\r\n return routes.length === 0 ? 'No active routes' : routes.map(r => r.pattern).join('\\n');\r\n}\r\n\r\nexport async function removeRoute(page, pattern) {\r\n if (!globalThis.__activeRoutes || globalThis.__activeRoutes.length === 0)\r\n return 'No routes to remove';\r\n const idx = globalThis.__activeRoutes.findIndex(r => r.pattern === pattern);\r\n if (idx === -1) return 'Route not found: ' + pattern;\r\n await page.unroute(pattern, globalThis.__activeRoutes[idx].handler);\r\n globalThis.__activeRoutes.splice(idx, 1);\r\n return 'Route removed: ' + pattern;\r\n}\r\n\r\n// ─── Tab operations ───────────────────────────────────────────────────────────\r\n// Use chrome.tabs API (available in SW) so ALL Chrome tabs are visible,\r\n// not just pages tracked by playwright-crx. Scoped to the attached tab's window.\r\n\r\nexport async function tabList(_page) {\r\n const activeTabId = globalThis.activeTabId;\r\n const windowId = activeTabId ? (await chrome.tabs.get(activeTabId)).windowId : undefined;\r\n const tabs = await chrome.tabs.query(windowId !== undefined ? { windowId } : {});\r\n return JSON.stringify(tabs.map((tab, i) => ({\r\n index: i,\r\n title: tab.title || '',\r\n url: tab.url || '',\r\n current: tab.id === activeTabId,\r\n })), null, 2);\r\n}\r\n\r\nexport async function tabNew(_page, url) {\r\n const tabUrl = url || 'about:blank';\r\n const activeTabId = globalThis.activeTabId;\r\n const windowId = activeTabId ? (await chrome.tabs.get(activeTabId)).windowId : undefined;\r\n await chrome.tabs.create(windowId !== undefined ? { url: tabUrl, windowId } : { url: tabUrl });\r\n return 'Opened new tab' + (url ? ': ' + url : '');\r\n}\r\n\r\nexport async function tabClose(_page, index) {\r\n const activeTabId = globalThis.activeTabId;\r\n const windowId = activeTabId ? (await chrome.tabs.get(activeTabId)).windowId : undefined;\r\n const tabs = await chrome.tabs.query(windowId !== undefined ? { windowId } : {});\r\n const tab = index !== undefined ? tabs[index] : tabs.find(t => t.id === activeTabId);\r\n if (!tab?.id) throw new Error('Tab ' + (index !== undefined ? index : 'current') + ' not found');\r\n const url = tab.url || '';\r\n await chrome.tabs.remove(tab.id);\r\n return 'Closed: ' + url;\r\n}\r\n\r\nexport async function tabSelect(_page, index) {\r\n const activeTabId = globalThis.activeTabId;\r\n const windowId = activeTabId ? (await chrome.tabs.get(activeTabId)).windowId : undefined;\r\n const tabs = await chrome.tabs.query(windowId !== undefined ? { windowId } : {});\r\n const tab = tabs[index];\r\n if (!tab?.id) throw new Error('Tab ' + index + ' not found');\r\n const res = await globalThis.attachToTab(tab.id);\r\n if (!res.ok) throw new Error(res.error || 'Attach failed');\r\n return 'Selected tab ' + index + ': ' + (res.url || '');\r\n}\r\n","// ─── Command metadata ────────────────────────────────────────────────────────\r\n\r\ninterface CommandInfo {\r\n desc: string;\r\n usage?: string;\r\n examples?: string[];\r\n}\r\n\r\nexport const COMMANDS: Record<string, CommandInfo> = {\r\n 'check': { desc: 'Check a checkbox', usage: 'check <text> | check <ref>' },\r\n 'clear': { desc: 'Clear the console' },\r\n 'click': { desc: 'Click an element', usage: 'click <text> | click <ref>',\r\n examples: ['click \"Submit\"', 'click e5', 'click \"Submit\" --button right'] },\r\n 'cookie-clear': { desc: 'Clear cookies' },\r\n 'cookie-delete': { desc: 'Delete cookie', usage: 'cookie-delete <name>' },\r\n 'cookie-get': { desc: 'Get cookie', usage: 'cookie-get <name>' },\r\n 'cookie-list': { desc: 'List cookies' },\r\n 'console': { desc: 'Show console messages', usage: 'console [--clear]' },\r\n 'cookie-set': { desc: 'Set cookie', usage: 'cookie-set <name> <value>' },\r\n 'dblclick': { desc: 'Double-click', usage: 'dblclick <text> | dblclick <ref>' },\r\n 'dialog-accept': { desc: 'Auto-accept dialogs' },\r\n 'dialog-dismiss': { desc: 'Auto-dismiss dialogs' },\r\n 'drag': { desc: 'Drag and drop', usage: 'drag <source> <target>' },\r\n 'eval': { desc: 'Evaluate JavaScript', usage: 'eval <expression>',\r\n examples: ['eval document.title'] },\r\n 'export': { desc: 'Export as Playwright test' },\r\n 'fill': { desc: 'Fill a form field', usage: 'fill <text|ref> <value>',\r\n examples: ['fill \"Email\" \"user@test.com\"', 'fill e3 \"hello\"'] },\r\n 'go-back': { desc: 'Go back' },\r\n 'go-forward': { desc: 'Go forward' },\r\n 'goto': { desc: 'Navigate to a URL', usage: 'goto <url>',\r\n examples: ['goto https://example.com'] },\r\n 'help': { desc: 'Show available commands', usage: 'help [command]',\r\n examples: ['help', 'help click'] },\r\n 'highlight': { desc: 'Highlight element on page', usage: 'highlight <text|selector>',\r\n examples: ['highlight \"Submit\"', 'highlight .btn-primary'] },\r\n 'history': { desc: 'Show command history' },\r\n 'history clear': { desc: 'Clear command history' },\r\n 'hover': { desc: 'Hover over element', usage: 'hover <text> | hover <ref>' },\r\n 'locator': { desc: 'Generate Playwright locator for a ref', usage: 'locator <ref>',\r\n examples: ['locator e5'] },\r\n 'localstorage-clear': { desc: 'Clear localStorage' },\r\n 'localstorage-delete': { desc: 'Delete localStorage', usage: 'localstorage-delete <key>' },\r\n 'localstorage-get': { desc: 'Get localStorage', usage: 'localstorage-get <key>' },\r\n 'localstorage-list': { desc: 'List localStorage' },\r\n 'localstorage-set': { desc: 'Set localStorage', usage: 'localstorage-set <key> <value>' },\r\n 'network': { desc: 'Show network requests', usage: 'network [--clear] [--includeStatic]' },\r\n 'open': { desc: 'Open the browser' },\r\n 'pdf': { desc: 'Save page as PDF', usage: 'pdf' },\r\n 'press': { desc: 'Press a keyboard key', usage: 'press <key> | press <ref> <key>',\r\n examples: ['press Enter', 'press e5 Tab'] },\r\n 'reload': { desc: 'Reload page' },\r\n 'resize': { desc: 'Resize viewport', usage: 'resize <width> <height>' },\r\n 'route': { desc: 'Block requests by pattern', usage: 'route <pattern>' },\r\n 'route-list': { desc: 'List active routes' },\r\n 'run-code': { desc: 'Run Playwright code', usage: 'run-code <code>' },\r\n 'screenshot': { desc: 'Take a screenshot', usage: 'screenshot [--filename <file>] [--fullPage]' },\r\n 'select': { desc: 'Select dropdown option', usage: 'select <text|ref> <value>',\r\n examples: ['select \"Country\" \"US\"'] },\r\n 'sessionstorage-clear': { desc: 'Clear sessionStorage' },\r\n 'sessionstorage-delete':{ desc: 'Delete sessionStorage', usage: 'sessionstorage-delete <key>' },\r\n 'sessionstorage-get': { desc: 'Get sessionStorage', usage: 'sessionstorage-get <key>' },\r\n 'sessionstorage-list': { desc: 'List sessionStorage' },\r\n 'sessionstorage-set': { desc: 'Set sessionStorage', usage: 'sessionstorage-set <key> <value>' },\r\n 'snapshot': { desc: 'Accessibility snapshot', usage: 'snapshot [--filename <file>]' },\r\n 'tab-close': { desc: 'Close tab', usage: 'tab-close [index]' },\r\n 'tab-list': { desc: 'List tabs' },\r\n 'tab-new': { desc: 'New tab', usage: 'tab-new [url]' },\r\n 'tab-select': { desc: 'Select tab', usage: 'tab-select <index>' },\r\n 'type': { desc: 'Type text key by key', usage: 'type <text>',\r\n examples: ['type \"hello world\"'] },\r\n 'uncheck': { desc: 'Uncheck a checkbox', usage: 'uncheck <text> | uncheck <ref>' },\r\n 'unroute': { desc: 'Remove a route', usage: 'unroute <pattern>' },\r\n 'verify': { desc: 'Assert page state', usage: 'verify <type> <args>',\r\n examples: ['verify title \"My Page\"', 'verify text \"Hello\"', 'verify element button \"Submit\"'] },\r\n 'verify-element': { desc: 'Verify element exists by role', usage: 'verify-element <role> <name>' },\r\n 'verify-no-element': { desc: 'Verify element not exists', usage: 'verify-no-element <role> <name>' },\r\n 'verify-no-text': { desc: 'Verify text not visible', usage: 'verify-no-text <text>' },\r\n 'verify-text': { desc: 'Verify text visible', usage: 'verify-text <text>' },\r\n 'verify-title': { desc: 'Verify page title', usage: 'verify-title <text>' },\r\n 'verify-url': { desc: 'Verify page URL', usage: 'verify-url <text>' },\r\n 'verify-value': { desc: 'Verify input / checkbox / radio value', usage: 'verify-value <ref|text> <value>' },\r\n 'verify-visible': { desc: 'Verify element is visible by role', usage: 'verify-visible <role> <name>' },\r\n 'tracing-start': { desc: 'Start performance trace recording', usage: 'tracing-start' },\r\n 'tracing-stop': { desc: 'Stop tracing and save trace file', usage: 'tracing-stop' },\r\n 'video-start': { desc: 'Start recording the active tab', usage: 'video-start' },\r\n 'video-stop': { desc: 'Stop recording and save video', usage: 'video-stop' },\r\n 'wait-for-text': { desc: 'Wait until text appears', usage: 'wait-for-text <text>',\r\n examples: ['wait-for-text \"Loading complete\"'] },\r\n};\r\n\r\nexport const COMMAND_NAMES = Object.keys(COMMANDS);\r\n\r\nexport const CATEGORIES: Record<string, string[]> = {\r\n 'Navigation': ['goto', 'open', 'go-back', 'go-forward', 'reload'],\r\n 'Interaction': ['click', 'dblclick', 'fill', 'type', 'press', 'hover', 'select', 'check', 'uncheck', 'drag'],\r\n 'Verification': ['verify', 'verify-text', 'verify-no-text', 'verify-title', 'verify-url', 'verify-element', 'verify-no-element', 'verify-value', 'verify-visible', 'wait-for-text'],\r\n 'Inspection': ['snapshot', 'locator', 'screenshot', 'pdf', 'video-start', 'video-stop', 'tracing-start', 'tracing-stop', 'eval', 'run-code', 'console', 'network'],\r\n 'Tabs': ['tab-list', 'tab-new', 'tab-close', 'tab-select'],\r\n 'Cookies': ['cookie-list', 'cookie-get', 'cookie-set', 'cookie-delete', 'cookie-clear'],\r\n 'LocalStorage': ['localstorage-list', 'localstorage-get', 'localstorage-set', 'localstorage-delete', 'localstorage-clear'],\r\n 'SessionStorage': ['sessionstorage-list', 'sessionstorage-get', 'sessionstorage-set', 'sessionstorage-delete', 'sessionstorage-clear'],\r\n 'Other': ['highlight', 'export', 'resize', 'dialog-accept', 'dialog-dismiss', 'route', 'route-list', 'unroute'],\r\n};\r\n\r\n// ─── JavaScript mode help ────────────────────────────────────────────────────\r\n\r\nexport const JS_CATEGORIES: Record<string, string[]> = {\r\n 'Navigation': ['page.goto(url)', 'page.goBack()', 'page.reload()', '...'],\r\n 'Locators': ['page.getByRole(role)', 'page.getByText(text)', 'page.locator(sel)', 'page.getByTestId(id)', '...'],\r\n 'Actions': ['.click()', '.fill(value)', '.press(key)', '.hover()', '.selectOption(value)', '...'],\r\n 'Query': ['.textContent()', '.getAttribute(name)', '.isVisible()', '.count()', '...'],\r\n 'Assertions': ['expect(loc).toBeVisible()', '.toHaveText()', '.toHaveValue()', 'expect(page).toHaveTitle()', '.toHaveURL()', '...'],\r\n 'Wait': ['page.waitForSelector(sel)', 'page.waitForLoadState()', 'page.waitForURL(url)'],\r\n 'Evaluate': ['page.evaluate(() => expr)'],\r\n 'Other': ['page.screenshot()', 'page.keyboard.press(key)', 'page.mouse.click(x, y)', '...'],\r\n};\r\n\r\n// ─── Command parser ──────────────────────────────────────────────────────────\r\n/**\r\n * Transforms human input into executable JavaScript expressions.\r\n *\r\n * Pipeline: tokenize → resolveArgs → DirectExecution or TabOperation\r\n *\r\n * resolveArgs returns either:\r\n * - DirectExecution { jsExpr } — a JS string for swDebugEval (runs in SW where `page` is global)\r\n * - TabOperation { tabOp, tabArgs } — handled by background.ts via chrome.tabs APIs\r\n */\r\n\r\nimport {\r\n verifyText, verifyElement, verifyValue, verifyList,\r\n verifyTitle, verifyUrl, verifyNoText, verifyNoElement,\r\n verifyVisible, verifyInputValue, waitForText,\r\n actionByText, fillByText, selectByText, checkByText, uncheckByText,\r\n actionByRole, fillByRole, selectByRole,\r\n highlightByText, highlightByRole, highlightBySelector, highlightByRef, clearHighlight, chainAction, goBack, goForward,\r\n gotoUrl, reloadPage, waitMs, getTitle, getUrl,\r\n evalCode, runCode, takeScreenshot, takeSnapshot,\r\n refAction, pressKey, pressKeyByRole, typeText,\r\n localStorageGet, localStorageSet, localStorageDelete, localStorageClear, localStorageList,\r\n sessionStorageGet, sessionStorageSet, sessionStorageDelete, sessionStorageClear, sessionStorageList,\r\n cookieList, cookieGet, cookieSet, cookieDelete, cookieClear,\r\n dragDrop, resizeViewport, takePdf,\r\n getConsoleMessages, getNetworkRequests, setDialogAccept, setDialogDismiss,\r\n addRoute, listRoutes, removeRoute,\r\n tabList, tabNew, tabClose, tabSelect,\r\n} from './page-scripts';\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\nexport interface ParsedArgs {\r\n _: string[];\r\n nth?: string | number;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface DirectExecution {\r\n jsExpr: string;\r\n}\r\n\r\nexport type ParseResult =\r\n | DirectExecution\r\n | { help: string }\r\n | { error: string };\r\n\r\nfunction isDirect(result: ParsedArgs | DirectExecution): result is DirectExecution {\r\n return 'jsExpr' in result;\r\n}\r\n\r\n// ─── JS expression helpers ───────────────────────────────────────────────────\r\n\r\n/** Serialize a value for inline JS — undefined becomes the literal `undefined` */\r\nfunction ser(v: unknown): string {\r\n if (v === undefined) return 'undefined';\r\n return JSON.stringify(v);\r\n}\r\n\r\n/** Build a JS expression that calls a page-script function in the SW context (where `page` is global) */\r\nfunction call(fn: any, ...args: unknown[]): string {\r\n return `await (${fn.toString()})(page, ${args.map(ser).join(', ')})`;\r\n}\r\n\r\n// ─── Known boolean options ───────────────────────────────────────────────────\r\n\r\nconst BOOLEAN_OPTIONS = new Set([\r\n 'headed', 'persistent', 'extension', 'submit', 'clear',\r\n 'fullPage', 'includeStatic', 'exact',\r\n]);\r\n\r\n// ─── Tokenizer ───────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Tokenize input respecting quoted strings.\r\n * \"fill e7 'hello world'\" → [\"fill\", \"e7\", \"hello world\"]\r\n */\r\nfunction tokenize(line: string): string[] {\r\n const tokens: string[] = [];\r\n let current = '';\r\n let inQuote: string | null = null;\r\n\r\n for (let i = 0; i < line.length; i++) {\r\n const ch = line[i];\r\n if (inQuote) {\r\n if (ch === inQuote) {\r\n inQuote = null;\r\n } else {\r\n current += ch;\r\n }\r\n } else if (ch === '\"' || ch === \"'\") {\r\n inQuote = ch;\r\n } else if (ch === ' ' || ch === '\\t') {\r\n if (current) {\r\n tokens.push(current);\r\n current = '';\r\n }\r\n } else {\r\n current += ch;\r\n }\r\n }\r\n if (current) tokens.push(current);\r\n return tokens;\r\n}\r\n\r\n// ─── Parse Input ─────────────────────────────────────────────────────────────\r\n\r\n// Commands where everything after the keyword is a single raw argument\r\nconst RAW_COMMANDS = new Set(['run-code', 'eval']);\r\n\r\n/**\r\n * Parse a REPL input line into a ParsedArgs object.\r\n * Handles tokenization and option extraction.\r\n */\r\nfunction parseInput(line: string): ParsedArgs | null {\r\n const tokens = tokenize(line);\r\n if (tokens.length === 0) return null;\r\n\r\n tokens[0] = tokens[0].toLowerCase();\r\n\r\n // For run-code / eval, preserve the rest of the line as a single raw string\r\n if (RAW_COMMANDS.has(tokens[0])) {\r\n const cmdLen = line.match(/^\\s*\\S+/)![0].length;\r\n const rest = line.slice(cmdLen).trim();\r\n return rest ? { _: [tokens[0], rest] } : { _: [tokens[0]] };\r\n }\r\n\r\n // Simple option extraction (--key value or --flag)\r\n const positional: string[] = [];\r\n const opts: Record<string, unknown> = {};\r\n let i = 0;\r\n while (i < tokens.length) {\r\n if (tokens[i].startsWith('--')) {\r\n const key = tokens[i].slice(2);\r\n if (BOOLEAN_OPTIONS.has(key)) {\r\n opts[key] = true;\r\n i++;\r\n } else if (key === 'in' && i + 2 < tokens.length && !tokens[i + 1].startsWith('--') && !tokens[i + 2].startsWith('--')) {\r\n // --in takes two values: container role and text\r\n opts['in-role'] = tokens[i + 1];\r\n opts['in-text'] = tokens[i + 2];\r\n i += 3;\r\n } else if (i + 1 < tokens.length && !tokens[i + 1].startsWith('--')) {\r\n opts[key] = tokens[i + 1];\r\n i += 2;\r\n } else {\r\n opts[key] = true;\r\n i++;\r\n }\r\n } else {\r\n positional.push(tokens[i]);\r\n i++;\r\n }\r\n }\r\n\r\n return { _: positional, ...opts } as ParsedArgs;\r\n}\r\n\r\n// ─── Resolve Args ─────────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Map parsed args to DirectExecution (jsExpr) or TabOperation.\r\n * Returns null if no mapping found (→ error).\r\n */\r\nfunction resolveArgs(args: ParsedArgs): ParsedArgs | DirectExecution {\r\n const cmdName = args._[0];\r\n\r\n // ── Verify unified ──────────────────────────────────────────\r\n if (cmdName === 'verify') {\r\n const subType = args._[1];\r\n const rest = args._.slice(2);\r\n if (subType === 'title' && rest.length > 0)\r\n return { jsExpr: call(verifyTitle, rest.join(' ')) };\r\n if (subType === 'url' && rest.length > 0)\r\n return { jsExpr: call(verifyUrl, rest.join(' ')) };\r\n if (subType === 'text' && rest.length > 0)\r\n return { jsExpr: call(verifyText, rest.join(' ')) };\r\n if (subType === 'no-text' && rest.length > 0)\r\n return { jsExpr: call(verifyNoText, rest.join(' ')) };\r\n if (subType === 'element' && rest.length >= 2)\r\n return { jsExpr: call(verifyElement, rest[0], rest.slice(1).join(' ')) };\r\n if (subType === 'no-element' && rest.length >= 2)\r\n return { jsExpr: call(verifyNoElement, rest[0], rest.slice(1).join(' ')) };\r\n if (subType === 'value' && rest.length >= 2)\r\n return { jsExpr: call(verifyValue, rest[0], rest.slice(1).join(' ')) };\r\n if (subType === 'list' && rest.length >= 2)\r\n return { jsExpr: call(verifyList, rest[0], rest.slice(1)) };\r\n }\r\n\r\n // ── Legacy verify-* commands ────────────────────────────────\r\n const TEXT_VERIFY_CMDS = new Set(['verify-text', 'verify-no-text', 'verify-title', 'verify-url']);\r\n const ELEMENT_VERIFY_CMDS = new Set(['verify-element', 'verify-no-element', 'verify-visible']);\r\n const verifyFns: Record<string, any> = {\r\n 'verify-text': verifyText,\r\n 'verify-element': verifyElement,\r\n 'verify-visible': verifyVisible,\r\n 'verify-value': verifyValue,\r\n 'verify-list': verifyList,\r\n 'verify-title': verifyTitle,\r\n 'verify-url': verifyUrl,\r\n 'verify-no-text': verifyNoText,\r\n 'verify-no-element': verifyNoElement,\r\n };\r\n if (verifyFns[cmdName]) {\r\n const pos = args._.slice(1);\r\n const fn = verifyFns[cmdName];\r\n if (TEXT_VERIFY_CMDS.has(cmdName)) {\r\n const text = pos.join(' ');\r\n if (text) return { jsExpr: call(fn, text) };\r\n } else if (ELEMENT_VERIFY_CMDS.has(cmdName)) {\r\n if (pos[0] && pos.length >= 2) return { jsExpr: call(fn, pos[0], pos.slice(1).join(' ')) };\r\n } else if (cmdName === 'verify-value' && pos[0] && pos.length >= 2) {\r\n const isRef = /^e\\d+$/.test(pos[0]);\r\n const valueFn = isRef ? verifyValue : verifyInputValue;\r\n return { jsExpr: call(valueFn, pos[0], pos.slice(1).join(' ')) };\r\n } else if (pos[0] && pos.length >= 2) {\r\n const rest = cmdName === 'verify-list' ? pos.slice(1) : pos.slice(1).join(' ');\r\n return { jsExpr: call(fn, pos[0], rest) };\r\n }\r\n }\r\n\r\n // ── Wait-for-text ──────────────────────────────────────────\r\n if (cmdName === 'wait-for-text') {\r\n const text = args._.slice(1).join(' ');\r\n if (text) return { jsExpr: call(waitForText, text) };\r\n }\r\n\r\n // ── Navigation ──────────────────────────────────────────────\r\n if (cmdName === 'goto' || cmdName === 'open') {\r\n const url = args._[1];\r\n if (!url) return args; // let error bubble\r\n return { jsExpr: call(gotoUrl, url) };\r\n }\r\n if (cmdName === 'reload')\r\n return { jsExpr: call(reloadPage) };\r\n if (cmdName === 'go-back')\r\n return { jsExpr: call(goBack) };\r\n if (cmdName === 'go-forward')\r\n return { jsExpr: call(goForward) };\r\n\r\n // ── Page info ───────────────────────────────────────────────\r\n if (cmdName === 'title')\r\n return { jsExpr: call(getTitle) };\r\n if (cmdName === 'url')\r\n return { jsExpr: call(getUrl) };\r\n\r\n // ── Wait ────────────────────────────────────────────────────\r\n if (cmdName === 'wait') {\r\n const ms = parseInt(args._[1]) || 1000;\r\n return { jsExpr: call(waitMs, ms) };\r\n }\r\n\r\n // ── Eval ────────────────────────────────────────────────────\r\n if (cmdName === 'eval') {\r\n const code = args._[1] || '';\r\n return { jsExpr: call(evalCode, code) };\r\n }\r\n\r\n // ── Run code (normally intercepted by run.ts before reaching executeCommand) ──\r\n if (cmdName === 'run-code') {\r\n const code = args._[1] || '';\r\n return { jsExpr: call(runCode, code) };\r\n }\r\n\r\n // ── Screenshot ──────────────────────────────────────────────\r\n // Wrapped in JSON.stringify so bridge.ts can detect the __image result\r\n if (cmdName === 'screenshot')\r\n return { jsExpr: `JSON.stringify(await (${takeScreenshot.toString()})(page, ${!!(args.fullPage)}))` };\r\n\r\n // ── PDF ─────────────────────────────────────────────────────\r\n if (cmdName === 'pdf')\r\n return { jsExpr: `JSON.stringify(await (${takePdf.toString()})(page))` };\r\n\r\n // ── Snapshot ────────────────────────────────────────────────\r\n if (cmdName === 'snapshot')\r\n return { jsExpr: call(takeSnapshot) };\r\n\r\n // ── Highlight ───────────────────────────────────────────────\r\n if (cmdName === 'highlight') {\r\n if (args.clear) return { jsExpr: call(clearHighlight) };\r\n const loc = args._[1];\r\n if (loc) {\r\n // highlight <ref> → use aria-ref selector\r\n if (/^e\\d+$/.test(loc)) return { jsExpr: call(highlightByRef, loc) };\r\n const nth = args.nth !== undefined ? parseInt(String(args.nth), 10) : undefined;\r\n const exact = args.exact ? true : undefined;\r\n const isSelector = /[.#[\\]>:=]/.test(loc);\r\n // highlight <role> \"<name>\" → getByRole(role, { name })\r\n if (!isSelector && args._.length >= 3 && /^[a-z]+$/.test(loc)) {\r\n const name = args._.slice(2).join(' ');\r\n return { jsExpr: call(highlightByRole, loc, name, nth) };\r\n }\r\n return isSelector\r\n ? { jsExpr: call(highlightBySelector, loc, nth) }\r\n : { jsExpr: call(highlightByText, loc, nth, exact) };\r\n }\r\n }\r\n\r\n // ── >> chaining ─────────────────────────────────────────────\r\n const LOCATOR_ACTIONS: Record<string, string> = {\r\n click: 'click', dblclick: 'dblclick', hover: 'hover',\r\n check: 'check', uncheck: 'uncheck',\r\n fill: 'fill', select: 'selectOption',\r\n };\r\n if (LOCATOR_ACTIONS[cmdName] && args._.some(a => a.includes('>>'))) {\r\n const action = LOCATOR_ACTIONS[cmdName];\r\n const positional = args._.slice(1);\r\n\r\n let lastChainIdx = -1;\r\n for (let i = 0; i < positional.length; i++) {\r\n if (positional[i] === '>>' || positional[i].includes('>>')) lastChainIdx = i;\r\n }\r\n const selectorEnd = positional[lastChainIdx] !== '>>' && positional[lastChainIdx]?.includes('>>')\r\n ? lastChainIdx\r\n : lastChainIdx + 1;\r\n const selector = positional.slice(0, selectorEnd + 1).join(' ');\r\n const rest = positional.slice(selectorEnd + 1).join(' ');\r\n\r\n return { jsExpr: call(chainAction, selector, action, rest || undefined) };\r\n }\r\n\r\n // ── Role-based locators (e.g. click tab \"npm\" --nth 0) ─────\r\n const ROLE_ACTIONS: Record<string, string> = {\r\n click: 'click', dblclick: 'dblclick', hover: 'hover',\r\n check: 'check', uncheck: 'uncheck',\r\n };\r\n if (args._.length >= 3 && args._[1] && /^[a-z]+$/.test(args._[1]) && !args._.some(a => a.includes('>>'))) {\r\n const role = args._[1];\r\n const nth = args.nth !== undefined ? parseInt(String(args.nth), 10) : undefined;\r\n const inRole = args['in-role'] !== undefined ? String(args['in-role']) : undefined;\r\n const inText = args['in-text'] !== undefined ? String(args['in-text']) : undefined;\r\n if (ROLE_ACTIONS[cmdName]) {\r\n const name = args._.slice(2).join(' ');\r\n return { jsExpr: call(actionByRole, role, name, ROLE_ACTIONS[cmdName], nth, inRole, inText) };\r\n }\r\n if (cmdName === 'fill') {\r\n return { jsExpr: call(fillByRole, role, args._[2], args._.slice(3).join(' ') || '', nth, inRole, inText) };\r\n }\r\n if (cmdName === 'select') {\r\n return { jsExpr: call(selectByRole, role, args._[2], args._.slice(3).join(' ') || '', nth, inRole, inText) };\r\n }\r\n if (cmdName === 'press') {\r\n const key = args._.slice(3).join(' ') || '';\r\n return { jsExpr: call(pressKeyByRole, role, args._[2], key, nth, inRole, inText) };\r\n }\r\n }\r\n\r\n // ── Text locators ───────────────────────────────────────────\r\n const textFns: Record<string, any> = {\r\n click: actionByText, dblclick: actionByText, hover: actionByText,\r\n fill: fillByText, select: selectByText,\r\n check: checkByText, uncheck: uncheckByText,\r\n };\r\n if (textFns[cmdName] && args._[1] && !/^e\\d+$/.test(args._[1]) && !args._.some(a => a.includes('>>'))) {\r\n const textArg = args._[1];\r\n const extraArgs = args._.slice(2);\r\n const fn = textFns[cmdName];\r\n const nth = args.nth !== undefined ? parseInt(String(args.nth), 10) : undefined;\r\n const exact = args.exact ? true : undefined;\r\n if (fn === actionByText)\r\n return { jsExpr: call(fn, textArg, cmdName, nth, exact) };\r\n if (cmdName === 'fill' || cmdName === 'select')\r\n return { jsExpr: call(fn, textArg, extraArgs[0] || '', nth, exact) };\r\n return { jsExpr: call(fn, textArg, nth, exact) };\r\n }\r\n\r\n // ── Ref-based actions (e5, e7, ...) ─────────────────────────\r\n const REF_ACTIONS: Record<string, string> = {\r\n click: 'click', dblclick: 'dblclick', hover: 'hover',\r\n check: 'check', uncheck: 'uncheck',\r\n fill: 'fill', select: 'selectOption', type: 'fill',\r\n };\r\n if (REF_ACTIONS[cmdName] && args._[1] && /^e\\d+$/.test(args._[1])) {\r\n const ref = args._[1];\r\n const action = REF_ACTIONS[cmdName];\r\n const value = args._.slice(2).join(' ') || undefined;\r\n return { jsExpr: call(refAction, ref, action, value) };\r\n }\r\n\r\n // ── Press ───────────────────────────────────────────────────\r\n if (cmdName === 'press') {\r\n const pos = args._.slice(1);\r\n if (pos.length === 1) {\r\n return { jsExpr: call(pressKey, pos[0], pos[0]) };\r\n }\r\n if (pos.length >= 2) {\r\n return { jsExpr: call(pressKey, pos[0], pos[1]) };\r\n }\r\n }\r\n\r\n // ── Type ────────────────────────────────────────────────────\r\n if (cmdName === 'type') {\r\n const text = args._.slice(1).join(' ');\r\n if (text) return { jsExpr: call(typeText, text) };\r\n }\r\n\r\n // ── localStorage ────────────────────────────────────────────\r\n if (cmdName === 'localstorage-get')\r\n return { jsExpr: call(localStorageGet, args._[1]) };\r\n if (cmdName === 'localstorage-set')\r\n return { jsExpr: call(localStorageSet, args._[1], args._.slice(2).join(' ')) };\r\n if (cmdName === 'localstorage-delete')\r\n return { jsExpr: call(localStorageDelete, args._[1]) };\r\n if (cmdName === 'localstorage-clear')\r\n return { jsExpr: call(localStorageClear) };\r\n if (cmdName === 'localstorage-list')\r\n return { jsExpr: call(localStorageList) };\r\n\r\n // ── sessionStorage ──────────────────────────────────────────\r\n if (cmdName === 'sessionstorage-get')\r\n return { jsExpr: call(sessionStorageGet, args._[1]) };\r\n if (cmdName === 'sessionstorage-set')\r\n return { jsExpr: call(sessionStorageSet, args._[1], args._.slice(2).join(' ')) };\r\n if (cmdName === 'sessionstorage-delete')\r\n return { jsExpr: call(sessionStorageDelete, args._[1]) };\r\n if (cmdName === 'sessionstorage-clear')\r\n return { jsExpr: call(sessionStorageClear) };\r\n if (cmdName === 'sessionstorage-list')\r\n return { jsExpr: call(sessionStorageList) };\r\n\r\n // ── Cookies ─────────────────────────────────────────────────\r\n if (cmdName === 'cookie-list')\r\n return { jsExpr: call(cookieList) };\r\n if (cmdName === 'cookie-get')\r\n return { jsExpr: call(cookieGet, args._[1]) };\r\n if (cmdName === 'cookie-set')\r\n return { jsExpr: call(cookieSet, args._[1], args._.slice(2).join(' ')) };\r\n if (cmdName === 'cookie-delete')\r\n return { jsExpr: call(cookieDelete, args._[1]) };\r\n if (cmdName === 'cookie-clear')\r\n return { jsExpr: call(cookieClear) };\r\n\r\n // ── Tabs ────────────────────────────────────────────────────\r\n if (cmdName === 'tab-list')\r\n return { jsExpr: call(tabList) };\r\n if (cmdName === 'tab-new')\r\n return { jsExpr: call(tabNew, args._[1]) };\r\n if (cmdName === 'tab-close') {\r\n const idx = args._[1] ? parseInt(args._[1]) : undefined;\r\n return { jsExpr: call(tabClose, idx) };\r\n }\r\n if (cmdName === 'tab-select') {\r\n const idx = args._[1] ? parseInt(args._[1]) : NaN;\r\n if (isNaN(idx)) return args; // let error bubble\r\n return { jsExpr: call(tabSelect, idx) };\r\n }\r\n\r\n // ── Drag ────────────────────────────────────────────────────\r\n if (cmdName === 'drag' && args._[1] && args._[2])\r\n return { jsExpr: call(dragDrop, args._[1], args._[2]) };\r\n\r\n // ── Resize ─────────────────────────────────────────────────\r\n if (cmdName === 'resize' && args._[1] && args._[2])\r\n return { jsExpr: call(resizeViewport, args._[1], args._[2]) };\r\n\r\n // ── Console / Network ─────────────────────────────────────\r\n if (cmdName === 'console')\r\n return { jsExpr: call(getConsoleMessages, args.clear) };\r\n if (cmdName === 'network')\r\n return { jsExpr: call(getNetworkRequests, args.clear, args.includeStatic) };\r\n\r\n // ── Dialog ────────────────────────────────────────────────\r\n if (cmdName === 'dialog-accept')\r\n return { jsExpr: call(setDialogAccept) };\r\n if (cmdName === 'dialog-dismiss')\r\n return { jsExpr: call(setDialogDismiss) };\r\n\r\n // ── Routes ────────────────────────────────────────────────\r\n if (cmdName === 'route' && args._[1])\r\n return { jsExpr: call(addRoute, args._[1]) };\r\n if (cmdName === 'route-list')\r\n return { jsExpr: call(listRoutes) };\r\n if (cmdName === 'unroute' && args._[1])\r\n return { jsExpr: call(removeRoute, args._[1]) };\r\n\r\n return args;\r\n}\r\n\r\n// ─── Main entry point ────────────────────────────────────────────────────────\r\n\r\nexport function parseReplCommand(input: string): ParseResult {\r\n const tokens = tokenize(input.trim());\r\n if (tokens.length === 0) return { error: 'Empty command' };\r\n\r\n // ── Help (local command, never sent to the bridge) ──\r\n const trimmed = input.trim().toLowerCase();\r\n if (trimmed === 'help') {\r\n const lines = Object.entries(CATEGORIES)\r\n .map(([cat, cmds]) => ` ${cat}: ${cmds.join(', ')}`)\r\n .join('\\n');\r\n return { help: `Available commands:\\n${lines}\\n\\nType \"help <command>\" for details.` };\r\n }\r\n if (trimmed.startsWith('help ')) {\r\n const cmd = trimmed.slice(5).trim();\r\n if (cmd === 'js' || cmd === 'javascript') {\r\n const jsLines = Object.entries(JS_CATEGORIES)\r\n .map(([cat, methods]) => ` ${cat}: ${methods.join(', ')}`)\r\n .join('\\n');\r\n return { help: `JavaScript mode — Playwright API:\\n Prefix with await for async methods\\n\\n${jsLines}` };\r\n }\r\n const info = COMMANDS[cmd];\r\n if (!info) return { error: `Unknown command: \"${cmd}\". Type \"help\" for available commands.` };\r\n const parts = [`${cmd} — ${info.desc}`];\r\n if (info.usage) parts.push(`Usage: ${info.usage}`);\r\n if (info.examples?.length) {\r\n parts.push('Examples:');\r\n for (const ex of info.examples) parts.push(` ${ex}`);\r\n }\r\n return { help: parts.join('\\n') };\r\n }\r\n\r\n // ── Locator (resolve aria-ref via Playwright) ──\r\n if (trimmed.startsWith('locator ')) {\r\n const ref = trimmed.slice('locator '.length).trim();\r\n if (!ref) return { error: 'Usage: locator <ref>\\nExample: locator e5' };\r\n return { jsExpr: `(await page.locator(${ser('aria-ref=' + ref)}).normalize()).toString()` };\r\n }\r\n\r\n // Parse input (tokenize + alias + options)\r\n const args = parseInput(input);\r\n if (!args) return { error: 'Empty command' };\r\n\r\n // Resolve to DirectExecution, TabOperation, or unrecognised ParsedArgs\r\n const resolved = resolveArgs(args);\r\n\r\n // DirectExecution\r\n if (isDirect(resolved)) return resolved;\r\n\r\n // Unknown command\r\n const cmdName = args._[0];\r\n return { error: `Unknown command: \"${cmdName}\". Type \"help\" for commands.` };\r\n}\r\n","import { COMMAND_NAMES } from '@/lib/commands';\r\n\r\nconst PW_COMMANDS = new Set(COMMAND_NAMES);\r\n\r\n/**\r\n * Resolve the execution mode for console input.\r\n * Multi-line input always runs as JS (AsyncFunction supports await).\r\n */\r\nexport function resolveConsoleMode(input: string): 'js' | 'pw' {\r\n if (input.includes('\\n')) return 'js';\r\n return detectMode(input);\r\n}\r\n\r\nconst JS_KEYWORDS = new Set(['await', 'typeof', 'delete', 'void', 'throw', 'new', 'yield', 'async']);\r\n\r\n/** Only known PW commands run in pw mode; everything else is JS. */\r\nexport function detectMode(input: string): 'js' | 'pw' {\r\n const firstToken = input.trim().split(/\\s+/)[0];\r\n if (PW_COMMANDS.has(firstToken.toLowerCase())) return 'pw';\r\n // Bare lowercase word with args, no JS syntax → likely a misspelled command\r\n if (/^[a-z][-a-z]*$/.test(firstToken) && !JS_KEYWORDS.has(firstToken) && input.includes(' ') && !/[.()=;{}[\\]+*/<>!&|^~?:`]/.test(input)) return 'pw';\r\n return 'js';\r\n}\r\n","/**\r\n * Shared CDP debugger core — attaches to the extension's service worker target\r\n * and provides low-level helpers for Runtime.evaluate, callFunctionOn, and getProperties.\r\n *\r\n * Used by both background.ts (bridge eval) and panel/lib/sw-debugger.ts (panel eval).\r\n * Vite bundles a copy into each entry point.\r\n */\r\n\r\nlet swTargetId: string | null = null;\r\n\r\nif (typeof chrome !== 'undefined' && chrome.debugger) {\r\n chrome.debugger.onDetach.addListener((source) => {\r\n if (source.targetId === swTargetId) swTargetId = null;\r\n });\r\n}\r\n\r\n// ─── Target Discovery ────────────────────────────────────────────────────────\r\n\r\nfunction querySwTarget(): Promise<string | null> {\r\n const swUrl = `chrome-extension://${chrome.runtime.id}/background.js`;\r\n return new Promise(resolve => {\r\n chrome.debugger.getTargets(targets => {\r\n const sw = targets.find(t => t.type === 'worker' && t.url === swUrl);\r\n resolve(sw?.id ?? null);\r\n });\r\n });\r\n}\r\n\r\nasync function findSwTarget(): Promise<string | null> {\r\n // Wake the SW and wait for it to confirm it's alive before polling\r\n await chrome.runtime.sendMessage({ type: 'ping' }).catch(() => { /* SW may not be ready yet */ });\r\n // Poll until it appears as a debuggable target (up to ~1s)\r\n for (let i = 0; i < 10; i++) {\r\n const id = await querySwTarget();\r\n if (id) return id;\r\n await new Promise(r => setTimeout(r, 100));\r\n }\r\n return null;\r\n}\r\n\r\n// ─── Attach ──────────────────────────────────────────────────────────────────\r\n\r\nexport async function ensureAttached(): Promise<string> {\r\n // Fast path: already attached\r\n if (swTargetId) return swTargetId;\r\n const targetId = await findSwTarget();\r\n if (!targetId) throw new Error('Background worker target not found. Try reloading the extension.');\r\n if (swTargetId === targetId) return targetId;\r\n await new Promise<void>((resolve, reject) => {\r\n chrome.debugger.attach({ targetId }, '1.3', () => {\r\n if (chrome.runtime.lastError) {\r\n const msg = chrome.runtime.lastError.message ?? '';\r\n if (/already attached/i.test(msg)) { swTargetId = targetId; resolve(); }\r\n else reject(new Error(msg));\r\n } else {\r\n chrome.debugger.sendCommand({ targetId }, 'Runtime.enable', {}, () => {});\r\n swTargetId = targetId; resolve();\r\n }\r\n });\r\n });\r\n return targetId;\r\n}\r\n\r\nexport function resetTargetId() { swTargetId = null; }\r\nexport function getTargetId() { return swTargetId; }\r\n\r\n// ─── Generic CDP Command ─────────────────────────────────────────────────────\r\n\r\nexport async function cdpSendCommand(method: string, params: Record<string, unknown> = {}): Promise<any> {\r\n const targetId = await ensureAttached();\r\n return new Promise((resolve, reject) => {\r\n chrome.debugger.sendCommand({ targetId }, method, params, (result: any) => {\r\n if (chrome.runtime.lastError) {\r\n reject(new Error(chrome.runtime.lastError.message));\r\n } else {\r\n resolve(result);\r\n }\r\n });\r\n });\r\n}\r\n\r\n// ─── Runtime.evaluate ────────────────────────────────────────────────────────\r\n\r\n/**\r\n * Evaluate a JS expression in the service worker's runtime.\r\n * Wraps `{…}` in parens so V8 parses object literals correctly.\r\n * Returns the raw CDP result object (not exceptionDetails — those throw).\r\n */\r\nexport async function cdpEval(expression: string, objectGroup = 'console'): Promise<any> {\r\n const expr = expression.trimStart().startsWith('{') ? `(${expression})` : expression;\r\n const targetId = await ensureAttached();\r\n const result = await new Promise<any>((resolve, reject) => {\r\n chrome.debugger.sendCommand(\r\n { targetId },\r\n 'Runtime.evaluate',\r\n { expression: expr, awaitPromise: true, returnByValue: false, generatePreview: true, objectGroup, replMode: true },\r\n (res: any) => {\r\n if (chrome.runtime.lastError) {\r\n swTargetId = null;\r\n reject(new Error(chrome.runtime.lastError.message));\r\n } else {\r\n resolve(res);\r\n }\r\n }\r\n );\r\n });\r\n if (result?.exceptionDetails) {\r\n const msg = result.exceptionDetails.exception?.description\r\n ?? result.exceptionDetails.text ?? 'Unknown error';\r\n throw new Error(msg);\r\n }\r\n return result?.result;\r\n}\r\n\r\n// ─── Runtime.callFunctionOn ──────────────────────────────────────────────────\r\n\r\nexport async function cdpCallFunctionOn(\r\n objectId: string,\r\n functionDeclaration: string,\r\n returnByValue = true,\r\n): Promise<any> {\r\n return cdpSendCommand('Runtime.callFunctionOn', {\r\n objectId, functionDeclaration, returnByValue,\r\n });\r\n}\r\n\r\n// ─── Runtime.getProperties ───────────────────────────────────────────────────\r\n\r\nexport async function cdpGetProperties(objectId: string): Promise<any> {\r\n return cdpSendCommand('Runtime.getProperties', {\r\n objectId, ownProperties: true, generatePreview: true,\r\n });\r\n}\r\n\r\n// ─── Debug helper ────────────────────────────────────────────────────────────\r\n\r\n/** Debug helper — call from console: (await import('...')).swDebugTargets() */\r\nexport function swDebugTargets(): Promise<chrome.debugger.TargetInfo[]> {\r\n return new Promise(resolve => chrome.debugger.getTargets(resolve));\r\n}\r\n"],"names":["c"],"mappings":"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"}