gatsby-source-prismic
Version:
Gatsby source plugin for building websites using Prismic as a data source
35 lines (32 loc) • 1.16 kB
text/typescript
import * as gatsby from "gatsby";
import * as prismicT from "@prismicio/types";
import * as RTE from "fp-ts/ReaderTaskEither";
import { pipe } from "fp-ts/function";
import { Dependencies } from "../types";
import { buildObjectType } from "./buildObjectType";
import { buildFieldConfigMap } from "./buildFieldConfigMap";
/**
* Builds a GraphQL type from a record mapping a Prismic field API ID to its
* schema definition.
*
* @param path - Path to the schema record.
* @param record - Record mapping a Prismic field API ID to its schema definition.
* @param typeName - Type name of the resulting GraphQL type.
*
* @returns GraphQL type containing fields for each record property.
*/
export const buildSchemaRecordType = (
path: string[],
record: Record<string, prismicT.CustomTypeModelField>,
typeName: string | string[] = path,
): RTE.ReaderTaskEither<Dependencies, Error, gatsby.GatsbyGraphQLObjectType> =>
pipe(
RTE.ask<Dependencies>(),
RTE.bind("fields", () => buildFieldConfigMap(path, record)),
RTE.chainW((scope) =>
buildObjectType({
name: scope.nodeHelpers.createTypeName(typeName),
fields: scope.fields,
}),
),
);