@prismicio/mock
Version:
Generate mock Prismic documents, fields, Slices, and models for development and testing environments
36 lines (30 loc) • 1.11 kB
text/typescript
import type * as prismic from "@prismicio/client"
import { createFaker } from "../lib/createFaker"
import type { MockRestApiConfig } from "../types"
export type MockRestApiQueryConfig<
Document extends prismic.PrismicDocument = prismic.PrismicDocument,
> = {
documents?: Document[]
page?: number
pageSize?: number
} & MockRestApiConfig
export const query = <Document extends prismic.PrismicDocument = prismic.PrismicDocument>(
config: MockRestApiQueryConfig<Document>,
): prismic.Query<Document> => {
const faker = config.faker || createFaker(config.seed)
const documents = config.documents || []
const page = Math.max(1, config.page ?? 1)
const pageSize = Math.min(100, Math.max(1, config.pageSize ?? 100))
const totalPages = Math.ceil(documents.length / pageSize)
const results = documents.slice((page - 1) * pageSize, page * pageSize)
return {
page,
next_page: page < totalPages ? faker.url() : null,
prev_page: page > 1 ? faker.url() : null,
total_pages: totalPages,
results_size: results.length,
results_per_page: pageSize,
total_results_size: documents.length,
results,
}
}