in packages/graph-explorer/src/core/StateProvider/serializeData.ts [59:89]
export function deserializeData(data: unknown): unknown {
if (data && typeof data === "object" && "__type" in data && "value" in data) {
// Deserialize custom type wrappers
if (data.__type === "Date" && typeof data.value === "string") {
// Deserialize inner date value to Date
return new Date(data.value);
} else if (data.__type === "Map" && Array.isArray(data.value)) {
// Deserialize inner array values to Map entries
return new Map(
data.value.map(([key, value]: [string, any]) => [
key,
deserializeData(value),
])
);
} else if (data.__type === "Set" && Array.isArray(data.value)) {
// Deserialize inner array values to Set entries
return new Set(data.value.map(value => deserializeData(value)));
}
} else if (Array.isArray(data)) {
// Recursively deserialize array
return data.map(deserializeData);
} else if (typeof data === "object" && data !== null) {
// Recursively deserialize object values
return Object.fromEntries(
Object.entries(data).map(([key, value]) => [key, deserializeData(value)])
);
} else {
// Literal type deserializes fine on its own
return data;
}
}