UNPKG

gatsby-source-prismic

Version:

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

57 lines (56 loc) 4.52 kB
import * as prismic from "@prismicio/client"; import type { CustomTypeModel, CustomTypeModelDefinition, HTMLRichTextSerializer, ImageFieldImage, LinkResolverFunction, LinkToMediaField, PrismicDocument, Route, SharedSliceModel } from "@prismicio/client"; import type { FetchLike } from "@prismicio/custom-types-client"; import type { NodeInput } from "gatsby"; import type { ImgixURLParams } from "imgix-url-builder"; type ShouldDownloadFilesPredicate = (field: ImageFieldImage<"filled"> | LinkToMediaField<"filled">) => boolean | Promise<boolean>; export type PluginOptions<TLinkResolverFunction extends LinkResolverFunction<any> = LinkResolverFunction> = { repositoryName: string; accessToken?: string; apiEndpoint?: string; routes?: Route[]; linkResolver?: TLinkResolverFunction; htmlSerializer?: HTMLRichTextSerializer; lang?: string; predicates?: string | string[]; webhookSecret?: string; typePrefix?: string; customTypesApiToken?: string; customTypesApiEndpoint?: string; schemas?: Record<string, CustomTypeModelDefinition>; customTypeModels?: CustomTypeModel[]; sharedSliceModels?: SharedSliceModel[]; imageImgixParams?: ImgixURLParams; imagePlaceholderImgixParams?: ImgixURLParams; transformFieldName?: (fieldName: string) => string; shouldDownloadFiles?: boolean | ShouldDownloadFilesPredicate | Record<string, boolean | ShouldDownloadFilesPredicate>; fetch?: FetchLike; } & ({ fetchLinks?: string[]; graphQuery?: never; } | { fetchLinks?: never; graphQuery?: string; }) & ({ releaseID?: string; releaseLabel?: never; } | { releaseID?: never; releaseLabel?: string; }); export type PublicPluginOptions<TLinkResolverFunction extends LinkResolverFunction<any> = LinkResolverFunction> = PluginOptions<TLinkResolverFunction> & { repositoryName: PluginOptions["repositoryName"] | undefined; }; export type PrismicDocumentNodeInput = PrismicDocument & NodeInput & { prismicId: string; raw: PrismicDocument; }; type ValueOf<ObjectType, ValueType extends keyof ObjectType = keyof ObjectType> = ObjectType[ValueType]; export type PrismicDocumentForModel<Model extends prismic.CustomTypeModel> = PrismicDocument<MapFieldValueType<Model["json"][string]>>; export type MapFieldValueType<R extends Record<string, prismic.CustomTypeModelField>> = { [P in keyof R]: FieldModelValueType<R[P]>; }; export type FieldModelValueType<M extends prismic.CustomTypeModelField> = M extends prismic.CustomTypeModelUIDField ? prismic.PrismicDocument["uid"] : M extends prismic.CustomTypeModelBooleanField ? prismic.BooleanField : M extends prismic.CustomTypeModelColorField ? prismic.ColorField : M extends prismic.CustomTypeModelTitleField ? prismic.RichTextField : M extends prismic.CustomTypeModelRichTextField ? prismic.RichTextField : M extends prismic.CustomTypeModelImageField ? prismic.ImageField : M extends prismic.CustomTypeModelLinkField ? prismic.LinkField : M extends prismic.CustomTypeModelLinkToMediaField ? prismic.LinkToMediaField : M extends prismic.CustomTypeModelContentRelationshipField ? prismic.ContentRelationshipField : M extends prismic.CustomTypeModelDateField ? prismic.DateField : M extends prismic.CustomTypeModelTimestampField ? prismic.TimestampField : M extends prismic.CustomTypeModelNumberField ? prismic.NumberField : M extends prismic.CustomTypeModelKeyTextField ? prismic.KeyTextField : M extends prismic.CustomTypeModelSelectField ? prismic.SelectField : M extends prismic.CustomTypeModelEmbedField ? prismic.EmbedField : M extends prismic.CustomTypeModelGeoPointField ? prismic.GeoPointField : M extends prismic.CustomTypeModelIntegrationField ? prismic.IntegrationField : M extends prismic.CustomTypeModelGroupField ? prismic.GroupField<MapFieldValueType<NonNullable<NonNullable<M["config"]>["fields"]>>> : M extends prismic.CustomTypeModelSliceZoneField ? prismic.SliceZone<ValueOf<{ [P in keyof NonNullable<NonNullable<M["config"]>["choices"]>]: NonNullable<NonNullable<M["config"]>["choices"]>[P] extends prismic.CustomTypeModelSlice ? prismic.Slice<P extends string ? P : string, MapFieldValueType<NonNullable<NonNullable<NonNullable<M["config"]>["choices"]>[P]["non-repeat"]>>, MapFieldValueType<NonNullable<NonNullable<NonNullable<M["config"]>["choices"]>[P]["repeat"]>>> : NonNullable<NonNullable<M["config"]>["choices"]>[P] extends prismic.CustomTypeModelSharedSlice ? prismic.SharedSlice<P extends string ? P : string> : never; }>> : never; export {};