UNPKG

villa

Version:

Promise utilities for async/await-ready environment.

157 lines 4.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); /** * Asynchronous version of `Array#forEach()`. */ function each(values, handler) { return tslib_1.__awaiter(this, void 0, void 0, function* () { for (let i = 0; i < values.length; i++) { if ((yield handler(values[i], i, values)) === false) { return false; } } return true; }); } exports.each = each; /** * Asynchronous version of `Array#some()`. */ function some(values, handler) { return tslib_1.__awaiter(this, void 0, void 0, function* () { for (let i = 0; i < values.length; i++) { if (yield handler(values[i], i, values)) { return true; } } return false; }); } exports.some = some; /** * Asynchronous version of `Array#every()`. */ function every(values, handler) { return tslib_1.__awaiter(this, void 0, void 0, function* () { for (let i = 0; i < values.length; i++) { if (!(yield handler(values[i], i, values))) { return false; } } return true; }); } exports.every = every; /** * Asynchronous version of `Array#map()` with basic concurrency control. */ function map(values, transformer, concurrency) { return tslib_1.__awaiter(this, void 0, void 0, function* () { if (typeof concurrency !== 'number') { return Promise.all(values.map(transformer)); } return new Promise((resolve, reject) => { let starting = Math.min(concurrency, values.length); let results = []; if (starting <= 0) { resolve(results); return; } let pending = 0; let i = 0; while (i < starting) { next(); } function next() { if (i === values.length) { if (!pending) { resolve(results); } return; } let index = i++; let value = values[index]; pending++; let ret; try { ret = transformer(value, index, values); } catch (error) { reject(error); return; } Promise.resolve(ret).then(result => { results[index] = result; pending--; next(); }, error => { reject(error); }); } }); }); } exports.map = map; function reduce(values, transformer, ...args) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return values.reduce((result, value, index) => tslib_1.__awaiter(this, void 0, void 0, function* () { return transformer(yield result, value, index, values); }), ...args); }); } exports.reduce = reduce; function reduceRight(values, transformer, ...args) { return tslib_1.__awaiter(this, void 0, void 0, function* () { return values.reduceRight((result, value, index) => tslib_1.__awaiter(this, void 0, void 0, function* () { return transformer(yield result, value, index, values); }), ...args); }); } exports.reduceRight = reduceRight; /** * Asynchronous version of `Array#filter()`. */ function filter(values, handler) { return tslib_1.__awaiter(this, void 0, void 0, function* () { let results = []; for (let i = 0; i < values.length; i++) { let value = values[i]; if (yield handler(value, i, values)) { results.push(value); } } return results; }); } exports.filter = filter; /** * Asynchronous version of `Array#find()`. */ function find(values, handler) { return tslib_1.__awaiter(this, void 0, void 0, function* () { for (let i = 0; i < values.length; i++) { let value = values[i]; if (yield handler(value, i, values)) { return value; } } return undefined; }); } exports.find = find; /** * Asynchronous version of `Array#findIndex()`. */ function findIndex(values, handler) { return tslib_1.__awaiter(this, void 0, void 0, function* () { for (let i = 0; i < values.length; i++) { if (yield handler(values[i], i, values)) { return i; } } return -1; }); } exports.findIndex = findIndex; //# sourceMappingURL=array.js.map