@prismaext/pagination
v0.1.0
Published
This [Prisma Generator](https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#generator) adds polyfills for async-iterable-cursor-based pagination with a simple `.paginate()` method on each prisma delegate. This is a usual opt-in poly
Downloads
2
Readme
About
This Prisma Generator adds polyfills for async-iterable-cursor-based pagination with a simple .paginate()
method on each prisma delegate. This is a usual opt-in polyfill, so no original/generated prisma files will be touched.
Usage is as easy as:
const prisma = new PrismaClient();
async function printAllPosts() {
for await (const posts of prisma.post.paginate({ cursorField: 'id', pageSize: 50, include: { author: true } })) {
posts.forEach((post) => {
console.log(post.id, post.author.email);
});
}
}
Installation
Install
@prismaext/pagination
with eitheryarn
ornpm
(or some other package manager)e.g.
npm install @prismaext/pagination
oryarn add @prismaext/pagination
Add a generator block to your
schema.prisma
like:generator pagination { provider = "pagination-generator" }
Run
prisma generate
Add
import '@prismaext/pagination';
to the top of the file where yourPrismaClient
is being initialized.
After importing the definitions from @prismaext/pagination
, all prisma delegates will have additional paginate
methods. To align with the other apis, the method only allows a single argument of the type:
export type ${Model}PaginateArgs = {
/**
* Select specific fields to fetch from the ${Model}
*
**/
select?: ${Model}Select | null
/**
* Choose, which related nodes to fetch as well.
*
**/
include?: ${Model}Include | null
/**
* Filter, which ${Model}s to fetch.
*
**/
where?: ${Model}WhereInput
/**
* {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
*
* Determine the order of ${Model}s to fetch.
*
**/
orderBy?: Enumerable<${Model}OrderByWithRelationInput>
/**
* Items to be fetched per ${Model}
*
*/
pageSize: number
distinct?: Enumerable<${Model}ScalarFieldEnum>
/**
* The cursor field to be used to paginate through
*
* defaults to 'id' or the first unique field present in the model
*
*/
cursorField?: 'id' // or some other unique field
}
Similar to prisma-client-js
, this generator allows specifying the output
path where the generated definitions will be placed in.