diff --git a/src/hooks/next.ts b/src/hooks/next.ts new file mode 100644 index 00000000..5c5ccbd9 --- /dev/null +++ b/src/hooks/next.ts @@ -0,0 +1,19 @@ +import type { HookContext } from '@feathersjs/feathers'; + +/** + * Set a generator on paginated results that returns an iterator with result arrays + * @see https://hooks-common.feathersjs.com/hooks.html#next + */ + +async function* generateNext({ result, service, args = { query: {} } }) { + yield result.data + let pager = result + while (pager.data.length > 0) { + args.query.$skip = pager.limit + pager.skip + pager = await service.find(args) + yield pager.data + } +} +export function next(context) { + return (context: H) => (context.result.next = context.result.skip === 0 ? generateNext(context) : undefined) +}