UNPKG

osrs-tools

Version:

A comprehensive TypeScript library for Old School RuneScape (OSRS) data and utilities, including quest data, skill requirements, and game item information

171 lines 5.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateSkillLevel = validateSkillLevel; exports.validateQuestPoints = validateQuestPoints; exports.validateCombatLevel = validateCombatLevel; exports.validateSkillName = validateSkillName; exports.isValidSkillName = isValidSkillName; exports.validateExperience = validateExperience; exports.validateRank = validateRank; exports.validateAccountName = validateAccountName; const errors_1 = require("../errors"); const Skill_1 = require("../model/account/Skill"); /** * Validates a skill level value * @param level The level to validate * @param skillName Name of the skill (for error context) * @throws {ValidationError} If level is invalid */ function validateSkillLevel(level, skillName) { if (!Number.isInteger(level)) { throw new errors_1.ValidationError('level', level, 'Skill level must be an integer', { skillName, type: 'integer', }); } if (level < 1 || level > 99) { throw new errors_1.ValidationError('level', level, 'Skill level must be between 1 and 99', { skillName, min: 1, max: 99, }); } } /** * Validates quest points value * @param points The quest points to validate * @throws {ValidationError} If points value is invalid */ function validateQuestPoints(points) { if (!Number.isInteger(points)) { throw new errors_1.ValidationError('questPoints', points, 'Quest points must be an integer', { type: 'integer', }); } if (points < 0) { throw new errors_1.ValidationError('questPoints', points, 'Quest points cannot be negative', { min: 0, }); } // Current max quest points in OSRS (as of 2025) const MAX_QUEST_POINTS = 300; if (points > MAX_QUEST_POINTS) { throw new errors_1.ValidationError('questPoints', points, `Quest points cannot exceed ${MAX_QUEST_POINTS}`, { max: MAX_QUEST_POINTS, }); } } /** * Validates combat level value * @param level The combat level to validate * @throws {ValidationError} If level is invalid */ function validateCombatLevel(level) { if (!Number.isInteger(level)) { throw new errors_1.ValidationError('combatLevel', level, 'Combat level must be an integer', { type: 'integer', }); } if (level < 3 || level > 126) { throw new errors_1.ValidationError('combatLevel', level, 'Combat level must be between 3 and 126', { min: 3, max: 126, }); } } /** * Validates a skill name * @param name The skill name to validate * @throws {ValidationError} If name is invalid */ function validateSkillName(name) { const normalizedName = name.charAt(0).toUpperCase() + name.slice(1).toLowerCase(); if (!(normalizedName in Skill_1.Skill)) { throw new errors_1.ValidationError('skillName', name, 'Invalid skill name', { validSkills: Object.values(Skill_1.Skill), }); } } /** * Type guard for checking if a value is a valid skill name * @param name The value to check * @returns True if value is a valid skill name */ function isValidSkillName(name) { try { validateSkillName(name); return true; } catch { return false; } } /** * Validates experience (XP) value * @param xp The XP value to validate * @param skillName Name of the skill (for error context) * @throws {ValidationError} If XP value is invalid */ function validateExperience(xp, skillName) { if (!Number.isInteger(xp)) { throw new errors_1.ValidationError('experience', xp, 'Experience must be an integer', { skillName, type: 'integer', }); } if (xp < 0) { throw new errors_1.ValidationError('experience', xp, 'Experience cannot be negative', { skillName, min: 0, }); } const MAX_XP = 200000000; if (xp > MAX_XP) { throw new errors_1.ValidationError('experience', xp, `Experience cannot exceed ${MAX_XP}`, { skillName, max: MAX_XP, }); } } /** * Validates rank value * @param rank The rank value to validate * @param context Additional context for error message * @throws {ValidationError} If rank value is invalid */ function validateRank(rank, context) { if (!Number.isInteger(rank)) { throw new errors_1.ValidationError('rank', rank, 'Rank must be an integer', { context, type: 'integer', }); } if (rank < 1) { throw new errors_1.ValidationError('rank', rank, 'Rank must be positive', { context, min: 1, }); } } /** * Validates an account name * @param name The account name to validate * @throws {ValidationError} If name is invalid */ function validateAccountName(name) { if (!name) { throw new errors_1.ValidationError('name', name, 'Account name is required'); } if (name.length > 12) { throw new errors_1.ValidationError('name', name, 'Account name cannot exceed 12 characters', { maxLength: 12, }); } const validNameRegex = /^[a-zA-Z0-9 -_]+$/; if (!validNameRegex.test(name)) { throw new errors_1.ValidationError('name', name, 'Account name contains invalid characters', { pattern: validNameRegex.toString(), }); } } //# sourceMappingURL=validation.js.map