AssertRuleRegistry.ts 755 B

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