{"version":3,"file":"asLink.cjs","sources":["../../src/asLink.ts"],"sourcesContent":["import {\n\tFilledLinkToDocumentField,\n\tFilledLinkToMediaField,\n\tFilledLinkToWebField,\n\tLinkField,\n\tLinkType,\n\tPrismicDocument,\n} from \"@prismicio/types\";\n\nimport { documentToLinkField } from \"./documentToLinkField\";\nimport { LinkResolverFunction } from \"./types\";\n\n/**\n * The return type of `asLink()`.\n */\ntype AsLinkReturnType<\n\tLinkResolverFunctionReturnType = string,\n\tField extends LinkField | PrismicDocument | null | undefined =\n\t\t| LinkField\n\t\t| PrismicDocument\n\t\t| null\n\t\t| undefined,\n> = Field extends\n\t| FilledLinkToWebField\n\t| FilledLinkToMediaField\n\t| FilledLinkToDocumentField\n\t| PrismicDocument\n\t? LinkResolverFunctionReturnType | string | null\n\t: null;\n\n/**\n * Resolves any type of link field or document to a URL\n *\n * @typeParam LinkResolverFunctionReturnType - Link resolver function return\n *   type\n * @param linkFieldOrDocument - Any kind of link field or a document to resolve\n * @param linkResolver - An optional link resolver function, without it you're\n *   expected to use the `routes` options from the API\n *\n * @returns Resolved URL, null if provided link is empty\n * @see Prismic link resolver documentation: {@link https://prismic.io/docs/technologies/link-resolver-javascript}\n * @see Prismic API `routes` options documentation: {@link https://prismic.io/docs/technologies/route-resolver-nuxtjs}\n */\nexport const asLink = <\n\tLinkResolverFunctionReturnType = string,\n\tField extends LinkField | PrismicDocument | null | undefined =\n\t\t| LinkField\n\t\t| PrismicDocument\n\t\t| null\n\t\t| undefined,\n>(\n\tlinkFieldOrDocument: Field,\n\tlinkResolver?: LinkResolverFunction<LinkResolverFunctionReturnType> | null,\n): AsLinkReturnType<LinkResolverFunctionReturnType, Field> => {\n\tif (!linkFieldOrDocument) {\n\t\treturn null as AsLinkReturnType<LinkResolverFunctionReturnType, Field>;\n\t}\n\n\t// Converts document to link field if needed\n\tconst linkField =\n\t\t// prettier-ignore\n\t\t(\n\t\t\t// @ts-expect-error - Bug in TypeScript 4.9: https://github.com/microsoft/TypeScript/issues/51501\n\t\t\t// TODO: Remove the `prettier-ignore` comment when this bug is fixed.\n\t\t\t\"link_type\" in linkFieldOrDocument\n\t\t\t\t? linkFieldOrDocument\n\t\t\t\t: documentToLinkField(linkFieldOrDocument)\n\t\t) as LinkField;\n\n\tswitch (linkField.link_type) {\n\t\tcase LinkType.Media:\n\t\tcase LinkType.Web:\n\t\t\treturn (\"url\" in linkField ? linkField.url : null) as AsLinkReturnType<\n\t\t\t\tLinkResolverFunctionReturnType,\n\t\t\t\tField\n\t\t\t>;\n\n\t\tcase LinkType.Document: {\n\t\t\tif (\"id\" in linkField && linkResolver) {\n\t\t\t\t// When using Link Resolver...\n\t\t\t\tconst resolvedURL = linkResolver(linkField);\n\n\t\t\t\tif (resolvedURL != null) {\n\t\t\t\t\treturn resolvedURL as AsLinkReturnType<\n\t\t\t\t\t\tLinkResolverFunctionReturnType,\n\t\t\t\t\t\tField\n\t\t\t\t\t>;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\"url\" in linkField && linkField.url) {\n\t\t\t\t// When using Route Resolver...\n\t\t\t\treturn linkField.url as AsLinkReturnType<\n\t\t\t\t\tLinkResolverFunctionReturnType,\n\t\t\t\t\tField\n\t\t\t\t>;\n\t\t\t}\n\n\t\t\t// When empty or Link Resolver and Route Resolver are not used...\n\t\t\treturn null as AsLinkReturnType<LinkResolverFunctionReturnType, Field>;\n\t\t}\n\n\t\tcase LinkType.Any:\n\t\tdefault:\n\t\t\treturn null as AsLinkReturnType<LinkResolverFunctionReturnType, Field>;\n\t}\n};\n"],"names":["documentToLinkField","LinkType"],"mappings":";;;;AA2Ca,MAAA,SAAS,CAQrB,qBACA,iBAC4D;AAC5D,MAAI,CAAC,qBAAqB;AAClB,WAAA;AAAA,EACP;AAGK,QAAA;AAAA;AAAA;AAAA;AAAA,IAKJ,eAAe,sBACZ,sBACAA,oBAAAA,oBAAoB,mBAAmB;AAAA;AAG5C,UAAQ,UAAU,WAAW;AAAA,IAC5B,KAAKC,MAAAA,SAAS;AAAA,IACd,KAAKA,MAAS,SAAA;AACL,aAAA,SAAS,YAAY,UAAU,MAAM;AAAA,IAK9C,KAAKA,MAAAA,SAAS,UAAU;AACnB,UAAA,QAAQ,aAAa,cAAc;AAEhC,cAAA,cAAc,aAAa,SAAS;AAE1C,YAAI,eAAe,MAAM;AACjB,iBAAA;AAAA,QAIP;AAAA,MACD;AAEG,UAAA,SAAS,aAAa,UAAU,KAAK;AAExC,eAAO,UAAU;AAAA,MAIjB;AAGM,aAAA;AAAA,IACP;AAAA,IAED,KAAKA,MAAAA,SAAS;AAAA,IACd;AACQ,aAAA;AAAA,EACR;AACF;;"}