villa
Version:
Promise utilities for async/await-ready environment.
157 lines • 4.72 kB
JavaScript
;
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