( allowedFormats: readonly T[], aliases?: Record<string, T> )
| 31 | aliases?: Record<string, T> |
| 32 | ): (value: string) => T |
| 33 | export function createFormatValidator<T extends string>( |
| 34 | allowedFormats: readonly T[], |
| 35 | aliases?: Record<string, T> |
| 36 | ): (value: string) => T { |
| 37 | return (value: string): T => { |
| 38 | const resolved = aliases?.[value] ?? value |
| 39 | |
| 40 | if (!allowedFormats.includes(resolved as T)) { |
| 41 | const aliasesForAllowed = aliases |
| 42 | ? Object.entries(aliases) |
| 43 | .filter(([_, canonical]) => allowedFormats.includes(canonical as T)) |
| 44 | .map(([alias]) => alias) |
| 45 | : [] |
| 46 | const validValues = [...allowedFormats, ...aliasesForAllowed].join(', ') |
| 47 | throw new Error(`Invalid output format: ${value}. Valid formats: ${validValues}`) |
| 48 | } |
| 49 | return resolved as T |
| 50 | } |
| 51 | } |
no outgoing calls
no test coverage detected