{"version":3,"file":"asHTML.cjs","names":["serializeStandardTag","serializePreFormatted","serializeImage","serializeEmbed","serializeHyperlink","serializeSpan","wrapMapSerializer","composeSerializers","serialize"],"sources":["../../src/helpers/asHTML.ts"],"sourcesContent":["import {\n\tserializeEmbed,\n\tserializeHyperlink,\n\tserializeImage,\n\tserializePreFormatted,\n\tserializeSpan,\n\tserializeStandardTag,\n} from \"../lib/serializerHelpers\"\nimport type {\n\tRichTextFunctionSerializer,\n\tRichTextMapSerializer,\n\tRichTextMapSerializerFunction,\n} from \"../richtext\"\nimport { composeSerializers, serialize, wrapMapSerializer } from \"../richtext\"\nimport type { RichTextField } from \"../types/value/richText\"\nimport type { LinkResolverFunction } from \"./asLink\"\n\n/**\n * Serializes a node from a rich text field with a function to HTML.\n *\n * Unlike a typical `@prismicio/client/richtext` function serializer, this serializer converts the\n * `children` argument to a single string rather than an array of strings.\n *\n * @see Learn how to style rich text and customize rendering: {@link https://prismic.io/docs/fields/rich-text}\n */\nexport type HTMLRichTextFunctionSerializer = (\n\ttype: Parameters<RichTextFunctionSerializer<string>>[0],\n\tnode: Parameters<RichTextFunctionSerializer<string>>[1],\n\ttext: Parameters<RichTextFunctionSerializer<string>>[2],\n\tchildren: Parameters<RichTextFunctionSerializer<string>>[3][number],\n\tkey: Parameters<RichTextFunctionSerializer<string>>[4],\n) => string | null | undefined\n\n/**\n * Serializes a node from a rich text field with a map to HTML.\n *\n * Unlike a typical `@prismicio/client/richtext` map serializer, this serializer converts the\n * `children` property to a single string rather than an array of strings and accepts shorthand\n * declarations.\n *\n * @see Learn how to style rich text and customize rendering: {@link https://prismic.io/docs/fields/rich-text}\n */\nexport type HTMLRichTextMapSerializer = {\n\t[P in keyof RichTextMapSerializer<string>]: P extends RichTextMapSerializer<string>[\"span\"]\n\t\t? HTMLStrictRichTextMapSerializer[P]\n\t\t: HTMLStrictRichTextMapSerializer[P] | HTMLRichTextMapSerializerShorthand\n}\n\n/**\n * Serializes a node from a rich text field with a map to HTML.\n *\n * Unlike a typical `@prismicio/client/richtext` map serializer, this serializer converts the\n * `children` property to a single string rather than an array of strings but doesn't accept\n * shorthand declarations.\n *\n * @see Learn how to style rich text and customize rendering: {@link https://prismic.io/docs/fields/rich-text}\n */\nexport type HTMLStrictRichTextMapSerializer = {\n\t[P in keyof RichTextMapSerializer<string>]: (payload: {\n\t\ttype: Parameters<HTMLRichTextMapSerializerFunction<P>>[0][\"type\"]\n\t\tnode: Parameters<HTMLRichTextMapSerializerFunction<P>>[0][\"node\"]\n\t\ttext: Parameters<HTMLRichTextMapSerializerFunction<P>>[0][\"text\"]\n\t\tchildren: Parameters<HTMLRichTextMapSerializerFunction<P>>[0][\"children\"][number]\n\t\tkey: Parameters<HTMLRichTextMapSerializerFunction<P>>[0][\"key\"]\n\t}) => string | null | undefined\n}\n\n/**\n * A {@link RichTextMapSerializerFunction} type specifically for {@link HTMLRichTextMapSerializer}.\n *\n * @typeParam BlockName - The serializer's rich text block type.\n */\ntype HTMLRichTextMapSerializerFunction<BlockType extends keyof RichTextMapSerializer<string>> =\n\tRichTextMapSerializerFunction<\n\t\tstring,\n\t\tExtractNodeGeneric<RichTextMapSerializer<string>[BlockType]>,\n\t\tExtractTextTypeGeneric<RichTextMapSerializer<string>[BlockType]>\n\t>\n\n/**\n * Returns the `Node` generic from {@link RichTextMapSerializerFunction}.\n *\n * @typeParam T - The `RichTextMapSerializerFunction` containing the needed\n * `Node` generic.\n */\ntype ExtractNodeGeneric<T> =\n\tT extends RichTextMapSerializerFunction<\n\t\t// oxlint-disable-next-line no-explicit-any\n\t\tany,\n\t\tinfer U,\n\t\t// oxlint-disable-next-line no-explicit-any\n\t\tany\n\t>\n\t\t? U\n\t\t: never\n\n/**\n * Returns the `TextType` generic from {@link RichTextMapSerializerFunction}.\n *\n * @typeParam T - The `RichTextMapSerializerFunction` containing the needed\n * `TextType` generic.\n */\ntype ExtractTextTypeGeneric<T> =\n\tT extends RichTextMapSerializerFunction<\n\t\t// oxlint-disable-next-line no-explicit-any\n\t\tany,\n\t\t// oxlint-disable-next-line no-explicit-any\n\t\tany,\n\t\tinfer U\n\t>\n\t\t? U\n\t\t: never\n\n/** A shorthand definition for {@link HTMLRichTextMapSerializer} element types. */\nexport type HTMLRichTextMapSerializerShorthand = {\n\t/** Classes to apply to the element type. */\n\tclass?: string\n\n\t/** Other attributes to apply to the element type. */\n\t[Attribute: string]: string | boolean | null | undefined\n}\n\n/**\n * Serializes a node from a rich text field with a map or a function to HTML.\n *\n * @see {@link HTMLRichTextMapSerializer} and {@link HTMLRichTextFunctionSerializer}\n * @see Learn how to style rich text and customize rendering: {@link https://prismic.io/docs/fields/rich-text}\n */\nexport type HTMLRichTextSerializer = HTMLRichTextMapSerializer | HTMLRichTextFunctionSerializer\n\n/**\n * Creates a HTML rich text serializer with a given link resolver and provide sensible and safe\n * defaults for every node type\n *\n * @internal\n */\nconst createHTMLRichTextSerializer = (\n\tlinkResolver: LinkResolverFunction | undefined | null,\n\tserializer?: HTMLRichTextMapSerializer | null,\n): RichTextFunctionSerializer<string> => {\n\tconst useSerializerOrDefault = <BlockType extends keyof RichTextMapSerializer<string>>(\n\t\tnodeSerializerOrShorthand: HTMLRichTextMapSerializer[BlockType],\n\t\tdefaultWithShorthand: NonNullable<HTMLStrictRichTextMapSerializer[BlockType]>,\n\t): NonNullable<HTMLStrictRichTextMapSerializer[BlockType]> => {\n\t\tif (typeof nodeSerializerOrShorthand === \"function\") {\n\t\t\treturn ((payload) => {\n\t\t\t\treturn (\n\t\t\t\t\t(nodeSerializerOrShorthand as HTMLStrictRichTextMapSerializer[BlockType])?.(payload) ||\n\t\t\t\t\tdefaultWithShorthand(payload)\n\t\t\t\t)\n\t\t\t}) as NonNullable<HTMLStrictRichTextMapSerializer[BlockType]>\n\t\t}\n\n\t\treturn defaultWithShorthand\n\t}\n\n\tconst mapSerializer: Required<HTMLStrictRichTextMapSerializer> = {\n\t\theading1: useSerializerOrDefault<\"heading1\">(\n\t\t\tserializer?.heading1,\n\t\t\tserializeStandardTag<\"heading1\">(\"h1\", serializer?.heading1),\n\t\t),\n\t\theading2: useSerializerOrDefault<\"heading2\">(\n\t\t\tserializer?.heading2,\n\t\t\tserializeStandardTag<\"heading2\">(\"h2\", serializer?.heading2),\n\t\t),\n\t\theading3: useSerializerOrDefault<\"heading3\">(\n\t\t\tserializer?.heading3,\n\t\t\tserializeStandardTag<\"heading3\">(\"h3\", serializer?.heading3),\n\t\t),\n\t\theading4: useSerializerOrDefault<\"heading4\">(\n\t\t\tserializer?.heading4,\n\t\t\tserializeStandardTag<\"heading4\">(\"h4\", serializer?.heading4),\n\t\t),\n\t\theading5: useSerializerOrDefault<\"heading5\">(\n\t\t\tserializer?.heading5,\n\t\t\tserializeStandardTag<\"heading5\">(\"h5\", serializer?.heading5),\n\t\t),\n\t\theading6: useSerializerOrDefault<\"heading6\">(\n\t\t\tserializer?.heading6,\n\t\t\tserializeStandardTag<\"heading6\">(\"h6\", serializer?.heading6),\n\t\t),\n\t\tparagraph: useSerializerOrDefault<\"paragraph\">(\n\t\t\tserializer?.paragraph,\n\t\t\tserializeStandardTag<\"paragraph\">(\"p\", serializer?.paragraph),\n\t\t),\n\t\tpreformatted: useSerializerOrDefault<\"preformatted\">(\n\t\t\tserializer?.preformatted,\n\t\t\tserializePreFormatted(serializer?.preformatted),\n\t\t),\n\t\tstrong: useSerializerOrDefault<\"strong\">(\n\t\t\tserializer?.strong,\n\t\t\tserializeStandardTag<\"strong\">(\"strong\", serializer?.strong),\n\t\t),\n\t\tem: useSerializerOrDefault<\"em\">(\n\t\t\tserializer?.em,\n\t\t\tserializeStandardTag<\"em\">(\"em\", serializer?.em),\n\t\t),\n\t\tlistItem: useSerializerOrDefault<\"listItem\">(\n\t\t\tserializer?.listItem,\n\t\t\tserializeStandardTag<\"listItem\">(\"li\", serializer?.listItem),\n\t\t),\n\t\toListItem: useSerializerOrDefault<\"oListItem\">(\n\t\t\tserializer?.oListItem,\n\t\t\tserializeStandardTag<\"oListItem\">(\"li\", serializer?.oListItem),\n\t\t),\n\t\tlist: useSerializerOrDefault<\"list\">(\n\t\t\tserializer?.list,\n\t\t\tserializeStandardTag<\"list\">(\"ul\", serializer?.list),\n\t\t),\n\t\toList: useSerializerOrDefault<\"oList\">(\n\t\t\tserializer?.oList,\n\t\t\tserializeStandardTag<\"oList\">(\"ol\", serializer?.oList),\n\t\t),\n\t\timage: useSerializerOrDefault<\"image\">(\n\t\t\tserializer?.image,\n\t\t\tserializeImage(linkResolver, serializer?.image),\n\t\t),\n\t\tembed: useSerializerOrDefault<\"embed\">(serializer?.embed, serializeEmbed(serializer?.embed)),\n\t\thyperlink: useSerializerOrDefault<\"hyperlink\">(\n\t\t\tserializer?.hyperlink,\n\t\t\tserializeHyperlink(linkResolver, serializer?.hyperlink),\n\t\t),\n\t\tlabel: useSerializerOrDefault<\"label\">(\n\t\t\tserializer?.label,\n\t\t\tserializeStandardTag<\"label\">(\"span\", serializer?.label),\n\t\t),\n\t\tspan: useSerializerOrDefault<\"span\">(serializer?.span, serializeSpan()),\n\t}\n\n\treturn wrapMapSerializerWithStringChildren(mapSerializer)\n}\n\n/**\n * Wraps a map serializer into a regular function serializer. The given map serializer should accept\n * children as a string, not as an array of strings like `@prismicio/client/richtext`'s\n * `wrapMapSerializer`.\n *\n * @param mapSerializer - Map serializer to wrap\n * @returns A regular function serializer\n */\nconst wrapMapSerializerWithStringChildren = (\n\tmapSerializer: HTMLStrictRichTextMapSerializer,\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/** Configuration that determines the output of `asHTML()`. */\ntype AsHTMLConfig = {\n\t/**\n\t * An optional link resolver function to resolve links. Without it, you're expected to use the\n\t * `routes` option from the API.\n\t */\n\tlinkResolver?: LinkResolverFunction | null\n\n\t/** An optional rich text serializer. Unhandled cases will fall back to the default serializer. */\n\tserializer?: HTMLRichTextSerializer | null\n}\n\n// TODO: Remove when we remove support for deprecated tuple-style configuration.\n/** @deprecated Use object-style configuration instead. */\ntype AsHTMLDeprecatedTupleConfig = [\n\tlinkResolver?: LinkResolverFunction | null,\n\tserializer?: HTMLRichTextSerializer | null,\n]\n\n/** The return type of `asHTML()`. */\ntype AsHTMLReturnType<Field extends RichTextField | null | undefined> = Field extends RichTextField\n\t? string\n\t: null\n\n// TODO: Remove overload when we remove support for deprecated tuple-style configuration.\nexport const asHTML: {\n\t/**\n\t * Converts a rich text field to an HTML string.\n\t *\n\t * @example\n\t * \t;```ts\n\t * \tconst html = asHTML(document.data.content)\n\t * \t// => \"<p>Hello world</p>\"\n\t * \t```\n\t *\n\t * @param richTextField - A rich text field from Prismic.\n\t * @param config - Configuration that determines the output of `asHTML()`.\n\t * @returns HTML equivalent of the rich text field, or `null` if the field is\n\t * empty.\n\t * @see Learn how to style rich text and customize rendering: {@link https://prismic.io/docs/fields/rich-text}\n\t */\n\t<Field extends RichTextField | null | undefined>(\n\t\trichTextField: Field,\n\t\tconfig?: AsHTMLConfig,\n\t): AsHTMLReturnType<Field>\n\n\t/**\n\t * Converts a rich text field to an HTML string.\n\t *\n\t * @deprecated Use object-style configuration instead.\n\t * @param richTextField - A rich text field from Prismic.\n\t * @param linkResolver - An optional link resolver function to resolve links. Without it, you're\n\t *   expected to use the `routes` option from the API.\n\t * @param serializer - An optional rich text serializer. Unhandled cases will fall back to the\n\t *   default serializer.\n\t * @returns HTML equivalent of the rich text field, or `null` if the field is\n\t * empty.\n\t * @see Learn how to style rich text and customize rendering: {@link https://prismic.io/docs/fields/rich-text}\n\t */\n\t<Field extends RichTextField | null | undefined>(\n\t\trichTextField: Field,\n\t\t...config: AsHTMLDeprecatedTupleConfig\n\t): AsHTMLReturnType<Field>\n} = <Field extends RichTextField | null | undefined>(\n\trichTextField: Field,\n\t// TODO: Rename to `config` when we remove support for deprecated tuple-style configuration.\n\t...configObjectOrTuple: [config?: AsHTMLConfig] | AsHTMLDeprecatedTupleConfig\n): AsHTMLReturnType<Field> => {\n\tif (richTextField) {\n\t\t// TODO: Remove when we remove support for deprecated tuple-style configuration.\n\t\tconst [configObjectOrLinkResolver, maybeSerializer] = configObjectOrTuple\n\t\tlet config: AsHTMLConfig\n\t\tif (typeof configObjectOrLinkResolver === \"function\" || configObjectOrLinkResolver == null) {\n\t\t\tconfig = {\n\t\t\t\tlinkResolver: configObjectOrLinkResolver,\n\t\t\t\tserializer: maybeSerializer,\n\t\t\t}\n\t\t} else {\n\t\t\tconfig = { ...configObjectOrLinkResolver }\n\t\t}\n\n\t\tlet serializer: RichTextFunctionSerializer<string>\n\t\tif (config.serializer) {\n\t\t\tif (typeof config.serializer === \"function\") {\n\t\t\t\tserializer = composeSerializers(\n\t\t\t\t\t(type, node, text, children, key) =>\n\t\t\t\t\t\t// TypeScript doesn't narrow the type correctly here since it is now in a callback function, so we have to cast it here.\n\t\t\t\t\t\t(config.serializer as HTMLRichTextFunctionSerializer)(\n\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\tnode,\n\t\t\t\t\t\t\ttext,\n\t\t\t\t\t\t\tchildren.join(\"\"),\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t),\n\t\t\t\t\tcreateHTMLRichTextSerializer(config.linkResolver),\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tserializer = createHTMLRichTextSerializer(config.linkResolver, config.serializer)\n\t\t\t}\n\t\t} else {\n\t\t\tserializer = createHTMLRichTextSerializer(config.linkResolver)\n\t\t}\n\n\t\treturn serialize(richTextField, serializer).join(\"\") as AsHTMLReturnType<Field>\n\t} else {\n\t\treturn null as AsHTMLReturnType<Field>\n\t}\n}\n"],"mappings":";;;;;;;;;;;AAwIA,MAAM,gCACL,cACA,eACwC;CACxC,MAAM,0BACL,2BACA,yBAC6D;AAC7D,MAAI,OAAO,8BAA8B,WACxC,UAAS,YAAY;AACpB,UACE,4BAA2E,QAAQ,IACpF,qBAAqB,QAAQ;;AAKhC,SAAO;;AA4ER,QAAO,oCAzE0D;EAChE,UAAU,uBACT,YAAY,UACZA,0BAAAA,qBAAiC,MAAM,YAAY,SAAS,CAC5D;EACD,UAAU,uBACT,YAAY,UACZA,0BAAAA,qBAAiC,MAAM,YAAY,SAAS,CAC5D;EACD,UAAU,uBACT,YAAY,UACZA,0BAAAA,qBAAiC,MAAM,YAAY,SAAS,CAC5D;EACD,UAAU,uBACT,YAAY,UACZA,0BAAAA,qBAAiC,MAAM,YAAY,SAAS,CAC5D;EACD,UAAU,uBACT,YAAY,UACZA,0BAAAA,qBAAiC,MAAM,YAAY,SAAS,CAC5D;EACD,UAAU,uBACT,YAAY,UACZA,0BAAAA,qBAAiC,MAAM,YAAY,SAAS,CAC5D;EACD,WAAW,uBACV,YAAY,WACZA,0BAAAA,qBAAkC,KAAK,YAAY,UAAU,CAC7D;EACD,cAAc,uBACb,YAAY,cACZC,0BAAAA,sBAAsB,YAAY,aAAa,CAC/C;EACD,QAAQ,uBACP,YAAY,QACZD,0BAAAA,qBAA+B,UAAU,YAAY,OAAO,CAC5D;EACD,IAAI,uBACH,YAAY,IACZA,0BAAAA,qBAA2B,MAAM,YAAY,GAAG,CAChD;EACD,UAAU,uBACT,YAAY,UACZA,0BAAAA,qBAAiC,MAAM,YAAY,SAAS,CAC5D;EACD,WAAW,uBACV,YAAY,WACZA,0BAAAA,qBAAkC,MAAM,YAAY,UAAU,CAC9D;EACD,MAAM,uBACL,YAAY,MACZA,0BAAAA,qBAA6B,MAAM,YAAY,KAAK,CACpD;EACD,OAAO,uBACN,YAAY,OACZA,0BAAAA,qBAA8B,MAAM,YAAY,MAAM,CACtD;EACD,OAAO,uBACN,YAAY,OACZE,0BAAAA,eAAe,cAAc,YAAY,MAAM,CAC/C;EACD,OAAO,uBAAgC,YAAY,OAAOC,0BAAAA,eAAe,YAAY,MAAM,CAAC;EAC5F,WAAW,uBACV,YAAY,WACZC,0BAAAA,mBAAmB,cAAc,YAAY,UAAU,CACvD;EACD,OAAO,uBACN,YAAY,OACZJ,0BAAAA,qBAA8B,QAAQ,YAAY,MAAM,CACxD;EACD,MAAM,uBAA+B,YAAY,MAAMK,0BAAAA,eAAe,CAAC;EACvE,CAEwD;;;;;;;;;;AAW1D,MAAM,uCACL,kBACwC;CACxC,MAAM,wBAAwB,EAAE;AAEhC,MAAK,MAAM,OAAO,eAAe;EAChC,MAAM,gBAAgB,cAAc;AAEpC,MAAI,cACH,uBAAsB,QAAsC,YAAY;AACvE,UAAO,cAAc;IACpB,GAAG;IAEH,UAAU,QAAQ,SAAS,KAAK,GAAG;IACnC,CAAC;;;AAKL,QAAOC,0BAAAA,kBAAkB,sBAAsB;;AA4BhD,MAAa,UAuCZ,eAEA,GAAG,wBAC0B;AAC7B,KAAI,eAAe;EAElB,MAAM,CAAC,4BAA4B,mBAAmB;EACtD,IAAI;AACJ,MAAI,OAAO,+BAA+B,cAAc,8BAA8B,KACrF,UAAS;GACR,cAAc;GACd,YAAY;GACZ;MAED,UAAS,EAAE,GAAG,4BAA4B;EAG3C,IAAI;AACJ,MAAI,OAAO,WACV,KAAI,OAAO,OAAO,eAAe,WAChC,cAAaC,2BAAAA,oBACX,MAAM,MAAM,MAAM,UAAU,QAE3B,OAAO,WACP,MACA,MACA,MACA,SAAS,KAAK,GAAG,EACjB,IACA,EACF,6BAA6B,OAAO,aAAa,CACjD;MAED,cAAa,6BAA6B,OAAO,cAAc,OAAO,WAAW;MAGlF,cAAa,6BAA6B,OAAO,aAAa;AAG/D,SAAOC,kBAAAA,UAAU,eAAe,WAAW,CAAC,KAAK,GAAG;OAEpD,QAAO"}