import { AbstractValidator } from '../types'; import type { Branding } from '../types'; /** Constraints to validate a `string` with. */ export interface StringConstraints { /** The _maximum_ length of a valid `string`: `value.length <= maxLength` */ maxLength?: number; /** The _minimum_ length of a valid `string`: `value.length >= minLength` */ minLength?: number; /** A `RegExp` enforcing a particular pattern for a valid `string`: `pattern.test(value)` */ pattern?: RegExp; } /** Constraints to validate a `string` with extra branding information. */ export interface BrandedStringConstraints extends StringConstraints { /** The _brand_ of the string (will generate a `__brand_${B}` type property */ brand: B; } /** A `Validator` validating any `string`. */ export declare class AnyStringValidator extends AbstractValidator { validate(value: unknown): string; } /** A `Validator` validating `string`s with constraints. */ export declare class StringValidator extends AbstractValidator { readonly maxLength: number; readonly minLength: number; readonly pattern?: RegExp; readonly brand?: string; constructor(constraints?: StringConstraints); validate(value: unknown): S; } export declare function stringValidatorFactory(constraints: StringConstraints): StringValidator; export declare function stringValidatorFactory(constraints: StringConstraints): StringValidator; export declare function stringValidatorFactory(constraints: BrandedStringConstraints): StringValidator>; /** Validate `string`s. */ export declare const string: typeof stringValidatorFactory & AnyStringValidator;