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;
}
}