{"version":3,"file":"asHTML.cjs","sources":["../../src/asHTML.ts"],"sourcesContent":["import {\n\tserialize,\n\tElement,\n\tcomposeSerializers,\n\tRichTextFunctionSerializer,\n\tRichTextMapSerializer,\n\twrapMapSerializer,\n} from \"@prismicio/richtext\";\nimport { RichTextField } from \"@prismicio/types\";\n\nimport {\n\tserializeStandardTag,\n\tserializePreFormatted,\n\tserializeImage,\n\tserializeEmbed,\n\tserializeHyperlink,\n\tserializeSpan,\n} from \"./lib/serializerHelpers\";\nimport {\n\tHTMLFunctionSerializer,\n\tHTMLMapSerializer,\n\tLinkResolverFunction,\n} from \"./types\";\n\n/**\n * Creates a default HTML serializer with a given Link Resolver providing\n * sensible and safe defaults for every node type\n *\n * @internal\n */\nconst createDefaultHTMLSerializer = (\n\tlinkResolver: LinkResolverFunction<string> | undefined | null,\n): RichTextFunctionSerializer<string> => {\n\treturn (_type, node, text, children, _key) => {\n\t\tswitch (node.type) {\n\t\t\tcase Element.heading1:\n\t\t\t\treturn serializeStandardTag(\"h1\", node, children);\n\t\t\tcase Element.heading2:\n\t\t\t\treturn serializeStandardTag(\"h2\", node, children);\n\t\t\tcase Element.heading3:\n\t\t\t\treturn serializeStandardTag(\"h3\", node, children);\n\t\t\tcase Element.heading4:\n\t\t\t\treturn serializeStandardTag(\"h4\", node, children);\n\t\t\tcase Element.heading5:\n\t\t\t\treturn serializeStandardTag(\"h5\", node, children);\n\t\t\tcase Element.heading6:\n\t\t\t\treturn serializeStandardTag(\"h6\", node, children);\n\t\t\tcase Element.paragraph:\n\t\t\t\treturn serializeStandardTag(\"p\", node, children);\n\t\t\tcase Element.preformatted:\n\t\t\t\treturn serializePreFormatted(node);\n\t\t\tcase Element.strong:\n\t\t\t\treturn serializeStandardTag(\"strong\", node, children);\n\t\t\tcase Element.em:\n\t\t\t\treturn serializeStandardTag(\"em\", node, children);\n\t\t\tcase Element.listItem:\n\t\t\t\treturn serializeStandardTag(\"li\", node, children);\n\t\t\tcase Element.oListItem:\n\t\t\t\treturn serializeStandardTag(\"li\", node, children);\n\t\t\tcase Element.list:\n\t\t\t\treturn serializeStandardTag(\"ul\", node, children);\n\t\t\tcase Element.oList:\n\t\t\t\treturn serializeStandardTag(\"ol\", node, children);\n\t\t\tcase Element.image:\n\t\t\t\treturn serializeImage(linkResolver, node);\n\t\t\tcase Element.embed:\n\t\t\t\treturn serializeEmbed(node);\n\t\t\tcase Element.hyperlink:\n\t\t\t\treturn serializeHyperlink(linkResolver, node, children);\n\t\t\tcase Element.label:\n\t\t\t\treturn serializeStandardTag(\"span\", node, children);\n\t\t\tcase Element.span:\n\t\t\tdefault:\n\t\t\t\treturn serializeSpan(text);\n\t\t}\n\t};\n};\n\n/**\n * Wraps a map serializer into a regular function serializer. The given map\n * serializer should accept children as a string, not as an array of strings\n * like `@prismicio/richtext`'s `wrapMapSerializer`.\n *\n * @param mapSerializer - Map serializer to wrap\n *\n * @returns A regular function serializer\n */\nconst wrapMapSerializerWithStringChildren = (\n\tmapSerializer: HTMLMapSerializer,\n): RichTextFunctionSerializer<string> => {\n\tconst modifiedMapSerializer = {} as RichTextMapSerializer<string>;\n\n\tfor (const tag in mapSerializer) {\n\t\tconst tagSerializer = mapSerializer[tag as keyof typeof mapSerializer];\n\n\t\tif (tagSerializer) {\n\t\t\tmodifiedMapSerializer[tag as keyof typeof mapSerializer] = (payload) => {\n\t\t\t\treturn tagSerializer({\n\t\t\t\t\t...payload,\n\t\t\t\t\t// @ts-expect-error - merging blockSerializer types causes TS to bail to a never type\n\t\t\t\t\tchildren: payload.children.join(\"\"),\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\t}\n\n\treturn wrapMapSerializer(modifiedMapSerializer);\n};\n\n/**\n * The return type of `asHTML()`.\n */\ntype AsHTMLReturnType<Field extends RichTextField | null | undefined> =\n\tField extends RichTextField ? string : null;\n\n/**\n * Serializes a rich text or title field to an HTML string\n *\n * @param richTextField - A rich text or title field from Prismic\n * @param linkResolver - An optional link resolver function to resolve links,\n *   without it you're expected to use the `routes` options from the API\n * @param htmlSerializer - An optional serializer, unhandled cases will fallback\n *   to the default serializer\n *\n * @returns HTML equivalent of the provided rich text or title field\n * @see Templating rich text and title fields from Prismic {@link https://prismic.io/docs/technologies/templating-rich-text-and-title-fields-javascript}\n */\nexport const asHTML = <Field extends RichTextField | null | undefined>(\n\trichTextField: Field,\n\tlinkResolver?: LinkResolverFunction<string> | null,\n\thtmlSerializer?: HTMLFunctionSerializer | HTMLMapSerializer | null,\n): AsHTMLReturnType<Field> => {\n\tif (richTextField) {\n\t\tlet serializer: RichTextFunctionSerializer<string>;\n\t\tif (htmlSerializer) {\n\t\t\tserializer = composeSerializers(\n\t\t\t\ttypeof htmlSerializer === \"object\"\n\t\t\t\t\t? wrapMapSerializerWithStringChildren(htmlSerializer)\n\t\t\t\t\t: (type, node, text, children, key) =>\n\t\t\t\t\t\t\thtmlSerializer(type, node, text, children.join(\"\"), key),\n\t\t\t\tcreateDefaultHTMLSerializer(linkResolver),\n\t\t\t);\n\t\t} else {\n\t\t\tserializer = createDefaultHTMLSerializer(linkResolver);\n\t\t}\n\n\t\treturn serialize(richTextField, serializer).join(\n\t\t\t\"\",\n\t\t) as AsHTMLReturnType<Field>;\n\t} else {\n\t\treturn null as AsHTMLReturnType<Field>;\n\t}\n};\n"],"names":["Element","serializeStandardTag","serializePreFormatted","serializeImage","serializeEmbed","serializeHyperlink","serializeSpan","wrapMapSerializer","composeSerializers","serialize"],"mappings":";;;;AA8BA,MAAM,8BAA8B,CACnC,iBACuC;AACvC,SAAO,CAAC,OAAO,MAAM,MAAM,UAAU,SAAQ;AAC5C,YAAQ,KAAK,MAAM;AAAA,MAClB,KAAKA,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,KAAK,MAAM,QAAQ;AAAA,MAChD,KAAKD,SAAQ,QAAA;AACZ,eAAOE,kBAAAA,sBAAsB,IAAI;AAAA,MAClC,KAAKF,SAAQ,QAAA;AACL,eAAAC,uCAAqB,UAAU,MAAM,QAAQ;AAAA,MACrD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAC,uCAAqB,MAAM,MAAM,QAAQ;AAAA,MACjD,KAAKD,SAAQ,QAAA;AACL,eAAAG,kBAAA,eAAe,cAAc,IAAI;AAAA,MACzC,KAAKH,SAAQ,QAAA;AACZ,eAAOI,kBAAAA,eAAe,IAAI;AAAA,MAC3B,KAAKJ,SAAQ,QAAA;AACL,eAAAK,qCAAmB,cAAc,MAAM,QAAQ;AAAA,MACvD,KAAKL,SAAQ,QAAA;AACL,eAAAC,uCAAqB,QAAQ,MAAM,QAAQ;AAAA,MACnD,KAAKD,SAAAA,QAAQ;AAAA,MACb;AACC,eAAOM,kBAAAA,cAAc,IAAI;AAAA,IAC1B;AAAA,EAAA;AAEH;AAWA,MAAM,sCAAsC,CAC3C,kBACuC;AACvC,QAAM,wBAAwB,CAAA;AAE9B,aAAW,OAAO,eAAe;AAC1B,UAAA,gBAAgB,cAAc,GAAiC;AAErE,QAAI,eAAe;AACI,4BAAA,GAAiC,IAAI,CAAC,YAAW;AACtE,eAAO,cAAc;AAAA,UACpB,GAAG;AAAA;AAAA,UAEH,UAAU,QAAQ,SAAS,KAAK,EAAE;AAAA,QAAA,CAClC;AAAA,MAAA;AAAA,IAEF;AAAA,EACD;AAED,SAAOC,SAAAA,kBAAkB,qBAAqB;AAC/C;AAoBO,MAAM,SAAS,CACrB,eACA,cACA,mBAC4B;AAC5B,MAAI,eAAe;AACd,QAAA;AACJ,QAAI,gBAAgB;AACN,mBAAAC,SAAA,mBACZ,OAAO,mBAAmB,WACvB,oCAAoC,cAAc,IAClD,CAAC,MAAM,MAAM,MAAM,UAAU,QAC7B,eAAe,MAAM,MAAM,MAAM,SAAS,KAAK,EAAE,GAAG,GAAG,GAC1D,4BAA4B,YAAY,CAAC;AAAA,IAAA,OAEpC;AACN,mBAAa,4BAA4B,YAAY;AAAA,IACrD;AAED,WAAOC,SAAAA,UAAU,eAAe,UAAU,EAAE,KAC3C,EAAE;AAAA,EAAA,OAEG;AACC,WAAA;AAAA,EACP;AACF;;"}