UNPKG

@prismicio/mock

Version:

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

53 lines (46 loc) 1.8 kB
import * as prismic from "@prismicio/client" import { capitalCase, sentenceCase } from "../lib/changeCase" import { createFaker } from "../lib/createFaker" import type { MockModelConfig } from "../types" export type MockRichTextModelConfig<WithMultipleBlocks extends boolean = boolean> = { withMultipleBlocks?: WithMultipleBlocks } & MockModelConfig export const richText = <WithMultipleBlocks extends boolean = boolean>( config: MockRichTextModelConfig<WithMultipleBlocks>, ): WithMultipleBlocks extends true ? prismic.CustomTypeModelRichTextMultiField : prismic.CustomTypeModelRichTextSingleField => { const faker = config.faker || createFaker(config.seed) const blockTypes = faker .randomElements([ prismic.RichTextNodeType.heading1, prismic.RichTextNodeType.heading2, prismic.RichTextNodeType.heading3, prismic.RichTextNodeType.heading4, prismic.RichTextNodeType.heading5, prismic.RichTextNodeType.heading6, prismic.RichTextNodeType.paragraph, prismic.RichTextNodeType.preformatted, prismic.RichTextNodeType.strong, prismic.RichTextNodeType.em, prismic.RichTextNodeType.listItem, prismic.RichTextNodeType.oListItem, prismic.RichTextNodeType.image, prismic.RichTextNodeType.embed, prismic.RichTextNodeType.hyperlink, ]) .join(",") const blockTypeConfig = (config.withMultipleBlocks ?? faker.boolean()) ? { multi: blockTypes } : { single: blockTypes } return { type: prismic.CustomTypeModelFieldType.StructuredText, config: { label: capitalCase(faker.word()), placeholder: sentenceCase(faker.words(3)), allowTargetBlank: faker.boolean() ? true : undefined, ...blockTypeConfig, }, } as WithMultipleBlocks extends true ? prismic.CustomTypeModelRichTextMultiField : prismic.CustomTypeModelRichTextSingleField }