"use strict"; /** * PlaywrightReproducer — serializes an action trace and generates a * deterministic Playwright script for replay. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.PlaywrightReproducer = void 0; class PlaywrightReproducer { serialize(trace) { return JSON.stringify(trace, null, 2); } deserialize(raw) { const parsed = JSON.parse(raw); if (!Array.isArray(parsed)) { throw new Error('PlaywrightReproducer.deserialize: expected a JSON array'); } return parsed; } generateScript(trace) { const lines = [ '// Auto-generated replay script by ABE (Autonomous Bug Explorer)', `// Generated at: ${new Date().toISOString()}`, `// 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.PlaywrightReproducer = PlaywrightReproducer;