@data-client/normalizr
Version:
Normalizes and denormalizes JSON according to schema for Redux and Flux applications
22 lines • 2.95 kB
JavaScript
export function getCheckLoop() {
const visitedEntities = new Map();
/* Returns true if a circular reference is found */
return function checkLoop(entityKey, pk, input) {
let entitiesOneType = visitedEntities.get(entityKey);
if (!entitiesOneType) {
entitiesOneType = new Map();
visitedEntities.set(entityKey, entitiesOneType);
}
let visitedEntitySet = entitiesOneType.get(pk);
if (!visitedEntitySet) {
visitedEntitySet = new Set();
entitiesOneType.set(pk, visitedEntitySet);
}
if (visitedEntitySet.has(input)) {
return true;
}
visitedEntitySet.add(input);
return false;
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGVja0xvb3AiLCJ2aXNpdGVkRW50aXRpZXMiLCJNYXAiLCJjaGVja0xvb3AiLCJlbnRpdHlLZXkiLCJwayIsImlucHV0IiwiZW50aXRpZXNPbmVUeXBlIiwiZ2V0Iiwic2V0IiwidmlzaXRlZEVudGl0eVNldCIsIlNldCIsImhhcyIsImFkZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub3JtYWxpemUvZ2V0Q2hlY2tMb29wLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZXRDaGVja0xvb3AoKSB7XG4gIGNvbnN0IHZpc2l0ZWRFbnRpdGllcyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBTZXQ8b2JqZWN0Pj4+KCk7XG4gIC8qIFJldHVybnMgdHJ1ZSBpZiBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpcyBmb3VuZCAqL1xuICByZXR1cm4gZnVuY3Rpb24gY2hlY2tMb29wKGVudGl0eUtleTogc3RyaW5nLCBwazogc3RyaW5nLCBpbnB1dDogb2JqZWN0KSB7XG4gICAgbGV0IGVudGl0aWVzT25lVHlwZSA9IHZpc2l0ZWRFbnRpdGllcy5nZXQoZW50aXR5S2V5KTtcbiAgICBpZiAoIWVudGl0aWVzT25lVHlwZSkge1xuICAgICAgZW50aXRpZXNPbmVUeXBlID0gbmV3IE1hcDxzdHJpbmcsIFNldDxvYmplY3Q+PigpO1xuICAgICAgdmlzaXRlZEVudGl0aWVzLnNldChlbnRpdHlLZXksIGVudGl0aWVzT25lVHlwZSk7XG4gICAgfVxuXG4gICAgbGV0IHZpc2l0ZWRFbnRpdHlTZXQgPSBlbnRpdGllc09uZVR5cGUuZ2V0KHBrKTtcbiAgICBpZiAoIXZpc2l0ZWRFbnRpdHlTZXQpIHtcbiAgICAgIHZpc2l0ZWRFbnRpdHlTZXQgPSBuZXcgU2V0PG9iamVjdD4oKTtcbiAgICAgIGVudGl0aWVzT25lVHlwZS5zZXQocGssIHZpc2l0ZWRFbnRpdHlTZXQpO1xuICAgIH1cblxuICAgIGlmICh2aXNpdGVkRW50aXR5U2V0LmhhcyhpbnB1dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2aXNpdGVkRW50aXR5U2V0LmFkZChpbnB1dCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVNBLFlBQVlBLENBQUEsRUFBRztFQUM3QixNQUFNQyxlQUFlLEdBQUcsSUFBSUMsR0FBRyxDQUFtQyxDQUFDO0VBQ25FO0VBQ0EsT0FBTyxTQUFTQyxTQUFTQSxDQUFDQyxTQUFpQixFQUFFQyxFQUFVLEVBQUVDLEtBQWEsRUFBRTtJQUN0RSxJQUFJQyxlQUFlLEdBQUdOLGVBQWUsQ0FBQ08sR0FBRyxDQUFDSixTQUFTLENBQUM7SUFDcEQsSUFBSSxDQUFDRyxlQUFlLEVBQUU7TUFDcEJBLGVBQWUsR0FBRyxJQUFJTCxHQUFHLENBQXNCLENBQUM7TUFDaERELGVBQWUsQ0FBQ1EsR0FBRyxDQUFDTCxTQUFTLEVBQUVHLGVBQWUsQ0FBQztJQUNqRDtJQUVBLElBQUlHLGdCQUFnQixHQUFHSCxlQUFlLENBQUNDLEdBQUcsQ0FBQ0gsRUFBRSxDQUFDO0lBQzlDLElBQUksQ0FBQ0ssZ0JBQWdCLEVBQUU7TUFDckJBLGdCQUFnQixHQUFHLElBQUlDLEdBQUcsQ0FBUyxDQUFDO01BQ3BDSixlQUFlLENBQUNFLEdBQUcsQ0FBQ0osRUFBRSxFQUFFSyxnQkFBZ0IsQ0FBQztJQUMzQztJQUVBLElBQUlBLGdCQUFnQixDQUFDRSxHQUFHLENBQUNOLEtBQUssQ0FBQyxFQUFFO01BQy9CLE9BQU8sSUFBSTtJQUNiO0lBQ0FJLGdCQUFnQixDQUFDRyxHQUFHLENBQUNQLEtBQUssQ0FBQztJQUMzQixPQUFPLEtBQUs7RUFDZCxDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=