jackwener/OpenCLI · error · ArgumentError
--page must be between ${ARTICLES_MIN_PAGE} and ${ARTICLES_M
Error message
--page must be between ${ARTICLES_MIN_PAGE} and ${ARTICLES_MAX_PAGE}, got ${parsed} What it means
This ArgumentError is thrown by parseArticlesPage when --page is an integer but outside the allowed [ARTICLES_MIN_PAGE, ARTICLES_MAX_PAGE] range. It is a range guard preventing nonsense pagination values from being sent upstream.
Source
Thrown at clis/toutiao/utils.js:20
* Shared helpers for the toutiao adapter.
*/
import { ArgumentError, CommandExecutionError } from '@jackwener/opencli/errors';
const ARTICLES_MIN_PAGE = 1;
const ARTICLES_MAX_PAGE = 4;
const HOT_MIN_LIMIT = 1;
const HOT_MAX_LIMIT = 50;
const RECOMMEND_MIN_LIMIT = 1;
const RECOMMEND_MAX_LIMIT = 50;
export function parseArticlesPage(raw, fallback = 1) {
if (raw === undefined || raw === null || raw === '') return fallback;
const parsed = Number(raw);
if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) {
throw new ArgumentError(`--page must be an integer between ${ARTICLES_MIN_PAGE} and ${ARTICLES_MAX_PAGE}, got ${JSON.stringify(raw)}`);
}
if (parsed < ARTICLES_MIN_PAGE || parsed > ARTICLES_MAX_PAGE) {
throw new ArgumentError(`--page must be between ${ARTICLES_MIN_PAGE} and ${ARTICLES_MAX_PAGE}, got ${parsed}`);
}
return parsed;
}
export function parseRecommendLimit(raw, fallback = 20) {
if (raw === undefined || raw === null || raw === '') return fallback;
const parsed = Number(raw);
if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) {
throw new ArgumentError(`--limit must be an integer between ${RECOMMEND_MIN_LIMIT} and ${RECOMMEND_MAX_LIMIT}, got ${JSON.stringify(raw)}`);
}
if (parsed < RECOMMEND_MIN_LIMIT || parsed > RECOMMEND_MAX_LIMIT) {
throw new ArgumentError(`--limit must be between ${RECOMMEND_MIN_LIMIT} and ${RECOMMEND_MAX_LIMIT}, got ${parsed}`);
}
return parsed;
}
export function parseRecommendCategory(raw, fallback = '__all__') {
if (raw === undefined || raw === null || raw === '') return fallback;View on GitHub (pinned to 49907e53dc)
Solutions
- Use a page value within the documented range, starting at ARTICLES_MIN_PAGE (typically 1).
- Clamp the value: Math.min(ARTICLES_MAX_PAGE, Math.max(ARTICLES_MIN_PAGE, n)) before passing.
- Stop pagination loops when the range error is raised — it means you have gone past the last valid page.
- Check the CLI help/docs for the current min/max constants.
Example fix
// before
for (let p = 0; p < 1000; p++) await articles({ page: p });
// after
const MAX = 100; // ARTICLES_MAX_PAGE
for (let p = 1; p <= MAX; p++) await articles({ page: p }); Defensive patterns
Strategy: validation
Validate before calling
const ARTICLES_MIN_PAGE = 1, ARTICLES_MAX_PAGE = 100; // match library constants
function clampPage(n) {
return Math.min(ARTICLES_MAX_PAGE, Math.max(ARTICLES_MIN_PAGE, n));
} Type guard
function isPageInRange(n) {
return Number.isInteger(n) && n >= ARTICLES_MIN_PAGE && n <= ARTICLES_MAX_PAGE;
} Try / catch
try {
await articles({ page: p });
} catch (e) {
if (e instanceof ArgumentError && e.message.startsWith('--page must be between')) {
console.error('Page out of range; clamping to valid range.');
return articles({ page: clampPage(p) });
}
throw e;
} Prevention
- Clamp page numbers to [min, max] before passing.
- Remember pages start at 1, not 0.
- Stop pagination loops on this error — you have passed the last valid page.
- Check the constants in clis/toutiao/utils.js for current bounds.
When it happens
Trigger: Running an article command with `--page 0`, `--page -3`, or `--page 99999999` — any integer below ARTICLES_MIN_PAGE or above ARTICLES_MAX_PAGE.
Common situations: Off-by-one assumptions that pages start at 0; brute-force pagination loops without a bound check; scripts generating page numbers from unbounded computations.
Related errors
- ${label} must be between ${min} and ${max}, got ${parsed}
- ${label} must be <= ${max}
- --${name} must be between ${min} and ${max}, got ${parsed}
- flomo memos --${name} must be between 1 and ${max}
- limit must be an integer between 1 and ${max}
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/42ffda57e6ead02d.
Report an issue: GitHub.