JSFiddle - React, Tailwind, and code Playground

JavaScript

function flatObject(value) {
  const processed = [];
  return isObject(value) ? run(value, "") : value;

  function isObject(value) {
    return typeof value == 'object' && !!value
  }

  function run(value, key) {
    if (!isObject(value)) {
      return { [key]: value };
    }

    if (processed.includes(value)) {
      return { [key]: null };
    }
    processed.push(value);

    const prefix = key && key + ".";
    let o = {};

    for (const [key, val] of Object.entries(value)) {
      o = { ...o, ...run(val, prefix + key) };
    }

    return o;
  } 
}

console.log(flatObject(window))