ngx-highlightjs
Version:
Instant code highlighting, auto-detect language, super easy to use.
31 lines • 3.72 kB
JavaScript
/**
* Enable usage of the library together with "trusted-types" HTTP Content-Security-Policy (CSP)
*
* Can be added to angular.json -> serve -> options -> headers to try it out in DEV mode
* "Content-Security-Policy": "trusted-types ngx-highlightjs; require-trusted-types-for 'script'"
*
* Read more...
* Angular Security: https://angular.io/guide/security#enforcing-trusted-types
* Trusted Types: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types
*/
let policy;
function getPolicy() {
if (!policy) {
try {
policy = window?.trustedTypes?.createPolicy('ngx-highlightjs', {
createHTML: (s) => s,
});
}
catch {
// trustedTypes.createPolicy throws if called with a name that is
// already registered, even in report-only mode. Until the API changes,
// catch the error not to break the applications functionally. In such
// cases, the code will fall back to using strings.
}
}
return policy;
}
export function trustedHTMLFromStringBypass(html) {
return getPolicy()?.createHTML(html) || html;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ1c3RlZC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaWdobGlnaHRqcy9zcmMvbGliL3RydXN0ZWQtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBQ0gsSUFBSSxNQUFNLENBQUM7QUFFWCxTQUFTLFNBQVM7SUFDaEIsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUNYLElBQUk7WUFDRixNQUFNLEdBQUksTUFBYyxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3RFLFVBQVUsRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUM3QixDQUFDLENBQUM7U0FDSjtRQUFDLE1BQU07WUFDTixpRUFBaUU7WUFDakUsdUVBQXVFO1lBQ3ZFLHNFQUFzRTtZQUN0RSxtREFBbUQ7U0FDcEQ7S0FDRjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsSUFBWTtJQUN0RCxPQUFPLFNBQVMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmFibGUgdXNhZ2Ugb2YgdGhlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBcInRydXN0ZWQtdHlwZXNcIiBIVFRQIENvbnRlbnQtU2VjdXJpdHktUG9saWN5IChDU1ApXHJcbiAqXHJcbiAqIENhbiBiZSBhZGRlZCB0byBhbmd1bGFyLmpzb24gLT4gc2VydmUgLT4gb3B0aW9ucyAtPiBoZWFkZXJzIHRvIHRyeSBpdCBvdXQgaW4gREVWIG1vZGVcclxuICogXCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiOiBcInRydXN0ZWQtdHlwZXMgbmd4LWhpZ2hsaWdodGpzOyByZXF1aXJlLXRydXN0ZWQtdHlwZXMtZm9yICdzY3JpcHQnXCJcclxuICpcclxuICogUmVhZCBtb3JlLi4uXHJcbiAqIEFuZ3VsYXIgU2VjdXJpdHk6IGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9zZWN1cml0eSNlbmZvcmNpbmctdHJ1c3RlZC10eXBlc1xyXG4gKiBUcnVzdGVkIFR5cGVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1TZWN1cml0eS1Qb2xpY3kvdHJ1c3RlZC10eXBlc1xyXG4gKi9cclxubGV0IHBvbGljeTtcclxuXHJcbmZ1bmN0aW9uIGdldFBvbGljeSgpIHtcclxuICBpZiAoIXBvbGljeSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcG9saWN5ID0gKHdpbmRvdyBhcyBhbnkpPy50cnVzdGVkVHlwZXM/LmNyZWF0ZVBvbGljeSgnbmd4LWhpZ2hsaWdodGpzJywge1xyXG4gICAgICAgIGNyZWF0ZUhUTUw6IChzOiBzdHJpbmcpID0+IHMsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIC8vIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kgdGhyb3dzIGlmIGNhbGxlZCB3aXRoIGEgbmFtZSB0aGF0IGlzXHJcbiAgICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCwgZXZlbiBpbiByZXBvcnQtb25seSBtb2RlLiBVbnRpbCB0aGUgQVBJIGNoYW5nZXMsXHJcbiAgICAgIC8vIGNhdGNoIHRoZSBlcnJvciBub3QgdG8gYnJlYWsgdGhlIGFwcGxpY2F0aW9ucyBmdW5jdGlvbmFsbHkuIEluIHN1Y2hcclxuICAgICAgLy8gY2FzZXMsIHRoZSBjb2RlIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHN0cmluZ3MuXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBwb2xpY3k7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cnVzdGVkSFRNTEZyb21TdHJpbmdCeXBhc3MoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gZ2V0UG9saWN5KCk/LmNyZWF0ZUhUTUwoaHRtbCkgfHwgaHRtbDtcclxufVxyXG4iXX0=