{"version":3,"file":"EmphasisHtmlTransformer.mjs","sources":["../../src/emphasis/EmphasisHtmlTransformer.ts"],"sourcesContent":["const ESCAPED_OPENING_CHEVRON = '&lt;';\nconst ESCAPED_CLOSING_CHEVRON = '&gt;';\n\ntype Tags = {\n  transformed: {\n    opening: string;\n    closing: string;\n  };\n  escapedRegex: {\n    opening: RegExp;\n    closing: RegExp;\n  };\n};\n\nclass EmphasisHtmlTransformer {\n  tags: Tags[];\n\n  constructor(whitelistedTags?: string[]) {\n    this.tags = (whitelistedTags || []).map((tag) => {\n      return {\n        transformed: {\n          opening: `<em class=\"emphasis emphasis--${tag}\">`,\n          closing: '</em>',\n        },\n        escapedRegex: {\n          opening: new RegExp(`${ESCAPED_OPENING_CHEVRON}${tag}${ESCAPED_CLOSING_CHEVRON}`, 'g'),\n          closing: new RegExp(`${ESCAPED_OPENING_CHEVRON}/${tag}${ESCAPED_CLOSING_CHEVRON}`, 'g'),\n        },\n      };\n    });\n  }\n\n  // Algorithm:\n  // 1) Escape all dangerous characters (<,>,&)\n  // 2) Replace all escaped, whitelisted tags with styled spans.\n  // 3) Transform new line characters to `<br />`s\n  //\n  // Note: for simplicity this doesn't support tags with non-standard whitespaces, e.g. <positive></ positive>\n  transform(unsafe: string): string | null {\n    if (!unsafe) {\n      return null;\n    }\n\n    const safe = unsafe.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\n    return this.tags\n      .reduce((accumulator, tag) => {\n        return accumulator\n          .replace(tag.escapedRegex.opening, tag.transformed.opening)\n          .replace(tag.escapedRegex.closing, tag.transformed.closing);\n      }, safe)\n      .replace(/\\\\n|\\n/g, '<br />');\n  }\n}\n\nexport default EmphasisHtmlTransformer;\n"],"names":["ESCAPED_OPENING_CHEVRON","ESCAPED_CLOSING_CHEVRON","EmphasisHtmlTransformer","tags","constructor","whitelistedTags","map","tag","transformed","opening","closing","escapedRegex","RegExp","transform","unsafe","safe","replace","reduce","accumulator"],"mappings":"AAAA,MAAMA,uBAAuB,GAAG,MAAM;AACtC,MAAMC,uBAAuB,GAAG,MAAM;AAatC,MAAMC,uBAAuB,CAAA;EAC3BC,IAAI;EAEJC,WAAAA,CAAYC,eAA0B,EAAA;IACpC,IAAI,CAACF,IAAI,GAAG,CAACE,eAAe,IAAI,EAAE,EAAEC,GAAG,CAAEC,GAAG,IAAI;MAC9C,OAAO;AACLC,QAAAA,WAAW,EAAE;UACXC,OAAO,EAAE,CAAA,8BAAA,EAAiCF,GAAG,CAAA,EAAA,CAAI;AACjDG,UAAAA,OAAO,EAAE;SACV;AACDC,QAAAA,YAAY,EAAE;AACZF,UAAAA,OAAO,EAAE,IAAIG,MAAM,CAAC,CAAA,EAAGZ,uBAAuB,CAAA,EAAGO,GAAG,CAAA,EAAGN,uBAAuB,CAAA,CAAE,EAAE,GAAG,CAAC;AACtFS,UAAAA,OAAO,EAAE,IAAIE,MAAM,CAAC,CAAA,EAAGZ,uBAAuB,CAAA,CAAA,EAAIO,GAAG,CAAA,EAAGN,uBAAuB,CAAA,CAAE,EAAE,GAAG;AACvF;OACF;AACH,IAAA,CAAC,CAAC;AACJ,EAAA;AAEA;AACA;AACA;AACA;AACA;AACA;EACAY,SAASA,CAACC,MAAc,EAAA;IACtB,IAAI,CAACA,MAAM,EAAE;AACX,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,MAAMC,IAAI,GAAGD,MAAM,CAACE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtF,OAAO,IAAI,CAACb,IAAI,CACbc,MAAM,CAAC,CAACC,WAAW,EAAEX,GAAG,KAAI;AAC3B,MAAA,OAAOW,WAAW,CACfF,OAAO,CAACT,GAAG,CAACI,YAAY,CAACF,OAAO,EAAEF,GAAG,CAACC,WAAW,CAACC,OAAO,CAAC,CAC1DO,OAAO,CAACT,GAAG,CAACI,YAAY,CAACD,OAAO,EAAEH,GAAG,CAACC,WAAW,CAACE,OAAO,CAAC;IAC/D,CAAC,EAAEK,IAAI,CAAC,CACPC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;AACjC,EAAA;AACD;;;;"}