ajt-validator
Version:
Validation library for JavaScript and TypeScript
45 lines (44 loc) • 2.42 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UsernameValidator = void 0;
const base_1 = require("../base");
class UsernameValidator extends base_1.BaseValidator {
constructor(options = {}) {
super();
this.options = Object.assign({ minLength: 3, maxLength: 30, pattern: /^[a-zA-Z0-9_.-]+$/, blockedUsernames: ['admin', 'root', 'system', 'moderator'], allowSpaces: false, caseSensitive: false }, options);
}
validate(username) {
if (!username) {
return this.createError('USERNAME_REQUIRED', 'Username is required');
}
const processedUsername = this.options.caseSensitive ? username.trim() : username.trim().toLowerCase();
// Length validation
if (processedUsername.length < this.options.minLength) {
return this.createError('USERNAME_TOO_SHORT', `Username must be at least ${this.options.minLength} characters`);
}
if (processedUsername.length > this.options.maxLength) {
return this.createError('USERNAME_TOO_LONG', `Username must not exceed ${this.options.maxLength} characters`);
}
// Check spaces
if (!this.options.allowSpaces && /\s/.test(processedUsername)) {
return this.createError('USERNAME_CONTAINS_SPACES', 'Username cannot contain spaces');
}
// Pattern validation
if (this.options.pattern && !this.options.pattern.test(processedUsername)) {
return this.createError('INVALID_USERNAME_FORMAT', 'Username format is invalid. Use only letters, numbers, and the following characters: _ . -');
}
// Check blocked usernames
if (this.options.blockedUsernames &&
this.options.blockedUsernames.length > 0) {
const compareUsername = this.options.caseSensitive ? processedUsername : processedUsername.toLowerCase();
const isBlocked = this.options.blockedUsernames.some(blocked => this.options.caseSensitive ?
blocked === compareUsername :
blocked.toLowerCase() === compareUsername);
if (isBlocked) {
return this.createError('USERNAME_BLOCKED', 'This username is not allowed');
}
}
return this.createSuccess(this.options.caseSensitive ? processedUsername : processedUsername.toLowerCase());
}
}
exports.UsernameValidator = UsernameValidator;