function deserialize()

in packages-ext/recoil-devtools/src/utils/Serialization.js [180:215]


function deserialize(item: ?SerializedValue): mixed {
  if (item == null) {
    return null;
  }
  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 new Set(value?.map(deserialize));
  } else if (type === SerializedValueType.map) {
    return new Map(value?.map(entry => entry.map(deserialize)));
  } else if (type === SerializedValueType.date) {
    return new Date(value ?? 0);
  } else if (type === SerializedValueType.function) {
    // function cannot be restored :(
    return value;
  } else if (type === SerializedValueType.error) {
    // Errors are shown as strings
    return value;
  } else if (type === SerializedValueType.symbol) {
    return Symbol(value);
  } else if (type === SerializedValueType.array) {
    return value?.map(deserialize);
  } else if (type === SerializedValueType.object) {
    return value?.reduce((prev, [key, val]) => {
      prev[deserialize(key)] = deserialize(val);
      return prev;
    }, {});
  } else if (type === SerializedValueType.function) {
    return String(item);
  } else {
    return value;
  }
}