{"version":3,"file":"micro-markup.es.min.js","sources":["../../../packages/coveo-search/src/tools/micro-markup.ts"],"sourcesContent":["type AttrChecker = (attr: Attr) => boolean;\nconst createMicroMarkup = (allowed: Record<string, (string | AttrChecker)[]>) => {\n    const allowedTags = Object.entries(allowed)\n        .reduce((map, [tag, checkers]) => map.set(\n            tag.toUpperCase(),\n            checkers.map((checker) => {\n                if (typeof checker === \"function\") { return checker; }\n                return ({ name }: Attr) => name === checker;\n            })\n        ), new Map<string, AttrChecker[]>())\n\n    return (innerHTML: string) => {\n        const sandbox = Object.assign(document.createElement('div'), { innerHTML })\n        const allNodes = sandbox.querySelectorAll(\"*\");\n        for (let i = 0; i < allNodes.length; i++) {\n            const node = allNodes[i];\n            const attrsChekers = allowedTags.get(node.tagName)\n            if (!attrsChekers) {\n                node.remove();\n                console.error(TypeError(`Not allowed tag <${node.tagName.toLowerCase()}/>`));\n                continue;\n            }\n            const attributes = node.attributes\n            for (let j = attributes.length - 1; j >= 0; j--) {\n                const attribute = attributes[j];\n                if (!attribute) { continue; }\n                if (!attrsChekers.some((attrsCheker) => attrsCheker(attribute))) {\n                    attributes.removeNamedItem(attribute.name)\n                    console.error(TypeError(\n                        `Not allowed attribute <${node.tagName.toLowerCase()} ${attribute.name}=\"${attribute.value}\"/>`\n                    ))\n                }\n            }\n            if (node.tagName === \"A\") {\n                node.setAttribute(\"rel\", \"noopener noreferrer\")\n                node.setAttribute(\"target\", \"_blank\")\n            }\n        }\n        return sandbox.innerHTML\n    }\n}\n\nexport default createMicroMarkup"],"names":["createMicroMarkup","allowed","allowedTags","Object","entries","reduce","map","tag","checkers","set","toUpperCase","checker","name","Map","innerHTML","sandbox","assign","document","createElement","allNodes","querySelectorAll","i","length","node","attrsChekers","get","tagName","remove","error","TypeError","toLowerCase","attributes","j","attribute","some","attrsCheker","removeNamedItem","console","value","setAttribute"],"mappings":"AACMA,MAAAA,IAAoBA,CAACC,MAAsD;AAC7E,QAAMC,IAAcC,OAAOC,QAAQH,CAAO,EACrCI,OAAO,CAACC,GAAK,CAACC,GAAKC,CAAQ,MAAMF,EAAIG,IAClCF,EAAIG,YACJF,GAAAA,EAASF,IAAKK,CAAYA,MAClB,OAAOA,KAAY,aAAqBA,IACrC,CAAC;AAAA,IAAEC,MAAAA;AAAAA,EAAAA,MAAiBA,MAASD,CACvC,CACL,GAAG,oBAAIE,KAA4B;AAEvC,SAAO,CAACC,MAAsB;AAC1B,UAAMC,IAAUZ,OAAOa,OAAOC,SAASC,cAAc,KAAK,GAAG;AAAA,MAAEJ,WAAAA;AAAAA,IAAAA,CAAW,GACpEK,IAAWJ,EAAQK,iBAAiB,GAAG;AAC7C,aAASC,IAAI,GAAGA,IAAIF,EAASG,QAAQD,KAAK;AAChCE,YAAAA,IAAOJ,EAASE,CAAC,GACjBG,IAAetB,EAAYuB,IAAIF,EAAKG,OAAO;AACjD,UAAI,CAACF,GAAc;AACfD,QAAAA,EAAKI,OAAO,GACJC,QAAAA,MAAMC,UAAU,oBAAoBN,EAAKG,QAAQI,YAAa,CAAA,IAAI,CAAC;AAC3E;AAAA,MACJ;AACA,YAAMC,IAAaR,EAAKQ;AACxB,eAASC,IAAID,EAAWT,SAAS,GAAGU,KAAK,GAAGA,KAAK;AACvCC,cAAAA,IAAYF,EAAWC,CAAC;AAC9B,QAAKC,MACAT,EAAaU,KAAMC,OAAgBA,EAAYF,CAAS,CAAC,MAC/CG,EAAAA,gBAAgBH,EAAUrB,IAAI,GACzCyB,QAAQT,MAAMC,UACV,0BAA0BN,EAAKG,QAAQI,YAAa,CAAA,IAAIG,EAAUrB,IAAI,KAAKqB,EAAUK,KAAK,KAC9F,CAAC;AAAA,MAET;AACIf,MAAAA,EAAKG,YAAY,QACZa,EAAAA,aAAa,OAAO,qBAAqB,GACzCA,EAAAA,aAAa,UAAU,QAAQ;AAAA,IAE5C;AACA,WAAOxB,EAAQD;AAAAA,EAAAA;AAEvB;"}