@prismicio/mock
Version:
Generate mock Prismic documents, fields, Slices, and models for development and testing environments
75 lines (74 loc) • 2.6 kB
JavaScript
import * as prismic from "@prismicio/client";
import { createFaker } from "../../lib/createFaker.js";
import { heading } from "./heading.js";
import { paragraph } from "./paragraph.js";
import { preformatted } from "./preformatted.js";
import { list } from "./list.js";
import { oList } from "./oList.js";
import { image } from "./image.js";
import { embed } from "./embed.js";
import { richText as richText$1 } from "../../model/richText.js";
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 patternKey = config.pattern || faker.randomElement(Object.keys(patterns));
const pattern = patterns[patternKey];
const blockCount = supportsMultipleBlocks ? faker.range(pattern.blockCountMin, pattern.blockCountMax) : 1;
return Array(blockCount).fill(void 0).map(() => {
const type = faker.randomElement(types);
const generator = generators[type];
return generator({ faker, model });
}).flat().filter((block) => block !== void 0).slice(0, blockCount);
} else {
return [];
}
}
};
export {
richText
};
//# sourceMappingURL=index.js.map