|  |  |  | /* global window */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // eslint-disable-next-line func-names
 | 
					
						
							|  |  |  | (function() { | 
					
						
							|  |  |  |   window.libloki = window.libloki || {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function consolidateLists(lists, threshold, selector = x => x) { | 
					
						
							|  |  |  |     if (typeof threshold !== 'number') { | 
					
						
							|  |  |  |       throw Error('Provided threshold is not a number'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (typeof selector !== 'function') { | 
					
						
							|  |  |  |       throw Error('Provided selector is not a function'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // calculate list size manually since `Set`
 | 
					
						
							|  |  |  |     // does not have a `length` attribute
 | 
					
						
							|  |  |  |     let numLists = 0; | 
					
						
							|  |  |  |     const occurences = {}; | 
					
						
							|  |  |  |     const values = {}; | 
					
						
							|  |  |  |     lists.forEach(list => { | 
					
						
							|  |  |  |       numLists += 1; | 
					
						
							|  |  |  |       list.forEach(item => { | 
					
						
							|  |  |  |         const key = selector(item); | 
					
						
							|  |  |  |         if (!(key in occurences)) { | 
					
						
							|  |  |  |           occurences[key] = 1; | 
					
						
							|  |  |  |           values[key] = item; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |           occurences[key] += 1; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const scaledThreshold = numLists * threshold; | 
					
						
							|  |  |  |     return Object.keys(occurences) | 
					
						
							|  |  |  |       .filter(key => occurences[key] >= scaledThreshold) | 
					
						
							|  |  |  |       .map(key => values[key]); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   window.libloki.serviceNodes = { | 
					
						
							|  |  |  |     consolidateLists, | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | })(); |