{"record":{"id":"28ff8160a87648b6","repo":"jackwener/OpenCLI","slug":"xianyu-label-must-be-an-integer-between-1-and","errorCode":null,"errorMessage":"xianyu ${label} must be an integer between 1 and ${maxValue}","messagePattern":"xianyu (.+?) must be an integer between 1 and (.+?)","errorType":"validation","errorClass":"ArgumentError","httpStatus":null,"severity":"warning","filePath":"clis/xianyu/im.js","lineNumber":12,"sourceCode":"import { ArgumentError, CommandExecutionError } from '@jackwener/opencli/errors';\n\nexport const DEFAULT_INBOX_LIMIT = 20;\nexport const MAX_INBOX_LIMIT = 100;\nexport const DEFAULT_MESSAGE_LIMIT = 50;\nexport const MAX_MESSAGE_LIMIT = 200;\n\nexport function normalizeLimit(value, defaultValue = DEFAULT_INBOX_LIMIT, maxValue = MAX_INBOX_LIMIT, label = 'limit') {\n    const raw = String(value ?? '').trim();\n    if (!raw) return defaultValue;\n    if (!/^\\d+$/.test(raw)) {\n        throw new ArgumentError(`xianyu ${label} must be an integer between 1 and ${maxValue}`);\n    }\n    const n = Number(raw);\n    if (!Number.isSafeInteger(n) || n < 1 || n > maxValue) {\n        throw new ArgumentError(`xianyu ${label} must be an integer between 1 and ${maxValue}`);\n    }\n    return n;\n}\n\nexport function normalizeRank(value) {\n    const raw = String(value ?? '').trim();\n    if (!raw) return 0;\n    if (!/^\\d+$/.test(raw)) {\n        throw new ArgumentError('xianyu rank must be a positive integer from xianyu inbox');\n    }\n    const n = Number(raw);\n    if (!Number.isSafeInteger(n) || n < 1) {\n        throw new ArgumentError('xianyu rank must be a positive integer from xianyu inbox');\n    }","sourceCodeStart":1,"sourceCodeEnd":30,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/xianyu/im.js#L1-L30","documentation":"normalizeLimit validates numeric limit parameters for xianyu IM commands. It throws ArgumentError when the value is not a pure digit string, or is outside 1..maxValue (default MAX_INBOX_LIMIT, MAX_MESSAGE_LIMIT=200 for messages).","triggerScenarios":"Calling a xianyu limit-taking command with limit='abc', limit='0', limit='201', limit='-5', limit='1.5', or an empty-but-non-default value like '  ' that fails the regex after trim.","commonSituations":"Passing a float from upstream parsing; passing 0 to mean 'no limit'; exceeding MAX_MESSAGE_LIMIT=200 for message fetches; string vs number mixing from CLI argv.","solutions":["Pass an integer string/number between 1 and the applicable max (200 for messages)","Omit the parameter to use the default inbox limit","Clamp or validate the value before calling the command","For larger paging needs, use pagination instead of raising the limit"],"exampleFix":"// before\nawait xianyuInbox({ limit: 500 }); // throws\n// after\nawait xianyuInbox({ limit: Math.min(500, 200) }); // clamp to max","handlingStrategy":"validation","validationCode":"function isValidLimit(v, max = 200) {\n  return /^\\d+$/.test(String(v ?? '')) && Number(v) >= 1 && Number(v) <= max;\n}","typeGuard":"function isPositiveIntString(v) {\n  return typeof v === 'string' && /^\\d+$/.test(v) && Number.isSafeInteger(Number(v)) && Number(v) >= 1;\n}","tryCatchPattern":"try {\n  await xianyuInbox({ limit });\n} catch (e) {\n  if (e?.name === 'ArgumentError' && /must be an integer between/.test(e.message)) {\n    return xianyuInbox({ limit: 50 }); // sane default\n  }\n  throw e;\n}","preventionTips":["Clamp user input: Math.min(Math.max(1, n), 200)","Use integers, never floats or numeric words","Omit the parameter to accept the default"],"tags":["validation","argument-error","xianyu"],"backgroundTag":"invalid-argument","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}