@prismicio/mock
Version:
Generate mock Prismic documents, fields, Slices, and models for development and testing environments
46 lines (38 loc) • 1.46 kB
text/typescript
import type * as prismic from "@prismicio/client"
import { createFaker } from "../lib/createFaker"
import { valueForModelMap, type ValueForModelMapConfigs } from "../lib/valueForModelMap"
import * as modelGen from "../model"
import type { MockValueConfig, MockValueStateConfig, ModelValue } from "../types"
export type MockGroupValueConfig<
Model extends prismic.CustomTypeModelGroupField = prismic.CustomTypeModelGroupField,
State extends prismic.FieldState = prismic.FieldState,
> = {
itemsCount?: State extends "empty" ? 0 : number
configs?: ValueForModelMapConfigs
} & MockValueConfig<Model> &
MockValueStateConfig<State>
export type MockGroupValue<State extends prismic.FieldState = prismic.FieldState> =
prismic.DateField<State>
export const group = <
Model extends prismic.CustomTypeModelGroupField = prismic.CustomTypeModelGroupField,
State extends prismic.FieldState = "filled",
>(
config: MockGroupValueConfig<Model, State>,
): ModelValue<Model, State> => {
if (config.state === "empty") {
return [] as ModelValue<Model, State>
} else {
const faker = config.faker || createFaker(config.seed)
const model = config.model || modelGen.group({ faker })
const itemsCount = config.itemsCount ?? faker.range(1, 6)
return Array(itemsCount)
.fill(undefined)
.map(() => {
return valueForModelMap({
faker,
map: model.config?.fields || {},
configs: config.configs,
})
}) as ModelValue<Model, State>
}
}