@wener/console
Version:
Base console UI toolkit
64 lines (63 loc) • 2.08 kB
JavaScript
import { set } from "es-toolkit/compat";
/**
* Returns an Object containing all defaults from a schema
*/ export function createFromJsonSchema(root) {
// https://github.com/mdornseif/json-schema-default/blob/main/src/lib/json-schema-default.ts
const out = root.default || {};
let schema = root;
const handle = ({ schema, path, required })=>{
if (!schema) return;
if (schema.default !== undefined) {
set(out, path, schema.default);
} else if (required) {
let def = null;
switch(schema.type){
case 'string':
def = '';
break;
case 'number':
def = 0;
break;
case 'boolean':
def = false;
break;
case 'array':
def = [];
break;
case 'object':
def = {};
break;
}
set(out, path, def);
}
switch(schema.type){
case 'object':
if (schema.properties) {
let keys = schema.required || Object.keys(schema.properties);
for (const key of keys){
let property = schema.properties[key];
typeof property === 'object' && handle({
schema: property,
path: path.concat(key),
parent: schema,
required: schema.required?.includes(key)
});
}
}
break;
case 'array':
if (schema.items) {
if (schema.default) {
set(out, path, schema.default);
}
}
break;
}
};
handle({
schema,
path: []
});
return out;
}
//# sourceMappingURL=createFromJsonSchema.js.map