{"version":3,"file":"taiga-ui-dompurify.mjs","sources":["../../../projects/ng-dompurify/lib/tokens/dompurify-hooks.ts","../../../projects/ng-dompurify/lib/tokens/dompurify.ts","../../../projects/ng-dompurify/lib/tokens/dompurify-config.ts","../../../projects/ng-dompurify/lib/tokens/sanitize-style.ts","../../../projects/ng-dompurify/lib/ng-dompurify.service.ts","../../../projects/ng-dompurify/lib/ng-dompurify.pipe.ts","../../../projects/ng-dompurify/lib/taiga-ui-dompurify.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nimport type {NgDompurifyHook} from '../types/ng-dompurify-hook';\n\n/**\n * Token for adding hooks to DOMPurify, see {@link addHook}\n */\nexport const DOMPURIFY_HOOKS = new InjectionToken<readonly NgDompurifyHook[]>(\n    '[DOMPURIFY_HOOKS]: Hooks for DOMPurify',\n    {\n        factory: () => [],\n        providedIn: 'root',\n    },\n);\n","import {DOCUMENT} from '@angular/common';\nimport {inject, InjectionToken} from '@angular/core';\nimport type {DOMPurify} from 'dompurify';\nimport dompurify from 'dompurify';\n\nimport {DOMPURIFY_HOOKS} from './dompurify-hooks';\n\n/**\n * Low-level configured DOMPurify instance token.\n * Hooks are applied once here\n */\nexport const DOMPURIFY = new InjectionToken<DOMPurify>(\n    '[DOMPURIFY]: Configured DOMPurify instance',\n    {\n        providedIn: 'root',\n        factory: () => {\n            const instance = dompurify(inject(DOCUMENT).defaultView!);\n            const addHook = instance.addHook.bind(instance) as any;\n\n            inject(DOMPURIFY_HOOKS).forEach(({name, hook}) => {\n                addHook(name, hook);\n            });\n\n            return instance;\n        },\n    },\n);\n","import {InjectionToken} from '@angular/core';\n\nimport type {NgDompurifyConfig} from '../types/ng-dompurify-config';\n\n/**\n * Token for {@link NgDompurifyConfig}\n */\nexport const DOMPURIFY_CONFIG = new InjectionToken<NgDompurifyConfig>(\n    '[DOMPURIFY_CONFIG]: Config for DOMPurify',\n    {\n        factory: () => ({}),\n        providedIn: 'root',\n    },\n);\n","import {InjectionToken} from '@angular/core';\n\nimport type {SanitizeStyle} from '../types/sanitize-style';\n\n/**\n * A function that takes style rule value as input and returns a sanitized string\n *\n * NOTE: Angular 10 removed CSS sanitation so by default this method does nothing\n */\nexport const SANITIZE_STYLE = new InjectionToken<SanitizeStyle>(\n    '[SANITIZE_STYLE]: A function that sanitizes value for a CSS rule',\n    {\n        factory: () => (value) => value,\n        providedIn: 'root',\n    },\n);\n","import type {Sanitizer} from '@angular/core';\nimport {inject, Injectable, SecurityContext} from '@angular/core';\n\nimport {DOMPURIFY} from './tokens/dompurify';\nimport {DOMPURIFY_CONFIG} from './tokens/dompurify-config';\nimport {SANITIZE_STYLE} from './tokens/sanitize-style';\nimport type {NgDompurifyConfig} from './types/ng-dompurify-config';\n\n/**\n * Implementation of Angular {@link Sanitizer} purifying via DOMPurify\n *\n * use {@link DOMPURIFY_CONFIG} token to provide config ({@link NgDompurifyConfig})\n * use {@link SANITIZE_STYLE} token to provide a style sanitizing method ({@link SanitizeStyle})\n * use {@link DOMPURIFY_HOOKS} token to provide a hooks for DOMPurify ({@link addHook})\n *\n * Ambient type cannot be used without @dynamic https://github.com/angular/angular/issues/23395\n * @dynamic\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class NgDompurifySanitizer implements Sanitizer {\n    private readonly config = inject(DOMPURIFY_CONFIG);\n    private readonly sanitizeStyle = inject(SANITIZE_STYLE);\n    private readonly domPurify = inject(DOMPURIFY);\n\n    public sanitize(\n        context: SecurityContext,\n        value: Record<string, string> | string | null,\n        config: NgDompurifyConfig = this.config,\n    ): string {\n        if (context === SecurityContext.SCRIPT) {\n            throw new Error('DOMPurify does not support SCRIPT context');\n        }\n\n        return context === SecurityContext.STYLE\n            ? this.sanitizeStyle(String(value))\n            : this.domPurify.sanitize(String(value || ''), config);\n    }\n}\n","/* eslint-disable sonarjs/no-angular-bypass-sanitization */\nimport type {PipeTransform} from '@angular/core';\nimport {inject, Pipe, SecurityContext} from '@angular/core';\nimport type {SafeValue} from '@angular/platform-browser';\nimport {DomSanitizer} from '@angular/platform-browser';\n\nimport {NgDompurifySanitizer} from './ng-dompurify.service';\nimport type {NgDompurifyConfig} from './types/ng-dompurify-config';\n\n/**\n * Pipe that transforms dirty content to clean via {@link NgDompurifySanitizer}\n */\n@Pipe({\n    standalone: true,\n    name: 'dompurify',\n})\nexport class NgDompurifyPipe implements PipeTransform {\n    private readonly sanitizer = inject(NgDompurifySanitizer);\n    private readonly domSanitizer = inject(DomSanitizer);\n\n    public transform(\n        value: Record<string, string> | string | null,\n        context: SecurityContext = SecurityContext.HTML,\n        config?: NgDompurifyConfig,\n    ): SafeValue | null {\n        return this.bypassSecurityTrust(\n            context,\n            this.sanitizer.sanitize(context, value, config),\n        );\n    }\n\n    private bypassSecurityTrust(\n        context: SecurityContext,\n        purifiedValue: string,\n    ): SafeValue | null {\n        switch (context) {\n            case SecurityContext.HTML:\n                return this.domSanitizer.bypassSecurityTrustHtml(purifiedValue);\n            case SecurityContext.RESOURCE_URL:\n                return this.domSanitizer.bypassSecurityTrustResourceUrl(purifiedValue);\n            case SecurityContext.SCRIPT:\n                return this.domSanitizer.bypassSecurityTrustScript(purifiedValue);\n            case SecurityContext.STYLE:\n                return this.domSanitizer.bypassSecurityTrustStyle(purifiedValue);\n            case SecurityContext.URL:\n                return this.domSanitizer.bypassSecurityTrustUrl(purifiedValue);\n            case SecurityContext.NONE:\n            default:\n                return null;\n        }\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}