@inkline/inkline
Version:
Inkline is the intuitive UI Components library that gives you a developer-friendly foundation for building high-quality, accessible, and customizable Vue.js 3 Design Systems.
29 lines (28 loc) • 884 B
JavaScript
import { isFormField, isFormGroup } from "@inkline/inkline/types";
import { reservedValidationFields } from "@inkline/inkline/constants";
export function serializeSchema(schema) {
const serializedSchema = {};
Object.keys(schema).forEach((key) => {
if (!schema.hasOwnProperty(key) || reservedValidationFields.includes(key)) {
return;
}
const schemaField = schema[key];
if (Array.isArray(schemaField)) {
serializedSchema[key] = schemaField.map(
(item) => {
if (isFormGroup(item)) {
return serializeSchema(item);
}
return item.value;
}
);
} else if (isFormGroup(schemaField)) {
serializedSchema[key] = serializeSchema(
schemaField
);
} else if (isFormField(schemaField)) {
serializedSchema[key] = schemaField.value;
}
});
return serializedSchema;
}