import type { AssertRule } from '~/types/interfaces' import { MaxAssert } from './MaxAssert' import { NullableAssert } from './NullableAssert' import { TypeAssert } from './TypeAssert' import { PositiveAssert } from './PositiveAssert' export class AssertRuleRegistry { private rules: AssertRule[] = [] constructor() { this.rules = [ new MaxAssert(), new NullableAssert(), new TypeAssert(), new PositiveAssert(), ] } getValidators( asserts: Record, ): ((value: unknown) => true | string)[] { const allRules: ((value: unknown) => true | string)[] = [] for (const key in asserts) { const criteria = asserts[key] const rule = this.rules.find((r) => r.supports(key)) if (rule) { allRules.push(rule.createRule(criteria)) } } return allRules } }