UNPKG

@prismicio/mock

Version:

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

56 lines (48 loc) 1.69 kB
import type * as prismic from "@prismicio/client" import { capitalCase } from "../lib/changeCase" import { createFaker } from "../lib/createFaker" import { generateFieldId } from "../lib/generateFieldId" import { valueForModelMap, type ValueForModelMapConfigs } from "../lib/valueForModelMap" import * as modelGen from "../model" import type { MockValueConfig, ModelValue } from "../types" export type MockSliceValueConfig< Model extends prismic.CustomTypeModelSlice = prismic.CustomTypeModelSlice, > = { type?: string label?: string | null itemsCount?: number primaryFieldConfigs?: ValueForModelMapConfigs itemsFieldConfigs?: ValueForModelMapConfigs } & MockValueConfig<Model> export const slice = <Model extends prismic.CustomTypeModelSlice = prismic.CustomTypeModelSlice>( config: MockSliceValueConfig<Model>, ): ModelValue<Model> => { const faker = config.faker || createFaker(config.seed) const model = config.model || modelGen.slice({ faker }) const sliceType = config.type ?? generateFieldId({ faker }) const sliceLabel = config.label !== undefined ? config.label : capitalCase(faker.words(faker.range(1, 2))) const itemsCount = model.repeat && Object.keys(model.repeat).length > 0 ? (config.itemsCount ?? faker.range(1, 6)) : 0 return { id: faker.hash(11), slice_type: sliceType, slice_label: sliceLabel, primary: valueForModelMap({ faker, map: model["non-repeat"] || {}, configs: config.primaryFieldConfigs, }), items: Array(itemsCount) .fill(undefined) .map(() => { return valueForModelMap({ faker, map: model.repeat || {}, configs: config.itemsFieldConfigs, }) }), } as ModelValue<Model> }