gatsby-source-prismic
Version:
Gatsby source plugin for building websites using Prismic as a data source
51 lines (43 loc) • 1.94 kB
text/typescript
import * as prismicT from "@prismicio/types";
import * as prismicH from "@prismicio/helpers";
import * as imgixGatsby from "@imgix/gatsby";
import * as nodeHelpers from "gatsby-node-helpers";
import { SerializedTypePath } from "../types";
import * as normalizers from "./normalizers";
export interface NormalizerDependencies {
getNode(id: string): normalizers.NormalizedDocumentValue | undefined;
getTypePath(path: string[]): SerializedTypePath | undefined;
nodeHelpers: nodeHelpers.NodeHelpers;
transformFieldName: <K extends string>(key: K) => string;
linkResolver?: prismicH.LinkResolverFunction;
htmlSerializer?: prismicH.HTMLMapSerializer | prismicH.HTMLFunctionSerializer;
imageImgixParams: imgixGatsby.ImgixUrlParams;
imagePlaceholderImgixParams: imgixGatsby.ImgixUrlParams;
}
export interface NormalizeConfig<Value> {
value: Value;
path: string[];
}
export type StructuredTextField = prismicT.RichTextField | prismicT.TitleField;
export type NormalizedValue<Value> = Value extends prismicT.PrismicDocument
? normalizers.NormalizedDocumentValue<Value>
: Value extends prismicT.PrismicDocument["data"]
? normalizers.NormalizedDocumentDataValue<Value>
: Value extends prismicT.PrismicDocument["alternate_languages"]
? normalizers.NormalizedAlternateLanguagesValue
: Value extends StructuredTextField
? normalizers.NormalizedStructuredTextValue<Value>
: Value extends prismicT.ImageField
? normalizers.NormalizedImageValue<Value>
: Value extends prismicT.LinkField
? normalizers.NormalizedLinkValue<Value>
: Value extends prismicT.GroupField
? normalizers.NormalizedGroupValue<Value>
: Value extends prismicT.SliceZone
? normalizers.NormalizedSlicesValue<Value>
: Value extends prismicT.Slice | prismicT.SharedSlice
? normalizers.NormalizedSliceValue<Value>
: Value;
export type NormalizedValueMap<ValueMap extends Record<string, unknown>> = {
[P in keyof ValueMap]: NormalizedValue<ValueMap[P]>;
};