import { ValidationSchemas, ValidationStringSchema } from '~/domain'; import { StringParser } from '~/infra/joi/protocols'; import { IParseNestedSchemas } from '~/infra/joi/protocols/parse-nested-schemas'; import { JoiParseFormatRule } from '~/infra/joi/protocols/rule-parsers/format-parser'; import { JoiCommonRulesParser } from '~/infra/joi/validators/use-cases/joi-common-validator/joi-common-rule-parser'; export class JoiStringRulesParser extends JoiCommonRulesParser<'string'> implements StringParser { constructor(private readonly formatParser: JoiParseFormatRule<'string'>, parseSchema: IParseNestedSchemas) { super(parseSchema); } max = (schema: StringParser.Schema, value: number): StringParser.Schema => { return schema.max(value); }; min = (schema: StringParser.Schema, value: number): StringParser.Schema => { return schema.min(value); }; length = (schema: StringParser.Schema, value: number): StringParser.Schema => { return schema.length(value); }; match = (schema: StringParser.Schema, value: RegExp | string[]): StringParser.Schema => { if (Array.isArray(value)) { return schema.valid(...value); } return schema.pattern(value); }; format = ( schema: StringParser.Schema, format: ValidationStringSchema.Format, rules: ValidationSchemas.Rules<'string'> ) => { return this.formatParser.format(schema, format, rules); }; }