UNPKG

@prismicio/mock

Version:

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

1 lines 5.4 kB
{"version":3,"file":"index.cjs","names":["prismic","heading","paragraph","preformatted","list","oList","image","embed","createFaker"],"sources":["../../../src/value/richText/index.ts"],"sourcesContent":["import * as prismic from \"@prismicio/client\"\n\nimport { createFaker } from \"../../lib/createFaker\"\nimport * as modelGen from \"../../model\"\nimport type {\n\tMockRichTextValueConfig as BaseMockRichTextValueConfig,\n\tMockValueStateConfig,\n} from \"../../types\"\nimport { embed } from \"./embed\"\nimport { heading } from \"./heading\"\nimport { image } from \"./image\"\nimport { list } from \"./list\"\nimport { oList } from \"./oList\"\nimport { paragraph } from \"./paragraph\"\nimport { preformatted } from \"./preformatted\"\n\nconst patterns = {\n\tshort: {\n\t\tblockCountMin: 1,\n\t\tblockCountMax: 2,\n\t},\n\tmedium: {\n\t\tblockCountMin: 2,\n\t\tblockCountMax: 4,\n\t},\n\tlong: {\n\t\tblockCountMin: 4,\n\t\tblockCountMax: 8,\n\t},\n} as const\n\nconst generators = {\n\t[prismic.RichTextNodeType.heading1]: heading,\n\t[prismic.RichTextNodeType.heading2]: heading,\n\t[prismic.RichTextNodeType.heading3]: heading,\n\t[prismic.RichTextNodeType.heading4]: heading,\n\t[prismic.RichTextNodeType.heading5]: heading,\n\t[prismic.RichTextNodeType.heading6]: heading,\n\t[prismic.RichTextNodeType.paragraph]: paragraph,\n\t[prismic.RichTextNodeType.preformatted]: preformatted,\n\t[prismic.RichTextNodeType.listItem]: list,\n\t[prismic.RichTextNodeType.oListItem]: oList,\n\t[prismic.RichTextNodeType.image]: image,\n\t[prismic.RichTextNodeType.embed]: embed,\n}\n\nexport type MockRichTextValueConfig<\n\tModel extends prismic.CustomTypeModelRichTextField = prismic.CustomTypeModelRichTextField,\n\tState extends prismic.FieldState = prismic.FieldState,\n> = {\n\tpattern?: keyof typeof patterns\n} & BaseMockRichTextValueConfig<Model> &\n\tMockValueStateConfig<State>\n\nexport type MockRichTextValue<State extends prismic.FieldState = prismic.FieldState> =\n\tprismic.RichTextField<State>\n\nexport const richText = <\n\tModel extends prismic.CustomTypeModelRichTextField = prismic.CustomTypeModelRichTextField,\n\tState extends prismic.FieldState = prismic.FieldState,\n>(\n\tconfig: MockRichTextValueConfig<Model, State>,\n): MockRichTextValue<State> => {\n\tconst faker = config.faker || createFaker(config.seed)\n\n\tif (config.state === \"empty\") {\n\t\treturn [] as MockRichTextValue<State>\n\t} else {\n\t\tconst model =\n\t\t\tconfig.model ||\n\t\t\tmodelGen.richText({\n\t\t\t\tfaker,\n\t\t\t\twithMultipleBlocks: true,\n\t\t\t})\n\t\tconst supportsMultipleBlocks = model.config && \"multi\" in model.config\n\n\t\tlet types: prismic.RTNode[\"type\"][] = []\n\t\tif (model.config) {\n\t\t\tif (\"multi\" in model.config && model.config.multi) {\n\t\t\t\ttypes = model.config.multi\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.filter((type): type is prismic.RTNode[\"type\"] => Object.keys(generators).includes(type))\n\t\t\t} else if (\"single\" in model.config && model.config.single) {\n\t\t\t\ttypes = model.config.single\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.filter((type): type is prismic.RTNode[\"type\"] => Object.keys(generators).includes(type))\n\t\t\t}\n\t\t}\n\n\t\tif (types.length > 0) {\n\t\t\tconst patternKey =\n\t\t\t\tconfig.pattern || faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[])\n\t\t\tconst pattern = patterns[patternKey]\n\n\t\t\tconst blockCount = supportsMultipleBlocks\n\t\t\t\t? faker.range(pattern.blockCountMin, pattern.blockCountMax)\n\t\t\t\t: 1\n\n\t\t\treturn Array(blockCount)\n\t\t\t\t.fill(undefined)\n\t\t\t\t.map(() => {\n\t\t\t\t\tconst type = faker.randomElement(types)\n\t\t\t\t\tconst generator = generators[type]\n\n\t\t\t\t\treturn generator({ faker, model })\n\t\t\t\t})\n\t\t\t\t.flat()\n\t\t\t\t.filter((block): block is prismic.RTNode => block !== undefined)\n\t\t\t\t.slice(0, blockCount) as MockRichTextValue<State>\n\t\t} else {\n\t\t\treturn [] as MockRichTextValue<State>\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,WAAW;CAChB,OAAO;EACN,eAAe;EACf,eAAe;EACf;CACD,QAAQ;EACP,eAAe;EACf,eAAe;EACf;CACD,MAAM;EACL,eAAe;EACf,eAAe;EACf;CACD;AAED,MAAM,aAAa;EACjBA,kBAAQ,iBAAiB,WAAWC,gBAAAA;EACpCD,kBAAQ,iBAAiB,WAAWC,gBAAAA;EACpCD,kBAAQ,iBAAiB,WAAWC,gBAAAA;EACpCD,kBAAQ,iBAAiB,WAAWC,gBAAAA;EACpCD,kBAAQ,iBAAiB,WAAWC,gBAAAA;EACpCD,kBAAQ,iBAAiB,WAAWC,gBAAAA;EACpCD,kBAAQ,iBAAiB,YAAYE,kBAAAA;EACrCF,kBAAQ,iBAAiB,eAAeG,qBAAAA;EACxCH,kBAAQ,iBAAiB,WAAWI,aAAAA;EACpCJ,kBAAQ,iBAAiB,YAAYK,cAAAA;EACrCL,kBAAQ,iBAAiB,QAAQM,cAAAA;EACjCN,kBAAQ,iBAAiB,QAAQO,cAAAA;CAClC;AAaD,MAAa,YAIZ,WAC8B;CAC9B,MAAM,QAAQ,OAAO,SAASC,oBAAAA,YAAY,OAAO,KAAK;AAEtD,KAAI,OAAO,UAAU,QACpB,QAAO,EAAE;MACH;EACN,MAAM,QACL,OAAO,SAAA,iBAAA,SACW;GACjB;GACA,oBAAoB;GACpB,CAAC;EACH,MAAM,yBAAyB,MAAM,UAAU,WAAW,MAAM;EAEhE,IAAI,QAAkC,EAAE;AACxC,MAAI,MAAM;OACL,WAAW,MAAM,UAAU,MAAM,OAAO,MAC3C,SAAQ,MAAM,OAAO,MACnB,MAAM,IAAI,CACV,QAAQ,SAAyC,OAAO,KAAK,WAAW,CAAC,SAAS,KAAK,CAAC;YAChF,YAAY,MAAM,UAAU,MAAM,OAAO,OACnD,SAAQ,MAAM,OAAO,OACnB,MAAM,IAAI,CACV,QAAQ,SAAyC,OAAO,KAAK,WAAW,CAAC,SAAS,KAAK,CAAC;;AAI5F,MAAI,MAAM,SAAS,GAAG;GAGrB,MAAM,UAAU,SADf,OAAO,WAAW,MAAM,cAAc,OAAO,KAAK,SAAS,CAA8B;GAG1F,MAAM,aAAa,yBAChB,MAAM,MAAM,QAAQ,eAAe,QAAQ,cAAc,GACzD;AAEH,UAAO,MAAM,WAAW,CACtB,KAAK,KAAA,EAAU,CACf,UAAU;IAEV,MAAM,YAAY,WADL,MAAM,cAAc,MAAM;AAGvC,WAAO,UAAU;KAAE;KAAO;KAAO,CAAC;KACjC,CACD,MAAM,CACN,QAAQ,UAAmC,UAAU,KAAA,EAAU,CAC/D,MAAM,GAAG,WAAW;QAEtB,QAAO,EAAE"}