function formatForDiff()

in packages-ext/recoil-devtools/src/utils/Serialization.js [217:255]


function formatForDiff(item: ?SerializedValue): mixed {
  if (item == null) {
    return 'undefined';
  }
  const {v: value, t: type} = item;
  if (type === SerializedValueType.null) {
    return null;
  } else if (type === SerializedValueType.undefined) {
    return 'undefined';
  } else if (type === SerializedValueType.set) {
    return value?.map(formatForDiff);
  } else if (type === SerializedValueType.map) {
    return value?.reduce((prev, [key, val]) => {
      prev[formatForDiff(key)] = formatForDiff(val);
      return prev;
    }, {});
  } else if (type === SerializedValueType.date) {
    return new Date(value ?? 0);
  } else if (type === SerializedValueType.error) {
    // Errors are compared as strings
    return value;
  } else if (type === SerializedValueType.function) {
    // function cannot be restored :(
    return value;
  } else if (type === SerializedValueType.symbol) {
    return Symbol(value);
  } else if (type === SerializedValueType.array) {
    return value?.map(formatForDiff);
  } else if (type === SerializedValueType.object) {
    return value?.reduce((prev, [key, val]) => {
      prev[formatForDiff(key)] = formatForDiff(val);
      return prev;
    }, {});
  } else if (type === SerializedValueType.function) {
    return String(item);
  } else {
    return value;
  }
}