UNPKG

@prismicio/mock

Version:

Generate mock Prismic documents, fields, Slices, and models for development and testing environments

63 lines (52 loc) 1.85 kB
import * as prismic from "@prismicio/client"; import { buildImageFieldImage } from "../lib/buildImageFieldImage"; import { createFaker } from "../lib/createFaker"; import { getMockImageData } from "../lib/getMockImageData"; import { MockValueStateConfig, MockValueConfig } from "../types"; import * as modelGen from "../model"; export type MockImageValueConfig< Model extends prismic.CustomTypeModelImageField = prismic.CustomTypeModelImageField, State extends prismic.FieldState = prismic.FieldState, > = MockValueConfig<Model> & MockValueStateConfig<State>; export type MockImageValue< Model extends prismic.CustomTypeModelImageField = prismic.CustomTypeModelImageField, State extends prismic.FieldState = prismic.FieldState, > = prismic.ImageField< NonNullable<NonNullable<Model["config"]>["thumbnails"]>[number]["name"], State >; export const image = < Model extends prismic.CustomTypeModelImageField = prismic.CustomTypeModelImageField, State extends prismic.FieldState = "filled", >( config: MockImageValueConfig<Model, State>, ): MockImageValue<Model, State> => { const faker = config.faker || createFaker(config.seed); const model = config.model || modelGen.image({ faker }); const imageData = getMockImageData({ faker }); const value = buildImageFieldImage({ faker, imageData, constraint: model.config?.constraint, state: config.state, }) as MockImageValue<Model, State>; if (model.config?.thumbnails) { for (const thumbnail of model.config.thumbnails) { // TODO: Resolve the following type error // @ts-expect-error - Unsure how to fix this type mismatch value[thumbnail.name as keyof typeof value] = buildImageFieldImage({ faker, imageData, constraint: { width: thumbnail.width, height: thumbnail.height, }, state: config.state, }); } } return value; };