UNPKG

@data-client/normalizr

Version:

Normalizes and denormalizes JSON according to schema for Redux and Flux applications

21 lines 3.17 kB
export function getCheckLoop() { const visitedEntities = new Map(); /* Returns true if a circular reference is found */ return function checkLoop(entityKey, pk, input) { if (!visitedEntities.has(entityKey)) { visitedEntities.set(entityKey, new Map()); } // we have to tell typescript this can't be undefined (due to line above) const entitiesOneType = visitedEntities.get(entityKey); if (!entitiesOneType.has(pk)) { entitiesOneType.set(pk, []); } const visitedEntityList = entitiesOneType.get(pk); if (visitedEntityList.some(entity => entity === input)) { return true; } visitedEntityList.push(input); return false; }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGVja0xvb3AiLCJ2aXNpdGVkRW50aXRpZXMiLCJNYXAiLCJjaGVja0xvb3AiLCJlbnRpdHlLZXkiLCJwayIsImlucHV0IiwiaGFzIiwic2V0IiwiZW50aXRpZXNPbmVUeXBlIiwiZ2V0IiwidmlzaXRlZEVudGl0eUxpc3QiLCJzb21lIiwiZW50aXR5IiwicHVzaCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub3JtYWxpenIvZ2V0Q2hlY2tMb29wLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZXRDaGVja0xvb3AoKSB7XG4gIGNvbnN0IHZpc2l0ZWRFbnRpdGllcyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBvYmplY3RbXT4+KCk7XG4gIC8qIFJldHVybnMgdHJ1ZSBpZiBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpcyBmb3VuZCAqL1xuICByZXR1cm4gZnVuY3Rpb24gY2hlY2tMb29wKGVudGl0eUtleTogc3RyaW5nLCBwazogc3RyaW5nLCBpbnB1dDogb2JqZWN0KSB7XG4gICAgaWYgKCF2aXNpdGVkRW50aXRpZXMuaGFzKGVudGl0eUtleSkpIHtcbiAgICAgIHZpc2l0ZWRFbnRpdGllcy5zZXQoZW50aXR5S2V5LCBuZXcgTWFwPHN0cmluZywgb2JqZWN0W10+KCkpO1xuICAgIH1cbiAgICAvLyB3ZSBoYXZlIHRvIHRlbGwgdHlwZXNjcmlwdCB0aGlzIGNhbid0IGJlIHVuZGVmaW5lZCAoZHVlIHRvIGxpbmUgYWJvdmUpXG4gICAgY29uc3QgZW50aXRpZXNPbmVUeXBlOiBNYXA8c3RyaW5nLCBvYmplY3RbXT4gPSB2aXNpdGVkRW50aXRpZXMuZ2V0KFxuICAgICAgZW50aXR5S2V5LFxuICAgICkgYXMgTWFwPHN0cmluZywgb2JqZWN0W10+O1xuXG4gICAgaWYgKCFlbnRpdGllc09uZVR5cGUuaGFzKHBrKSkge1xuICAgICAgZW50aXRpZXNPbmVUeXBlLnNldChwaywgW10pO1xuICAgIH1cbiAgICBjb25zdCB2aXNpdGVkRW50aXR5TGlzdCA9IGVudGl0aWVzT25lVHlwZS5nZXQocGspIGFzIG9iamVjdFtdO1xuICAgIGlmICh2aXNpdGVkRW50aXR5TGlzdC5zb21lKChlbnRpdHk6IGFueSkgPT4gZW50aXR5ID09PSBpbnB1dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2aXNpdGVkRW50aXR5TGlzdC5wdXNoKGlucHV0KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBU0EsWUFBWUEsQ0FBQSxFQUFHO0VBQzdCLE1BQU1DLGVBQWUsR0FBRyxJQUFJQyxHQUFHLENBQWdDLENBQUM7RUFDaEU7RUFDQSxPQUFPLFNBQVNDLFNBQVNBLENBQUNDLFNBQWlCLEVBQUVDLEVBQVUsRUFBRUMsS0FBYSxFQUFFO0lBQ3RFLElBQUksQ0FBQ0wsZUFBZSxDQUFDTSxHQUFHLENBQUNILFNBQVMsQ0FBQyxFQUFFO01BQ25DSCxlQUFlLENBQUNPLEdBQUcsQ0FBQ0osU0FBUyxFQUFFLElBQUlGLEdBQUcsQ0FBbUIsQ0FBQyxDQUFDO0lBQzdEO0lBQ0E7SUFDQSxNQUFNTyxlQUFzQyxHQUFHUixlQUFlLENBQUNTLEdBQUcsQ0FDaEVOLFNBQ0YsQ0FBMEI7SUFFMUIsSUFBSSxDQUFDSyxlQUFlLENBQUNGLEdBQUcsQ0FBQ0YsRUFBRSxDQUFDLEVBQUU7TUFDNUJJLGVBQWUsQ0FBQ0QsR0FBRyxDQUFDSCxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzdCO0lBQ0EsTUFBTU0saUJBQWlCLEdBQUdGLGVBQWUsQ0FBQ0MsR0FBRyxDQUFDTCxFQUFFLENBQWE7SUFDN0QsSUFBSU0saUJBQWlCLENBQUNDLElBQUksQ0FBRUMsTUFBVyxJQUFLQSxNQUFNLEtBQUtQLEtBQUssQ0FBQyxFQUFFO01BQzdELE9BQU8sSUFBSTtJQUNiO0lBQ0FLLGlCQUFpQixDQUFDRyxJQUFJLENBQUNSLEtBQUssQ0FBQztJQUM3QixPQUFPLEtBQUs7RUFDZCxDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=