(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9892],{7826:function(n,e,i){(window.__NEXT_P=window.__NEXT_P||[]).push(["/docs/plugins",function(){return i(6318)}])},6318:function(n,e,i){"use strict";i.r(e),i.d(e,{__N_SSG:function(){return t},frontmatter:function(){return h}});var s=i(5250),r=i(7160),l=i(3210),t=!0;let h={name:"Plugins",title:"Using Plugins in Pothos GraphQL",description:"List of plugins for Pothos"},c=l.k;function d(n){let e=Object.assign({h1:"h1",ul:"ul",li:"li",p:"p",a:"a",strong:"strong"},(0,r.ah)(),n.components);return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"plugins",children:"Plugins"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/add-graphql",children:(0,s.jsx)(e.strong,{children:"Add GraphQL"})})}),"\n",(0,s.jsx)(e.p,{children:"Add existing GraphQL types to your schema"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/scope-auth",children:(0,s.jsx)(e.strong,{children:"Auth"})})}),"\n",(0,s.jsx)(e.p,{children:"Add global, type level, or field level authorization checks to your schema"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/complexity",children:(0,s.jsx)(e.strong,{children:"Complexity"})})}),"\n",(0,s.jsx)(e.p,{children:"A plugin for defining and limiting complexity of queries"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/directives",children:(0,s.jsx)(e.strong,{children:"Directives"})})}),"\n",(0,s.jsx)(e.p,{children:"Integrate with existing schema graphql directives in a type-safe way."}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/errors",children:(0,s.jsx)(e.strong,{children:"Errors"})})}),"\n",(0,s.jsx)(e.p,{children:"A plugin for easily including error types in your GraphQL schema and hooking up error types to\nresolvers."}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/dataloader",children:(0,s.jsx)(e.strong,{children:"Dataloader"})})}),"\n",(0,s.jsx)(e.p,{children:"Quickly define data-loaders for your types and fields to avoid n+1 queries."}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/mocks",children:(0,s.jsx)(e.strong,{children:"Mocks"})})}),"\n",(0,s.jsx)(e.p,{children:"Add mock resolvers for easier testing"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/prisma",children:(0,s.jsx)(e.strong,{children:"Prisma"})})}),"\n",(0,s.jsx)(e.p,{children:"A plugin for more efficient integration with prisma that can help solve n+1 issues and more\nefficienty resolve queries"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/relay",children:(0,s.jsx)(e.strong,{children:"Relay"})})}),"\n",(0,s.jsx)(e.p,{children:"Easy to use builder methods for defining relay style nodes and connections, and helpful utilities"}),"\n",(0,s.jsx)(e.p,{children:"for cursor based pagination."}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/simple-objects",children:(0,s.jsx)(e.strong,{children:"Simple Objects"})})}),"\n",(0,s.jsx)(e.p,{children:"Define simple object types without resolvers or manual type definitions."}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/smart-subscriptions",children:(0,s.jsx)(e.strong,{children:"Smart Subscriptions"})})}),"\n",(0,s.jsx)(e.p,{children:"Make any part of your graph subscribable to get live updates as your data changes."}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/sub-graph",children:(0,s.jsx)(e.strong,{children:"Sub-Graph"})})}),"\n",(0,s.jsx)(e.p,{children:"Build multiple subsets of your graph to easily share code between internal and external APIs."}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/tracing",children:(0,s.jsx)(e.strong,{children:"Tracing"})})}),"\n",(0,s.jsx)(e.p,{children:"Add tracing for resolver execution, with support for opentelemetry, newrelic, century, logging,\nand custom tracers"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/validation",children:(0,s.jsx)(e.strong,{children:"Validation"})})}),"\n",(0,s.jsx)(e.p,{children:"Validating your inputs and arguments"}),"\n"]}),"\n",(0,s.jsxs)(e.li,{children:["\n",(0,s.jsx)(e.p,{children:(0,s.jsx)(e.a,{href:"./plugins/with-input",children:(0,s.jsx)(e.strong,{children:"With-Input"})})}),"\n",(0,s.jsx)(e.p,{children:"Define fields with inline input objects"}),"\n"]}),"\n"]})]})}e.default=function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,s.jsx)(c,Object.assign({},n,{children:(0,s.jsx)(d,n)}))}}},function(n){n.O(0,[8430,3210,9774,2888,179],function(){return n(n.s=7826)}),_N_E=n.O()}]);