villa
Version:
Promise utilities for async/await-ready environment.
273 lines • 9.68 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
/**
* Asynchronous version of `Array#forEach()`.
*/
function each(values, handler) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var i;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
i = 0;
_a.label = 1;
case 1:
if (!(i < values.length)) return [3 /*break*/, 4];
return [4 /*yield*/, handler(values[i], i, values)];
case 2:
if ((_a.sent()) === false) {
return [2 /*return*/, false];
}
_a.label = 3;
case 3:
i++;
return [3 /*break*/, 1];
case 4: return [2 /*return*/, true];
}
});
});
}
exports.each = each;
/**
* Asynchronous version of `Array#some()`.
*/
function some(values, handler) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var i;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
i = 0;
_a.label = 1;
case 1:
if (!(i < values.length)) return [3 /*break*/, 4];
return [4 /*yield*/, handler(values[i], i, values)];
case 2:
if (_a.sent()) {
return [2 /*return*/, true];
}
_a.label = 3;
case 3:
i++;
return [3 /*break*/, 1];
case 4: return [2 /*return*/, false];
}
});
});
}
exports.some = some;
/**
* Asynchronous version of `Array#every()`.
*/
function every(values, handler) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var i;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
i = 0;
_a.label = 1;
case 1:
if (!(i < values.length)) return [3 /*break*/, 4];
return [4 /*yield*/, handler(values[i], i, values)];
case 2:
if (!(_a.sent())) {
return [2 /*return*/, false];
}
_a.label = 3;
case 3:
i++;
return [3 /*break*/, 1];
case 4: return [2 /*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 () {
return tslib_1.__generator(this, function (_a) {
if (typeof concurrency !== 'number') {
return [2 /*return*/, Promise.all(values.map(transformer))];
}
return [2 /*return*/, new Promise(function (resolve, reject) {
var starting = Math.min(concurrency, values.length);
var results = [];
if (starting <= 0) {
resolve(results);
return;
}
var pending = 0;
var i = 0;
while (i < starting) {
next();
}
function next() {
if (i === values.length) {
if (!pending) {
resolve(results);
}
return;
}
var index = i++;
var value = values[index];
pending++;
var ret;
try {
ret = transformer(value, index, values);
}
catch (error) {
reject(error);
return;
}
Promise.resolve(ret).then(function (result) {
results[index] = result;
pending--;
next();
}, function (error) {
reject(error);
});
}
})];
});
});
}
exports.map = map;
function reduce(values, transformer) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _this = this;
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, values.reduce.apply(values, [function (result, value, index) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = transformer;
return [4 /*yield*/, result];
case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent(), value, index, values])];
}
});
}); }].concat(args))];
});
});
}
exports.reduce = reduce;
function reduceRight(values, transformer) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _this = this;
return tslib_1.__generator(this, function (_a) {
return [2 /*return*/, values.reduceRight.apply(values, [function (result, value, index) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = transformer;
return [4 /*yield*/, result];
case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent(), value, index, values])];
}
});
}); }].concat(args))];
});
});
}
exports.reduceRight = reduceRight;
/**
* Asynchronous version of `Array#filter()`.
*/
function filter(values, handler) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var results, i, value;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
results = [];
i = 0;
_a.label = 1;
case 1:
if (!(i < values.length)) return [3 /*break*/, 4];
value = values[i];
return [4 /*yield*/, handler(value, i, values)];
case 2:
if (_a.sent()) {
results.push(value);
}
_a.label = 3;
case 3:
i++;
return [3 /*break*/, 1];
case 4: return [2 /*return*/, results];
}
});
});
}
exports.filter = filter;
/**
* Asynchronous version of `Array#find()`.
*/
function find(values, handler) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var i, value;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
i = 0;
_a.label = 1;
case 1:
if (!(i < values.length)) return [3 /*break*/, 4];
value = values[i];
return [4 /*yield*/, handler(value, i, values)];
case 2:
if (_a.sent()) {
return [2 /*return*/, value];
}
_a.label = 3;
case 3:
i++;
return [3 /*break*/, 1];
case 4: return [2 /*return*/, undefined];
}
});
});
}
exports.find = find;
/**
* Asynchronous version of `Array#findIndex()`.
*/
function findIndex(values, handler) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var i;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
i = 0;
_a.label = 1;
case 1:
if (!(i < values.length)) return [3 /*break*/, 4];
return [4 /*yield*/, handler(values[i], i, values)];
case 2:
if (_a.sent()) {
return [2 /*return*/, i];
}
_a.label = 3;
case 3:
i++;
return [3 /*break*/, 1];
case 4: return [2 /*return*/, -1];
}
});
});
}
exports.findIndex = findIndex;
//# sourceMappingURL=array.js.map