AssertRuleRegistry.ts 858 B

1234567891011121314151617181920212223242526272829303132333435
  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 = [
  10. new MaxAssert(),
  11. new NullableAssert(),
  12. new TypeAssert(),
  13. new PositiveAssert(),
  14. ]
  15. }
  16. getValidators(
  17. asserts: Record<string, unknown>,
  18. ): ((value: unknown) => true | string)[] {
  19. const allRules: ((value: unknown) => true | string)[] = []
  20. for (const key in asserts) {
  21. const criteria = asserts[key]
  22. const rule = this.rules.find((r) => r.supports(key))
  23. if (rule) {
  24. allRules.push(rule.createRule(criteria))
  25. }
  26. }
  27. return allRules
  28. }
  29. }