用于读取命令行中的需要转换的参数值
function getOptionValue(option, arg) { if (option.type === "bool") { return arg; } if (option.type === "number") { const value = parseInt(arg, 10); if (isNaN(value)) { throw new Error(`Invalid value for option '${option.name}': '${arg}'`); } if (option.min && value < option.min) { throw new Error(`Value for option '${option.name}' must be greater than or equal to ${option.min}`); } if (option.max && value > option.max) { throw new Error(`Value for option '${option.name}' must be less than or equal to ${option.max}`); } return value; } if (option.type === "range") { const result = []; const ranges = arg.split(","); for (let range of ranges) { range = range.trim(); const parts = range.split("-"); if (parts.length === 1) { // Single port const value = parseInt(parts[0], 10); if (isNaN(value)) { throw new Error(`Invalid value for option '${option.name}': '${range}'`); } if (option.min && value < option.min) { throw new Error(`Value for option '${option.name}' must be greater than or equal to ${option.min}`); } if (option.max && value > option.max) { throw new Error(`Value for option '${option.name}' must be less than or equal to ${option.max}`); } result.push(value); } else if (parts.length === 2) { // Port range const start = parseInt(parts[0], 10); const end = parseInt(parts[1], 10); if (isNaN(start) || isNaN(end)) { throw new Error(`Invalid value for option '${option.name}': '${range}'`); } if (option.min && start < option.min) { throw new Error(`Value for option '${option.name}' must be greater than or equal to ${option.min}`); } if (option.max && end > option.max) { throw new Error(`Value for option '${option.name}' must be less than or equal to ${option.max}`); } if (start > end) { throw new Error(`Invalid range for option '${option.name}': '${range}'`); } for (let i = start; i <= end; i++) { result.push(i); } } else { throw new Error(`Invalid value for option '${option.name}': '${range}'`); } } return result; } }
接下来看第三部分