import * as ReactDOMServer from 'react-dom/server'; import { AxePuppeteer } from 'axe-puppeteer'; import * as puppeteer from 'puppeteer'; import { convertAxeToSarif, SarifLog } from 'axe-sarif-converter'; import { Stylesheet, InjectionMode, resetIds } from 'office-ui-fabric-react'; const disabledAxeRules = [ 'document-title', 'html-has-lang', 'landmark-one-main', 'page-has-heading-one', 'region', 'bypass', ]; // eslint-disable-next-line @typescript-eslint/no-explicit-any function renderTestHtml(element: React.ReactElement): string { resetIds(); const stylesheet = Stylesheet.getInstance(); stylesheet.reset(); stylesheet.setConfig({ injectionMode: InjectionMode.none }); const htmlPart = ReactDOMServer.renderToStaticMarkup(element); const cssPart = stylesheet.getRules(); return ` ${htmlPart} `; } // eslint-disable-next-line @typescript-eslint/no-explicit-any export async function getSarifReport(browser: puppeteer.Browser, element: React.ReactElement): Promise { const page = await browser.newPage(); const testHtml = renderTestHtml(element); await page.setContent(testHtml); const axeReport = await new AxePuppeteer(page).disableRules(disabledAxeRules).analyze(); const sarifReport = convertAxeToSarif(axeReport); await page.close(); return sarifReport; }