UNPKG

@prismicio/mock

Version:

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

1 lines 4.81 kB
{"version":3,"file":"contentRelationship.cjs","sources":["../../../src/value/contentRelationship.ts"],"sourcesContent":["import * as prismic from \"@prismicio/client\";\n\nimport { buildContentRelationshipField } from \"../lib/buildContentRelationshipField\";\nimport { createFaker } from \"../lib/createFaker\";\nimport { generateCustomTypeId } from \"../lib/generateCustomTypeId\";\nimport { generateTags } from \"../lib/generateTags\";\n\nimport {\n\tMockValueStateConfig,\n\tMockValueConfig,\n\tIterableElement,\n} from \"../types\";\n\nimport * as modelGen from \"../model\";\n\nimport { document as documentGen } from \"./document\";\n\nexport type MockContentRelationshipValueConfig<\n\tModel extends\n\t\tprismic.CustomTypeModelContentRelationshipField = prismic.CustomTypeModelContentRelationshipField,\n\tState extends prismic.FieldState = prismic.FieldState,\n> = {\n\t/**\n\t * A list of potential documents to which the field can be linked.\n\t */\n\tlinkableDocuments?: prismic.PrismicDocument[];\n} & MockValueConfig<Model> &\n\tMockValueStateConfig<State>;\n\ntype MockContentRelationshipValue<\n\tModel extends\n\t\tprismic.CustomTypeModelContentRelationshipField = prismic.CustomTypeModelContentRelationshipField,\n\tState extends prismic.FieldState = prismic.FieldState,\n> = prismic.ContentRelationshipField<\n\tIterableElement<NonNullable<Model[\"config\"]>[\"customtypes\"]>,\n\tstring,\n\tnever,\n\tState\n>;\n\nexport const contentRelationship = <\n\tModel extends\n\t\tprismic.CustomTypeModelContentRelationshipField = prismic.CustomTypeModelContentRelationshipField,\n\tState extends prismic.FieldState = \"filled\",\n>(\n\tconfig: MockContentRelationshipValueConfig<Model, State>,\n): MockContentRelationshipValue<Model, State> => {\n\tconst faker = config.faker || createFaker(config.seed);\n\n\tif (config.state === \"empty\") {\n\t\treturn {\n\t\t\tlink_type: prismic.LinkType.Document,\n\t\t} as MockContentRelationshipValue<Model, State>;\n\t} else {\n\t\tconst model = config.model || modelGen.contentRelationship({ faker });\n\n\t\tconst linkableDocuments = config.linkableDocuments\n\t\t\t? config.linkableDocuments.filter(\n\t\t\t\t\t(\n\t\t\t\t\t\tdocument,\n\t\t\t\t\t): document is prismic.PrismicDocument<\n\t\t\t\t\t\tnever,\n\t\t\t\t\t\tNonNullable<NonNullable<Model[\"config\"]>[\"customtypes\"]>[number]\n\t\t\t\t\t> => {\n\t\t\t\t\t\tlet shouldKeep = true;\n\n\t\t\t\t\t\tif (model.config?.customtypes) {\n\t\t\t\t\t\t\tshouldKeep =\n\t\t\t\t\t\t\t\tshouldKeep && model.config.customtypes.includes(document.type);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (model.config?.tags) {\n\t\t\t\t\t\t\tshouldKeep =\n\t\t\t\t\t\t\t\tshouldKeep &&\n\t\t\t\t\t\t\t\tmodel.config.tags.some((tag) => document.tags.includes(tag));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn shouldKeep;\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t: [\n\t\t\t\t\t{\n\t\t\t\t\t\t...documentGen({ faker }),\n\t\t\t\t\t\ttype: model.config?.customtypes\n\t\t\t\t\t\t\t? faker.randomElement(model.config.customtypes)\n\t\t\t\t\t\t\t: generateCustomTypeId({ faker }),\n\t\t\t\t\t\ttags: model.config?.tags\n\t\t\t\t\t\t\t? faker.randomElements(model.config.tags)\n\t\t\t\t\t\t\t: generateTags({ faker }),\n\t\t\t\t\t} as prismic.PrismicDocument<\n\t\t\t\t\t\tnever,\n\t\t\t\t\t\tNonNullable<NonNullable<Model[\"config\"]>[\"customtypes\"]>[number]\n\t\t\t\t\t>,\n\t\t\t\t];\n\n\t\tconst document = faker.randomElement(linkableDocuments);\n\n\t\tif (!document) {\n\t\t\tthrow new Error(\"A linkable document could not be found.\");\n\t\t}\n\n\t\treturn buildContentRelationshipField({\n\t\t\tdocument,\n\t\t}) as unknown as MockContentRelationshipValue<Model, State>;\n\t}\n};\n"],"names":["createFaker","prismic","modelGen.contentRelationship","document","_a","_b","documentGen","generateCustomTypeId","generateTags","buildContentRelationshipField"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAwCa,MAAA,sBAAsB,CAKlC,WAC+C;;AAC/C,QAAM,QAAQ,OAAO,SAASA,YAAAA,YAAY,OAAO,IAAI;AAEjD,MAAA,OAAO,UAAU,SAAS;AACtB,WAAA;AAAA,MACN,WAAWC,mBAAQ,SAAS;AAAA,IAAA;AAAA,SAEvB;AACN,UAAM,QAAQ,OAAO,SAASC,sBAAAA,oBAA6B,EAAE,OAAO;AAEpE,UAAM,oBAAoB,OAAO,oBAC9B,OAAO,kBAAkB,OACzB,CACCC,cAIG;;AACH,UAAI,aAAa;AAEb,WAAAC,MAAA,MAAM,WAAN,gBAAAA,IAAc,aAAa;AAC9B,qBACC,cAAc,MAAM,OAAO,YAAY,SAASD,UAAS,IAAI;AAAA,MAC/D;AAEI,WAAAE,MAAA,MAAM,WAAN,gBAAAA,IAAc,MAAM;AAEtB,qBAAA,cACA,MAAM,OAAO,KAAK,KAAK,CAAC,QAAQF,UAAS,KAAK,SAAS,GAAG,CAAC;AAAA,MAC7D;AAEO,aAAA;AAAA,IAAA,CACP,IAED;AAAA,MACA;AAAA,QACC,GAAGG,WAAA,WAAY,EAAE,OAAO;AAAA,QACxB,QAAM,WAAM,WAAN,mBAAc,eACjB,MAAM,cAAc,MAAM,OAAO,WAAW,IAC5CC,0CAAqB,EAAE,OAAO;AAAA,QACjC,QAAM,WAAM,WAAN,mBAAc,QACjB,MAAM,eAAe,MAAM,OAAO,IAAI,IACtCC,0BAAa,EAAE,OAAO;AAAA,MAIzB;AAAA,IAAA;AAGE,UAAA,WAAW,MAAM,cAAc,iBAAiB;AAEtD,QAAI,CAAC,UAAU;AACR,YAAA,IAAI,MAAM,yCAAyC;AAAA,IAC1D;AAEA,WAAOC,4DAA8B;AAAA,MACpC;AAAA,IAAA,CACA;AAAA,EACF;AACD;;"}