34 lines
861 B
TypeScript
34 lines
861 B
TypeScript
import { typeIs, typeOf } from './helpers'
|
|
|
|
export const extractSchemaProps = <O extends object>(obj: O) =>
|
|
Object.entries(obj).reduce((prev, [key, val]) => {
|
|
const value = typeIs(val, "object") && '$type' in val && '$value' in val ? val?.$value : val
|
|
const type = typeOf(value)
|
|
|
|
let schema: any = {
|
|
title: key,
|
|
type,
|
|
default: value
|
|
}
|
|
|
|
if (typeIs(value, "array")) {
|
|
const item = value[0] // TODO merge other item schema's into one
|
|
if (typeIs(item, "object")) {
|
|
schema.items = {
|
|
type: 'object',
|
|
properties: extractSchemaProps(item),
|
|
default: item
|
|
}
|
|
}
|
|
// TODO primitive-value arrays
|
|
}
|
|
|
|
if (typeIs(value, "object")) {
|
|
schema.properties = extractSchemaProps(value)
|
|
}
|
|
return {
|
|
...prev,
|
|
[key]: schema
|
|
}
|
|
}, {} as any)
|