chenglou/pretext · error · Error

Unsupported browser ${browser}; expected chrome or safari

Error message

Unsupported browser ${browser}; expected chrome or safari

What it means

Thrown by the taxonomy script's `parseBrowser` when the resolved browser is neither `chrome` nor `safari`. Resolution order: `--browser=`, then `CORPUS_CHECK_BROWSER` env, then `chrome`.

Source

Thrown at scripts/corpus-taxonomy.ts:84

  const raw = parseStringFlag(name)
  if (raw === null) return fallback
  const parsed = Number.parseInt(raw, 10)
  if (!Number.isFinite(parsed)) throw new Error(`Invalid value for --${name}: ${raw}`)
  return parsed
}

function parseOptionalNumberFlag(name: string): number | null {
  const raw = parseStringFlag(name)
  if (raw === null) return null
  const parsed = Number.parseInt(raw, 10)
  if (!Number.isFinite(parsed)) throw new Error(`Invalid value for --${name}: ${raw}`)
  return parsed
}

function parseBrowser(value: string | null): BrowserKind {
  const browser = (value ?? process.env['CORPUS_CHECK_BROWSER'] ?? 'chrome').toLowerCase()
  if (browser !== 'chrome' && browser !== 'safari') {
    throw new Error(`Unsupported browser ${browser}; expected chrome or safari`)
  }
  return browser
}

async function loadSources(): Promise<CorpusMeta[]> {
  return await Bun.file('corpora/sources.json').json()
}

function getTargetWidths(meta: CorpusMeta, start: number, end: number, step: number, samples: number | null): number[] {
  const min = Math.max(start, meta.min_width ?? start)
  const max = Math.min(end, meta.max_width ?? end)

  if (samples !== null) {
    if (samples === 1) return [Math.round((min + max) / 2)]
    const sampled = new Set<number>()
    for (let i = 0; i < samples; i++) {
      const ratio = i / (samples - 1)
      sampled.add(Math.round(min + (max - min) * ratio))

View on GitHub (pinned to ac49b09b7d)

Solutions

  1. Use `--browser=chrome` or `--browser=safari`.
  2. Unset or correct `CORPUS_CHECK_BROWSER`.
  3. For Firefox, use the accuracy/checker paths instead.

Example fix

// before
CORPUS_CHECK_BROWSER=firefox bun run scripts/corpus-taxonomy.ts --id=...
// after
CORPUS_CHECK_BROWSER=chrome bun run scripts/corpus-taxonomy.ts --id=...
Defensive patterns

Strategy: validation

Validate before calling

const raw = (parseStringFlag('browser') ?? process.env['CORPUS_CHECK_BROWSER'] ?? 'chrome').toLowerCase()
if (raw !== 'chrome' && raw !== 'safari') {
  console.error(`Unsupported browser ${raw}; expected chrome or safari`)
  process.exit(2)
}

Type guard

const isSupportedBrowser = (v: string): v is 'chrome' | 'safari' =>
  v === 'chrome' || v === 'safari'

Prevention

When it happens

Trigger: `--browser=firefox` or `CORPUS_CHECK_BROWSER=edge bun run scripts/corpus-taxonomy.ts ...`.

Common situations: Wanting Firefox (unsupported by these corpus scripts); stale env var; a typo.

Related errors


AI-assisted analysis of chenglou/pretext@ac49b09b7d (2026-08-12). Data as JSON: /api/errors/851085c9682d9fc5. Report an issue: GitHub.