Skip to content

Commit e73d734

Browse files
committed
make the hooks returned iter type more concrete with a non-optional .return method and more
1 parent 601eeff commit e73d734

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

spec/tests/useSharedAsyncIter.spec.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ describe('`useSharedAsyncIter` hook', () => {
7272
const yieldP2 = iterator2.next();
7373

7474
{
75-
await iterator1.return!();
75+
await iterator1.return();
7676
const promiseStates = await Promise.all([yieldP1, yieldP2].map(checkPromiseState));
7777
expect(promiseStates).toStrictEqual([
7878
{ state: 'FULFILLED', value: { done: true, value: undefined } },
@@ -81,7 +81,7 @@ describe('`useSharedAsyncIter` hook', () => {
8181
}
8282

8383
{
84-
await iterator2.return!();
84+
await iterator2.return();
8585
const promiseStates = await Promise.all([yieldP1, yieldP2].map(checkPromiseState));
8686
expect(promiseStates).toStrictEqual([
8787
{ state: 'FULFILLED', value: { done: true, value: undefined } },
@@ -174,16 +174,16 @@ describe('`useSharedAsyncIter` hook', () => {
174174
await Promise.all(iterators.map(it => it.next()));
175175
expect(mockSourceIterator.return).not.toHaveBeenCalled();
176176

177-
await iterators[2].return!();
177+
await iterators[2].return();
178178
expect(mockSourceIterator.return).not.toHaveBeenCalled();
179179

180-
await iterators[1].return!();
180+
await iterators[1].return();
181181
expect(mockSourceIterator.return).not.toHaveBeenCalled();
182182

183-
await iterators[0].return!();
183+
await iterators[0].return();
184184
expect(mockSourceIterator.return).toHaveBeenCalledOnce();
185185

186-
await Promise.all(iterators.map(it => it.return!()));
186+
await Promise.all(iterators.map(it => it.return()));
187187
expect(mockSourceIterator.return).toHaveBeenCalledOnce();
188188
});
189189

@@ -205,12 +205,12 @@ describe('`useSharedAsyncIter` hook', () => {
205205
await Promise.all(iterators.map(it => it.next()));
206206
expect(mockSourceIterator.return).not.toHaveBeenCalled();
207207

208-
const returnCallsPromise = Promise.all(iterators.map(it => it.return!()));
208+
const returnCallsPromise = Promise.all(iterators.map(it => it.return()));
209209
expect(mockSourceIterator.return).toHaveBeenCalledOnce();
210210

211211
await returnCallsPromise;
212212

213-
await Promise.all(iterators.map(it => it.return!()));
213+
await Promise.all(iterators.map(it => it.return()));
214214
expect(mockSourceIterator.return).toHaveBeenCalledOnce();
215215
});
216216
}

src/useSharedAsyncIter/index.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,16 @@ export { useSharedAsyncIter };
7474
* }
7575
* ```
7676
*/
77-
function useSharedAsyncIter<T>(value: AsyncIterable<T>): AsyncIterable<T>;
77+
function useSharedAsyncIter<T>(value: AsyncIterable<T>): {
78+
[Symbol.asyncIterator](): {
79+
next(): Promise<IteratorResult<T, undefined>>;
80+
return(): Promise<IteratorReturnResult<undefined>>;
81+
};
82+
};
7883
function useSharedAsyncIter<T>(value: T): T;
7984
function useSharedAsyncIter(value: unknown): MaybeAsyncIterable<unknown> {
8085
return useAsyncIterMemo(
8186
value => (!isAsyncIter(value) ? value : asyncIterShare<unknown>()(value)),
8287
[value]
8388
);
8489
}
85-
86-
// TODO: Enhance `useSharedAsyncIter`'s returned iter to have the `.return` method as NOT optional?

0 commit comments

Comments
 (0)