UNPKG

@prismicio/mock

Version:

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

70 lines (69 loc) 2.46 kB
import { createFaker } from "../../lib/createFaker.js"; import { richText as richText$1 } from "../../model/richText.js"; import { embed } from "./embed.js"; import { heading } from "./heading.js"; import { image } from "./image.js"; import { list } from "./list.js"; import { oList } from "./oList.js"; import { paragraph } from "./paragraph.js"; import { preformatted } from "./preformatted.js"; import * as prismic from "@prismicio/client"; //#region src/value/richText/index.ts const patterns = { short: { blockCountMin: 1, blockCountMax: 2 }, medium: { blockCountMin: 2, blockCountMax: 4 }, long: { blockCountMin: 4, blockCountMax: 8 } }; const generators = { [prismic.RichTextNodeType.heading1]: heading, [prismic.RichTextNodeType.heading2]: heading, [prismic.RichTextNodeType.heading3]: heading, [prismic.RichTextNodeType.heading4]: heading, [prismic.RichTextNodeType.heading5]: heading, [prismic.RichTextNodeType.heading6]: heading, [prismic.RichTextNodeType.paragraph]: paragraph, [prismic.RichTextNodeType.preformatted]: preformatted, [prismic.RichTextNodeType.listItem]: list, [prismic.RichTextNodeType.oListItem]: oList, [prismic.RichTextNodeType.image]: image, [prismic.RichTextNodeType.embed]: embed }; const richText = (config) => { const faker = config.faker || createFaker(config.seed); if (config.state === "empty") return []; else { const model = config.model || richText$1({ faker, withMultipleBlocks: true }); const supportsMultipleBlocks = model.config && "multi" in model.config; let types = []; if (model.config) { if ("multi" in model.config && model.config.multi) types = model.config.multi.split(",").filter((type) => Object.keys(generators).includes(type)); else if ("single" in model.config && model.config.single) types = model.config.single.split(",").filter((type) => Object.keys(generators).includes(type)); } if (types.length > 0) { const pattern = patterns[config.pattern || faker.randomElement(Object.keys(patterns))]; const blockCount = supportsMultipleBlocks ? faker.range(pattern.blockCountMin, pattern.blockCountMax) : 1; return Array(blockCount).fill(void 0).map(() => { const generator = generators[faker.randomElement(types)]; return generator({ faker, model }); }).flat().filter((block) => block !== void 0).slice(0, blockCount); } else return []; } }; //#endregion export { richText }; //# sourceMappingURL=index.js.map