{"record":{"id":"36fff8e7630b760d","repo":"chenglou/pretext","slug":"unsupported-browser-browser-36fff8","errorCode":null,"errorMessage":"Unsupported browser ${browser}","messagePattern":"Unsupported browser (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/pre-wrap-check.ts","lineNumber":63,"sourceCode":"  const raw = parseStringFlag(name)\n  if (raw === null) return fallback\n  const parsed = Number.parseInt(raw, 10)\n  if (!Number.isFinite(parsed)) throw new Error(`Invalid value for --${name}: ${raw}`)\n  return parsed\n}\n\nfunction parseBrowsers(value: string | null): AutomationBrowserKind[] {\n  const raw = (value ?? 'chrome,safari').trim()\n  if (raw.length === 0) return ['chrome', 'safari']\n\n  const browsers = raw\n    .split(',')\n    .map(part => part.trim().toLowerCase())\n    .filter(Boolean)\n\n  for (const browser of browsers) {\n    if (browser !== 'chrome' && browser !== 'safari' && browser !== 'firefox') {\n      throw new Error(`Unsupported browser ${browser}`)\n    }\n  }\n\n  return browsers as AutomationBrowserKind[]\n}\n\nconst requestedPort = parseNumberFlag('port', 0)\nconst browsers = parseBrowsers(parseStringFlag('browser'))\nconst timeoutMs = parseNumberFlag('timeout', 60_000)\n\nfunction printCaseResult(browser: AutomationBrowserKind, testCase: ProbeOracleCase, report: ProbeReport): void {\n  if (report.status === 'error') {\n    console.log(`${browser} | ${testCase.label}: error: ${report.message ?? 'unknown error'}`)\n    return\n  }\n\n  const sensitivity =\n    report.extractorSensitivity === null || report.extractorSensitivity === undefined","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/chenglou/pretext/blob/ac49b09b7d83ede19581fa94a8b892b07d309baf/scripts/pre-wrap-check.ts#L45-L81","documentation":"parseBrowsers() in pre-wrap-check.ts validates each `--browser=` entry against {chrome, safari, firefox} and throws on any unrecognized name, identical to the guard in the sibling oracle scripts.","triggerScenarios":"Passing `--browser=ie`, `--browser=chromium`, `--browser=edge`, or any token outside the accepted trio.","commonSituations":"Pasting a browser list from a tool with a wider set, or assuming a Chromium alias is accepted.","solutions":["Use only chrome, safari, or firefox (case-insensitive), e.g. `--browser=chrome,safari`.","Omit `--browser` to get the default chrome,safari."],"exampleFix":"# before\nbun run pre-wrap-check -- --browser=chromium\n\n# after\nbun run pre-wrap-check -- --browser=chrome","handlingStrategy":"type-guard","validationCode":"const SUPPORTED = new Set(['chrome', 'safari', 'firefox'])\nfunction parseBrowsers(value: string | null): ('chrome' | 'safari' | 'firefox')[] {\n  const parts = (value ?? 'chrome,safari').split(',').map(p => p.trim().toLowerCase()).filter(Boolean)\n  const bad = parts.filter(p => !SUPPORTED.has(p))\n  if (bad.length) {\n    console.error(`Unsupported browser(s): ${bad.join(', ')}. Supported: chrome, safari, firefox`)\n    process.exit(2)\n  }\n  return parts as ('chrome' | 'safari' | 'firefox')[]\n}","typeGuard":"const isSupportedBrowser = (v: string): v is 'chrome' | 'safari' | 'firefox' =>\n  v === 'chrome' || v === 'safari' || v === 'firefox'","tryCatchPattern":null,"preventionTips":["Omit `--browser` to use the curated default.","Keep the accepted-browser list documented in each check script."],"tags":["cli","browser-automation","argument-parsing"],"backgroundTag":null,"analyzedSha":"ac49b09b7d83ede19581fa94a8b892b07d309baf","analyzedAt":"2026-08-12T17:03:16.263Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}