@data-client/normalizr
Version:
Normalizes and denormalizes JSON according to schema for Redux and Flux applications
24 lines (21 loc) • 741 B
text/typescript
export function getCheckLoop() {
const visitedEntities = new Map<string, Map<string, Set<object>>>();
/* Returns true if a circular reference is found */
return function checkLoop(entityKey: string, pk: string, input: object) {
let entitiesOneType = visitedEntities.get(entityKey);
if (!entitiesOneType) {
entitiesOneType = new Map<string, Set<object>>();
visitedEntities.set(entityKey, entitiesOneType);
}
let visitedEntitySet = entitiesOneType.get(pk);
if (!visitedEntitySet) {
visitedEntitySet = new Set<object>();
entitiesOneType.set(pk, visitedEntitySet);
}
if (visitedEntitySet.has(input)) {
return true;
}
visitedEntitySet.add(input);
return false;
};
}