Prisma Client extension for pagination.
- Page number pagination
- Cursor-based pagination
- Fully tested
pnpm install @zhangwj0520/prisma-extension-pagination
import { PrismaClient } from "@prisma/client";
import { pagination } from "@zhangwj0520/prisma-extension-pagination";
const prisma = new PrismaClient().$extends(pagination());
import { PrismaClient } from "@prisma/client";
import { paginate } from "@zhangwj0520/prisma-extension-pagination";
const prisma = new PrismaClient().$extends({
model: {
user: {
paginate,
},
},
});
import { PrismaClient } from "@prisma/client";
import { pagination } from "@zhangwj0520/prisma-extension-pagination";
const prisma = new PrismaClient().$extends(
pagination({
pageSize: 10,
})
);
When using the extension on some models, you need to use createPaginator
function to set the default values:
import { PrismaClient } from "@prisma/client";
import { createPaginator } from "prisma-extension-pagination";
const paginate = createPaginator({
pageSize: 10,
});
// You can create many paginators with different settings.
// They can be reused for different models.
const prisma = new PrismaClient().$extends({
model: {
user: {
paginate,
},
post: {
paginate,
},
},
});
Page number pagination uses pageSize
to select a limited range and current
to load a specific current of results.
const res = await prisma.user
.paginate({
select: {
id: true,
}
})
.withPages({
pageSize: 10,
});
{
list: users,
total:100,
pagination: {
pageSize: 10
current: 1;
}
}
const res = await prisma.user
.paginate()
.withPages({
pageSize: 10,
current: 2,
});
// res contains the following
{
list: users,
total:100,
pagination: {
pageSize: 10
current: 2;
}
}
Sometimes it's useful to return all results, if you need to do that, you can pass pageSize: null
.
This project is licensed under the terms of the MIT license.