Skip to content

Commit b86bf06

Browse files
authored
feat: Use AsyncIterator wherever possible instead of AsyncGenerator (#131)
* feat: Use AsyncIterator wherever possible instead of AsyncGenerator * version bump * dependency updates
1 parent c41786f commit b86bf06

File tree

6 files changed

+928
-1201
lines changed

6 files changed

+928
-1201
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "obgen",
3-
"version": "0.3.0",
3+
"version": "0.4.0",
44
"description": "Javascript Observables implemented with async generators",
55
"main": "dist/index.js",
66
"types": "dist/index.d.ts",

src/asyncObservable.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {
1+
import iteratorToIterable, {
22
asyncFilterIterator,
33
asyncMapIterator,
44
filterIterator,
@@ -14,9 +14,11 @@ import Observable from "./observable";
1414
export default class AsyncObservable<T> extends Observable<T> {
1515
private readonly buffer: BufferedIterator<T>;
1616

17-
constructor(generatorFn: () => AsyncGenerator<T>) {
18-
super(generatorFn);
19-
this.buffer = BufferedIterator.fromIterables(generatorFn());
17+
constructor(iteratorFn: () => AsyncIterator<T>) {
18+
super(iteratorFn);
19+
this.buffer = BufferedIterator.fromIterables(
20+
iteratorToIterable(iteratorFn)
21+
);
2022
}
2123

2224
/** Iterates over the items in this iterable, draining any previously buffered items */

src/deferredObservable.ts

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import iteratorToIterable, {
33
asyncMapIterator,
44
filterIterator,
55
flatMapIterator,
6-
iteratorToGenerator,
76
mapIterator,
87
takeIterator,
98
} from "./internal/util";
@@ -17,69 +16,63 @@ import Observable from "./observable";
1716
export default class DeferredObservable<T> extends Observable<T> {
1817
private _iterator: AsyncIterator<T> | null = null;
1918

20-
constructor(generatorFn: () => AsyncGenerator<T>) {
21-
super(generatorFn);
19+
constructor(iteratorFn: () => AsyncIterator<T>) {
20+
super(iteratorFn);
2221
}
2322

2423
override iterable(): AsyncIterable<T> {
25-
this._iterator = this.generatorFn();
24+
this._iterator = this.iteratorFn();
2625
const { _iterator } = this;
2726
return iteratorToIterable(() => _iterator);
2827
}
2928

3029
override iterator(): AsyncIterator<T> {
31-
this._iterator = this._iterator || this.generatorFn();
30+
this._iterator = this._iterator || this.iteratorFn();
3231
return this._iterator;
3332
}
3433

3534
override asyncFilter(filterFn: (item: T) => Promise<boolean>): Observable<T> {
3635
const self = this;
3736
return new DeferredObservable(() =>
38-
iteratorToGenerator(asyncFilterIterator(self.iterator(), filterFn))
37+
asyncFilterIterator(self.iterator(), filterFn)
3938
);
4039
}
4140

4241
override asyncMap<O>(mapFn: (item: T) => Promise<O>): Observable<O> {
4342
const self = this;
4443
return new DeferredObservable(() =>
45-
iteratorToGenerator(asyncMapIterator(self.iterator(), mapFn))
44+
asyncMapIterator(self.iterator(), mapFn)
4645
);
4746
}
4847

4948
override filter(filterFn: (item: T) => boolean): Observable<T> {
5049
const self = this;
5150
return new DeferredObservable(() =>
52-
iteratorToGenerator(filterIterator(self.iterator(), filterFn))
51+
filterIterator(self.iterator(), filterFn)
5352
);
5453
}
5554

5655
override map<O>(mapFn: (item: T) => O): Observable<O> {
5756
const self = this;
58-
return new DeferredObservable(() =>
59-
iteratorToGenerator(mapIterator(self.iterator(), mapFn))
60-
);
57+
return new DeferredObservable(() => mapIterator(self.iterator(), mapFn));
6158
}
6259

6360
override flatMap<O>(mapFn: (item: T) => AsyncObservable<O>): Observable<O> {
6461
const self = this;
6562
return new DeferredObservable(() =>
66-
iteratorToGenerator(flatMapIterator(self.iterator(), mapFn))
63+
flatMapIterator(self.iterator(), mapFn)
6764
);
6865
}
6966

7067
override merge(other: Observable<T>): Observable<T> {
7168
return new DeferredObservable(() =>
72-
iteratorToGenerator(
73-
BufferedIterator.fromIterables(this.iterable(), other.iterable())
74-
)
69+
BufferedIterator.fromIterables(this.iterable(), other.iterable())
7570
);
7671
}
7772

7873
override take(num: number): Observable<T> {
7974
const self = this;
80-
return new DeferredObservable(() =>
81-
iteratorToGenerator(takeIterator(self.iterator(), num))
82-
);
75+
return new DeferredObservable(() => takeIterator(self.iterator(), num));
8376
}
8477

8578
override async toArray(): Promise<T[]> {

src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@ export function asyncDefer<T>(promiseFn: () => Promise<T>): Observable<T> {
6666
* is iterated over.
6767
*/
6868
export function deferredWrap<T>(
69-
iteratorFn: () => AsyncGenerator<T>
69+
iteratorFn: () => AsyncIterator<T>
7070
): Observable<T> {
7171
return new DeferredObservable(iteratorFn);
7272
}
7373

7474
/** Returns a new `Observable` that immediately calls and buffers the provided `iteratorFn` function to emit events */
75-
export function wrap<T>(iteratorFn: () => AsyncGenerator<T>): Observable<T> {
75+
export function wrap<T>(iteratorFn: () => AsyncIterator<T>): Observable<T> {
7676
return new AsyncObservable(iteratorFn);
7777
}
7878

src/observable.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { GenericObserver } from "./genericObserver";
22
import { isObserver } from "./internal/util";
33

44
export default abstract class Observable<T> {
5-
protected constructor(readonly generatorFn: () => AsyncGenerator<T>) {}
5+
protected constructor(readonly iteratorFn: () => AsyncIterator<T>) {}
66

77
async subscribe(observer?: GenericObserver<T>): Promise<void> {
88
for await (const item of this.iterable()) {

0 commit comments

Comments
 (0)