@prismicio/mock
Version:
Generate mock Prismic documents, fields, Slices, and models for development and testing environments
63 lines (52 loc) • 1.85 kB
text/typescript
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;
};