51 lines
4.3 KiB
JavaScript
51 lines
4.3 KiB
JavaScript
"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
|