function flatObject(obj, prefix = '') {
let result = {};
Object.entries(obj).map(([key, value]) => {
let recursionResponse = {};
const nextPrefix = prefix ? `${prefix}.${key}` : key;
if (value && typeof value === 'object') {
if (Array.isArray(value)) {
recursionResponse = flatObject(Object.assign({}, value), nextPrefix);
}
if (value instanceof Set) {
recursionResponse = flatObject(Object.assign({}, Array.from(value)), nextPrefix);
}
if (value instanceof Map) {
recursionResponse = flatObject(Object.fromEntries(Array.from(value)), nextPrefix);
}
if (value.constructor === Object) {
recursionResponse = flatObject(value, nextPrefix);
}
result = Object.assign(result, recursionResponse);
} else {
result[nextPrefix] = value;
}
});
return result;
}