UNPKG

@prismicio/mock

Version:

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

61 lines (54 loc) 1.8 kB
import * as prismic from "@prismicio/client"; import { capitalCase, sentenceCase } from "../lib/changeCase"; import { createFaker } from "../lib/createFaker"; import { MockModelConfig } from "../types"; type MockLinkModel< AllowTargetBlank extends boolean = boolean, AllowText extends boolean = boolean, Repeat extends boolean = boolean, > = prismic.CustomTypeModelLinkField & { config: AllowTargetBlank extends true ? { allowTargetBlank: true } : { allowTargetBlank?: undefined }; } & { config: AllowText extends true ? { allowText: true } : { allowText?: undefined }; } & { config: Repeat extends true ? { repeat: true } : { repeat?: undefined }; }; export type MockLinkModelConfig< AllowTargetBlank extends boolean = boolean, AllowText extends boolean = boolean, Repeat extends boolean = boolean, > = { allowTargetBlank?: AllowTargetBlank; allowText?: AllowText; repeat?: Repeat; } & MockModelConfig; export const link = < AllowTargetBlank extends boolean = boolean, AllowText extends boolean = boolean, Repeat extends boolean = boolean, >( config: MockLinkModelConfig<AllowTargetBlank, AllowText, Repeat>, ): MockLinkModel<AllowTargetBlank, AllowText, Repeat> => { const faker = config.faker || createFaker(config.seed); return { type: prismic.CustomTypeModelFieldType.Link, config: { label: capitalCase(faker.word()), placeholder: sentenceCase(faker.words(3)), select: null, allowTargetBlank: ("allowTargetBlank" in config ? config.allowTargetBlank : faker.boolean()) || undefined, allowText: ("allowText" in config ? config.allowText : faker.boolean()) || undefined, repeat: ("repeat" in config ? config.repeat : faker.boolean()) || undefined, }, } as MockLinkModel<AllowTargetBlank, AllowText, Repeat>; };