Add a function to generate the doc
This commit is contained in:
+40
@@ -0,0 +1,40 @@
|
||||
import * as yup from 'yup'
|
||||
|
||||
type DocElement = {
|
||||
name: string
|
||||
required: boolean
|
||||
default_value?: unknown
|
||||
}
|
||||
|
||||
export function doc<S extends yup.Maybe<yup.AnyObject>>(
|
||||
scheme: yup.ObjectSchema<S>,
|
||||
base_name: string = ''
|
||||
): DocElement[] {
|
||||
if (base_name.length !== 0) base_name = base_name + '_'
|
||||
|
||||
let elements: DocElement[] = []
|
||||
|
||||
for (const key in scheme.fields) {
|
||||
const sub_key = base_name + key.toUpperCase()
|
||||
const sub_scheme = scheme.fields[key] as yup.AnySchema
|
||||
const type = sub_scheme.describe().type
|
||||
|
||||
if (type === 'object') {
|
||||
const sub_elements = doc(sub_scheme as yup.ObjectSchema<S>, sub_key)
|
||||
elements = [...elements, ...sub_elements]
|
||||
} else {
|
||||
elements.push(generic(sub_scheme, sub_key))
|
||||
}
|
||||
}
|
||||
|
||||
return elements
|
||||
}
|
||||
|
||||
function generic(scheme: yup.AnySchema, name: string): DocElement {
|
||||
const default_value = scheme.getDefault()
|
||||
return {
|
||||
name,
|
||||
required: !scheme.spec.optional,
|
||||
default_value
|
||||
}
|
||||
}
|
||||
@@ -1,2 +1,3 @@
|
||||
export * as yup from 'yup'
|
||||
export {parse} from './parsing'
|
||||
export {doc} from './doc'
|
||||
|
||||
Reference in New Issue
Block a user