@prismicio/mock
Version:
Generate mock Prismic documents, fields, Slices, and models for development and testing environments
42 lines (34 loc) • 1.2 kB
text/typescript
import * as prismic from "@prismicio/client";
import { capitalCase } from "../lib/changeCase";
import { createFaker } from "../lib/createFaker";
import { 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>;
};