-
Notifications
You must be signed in to change notification settings - Fork 0
/
enum-schema.ts
35 lines (27 loc) · 1.08 KB
/
enum-schema.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { is } from '@mojule/is'
import { assertStringSchema } from './string-schema'
import { isNonEmptyArray } from './util'
import { EnumSchema } from './types'
export const isEnumSchema = ( value ) : value is EnumSchema => {
try {
assertEnumSchema( value )
} catch {
return false
}
return true
}
export const assertEnumSchema = ( enumSchema, name = 'EnumSchema' ) => {
assertStringSchema( enumSchema, name )
if( !isNonEmptyArray<string>( enumSchema.enum ) )
throw TypeError( `${ name }.enum should be a non-empty array` )
if ( !enumSchema.enum.every( is.string ) )
throw TypeError( `${ name }.enum should be an array of strings` )
if ( !isNonEmptyArray<string>( enumSchema._enumTitles ) )
throw TypeError( `${ name }._enumTitles should be a non-empty array` )
if ( !enumSchema._enumTitles.every( is.string ) )
throw TypeError( `${ name }._enumTitles should be an array of strings` )
if ( enumSchema.enum.length !== enumSchema._enumTitles.length )
throw TypeError(
`${ name }.enum and ${ name }._enumTitles should be the same length`
)
}