AssertRuleRegistry.ts 827 B

123456789101112131415161718192021222324252627282930
  1. import type { AssertRule } from '~/types/interfaces'
  2. import { MaxAssert } from './MaxAssert'
  3. import { NullableAssert } from './NullableAssert'
  4. import { TypeAssert } from './TypeAssert'
  5. import { PositiveAssert } from './PositiveAssert'
  6. export class AssertRuleRegistry {
  7. private rules: AssertRule[] = []
  8. constructor() {
  9. this.rules = [new MaxAssert(), new NullableAssert(), new TypeAssert(), new PositiveAssert()]
  10. }
  11. getValidators(
  12. asserts: Record<string, unknown>,
  13. ): ((value: unknown) => true | string)[] {
  14. const allRules: ((value: unknown) => true | string)[] = []
  15. for (const key in asserts) {
  16. const criteria = asserts[key]
  17. const rule = this.rules.find((r) => r.supports(key))
  18. if (rule) {
  19. allRules.push(rule.createRule(criteria))
  20. }
  21. }
  22. return allRules
  23. }
  24. }