Analizador de contenido

Crea una función que reciba una cadena y devuelva un objeto. El objeto devuelto tendrá una propiedad común para todos los tipos de contenido detectados llamada contentType; los valores posibles para esta propiedad son "HTML", "CSS", "TEXT".

  • Tu función debe poder detectar HTML y CSS; de lo contrario, será simplemente TEXT.
  • Si detectas HTML, el objeto devuelto tendrá una propiedad especial llamada "tags". "tags" es un objeto con los nombres de todas las etiquetas del contenido y cuántas veces aparecen esas etiquetas en el contenido (consulta el ejemplo #3).
  • Si detectas CSS, el objeto devuelto tendrá una propiedad especial llamada cssTargets. cssTargets es un objeto con los nombres de todos los objetivos del contenido y cuántas veces aparecen esas etiquetas en el contenido (consulta el ejemplo #2).
  • Si no detectas HTML ni CSS, el contenido se detecta como TEXT y el objeto tendrá una propiedad especial llamada lineNumber (consulta el ejemplo #1).

Ejemplos

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 } }

Notas

  • Si se ha detectado contenido HTML, el objeto devuelto no puede tener las propiedades cssTargets ni lineNumber, y lo mismo se aplica a cada tipo de detección. Solo la propiedad común contentType permanece dentro del objeto.
  • <!DOCTYPE html> y los comentarios no deben detectarse.
  • El contenido puede estar minificado o no, según sea necesario.