import type * as prismic from "@prismicio/client" import type { Faker } from "./lib/createFaker" import type * as value from "./value" export type IterableElement = TargetIterable extends Iterable ? ElementType : TargetIterable extends AsyncIterable ? ElementType : never export type ValueOf< ObjectType, ValueType extends keyof ObjectType = keyof ObjectType, > = ObjectType[ValueType] type Simplify = { [KeyType in keyof T]: T[KeyType] } type Except = Pick< ObjectType, Exclude > export type SetRequired = Simplify< // Pick just the keys that are optional from the base type. Except & // Pick the keys that should be required from the base type and make them required. Required> > export type Seed = string | number export type WithoutFakerConfig = { [P in keyof T as P extends "seed" | "faker" ? never : P]: T[P] } export interface MockImageData { url: string width: number height: number } export type MockEmbedData = prismic.AnyOEmbed & prismic.OEmbedExtra & { embed_url: string html: string } export type MockRestApiConfig = | { seed: Seed faker?: never } | { faker: Faker seed?: never } export type MockModelConfig = | { seed: Seed faker?: never } | { faker: Faker seed?: never } // TODO: Add to @prismicio/types export type PrismicModel = | prismic.CustomTypeModel | prismic.CustomTypeModelField | prismic.CustomTypeModelSlice | prismic.SharedSliceModel | prismic.SharedSliceModelVariation export type GroupFieldModelMap = Record export type NestedGroupFieldModelMap = Record export type SlicePrimaryFieldModelMap = Record export type MockValueConfig = { model?: Model } & ( | { seed: Seed faker?: never } | { faker: Faker seed?: never } ) export type MockValueStateConfig = { state?: State } export type MockValueConfigForModel< Model extends PrismicModel, State extends prismic.FieldState = prismic.FieldState, > = Model extends prismic.CustomTypeModelBooleanField ? value.MockBooleanValueConfig : Model extends prismic.CustomTypeModelColorField ? value.MockColorValueConfig : Model extends prismic.CustomTypeModelContentRelationshipField ? value.MockContentRelationshipValueConfig : Model extends prismic.CustomTypeModelDateField ? value.MockDateValueConfig : Model extends prismic.CustomTypeModelEmbedField ? value.MockEmbedValueConfig : Model extends prismic.CustomTypeModelGeoPointField ? value.MockGeoPointValueConfig : Model extends prismic.CustomTypeModelImageField ? value.MockImageValueConfig : Model extends prismic.CustomTypeModelKeyTextField ? value.MockKeyTextValueConfig : Model extends prismic.CustomTypeModelLinkField ? value.MockLinkValueConfig< (typeof prismic.LinkType)[keyof typeof prismic.LinkType], Model, State > : Model extends prismic.CustomTypeModelLinkToMediaField ? value.MockLinkToMediaValueConfig : Model extends prismic.CustomTypeModelNumberField ? value.MockNumberValueConfig : Model extends prismic.CustomTypeModelRichTextField ? value.MockRichTextValueConfig : Model extends prismic.CustomTypeModelSelectField ? value.MockSelectValueConfig : Model extends prismic.CustomTypeModelTimestampField ? value.MockTimestampValueConfig : Model extends prismic.CustomTypeModelTitleField ? value.MockTitleValueConfig : Model extends prismic.CustomTypeModelUIDField ? value.MockUIDValueConfig : never type CustomTypeModelStructuredTextField = | prismic.CustomTypeModelRichTextField | prismic.CustomTypeModelTitleField export type MockRichTextValueConfig< Model extends CustomTypeModelStructuredTextField = CustomTypeModelStructuredTextField, > = { model?: Model } & ( | { seed: Seed faker?: never } | { faker: Faker seed?: never } ) export type ModelValueMap> = { [P in keyof T]: ModelValue } export type ModelValue< T extends PrismicModel, State extends prismic.FieldState = prismic.FieldState, > = T extends prismic.CustomTypeModel ? CustomTypeModelValue : T extends prismic.CustomTypeModelUIDField ? prismic.PrismicDocument["uid"] : T extends prismic.CustomTypeModelFieldForGroup ? CustomTypeModelFieldForGroupValue : T extends prismic.CustomTypeModelGroupField ? CustomTypeModelGroupFieldValue : T extends prismic.CustomTypeModelSliceZoneField ? prismic.SliceZone< ValueOf<{ [P in keyof NonNullable["choices"]> as P extends string ? P : never]: NonNullable< NonNullable["choices"] >[P] extends prismic.CustomTypeModelSlice ? CustomTypeModelSliceValue< NonNullable["choices"]>[P], P extends string ? P : string > : NonNullable< NonNullable["choices"] >[P] extends prismic.CustomTypeModelSharedSlice ? prismic.SharedSlice

: never }>, State > : T extends prismic.CustomTypeModelSlice ? CustomTypeModelSliceValue : T extends prismic.CustomTypeModelSharedSlice ? // TODO: Allow providing a union of of Shared Slices prismic.SharedSlice : T extends prismic.SharedSliceModel ? SharedSliceModelValue : T extends prismic.SharedSliceModelVariation ? SharedSliceModelVariationValue : never type CustomTypeModelValue = prismic.PrismicDocument< ModelValueMap<{ [P in keyof ValueOf as ValueOf< T["json"] >[P]["type"] extends typeof prismic.CustomTypeModelFieldType.UID ? never : P]: ValueOf[P] }> > type CustomTypeModelFieldForGroupValue< T extends prismic.CustomTypeModelFieldForGroup, State extends prismic.FieldState = prismic.FieldState, > = T extends prismic.CustomTypeModelNestedGroupField ? CustomTypeModelNestedGroupFieldValue : T extends prismic.CustomTypeModelBooleanField ? prismic.BooleanField : T extends prismic.CustomTypeModelColorField ? prismic.ColorField : T extends prismic.CustomTypeModelRichTextField ? prismic.RichTextField : T extends prismic.CustomTypeModelTitleField ? prismic.TitleField : T extends prismic.CustomTypeModelImageField ? prismic.ImageField : T extends prismic.CustomTypeModelLinkField ? prismic.LinkField : T extends prismic.CustomTypeModelLinkToMediaField ? prismic.LinkToMediaField : T extends prismic.CustomTypeModelContentRelationshipField ? prismic.ContentRelationshipField : T extends prismic.CustomTypeModelDateField ? prismic.DateField : T extends prismic.CustomTypeModelTimestampField ? prismic.TimestampField : T extends prismic.CustomTypeModelNumberField ? prismic.NumberField : T extends prismic.CustomTypeModelKeyTextField ? prismic.KeyTextField : T extends prismic.CustomTypeModelSelectField ? prismic.SelectField : T extends prismic.CustomTypeModelEmbedField ? prismic.EmbedField : T extends prismic.CustomTypeModelGeoPointField ? prismic.GeoPointField : T extends prismic.CustomTypeModelIntegrationField ? prismic.IntegrationField, State> : never type CustomTypeModelGroupFieldValue< T extends prismic.CustomTypeModelGroupField, State extends prismic.FieldState = prismic.FieldState, > = prismic.GroupField["fields"]>>, State> type CustomTypeModelNestedGroupFieldValue< T extends prismic.CustomTypeModelNestedGroupField, State extends prismic.FieldState = prismic.FieldState, > = prismic.NestedGroupField["fields"]>>, State> type CustomTypeModelSliceValue< T extends prismic.CustomTypeModelSlice, SliceType = string, > = prismic.Slice< SliceType, ModelValueMap>, ModelValueMap> > type SharedSliceModelValue = prismic.SharedSlice< T["id"], SharedSliceModelVariationValue>> > type SharedSliceModelVariationValue = prismic.SharedSlice< string, prismic.SharedSliceVariation< T["id"], ModelValueMap>, ModelValueMap> > >