"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PlaywrightScriptExporter = void 0; class PlaywrightScriptExporter { generate(finding) { const trace = finding.actionTrace; const lines = [ '// Auto-generated replay script by ABE (Autonomous Bug Explorer)', `// Generated at: ${new Date().toISOString()}`, `// Finding ID: ${finding.id.toString()}`, `// Type: ${finding.type.value} | Severity: ${finding.severity.value}`, `// Steps: ${trace.length}`, '', "const { chromium } = require('playwright');", '', '(async () => {', ' const browser = await chromium.launch({ headless: true });', ' const context = await browser.newContext();', ' const page = await context.newPage();', '', ]; for (let i = 0; i < trace.length; i++) { const action = trace[i]; lines.push(` // Step ${i + 1}: ${action.type} (seed=${action.seed})`); switch (action.type) { case 'navigate': lines.push(` await page.goto(${JSON.stringify(action.url)});`); break; case 'click': lines.push(` await page.locator(${JSON.stringify(action.selector)}).first().click();`); break; case 'fill': lines.push(` await page.locator(${JSON.stringify(action.selector)}).first().fill(${JSON.stringify(action.value ?? '')});`); break; case 'select': lines.push(` await page.locator(${JSON.stringify(action.selector)}).first().selectOption(${JSON.stringify(action.value ?? '')});`); break; case 'submit': lines.push(` await page.locator(${JSON.stringify(action.selector)}).first().dispatchEvent('submit');`); break; } lines.push(''); } lines.push(" console.log('Replay complete');", ' await browser.close();', '})();'); return lines.join('\n'); } } exports.PlaywrightScriptExporter = PlaywrightScriptExporter;