chenglou/pretext · error · Error
Invalid value for --${name}: ${raw}
Error message
Invalid value for --${name}: ${raw} What it means
Thrown by parseNumberFlag in corpus-check.ts when a `--name=value` CLI argument is present but Number.parseInt(value, 10) returns NaN. Used for required numeric flags (port, timeout). The thrown name and raw value are interpolated so the offender is identifiable. This is pure input validation at module top-level — the script aborts before doing any browser work.
Source
Thrown at scripts/corpus-check.ts:129
domWidth: number
isSpace: boolean
}>
} | null
message?: string
}
function parseStringFlag(name: string): string | null {
const prefix = `--${name}=`
const arg = process.argv.find(value => value.startsWith(prefix))
return arg === undefined ? null : arg.slice(prefix.length)
}
function parseNumberFlag(name: string, fallback: number): number {
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 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
}
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}`)View on GitHub (pinned to ac49b09b7d)
Solutions
- Pass a bare base-10 integer: `--port=8765`, `--timeout=180000`.
- If sourcing from an env var, default it explicitly: `--port=${CORPUS_CHECK_PORT:-0}` so an unset variable does not yield `--port=`.
- Remember parseInt is permissive — `--port=12abc` will NOT throw (it parses as 12); if you need strict validation, augment parseNumberFlag with a full-string regex.
- For units (s, ms), convert before passing: `--timeout=$(( 30 * 1000 ))`.
Example fix
// before bun run scripts/corpus-check.ts --id=ja-kumo-no-ito --port=8765tcp // after bun run scripts/corpus-check.ts --id=ja-kumo-no-ito --port=8765
Defensive patterns
Strategy: validation
Validate before calling
// Validate numeric CLI args before the script's own parse runs
function assertIntFlag(name: string, value: string | undefined): number {
if (value === undefined) return NaN
if (!/^-?\d+$/.test(value)) {
throw new Error(`--${name} expects a base-10 integer, got ${JSON.stringify(value)}`)
}
return Number.parseInt(value, 10)
} Type guard
function isIntegerArg(value: string): boolean {
return /^-?\d+$/.test(value)
} Prevention
- Pass bare integers to numeric flags — never with units or quotes that leave trailing characters.
- Default env vars explicitly in the shell (`--port=${PORT:-0}`) to avoid `--port=` when unset.
- Remember parseInt is prefix-based: `12abc` parses as 12 silently; use a strict regex if you want full-string rejection.
When it happens
Trigger: parseStringFlag('port') finds an arg starting with `--port=`; parseNumberFlag slices the value after `=` and Number.parseInts it. Throw on `--port=abc`, `--port=8080tcp`, `--port=` (empty), `--timeout=30s`. Note parseInt('1.5',10) returns 1 (finite, no throw) — only truly non-numeric prefixes trigger this.
Common situations: Copy-pasting a port with a unit suffix; passing an env-var that was empty and got wrapped in `--port=`; quoting mishaps in a CI yaml that turn `--port=$PORT` into `--port=` when PORT is unset; misunderstanding that parseInt is prefix-based so `--port=12abc` parses as 12 silently.
Related errors
- Unsupported --method ${requestedMethod}; expected span or ra
- Missing --id. Available corpora: ${sources.map(source => sou
- Unknown corpus ${id}. Available corpora: ${sources.map(sourc
- Unsupported browser ${browser}; expected chrome or safari
- Invalid value for --${name}: ${raw}
AI-assisted analysis of chenglou/pretext@ac49b09b7d (2026-08-12).
Data as JSON: /api/errors/78b704d916f3e793.
Report an issue: GitHub.