@prismicio/mock
Version:
Generate mock Prismic documents, fields, Slices, and models for development and testing environments
1 lines • 4.54 kB
Source Map (JSON)
{"version":3,"file":"link.cjs","names":["createFaker","prismic","contentRelationship","linkToMedia","sentenceCase"],"sources":["../../src/value/link.ts"],"sourcesContent":["import * as prismic from \"@prismicio/client\"\n\nimport { sentenceCase } from \"../lib/changeCase\"\nimport { createFaker } from \"../lib/createFaker\"\nimport * as modelGen from \"../model\"\nimport type { MockValueStateConfig, MockValueConfig } from \"../types\"\nimport { contentRelationship } from \"./contentRelationship\"\nimport { linkToMedia } from \"./linkToMedia\"\n\nexport type MockLinkValueConfig<\n\tLinkType extends (typeof prismic.LinkType)[keyof typeof prismic.LinkType] =\n\t\t(typeof prismic.LinkType)[keyof typeof prismic.LinkType],\n\tModel extends prismic.CustomTypeModelLinkField = prismic.CustomTypeModelLinkField,\n\tState extends prismic.FieldState = prismic.FieldState,\n> = {\n\ttype?: LinkType\n\twithTargetBlank?: NonNullable<Model[\"config\"]>[\"allowTargetBlank\"] extends undefined\n\t\t? false\n\t\t: boolean\n\twithText?: NonNullable<Model[\"config\"]>[\"allowText\"] extends undefined ? false : boolean\n\t/** A list of potential documents to which the field can be linked. */\n\tlinkableDocuments?: LinkType extends typeof prismic.LinkType.Document\n\t\t? prismic.PrismicDocument[]\n\t\t: never\n} & MockValueConfig<Model> &\n\tMockValueStateConfig<State>\n\nexport type MockLinkValue<\n\tLinkType extends (typeof prismic.LinkType)[keyof typeof prismic.LinkType] =\n\t\t(typeof prismic.LinkType)[keyof typeof prismic.LinkType],\n\tState extends prismic.FieldState = \"filled\",\n> = State extends \"empty\"\n\t? prismic.EmptyLinkField<LinkType>\n\t: LinkType extends typeof prismic.LinkType.Web\n\t\t? prismic.FilledLinkToWebField\n\t\t: LinkType extends typeof prismic.LinkType.Media\n\t\t\t? prismic.FilledLinkToMediaField\n\t\t\t: LinkType extends typeof prismic.LinkType.Document\n\t\t\t\t? prismic.FilledContentRelationshipField\n\t\t\t\t: never\n\nexport const link = <\n\tLinkType extends (typeof prismic.LinkType)[keyof typeof prismic.LinkType] =\n\t\t(typeof prismic.LinkType)[keyof typeof prismic.LinkType],\n\tModel extends prismic.CustomTypeModelLinkField = prismic.CustomTypeModelLinkField,\n\tState extends prismic.FieldState = \"filled\",\n>(\n\tconfig: MockLinkValueConfig<LinkType, Model, State>,\n): MockLinkValue<LinkType, State> => {\n\tconst faker = config.faker || createFaker(config.seed)\n\n\tconst type =\n\t\tconfig.type ||\n\t\tfaker.randomElement([prismic.LinkType.Web, prismic.LinkType.Document, prismic.LinkType.Media])\n\n\tif (config.state === \"empty\") {\n\t\treturn {\n\t\t\tlink_type: type,\n\t\t} as MockLinkValue<LinkType, State>\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase prismic.LinkType.Document: {\n\t\t\t\treturn contentRelationship({\n\t\t\t\t\tfaker,\n\t\t\t\t\tstate: config.state,\n\t\t\t\t\tlinkableDocuments: config.linkableDocuments,\n\t\t\t\t}) as unknown as MockLinkValue<LinkType, State>\n\t\t\t}\n\n\t\t\tcase prismic.LinkType.Media: {\n\t\t\t\treturn linkToMedia({\n\t\t\t\t\tfaker,\n\t\t\t\t\tstate: config.state,\n\t\t\t\t\twithText: config.withText,\n\t\t\t\t}) as MockLinkValue<LinkType, State>\n\t\t\t}\n\n\t\t\tcase prismic.LinkType.Web:\n\t\t\tdefault: {\n\t\t\t\tconst model = config.model || modelGen.link({ faker })\n\n\t\t\t\treturn {\n\t\t\t\t\tlink_type: prismic.LinkType.Web,\n\t\t\t\t\turl: faker.url(),\n\t\t\t\t\ttarget:\n\t\t\t\t\t\t(config.withTargetBlank ?? (model.config?.allowTargetBlank && faker.boolean()))\n\t\t\t\t\t\t\t? \"_blank\"\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t...((config.withText ?? (model.config?.allowText && faker.boolean()))\n\t\t\t\t\t\t? { text: sentenceCase(faker.words(2)) }\n\t\t\t\t\t\t: {}),\n\t\t\t\t} as MockLinkValue<LinkType, State>\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;AAyCA,MAAa,QAMZ,WACoC;CACpC,MAAM,QAAQ,OAAO,SAASA,oBAAAA,YAAY,OAAO,KAAK;CAEtD,MAAM,OACL,OAAO,QACP,MAAM,cAAc;EAACC,kBAAQ,SAAS;EAAKA,kBAAQ,SAAS;EAAUA,kBAAQ,SAAS;EAAM,CAAC;AAE/F,KAAI,OAAO,UAAU,QACpB,QAAO,EACN,WAAW,MACX;KAED,SAAQ,MAAR;EACC,KAAKA,kBAAQ,SAAS,SACrB,QAAOC,4BAAAA,oBAAoB;GAC1B;GACA,OAAO,OAAO;GACd,mBAAmB,OAAO;GAC1B,CAAC;EAGH,KAAKD,kBAAQ,SAAS,MACrB,QAAOE,oBAAAA,YAAY;GAClB;GACA,OAAO,OAAO;GACd,UAAU,OAAO;GACjB,CAAC;EAGH,KAAKF,kBAAQ,SAAS;EACtB,SAAS;GACR,MAAM,QAAQ,OAAO,SAAA,aAAA,KAAuB,EAAE,OAAO,CAAC;AAEtD,UAAO;IACN,WAAWA,kBAAQ,SAAS;IAC5B,KAAK,MAAM,KAAK;IAChB,QACE,OAAO,oBAAoB,MAAM,QAAQ,oBAAoB,MAAM,SAAS,IAC1E,WACA,KAAA;IACJ,GAAK,OAAO,aAAa,MAAM,QAAQ,aAAa,MAAM,SAAS,IAChE,EAAE,MAAMG,mBAAAA,aAAa,MAAM,MAAM,EAAE,CAAC,EAAE,GACtC,EAAE;IACL"}