function stringifyObjectFunctions (obj) {
  // 遍历对象属性
  for (const key in obj) {
    const value = obj[key]
    // 如果属性值是函数类型,将函数转换为字符串
    if (typeof value === 'function') {
      obj[key] = `(${value.toString()})`
      // 如果属性值是对象类型,则递归进行转换
    } else if (typeof value === 'object' && value !== null) {
      stringifyObjectFunctions(value)
    }
  }
  return JSON.stringify(obj)
}

function stringToFunction (str) {
  return JSON.parse(str, (key, value) => {
    if (typeof value === 'string' && (value.includes('=>') || value.includes('function'))) {
      // eslint-disable-next-line no-eval
      return eval(`(${value})`)
    }
    return value
  })
}

export {
  stringifyObjectFunctions,
  stringToFunction
}