#!/usr/bin/env node
/**
* フロントのみ 8474 で立ち上げて Puppeteer でスクリーンショット取得。Tauri 不要。
* 使い方: node tools/debug-ui-with-serve.mjs
* 出力: tmp/debug-ui-screenshot-settings.png 等。終了時に 8474 のプロセスを停止する。
*/
import { spawn, spawnSync } from 'child_process';
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const root = path.resolve(__dirname, '..');
async function waitFor(url, maxMs = 5000) {
const deadline = Date.now() + maxMs;
while (Date.now() < deadline) {
try {
const r = await fetch(url, { method: 'HEAD', signal: AbortSignal.timeout(1500) });
if (r.ok) return true;
} catch (_) {}
await new Promise((r) => setTimeout(r, 300));
}
return false;
}
async function main() {
// 8474 を空ける
const kill = spawnSync('node', ['tools/kill-ports.mjs'], { cwd: root, stdio: 'pipe' });
if (kill.status !== 0) {
console.warn('kill-ports:', kill.stderr?.toString() || kill.stdout?.toString());
}
const server = spawn('node', ['tools/serve-frontend.mjs'], {
cwd: root,
stdio: ['ignore', 'pipe', 'pipe'],
shell: false,
});
let closed = false;
server.on('error', (e) => {
console.error('serve-frontend error:', e.message);
closed = true;
});
server.on('exit', () => { closed = true; });
server.stderr?.on('data', (d) => process.stderr.write(d));
server.stdout?.on('data', (d) => process.stdout.write(d));
try {
const ok = await waitFor('http://127.0.0.1:8474');
if (!ok) {
console.error('8474 が起動しませんでした');
process.exitCode = 1;
return;
}
const r = spawnSync('node', ['tools/debug-ui-puppeteer.mjs'], {
cwd: root,
stdio: 'inherit',
env: { ...process.env, DEBUG_UI_URL: 'http://127.0.0.1:8474' },
});
process.exitCode = r.status ?? (r.signal ? 128 : 0);
} finally {
if (!closed && server.pid) {
try {
process.kill(server.pid, 'SIGTERM');
} catch (_) {}
}
}
}
main();