export const toFlatObject = (objectArg: object) => { const returnObject: { [key: string]: any } = {}; const extractLayer = ( subObject: { [key: string]: any }, pathArg: string, loopProtection: object[] ) => { if (loopProtection.indexOf(subObject) > -1) { return; } if (subObject) for (const key of Object.keys(subObject)) { let localPathArg = pathArg; if (typeof subObject[key] === 'object' && !(subObject[key] instanceof Array)) { const newLoopbackArray = loopProtection.slice(); newLoopbackArray.push(subObject); extractLayer( subObject[key], localPathArg ? (localPathArg += `.${key}`) : key, newLoopbackArray ); } else { returnObject[localPathArg ? (localPathArg += `.${key}`) : key] = subObject[key]; } } }; extractLayer(objectArg, '', []); return returnObject; };