Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 1x 1x 2x 3x 3x 2x 2x 2x 2x 2x 3x 2x 1x 3x | import { $$asyncIterator } from 'iterall';
export type FilterFn = (rootValue?: any, args?: any, context?: any, info?: any) => boolean;
export const withFilter = (asyncIteratorFn: () => AsyncIterator<any>, filterFn: FilterFn) => {
return (rootValue: any, args: any, context: any, info: any): AsyncIterator<any> => {
const asyncIterator = asyncIteratorFn();
const getNextPromise = () => {
return asyncIterator
.next()
.then(payload => Promise.all([
payload,
Promise.resolve(filterFn(payload.value, args, context, info)).catch(() => false),
]))
.then(([payload, filterResult]) => {
Eif (filterResult === true) {
return payload;
}
// Skip the current value and wait for the next one
return getNextPromise();
});
};
return {
next() {
return getNextPromise();
},
return() {
return asyncIterator.return();
},
throw(error) {
return asyncIterator.throw(error);
},
[$$asyncIterator]() {
return this;
},
} as any;
};
};
|