#!/usr/bin/env bun const routeGroups = { topLevel: [ '/', '/categories', '/devices', '/benchmarks', '/games', '/apple-silicon-app-test' ], dynamic: [ '/app/kicad-eda', '/app/spotify', '/formula/bash', '/kind/developer-tools', '/device/m1-imac', '/app/expressvpn/benchmarks' ], video: [ '/tv/apple-silicon-gaming-is-here', '/tv/install-instagram-app-on-m1-macbook-air-apple-silicon-tutorial-i-vfbmworal6i', '/tv/xamarin-and-visual-studio-on-apple-macbook-pro-13-m1-in-4k-i-rwpspmmlos', '/tv/watch-this-before-buying-apple-m1-macbook-for-xampp-or-apple-silicon-tests-in-4k-i-ebwwewsis8s' ] } function parseHosts(rawHosts) { const source = rawHosts && rawHosts.trim().length > 0 ? rawHosts : 'doesitarm.com' return source .split(',') .map(host => host.trim()) .filter(Boolean) .map(host => host.startsWith('http://') || host.startsWith('https://') ? host : `https://${host}`) } function getPaths() { return Object.values(routeGroups).flat() } function extractTitle(html) { const match = html.match(/([^<]+)<\/title>/i) return match ? match[1].trim() : '' } async function runCheck(host, path) { const url = new URL(path, host) const response = await fetch(url, { redirect: 'follow', headers: { 'user-agent': 'doesitarm-health-check' } }) const html = await response.text() const finalUrl = response.url return { host: new URL(host).host, path, status: response.status, ok: response.ok, finalPath: new URL(finalUrl).pathname, title: extractTitle(html) } } const hosts = parseHosts(process.argv[2] || '') const paths = getPaths() console.log(`Checking ${paths.length} routes across ${hosts.length} host(s)`) let hasFailures = false for (const host of hosts) { console.log(`\nHost: ${new URL(host).host}`) const results = await Promise.all(paths.map(path => runCheck(host, path))) for (const result of results) { const statusLabel = result.ok ? 'PASS' : 'FAIL' const redirectSuffix = result.finalPath !== result.path ? ` -> ${result.finalPath}` : '' const titleSuffix = result.title.length > 0 ? ` | ${result.title}` : '' console.log(`${statusLabel} ${result.status} ${result.path}${redirectSuffix}${titleSuffix}`) } const failures = results.filter(result => !result.ok) if (failures.length > 0) { hasFailures = true console.log(`Failures: ${failures.length}`) } else { console.log('Failures: 0') } } if (hasFailures) { process.exit(1) }