| 
									
										
										
										
											2021-02-04 21:10:27 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * @template T | 
					
						
							|  |  |  |  * @param {Iterable<T>} set a set | 
					
						
							|  |  |  |  * @returns {T | undefined} last item | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const last = set => { | 
					
						
							|  |  |  | 	let last; | 
					
						
							|  |  |  | 	for (const item of set) last = item; | 
					
						
							|  |  |  | 	return last; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * @template T | 
					
						
							|  |  |  |  * @param {Iterable<T>} iterable iterable | 
					
						
							| 
									
										
										
										
											2024-10-24 04:30:31 +08:00
										 |  |  |  * @param {function(T): boolean | null | undefined} filter predicate | 
					
						
							| 
									
										
										
										
											2021-02-04 21:10:27 +08:00
										 |  |  |  * @returns {boolean} true, if some items match the filter predicate | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const someInIterable = (iterable, filter) => { | 
					
						
							|  |  |  | 	for (const item of iterable) { | 
					
						
							|  |  |  | 		if (filter(item)) return true; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return false; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * @template T | 
					
						
							|  |  |  |  * @param {Iterable<T>} iterable an iterable | 
					
						
							|  |  |  |  * @returns {number} count of items | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | const countIterable = iterable => { | 
					
						
							|  |  |  | 	let i = 0; | 
					
						
							|  |  |  | 	for (const _ of iterable) i++; | 
					
						
							|  |  |  | 	return i; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-31 04:54:55 +08:00
										 |  |  | module.exports.last = last; | 
					
						
							|  |  |  | module.exports.someInIterable = someInIterable; | 
					
						
							|  |  |  | module.exports.countIterable = countIterable; |