mirror of
https://github.com/Icinga/icinga-php-library.git
synced 2025-07-02 11:24:33 +02:00
97 lines
2.5 KiB
JavaScript
97 lines
2.5 KiB
JavaScript
(function (root, factory) {
|
|
"use strict";
|
|
|
|
if (typeof define === "function" && define.icinga) {
|
|
define(["exports"], factory);
|
|
} else {
|
|
factory(root.icingaIteratorPolyfill = root.icingaIteratorPolyfill || {});
|
|
}
|
|
}(self, function (exports) {
|
|
/**
|
|
* Polyfill for `Iterator.filter`
|
|
*
|
|
* @param {Symbol.iterator} iterator
|
|
* @param {function} callback
|
|
* @returns {Generator<*, void, *>}
|
|
*/
|
|
function* filter(iterator, callback) {
|
|
if (typeof iterator.filter === "function") {
|
|
yield* iterator.filter(callback);
|
|
}
|
|
|
|
for (const item of iterator) {
|
|
if (callback(item)) {
|
|
yield item;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Polyfill for `Iterator.find`
|
|
*
|
|
* @param {Symbol.iterator} iterator
|
|
* @param {function} callback
|
|
* @returns {*}
|
|
*/
|
|
function find(iterator, callback) {
|
|
if (typeof iterator.find === "function") {
|
|
return iterator.find(callback);
|
|
}
|
|
|
|
for (const item of iterator) {
|
|
if (callback(item)) {
|
|
return item;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Polyfill for `Iterator.map`
|
|
*
|
|
* @param {Symbol.iterator} iterator
|
|
* @param {function} callback
|
|
* @returns {Generator<*, void, *>}
|
|
*/
|
|
function* map(iterator, callback) {
|
|
if (typeof iterator.map === "function") {
|
|
yield* iterator.map(callback);
|
|
}
|
|
|
|
for (const item of iterator) {
|
|
yield callback(item);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Find the first key in the map whose value satisfies the provided testing function.
|
|
* @param {Map} map
|
|
* @param {function} callback Passed arguments are: value, key, map
|
|
* @returns {*} Returns undefined if no key satisfies the testing function.
|
|
*/
|
|
function findKey(map, callback) {
|
|
for (const key of findKeys(map, callback)) {
|
|
return key;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Find all keys in the map whose value satisfies the provided testing function.
|
|
* @param {Map} map
|
|
* @param {function} callback Passed arguments are: value, key, map
|
|
* @returns {Generator<*, void, *>}
|
|
*/
|
|
function* findKeys(map, callback) {
|
|
for (const [ key, value ] of map) {
|
|
if (callback(value, key, map)) {
|
|
yield key;
|
|
}
|
|
}
|
|
}
|
|
|
|
exports.findKeys = findKeys;
|
|
exports.findKey = findKey;
|
|
exports.filter = filter;
|
|
exports.find = find;
|
|
exports.map = map;
|
|
}));
|