37 lines
905 B
Plaintext
37 lines
905 B
Plaintext
import u from '@yanick/updeep-remeda';
|
|
import * as R from 'remeda';
|
|
|
|
export default function buildSchema(
|
|
schema: any = {},
|
|
initialState = undefined,
|
|
subduxes = {},
|
|
) {
|
|
if (typeof initialState !== 'undefined')
|
|
schema = u(schema, { default: u.constant(initialState) });
|
|
|
|
if (!schema.type) {
|
|
schema = u(schema, {
|
|
type: Array.isArray(schema.default)
|
|
? 'array'
|
|
: typeof schema.default,
|
|
});
|
|
}
|
|
|
|
if (schema.type === 'object') {
|
|
// TODO will break with objects and arrays
|
|
schema = u(schema, {
|
|
properties: R.mapValues(schema.default, (v) => ({
|
|
type: typeof v,
|
|
})),
|
|
});
|
|
}
|
|
|
|
if (Object.keys(subduxes).length > 0) {
|
|
schema = u(schema, {
|
|
properties: R.mapValues(subduxes, R.prop('schema')),
|
|
});
|
|
}
|
|
|
|
return schema;
|
|
}
|