/**
* @license Copyright 2017 The Lighthouse Authors. Todos os direitos reservados.
* Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar este arquivo, exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em http://www.apache.org/licenses/LICENSE-2.0
* A menos que exigido pela lei aplicável ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença para obter as permissões e limitações específicas do idioma sob a Licença.
*/

/**
* @fileoverview Auditoria de diagnóstico que lista todas as bibliotecas JavaScript detectadas na página
*/


import  { Audit }  de  '../audit.js' ;
import  *  como  i18n  de  '../../lib/i18n/i18n.js' ;

const  UIStrings  =  {
  /** Título de um auditório do Lighthouse que fornece detalhes sobre as bibliotecas Javascript usado na página. */
  título : 'Bibliotecas JavaScript detectados' ,
  /** Descrição de um auditório Lighthouse que informa ao usuário o que este auditório está detectando. Isso é exibido depois que um usuário expande a seção para ver mais. Sem limites de comprimento de caracteres. */
  description : 'Todas as bibliotecas JavaScript front-end detectados na página. [Saiba mais sobre esta auditoria de diagnóstico de detecção de biblioteca JavaScript](https://developer.chrome.com/docs/lighthouse/best-practices/js-libraries/).' ,
  /** Rótulo para uma coluna em uma tabela de dados; entradas serão os números de versão das bibliotecas Javascript identificados. */
  colunaVersão : 'Versão' ,
} ;

const  str_  =  i18n . createIcuMessageFn ( import . meta . url ,  UIStrings ) ;

class  JsLibrariesAudit  extends  Audit  {
  /**
   * @return { LH.Audit.Meta }
   */
  estático  obter  meta ( )  {
    retornar  {
      id : 'js-libraries' ,
      título : str_ ( UIStrings . título ) ,
      scoreDisplayMode : Auditoria . SCORING_MODES . INFORMATIVO ,
      descrição : str_ ( UIStrings . descrição ) ,
      Artefatos necessários : [ 'Pilhas' ] ,
    } ;
  }

  /**
   * @param { LH.Artifacts } artefatos
   * @return { LH.Audit.Product }
   */
   auditoria estática ( artefatos )  {
    const  libDetails  =  artefatos . Pilhas
      . filtro ( pilha  =>  pilha . detector  ===  'js' )
      // Não mostra os atalhos na tabela.
      . filtro ( stack  =>  ! stack . id . endsWith ( '-fast' ) )
      . mapa ( pilha  =>  ( {
        nome : pilha . nome ,
        versão : pilha . versão ,
        npm : pilha . npm ,
      } ) ) ;

    /** @type {LH.Audit.Details.Table['headings']} */
     cabeçalhos  const =  [
      { key : 'name' ,  valueType : 'text' ,  label : str_ ( i18n . UIStrings . columnName ) } ,
      { key : 'version' ,  valueType : 'text' ,  label : str_ ( UIStrings . columnVersion ) } ,
    ] ;
    const  detalhes  =  Auditoria . makeTableDetails ( títulos ,  libDetails ) ;

    const  debugData  =  {
      type : /** @type {const} */  ( 'debugdata' ) ,
      pilhas : artefatos . Pilhas . mapa ( pilha  =>  {
        retornar  {
          id : pilha . identificação ,
          versão : pilha . versão ,
        } ;
      } ) ,
    } ;

    if  ( ! libDetails . length )  {
      return  { score : null ,  notApplicable : true } ;
    }

    retornar  {
      score : 1 ,  // Sempre passe por enquanto.
      detalhes : {
        ... detalhes ,
        debugData ,
      } ,
    } ;
  }
}

exportação  padrão  JsLibrariesAudit ;
export  { UIStrings } ;