UNPKG

villa

Version:

Promise utilities for async/await-ready environment.

273 lines 9.68 kB
"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