Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cedrickring/prisma-pagination
Pagination Extension for Prisma 2
https://github.com/cedrickring/prisma-pagination
Last synced: 23 days ago
JSON representation
Pagination Extension for Prisma 2
- Host: GitHub
- URL: https://github.com/cedrickring/prisma-pagination
- Owner: cedrickring
- Created: 2021-12-06T09:34:13.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2022-01-27T09:52:28.000Z (almost 3 years ago)
- Last Synced: 2024-11-25T08:45:09.061Z (about 1 month ago)
- Language: TypeScript
- Homepage:
- Size: 17.6 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Prisma Pagination## About
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 polyfill, so no original/generated prisma files will be touched.
Usage is as easy as:
```ts
import { PrismaClient } from '@prisma/client';
import '@prismaext/pagination';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
1. Install `@prismaext/pagination` with either `yarn` or `npm` (or some other package manager)
e.g. `npm install @prismaext/pagination` or `yarn add @prismaext/pagination`
2. Add a generator block to your `schema.prisma` like:
```prisma
generator pagination {
provider = "pagination-generator"
}
```
3. Run `prisma generate`
4. Add `import '@prismaext/pagination';` to the top of the file where your `PrismaClient` 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:
```ts
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: numberdistinct?: 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.