flatten = (places) => {
const flattenPlaces = new Map();
const flatten = (obj, property = null) => {
let value = obj;
if (property) {
value = obj[property];
}
if (_.isPlainObject(value)) {
const type = value["@type"];
if (type === "Role") {
flatten(value[property]);
} else {
const name = getShortestName(value);
if (!flattenPlaces.has(name)) {
const flattenPlace = {"@type": type, name};
flattenPlaces.set(name, flattenPlace)
}
if (value.containedInPlace) {
flatten(value, "containedInPlace");
}
if (value.containsPlace) {
flatten(value, "containsPlace");
}
}
} else if (_.isArray(value)) {
value.forEach(d => flatten(d, property));
} else {
throw new `Unsupported type: ${typeof value}`;
}
}
flatten(places);
return [...flattenPlaces.values()];
}