import { splitLines } from '../../../shared/helpers/index.js';
import { criarOcorrencia } from '../../../types/index.js';
export const detectorSvgSecurity = {
    nome: 'detector-svg-security',
    categoria: 'assets',
    descricao: 'Detecta vulnerabilidades em SVG',
    test: (relPath) => /\.svg$/i.test(relPath),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const ocorrencias = [];
        const linhas = splitLines(src);
        if (!/<svg\b/i.test(src)) {
            ocorrencias.push(criarOcorrencia({
                tipo: 'svg-not-valid',
                nivel: 'aviso',
                mensagem: 'Arquivo .svg não contém tag <svg>',
                relPath,
                linha: 1,
                sugestao: 'Verifique se o arquivo é um SVG válido'
            }));
            return ocorrencias;
        }
        linhas.forEach((linha, index) => {
            const numeroLinha = index + 1;
            if (/<script\b/i.test(linha)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'svg-inline-script',
                    nivel: 'erro',
                    mensagem: 'Script inline detectado no SVG',
                    relPath,
                    linha: numeroLinha,
                    sugestao: 'Remova scripts inline do SVG'
                }));
            }
            if (/\son\w+\s*=\s*['"]/i.test(linha)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'svg-event-handler',
                    nivel: 'aviso',
                    mensagem: 'Event handler inline detectado no SVG',
                    relPath,
                    linha: numeroLinha,
                    sugestao: 'Remova event handlers inline (onclick, onload, etc.)'
                }));
            }
            if (/javascript\s*:/i.test(linha)) {
                ocorrencias.push(criarOcorrencia({
                    tipo: 'svg-javascript-url',
                    nivel: 'erro',
                    mensagem: 'URL javascript: detectado no SVG',
                    relPath,
                    linha: numeroLinha,
                    sugestao: 'Remova URLs javascript:'
                }));
            }
        });
        if (!/\bviewBox\s*=\s*['"][^'"]+['"]/i.test(src)) {
            ocorrencias.push(criarOcorrencia({
                tipo: 'svg-missing-viewbox',
                nivel: 'info',
                mensagem: 'SVG sem viewBox - pode não escalar corretamente',
                relPath,
                linha: 1,
                sugestao: 'Adicione viewBox="0 0 width height"'
            }));
        }
        if (!/\bwidth\s*=\s*['"]\d+['"]/i.test(src) || !/\bheight\s*=\s*['"]\d+['"]/i.test(src)) {
            ocorrencias.push(criarOcorrencia({
                tipo: 'svg-missing-dimensions',
                nivel: 'info',
                mensagem: 'SVG sem width/height definidos',
                relPath,
                linha: 1,
                sugestao: 'Adicione width e height para layout estável'
            }));
        }
        return ocorrencias;
    }
};
//# sourceMappingURL=detector-svg-security.js.map