jackwener/OpenCLI · error · ArgumentError
${label} must be between ${min} and ${max}, got ${parsed}
Error message
${label} must be between ${min} and ${max}, got ${parsed} What it means
The second stage of requireBoundedInteger: the value parsed as a valid integer but lies outside the allowed [min, max] range, so it throws ArgumentError '<label> must be between <min> and <max>, got <parsed>'. This enforces sane bounds for options like page size or limit.
Source
Thrown at clis/_shared/search-adapter.js:18
import { ArgumentError, CommandExecutionError, EmptyResultError } from '@jackwener/opencli/errors';
export function requireSearchQuery(value, label = 'keyword') {
const query = String(value ?? '').trim();
if (!query) {
throw new ArgumentError(`${label} cannot be empty`);
}
return query;
}
export function requireBoundedInteger(value, defaultValue, min, max, label) {
const raw = value ?? defaultValue;
const parsed = typeof raw === 'number' ? raw : Number(raw);
if (!Number.isInteger(parsed)) {
throw new ArgumentError(`${label} must be an integer between ${min} and ${max}, got ${JSON.stringify(value)}`);
}
if (parsed < min || parsed > max) {
throw new ArgumentError(`${label} must be between ${min} and ${max}, got ${parsed}`);
}
return parsed;
}
export function requireNonNegativeInteger(value, defaultValue, label) {
const raw = value ?? defaultValue;
const parsed = typeof raw === 'number' ? raw : Number(raw);
if (!Number.isInteger(parsed) || parsed < 0) {
throw new ArgumentError(`${label} must be a non-negative integer, got ${JSON.stringify(value)}`);
}
return parsed;
}
export function unwrapBrowserResult(value) {
if (value && typeof value === 'object' && !Array.isArray(value) && 'session' in value && 'data' in value) {
return value.data;
}
return value;View on GitHub (pinned to 49907e53dc)
Solutions
- Clamp or pick a value within the documented [min, max] range, e.g. use max instead of 10000.
- In scripts, clamp before calling: Math.min(Math.max(n, min), max).
- Check the command's --help/docs for the allowed range and update your config to a supported value.
Example fix
// before requireBoundedInteger(5000, 25, 1, 100, 'limit') // after requireBoundedInteger(Math.min(5000, 100), 25, 1, 100, 'limit') // clamps to 100
Defensive patterns
Strategy: validation
Validate before calling
const n = Number(raw);
const clamped = Math.min(Math.max(n, min), max);
if (!Number.isInteger(n) || n !== clamped) throw new Error(`${label} must be within [${min}, ${max}]`); Type guard
const isInRange = (v, min, max) => Number.isInteger(v) && v >= min && v <= max;
Try / catch
try {
const limit = requireBoundedInteger(raw, 25, 1, 100, 'limit');
} catch (err) {
if (err.name === 'ArgumentError' && /must be between/.test(err.message)) {
console.error('Limit outside allowed range; clamping to max.');
}
throw err;
} Prevention
- Clamp user/config values with Math.min/Math.max before passing bounded options.
- Document the accepted range in help text and validate at config load.
- Watch for 0 vs 1-based minimums and count/limit mix-ups.
When it happens
Trigger: Calling requireBoundedInteger with an integer outside [min, max], e.g. limit 0 when min is 1, or 10000 when max is 100; negative values; values from config that exceed API caps.
Common situations: Users requesting very large result sets beyond the upstream API maximum; off-by-one mistakes passing count instead of limit or a 1-based value where 0-based is expected; stale config from an older API version with different caps.
Related errors
- ${label} must be a numeric ID
- ${label} cannot be empty
- ${label} must be an integer between ${min} and ${max}, got $
- --limit must be an integer between ${MIN_LIMIT} and ${MAX_LI
- ${label} must be <= ${max}
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/bd4425e69b727d0e.
Report an issue: GitHub.