{"id":15319106,"url":"https://github.com/zoontek/prisma-cursor-pagination","last_synced_at":"2025-04-15T02:29:37.944Z","repository":{"id":45622886,"uuid":"460970646","full_name":"zoontek/prisma-cursor-pagination","owner":"zoontek","description":"Relay cursor pagination helpers for prisma","archived":false,"fork":false,"pushed_at":"2024-06-06T18:37:12.000Z","size":112,"stargazers_count":15,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-28T14:12:04.040Z","etag":null,"topics":["connection","cursor","graphql","pagination","prisma","relay"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zoontek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["zoontek"]}},"created_at":"2022-02-18T18:54:24.000Z","updated_at":"2024-04-03T04:11:15.000Z","dependencies_parsed_at":"2024-06-06T20:20:08.806Z","dependency_job_id":"9edb4815-025b-4ae6-a180-e85d890b8bdf","html_url":"https://github.com/zoontek/prisma-cursor-pagination","commit_stats":{"total_commits":19,"total_committers":1,"mean_commits":19.0,"dds":0.0,"last_synced_commit":"a9e01ff3c5dbae47da93a8abd2827c2ba5a5dc18"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoontek%2Fprisma-cursor-pagination","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoontek%2Fprisma-cursor-pagination/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoontek%2Fprisma-cursor-pagination/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoontek%2Fprisma-cursor-pagination/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zoontek","download_url":"https://codeload.github.com/zoontek/prisma-cursor-pagination/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248993589,"owners_count":21195220,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["connection","cursor","graphql","pagination","prisma","relay"],"created_at":"2024-10-01T09:03:45.223Z","updated_at":"2025-04-15T02:29:37.905Z","avatar_url":"https://github.com/zoontek.png","language":"TypeScript","funding_links":["https://github.com/sponsors/zoontek"],"categories":[],"sub_categories":[],"readme":"# prisma-cursor-pagination\n\nRelay cursor pagination helpers for prisma.\n\n[![mit licence](https://img.shields.io/dub/l/vibe-d.svg?style=for-the-badge)](https://github.com/zoontek/prisma-cursor-pagination/blob/main/LICENSE)\n[![npm version](https://img.shields.io/npm/v/prisma-cursor-pagination?style=for-the-badge)](https://www.npmjs.org/package/prisma-cursor-pagination)\n[![bundlephobia](https://img.shields.io/bundlephobia/minzip/prisma-cursor-pagination?label=size\u0026style=for-the-badge)](https://bundlephobia.com/result?p=prisma-cursor-pagination)\n\n## Installation\n\n```sh\n$ npm i prisma-cursor-pagination --save\n# --- or ---\n$ yarn add prisma-cursor-pagination\n```\n\n## 📘 Usage\n\n```ts\nimport { parsePaginationArgs } from \"prisma-cursor-pagination\";\n\nconst resolvers = {\n  Query: {\n    projects: async (_, args) =\u003e {\n      // parse pagination arguments (first: Int! \u0026 after: ID / last: Int! \u0026 before: ID)\n      const { findManyArgs, toConnection } = parsePaginationArgs(args);\n      const projects = await prisma.project.findMany(findManyArgs);\n\n      // transform prisma result into a relay connection\n      return toConnection(projects);\n    },\n\n    users: async (_, args) =\u003e {\n      const { findManyArgs, toConnection } = parsePaginationArgs(args);\n\n      const [totalCount, users] = await Promise.all([\n        prisma.user.count(),\n        prisma.user.findMany(findManyArgs),\n      ]);\n\n      // add non-standard data in connection (here totalCount)\n      return { totalCount, ...toConnection(users) };\n    },\n  },\n};\n```\n\n## ⚙️ API\n\n### parsePaginationArgs(args, options)\n\nTake the query arguments and return prisma `findMany` arguments and a function to transform prisma result into a relay connection.\n\n```ts\ntype parsePaginationArgs = (\n  args: Partial\u003c{\n    first: number | null;\n    after: string | null;\n    last: number | null;\n    before: string | null;\n  }\u003e,\n  options: {\n    connectionName?: string; // optional, used only to improve error message\n  },\n) =\u003e {\n  findManyArgs: {\n    cursor?: {\n      id: string;\n    };\n    skip?: number;\n    take: number;\n  };\n  toConnection: \u003cT extends { id: string }\u003e(\n    items: T[],\n  ) =\u003e {\n    edges: Edge\u003cT\u003e[];\n    pageInfo: PageInfo;\n  };\n};\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoontek%2Fprisma-cursor-pagination","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzoontek%2Fprisma-cursor-pagination","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoontek%2Fprisma-cursor-pagination/lists"}