Analisador de conteúdo

Crie uma função que receba uma string e retorne um objeto. O objeto retornado terá uma propriedade comum a todos os tipos de conteúdo detectados chamada contentType; os valores possíveis para essa propriedade são "HTML", "CSS", "TEXT".

  • Sua função deve ser capaz de detectar HTML e CSS; caso contrário, será simplesmente TEXT.
  • Se você detectar HTML, o objeto retornado terá uma propriedade especial chamada "tags". "tags" é um objeto com os nomes de todas as tags do conteúdo e quantas vezes essas tags aparecem no conteúdo (veja o exemplo #3).
  • Se você detectar CSS, o objeto retornado terá uma propriedade especial chamada cssTargets. cssTargets é um objeto com os nomes de todos os alvos do conteúdo e quantas vezes essas tags aparecem no conteúdo (veja o exemplo #2).
  • Se você não detectar HTML nem CSS, o conteúdo será detectado como TEXT e o objeto terá uma propriedade especial chamada lineNumber (veja o exemplo #1).

Exemplos

analyzeContent("this is a test\nSeems to work")
➞ { contentType: "TEXT", lineNumber: 2 }

analyzeContent("body{blabla} a{color:#fff} a{ padding:0}")
➞ { contentType: "CSS", cssTargets: { body: 1, a: 2 } }

analyzeContent("<html><div></div><div></div></html>")
➞ { contentType: "HTML", tags: { html: 1, div: 2 } }

Observações

  • Se o conteúdo HTML for detectado, o objeto retornado não poderá ter as propriedades cssTargets e lineNumber, e o mesmo se aplica a cada tipo de detecção. Somente a propriedade comum contentType permanecerá dentro do objeto.
  • <!DOCTYPE html> e comentários não devem ser detectados.
  • O conteúdo pode ser minificado ou não, conforme necessário.