import { ValidationSchemas } from '~/domain'; import { Joi, JoiSchema } from '~/infra/joi/helper/joi-types'; import { IJoiRuleParser } from '~/infra/joi/protocols/rule-parsers/parser'; import { applyRules } from '~/infra/joi/validators/use-cases/joi-common-validator/get-joi-common-schema/apply-rules'; type Parser = IJoiRuleParser, JoiSchema>; export abstract class GetJoiCommonSchema { public type: T; constructor(public readonly joi: Joi, private readonly rulesParser: Parser) {} getInitialSchema = (initial: JoiSchema, rules: ValidationSchemas.Rules): JoiSchema => { return applyRules(this.type, initial, rules, this.rulesParser); }; }