UNPKG

@prismicio/mock

Version:

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

1 lines 5.92 kB
{"version":3,"file":"index.cjs","sources":["../../../../src/value/richText/index.ts"],"sourcesContent":["import * as prismic from \"@prismicio/client\";\n\nimport { createFaker } from \"../../lib/createFaker\";\n\nimport {\n\tMockRichTextValueConfig as BaseMockRichTextValueConfig,\n\tMockValueStateConfig,\n} from \"../../types\";\n\nimport * as modelGen from \"../../model\";\nimport { heading } from \"./heading\";\nimport { paragraph } from \"./paragraph\";\nimport { preformatted } from \"./preformatted\";\nimport { list } from \"./list\";\nimport { oList } from \"./oList\";\nimport { image } from \"./image\";\nimport { embed } from \"./embed\";\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\n\t\tprismic.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<\n\tState extends prismic.FieldState = prismic.FieldState,\n> = prismic.RichTextField<State>;\n\nexport const richText = <\n\tModel extends\n\t\tprismic.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\"] =>\n\t\t\t\t\t\tObject.keys(generators).includes(type),\n\t\t\t\t\t);\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\"] =>\n\t\t\t\t\t\tObject.keys(generators).includes(type),\n\t\t\t\t\t);\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 ||\n\t\t\t\tfaker.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"],"names":["prismic","heading","paragraph","preformatted","list","oList","image","embed","createFaker","modelGen.richText"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,MAAM,WAAW;AAAA,EAChB,OAAO;AAAA,IACN,eAAe;AAAA,IACf,eAAe;AAAA,EACf;AAAA,EACD,QAAQ;AAAA,IACP,eAAe;AAAA,IACf,eAAe;AAAA,EACf;AAAA,EACD,MAAM;AAAA,IACL,eAAe;AAAA,IACf,eAAe;AAAA,EACf;;AAGF,MAAM,aAAa;AAAA,EAClB,CAACA,mBAAQ,iBAAiB,QAAQ,GAAGC,QAAA;AAAA,EACrC,CAACD,mBAAQ,iBAAiB,QAAQ,GAAGC,QAAA;AAAA,EACrC,CAACD,mBAAQ,iBAAiB,QAAQ,GAAGC,QAAA;AAAA,EACrC,CAACD,mBAAQ,iBAAiB,QAAQ,GAAGC,QAAA;AAAA,EACrC,CAACD,mBAAQ,iBAAiB,QAAQ,GAAGC,QAAA;AAAA,EACrC,CAACD,mBAAQ,iBAAiB,QAAQ,GAAGC,QAAA;AAAA,EACrC,CAACD,mBAAQ,iBAAiB,SAAS,GAAGE,UAAA;AAAA,EACtC,CAACF,mBAAQ,iBAAiB,YAAY,GAAGG,aAAA;AAAA,EACzC,CAACH,mBAAQ,iBAAiB,QAAQ,GAAGI,KAAA;AAAA,EACrC,CAACJ,mBAAQ,iBAAiB,SAAS,GAAGK,MAAA;AAAA,EACtC,CAACL,mBAAQ,iBAAiB,KAAK,GAAGM,MAAA;AAAA,EAClC,CAACN,mBAAQ,iBAAiB,KAAK,GAAGO,MAAA;;AAgBtB,MAAA,WAAW,CAKvB,WAC6B;AAC7B,QAAM,QAAQ,OAAO,SAASC,YAAAA,YAAY,OAAO,IAAI;AAEjD,MAAA,OAAO,UAAU,SAAS;AAC7B,WAAO;SACD;AACN,UAAM,QACL,OAAO,SACPC,oBAAkB;AAAA,MACjB;AAAA,MACA,oBAAoB;AAAA,IAAA,CACpB;AACF,UAAM,yBAAyB,MAAM,UAAU,WAAW,MAAM;AAEhE,QAAI,QAAkC,CAAA;AACtC,QAAI,MAAM,QAAQ;AACjB,UAAI,WAAW,MAAM,UAAU,MAAM,OAAO,OAAO;AAClD,gBAAQ,MAAM,OAAO,MACnB,MAAM,GAAG,EACT,OAAO,CAAC,SACR,OAAO,KAAK,UAAU,EAAE,SAAS,IAAI,CAAC;AAAA,MAAA,WAE9B,YAAY,MAAM,UAAU,MAAM,OAAO,QAAQ;AAC3D,gBAAQ,MAAM,OAAO,OACnB,MAAM,GAAG,EACT,OAAO,CAAC,SACR,OAAO,KAAK,UAAU,EAAE,SAAS,IAAI,CAAC;AAAA,MAEzC;AAAA,IACD;AAEI,QAAA,MAAM,SAAS,GAAG;AACf,YAAA,aACL,OAAO,WACP,MAAM,cAAc,OAAO,KAAK,QAAQ,CAA8B;AACjE,YAAA,UAAU,SAAS,UAAU;AAE7B,YAAA,aAAa,yBAChB,MAAM,MAAM,QAAQ,eAAe,QAAQ,aAAa,IACxD;AAEH,aAAO,MAAM,UAAU,EACrB,KAAK,MAAS,EACd,IAAI,MAAK;AACH,cAAA,OAAO,MAAM,cAAc,KAAK;AAChC,cAAA,YAAY,WAAW,IAAI;AAEjC,eAAO,UAAU,EAAE,OAAO,MAAO,CAAA;AAAA,MACjC,CAAA,EACA,KAAM,EACN,OAAO,CAAC,UAAmC,UAAU,MAAS,EAC9D,MAAM,GAAG,UAAU;AAAA,IAAA,OACf;AACN,aAAO;IACR;AAAA,EACD;AACD;;"}