"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.flatMap = flatMap; exports.flatten = flatten; exports.partition = partition; exports.indexBy = indexBy; /** * Map a function over an array and concatenate the results */ function flatMap(xs, fn) { return flatten(xs.map(fn)); } /** * Flatten a list of lists into a list of elements */ function flatten(xs) { return Array.prototype.concat.apply([], xs); } /** * Partition a collection by removing and returning all elements that match a predicate * * Note: the input collection is modified in-place! */ function partition(collection, pred) { const ret = []; let i = 0; while (i < collection.length) { if (pred(collection[i])) { ret.push(collection.splice(i, 1)[0]); } else { i++; } } return ret; } async function indexBy(xs, fn) { const ret = new Map(); for (const x of xs) { const key = await fn(x); const group = ret.get(key); if (group) { group.push(x); } else { ret.set(key, [x]); } } return ret; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXJyYXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsMEJBRUM7QUFLRCwwQkFFQztBQU9ELDhCQVdDO0FBRUQsMEJBWUM7QUE1Q0Q7O0dBRUc7QUFDSCxTQUFnQixPQUFPLENBQU8sRUFBTyxFQUFFLEVBQThCO0lBQ25FLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixPQUFPLENBQUksRUFBUztJQUNsQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixTQUFTLENBQUksVUFBZSxFQUFFLElBQXVCO0lBQ25FLE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztJQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixPQUFPLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDTixDQUFDLEVBQUUsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRU0sS0FBSyxVQUFVLE9BQU8sQ0FBTyxFQUFPLEVBQUUsRUFBd0I7SUFDbkUsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM5QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ25CLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hcCBhIGZ1bmN0aW9uIG92ZXIgYW4gYXJyYXkgYW5kIGNvbmNhdGVuYXRlIHRoZSByZXN1bHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0TWFwPFQsIFU+KHhzOiBUW10sIGZuOiAoKHg6IFQsIGk6IG51bWJlcikgPT4gVVtdKSk6IFVbXSB7XG4gIHJldHVybiBmbGF0dGVuKHhzLm1hcChmbikpO1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBsaXN0IG9mIGxpc3RzIGludG8gYSBsaXN0IG9mIGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPFQ+KHhzOiBUW11bXSk6IFRbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB4cyk7XG59XG5cbi8qKlxuICogUGFydGl0aW9uIGEgY29sbGVjdGlvbiBieSByZW1vdmluZyBhbmQgcmV0dXJuaW5nIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIGEgcHJlZGljYXRlXG4gKlxuICogTm90ZTogdGhlIGlucHV0IGNvbGxlY3Rpb24gaXMgbW9kaWZpZWQgaW4tcGxhY2UhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aXRpb248VD4oY29sbGVjdGlvbjogVFtdLCBwcmVkOiAoeDogVCkgPT4gYm9vbGVhbik6IFRbXSB7XG4gIGNvbnN0IHJldDogVFtdID0gW107XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKGkgPCBjb2xsZWN0aW9uLmxlbmd0aCkge1xuICAgIGlmIChwcmVkKGNvbGxlY3Rpb25baV0pKSB7XG4gICAgICByZXQucHVzaChjb2xsZWN0aW9uLnNwbGljZShpLCAxKVswXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluZGV4Qnk8QSwgQj4oeHM6IEFbXSwgZm46IChhOiBBKSA9PiBQcm9taXNlPEI+KTogUHJvbWlzZTxNYXA8QiwgQVtdPj4ge1xuICBjb25zdCByZXQgPSBuZXcgTWFwPEIsIEFbXT4oKTtcbiAgZm9yIChjb25zdCB4IG9mIHhzKSB7XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgZm4oeCk7XG4gICAgY29uc3QgZ3JvdXAgPSByZXQuZ2V0KGtleSk7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBncm91cC5wdXNoKHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXQuc2V0KGtleSwgW3hdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuIl19