graphile-build-pg
Version:
Build a GraphQL schema by reflection over a PostgreSQL schema. Easy to customize since it's built with plugins on graphile-build
58 lines (56 loc) • 1.66 kB
Flow
// @flow
import type { Plugin } from "graphile-build";
export default (function PageInfoStartEndCursor(builder) {
builder.hook(
"GraphQLObjectType:fields",
(fields, build, context) => {
const { extend, getTypeByName, inflection } = build;
const { Self, fieldWithHooks } = context;
if (Self.name !== inflection.builtin("PageInfo")) {
return fields;
}
const Cursor = getTypeByName("Cursor");
return extend(
fields,
{
startCursor: fieldWithHooks(
"startCursor",
({ addDataGenerator }) => {
addDataGenerator(() => ({ usesCursor: [true] }));
return {
description: build.wrapDescription(
"When paginating backwards, the cursor to continue.",
"field"
),
type: Cursor,
};
},
{
isPageInfoStartCursorField: true,
}
),
endCursor: fieldWithHooks(
"endCursor",
({ addDataGenerator }) => {
addDataGenerator(() => ({ usesCursor: [true] }));
return {
description: build.wrapDescription(
"When paginating forwards, the cursor to continue.",
"field"
),
type: Cursor,
};
},
{
isPageInfoStartCursorField: true,
}
),
},
`Adding startCursor/endCursor to ${Self.name}`
);
},
["PageInfoStartEndCursor"],
[],
["Cursor"]
);
}: Plugin);