@prismicio/mock
Version:
Generate mock Prismic documents, fields, Slices, and models for development and testing environments
70 lines (69 loc) • 2.46 kB
JavaScript
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