import { parceable } from '../Schema' import SchemaItem from '../SchemaItem' export default class SchemaNumber extends SchemaItem { public min(...params: Parameters): this { return this.gte(...params) } public max(...params: Parameters): this { return this.lte(...params) } /** * validate that the number is less or equal than {@link value} * @param value the maxumum value (inclusive) * @param message the message sent if not valid */ @parceable() public lte(value: number, message?: string): this { this.addValidation({ fn(input) { return input <= value }, error: message }) return this } /** * validate that the number is more or equal than {@link value} * @param value the minimum value (inclusive) * @param message the message sent if not valid */ @parceable() public gte(value: number, message?: string): this { this.addValidation({ fn(input) { return input >= value }, error: message }) return this } /** * validate that the number is less than {@link value} * @param value the maxumum value (exclusive) * @param message the message sent if not valid */ @parceable() public lt(value: number, message?: string): this { this.addValidation({ fn(input) { return input < value }, error: message }) return this } /** * validate that the number is more than {@link value} * @param value the minimum value (exclusive) * @param message the message sent if not valid */ @parceable() public gt(value: number, message?: string): this { this.addValidation({ fn(input) { return input > value }, error: message }) return this } /** * Try to parse strings before validating */ @parceable() public parseString(): this { this.addPreProcess((input) => typeof input === 'string' ? Number.parseFloat(input) : input ) return this } public override isOfType(input: unknown): input is number { return typeof input === 'number' && !Number.isNaN(input) } }