{"_id":"@dessly/prisma-cursor-paginate","_rev":"2-ccd25f4daead68f20d0674b627643aa2","name":"@dessly/prisma-cursor-paginate","dist-tags":{"latest":"0.2.1-1.0.0"},"versions":{"0.2.1":{"name":"@dessly/prisma-cursor-paginate","version":"0.2.1","keywords":["orm","prisma","paginate","pagination"],"author":{"name":"knaus94"},"license":"ISC","_id":"@dessly/prisma-cursor-paginate@0.2.1","maintainers":[{"name":"dessly","email":"dmitry.mahitov@gmail.com"}],"homepage":"https://github.com/knaus94/prisma-cursor-paginate#readme","bugs":{"url":"https://github.com/knaus94/prisma-cursor-paginate/issues"},"dist":{"shasum":"d2d23e9c79f032b462240f79cf997b68999cbf19","tarball":"https://registry.npmjs.org/@dessly/prisma-cursor-paginate/-/prisma-cursor-paginate-0.2.1.tgz","fileCount":24,"integrity":"sha512-DFjeH7qVG8RLQfwZN59JY4DWmPwmqYKKxrYVzTNLkIEwP4W/iGx1+38nsAxwW4EvTgLTWUw6BN0zTTUX660tYQ==","signatures":[{"sig":"MEUCIQCDNfyWXySjes5kthrpMp3btvFurHcPvmbfDFVeP+knywIgf43vKmZLfSt6gk3JuaS+ZOkdqHf5dcw91C5vpmt0KQc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20356},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"e45fade849b8a0bcb9213bb4c0c214097d179fef","scripts":{"docs":"typedoc src/index.ts","lint":"eslint ./src ./test --ext .ts","test":"jest","build":"tsc","prettier":"prettier 'src/**/*.{js,ts,mjs,cjs,json}' --write"},"_npmUser":{"name":"dessly","email":"dmitry.mahitov@gmail.com"},"repository":{"url":"git+https://github.com/knaus94/prisma-cursor-paginate.git","type":"git"},"_npmVersion":"10.9.4","description":"Paginate ORM Prisma","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^30.2.0","eslint":"^9.39.2","prisma":"7.3.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","typedoc":"^0.28.15","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^25.0.1","@prisma/client":"7.3.0","typescript-eslint":"^8.49.0","@prisma/adapter-pg":"^7.3.0","@typescript-eslint/parser":"^8.49.0","@typescript-eslint/eslint-plugin":"^8.49.0"},"peerDependencies":{"prisma":">=4.9.0","@prisma/client":">=4.9.0"},"_npmOperationalInternal":{"tmp":"tmp/prisma-cursor-paginate_0.2.1_1769268833500_0.4072849106920273","host":"s3://npm-registry-packages-npm-production"}},"0.2.1-1.0.0":{"name":"@dessly/prisma-cursor-paginate","version":"0.2.1-1.0.0","description":"Paginate ORM Prisma","main":"dist/index.js","types":"dist/index.d.ts","keywords":["orm","prisma","paginate","pagination"],"scripts":{"test":"jest","build":"tsc","docs":"typedoc src/index.ts","lint":"eslint ./src ./test --ext .ts","prettier":"prettier 'src/**/*.{js,ts,mjs,cjs,json}' --write"},"repository":{"type":"git","url":"git+https://github.com/knaus94/prisma-cursor-paginate.git"},"author":{"name":"knaus94"},"license":"ISC","bugs":{"url":"https://github.com/knaus94/prisma-cursor-paginate/issues"},"homepage":"https://github.com/knaus94/prisma-cursor-paginate#readme","devDependencies":{"@prisma/adapter-pg":"^7.3.0","@prisma/client":"7.3.0","@types/jest":"^30.0.0","@types/node":"^25.0.1","@typescript-eslint/eslint-plugin":"^8.49.0","@typescript-eslint/parser":"^8.49.0","eslint":"^9.39.2","jest":"^30.2.0","prisma":"7.3.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","typedoc":"^0.28.15","typescript":"^5.9.3","typescript-eslint":"^8.49.0"},"peerDependencies":{"@prisma/client":">=4.9.0","prisma":">=4.9.0"},"_id":"@dessly/prisma-cursor-paginate@0.2.1-1.0.0","gitHead":"e45fade849b8a0bcb9213bb4c0c214097d179fef","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-Cqmq318TARBPMQvNspyLRJ58Dzbj9ZtFR8AiEKZxNs+XzsQvetwnYKwbPmqLEd3RK/2Vzgvkm6PuyRbOTFze3g==","shasum":"68c7090ef7b889d4d8cde1374258d29d7f72c722","tarball":"https://registry.npmjs.org/@dessly/prisma-cursor-paginate/-/prisma-cursor-paginate-0.2.1-1.0.0.tgz","fileCount":24,"unpackedSize":20428,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIF6IzsLKhqYV1SFt3kVj73o0K2IuZYw72w4yAZx322rLAiB3dHf/1XSq+NujcWQfr4bsttAZbMUfukEh8s4dEKQzjw=="}]},"_npmUser":{"name":"dessly","email":"dmitry.mahitov@gmail.com"},"directories":{},"maintainers":[{"name":"dessly","email":"dmitry.mahitov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/prisma-cursor-paginate_0.2.1-1.0.0_1769269843093_0.749423288010935"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-24T15:33:53.391Z","modified":"2026-01-24T15:50:43.416Z","0.2.1":"2026-01-24T15:33:53.634Z","0.2.1-1.0.0":"2026-01-24T15:50:43.285Z"},"bugs":{"url":"https://github.com/knaus94/prisma-cursor-paginate/issues"},"author":{"name":"knaus94"},"license":"ISC","homepage":"https://github.com/knaus94/prisma-cursor-paginate#readme","keywords":["orm","prisma","paginate","pagination"],"repository":{"type":"git","url":"git+https://github.com/knaus94/prisma-cursor-paginate.git"},"description":"Paginate ORM Prisma","maintainers":[{"name":"dessly","email":"dmitry.mahitov@gmail.com"}],"readme":"# 📖 prisma-paginate\n\n| [![npm version](https://badge.fury.io/js/prisma-paginate.svg)](https://badge.fury.io/js/prisma-paginate) | [![CI](https://github.com/sandrewTx08/prisma-paginate/actions/workflows/ci.yaml/badge.svg)](https://github.com/sandrewTx08/prisma-paginate/actions/workflows/ci.yaml) | [![pages-build-deployment](https://github.com/sandrewTx08/prisma-paginate/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/sandrewTx08/prisma-paginate/actions/workflows/pages/pages-build-deployment) |\n| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n\n## 🚀 Installation\n\n```bash\n# Using npm\nnpm install prisma @prisma/client prisma-paginate\n\n# Using yarn\nyarn add prisma @prisma/client prisma-paginate\n\n# Using pnpm\npnpm add prisma @prisma/client prisma-paginate\n```\n\n## 📋 Version compatibility\n\n| Prisma   | prisma-paginate |\n| -------- | --------------- |\n| 7.0.0>=  | 6.0.0           |\n| 4.16.0<= | 5.2.2           |\n\n## 📚 Documentation\n\nFor comprehensive API documentation and type definitions, visit:\n\n**[http://sandrewtx08.github.io/prisma-paginate/](http://sandrewtx08.github.io/prisma-paginate/)**\n\n## 📦 Importing\n\n### ESM (ES Modules)\n\n```typescript\n// Standard Prisma client\nimport { PrismaClient } from \"@prisma/client\";\nimport PrismaPaginate from \"prisma-paginate\";\n\n// Custom Prisma client paths also work\nimport { PrismaClient } from \"./generated/client\";\nimport PrismaPaginate from \"prisma-paginate\";\n```\n\n### CommonJS\n\n```javascript\nconst { PrismaClient } = require(\"@prisma/client\");\nconst PrismaPaginate = require(\"prisma-paginate\").default;\n```\n\n> **Note:** The extension works seamlessly with any Prisma client instance, regardless of the import path. No additional configuration needed!\n\n## 🔧 Usage\n\n### Basic Setup\n\n```typescript\nconst prisma = new PrismaClient();\nconst xprisma = prisma.$extends(PrismaPaginate);\n\n// Simple cursor pagination\nxprisma.user\n\t.cursorPaginate({\n\t\tlimit: 10,\n\t\torderBy: { id: \"asc\" },\n\t\tcursorFields: [\"id\"] as const,\n\t\tselect: { id: true, name: true },\n\t})\n\t.then((result) => {\n\t\tconsole.log(result.result);\n\t\tconsole.log(result.hasNextPage);\n\t\tconsole.log(result.nextCursor);\n\t});\n\n// Pagination with filters and cursor\nxprisma.post\n\t.cursorPaginate(\n\t\t{\n\t\t\twhere: { published: true },\n\t\t\torderBy: [{ createdAt: \"desc\" }, { id: \"desc\" }],\n\t\t\tcursorFields: [\"createdAt\", \"id\"] as const,\n\t\t},\n\t\t{ limit: 10, cursor: lastCursor },\n\t)\n\t.then((result) => {\n\t\tconsole.log(result.result);\n\t});\n```\n\n### Complete Example\n\n```typescript\n// Assume database has 100 rows: [ { id: 1 }, { id: 2 }, ..., { id: 100 } ]\nconst first = await xprisma.user.cursorPaginate({\n\twhere: {\n\t\tactive: true,\n\t},\n\torderBy: [{ createdAt: \"desc\" }, { id: \"desc\" }],\n\tlimit: 50,\n\tcursorFields: [\"createdAt\", \"id\"] as const,\n});\n\nconsole.log(first.result); // Array of 50 users\nconsole.log(first.hasNextPage); // true if there's a next page\nconsole.log(first.nextCursor); // cursor for the next page\n\nif (first.hasNextPage) {\n\tconst second = await xprisma.user.cursorPaginate(\n\t\t{\n\t\t\twhere: {\n\t\t\t\tactive: true,\n\t\t\t},\n\t\t\torderBy: [{ createdAt: \"desc\" }, { id: \"desc\" }],\n\t\t\tcursorFields: [\"createdAt\", \"id\"] as const,\n\t\t},\n\t\t{ limit: 50, cursor: first.nextCursor },\n\t);\n\n\tconsole.log(second.result);\n}\n```\n\n## 📋 API Reference\n\n### Method Signatures\n\n```typescript\n// Option 1: Combined findMany args and pagination\ncursorPaginate(findManyPaginationArgs: PrismaFindManyArgs & PaginationArgs)\n\n// Option 2: Separate findMany args and pagination\ncursorPaginate(findManyArgs: PrismaFindManyArgs, paginationArgs: PaginationArgs)\n```\n\n### Parameters\n\n#### `findManyArgs` (Object)\n\nStandard Prisma `findMany` arguments including:\n\n- `where` - Filter conditions\n- `select` - Fields to select\n- `include` - Relations to include\n- `orderBy` - Sorting options\n- And all other Prisma query options\n\n#### `paginationArgs` (Object)\n\nPagination configuration:\n\n- `limit` (Number) - Number of items per page\n- `cursor` (Object) - Cursor values from the previous page\n- `cursorFields` (Array) - Ordered unique cursor field names (must match `orderBy`)\n\n> **Note:** When using cursor pagination, `orderBy` is required. The `cursorFields`\n> list is required, must be unique fields, and must match the `orderBy` fields and order.\n\n### Return Value\n\nThe `cursorPaginate()` method returns a `Promise<PaginationResult>` with the following properties:\n\n| Property      | Type     | Description                               |\n| ------------- | -------- | ----------------------------------------- |\n| `result`      | Array    | Array of paginated records                |\n| `limit`       | Number   | Page size                                 |\n| `hasNextPage` | Boolean  | Whether a next page exists                |\n| `nextCursor`  | Object   | Cursor values for the next page           |\n| `nextPage`    | Function | Returns `Promise` to fetch the next page  |\n\n## ✨ Features\n\n- 🚀 **Easy Integration** - Simple Prisma extension setup\n- 📦 **TypeScript Support** - Full type safety with IntelliSense\n- 🔄 **Flexible API** - Multiple ways to call pagination\n- 📊 **Cursor Metadata** - `hasNextPage` and typed `nextCursor`\n- 🎯 **Prisma Native** - Works with all Prisma query options\n- ⚡ **Zero Config** - Works out of the box with any Prisma setup\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## 🔗 Links\n\n- [Documentation](http://sandrewtx08.github.io/prisma-paginate/)\n- [GitHub Repository](https://github.com/sandrewTx08/prisma-paginate)\n- [npm Package](https://www.npmjs.com/package/prisma-paginate)\n- [Report Issues](https://github.com/sandrewTx08/prisma-paginate/issues)\n","readmeFilename":"README.md"}