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
JavaScript
;
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