@mmstack/form-validation
Version:
This is an internal library for providing localized validators :)
59 lines (58 loc) • 2.63 kB
TypeScript
import { Validator } from '../validator.type';
import { createEmailValidator } from './email';
import { createIsStringValidator } from './is-string';
import { createMaxLengthValidator } from './max-chars';
import { createMinLengthValidator } from './min-chars';
import { createPatternValidator } from './pattern';
import { createTrimmedValidator } from './trimmed';
import { createURIValidator } from './uri';
export type StringMessageFactories = {
email: Parameters<typeof createEmailValidator>[0];
uri: Parameters<typeof createURIValidator>[0];
pattern: Parameters<typeof createPatternValidator>[0];
trimmed: Parameters<typeof createTrimmedValidator>[0];
isString: Parameters<typeof createIsStringValidator>[0];
minLength: Parameters<typeof createMinLengthValidator>[0];
maxLength: Parameters<typeof createMaxLengthValidator>[0];
};
export type StringValidatorOptions = {
pattern?: RegExp | 'email' | 'uri' | Omit<string, 'email' | 'uri'>;
trimmed?: boolean;
minLength?: number;
maxLength?: number;
required?: boolean;
mustBe?: string | null;
not?: string | null;
oneOf?: (string | null)[];
notOneOf?: (string | null)[];
messageOptions?: {
label?: string;
};
};
export declare function createStringValidators(factories?: Partial<StringMessageFactories>, generalValidators?: {
required: <T>(label?: string) => Validator<T>;
mustBe: <T>(value: T, valueLabel?: string, matcher?: (a: T, b: T) => boolean) => Validator<T>;
mustBeNull: <T>() => Validator<T>;
not: <T>(value: T, valueLabel?: string, matcher?: (a: T, b: T) => boolean) => Validator<T>;
oneOf: <T>(values: T[], toLabel?: (value: T) => string, identity?: (a: T) => string, delimiter?: string) => Validator<T>;
notOneOf: <T>(values: T[], toLabel?: (value: T) => string, identity?: (a: T) => string, delimiter?: string) => Validator<T>;
}, merger?: <T>(validators: Validator<T>[]) => ((value: T) => string) & {
resolve: (mergedError: string) => {
error: string;
tooltip: string;
};
}): {
all: (opt: StringValidatorOptions) => ((value: string | null) => string) & {
resolve: (mergedError: string) => {
error: string;
tooltip: string;
};
};
email: () => Validator<string | null>;
uri: () => Validator<string | null>;
pattern: (pattern: string | RegExp) => Validator<string | null>;
trimmed: () => Validator<string | null>;
isString: () => Validator<string | null>;
minLength: (min: number) => Validator<string | null>;
maxLength: (max: number) => Validator<string | null>;
};