#!/usr/bin/env node import fs from 'fs'; import os from 'os'; import path from 'path'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const projectRoot = path.resolve(__dirname, '..'); const outputDir = path.join(projectRoot, '.electron-build', 'ms-playwright'); function findBrowserCache() { const envPath = process.env.PLAYWRIGHT_BROWSERS_PATH; if (envPath && envPath !== '0' && fs.existsSync(envPath)) return envPath; const candidates = [ path.join(os.homedir(), 'Library', 'Caches', 'ms-playwright'), path.join(os.homedir(), '.cache', 'ms-playwright'), path.join(process.env.LOCALAPPDATA || '', 'ms-playwright'), ].filter(Boolean); return candidates.find((candidate) => fs.existsSync(candidate)) || ''; } function copyDirectoryContents(sourceDir, targetDir) { const entries = fs.readdirSync(sourceDir, { withFileTypes: true }); for (const entry of entries) { const sourcePath = path.join(sourceDir, entry.name); const targetPath = path.join(targetDir, entry.name); if (entry.isDirectory()) { fs.cpSync(sourcePath, targetPath, { recursive: true, force: true }); } else if (entry.isFile()) { fs.copyFileSync(sourcePath, targetPath); } } } fs.rmSync(outputDir, { recursive: true, force: true }); fs.mkdirSync(outputDir, { recursive: true }); const browserCache = findBrowserCache(); if (!browserCache) { console.log('[prepare-electron-browsers] No Playwright browser cache found. Packaging will continue without bundled browsers.'); process.exit(0); } copyDirectoryContents(browserCache, outputDir); console.log(`[prepare-electron-browsers] Copied browsers from ${browserCache} -> ${outputDir}`);