@prismicio/mock
Version:
Generate mock Prismic documents, fields, Slices, and models for development and testing environments
38 lines (30 loc) • 1.18 kB
text/typescript
import type * as prismic from "@prismicio/client"
import { capitalCase } from "../lib/changeCase"
import { createFaker } from "../lib/createFaker"
import type { MockRestApiConfig } from "../types"
import { timestamp } from "../value"
export type MockRestApiRefConfig<IsScheduled extends boolean = false> = {
isMasterRef?: boolean
isScheduled?: IsScheduled
} & MockRestApiConfig
export type MockRestApiRefValue<IsScheduled extends boolean = false> = Omit<
prismic.Ref,
"scheduledAt"
> &
(IsScheduled extends true ? { scheduledAt: string } : { scheduledAt?: never })
export const ref = <IsScheduled extends boolean = false>(
config: MockRestApiRefConfig<IsScheduled>,
): MockRestApiRefValue<IsScheduled> => {
const faker = config.faker || createFaker(config.seed)
const value: prismic.Ref = {
id: faker.hash(16),
ref: faker.hash(16),
isMasterRef: config.isMasterRef ?? false,
label: config.isMasterRef ? "Master" : capitalCase(faker.words(faker.range(1, 3))),
}
if (config.isScheduled) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
value.scheduledAt = timestamp({ faker })!
}
return value as MockRestApiRefValue<IsScheduled>
}