{"record":{"id":"1643f48a7905132f","repo":"chenglou/pretext","slug":"invalid-value-for-name-raw-1643f4","errorCode":null,"errorMessage":"Invalid value for --${name}: ${raw}","messagePattern":"Invalid value for --(.+?): (.+?)","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"scripts/corpus-font-matrix.ts","lineNumber":332,"sourceCode":"      label: 'Geeza Pro',\n      font: '20px \"Geeza Pro\", \"Noto Nastaliq Urdu\", serif',\n      lineHeight: 34,\n    },\n  ],\n}\n\nfunction parseStringFlag(name: string): string | null {\n  const prefix = `--${name}=`\n  const arg = process.argv.find(value => value.startsWith(prefix))\n  return arg === undefined ? null : arg.slice(prefix.length)\n}\n\nfunction parseNumberFlag(name: string, fallback: number): number {\n  const raw = parseStringFlag(name)\n  if (raw === null) return fallback\n  const parsed = Number.parseInt(raw, 10)\n  if (!Number.isFinite(parsed)) {\n    throw new Error(`Invalid value for --${name}: ${raw}`)\n  }\n  return parsed\n}\n\nfunction parseOptionalNumberFlag(name: string): number | null {\n  const raw = parseStringFlag(name)\n  if (raw === null) return null\n  const parsed = Number.parseInt(raw, 10)\n  if (!Number.isFinite(parsed)) {\n    throw new Error(`Invalid value for --${name}: ${raw}`)\n  }\n  return parsed\n}\n\nfunction parseBrowser(value: string | null): BrowserKind {\n  const browser = (value ?? process.env['CORPUS_CHECK_BROWSER'] ?? 'chrome').toLowerCase()\n  if (browser !== 'chrome' && browser !== 'safari') {\n    throw new Error(`Unsupported browser ${browser}; expected chrome or safari`)","sourceCodeStart":314,"sourceCodeEnd":350,"githubUrl":"https://github.com/chenglou/pretext/blob/ac49b09b7d83ede19581fa94a8b892b07d309baf/scripts/corpus-font-matrix.ts#L314-L350","documentation":"Thrown by parseNumberFlag in corpus-font-matrix.ts — the font-matrix counterpart of [26]. Required numeric flags (start, end, step, port, timeout) route through it; a present-but-non-numeric value aborts the script at module top-level. Identical contract to [26]: present-but-NaN throws, but parseInt's prefix rule means `--start=300px` silently parses as 300.","triggerScenarios":"parseStringFlag finds `--start=`, `--end=`, `--step=`, `--port=`, or `--timeout=` with a value whose leading characters are non-numeric. Throw on `--step=ten`, `--start=wide`, `--port=`, `--end=`. Note `--start=300px` does NOT throw (parseInt returns 300).","commonSituations":"Passing widths with units (`--start=300px`), words for step (`--step=ten`), empty values from an unset env var; copying example invocations from documentation that used a different flag syntax.","solutions":["Pass bare integers in the unit the script expects (pixels for start/end/step, ms for timeout).","Strip units before passing: `--start=${WIDTH%p}` if shell-quoting a value with a suffix.","Remember parseInt is permissive — units AFTER a leading number are silently dropped, not flagged."],"exampleFix":"// before\nbun run scripts/corpus-font-matrix.ts --id=ja-kumo-no-ito --step=ten\n// after\nbun run scripts/corpus-font-matrix.ts --id=ja-kumo-no-ito --step=10","handlingStrategy":"validation","validationCode":"function strictIntFlag(name: string, raw: string | null, fallback: number): number {\n  if (raw === null) return fallback\n  if (!/^-?\\d+$/.test(raw)) throw new Error(`--${name} expects an integer, got ${JSON.stringify(raw)}`)\n  return Number.parseInt(raw, 10)\n}","typeGuard":"function isStrictInteger(value: string): boolean {\n  return /^-?\\d+$/.test(value)\n}","tryCatchPattern":null,"preventionTips":["Pass bare integers in the unit the script expects (px for start/end/step, ms for timeout).","Strip units before passing: parseInt silently drops a trailing suffix.","Use a strict regex if full-string rejection matters — the built-in parseNumberFlag is permissive."],"tags":["cli","validation","args","corpus-font-matrix"],"backgroundTag":null,"analyzedSha":"ac49b09b7d83ede19581fa94a8b892b07d309baf","analyzedAt":"2026-08-12T17:03:16.263Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}