UNPKG

@prismicio/mock

Version:

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

59 lines (49 loc) 1.75 kB
import * as prismic from "@prismicio/client"; import { createFaker } from "../lib/createFaker"; import { MockValueStateConfig, MockValueConfig } from "../types"; export type MockTimestampValueConfig< Model extends prismic.CustomTypeModelTimestampField = prismic.CustomTypeModelTimestampField, State extends prismic.FieldState = prismic.FieldState, > = { after?: Date; before?: Date; } & MockValueConfig<Model> & MockValueStateConfig<State>; export type MockTimestampValue< State extends prismic.FieldState = prismic.FieldState, > = prismic.TimestampField<State>; export const timestamp = < Model extends prismic.CustomTypeModelTimestampField = prismic.CustomTypeModelTimestampField, State extends prismic.FieldState = "filled", >( config: MockTimestampValueConfig<Model, State>, ): MockTimestampValue<State> => { const faker = config.faker || createFaker(config.seed); if (config.state === "empty") { return null as MockTimestampValue<State>; } else { let date: Date; // Working with Date objects produces non-deterministic values; // machines can return different values due to differing // timezones and other unknown factors. To get around this, we // can can remove time from the given values and only use their dates. const after = config.after ? new Date(config.after.toISOString().split("T")[0]) : undefined; const before = config.before ? new Date(config.before.toISOString().split("T")[0]) : undefined; if (after && before) { date = faker.dateBetween(after, before); } else if (after) { date = faker.dateAfter(after); } else if (before) { date = faker.dateBefore(before); } else { date = faker.date(); } return date.toISOString() as MockTimestampValue<State>; } };