Skip to content

Commit 7795c7e

Browse files
authored
Merge pull request #1 from GuthrieW/add-async-functions
Add async functions
2 parents ec56213 + 3e8c2ea commit 7795c7e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+3240
-1
lines changed

.github/pull_request_template.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Description
2+
3+
## Summary of Changes
4+
5+
## Related Issue
6+
7+
## Type of Change
8+
9+
- [ ] Bug fix (non-breaking change which fixes an issue)
10+
- [ ] New feature (non-breaking change which adds functionality)
11+
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
12+
- [ ] This change requires a documentation update
13+
14+
# Checklist:
15+
16+
- [ ] I have performed a self-review of my code
17+
- [ ] I have made corresponding changes to the documentation
18+
- [ ] My changes generate no new warnings
19+
- [ ] I have added or refactored the necessary tests that prove my fix is effective or that my feature works
20+
- [ ] I have run the `yarn build` script in order to update the `/dist` folder
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: Lint, Test, and Build Pull Request
2+
on:
3+
pull_request:
4+
branches: main
5+
jobs:
6+
lint:
7+
runs-on: ubuntu-latest
8+
name: ES Lint
9+
strategy:
10+
matrix:
11+
node-version: ["18.*"]
12+
steps:
13+
- name: Checkout repository
14+
uses: actions/checkout@v3
15+
16+
- name: Use node version ${{ matrix.node-version }}
17+
uses: actions/setup-node@v3
18+
with:
19+
node-version: ${{ matrix.node-version }}
20+
21+
- name: Install modules
22+
run: yarn install
23+
24+
- name: Run eslint
25+
run: yarn lint
26+
27+
test:
28+
runs-on: ubuntu-latest
29+
name: Test
30+
strategy:
31+
matrix:
32+
node-version: ["18.*"]
33+
steps:
34+
- name: Checkout repository
35+
uses: actions/checkout@v3
36+
37+
- name: Use node version ${{ matrix.node-version }}
38+
uses: actions/setup-node@v3
39+
with:
40+
node-version: ${{ matrix.node-version }}
41+
42+
- name: Install modules
43+
run: yarn install
44+
45+
- name: Run tests
46+
run: yarn test
47+
48+
build:
49+
runs-on: ubuntu-latest
50+
name: Build
51+
strategy:
52+
matrix:
53+
node-version: ["18.*"]
54+
steps:
55+
- name: Checkout repository
56+
uses: actions/checkout@v3
57+
58+
- name: Use node version ${{ matrix.node-version }}
59+
uses: actions/setup-node@v3
60+
with:
61+
node-version: ${{ matrix.node-version }}
62+
63+
- name: Install modules
64+
run: yarn install
65+
66+
- name: Build package
67+
run: yarn build

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/node_modules
2+
yarn-error.log

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
# async-iterators
2-
A JavaScript utility library for asynchrous array iteration.
2+
3+
A TypeScript utility library for asynchronous array iteration.

dist/index.d.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export { default as every } from "./src/every";
2+
export { default as filter } from "./src/filter";
3+
export { default as find } from "./src/find";
4+
export { default as findIndex } from "./src/findIndex";
5+
export { default as findLast } from "./src/findLast";
6+
export { default as findLastIndex } from "./src/findLastIndex";
7+
export { default as map } from "./src/map";
8+
export { default as mapParallel } from "./src/mapParallel";
9+
export { default as reduce } from "./src/reduce";
10+
export { default as reduceRight } from "./src/reduceRight";
11+
export { default as some } from "./src/some";

dist/index.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
"use strict";
2+
var __importDefault = (this && this.__importDefault) || function (mod) {
3+
return (mod && mod.__esModule) ? mod : { "default": mod };
4+
};
5+
Object.defineProperty(exports, "__esModule", { value: true });
6+
exports.some = exports.reduceRight = exports.reduce = exports.mapParallel = exports.map = exports.findLastIndex = exports.findLast = exports.findIndex = exports.find = exports.filter = exports.every = void 0;
7+
var every_1 = require("./src/every");
8+
Object.defineProperty(exports, "every", { enumerable: true, get: function () { return __importDefault(every_1).default; } });
9+
var filter_1 = require("./src/filter");
10+
Object.defineProperty(exports, "filter", { enumerable: true, get: function () { return __importDefault(filter_1).default; } });
11+
var find_1 = require("./src/find");
12+
Object.defineProperty(exports, "find", { enumerable: true, get: function () { return __importDefault(find_1).default; } });
13+
var findIndex_1 = require("./src/findIndex");
14+
Object.defineProperty(exports, "findIndex", { enumerable: true, get: function () { return __importDefault(findIndex_1).default; } });
15+
var findLast_1 = require("./src/findLast");
16+
Object.defineProperty(exports, "findLast", { enumerable: true, get: function () { return __importDefault(findLast_1).default; } });
17+
var findLastIndex_1 = require("./src/findLastIndex");
18+
Object.defineProperty(exports, "findLastIndex", { enumerable: true, get: function () { return __importDefault(findLastIndex_1).default; } });
19+
var map_1 = require("./src/map");
20+
Object.defineProperty(exports, "map", { enumerable: true, get: function () { return __importDefault(map_1).default; } });
21+
var mapParallel_1 = require("./src/mapParallel");
22+
Object.defineProperty(exports, "mapParallel", { enumerable: true, get: function () { return __importDefault(mapParallel_1).default; } });
23+
var reduce_1 = require("./src/reduce");
24+
Object.defineProperty(exports, "reduce", { enumerable: true, get: function () { return __importDefault(reduce_1).default; } });
25+
var reduceRight_1 = require("./src/reduceRight");
26+
Object.defineProperty(exports, "reduceRight", { enumerable: true, get: function () { return __importDefault(reduceRight_1).default; } });
27+
var some_1 = require("./src/some");
28+
Object.defineProperty(exports, "some", { enumerable: true, get: function () { return __importDefault(some_1).default; } });

dist/src/every.d.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/**
2+
* {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every|MDN Documentation Array.prototype.every}
3+
*
4+
* @static
5+
* @since 1.0.0
6+
* @param {T[]} array
7+
* @param {(value: T, index: number) => Promise<boolean>} iteratee
8+
* @returns {Promise<boolean>}
9+
* @example
10+
* const array = [3, 3, 3];
11+
* const allThree = await every(array, async (value) => value === 3);
12+
*/
13+
export default function every<T>(array: T[], iteratee: (value: T, index: number) => Promise<boolean>): Promise<boolean>;

dist/src/every.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.default = every;
4+
/**
5+
* {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every|MDN Documentation Array.prototype.every}
6+
*
7+
* @static
8+
* @since 1.0.0
9+
* @param {T[]} array
10+
* @param {(value: T, index: number) => Promise<boolean>} iteratee
11+
* @returns {Promise<boolean>}
12+
* @example
13+
* const array = [3, 3, 3];
14+
* const allThree = await every(array, async (value) => value === 3);
15+
*/
16+
async function every(array, iteratee) {
17+
if (!Array.isArray(array) || !array?.length)
18+
return false;
19+
for (let index = 0; index < array.length; index++) {
20+
const element = array[index];
21+
const result = await iteratee(element, index);
22+
if (!result) {
23+
return false;
24+
}
25+
}
26+
return true;
27+
}

dist/src/filter.d.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/**
2+
* {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter|MDN Documentation Array.prototype.filter}
3+
*
4+
* @static
5+
* @since 1.0.0
6+
* @param {T[]} array
7+
* @param {(value: T, index: number) => Promise<boolean>} iteratee
8+
* @returns {Promise<T[]>}
9+
* @example
10+
* const array = [1, 2, 3];
11+
* const onlyThree = await filter(array, async (value) => value === 3);
12+
*/
13+
export default function filter<T>(array: T[], iteratee: (value: T, index: number) => Promise<boolean>): Promise<T[]>;

dist/src/filter.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.default = filter;
4+
/**
5+
* {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter|MDN Documentation Array.prototype.filter}
6+
*
7+
* @static
8+
* @since 1.0.0
9+
* @param {T[]} array
10+
* @param {(value: T, index: number) => Promise<boolean>} iteratee
11+
* @returns {Promise<T[]>}
12+
* @example
13+
* const array = [1, 2, 3];
14+
* const onlyThree = await filter(array, async (value) => value === 3);
15+
*/
16+
async function filter(array, iteratee) {
17+
if (!Array.isArray(array) || !array?.length)
18+
return [];
19+
const results = [];
20+
for (let index = 0; index < array.length; index++) {
21+
const element = array[index];
22+
const result = await iteratee(element, index);
23+
if (result) {
24+
results.push(element);
25+
}
26+
}
27+
return results;
28+
}

0 commit comments

Comments
 (0)