Skip to content

Commit 815ff9e

Browse files
authored
Merge pull request #12 from jsr-core/refactor
refactor!: refine implementations, signatures, documentations, etc.
2 parents c27f821 + c6d1bb6 commit 815ff9e

Some content is hidden

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

84 files changed

+1606
-512
lines changed

README.md

Lines changed: 96 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ Chains multiple iterables together.
2121
```ts
2222
import { chain } from "@core/iterutil/chain";
2323

24-
const iter = chain([1, 2], [3, 4]);
25-
console.log(Array.from(iter)); // [1, 2, 3, 4]
24+
const iter = chain([1, 2], ["a", "b"], [true, false]);
25+
console.log(Array.from(iter)); // [1, 2, "a", "b", true, false]
2626
```
2727

2828
```ts
2929
import { chain } from "@core/iterutil/async/chain";
3030

31-
const iter = chain([1, 2], [3, 4]);
32-
console.log(await Array.fromAsync(iter)); // [1, 2, 3, 4]
31+
const iter = chain([1, 2], ["a", "b"], [true, false]);
32+
console.log(await Array.fromAsync(iter)); // [1, 2, "a", "b", true, false]
3333
```
3434

3535
### chunked
@@ -75,14 +75,20 @@ Compresses an iterable by selecting elements using a selector iterable.
7575
```ts
7676
import { compress } from "@core/iterutil/compress";
7777

78-
const iter = compress([1, 2, 3, 4, 5], [true, false, true, false, true]);
78+
const iter = compress(
79+
[1, 2, 3, 4, 5],
80+
[true, false, true, false, true],
81+
);
7982
console.log(Array.from(iter)); // [1, 3, 5]
8083
```
8184

8285
```ts
8386
import { compress } from "@core/iterutil/async/compress";
8487

85-
const iter = compress([1, 2, 3, 4, 5], [true, false, true, false, true]);
88+
const iter = compress(
89+
[1, 2, 3, 4, 5],
90+
[true, false, true, false, true],
91+
);
8692
console.log(await Array.fromAsync(iter)); // [1, 3, 5]
8793
```
8894

@@ -144,14 +150,20 @@ Drops elements from the iterable while the predicate returns true.
144150
```ts
145151
import { dropWhile } from "@core/iterutil/drop-while";
146152

147-
const iter = dropWhile([1, 2, 3, 4, 5], (x) => x < 3);
153+
const iter = dropWhile(
154+
[1, 2, 3, 4, 5],
155+
(v) => v < 3,
156+
);
148157
console.log(Array.from(iter)); // [3, 4, 5]
149158
```
150159

151160
```ts
152161
import { dropWhile } from "@core/iterutil/async/drop-while";
153162

154-
const iter = dropWhile([1, 2, 3, 4, 5], (x) => x < 3);
163+
const iter = dropWhile(
164+
[1, 2, 3, 4, 5],
165+
(v) => v < 3,
166+
);
155167
console.log(await Array.fromAsync(iter)); // [3, 4, 5]
156168
```
157169

@@ -181,15 +193,15 @@ function.
181193
```ts
182194
import { every } from "@core/iterutil/every";
183195

184-
console.log(every([1, 2, 3], (value) => value > 0)); // true
185-
console.log(every([1, 2, 3], (value) => value > 1)); // false
196+
console.log(every([1, 2, 3], (v) => v > 0)); // true
197+
console.log(every([1, 2, 3], (v) => v > 1)); // false
186198
```
187199

188200
```ts
189201
import { every } from "@core/iterutil/async/every";
190202

191-
console.log(await every([1, 2, 3], (value) => value > 0)); // true
192-
console.log(await every([1, 2, 3], (value) => value > 1)); // false
203+
console.log(await every([1, 2, 3], (v) => v > 0)); // true
204+
console.log(await every([1, 2, 3], (v) => v > 1)); // false
193205
```
194206

195207
### filter
@@ -199,14 +211,20 @@ Filters an iterable based on a function.
199211
```ts
200212
import { filter } from "@core/iterutil/filter";
201213

202-
const iter = filter([1, 2, 3, 4, 5], (value) => value % 2 === 0);
214+
const iter = filter(
215+
[1, 2, 3, 4, 5],
216+
(v) => v % 2 === 0,
217+
);
203218
console.log(Array.from(iter)); // [2, 4]
204219
```
205220

206221
```ts
207222
import { filter } from "@core/iterutil/async/filter";
208223

209-
const iter = filter([1, 2, 3, 4, 5], (value) => value % 2 === 0);
224+
const iter = filter(
225+
[1, 2, 3, 4, 5],
226+
(v) => v % 2 === 0,
227+
);
210228
console.log(await Array.fromAsync(iter)); // [2, 4]
211229
```
212230

@@ -218,14 +236,20 @@ function. Otherwise, undefined is returned.
218236
```ts
219237
import { find } from "@core/iterutil/find";
220238

221-
const value = find([1, 2, 3, 4, 5], (value) => value % 2 === 0);
239+
const value = find(
240+
[1, 2, 3, 4, 5],
241+
(v) => v % 2 === 0,
242+
);
222243
console.log(value); // 2
223244
```
224245

225246
```ts
226247
import { find } from "@core/iterutil/async/find";
227248

228-
const value = await find([1, 2, 3, 4, 5], (value) => value % 2 === 0);
249+
const value = await find(
250+
[1, 2, 3, 4, 5],
251+
(v) => v % 2 === 0,
252+
);
229253
console.log(value); // 2
230254
```
231255

@@ -237,15 +261,15 @@ Returns the first element of an iterable. If the iterable is empty, returns
237261
```ts
238262
import { first } from "@core/iterutil/first";
239263

240-
const value = first([1, 2, 3]);
241-
console.log(value); // 1
264+
const result = first([1, 2, 3]);
265+
console.log(result); // 1
242266
```
243267

244268
```ts
245269
import { first } from "@core/iterutil/async/first";
246270

247-
const value = await first([1, 2, 3]);
248-
console.log(value); // 1
271+
const result = await first([1, 2, 3]);
272+
console.log(result); // 1
249273
```
250274

251275
### flatMap
@@ -255,14 +279,20 @@ Maps each value in an iterable to an iterable, then flattens the result.
255279
```ts
256280
import { flatMap } from "@core/iterutil/flat-map";
257281

258-
const iter = flatMap([1, 2, 3], (value) => [value, value]);
282+
const iter = flatMap(
283+
[1, 2, 3],
284+
(v) => [v, v],
285+
);
259286
console.log(Array.from(iter)); // [1, 1, 2, 2, 3, 3]
260287
```
261288

262289
```ts
263290
import { flatMap } from "@core/iterutil/async/flat-map";
264291

265-
const iter = flatMap([1, 2, 3], (value) => [value, value]);
292+
const iter = flatMap(
293+
[1, 2, 3],
294+
(v) => [v, v],
295+
);
266296
console.log(await Array.fromAsync(iter)); // [1, 1, 2, 2, 3, 3]
267297
```
268298

@@ -290,15 +320,15 @@ Calls a function for each value in an iterable.
290320

291321
```ts
292322
import { forEach } from "@core/iterutil/for-each";
293-
forEach([1, 2, 3], console.log);
323+
forEach([1, 2, 3], (v) => console.log(v));
294324
// 1
295325
// 2
296326
// 3
297327
```
298328

299329
```ts
300330
import { forEach } from "@core/iterutil/async/for-each";
301-
await forEach([1, 2, 3], console.log);
331+
await forEach([1, 2, 3], (v) => console.log(v));
302332
// 1
303333
// 2
304334
// 3
@@ -363,14 +393,20 @@ Maps an iterable with a function.
363393
```ts
364394
import { map } from "@core/iterutil/map";
365395

366-
const iter = map([1, 2, 3], (value) => value * 2);
396+
const iter = map(
397+
[1, 2, 3],
398+
(v) => v * 2,
399+
);
367400
console.log(Array.from(iter)); // [2, 4, 6]
368401
```
369402

370403
```ts
371404
import { map } from "@core/iterutil/async/map";
372405

373-
const iter = map([1, 2, 3], (value) => value * 2);
406+
const iter = map(
407+
[1, 2, 3],
408+
(v) => v * 2,
409+
);
374410
console.log(await Array.fromAsync(iter)); // [2, 4, 6]
375411
```
376412

@@ -399,7 +435,10 @@ Partitions an iterable into two arrays based on a selector function.
399435
```ts
400436
import { partition } from "@core/iterutil/partition";
401437

402-
const [even, odd] = partition([1, 2, 3, 4, 5], (value) => value % 2 === 0);
438+
const [even, odd] = partition(
439+
[1, 2, 3, 4, 5],
440+
(v) => v % 2 === 0,
441+
);
403442
console.log(even); // [2, 4]
404443
console.log(odd); // [1, 3, 5]
405444
```
@@ -409,7 +448,7 @@ import { partition } from "@core/iterutil/async/partition";
409448

410449
const [even, odd] = await partition(
411450
[1, 2, 3, 4, 5],
412-
(value) => value % 2 === 0,
451+
(v) => v % 2 === 0,
413452
);
414453
console.log(even); // [2, 4]
415454
console.log(odd); // [1, 3, 5]
@@ -422,7 +461,7 @@ Generates a range of numbers.
422461
```ts
423462
import { range } from "@core/iterutil/range";
424463

425-
console.log(Array.from(range(3))); // [0, 1, 2]
464+
console.log(Array.from(range(1, 3))); // [1, 2, 3]
426465
console.log(Array.from(range(1, 6, 2))); // [1, 3, 5]
427466
```
428467

@@ -433,12 +472,15 @@ Reduces an iterable into a single value.
433472
```ts
434473
import { reduce } from "@core/iterutil/reduce";
435474

436-
const sum = reduce([1, 2, 3, 4, 5], (acc, value) => acc + value);
475+
const sum = reduce(
476+
[1, 2, 3, 4, 5],
477+
(acc, v) => acc + v,
478+
);
437479
console.log(sum); // 15
438480

439481
const joined = reduce(
440482
[1, 2, 3, 4, 5],
441-
(acc, value) => acc + value.toString(),
483+
(acc, v) => acc + v,
442484
"",
443485
);
444486
console.log(joined); // 12345
@@ -447,12 +489,15 @@ console.log(joined); // 12345
447489
```ts
448490
import { reduce } from "@core/iterutil/async/reduce";
449491

450-
const sum = await reduce([1, 2, 3, 4, 5], (acc, value) => acc + value);
492+
const sum = await reduce(
493+
[1, 2, 3, 4, 5],
494+
(acc, v) => acc + v,
495+
);
451496
console.log(sum); // 15
452497

453498
const joined = await reduce(
454499
[1, 2, 3, 4, 5],
455-
(acc, value) => acc + value.toString(),
500+
(acc, v) => acc + v,
456501
"",
457502
);
458503
console.log(joined); // 12345
@@ -465,15 +510,15 @@ Returns true if at least one element in the iterable satisfies the provided
465510
```ts
466511
import { some } from "@core/iterutil/some";
467512

468-
console.log(some([1, 2, 3], (value) => value % 2 === 0)); // true
469-
console.log(some([1, 3, 5], (value) => value % 2 === 0)); // false
513+
console.log(some([1, 2, 3], (v) => v % 2 === 0)); // true
514+
console.log(some([1, 3, 5], (v) => v % 2 === 0)); // false
470515
```
471516

472517
```ts
473518
import { some } from "@core/iterutil/async/some";
474519

475-
console.log(await some([1, 2, 3], (value) => value % 2 === 0)); // true
476-
console.log(await some([1, 3, 5], (value) => value % 2 === 0)); // false
520+
console.log(await some([1, 2, 3], (v) => v % 2 === 0)); // true
521+
console.log(await some([1, 3, 5], (v) => v % 2 === 0)); // false
477522
```
478523

479524
### take
@@ -501,14 +546,20 @@ Takes elements from the iterable while the predicate is true.
501546
```ts
502547
import { takeWhile } from "@core/iterutil/take-while";
503548

504-
const iter = takeWhile([1, 2, 3, 4, 5], (value) => value < 4);
549+
const iter = takeWhile(
550+
[1, 2, 3, 4, 5],
551+
(v) => v < 4,
552+
);
505553
console.log(Array.from(iter)); // [1, 2, 3]
506554
```
507555

508556
```ts
509557
import { takeWhile } from "@core/iterutil/async/take-while";
510558

511-
const iter = takeWhile([1, 2, 3, 4, 5], (value) => value < 4);
559+
const iter = takeWhile(
560+
[1, 2, 3, 4, 5],
561+
(v) => v < 4,
562+
);
512563
console.log(await Array.fromAsync(iter)); // [1, 2, 3]
513564
```
514565

@@ -534,10 +585,10 @@ const iter1 = uniq([1, 2, 2, 3, 3, 3]);
534585
console.log(Array.from(iter1)); // [1, 2, 3]
535586

536587
const iter2 = uniq(
537-
[1, 2, 3, 1, 2, 3, 10, 20, 30, 11, 21, 31],
538-
(v) => Math.floor(v / 10),
588+
[1, 2, 3, 4, 5, 6, 7, 8, 9],
589+
(v) => v % 4,
539590
);
540-
console.log(Array.from(iter2)); // [1, 10, 20, 30]
591+
console.log(Array.from(iter2)); // [1, 2, 3, 4]
541592
```
542593

543594
```ts
@@ -547,10 +598,10 @@ const iter1 = uniq([1, 2, 2, 3, 3, 3]);
547598
console.log(await Array.fromAsync(iter1)); // [1, 2, 3]
548599

549600
const iter2 = uniq(
550-
[1, 2, 3, 1, 2, 3, 10, 20, 30, 11, 21, 31],
551-
(v) => Math.floor(v / 10),
601+
[1, 2, 3, 4, 5, 6, 7, 8, 9],
602+
(v) => v % 4,
552603
);
553-
console.log(await Array.fromAsync(iter2)); // [1, 10, 20, 30]
604+
console.log(await Array.fromAsync(iter2)); // [1, 2, 3, 4]
554605
```
555606

556607
### zip

async/chain.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
/**
2-
* Chains multiple iterables together.
2+
* Chains multiple iterables and returns the chained iterable.
3+
*
4+
* The chained iterable will yield the elements of the first iterable, then the
5+
* elements of the second iterable, and so on.
6+
*
7+
* Use {@linkcode https://jsr.io/@core/iterutil/async/zip zip} to zip iterables.
8+
* Use {@linkcode https://jsr.io/@core/iterutil/chain chain} to chain iterables synchronously.
39
*
410
* @param iterables The iterables to chain.
511
* @returns The chained iterable.
@@ -8,20 +14,20 @@
814
* ```ts
915
* import { chain } from "@core/iterutil/async/chain";
1016
*
11-
* const iter = chain([1, 2], [3, 4]);
12-
* console.log(await Array.fromAsync(iter)); // [1, 2, 3, 4]
13-
* ```
14-
*
15-
* @example With malformed iterables
16-
* ```ts
17-
* import { chain } from "@core/iterutil/async/chain";
18-
*
19-
* const iter = chain([1, 2], ["a", "b"], [true]);
20-
* console.log(await Array.fromAsync(iter)); // [1, 2, "a", "b", true]
17+
* const iter = chain(
18+
* [1, 2, 3],
19+
* ["a", "b"],
20+
* [true]
21+
* );
22+
* console.log(await Array.fromAsync(iter)); // [1, 2, 3, "a", "b", true]
2123
* ```
2224
*/
2325
export async function* chain<
24-
T extends (Iterable<unknown> | AsyncIterable<unknown>)[],
26+
T extends readonly [
27+
Iterable<unknown> | AsyncIterable<unknown>,
28+
Iterable<unknown> | AsyncIterable<unknown>,
29+
...(Iterable<unknown> | AsyncIterable<unknown>)[],
30+
],
2531
>(
2632
...iterables: T
2733
): AsyncIterable<Chain<T>> {

0 commit comments

Comments
 (0)