Add a function to generate the doc

This commit is contained in:
2025-09-12 11:01:26 +02:00
parent dba1f5b80a
commit f9a299863e
2 changed files with 41 additions and 0 deletions
+40
View File
@@ -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
View File
@@ -1,2 +1,3 @@
export * as yup from 'yup'
export {parse} from './parsing'
export {doc} from './doc'