@stacksjs/ts-validation
Version:
A simple TypeScript starter kit using Bun.
90 lines (79 loc) • 2.5 kB
TypeScript
import type { PasswordValidatorType, ValidationNames } from '../types';
export declare class PasswordValidator extends BaseValidator<string> implements PasswordValidatorType {
public name: ValidationNames = 'password'
constructor() {
super()
this.addRule({
name: 'string',
test: (value: unknown): value is string => typeof value === 'string',
message: 'Must be a string',
})
}
matches(confirmPassword: string): this {
return this.addRule({
name: 'matches',
test: (value: string) => value === confirmPassword,
message: 'Passwords must match',
})
}
min(length: number = 8): this {
return this.addRule({
name: 'minLength',
test: (value: string) => value.length >= length,
message: 'Password must be at least {length} characters long',
params: { length },
})
}
max(length: number = 128): this {
return this.addRule({
name: 'maxLength',
test: (value: string) => value.length <= length,
message: 'Password must be at most {length} characters long',
params: { length },
})
}
length(length: number): this {
return this.addRule({
name: 'length',
test: (value: string) => value.length === length,
message: 'Must be exactly {length} characters long',
params: { length },
})
}
hasUppercase(): this {
return this.addRule({
name: 'hasUppercase',
test: (value: string) => /[A-Z]/.test(value),
message: 'Password must contain at least one uppercase letter',
})
}
hasLowercase(): this {
return this.addRule({
name: 'hasLowercase',
test: (value: string) => /[a-z]/.test(value),
message: 'Password must contain at least one lowercase letter',
})
}
hasNumbers(): this {
return this.addRule({
name: 'hasNumbers',
test: (value: string) => /[0-9]/.test(value),
message: 'Password must contain at least one number',
})
}
hasSpecialCharacters(): this {
return this.addRule({
name: 'hasSpecialCharacters',
test: (value: string) => /[!@#$%^&*(),.?":{}|<>]/.test(value),
message: 'Password must contain at least one special character',
})
}
alphanumeric(): this {
return this.addRule({
name: 'alphanumeric',
test: (value: string) => /(?=.*[a-z])(?=.*\d)/i.test(value),
message: 'Password must contain both letters and numbers',
})
}
}
export declare function password(): PasswordValidator;