{"_id":"@bit-architect/nestjs-paginator","_rev":"1-784d3a351bca23bf68fe3a692cca7b16","name":"@bit-architect/nestjs-paginator","dist-tags":{"latest":"1.0.3"},"versions":{"0.0.1":{"name":"@bit-architect/nestjs-paginator","version":"0.0.1","dependencies":{"tslib":"^2.3.0"},"type":"commonjs","main":"./src/index.js","typings":"./src/index.d.ts","gitHead":"24c500c0b5772171be278a556768ea9439b2c78f","description":"This library was generated with [Nx](https://nx.dev).","_id":"@bit-architect/nestjs-paginator@0.0.1","_nodeVersion":"18.5.0","_npmVersion":"8.12.1","dist":{"integrity":"sha512-eKVH+rRdh7CrmPSj/O7eoQ2jU3xD2G52eQukNSA3fvxxCmoN5SpS15hsQJvYHhH6LqyMQAMSyd+JxUXTy4WdyA==","shasum":"c87adae1ec7c7a07bf689183f22433f2bfcef9f5","tarball":"https://registry.npmjs.org/@bit-architect/nestjs-paginator/-/nestjs-paginator-0.0.1.tgz","fileCount":17,"unpackedSize":10042,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMz1cA4p0mQwijnfgnYND7gNgTC18Pns7c5OBDPcrUvgIgAPWVyimuK6LTNfCHdDU9QgfmqZjoTafE91OaXWUgwJw="}]},"_npmUser":{"name":"johannes.schobel","email":"johannes.schobel@googlemail.com"},"directories":{},"maintainers":[{"name":"johannes.schobel","email":"johannes.schobel@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nestjs-paginator_0.0.1_1692714944622_0.4119716313578978"},"_hasShrinkwrap":false},"1.0.3":{"name":"@bit-architect/nestjs-paginator","version":"1.0.3","dependencies":{"@nestjs/common":"10.1.3","tslib":"^2.3.0"},"type":"commonjs","main":"./src/index.js","typings":"./src/index.d.ts","private":false,"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"gitHead":"8918bc27bedfcd08e76f8cc6e7d0503177d7a1cc","description":"## Installation","_id":"@bit-architect/nestjs-paginator@1.0.3","_nodeVersion":"16.20.2","_npmVersion":"8.19.4","dist":{"integrity":"sha512-a1/iMQAhdDukdjhnfuj0qiQWnz06juAxZXkqcfDsU1ZkzvFm54kPDObS+S7fZkIQErjgN0uxUgtj3sIzF7wbxg==","shasum":"41ca6ee5428f9df299ae07ad0e3d62abc8cb4a81","tarball":"https://registry.npmjs.org/@bit-architect/nestjs-paginator/-/nestjs-paginator-1.0.3.tgz","fileCount":18,"unpackedSize":12993,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEw8s9uDZnxX0EKNbYFeeyFvcohC0lgC1Dh73n4FjzeNAiEAzTYe6SWtvKq1/3uApVC/eaYscYEXTWtxO6w/5jiSOgk="}]},"_npmUser":{"name":"johannes.schobel","email":"johannes.schobel@googlemail.com"},"directories":{},"maintainers":[{"name":"johannes.schobel","email":"johannes.schobel@googlemail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/nestjs-paginator_1.0.3_1692802730654_0.022764075425840247"},"_hasShrinkwrap":false}},"time":{"created":"2023-08-22T14:35:44.500Z","0.0.1":"2023-08-22T14:35:44.822Z","modified":"2023-08-23T14:58:51.026Z","1.0.3":"2023-08-23T14:58:50.824Z"},"maintainers":[{"name":"johannes.schobel","email":"johannes.schobel@googlemail.com"}],"description":"## Installation","readme":"# nestjs-paginator\n\n## Installation\n\nAdd the library via\n\n```\nnpm i @bit-architect/nestjs-paginator\n```\n\nor\n\n```\nyarn add @bit-architect/nestjs-paginator\n```\n\n## Usage\n\nThe library provides a handy decorator that can be added to any NestJS controller. Consider the following example:\n\n```ts\nimport { Paginator, PaginatorQuery } from '@bit-architect/nestjs-paginator';\nimport { Controller, Get } from '@nestjs/common';\nimport { UserService } from './user.service';\n\n@Controller('users')\nexport class UserController {\n  constructor(private service: UserService) {}\n\n  @Get()\n  getUsers(@Paginator() query: PaginatorQuery) {\n    // console.log(query);\n    return await this.service.getUsers(query);\n  }\n}\n```\n\nCurrently, the `Paginator` supports the following query parameters:\n\n- `page`: number\n- `limit`: number\n- `sort`: string\n- `filter`: object\n\nNow, you can make a HTTP Call to the endpoint and pass the params as follows:\n\n```curl\nhttp://api.example.com/users?limit=20&page=3&sort=-email,username\n```\n\nThis will return\n\n- 20 users\n- from the 3rd page (i.e., entry 21-30 from the database according to your `sort` and `filter` parameters)\n- ordered by email descending (note the `-`) and username ascending\n\n### Different Format\n\nThe `Paginator` is designed to be ORM agnostic, i.e., it can be easily extended / adapted to work with common ORMs, like `TypeORM` or `Prisma`.\n\nThe easiest approach would be to simply create a `PrismaPaginator` Decorator and call the `PaginatorService`, and adapt the response as required.\nThis may look like this:\n\n```ts\nimport { PaginatorService, PaginatorOptions } from '@bit-architect/nestjs-paginator';\nimport { createParamDecorator, ExecutionContext } from '@nestjs/common';\n\nimport { PrismaPaginatorQuery } from './prisma-paginator-query.model';\n\nexport const PrismaPaginator = createParamDecorator((data: Partial<PaginatorOptions>, ctx: ExecutionContext) => {\n  const request = ctx.switchToHttp().getRequest();\n  const query = new PaginatorService().parseQuery(request.query, data);\n\n  const prismaQuery: PrismaPaginatorQuery = {\n    skip: query.skip,\n    take: query.take,\n    orderBy: query.sort, // note that prisma uses the orderBy instead of sort parameter!\n  };\n\n  return prismaQuery;\n});\n```\n\nNow you can just use the `PrismaPaginator` instead of the default `Paginator` in your controllers.\n","readmeFilename":"README.md"}