UNPKG

gatsby-source-prismic

Version:

Gatsby source plugin for building websites using Prismic as a data source

65 lines (57 loc) 1.9 kB
import * as prismicT from "@prismicio/types"; import * as prismicH from "@prismicio/helpers"; import * as gatsby from "gatsby"; import { NormalizeConfig, NormalizedValueMap, NormalizerDependencies, } from "../types"; import { normalize } from "../normalize"; import { alternateLanguages, NormalizedAlternateLanguagesValue, } from "./alternateLanguages"; import { NormalizedDocumentDataValue } from "./documentData"; export const isDocument = ( value: unknown, ): value is prismicT.PrismicDocument => { return typeof value === "object" && value !== null && "type" in value; }; type NormalizeDocumentConfig<Value extends prismicT.PrismicDocument> = NormalizeConfig<Value> & NormalizerDependencies; export type NormalizedDocumentValue< Value extends prismicT.PrismicDocument = prismicT.PrismicDocument, > = Omit<Value, "alternate_languages" | "data"> & { __typename: string; _previewable: string; prismicId: string; alternate_languages: NormalizedAlternateLanguagesValue; data: NormalizedValueMap<Value["data"]>; dataRaw: Value["data"]; } & gatsby.NodeInput; export const document = <Value extends prismicT.PrismicDocument>( config: NormalizeDocumentConfig<Value>, ): NormalizedDocumentValue<Value> => { const fields = { ...config.value, __typename: config.nodeHelpers.createTypeName(config.path), _previewable: config.value.id, alternate_languages: alternateLanguages({ ...config, value: config.value["alternate_languages"], }), url: prismicH.asLink(config.value, config.linkResolver), data: {}, dataRaw: config.value.data, }; if (Object.keys(config.value.data).length > 0) { fields.data = normalize({ ...config, value: config.value.data, path: [...config.path, "data"], }) as NormalizedDocumentDataValue<Value["data"]>; } return config.nodeHelpers.createNodeFactory(config.value.type)( fields, ) as NormalizedDocumentValue<Value>; };